@wakastellar/ui 0.1.8 → 0.1.10
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 +2 -0
- package/dist/blocks/sidebar/index.d.ts +149 -0
- package/dist/components/DataTable/DataTable.d.ts +1 -1
- package/dist/components/DataTable/DataTableAdvanced.d.ts +1 -1
- package/dist/components/DataTable/DataTableBody.d.ts +68 -0
- package/dist/components/DataTable/DataTableCell.d.ts +34 -0
- package/dist/components/DataTable/DataTableConflictResolver.d.ts +45 -0
- package/dist/components/DataTable/DataTableFilterBuilder.d.ts +14 -0
- package/dist/components/DataTable/DataTableFilters.d.ts +3 -3
- package/dist/components/DataTable/DataTableHeader.d.ts +48 -0
- package/dist/components/DataTable/DataTableSelection.d.ts +17 -12
- package/dist/components/DataTable/DataTableSyncStatus.d.ts +31 -0
- package/dist/components/DataTable/formatters/index.d.ts +127 -0
- package/dist/components/DataTable/hooks/useDataTable.d.ts +1 -1
- package/dist/components/DataTable/hooks/useDataTableAdvanced.d.ts +1 -1
- package/dist/components/DataTable/hooks/useDataTableAdvancedFilters.d.ts +18 -0
- package/dist/components/DataTable/hooks/useDataTableColumnTemplates.d.ts +28 -0
- package/dist/components/DataTable/hooks/useDataTableExport.d.ts +7 -3
- package/dist/components/DataTable/hooks/useDataTableImport.d.ts +4 -2
- package/dist/components/DataTable/hooks/useDataTableOffline.d.ts +80 -0
- package/dist/components/DataTable/hooks/useDataTableVirtualization.d.ts +1 -1
- package/dist/components/DataTable/index.d.ts +48 -2
- package/dist/components/DataTable/services/IndexedDBService.d.ts +117 -0
- package/dist/components/DataTable/templates/index.d.ts +104 -0
- package/dist/components/DataTable/types.d.ts +417 -25
- package/dist/components/command/index.d.ts +1 -1
- package/dist/components/error-boundary/ErrorBoundary.d.ts +102 -0
- package/dist/components/error-boundary/index.d.ts +2 -0
- package/dist/components/index.d.ts +6 -0
- package/dist/components/typography/index.d.ts +1 -1
- package/dist/components/waka-autocomplete/index.d.ts +59 -0
- package/dist/components/waka-charts/WakaAreaChart.d.ts +12 -0
- package/dist/components/waka-charts/WakaBarChart.d.ts +12 -0
- package/dist/components/waka-charts/WakaChart.d.ts +17 -0
- package/dist/components/waka-charts/WakaLineChart.d.ts +12 -0
- package/dist/components/waka-charts/WakaMiniChart.d.ts +13 -0
- package/dist/components/waka-charts/WakaPieChart.d.ts +12 -0
- package/dist/components/waka-charts/WakaSparkline.d.ts +13 -0
- package/dist/components/waka-charts/dataTableHelpers.d.ts +34 -0
- package/dist/components/waka-charts/hooks/useChartTheme.d.ts +23 -0
- package/dist/components/waka-charts/hooks/useRechartsLoader.d.ts +161 -0
- package/dist/components/waka-charts/index.d.ts +57 -0
- package/dist/components/waka-charts/types.d.ts +298 -0
- package/dist/components/waka-color-picker/index.d.ts +40 -0
- package/dist/components/waka-file-upload/index.d.ts +49 -0
- package/dist/components/waka-rich-text-editor/index.d.ts +36 -0
- package/dist/context/admincrumb-context.d.ts +118 -1
- package/dist/context/language-context.d.ts +160 -22
- package/dist/context/theme-provider.d.ts +39 -1
- package/dist/context/waka-provider.d.ts +50 -7
- package/dist/hooks/use-toast.d.ts +116 -0
- package/dist/hooks/use-translation.d.ts +24 -1
- package/dist/hooks/useToast.d.ts +82 -0
- package/dist/index.cjs.js +32 -26
- package/dist/index.d.ts +9 -3
- package/dist/index.es.js +11356 -5724
- package/dist/types/provider.d.ts +30 -0
- package/dist/ui.css +1 -1
- package/dist/utils/cn.d.ts +15 -1
- package/dist/utils/datetime-helpers.d.ts +241 -33
- package/dist/utils/error-handling.d.ts +190 -0
- package/dist/utils/index.d.ts +2 -0
- package/dist/utils/logger.d.ts +4 -4
- package/dist/utils/theme-loader.d.ts +140 -30
- package/dist/utils/tweak.d.ts +14 -1
- package/package.json +63 -52
|
@@ -1,57 +1,195 @@
|
|
|
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 S3 ou localement
|
|
7
|
+
* - Cache des traductions déjà chargées
|
|
8
|
+
* - Intégration transparente avec i18next
|
|
9
|
+
* - Persistance de la langue dans localStorage
|
|
10
|
+
*
|
|
11
|
+
* @module context/language-context
|
|
12
|
+
*
|
|
13
|
+
* @example
|
|
14
|
+
* ```tsx
|
|
15
|
+
* // Configuration avec S3
|
|
16
|
+
* <LanguageProvider
|
|
17
|
+
* languages={[
|
|
18
|
+
* { code: "fr", label: "Français", flagEmoji: "🇫🇷" },
|
|
19
|
+
* { code: "en", label: "English", flagEmoji: "🇬🇧" }
|
|
20
|
+
* ]}
|
|
21
|
+
* defaultLanguage="fr"
|
|
22
|
+
* s3Config={{ baseUrl: "https://cdn.example.com/translations" }}
|
|
23
|
+
* >
|
|
24
|
+
* <App />
|
|
25
|
+
* </LanguageProvider>
|
|
26
|
+
* ```
|
|
27
|
+
*/
|
|
1
28
|
import * as React from "react";
|
|
29
|
+
/**
|
|
30
|
+
* Configuration pour le chargement des traductions depuis S3
|
|
31
|
+
*/
|
|
2
32
|
export interface S3Config {
|
|
3
|
-
/** URL de base du bucket S3 */
|
|
33
|
+
/** URL de base du bucket S3 (ex: "https://bucket.s3.region.amazonaws.com") */
|
|
4
34
|
baseUrl: string;
|
|
5
|
-
/** Préfixe des fichiers (ex: "translations/") */
|
|
35
|
+
/** Préfixe des fichiers de traduction (ex: "translations/") */
|
|
6
36
|
prefix?: string;
|
|
7
37
|
/** Extension des fichiers (défaut: "json") */
|
|
8
38
|
extension?: string;
|
|
9
|
-
/** Headers personnalisés pour les requêtes */
|
|
39
|
+
/** Headers HTTP personnalisés pour les requêtes */
|
|
10
40
|
headers?: Record<string, string>;
|
|
11
41
|
}
|
|
42
|
+
/**
|
|
43
|
+
* Type pour les traductions JSON inline
|
|
44
|
+
* Structure clé-valeur avec support des namespaces imbriqués
|
|
45
|
+
*/
|
|
46
|
+
export type TranslationsJSON = Record<string, string | Record<string, unknown>>;
|
|
47
|
+
/**
|
|
48
|
+
* Configuration d'une langue disponible
|
|
49
|
+
*
|
|
50
|
+
* @example
|
|
51
|
+
* ```ts
|
|
52
|
+
* // Avec traductions inline (recommandé pour éviter les dépendances externes)
|
|
53
|
+
* const french: LanguageConfig = {
|
|
54
|
+
* code: "fr",
|
|
55
|
+
* label: "Français",
|
|
56
|
+
* flagEmoji: "🇫🇷",
|
|
57
|
+
* translations: {
|
|
58
|
+
* common: {
|
|
59
|
+
* save: "Enregistrer",
|
|
60
|
+
* cancel: "Annuler"
|
|
61
|
+
* }
|
|
62
|
+
* }
|
|
63
|
+
* }
|
|
64
|
+
*
|
|
65
|
+
* // Sans traductions inline (utilise S3)
|
|
66
|
+
* const english: LanguageConfig = {
|
|
67
|
+
* code: "en",
|
|
68
|
+
* label: "English",
|
|
69
|
+
* flagEmoji: "🇬🇧"
|
|
70
|
+
* }
|
|
71
|
+
* ```
|
|
72
|
+
*/
|
|
12
73
|
export interface LanguageConfig {
|
|
74
|
+
/** Code ISO de la langue (ex: "fr", "en", "es") */
|
|
13
75
|
code: string;
|
|
76
|
+
/** Libellé d'affichage */
|
|
14
77
|
label: string;
|
|
78
|
+
/** Emoji du drapeau (optionnel) */
|
|
15
79
|
flagEmoji?: string;
|
|
80
|
+
/** URL de l'image du drapeau (optionnel) */
|
|
16
81
|
flag?: string;
|
|
82
|
+
/**
|
|
83
|
+
* Traductions inline au format JSON
|
|
84
|
+
* Si fourni, les traductions sont utilisées directement sans charger depuis S3
|
|
85
|
+
*/
|
|
86
|
+
translations?: TranslationsJSON;
|
|
17
87
|
}
|
|
88
|
+
/**
|
|
89
|
+
* Valeur exposée par le contexte de langue
|
|
90
|
+
*/
|
|
18
91
|
export interface LanguageContextValue {
|
|
19
|
-
/**
|
|
92
|
+
/** Code de la langue actuellement active */
|
|
20
93
|
currentLanguage: string;
|
|
21
|
-
/** Liste des langues disponibles */
|
|
94
|
+
/** Liste des langues disponibles configurées */
|
|
22
95
|
languages: LanguageConfig[];
|
|
23
|
-
/**
|
|
96
|
+
/** Change la langue active et charge les traductions si nécessaire */
|
|
24
97
|
changeLanguage: (code: string) => Promise<void>;
|
|
25
|
-
/**
|
|
98
|
+
/** Indique si un chargement de traductions est en cours */
|
|
26
99
|
isLoading: boolean;
|
|
27
|
-
/**
|
|
100
|
+
/** Set des codes de langues dont les traductions sont chargées */
|
|
28
101
|
loadedLanguages: Set<string>;
|
|
29
102
|
}
|
|
103
|
+
/**
|
|
104
|
+
* Props du provider de langue
|
|
105
|
+
*/
|
|
30
106
|
export interface LanguageProviderProps {
|
|
107
|
+
/** Composants enfants */
|
|
31
108
|
children: React.ReactNode;
|
|
32
|
-
/**
|
|
109
|
+
/** Liste des langues disponibles dans l'application */
|
|
33
110
|
languages: LanguageConfig[];
|
|
34
|
-
/**
|
|
111
|
+
/** Code de la langue par défaut (défaut: "fr") */
|
|
35
112
|
defaultLanguage?: string;
|
|
36
|
-
/** Configuration S3
|
|
113
|
+
/** Configuration S3 pour le chargement distant des traductions */
|
|
37
114
|
s3Config?: S3Config;
|
|
38
|
-
/** Callback après changement de langue */
|
|
115
|
+
/** Callback appelé après chaque changement de langue réussi */
|
|
39
116
|
onLanguageChange?: (code: string) => void;
|
|
117
|
+
/** Callback en cas d'erreur (chargement traductions, parsing, etc.) */
|
|
118
|
+
onError?: (error: WakaError) => void;
|
|
40
119
|
}
|
|
41
120
|
/**
|
|
42
|
-
*
|
|
121
|
+
* Provider pour la gestion de l'internationalisation
|
|
43
122
|
*
|
|
44
|
-
*
|
|
123
|
+
* Gère automatiquement:
|
|
124
|
+
* - Le chargement des traductions depuis inline JSON ou S3
|
|
125
|
+
* - Le cache des traductions déjà chargées
|
|
126
|
+
* - La persistance de la langue dans localStorage
|
|
127
|
+
* - L'intégration avec i18next
|
|
45
128
|
*
|
|
46
|
-
*
|
|
47
|
-
*
|
|
48
|
-
*
|
|
49
|
-
*
|
|
50
|
-
*
|
|
51
|
-
*
|
|
129
|
+
* @example
|
|
130
|
+
* ```tsx
|
|
131
|
+
* // Configuration avec traductions inline (sans dépendance externe)
|
|
132
|
+
* <LanguageProvider
|
|
133
|
+
* languages={[
|
|
134
|
+
* {
|
|
135
|
+
* code: "fr",
|
|
136
|
+
* label: "Français",
|
|
137
|
+
* translations: {
|
|
138
|
+
* common: { save: "Enregistrer", cancel: "Annuler" }
|
|
139
|
+
* }
|
|
140
|
+
* },
|
|
141
|
+
* {
|
|
142
|
+
* code: "en",
|
|
143
|
+
* label: "English",
|
|
144
|
+
* translations: {
|
|
145
|
+
* common: { save: "Save", cancel: "Cancel" }
|
|
146
|
+
* }
|
|
147
|
+
* }
|
|
148
|
+
* ]}
|
|
149
|
+
* >
|
|
150
|
+
* <App />
|
|
151
|
+
* </LanguageProvider>
|
|
152
|
+
*
|
|
153
|
+
* // Avec S3 pour chargement distant
|
|
154
|
+
* <LanguageProvider
|
|
155
|
+
* languages={languages}
|
|
156
|
+
* s3Config={{ baseUrl: "https://cdn.example.com/i18n" }}
|
|
157
|
+
* onLanguageChange={(lang) => analytics.track("language_changed", { lang })}
|
|
158
|
+
* >
|
|
159
|
+
* <App />
|
|
160
|
+
* </LanguageProvider>
|
|
161
|
+
* ```
|
|
52
162
|
*/
|
|
53
|
-
export declare function LanguageProvider({ children, languages, defaultLanguage, s3Config, onLanguageChange, }: LanguageProviderProps): import("react/jsx-runtime").JSX.Element;
|
|
163
|
+
export declare function LanguageProvider({ children, languages, defaultLanguage, s3Config, onLanguageChange, onError, }: LanguageProviderProps): import("react/jsx-runtime").JSX.Element;
|
|
54
164
|
/**
|
|
55
|
-
* Hook pour
|
|
165
|
+
* Hook pour accéder au contexte de langue
|
|
166
|
+
*
|
|
167
|
+
* Fournit la langue courante, les langues disponibles et la fonction
|
|
168
|
+
* de changement de langue.
|
|
169
|
+
*
|
|
170
|
+
* @throws {Error} Si utilisé en dehors d'un LanguageProvider
|
|
171
|
+
*
|
|
172
|
+
* @returns Valeur du contexte de langue
|
|
173
|
+
*
|
|
174
|
+
* @example
|
|
175
|
+
* ```tsx
|
|
176
|
+
* function LanguageSwitcher() {
|
|
177
|
+
* const { currentLanguage, languages, changeLanguage, isLoading } = useLanguage()
|
|
178
|
+
*
|
|
179
|
+
* return (
|
|
180
|
+
* <select
|
|
181
|
+
* value={currentLanguage}
|
|
182
|
+
* onChange={(e) => changeLanguage(e.target.value)}
|
|
183
|
+
* disabled={isLoading}
|
|
184
|
+
* >
|
|
185
|
+
* {languages.map((lang) => (
|
|
186
|
+
* <option key={lang.code} value={lang.code}>
|
|
187
|
+
* {lang.flagEmoji} {lang.label}
|
|
188
|
+
* </option>
|
|
189
|
+
* ))}
|
|
190
|
+
* </select>
|
|
191
|
+
* )
|
|
192
|
+
* }
|
|
193
|
+
* ```
|
|
56
194
|
*/
|
|
57
195
|
export declare function useLanguage(): LanguageContextValue;
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { WakaError } from '../utils/error-handling';
|
|
1
2
|
import * as React from "react";
|
|
2
3
|
export interface ThemeS3Config {
|
|
3
4
|
/** URL de base du bucket S3 */
|
|
@@ -11,6 +12,22 @@ export interface ThemeS3Config {
|
|
|
11
12
|
/** Timeout en millisecondes */
|
|
12
13
|
timeout?: number;
|
|
13
14
|
}
|
|
15
|
+
/**
|
|
16
|
+
* Variables CSS pour un thème
|
|
17
|
+
* Peut contenir des variables CSS standard ou des objets de couleur
|
|
18
|
+
*/
|
|
19
|
+
export type ThemeCSSVariables = Record<string, string | number | {
|
|
20
|
+
r?: number;
|
|
21
|
+
g?: number;
|
|
22
|
+
b?: number;
|
|
23
|
+
a?: number;
|
|
24
|
+
h?: number;
|
|
25
|
+
s?: number;
|
|
26
|
+
l?: number;
|
|
27
|
+
}>;
|
|
28
|
+
/**
|
|
29
|
+
* Configuration d'un thème avec variables CSS inline
|
|
30
|
+
*/
|
|
14
31
|
export interface ThemeConfig {
|
|
15
32
|
/** Identifiant du thème (utilisé dans data-theme) */
|
|
16
33
|
id: string;
|
|
@@ -20,6 +37,25 @@ export interface ThemeConfig {
|
|
|
20
37
|
description?: string;
|
|
21
38
|
/** Couleur représentative du thème (pour preview) */
|
|
22
39
|
previewColor?: string;
|
|
40
|
+
/**
|
|
41
|
+
* Variables CSS du thème au format JSON
|
|
42
|
+
* Permet de définir le thème directement sans charger depuis S3
|
|
43
|
+
*
|
|
44
|
+
* @example
|
|
45
|
+
* ```ts
|
|
46
|
+
* cssVars: {
|
|
47
|
+
* "--background": "0 0% 100%",
|
|
48
|
+
* "--foreground": "222.2 84% 4.9%",
|
|
49
|
+
* "--primary": "222.2 47.4% 11.2%"
|
|
50
|
+
* }
|
|
51
|
+
* ```
|
|
52
|
+
*/
|
|
53
|
+
cssVars?: ThemeCSSVariables;
|
|
54
|
+
/**
|
|
55
|
+
* Variables CSS pour le mode sombre
|
|
56
|
+
* Utilisées quand .dark est appliqué
|
|
57
|
+
*/
|
|
58
|
+
darkCssVars?: ThemeCSSVariables;
|
|
23
59
|
}
|
|
24
60
|
export interface ThemeContextValue {
|
|
25
61
|
/** Thème courant */
|
|
@@ -51,6 +87,8 @@ export interface ThemeProviderProps {
|
|
|
51
87
|
s3Config?: ThemeS3Config;
|
|
52
88
|
/** Callback après changement de thème */
|
|
53
89
|
onThemeChange?: (id: string) => void;
|
|
90
|
+
/** Callback en cas d'erreur (chargement thème, parsing, etc.) */
|
|
91
|
+
onError?: (error: WakaError) => void;
|
|
54
92
|
/** Activer le mode sombre (optionnel) */
|
|
55
93
|
enableDarkMode?: boolean;
|
|
56
94
|
}
|
|
@@ -67,7 +105,7 @@ export interface ThemeProviderProps {
|
|
|
67
105
|
* - Préchargement de thèmes
|
|
68
106
|
* - Support des thèmes locaux si pas de S3
|
|
69
107
|
*/
|
|
70
|
-
export declare function ThemeProvider({ children, themes, defaultTheme, s3Config, onThemeChange, enableDarkMode, }: ThemeProviderProps): import("react/jsx-runtime").JSX.Element;
|
|
108
|
+
export declare function ThemeProvider({ children, themes, defaultTheme, s3Config, onThemeChange, onError, enableDarkMode, }: ThemeProviderProps): import("react/jsx-runtime").JSX.Element;
|
|
71
109
|
/**
|
|
72
110
|
* Hook pour utiliser le ThemeProvider
|
|
73
111
|
*/
|
|
@@ -2,23 +2,66 @@ 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
|
|
5
|
+
* Centralise la configuration du thème et de la langue.
|
|
6
|
+
* Fonctionne avec des thèmes/traductions inline (sans dépendance S3)
|
|
7
|
+
* ou avec S3 pour un chargement distant.
|
|
6
8
|
*
|
|
7
9
|
* @example
|
|
8
10
|
* ```tsx
|
|
11
|
+
* // Configuration avec thèmes et traductions inline (sans S3)
|
|
9
12
|
* <WakaProvider config={{
|
|
10
13
|
* theme: {
|
|
11
14
|
* defaultTheme: "light",
|
|
12
|
-
* themes: [
|
|
13
|
-
*
|
|
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
|
+
* ]
|
|
14
33
|
* },
|
|
15
34
|
* language: {
|
|
16
35
|
* defaultLanguage: "fr",
|
|
17
36
|
* supportedLanguages: ["fr", "en"],
|
|
18
|
-
*
|
|
19
|
-
*
|
|
20
|
-
*
|
|
21
|
-
*
|
|
37
|
+
* languages: [
|
|
38
|
+
* {
|
|
39
|
+
* code: "fr",
|
|
40
|
+
* label: "Français",
|
|
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" }
|
|
22
65
|
* }
|
|
23
66
|
* }}>
|
|
24
67
|
* <App />
|
|
@@ -1,11 +1,34 @@
|
|
|
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
|
+
*/
|
|
2
13
|
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
|
+
*/
|
|
3
18
|
type ToasterToast = ToastProps & {
|
|
19
|
+
/** Identifiant unique du toast */
|
|
4
20
|
id: string;
|
|
21
|
+
/** Titre du toast */
|
|
5
22
|
title?: React.ReactNode;
|
|
23
|
+
/** Description/contenu du toast */
|
|
6
24
|
description?: React.ReactNode;
|
|
25
|
+
/** Élément d'action optionnel (bouton, lien, etc.) */
|
|
7
26
|
action?: ToastActionElement;
|
|
8
27
|
};
|
|
28
|
+
/**
|
|
29
|
+
* Types d'actions disponibles pour le reducer de toasts
|
|
30
|
+
* @internal
|
|
31
|
+
*/
|
|
9
32
|
declare const actionTypes: {
|
|
10
33
|
readonly ADD_TOAST: "ADD_TOAST";
|
|
11
34
|
readonly UPDATE_TOAST: "UPDATE_TOAST";
|
|
@@ -13,6 +36,10 @@ declare const actionTypes: {
|
|
|
13
36
|
readonly REMOVE_TOAST: "REMOVE_TOAST";
|
|
14
37
|
};
|
|
15
38
|
type ActionType = typeof actionTypes;
|
|
39
|
+
/**
|
|
40
|
+
* Union type des actions possibles pour le reducer de toasts
|
|
41
|
+
* @internal
|
|
42
|
+
*/
|
|
16
43
|
type Action = {
|
|
17
44
|
type: ActionType["ADD_TOAST"];
|
|
18
45
|
toast: ToasterToast;
|
|
@@ -26,19 +53,108 @@ type Action = {
|
|
|
26
53
|
type: ActionType["REMOVE_TOAST"];
|
|
27
54
|
toastId?: ToasterToast["id"];
|
|
28
55
|
};
|
|
56
|
+
/**
|
|
57
|
+
* État du gestionnaire de toasts
|
|
58
|
+
*/
|
|
29
59
|
interface State {
|
|
60
|
+
/** Liste des toasts actuellement affichés */
|
|
30
61
|
toasts: ToasterToast[];
|
|
31
62
|
}
|
|
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
|
+
*/
|
|
32
79
|
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
|
+
*/
|
|
33
83
|
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
|
+
*/
|
|
34
117
|
declare function toast({ ...props }: Toast): {
|
|
118
|
+
/** Identifiant unique du toast créé */
|
|
35
119
|
id: string;
|
|
120
|
+
/** Ferme le toast */
|
|
36
121
|
dismiss: () => void;
|
|
122
|
+
/** Met à jour le toast avec de nouvelles propriétés */
|
|
37
123
|
update: (props: ToasterToast) => void;
|
|
38
124
|
};
|
|
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
|
+
*/
|
|
39
152
|
declare function useToast(): {
|
|
153
|
+
/** Fonction pour créer un nouveau toast */
|
|
40
154
|
toast: typeof toast;
|
|
155
|
+
/** Fonction pour fermer un toast spécifique ou tous les toasts */
|
|
41
156
|
dismiss: (toastId?: string) => void;
|
|
157
|
+
/** Liste des toasts actuellement affichés */
|
|
42
158
|
toasts: ToasterToast[];
|
|
43
159
|
};
|
|
44
160
|
export { useToast, toast };
|
|
@@ -1,3 +1,22 @@
|
|
|
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
|
+
}
|
|
1
20
|
/**
|
|
2
21
|
* Hook pour utiliser les traductions dans les composants
|
|
3
22
|
*
|
|
@@ -6,10 +25,14 @@
|
|
|
6
25
|
*
|
|
7
26
|
* Si i18next n'est pas encore prêt, retourne la clé de traduction telle quelle.
|
|
8
27
|
*
|
|
28
|
+
* @param namespace - Namespace i18n optionnel
|
|
29
|
+
* @returns Objet contenant la fonction t, l'instance i18n et l'état ready
|
|
30
|
+
*
|
|
9
31
|
* @example
|
|
10
32
|
* ```tsx
|
|
11
33
|
* const { t } = useTranslation()
|
|
12
34
|
* return <div>{t('hello')}</div>
|
|
13
35
|
* ```
|
|
14
36
|
*/
|
|
15
|
-
export declare function useTranslation():
|
|
37
|
+
export declare function useTranslation(namespace?: string): TranslationResult;
|
|
38
|
+
export {};
|
package/dist/hooks/useToast.d.ts
CHANGED
|
@@ -1,11 +1,34 @@
|
|
|
1
1
|
import { ToastActionElement, ToastProps } from '../components/toast';
|
|
2
|
+
/**
|
|
3
|
+
* @fileoverview Système de notifications toast pour WakaStart UI
|
|
4
|
+
*
|
|
5
|
+
* Ce module implémente un système de gestion des notifications toast
|
|
6
|
+
* avec support pour:
|
|
7
|
+
* - Création, mise à jour et suppression de toasts
|
|
8
|
+
* - Limite configurable du nombre de toasts affichés
|
|
9
|
+
* - Suppression automatique après délai
|
|
10
|
+
* - Pattern publish/subscribe pour la réactivité React
|
|
11
|
+
*
|
|
12
|
+
* @module hooks/useToast
|
|
13
|
+
*/
|
|
2
14
|
import * as React from "react";
|
|
15
|
+
/**
|
|
16
|
+
* Représente un toast complet avec toutes ses propriétés
|
|
17
|
+
* Étend ToastProps avec les propriétés spécifiques au système
|
|
18
|
+
*/
|
|
3
19
|
type ToasterToast = ToastProps & {
|
|
20
|
+
/** Identifiant unique du toast */
|
|
4
21
|
id: string;
|
|
22
|
+
/** Titre du toast */
|
|
5
23
|
title?: React.ReactNode;
|
|
24
|
+
/** Description/contenu du toast */
|
|
6
25
|
description?: React.ReactNode;
|
|
26
|
+
/** Action personnalisée (bouton, lien, etc.) */
|
|
7
27
|
action?: ToastActionElement;
|
|
8
28
|
};
|
|
29
|
+
/**
|
|
30
|
+
* Types d'actions disponibles pour le reducer
|
|
31
|
+
*/
|
|
9
32
|
declare const actionTypes: {
|
|
10
33
|
readonly ADD_TOAST: "ADD_TOAST";
|
|
11
34
|
readonly UPDATE_TOAST: "UPDATE_TOAST";
|
|
@@ -13,6 +36,9 @@ declare const actionTypes: {
|
|
|
13
36
|
readonly REMOVE_TOAST: "REMOVE_TOAST";
|
|
14
37
|
};
|
|
15
38
|
type ActionType = typeof actionTypes;
|
|
39
|
+
/**
|
|
40
|
+
* Actions disponibles pour manipuler l'état des toasts
|
|
41
|
+
*/
|
|
16
42
|
type Action = {
|
|
17
43
|
type: ActionType["ADD_TOAST"];
|
|
18
44
|
toast: ToasterToast;
|
|
@@ -26,19 +52,75 @@ type Action = {
|
|
|
26
52
|
type: ActionType["REMOVE_TOAST"];
|
|
27
53
|
toastId?: ToasterToast["id"];
|
|
28
54
|
};
|
|
55
|
+
/**
|
|
56
|
+
* État global du système de toasts
|
|
57
|
+
*/
|
|
29
58
|
interface State {
|
|
59
|
+
/** Liste des toasts actuellement actifs */
|
|
30
60
|
toasts: ToasterToast[];
|
|
31
61
|
}
|
|
62
|
+
/**
|
|
63
|
+
* Reducer pour la gestion de l'état des toasts
|
|
64
|
+
*
|
|
65
|
+
* @param state - État actuel
|
|
66
|
+
* @param action - Action à appliquer
|
|
67
|
+
* @returns Nouvel état
|
|
68
|
+
*/
|
|
32
69
|
export declare const reducer: (state: State, action: Action) => State;
|
|
70
|
+
/** Type pour les props de création d'un toast (sans l'ID) */
|
|
33
71
|
type Toast = Omit<ToasterToast, "id">;
|
|
72
|
+
/**
|
|
73
|
+
* Crée et affiche un nouveau toast
|
|
74
|
+
*
|
|
75
|
+
* @param props - Propriétés du toast (title, description, variant, action, etc.)
|
|
76
|
+
* @returns Objet avec l'ID du toast et les méthodes dismiss/update
|
|
77
|
+
*
|
|
78
|
+
* @example
|
|
79
|
+
* ```tsx
|
|
80
|
+
* // Toast simple
|
|
81
|
+
* toast({ title: "Succès", description: "Opération réussie" })
|
|
82
|
+
*
|
|
83
|
+
* // Toast avec action
|
|
84
|
+
* toast({
|
|
85
|
+
* title: "Fichier supprimé",
|
|
86
|
+
* action: <ToastAction onClick={undo}>Annuler</ToastAction>
|
|
87
|
+
* })
|
|
88
|
+
*
|
|
89
|
+
* // Contrôler le toast
|
|
90
|
+
* const { id, dismiss, update } = toast({ title: "Chargement..." })
|
|
91
|
+
* update({ title: "Terminé !" })
|
|
92
|
+
* ```
|
|
93
|
+
*/
|
|
34
94
|
declare function toast({ ...props }: Toast): {
|
|
35
95
|
id: string;
|
|
36
96
|
dismiss: () => void;
|
|
37
97
|
update: (props: ToasterToast) => void;
|
|
38
98
|
};
|
|
99
|
+
/**
|
|
100
|
+
* Hook pour accéder au système de toasts
|
|
101
|
+
*
|
|
102
|
+
* Fournit l'état actuel des toasts et les méthodes pour les manipuler.
|
|
103
|
+
* S'abonne automatiquement aux mises à jour de l'état.
|
|
104
|
+
*
|
|
105
|
+
* @returns État des toasts et méthodes de manipulation
|
|
106
|
+
*
|
|
107
|
+
* @example
|
|
108
|
+
* ```tsx
|
|
109
|
+
* function MyComponent() {
|
|
110
|
+
* const { toasts, toast, dismiss } = useToast()
|
|
111
|
+
*
|
|
112
|
+
* return (
|
|
113
|
+
* <button onClick={() => toast({ title: "Hello!" })}>
|
|
114
|
+
* Afficher toast
|
|
115
|
+
* </button>
|
|
116
|
+
* )
|
|
117
|
+
* }
|
|
118
|
+
* ```
|
|
119
|
+
*/
|
|
39
120
|
declare function useToast(): {
|
|
40
121
|
toast: typeof toast;
|
|
41
122
|
dismiss: (toastId?: string) => void;
|
|
123
|
+
/** Liste des toasts actuellement actifs */
|
|
42
124
|
toasts: ToasterToast[];
|
|
43
125
|
};
|
|
44
126
|
export { useToast, toast };
|