@lastbrain/ai-ui-react 1.0.55 → 1.0.57
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/AiPromptPanel.js +12 -14
- package/dist/components/LBApiKeySelector.d.ts.map +1 -1
- package/dist/components/LBApiKeySelector.js +1 -0
- package/dist/components/LBSigninModal.d.ts.map +1 -1
- package/dist/components/LBSigninModal.js +11 -22
- package/dist/context/LBAuthProvider.d.ts +1 -0
- package/dist/context/LBAuthProvider.d.ts.map +1 -1
- package/dist/context/LBAuthProvider.js +1 -1
- package/dist/styles/inline.d.ts.map +1 -1
- package/dist/styles/inline.js +3 -1
- package/dist/utils/modelManagement.d.ts.map +1 -1
- package/dist/utils/modelManagement.js +9 -3
- package/package.json +2 -2
- package/src/components/AiPromptPanel.tsx +12 -14
- package/src/components/LBApiKeySelector.tsx +1 -0
- package/src/components/LBSigninModal.tsx +18 -30
- package/src/context/LBAuthProvider.tsx +3 -1
- package/src/styles/inline.ts +3 -1
- package/src/utils/modelManagement.ts +8 -3
|
@@ -279,7 +279,6 @@ function AiPromptPanelInternal({ isOpen, onClose, onSubmit, uiMode: _uiMode = "m
|
|
|
279
279
|
position: "sticky",
|
|
280
280
|
top: 0,
|
|
281
281
|
zIndex: 5,
|
|
282
|
-
borderBottom: "1px solid var(--ai-border-primary, #374151)",
|
|
283
282
|
backdropFilter: "blur(8px)",
|
|
284
283
|
}, children: [_jsx("h2", { style: aiStyles.modalTitle, children: showPromptLibrary ? "Select a Prompt" : "AI Prompt Configuration" }), _jsx("button", { style: {
|
|
285
284
|
...aiStyles.modalCloseButton,
|
|
@@ -529,7 +528,6 @@ function AiPromptPanelInternal({ isOpen, onClose, onSubmit, uiMode: _uiMode = "m
|
|
|
529
528
|
position: "sticky",
|
|
530
529
|
bottom: 0,
|
|
531
530
|
zIndex: 5,
|
|
532
|
-
borderTop: "1px solid var(--ai-border-primary, #374151)",
|
|
533
531
|
backdropFilter: "blur(8px)",
|
|
534
532
|
}, children: [_jsx("button", { onClick: handleClose, onMouseEnter: () => setIsCancelHovered(true), onMouseLeave: () => setIsCancelHovered(false), style: {
|
|
535
533
|
...aiStyles.button,
|
|
@@ -611,30 +609,30 @@ function AiPromptPanelInternal({ isOpen, onClose, onSubmit, uiMode: _uiMode = "m
|
|
|
611
609
|
alignItems: "center",
|
|
612
610
|
justifyContent: "space-between",
|
|
613
611
|
padding: "16px 18px",
|
|
614
|
-
border: "2px solid",
|
|
615
|
-
borderColor: isActive
|
|
616
|
-
|
|
617
|
-
|
|
612
|
+
// border: "2px solid",
|
|
613
|
+
// borderColor: isActive
|
|
614
|
+
// ? "#10b981"
|
|
615
|
+
// : "var(--ai-border-primary, #374151)",
|
|
618
616
|
borderRadius: "10px",
|
|
619
617
|
backgroundColor: isActive
|
|
620
|
-
? "rgba(16, 185, 129, 0.
|
|
621
|
-
: "var(--ai-bg-secondary, rgba(31, 41, 55, 0.
|
|
618
|
+
? "rgba(16, 185, 129, 0.03)"
|
|
619
|
+
: "var(--ai-bg-secondary, rgba(31, 41, 55, 0.2))",
|
|
622
620
|
transition: "all 0.2s",
|
|
623
621
|
cursor: "pointer",
|
|
624
622
|
backdropFilter: "blur(8px)",
|
|
625
623
|
}, onClick: () => !isLoading &&
|
|
626
624
|
handleModelToggle(modelData.id, !isActive), onMouseEnter: (e) => {
|
|
627
|
-
e.currentTarget.style.borderColor = isActive
|
|
628
|
-
|
|
629
|
-
|
|
625
|
+
// e.currentTarget.style.borderColor = isActive
|
|
626
|
+
// ? "#059669"
|
|
627
|
+
// : "#4b5563";
|
|
630
628
|
e.currentTarget.style.transform = "translateY(-2px)";
|
|
631
629
|
e.currentTarget.style.boxShadow = isActive
|
|
632
630
|
? "0 8px 16px rgba(16, 185, 129, 0.2)"
|
|
633
631
|
: "0 8px 16px rgba(0, 0, 0, 0.15)";
|
|
634
632
|
}, onMouseLeave: (e) => {
|
|
635
|
-
e.currentTarget.style.borderColor = isActive
|
|
636
|
-
|
|
637
|
-
|
|
633
|
+
// e.currentTarget.style.borderColor = isActive
|
|
634
|
+
// ? "#10b981"
|
|
635
|
+
// : "var(--ai-border-primary, #374151)";
|
|
638
636
|
e.currentTarget.style.transform = "translateY(0)";
|
|
639
637
|
e.currentTarget.style.boxShadow = "none";
|
|
640
638
|
}, children: [_jsxs("div", { style: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LBApiKeySelector.d.ts","sourceRoot":"","sources":["../../src/components/LBApiKeySelector.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAEtD,UAAU,qBAAqB;IAC7B,OAAO,EAAE,QAAQ,EAAE,CAAC;IACpB,QAAQ,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9C,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,MAAM,EAAE,OAAO,CAAC;CACjB;AAED,wBAAgB,gBAAgB,CAAC,EAC/B,OAAO,EACP,QAAQ,EACR,QAAQ,EACR,MAAM,GACP,EAAE,qBAAqB,
|
|
1
|
+
{"version":3,"file":"LBApiKeySelector.d.ts","sourceRoot":"","sources":["../../src/components/LBApiKeySelector.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAEtD,UAAU,qBAAqB;IAC7B,OAAO,EAAE,QAAQ,EAAE,CAAC;IACpB,QAAQ,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9C,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,MAAM,EAAE,OAAO,CAAC;CACjB;AAED,wBAAgB,gBAAgB,CAAC,EAC/B,OAAO,EACP,QAAQ,EACR,QAAQ,EACR,MAAM,GACP,EAAE,qBAAqB,kDAyTvB"}
|
|
@@ -41,6 +41,7 @@ export function LBApiKeySelector({ apiKeys, onSelect, onCancel, isOpen, }) {
|
|
|
41
41
|
bottom: 0,
|
|
42
42
|
background: "rgba(0, 0, 0, 0.75)",
|
|
43
43
|
backdropFilter: "blur(8px)",
|
|
44
|
+
height: "110%",
|
|
44
45
|
} }), _jsxs("div", { style: {
|
|
45
46
|
position: "relative",
|
|
46
47
|
background: "light-dark(#ffffff, #1e293b)",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LBSigninModal.d.ts","sourceRoot":"","sources":["../../src/components/LBSigninModal.tsx"],"names":[],"mappings":"AAOA,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB;AAED,wBAAgB,aAAa,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,kBAAkB,
|
|
1
|
+
{"version":3,"file":"LBSigninModal.d.ts","sourceRoot":"","sources":["../../src/components/LBSigninModal.tsx"],"names":[],"mappings":"AAOA,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB;AAED,wBAAgB,aAAa,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,kBAAkB,kDAijBpE"}
|
|
@@ -12,25 +12,14 @@ export function LBSigninModal({ isOpen, onClose }) {
|
|
|
12
12
|
const [error, setError] = useState("");
|
|
13
13
|
const [showKeySelector, setShowKeySelector] = useState(false);
|
|
14
14
|
const [currentApiKeys, setCurrentApiKeys] = useState([]); // Stocker les clés API localement
|
|
15
|
-
//
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
let apiKeys = [];
|
|
20
|
-
let lbStatus;
|
|
21
|
-
let lbContext;
|
|
22
|
-
try {
|
|
23
|
-
lbContext = useLB();
|
|
24
|
-
login = lbContext.login;
|
|
25
|
-
selectApiKeyWithToken = lbContext.selectApiKeyWithToken;
|
|
26
|
-
fetchApiKeys = lbContext.fetchApiKeys;
|
|
27
|
-
apiKeys = lbContext.apiKeys || [];
|
|
28
|
-
lbStatus = lbContext.status;
|
|
29
|
-
}
|
|
30
|
-
catch {
|
|
31
|
-
// LBProvider n'est pas disponible, ne pas rendre le modal
|
|
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) {
|
|
32
19
|
return null;
|
|
33
20
|
}
|
|
21
|
+
// Extraire les valeurs du contexte
|
|
22
|
+
const { login, selectApiKeyWithToken, fetchApiKeys, apiKeys = [], status: lbStatus, } = lbContext;
|
|
34
23
|
if (!isOpen || !login)
|
|
35
24
|
return null;
|
|
36
25
|
const handleSubmit = async (e) => {
|
|
@@ -42,20 +31,20 @@ export function LBSigninModal({ isOpen, onClose }) {
|
|
|
42
31
|
if (result.success) {
|
|
43
32
|
if (result.needsKeySelection) {
|
|
44
33
|
// L'utilisateur doit choisir une clé API
|
|
45
|
-
//
|
|
46
|
-
if (fetchApiKeys &&
|
|
34
|
+
// Utiliser l'access token retourné directement par login
|
|
35
|
+
if (fetchApiKeys && result.accessToken) {
|
|
47
36
|
try {
|
|
48
|
-
const keys = await fetchApiKeys(
|
|
37
|
+
const keys = await fetchApiKeys(result.accessToken);
|
|
49
38
|
setCurrentApiKeys(keys);
|
|
50
39
|
setShowKeySelector(true);
|
|
51
40
|
}
|
|
52
41
|
catch (keyError) {
|
|
53
|
-
setError("
|
|
42
|
+
setError("Erreur lors de la récupération des clés API");
|
|
54
43
|
console.error("Failed to fetch API keys:", keyError);
|
|
55
44
|
}
|
|
56
45
|
}
|
|
57
46
|
else {
|
|
58
|
-
setError("
|
|
47
|
+
setError("Token d'accès non disponible");
|
|
59
48
|
}
|
|
60
49
|
}
|
|
61
50
|
else {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LBAuthProvider.d.ts","sourceRoot":"","sources":["../../src/context/LBAuthProvider.tsx"],"names":[],"mappings":"AAEA;;;GAGG;AAEH,OAAO,EAML,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AACf,OAAO,KAAK,EACV,WAAW,EACX,QAAQ,EAIR,QAAQ,EACT,MAAM,uBAAuB,CAAC;AAE/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;
|
|
1
|
+
{"version":3,"file":"LBAuthProvider.d.ts","sourceRoot":"","sources":["../../src/context/LBAuthProvider.tsx"],"names":[],"mappings":"AAEA;;;GAGG;AAEH,OAAO,EAML,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AACf,OAAO,KAAK,EACV,WAAW,EACX,QAAQ,EAIR,QAAQ,EACT,MAAM,uBAAuB,CAAC;AAE/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,yCAAyC;IACzC,aAAa,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IACnC,sDAAsD;IACtD,eAAe,EAAE,OAAO,CAAC;CAC1B;AAID,wBAAgB,UAAU,CAAC,EACzB,QAAQ,EACR,OAAO,EAAE,QAA2B,EACpC,QAA2B,EAC3B,cAAc,EACd,YAAY,GACb,EAAE,eAAe,2CA4djB;AAED;;GAEG;AACH,wBAAgB,KAAK,IAAI,cAAc,CAMtC"}
|
|
@@ -229,7 +229,7 @@ export function LBProvider({ children, baseUrl: _baseUrl = "/api/lastbrain", pro
|
|
|
229
229
|
status: "needs_key_selection",
|
|
230
230
|
user: result.user,
|
|
231
231
|
});
|
|
232
|
-
return { success: true, needsKeySelection: true };
|
|
232
|
+
return { success: true, needsKeySelection: true, accessToken: token };
|
|
233
233
|
}
|
|
234
234
|
catch (keyError) {
|
|
235
235
|
console.error("[LBProvider] Failed to fetch API keys:");
|
|
@@ -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;
|
|
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"}
|
package/dist/styles/inline.js
CHANGED
|
@@ -489,7 +489,9 @@ export const aiStyles = {
|
|
|
489
489
|
buttonSecondary: {
|
|
490
490
|
background: themeVars.bgSecondary,
|
|
491
491
|
color: themeVars.text,
|
|
492
|
-
|
|
492
|
+
borderWidth: "1px",
|
|
493
|
+
borderStyle: "solid",
|
|
494
|
+
borderColor: themeVars.border,
|
|
493
495
|
},
|
|
494
496
|
buttonSecondaryHover: {
|
|
495
497
|
background: themeVars.bgTertiary,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"modelManagement.d.ts","sourceRoot":"","sources":["../../src/utils/modelManagement.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,WAAW,kBAAkB;IACjC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,wBAAsB,eAAe,CACnC,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,OAAO,EACjB,OAAO,GAAE,kBAAuB,GAC/B,OAAO,CAAC,IAAI,CAAC,CAqCf;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CACtC,OAAO,GAAE,kBAAuB,GAC/B,OAAO,CACR,KAAK,CAAC;IACJ,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,CAAC;IAC/C,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC,CACH,CA6CA;AAED;;GAEG;AACH,wBAAsB,aAAa,CACjC,OAAO,GAAE,kBAAuB,GAC/B,OAAO,CAAC,MAAM,EAAE,CAAC,
|
|
1
|
+
{"version":3,"file":"modelManagement.d.ts","sourceRoot":"","sources":["../../src/utils/modelManagement.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,WAAW,kBAAkB;IACjC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,wBAAsB,eAAe,CACnC,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,OAAO,EACjB,OAAO,GAAE,kBAAuB,GAC/B,OAAO,CAAC,IAAI,CAAC,CAqCf;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CACtC,OAAO,GAAE,kBAAuB,GAC/B,OAAO,CACR,KAAK,CAAC;IACJ,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,CAAC;IAC/C,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC,CACH,CA6CA;AAED;;GAEG;AACH,wBAAsB,aAAa,CACjC,OAAO,GAAE,kBAAuB,GAC/B,OAAO,CAAC,MAAM,EAAE,CAAC,CAkDnB"}
|
|
@@ -85,9 +85,15 @@ export async function getUserModels(options = {}) {
|
|
|
85
85
|
: `/api/ai/auth/user-models`; // fallback
|
|
86
86
|
console.log("[getUserModels] isExternalProxy:", isExternalProxy, "isPublicApi:", isPublicApi, "endpoint:", endpoint);
|
|
87
87
|
const headers = {};
|
|
88
|
-
// Ajouter la clé API pour les appels
|
|
89
|
-
if (
|
|
90
|
-
|
|
88
|
+
// Ajouter la clé API pour tous les types d'appels si disponible
|
|
89
|
+
if (apiKey) {
|
|
90
|
+
if (isPublicApi) {
|
|
91
|
+
headers["Authorization"] = `Bearer ${apiKey}`;
|
|
92
|
+
}
|
|
93
|
+
else {
|
|
94
|
+
// Pour les routes auth internes, utiliser aussi le Bearer token si pas de session
|
|
95
|
+
headers["Authorization"] = `Bearer ${apiKey}`;
|
|
96
|
+
}
|
|
91
97
|
}
|
|
92
98
|
const response = await fetch(endpoint, {
|
|
93
99
|
method: "GET",
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@lastbrain/ai-ui-react",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.57",
|
|
4
4
|
"description": "Headless React components for LastBrain AI UI Kit",
|
|
5
5
|
"private": false,
|
|
6
6
|
"type": "module",
|
|
@@ -48,7 +48,7 @@
|
|
|
48
48
|
},
|
|
49
49
|
"dependencies": {
|
|
50
50
|
"lucide-react": "^0.257.0",
|
|
51
|
-
"@lastbrain/ai-ui-core": "1.0.
|
|
51
|
+
"@lastbrain/ai-ui-core": "1.0.43"
|
|
52
52
|
},
|
|
53
53
|
"devDependencies": {
|
|
54
54
|
"@types/react": "^19.2.0",
|
|
@@ -425,7 +425,6 @@ function AiPromptPanelInternal({
|
|
|
425
425
|
top: 0,
|
|
426
426
|
zIndex: 5,
|
|
427
427
|
|
|
428
|
-
borderBottom: "1px solid var(--ai-border-primary, #374151)",
|
|
429
428
|
backdropFilter: "blur(8px)",
|
|
430
429
|
}}
|
|
431
430
|
>
|
|
@@ -1004,7 +1003,6 @@ function AiPromptPanelInternal({
|
|
|
1004
1003
|
bottom: 0,
|
|
1005
1004
|
zIndex: 5,
|
|
1006
1005
|
|
|
1007
|
-
borderTop: "1px solid var(--ai-border-primary, #374151)",
|
|
1008
1006
|
backdropFilter: "blur(8px)",
|
|
1009
1007
|
}}
|
|
1010
1008
|
>
|
|
@@ -1183,14 +1181,14 @@ function AiPromptPanelInternal({
|
|
|
1183
1181
|
alignItems: "center",
|
|
1184
1182
|
justifyContent: "space-between",
|
|
1185
1183
|
padding: "16px 18px",
|
|
1186
|
-
border: "2px solid",
|
|
1187
|
-
borderColor: isActive
|
|
1188
|
-
|
|
1189
|
-
|
|
1184
|
+
// border: "2px solid",
|
|
1185
|
+
// borderColor: isActive
|
|
1186
|
+
// ? "#10b981"
|
|
1187
|
+
// : "var(--ai-border-primary, #374151)",
|
|
1190
1188
|
borderRadius: "10px",
|
|
1191
1189
|
backgroundColor: isActive
|
|
1192
|
-
? "rgba(16, 185, 129, 0.
|
|
1193
|
-
: "var(--ai-bg-secondary, rgba(31, 41, 55, 0.
|
|
1190
|
+
? "rgba(16, 185, 129, 0.03)"
|
|
1191
|
+
: "var(--ai-bg-secondary, rgba(31, 41, 55, 0.2))",
|
|
1194
1192
|
transition: "all 0.2s",
|
|
1195
1193
|
cursor: "pointer",
|
|
1196
1194
|
backdropFilter: "blur(8px)",
|
|
@@ -1200,18 +1198,18 @@ function AiPromptPanelInternal({
|
|
|
1200
1198
|
handleModelToggle(modelData.id, !isActive)
|
|
1201
1199
|
}
|
|
1202
1200
|
onMouseEnter={(e) => {
|
|
1203
|
-
e.currentTarget.style.borderColor = isActive
|
|
1204
|
-
|
|
1205
|
-
|
|
1201
|
+
// e.currentTarget.style.borderColor = isActive
|
|
1202
|
+
// ? "#059669"
|
|
1203
|
+
// : "#4b5563";
|
|
1206
1204
|
e.currentTarget.style.transform = "translateY(-2px)";
|
|
1207
1205
|
e.currentTarget.style.boxShadow = isActive
|
|
1208
1206
|
? "0 8px 16px rgba(16, 185, 129, 0.2)"
|
|
1209
1207
|
: "0 8px 16px rgba(0, 0, 0, 0.15)";
|
|
1210
1208
|
}}
|
|
1211
1209
|
onMouseLeave={(e) => {
|
|
1212
|
-
e.currentTarget.style.borderColor = isActive
|
|
1213
|
-
|
|
1214
|
-
|
|
1210
|
+
// e.currentTarget.style.borderColor = isActive
|
|
1211
|
+
// ? "#10b981"
|
|
1212
|
+
// : "var(--ai-border-primary, #374151)";
|
|
1215
1213
|
e.currentTarget.style.transform = "translateY(0)";
|
|
1216
1214
|
e.currentTarget.style.boxShadow = "none";
|
|
1217
1215
|
}}
|
|
@@ -19,35 +19,23 @@ export function LBSigninModal({ isOpen, onClose }: LBSigninModalProps) {
|
|
|
19
19
|
const [showKeySelector, setShowKeySelector] = useState(false);
|
|
20
20
|
const [currentApiKeys, setCurrentApiKeys] = useState<any[]>([]); // Stocker les clés API localement
|
|
21
21
|
|
|
22
|
-
//
|
|
23
|
-
|
|
24
|
-
| ((
|
|
25
|
-
email: string,
|
|
26
|
-
password: string
|
|
27
|
-
) => Promise<{
|
|
28
|
-
success: boolean;
|
|
29
|
-
error?: string;
|
|
30
|
-
needsKeySelection?: boolean;
|
|
31
|
-
}>)
|
|
32
|
-
| undefined;
|
|
33
|
-
let selectApiKeyWithToken: ((apiKeyId: string) => Promise<void>) | undefined;
|
|
34
|
-
let fetchApiKeys: ((accessToken: string) => Promise<any[]>) | undefined;
|
|
35
|
-
let apiKeys: any[] = [];
|
|
36
|
-
let lbStatus: string | undefined;
|
|
22
|
+
// Appeler useLB() inconditionnellement - hook doit toujours être appelé
|
|
23
|
+
const lbContext = useLB();
|
|
37
24
|
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
lbContext = useLB();
|
|
41
|
-
login = lbContext.login;
|
|
42
|
-
selectApiKeyWithToken = lbContext.selectApiKeyWithToken;
|
|
43
|
-
fetchApiKeys = lbContext.fetchApiKeys;
|
|
44
|
-
apiKeys = lbContext.apiKeys || [];
|
|
45
|
-
lbStatus = lbContext.status;
|
|
46
|
-
} catch {
|
|
47
|
-
// LBProvider n'est pas disponible, ne pas rendre le modal
|
|
25
|
+
// Vérifier si le contexte est valide
|
|
26
|
+
if (!lbContext || !isOpen) {
|
|
48
27
|
return null;
|
|
49
28
|
}
|
|
50
29
|
|
|
30
|
+
// Extraire les valeurs du contexte
|
|
31
|
+
const {
|
|
32
|
+
login,
|
|
33
|
+
selectApiKeyWithToken,
|
|
34
|
+
fetchApiKeys,
|
|
35
|
+
apiKeys = [],
|
|
36
|
+
status: lbStatus,
|
|
37
|
+
} = lbContext;
|
|
38
|
+
|
|
51
39
|
if (!isOpen || !login) return null;
|
|
52
40
|
|
|
53
41
|
const handleSubmit = async (e: React.FormEvent) => {
|
|
@@ -60,18 +48,18 @@ export function LBSigninModal({ isOpen, onClose }: LBSigninModalProps) {
|
|
|
60
48
|
if (result.success) {
|
|
61
49
|
if (result.needsKeySelection) {
|
|
62
50
|
// L'utilisateur doit choisir une clé API
|
|
63
|
-
//
|
|
64
|
-
if (fetchApiKeys &&
|
|
51
|
+
// Utiliser l'access token retourné directement par login
|
|
52
|
+
if (fetchApiKeys && result.accessToken) {
|
|
65
53
|
try {
|
|
66
|
-
const keys = await fetchApiKeys(
|
|
54
|
+
const keys = await fetchApiKeys(result.accessToken);
|
|
67
55
|
setCurrentApiKeys(keys);
|
|
68
56
|
setShowKeySelector(true);
|
|
69
57
|
} catch (keyError) {
|
|
70
|
-
setError("
|
|
58
|
+
setError("Erreur lors de la récupération des clés API");
|
|
71
59
|
console.error("Failed to fetch API keys:", keyError);
|
|
72
60
|
}
|
|
73
61
|
} else {
|
|
74
|
-
setError("
|
|
62
|
+
setError("Token d'accès non disponible");
|
|
75
63
|
}
|
|
76
64
|
} else {
|
|
77
65
|
// Connexion réussie, fermer le modal
|
|
@@ -43,6 +43,7 @@ interface LBContextValue extends LBAuthState {
|
|
|
43
43
|
success: boolean;
|
|
44
44
|
error?: string;
|
|
45
45
|
needsKeySelection?: boolean;
|
|
46
|
+
accessToken?: string;
|
|
46
47
|
}>;
|
|
47
48
|
/** Fonction de déconnexion */
|
|
48
49
|
logout: () => Promise<void>;
|
|
@@ -268,6 +269,7 @@ export function LBProvider({
|
|
|
268
269
|
success: boolean;
|
|
269
270
|
error?: string;
|
|
270
271
|
needsKeySelection?: boolean;
|
|
272
|
+
accessToken?: string;
|
|
271
273
|
}> => {
|
|
272
274
|
try {
|
|
273
275
|
console.log("[LBProvider] Login attempt:", email);
|
|
@@ -354,7 +356,7 @@ export function LBProvider({
|
|
|
354
356
|
status: "needs_key_selection",
|
|
355
357
|
user: result.user,
|
|
356
358
|
});
|
|
357
|
-
return { success: true, needsKeySelection: true };
|
|
359
|
+
return { success: true, needsKeySelection: true, accessToken: token };
|
|
358
360
|
} catch (keyError) {
|
|
359
361
|
console.error("[LBProvider] Failed to fetch API keys:");
|
|
360
362
|
console.error("[LBProvider] Error details:", keyError);
|
package/src/styles/inline.ts
CHANGED
|
@@ -557,7 +557,9 @@ export const aiStyles = {
|
|
|
557
557
|
buttonSecondary: {
|
|
558
558
|
background: themeVars.bgSecondary,
|
|
559
559
|
color: themeVars.text,
|
|
560
|
-
|
|
560
|
+
borderWidth: "1px",
|
|
561
|
+
borderStyle: "solid",
|
|
562
|
+
borderColor: themeVars.border,
|
|
561
563
|
} as React.CSSProperties,
|
|
562
564
|
|
|
563
565
|
buttonSecondaryHover: {
|
|
@@ -147,9 +147,14 @@ export async function getUserModels(
|
|
|
147
147
|
|
|
148
148
|
const headers: Record<string, string> = {};
|
|
149
149
|
|
|
150
|
-
// Ajouter la clé API pour les appels
|
|
151
|
-
if (
|
|
152
|
-
|
|
150
|
+
// Ajouter la clé API pour tous les types d'appels si disponible
|
|
151
|
+
if (apiKey) {
|
|
152
|
+
if (isPublicApi) {
|
|
153
|
+
headers["Authorization"] = `Bearer ${apiKey}`;
|
|
154
|
+
} else {
|
|
155
|
+
// Pour les routes auth internes, utiliser aussi le Bearer token si pas de session
|
|
156
|
+
headers["Authorization"] = `Bearer ${apiKey}`;
|
|
157
|
+
}
|
|
153
158
|
}
|
|
154
159
|
|
|
155
160
|
const response = await fetch(endpoint, {
|