@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.
Files changed (66) hide show
  1. package/dist/blocks/index.d.ts +2 -0
  2. package/dist/blocks/sidebar/index.d.ts +149 -0
  3. package/dist/components/DataTable/DataTable.d.ts +1 -1
  4. package/dist/components/DataTable/DataTableAdvanced.d.ts +1 -1
  5. package/dist/components/DataTable/DataTableBody.d.ts +68 -0
  6. package/dist/components/DataTable/DataTableCell.d.ts +34 -0
  7. package/dist/components/DataTable/DataTableConflictResolver.d.ts +45 -0
  8. package/dist/components/DataTable/DataTableFilterBuilder.d.ts +14 -0
  9. package/dist/components/DataTable/DataTableFilters.d.ts +3 -3
  10. package/dist/components/DataTable/DataTableHeader.d.ts +48 -0
  11. package/dist/components/DataTable/DataTableSelection.d.ts +17 -12
  12. package/dist/components/DataTable/DataTableSyncStatus.d.ts +31 -0
  13. package/dist/components/DataTable/formatters/index.d.ts +127 -0
  14. package/dist/components/DataTable/hooks/useDataTable.d.ts +1 -1
  15. package/dist/components/DataTable/hooks/useDataTableAdvanced.d.ts +1 -1
  16. package/dist/components/DataTable/hooks/useDataTableAdvancedFilters.d.ts +18 -0
  17. package/dist/components/DataTable/hooks/useDataTableColumnTemplates.d.ts +28 -0
  18. package/dist/components/DataTable/hooks/useDataTableExport.d.ts +7 -3
  19. package/dist/components/DataTable/hooks/useDataTableImport.d.ts +4 -2
  20. package/dist/components/DataTable/hooks/useDataTableOffline.d.ts +80 -0
  21. package/dist/components/DataTable/hooks/useDataTableVirtualization.d.ts +1 -1
  22. package/dist/components/DataTable/index.d.ts +48 -2
  23. package/dist/components/DataTable/services/IndexedDBService.d.ts +117 -0
  24. package/dist/components/DataTable/templates/index.d.ts +104 -0
  25. package/dist/components/DataTable/types.d.ts +417 -25
  26. package/dist/components/command/index.d.ts +1 -1
  27. package/dist/components/error-boundary/ErrorBoundary.d.ts +102 -0
  28. package/dist/components/error-boundary/index.d.ts +2 -0
  29. package/dist/components/index.d.ts +6 -0
  30. package/dist/components/typography/index.d.ts +1 -1
  31. package/dist/components/waka-autocomplete/index.d.ts +59 -0
  32. package/dist/components/waka-charts/WakaAreaChart.d.ts +12 -0
  33. package/dist/components/waka-charts/WakaBarChart.d.ts +12 -0
  34. package/dist/components/waka-charts/WakaChart.d.ts +17 -0
  35. package/dist/components/waka-charts/WakaLineChart.d.ts +12 -0
  36. package/dist/components/waka-charts/WakaMiniChart.d.ts +13 -0
  37. package/dist/components/waka-charts/WakaPieChart.d.ts +12 -0
  38. package/dist/components/waka-charts/WakaSparkline.d.ts +13 -0
  39. package/dist/components/waka-charts/dataTableHelpers.d.ts +34 -0
  40. package/dist/components/waka-charts/hooks/useChartTheme.d.ts +23 -0
  41. package/dist/components/waka-charts/hooks/useRechartsLoader.d.ts +161 -0
  42. package/dist/components/waka-charts/index.d.ts +57 -0
  43. package/dist/components/waka-charts/types.d.ts +298 -0
  44. package/dist/components/waka-color-picker/index.d.ts +40 -0
  45. package/dist/components/waka-file-upload/index.d.ts +49 -0
  46. package/dist/components/waka-rich-text-editor/index.d.ts +36 -0
  47. package/dist/context/admincrumb-context.d.ts +118 -1
  48. package/dist/context/language-context.d.ts +160 -22
  49. package/dist/context/theme-provider.d.ts +39 -1
  50. package/dist/context/waka-provider.d.ts +50 -7
  51. package/dist/hooks/use-toast.d.ts +116 -0
  52. package/dist/hooks/use-translation.d.ts +24 -1
  53. package/dist/hooks/useToast.d.ts +82 -0
  54. package/dist/index.cjs.js +32 -26
  55. package/dist/index.d.ts +9 -3
  56. package/dist/index.es.js +11356 -5724
  57. package/dist/types/provider.d.ts +30 -0
  58. package/dist/ui.css +1 -1
  59. package/dist/utils/cn.d.ts +15 -1
  60. package/dist/utils/datetime-helpers.d.ts +241 -33
  61. package/dist/utils/error-handling.d.ts +190 -0
  62. package/dist/utils/index.d.ts +2 -0
  63. package/dist/utils/logger.d.ts +4 -4
  64. package/dist/utils/theme-loader.d.ts +140 -30
  65. package/dist/utils/tweak.d.ts +14 -1
  66. 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
- /** Langue courante */
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
- /** Changer de langue */
96
+ /** Change la langue active et charge les traductions si nécessaire */
24
97
  changeLanguage: (code: string) => Promise<void>;
25
- /** État de chargement */
98
+ /** Indique si un chargement de traductions est en cours */
26
99
  isLoading: boolean;
27
- /** Traductions chargées */
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
- /** Langues disponibles */
109
+ /** Liste des langues disponibles dans l'application */
33
110
  languages: LanguageConfig[];
34
- /** Langue par défaut */
111
+ /** Code de la langue par défaut (défaut: "fr") */
35
112
  defaultLanguage?: string;
36
- /** Configuration S3 (optionnel - si non fourni, utilise les traductions locales) */
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
- * LanguageProvider
121
+ * Provider pour la gestion de l'internationalisation
43
122
  *
44
- * Provider pour gérer les langues et charger les traductions depuis S3.
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
- * Features:
47
- * - Chargement dynamique des traductions depuis S3
48
- * - Cache des traductions déjà chargées
49
- * - Intégration avec i18next
50
- * - Persistance dans localStorage
51
- * - Support des traductions locales si pas de S3
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 utiliser le contexte de langue
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, de la langue et des traductions S3
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: ["light", "dark", "forest"],
13
- * enableSystem: true
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
- * s3Config: {
19
- * bucketUrl: "https://my-bucket.s3.amazonaws.com",
20
- * translationsPath: "translations"
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(): any;
37
+ export declare function useTranslation(namespace?: string): TranslationResult;
38
+ export {};
@@ -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 };