@fayz-ai/plugin-reservations 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/dist/ReservationsPage-5RF5SYZT.js +1157 -0
- package/dist/ReservationsPage-5RF5SYZT.js.map +1 -0
- package/dist/chunk-7KXGSUHT.js +335 -0
- package/dist/chunk-7KXGSUHT.js.map +1 -0
- package/dist/components/CapacityStrip.d.ts +25 -0
- package/dist/components/CapacityStrip.d.ts.map +1 -0
- package/dist/components/ReservationModal.d.ts +23 -0
- package/dist/components/ReservationModal.d.ts.map +1 -0
- package/dist/components/SeatDialog.d.ts +16 -0
- package/dist/components/SeatDialog.d.ts.map +1 -0
- package/dist/context.d.ts +49 -0
- package/dist/context.d.ts.map +1 -0
- package/dist/data/core-supabase.d.ts +32 -0
- package/dist/data/core-supabase.d.ts.map +1 -0
- package/dist/data/mock.d.ts +3 -0
- package/dist/data/mock.d.ts.map +1 -0
- package/dist/data/types.d.ts +37 -0
- package/dist/data/types.d.ts.map +1 -0
- package/dist/index.d.ts +43 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +870 -0
- package/dist/index.js.map +1 -0
- package/dist/locales/en.d.ts +2 -0
- package/dist/locales/en.d.ts.map +1 -0
- package/dist/locales/index.d.ts +2 -0
- package/dist/locales/index.d.ts.map +1 -0
- package/dist/locales/pt-BR.d.ts +2 -0
- package/dist/locales/pt-BR.d.ts.map +1 -0
- package/dist/migrations/index.d.ts +6 -0
- package/dist/migrations/index.d.ts.map +1 -0
- package/dist/store.d.ts +48 -0
- package/dist/store.d.ts.map +1 -0
- package/dist/types.d.ts +174 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/views/CapacitySettingsView.d.ts +3 -0
- package/dist/views/CapacitySettingsView.d.ts.map +1 -0
- package/dist/views/ReservationsListView.d.ts +5 -0
- package/dist/views/ReservationsListView.d.ts.map +1 -0
- package/dist/views/ReservationsPage.d.ts +27 -0
- package/dist/views/ReservationsPage.d.ts.map +1 -0
- package/dist/views/ServiceDayView.d.ts +15 -0
- package/dist/views/ServiceDayView.d.ts.map +1 -0
- package/package.json +62 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/context.tsx","../src/components/CapacityStrip.tsx","../src/components/ReservationModal.tsx","../src/components/SeatDialog.tsx","../src/views/ServiceDayView.tsx","../src/views/ReservationsListView.tsx","../src/views/CapacitySettingsView.tsx","../src/views/ReservationsPage.tsx"],"names":["jsx","jsxs","useState","React","Modal","ModalContent","ModalHeader","ModalTitle","ModalBody","Input","ModalFooter","Button","useEffect","useMemo","Skeleton","Users","PageHeaderActions","PermissionGate","Plus","FilterCheckList","DotBadge","Select","SelectTrigger","SelectValue","SelectContent","SelectItem","TimePicker","CalendarOff"],"mappings":"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","file":"ReservationsPage-5RF5SYZT.js","sourcesContent":["import { createPluginContext, type EntityLookup } from '@fayz-ai/admin'\nimport type { EntityDef } from '@fayz-ai/core'\nimport type { ReservationsDataProvider } from './data/types'\nimport type { ReservationsUIState } from './store'\nimport type { ReservationStatus, Occasion } from './types'\n\n// ---------------------------------------------------------------------------\n// Labels + resolved config\n// ---------------------------------------------------------------------------\n\nexport interface ReservationsPluginLabels {\n pageTitle: string\n pageSubtitle: string\n newReservation: string\n}\n\n/** A state, with the word and the colour the house shows for it. Same shape as\n * the agenda's status list on purpose: both feed `DotBadge` from @fayz-ai/ui,\n * which is the piece the two screens genuinely share. */\nexport interface ReservationStatusOption {\n value: ReservationStatus\n label: string\n color: string\n}\n\nexport interface OccasionOption {\n value: Occasion\n label: string\n}\n\nexport interface ResolvedReservationsConfig {\n labels: ReservationsPluginLabels\n statuses: ReservationStatusOption[]\n occasions: OccasionOption[]\n /** How the day is drawn when the house has no grid yet — the first and last\n * hour of the strip. Not a rule: purely how wide the empty ruler is. */\n dayWindow: { start: string; end: string }\n // -------------------------------------------------------------------------\n // Quem reservou.\n //\n // Uma reserva nao guarda um nome, guarda uma PESSOA. Nome, telefone e e-mail\n // continuam na linha — sao o que foi dito ao telefone, e a coluna sobrevive\n // ao cliente ser apagado (`on delete set null`) —, mas eles passaram a ser a\n // copia de um cadastro, e nao tres campos soltos que ninguem consegue cruzar\n // com a comanda de ontem nem com o cliente que nunca aparece.\n //\n // Os tres campos abaixo sao a mesma costura que a agenda usa: sem nenhum\n // deles o seletor ainda busca e ainda cadastra, pelo arquétipo `person`\n // filtrado por `clientKind`. Com eles, o \"+ Cadastrar\" abre o formulario da\n // ENTIDADE do app — que e o que sabe escrever a tabela base e a extensao do\n // vertical juntas.\n // -------------------------------------------------------------------------\n /** O `people.kind` que a busca varre, para a casa so ver a gente dela. */\n clientKind: string\n /** Busca propria, quando o app tem uma. */\n contactLookup?: EntityLookup\n /** O que o \"+ Cadastrar\" escreve — a entidade que a pagina de cadastro usa. */\n clientEntityDef?: EntityDef\n}\n\nconst ctx = createPluginContext<ResolvedReservationsConfig, ReservationsDataProvider, ReservationsUIState>('ReservationsPage')\n\nexport const ReservationsContextProvider = ctx.ContextProvider\nexport const useReservationsConfig = ctx.useConfig\nexport const useReservationsProvider = ctx.useProvider\nexport const useReservationsStore = ctx.useStore\n","import React from 'react'\nimport { AlertTriangle, CalendarOff } from 'lucide-react'\nimport { Skeleton } from '@fayz-ai/ui'\nimport type { DaySlot } from '../types'\n\n/**\n * The day's windows, with what is left in each.\n *\n * THIS IS THE SCREEN THE V1 NEVER MANAGED TO DRAW. With three rules covering\n * all seven weekdays, its \"Capacidade do dia\" answered *\"Nenhuma grade\n * configurada para este dia\"* on every date tested (V1-041) — a database error\n * wearing an empty state's clothes. Two consequences shape this component:\n *\n * 1. **An error is not an empty state.** `error` and \"no slots\" are different\n * props with different words. Someone whose grid is fine must never be told\n * to go configure it again.\n * 2. **The bar is the product.** `12:00–15:00 · 38/50` answers the question\n * reception is actually holding the phone about, and the V1 answers it\n * nowhere — not here, and not in its reservation form either.\n */\nexport function CapacityStrip({ slots, loading, error, onPickSlot }: {\n slots: DaySlot[]\n loading?: boolean\n error?: string | null\n /** Clicking a window starts a reservation already inside it. */\n onPickSlot?: (slot: DaySlot) => void\n}) {\n if (loading) {\n return (\n <div className=\"grid gap-2 sm:grid-cols-2\">\n {[0, 1].map((i) => <Skeleton key={i} className=\"h-[72px] w-full rounded-lg\" />)}\n </div>\n )\n }\n\n if (error) {\n return (\n <div className=\"flex items-start gap-3 rounded-lg border border-destructive/30 bg-destructive/5 p-4\">\n <AlertTriangle className=\"mt-0.5 h-4 w-4 shrink-0 text-destructive\" />\n <div className=\"min-w-0\">\n <p className=\"text-sm font-medium text-destructive\">Não foi possível ler a grade de capacidade</p>\n {/* The message, not a shrug: the V1's version of this failure was\n indistinguishable from \"you have not configured anything\". */}\n <p className=\"mt-0.5 break-words text-xs text-muted-foreground\">{error}</p>\n </div>\n </div>\n )\n }\n\n if (!slots.length) {\n return (\n <div className=\"flex items-center gap-3 rounded-lg border border-dashed p-4\">\n <CalendarOff className=\"h-4 w-4 shrink-0 text-muted-foreground\" />\n <p className=\"text-sm text-muted-foreground\">\n Nenhuma faixa aberta neste dia. A grade semanal e as exceções ficam em{' '}\n <span className=\"font-medium text-foreground\">Configurações → Reservas</span>.\n </p>\n </div>\n )\n }\n\n return (\n <div className=\"grid gap-2 sm:grid-cols-2\">\n {slots.map((slot, i) => {\n const pct = slot.capacity > 0 ? Math.min((slot.booked / slot.capacity) * 100, 100) : 0\n const full = slot.remaining === 0\n // Amber before red: a house wants to know the window is filling while\n // it can still do something about it.\n const tone = full ? 'bg-destructive' : pct >= 80 ? 'bg-accent' : 'bg-primary'\n const Row = onPickSlot ? 'button' : 'div'\n return (\n <Row\n key={`${slot.zoneId ?? 'all'}-${slot.startTime}-${i}`}\n {...(onPickSlot ? { onClick: () => onPickSlot(slot), type: 'button' as const } : {})}\n className={`rounded-lg border bg-card p-3 text-left transition-colors ${onPickSlot ? 'hover:bg-muted/50' : ''}`}\n >\n <div className=\"flex items-baseline justify-between gap-2\">\n <span className=\"text-sm font-medium tabular-nums\">\n {slot.startTime} – {slot.endTime}\n </span>\n <span className={`text-sm tabular-nums ${full ? 'font-semibold text-destructive' : 'text-muted-foreground'}`}>\n {slot.booked}/{slot.capacity}\n </span>\n </div>\n\n <div className=\"mt-1.5 flex items-center gap-2\">\n {slot.zoneColor && (\n <span className=\"h-2 w-2 shrink-0 rounded-full\" style={{ backgroundColor: slot.zoneColor }} />\n )}\n <span className=\"truncate text-xs text-muted-foreground\">\n {slot.zoneName ?? 'Restaurante'}\n </span>\n {slot.isException && (\n <span className=\"shrink-0 rounded-full bg-accent/15 px-1.5 py-px text-[10px] font-medium text-accent\">\n exceção\n </span>\n )}\n </div>\n\n <div className=\"mt-2 h-1.5 w-full overflow-hidden rounded-full bg-muted\">\n <div className={`h-full rounded-full transition-all ${tone}`} style={{ width: `${pct}%` }} />\n </div>\n\n <p className=\"mt-1.5 text-xs text-muted-foreground\">\n {full ? 'Lotação cheia' : `${slot.remaining} ${slot.remaining === 1 ? 'lugar' : 'lugares'} livres`}\n </p>\n </Row>\n )\n })}\n </div>\n )\n}\n","import React, { useEffect, useMemo, useState } from 'react'\nimport {\n Modal, ModalContent, ModalHeader, ModalTitle, ModalBody, ModalFooter,\n Button, Input, Select, SelectTrigger, SelectValue, SelectContent, SelectItem,\n TimePicker,\n} from '@fayz-ai/ui'\nimport { ContactPicker, createArchetypeLookup, type EntityLookup } from '@fayz-ai/admin'\nimport type { EntityDef } from '@fayz-ai/core'\nimport { useReservationsConfig, useReservationsStore } from '../context'\nimport type { Reservation, CreateReservationInput, DaySlot, Occasion } from '../types'\n\n/**\n * O cadastro do cliente nasce ja com o que a CASA exige da reserva.\n *\n * `LookupCreateInline` desenha o que a entidade marca como obrigatorio e deixa\n * o resto a um clique. Sem esta promocao, uma casa com \"exigir telefone\" ligado\n * oferecia \"+ Cadastrar\", criava um contato so com nome, e so entao travava a\n * reserva por falta do telefone — pedindo duas vezes o que cabia numa.\n */\nfunction requireContactFields(def: EntityDef | undefined, phone: boolean, email: boolean): EntityDef | undefined {\n if (!def || (!phone && !email)) return def\n return {\n ...def,\n fields: def.fields.map((f) =>\n (f.key === 'phone' && phone) || (f.key === 'email' && email) ? { ...f, required: true } : f),\n }\n}\n\n/**\n * The reservation form.\n *\n * Its one non-obvious job is the line under the time: the window this\n * reservation would fall into, and what is left in it AFTER this party. The V1\n * has this same form and — verified with a network spy — *\"abrir e preencher\n * Nova reserva não disparou nenhuma chamada à `get_reservation_availability`\"*:\n * whoever is on the phone decides blind. Everything else here is the V1's field\n * list, in the V1's order.\n */\nexport function ReservationModal({ open, onClose, date, reservation, defaultSlot }: {\n open: boolean\n onClose: () => void\n /** The day the screen is on, used when creating. */\n date: string\n /** Editing an existing one. */\n reservation?: Reservation | null\n /** Clicking a window on the capacity strip pre-fills the time and the zone. */\n defaultSlot?: DaySlot | null\n}) {\n const config = useReservationsConfig()\n const zones = useReservationsStore((s) => s.zones)\n const tables = useReservationsStore((s) => s.tables)\n const slots = useReservationsStore((s) => s.slots)\n const settings = useReservationsStore((s) => s.settings)\n const create = useReservationsStore((s) => s.create)\n const update = useReservationsStore((s) => s.update)\n\n const [form, setForm] = useState<CreateReservationInput>(() => blank(date, defaultSlot))\n const [saving, setSaving] = useState(false)\n // O telefone QUE VEIO DO CADASTRO, separado do que esta na reserva.\n //\n // Os dois comecam iguais e e por isso que confundi-los passa despercebido ate\n // alguem digitar: `handleField.derived` quer dizer \"isto ja se sabe da pessoa,\n // nao ha o que perguntar\", e o seletor esconde o campo enquanto ele existir.\n // Apontado para `form.phone`, a primeira tecla criava o valor, o valor apagava\n // o campo, e o campo levava junto o cursor de quem estava digitando.\n const [personPhone, setPersonPhone] = useState<string | undefined>(undefined)\n\n // Quem reservou e uma PESSOA, nao tres campos soltos. O que a busca varre e o\n // que o \"+ Cadastrar\" escreve vem do app quando ele tem cliente proprio; sem\n // isso, do arquétipo `person` filtrado pela especie da casa.\n const requirePhone = !!settings?.requirePhone\n const requireEmail = !!settings?.requireEmail\n const baseLookup: EntityLookup = useMemo(\n () => config.contactLookup ?? createArchetypeLookup({ archetype: 'person', kind: config.clientKind }),\n [config.contactLookup, config.clientKind],\n )\n const clientLookup = useMemo(() => {\n const def = requireContactFields(baseLookup.entityDef, requirePhone, requireEmail)\n return def === baseLookup.entityDef ? baseLookup : { ...baseLookup, entityDef: def }\n }, [baseLookup, requirePhone, requireEmail])\n const clientEntityDef = useMemo(\n () => requireContactFields(config.clientEntityDef, requirePhone, requireEmail),\n [config.clientEntityDef, requirePhone, requireEmail],\n )\n\n useEffect(() => {\n if (!open) return\n setForm(reservation\n ? {\n personId: reservation.personId, guestName: reservation.guestName,\n phone: reservation.phone, email: reservation.email,\n zoneId: reservation.zoneId, tableId: reservation.tableId,\n reservedOn: reservation.reservedOn, startTime: reservation.startTime,\n endTime: reservation.endTime, partySize: reservation.partySize,\n occasion: reservation.occasion, notes: reservation.notes, status: reservation.status,\n }\n : blank(date, defaultSlot))\n // Numa reserva ja gravada o numero e conhecido — nada a perguntar.\n setPersonPhone(reservation?.phone || undefined)\n }, [open, reservation, date, defaultSlot])\n\n /** The window this reservation starts inside — the V1's own rule, \"a reserva\n * ocupa a faixa em que começa\". */\n const slot = useMemo(() => {\n const candidates = slots.filter((s) =>\n (!s.zoneId || !form.zoneId || s.zoneId === form.zoneId) &&\n form.startTime >= s.startTime && form.startTime < s.endTime)\n return candidates[0] ?? null\n }, [slots, form.startTime, form.zoneId])\n\n /**\n * A reservation with no praça counts against NOTHING when the grid is per\n * praça — the lotação is per zone, so a null zone matches no window and the\n * bar stays at 0/80 with four people booked. Found on screen, not in a test.\n *\n * So when exactly one window covers the chosen time, the form adopts its\n * praça. Silently, because \"Restaurante todo\" would be a wrong answer the\n * person never asked for, and the field stays editable for the case where\n * they meant another room.\n */\n useEffect(() => {\n if (!open || form.zoneId) return\n const covering = slots.filter((s) =>\n s.zoneId && form.startTime >= s.startTime && form.startTime < s.endTime)\n const unique = new Set(covering.map((s) => s.zoneId))\n if (unique.size === 1) setForm((f) => (f.zoneId ? f : { ...f, zoneId: covering[0].zoneId }))\n }, [open, slots, form.startTime, form.zoneId])\n\n /** More than one praça open at this hour, and none chosen: nobody can pick\n * for them, and the reservation would fall outside every lotação. */\n const zonedWindows = slots.filter((s) =>\n s.zoneId && form.startTime >= s.startTime && form.startTime < s.endTime)\n const unzonedInAZonedHouse = !form.zoneId && zonedWindows.length > 0\n\n /** What is left AFTER this party — the number that answers \"posso aceitar?\".\n * When editing, this reservation's own seats are not counted twice. */\n const remainingAfter = useMemo(() => {\n if (!slot) return null\n const own = reservation && reservation.startTime >= slot.startTime && reservation.startTime < slot.endTime\n ? reservation.partySize\n : 0\n return slot.capacity - (slot.booked - own) - (form.partySize || 0)\n }, [slot, form.partySize, reservation])\n\n const zoneTables = tables.filter((t) => !form.zoneId || t.zoneId === form.zoneId)\n\n // A blocked action SAYS what is missing, never a dead button in silence.\n const missing: string[] = []\n if (!form.personId) missing.push('o cliente que reservou')\n if (requirePhone && !form.phone?.trim()) missing.push('o telefone do cliente')\n if (requireEmail && !form.email?.trim()) missing.push('o e-mail do cliente')\n if (!form.partySize || form.partySize < 1) missing.push('quantas pessoas')\n if (unzonedInAZonedHouse) missing.push('a praça — sem ela a reserva não entra em nenhuma lotação')\n\n async function submit() {\n if (missing.length) return\n setSaving(true)\n try {\n if (reservation) await update(reservation.id, form)\n else await create(form)\n onClose()\n } finally {\n setSaving(false)\n }\n }\n\n return (\n <Modal open={open} onOpenChange={(v) => !v && onClose()}>\n {/* Through the portal, always: a dialog drawn as a sibling of the button\n that opened it inherits that scope's colour and comes out near-white\n on a white card. */}\n <ModalContent size=\"lg\">\n <ModalHeader>\n <ModalTitle>{reservation ? 'Editar reserva' : config.labels.newReservation}</ModalTitle>\n </ModalHeader>\n\n <ModalBody>\n {/* fz-fields under fz-container: `sm:` inside a 448px panel measures\n the WINDOW and insists on two 200px columns. */}\n <div className=\"fz-container space-y-4\">\n {/* Um campo, nao tres. Nome, telefone e e-mail continuam gravados\n na reserva — sao o que foi dito ao telefone, e sobrevivem ao\n cliente ser apagado — mas passaram a ser a COPIA de um cadastro:\n a reserva de hoje agora cruza com a comanda de ontem e com o\n cliente que nunca aparece. Quem nao esta na base entra pelo\n \"+ Cadastrar\", no mesmo campo, com celular e e-mail. */}\n <ContactPicker\n value={form.personId || form.guestName\n ? { id: form.personId, name: form.guestName, phone: form.phone, email: form.email }\n : null}\n onChange={(c) => {\n setPersonPhone(c?.phone || undefined)\n setForm({\n ...form,\n personId: c?.id,\n guestName: c?.name ?? '',\n phone: c?.phone ?? '',\n email: c?.email ?? '',\n })\n }}\n kind={config.clientKind}\n lookup={clientLookup}\n createEntityDef={clientEntityDef}\n label=\"Cliente *\"\n placeholder=\"Quem reservou\"\n createLabel=\"Cadastrar cliente\"\n autoFocus\n required\n // O telefone so vira campo depois de escolhido o cliente, e so\n // quando o cadastro dele NAO o tem: um contato ja com numero\n // mostra-o no proprio chip, e uma caixa vazia ao lado dele e um\n // convite a divergir do cadastro. Antes da escolha nao ha telefone\n // de ninguem — oferece-lo ali e pedir o dado de um vazio.\n {...(form.personId ? {\n handleField: {\n label: 'telefone',\n fieldLabel: 'Telefone',\n placeholder: '(00) 00000-0000',\n derived: personPhone,\n value: form.phone ?? '',\n onChange: (v: string) => setForm({ ...form, phone: v }),\n },\n } : {})}\n />\n\n {/* Reserva antiga, de antes de haver cliente: o nome existe e a\n pessoa nao. Dizer de quem e — e nao um campo em branco — e o que\n deixa a busca acima terminar o servico. */}\n {reservation && !form.personId && form.guestName && (\n <p className=\"text-xs text-amber-600 dark:text-amber-500\">\n Em nome de <strong>{form.guestName}</strong>, sem cliente vinculado.\n Busque a pessoa acima para ligar as duas — ou cadastre-a.\n </p>\n )}\n\n <div className=\"fz-fields fz-fields-2\">\n <Field label=\"Data *\">\n <Input\n type=\"date\"\n value={form.reservedOn}\n onChange={(e) => setForm({ ...form, reservedOn: e.target.value })}\n />\n </Field>\n <Field label=\"Pessoas *\">\n <Input\n type=\"number\"\n min={1}\n value={form.partySize}\n onChange={(e) => setForm({ ...form, partySize: Number(e.target.value) })}\n />\n </Field>\n </div>\n\n <div className=\"fz-fields fz-fields-2\">\n <Field label=\"Hora início *\">\n <TimePicker\n value={form.startTime}\n onChange={(v: string) => setForm({ ...form, startTime: v })}\n />\n </Field>\n <Field label=\"Hora fim\">\n <TimePicker\n value={form.endTime ?? ''}\n onChange={(v: string) => setForm({ ...form, endTime: v })}\n />\n </Field>\n </div>\n\n {/* The whole reason this form differs from the V1's. */}\n <SlotHint slot={slot} remainingAfter={remainingAfter} party={form.partySize} />\n\n <div className=\"fz-fields fz-fields-2\">\n <Field label=\"Praça\">\n <Select\n value={form.zoneId ?? '__none'}\n onValueChange={(v: string) => setForm({ ...form, zoneId: v === '__none' ? undefined : v, tableId: undefined })}\n >\n <SelectTrigger><SelectValue placeholder=\"Restaurante todo\" /></SelectTrigger>\n <SelectContent>\n <SelectItem value=\"__none\">Restaurante todo</SelectItem>\n {zones.map((z) => <SelectItem key={z.id} value={z.id}>{z.name}</SelectItem>)}\n </SelectContent>\n </Select>\n </Field>\n <Field label=\"Mesa (opcional)\">\n <Select\n value={form.tableId ?? '__none'}\n onValueChange={(v: string) => setForm({ ...form, tableId: v === '__none' ? undefined : v })}\n >\n <SelectTrigger><SelectValue placeholder=\"— Nenhuma —\" /></SelectTrigger>\n <SelectContent>\n <SelectItem value=\"__none\">— Nenhuma —</SelectItem>\n {zoneTables.map((t) => (\n <SelectItem key={t.id} value={t.id}>\n Mesa {t.number} · {t.seats} lug.\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </Field>\n </div>\n\n {/* O e-mail saiu daqui: ele e do CADASTRO do cliente, perguntado\n onde o cliente e criado, e nao um quarto campo desta ficha. */}\n <Field label=\"Ocasião\">\n <Select\n value={form.occasion ?? '__none'}\n onValueChange={(v: string) => setForm({ ...form, occasion: v === '__none' ? undefined : (v as Occasion) })}\n >\n <SelectTrigger><SelectValue placeholder=\"—\" /></SelectTrigger>\n <SelectContent>\n <SelectItem value=\"__none\">—</SelectItem>\n {config.occasions.map((o) => <SelectItem key={o.value} value={o.value}>{o.label}</SelectItem>)}\n </SelectContent>\n </Select>\n </Field>\n\n <Field label=\"Observações\">\n <Input\n value={form.notes ?? ''}\n onChange={(e) => setForm({ ...form, notes: e.target.value })}\n placeholder=\"Cadeirinha de bebê, aniversário surpresa…\"\n />\n </Field>\n </div>\n </ModalBody>\n\n <ModalFooter>\n <div className=\"flex w-full items-center justify-between gap-3\">\n <p className=\"min-w-0 text-xs text-muted-foreground\">\n {missing.length ? `Falta ${missing.join(', ')}.` : ''}\n </p>\n <div className=\"flex shrink-0 gap-2\">\n <Button variant=\"outline\" onClick={onClose}>Cancelar</Button>\n <Button onClick={submit} disabled={!!missing.length || saving}>\n {saving ? 'Salvando…' : 'Salvar'}\n </Button>\n </div>\n </div>\n </ModalFooter>\n </ModalContent>\n </Modal>\n )\n}\n\nfunction Field({ label, children }: { label: string; children: React.ReactNode }) {\n return (\n <label className=\"block space-y-1.5\">\n <span className=\"text-xs font-medium text-muted-foreground\">{label}</span>\n {children}\n </label>\n )\n}\n\n/** The line the V1 does not have. Three states, and each says something\n * actionable — including \"there is no window here\", which is a real answer. */\nfunction SlotHint({ slot, remainingAfter, party }: {\n slot: DaySlot | null\n remainingAfter: number | null\n party: number\n}) {\n if (!slot) {\n return (\n <p className=\"rounded-lg bg-muted/50 px-3 py-2 text-xs text-muted-foreground\">\n Nenhuma faixa de capacidade cobre este horário. A reserva pode ser\n registrada assim mesmo — só não há teto configurado para ela.\n </p>\n )\n }\n const over = remainingAfter != null && remainingAfter < 0\n return (\n <p className={`rounded-lg px-3 py-2 text-xs ${over ? 'bg-destructive/10 text-destructive' : 'bg-muted/50 text-muted-foreground'}`}>\n <span className=\"font-medium tabular-nums\">{slot.startTime}–{slot.endTime}</span>\n {slot.zoneName ? ` · ${slot.zoneName}` : ''} · {slot.booked}/{slot.capacity} ocupados.{' '}\n {over\n ? `Com ${party} pessoa(s) a faixa estoura em ${Math.abs(remainingAfter!)}.`\n : `Sobram ${remainingAfter} depois desta reserva.`}\n </p>\n )\n}\n\nfunction blank(date: string, slot?: DaySlot | null): CreateReservationInput {\n return {\n guestName: '',\n reservedOn: date,\n // 20:00 is the V1's default and the right one: the reservation a\n // restaurant takes over the phone is a dinner one.\n startTime: slot?.startTime ?? '20:00',\n zoneId: slot?.zoneId,\n partySize: 2,\n }\n}\n","import React, { useState } from 'react'\nimport { Users } from 'lucide-react'\nimport {\n Modal, ModalContent, ModalHeader, ModalTitle, ModalBody, ModalFooter,\n Button, Input,\n} from '@fayz-ai/ui'\nimport { useReservationsStore } from '../context'\nimport type { Reservation } from '../types'\n\n/**\n * \"Chegaram\" — the click that turns a reservation into a comanda.\n *\n * In the V1, *Acomodada* is only a status: the night's reservations leave no\n * trace in its money, and its Operação panel counts comandas that never knew a\n * reservation happened. Here this dialog picks the mesa, and seating opens the\n * comanda on it through plugin-tables — one path from the phone call to the\n * bill.\n */\nexport function SeatDialog({ reservation, onClose }: {\n reservation: Reservation | null\n onClose: () => void\n}) {\n const tables = useReservationsStore((s) => s.tables)\n const seat = useReservationsStore((s) => s.seat)\n\n const [tableId, setTableId] = useState<string | null>(reservation?.tableId ?? null)\n const [guests, setGuests] = useState<number>(reservation?.partySize ?? 2)\n const [saving, setSaving] = useState(false)\n\n React.useEffect(() => {\n setTableId(reservation?.tableId ?? null)\n setGuests(reservation?.partySize ?? 2)\n }, [reservation])\n\n if (!reservation) return null\n\n const free = tables.filter((t) => !t.isOccupied)\n const chosen = tables.find((t) => t.id === tableId)\n const tooSmall = chosen ? chosen.seats < guests : false\n\n async function confirm() {\n if (!tableId) return\n setSaving(true)\n try {\n await seat(reservation!.id, tableId, guests)\n onClose()\n } finally {\n setSaving(false)\n }\n }\n\n return (\n <Modal open onOpenChange={(v) => !v && onClose()}>\n <ModalContent size=\"md\">\n <ModalHeader>\n <ModalTitle>Acomodar {reservation.guestName}</ModalTitle>\n </ModalHeader>\n\n <ModalBody>\n <div className=\"fz-container space-y-4\">\n <label className=\"block space-y-1.5\">\n <span className=\"text-xs font-medium text-muted-foreground\">Quantas pessoas sentaram</span>\n <Input type=\"number\" min={1} value={guests} onChange={(e) => setGuests(Number(e.target.value))} />\n {guests !== reservation.partySize && (\n // The party that shows up is not always the party that booked,\n // and the comanda has to open with the real number — the couvert\n // and the split bill both hang off it.\n <span className=\"text-xs text-muted-foreground\">\n A reserva era para {reservation.partySize}. A comanda abre com {guests}.\n </span>\n )}\n </label>\n\n <div className=\"space-y-1.5\">\n <span className=\"text-xs font-medium text-muted-foreground\">Mesa</span>\n {free.length === 0 ? (\n <p className=\"rounded-lg border border-dashed p-3 text-sm text-muted-foreground\">\n Nenhuma mesa livre. Uma mesa fica ocupada enquanto há comanda aberta\n nela — feche uma comanda em Pedidos para liberar.\n </p>\n ) : (\n <div className=\"grid max-h-64 grid-cols-3 gap-2 overflow-y-auto sm:grid-cols-4\">\n {free.map((t) => {\n const selected = t.id === tableId\n const small = t.seats < guests\n return (\n <button\n key={t.id}\n type=\"button\"\n onClick={() => setTableId(t.id)}\n className={`flex flex-col items-center rounded-lg border-2 p-2 transition-colors ${\n selected ? 'border-primary bg-primary/10' : 'border-border hover:bg-muted/50'\n }`}\n >\n <span className=\"text-lg font-bold\">{t.number}</span>\n <span className={`flex items-center gap-0.5 text-[11px] ${small ? 'text-accent' : 'text-muted-foreground'}`}>\n <Users className=\"h-3 w-3\" />{t.seats}\n </span>\n </button>\n )\n })}\n </div>\n )}\n </div>\n\n {/* A warning, not a block: pulling a chair over is normal, and the\n system has no business refusing a party that is standing there. */}\n {tooSmall && (\n <p className=\"rounded-lg bg-accent/10 px-3 py-2 text-xs text-accent\">\n A mesa {chosen!.number} tem {chosen!.seats} lugares para {guests} pessoas.\n </p>\n )}\n </div>\n </ModalBody>\n\n <ModalFooter>\n <div className=\"flex w-full items-center justify-between gap-3\">\n <p className=\"min-w-0 text-xs text-muted-foreground\">\n {tableId ? 'Abre a comanda desta mesa.' : 'Escolha a mesa para abrir a comanda.'}\n </p>\n <div className=\"flex shrink-0 gap-2\">\n <Button variant=\"outline\" onClick={onClose}>Cancelar</Button>\n <Button onClick={confirm} disabled={!tableId || saving}>\n {saving ? 'Abrindo…' : 'Acomodar e abrir comanda'}\n </Button>\n </div>\n </div>\n </ModalFooter>\n </ModalContent>\n </Modal>\n )\n}\n","import React, { useEffect, useMemo, useState } from 'react'\nimport { Plus, Check, X, Armchair, Phone, Users, Pencil } from 'lucide-react'\nimport {\n Button, DotBadge, MiniCalendar, Skeleton, StatTiles, Tooltip, TooltipTrigger,\n TooltipContent, TooltipProvider, PageHeaderActions, toLocalISODate, formatPhone,\n FilterCheckList,\n} from '@fayz-ai/ui'\nimport { PermissionGate } from '@fayz-ai/admin'\nimport { useReservationsConfig, useReservationsStore } from '../context'\nimport { CapacityStrip } from '../components/CapacityStrip'\nimport { ReservationModal } from '../components/ReservationModal'\nimport { SeatDialog } from '../components/SeatDialog'\nimport type { DaySlot, Reservation, ReservationStatus } from '../types'\n\n/**\n * The service screen: the night, one day at a time.\n *\n * Two columns, filters parked on the left — the shape the SDK's own UX ruler\n * asks for: a bar over the list pushes the rows down on every touch and the\n * person loses the line they were reading. Reception works this screen standing\n * up with a phone in one hand.\n *\n * What is deliberately NOT here: a column per professional. That is the agenda,\n * and it is what `/agenda` labelled \"Reservas\" was drawing — nine staff columns\n * over a screen about how full the room is.\n */\nexport function ServiceDayView() {\n const config = useReservationsConfig()\n\n const selectedDate = useReservationsStore((s) => s.selectedDate)\n const setSelectedDate = useReservationsStore((s) => s.setSelectedDate)\n const slots = useReservationsStore((s) => s.slots)\n const slotsLoading = useReservationsStore((s) => s.slotsLoading)\n const slotsError = useReservationsStore((s) => s.slotsError)\n const dayReservations = useReservationsStore((s) => s.dayReservations)\n const dayLoading = useReservationsStore((s) => s.dayLoading)\n const summary = useReservationsStore((s) => s.summary)\n const monthRows = useReservationsStore((s) => s.reservations)\n const fetchDay = useReservationsStore((s) => s.fetchDay)\n const fetchRange = useReservationsStore((s) => s.fetchRange)\n const fetchSalao = useReservationsStore((s) => s.fetchSalao)\n const setStatus = useReservationsStore((s) => s.setStatus)\n\n const [statusFilter, setStatusFilter] = useState<ReservationStatus[]>([])\n const [editing, setEditing] = useState<Reservation | null>(null)\n const [creating, setCreating] = useState(false)\n const [slotSeed, setSlotSeed] = useState<DaySlot | null>(null)\n const [seating, setSeating] = useState<Reservation | null>(null)\n\n useEffect(() => {\n void fetchDay()\n void fetchSalao()\n }, [fetchDay, fetchSalao])\n\n // The month around the selected day, for the calendar dots.\n useEffect(() => {\n const [y, m] = selectedDate.split('-').map(Number)\n const from = `${y}-${String(m).padStart(2, '0')}-01`\n const last = new Date(y, m, 0).getDate()\n void fetchRange(from, `${y}-${String(m).padStart(2, '0')}-${last}`)\n }, [selectedDate, fetchRange])\n\n const colorOf = useMemo(() => {\n const map = new Map(config.statuses.map((s) => [s.value, s]))\n return (status: ReservationStatus) => map.get(status) ?? { label: status, color: '#6b7280' }\n }, [config.statuses])\n\n /** One dot per state that day, so the month says where the night is busy\n * before anyone clicks into it. */\n const markers = useMemo(() => {\n const out: Record<string, Array<{ color: string; label: string }>> = {}\n for (const r of monthRows) {\n if (r.status === 'cancelled') continue\n const s = colorOf(r.status)\n const day = (out[r.reservedOn] ??= [])\n if (!day.some((d) => d.color === s.color)) day.push({ color: s.color, label: s.label })\n }\n return out\n }, [monthRows, colorOf])\n\n const rows = statusFilter.length\n ? dayReservations.filter((r) => statusFilter.includes(r.status))\n : dayReservations\n\n const dateObj = useMemo(() => {\n const [y, m, d] = selectedDate.split('-').map(Number)\n return new Date(y, m - 1, d)\n }, [selectedDate])\n\n return (\n <TooltipProvider delayDuration={300}>\n <PageHeaderActions>\n <PermissionGate feature=\"reservations\" action=\"create\">\n <Button onClick={() => { setSlotSeed(null); setCreating(true) }}>\n <Plus className=\"h-4 w-4\" />\n <span className=\"hidden sm:inline\">{config.labels.newReservation}</span>\n </Button>\n </PermissionGate>\n </PageHeaderActions>\n\n <div className=\"flex flex-col gap-4 lg:flex-row\">\n {/* --- Filters, parked ------------------------------------------- */}\n <aside className=\"w-full shrink-0 space-y-5 lg:w-60\">\n <MiniCalendar\n selectedDate={dateObj}\n markers={markers}\n onDateSelect={(d) => setSelectedDate(toLocalISODate(d))}\n />\n\n {/* A MESMA coluna da agenda, o mesmo componente: caixa pintada na cor\n do estado e nada marcado querendo dizer TUDO. A tira de pills que\n estava aqui dizia o contrário com o mesmo dado — sem nada aceso\n parecia que nada estava ligado —, e a caixa colorida é o que faz o\n filtro ensinar a legenda que as linhas usam. */}\n <div className=\"space-y-2\">\n <FilterCheckList\n label=\"Estado\"\n options={config.statuses.map((s) => ({\n value: s.value,\n label: s.label,\n color: s.color,\n count: dayReservations.filter((r) => r.status === s.value).length,\n }))}\n selected={statusFilter}\n onChange={setStatusFilter}\n />\n {statusFilter.length > 0 && (\n <button onClick={() => setStatusFilter([])} className=\"px-1 text-xs text-primary hover:underline\">\n Limpar filtro\n </button>\n )}\n </div>\n </aside>\n\n {/* --- The day ---------------------------------------------------- */}\n <div className=\"min-w-0 flex-1 space-y-5\">\n <StatTiles\n tiles={[\n { id: 'total', label: 'Reservas', value: summary ? String(summary.total) : '—' },\n // Pessoas, não linhas: é o número contra o qual a cozinha se\n // planeja, e cancelada/não-compareceu não comem.\n { id: 'guests', label: 'Pessoas esperadas', value: summary ? String(summary.expectedGuests) : '—' },\n { id: 'pending', label: 'A confirmar', value: summary ? String(summary.pending) : '—' },\n { id: 'seated', label: 'Já sentaram', value: summary ? String(summary.seated) : '—' },\n ]}\n />\n\n <section className=\"space-y-2\">\n <h3 className=\"text-sm font-medium\">Capacidade do dia</h3>\n <CapacityStrip\n slots={slots}\n loading={slotsLoading}\n error={slotsError}\n onPickSlot={(slot) => { setSlotSeed(slot); setCreating(true) }}\n />\n </section>\n\n <section className=\"space-y-2\">\n <h3 className=\"text-sm font-medium\">\n Reservas do dia {rows.length ? <span className=\"text-muted-foreground\">({rows.length})</span> : null}\n </h3>\n\n {dayLoading ? (\n // The SHAPE of the row, never \"Carregando…\".\n <div className=\"space-y-2\">\n {[0, 1, 2].map((i) => <Skeleton key={i} className=\"h-16 w-full rounded-lg\" />)}\n </div>\n ) : rows.length === 0 ? (\n <p className=\"rounded-lg border border-dashed p-6 text-center text-sm text-muted-foreground\">\n {dayReservations.length\n ? 'Nenhuma reserva com esse estado neste dia.'\n : 'Nenhuma reserva para este dia.'}\n </p>\n ) : (\n <ul className=\"space-y-2\">\n {rows.map((r) => (\n <ReservationRow\n key={r.id}\n reservation={r}\n badge={colorOf(r.status)}\n onEdit={() => setEditing(r)}\n onSeat={() => setSeating(r)}\n onStatus={(s) => setStatus(r.id, s)}\n />\n ))}\n </ul>\n )}\n </section>\n </div>\n </div>\n\n <ReservationModal\n open={creating || !!editing}\n onClose={() => { setCreating(false); setEditing(null); setSlotSeed(null) }}\n date={selectedDate}\n reservation={editing}\n defaultSlot={slotSeed}\n />\n <SeatDialog reservation={seating} onClose={() => setSeating(null)} />\n </TooltipProvider>\n )\n}\n\nfunction ReservationRow({ reservation: r, badge, onEdit, onSeat, onStatus }: {\n reservation: Reservation\n badge: { label: string; color: string }\n onEdit: () => void\n onSeat: () => void\n onStatus: (status: ReservationStatus) => void\n}) {\n const done = r.status === 'seated' || r.status === 'cancelled' || r.status === 'no_show'\n\n return (\n <li className=\"flex items-center gap-3 rounded-lg border bg-card p-3\">\n <span className=\"w-12 shrink-0 text-sm font-semibold tabular-nums\">{r.startTime}</span>\n\n <div className=\"min-w-0 flex-1\">\n <div className=\"flex items-center gap-2\">\n <span className=\"truncate font-medium\">{r.guestName}</span>\n <DotBadge label={badge.label} color={badge.color} />\n </div>\n <div className=\"mt-0.5 flex flex-wrap items-center gap-x-3 gap-y-0.5 text-xs text-muted-foreground\">\n <span className=\"flex items-center gap-1\"><Users className=\"h-3 w-3\" />{r.partySize}</span>\n {r.zoneName && <span>{r.zoneName}</span>}\n {r.tableNumber != null && <span>Mesa {r.tableNumber}</span>}\n {r.phone && <span className=\"flex items-center gap-1\"><Phone className=\"h-3 w-3\" />{formatPhone(r.phone)}</span>}\n {/* Naming the comanda is the point of seating here: reception has to\n be able to tell the waiter which one opened. */}\n {r.orderReference && <span className=\"font-medium text-foreground\">{r.orderReference}</span>}\n {r.notes && <span className=\"truncate italic\">{r.notes}</span>}\n </div>\n </div>\n\n <div className=\"flex shrink-0 items-center gap-1\">\n {/* Every icon button says what it does through the design system's\n Tooltip — the browser `title` takes a second, ignores the theme and\n vanishes on the smallest movement. `aria-label` stays: a screen\n reader does not read tooltips. */}\n {r.status === 'pending' && (\n <IconAction label=\"Confirmar\" onClick={() => onStatus('confirmed')}><Check className=\"h-4 w-4\" /></IconAction>\n )}\n {!done && (\n <IconAction label=\"Acomodar — abre a comanda\" onClick={onSeat} primary><Armchair className=\"h-4 w-4\" /></IconAction>\n )}\n {!done && (\n <IconAction label=\"Não compareceu\" onClick={() => onStatus('no_show')}><X className=\"h-4 w-4\" /></IconAction>\n )}\n <IconAction label=\"Editar\" onClick={onEdit}><Pencil className=\"h-4 w-4\" /></IconAction>\n </div>\n </li>\n )\n}\n\nfunction IconAction({ label, onClick, primary, children }: {\n label: string\n onClick: () => void\n primary?: boolean\n children: React.ReactNode\n}) {\n return (\n <Tooltip>\n <TooltipTrigger asChild>\n <button\n onClick={onClick}\n aria-label={label}\n className={`flex h-8 w-8 items-center justify-center rounded-button border transition-colors ${\n primary\n ? 'border-primary bg-primary text-primary-foreground hover:bg-primary/90'\n : 'border-border bg-card text-muted-foreground hover:bg-muted hover:text-foreground'\n }`}\n >\n {children}\n </button>\n </TooltipTrigger>\n <TooltipContent>{label}</TooltipContent>\n </Tooltip>\n )\n}\n","import React, { useCallback, useEffect, useMemo, useState } from 'react'\nimport { Plus } from 'lucide-react'\nimport {\n Button, DotBadge, FilterCheckList, Input, PageHeaderActions, SearchField, Skeleton,\n} from '@fayz-ai/ui'\nimport { PermissionGate } from '@fayz-ai/admin'\nimport { useReservationsConfig, useReservationsStore } from '../context'\nimport { ReservationModal } from '../components/ReservationModal'\nimport type { Reservation, ReservationStatus } from '../types'\n\n/** The book: a range of days, searchable by name or phone. The V1's \"Lista de\n * reservas\", with its three filters. */\nexport function ReservationsListView() {\n const config = useReservationsConfig()\n const rows = useReservationsStore((s) => s.reservations)\n const loading = useReservationsStore((s) => s.listLoading)\n const fetchRange = useReservationsStore((s) => s.fetchRange)\n const selectedDate = useReservationsStore((s) => s.selectedDate)\n\n const [from, setFrom] = useState(selectedDate)\n const [to, setTo] = useState(() => {\n const [y, m, d] = selectedDate.split('-').map(Number)\n const end = new Date(y, m - 1, d + 30)\n return `${end.getFullYear()}-${String(end.getMonth() + 1).padStart(2, '0')}-${String(end.getDate()).padStart(2, '0')}`\n })\n const [statusFilter, setStatusFilter] = useState<ReservationStatus[]>([])\n const [search, setSearch] = useState('')\n const [editing, setEditing] = useState<Reservation | null>(null)\n const [creating, setCreating] = useState(false)\n\n // The array is rebuilt on every render, so the effect keys off its content.\n const statusKey = statusFilter.join(',')\n const load = useCallback(() => {\n void fetchRange(from, to, {\n status: statusKey ? (statusKey.split(',') as ReservationStatus[]) : undefined,\n search: search || undefined,\n })\n }, [from, to, statusKey, search, fetchRange])\n\n useEffect(() => { load() }, [load])\n\n const colorOf = useMemo(() => {\n const map = new Map(config.statuses.map((s) => [s.value, s]))\n return (s: ReservationStatus) => map.get(s) ?? { label: s, color: '#6b7280' }\n }, [config.statuses])\n\n return (\n <>\n {/* O botão é da TELA, não da aba: quem está no livro de reservas anota a\n que acabou de chegar por telefone sem voltar para \"Serviço\". */}\n <PageHeaderActions>\n <PermissionGate feature=\"reservations\" action=\"create\">\n <Button onClick={() => setCreating(true)}>\n <Plus className=\"h-4 w-4\" />\n <span className=\"hidden sm:inline\">{config.labels.newReservation}</span>\n </Button>\n </PermissionGate>\n </PageHeaderActions>\n\n <div className=\"flex flex-col gap-4 lg:flex-row\">\n <aside className=\"w-full shrink-0 space-y-4 lg:w-60\">\n {/* The search lives INSIDE the filters, not in a bar over the list:\n every touch of a bar pushes the rows and loses the reader's place. */}\n <SearchField value={search} onChange={setSearch} placeholder=\"Nome ou telefone…\" />\n\n <label className=\"block space-y-1.5\">\n <span className=\"text-xs font-medium text-muted-foreground\">De</span>\n <Input type=\"date\" value={from} onChange={(e) => setFrom(e.target.value)} />\n </label>\n <label className=\"block space-y-1.5\">\n <span className=\"text-xs font-medium text-muted-foreground\">Até</span>\n <Input type=\"date\" value={to} onChange={(e) => setTo(e.target.value)} />\n </label>\n\n {/* A MESMA coluna de estado da aba Serviço e da agenda. A tira de\n pills que estava aqui era single-select com um \"Todos\" à frente:\n duas gramáticas para o mesmo filtro em duas abas vizinhas, e ver\n pendentes E confirmadas juntas era impossível. */}\n <FilterCheckList\n label=\"Estado\"\n options={config.statuses.map((s) => ({ value: s.value, label: s.label, color: s.color }))}\n selected={statusFilter}\n onChange={setStatusFilter}\n />\n </aside>\n\n <div className=\"min-w-0 flex-1\">\n {loading ? (\n <div className=\"space-y-2\">{[0, 1, 2, 3].map((i) => <Skeleton key={i} className=\"h-12 w-full rounded-lg\" />)}</div>\n ) : rows.length === 0 ? (\n <p className=\"rounded-lg border border-dashed p-6 text-center text-sm text-muted-foreground\">\n Nenhuma reserva encontrada neste período.\n </p>\n ) : (\n <div className=\"overflow-x-auto rounded-lg border\">\n <table className=\"w-full text-sm\">\n <thead className=\"bg-muted/50 text-xs text-muted-foreground\">\n <tr>\n <Th>Data</Th><Th>Hora</Th><Th>Cliente</Th><Th>Pessoas</Th>\n <Th>Praça</Th><Th>Mesa</Th><Th>Estado</Th><Th>Comanda</Th>\n </tr>\n </thead>\n <tbody>\n {rows.map((r) => {\n const badge = colorOf(r.status)\n return (\n <tr\n key={r.id}\n onClick={() => setEditing(r)}\n className=\"cursor-pointer border-t hover:bg-muted/40\"\n >\n <Td className=\"tabular-nums\">{r.reservedOn.split('-').reverse().join('/')}</Td>\n <Td className=\"tabular-nums\">{r.startTime}</Td>\n <Td className=\"font-medium\">{r.guestName}</Td>\n <Td className=\"tabular-nums\">{r.partySize}</Td>\n <Td>{r.zoneName ?? '—'}</Td>\n <Td>{r.tableNumber ?? '—'}</Td>\n <Td><DotBadge label={badge.label} color={badge.color} /></Td>\n <Td>{r.orderReference ?? '—'}</Td>\n </tr>\n )\n })}\n </tbody>\n </table>\n </div>\n )}\n </div>\n </div>\n\n {/* `create` só recarrega o DIA; aqui a lista é um período, então ela se\n recarrega sozinha ao fechar. */}\n <ReservationModal\n open={creating || !!editing}\n onClose={() => { setCreating(false); setEditing(null); load() }}\n date={editing?.reservedOn ?? from}\n reservation={editing}\n />\n </>\n )\n}\n\nconst Th = ({ children }: { children: React.ReactNode }) => (\n <th className=\"px-3 py-2 text-left font-medium\">{children}</th>\n)\nconst Td = ({ children, className }: { children: React.ReactNode; className?: string }) => (\n <td className={`px-3 py-2 ${className ?? ''}`}>{children}</td>\n)\n","import React, { useEffect, useState } from 'react'\nimport { Plus, Trash2, CalendarOff } from 'lucide-react'\nimport {\n Button, Input, Switch, TimePicker, Skeleton,\n Select, SelectTrigger, SelectValue, SelectContent, SelectItem,\n} from '@fayz-ai/ui'\nimport { useReservationsStore } from '../context'\nimport type { CapacityMode, CapacityRule, CapacityException, ReservationSettings } from '../types'\nimport { DEFAULT_SETTINGS } from '../data/core-supabase'\n\n/**\n * The policy, the weekly grid and the exceptions.\n *\n * It lives in Configurações rather than as a tab of the service screen: the rail\n * is what a restaurant opens with the salão full, and nothing on this page is\n * touched during a shift. The V1 puts it behind a fourth tab of Reservas, which\n * is why its own document says \"é aqui que mora o produto\" about a screen most\n * people never open twice.\n */\n\nconst WEEKDAYS = ['Dom', 'Seg', 'Ter', 'Qua', 'Qui', 'Sex', 'Sáb']\n\nconst MODES: Array<{ value: CapacityMode; label: string; hint: string }> = [\n {\n value: 'no_duration',\n label: 'Sem duração — só limite por faixa',\n // The V1's own legend, verbatim. It is the clearest statement of the model\n // and it explains the arithmetic everywhere else on the screen.\n hint: 'A capacidade é o teto de pessoas que pode iniciar dentro da faixa, sem rolagem entre faixas.',\n },\n {\n value: 'fixed_duration',\n label: 'Duração fixa global',\n hint: 'Toda reserva ocupa a mesa pela duração padrão abaixo.',\n },\n {\n value: 'per_slot_duration',\n label: 'Duração por faixa de horário',\n hint: 'Cada faixa da grade define quanto tempo a mesa fica ocupada.',\n },\n]\n\nexport function CapacitySettingsView() {\n const settings = useReservationsStore((s) => s.settings)\n const rules = useReservationsStore((s) => s.rules)\n const exceptions = useReservationsStore((s) => s.exceptions)\n const zones = useReservationsStore((s) => s.zones)\n const loading = useReservationsStore((s) => s.configLoading)\n const fetchConfig = useReservationsStore((s) => s.fetchConfig)\n const fetchSalao = useReservationsStore((s) => s.fetchSalao)\n const saveSettings = useReservationsStore((s) => s.saveSettings)\n\n useEffect(() => {\n void fetchConfig()\n void fetchSalao()\n }, [fetchConfig, fetchSalao])\n\n const [draft, setDraft] = useState<ReservationSettings>(DEFAULT_SETTINGS)\n const [dirty, setDirty] = useState(false)\n\n useEffect(() => { if (settings) setDraft(settings) }, [settings])\n\n function edit(patch: Partial<ReservationSettings>) {\n setDraft((d) => ({ ...d, ...patch }))\n setDirty(true)\n }\n\n if (loading && !settings) {\n return <div className=\"space-y-3\">{[0, 1, 2].map((i) => <Skeleton key={i} className=\"h-24 w-full rounded-lg\" />)}</div>\n }\n\n const mode = MODES.find((m) => m.value === draft.capacityMode)!\n\n return (\n <div className=\"fz-container space-y-8\">\n {/* --- Policy ------------------------------------------------------- */}\n <section className=\"space-y-4\">\n <header>\n <h3 className=\"text-sm font-medium\">Política de reservas</h3>\n <p className=\"text-xs text-muted-foreground\">Como a casa aceita e conta reserva.</p>\n </header>\n\n <label className=\"block space-y-1.5\">\n <span className=\"text-xs font-medium text-muted-foreground\">Modo de capacidade</span>\n <Select value={draft.capacityMode} onValueChange={(v: string) => edit({ capacityMode: v as CapacityMode })}>\n <SelectTrigger><SelectValue /></SelectTrigger>\n <SelectContent>\n {MODES.map((m) => <SelectItem key={m.value} value={m.value}>{m.label}</SelectItem>)}\n </SelectContent>\n </Select>\n <span className=\"block text-xs text-muted-foreground\">{mode.hint}</span>\n </label>\n\n <div className=\"fz-fields fz-fields-2\">\n <label className=\"block space-y-1.5\">\n <span className=\"text-xs font-medium text-muted-foreground\">Duração padrão (minutos)</span>\n <Input type=\"number\" min={15} value={draft.defaultDurationMinutes}\n onChange={(e) => edit({ defaultDurationMinutes: Number(e.target.value) })} />\n </label>\n <label className=\"block space-y-1.5\">\n <span className=\"text-xs font-medium text-muted-foreground\">Antecedência mínima (horas)</span>\n <Input type=\"number\" min={0} value={draft.minAdvanceHours}\n onChange={(e) => edit({ minAdvanceHours: Number(e.target.value) })} />\n {/* The V1 asks for this in MINUTES and the next one in DAYS, in the\n same pair of fields — 1440 minutes is a day, and nothing says so. */}\n <span className=\"block text-xs text-muted-foreground\">\n {draft.minAdvanceHours >= 24\n ? `${(draft.minAdvanceHours / 24).toFixed(draft.minAdvanceHours % 24 ? 1 : 0)} dia(s) antes`\n : 'No mesmo dia'}\n </span>\n </label>\n </div>\n\n <label className=\"block space-y-1.5\">\n <span className=\"text-xs font-medium text-muted-foreground\">Antecedência máxima (dias)</span>\n <Input type=\"number\" min={1} value={draft.maxAdvanceDays}\n onChange={(e) => edit({ maxAdvanceDays: Number(e.target.value) })} />\n </label>\n\n <div className=\"space-y-2\">\n <ToggleRow label=\"Confirmar automaticamente\"\n hint=\"A reserva já nasce Confirmada, sem alguém retornar a ligação.\"\n checked={draft.autoConfirm} onChange={(v) => edit({ autoConfirm: v })} />\n <ToggleRow label=\"Exigir telefone\"\n hint=\"Sem telefone não há como avisar de atraso ou de cancelamento.\"\n checked={draft.requirePhone} onChange={(v) => edit({ requirePhone: v })} />\n <ToggleRow label=\"Exigir e-mail\"\n checked={draft.requireEmail} onChange={(v) => edit({ requireEmail: v })} />\n </div>\n\n <Button\n onClick={async () => { await saveSettings(draft); setDirty(false) }}\n disabled={!dirty}\n >\n Salvar política\n </Button>\n </section>\n\n <RulesSection rules={rules} zones={zones} />\n <ExceptionsSection exceptions={exceptions} zones={zones} />\n </div>\n )\n}\n\nfunction ToggleRow({ label, hint, checked, onChange }: {\n label: string; hint?: string; checked: boolean; onChange: (v: boolean) => void\n}) {\n return (\n <div className=\"flex items-start justify-between gap-4 rounded-lg border p-3\">\n <div className=\"min-w-0\">\n <p className=\"text-sm font-medium\">{label}</p>\n {hint && <p className=\"mt-0.5 text-xs text-muted-foreground\">{hint}</p>}\n </div>\n <Switch checked={checked} onCheckedChange={onChange} aria-label={label} />\n </div>\n )\n}\n\n// ---------------------------------------------------------------------------\n// The weekly grid\n// ---------------------------------------------------------------------------\n\nconst BLANK_RULE = { zoneId: undefined as string | undefined, capacity: 50, startTime: '12:00', endTime: '15:00', weekdays: [1, 2, 3, 4, 5] }\n\nfunction RulesSection({ rules, zones }: { rules: CapacityRule[]; zones: Array<{ id: string; name: string }> }) {\n const saveRule = useReservationsStore((s) => s.saveRule)\n const deleteRule = useReservationsStore((s) => s.deleteRule)\n const [draft, setDraft] = useState<typeof BLANK_RULE | null>(null)\n\n return (\n <section className=\"space-y-3\">\n <header className=\"flex items-center justify-between gap-3\">\n <div>\n <h3 className=\"text-sm font-medium\">Grade semanal de capacidade</h3>\n <p className=\"text-xs text-muted-foreground\">\n Uma regra por praça e faixa. Almoço e jantar são duas; o fim de semana costuma ser uma terceira.\n </p>\n </div>\n <Button variant=\"outline\" size=\"sm\" onClick={() => setDraft({ ...BLANK_RULE })}>\n <Plus className=\"h-4 w-4\" />Nova regra\n </Button>\n </header>\n\n {rules.length === 0 && !draft && (\n <p className=\"rounded-lg border border-dashed p-4 text-sm text-muted-foreground\">\n Sem grade, a tela do dia não tem faixa nenhuma para desenhar e nada limita a lotação.\n </p>\n )}\n\n <ul className=\"space-y-2\">\n {rules.map((r) => (\n <li key={r.id} className=\"flex items-center justify-between gap-3 rounded-lg border bg-card p-3\">\n {/* The V1 writes each rule as one sentence and that reads better\n than a table of five columns — kept. */}\n <p className=\"min-w-0 text-sm\">\n <span className=\"font-medium\">{r.zoneName ?? 'Restaurante todo'}</span>\n <span className=\"text-muted-foreground\">\n {' · '}{r.weekdays.map((d) => WEEKDAYS[d]).join(', ')}\n {' • '}{r.startTime} – {r.endTime}\n {' • '}{r.capacity} pessoas\n </span>\n </p>\n <button\n onClick={() => deleteRule(r.id)}\n aria-label={`Excluir regra de ${r.zoneName ?? 'restaurante todo'}`}\n className=\"flex h-8 w-8 shrink-0 items-center justify-center rounded-button border text-muted-foreground hover:bg-destructive/10 hover:text-destructive\"\n >\n <Trash2 className=\"h-4 w-4\" />\n </button>\n </li>\n ))}\n </ul>\n\n {draft && (\n <div className=\"space-y-3 rounded-lg border bg-muted/30 p-3\">\n <div className=\"fz-fields fz-fields-2\">\n <label className=\"block space-y-1.5\">\n <span className=\"text-xs font-medium text-muted-foreground\">Praça</span>\n <Select value={draft.zoneId ?? '__all'} onValueChange={(v: string) => setDraft({ ...draft, zoneId: v === '__all' ? undefined : v })}>\n <SelectTrigger><SelectValue /></SelectTrigger>\n <SelectContent>\n <SelectItem value=\"__all\">Restaurante todo</SelectItem>\n {zones.map((z) => <SelectItem key={z.id} value={z.id}>{z.name}</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\">Capacidade (pessoas)</span>\n <Input type=\"number\" min={1} value={draft.capacity}\n onChange={(e) => setDraft({ ...draft, capacity: Number(e.target.value) })} />\n </label>\n </div>\n\n <div className=\"fz-fields fz-fields-2\">\n <label className=\"block space-y-1.5\">\n <span className=\"text-xs font-medium text-muted-foreground\">Início</span>\n <TimePicker value={draft.startTime} onChange={(v: string) => setDraft({ ...draft, startTime: v })} />\n </label>\n <label className=\"block space-y-1.5\">\n <span className=\"text-xs font-medium text-muted-foreground\">Fim</span>\n <TimePicker value={draft.endTime} onChange={(v: string) => setDraft({ ...draft, endTime: v })} />\n </label>\n </div>\n\n <div className=\"space-y-1.5\">\n <span className=\"text-xs font-medium text-muted-foreground\">Dias da semana</span>\n <div className=\"flex flex-wrap gap-1.5\">\n {WEEKDAYS.map((label, i) => {\n const on = draft.weekdays.includes(i)\n return (\n <button key={i} type=\"button\"\n onClick={() => setDraft({\n ...draft,\n weekdays: on ? draft.weekdays.filter((d) => d !== i) : [...draft.weekdays, i].sort(),\n })}\n className={`rounded-button border px-2.5 py-1 text-xs transition-colors ${\n on ? 'border-primary bg-primary text-primary-foreground' : 'border-border hover:bg-muted'\n }`}\n >{label}</button>\n )\n })}\n </div>\n </div>\n\n <div className=\"flex items-center justify-between gap-3\">\n <p className=\"text-xs text-muted-foreground\">\n {draft.weekdays.length === 0 ? 'Escolha pelo menos um dia da semana.' : ''}\n </p>\n <div className=\"flex gap-2\">\n <Button variant=\"outline\" size=\"sm\" onClick={() => setDraft(null)}>Cancelar</Button>\n <Button size=\"sm\" disabled={!draft.weekdays.length || draft.endTime <= draft.startTime}\n onClick={async () => { await saveRule(draft); setDraft(null) }}>\n Salvar regra\n </Button>\n </div>\n </div>\n </div>\n )}\n </section>\n )\n}\n\n// ---------------------------------------------------------------------------\n// Exceptions\n// ---------------------------------------------------------------------------\n\nfunction todayISO(): string {\n const d = new Date()\n return `${d.getFullYear()}-${String(d.getMonth() + 1).padStart(2, '0')}-${String(d.getDate()).padStart(2, '0')}`\n}\n\nfunction ExceptionsSection({ exceptions, zones }: {\n exceptions: CapacityException[]\n zones: Array<{ id: string; name: string }>\n}) {\n const saveException = useReservationsStore((s) => s.saveException)\n const deleteException = useReservationsStore((s) => s.deleteException)\n const [draft, setDraft] = useState<Partial<CapacityException> | null>(null)\n\n return (\n <section className=\"space-y-3\">\n <header className=\"flex items-center justify-between gap-3\">\n <div>\n <h3 className=\"text-sm font-medium\">Exceções de capacidade</h3>\n {/* The V1's sentence, verbatim — it is the rule, and it is the one\n thing about exceptions people get wrong. */}\n <p className=\"text-xs text-muted-foreground\">\n Exceções <strong>sobrepõem</strong> a grade semanal para os dias cobertos na mesma praça.\n Capacidade 0 fecha a praça sem apagar a grade.\n </p>\n </div>\n <Button variant=\"outline\" size=\"sm\"\n onClick={() => setDraft({ startsOn: todayISO(), endsOn: todayISO(), capacity: 0 })}>\n <Plus className=\"h-4 w-4\" />Nova exceção\n </Button>\n </header>\n\n <ul className=\"space-y-2\">\n {exceptions.map((e) => (\n <li key={e.id} className=\"flex items-center justify-between gap-3 rounded-lg border bg-card p-3\">\n <p className=\"min-w-0 text-sm\">\n <span className=\"font-medium\">{e.zoneName ?? 'Restaurante todo'}</span>\n <span className=\"text-muted-foreground\">\n {' · '}{e.startsOn}{e.endsOn !== e.startsOn ? ` a ${e.endsOn}` : ''}\n {' • '}{e.capacity === 0 ? 'fechado' : `${e.capacity} pessoas`}\n {e.reason ? ` • ${e.reason}` : ''}\n </span>\n </p>\n <button onClick={() => deleteException(e.id)} aria-label=\"Excluir exceção\"\n className=\"flex h-8 w-8 shrink-0 items-center justify-center rounded-button border text-muted-foreground hover:bg-destructive/10 hover:text-destructive\">\n <Trash2 className=\"h-4 w-4\" />\n </button>\n </li>\n ))}\n </ul>\n\n {exceptions.length === 0 && !draft && (\n <p className=\"flex items-center gap-2 rounded-lg border border-dashed p-4 text-sm text-muted-foreground\">\n <CalendarOff className=\"h-4 w-4 shrink-0\" />\n Nenhuma exceção. Feriado, evento fechado e reforma entram aqui.\n </p>\n )}\n\n {draft && (\n <div className=\"space-y-3 rounded-lg border bg-muted/30 p-3\">\n <div className=\"fz-fields fz-fields-2\">\n <label className=\"block space-y-1.5\">\n <span className=\"text-xs font-medium text-muted-foreground\">Praça</span>\n <Select value={draft.zoneId ?? '__all'} onValueChange={(v: string) => setDraft({ ...draft, zoneId: v === '__all' ? undefined : v })}>\n <SelectTrigger><SelectValue /></SelectTrigger>\n <SelectContent>\n <SelectItem value=\"__all\">Restaurante todo</SelectItem>\n {zones.map((z) => <SelectItem key={z.id} value={z.id}>{z.name}</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\">Capacidade (0 = fechado)</span>\n <Input type=\"number\" min={0} value={draft.capacity ?? 0}\n onChange={(e) => setDraft({ ...draft, capacity: Number(e.target.value) })} />\n </label>\n </div>\n <div className=\"fz-fields fz-fields-2\">\n <label className=\"block space-y-1.5\">\n <span className=\"text-xs font-medium text-muted-foreground\">De</span>\n <Input type=\"date\" value={draft.startsOn ?? ''} onChange={(e) => setDraft({ ...draft, startsOn: e.target.value })} />\n </label>\n <label className=\"block space-y-1.5\">\n <span className=\"text-xs font-medium text-muted-foreground\">Até</span>\n <Input type=\"date\" value={draft.endsOn ?? ''} onChange={(e) => setDraft({ ...draft, endsOn: e.target.value })} />\n </label>\n </div>\n <label className=\"block space-y-1.5\">\n <span className=\"text-xs font-medium text-muted-foreground\">Motivo</span>\n <Input value={draft.reason ?? ''} onChange={(e) => setDraft({ ...draft, reason: e.target.value })}\n placeholder=\"Feriado, evento fechado, reforma…\" />\n </label>\n <div className=\"flex justify-end gap-2\">\n <Button variant=\"outline\" size=\"sm\" onClick={() => setDraft(null)}>Cancelar</Button>\n <Button size=\"sm\" disabled={!draft.startsOn}\n onClick={async () => { await saveException(draft); setDraft(null) }}>\n Salvar exceção\n </Button>\n </div>\n </div>\n )}\n </section>\n )\n}\n","import React, { useState } from 'react'\nimport type { StoreApi } from 'zustand/vanilla'\nimport { CalendarClock, List } from 'lucide-react'\nimport { PageTabs } from '@fayz-ai/ui'\nimport { ReservationsContextProvider, type ResolvedReservationsConfig } from '../context'\nimport { ServiceDayView } from './ServiceDayView'\nimport { ReservationsListView } from './ReservationsListView'\nimport { CapacitySettingsView } from './CapacitySettingsView'\nimport type { ReservationsDataProvider } from '../data/types'\nimport type { ReservationsUIState } from '../store'\n\ntype Tab = 'day' | 'list'\n\n/**\n * Two tabs, not the V1's four.\n *\n * The V1 has Calendário · Capacidade do dia · Lista de reservas · Configurações.\n * The first two answer the same question at two zooms and are merged here — the\n * month is the picker beside the day, so choosing a date does not cost a tab\n * switch. Configurações moved out of the screen entirely: it is settings, and\n * the rail is what a restaurant opens with the salão full.\n */\nexport function ReservationsPage({ config, provider, store }: {\n config: ResolvedReservationsConfig\n provider: ReservationsDataProvider\n store: StoreApi<ReservationsUIState>\n}) {\n const [tab, setTab] = useState<Tab>('day')\n\n return (\n <ReservationsContextProvider config={config} provider={provider} store={store}>\n <div>\n {/* PageTabs, não HeaderTabs solto: a faixa fechada pelo filete que\n atravessa a página é o ÚNICO lugar onde uma tela do produto troca o\n que está mostrando. Ver o cabeçalho de header-tabs.tsx. */}\n <PageTabs<Tab>\n aria-label=\"Reservas\"\n value={tab}\n onChange={setTab}\n tabs={[\n { value: 'day', label: 'Serviço', icon: CalendarClock },\n { value: 'list', label: 'Lista', icon: List },\n ]}\n />\n {tab === 'day' ? <ServiceDayView /> : <ReservationsListView />}\n </div>\n </ReservationsContextProvider>\n )\n}\n\n/** The settings tab. Same context, so it reads the same store the screen does\n * — saving a rule there refreshes the day here. */\nexport function ReservationsSettingsPage({ config, provider, store }: {\n config: ResolvedReservationsConfig\n provider: ReservationsDataProvider\n store: StoreApi<ReservationsUIState>\n}) {\n return (\n <ReservationsContextProvider config={config} provider={provider} store={store}>\n <CapacitySettingsView />\n </ReservationsContextProvider>\n )\n}\n"]}
|