Build [v1.10.4]

This commit is contained in:
2026-04-15 18:10:04 +03:00
parent 6760ab0abf
commit 2d162ff3c0
10 changed files with 237 additions and 226 deletions

View File

@@ -64,7 +64,7 @@ export default function AiManager({
<div>
<p className={cn("text-xs font-black tracking-tight", p.active ? "text-white" : "text-slate-200")}>{p.name}</p>
<p className={cn(
"text-[9px] font-black mt-0.5 px-0.5 rounded",
"text-[11px] font-bold mt-1 px-0.5 rounded",
p.active
? (p.configured ? "text-emerald-200" : "text-rose-100")
: (p.configured ? "text-emerald-500" : "text-rose-500")
@@ -74,7 +74,7 @@ export default function AiManager({
</div>
</div>
{p.active && (
<div className="bg-white/20 px-2 py-0.5 rounded-full text-[8px] font-black text-white tracking-tighter">
<div className="bg-white/20 px-2.5 py-1 rounded-full text-[10px] font-black text-white tracking-tight">
Active
</div>
)}
@@ -86,12 +86,12 @@ export default function AiManager({
<div className="flex items-center justify-between">
<div className="flex items-center gap-3">
<div className="p-2 bg-indigo-500/10 rounded-lg text-indigo-400"><Lock size={14} /></div>
<h3 className="text-xs font-black text-slate-200 tracking-tight">Provider Access Keys</h3>
<h3 className="text-sm font-bold text-slate-200 tracking-tight">Provider Access Keys</h3>
</div>
<button
onClick={onSaveAiKeys}
disabled={isSavingKeys}
className="px-6 py-2.5 bg-indigo-600 hover:bg-indigo-500 text-white rounded-xl text-[10px] font-black transition-all active:scale-95 shadow-xl shadow-indigo-600/10 tracking-tight border border-indigo-500/30 flex items-center gap-2"
className="px-6 py-2.5 bg-indigo-600 hover:bg-indigo-500 text-white rounded-xl text-sm font-black transition-all active:scale-95 shadow-xl shadow-indigo-600/10 tracking-tight border border-indigo-500/30 flex items-center gap-2"
>
{isSavingKeys ? <RotateCcw size={14} className="animate-spin" /> : <Lock size={14} />}
{isSavingKeys ? "Storing..." : "Store Keys"}
@@ -100,7 +100,7 @@ export default function AiManager({
<div className="grid md:grid-cols-2 gap-6">
<div className="space-y-2">
<label className="text-[9px] font-black text-slate-500 tracking-tight ml-1">Gemini Api Key</label>
<label className="text-sm font-bold text-slate-400 tracking-tight ml-1">Gemini Api Key</label>
<div className="flex gap-2">
<input
type="password"
@@ -113,7 +113,7 @@ export default function AiManager({
onClick={() => onTestAiKey('gemini')}
disabled={isTestingKeys.gemini}
className={cn(
"px-4 py-2 rounded-xl text-[9px] font-black tracking-tighter transition-all border shadow-lg flex items-center gap-1.5",
"px-4 py-2 rounded-xl text-[11px] font-bold tracking-tight transition-all border shadow-lg flex items-center gap-1.5",
isTestingKeys.gemini
? "bg-slate-800 border-slate-700 text-slate-500 cursor-wait"
: "bg-indigo-600 border-indigo-500 text-white hover:bg-indigo-500"
@@ -125,7 +125,7 @@ export default function AiManager({
</div>
</div>
<div className="space-y-2">
<label className="text-[9px] font-black text-slate-500 tracking-tight ml-1">Claude Api Key</label>
<label className="text-sm font-bold text-slate-400 tracking-tight ml-1">Claude Api Key</label>
<div className="flex gap-2">
<input
type="password"
@@ -138,7 +138,7 @@ export default function AiManager({
onClick={() => onTestAiKey('claude')}
disabled={isTestingKeys.claude}
className={cn(
"px-4 py-2 rounded-xl text-[9px] font-black uppercase tracking-tighter transition-all border shadow-lg flex items-center gap-1.5",
"px-4 py-2 rounded-xl text-[11px] font-bold tracking-tight transition-all border shadow-lg flex items-center gap-1.5",
isTestingKeys.claude
? "bg-slate-800 border-slate-700 text-slate-500 cursor-wait"
: "bg-indigo-600 border-indigo-500 text-white hover:bg-indigo-500"
@@ -155,11 +155,11 @@ export default function AiManager({
<div className="space-y-4">
<div className="space-y-2">
<div className="flex items-center justify-between px-1">
<label className="text-[10px] font-black text-slate-500 tracking-tight">System Prompt (Vision Extraction)</label>
<label className="text-sm font-bold text-slate-400 tracking-tight">System Prompt (Vision Extraction)</label>
<button
onClick={onUpdatePrompt}
disabled={isSavingPrompt}
className="px-6 py-2 bg-indigo-600 hover:bg-indigo-500 text-white rounded-xl text-[10px] font-black transition-all active:scale-95 shadow-xl shadow-indigo-600/10 tracking-tight border border-indigo-500/30 flex items-center gap-2"
className="px-6 py-2 bg-indigo-600 hover:bg-indigo-500 text-white rounded-xl text-sm font-black transition-all active:scale-95 shadow-xl shadow-indigo-600/10 tracking-tight border border-indigo-500/30 flex items-center gap-2"
>
{isSavingPrompt ? <RotateCcw size={14} className="animate-spin" /> : <FileText size={14} />}
{isSavingPrompt ? "Saving..." : "Save Prompt"}
@@ -168,12 +168,12 @@ export default function AiManager({
<textarea
value={aiPrompt}
onChange={(e) => setAiPrompt(e.target.value)}
className="w-full bg-slate-950/80 border border-slate-800 rounded-2xl p-6 text-[11px] font-mono font-bold text-slate-300 leading-relaxed outline-none focus:border-purple-500/50 transition-all min-h-[200px] custom-scrollbar shadow-inner"
className="w-full bg-slate-950/80 border border-slate-800 rounded-2xl p-6 text-xs font-mono font-bold text-slate-300 leading-relaxed outline-none focus:border-purple-500/50 transition-all min-h-[200px] custom-scrollbar shadow-inner"
/>
</div>
<div className="bg-purple-500/5 border border-purple-500/10 rounded-2xl p-4 flex gap-4 items-start">
<div className="p-2 bg-purple-500/10 rounded-lg text-purple-400 shrink-0"><Shield size={14} /></div>
<p className="text-[10px] font-bold text-slate-500 leading-relaxed">
<p className="text-xs font-medium text-slate-400 leading-relaxed">
This prompt instructs the Vision AI core on label interpretation. Ensure it defines explicit mapping for technical attributes like <span className="text-purple-400">Item</span>, <span className="text-purple-400">Type</span>, and <span className="text-purple-400">Part Number</span> to avoid extraction null-pointers and ensure inventory data integrity.
</p>
</div>