@steveencues/starter-react-ui 0.0.0-stage → 1.0.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.
Files changed (60) hide show
  1. package/README.md +392 -2
  2. package/dist/favicon.svg +1 -0
  3. package/dist/icons.svg +24 -0
  4. package/dist/index.cjs +2 -0
  5. package/dist/index.cjs.map +1 -0
  6. package/dist/index.d.ts +1 -0
  7. package/dist/index.js +602 -0
  8. package/dist/index.js.map +1 -0
  9. package/dist/libs/aplicacion/contexts/index.d.ts +2 -0
  10. package/dist/libs/aplicacion/contexts/theme.context.d.ts +7 -0
  11. package/dist/libs/aplicacion/contexts/translate.context.d.ts +7 -0
  12. package/dist/libs/aplicacion/hooks/index.d.ts +3 -0
  13. package/dist/libs/aplicacion/hooks/use-language.d.ts +8 -0
  14. package/dist/libs/aplicacion/hooks/use-theme-preference.hook.d.ts +7 -0
  15. package/dist/libs/aplicacion/hooks/use-theme.d.ts +8 -0
  16. package/dist/libs/aplicacion/index.d.ts +5 -0
  17. package/dist/libs/aplicacion/providers/index.d.ts +2 -0
  18. package/dist/libs/aplicacion/providers/theme-provider.d.ts +9 -0
  19. package/dist/libs/aplicacion/providers/translate.provider.d.ts +8 -0
  20. package/dist/libs/aplicacion/services/encryption.service.d.ts +18 -0
  21. package/dist/libs/aplicacion/services/index.d.ts +1 -0
  22. package/dist/libs/aplicacion/utils/base64.util.d.ts +16 -0
  23. package/dist/libs/aplicacion/utils/crypto-api.util.d.ts +7 -0
  24. package/dist/libs/aplicacion/utils/index.d.ts +6 -0
  25. package/dist/libs/aplicacion/utils/storage-api.util.d.ts +7 -0
  26. package/dist/libs/aplicacion/utils/text-encoding.util.d.ts +16 -0
  27. package/dist/libs/aplicacion/utils/theme.utils.d.ts +26 -0
  28. package/dist/libs/aplicacion/utils/translation.utils.d.ts +64 -0
  29. package/dist/libs/components/Button/Button.d.ts +1 -0
  30. package/dist/libs/components/Button/button.types.d.ts +1 -0
  31. package/dist/libs/components/Button/index.d.ts +1 -0
  32. package/dist/libs/components/Card/Card.d.ts +1 -0
  33. package/dist/libs/components/Card/card.types.d.ts +1 -0
  34. package/dist/libs/components/Card/index.d.ts +1 -0
  35. package/dist/libs/components/Input/Input.d.ts +1 -0
  36. package/dist/libs/components/Input/index.d.ts +1 -0
  37. package/dist/libs/components/Input/input.types.d.ts +1 -0
  38. package/dist/libs/components/index.d.ts +1 -0
  39. package/dist/libs/components/styles/index.d.ts +1 -0
  40. package/dist/libs/domain/constants/encrypted-preference.constanst.d.ts +7 -0
  41. package/dist/libs/domain/constants/index.d.ts +3 -0
  42. package/dist/libs/domain/constants/theme-css-variable.const.d.ts +69 -0
  43. package/dist/libs/domain/constants/translation.constants.d.ts +1 -0
  44. package/dist/libs/domain/enums/index.d.ts +1 -0
  45. package/dist/libs/domain/enums/translation-regex.enum.d.ts +8 -0
  46. package/dist/libs/domain/index.d.ts +4 -0
  47. package/dist/libs/domain/interface/index.d.ts +2 -0
  48. package/dist/libs/domain/interface/theme.interface.d.ts +204 -0
  49. package/dist/libs/domain/interface/translation.interface.d.ts +56 -0
  50. package/dist/libs/domain/types/index.d.ts +3 -0
  51. package/dist/libs/domain/types/theme-name.types.d.ts +6 -0
  52. package/dist/libs/domain/types/theme.types.d.ts +64 -0
  53. package/dist/libs/domain/types/translation.types.d.ts +33 -0
  54. package/dist/libs/index.d.ts +4 -0
  55. package/dist/libs/infraestructura/index.d.ts +1 -0
  56. package/dist/libs/infraestructura/storage/encrypted-preference.storage.d.ts +19 -0
  57. package/dist/libs/infraestructura/storage/index.d.ts +3 -0
  58. package/dist/libs/infraestructura/storage/language-preference.storage.d.ts +18 -0
  59. package/dist/libs/infraestructura/storage/theme-preference.storage.d.ts +19 -0
  60. package/package.json +56 -3
@@ -0,0 +1,204 @@
1
+ import { ThemeName } from '..';
2
+ import { ReactNode } from 'react';
3
+ /**
4
+ * @description Contrato publico del contexto de temas.
5
+ * @author Steveen Cues
6
+ * @version 1.0.0
7
+ */
8
+ export interface IThemeContextValue {
9
+ readonly theme: AppTheme;
10
+ readonly themeName: ThemeName;
11
+ readonly themes: readonly AppTheme[];
12
+ readonly setTheme: (theme: ThemeName) => void;
13
+ }
14
+ /**
15
+ * @description Propiedades del proveedor de temas.
16
+ * @author Steveen Cues
17
+ * @version 1.0.0
18
+ */
19
+ export interface IThemeProviderProps {
20
+ readonly themes: readonly AppTheme[];
21
+ readonly initialTheme: ThemeName;
22
+ readonly themeEncryptionKey: string;
23
+ readonly children: ReactNode;
24
+ }
25
+ /**
26
+ * @description Colores del contenido textual.
27
+ * @author Steveen Cues
28
+ * @version 1.0.0
29
+ */
30
+ export interface ThemeTextColors {
31
+ readonly primary: string;
32
+ readonly secondary: string;
33
+ readonly muted: string;
34
+ readonly disabled: string;
35
+ readonly inverse: string;
36
+ readonly link: string;
37
+ readonly linkHover: string;
38
+ }
39
+ /**
40
+ * @description Colores utilizados por las superficies.
41
+ * @author Steveen Cues
42
+ * @version 1.0.0
43
+ */
44
+ export interface ThemeSurfaceColors {
45
+ readonly background: string;
46
+ readonly surface: string;
47
+ readonly surfaceElevated: string;
48
+ readonly surfaceHover: string;
49
+ readonly surfaceActive: string;
50
+ readonly surfaceDisabled: string;
51
+ }
52
+ /**
53
+ * @description Colores de los estados semanticos.
54
+ * @author Steveen Cues
55
+ * @version 1.0.0
56
+ */
57
+ export interface ThemeStateColors {
58
+ readonly success: string;
59
+ readonly successBackground: string;
60
+ readonly warning: string;
61
+ readonly warningBackground: string;
62
+ readonly error: string;
63
+ readonly errorBackground: string;
64
+ readonly info: string;
65
+ readonly infoBackground: string;
66
+ }
67
+ /**
68
+ * @description Colores de identidad visual de la aplicacion.
69
+ * @author Steveen Cues
70
+ * @version 1.0.0
71
+ */
72
+ export interface ThemeBrandColors {
73
+ readonly primary: string;
74
+ readonly primaryHover: string;
75
+ readonly primaryActive: string;
76
+ readonly primaryContrast: string;
77
+ readonly secondary: string;
78
+ readonly secondaryHover: string;
79
+ readonly secondaryActive: string;
80
+ readonly secondaryContrast: string;
81
+ readonly accent: string;
82
+ readonly accentHover: string;
83
+ readonly accentContrast: string;
84
+ }
85
+ /**
86
+ * @description Colores para bordes e indicadores de interaccion.
87
+ * @author Steveen Cues
88
+ * @version 1.0.0
89
+ */
90
+ export interface ThemeBorderColors {
91
+ readonly default: string;
92
+ readonly subtle: string;
93
+ readonly strong: string;
94
+ readonly focus: string;
95
+ readonly hover: string;
96
+ readonly active: string;
97
+ readonly disabled: string;
98
+ }
99
+ /**
100
+ * @description Configuracion de las sombras.
101
+ * @author Steveen Cues
102
+ * @version 1.0.0
103
+ */
104
+ export interface ThemeShadowColors {
105
+ readonly color: string;
106
+ readonly subtle: string;
107
+ readonly small: string;
108
+ readonly medium: string;
109
+ readonly large: string;
110
+ readonly glow: string;
111
+ }
112
+ /**
113
+ * @description Configuracion de efectos visuales.
114
+ * @author Steveen Cues
115
+ * @version 1.0.0
116
+ */
117
+ export interface ThemeEffects {
118
+ readonly overlay: string;
119
+ readonly backdrop: string;
120
+ readonly blur: string;
121
+ readonly blurStrong: string;
122
+ readonly glassBackground: string;
123
+ readonly glassBorder: string;
124
+ }
125
+ /**
126
+ * @description Configuracion tipografica del tema.
127
+ * Sus valores pueden representar colores o tokens CSS.
128
+ * @author Steveen Cues
129
+ * @version 1.0.0
130
+ */
131
+ export interface ThemeTypography {
132
+ readonly heading: {
133
+ readonly primary: string;
134
+ readonly secondary: string;
135
+ readonly muted: string;
136
+ };
137
+ readonly body: {
138
+ readonly primary: string;
139
+ readonly secondary: string;
140
+ readonly muted: string;
141
+ };
142
+ readonly label: {
143
+ readonly primary: string;
144
+ readonly secondary: string;
145
+ readonly muted: string;
146
+ };
147
+ readonly button: {
148
+ readonly primary: string;
149
+ readonly secondary: string;
150
+ };
151
+ }
152
+ /**
153
+ * @description Paleta completa de tokens visuales del tema.
154
+ * @author Steveen Cues
155
+ * @version 1.0.0
156
+ */
157
+ export interface ThemeColors {
158
+ readonly surface: ThemeSurfaceColors;
159
+ readonly text: ThemeTextColors;
160
+ readonly brand: ThemeBrandColors;
161
+ readonly state: ThemeStateColors;
162
+ readonly border: ThemeBorderColors;
163
+ readonly shadow: ThemeShadowColors;
164
+ readonly effects: ThemeEffects;
165
+ readonly typography: ThemeTypography;
166
+ }
167
+ /**
168
+ * @description Configuracion visual completa de un tema.
169
+ * @author Steveen Cues
170
+ * @version 1.0.0
171
+ */
172
+ export interface AppTheme {
173
+ readonly name: ThemeName;
174
+ readonly colors: ThemeColors;
175
+ }
176
+ /**
177
+ * @description Defines the configuration required to manage theme preferences.
178
+ * @author Steveen Cues
179
+ * @version 1.0.0
180
+ */
181
+ export interface ThemePreferenceConfiguration {
182
+ readonly themes: IThemeProviderProps["themes"];
183
+ readonly initialTheme: IThemeProviderProps["initialTheme"];
184
+ readonly themeEncryptionKey: IThemeProviderProps["themeEncryptionKey"];
185
+ }
186
+ /**
187
+ * @description Represents the current theme preference state and its configuration.
188
+ * @author Steveen Cues
189
+ * @version 1.0.0
190
+ */
191
+ export interface ThemePreferenceState extends ThemePreferenceConfiguration {
192
+ readonly themeName: ThemeName;
193
+ readonly isLoaded: boolean;
194
+ }
195
+ /**
196
+ * @description Defines the result returned by the theme preference hook.
197
+ * @author Steveen Cues
198
+ * @version 1.0.0
199
+ */
200
+ export interface ThemePreferenceResult {
201
+ readonly themeName: ThemeName;
202
+ readonly isPreferenceLoaded: boolean;
203
+ readonly setThemeName: (nextTheme: ThemeName) => void;
204
+ }
@@ -0,0 +1,56 @@
1
+ import { TranslationCatalog, TranslationParams } from '../..';
2
+ import { ReactNode } from 'react';
3
+ /**
4
+ * @description Estado publico del contexto de traducciones.
5
+ * @author Steveen Cues
6
+ * @version 1.0.0
7
+ */
8
+ export interface ILanguageContextValue {
9
+ readonly language: string;
10
+ readonly languages: readonly string[];
11
+ readonly setLanguage: (language: string) => void;
12
+ readonly t: (key: string, params?: TranslationParams) => string;
13
+ }
14
+ /**
15
+ * @description Propiedades del proveedor de traducciones.
16
+ * @author Steveen Cues
17
+ * @version 1.0.0
18
+ */
19
+ export interface ITranslateProviderProps {
20
+ readonly translations: TranslationCatalog;
21
+ readonly initialLanguage: string;
22
+ readonly fallbackLanguage?: string;
23
+ readonly children: ReactNode;
24
+ readonly languageEncryptionKey: string;
25
+ }
26
+ /**
27
+ * @description Defines the configuration required to manage language preferences.
28
+ * @author Steveen Cues
29
+ * @version 1.0.0
30
+ */
31
+ export interface LanguagePreferenceConfiguration {
32
+ readonly translations: ITranslateProviderProps["translations"];
33
+ readonly initialLanguage: ITranslateProviderProps["initialLanguage"];
34
+ readonly fallbackLanguage: string;
35
+ readonly languageEncryptionKey: ITranslateProviderProps["languageEncryptionKey"];
36
+ readonly languages: readonly string[];
37
+ }
38
+ /**
39
+ * @description Represents the current language preference state and configuration.
40
+ * @author Steveen Cues
41
+ * @version 1.0.0
42
+ */
43
+ export interface LanguagePreferenceState extends LanguagePreferenceConfiguration {
44
+ readonly selectedLanguage: string;
45
+ readonly isLoaded: boolean;
46
+ }
47
+ /**
48
+ * @description Defines the result returned by the language preference hook.
49
+ * @author Steveen Cues
50
+ * @version 1.0.0
51
+ */
52
+ export interface LanguagePreferenceResult {
53
+ readonly language: string;
54
+ readonly isLoaded: boolean;
55
+ readonly setLanguage: (language: string) => void;
56
+ }
@@ -0,0 +1,3 @@
1
+ export * from './translation.types';
2
+ export * from './theme.types';
3
+ export * from './theme-name.types';
@@ -0,0 +1,6 @@
1
+ /**
2
+ * @description Identificadores de los temas disponibles.
3
+ * @author Steveen Cues
4
+ * @version 1.0.0
5
+ */
6
+ export type ThemeName = "light" | "dark" | "magenta" | "semi-dark";
@@ -0,0 +1,64 @@
1
+ import { ThemePreferenceState } from '..';
2
+ import { CSSProperties, Dispatch, SetStateAction } from 'react';
3
+ /**
4
+ * @description Defines custom CSS variables supported by the library.
5
+ * @author Steveen Cues
6
+ * @version 1.0.0
7
+ */
8
+ export type ThemeCssVariables = CSSProperties & {
9
+ [property: `--rui-${string}`]: string;
10
+ };
11
+ /**
12
+ * @description Defines CSS variables for surface colors.
13
+ * @author Steveen Cues
14
+ * @version 1.0.0
15
+ */
16
+ export type SurfaceVariables = Pick<ThemeCssVariables, "--rui-surface-background" | "--rui-surface-surface" | "--rui-surface-surface-elevated" | "--rui-surface-surface-hover" | "--rui-surface-surface-active" | "--rui-surface-surface-disabled">;
17
+ /**
18
+ * @description Defines CSS variables for text colors.
19
+ * @author Steveen Cues
20
+ * @version 1.0.0
21
+ */
22
+ export type TextVariables = Pick<ThemeCssVariables, "--rui-text-primary" | "--rui-text-secondary" | "--rui-text-muted" | "--rui-text-disabled" | "--rui-text-inverse" | "--rui-text-link" | "--rui-text-link-hover">;
23
+ /**
24
+ * @description Defines CSS variables for brand colors.
25
+ * @author Steveen Cues
26
+ * @version 1.0.0
27
+ */
28
+ export type BrandVariables = Pick<ThemeCssVariables, "--rui-brand-primary" | "--rui-brand-primary-hover" | "--rui-brand-primary-active" | "--rui-brand-primary-contrast" | "--rui-brand-secondary" | "--rui-brand-secondary-hover" | "--rui-brand-secondary-active" | "--rui-brand-secondary-contrast" | "--rui-brand-accent" | "--rui-brand-accent-hover" | "--rui-brand-accent-contrast">;
29
+ /**
30
+ * @description Defines CSS variables for status colors.
31
+ * @author Steveen Cues
32
+ * @version 1.0.0
33
+ */
34
+ export type StateVariables = Pick<ThemeCssVariables, "--rui-state-success" | "--rui-state-success-background" | "--rui-state-warning" | "--rui-state-warning-background" | "--rui-state-error" | "--rui-state-error-background" | "--rui-state-info" | "--rui-state-info-background">;
35
+ /**
36
+ * @description Defines CSS variables for border styles and colors.
37
+ * @author Steveen Cues
38
+ * @version 1.0.0
39
+ */
40
+ export type BorderVariables = Pick<ThemeCssVariables, "--rui-border-default" | "--rui-border-subtle" | "--rui-border-strong" | "--rui-border-focus" | "--rui-border-hover" | "--rui-border-active" | "--rui-border-disabled">;
41
+ /**
42
+ * @description Defines CSS variables for shadows.
43
+ * @author Steveen Cues
44
+ * @version 1.0.0
45
+ */
46
+ export type ShadowVariables = Pick<ThemeCssVariables, "--rui-shadow-color" | "--rui-shadow-subtle" | "--rui-shadow-small" | "--rui-shadow-medium" | "--rui-shadow-large" | "--rui-shadow-glow">;
47
+ /**
48
+ * @description Defines CSS variables for visual effects.
49
+ * @author Steveen Cues
50
+ * @version 1.0.0
51
+ */
52
+ export type EffectVariables = Pick<ThemeCssVariables, "--rui-effects-overlay" | "--rui-effects-backdrop" | "--rui-effects-blur" | "--rui-effects-blur-strong" | "--rui-effects-glass-background" | "--rui-effects-glass-border">;
53
+ /**
54
+ * @description Defines CSS variables for typography colors.
55
+ * @author Steveen Cues
56
+ * @version 1.0.0
57
+ */
58
+ export type TypographyVariables = Pick<ThemeCssVariables, "--rui-typography-heading-primary" | "--rui-typography-heading-secondary" | "--rui-typography-heading-muted" | "--rui-typography-body-primary" | "--rui-typography-body-secondary" | "--rui-typography-body-muted" | "--rui-typography-label-primary" | "--rui-typography-label-secondary" | "--rui-typography-label-muted" | "--rui-typography-button-primary" | "--rui-typography-button-secondary">;
59
+ /**
60
+ * @description Defines the React state dispatcher for theme preference updates.
61
+ * @author Steveen Cues
62
+ * @version 1.0.0
63
+ */
64
+ export type SetThemePreferenceState = Dispatch<SetStateAction<ThemePreferenceState>>;
@@ -0,0 +1,33 @@
1
+ import { LanguagePreferenceState } from '..';
2
+ /**
3
+ * @description Valores admitidos en un catalogo de traducciones.
4
+ * @author Steveen Cues
5
+ * @version 1.0.0
6
+ */
7
+ export type TranslationValue = string | TranslationDictionary;
8
+ /**
9
+ * @description Diccionario de traducciones que admite claves anidadas.
10
+ * @author Steveen Cues
11
+ * @version 1.0.0
12
+ */
13
+ export interface TranslationDictionary {
14
+ readonly [key: string]: TranslationValue;
15
+ }
16
+ /**
17
+ * @description Catalogo de traducciones identificado por idioma.
18
+ * @author Steveen Cues
19
+ * @version 1.0.0
20
+ */
21
+ export type TranslationCatalog = Readonly<Record<string, TranslationDictionary>>;
22
+ /**
23
+ * @description Parametros para interpolar variables en una traduccion.
24
+ * @author Steveen Cues
25
+ * @version 1.0.0
26
+ */
27
+ export type TranslationParams = Readonly<Record<string, string | number>>;
28
+ /**
29
+ * @description Defines the React state dispatcher for language preference updates.
30
+ * @author Steveen Cues
31
+ * @version 1.0.0
32
+ */
33
+ export type SetLanguagePreferenceState = React.Dispatch<React.SetStateAction<LanguagePreferenceState>>;
@@ -0,0 +1,4 @@
1
+ export * from './aplicacion';
2
+ export * from './components';
3
+ export * from './domain';
4
+ export * from './infraestructura';
@@ -0,0 +1 @@
1
+ export * from './storage';
@@ -0,0 +1,19 @@
1
+ /**
2
+ * @description Encrypts and saves a preference in localStorage.
3
+ * @param storageKey Storage key.
4
+ * @param value Value to store.
5
+ * @param encryptionKey Encryption secret.
6
+ * @returns Promise resolved after the save attempt.
7
+ * @author Steveen Cues
8
+ * @version 3.0.0
9
+ */
10
+ export declare function saveEncryptedPreference(storageKey: string, value: string, encryptionKey: string): Promise<void>;
11
+ /**
12
+ * @description Loads and decrypts a preference from localStorage.
13
+ * @param storageKey Storage key.
14
+ * @param encryptionKey Encryption secret.
15
+ * @returns Decrypted preference or undefined when unavailable.
16
+ * @author Steveen Cues
17
+ * @version 3.0.0
18
+ */
19
+ export declare function loadEncryptedPreference(storageKey: string, encryptionKey: string): Promise<string | undefined>;
@@ -0,0 +1,3 @@
1
+ export * from './encrypted-preference.storage';
2
+ export * from './language-preference.storage';
3
+ export * from './theme-preference.storage';
@@ -0,0 +1,18 @@
1
+ /**
2
+ * @description Guarda el idioma activo de forma cifrada.
3
+ * @param language Codigo del idioma activo.
4
+ * @param encryptionKey Clave de cifrado proporcionada por el consumidor.
5
+ * @returns Promesa completada al finalizar el intento de guardado.
6
+ * @author Steveen Cues
7
+ * @version 1.0.0
8
+ */
9
+ export declare function saveLanguagePreference(language: string, encryptionKey: string): Promise<void>;
10
+ /**
11
+ * @description Recupera el idioma guardado y verifica que siga disponible.
12
+ * @param availableLanguages Idiomas admitidos por el proyecto.
13
+ * @param encryptionKey Clave de cifrado proporcionada por el consumidor.
14
+ * @returns Idioma recuperado o undefined si no existe o no es valido.
15
+ * @author Steveen Cues
16
+ * @version 1.0.0
17
+ */
18
+ export declare function loadLanguagePreference(availableLanguages: readonly string[], encryptionKey: string): Promise<string | undefined>;
@@ -0,0 +1,19 @@
1
+ import { AppTheme, ThemeName } from '../../domain';
2
+ /**
3
+ * @description Guarda el nombre del tema activo de forma cifrada.
4
+ * @param themeName Nombre del tema.
5
+ * @param encryptionKey Clave de cifrado proporcionada por el consumidor.
6
+ * @returns Promesa completada al finalizar el intento de guardado.
7
+ * @author Steveen Cues
8
+ * @version 1.0.0
9
+ */
10
+ export declare function saveThemePreference(themeName: ThemeName, encryptionKey: string): Promise<void>;
11
+ /**
12
+ * @description Recupera el tema guardado si existe entre los temas admitidos.
13
+ * @param themes Temas definidos por el proyecto consumidor.
14
+ * @param encryptionKey Clave de cifrado proporcionada por el consumidor.
15
+ * @returns Nombre del tema recuperado o undefined.
16
+ * @author Steveen Cues
17
+ * @version 1.0.0
18
+ */
19
+ export declare function loadThemePreference(themes: readonly AppTheme[], encryptionKey: string): Promise<ThemeName | undefined>;
package/package.json CHANGED
@@ -1,6 +1,59 @@
1
1
  {
2
2
  "name": "@steveencues/starter-react-ui",
3
- "version": "0.0.0-stage",
4
- "stub": true,
5
- "description": "Temporary package placeholder for staged publishing"
3
+ "version": "1.0.1",
4
+ "private": false,
5
+ "type": "module",
6
+ "main": "./dist/index.cjs",
7
+ "module": "./dist/index.js",
8
+ "types": "./dist/index.d.ts",
9
+ "exports": {
10
+ ".": {
11
+ "types": "./dist/index.d.ts",
12
+ "import": "./dist/index.js",
13
+ "require": "./dist/index.cjs"
14
+ }
15
+ },
16
+ "files": [
17
+ "dist",
18
+ "README.md"
19
+ ],
20
+ "scripts": {
21
+ "lint": "eslint .",
22
+ "format": "prettier --write .",
23
+ "format:check": "prettier --check .",
24
+ "build:lib": "tsc -b && vite build",
25
+ "package:lib": "npm run format && npm run lint && node scripts/package-library.mjs",
26
+ "build": "npm run lint && npm run format:check && npm run build:lib && npm run package:lib",
27
+ "prepare": "husky"
28
+ },
29
+ "devDependencies": {
30
+ "@commitlint/cli": "^21.2.4",
31
+ "@commitlint/config-conventional": "^21.2.4",
32
+ "@eslint/js": "^10.0.1",
33
+ "@tailwindcss/vite": "^4.3.3",
34
+ "@types/node": "^24.13.3",
35
+ "@types/react": "^19.3.0",
36
+ "@types/react-dom": "^19.3.0",
37
+ "@vitejs/plugin-react": "^6.1.1",
38
+ "eslint": "^10.10.0",
39
+ "eslint-config-prettier": "^10.1.8",
40
+ "eslint-plugin-jsdoc": "^65.3.8",
41
+ "eslint-plugin-react-hooks": "^7.1.1",
42
+ "eslint-plugin-react-refresh": "^0.5.6",
43
+ "eslint-plugin-unicorn": "^78.0.0",
44
+ "globals": "^17.12.0",
45
+ "husky": "^9.1.7",
46
+ "prettier": "^3.9.10",
47
+ "react": "^19.3.1",
48
+ "react-dom": "^19.3.1",
49
+ "tailwindcss": "^4.3.3",
50
+ "typescript": "~6.0.2",
51
+ "typescript-eslint": "^8.69.0",
52
+ "unplugin-dts": "^1.1.2",
53
+ "vite": "^8.3.0"
54
+ },
55
+ "peerDependencies": {
56
+ "react": "^18.2.0 || ^19.0.0",
57
+ "react-dom": "^18.2.0 || ^19.0.0"
58
+ }
6
59
  }