@wakastellar/ui 0.6.0 → 1.0.2
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/blocks/index.d.ts +28 -39
- package/dist/components/DataTable/DataTable.d.ts +1 -1
- package/dist/components/DataTable/DataTableAdvanced.d.ts +1 -1
- package/dist/components/DataTable/DataTableFilters.d.ts +3 -3
- package/dist/components/DataTable/DataTableSelection.d.ts +12 -17
- package/dist/components/DataTable/hooks/useDataTable.d.ts +1 -1
- package/dist/components/DataTable/hooks/useDataTableAdvanced.d.ts +6 -6
- package/dist/components/DataTable/hooks/useDataTableExport.d.ts +4 -15
- package/dist/components/DataTable/hooks/useDataTableImport.d.ts +2 -16
- package/dist/components/DataTable/hooks/useDataTableVirtualization.d.ts +1 -1
- package/dist/components/DataTable/index.d.ts +2 -48
- package/dist/components/DataTable/types.d.ts +25 -417
- package/dist/components/command/index.d.ts +2 -6
- package/dist/components/index.d.ts +20 -24
- package/dist/components/language-selector/index.d.ts +1 -19
- package/dist/components/theme-selector/index.d.ts +0 -10
- package/dist/components/typography/index.d.ts +1 -1
- package/dist/components/waka-spinner/index.d.ts +21 -57
- package/dist/components/waka-theme-creator/index.d.ts +22 -73
- package/dist/components/waka-theme-manager/index.d.ts +1 -14
- package/dist/context/admincrumb-context.d.ts +1 -118
- package/dist/context/index.d.ts +2 -2
- package/dist/context/language-context.d.ts +23 -177
- package/dist/context/theme-context.d.ts +3 -4
- package/dist/context/theme-provider.d.ts +19 -57
- package/dist/context/waka-provider.d.ts +7 -50
- package/dist/hooks/use-toast.d.ts +0 -116
- package/dist/hooks/use-translation.d.ts +1 -24
- package/dist/hooks/useToast.d.ts +0 -82
- package/dist/index.cjs.js +44 -57
- package/dist/index.d.ts +3 -35
- package/dist/index.es.js +17836 -21739
- package/dist/types/provider.d.ts +17 -48
- package/dist/ui.css +1 -1
- package/dist/utils/cn.d.ts +1 -15
- package/dist/utils/datetime-helpers.d.ts +33 -241
- package/dist/utils/index.d.ts +0 -4
- package/dist/utils/theme-loader.d.ts +30 -140
- package/dist/utils/tweak.d.ts +1 -14
- package/package.json +40 -107
- package/src/styles/datepicker.css +2 -9
- package/src/styles/globals.css +4 -4
- package/dist/charts.cjs.js +0 -1
- package/dist/charts.es.js +0 -16
- package/dist/cn-CAc3sAGM.js +0 -21
- package/dist/cn-zrNBeCrC.js +0 -1
- package/dist/components/DataTable/DataTableGroupRow.d.ts +0 -35
- package/dist/components/DataTable/DataTableRow.d.ts +0 -30
- package/dist/components/WakaKeycloakLogin/WakaKeycloakLogin.d.ts +0 -3
- package/dist/components/WakaKeycloakLogin/index.d.ts +0 -2
- package/dist/components/WakaKeycloakLogin/types.d.ts +0 -56
- package/dist/export.cjs.js +0 -1
- package/dist/export.es.js +0 -5
- package/dist/index-CENPre_9.js +0 -466
- package/dist/index-CHLjUBPo.js +0 -1
- package/dist/rich-text.cjs.js +0 -1
- package/dist/rich-text.es.js +0 -4
- package/dist/types-Bjy1Hy76.js +0 -1111
- package/dist/types-CHv7a1SP.js +0 -1
- package/dist/useDataTableImport-DqeEL4GC.js +0 -124
- package/dist/useDataTableImport-sQwBFAJ_.js +0 -775
- package/dist/utils/logger.d.ts +0 -60
|
@@ -1,211 +1,57 @@
|
|
|
1
|
-
import { WakaError } from '../utils/error-handling';
|
|
2
|
-
/**
|
|
3
|
-
* @fileoverview Contexte de gestion des langues pour WakaStart UI
|
|
4
|
-
*
|
|
5
|
-
* Ce module fournit un système complet de gestion de l'internationalisation:
|
|
6
|
-
* - Chargement dynamique des traductions depuis URL ou inline JSON
|
|
7
|
-
* - Cache des traductions déjà chargées
|
|
8
|
-
* - Intégration transparente avec i18next
|
|
9
|
-
* - Persistance de la langue dans localStorage
|
|
10
|
-
* - Chargement à la volée de traductions JSON
|
|
11
|
-
*
|
|
12
|
-
* @module context/language-context
|
|
13
|
-
*/
|
|
14
1
|
import * as React from "react";
|
|
15
|
-
/**
|
|
16
|
-
* Format standard i18n pour les traductions
|
|
17
|
-
* Compatible avec i18next resource bundles
|
|
18
|
-
*
|
|
19
|
-
* @example
|
|
20
|
-
* ```json
|
|
21
|
-
* {
|
|
22
|
-
* "common": {
|
|
23
|
-
* "save": "Enregistrer",
|
|
24
|
-
* "cancel": "Annuler",
|
|
25
|
-
* "confirm": "Confirmer"
|
|
26
|
-
* },
|
|
27
|
-
* "errors": {
|
|
28
|
-
* "required": "Ce champ est requis",
|
|
29
|
-
* "invalid_email": "Email invalide"
|
|
30
|
-
* }
|
|
31
|
-
* }
|
|
32
|
-
* ```
|
|
33
|
-
*/
|
|
34
|
-
export type I18nTranslations = Record<string, string | Record<string, unknown>>;
|
|
35
|
-
/**
|
|
36
|
-
* Configuration d'une langue disponible
|
|
37
|
-
*/
|
|
38
|
-
export interface LanguageConfig {
|
|
39
|
-
/** Code ISO de la langue (ex: "fr", "en", "es") */
|
|
40
|
-
code: string;
|
|
41
|
-
/** Libellé d'affichage */
|
|
42
|
-
label: string;
|
|
43
|
-
/** Emoji du drapeau (optionnel) */
|
|
44
|
-
flagEmoji?: string;
|
|
45
|
-
/** URL de l'image du drapeau (optionnel) */
|
|
46
|
-
flag?: string;
|
|
47
|
-
/**
|
|
48
|
-
* Traductions inline au format i18n JSON
|
|
49
|
-
* Si fourni, les traductions sont utilisées directement
|
|
50
|
-
*/
|
|
51
|
-
translations?: I18nTranslations;
|
|
52
|
-
/**
|
|
53
|
-
* URL pour charger le JSON des traductions (optionnel)
|
|
54
|
-
* Le JSON doit être au format I18nTranslations
|
|
55
|
-
*/
|
|
56
|
-
jsonUrl?: string;
|
|
57
|
-
}
|
|
58
|
-
/**
|
|
59
|
-
* Configuration pour le chargement distant (legacy, utiliser jsonUrl dans LanguageConfig)
|
|
60
|
-
* @deprecated Utiliser `jsonUrl` dans LanguageConfig à la place
|
|
61
|
-
*/
|
|
62
2
|
export interface S3Config {
|
|
63
|
-
/** URL de base */
|
|
3
|
+
/** URL de base du bucket S3 */
|
|
64
4
|
baseUrl: string;
|
|
65
|
-
/** Préfixe des fichiers */
|
|
5
|
+
/** Préfixe des fichiers (ex: "translations/") */
|
|
66
6
|
prefix?: string;
|
|
67
7
|
/** Extension des fichiers (défaut: "json") */
|
|
68
8
|
extension?: string;
|
|
69
|
-
/** Headers
|
|
9
|
+
/** Headers personnalisés pour les requêtes */
|
|
70
10
|
headers?: Record<string, string>;
|
|
71
11
|
}
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
*/
|
|
12
|
+
export interface LanguageConfig {
|
|
13
|
+
code: string;
|
|
14
|
+
label: string;
|
|
15
|
+
flagEmoji?: string;
|
|
16
|
+
flag?: string;
|
|
17
|
+
}
|
|
79
18
|
export interface LanguageContextValue {
|
|
80
|
-
/**
|
|
19
|
+
/** Langue courante */
|
|
81
20
|
currentLanguage: string;
|
|
82
|
-
/** Liste des langues disponibles
|
|
21
|
+
/** Liste des langues disponibles */
|
|
83
22
|
languages: LanguageConfig[];
|
|
84
|
-
/**
|
|
23
|
+
/** Changer de langue */
|
|
85
24
|
changeLanguage: (code: string) => Promise<void>;
|
|
86
|
-
/**
|
|
25
|
+
/** État de chargement */
|
|
87
26
|
isLoading: boolean;
|
|
88
|
-
/**
|
|
27
|
+
/** Traductions chargées */
|
|
89
28
|
loadedLanguages: Set<string>;
|
|
90
|
-
/**
|
|
91
|
-
* Charge des traductions depuis un objet JSON à la volée
|
|
92
|
-
* @param langCode - Code de la langue
|
|
93
|
-
* @param translations - Traductions au format i18n JSON
|
|
94
|
-
* @param apply - Si true, change aussi la langue courante (défaut: true)
|
|
95
|
-
*/
|
|
96
|
-
loadLanguageFromJSON: (langCode: string, translations: I18nTranslations, apply?: boolean) => Promise<void>;
|
|
97
|
-
/**
|
|
98
|
-
* Ajoute/met à jour une langue dans la liste
|
|
99
|
-
* @param config - Configuration de la langue
|
|
100
|
-
*/
|
|
101
|
-
addLanguage: (config: LanguageConfig) => void;
|
|
102
|
-
/**
|
|
103
|
-
* Recharge les traductions d'une langue depuis son URL
|
|
104
|
-
* @param langCode - Code de la langue à recharger
|
|
105
|
-
*/
|
|
106
|
-
reloadLanguage: (langCode: string) => Promise<void>;
|
|
107
29
|
}
|
|
108
|
-
/**
|
|
109
|
-
* Props du provider de langue
|
|
110
|
-
*/
|
|
111
30
|
export interface LanguageProviderProps {
|
|
112
|
-
/** Composants enfants */
|
|
113
31
|
children: React.ReactNode;
|
|
114
|
-
/**
|
|
32
|
+
/** Langues disponibles */
|
|
115
33
|
languages: LanguageConfig[];
|
|
116
|
-
/**
|
|
34
|
+
/** Langue par défaut */
|
|
117
35
|
defaultLanguage?: string;
|
|
118
|
-
/**
|
|
119
|
-
* Configuration S3 (legacy)
|
|
120
|
-
* @deprecated Utiliser `jsonUrl` dans chaque LanguageConfig à la place
|
|
121
|
-
*/
|
|
36
|
+
/** Configuration S3 (optionnel - si non fourni, utilise les traductions locales) */
|
|
122
37
|
s3Config?: S3Config;
|
|
123
|
-
/** Callback
|
|
38
|
+
/** Callback après changement de langue */
|
|
124
39
|
onLanguageChange?: (code: string) => void;
|
|
125
|
-
/** Callback en cas d'erreur */
|
|
126
|
-
onError?: (error: WakaError) => void;
|
|
127
|
-
/** Headers personnalisés pour les requêtes fetch */
|
|
128
|
-
fetchHeaders?: Record<string, string>;
|
|
129
|
-
/** Timeout en millisecondes pour les requêtes fetch (défaut: 10000) */
|
|
130
|
-
fetchTimeout?: number;
|
|
131
40
|
}
|
|
132
41
|
/**
|
|
133
42
|
* LanguageProvider
|
|
134
43
|
*
|
|
135
|
-
* Provider pour
|
|
136
|
-
* du chargement dynamique de traductions JSON.
|
|
44
|
+
* Provider pour gérer les langues et charger les traductions depuis S3.
|
|
137
45
|
*
|
|
138
46
|
* Features:
|
|
139
|
-
* -
|
|
140
|
-
* - Chargement à la volée via loadLanguageFromJSON()
|
|
47
|
+
* - Chargement dynamique des traductions depuis S3
|
|
141
48
|
* - Cache des traductions déjà chargées
|
|
142
49
|
* - Intégration avec i18next
|
|
143
50
|
* - Persistance dans localStorage
|
|
144
|
-
*
|
|
145
|
-
* @example
|
|
146
|
-
* ```tsx
|
|
147
|
-
* // Configuration avec traductions inline
|
|
148
|
-
* <LanguageProvider
|
|
149
|
-
* languages={[
|
|
150
|
-
* {
|
|
151
|
-
* code: "fr",
|
|
152
|
-
* label: "Français",
|
|
153
|
-
* flagEmoji: "🇫🇷",
|
|
154
|
-
* translations: {
|
|
155
|
-
* common: { save: "Enregistrer", cancel: "Annuler" }
|
|
156
|
-
* }
|
|
157
|
-
* },
|
|
158
|
-
* {
|
|
159
|
-
* code: "en",
|
|
160
|
-
* label: "English",
|
|
161
|
-
* flagEmoji: "🇬🇧",
|
|
162
|
-
* jsonUrl: "https://example.com/i18n/en.json"
|
|
163
|
-
* }
|
|
164
|
-
* ]}
|
|
165
|
-
* defaultLanguage="fr"
|
|
166
|
-
* >
|
|
167
|
-
* <App />
|
|
168
|
-
* </LanguageProvider>
|
|
169
|
-
* ```
|
|
51
|
+
* - Support des traductions locales si pas de S3
|
|
170
52
|
*/
|
|
171
|
-
export declare function LanguageProvider({ children, languages
|
|
53
|
+
export declare function LanguageProvider({ children, languages, defaultLanguage, s3Config, onLanguageChange, }: LanguageProviderProps): import("react/jsx-runtime").JSX.Element;
|
|
172
54
|
/**
|
|
173
|
-
* Hook pour
|
|
174
|
-
*
|
|
175
|
-
* @throws {Error} Si utilisé en dehors d'un LanguageProvider
|
|
176
|
-
*
|
|
177
|
-
* @example
|
|
178
|
-
* ```tsx
|
|
179
|
-
* function LanguageSwitcher() {
|
|
180
|
-
* const { currentLanguage, languages, changeLanguage, isLoading } = useLanguage()
|
|
181
|
-
*
|
|
182
|
-
* return (
|
|
183
|
-
* <select
|
|
184
|
-
* value={currentLanguage}
|
|
185
|
-
* onChange={(e) => changeLanguage(e.target.value)}
|
|
186
|
-
* disabled={isLoading}
|
|
187
|
-
* >
|
|
188
|
-
* {languages.map((lang) => (
|
|
189
|
-
* <option key={lang.code} value={lang.code}>
|
|
190
|
-
* {lang.flagEmoji} {lang.label}
|
|
191
|
-
* </option>
|
|
192
|
-
* ))}
|
|
193
|
-
* </select>
|
|
194
|
-
* )
|
|
195
|
-
* }
|
|
196
|
-
*
|
|
197
|
-
* // Charger des traductions à la volée
|
|
198
|
-
* function LoadCustomTranslations() {
|
|
199
|
-
* const { loadLanguageFromJSON } = useLanguage()
|
|
200
|
-
*
|
|
201
|
-
* const handleLoad = async () => {
|
|
202
|
-
* await loadLanguageFromJSON("custom", {
|
|
203
|
-
* common: { hello: "Bonjour" }
|
|
204
|
-
* })
|
|
205
|
-
* }
|
|
206
|
-
*
|
|
207
|
-
* return <button onClick={handleLoad}>Load Custom</button>
|
|
208
|
-
* }
|
|
209
|
-
* ```
|
|
55
|
+
* Hook pour utiliser le contexte de langue
|
|
210
56
|
*/
|
|
211
57
|
export declare function useLanguage(): LanguageContextValue;
|
|
@@ -6,18 +6,17 @@ export interface ThemeContextValue {
|
|
|
6
6
|
themes: ThemeConfigItem[];
|
|
7
7
|
systemTheme?: string;
|
|
8
8
|
isLoadingThemes?: boolean;
|
|
9
|
-
themesSource?: "config" | "fallback";
|
|
9
|
+
themesSource?: "config" | "s3" | "fallback";
|
|
10
10
|
}
|
|
11
11
|
export interface ThemeProviderProps {
|
|
12
12
|
children: React.ReactNode;
|
|
13
13
|
config?: WakaThemeConfig;
|
|
14
14
|
}
|
|
15
15
|
/**
|
|
16
|
-
* Provider de thème
|
|
16
|
+
* Provider de thème pour WakaStart UI
|
|
17
17
|
*
|
|
18
18
|
* Gère le thème actif, le stockage dans localStorage et la détection du thème système
|
|
19
|
-
*
|
|
20
|
-
* @deprecated Utiliser ThemeProvider de theme-provider.tsx avec support shadcn registry-item
|
|
19
|
+
* Charge automatiquement les thèmes depuis S3 si non fournis dans la config
|
|
21
20
|
*
|
|
22
21
|
* @example
|
|
23
22
|
* ```tsx
|
|
@@ -1,34 +1,16 @@
|
|
|
1
|
-
import { WakaError } from '../utils/error-handling';
|
|
2
1
|
import * as React from "react";
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
*/
|
|
7
|
-
|
|
8
|
-
/**
|
|
9
|
-
|
|
10
|
-
/**
|
|
11
|
-
|
|
12
|
-
/**
|
|
13
|
-
|
|
14
|
-
/** CSS personnalisé avec support @layer */
|
|
15
|
-
css?: {
|
|
16
|
-
"@layer base"?: Record<string, Record<string, string>>;
|
|
17
|
-
[selector: string]: Record<string, string> | Record<string, Record<string, string>> | undefined;
|
|
18
|
-
};
|
|
19
|
-
/** Variables CSS par mode */
|
|
20
|
-
cssVars?: {
|
|
21
|
-
/** Variables communes au thème (fonts, radius, etc.) */
|
|
22
|
-
theme?: Record<string, string>;
|
|
23
|
-
/** Variables mode clair */
|
|
24
|
-
light?: Record<string, string>;
|
|
25
|
-
/** Variables mode sombre */
|
|
26
|
-
dark?: Record<string, string>;
|
|
27
|
-
};
|
|
2
|
+
export interface ThemeS3Config {
|
|
3
|
+
/** URL de base du bucket S3 */
|
|
4
|
+
baseUrl: string;
|
|
5
|
+
/** Préfixe des fichiers (ex: "themes/") */
|
|
6
|
+
prefix?: string;
|
|
7
|
+
/** Extension des fichiers (défaut: "css") */
|
|
8
|
+
extension?: string;
|
|
9
|
+
/** Headers personnalisés pour les requêtes */
|
|
10
|
+
headers?: Record<string, string>;
|
|
11
|
+
/** Timeout en millisecondes */
|
|
12
|
+
timeout?: number;
|
|
28
13
|
}
|
|
29
|
-
/**
|
|
30
|
-
* Configuration d'un thème
|
|
31
|
-
*/
|
|
32
14
|
export interface ThemeConfig {
|
|
33
15
|
/** Identifiant du thème (utilisé dans data-theme) */
|
|
34
16
|
id: string;
|
|
@@ -38,16 +20,6 @@ export interface ThemeConfig {
|
|
|
38
20
|
description?: string;
|
|
39
21
|
/** Couleur représentative du thème (pour preview) */
|
|
40
22
|
previewColor?: string;
|
|
41
|
-
/**
|
|
42
|
-
* Données du thème au format shadcn registry-item
|
|
43
|
-
* C'est le format recommandé pour définir les thèmes
|
|
44
|
-
*/
|
|
45
|
-
registryItem?: ShadcnRegistryItem;
|
|
46
|
-
/**
|
|
47
|
-
* URL pour charger le JSON du thème (optionnel)
|
|
48
|
-
* Le JSON doit être au format ShadcnRegistryItem
|
|
49
|
-
*/
|
|
50
|
-
jsonUrl?: string;
|
|
51
23
|
}
|
|
52
24
|
export interface ThemeContextValue {
|
|
53
25
|
/** Thème courant */
|
|
@@ -68,12 +40,6 @@ export interface ThemeContextValue {
|
|
|
68
40
|
preloadTheme: (id: string) => Promise<void>;
|
|
69
41
|
/** Vérifier si un thème est chargé */
|
|
70
42
|
isThemeLoaded: (id: string) => boolean;
|
|
71
|
-
/**
|
|
72
|
-
* Charger un thème depuis un objet JSON
|
|
73
|
-
* @param themeId - ID du thème à créer/mettre à jour
|
|
74
|
-
* @param registryItem - Données au format shadcn registry-item
|
|
75
|
-
*/
|
|
76
|
-
loadThemeFromJSON: (themeId: string, registryItem: ShadcnRegistryItem) => Promise<void>;
|
|
77
43
|
}
|
|
78
44
|
export interface ThemeProviderProps {
|
|
79
45
|
children: React.ReactNode;
|
|
@@ -81,31 +47,27 @@ export interface ThemeProviderProps {
|
|
|
81
47
|
themes: ThemeConfig[];
|
|
82
48
|
/** Thème par défaut */
|
|
83
49
|
defaultTheme?: string;
|
|
50
|
+
/** Configuration S3 (optionnel - si non fourni, utilise les thèmes locaux) */
|
|
51
|
+
s3Config?: ThemeS3Config;
|
|
84
52
|
/** Callback après changement de thème */
|
|
85
53
|
onThemeChange?: (id: string) => void;
|
|
86
|
-
/** Callback en cas d'erreur */
|
|
87
|
-
onError?: (error: WakaError) => void;
|
|
88
54
|
/** Activer le mode sombre (optionnel) */
|
|
89
55
|
enableDarkMode?: boolean;
|
|
90
|
-
/** Headers personnalisés pour les requêtes fetch (optionnel) */
|
|
91
|
-
fetchHeaders?: Record<string, string>;
|
|
92
|
-
/** Timeout en millisecondes pour les requêtes fetch (défaut: 10000) */
|
|
93
|
-
fetchTimeout?: number;
|
|
94
56
|
}
|
|
95
57
|
/**
|
|
96
58
|
* ThemeProvider
|
|
97
59
|
*
|
|
98
|
-
* Provider pour gérer les thèmes
|
|
60
|
+
* Provider pour gérer les thèmes et charger les CSS depuis S3 avec support TweakCN.
|
|
99
61
|
*
|
|
100
62
|
* Features:
|
|
101
|
-
* -
|
|
102
|
-
* - Chargement dynamique depuis URL ou inline
|
|
63
|
+
* - Chargement dynamique des thèmes depuis S3
|
|
103
64
|
* - Cache des thèmes déjà chargés
|
|
104
|
-
* - Support
|
|
65
|
+
* - Support TweakCN avec data-theme
|
|
105
66
|
* - Persistance dans localStorage
|
|
106
|
-
* -
|
|
67
|
+
* - Préchargement de thèmes
|
|
68
|
+
* - Support des thèmes locaux si pas de S3
|
|
107
69
|
*/
|
|
108
|
-
export declare function ThemeProvider({ children, themes, defaultTheme,
|
|
70
|
+
export declare function ThemeProvider({ children, themes, defaultTheme, s3Config, onThemeChange, enableDarkMode, }: ThemeProviderProps): import("react/jsx-runtime").JSX.Element;
|
|
109
71
|
/**
|
|
110
72
|
* Hook pour utiliser le ThemeProvider
|
|
111
73
|
*/
|
|
@@ -2,66 +2,23 @@ import { WakaProviderConfig, WakaProviderProps } from '../types/provider';
|
|
|
2
2
|
/**
|
|
3
3
|
* WakaProvider - Provider principal pour WakaStart UI
|
|
4
4
|
*
|
|
5
|
-
* Centralise la configuration du thème
|
|
6
|
-
* Fonctionne avec des thèmes/traductions inline (sans dépendance S3)
|
|
7
|
-
* ou avec S3 pour un chargement distant.
|
|
5
|
+
* Centralise la configuration du thème, de la langue et des traductions S3
|
|
8
6
|
*
|
|
9
7
|
* @example
|
|
10
8
|
* ```tsx
|
|
11
|
-
* // Configuration avec thèmes et traductions inline (sans S3)
|
|
12
9
|
* <WakaProvider config={{
|
|
13
10
|
* theme: {
|
|
14
11
|
* defaultTheme: "light",
|
|
15
|
-
* themes: [
|
|
16
|
-
*
|
|
17
|
-
* id: "light",
|
|
18
|
-
* label: "Clair",
|
|
19
|
-
* cssVars: {
|
|
20
|
-
* "--background": "0 0% 100%",
|
|
21
|
-
* "--foreground": "222.2 84% 4.9%"
|
|
22
|
-
* }
|
|
23
|
-
* },
|
|
24
|
-
* {
|
|
25
|
-
* id: "dark",
|
|
26
|
-
* label: "Sombre",
|
|
27
|
-
* cssVars: {
|
|
28
|
-
* "--background": "222.2 84% 4.9%",
|
|
29
|
-
* "--foreground": "210 40% 98%"
|
|
30
|
-
* }
|
|
31
|
-
* }
|
|
32
|
-
* ]
|
|
12
|
+
* themes: ["light", "dark", "forest"],
|
|
13
|
+
* enableSystem: true
|
|
33
14
|
* },
|
|
34
15
|
* language: {
|
|
35
16
|
* defaultLanguage: "fr",
|
|
36
17
|
* supportedLanguages: ["fr", "en"],
|
|
37
|
-
*
|
|
38
|
-
*
|
|
39
|
-
*
|
|
40
|
-
*
|
|
41
|
-
* translations: { common: { save: "Enregistrer" } }
|
|
42
|
-
* },
|
|
43
|
-
* {
|
|
44
|
-
* code: "en",
|
|
45
|
-
* label: "English",
|
|
46
|
-
* translations: { common: { save: "Save" } }
|
|
47
|
-
* }
|
|
48
|
-
* ]
|
|
49
|
-
* }
|
|
50
|
-
* }}>
|
|
51
|
-
* <App />
|
|
52
|
-
* </WakaProvider>
|
|
53
|
-
*
|
|
54
|
-
* // Configuration avec S3 (chargement distant)
|
|
55
|
-
* <WakaProvider config={{
|
|
56
|
-
* theme: {
|
|
57
|
-
* defaultTheme: "light",
|
|
58
|
-
* themes: [{ id: "light", label: "Clair" }],
|
|
59
|
-
* s3Config: { baseUrl: "https://cdn.example.com/themes" }
|
|
60
|
-
* },
|
|
61
|
-
* language: {
|
|
62
|
-
* defaultLanguage: "fr",
|
|
63
|
-
* supportedLanguages: ["fr", "en"],
|
|
64
|
-
* s3Config: { bucketUrl: "https://cdn.example.com", translationsPath: "i18n" }
|
|
18
|
+
* s3Config: {
|
|
19
|
+
* bucketUrl: "https://my-bucket.s3.amazonaws.com",
|
|
20
|
+
* translationsPath: "translations"
|
|
21
|
+
* }
|
|
65
22
|
* }
|
|
66
23
|
* }}>
|
|
67
24
|
* <App />
|
|
@@ -1,34 +1,11 @@
|
|
|
1
1
|
import { ToastActionElement, ToastProps } from '../components/toast';
|
|
2
|
-
/**
|
|
3
|
-
* @fileoverview Hook de gestion des notifications toast
|
|
4
|
-
*
|
|
5
|
-
* Ce module fournit un système de notifications toast avec:
|
|
6
|
-
* - Gestion d'état globale via un reducer
|
|
7
|
-
* - Limite configurable du nombre de toasts
|
|
8
|
-
* - Suppression automatique après un délai
|
|
9
|
-
* - API simple pour créer, mettre à jour et fermer les toasts
|
|
10
|
-
*
|
|
11
|
-
* @module hooks/use-toast
|
|
12
|
-
*/
|
|
13
2
|
import * as React from "react";
|
|
14
|
-
/**
|
|
15
|
-
* Type représentant un toast dans le système
|
|
16
|
-
* Étend ToastProps avec des propriétés additionnelles pour la gestion
|
|
17
|
-
*/
|
|
18
3
|
type ToasterToast = ToastProps & {
|
|
19
|
-
/** Identifiant unique du toast */
|
|
20
4
|
id: string;
|
|
21
|
-
/** Titre du toast */
|
|
22
5
|
title?: React.ReactNode;
|
|
23
|
-
/** Description/contenu du toast */
|
|
24
6
|
description?: React.ReactNode;
|
|
25
|
-
/** Élément d'action optionnel (bouton, lien, etc.) */
|
|
26
7
|
action?: ToastActionElement;
|
|
27
8
|
};
|
|
28
|
-
/**
|
|
29
|
-
* Types d'actions disponibles pour le reducer de toasts
|
|
30
|
-
* @internal
|
|
31
|
-
*/
|
|
32
9
|
declare const actionTypes: {
|
|
33
10
|
readonly ADD_TOAST: "ADD_TOAST";
|
|
34
11
|
readonly UPDATE_TOAST: "UPDATE_TOAST";
|
|
@@ -36,10 +13,6 @@ declare const actionTypes: {
|
|
|
36
13
|
readonly REMOVE_TOAST: "REMOVE_TOAST";
|
|
37
14
|
};
|
|
38
15
|
type ActionType = typeof actionTypes;
|
|
39
|
-
/**
|
|
40
|
-
* Union type des actions possibles pour le reducer de toasts
|
|
41
|
-
* @internal
|
|
42
|
-
*/
|
|
43
16
|
type Action = {
|
|
44
17
|
type: ActionType["ADD_TOAST"];
|
|
45
18
|
toast: ToasterToast;
|
|
@@ -53,108 +26,19 @@ type Action = {
|
|
|
53
26
|
type: ActionType["REMOVE_TOAST"];
|
|
54
27
|
toastId?: ToasterToast["id"];
|
|
55
28
|
};
|
|
56
|
-
/**
|
|
57
|
-
* État du gestionnaire de toasts
|
|
58
|
-
*/
|
|
59
29
|
interface State {
|
|
60
|
-
/** Liste des toasts actuellement affichés */
|
|
61
30
|
toasts: ToasterToast[];
|
|
62
31
|
}
|
|
63
|
-
/**
|
|
64
|
-
* Reducer pour gérer l'état des toasts
|
|
65
|
-
*
|
|
66
|
-
* @param state - État actuel
|
|
67
|
-
* @param action - Action à exécuter
|
|
68
|
-
* @returns Nouvel état
|
|
69
|
-
*
|
|
70
|
-
* @example
|
|
71
|
-
* ```ts
|
|
72
|
-
* // Ajouter un toast
|
|
73
|
-
* reducer(state, { type: "ADD_TOAST", toast: { id: "1", title: "Hello" } })
|
|
74
|
-
*
|
|
75
|
-
* // Fermer un toast
|
|
76
|
-
* reducer(state, { type: "DISMISS_TOAST", toastId: "1" })
|
|
77
|
-
* ```
|
|
78
|
-
*/
|
|
79
32
|
export declare const reducer: (state: State, action: Action) => State;
|
|
80
|
-
/**
|
|
81
|
-
* Type pour les props d'un nouveau toast (sans l'ID qui est généré automatiquement)
|
|
82
|
-
*/
|
|
83
33
|
type Toast = Omit<ToasterToast, "id">;
|
|
84
|
-
/**
|
|
85
|
-
* Crée et affiche un nouveau toast
|
|
86
|
-
*
|
|
87
|
-
* @param props - Propriétés du toast (title, description, variant, action, etc.)
|
|
88
|
-
* @returns Objet avec l'ID du toast et les méthodes dismiss/update
|
|
89
|
-
*
|
|
90
|
-
* @example
|
|
91
|
-
* ```tsx
|
|
92
|
-
* // Toast simple
|
|
93
|
-
* toast({ title: "Succès", description: "Opération réussie" })
|
|
94
|
-
*
|
|
95
|
-
* // Toast avec action
|
|
96
|
-
* toast({
|
|
97
|
-
* title: "Nouveau message",
|
|
98
|
-
* description: "Vous avez reçu un message",
|
|
99
|
-
* action: <ToastAction altText="Voir">Voir</ToastAction>
|
|
100
|
-
* })
|
|
101
|
-
*
|
|
102
|
-
* // Toast destructif
|
|
103
|
-
* toast({
|
|
104
|
-
* variant: "destructive",
|
|
105
|
-
* title: "Erreur",
|
|
106
|
-
* description: "Une erreur est survenue"
|
|
107
|
-
* })
|
|
108
|
-
*
|
|
109
|
-
* // Contrôler le toast
|
|
110
|
-
* const { id, dismiss, update } = toast({ title: "Chargement..." })
|
|
111
|
-
* // Plus tard...
|
|
112
|
-
* update({ title: "Terminé!" })
|
|
113
|
-
* // Ou...
|
|
114
|
-
* dismiss()
|
|
115
|
-
* ```
|
|
116
|
-
*/
|
|
117
34
|
declare function toast({ ...props }: Toast): {
|
|
118
|
-
/** Identifiant unique du toast créé */
|
|
119
35
|
id: string;
|
|
120
|
-
/** Ferme le toast */
|
|
121
36
|
dismiss: () => void;
|
|
122
|
-
/** Met à jour le toast avec de nouvelles propriétés */
|
|
123
37
|
update: (props: ToasterToast) => void;
|
|
124
38
|
};
|
|
125
|
-
/**
|
|
126
|
-
* Hook pour accéder au système de toasts
|
|
127
|
-
*
|
|
128
|
-
* Fournit l'état actuel des toasts et les méthodes pour les gérer.
|
|
129
|
-
*
|
|
130
|
-
* @returns Objet contenant les toasts, la fonction toast() et dismiss()
|
|
131
|
-
*
|
|
132
|
-
* @example
|
|
133
|
-
* ```tsx
|
|
134
|
-
* function MyComponent() {
|
|
135
|
-
* const { toast, toasts, dismiss } = useToast()
|
|
136
|
-
*
|
|
137
|
-
* const handleClick = () => {
|
|
138
|
-
* toast({
|
|
139
|
-
* title: "Hello!",
|
|
140
|
-
* description: "Ceci est une notification"
|
|
141
|
-
* })
|
|
142
|
-
* }
|
|
143
|
-
*
|
|
144
|
-
* return (
|
|
145
|
-
* <button onClick={handleClick}>
|
|
146
|
-
* Afficher toast
|
|
147
|
-
* </button>
|
|
148
|
-
* )
|
|
149
|
-
* }
|
|
150
|
-
* ```
|
|
151
|
-
*/
|
|
152
39
|
declare function useToast(): {
|
|
153
|
-
/** Fonction pour créer un nouveau toast */
|
|
154
40
|
toast: typeof toast;
|
|
155
|
-
/** Fonction pour fermer un toast spécifique ou tous les toasts */
|
|
156
41
|
dismiss: (toastId?: string) => void;
|
|
157
|
-
/** Liste des toasts actuellement affichés */
|
|
158
42
|
toasts: ToasterToast[];
|
|
159
43
|
};
|
|
160
44
|
export { useToast, toast };
|
|
@@ -1,22 +1,3 @@
|
|
|
1
|
-
import { default as i18n } from '../lib/i18n';
|
|
2
|
-
/**
|
|
3
|
-
* Type pour les options de traduction
|
|
4
|
-
*/
|
|
5
|
-
type TranslationOptions = Record<string, string | number | boolean> & {
|
|
6
|
-
defaultValue?: string;
|
|
7
|
-
};
|
|
8
|
-
/**
|
|
9
|
-
* Type pour la fonction de traduction
|
|
10
|
-
*/
|
|
11
|
-
type TranslationFunction = (key: string, options?: TranslationOptions) => string;
|
|
12
|
-
/**
|
|
13
|
-
* Type de retour du hook useTranslation
|
|
14
|
-
*/
|
|
15
|
-
interface TranslationResult {
|
|
16
|
-
t: TranslationFunction;
|
|
17
|
-
i18n: typeof i18n;
|
|
18
|
-
ready: boolean;
|
|
19
|
-
}
|
|
20
1
|
/**
|
|
21
2
|
* Hook pour utiliser les traductions dans les composants
|
|
22
3
|
*
|
|
@@ -25,14 +6,10 @@ interface TranslationResult {
|
|
|
25
6
|
*
|
|
26
7
|
* Si i18next n'est pas encore prêt, retourne la clé de traduction telle quelle.
|
|
27
8
|
*
|
|
28
|
-
* @param namespace - Namespace i18n optionnel
|
|
29
|
-
* @returns Objet contenant la fonction t, l'instance i18n et l'état ready
|
|
30
|
-
*
|
|
31
9
|
* @example
|
|
32
10
|
* ```tsx
|
|
33
11
|
* const { t } = useTranslation()
|
|
34
12
|
* return <div>{t('hello')}</div>
|
|
35
13
|
* ```
|
|
36
14
|
*/
|
|
37
|
-
export declare function useTranslation(
|
|
38
|
-
export {};
|
|
15
|
+
export declare function useTranslation(): any;
|