@lastbrain/ai-ui-react 1.0.68 → 1.0.70

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 (76) hide show
  1. package/dist/components/AiChipLabel.d.ts +8 -3
  2. package/dist/components/AiChipLabel.d.ts.map +1 -1
  3. package/dist/components/AiChipLabel.js +23 -70
  4. package/dist/components/AiContextButton.d.ts +10 -2
  5. package/dist/components/AiContextButton.d.ts.map +1 -1
  6. package/dist/components/AiContextButton.js +73 -291
  7. package/dist/components/AiImageButton.d.ts +5 -1
  8. package/dist/components/AiImageButton.d.ts.map +1 -1
  9. package/dist/components/AiImageButton.js +6 -142
  10. package/dist/components/AiInput.d.ts +5 -3
  11. package/dist/components/AiInput.d.ts.map +1 -1
  12. package/dist/components/AiInput.js +13 -25
  13. package/dist/components/AiPromptPanel.d.ts.map +1 -1
  14. package/dist/components/AiPromptPanel.js +64 -212
  15. package/dist/components/AiSelect.d.ts +5 -3
  16. package/dist/components/AiSelect.d.ts.map +1 -1
  17. package/dist/components/AiSelect.js +21 -30
  18. package/dist/components/AiStatusButton.d.ts +4 -1
  19. package/dist/components/AiStatusButton.d.ts.map +1 -1
  20. package/dist/components/AiStatusButton.js +211 -676
  21. package/dist/components/AiTextarea.d.ts +4 -2
  22. package/dist/components/AiTextarea.d.ts.map +1 -1
  23. package/dist/components/AiTextarea.js +14 -26
  24. package/dist/components/LBApiKeySelector.d.ts.map +1 -1
  25. package/dist/components/LBApiKeySelector.js +5 -166
  26. package/dist/components/LBConnectButton.d.ts +4 -7
  27. package/dist/components/LBConnectButton.d.ts.map +1 -1
  28. package/dist/components/LBConnectButton.js +17 -86
  29. package/dist/components/LBSigninModal.d.ts +1 -1
  30. package/dist/components/LBSigninModal.d.ts.map +1 -1
  31. package/dist/components/LBSigninModal.js +42 -320
  32. package/dist/context/LBAuthProvider.d.ts +35 -3
  33. package/dist/context/LBAuthProvider.d.ts.map +1 -1
  34. package/dist/context/LBAuthProvider.js +2 -0
  35. package/dist/examples/AiUiPremiumShowcase.d.ts +2 -0
  36. package/dist/examples/AiUiPremiumShowcase.d.ts.map +1 -0
  37. package/dist/examples/AiUiPremiumShowcase.js +15 -0
  38. package/dist/hooks/useAiModels.d.ts.map +1 -1
  39. package/dist/hooks/useModelManagement.d.ts.map +1 -1
  40. package/dist/index.d.ts +2 -0
  41. package/dist/index.d.ts.map +1 -1
  42. package/dist/index.js +2 -0
  43. package/dist/styles/inline.d.ts +1 -0
  44. package/dist/styles/inline.d.ts.map +1 -1
  45. package/dist/styles/inline.js +25 -129
  46. package/dist/styles.css +1268 -369
  47. package/dist/types.d.ts +3 -0
  48. package/dist/types.d.ts.map +1 -1
  49. package/dist/utils/errorHandler.d.ts +2 -2
  50. package/dist/utils/errorHandler.d.ts.map +1 -1
  51. package/dist/utils/errorHandler.js +8 -1
  52. package/dist/utils/modelManagement.d.ts +13 -10
  53. package/dist/utils/modelManagement.d.ts.map +1 -1
  54. package/dist/utils/modelManagement.js +19 -2
  55. package/package.json +2 -2
  56. package/src/components/AiChipLabel.tsx +68 -101
  57. package/src/components/AiContextButton.tsx +142 -413
  58. package/src/components/AiImageButton.tsx +29 -190
  59. package/src/components/AiInput.tsx +49 -74
  60. package/src/components/AiPromptPanel.tsx +81 -260
  61. package/src/components/AiSelect.tsx +61 -69
  62. package/src/components/AiStatusButton.tsx +496 -1327
  63. package/src/components/AiTextarea.tsx +50 -63
  64. package/src/components/LBApiKeySelector.tsx +93 -271
  65. package/src/components/LBConnectButton.tsx +39 -336
  66. package/src/components/LBSigninModal.tsx +141 -472
  67. package/src/context/LBAuthProvider.tsx +45 -6
  68. package/src/examples/AiUiPremiumShowcase.tsx +94 -0
  69. package/src/hooks/useAiModels.ts +2 -1
  70. package/src/hooks/useModelManagement.ts +2 -1
  71. package/src/index.ts +3 -0
  72. package/src/styles/inline.ts +27 -148
  73. package/src/styles.css +1268 -369
  74. package/src/types.ts +3 -0
  75. package/src/utils/errorHandler.ts +16 -3
  76. package/src/utils/modelManagement.ts +53 -15
@@ -1,59 +1,57 @@
1
1
  "use client";
2
2
  import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
3
- import { useState } from "react";
3
+ import { useEffect, useMemo, useState } from "react";
4
+ import { createPortal } from "react-dom";
5
+ import { AlertCircle, Loader2, Lock, Mail, Sparkles, X } from "lucide-react";
4
6
  import { useLB } from "../context/LBAuthProvider";
5
7
  import { LBApiKeySelector } from "./LBApiKeySelector";
6
- import { Mail, Lock, Sparkles, X, Loader2, AlertCircle } from "lucide-react";
7
8
  export function LBSigninModal({ isOpen, onClose }) {
8
- // React Hooks doivent être appelés avant toute condition ou return
9
+ const lbContext = useLB();
10
+ const [portalRoot, setPortalRoot] = useState(null);
9
11
  const [email, setEmail] = useState("");
10
12
  const [password, setPassword] = useState("");
11
13
  const [loading, setLoading] = useState(false);
12
14
  const [error, setError] = useState("");
13
15
  const [showKeySelector, setShowKeySelector] = useState(false);
14
- const [currentApiKeys, setCurrentApiKeys] = useState([]); // Stocker les clés API localement
15
- // Appeler useLB() inconditionnellement - hook doit toujours être appelé
16
- const lbContext = useLB();
17
- // Vérifier si le contexte est valide
18
- if (!lbContext || !isOpen) {
16
+ const [currentApiKeys, setCurrentApiKeys] = useState([]);
17
+ const { login, selectApiKeyWithToken, fetchApiKeys } = lbContext || {};
18
+ const canRender = Boolean(isOpen && lbContext && login);
19
+ const panelTitle = useMemo(() => "Connexion LastBrain", []);
20
+ useEffect(() => {
21
+ setPortalRoot(document.body);
22
+ }, []);
23
+ if (!canRender || !portalRoot) {
19
24
  return null;
20
25
  }
21
- // Extraire les valeurs du contexte
22
- const { login, selectApiKeyWithToken, fetchApiKeys, apiKeys = [], status: lbStatus, } = lbContext;
23
- if (!isOpen || !login)
24
- return null;
25
26
  const handleSubmit = async (e) => {
26
27
  e.preventDefault();
28
+ if (!login) {
29
+ return;
30
+ }
27
31
  setError("");
28
32
  setLoading(true);
29
33
  try {
30
34
  const result = await login(email, password);
31
- if (result.success) {
32
- if (result.needsKeySelection) {
33
- // L'utilisateur doit choisir une clé API
34
- // Utiliser l'access token retourné directement par login
35
- if (fetchApiKeys && result.accessToken) {
36
- try {
37
- const keys = await fetchApiKeys(result.accessToken);
38
- setCurrentApiKeys(keys);
39
- setShowKeySelector(true);
40
- }
41
- catch (keyError) {
42
- setError("Erreur lors de la récupération des clés API");
43
- console.error("Failed to fetch API keys:", keyError);
44
- }
45
- }
46
- else {
47
- setError("Token d'accès non disponible");
48
- }
49
- }
50
- else {
51
- // Connexion réussie, fermer le modal
52
- onClose();
53
- }
54
- }
55
- else {
35
+ if (!result.success) {
56
36
  setError(result.error || "Échec de la connexion");
37
+ return;
38
+ }
39
+ if (!result.needsKeySelection) {
40
+ onClose();
41
+ return;
42
+ }
43
+ if (!fetchApiKeys || !result.accessToken) {
44
+ setError("Token d'accès non disponible");
45
+ return;
46
+ }
47
+ try {
48
+ const keys = await fetchApiKeys(result.accessToken);
49
+ setCurrentApiKeys(keys || []);
50
+ setShowKeySelector(true);
51
+ }
52
+ catch (keyError) {
53
+ console.error("Failed to fetch API keys:", keyError);
54
+ setError("Erreur lors de la récupération des clés API");
57
55
  }
58
56
  }
59
57
  catch (err) {
@@ -64,8 +62,9 @@ export function LBSigninModal({ isOpen, onClose }) {
64
62
  }
65
63
  };
66
64
  const handleKeySelect = async (apiKeyId) => {
67
- if (!selectApiKeyWithToken)
65
+ if (!selectApiKeyWithToken) {
68
66
  return;
67
+ }
69
68
  try {
70
69
  await selectApiKeyWithToken(apiKeyId);
71
70
  setShowKeySelector(false);
@@ -78,291 +77,14 @@ export function LBSigninModal({ isOpen, onClose }) {
78
77
  };
79
78
  const handleCancelKeySelection = () => {
80
79
  setShowKeySelector(false);
81
- // Fermer complètement le modal au lieu de rester dans l'état de sélection
82
80
  onClose();
83
81
  };
84
- // Si on doit afficher le sélecteur de clés
85
82
  if (showKeySelector && currentApiKeys.length > 0) {
86
- return (_jsx(LBApiKeySelector, { apiKeys: currentApiKeys, onSelect: handleKeySelect, onCancel: handleCancelKeySelection, isOpen: true }));
83
+ return createPortal(_jsx(LBApiKeySelector, { apiKeys: currentApiKeys, onSelect: handleKeySelect, onCancel: handleCancelKeySelection, isOpen: true }), portalRoot);
87
84
  }
88
- const handleKeyDown = (e) => {
89
- if (e.key === "Escape") {
90
- onClose();
91
- }
92
- };
93
- return (_jsxs("div", { style: {
94
- position: "fixed",
95
- top: 0,
96
- left: 0,
97
- right: 0,
98
- bottom: 0,
99
- width: "100vw",
100
- height: "100vh",
101
- backgroundColor: "rgba(0, 0, 0, 0.75)",
102
- backdropFilter: "blur(12px)",
103
- WebkitBackdropFilter: "blur(12px)",
104
- display: "flex",
105
- alignItems: "center",
106
- justifyContent: "center",
107
- zIndex: 9999,
108
- padding: "16px",
109
- animation: "fadeIn 0.2s ease-out",
110
- overflow: "auto",
111
- }, onClick: onClose, onKeyDown: handleKeyDown, children: [_jsxs("div", { style: {
112
- backgroundColor: "light-dark(#ffffff, #1e293b)",
113
- borderRadius: "20px",
114
- boxShadow: "0 0 0 1px rgba(139, 92, 246, 0.2), 0 20px 70px rgba(139, 92, 246, 0.25), 0 4px 6px rgba(0, 0, 0, 0.1)",
115
- maxWidth: "440px",
116
- width: "100%",
117
- border: "1px solid light-dark(rgba(226, 232, 240, 0.8), rgba(139, 92, 246, 0.3))",
118
- display: "flex",
119
- flexDirection: "column",
120
- maxHeight: "90vh",
121
- overflow: "hidden",
122
- position: "relative",
123
- animation: "slideUp 0.3s ease-out",
124
- }, onClick: (e) => e.stopPropagation(), children: [_jsx("div", { style: {
125
- position: "absolute",
126
- top: 0,
127
- left: 0,
128
- right: 0,
129
- height: "200px",
130
- background: "radial-gradient(ellipse at top, rgba(139, 92, 246, 0.15), transparent 70%)",
131
- pointerEvents: "none",
132
- zIndex: 0,
133
- } }), _jsxs("div", { style: {
134
- padding: "32px 32px 24px",
135
- display: "flex",
136
- flexDirection: "column",
137
- alignItems: "center",
138
- gap: "16px",
139
- position: "relative",
140
- zIndex: 1,
141
- }, children: [_jsx("div", { style: {
142
- width: "64px",
143
- height: "64px",
144
- borderRadius: "16px",
145
- background: "linear-gradient(135deg, #8b5cf6 0%, #7c3aed 100%)",
146
- display: "flex",
147
- alignItems: "center",
148
- justifyContent: "center",
149
- boxShadow: "0 8px 24px rgba(139, 92, 246, 0.3)",
150
- animation: "pulse 2s ease-in-out infinite",
151
- }, children: _jsx(Sparkles, { size: 32, color: "#ffffff", strokeWidth: 2.5 }) }), _jsxs("div", { style: { textAlign: "center" }, children: [_jsx("h2", { style: {
152
- margin: "0 0 8px 0",
153
- fontSize: "24px",
154
- fontWeight: 700,
155
- color: "light-dark(#1e293b, #f8fafc)",
156
- letterSpacing: "-0.02em",
157
- }, children: "Connexion LastBrain" }), _jsx("p", { style: {
158
- margin: 0,
159
- fontSize: "14px",
160
- color: "light-dark(#64748b, #94a3b8)",
161
- fontWeight: 400,
162
- }, children: "Acc\u00E9dez \u00E0 vos outils d'intelligence artificielle" })] }), _jsx("button", { onClick: onClose, style: {
163
- position: "absolute",
164
- top: "24px",
165
- right: "24px",
166
- background: "transparent",
167
- border: "none",
168
- color: "light-dark(#64748b, #94a3b8)",
169
- cursor: "pointer",
170
- padding: "8px",
171
- borderRadius: "10px",
172
- transition: "all 0.2s ease",
173
- display: "flex",
174
- alignItems: "center",
175
- justifyContent: "center",
176
- }, onMouseEnter: (e) => {
177
- e.currentTarget.style.background =
178
- "light-dark(rgba(100, 116, 139, 0.1), rgba(148, 163, 184, 0.15))";
179
- e.currentTarget.style.color = "light-dark(#1e293b, #f8fafc)";
180
- }, onMouseLeave: (e) => {
181
- e.currentTarget.style.background = "transparent";
182
- e.currentTarget.style.color = "light-dark(#64748b, #94a3b8)";
183
- }, "aria-label": "Close", children: _jsx(X, { size: 20, strokeWidth: 2 }) })] }), _jsx("div", { style: {
184
- padding: "0 32px 32px",
185
- overflow: "auto",
186
- flex: 1,
187
- position: "relative",
188
- zIndex: 1,
189
- }, children: _jsxs("form", { onSubmit: handleSubmit, style: { display: "flex", flexDirection: "column", gap: "20px" }, children: [_jsxs("div", { children: [_jsxs("label", { style: {
190
- display: "flex",
191
- alignItems: "center",
192
- gap: "8px",
193
- fontSize: "13px",
194
- fontWeight: 600,
195
- color: "light-dark(#1e293b, #f8fafc)",
196
- marginBottom: "10px",
197
- letterSpacing: "0.01em",
198
- }, children: [_jsx(Mail, { size: 16, strokeWidth: 2.5 }), "Email"] }), _jsx("div", { style: { position: "relative" }, children: _jsx("input", { type: "email", value: email, onChange: (e) => setEmail(e.target.value), required: true, autoFocus: true, autoComplete: "email", placeholder: "votre@email.com", style: {
199
- width: "100%",
200
- padding: "14px 16px",
201
- fontSize: "15px",
202
- border: "2px solid light-dark(#e2e8f0, #334155)",
203
- borderRadius: "12px",
204
- background: "light-dark(#f8fafc, #0f172a)",
205
- color: "light-dark(#1e293b, #f8fafc)",
206
- outline: "none",
207
- transition: "all 0.2s ease",
208
- fontWeight: 500,
209
- }, onFocus: (e) => {
210
- e.currentTarget.style.borderColor =
211
- "rgba(139, 92, 246, 0.6)";
212
- e.currentTarget.style.boxShadow =
213
- "0 0 0 4px rgba(139, 92, 246, 0.15)";
214
- e.currentTarget.style.background =
215
- "light-dark(#ffffff, #1e293b)";
216
- }, onBlur: (e) => {
217
- e.currentTarget.style.borderColor =
218
- "light-dark(#e2e8f0, #334155)";
219
- e.currentTarget.style.boxShadow = "none";
220
- e.currentTarget.style.background =
221
- "light-dark(#f8fafc, #0f172a)";
222
- } }) })] }), _jsxs("div", { children: [_jsxs("label", { style: {
223
- display: "flex",
224
- alignItems: "center",
225
- gap: "8px",
226
- fontSize: "13px",
227
- fontWeight: 600,
228
- color: "light-dark(#1e293b, #f8fafc)",
229
- marginBottom: "10px",
230
- letterSpacing: "0.01em",
231
- }, children: [_jsx(Lock, { size: 16, strokeWidth: 2.5 }), "Mot de passe"] }), _jsx("div", { style: { position: "relative" }, children: _jsx("input", { type: "password", value: password, onChange: (e) => setPassword(e.target.value), required: true, autoComplete: "current-password", placeholder: "\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022", style: {
232
- width: "100%",
233
- padding: "14px 16px",
234
- fontSize: "15px",
235
- border: "2px solid light-dark(#e2e8f0, #334155)",
236
- borderRadius: "12px",
237
- background: "light-dark(#f8fafc, #0f172a)",
238
- color: "light-dark(#1e293b, #f8fafc)",
239
- outline: "none",
240
- transition: "all 0.2s ease",
241
- letterSpacing: "0.15em",
242
- fontWeight: 500,
243
- }, onFocus: (e) => {
244
- e.currentTarget.style.borderColor =
245
- "rgba(139, 92, 246, 0.6)";
246
- e.currentTarget.style.boxShadow =
247
- "0 0 0 4px rgba(139, 92, 246, 0.15)";
248
- e.currentTarget.style.background =
249
- "light-dark(#ffffff, #1e293b)";
250
- }, onBlur: (e) => {
251
- e.currentTarget.style.borderColor =
252
- "light-dark(#e2e8f0, #334155)";
253
- e.currentTarget.style.boxShadow = "none";
254
- e.currentTarget.style.background =
255
- "light-dark(#f8fafc, #0f172a)";
256
- } }) })] }), error && (_jsxs("div", { style: {
257
- padding: "14px 16px",
258
- background: "rgba(239, 68, 68, 0.1)",
259
- border: "2px solid rgba(239, 68, 68, 0.35)",
260
- borderRadius: "12px",
261
- color: "light-dark(#dc2626, #fca5a5)",
262
- fontSize: "14px",
263
- display: "flex",
264
- alignItems: "start",
265
- gap: "12px",
266
- animation: "shake 0.4s ease",
267
- }, children: [_jsx(AlertCircle, { size: 20, style: { flexShrink: 0, marginTop: "2px" }, strokeWidth: 2.5 }), _jsx("span", { style: { flex: 1, lineHeight: "1.5", fontWeight: 500 }, children: error })] })), _jsx("button", { type: "submit", disabled: loading, style: {
268
- width: "100%",
269
- padding: "16px",
270
- fontSize: "15px",
271
- fontWeight: 700,
272
- color: "#ffffff",
273
- background: loading
274
- ? "light-dark(#cbd5e1, #475569)"
275
- : "linear-gradient(135deg, #8b5cf6 0%, #7c3aed 100%)",
276
- border: "none",
277
- borderRadius: "12px",
278
- cursor: loading ? "not-allowed" : "pointer",
279
- transition: "all 0.2s ease",
280
- display: "flex",
281
- alignItems: "center",
282
- justifyContent: "center",
283
- gap: "10px",
284
- letterSpacing: "0.01em",
285
- opacity: loading ? 0.6 : 1,
286
- boxShadow: loading
287
- ? "none"
288
- : "0 4px 14px rgba(139, 92, 246, 0.4)",
289
- }, onMouseEnter: (e) => {
290
- if (!loading) {
291
- e.currentTarget.style.transform = "translateY(-2px)";
292
- e.currentTarget.style.boxShadow =
293
- "0 8px 24px rgba(139, 92, 246, 0.6)";
294
- }
295
- }, onMouseLeave: (e) => {
296
- e.currentTarget.style.transform = "translateY(0)";
297
- e.currentTarget.style.boxShadow =
298
- "0 4px 14px rgba(139, 92, 246, 0.4)";
299
- }, children: loading ? (_jsxs(_Fragment, { children: [_jsx(Loader2, { size: 20, strokeWidth: 2.5, style: { animation: "spin 1s linear infinite" } }), "Connexion en cours..."] })) : (_jsxs(_Fragment, { children: [_jsx(Sparkles, { size: 20, strokeWidth: 2.5 }), "Se connecter"] })) }), _jsxs("div", { style: {
300
- marginTop: "8px",
301
- padding: "20px",
302
- background: "rgba(139, 92, 246, 0.05)",
303
- border: "1px solid rgba(139, 92, 246, 0.2)",
304
- borderRadius: "16px",
305
- textAlign: "center",
306
- }, children: [_jsx("p", { style: {
307
- margin: "0 0 14px 0",
308
- fontSize: "14px",
309
- color: "light-dark(#64748b, #94a3b8)",
310
- fontWeight: 500,
311
- }, children: "Pas encore de compte ?" }), _jsxs("a", { href: "https://prompt.lastbrain.io/signup", target: "_blank", rel: "noopener noreferrer", style: {
312
- display: "inline-flex",
313
- alignItems: "center",
314
- gap: "8px",
315
- padding: "10px 20px",
316
- fontSize: "14px",
317
- fontWeight: 600,
318
- color: "#8b5cf6",
319
- textDecoration: "none",
320
- border: "2px solid rgba(139, 92, 246, 0.3)",
321
- borderRadius: "10px",
322
- transition: "all 0.2s ease",
323
- }, onMouseEnter: (e) => {
324
- e.currentTarget.style.background = "rgba(139, 92, 246, 0.1)";
325
- e.currentTarget.style.borderColor = "rgba(139, 92, 246, 0.5)";
326
- e.currentTarget.style.transform = "translateY(-1px)";
327
- }, onMouseLeave: (e) => {
328
- e.currentTarget.style.background = "transparent";
329
- e.currentTarget.style.borderColor = "rgba(139, 92, 246, 0.3)";
330
- e.currentTarget.style.transform = "translateY(0)";
331
- }, children: [_jsx(Sparkles, { size: 16, strokeWidth: 2.5 }), "Cr\u00E9er un compte gratuitement"] })] })] }) })] }), _jsx("style", { children: `
332
- @keyframes fadeIn {
333
- from { opacity: 0; }
334
- to { opacity: 1; }
335
- }
336
-
337
- @keyframes slideUp {
338
- from {
339
- opacity: 0;
340
- transform: translateY(20px) scale(0.95);
341
- }
342
- to {
343
- opacity: 1;
344
- transform: translateY(0) scale(1);
345
- }
346
- }
347
-
348
- @keyframes spin {
349
- from { transform: rotate(0deg); }
350
- to { transform: rotate(360deg); }
351
- }
352
-
353
- @keyframes pulse {
354
- 0%, 100% {
355
- box-shadow: 0 8px 24px rgba(139, 92, 246, 0.3);
356
- }
357
- 50% {
358
- box-shadow: 0 8px 32px rgba(139, 92, 246, 0.5);
85
+ return createPortal(_jsx("div", { className: "ai-signin-overlay", onClick: onClose, onKeyDown: (e) => {
86
+ if (e.key === "Escape") {
87
+ onClose();
359
88
  }
360
- }
361
-
362
- @keyframes shake {
363
- 0%, 100% { transform: translateX(0); }
364
- 25% { transform: translateX(-8px); }
365
- 75% { transform: translateX(8px); }
366
- }
367
- ` })] }));
89
+ }, role: "dialog", "aria-modal": "true", "aria-label": panelTitle, children: _jsxs("div", { className: "ai-signin-panel", onClick: (e) => e.stopPropagation(), children: [_jsx("button", { type: "button", className: "ai-icon-btn ai-signin-close", onClick: onClose, "aria-label": "Fermer", children: _jsx(X, { size: 16 }) }), _jsxs("div", { className: "ai-signin-header", children: [_jsx("div", { className: "ai-center mb-3", children: _jsx("span", { className: "ai-icon-badge", children: _jsx(Sparkles, { size: 22 }) }) }), _jsx("h2", { className: "ai-signin-title", children: panelTitle }), _jsx("p", { className: "ai-signin-subtitle", children: "Connectez-vous pour activer les composants IA dans votre app." })] }), _jsx("div", { className: "ai-signin-content", children: _jsxs("form", { onSubmit: handleSubmit, children: [_jsxs("div", { className: "ai-input-row", children: [_jsxs("label", { htmlFor: "lb-signin-email", className: "ai-input-label ai-row", children: [_jsx(Mail, { size: 14, className: "ai-inline-icon" }), "Email"] }), _jsx("div", { className: "ai-control-group ai-glow", children: _jsx("div", { className: "ai-shell ai-size-md ai-radius-full", children: _jsx("input", { id: "lb-signin-email", className: "ai-control ai-control-input ai-size-md ai-radius-full", type: "email", value: email, onChange: (e) => setEmail(e.target.value), required: true, autoFocus: true, autoComplete: "email", placeholder: "votre@email.com" }) }) })] }), _jsxs("div", { className: "ai-input-row", children: [_jsxs("label", { htmlFor: "lb-signin-password", className: "ai-input-label ai-row", children: [_jsx(Lock, { size: 14, className: "ai-inline-icon" }), "Mot de passe"] }), _jsx("div", { className: "ai-control-group ai-glow", children: _jsx("div", { className: "ai-shell ai-size-md ai-radius-full", children: _jsx("input", { id: "lb-signin-password", className: "ai-control ai-control-input ai-size-md ai-radius-full", type: "password", value: password, onChange: (e) => setPassword(e.target.value), required: true, autoComplete: "current-password", placeholder: "\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022" }) }) })] }), error ? (_jsxs("div", { className: "ai-signin-error", role: "alert", children: [_jsx(AlertCircle, { size: 16 }), _jsx("span", { children: error })] })) : null, _jsxs("div", { className: "ai-signin-actions", children: [_jsx("button", { type: "submit", className: "ai-btn ai-btn--auth", disabled: loading, children: loading ? (_jsxs(_Fragment, { children: [_jsx(Loader2, { size: 16, className: "ai-spinner" }), "Connexion..."] })) : (_jsxs(_Fragment, { children: [_jsx(Sparkles, { size: 16 }), "Se connecter"] })) }), _jsx("a", { href: "https://prompt.lastbrain.io/signup", target: "_blank", rel: "noopener noreferrer", className: "ai-btn ai-btn--ghost", children: "Cr\u00E9er un compte" })] })] }) })] }) }), portalRoot);
368
90
  }
@@ -4,6 +4,36 @@
4
4
  */
5
5
  import { type ReactNode } from "react";
6
6
  import type { LBAuthState, LBApiKey, AiStatus } from "@lastbrain/ai-ui-core";
7
+ export interface ApiKeyUser {
8
+ id?: string;
9
+ name?: string;
10
+ prefix?: string;
11
+ env?: string;
12
+ rate_limit_rpm?: number;
13
+ scopes?: string[];
14
+ }
15
+ export interface BasicStatus {
16
+ authType?: string;
17
+ user?: {
18
+ id?: string;
19
+ email?: string;
20
+ } | null;
21
+ apiKey?: ApiKeyUser | null;
22
+ api_key?: ApiKeyUser | null;
23
+ balance?: {
24
+ used?: number;
25
+ total?: number;
26
+ percentage?: number;
27
+ };
28
+ storage?: StorageStatus["storage"];
29
+ }
30
+ export interface StorageStatus {
31
+ storage?: {
32
+ used_mb?: number;
33
+ allocated_mb?: number;
34
+ percentage?: number;
35
+ } | null;
36
+ }
7
37
  interface LBProviderProps {
8
38
  children: ReactNode;
9
39
  /** URL de l'API LastBrain (ex: https://api.lastbrain.io) */
@@ -42,9 +72,9 @@ interface LBContextValue extends LBAuthState {
42
72
  /** Status API (balance, storage, API key info) */
43
73
  apiStatus: AiStatus | null;
44
74
  /** Status basique (rapide) - balance, API key info sans storage */
45
- basicStatus: any;
75
+ basicStatus: BasicStatus | null;
46
76
  /** Status storage (lent) avec cache */
47
- storageStatus: any;
77
+ storageStatus: StorageStatus | null;
48
78
  /** Fonction pour rafraîchir le status rapide */
49
79
  refreshBasicStatus: () => Promise<void>;
50
80
  /** Fonction pour rafraîchir le storage (avec cache optionnel) */
@@ -56,10 +86,12 @@ interface LBContextValue extends LBAuthState {
56
86
  /** Indique si le storage est en cours de chargement */
57
87
  isLoadingStorage: boolean;
58
88
  }
89
+ declare const LBContext: import("react").Context<LBContextValue | undefined>;
90
+ export { LBContext };
59
91
  export declare function LBProvider({ children, baseUrl: _baseUrl, proxyUrl, onStatusChange, onAuthChange, }: LBProviderProps): import("react/jsx-runtime").JSX.Element;
60
92
  /**
61
93
  * Hook pour accéder au contexte LastBrain
62
94
  */
63
95
  export declare function useLB(): LBContextValue;
64
- export {};
96
+ export type { LBApiKey };
65
97
  //# sourceMappingURL=LBAuthProvider.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"LBAuthProvider.d.ts","sourceRoot":"","sources":["../../src/context/LBAuthProvider.tsx"],"names":[],"mappings":"AAEA;;;GAGG;AAEH,OAAO,EAOL,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AACf,OAAO,KAAK,EACV,WAAW,EACX,QAAQ,EAIR,QAAQ,EACT,MAAM,uBAAuB,CAAC;AAG/B,UAAU,eAAe;IACvB,QAAQ,EAAE,SAAS,CAAC;IACpB,4DAA4D;IAC5D,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,uCAAuC;IACvC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,mDAAmD;IACnD,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,WAAW,CAAC,QAAQ,CAAC,KAAK,IAAI,CAAC;IACzD,sEAAsE;IACtE,YAAY,CAAC,EAAE,MAAM,IAAI,CAAC;CAC3B;AAED,UAAU,cAAe,SAAQ,WAAW;IAC1C,4BAA4B;IAC5B,KAAK,EAAE,CACL,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,MAAM,KACb,OAAO,CAAC;QACX,OAAO,EAAE,OAAO,CAAC;QACjB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,iBAAiB,CAAC,EAAE,OAAO,CAAC;QAC5B,WAAW,CAAC,EAAE,MAAM,CAAC;KACtB,CAAC,CAAC;IACH,8BAA8B;IAC9B,MAAM,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5B,6CAA6C;IAC7C,YAAY,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC;IAC3D,gEAAgE;IAChE,YAAY,EAAE,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACvE,mDAAmD;IACnD,qBAAqB,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3D,iEAAiE;IACjE,YAAY,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAClD,oCAAoC;IACpC,cAAc,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IACpC,2BAA2B;IAC3B,OAAO,EAAE,QAAQ,EAAE,CAAC;IACpB,4CAA4C;IAC5C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,kDAAkD;IAClD,SAAS,EAAE,QAAQ,GAAG,IAAI,CAAC;IAC3B,mEAAmE;IACnE,WAAW,EAAE,GAAG,CAAC;IACjB,uCAAuC;IACvC,aAAa,EAAE,GAAG,CAAC;IACnB,gDAAgD;IAChD,kBAAkB,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IACxC,iEAAiE;IACjE,oBAAoB,EAAE,CAAC,KAAK,CAAC,EAAE,OAAO,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACzD,kEAAkE;IAClE,aAAa,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IACnC,8DAA8D;IAC9D,eAAe,EAAE,OAAO,CAAC;IACzB,uDAAuD;IACvD,gBAAgB,EAAE,OAAO,CAAC;CAC3B;AAID,wBAAgB,UAAU,CAAC,EACzB,QAAQ,EACR,OAAO,EAAE,QAA2B,EACpC,QAA2B,EAC3B,cAAc,EACd,YAAY,GACb,EAAE,eAAe,2CAsgBjB;AAED;;GAEG;AACH,wBAAgB,KAAK,IAAI,cAAc,CAMtC"}
1
+ {"version":3,"file":"LBAuthProvider.d.ts","sourceRoot":"","sources":["../../src/context/LBAuthProvider.tsx"],"names":[],"mappings":"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"}
@@ -7,6 +7,8 @@ import { jsx as _jsx } from "react/jsx-runtime";
7
7
  import { createContext, useContext, useEffect, useCallback, useMemo, useState, } from "react";
8
8
  import { createLBClient } from "@lastbrain/ai-ui-core";
9
9
  const LBContext = createContext(undefined);
10
+ // Export pour usage dans d'autres composants
11
+ export { LBContext };
10
12
  export function LBProvider({ children, baseUrl: _baseUrl = "/api/lastbrain", proxyUrl = "/api/lastbrain", onStatusChange, onAuthChange, }) {
11
13
  const [state, setState] = useState({
12
14
  status: "loading",
@@ -0,0 +1,2 @@
1
+ export declare function AiUiPremiumShowcase(): import("react/jsx-runtime").JSX.Element;
2
+ //# sourceMappingURL=AiUiPremiumShowcase.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AiUiPremiumShowcase.d.ts","sourceRoot":"","sources":["../../src/examples/AiUiPremiumShowcase.tsx"],"names":[],"mappings":"AAsFA,wBAAgB,mBAAmB,4CAOlC"}
@@ -0,0 +1,15 @@
1
+ "use client";
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { Sparkles } from "lucide-react";
4
+ import { AiProvider } from "../context/AiProvider";
5
+ import { AiInput } from "../components/AiInput";
6
+ import { AiTextarea } from "../components/AiTextarea";
7
+ import { AiChipLabel } from "../components/AiChipLabel";
8
+ function ShowcasePanel({ title, theme, }) {
9
+ return (_jsxs("section", { "data-theme": theme, className: `rounded-2xl border p-6 ${theme === "dark"
10
+ ? "bg-slate-950 border-slate-800 text-slate-100"
11
+ : "bg-white border-slate-200 text-slate-900"}`, children: [_jsxs("div", { className: "mb-4 flex items-center justify-between", children: [_jsx("h3", { className: "text-base font-semibold", children: title }), _jsx("span", { className: "text-xs opacity-70", children: theme })] }), _jsx(AiProvider, { baseUrl: "/api/ai", apiKeyId: "demo-key", children: _jsxs("div", { className: "space-y-4", children: [_jsx(AiInput, { value: "", onChange: () => { }, placeholder: "Ask anything...", "data-testid": `showcase-input-${theme}` }), _jsx(AiTextarea, { value: "", onChange: () => { }, placeholder: "Generate a concise product description...", "data-testid": `showcase-textarea-${theme}` }), _jsxs("div", { className: "flex flex-wrap gap-2", children: [_jsx(AiChipLabel, { children: "Default" }), _jsx(AiChipLabel, { variant: "selected", children: "Selected" }), _jsx(AiChipLabel, { variant: "success", children: "Success" }), _jsx(AiChipLabel, { variant: "danger", children: "Danger" })] }), _jsxs("div", { className: "ai-surface p-3", children: [_jsxs("div", { className: "flex items-center justify-between", children: [_jsx("span", { className: "text-sm font-medium", children: "Static control states" }), _jsx(Sparkles, { size: 14, className: "text-[var(--ai-primary)]" })] }), _jsxs("div", { className: "mt-3 space-y-2", children: [_jsx("input", { className: "ai-control ai-control-input", placeholder: "Default state" }), _jsx("input", { className: "ai-control ai-control-input ai-control--focused", placeholder: "Focused style", readOnly: true }), _jsx("input", { className: "ai-control ai-control-input ai-control--error", "aria-invalid": "true", placeholder: "Error style", readOnly: true }), _jsx("input", { className: "ai-control ai-control-input ai-control--disabled", placeholder: "Disabled style", disabled: true })] })] })] }) })] }));
12
+ }
13
+ export function AiUiPremiumShowcase() {
14
+ return (_jsxs("div", { className: "grid gap-6 md:grid-cols-2", children: [_jsx(ShowcasePanel, { title: "Premium UI Showcase", theme: "dark" }), _jsx(ShowcasePanel, { title: "Premium UI Showcase", theme: "light" })] }));
15
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"useAiModels.d.ts","sourceRoot":"","sources":["../../src/hooks/useAiModels.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAGtD,MAAM,WAAW,kBAAkB;IACjC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,GAAG,UAAU,GAAG,OAAO,GAAG,OAAO,GAAG,kBAAkB,CAAC;CAC1E;AAED,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,QAAQ,EAAE,CAAC;IACnB,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IACpB,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,OAAO,CAAC,EAAE,kBAAkB,GAAG,iBAAiB,CA4F3E"}
1
+ {"version":3,"file":"useAiModels.d.ts","sourceRoot":"","sources":["../../src/hooks/useAiModels.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAGtD,MAAM,WAAW,kBAAkB;IACjC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,GAAG,UAAU,GAAG,OAAO,GAAG,OAAO,GAAG,kBAAkB,CAAC;CAC1E;AAED,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,QAAQ,EAAE,CAAC;IACnB,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IACpB,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,OAAO,CAAC,EAAE,kBAAkB,GAAG,iBAAiB,CA6F3E"}
@@ -1 +1 @@
1
- {"version":3,"file":"useModelManagement.d.ts","sourceRoot":"","sources":["../../src/hooks/useModelManagement.ts"],"names":[],"mappings":"AACA,OAAO,EAAgB,KAAK,OAAO,EAAE,MAAM,uBAAuB,CAAC;AACnE,OAAO,EAEL,KAAK,kBAAkB,EACxB,MAAM,0BAA0B,CAAC;AAElC,MAAM,WAAW,yBAA0B,SAAQ,kBAAkB;IACnE,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,CAAC;CACjD;AAED,MAAM,WAAW,wBAAwB;IAEvC,eAAe,EAAE,OAAO,EAAE,CAAC;IAC3B,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAGrB,WAAW,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,OAAO,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACpE,aAAa,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IACnC,iBAAiB,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAGvC,aAAa,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC;IAC5C,eAAe,EAAE,MAAM,OAAO,EAAE,CAAC;IACjC,iBAAiB,EAAE,MAAM,OAAO,EAAE,CAAC;CACpC;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAChC,OAAO,GAAE,yBAA8B,GACtC,wBAAwB,CA+H1B"}
1
+ {"version":3,"file":"useModelManagement.d.ts","sourceRoot":"","sources":["../../src/hooks/useModelManagement.ts"],"names":[],"mappings":"AACA,OAAO,EAAgB,KAAK,OAAO,EAAE,MAAM,uBAAuB,CAAC;AACnE,OAAO,EAEL,KAAK,kBAAkB,EACxB,MAAM,0BAA0B,CAAC;AAElC,MAAM,WAAW,yBAA0B,SAAQ,kBAAkB;IACnE,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,CAAC;CACjD;AAED,MAAM,WAAW,wBAAwB;IAEvC,eAAe,EAAE,OAAO,EAAE,CAAC;IAC3B,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAGrB,WAAW,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,OAAO,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACpE,aAAa,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IACnC,iBAAiB,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAGvC,aAAa,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC;IAC5C,eAAe,EAAE,MAAM,OAAO,EAAE,CAAC;IACjC,iBAAiB,EAAE,MAAM,OAAO,EAAE,CAAC;CACpC;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAChC,OAAO,GAAE,yBAA8B,GACtC,wBAAwB,CAgI1B"}
package/dist/index.d.ts CHANGED
@@ -1,3 +1,4 @@
1
+ import "./styles.css";
1
2
  export * from "./types";
2
3
  export * from "./context/AiProvider";
3
4
  export * from "./context/LBAuthProvider";
@@ -32,4 +33,5 @@ export * from "./examples/AiPromptPanelAdvanced";
32
33
  export * from "./examples/AiChipInputExample";
33
34
  export * from "./examples/AiImageButtonExample";
34
35
  export * from "./examples/AiContextButtonExample";
36
+ export * from "./examples/AiUiPremiumShowcase";
35
37
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,cAAc,SAAS,CAAC;AAGxB,cAAc,sBAAsB,CAAC;AACrC,cAAc,0BAA0B,CAAC;AAGzC,cAAc,qBAAqB,CAAC;AACpC,cAAc,qBAAqB,CAAC;AACpC,cAAc,qBAAqB,CAAC;AACpC,cAAc,uBAAuB,CAAC;AACtC,cAAc,wBAAwB,CAAC;AACvC,cAAc,oBAAoB,CAAC;AACnC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,eAAe,CAAC;AAG9B,cAAc,4BAA4B,CAAC;AAC3C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,sBAAsB,CAAC;AACrC,cAAc,yBAAyB,CAAC;AACxC,cAAc,uBAAuB,CAAC;AACtC,cAAc,0BAA0B,CAAC;AACzC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,0BAA0B,CAAC;AAGzC,cAAc,yBAAyB,CAAC;AACxC,cAAc,yBAAyB,CAAC;AAGxC,cAAc,yBAAyB,CAAC;AACxC,cAAc,eAAe,CAAC;AAG9B,cAAc,6BAA6B,CAAC;AAC5C,cAAc,kCAAkC,CAAC;AACjD,cAAc,+BAA+B,CAAC;AAC9C,cAAc,iCAAiC,CAAC;AAChD,cAAc,mCAAmC,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,cAAc,CAAC;AAGtB,cAAc,SAAS,CAAC;AAGxB,cAAc,sBAAsB,CAAC;AACrC,cAAc,0BAA0B,CAAC;AAGzC,cAAc,qBAAqB,CAAC;AACpC,cAAc,qBAAqB,CAAC;AACpC,cAAc,qBAAqB,CAAC;AACpC,cAAc,uBAAuB,CAAC;AACtC,cAAc,wBAAwB,CAAC;AACvC,cAAc,oBAAoB,CAAC;AACnC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,eAAe,CAAC;AAG9B,cAAc,4BAA4B,CAAC;AAC3C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,sBAAsB,CAAC;AACrC,cAAc,yBAAyB,CAAC;AACxC,cAAc,uBAAuB,CAAC;AACtC,cAAc,0BAA0B,CAAC;AACzC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,0BAA0B,CAAC;AAGzC,cAAc,yBAAyB,CAAC;AACxC,cAAc,yBAAyB,CAAC;AAGxC,cAAc,yBAAyB,CAAC;AACxC,cAAc,eAAe,CAAC;AAG9B,cAAc,6BAA6B,CAAC;AAC5C,cAAc,kCAAkC,CAAC;AACjD,cAAc,+BAA+B,CAAC;AAC9C,cAAc,iCAAiC,CAAC;AAChD,cAAc,mCAAmC,CAAC;AAClD,cAAc,gCAAgC,CAAC"}
package/dist/index.js CHANGED
@@ -1,3 +1,4 @@
1
+ import "./styles.css";
1
2
  // Types
2
3
  export * from "./types";
3
4
  // Context
@@ -39,3 +40,4 @@ export * from "./examples/AiPromptPanelAdvanced";
39
40
  export * from "./examples/AiChipInputExample";
40
41
  export * from "./examples/AiImageButtonExample";
41
42
  export * from "./examples/AiContextButtonExample";
43
+ export * from "./examples/AiUiPremiumShowcase";
@@ -2,6 +2,7 @@
2
2
  * Inline styles for AI UI components
3
3
  * Theme: Purple/Violet primary color with light/dark mode support
4
4
  */
5
+ import type React from "react";
5
6
  export declare const aiStyles: {
6
7
  input: React.CSSProperties;
7
8
  inputFocus: React.CSSProperties;
@@ -1 +1 @@
1
- {"version":3,"file":"inline.d.ts","sourceRoot":"","sources":["../../src/styles/inline.ts"],"names":[],"mappings":"AAAA;;;GAGG;AA6HH,eAAO,MAAM,QAAQ;WAgBd,KAAK,CAAC,aAAa;gBAKnB,KAAK,CAAC,aAAa;gBAInB,KAAK,CAAC,aAAa;;;;;mBAyBnB,KAAK,CAAC,aAAa;wBAMnB,KAAK,CAAC,aAAa;cAmBnB,KAAK,CAAC,aAAa;mBAKnB,KAAK,CAAC,aAAa;;;;;sBAwBnB,KAAK,CAAC,aAAa;2BAMnB,KAAK,CAAC,aAAa;YAoBnB,KAAK,CAAC,aAAa;iBAMnB,KAAK,CAAC,aAAa;oBAMnB,KAAK,CAAC,aAAa;YA2BnB,KAAK,CAAC,aAAa;iBAKnB,KAAK,CAAC,aAAa;kBAgBnB,KAAK,CAAC,aAAa;uBAMnB,KAAK,CAAC,aAAa;0BAKnB,KAAK,CAAC,aAAa;aAgBnB,KAAK,CAAC,aAAa;mBASnB,KAAK,CAAC,aAAa;oBAKnB,KAAK,CAAC,aAAa;yBAKnB,KAAK,CAAC,aAAa;qBASnB,KAAK,CAAC,aAAa;gBAQnB,KAAK,CAAC,aAAa;kBAKnB,KAAK,CAAC,aAAa;kBAQnB,KAAK,CAAC,aAAa;sBAKnB,KAAK,CAAC,aAAa;yBAKnB,KAAK,CAAC,aAAa;yBAKnB,KAAK,CAAC,aAAa;oBASnB,KAAK,CAAC,aAAa;iBAcnB,KAAK,CAAC,aAAa;sBAKnB,KAAK,CAAC,aAAa;UAcnB,KAAK,CAAC,aAAa;WAenB,KAAK,CAAC,aAAa;kBAWnB,KAAK,CAAC,aAAa;kBAanB,KAAK,CAAC,aAAa;iBAQnB,KAAK,CAAC,aAAa;gBAOnB,KAAK,CAAC,aAAa;sBAiBnB,KAAK,CAAC,aAAa;2BAKnB,KAAK,CAAC,aAAa;eAMnB,KAAK,CAAC,aAAa;iBAQnB,KAAK,CAAC,aAAa;gBAQnB,KAAK,CAAC,aAAa;qBAInB,KAAK,CAAC,aAAa;qBASnB,KAAK,CAAC,aAAa;0BAKnB,KAAK,CAAC,aAAa;aAUnB,KAAK,CAAC,aAAa;CACzB,CAAC;AAoCF,wBAAgB,wBAAwB,CACtC,UAAU,EAAE,OAAO,EACnB,YAAY,GAAE,MAAY,EAC1B,aAAa,GAAE,MAAY,GAC1B;IAAE,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAoDlE"}
1
+ {"version":3,"file":"inline.d.ts","sourceRoot":"","sources":["../../src/styles/inline.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAkC/B,eAAO,MAAM,QAAQ;WAgBd,KAAK,CAAC,aAAa;gBAKnB,KAAK,CAAC,aAAa;gBAInB,KAAK,CAAC,aAAa;;;;;mBAyBnB,KAAK,CAAC,aAAa;wBAMnB,KAAK,CAAC,aAAa;cAmBnB,KAAK,CAAC,aAAa;mBAKnB,KAAK,CAAC,aAAa;;;;;sBAwBnB,KAAK,CAAC,aAAa;2BAMnB,KAAK,CAAC,aAAa;YAoBnB,KAAK,CAAC,aAAa;iBAMnB,KAAK,CAAC,aAAa;oBAMnB,KAAK,CAAC,aAAa;YA2BnB,KAAK,CAAC,aAAa;iBAKnB,KAAK,CAAC,aAAa;kBAgBnB,KAAK,CAAC,aAAa;uBAMnB,KAAK,CAAC,aAAa;0BAKnB,KAAK,CAAC,aAAa;aAgBnB,KAAK,CAAC,aAAa;mBASnB,KAAK,CAAC,aAAa;oBAKnB,KAAK,CAAC,aAAa;yBAKnB,KAAK,CAAC,aAAa;qBASnB,KAAK,CAAC,aAAa;gBAQnB,KAAK,CAAC,aAAa;kBAKnB,KAAK,CAAC,aAAa;kBAQnB,KAAK,CAAC,aAAa;sBAKnB,KAAK,CAAC,aAAa;yBAKnB,KAAK,CAAC,aAAa;yBAKnB,KAAK,CAAC,aAAa;oBASnB,KAAK,CAAC,aAAa;iBAcnB,KAAK,CAAC,aAAa;sBAKnB,KAAK,CAAC,aAAa;UAcnB,KAAK,CAAC,aAAa;WAenB,KAAK,CAAC,aAAa;kBAWnB,KAAK,CAAC,aAAa;kBAcnB,KAAK,CAAC,aAAa;iBAQnB,KAAK,CAAC,aAAa;gBAOnB,KAAK,CAAC,aAAa;sBAiBnB,KAAK,CAAC,aAAa;2BAKnB,KAAK,CAAC,aAAa;eAMnB,KAAK,CAAC,aAAa;iBAQnB,KAAK,CAAC,aAAa;gBAQnB,KAAK,CAAC,aAAa;qBAInB,KAAK,CAAC,aAAa;qBASnB,KAAK,CAAC,aAAa;0BAKnB,KAAK,CAAC,aAAa;aAUnB,KAAK,CAAC,aAAa;CACzB,CAAC;AAGF,wBAAgB,wBAAwB,CACtC,UAAU,EAAE,OAAO,EACnB,YAAY,GAAE,MAAY,EAC1B,aAAa,GAAE,MAAY,GAC1B;IAAE,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAoDlE"}