@fayz-ai/plugin-tables 0.10.2 → 0.10.4

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.
Files changed (36) hide show
  1. package/dist/ComandaSettingsView-ZB5RK7TP.js +176 -0
  2. package/dist/ComandaSettingsView-ZB5RK7TP.js.map +1 -0
  3. package/dist/TablesPage-VVDNK3GN.js +1145 -0
  4. package/dist/TablesPage-VVDNK3GN.js.map +1 -0
  5. package/dist/chunk-XHRPH676.js +12 -0
  6. package/dist/chunk-XHRPH676.js.map +1 -0
  7. package/dist/context.d.ts +10 -0
  8. package/dist/context.d.ts.map +1 -1
  9. package/dist/data/core-supabase.d.ts +32 -0
  10. package/dist/data/core-supabase.d.ts.map +1 -0
  11. package/dist/data/mock.d.ts.map +1 -1
  12. package/dist/data/registries.d.ts.map +1 -1
  13. package/dist/data/types.d.ts +39 -1
  14. package/dist/data/types.d.ts.map +1 -1
  15. package/dist/index.d.ts +7 -0
  16. package/dist/index.d.ts.map +1 -1
  17. package/dist/index.js +1234 -21
  18. package/dist/index.js.map +1 -1
  19. package/dist/locales/en.d.ts.map +1 -1
  20. package/dist/locales/pt-BR.d.ts.map +1 -1
  21. package/dist/migrations/index.d.ts +7 -0
  22. package/dist/migrations/index.d.ts.map +1 -0
  23. package/dist/store.d.ts +40 -1
  24. package/dist/store.d.ts.map +1 -1
  25. package/dist/types.d.ts +138 -0
  26. package/dist/types.d.ts.map +1 -1
  27. package/dist/views/ComandaActions.d.ts +63 -0
  28. package/dist/views/ComandaActions.d.ts.map +1 -0
  29. package/dist/views/ComandaSettingsView.d.ts +3 -0
  30. package/dist/views/ComandaSettingsView.d.ts.map +1 -0
  31. package/dist/views/FloorPlanView.d.ts.map +1 -1
  32. package/dist/views/TableRailPage.d.ts +3 -0
  33. package/dist/views/TableRailPage.d.ts.map +1 -0
  34. package/package.json +4 -4
  35. package/dist/TablesPage-GKTE4SD2.js +0 -274
  36. package/dist/TablesPage-GKTE4SD2.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/views/ComandaActions.tsx","../src/views/TableRailPage.tsx","../src/views/FloorPlanView.tsx","../src/views/TablesPage.tsx"],"names":["React","jsxs","jsx","Button","money","Modal","ModalContent","ModalHeader","ModalTitle","ModalBody","ModalFooter","Users","t","formatElapsed","Fragment","_","useTranslation"],"mappings":"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","file":"TablesPage-VVDNK3GN.js","sourcesContent":["import React from 'react'\nimport { ArrowRightLeft, History, Percent, UserPlus, Users, X } from 'lucide-react'\nimport {\n Modal, ModalContent, ModalHeader, ModalTitle, ModalBody, ModalFooter,\n Button, Input, Checkbox,\n Select, SelectTrigger, SelectValue, SelectContent, SelectItem,\n} from '@fayz-ai/ui'\nimport { useTablesStore } from '../context'\nimport type { ComandaGuest, RestaurantTable, TableOrder } from '../types'\n\n// ---------------------------------------------------------------------------\n// A comanda completa — participante, desconto, cancelamento e transferência.\n//\n// Quatro diálogos e UMA peça. O V1 tem os quatro como funcionalidades soltas —\n// `table_guests`, `order_guest_settlements`, `order_cancellations`,\n// `service_charge_exempt_items` — e ainda assim o Resumo Financeiro dele não\n// fecha (V1-044). Aqui o item pertence a um participante, e daí caem as outras\n// três: transferir item é repontar o dono, transferir participante é levá-lo\n// com o que consumiu, e a taxa por pessoa é um percentual na linha dele.\n// ---------------------------------------------------------------------------\n\nfunction money(v: number, currency = 'BRL'): string {\n return new Intl.NumberFormat('pt-BR', { style: 'currency', currency }).format(v)\n}\n\n/** O rótulo pelo qual o garçom chama esta pessoa. */\nexport function guestLabel(g: ComandaGuest): string {\n return g.label?.trim() || `Pessoa ${g.seatNo}`\n}\n\n// ---------------------------------------------------------------------------\n// A barra de participantes\n// ---------------------------------------------------------------------------\n\n/**\n * Mesa · Pessoa 1 · Pessoa 2 · +\n *\n * `Mesa` fica sempre à esquerda e é o padrão. A maioria das mesas não divide a\n * conta, e obrigar a escolher uma pessoa antes de lançar uma cerveja seria um\n * passo a mais por item, a noite inteira — por isso \"sem participante\" não é um\n * estado inválido, é o normal.\n */\nexport function ParticipantBar({ order }: { order: TableOrder }) {\n const activeGuestId = useTablesStore((s) => s.activeGuestId)\n const selectGuest = useTablesStore((s) => s.selectGuest)\n const addGuest = useTablesStore((s) => s.addGuest)\n const removeGuest = useTablesStore((s) => s.removeGuest)\n\n const tableLines = order.lines.filter((l) => !l.guestId && !l.cancelledAt)\n const tableTotal = tableLines.reduce((sum, l) => sum + l.total, 0)\n\n return (\n <div className=\"space-y-2\">\n <div className=\"flex flex-wrap items-center gap-1.5\">\n <button\n type=\"button\"\n onClick={() => selectGuest(null)}\n className={`rounded-full border px-2.5 py-1 text-xs transition-colors ${\n activeGuestId == null\n ? 'border-primary bg-primary/10 font-medium text-primary'\n : 'border-border text-muted-foreground hover:bg-muted/50'\n }`}\n >\n Mesa{tableTotal > 0 ? ` · ${money(tableTotal, order.currency)}` : ''}\n </button>\n\n {order.participants.map((g) => (\n <span key={g.id} className=\"group/chip relative\">\n <button\n type=\"button\"\n onClick={() => selectGuest(g.id)}\n className={`rounded-full border py-1 pl-2.5 pr-6 text-xs transition-colors ${\n activeGuestId === g.id\n ? 'border-primary bg-primary/10 font-medium text-primary'\n : 'border-border text-muted-foreground hover:bg-muted/50'\n }`}\n >\n {guestLabel(g)}{g.subtotal > 0 ? ` · ${money(g.subtotal, order.currency)}` : ''}\n {/* A taxa só aparece quando DIFERE da mesa: repetir \"10%\" em cada\n chip é ruído, e a exceção é a informação. */}\n {g.ownServiceChargePercent != null && (\n <span className=\"ml-1 opacity-70\">({g.ownServiceChargePercent}%)</span>\n )}\n </button>\n <button\n type=\"button\"\n aria-label={`Remover ${guestLabel(g)}`}\n onClick={() => void removeGuest(g.id)}\n className=\"absolute right-1 top-1/2 -translate-y-1/2 rounded-full p-0.5 opacity-0 transition-opacity hover:bg-muted group-hover/chip:opacity-100 focus-visible:opacity-100\"\n >\n <X className=\"h-3 w-3\" />\n </button>\n </span>\n ))}\n\n <Button variant=\"outline\" size=\"sm\" className=\"h-7 rounded-full px-2 text-xs\"\n onClick={() => void addGuest()}>\n <UserPlus className=\"mr-1 h-3 w-3\" /> Pessoa\n </Button>\n </div>\n\n {activeGuestId != null && (\n <p className=\"text-xs text-muted-foreground\">\n O que for lançado agora entra na conta de{' '}\n {guestLabel(order.participants.find((g) => g.id === activeGuestId) ?? { id: '', seatNo: 0, serviceChargePercent: 0, subtotal: 0, serviceCharge: 0, cancelledTotal: 0, itemCount: 0 })}.\n </p>\n )}\n </div>\n )\n}\n\n// ---------------------------------------------------------------------------\n// Uma lista de linhas com caixa de seleção — a base dos dois diálogos\n// ---------------------------------------------------------------------------\n\nfunction LinePicker({ order, selected, onToggle, onAll }: {\n order: TableOrder\n selected: string[]\n onToggle: (id: string) => void\n onAll: (ids: string[]) => void\n}) {\n // Item já cancelado não se cancela nem se desconta de novo.\n const eligible = order.lines.filter((l) => !l.cancelledAt)\n const allIds = eligible.map((l) => l.id)\n const all = selected.length === eligible.length && eligible.length > 0\n\n const byGuest = new Map<string, string>(\n order.participants.map((g) => [g.id, guestLabel(g)]),\n )\n\n return (\n <div className=\"space-y-2\">\n <label className=\"flex cursor-pointer items-center gap-2 rounded px-2 py-1 hover:bg-muted/50\">\n <Checkbox checked={all} onChange={() => onAll(all ? [] : allIds)} aria-label=\"Todos os itens\" />\n <span className=\"text-sm font-medium\">Todos os itens</span>\n </label>\n <div className=\"max-h-64 space-y-1 overflow-y-auto\">\n {eligible.map((line) => (\n <label key={line.id} className=\"flex cursor-pointer items-center gap-2 rounded px-2 py-1.5 hover:bg-muted/50\">\n <Checkbox checked={selected.includes(line.id)} onChange={() => onToggle(line.id)} aria-label={line.name} />\n <span className=\"min-w-0 flex-1\">\n <span className=\"block truncate text-sm\">{line.quantity}× {line.name}</span>\n <span className=\"block text-xs text-muted-foreground\">\n {line.guestId ? byGuest.get(line.guestId) ?? 'Participante' : 'Mesa'}\n {line.discount > 0 && ` · já com ${money(line.discount, order.currency)} de desconto`}\n </span>\n </span>\n <span className=\"shrink-0 text-sm tabular-nums\">{money(line.total, order.currency)}</span>\n </label>\n ))}\n {eligible.length === 0 && (\n <p className=\"px-2 py-4 text-center text-sm text-muted-foreground\">Nada a escolher nesta comanda.</p>\n )}\n </div>\n </div>\n )\n}\n\n// ---------------------------------------------------------------------------\n// Desconto\n// ---------------------------------------------------------------------------\n\nexport function DiscountDialog({ order, onClose }: { order: TableOrder; onClose: () => void }) {\n const discountLines = useTablesStore((s) => s.discountLines)\n const [selected, setSelected] = React.useState<string[]>([])\n const [mode, setMode] = React.useState<'percent' | 'amount'>('percent')\n const [value, setValue] = React.useState('')\n const [saving, setSaving] = React.useState(false)\n\n const amount = Number(value.replace(',', '.')) || 0\n const chosen = order.lines.filter((l) => selected.includes(l.id))\n // O que se está prestes a tirar, calculado igual ao servidor: sobre o BRUTO\n // da linha, e nunca mais do que ela vale.\n const preview = chosen.reduce((sum, l) => {\n const gross = l.unitPrice * l.quantity\n return sum + Math.min(Math.max(mode === 'percent' ? gross * (amount / 100) : amount, 0), gross)\n }, 0)\n\n async function confirm() {\n setSaving(true)\n try {\n await discountLines({ lineIds: selected, mode, value: amount })\n onClose()\n } finally { setSaving(false) }\n }\n\n return (\n <Modal open onOpenChange={(v) => !v && onClose()}>\n <ModalContent size=\"md\">\n <ModalHeader><ModalTitle>Desconto</ModalTitle></ModalHeader>\n <ModalBody>\n <div className=\"space-y-4\">\n <LinePicker order={order} selected={selected}\n onToggle={(id) => setSelected((s) => s.includes(id) ? s.filter((x) => x !== id) : [...s, id])}\n onAll={setSelected} />\n\n <div className=\"fz-container fz-fields fz-fields-2\">\n <label className=\"block space-y-1.5\">\n <span className=\"text-xs font-medium text-muted-foreground\">Tipo</span>\n <Select value={mode} onValueChange={(v: string) => setMode(v as 'percent' | 'amount')}>\n <SelectTrigger><SelectValue /></SelectTrigger>\n <SelectContent>\n <SelectItem value=\"percent\">Percentual %</SelectItem>\n <SelectItem value=\"amount\">Valor R$</SelectItem>\n </SelectContent>\n </Select>\n </label>\n <label className=\"block space-y-1.5\">\n <span className=\"text-xs font-medium text-muted-foreground\">\n {mode === 'percent' ? 'Percentual' : 'Valor por item'}\n </span>\n <Input value={value} onChange={(e) => setValue(e.target.value)}\n placeholder={mode === 'percent' ? '10' : '5,00'} inputMode=\"decimal\" />\n </label>\n </div>\n\n {/* Em VALOR o desconto é por item, não repartido entre eles — a\n diferença muda o que o cliente paga e a tela precisa dizê-la\n antes, não depois. */}\n {mode === 'amount' && selected.length > 1 && (\n <p className=\"rounded-lg bg-muted/50 px-3 py-2 text-xs text-muted-foreground\">\n O valor é aplicado a CADA item escolhido, não dividido entre eles.\n </p>\n )}\n\n {/* A prévia fica JUNTO dos campos que a produzem, não no rodapé: lá\n ela disputava a linha com os botões e o rodapé deixava de ser a\n régua padrão do produto. */}\n <p className=\"text-xs text-muted-foreground\">\n {selected.length === 0\n ? 'Escolha os itens.'\n : `Sai ${money(preview, order.currency)} de ${selected.length} ${selected.length === 1 ? 'item' : 'itens'}.`}\n </p>\n </div>\n </ModalBody>\n <ModalFooter>\n <Button variant=\"outline\" onClick={onClose}>Cancelar</Button>\n <Button onClick={confirm} disabled={selected.length === 0 || amount <= 0 || saving}>\n {saving ? 'Aplicando…' : 'Aplicar desconto'}\n </Button>\n </ModalFooter>\n </ModalContent>\n </Modal>\n )\n}\n\n// ---------------------------------------------------------------------------\n// Cancelamento\n// ---------------------------------------------------------------------------\n\n/**\n * Cancelar item COM motivo.\n *\n * O motivo é obrigatório, e não por burocracia: é ele que alimenta o ranking\n * \"Top Itens Cancelados\" — a única tela do V1 que responde \"o que a cozinha\n * mais devolveu\" com nome e dinheiro. Cancelamento sem motivo é prejuízo sem\n * causa registrada.\n */\nexport function CancelDialog({ order, onClose }: { order: TableOrder; onClose: () => void }) {\n const cancelLines = useTablesStore((s) => s.cancelLines)\n const reasons = useTablesStore((s) => s.cancelReasons)\n const fetchCancelReasons = useTablesStore((s) => s.fetchCancelReasons)\n const [selected, setSelected] = React.useState<string[]>([])\n const [reason, setReason] = React.useState('')\n const [saving, setSaving] = React.useState(false)\n\n React.useEffect(() => { void fetchCancelReasons() }, [fetchCancelReasons])\n\n const active = reasons.filter((r) => r.isActive)\n const chosen = order.lines.filter((l) => selected.includes(l.id))\n const amount = chosen.reduce((sum, l) => sum + l.total, 0)\n\n async function confirm() {\n setSaving(true)\n try {\n await cancelLines({ lineIds: selected, reason })\n onClose()\n } finally { setSaving(false) }\n }\n\n return (\n <Modal open onOpenChange={(v) => !v && onClose()}>\n <ModalContent size=\"md\">\n <ModalHeader><ModalTitle>Cancelar itens</ModalTitle></ModalHeader>\n <ModalBody>\n <div className=\"space-y-4\">\n <LinePicker order={order} selected={selected}\n onToggle={(id) => setSelected((s) => s.includes(id) ? s.filter((x) => x !== id) : [...s, id])}\n onAll={setSelected} />\n\n <label className=\"block space-y-1.5\">\n <span className=\"text-xs font-medium text-muted-foreground\">Motivo</span>\n {active.length > 0 ? (\n <Select value={reason} onValueChange={setReason}>\n <SelectTrigger><SelectValue placeholder=\"Escolha o motivo…\" /></SelectTrigger>\n <SelectContent>\n {active.map((r) => <SelectItem key={r.id} value={r.label}>{r.label}</SelectItem>)}\n </SelectContent>\n </Select>\n ) : (\n // Sem motivos cadastrados a tela não trava: escreve-se um. O\n // caminho certo é cadastrá-los em Configurações, e é o que a\n // frase abaixo diz.\n <Input value={reason} onChange={(e) => setReason(e.target.value)}\n placeholder=\"Por que este item sai da comanda?\" />\n )}\n {active.length === 0 && (\n <span className=\"text-xs text-muted-foreground\">\n Nenhum motivo cadastrado. Configurações → Comanda.\n </span>\n )}\n </label>\n\n <p className=\"text-xs text-muted-foreground\">\n {selected.length === 0\n ? 'Escolha os itens.'\n : `${money(amount, order.currency)} sai da conta. O item continua na comanda, riscado.`}\n </p>\n </div>\n </ModalBody>\n <ModalFooter>\n <Button variant=\"outline\" onClick={onClose}>Voltar</Button>\n <Button variant=\"destructive\" onClick={confirm}\n disabled={selected.length === 0 || reason.trim().length === 0 || saving}>\n {saving ? 'Cancelando…' : 'Cancelar itens'}\n </Button>\n </ModalFooter>\n </ModalContent>\n </Modal>\n )\n}\n\n// ---------------------------------------------------------------------------\n// Transferência\n// ---------------------------------------------------------------------------\n\nexport function TransferDialog({ order, tables, onClose }: {\n order: TableOrder\n tables: RestaurantTable[]\n onClose: () => void\n}) {\n const transfer = useTablesStore((s) => s.transfer)\n const [kind, setKind] = React.useState<'table' | 'items'>('table')\n const [toTableId, setToTableId] = React.useState('')\n const [lineIds, setLineIds] = React.useState<string[]>([])\n const [toGuestId, setToGuestId] = React.useState('')\n const [saving, setSaving] = React.useState(false)\n\n const free = tables.filter((tb) => !tb.currentOrderId)\n\n async function confirm() {\n setSaving(true)\n try {\n await transfer(kind === 'table'\n ? { kind: 'table', toTableId }\n : { kind: 'items', lineIds, toGuestId: toGuestId || null })\n onClose()\n } finally { setSaving(false) }\n }\n\n const ready = kind === 'table' ? !!toTableId : lineIds.length > 0\n\n return (\n <Modal open onOpenChange={(v) => !v && onClose()}>\n <ModalContent size=\"md\">\n <ModalHeader><ModalTitle>Transferir</ModalTitle></ModalHeader>\n <ModalBody>\n <div className=\"space-y-4\">\n <div className=\"flex gap-2\">\n {([['table', 'Mesa inteira'], ['items', 'Itens entre participantes']] as const).map(([id, label]) => (\n <button key={id} type=\"button\" onClick={() => setKind(id)}\n className={`flex-1 rounded-lg border-2 p-2 text-sm transition-colors ${\n kind === id ? 'border-primary bg-primary/10 font-medium' : 'border-border hover:bg-muted/50'\n }`}>\n {label}\n </button>\n ))}\n </div>\n\n {kind === 'table' ? (\n <label className=\"block space-y-1.5\">\n <span className=\"text-xs font-medium text-muted-foreground\">Para qual mesa</span>\n <Select value={toTableId} onValueChange={setToTableId}>\n <SelectTrigger><SelectValue placeholder=\"Escolha a mesa…\" /></SelectTrigger>\n <SelectContent>\n {free.map((tb) => (\n <SelectItem key={tb.id} value={tb.id}>\n Mesa {tb.number}{tb.zoneName ? ` · ${tb.zoneName}` : ''} · {tb.seats} lugares\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n {/* Só mesa LIVRE: uma comanda por mesa é o que faz a ocupação\n ser derivada em vez de guardada, e é por isso que o V1 tem\n 13 mesas ocupadas sem ninguém sentado e o V2 não pode ter. */}\n <span className=\"text-xs text-muted-foreground\">\n Só mesas livres. A comanda inteira muda de lugar e a mesa atual fica livre.\n </span>\n </label>\n ) : (\n <div className=\"space-y-3\">\n <LinePicker order={order} selected={lineIds}\n onToggle={(id) => setLineIds((s) => s.includes(id) ? s.filter((x) => x !== id) : [...s, id])}\n onAll={setLineIds} />\n <label className=\"block space-y-1.5\">\n <span className=\"text-xs font-medium text-muted-foreground\">Para quem</span>\n <Select value={toGuestId || '__table'} onValueChange={(v: string) => setToGuestId(v === '__table' ? '' : v)}>\n <SelectTrigger><SelectValue /></SelectTrigger>\n <SelectContent>\n <SelectItem value=\"__table\">A mesa</SelectItem>\n {order.participants.map((g) => (\n <SelectItem key={g.id} value={g.id}>{guestLabel(g)}</SelectItem>\n ))}\n </SelectContent>\n </Select>\n </label>\n </div>\n )}\n </div>\n </ModalBody>\n <ModalFooter>\n <Button variant=\"outline\" onClick={onClose}>Cancelar</Button>\n <Button onClick={confirm} disabled={!ready || saving}>\n {saving ? 'Transferindo…' : 'Transferir'}\n </Button>\n </ModalFooter>\n </ModalContent>\n </Modal>\n )\n}\n\n// ---------------------------------------------------------------------------\n// Taxa de serviço\n// ---------------------------------------------------------------------------\n\n/**\n * A taxa desta mesa e a de cada participante.\n *\n * Três níveis caindo um no outro (casa → mesa → participante) é a regra que o\n * V1 escreve na tela — \"Deixe em branco para usar a taxa geral (13%)\" — e que\n * aqui está declarada uma vez no formato de dado, em vez de reimplementada em\n * cada diálogo. Campo vazio é a herança, e a tela diz de quem se herda.\n */\nexport function ServiceChargeDialog({ order, housePercent, onClose }: {\n order: TableOrder\n housePercent: number\n onClose: () => void\n}) {\n const setOrderServiceCharge = useTablesStore((s) => s.setOrderServiceCharge)\n const setGuestServiceCharge = useTablesStore((s) => s.setGuestServiceCharge)\n\n const [tablePct, setTablePct] = React.useState(\n order.serviceChargePercent == null ? '' : String(order.serviceChargePercent),\n )\n const [guestPct, setGuestPct] = React.useState<Record<string, string>>(\n () => Object.fromEntries(order.participants.map((g) => [\n g.id, g.ownServiceChargePercent == null ? '' : String(g.ownServiceChargePercent),\n ])),\n )\n const [saving, setSaving] = React.useState(false)\n\n const parse = (v: string): number | null => {\n const trimmed = v.trim()\n if (trimmed === '') return null\n const n = Number(trimmed.replace(',', '.'))\n return Number.isFinite(n) ? n : null\n }\n\n const effectiveTable = parse(tablePct) ?? housePercent\n\n async function confirm() {\n setSaving(true)\n try {\n await setOrderServiceCharge(parse(tablePct))\n for (const g of order.participants) {\n const next = parse(guestPct[g.id] ?? '')\n // Só escreve o que MUDOU: sem isto, abrir o diálogo e fechar reescrevia\n // a taxa dos quatro participantes e recalculava a comanda quatro vezes.\n if (next !== (g.ownServiceChargePercent ?? null)) {\n await setGuestServiceCharge(g.id, next)\n }\n }\n onClose()\n } finally { setSaving(false) }\n }\n\n return (\n <Modal open onOpenChange={(v) => !v && onClose()}>\n <ModalContent size=\"md\">\n <ModalHeader><ModalTitle>Taxa de serviço</ModalTitle></ModalHeader>\n <ModalBody>\n <div className=\"space-y-4\">\n <label className=\"block space-y-1.5\">\n <span className=\"text-xs font-medium text-muted-foreground\">Esta mesa</span>\n <div className=\"flex items-center gap-2\">\n {/* A largura vai no INVÓLUCRO: o `Input` se desenha dentro de um\n `div.w-full` próprio, então uma classe de largura no campo\n não impede o invólucro de comer a linha inteira — foi assim\n que o nome do participante, ao lado, saiu da tela. */}\n <span className=\"w-28 shrink-0\">\n <Input value={tablePct} onChange={(e) => setTablePct(e.target.value)}\n placeholder={String(housePercent)} inputMode=\"decimal\" />\n </span>\n <span className=\"text-sm text-muted-foreground\">%</span>\n </div>\n <span className=\"text-xs text-muted-foreground\">\n Em branco usa a taxa da casa ({housePercent}%).\n </span>\n </label>\n\n {order.participants.length > 0 && (\n <div className=\"space-y-2\">\n <span className=\"flex items-center gap-1.5 text-xs font-medium uppercase tracking-wide text-muted-foreground\">\n <Users className=\"h-3.5 w-3.5\" /> Por participante\n </span>\n {order.participants.map((g) => (\n <div key={g.id} className=\"flex items-center gap-2\">\n <span className=\"min-w-0 flex-1 truncate text-sm\">{guestLabel(g)}</span>\n <span className=\"w-24 shrink-0\">\n <Input\n value={guestPct[g.id] ?? ''}\n onChange={(e) => setGuestPct((s) => ({ ...s, [g.id]: e.target.value }))}\n placeholder={String(effectiveTable)}\n inputMode=\"decimal\"\n aria-label={`Taxa de ${guestLabel(g)}`}\n />\n </span>\n <span className=\"w-4 text-sm text-muted-foreground\">%</span>\n </div>\n ))}\n <p className=\"text-xs text-muted-foreground\">\n Em branco usa a taxa da mesa ({effectiveTable}%).\n </p>\n </div>\n )}\n </div>\n </ModalBody>\n <ModalFooter>\n <Button variant=\"outline\" onClick={onClose}>Cancelar</Button>\n <Button onClick={confirm} disabled={saving}>{saving ? 'Salvando…' : 'Confirmar taxa'}</Button>\n </ModalFooter>\n </ModalContent>\n </Modal>\n )\n}\n\n// ---------------------------------------------------------------------------\n// Histórico de transferências\n// ---------------------------------------------------------------------------\n\nconst TRANSFER_WORD: Record<string, string> = {\n table: 'Mesa inteira',\n guest: 'Participante',\n items: 'Itens',\n}\n\n/** O que o V1 mostra e ninguém consegue reconstruir depois: lá a transferência\n * reescreve o destino e não deixa rastro. */\nexport function TransferHistoryDialog({ onClose }: { onClose: () => void }) {\n const transfers = useTablesStore((s) => s.transfers)\n const fetchTransfers = useTablesStore((s) => s.fetchTransfers)\n\n React.useEffect(() => { void fetchTransfers() }, [fetchTransfers])\n\n return (\n <Modal open onOpenChange={(v) => !v && onClose()}>\n <ModalContent size=\"md\">\n <ModalHeader><ModalTitle>Histórico de transferências</ModalTitle></ModalHeader>\n <ModalBody>\n {transfers.length === 0 ? (\n <p className=\"py-6 text-center text-sm text-muted-foreground\">\n Nenhuma transferência nesta comanda.\n </p>\n ) : (\n <ul className=\"space-y-2\">\n {transfers.map((tr) => (\n <li key={tr.id} className=\"flex items-start gap-2 border-b pb-2 last:border-b-0\">\n <ArrowRightLeft className=\"mt-0.5 h-3.5 w-3.5 shrink-0 text-muted-foreground\" />\n <span className=\"min-w-0 flex-1\">\n <span className=\"block text-sm\">\n {TRANSFER_WORD[tr.kind] ?? tr.kind}\n {tr.fromTableName && tr.toTableName && ` · ${tr.fromTableName} → ${tr.toTableName}`}\n {tr.kind === 'items' && ` · ${tr.itemCount} ${tr.itemCount === 1 ? 'item' : 'itens'}`}\n </span>\n <span className=\"block text-xs text-muted-foreground\">\n {new Date(tr.createdAt).toLocaleString('pt-BR')}\n </span>\n </span>\n </li>\n ))}\n </ul>\n )}\n </ModalBody>\n <ModalFooter>\n <Button variant=\"outline\" onClick={onClose}>Fechar</Button>\n </ModalFooter>\n </ModalContent>\n </Modal>\n )\n}\n\n// ---------------------------------------------------------------------------\n// A fita de verbos da comanda\n// ---------------------------------------------------------------------------\n\nexport type ComandaVerb = 'discount' | 'cancel' | 'transfer' | 'history' | 'service'\n\n/** Os cinco verbos, numa fita só. Nenhum deles é o botão primário: o primário\n * da comanda é lançar item, e \"fechar conta\" é o único que termina a mesa —\n * os dois ficam fora daqui de propósito. */\nexport function ComandaVerbs({ onPick, disabled }: {\n onPick: (verb: ComandaVerb) => void\n disabled?: boolean\n}) {\n const verbs: Array<[ComandaVerb, string, React.ElementType]> = [\n ['discount', 'Desconto', Percent],\n ['cancel', 'Cancelar', X],\n ['transfer', 'Transferir', ArrowRightLeft],\n ['service', 'Taxa', Percent],\n ['history', 'Histórico', History],\n ]\n return (\n <div className=\"grid grid-cols-3 gap-1.5\">\n {verbs.map(([id, label, Icon]) => (\n <Button key={id} variant=\"outline\" size=\"sm\" disabled={disabled}\n className=\"h-8 justify-center px-1 text-xs\" onClick={() => onPick(id)}>\n <Icon className=\"mr-1 h-3 w-3 shrink-0\" /> {label}\n </Button>\n ))}\n </div>\n )\n}\n","import React from 'react'\nimport {\n AlertTriangle, CheckCircle2, ChevronLeft, Loader2, Minus, Plus, Receipt,\n Sparkles, Trash2, Users, Utensils,\n} from 'lucide-react'\nimport {\n Button, Modal, ModalContent, ModalHeader, ModalTitle, ModalBody, ModalFooter,\n} from '@fayz-ai/ui'\nimport { RightRailPage, RecordPickerModal } from '@fayz-ai/admin'\nimport { useTranslation } from '@fayz-ai/core'\nimport { useTablesConfig, useTablesProvider, useTablesStore } from '../context'\nimport {\n ParticipantBar, ComandaVerbs, DiscountDialog, CancelDialog, TransferDialog,\n ServiceChargeDialog, TransferHistoryDialog, guestLabel, type ComandaVerb,\n} from './ComandaActions'\nimport type { RestaurantTable, TableMenuItem, TableOrder, TableStatus } from '../types'\n\n// ---------------------------------------------------------------------------\n// A mesa, opened beside the salão instead of instead of it.\n//\n// The floor plan used to answer \"what is this mesa\" in a card wedged into a\n// 320px column of the page: the comanda's number printed as a raw uuid, a\n// partial total that was always R$ 0,00 because nothing could put food on it,\n// and two buttons — one of which did nothing. The right column is where every\n// other screen already shows a record beside the list it came from, and it is\n// wide enough to hold what a waiter actually needs during service.\n//\n// The shape is chef-pos's ticket rail, kept honest about what this backend can\n// do: header with the state in a word, the lines with steppers, the totals, and\n// ONE primary action that is whatever comes next for this mesa. Closing a bill\n// is a two-step footer, because \"fechar conta\" next to \"+1 cerveja\" is how the\n// wrong table gets closed at 21h on a Friday.\n// ---------------------------------------------------------------------------\n\nconst STATUS_STYLE: Record<TableStatus, { bg: string; fg: string; Icon: typeof Utensils }> = {\n available: { bg: 'bg-success/10', fg: 'text-success', Icon: CheckCircle2 },\n occupied: { bg: 'bg-primary/10', fg: 'text-primary', Icon: Utensils },\n reserved: { bg: 'bg-accent/10', fg: 'text-accent-foreground', Icon: Sparkles },\n cleaning: { bg: 'bg-muted', fg: 'text-muted-foreground', Icon: Loader2 },\n}\n\n/** Party sizes a host picks without thinking. Anything else uses the stepper. */\nconst QUICK_GUESTS = [1, 2, 3, 4, 5, 6, 8, 10]\n\ntype T = (key: string) => string\n\n/** `t` with the placeholders filled — the bundle has no interpolation of its\n * own, and every caller was reaching for the same three replaces. */\nfunction fill(text: string, values: Record<string, string | number>): string {\n return Object.entries(values).reduce(\n (out, [key, value]) => out.replace(`{${key}}`, String(value)),\n text,\n )\n}\n\nfunction useCurrency(currency = 'BRL') {\n return React.useCallback(\n (value: number) => new Intl.NumberFormat('pt-BR', { style: 'currency', currency }).format(value),\n [currency],\n )\n}\n\n/** Minutes since the guests sat, re-read on its own so a panel left open does\n * not sit there claiming they arrived 3min ago an hour later. */\nfunction useElapsed(seatedAt?: string): number | null {\n const [, tick] = React.useReducer((n: number) => n + 1, 0)\n React.useEffect(() => {\n if (!seatedAt) return\n const id = window.setInterval(tick, 30_000)\n return () => window.clearInterval(id)\n }, [seatedAt])\n if (!seatedAt) return null\n return Math.max(0, Math.round((Date.now() - new Date(seatedAt).getTime()) / 60_000))\n}\n\nfunction formatElapsed(minutes: number | null): string | null {\n if (minutes == null) return null\n if (minutes < 60) return `${minutes}min`\n const h = Math.floor(minutes / 60)\n const m = minutes % 60\n return m > 0 ? `${h}h${String(m).padStart(2, '0')}` : `${h}h`\n}\n\n/** The remainder goes to the first shares, so the parts always sum to the whole. */\nfunction splitEvenly(total: number, ways: number): number {\n if (ways <= 0) return total\n return Math.round((total / ways) * 100) / 100\n}\n\n// ---------------------------------------------------------------------------\n// Header\n// ---------------------------------------------------------------------------\n\nfunction StatusBadge({ status, label }: { status: TableStatus; label: string }) {\n const { bg, fg, Icon } = STATUS_STYLE[status]\n // Colour never carries the meaning alone — the word is always there too.\n return (\n <span className={`inline-flex items-center gap-1.5 rounded-full px-2 py-0.5 text-[11px] font-medium ${bg} ${fg}`}>\n <Icon className=\"h-3 w-3\" aria-hidden />\n {label}\n </span>\n )\n}\n\n// ---------------------------------------------------------------------------\n// Guest stepper — the party size, which used to be hardcoded to 2\n// ---------------------------------------------------------------------------\n\nfunction GuestPicker({ seats, value, onChange, t }: {\n seats: number\n value: number\n onChange: (guests: number) => void\n t: T\n}) {\n return (\n <div className=\"space-y-3\">\n <div className=\"flex items-center justify-between\">\n <span className=\"text-sm text-muted-foreground\">{t('tables.panel.howManyGuests')}</span>\n <div className=\"flex items-center gap-2\">\n <Button variant=\"outline\" size=\"icon\" className=\"h-8 w-8\" aria-label={t('tables.panel.oneLess')}\n onClick={() => onChange(Math.max(1, value - 1))}>\n <Minus className=\"h-3.5 w-3.5\" />\n </Button>\n <span className=\"w-8 text-center text-lg font-bold tabular-nums\">{value}</span>\n <Button variant=\"outline\" size=\"icon\" className=\"h-8 w-8\" aria-label={t('tables.panel.oneMore')}\n onClick={() => onChange(value + 1)}>\n <Plus className=\"h-3.5 w-3.5\" />\n </Button>\n </div>\n </div>\n\n <div className=\"flex flex-wrap gap-1.5\">\n {QUICK_GUESTS.map((n) => (\n <button\n key={n}\n onClick={() => onChange(n)}\n className={`fz-tap h-8 min-w-8 rounded-md border px-2 text-sm tabular-nums transition-colors ${\n n === value ? 'border-primary bg-primary text-primary-foreground' : 'hover:bg-accent'\n }`}\n >\n {n}\n </button>\n ))}\n </div>\n\n {/* Warned, never blocked: pushing two mesas together is a normal thing a\n host does, and a POS that refuses it is a POS that gets bypassed. */}\n {value > seats && (\n <p className=\"flex items-start gap-1.5 text-xs text-muted-foreground\">\n <AlertTriangle className=\"mt-0.5 h-3.5 w-3.5 shrink-0 text-amber-500\" aria-hidden />\n {fill(t('tables.panel.overCapacity'), { seats, guests: value })}\n </p>\n )}\n </div>\n )\n}\n\n// ---------------------------------------------------------------------------\n// The comanda's lines\n// ---------------------------------------------------------------------------\n\nfunction LineRow({ line, owner, money, onQuantity, onRemove, t }: {\n line: TableOrder['lines'][number]\n /** De quem é a linha, já resolvido em palavra. Ausente = da mesa. */\n owner?: string\n money: (v: number) => string\n onQuantity: (quantity: number) => void\n onRemove: () => void\n t: T\n}) {\n const cancelled = !!line.cancelledAt\n return (\n <div className={`group flex items-center gap-2 border-b py-2 last:border-b-0 ${cancelled ? 'opacity-60' : ''}`}>\n <div className=\"min-w-0 flex-1\">\n <p className={`truncate text-sm font-medium ${cancelled ? 'line-through' : ''}`}>{line.name}</p>\n {line.notes && <p className=\"truncate text-xs italic text-muted-foreground\">“{line.notes}”</p>}\n <p className=\"truncate text-xs text-muted-foreground tabular-nums\">\n {money(line.unitPrice)} {t('tables.panel.each')}\n {owner && <span className=\"ml-1 not-italic\">· {owner}</span>}\n {line.discount > 0 && <span className=\"ml-1\">· − {money(line.discount)}</span>}\n </p>\n {/* O motivo fica NA linha, não num relatório à parte: quem abre a\n comanda para entender a conta é quem precisa dele. */}\n {cancelled && (\n <p className=\"truncate text-xs text-destructive\">Cancelado{line.cancelReason ? ` · ${line.cancelReason}` : ''}</p>\n )}\n </div>\n\n <div className={`flex items-center gap-1 ${cancelled ? 'invisible' : ''}`}>\n <Button variant=\"outline\" size=\"icon\" className=\"h-7 w-7\" aria-label={fill(t('tables.panel.removeOne'), { item: line.name })}\n onClick={() => onQuantity(line.quantity - 1)}>\n <Minus className=\"h-3 w-3\" />\n </Button>\n <span className=\"w-6 text-center text-sm font-semibold tabular-nums\">{line.quantity}</span>\n <Button variant=\"outline\" size=\"icon\" className=\"h-7 w-7\" aria-label={fill(t('tables.panel.addOne'), { item: line.name })}\n onClick={() => onQuantity(line.quantity + 1)}>\n <Plus className=\"h-3 w-3\" />\n </Button>\n </div>\n\n <span className={`w-20 shrink-0 text-right text-sm font-semibold tabular-nums ${cancelled ? 'line-through' : ''}`}>\n {money(line.total)}\n </span>\n\n <Button variant=\"ghost\" size=\"icon\" className={`h-7 w-7 opacity-0 transition-opacity group-hover:opacity-100 focus-visible:opacity-100 ${cancelled ? 'invisible' : ''}`}\n aria-label={fill(t('tables.panel.removeItem'), { item: line.name })} onClick={onRemove}>\n <Trash2 className=\"h-3.5 w-3.5 text-destructive\" />\n </Button>\n </div>\n )\n}\n\n/**\n * Lançar item — the SAME picker the \"nova comanda\" screen opens.\n *\n * It was a search box with a list stapled under it, which meant the waiter met\n * two different ways of choosing from one cardapio depending on which screen\n * they happened to be standing on. `RecordPickerModal` is the one the app\n * already uses for this: tick several, see what you have ticked, add them in\n * one go — which is how an order is actually taken at a table.\n */\nfunction AddItemsButton({ money, t }: { money: (v: number) => string; t: T }) {\n const provider = useTablesProvider()\n const menuCategories = useTablesStore((s) => s.menuCategories)\n const fetchMenuCategories = useTablesStore((s) => s.fetchMenuCategories)\n const addOrderLine = useTablesStore((s) => s.addOrderLine)\n const activeGuestId = useTablesStore((s) => s.activeGuestId)\n const [open, setOpen] = React.useState(false)\n const [category, setCategory] = React.useState<string | null>(null)\n\n React.useEffect(() => { if (open) void fetchMenuCategories() }, [open, fetchMenuCategories])\n\n // Straight to the provider rather than through the store: these rows are the\n // modal's own list, not shared state, and the identity of this callback is\n // what makes the modal re-run its query when the chip flips — it keeps\n // `search` in its effect's deps.\n const search = React.useCallback(\n async (term: string) => provider.getMenuItems?.(term || undefined, category ?? undefined) ?? [],\n [provider, category],\n )\n\n return (\n <>\n <Button variant=\"outline\" size=\"sm\" className=\"w-full\" onClick={() => setOpen(true)}>\n <Plus className=\"mr-1.5 h-3.5 w-3.5\" /> {t('tables.panel.addItem')}\n </Button>\n\n <RecordPickerModal<TableMenuItem>\n open={open}\n onClose={() => { setOpen(false); setCategory(null) }}\n title={t('tables.panel.pickerTitle')}\n placeholder={t('tables.panel.searchMenu')}\n confirmLabel={t('tables.panel.addItem')}\n emptyLabel={t('tables.panel.menuEmpty')}\n columns={{ product: t('tables.panel.columnItem'), meta: t('tables.panel.columnCategory'), value: t('tables.panel.columnPrice') }}\n filters={{\n options: menuCategories.map((c) => ({ id: c.id, label: c.name })),\n value: category,\n onChange: setCategory,\n allLabel: t('tables.panel.allCategories'),\n }}\n search={search}\n rowKey={(item) => item.id}\n renderRow={(item) => ({\n imageUrl: item.imageUrl,\n title: item.name,\n meta: item.categoryName,\n value: money(item.price),\n })}\n // Sequential, not Promise.all: each line recalculates the comanda's\n // total, and three of those racing leave whichever lands last as the\n // total for all three.\n onConfirm={(rows) => { void (async () => {\n for (const item of rows) {\n await addOrderLine({\n productId: item.id, name: item.name, quantity: 1, unitPrice: item.price,\n // Quem está selecionado na barra recebe a linha. Null = a mesa.\n guestId: activeGuestId ?? undefined,\n })\n }\n })() }}\n />\n </>\n )\n}\n\n/**\n * Abrir mesa — um diálogo, não a coluna inteira.\n *\n * Abrir uma mesa é UMA pergunta (\"quantas pessoas?\") e uma resposta, e o\n * caminho todo dura três segundos. A coluna da direita deslizando por isso\n * empurra a planta para o lado, esconde metade do salão e depois se fecha\n * sozinha — muito movimento para um número.\n *\n * A coluna existe para a comanda ABERTA, que é onde se fica: lançar item,\n * dividir, descontar, fechar. Um lugar para decidir, outro para trabalhar — é o\n * que o chef-pos faz, e o V1 também (o \"Abrir Mesa\" dele é um modal).\n */\nfunction OpenTableModal({ table, onClose }: { table: RestaurantTable; onClose: () => void }) {\n const t = useTranslation()\n const seatGuests = useTablesStore((s) => s.seatGuests)\n const updateTableStatus = useTablesStore((s) => s.updateTableStatus)\n const [guests, setGuests] = React.useState(() => Math.min(table.seats || 2, 4) || 2)\n const [busy, setBusy] = React.useState(false)\n\n const guestWord = (n: number) => t(n === 1 ? 'tables.panel.guestOne' : 'tables.panel.guestMany')\n\n /**\n * `keepSelection` decide para onde a pessoa vai depois.\n *\n * Abrir a mesa NÃO larga a seleção: assim que ela passa a ocupada, este mesmo\n * componente troca o diálogo pela coluna e a comanda já está aberta para\n * lançar o primeiro item — que é o passo seguinte, sempre. Soltar a seleção\n * aqui devolveria a pessoa à planta para ela clicar na mesma mesa de novo.\n *\n * Liberar uma mesa em limpeza ou cancelar uma reserva termina ali: não há\n * comanda para abrir.\n */\n async function run(action: () => Promise<unknown>, keepSelection = false) {\n setBusy(true)\n try {\n await action()\n if (!keepSelection) onClose()\n } finally { setBusy(false) }\n }\n\n const title = table.name || `Mesa ${table.number}`\n const meta = [table.zoneName, `${table.seats} ${t('tables.floorPlan.seats')}`]\n .filter(Boolean).join(' · ')\n\n return (\n <Modal open onOpenChange={(v) => !v && onClose()}>\n <ModalContent size=\"sm\">\n <ModalHeader><ModalTitle>{title}</ModalTitle></ModalHeader>\n <ModalBody>\n <div className=\"space-y-4\">\n <p className=\"text-xs text-muted-foreground\">{meta}</p>\n {table.status === 'cleaning' ? (\n <p className=\"text-sm text-muted-foreground\">{t('tables.panel.cleaningDesc')}</p>\n ) : (\n <GuestPicker seats={table.seats} value={guests} onChange={setGuests} t={t} />\n )}\n </div>\n </ModalBody>\n {/* Os botões vão DIRETO no ModalFooter, sem invólucro.\n O `ModalFooter` já é a régua do produto: alinha à direita no desktop,\n empilha no celular com o primário em cima (`flex-col-reverse`) e\n espaça sozinho. Uma `div` por dentro vira um filho só e apaga as\n três coisas — que era por que estes botões ficavam colados na fita\n de números logo acima. */}\n <ModalFooter>\n <Button variant=\"outline\" onClick={onClose}>Cancelar</Button>\n\n {table.status === 'reserved' && (\n <Button variant=\"outline\" disabled={busy}\n onClick={() => void run(() => updateTableStatus({ tableId: table.id, status: 'available' }))}>\n {t('tables.panel.cancelReservation')}\n </Button>\n )}\n\n {table.status === 'cleaning' ? (\n <Button disabled={busy}\n onClick={() => void run(() => updateTableStatus({ tableId: table.id, status: 'available' }))}>\n {t('tables.detail.markClean')}\n </Button>\n ) : (\n <Button disabled={busy}\n onClick={() => void run(() => seatGuests({ tableId: table.id, guests }), true)}>\n {busy ? <Loader2 className=\"mr-1.5 h-4 w-4 animate-spin\" /> : <Users className=\"mr-1.5 h-4 w-4\" />}\n {t('tables.panel.openTable')} · {guests} {guestWord(guests)}\n </Button>\n )}\n </ModalFooter>\n </ModalContent>\n </Modal>\n )\n}\n\n// ---------------------------------------------------------------------------\n// The panel\n// ---------------------------------------------------------------------------\n\nexport function TableRailPage() {\n const t = useTranslation()\n const config = useTablesConfig()\n const tables = useTablesStore((s) => s.tables)\n const selectedTableId = useTablesStore((s) => s.selectedTableId)\n const selectTable = useTablesStore((s) => s.selectTable)\n const order = useTablesStore((s) => s.openOrder)\n const orderLoading = useTablesStore((s) => s.openOrderLoading)\n const comandaSupported = useTablesStore((s) => s.comandaSupported)\n const closeSession = useTablesStore((s) => s.closeSession)\n const setOrderLineQuantity = useTablesStore((s) => s.setOrderLineQuantity)\n const setSessionGuests = useTablesStore((s) => s.setSessionGuests)\n const settings = useTablesStore((s) => s.settings)\n const fetchSettings = useTablesStore((s) => s.fetchSettings)\n\n const table: RestaurantTable | undefined = selectedTableId\n ? tables.find((t) => t.id === selectedTableId)\n : undefined\n\n const money = useCurrency(order?.currency)\n const elapsed = useElapsed(order?.seatedAt)\n const [stage, setStage] = React.useState<'order' | 'closing'>('order')\n const [busy, setBusy] = React.useState(false)\n const [verb, setVerb] = React.useState<ComandaVerb | null>(null)\n\n // A política da casa, lida uma vez. Ela decide a taxa que o rodapé escreve\n // quando a mesa não tem taxa própria.\n React.useEffect(() => { void fetchSettings() }, [fetchSettings])\n\n // A different mesa is a different question: an armed \"fechar conta\" must\n // never survive the switch.\n React.useEffect(() => { setStage('order') }, [table?.id])\n\n // ÚLTIMO hook, e por isso antes de qualquer `return`: os dois desvios abaixo\n // saem cedo, e um `useMemo` depois deles rendia menos hooks numa renderização\n // do que na outra — React derruba a tela inteira nisso.\n const ownerOf = React.useMemo(() => {\n const byId = new Map((order?.participants ?? []).map((g) => [g.id, guestLabel(g)]))\n return (guestId?: string) => (guestId ? byId.get(guestId) : undefined)\n }, [order?.participants])\n\n if (!table) return null\n\n // Sem comanda aberta, a mesa é uma decisão curta e não um lugar de trabalho:\n // vai no diálogo. A coluna fica para a comanda.\n if (table.status !== 'occupied') {\n return <OpenTableModal table={table} onClose={() => selectTable(null)} />\n }\n\n const statusLabel = t(`tables.floorPlan.${table.status}`)\n const guestWord = (n: number) => t(n === 1 ? 'tables.panel.guestOne' : 'tables.panel.guestMany')\n\n const lines = order?.lines ?? []\n const liveLines = lines.filter((l) => !l.cancelledAt)\n const itemCount = liveLines.reduce((sum, l) => sum + l.quantity, 0)\n const cancelledTotal = lines.filter((l) => l.cancelledAt).reduce((sum, l) => sum + l.total, 0)\n const subtotal = order?.subtotal ?? 0\n\n // A taxa vem do BANCO (`orders.tax`, escrita por `comanda_recalc`), não de\n // uma segunda conta aqui. Antes ela era `config.serviceChargePercent` — uma\n // constante do app — somada ao total só na hora de desenhar: o rodapé\n // mostrava um número que a fatura levantada no fechamento não continha. É o\n // V1-044 (o Resumo Financeiro que não fecha) reproduzido em miniatura.\n const service = order?.tax ?? 0\n const housePercent = settings?.serviceChargePercent ?? config.serviceChargePercent ?? 0\n const servicePercent = order?.serviceChargePercent ?? housePercent\n const total = order?.total ?? 0\n const perPerson = splitEvenly(total, order?.guests || 1)\n\n\n const meta = [\n table.zoneName,\n order\n ? `${order.guests} ${guestWord(order.guests)}`\n : `${table.seats} ${t('tables.floorPlan.seats')}`,\n order?.waiterName,\n formatElapsed(elapsed),\n ].filter(Boolean).join(' · ')\n\n async function run(action: () => Promise<unknown>) {\n setBusy(true)\n try { await action() } finally { setBusy(false) }\n }\n\n return (\n <RightRailPage title={table.name || `Mesa ${table.number}`} open onClose={() => selectTable(null)} width=\"max-w-md\">\n <div className=\"flex min-h-0 flex-1 flex-col\">\n {/* Header — what this mesa is, in one line and one word */}\n <div className=\"border-b px-4 py-3\">\n <div className=\"flex items-center gap-2\">\n <StatusBadge status={table.status} label={statusLabel} />\n {order?.reference && (\n <span className=\"ml-auto text-xs text-muted-foreground\">\n {t('tables.panel.ticket')} {order.reference}\n </span>\n )}\n </div>\n <p className=\"mt-1 truncate text-xs text-muted-foreground\">{meta}</p>\n </div>\n\n <div className=\"min-h-0 flex-1 overflow-y-auto p-4\">\n {table.status === 'occupied' && (\n <div className=\"space-y-4\">\n {orderLoading && !order && (\n <p className=\"flex items-center gap-2 text-sm text-muted-foreground\">\n <Loader2 className=\"h-3.5 w-3.5 animate-spin\" /> {t('tables.panel.ticketLoading')}\n </p>\n )}\n\n {!comandaSupported && (\n <p className=\"rounded-md border bg-muted/40 p-3 text-sm text-muted-foreground\">\n {t('tables.panel.noReader')}\n </p>\n )}\n\n {order && lines.length === 0 && (\n <div className=\"rounded-md border border-dashed p-6 text-center\">\n <Receipt className=\"mx-auto mb-2 h-8 w-8 text-muted-foreground/40\" aria-hidden />\n <p className=\"text-sm font-medium\">{t('tables.panel.ticketEmpty')}</p>\n <p className=\"mt-1 text-xs text-muted-foreground\">\n {t('tables.panel.ticketEmptyDesc')}\n </p>\n <div className=\"mt-3\">\n <AddItemsButton money={money} t={t} />\n </div>\n </div>\n )}\n\n {/* A barra vem ANTES das linhas porque decide onde a próxima\n cai: escolher a pessoa depois de lançar é lançar errado. */}\n {order && <ParticipantBar order={order} />}\n\n {lines.length > 0 && (\n <div>\n {lines.map((line) => (\n <LineRow\n key={line.id}\n line={line}\n owner={ownerOf(line.guestId)}\n money={money}\n t={t}\n onQuantity={(q) => void setOrderLineQuantity(line.id, q)}\n onRemove={() => void setOrderLineQuantity(line.id, 0)}\n />\n ))}\n </div>\n )}\n\n {order && lines.length > 0 && <AddItemsButton money={money} t={t} />}\n\n {order && <ComandaVerbs onPick={setVerb} disabled={busy} />}\n\n {order && (\n <div className=\"flex items-center justify-between rounded-md border p-3\">\n <span className=\"flex items-center gap-1.5 text-sm text-muted-foreground\">\n <Users className=\"h-3.5 w-3.5\" aria-hidden /> {t('tables.panel.guestsAtTable')}\n </span>\n <div className=\"flex items-center gap-2\">\n <Button variant=\"outline\" size=\"icon\" className=\"h-7 w-7\" aria-label={t('tables.panel.oneLess')}\n onClick={() => void setSessionGuests(Math.max(1, (order.guests || 1) - 1))}>\n <Minus className=\"h-3 w-3\" />\n </Button>\n <span className=\"w-6 text-center text-sm font-semibold tabular-nums\">{order.guests}</span>\n <Button variant=\"outline\" size=\"icon\" className=\"h-7 w-7\" aria-label={t('tables.panel.oneMore')}\n onClick={() => void setSessionGuests((order.guests || 0) + 1)}>\n <Plus className=\"h-3 w-3\" />\n </Button>\n </div>\n </div>\n )}\n\n {order?.notes && (\n <div className=\"rounded-md border bg-muted/40 p-3\">\n <p className=\"text-xs font-medium text-muted-foreground\">{t('tables.panel.tableNote')}</p>\n <p className=\"mt-1 text-sm italic\">“{order.notes}”</p>\n </div>\n )}\n </div>\n )}\n\n </div>\n\n {/* Totals — only what has a number behind it */}\n {table.status === 'occupied' && order && (\n <div className=\"space-y-1.5 border-t px-4 py-3 text-sm\">\n <div className=\"flex justify-between\">\n <span className=\"text-muted-foreground\">{t('tables.panel.subtotal')}</span>\n <span className=\"tabular-nums\">{money(subtotal)}</span>\n </div>\n {service > 0 && (\n <div className=\"flex justify-between\">\n {/* O percentual do rótulo é o desta MESA. Com taxa diferente por\n participante não há um percentual só que descreva a soma, e\n aí o rótulo diz isso em vez de mentir um número. */}\n <span className=\"text-muted-foreground\">\n {order.participants.some((g) => g.ownServiceChargePercent != null)\n ? t('tables.panel.serviceMixed')\n : fill(t('tables.panel.service'), { percent: servicePercent })}\n </span>\n <span className=\"tabular-nums\">{money(service)}</span>\n </div>\n )}\n {cancelledTotal > 0 && (\n <div className=\"flex justify-between text-xs\">\n <span className=\"text-muted-foreground\">{t('tables.panel.cancelledTotal')}</span>\n <span className=\"tabular-nums text-muted-foreground line-through\">{money(cancelledTotal)}</span>\n </div>\n )}\n {order.discount > 0 && (\n <div className=\"flex justify-between\">\n <span className=\"text-muted-foreground\">{t('tables.panel.discount')}</span>\n <span className=\"tabular-nums\">− {money(order.discount)}</span>\n </div>\n )}\n <div className=\"flex items-baseline justify-between border-t pt-2\">\n <span className=\"font-medium\">{t('tables.panel.total')}</span>\n <span className=\"text-xl font-bold tabular-nums\">{money(total)}</span>\n </div>\n {(order.guests || 0) > 1 && order.participants.length === 0 && (\n <div className=\"flex justify-between text-xs text-muted-foreground\">\n <span>{fill(t('tables.panel.perPerson'), { guests: order.guests })}</span>\n <span className=\"tabular-nums\">{money(perPerson)}</span>\n </div>\n )}\n\n {/* Cada participante com o seu, quando há divisão de verdade. A\n média por cabeça acima some nesse caso: dividir R$ 300 por 3 não\n diz nada a quem tomou só água. */}\n {order.participants.length > 0 && (\n <div className=\"space-y-0.5 border-t pt-2 text-xs\">\n {order.participants.map((g) => (\n <div key={g.id} className=\"flex justify-between text-muted-foreground\">\n <span className=\"truncate\">\n {guestLabel(g)}\n {g.serviceCharge > 0 && ` · serviço ${g.serviceChargePercent}%`}\n </span>\n <span className=\"tabular-nums\">{money(g.subtotal + g.serviceCharge)}</span>\n </div>\n ))}\n </div>\n )}\n\n {/* Já pago · Saldo devedor — no V1 esta leitura só existe no app do\n garçom, e é a que responde \"quanto ainda falta receber desta\n mesa\". A tela administrativa dele nunca a ofereceu. */}\n {(order.paid > 0 || order.due !== total) && (\n <div className=\"flex justify-between border-t pt-2 text-xs\">\n <span className=\"text-muted-foreground\">{t('tables.panel.paid')}</span>\n <span className=\"tabular-nums\">{money(order.paid)}</span>\n </div>\n )}\n {order.paid > 0 && (\n <div className=\"flex justify-between text-xs font-medium\">\n <span>{t('tables.panel.due')}</span>\n <span className=\"tabular-nums\">{money(order.due)}</span>\n </div>\n )}\n </div>\n )}\n\n {/* One primary action: whatever comes next for this mesa */}\n <div className=\"border-t p-4\">\n {order && (\n stage === 'order' ? (\n <Button className=\"w-full\" disabled={busy} onClick={() => setStage('closing')}>\n {t('tables.panel.closeBill')}\n <span className=\"ml-1.5 tabular-nums\">{money(total)}</span>\n </Button>\n ) : (\n <div className=\"space-y-2\">\n <button\n className=\"fz-tap flex items-center gap-1 text-sm text-muted-foreground hover:text-foreground\"\n onClick={() => setStage('order')}\n >\n <ChevronLeft className=\"h-4 w-4\" /> {t('tables.panel.backToTicket')}\n </button>\n <p className=\"text-sm text-muted-foreground\">\n {itemCount === 0\n ? t('tables.panel.closingEmpty')\n : fill(\n t(itemCount === 1 ? 'tables.panel.closingSummaryOne' : 'tables.panel.closingSummary'),\n { count: itemCount, total: money(total) },\n )}\n {itemCount > 0 && (order.guests || 0) > 1 &&\n ` · ${fill(t('tables.panel.closingPerPerson'), { amount: money(perPerson) })}`}\n </p>\n <Button className=\"w-full\" disabled={busy}\n onClick={() => void run(async () => {\n if (table.currentSessionId) await closeSession(table.currentSessionId)\n setStage('order')\n selectTable(null)\n })}>\n {busy && <Loader2 className=\"mr-1.5 h-4 w-4 animate-spin\" />}\n {t('tables.panel.confirmClose')}\n </Button>\n </div>\n )\n )}\n </div>\n </div>\n\n {/* Os cinco diálogos da comanda. Montados aqui, e só quando abertos: cada\n um lê a comanda inteira, e mantê-los montados custaria cinco leituras\n por mesa clicada. */}\n {order && verb === 'discount' && <DiscountDialog order={order} onClose={() => setVerb(null)} />}\n {order && verb === 'cancel' && <CancelDialog order={order} onClose={() => setVerb(null)} />}\n {order && verb === 'transfer' && (\n <TransferDialog order={order} tables={tables} onClose={() => setVerb(null)} />\n )}\n {order && verb === 'service' && (\n <ServiceChargeDialog order={order} housePercent={housePercent} onClose={() => setVerb(null)} />\n )}\n {order && verb === 'history' && <TransferHistoryDialog onClose={() => setVerb(null)} />}\n </RightRailPage>\n )\n}\n","import React, { useEffect, useMemo } from 'react'\nimport { UtensilsCrossed, Settings } from 'lucide-react'\nimport { PageHeaderActions } from '@fayz-ai/ui'\nimport { useTablesConfig, useTablesStore } from '../context'\nimport { TableRailPage } from './TableRailPage'\nimport { useTranslation } from '@fayz-ai/core'\nimport type { RestaurantTable, TableStatus } from '../types'\n\n// ---------------------------------------------------------------------------\n// Status config\n// ---------------------------------------------------------------------------\n\nconst statusConfig: Record<TableStatus, { color: string; bg: string }> = {\n available: { color: 'text-success', bg: 'bg-success/10 border-success/30 hover:bg-success/20' },\n occupied: { color: 'text-primary', bg: 'bg-primary/10 border-primary/30 hover:bg-primary/20' },\n reserved: { color: 'text-accent', bg: 'bg-accent/10 border-accent/30 hover:bg-accent/20' },\n cleaning: { color: 'text-muted-foreground', bg: 'bg-muted border-border hover:bg-muted/80' },\n}\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\nfunction formatElapsed(minutes: number | undefined, minLabel: string): string {\n if (minutes == null) return ''\n if (minutes < 60) return `${minutes}${minLabel}`\n const h = Math.floor(minutes / 60)\n const m = minutes % 60\n return m > 0 ? `${h}h ${m}${minLabel}` : `${h}h`\n}\n\n// ---------------------------------------------------------------------------\n// Table card\n// ---------------------------------------------------------------------------\n\nfunction TableCard({ table, isSelected, onClick, t }: {\n table: RestaurantTable\n isSelected: boolean\n onClick: () => void\n t: (key: string) => string\n}) {\n const config = statusConfig[table.status]\n const isLarge = table.seats >= 6\n const minLabel = t('tables.floorPlan.min')\n\n return (\n <button\n onClick={onClick}\n className={`\n relative flex flex-col items-center justify-center rounded-lg border-2 p-3 transition-all cursor-pointer\n ${config.bg}\n ${isLarge ? 'col-span-2' : ''}\n ${isSelected ? 'ring-2 ring-primary ring-offset-2' : ''}\n `}\n style={{ minHeight: '120px' }}\n >\n <span className={`text-2xl font-bold ${config.color}`}>{table.number}</span>\n <span className=\"text-xs text-muted-foreground mt-1\">\n {table.seats} {t('tables.floorPlan.seats')}\n </span>\n\n {table.status === 'occupied' && (\n <>\n <span className=\"text-xs font-medium mt-1\">\n {table.currentGuests} {t('tables.detail.guests').toLowerCase()}\n </span>\n <span className=\"text-[10px] text-muted-foreground\">\n {formatElapsed(table.currentElapsedMinutes, minLabel)}\n </span>\n </>\n )}\n\n <span\n className={`\n absolute -top-2 -right-2 text-[10px] px-1.5 py-0.5 rounded-full font-medium border\n ${table.status === 'occupied'\n ? 'bg-primary text-primary-foreground border-primary'\n : 'bg-secondary text-secondary-foreground border-border'}\n `}\n >\n {t(`tables.floorPlan.${table.status}`)}\n </span>\n </button>\n )\n}\n\n// ---------------------------------------------------------------------------\n// Loading skeleton\n// ---------------------------------------------------------------------------\n\nfunction FloorPlanSkeleton() {\n return (\n <div className=\"space-y-6\">\n <div className=\"flex items-center gap-3\">\n {Array.from({ length: 4 }).map((_, i) => (\n <div key={i} className=\"h-4 w-20 rounded bg-muted animate-pulse\" />\n ))}\n </div>\n <div className=\"space-y-6\">\n {Array.from({ length: 2 }).map((_, z) => (\n <div key={z} className=\"rounded-card border bg-card p-5\">\n <div className=\"h-4 w-24 rounded bg-muted animate-pulse mb-4\" />\n <div className=\"grid grid-cols-2 sm:grid-cols-3 md:grid-cols-4 xl:grid-cols-6 gap-3\">\n {Array.from({ length: 6 }).map((_, i) => (\n <div key={i} className=\"h-[120px] rounded-lg bg-muted animate-pulse\" />\n ))}\n </div>\n </div>\n ))}\n </div>\n </div>\n )\n}\n\n// ---------------------------------------------------------------------------\n// Main view\n// ---------------------------------------------------------------------------\n\nexport function FloorPlanView() {\n const t = useTranslation()\n const config = useTablesConfig()\n\n const tables = useTablesStore(s => s.tables)\n const zones = useTablesStore(s => s.zones)\n const tablesLoading = useTablesStore(s => s.tablesLoading)\n const fetchTables = useTablesStore(s => s.fetchTables)\n const fetchZones = useTablesStore(s => s.fetchZones)\n const selectedTableId = useTablesStore(s => s.selectedTableId)\n const selectTable = useTablesStore(s => s.selectTable)\n\n // Fetch on mount\n useEffect(() => {\n fetchTables()\n fetchZones()\n }, [fetchTables, fetchZones])\n\n // Group tables by zone\n const tablesByZone = useMemo(() => {\n const map = new Map<string, { zoneName: string; color?: string; tables: RestaurantTable[] }>()\n\n // Seed zone order from store zones\n for (const zone of zones) {\n map.set(zone.id, { zoneName: zone.name, color: zone.color, tables: [] })\n }\n\n for (const table of tables) {\n const zoneId = table.zone\n if (!map.has(zoneId)) {\n map.set(zoneId, { zoneName: table.zoneName || zoneId, tables: [] })\n }\n map.get(zoneId)!.tables.push(table)\n }\n\n // Filter out empty zones\n return Array.from(map.entries())\n .filter(([, v]) => v.tables.length > 0)\n .map(([id, v]) => ({ id, ...v }))\n }, [tables, zones])\n\n // Summary counts\n const occupiedCount = tables.filter(t => t.status === 'occupied').length\n const availableCount = tables.filter(t => t.status === 'available').length\n\n // Selected table\n const selectedTable = selectedTableId\n ? tables.find(t => t.id === selectedTableId) ?? null\n : null\n\n // Loading state\n if (tablesLoading && tables.length === 0) {\n return <FloorPlanSkeleton />\n }\n\n // Empty state\n if (!tablesLoading && tables.length === 0) {\n return (\n <div className=\"flex flex-col items-center justify-center py-20 text-center\">\n <UtensilsCrossed className=\"h-12 w-12 text-muted-foreground/40 mb-4\" />\n <h3 className=\"text-lg font-semibold\">{t('tables.floorPlan.noTables')}</h3>\n <p className=\"text-sm text-muted-foreground mt-1\">{t('tables.floorPlan.noTablesDesc')}</p>\n </div>\n )\n }\n\n return (\n <div className=\"space-y-6\">\n {/* The floor plan SHOWS the salão; cadastrar mesas and zones is a settings\n job. The door between the two belongs in the shell's header, beside\n every other screen-level action, not inline with the legend. */}\n <PageHeaderActions>\n <a\n href=\"#/settings/tables\"\n aria-label={t('tables.floorPlan.manage')}\n title={t('tables.floorPlan.manage')}\n className=\"fz-tap inline-flex h-9 w-9 items-center justify-center rounded-md border border-input text-muted-foreground transition-colors hover:bg-accent hover:text-accent-foreground\"\n >\n <Settings className=\"h-4 w-4\" />\n </a>\n </PageHeaderActions>\n\n {/* Header: summary + status legend */}\n <div className=\"flex items-center justify-between flex-wrap gap-4\">\n <div>\n <p className=\"text-muted-foreground text-sm\">\n {t('tables.floorPlan.occupiedOf')\n .replace('{occupied}', String(occupiedCount))\n .replace('{available}', String(availableCount))\n .replace('{total}', String(tables.length))}\n </p>\n </div>\n <div className=\"flex gap-3 flex-wrap\">\n {(Object.keys(statusConfig) as TableStatus[]).map(status => (\n <div key={status} className=\"flex items-center gap-1.5 text-xs\">\n <div className={`h-3 w-3 rounded-full ${statusConfig[status].bg} border`} />\n <span className=\"text-muted-foreground\">{t(`tables.floorPlan.${status}`)}</span>\n </div>\n ))}\n </div>\n </div>\n\n {/* The salão takes the full page now: the mesa's detail opens in the\n shell's right column (TableRailPage), where every other screen already\n shows a record beside the list it came from. */}\n <div className=\"space-y-6\">\n <div className=\"space-y-6\">\n {tablesByZone.map(zone => (\n <div key={zone.id} className=\"rounded-card border bg-card p-5\">\n <div className=\"flex items-center gap-2 mb-4\">\n {zone.color && (\n <div\n className=\"h-3 w-3 rounded-full border\"\n style={{ backgroundColor: zone.color }}\n />\n )}\n <h3 className=\"text-sm font-semibold text-muted-foreground uppercase tracking-wider\">\n {zone.zoneName}\n </h3>\n </div>\n <div className=\"grid grid-cols-2 sm:grid-cols-3 md:grid-cols-4 xl:grid-cols-6 gap-3\">\n {zone.tables.map(table => (\n <TableCard\n key={table.id}\n table={table}\n isSelected={table.id === selectedTableId}\n onClick={() => selectTable(table.id === selectedTableId ? null : table.id)}\n t={t}\n />\n ))}\n </div>\n </div>\n ))}\n </div>\n </div>\n\n {selectedTable && <TableRailPage />}\n </div>\n )\n}\n","import React from 'react'\nimport type { StoreApi } from 'zustand/vanilla'\nimport { TablesContextProvider, type ResolvedTablesConfig } from '../context'\nimport { FloorPlanView } from './FloorPlanView'\nimport type { TablesDataProvider } from '../data/types'\nimport type { TablesUIState } from '../store'\nimport type { PluginRegistryDef } from '@fayz-ai/core'\n\nexport function TablesPage({ config, provider, store, registries }: {\n config: ResolvedTablesConfig\n provider: TablesDataProvider\n store: StoreApi<TablesUIState>\n registries?: PluginRegistryDef[]\n}) {\n return (\n <TablesContextProvider config={config} provider={provider} store={store}>\n <FloorPlanView />\n </TablesContextProvider>\n )\n}\n"]}
@@ -0,0 +1,12 @@
1
+ import { createPluginContext } from '@fayz-ai/admin';
2
+
3
+ // src/context.tsx
4
+ var ctx = createPluginContext("TablesPage");
5
+ var TablesContextProvider = ctx.ContextProvider;
6
+ var useTablesConfig = ctx.useConfig;
7
+ var useTablesProvider = ctx.useProvider;
8
+ var useTablesStore = ctx.useStore;
9
+
10
+ export { TablesContextProvider, useTablesConfig, useTablesProvider, useTablesStore };
11
+ //# sourceMappingURL=chunk-XHRPH676.js.map
12
+ //# sourceMappingURL=chunk-XHRPH676.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/context.tsx"],"names":[],"mappings":";;;AA6CA,IAAM,GAAA,GAAM,oBAA6E,YAAY,CAAA;AAE9F,IAAM,wBAAwB,GAAA,CAAI;AAClC,IAAM,kBAAkB,GAAA,CAAI;AAC5B,IAAM,oBAAoB,GAAA,CAAI;AAC9B,IAAM,iBAAiB,GAAA,CAAI","file":"chunk-XHRPH676.js","sourcesContent":["import { createPluginContext } from '@fayz-ai/admin'\nimport type { TablesDataProvider } from './data/types'\nimport type { TablesUIState } from './store'\nimport type { TableSession } from './types'\n\n// ---------------------------------------------------------------------------\n// Plugin labels\n// ---------------------------------------------------------------------------\n\nexport interface TablesPluginLabels {\n pageTitle: string\n pageSubtitle: string\n tableSingular: string\n tablePlural: string\n sessionSingular: string\n sessionPlural: string\n}\n\n// ---------------------------------------------------------------------------\n// Resolved config — fully merged, no optionals\n// ---------------------------------------------------------------------------\n\nexport interface TablesModules {\n reservations: boolean\n sessionHistory: boolean\n}\n\nexport interface ResolvedTablesConfig {\n modules: TablesModules\n labels: TablesPluginLabels\n defaultZones: Array<{ name: string; color?: string }>\n /**\n * Taxa de serviço, as a percentage of the comanda's subtotal. Zero (the\n * default) draws no line at all — a house that does not charge it should not\n * have to read a R$ 0,00 row on every bill.\n *\n * It is PRESENTATIONAL: the panel adds it to what it shows, and the comanda\n * in the pool still carries the goods total. Charging it for real is a line\n * on the order, and that belongs to whatever closes the bill.\n */\n serviceChargePercent: number\n onTableSeated?: (session: TableSession) => Promise<string | undefined>\n onTableClosed?: (session: TableSession) => Promise<void>\n}\n\nconst ctx = createPluginContext<ResolvedTablesConfig, TablesDataProvider, TablesUIState>('TablesPage')\n\nexport const TablesContextProvider = ctx.ContextProvider\nexport const useTablesConfig = ctx.useConfig\nexport const useTablesProvider = ctx.useProvider\nexport const useTablesStore = ctx.useStore\n"]}
package/dist/context.d.ts CHANGED
@@ -20,6 +20,16 @@ export interface ResolvedTablesConfig {
20
20
  name: string;
21
21
  color?: string;
22
22
  }>;
23
+ /**
24
+ * Taxa de serviço, as a percentage of the comanda's subtotal. Zero (the
25
+ * default) draws no line at all — a house that does not charge it should not
26
+ * have to read a R$ 0,00 row on every bill.
27
+ *
28
+ * It is PRESENTATIONAL: the panel adds it to what it shows, and the comanda
29
+ * in the pool still carries the goods total. Charging it for real is a line
30
+ * on the order, and that belongs to whatever closes the bill.
31
+ */
32
+ serviceChargePercent: number;
23
33
  onTableSeated?: (session: TableSession) => Promise<string | undefined>;
24
34
  onTableClosed?: (session: TableSession) => Promise<void>;
25
35
  }
@@ -1 +1 @@
1
- {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../src/context.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAA;AACtD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAA;AAC5C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AAM3C,MAAM,WAAW,kBAAkB;IACjC,SAAS,EAAE,MAAM,CAAA;IACjB,YAAY,EAAE,MAAM,CAAA;IACpB,aAAa,EAAE,MAAM,CAAA;IACrB,WAAW,EAAE,MAAM,CAAA;IACnB,eAAe,EAAE,MAAM,CAAA;IACvB,aAAa,EAAE,MAAM,CAAA;CACtB;AAMD,MAAM,WAAW,aAAa;IAC5B,YAAY,EAAE,OAAO,CAAA;IACrB,cAAc,EAAE,OAAO,CAAA;CACxB;AAED,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,aAAa,CAAA;IACtB,MAAM,EAAE,kBAAkB,CAAA;IAC1B,YAAY,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;IACrD,aAAa,CAAC,EAAE,CAAC,OAAO,EAAE,YAAY,KAAK,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAA;IACtE,aAAa,CAAC,EAAE,CAAC,OAAO,EAAE,YAAY,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;CACzD;AAID,eAAO,MAAM,qBAAqB;;;;;EAAsB,CAAA;AACxD,eAAO,MAAM,eAAe,4BAAgB,CAAA;AAC5C,eAAO,MAAM,iBAAiB,0BAAkB,CAAA;AAChD,eAAO,MAAM,cAAc,iDAAe,CAAA"}
1
+ {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../src/context.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAA;AACtD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAA;AAC5C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AAM3C,MAAM,WAAW,kBAAkB;IACjC,SAAS,EAAE,MAAM,CAAA;IACjB,YAAY,EAAE,MAAM,CAAA;IACpB,aAAa,EAAE,MAAM,CAAA;IACrB,WAAW,EAAE,MAAM,CAAA;IACnB,eAAe,EAAE,MAAM,CAAA;IACvB,aAAa,EAAE,MAAM,CAAA;CACtB;AAMD,MAAM,WAAW,aAAa;IAC5B,YAAY,EAAE,OAAO,CAAA;IACrB,cAAc,EAAE,OAAO,CAAA;CACxB;AAED,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,aAAa,CAAA;IACtB,MAAM,EAAE,kBAAkB,CAAA;IAC1B,YAAY,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;IACrD;;;;;;;;OAQG;IACH,oBAAoB,EAAE,MAAM,CAAA;IAC5B,aAAa,CAAC,EAAE,CAAC,OAAO,EAAE,YAAY,KAAK,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAA;IACtE,aAAa,CAAC,EAAE,CAAC,OAAO,EAAE,YAAY,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;CACzD;AAID,eAAO,MAAM,qBAAqB;;;;;EAAsB,CAAA;AACxD,eAAO,MAAM,eAAe,4BAAgB,CAAA;AAC5C,eAAO,MAAM,iBAAiB,0BAAkB,CAAA;AAChD,eAAO,MAAM,cAAc,iDAAe,CAAA"}
@@ -0,0 +1,32 @@
1
+ import type { TablesDataProvider } from './types';
2
+ export interface CoreTablesWriteOptions {
3
+ /** The active org, stamped on insert. RLS checks it again on the way in. */
4
+ tenantId: () => string | undefined | null;
5
+ /**
6
+ * How a comanda opened here gets its number.
7
+ *
8
+ * Without it the order goes in with `reference_number` null — nothing in the
9
+ * pool numbers one — and every screen falls back to the short id. That is
10
+ * survivable but it is why the orders board shows a uuid beside comandas the
11
+ * floor plan opened and a real number beside the ones the balcão did.
12
+ *
13
+ * The sequence kind is the APP's, not this plugin's: a restaurant numbers
14
+ * comandas on the same counter as its other orders, and only the app knows
15
+ * which counter that is.
16
+ */
17
+ reference?: {
18
+ sequenceKind: string;
19
+ /** Permission the sequence RPC checks. Defaults to `orders.create`. */
20
+ permission?: string;
21
+ /** Prepended to the padded number, e.g. `PED-`. */
22
+ prefix?: string;
23
+ /** Zero-padding width. Defaults to 6. */
24
+ pad?: number;
25
+ };
26
+ }
27
+ export interface CoreTablesProviderOptions {
28
+ /** Present makes the provider writable; without it every mutation refuses. */
29
+ writes?: CoreTablesWriteOptions;
30
+ }
31
+ export declare function createCoreTablesProvider(options?: CoreTablesProviderOptions): TablesDataProvider;
32
+ //# sourceMappingURL=core-supabase.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"core-supabase.d.ts","sourceRoot":"","sources":["../../src/data/core-supabase.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAA;AAoEjD,MAAM,WAAW,sBAAsB;IACrC,4EAA4E;IAC5E,QAAQ,EAAE,MAAM,MAAM,GAAG,SAAS,GAAG,IAAI,CAAA;IACzC;;;;;;;;;;;OAWG;IACH,SAAS,CAAC,EAAE;QACV,YAAY,EAAE,MAAM,CAAA;QACpB,uEAAuE;QACvE,UAAU,CAAC,EAAE,MAAM,CAAA;QACnB,mDAAmD;QACnD,MAAM,CAAC,EAAE,MAAM,CAAA;QACf,yCAAyC;QACzC,GAAG,CAAC,EAAE,MAAM,CAAA;KACb,CAAA;CACF;AAED,MAAM,WAAW,yBAAyB;IACxC,8EAA8E;IAC9E,MAAM,CAAC,EAAE,sBAAsB,CAAA;CAChC;AAID,wBAAgB,wBAAwB,CAAC,OAAO,CAAC,EAAE,yBAAyB,GAAG,kBAAkB,CA80BhG"}
@@ -1 +1 @@
1
- {"version":3,"file":"mock.d.ts","sourceRoot":"","sources":["../../src/data/mock.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAA;AAuFjD,wBAAgB,wBAAwB,IAAI,kBAAkB,CAqO7D"}
1
+ {"version":3,"file":"mock.d.ts","sourceRoot":"","sources":["../../src/data/mock.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAA;AAwGjD,wBAAgB,wBAAwB,IAAI,kBAAkB,CAkV7D"}
@@ -1 +1 @@
1
- {"version":3,"file":"registries.d.ts","sourceRoot":"","sources":["../../src/data/registries.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAA;AAkBtD,eAAO,MAAM,gBAAgB,EAAE,iBAAiB,EAa/C,CAAA"}
1
+ {"version":3,"file":"registries.d.ts","sourceRoot":"","sources":["../../src/data/registries.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAA;AAuEtD,eAAO,MAAM,gBAAgB,EAAE,iBAAiB,EAsB/C,CAAA"}
@@ -1,4 +1,4 @@
1
- import type { RestaurantTable, TableSession, Zone, CreateTableInput, SeatGuestsInput, UpdateTableStatusInput, TableQuery, TablesSummary } from '../types';
1
+ import type { RestaurantTable, TableSession, Zone, CreateTableInput, SeatGuestsInput, UpdateTableStatusInput, TableQuery, TablesSummary, TableOrder, TableMenuItem, TableMenuCategory, AddTableOrderLineInput, ComandaSettings, ComandaGuest, CancelReason, OrderTransfer, DiscountLineInput, CancelLineInput, TransferInput } from '../types';
2
2
  export interface TablesDataProvider {
3
3
  getTables(query?: TableQuery): Promise<RestaurantTable[]>;
4
4
  getTableById(id: string): Promise<RestaurantTable | null>;
@@ -20,5 +20,43 @@ export interface TablesDataProvider {
20
20
  updateZone(id: string, data: Partial<Zone>): Promise<Zone>;
21
21
  deleteZone(id: string): Promise<void>;
22
22
  getSummary(): Promise<TablesSummary>;
23
+ /** The open comanda on a mesa, with its lines. */
24
+ getTableOrder?(tableId: string): Promise<TableOrder | null>;
25
+ /** What can be rung up. Searched server-side — a cardapio is not a list you
26
+ * hold in memory — and narrowed by category, which is how a waiter looks
27
+ * for a dessert whose name they do not know yet. */
28
+ getMenuItems?(search?: string, categoryId?: string): Promise<TableMenuItem[]>;
29
+ /** The chips over the picker. */
30
+ getMenuCategories?(): Promise<TableMenuCategory[]>;
31
+ addOrderLine?(orderId: string, input: AddTableOrderLineInput): Promise<void>;
32
+ /** Quantity 0 is a removal — the caller does not have to know which. */
33
+ setOrderLineQuantity?(lineId: string, quantity: number): Promise<void>;
34
+ removeOrderLine?(lineId: string): Promise<void>;
35
+ /** How many people actually sat. Wrong on arrival more often than not. */
36
+ updateSessionGuests?(orderId: string, guests: number): Promise<void>;
37
+ /** A política da casa: taxa de serviço, PIN, início do dia operacional. */
38
+ getSettings?(): Promise<ComandaSettings>;
39
+ saveSettings?(patch: Partial<ComandaSettings>): Promise<void>;
40
+ /** Participantes. `addGuest` devolve o criado para a tela já o selecionar. */
41
+ addGuest?(orderId: string, label?: string): Promise<ComandaGuest>;
42
+ removeGuest?(guestId: string): Promise<void>;
43
+ /** Nulo devolve o participante à taxa da mesa. */
44
+ setGuestServiceCharge?(guestId: string, percent: number | null): Promise<void>;
45
+ /** Nulo devolve a mesa à taxa da casa. */
46
+ setOrderServiceCharge?(orderId: string, percent: number | null): Promise<void>;
47
+ /** Desconto por item — percentual ou valor, sobre as linhas escolhidas. */
48
+ discountLines?(orderId: string, input: DiscountLineInput): Promise<void>;
49
+ /** Motivos cadastrados, para o diálogo de cancelamento ter o que oferecer. */
50
+ getCancelReasons?(): Promise<CancelReason[]>;
51
+ addCancelReason?(label: string): Promise<CancelReason>;
52
+ updateCancelReason?(id: string, patch: Partial<CancelReason>): Promise<void>;
53
+ deleteCancelReason?(id: string): Promise<void>;
54
+ /** Cancela COM motivo. Sem motivo não há cancelamento: é a metade que o V1
55
+ * exige na tela e que o painel de turno depois lê. */
56
+ cancelLines?(orderId: string, input: CancelLineInput): Promise<void>;
57
+ /** Mesa inteira · participante · itens. Uma chamada, três verbos, porque é
58
+ * uma peça só vista de três ângulos. */
59
+ transfer?(orderId: string, input: TransferInput): Promise<void>;
60
+ getTransfers?(orderId: string): Promise<OrderTransfer[]>;
23
61
  }
24
62
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/data/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,eAAe,EAAE,YAAY,EAAE,IAAI,EACnC,gBAAgB,EAAE,eAAe,EAAE,sBAAsB,EACzD,UAAU,EAAE,aAAa,EAC1B,MAAM,UAAU,CAAA;AAEjB,MAAM,WAAW,kBAAkB;IAEjC,SAAS,CAAC,KAAK,CAAC,EAAE,UAAU,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC,CAAA;IACzD,YAAY,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC,CAAA;IACzD,WAAW,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,eAAe,CAAC,CAAA;IAC9D,WAAW,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,CAAC,eAAe,CAAC,GAAG,OAAO,CAAC,eAAe,CAAC,CAAA;IACjF,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IACtC,iBAAiB,CAAC,KAAK,EAAE,sBAAsB,GAAG,OAAO,CAAC,eAAe,CAAC,CAAA;IAC1E,oBAAoB,CAAC,SAAS,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAGvG,UAAU,CAAC,KAAK,EAAE,eAAe,GAAG,OAAO,CAAC,YAAY,CAAC,CAAA;IACzD,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CAAA;IACtD,iBAAiB,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC,CAAA;IAC5C,iBAAiB,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CAAA;IAG5D,QAAQ,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC,CAAA;IAC3B,UAAU,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAC9C,UAAU,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAC1D,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAGrC,UAAU,IAAI,OAAO,CAAC,aAAa,CAAC,CAAA;CACrC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/data/types.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -17,6 +17,8 @@ export interface TablesPluginOptions {
17
17
  name: string;
18
18
  color?: string;
19
19
  }>;
20
+ /** Taxa de serviço shown on the mesa's panel, in percent. 0 draws no line. */
21
+ serviceChargePercent?: number;
20
22
  navPosition?: number;
21
23
  navSection?: 'main' | 'secondary' | 'settings';
22
24
  scope?: PluginScope;
@@ -25,9 +27,14 @@ export interface TablesPluginOptions {
25
27
  onTableSeated?: (session: TableSession) => Promise<string | undefined>;
26
28
  onTableClosed?: (session: TableSession) => Promise<void>;
27
29
  }
30
+ /** Onde a planta se anuncia para outras telas. Ver `registerComponent` abaixo. */
31
+ export declare const FLOOR_PLAN_COMPONENT_ID = "tables.floor-plan";
28
32
  export declare function createTablesPlugin(options?: TablesPluginOptions): PluginManifest;
29
33
  export type { TablesDataProvider } from './data/types';
30
34
  export { createFayzTablesProvider } from './data/platform';
35
+ export { createCoreTablesProvider } from './data/core-supabase';
36
+ export type { CoreTablesProviderOptions, CoreTablesWriteOptions } from './data/core-supabase';
31
37
  export type { FayzTablesProviderOptions } from './data/platform';
32
38
  export type { ResolvedTablesConfig } from './context';
39
+ export type { TableOrder, TableOrderLine, TableMenuItem, AddTableOrderLineInput, } from './types';
33
40
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;AAC5E,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAA;AACtD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AAa3C,MAAM,WAAW,kBAAkB;IACjC,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,MAAM,CAAA;IACjB,KAAK,EAAE,MAAM,CAAA;IACb,cAAc,EAAE,MAAM,CAAA;CACvB;AAaD,MAAM,WAAW,mBAAmB;IAClC,OAAO,CAAC,EAAE;QACR,YAAY,CAAC,EAAE,OAAO,CAAA;QACtB,cAAc,CAAC,EAAE,OAAO,CAAA;KACzB,CAAA;IACD,MAAM,CAAC,EAAE,OAAO,CAAC,kBAAkB,CAAC,CAAA;IACpC,YAAY,CAAC,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;IACtD,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,UAAU,CAAC,EAAE,MAAM,GAAG,WAAW,GAAG,UAAU,CAAA;IAC9C,KAAK,CAAC,EAAE,WAAW,CAAA;IACnB,UAAU,CAAC,EAAE,UAAU,CAAA;IACvB,YAAY,CAAC,EAAE,kBAAkB,CAAA;IACjC,aAAa,CAAC,EAAE,CAAC,OAAO,EAAE,YAAY,KAAK,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAA;IACtE,aAAa,CAAC,EAAE,CAAC,OAAO,EAAE,YAAY,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;CACzD;AA2BD,wBAAgB,kBAAkB,CAAC,OAAO,CAAC,EAAE,mBAAmB,GAAG,cAAc,CAkGhF;AAED,YAAY,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAA;AACtD,OAAO,EAAE,wBAAwB,EAAE,MAAM,iBAAiB,CAAA;AAC1D,YAAY,EAAE,yBAAyB,EAAE,MAAM,iBAAiB,CAAA;AAChE,YAAY,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;AAC5E,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAA;AACtD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AAiB3C,MAAM,WAAW,kBAAkB;IACjC,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,MAAM,CAAA;IACjB,KAAK,EAAE,MAAM,CAAA;IACb,cAAc,EAAE,MAAM,CAAA;CACvB;AAaD,MAAM,WAAW,mBAAmB;IAClC,OAAO,CAAC,EAAE;QACR,YAAY,CAAC,EAAE,OAAO,CAAA;QACtB,cAAc,CAAC,EAAE,OAAO,CAAA;KACzB,CAAA;IACD,MAAM,CAAC,EAAE,OAAO,CAAC,kBAAkB,CAAC,CAAA;IACpC,YAAY,CAAC,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;IACtD,8EAA8E;IAC9E,oBAAoB,CAAC,EAAE,MAAM,CAAA;IAC7B,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,UAAU,CAAC,EAAE,MAAM,GAAG,WAAW,GAAG,UAAU,CAAA;IAC9C,KAAK,CAAC,EAAE,WAAW,CAAA;IACnB,UAAU,CAAC,EAAE,UAAU,CAAA;IACvB,YAAY,CAAC,EAAE,kBAAkB,CAAA;IACjC,aAAa,CAAC,EAAE,CAAC,OAAO,EAAE,YAAY,KAAK,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAA;IACtE,aAAa,CAAC,EAAE,CAAC,OAAO,EAAE,YAAY,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;CACzD;AA4BD,kFAAkF;AAClF,eAAO,MAAM,uBAAuB,sBAAsB,CAAA;AAE1D,wBAAgB,kBAAkB,CAAC,OAAO,CAAC,EAAE,mBAAmB,GAAG,cAAc,CA4IhF;AAED,YAAY,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAA;AACtD,OAAO,EAAE,wBAAwB,EAAE,MAAM,iBAAiB,CAAA;AAG1D,OAAO,EAAE,wBAAwB,EAAE,MAAM,sBAAsB,CAAA;AAC/D,YAAY,EAAE,yBAAyB,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAA;AAC7F,YAAY,EAAE,yBAAyB,EAAE,MAAM,iBAAiB,CAAA;AAChE,YAAY,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAA;AACrD,YAAY,EACV,UAAU,EAAE,cAAc,EAAE,aAAa,EAAE,sBAAsB,GAClE,MAAM,SAAS,CAAA"}