Build [v1.14.22]
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"version": "1.14.21",
|
||||
"last_build": "2026-04-23-1559",
|
||||
"version": "1.14.22",
|
||||
"last_build": "2026-04-23-1616",
|
||||
"codename": "ConfigCore",
|
||||
"commit": "6e88ea91"
|
||||
"commit": "e5bb14d9"
|
||||
}
|
||||
@@ -1,4 +1,4 @@
|
||||
@import url('https://fonts.googleapis.com/css2?family=Fira+Code:wght@400;500;600;700&family=Fira+Sans:wght@300;400;500;600;700&display=swap');
|
||||
@import url('https://fonts.googleapis.com/css2?family=Fira+Code&family=Fira+Sans&display=swap');
|
||||
|
||||
@tailwind base;
|
||||
@tailwind components;
|
||||
@@ -18,11 +18,12 @@ body {
|
||||
color: var(--foreground);
|
||||
background-color: var(--background);
|
||||
font-family: var(--font-sans);
|
||||
font-weight: 400;
|
||||
}
|
||||
|
||||
h1, h2, h3, h4, h5, h6 {
|
||||
font-family: var(--font-code);
|
||||
font-weight: 600;
|
||||
font-weight: 400;
|
||||
}
|
||||
|
||||
/* Custom Scrollbar Styling */
|
||||
|
||||
@@ -781,7 +781,7 @@ export default function InventoryPage() {
|
||||
onClick={() => setSelectedBoxLabel(null)}
|
||||
className="w-full py-4 text-muted font-normal text-xs"
|
||||
>
|
||||
Cancel
|
||||
Close Label Preview
|
||||
</button>
|
||||
</div>
|
||||
|
||||
|
||||
@@ -268,7 +268,7 @@ export default function CreateItemPage() {
|
||||
className="flex-1 px-4 py-2 border border-slate-700 text-slate-300 rounded-lg hover:border-slate-600 transition-colors font-normal"
|
||||
disabled={isLoading}
|
||||
>
|
||||
Cancel
|
||||
Discard Draft
|
||||
</button>
|
||||
<button
|
||||
onClick={handleDetailsSubmit}
|
||||
|
||||
@@ -108,7 +108,7 @@ export default function CameraView({
|
||||
{!isStarted && !error && (
|
||||
<div className="absolute inset-0 z-20 flex flex-col items-center justify-center bg-surface text-secondary gap-4">
|
||||
<RefreshCw className="w-8 h-8 animate-spin text-primary" />
|
||||
<p className="text-sm font-medium">Initializing camera...</p>
|
||||
<p className="text-sm font-normal">Initializing camera...</p>
|
||||
</div>
|
||||
)}
|
||||
|
||||
|
||||
@@ -36,11 +36,11 @@ export default function ConfirmationModal({
|
||||
|
||||
const isHighRisk = dangerLevel === 'high';
|
||||
const requiresTextConfirm = isHighRisk && affectedCount && affectedCount > 10;
|
||||
const canConfirm = !requiresTextConfirm || confirmText === 'DELETE';
|
||||
const canConfirm = !requiresTextConfirm || confirmText === 'Delete';
|
||||
|
||||
const handleConfirm = async () => {
|
||||
if (requiresTextConfirm && confirmText !== 'DELETE') {
|
||||
setError('Type "DELETE" to confirm this action');
|
||||
if (requiresTextConfirm && confirmText !== 'Delete') {
|
||||
setError('Type "Delete" to confirm this action');
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -108,7 +108,7 @@ export default function ConfirmationModal({
|
||||
{requiresTextConfirm && (
|
||||
<div className="space-y-3 pt-2 border-t border-slate-800">
|
||||
<p className="text-sm font-normal text-rose-400">
|
||||
Type "DELETE" to confirm this high-risk action
|
||||
Type "Delete" to confirm this high-risk action
|
||||
</p>
|
||||
<input
|
||||
type="text"
|
||||
@@ -117,7 +117,7 @@ export default function ConfirmationModal({
|
||||
setConfirmText(e.target.value);
|
||||
setError(null);
|
||||
}}
|
||||
placeholder="Type DELETE"
|
||||
placeholder="Type Delete"
|
||||
className="w-full px-3 py-2.5 bg-slate-800 border border-slate-700 rounded text-white placeholder:text-muted focus:outline-none focus:ring-2 focus:ring-primary disabled:opacity-50"
|
||||
disabled={loading}
|
||||
onKeyDown={(e) => {
|
||||
@@ -140,7 +140,7 @@ export default function ConfirmationModal({
|
||||
disabled={loading}
|
||||
className="flex-1 px-4 py-2.5 text-secondary bg-slate-800 border border-slate-700 rounded font-normal hover:bg-slate-700 cursor-pointer transition-colors disabled:opacity-50 disabled:cursor-not-allowed focus:ring-2 focus:ring-primary focus:outline-none"
|
||||
>
|
||||
Cancel
|
||||
Keep Item
|
||||
</button>
|
||||
<button
|
||||
onClick={handleConfirm}
|
||||
|
||||
@@ -55,7 +55,7 @@ export default function InventoryTable({
|
||||
return (
|
||||
<div className="py-20 text-center text-secondary">
|
||||
<Package size={48} className="mx-auto mb-4 opacity-10" />
|
||||
<p className="font-medium">No results found</p>
|
||||
<p className="font-normal">No results found</p>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
@@ -170,7 +170,7 @@ export default function LogsTable({ logs, loading }: LogsTableProps) {
|
||||
{selectedLog.details && (
|
||||
<div className="space-y-1.5">
|
||||
<p className="text-[11px] font-normal text-muted tracking-widest ml-1">Intervention Details</p>
|
||||
<div className="bg-primary/5 text-primary/80 p-5 rounded-3xl border border-primary/10 text-sm font-medium leading-relaxed italic shadow-inner">
|
||||
<div className="bg-primary/5 text-primary/80 p-5 rounded-3xl border border-primary/10 text-sm font-normal leading-relaxed italic shadow-inner">
|
||||
"{selectedLog.details}"
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -177,7 +177,7 @@ export default function AiManager({
|
||||
</div>
|
||||
<div className="bg-primary/5 border border-purple-500/10 rounded-2xl p-4 flex gap-3 items-start">
|
||||
<div className="p-2 bg-primary/10 rounded-lg text-purple-400 shrink-0"><Shield size={14} /></div>
|
||||
<p className="text-xs font-medium text-secondary leading-relaxed">
|
||||
<p className="text-xs font-normal text-secondary 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>
|
||||
|
||||
@@ -138,8 +138,7 @@ export default function DatabaseManager({
|
||||
</div>
|
||||
<div>
|
||||
<p className="text-xs font-normal text-secondary">{bak.filename}</p>
|
||||
<p className="text-xs text-secondary font-medium tabular-nums">
|
||||
{new Date(bak.created_at).toLocaleString()} • {formatSize(bak.size_bytes)}
|
||||
<p className="text-xs text-secondary font-normal tabular-nums"> {new Date(bak.created_at).toLocaleString()} • {formatSize(bak.size_bytes)}
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -98,7 +98,7 @@ export default function QuantityAdjustmentModal({
|
||||
|
||||
{/* Quantity Adjustment */}
|
||||
<div>
|
||||
<label className="text-sm font-medium text-slate-400 mb-3 block">
|
||||
<label className="text-sm font-normal text-slate-400 mb-3 block">
|
||||
Current quantity
|
||||
</label>
|
||||
<QuantityDisplay
|
||||
@@ -112,9 +112,9 @@ export default function QuantityAdjustmentModal({
|
||||
<div className="flex gap-2 pt-2">
|
||||
<button
|
||||
onClick={handleClose}
|
||||
className="flex-1 px-4 py-2 bg-slate-800 hover:bg-slate-700 text-slate-100 rounded-lg font-medium transition-colors"
|
||||
className="flex-1 px-4 py-2 bg-slate-800 hover:bg-slate-700 text-slate-100 rounded-lg font-normal transition-colors"
|
||||
>
|
||||
Cancel
|
||||
Keep Current Quantity
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -103,7 +103,7 @@ export default function QuantityDisplay({
|
||||
onKeyDown={handleKeyDown}
|
||||
disabled={isLoading}
|
||||
aria-label="Quantity"
|
||||
className="w-12 text-center bg-transparent text-primary font-medium focus:outline-none disabled:opacity-50"
|
||||
className="w-12 text-center bg-transparent text-primary font-normal focus:outline-none disabled:opacity-50"
|
||||
/>
|
||||
|
||||
<button
|
||||
@@ -123,7 +123,7 @@ export default function QuantityDisplay({
|
||||
onClick={handleTapToEdit}
|
||||
disabled={isLoading}
|
||||
aria-label={`Quantity: ${currentQuantity}. Tap to edit`}
|
||||
className="text-lg font-medium text-primary hover:bg-slate-900/30 px-3 py-2 rounded-lg transition-colors disabled:opacity-50 disabled:cursor-not-allowed"
|
||||
className="text-lg font-normal text-primary hover:bg-slate-900/30 px-3 py-2 rounded-lg transition-colors disabled:opacity-50 disabled:cursor-not-allowed"
|
||||
>
|
||||
{currentQuantity}
|
||||
</button>
|
||||
|
||||
@@ -175,10 +175,10 @@ export default function SearchModal({
|
||||
className="w-full p-4 text-left hover:bg-slate-900 transition-colors focus:outline-none focus:bg-slate-900 focus:ring-2 focus:ring-primary/50"
|
||||
>
|
||||
<div className="flex justify-between items-start gap-2 mb-1">
|
||||
<h3 className="font-medium text-slate-100 flex-1">
|
||||
<h3 className="font-normal text-slate-100 flex-1">
|
||||
{item.name}
|
||||
</h3>
|
||||
<span className="text-primary font-medium text-sm whitespace-nowrap">
|
||||
<span className="text-primary font-normal text-sm whitespace-nowrap">
|
||||
Qty: {item.quantity}
|
||||
</span>
|
||||
</div>
|
||||
|
||||
Reference in New Issue
Block a user