diff --git a/.openclaude/settings.local.json b/.openclaude/settings.local.json new file mode 100644 index 0000000..8051d3c --- /dev/null +++ b/.openclaude/settings.local.json @@ -0,0 +1,28 @@ +{ + "permissions": { + "allow": [ + "Bash(ls:*)", + "Bash(npm install:*)", + "Bash(node:*)", + "Bash(npm approve-scripts:*)", + "Bash(npx prisma:*)", + "Bash(node -e \"console.log\\(require\\(''crypto''\\).randomBytes\\(32\\).toString\\(''hex''\\)\\)\")", + "WebSearch", + "WebFetch(domain:www.prisma.org)", + "Bash(find C:UsersyuccDocumentsRepositoriesprojects-2026nextjsiherb-openclaudenode_modulesprisma -name *.md -maxdepth 2)", + "Bash(tasklist)", + "Bash(rm -rf \"C:\\\\Users\\\\yucc\\\\Documents\\\\Repositories\\\\projects-2026\\\\nextjs\\\\iherb-openclaude/.next\")", + "Bash(npm run:*)", + "Bash(npx next:*)", + "Bash(tee /tmp/build-output.txt)", + "Bash(echo \"EXIT: $?\")", + "Bash(echo \"EXIT_CODE=$?\")", + "Bash(taskkill /F /IM \"node.exe\")", + "Bash(taskkill /F /IM \"nxnode.bin\")", + "Bash(taskkill //F //PID 40132)", + "Bash(taskkill //F //PID 35372)", + "Bash(taskkill //F //PID 21080)", + "Bash(taskkill //F //PID 29760)" + ] + } +} diff --git a/app/favicon.ico b/app/favicon.ico index 718d6fe..985b5fa 100644 Binary files a/app/favicon.ico and b/app/favicon.ico differ diff --git a/components/ItemTable.tsx b/components/ItemTable.tsx index 452cc73..d8468fd 100644 --- a/components/ItemTable.tsx +++ b/components/ItemTable.tsx @@ -6,9 +6,21 @@ import type { OrderItemData } from "@/lib/types"; // 6 color presets for customer grouping const CUSTOMER_COLORS = [ { border: "border-l-blue-500", bg: "bg-blue-50", text: "text-blue-800" }, - { border: "border-l-emerald-500", bg: "bg-emerald-50", text: "text-emerald-800" }, - { border: "border-l-violet-500", bg: "bg-violet-50", text: "text-violet-800" }, - { border: "border-l-orange-500", bg: "bg-orange-50", text: "text-orange-800" }, + { + border: "border-l-emerald-500", + bg: "bg-emerald-50", + text: "text-emerald-800", + }, + { + border: "border-l-violet-500", + bg: "bg-violet-50", + text: "text-violet-800", + }, + { + border: "border-l-orange-500", + bg: "bg-orange-50", + text: "text-orange-800", + }, { border: "border-l-teal-500", bg: "bg-teal-50", text: "text-teal-800" }, { border: "border-l-pink-500", bg: "bg-pink-50", text: "text-pink-800" }, ]; @@ -60,13 +72,16 @@ function ItemEditForm({ function update(field: string, value: string | number) { const next = { ...form, [field]: value }; // Recompute prices - next.netPrice = (next.initPrice + next.initPrice * next.taxRatio) * next.quantity; - next.myNetPrice = (next.myPrice + next.myPrice * next.taxRatio) * next.quantity; + next.netPrice = + (next.initPrice + next.initPrice * next.taxRatio) * next.quantity; + next.myNetPrice = + (next.myPrice + next.myPrice * next.taxRatio) * next.quantity; next.finalPrice = next.netPrice; setForm(next); } - const inputClass = "border-2 border-border rounded-lg px-2 py-1.5 text-sm bg-bg text-fg focus:outline-none focus:border-accent w-full"; + const inputClass = + "border-2 border-border rounded-lg px-2 py-1.5 text-sm bg-bg text-fg focus:outline-none focus:border-accent w-full"; const labelClass = "text-xs text-muted font-medium mb-0.5 block"; return ( @@ -81,36 +96,82 @@ function ItemEditForm({ > {customers.map((c) => ( - + ))}
{item.itemName || "—"}
++ {item.itemName || "—"} +
{colorIndex !== null && ( -+
{getCustomerName(item.customerId!)}
)}${item.finalPrice.toFixed(2)}
++ ${item.finalPrice.toFixed(2)} +
| Item | -Init Price | -My Price | -Qty | -Net | -Final | -Actions | ++ Item + | ++ Init Price + | ++ My Price + | ++ Qty + | ++ Net + | ++ Final + | ++ Actions + |
|---|
| Item | -Init Price | -My Price | -Qty | -Net | -Final | -Actions | ++ Item + | ++ Init Price + | ++ My Price + | ++ Qty + | ++ Net + | ++ Final + | ++ Actions + |
|---|
+ Order title is required. Please enter a title before creating the order. +
+ )}