@lastbrain/ai-ui-react 1.0.26 → 1.0.27
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/components/AiContextButton.d.ts.map +1 -1
- package/dist/components/AiContextButton.js +33 -3
- package/dist/components/AiPromptPanel.d.ts +1 -1
- package/dist/components/AiPromptPanel.d.ts.map +1 -1
- package/dist/components/AiPromptPanel.js +11 -1
- package/package.json +1 -1
- package/src/components/AiContextButton.tsx +34 -2
- package/src/components/AiPromptPanel.tsx +18 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AiContextButton.d.ts","sourceRoot":"","sources":["../../src/components/AiContextButton.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAY,KAAK,oBAAoB,EAAE,MAAM,OAAO,CAAC;AAE5D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAQ5C,MAAM,WAAW,oBACf,SACE,IAAI,CAAC,WAAW,EAAE,SAAS,GAAG,MAAM,CAAC,EACrC,IAAI,CAAC,oBAAoB,CAAC,iBAAiB,CAAC,EAAE,SAAS,GAAG,UAAU,CAAC;IAEvE,WAAW,EAAE,GAAG,CAAC;IACjB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,EAAE,CACT,MAAM,EAAE,MAAM,EACd,QAAQ,CAAC,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,KAC7C,IAAI,CAAC;IACV,MAAM,CAAC,EAAE,OAAO,GAAG,QAAQ,CAAC;IAC5B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,aAAa,CAAC,EAAE,MAAM,CAAC;IAEvB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,wBAAgB,eAAe,CAAC,EAC9B,OAAO,EAAE,WAAW,EACpB,QAAQ,EAAE,YAAY,EACtB,MAAgB,EAChB,WAAW,EACX,kBAAyC,EACzC,QAAQ,EACR,OAAO,EACP,QAAQ,EACR,SAAS,EACT,QAAQ,EACR,gBAA0C,EAC1C,YAAY,EACZ,aAAa,EACb,OAAO,EAAE,QAAQ,EACjB,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,OAAO,EACf,GAAG,WAAW,EACf,EAAE,oBAAoB,
|
|
1
|
+
{"version":3,"file":"AiContextButton.d.ts","sourceRoot":"","sources":["../../src/components/AiContextButton.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAY,KAAK,oBAAoB,EAAE,MAAM,OAAO,CAAC;AAE5D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAQ5C,MAAM,WAAW,oBACf,SACE,IAAI,CAAC,WAAW,EAAE,SAAS,GAAG,MAAM,CAAC,EACrC,IAAI,CAAC,oBAAoB,CAAC,iBAAiB,CAAC,EAAE,SAAS,GAAG,UAAU,CAAC;IAEvE,WAAW,EAAE,GAAG,CAAC;IACjB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,EAAE,CACT,MAAM,EAAE,MAAM,EACd,QAAQ,CAAC,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,KAC7C,IAAI,CAAC;IACV,MAAM,CAAC,EAAE,OAAO,GAAG,QAAQ,CAAC;IAC5B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,aAAa,CAAC,EAAE,MAAM,CAAC;IAEvB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,wBAAgB,eAAe,CAAC,EAC9B,OAAO,EAAE,WAAW,EACpB,QAAQ,EAAE,YAAY,EACtB,MAAgB,EAChB,WAAW,EACX,kBAAyC,EACzC,QAAQ,EACR,OAAO,EACP,QAAQ,EACR,SAAS,EACT,QAAQ,EACR,gBAA0C,EAC1C,YAAY,EACZ,aAAa,EACb,OAAO,EAAE,QAAQ,EACjB,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,OAAO,EACf,GAAG,WAAW,EACf,EAAE,oBAAoB,2CAshBtB"}
|
|
@@ -153,10 +153,40 @@ Analyse ces données et réponds de manière structurée et claire.`;
|
|
|
153
153
|
}
|
|
154
154
|
}
|
|
155
155
|
catch (error) {
|
|
156
|
+
console.error("AiContextButton error:", error);
|
|
157
|
+
// Gestion spécifique des erreurs d'API
|
|
158
|
+
let errorMessage = "Erreur lors de l'analyse";
|
|
159
|
+
let errorCode;
|
|
160
|
+
if (error instanceof Error) {
|
|
161
|
+
try {
|
|
162
|
+
// Tenter de parser l'erreur JSON si c'est une erreur API
|
|
163
|
+
const errorData = JSON.parse(error.message);
|
|
164
|
+
if (errorData.error?.code === "INSUFFICIENT_TOKENS") {
|
|
165
|
+
errorMessage =
|
|
166
|
+
"Crédits insuffisants pour cette analyse. Veuillez recharger votre compte.";
|
|
167
|
+
errorCode = "INSUFFICIENT_TOKENS";
|
|
168
|
+
}
|
|
169
|
+
else if (errorData.error?.message) {
|
|
170
|
+
errorMessage = errorData.error.message;
|
|
171
|
+
errorCode = errorData.error.code;
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
catch {
|
|
175
|
+
// Si ce n'est pas du JSON, utiliser le message d'erreur direct
|
|
176
|
+
if (error.message.includes("INSUFFICIENT_TOKENS")) {
|
|
177
|
+
errorMessage =
|
|
178
|
+
"Crédits insuffisants pour cette analyse. Veuillez recharger votre compte.";
|
|
179
|
+
errorCode = "INSUFFICIENT_TOKENS";
|
|
180
|
+
}
|
|
181
|
+
else {
|
|
182
|
+
errorMessage = error.message;
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
}
|
|
156
186
|
onToast?.({
|
|
157
187
|
type: "error",
|
|
158
|
-
message:
|
|
159
|
-
code:
|
|
188
|
+
message: errorMessage,
|
|
189
|
+
code: errorCode,
|
|
160
190
|
});
|
|
161
191
|
}
|
|
162
192
|
finally {
|
|
@@ -217,7 +247,7 @@ Analyse ces données et réponds de manière structurée et claire.`;
|
|
|
217
247
|
} }), _jsx("span", { style: { letterSpacing: "0.025em" }, children: "Analyse..." })] })) : (_jsx(_Fragment, { children: _jsx(Sparkle, { size: 18, style: {
|
|
218
248
|
color: "white",
|
|
219
249
|
filter: "drop-shadow(0 0 2px rgba(255,255,255,0.2))",
|
|
220
|
-
} }) })) }), isOpen && (_jsx(AiPromptPanel, { isOpen: isOpen, onClose: handleClosePanel, onSubmit: handleSubmit, uiMode: uiMode, models: models?.filter((m) => m.type === "language") || [], enableModelManagement: true }))] }), isResultOpen && analysisResult && (_jsx("div", { style: {
|
|
250
|
+
} }) })) }), isOpen && (_jsx(AiPromptPanel, { isOpen: isOpen, onClose: handleClosePanel, onSubmit: handleSubmit, uiMode: uiMode, models: models?.filter((m) => m.type === "language") || [], enableModelManagement: true, baseUrl: baseUrl, apiKey: apiKeyId }))] }), isResultOpen && analysisResult && (_jsx("div", { style: {
|
|
221
251
|
position: "fixed",
|
|
222
252
|
top: 0,
|
|
223
253
|
left: 0,
|
|
@@ -33,5 +33,5 @@ export interface AiPromptPanelRenderProps {
|
|
|
33
33
|
setShowAllModels?: (show: boolean) => void;
|
|
34
34
|
onModelToggle?: (modelId: string, isActive: boolean) => Promise<void>;
|
|
35
35
|
}
|
|
36
|
-
export declare function AiPromptPanel(
|
|
36
|
+
export declare function AiPromptPanel(props: AiPromptPanelProps): import("react/jsx-runtime").JSX.Element;
|
|
37
37
|
//# sourceMappingURL=AiPromptPanel.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AiPromptPanel.d.ts","sourceRoot":"","sources":["../../src/components/AiPromptPanel.tsx"],"names":[],"mappings":"AAEA,OAAO,EAKL,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AAEf,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAOvC,OAAO,EAAsB,KAAK,OAAO,EAAE,MAAM,6BAA6B,CAAC;
|
|
1
|
+
{"version":3,"file":"AiPromptPanel.d.ts","sourceRoot":"","sources":["../../src/components/AiPromptPanel.tsx"],"names":[],"mappings":"AAEA,OAAO,EAKL,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AAEf,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAOvC,OAAO,EAAsB,KAAK,OAAO,EAAE,MAAM,6BAA6B,CAAC;AAG/E,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IACrE,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,QAAQ,EAAE,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,wBAAwB,KAAK,SAAS,CAAC;IAE1D,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,eAAe,CAAC,EAAE,OAAO,EAAE,CAAC;IAC5B,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,aAAa,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACtE,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,wBAAwB;IACvC,MAAM,CAAC,EAAE,QAAQ,EAAE,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,gBAAgB,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAC1C,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IACpC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,IAAI,CAAC;IACzB,WAAW,EAAE,MAAM,IAAI,CAAC;IAExB,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,eAAe,CAAC,EAAE,OAAO,EAAE,CAAC;IAC5B,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,gBAAgB,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IAC3C,aAAa,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACvE;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,kBAAkB,2CActD"}
|
|
@@ -5,7 +5,17 @@ import { BookOpen, Search, Sparkles, Star, Tag, Settings } from "lucide-react";
|
|
|
5
5
|
import { aiStyles } from "../styles/inline";
|
|
6
6
|
import { usePrompts, } from "../hooks/usePrompts";
|
|
7
7
|
import { useModelManagement } from "../hooks/useModelManagement";
|
|
8
|
-
|
|
8
|
+
import { AiProvider } from "../context/AiProvider";
|
|
9
|
+
export function AiPromptPanel(props) {
|
|
10
|
+
const { apiKey, baseUrl } = props;
|
|
11
|
+
// Si apiKey et baseUrl sont fournis, wrapper avec AiProvider
|
|
12
|
+
if (apiKey || baseUrl) {
|
|
13
|
+
return (_jsx(AiProvider, { baseUrl: baseUrl || "", apiKeyId: apiKey || "", children: _jsx(AiPromptPanelInternal, { ...props }) }));
|
|
14
|
+
}
|
|
15
|
+
// Sinon, utiliser le contexte existant
|
|
16
|
+
return _jsx(AiPromptPanelInternal, { ...props });
|
|
17
|
+
}
|
|
18
|
+
function AiPromptPanelInternal({ isOpen, onClose, onSubmit, uiMode: _uiMode = "modal", models = [], sourceText, children, enableModelManagement = false, availableModels = [], userModels = [], onModelToggle, apiKey, baseUrl, }) {
|
|
9
19
|
const [selectedModel, setSelectedModel] = useState("");
|
|
10
20
|
const [prompt, setPrompt] = useState("");
|
|
11
21
|
const [promptId, setPromptId] = useState(undefined);
|
package/package.json
CHANGED
|
@@ -221,10 +221,40 @@ Analyse ces données et réponds de manière structurée et claire.`;
|
|
|
221
221
|
});
|
|
222
222
|
}
|
|
223
223
|
} catch (error) {
|
|
224
|
+
console.error("AiContextButton error:", error);
|
|
225
|
+
|
|
226
|
+
// Gestion spécifique des erreurs d'API
|
|
227
|
+
let errorMessage = "Erreur lors de l'analyse";
|
|
228
|
+
let errorCode: string | undefined;
|
|
229
|
+
|
|
230
|
+
if (error instanceof Error) {
|
|
231
|
+
try {
|
|
232
|
+
// Tenter de parser l'erreur JSON si c'est une erreur API
|
|
233
|
+
const errorData = JSON.parse(error.message);
|
|
234
|
+
if (errorData.error?.code === "INSUFFICIENT_TOKENS") {
|
|
235
|
+
errorMessage =
|
|
236
|
+
"Crédits insuffisants pour cette analyse. Veuillez recharger votre compte.";
|
|
237
|
+
errorCode = "INSUFFICIENT_TOKENS";
|
|
238
|
+
} else if (errorData.error?.message) {
|
|
239
|
+
errorMessage = errorData.error.message;
|
|
240
|
+
errorCode = errorData.error.code;
|
|
241
|
+
}
|
|
242
|
+
} catch {
|
|
243
|
+
// Si ce n'est pas du JSON, utiliser le message d'erreur direct
|
|
244
|
+
if (error.message.includes("INSUFFICIENT_TOKENS")) {
|
|
245
|
+
errorMessage =
|
|
246
|
+
"Crédits insuffisants pour cette analyse. Veuillez recharger votre compte.";
|
|
247
|
+
errorCode = "INSUFFICIENT_TOKENS";
|
|
248
|
+
} else {
|
|
249
|
+
errorMessage = error.message;
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
|
|
224
254
|
onToast?.({
|
|
225
255
|
type: "error",
|
|
226
|
-
message:
|
|
227
|
-
code:
|
|
256
|
+
message: errorMessage,
|
|
257
|
+
code: errorCode,
|
|
228
258
|
});
|
|
229
259
|
} finally {
|
|
230
260
|
setIsOpen(false);
|
|
@@ -328,6 +358,8 @@ Analyse ces données et réponds de manière structurée et claire.`;
|
|
|
328
358
|
uiMode={uiMode}
|
|
329
359
|
models={models?.filter((m) => m.type === "language") || []}
|
|
330
360
|
enableModelManagement={true}
|
|
361
|
+
baseUrl={baseUrl}
|
|
362
|
+
apiKey={apiKeyId}
|
|
331
363
|
/>
|
|
332
364
|
)}
|
|
333
365
|
</div>
|
|
@@ -17,6 +17,7 @@ import {
|
|
|
17
17
|
type PublicPrompt,
|
|
18
18
|
} from "../hooks/usePrompts";
|
|
19
19
|
import { useModelManagement, type AIModel } from "../hooks/useModelManagement";
|
|
20
|
+
import { AiProvider } from "../context/AiProvider";
|
|
20
21
|
|
|
21
22
|
export interface AiPromptPanelProps {
|
|
22
23
|
isOpen: boolean;
|
|
@@ -53,7 +54,23 @@ export interface AiPromptPanelRenderProps {
|
|
|
53
54
|
onModelToggle?: (modelId: string, isActive: boolean) => Promise<void>;
|
|
54
55
|
}
|
|
55
56
|
|
|
56
|
-
export function AiPromptPanel({
|
|
57
|
+
export function AiPromptPanel(props: AiPromptPanelProps) {
|
|
58
|
+
const { apiKey, baseUrl } = props;
|
|
59
|
+
|
|
60
|
+
// Si apiKey et baseUrl sont fournis, wrapper avec AiProvider
|
|
61
|
+
if (apiKey || baseUrl) {
|
|
62
|
+
return (
|
|
63
|
+
<AiProvider baseUrl={baseUrl || ""} apiKeyId={apiKey || ""}>
|
|
64
|
+
<AiPromptPanelInternal {...props} />
|
|
65
|
+
</AiProvider>
|
|
66
|
+
);
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
// Sinon, utiliser le contexte existant
|
|
70
|
+
return <AiPromptPanelInternal {...props} />;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
function AiPromptPanelInternal({
|
|
57
74
|
isOpen,
|
|
58
75
|
onClose,
|
|
59
76
|
onSubmit,
|