@fayz-ai/plugin-orders 0.14.3 → 0.15.0

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/README.md +1 -0
  2. package/dist/{OrderDetailRoute-LTPDQXQU.js → OrderDetailRoute-QGZIMEQ3.js} +9 -7
  3. package/dist/OrderDetailRoute-QGZIMEQ3.js.map +1 -0
  4. package/dist/{OrdersPage-5326V62H.js → OrdersPage-3KNCFC7K.js} +3 -3
  5. package/dist/OrdersPage-3KNCFC7K.js.map +1 -0
  6. package/dist/context.d.ts +9 -6
  7. package/dist/context.d.ts.map +1 -1
  8. package/dist/index.d.ts +20 -45
  9. package/dist/index.d.ts.map +1 -1
  10. package/dist/index.js +61 -1425
  11. package/dist/index.js.map +1 -1
  12. package/dist/lib/list-query.d.ts +1 -1
  13. package/dist/lib/list-query.d.ts.map +1 -1
  14. package/dist/settings/DeliverySettings.d.ts.map +1 -1
  15. package/dist/settings/v1-settings.d.ts +2 -0
  16. package/dist/settings/v1-settings.d.ts.map +1 -0
  17. package/dist/views/OrderReceivableActions.d.ts.map +1 -1
  18. package/dist/views/OrdersPage.d.ts +2 -2
  19. package/dist/views/OrdersPage.d.ts.map +1 -1
  20. package/package.json +8 -9
  21. package/dist/OrderDetailRoute-LTPDQXQU.js.map +0 -1
  22. package/dist/OrdersPage-5326V62H.js.map +0 -1
  23. package/dist/data/core-supabase.d.ts +0 -26
  24. package/dist/data/core-supabase.d.ts.map +0 -1
  25. package/dist/data/mock.d.ts +0 -3
  26. package/dist/data/mock.d.ts.map +0 -1
  27. package/dist/data/platform.d.ts +0 -19
  28. package/dist/data/platform.d.ts.map +0 -1
  29. package/dist/data/types.d.ts +0 -17
  30. package/dist/data/types.d.ts.map +0 -1
  31. package/dist/integrations/index.d.ts +0 -8
  32. package/dist/integrations/index.d.ts.map +0 -1
  33. package/dist/store.d.ts +0 -33
  34. package/dist/store.d.ts.map +0 -1
  35. package/dist/types.d.ts +0 -145
  36. package/dist/types.d.ts.map +0 -1
@@ -1,4 +1,4 @@
1
- import type { OrderQuery } from '../types';
1
+ import type { OrderQuery } from '@fayz-ai/orders/domain/order';
2
2
  export interface OrdersListFilters {
3
3
  /** One of PERIOD_PRESETS, `custom` (uses from/to) or `all`. */
4
4
  preset: string;
@@ -1 +1 @@
1
- {"version":3,"file":"list-query.d.ts","sourceRoot":"","sources":["../../src/lib/list-query.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAA;AAE1C,MAAM,WAAW,iBAAiB;IAChC,+DAA+D;IAC/D,MAAM,EAAE,MAAM,CAAA;IACd,IAAI,EAAE,MAAM,CAAA;IACZ,EAAE,EAAE,MAAM,CAAA;IACV,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,WAAW,CAAC,EAAE,MAAM,CAAA;CACrB;AAED,eAAO,MAAM,cAAc;;;GAK1B,CAAA;AAOD,wFAAwF;AACxF,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,OAAa,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAYjG;AAED,wBAAgB,YAAY,CAC1B,OAAO,EAAE,iBAAiB,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,OAAa,GAC3F,UAAU,CAmBZ"}
1
+ {"version":3,"file":"list-query.d.ts","sourceRoot":"","sources":["../../src/lib/list-query.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAA;AAE9D,MAAM,WAAW,iBAAiB;IAChC,+DAA+D;IAC/D,MAAM,EAAE,MAAM,CAAA;IACd,IAAI,EAAE,MAAM,CAAA;IACZ,EAAE,EAAE,MAAM,CAAA;IACV,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,WAAW,CAAC,EAAE,MAAM,CAAA;CACrB;AAED,eAAO,MAAM,cAAc;;;GAK1B,CAAA;AAOD,wFAAwF;AACxF,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,OAAa,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAYjG;AAED,wBAAgB,YAAY,CAC1B,OAAO,EAAE,iBAAiB,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,OAAa,GAC3F,UAAU,CAmBZ"}
@@ -1 +1 @@
1
- {"version":3,"file":"DeliverySettings.d.ts","sourceRoot":"","sources":["../../src/settings/DeliverySettings.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AA8EzB,wBAAgB,gBAAgB,sBA4K/B"}
1
+ {"version":3,"file":"DeliverySettings.d.ts","sourceRoot":"","sources":["../../src/settings/DeliverySettings.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAkFzB,wBAAgB,gBAAgB,sBAkL/B"}
@@ -0,0 +1,2 @@
1
+ export declare const ordersV1SettingsTabs: import("@fayz-ai/core").PluginSettingsTab[];
2
+ //# sourceMappingURL=v1-settings.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"v1-settings.d.ts","sourceRoot":"","sources":["../../src/settings/v1-settings.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,oBAAoB,6CAwBhC,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"OrderReceivableActions.d.ts","sourceRoot":"","sources":["../../src/views/OrderReceivableActions.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAC9B,OAAO,EAA0C,KAAK,eAAe,EAAE,MAAM,gBAAgB,CAAA;AAmD7F,MAAM,WAAW,2BAA2B;IAC1C,OAAO,EAAE,MAAM,CAAA;IACf,+EAA+E;IAC/E,UAAU,EAAE,MAAM,CAAA;IAClB,UAAU,EAAE,eAAe,GAAG,IAAI,CAAA;IAClC,4EAA4E;IAC5E,MAAM,EAAE,CAAC,KAAK,CAAC,EAAE,OAAO,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;CAC3C;AAED,wBAAgB,sBAAsB,CAAC,EAAE,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,EAAE,EAAE,2BAA2B,qBAiH9G"}
1
+ {"version":3,"file":"OrderReceivableActions.d.ts","sourceRoot":"","sources":["../../src/views/OrderReceivableActions.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAC9B,OAAO,EAAsD,KAAK,eAAe,EAAE,MAAM,gBAAgB,CAAA;AAmDzG,MAAM,WAAW,2BAA2B;IAC1C,OAAO,EAAE,MAAM,CAAA;IACf,+EAA+E;IAC/E,UAAU,EAAE,MAAM,CAAA;IAClB,UAAU,EAAE,eAAe,GAAG,IAAI,CAAA;IAClC,4EAA4E;IAC5E,MAAM,EAAE,CAAC,KAAK,CAAC,EAAE,OAAO,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;CAC3C;AAED,wBAAgB,sBAAsB,CAAC,EAAE,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,EAAE,EAAE,2BAA2B,qBAiH9G"}
@@ -1,8 +1,8 @@
1
1
  import React from 'react';
2
2
  import type { StoreApi } from 'zustand/vanilla';
3
3
  import { type ResolvedOrdersConfig } from '../context';
4
- import type { OrdersDataProvider } from '../data/types';
5
- import type { OrdersUIState } from '../store';
4
+ import type { OrdersDataProvider } from '@fayz-ai/orders/data/provider';
5
+ import type { OrdersUIState } from '@fayz-ai/orders/store';
6
6
  import type { PluginRegistryDef } from '@fayz-ai/core';
7
7
  export declare function OrdersPage({ config, provider, store }: {
8
8
  config: ResolvedOrdersConfig;
@@ -1 +1 @@
1
- {"version":3,"file":"OrdersPage.d.ts","sourceRoot":"","sources":["../../src/views/OrdersPage.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAA;AAC/C,OAAO,EAAyB,KAAK,oBAAoB,EAAE,MAAM,YAAY,CAAA;AAE7E,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAA;AACvD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AAC7C,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAA;AAEtD,wBAAgB,UAAU,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE;IACtD,MAAM,EAAE,oBAAoB,CAAA;IAC5B,QAAQ,EAAE,kBAAkB,CAAA;IAC5B,KAAK,EAAE,QAAQ,CAAC,aAAa,CAAC,CAAA;IAC9B,UAAU,CAAC,EAAE,iBAAiB,EAAE,CAAA;CACjC,qBAMA"}
1
+ {"version":3,"file":"OrdersPage.d.ts","sourceRoot":"","sources":["../../src/views/OrdersPage.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAA;AAC/C,OAAO,EAAyB,KAAK,oBAAoB,EAAE,MAAM,YAAY,CAAA;AAE7E,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAA;AACvE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAA;AAC1D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAA;AAEtD,wBAAgB,UAAU,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE;IACtD,MAAM,EAAE,oBAAoB,CAAA;IAC5B,QAAQ,EAAE,kBAAkB,CAAA;IAC5B,KAAK,EAAE,QAAQ,CAAC,aAAa,CAAC,CAAA;IAC9B,UAAU,CAAC,EAAE,iBAAiB,EAAE,CAAA;CACjC,qBAMA"}
package/package.json CHANGED
@@ -4,7 +4,7 @@
4
4
  "status": "beta",
5
5
  "dependencies": []
6
6
  },
7
- "version": "0.14.3",
7
+ "version": "0.15.0",
8
8
  "description": "Fayz SDK — plugin-orders plugin",
9
9
  "type": "module",
10
10
  "sideEffects": false,
@@ -28,22 +28,21 @@
28
28
  "react": "^18.0.0 || ^19.0.0",
29
29
  "react-dom": "^18.0.0 || ^19.0.0",
30
30
  "zustand": "^4.5.0 || ^5.0.0",
31
- "lucide-react": ">=0.400.0 <1.0.0",
32
- "sonner": "^2.0.7"
31
+ "lucide-react": ">=0.400.0 <1.0.0"
33
32
  },
34
33
  "dependencies": {
35
- "@fayz-ai/admin": "^0.46.0",
34
+ "@fayz-ai/admin": "^0.48.0",
36
35
  "@fayz-ai/contracts": "^0.1.0",
37
- "@fayz-ai/core": "^0.44.0",
38
- "@fayz-ai/plugin-financial": "^0.23.2",
39
- "@fayz-ai/sdk": "^0.43.2",
40
- "@fayz-ai/ui": "^0.46.0"
36
+ "@fayz-ai/core": "^0.48.0",
37
+ "@fayz-ai/financial": "^0.1.0",
38
+ "@fayz-ai/orders": "^0.1.0",
39
+ "@fayz-ai/sdk": "^0.48.0",
40
+ "@fayz-ai/ui": "^0.48.0"
41
41
  },
42
42
  "devDependencies": {
43
43
  "@types/react": "^18.3.0",
44
44
  "lucide-react": "^0.400.0",
45
45
  "react": "^18.3.0",
46
- "sonner": "^2.0.7",
47
46
  "tsup": "^8.2.0",
48
47
  "typescript": "^5.5.0",
49
48
  "vitest": "^4.1.5",
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/views/OrderReceivableActions.tsx","../src/views/OrderDetailRoute.tsx"],"names":["React","getSupabaseClientOptional","adminNavigateTo","jsxs","Fragment","jsx"],"mappings":"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","file":"OrderDetailRoute-LTPDQXQU.js","sourcesContent":["import * as React from 'react'\nimport { adminNavigateTo, usePermissionOptional, type OrderReceivable } from '@fayz-ai/admin'\nimport { getSupabaseClientOptional, usePluginRuntimeOptional, describeError } from '@fayz-ai/core'\nimport { ReceivePaymentModal } from '@fayz-ai/plugin-financial'\nimport { Button, toast } from '@fayz-ai/ui'\n\n// ---------------------------------------------------------------------------\n// \"Registrar recebimento\" na tela de um pedido.\n//\n// POR QUE ISTO EXISTE. O bloco \"Contas a receber\" ja era compartilhado e ja era\n// lido em todo produto que tem pedidos — mas ninguem preenchia o seam\n// `receivableActions`. Na pratica: a tela sabia dizer que o pedido nao tinha\n// conta a receber, e nao oferecia nenhuma forma de receber por ele.\n//\n// UM VERBO, NAO DOIS. A loja (plugin-shop) tem so \"Registrar recebimento\"\n// porque la o recebivel nasce no CHECKOUT. Aqui o pedido pode nunca ter sido\n// faturado — e a resposta NAO e um segundo botao \"Faturar\" com toast proprio.\n// Faturar e o primeiro passo do MESMO ato, e quem pergunta metodo, conta e data\n// e o modal do Financeiro, que ja existe e ja sabe fazer isso.\n//\n// Entao o clique e sempre o mesmo: se falta a fatura, levanta-se a fatura em\n// silencio e abre-se o modal na parcela que ela criou. O operador ve uma tela\n// so — a do Financeiro —, e nao um fluxo paralelo inventado aqui.\n//\n// A ESCRITA E A MESMA DOS OUTROS CAMINHOS. `fn_invoice_from_order` e a ponte que\n// o checkout da loja usa, alinhada com a da comanda na migration 004: o pedido\n// conserva o proprio `reference_number`, a parcela nasce com `unit_id`, e\n// `p_status` so e aplicado quando a especie o declara. O recebimento e\n// `financial_receive_payment`, dentro do modal. Nada aqui inventa uma segunda\n// forma de faturar nem uma segunda forma de receber.\n// ---------------------------------------------------------------------------\n\n/** A parcela como `ReceivePaymentModal` a quer — `v_financial_bills` expoe `installment_id AS id`. */\nfunction toModalInstallment(bill: Record<string, unknown>) {\n return {\n id: bill.id,\n amount: Number(bill.amount ?? 0),\n paidAmount: Number(bill.paid_amount ?? 0),\n installmentNumber: bill.installment_number ?? 1,\n direction: bill.direction ?? 'credit',\n dueDate: bill.due_date,\n invoiceId: bill.financial_invoice_id ?? bill.invoice_id,\n } as never\n}\n\n/** A primeira parcela que ainda tem saldo. */\nfunction firstOpenBill(receivable: OrderReceivable | null) {\n return receivable?.bills.find(\n (b) => Number((b as { paid_amount?: number }).paid_amount ?? 0) < Number(b.amount),\n )\n}\n\nexport interface OrderReceivableActionsProps {\n orderId: string\n /** O total do pedido — nao ha o que receber de um pedido que nao vale nada. */\n orderTotal: number\n receivable: OrderReceivable | null\n /** `force` porque faturar e receber precisam enxergar a propria escrita. */\n reload: (force?: boolean) => Promise<void>\n}\n\nexport function OrderReceivableActions({ orderId, orderTotal, receivable, reload }: OrderReceivableActionsProps) {\n const [busy, setBusy] = React.useState(false)\n const [paying, setPaying] = React.useState<unknown>(null)\n const can = usePermissionOptional()\n\n // \"Abrir no Financeiro\" precisa de uma ROTA existir, nao do id do plugin: um\n // app pode montar so as CONFIGURACOES do financeiro (createFinancialSettings-\n // Plugin declara o mesmo id e nao tem `/financial`), e o link levaria a uma\n // porta pintada na parede. Mesma checagem que a loja faz.\n const runtime = usePluginRuntimeOptional()\n const hasFinancialRoute = (runtime?.activePlugins ?? []).some(\n (p) => (p as { routes?: { path?: string }[] }).routes?.some((r) => r.path === '/financial'),\n )\n\n // O wrapper publico `fn_invoice_from_order` exige `financial.create` de QUEM\n // CHAMA — quem dispensa e o `_internal`, e ele nao e chamavel do navegador.\n // Sem este gate o botao existiria para um garcom e devolveria 42501 no clique.\n const canInvoice = can('financial', 'create')\n\n const balance = receivable ? Number(receivable.balance.balance ?? 0) : 0\n const cancelled = receivable?.balance.status === 'cancelled'\n const openBill = firstOpenBill(receivable)\n\n // Sem recebivel, o botao vale se a pessoa pode faturar E se ha o que faturar;\n // com recebivel, vale enquanto sobrar saldo.\n //\n // O guarda do total nao e teorico: um pedido novo, sem item, aceitou ser\n // faturado por R$ 0,00 e devolveu uma parcela que ja nascia quitada — fatura\n // de zero real no livro, e um erro para o operador logo depois. Faturar exige\n // ter valor, e essa e a checagem mais barata que existe.\n const canReceive = receivable\n ? balance > 0 && !cancelled && Boolean(openBill)\n : canInvoice && Number(orderTotal) > 0\n\n /**\n * Um clique, um modal. A fatura, quando falta, e levantada aqui e o modal\n * abre na parcela dela — o operador nao ve dois passos porque nao sao dois\n * atos.\n */\n async function registrarRecebimento() {\n if (receivable) {\n const bill = firstOpenBill(receivable)\n if (bill) setPaying(toModalInstallment(bill as unknown as Record<string, unknown>))\n return\n }\n\n const db = getSupabaseClientOptional() as unknown as {\n rpc: (fn: string, args: Record<string, unknown>) => Promise<{ error?: { message?: string } | null }>\n from: (t: string) => any\n } | null\n if (!db) return\n\n setBusy(true)\n try {\n const { error } = await db.rpc('fn_invoice_from_order', { p_order_id: orderId })\n if (error) throw new Error(error.message ?? 'Falha ao faturar o pedido')\n\n // A parcela recem-criada vem da MESMA view que o bloco le, e nao do\n // retorno da RPC: o modal precisa de `installment_id`, que e o que\n // `v_financial_bills` expoe, e ler daqui mantem os dois lados na mesma\n // fonte. `reload(true)` sozinho nao serve — ele atualiza o bloco depois,\n // e o modal precisa da parcela agora.\n const { data } = await db\n .from('v_financial_bills')\n .select('*')\n .eq('invoice_id', orderId)\n .order('installment_number', { ascending: true })\n const bill = (data ?? []).find(\n (b: { paid_amount?: number; amount?: number }) => Number(b.paid_amount ?? 0) < Number(b.amount ?? 0),\n )\n await reload(true)\n if (bill) setPaying(toModalInstallment(bill))\n else toast.error('Pedido faturado, mas nenhuma parcela em aberto foi encontrada')\n } catch (err: unknown) {\n toast.error(describeError(err, 'Falha ao faturar o pedido'))\n } finally {\n setBusy(false)\n }\n }\n\n return (\n <>\n {canReceive && (\n <Button onClick={() => void registrarRecebimento()} disabled={busy} data-testid=\"order-register-receipt\">\n {busy ? 'Abrindo…' : 'Registrar recebimento'}\n </Button>\n )}\n\n {hasFinancialRoute && (\n <button\n type=\"button\"\n onClick={() => adminNavigateTo('/financial')}\n className=\"rounded-md border px-3 py-1.5 text-sm font-medium transition hover:bg-muted\"\n >\n Abrir no Financeiro\n </button>\n )}\n\n {/* SEM gate de rota, e a distincao importa: o modal traz o proprio provider\n e store, entao o que ele precisa sao as TABELAS do financeiro, nao o\n plugin montado. Gatear aqui transformaria o botao num clique morto. */}\n {paying != null && (\n <ReceivePaymentModal\n installment={paying as never}\n onClose={() => setPaying(null)}\n onPaid={() => {\n setPaying(null)\n void reload(true)\n }}\n />\n )}\n </>\n )\n}\n","import React from 'react'\nimport { Ban, Check, Pencil } from 'lucide-react'\nimport {\n OrderDetailPage, PageActions, adminNavigateTo, orderIsEditable, useOrderKindTransitions,\n type OrderDetailRailOrder, type OrderReceivable,\n} from '@fayz-ai/admin'\nimport { ConfirmDialog } from '@fayz-ai/ui'\nimport { getActiveTenantId, getComponent, getSupabaseClientOptional } from '@fayz-ai/core'\nimport { setStatus } from '@fayz-ai/core/orders'\nimport { OrderReceivableActions } from './OrderReceivableActions'\nimport { ORDER_DETAIL_COMPONENT_ID, type OrderDetailSlotProps } from '../lib/detail-slot'\n\nexport interface OrderDetailRouteOptions {\n editRoute?: (orderId: string) => string\n canEditOrder?: (order: { status?: string }) => boolean\n}\n\nconst VERB: Record<string, string> = {\n confirmed: 'Confirmar',\n completed: 'Concluir',\n cancelled: 'Cancelar pedido',\n}\n\nfunction StatusActions({ order, reload, options }: {\n order: OrderDetailRailOrder\n reload: () => void\n options: OrderDetailRouteOptions\n}) {\n // The cluster's own machine: a hop it would refuse is never offered.\n const next = useOrderKindTransitions(order.kind, order.status)\n const [confirming, setConfirming] = React.useState(false)\n const [busy, setBusy] = React.useState(false)\n const [error, setError] = React.useState<string | null>(null)\n\n const move = async (status: string) => {\n const db = getSupabaseClientOptional()\n if (!db) return\n setBusy(true)\n setError(null)\n try {\n await setStatus({ db: db as never, tenantId: getActiveTenantId() ?? '', source: 'orders:detail' }, order.id, status)\n reload()\n } catch (err) {\n setError(err instanceof Error ? err.message : String(err))\n } finally {\n setBusy(false)\n setConfirming(false)\n }\n }\n\n const edit = options.editRoute\n const editable = edit && (options.canEditOrder ?? orderIsEditable)(order)\n\n const actions = [\n ...next.filter((s) => s !== 'cancelled' && VERB[s]).map((status, index) => ({\n id: `status-${status}`,\n testId: `order-status-${status}`,\n label: VERB[status]!,\n icon: Check,\n intent: index === 0 ? 'primary' as const : 'secondary' as const,\n disabled: busy,\n onSelect: () => { void move(status) },\n })),\n ...(editable ? [{\n id: 'edit',\n testId: 'order-edit',\n label: 'Editar pedido',\n icon: Pencil,\n intent: 'secondary' as const,\n onSelect: () => adminNavigateTo(edit(order.id)),\n }] : []),\n ...(next.includes('cancelled') ? [{\n id: 'cancel',\n testId: 'order-cancel',\n label: VERB.cancelled!,\n icon: Ban,\n intent: 'danger' as const,\n disabled: busy,\n onSelect: () => setConfirming(true),\n }] : []),\n ]\n\n return (\n <>\n {error && <span role=\"alert\" className=\"text-xs text-destructive\">{error}</span>}\n {actions.length > 0 && <PageActions actions={actions} />}\n <ConfirmDialog\n open={confirming}\n title={`Cancelar o pedido ${order.referenceNumber}?`}\n description=\"O pedido sai da operação e não volta a ficar aberto.\"\n confirmLabel=\"Cancelar pedido\"\n cancelLabel=\"Voltar\"\n variant=\"destructive\"\n loading={busy}\n onConfirm={() => { void move('cancelled') }}\n onCancel={() => setConfirming(false)}\n />\n </>\n )\n}\n\nexport function OrderDetailRoute({ id, options }: { id?: string; options: OrderDetailRouteOptions }) {\n if (!id) return null\n\n const generic = (\n <OrderDetailPage\n orderId={id}\n backTo=\"/orders\"\n actions={(order, { reload }) => <StatusActions order={order} reload={reload} options={options} />}\n receivableActions={(\n order: { id: string; total?: number },\n ctx: { receivable: OrderReceivable | null; reload: (force?: boolean) => Promise<void> },\n ) => (\n <OrderReceivableActions\n orderId={order.id}\n orderTotal={order.total ?? 0}\n receivable={ctx.receivable}\n reload={ctx.reload}\n />\n )}\n />\n )\n\n const Owned = getComponent(ORDER_DETAIL_COMPONENT_ID) as React.ComponentType<OrderDetailSlotProps> | undefined\n return Owned\n ? <Owned orderId={id} onBack={() => adminNavigateTo('/orders')} fallback={generic} />\n : generic\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/context.tsx","../src/lib/list-query.ts","../src/views/OrdersScreen.tsx","../src/views/OrdersPage.tsx"],"names":["jsx"],"mappings":"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","file":"OrdersPage-5326V62H.js","sourcesContent":["import { createPluginContext, formatCurrency, type CurrencyConfig, type EntityLookup } from '@fayz-ai/admin'\nimport type { OrdersDataProvider } from './data/types'\nimport type { OrdersUIState } from './store'\nimport type { RestaurantOrder } from './types'\n\n// ---------------------------------------------------------------------------\n// Resolved config — fully merged, no optionals\n// ---------------------------------------------------------------------------\n\nexport interface OrdersModules {\n delivery: boolean\n takeout: boolean\n}\n\nexport type OrdersCurrency = CurrencyConfig\n\nexport interface OrderSourceOption {\n value: string\n label: string\n icon?: string\n}\n\nexport interface OrdersPluginLabels {\n pageTitle: string\n pageSubtitle: string\n orderSingular: string\n orderPlural: string\n}\n\nexport interface ResolvedOrdersConfig {\n modules: OrdersModules\n labels: OrdersPluginLabels\n currency: OrdersCurrency\n orderSources: OrderSourceOption[]\n menuItemLookup?: EntityLookup\n staffLookup?: EntityLookup\n onOrderCompleted?: (order: RestaurantOrder) => Promise<void>\n onOrderCancelled?: (order: RestaurantOrder) => Promise<void>\n /** Route the list's create action opens. Unset = the list offers none. */\n createRoute?: string\n orderRoute?: (orderId: string) => string\n editRoute?: (orderId: string) => string\n /** Whether this order still takes changes. Unset = it always does. */\n canEditOrder?: (order: { status?: string }) => boolean\n}\n\nconst ctx = createPluginContext<ResolvedOrdersConfig, OrdersDataProvider, OrdersUIState>('OrdersPage')\n\nexport const OrdersContextProvider = ctx.ContextProvider\nexport const useOrdersConfig = ctx.useConfig\nexport const useOrdersProvider = ctx.useProvider\nexport const useOrdersStore = ctx.useStore\n\nexport { formatCurrency }\n","import type { OrderQuery } from '../types'\n\nexport interface OrdersListFilters {\n /** One of PERIOD_PRESETS, `custom` (uses from/to) or `all`. */\n preset: string\n from: string\n to: string\n status?: string\n channel?: string\n fulfillment?: string\n}\n\nexport const PERIOD_PRESETS = [\n { value: 'today', label: 'Hoje' },\n { value: '7d', label: 'Últimos 7 dias' },\n { value: '30d', label: 'Últimos 30 dias' },\n { value: 'month', label: 'Este mês' },\n]\n\nfunction ymd(date: Date): string {\n const pad = (n: number) => String(n).padStart(2, '0')\n return `${date.getFullYear()}-${pad(date.getMonth() + 1)}-${pad(date.getDate())}`\n}\n\n/** A preset as local calendar days. `null` for `all`, `custom` and anything unknown. */\nexport function periodRange(preset: string, now = new Date()): { from: string; to: string } | null {\n const to = ymd(now)\n const back = (days: number) => {\n const d = new Date(now)\n d.setDate(d.getDate() - days)\n return ymd(d)\n }\n if (preset === 'today') return { from: to, to }\n if (preset === '7d') return { from: back(6), to }\n if (preset === '30d') return { from: back(29), to }\n if (preset === 'month') return { from: ymd(new Date(now.getFullYear(), now.getMonth(), 1)), to }\n return null\n}\n\nexport function toOrderQuery(\n filters: OrdersListFilters, search: string, page: number, pageSize: number, now = new Date(),\n): OrderQuery {\n const range = filters.preset === 'custom'\n ? { from: filters.from, to: filters.to }\n : periodRange(filters.preset, now)\n // Local day bounds: `created_at <= 2026-10-13` would drop that whole day.\n const from = range?.from ? new Date(`${range.from}T00:00:00`).toISOString() : undefined\n const to = range?.to ? new Date(`${range.to}T23:59:59.999`).toISOString() : undefined\n return {\n ...(from || to ? { dateRange: { from: from ?? '1970-01-01T00:00:00.000Z', to: to ?? '9999-12-31T23:59:59.999Z' } } : {}),\n ...(filters.status ? { status: filters.status } : {}),\n ...(filters.channel ? { channel: filters.channel } : {}),\n ...(filters.fulfillment ? { fulfillmentStatus: filters.fulfillment } : {}),\n ...(search.trim() ? { search: search.trim() } : {}),\n // `orders` also holds what the account BUYS; this screen is what it sells.\n excludeKinds: ['purchase'],\n withItems: false,\n page,\n pageSize,\n }\n}\n","import React from 'react'\nimport { Plus } from 'lucide-react'\nimport {\n OrderListView, PageActions, PaymentStatusBadge, adminNavigateTo, usePersistedState,\n orderChannelColumn, orderStage,\n ORDER_CHANNEL_LABELS, ORDER_STAGES, ORDER_STAGE_COLORS, ORDER_STAGE_LABELS, ORDER_STATUS_LABELS,\n type OrderListColumn, type OrderStage,\n} from '@fayz-ai/admin'\nimport { DateRangeChip, ListFilterBar, type ListFilterDef } from '@fayz-ai/ui'\nimport { useTranslation } from '@fayz-ai/core'\nimport { useOrdersConfig, useOrdersProvider, formatCurrency } from '../context'\nimport { periodRange, PERIOD_PRESETS, toOrderQuery, type OrdersListFilters } from '../lib/list-query'\nimport type { RestaurantOrder } from '../types'\n\nconst PAGE_SIZE = 50\n\nconst DEFAULT_FILTERS: OrdersListFilters = { preset: '30d', from: '', to: '' }\n\ntype PaymentState = 'none' | 'pending' | 'partial' | 'paid' | 'overdue' | 'cancelled'\n\nfunction meta(order: RestaurantOrder): Record<string, unknown> {\n return (order.metadata ?? {}) as Record<string, unknown>\n}\n\nfunction stageOf(order: RestaurantOrder): OrderStage {\n const m = meta(order)\n return orderStage({\n status: order.status,\n channel: m.channel as string | null,\n paymentStatus: m.paymentStatus as string | null,\n fulfillmentStatus: m.fulfillmentStatus as string | null,\n shipmentStatuses: m.shipmentStatuses as string[] | undefined,\n })\n}\n\nfunction StageBadge({ stage }: { stage: OrderStage }) {\n return (\n <span className=\"inline-flex items-center gap-1.5 text-sm\">\n <span className={`h-2 w-2 rounded-full ${ORDER_STAGE_COLORS[stage]}`} />\n {ORDER_STAGE_LABELS[stage]}\n </span>\n )\n}\n\nconst options = (labels: Record<string, string>) =>\n Object.entries(labels).map(([value, label]) => ({ value, label }))\n\nexport function OrdersScreen() {\n const t = useTranslation()\n const config = useOrdersConfig()\n const provider = useOrdersProvider()\n\n const [filters, setFilters] = usePersistedState<OrdersListFilters>('orders.filters', DEFAULT_FILTERS)\n const [search, setSearch] = usePersistedState('orders.search', '')\n const [page, setPage] = usePersistedState('orders.page', 1)\n\n const [rows, setRows] = React.useState<RestaurantOrder[]>([])\n const [total, setTotal] = React.useState(0)\n const [loading, setLoading] = React.useState(true)\n const [error, setError] = React.useState<string | null>(null)\n\n // Typing must not fire a query per key.\n const [term, setTerm] = React.useState(search)\n React.useEffect(() => {\n const id = setTimeout(() => setTerm(search), 300)\n return () => clearTimeout(id)\n }, [search])\n\n const patch = React.useCallback((next: Partial<OrdersListFilters>) => {\n setFilters((current) => ({ ...current, ...next }))\n setPage(1)\n }, [setFilters, setPage])\n\n React.useEffect(() => {\n let cancelled = false\n setLoading(true)\n setError(null)\n provider.getOrders(toOrderQuery(filters, term, page, PAGE_SIZE))\n .then((result) => {\n if (cancelled) return\n setRows(result.data)\n setTotal(result.total)\n })\n .catch((err: unknown) => {\n if (cancelled) return\n setRows([])\n setTotal(0)\n setError(err instanceof Error ? err.message : String(err))\n })\n .finally(() => { if (!cancelled) setLoading(false) })\n return () => { cancelled = true }\n }, [provider, filters, term, page])\n\n const money = React.useCallback(\n // An order is printed in the currency it was sold in, not the app's.\n (value: number, code?: string) => formatCurrency(\n value,\n code && code !== config.currency.code ? { ...config.currency, code } : config.currency,\n ),\n [config.currency],\n )\n\n const open = React.useCallback((order: RestaurantOrder) => {\n adminNavigateTo(config.orderRoute?.(order.id) ?? `/orders/${order.id}`)\n }, [config])\n\n const columns: OrderListColumn<RestaurantOrder>[] = React.useMemo(() => [\n {\n key: 'reference',\n header: t('orders.list.column.order'),\n mobile: 'title',\n render: (o) => <span className=\"font-medium\">{o.referenceNumber}</span>,\n },\n {\n key: 'date',\n header: 'Data',\n render: (o) => new Date(o.createdAt).toLocaleDateString('pt-BR'),\n },\n {\n key: 'customer',\n header: t('orders.list.column.customer'),\n render: (o) => o.partyName ?? <span className=\"text-muted-foreground\">—</span>,\n },\n orderChannelColumn<RestaurantOrder>((o) => meta(o).channel as string | undefined),\n {\n key: 'payment',\n header: 'Recebimento',\n render: (o) => {\n const m = meta(o)\n const status = (m.paymentStatus as PaymentState | undefined) ?? 'none'\n if (status === 'none') return <span className=\"text-muted-foreground\">—</span>\n return (\n <PaymentStatusBadge\n status={status}\n totalAmount={Number(m.invoicedAmount) || 0}\n paidAmount={Number(m.paidAmount) || 0}\n formatCurrency={(v: number) => money(v, o.currency)}\n />\n )\n },\n },\n { key: 'total', header: t('orders.list.column.total'), align: 'right', render: (o) => money(o.total, o.currency) },\n {\n key: 'stage',\n header: 'Situação',\n mobile: 'badge',\n render: (o) => <StageBadge stage={stageOf(o)} />,\n },\n ], [t, money])\n\n const filterDefs: ListFilterDef[] = [\n {\n id: 'status',\n label: 'Estado',\n allLabel: 'Todos os estados',\n options: options(ORDER_STATUS_LABELS),\n value: filters.status,\n onChange: (status) => patch({ status }),\n },\n {\n id: 'channel',\n label: 'Canal',\n allLabel: 'Todos os canais',\n options: options(ORDER_CHANNEL_LABELS),\n value: filters.channel,\n onChange: (channel) => patch({ channel }),\n },\n {\n id: 'fulfillment',\n label: 'Entrega',\n allLabel: 'Qualquer entrega',\n options: [\n { value: 'unfulfilled', label: 'Não entregue' },\n { value: 'partially_fulfilled', label: 'Entrega parcial' },\n { value: 'fulfilled', label: 'Entregue' },\n ],\n value: filters.fulfillment,\n onChange: (fulfillment) => patch({ fulfillment }),\n },\n ]\n\n const filterBar = (\n <div className=\"flex min-w-0 items-center gap-1.5\">\n <DateRangeChip\n label=\"Período\"\n allLabel=\"Todo o período\"\n labels={{ from: 'De', to: 'Até', clear: 'Limpar' }}\n presets={PERIOD_PRESETS}\n preset={filters.preset}\n from={filters.preset === 'custom' ? filters.from : (periodRange(filters.preset)?.from ?? '')}\n to={filters.preset === 'custom' ? filters.to : (periodRange(filters.preset)?.to ?? '')}\n onPresetChange={(preset) => patch({ preset })}\n onChange={({ from, to }) => patch({ from, to })}\n />\n <ListFilterBar\n filters={filterDefs}\n onClear={() => patch({ status: undefined, channel: undefined, fulfillment: undefined })}\n />\n </div>\n )\n\n const createLabel = (() => {\n const translated = t('orders.kanban.newOrder')\n return !translated || translated === 'orders.kanban.newOrder' ? 'Criar pedido' : translated\n })()\n\n return (\n <OrderListView<RestaurantOrder>\n title={config.labels.pageTitle}\n viewKey=\"orders\"\n views={['list', 'board']}\n defaultView=\"list\"\n board={{\n columns: ORDER_STAGES.map((id) => ({ id, label: ORDER_STAGE_LABELS[id], color: ORDER_STAGE_COLORS[id] })),\n columnOf: stageOf,\n emptyColumn: 'Nada aqui',\n card: (o) => (\n <>\n <div className=\"mb-2 flex items-center justify-between gap-2\">\n <span className=\"text-sm font-bold\">{o.referenceNumber}</span>\n <span className=\"text-[10px] text-muted-foreground\">\n {new Date(o.createdAt).toLocaleDateString('pt-BR')}\n </span>\n </div>\n {o.partyName && <p className=\"truncate text-sm font-medium\">{o.partyName}</p>}\n <p className=\"truncate text-xs text-muted-foreground\">\n {ORDER_CHANNEL_LABELS[String(meta(o).channel ?? '')] ?? ''}\n </p>\n <div className=\"mt-3 border-t pt-2 text-sm font-bold\">{money(o.total, o.currency)}</div>\n </>\n ),\n }}\n columns={columns}\n rows={rows}\n loading={loading}\n empty={error ?? 'Nenhum pedido neste recorte.'}\n search={search}\n onSearchChange={(value) => { setSearch(value); setPage(1) }}\n searchPlaceholder=\"Buscar pedido…\"\n filters={filterBar}\n page={page}\n total={total}\n pageSize={PAGE_SIZE}\n onPageChange={setPage}\n mobileLayout=\"cards\"\n onRowClick={open}\n actions={config.createRoute ? (\n <PageActions\n actions={[{\n id: 'new-order',\n label: createLabel,\n icon: Plus,\n intent: 'primary' as const,\n creates: true,\n testId: 'orders-create',\n onSelect: () => adminNavigateTo(config.createRoute as string),\n }]}\n />\n ) : undefined}\n />\n )\n}\n","import React from 'react'\nimport type { StoreApi } from 'zustand/vanilla'\nimport { OrdersContextProvider, type ResolvedOrdersConfig } from '../context'\nimport { OrdersScreen } from './OrdersScreen'\nimport type { OrdersDataProvider } from '../data/types'\nimport type { OrdersUIState } from '../store'\nimport type { PluginRegistryDef } from '@fayz-ai/core'\n\nexport function OrdersPage({ config, provider, store }: {\n config: ResolvedOrdersConfig\n provider: OrdersDataProvider\n store: StoreApi<OrdersUIState>\n registries?: PluginRegistryDef[]\n}) {\n return (\n <OrdersContextProvider config={config} provider={provider} store={store}>\n <OrdersScreen />\n </OrdersContextProvider>\n )\n}\n"]}
@@ -1,26 +0,0 @@
1
- import type { OrdersDataProvider } from './types';
2
- export interface CoreOrdersWriteOptions {
3
- /**
4
- * The active org. RLS checks it again on the way in — this is so the row
5
- * starts correct rather than being corrected by a refusal.
6
- */
7
- tenantId: () => string | undefined | null;
8
- /** The active unit, for an app that scopes by one. */
9
- unitId?: () => string | undefined | null;
10
- /**
11
- * Which sales channel a kind arrives on. `public.orders.channel` accepts only
12
- * balcao · shop · dine_in · delivery, so `takeout` — a kind with no channel of
13
- * its own — has to say which one it counts as.
14
- */
15
- channelFor?: (kind: string) => string | undefined;
16
- }
17
- export interface CoreOrdersProviderOptions {
18
- /** Restrict the list to these species. Omitted means all four. */
19
- kinds?: string[];
20
- /** Restrict the list to one channel (balcao · shop · dine_in · delivery). */
21
- channel?: string;
22
- /** Present makes the provider writable. See CoreOrdersWriteOptions. */
23
- writes?: CoreOrdersWriteOptions;
24
- }
25
- export declare function createCoreOrdersProvider(options?: CoreOrdersProviderOptions): OrdersDataProvider;
26
- //# sourceMappingURL=core-supabase.d.ts.map
@@ -1 +0,0 @@
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;AA8BjD,MAAM,WAAW,sBAAsB;IACrC;;;OAGG;IACH,QAAQ,EAAE,MAAM,MAAM,GAAG,SAAS,GAAG,IAAI,CAAA;IACzC,sDAAsD;IACtD,MAAM,CAAC,EAAE,MAAM,MAAM,GAAG,SAAS,GAAG,IAAI,CAAA;IACxC;;;;OAIG;IACH,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,CAAA;CAClD;AAED,MAAM,WAAW,yBAAyB;IACxC,kEAAkE;IAClE,KAAK,CAAC,EAAE,MAAM,EAAE,CAAA;IAChB,6EAA6E;IAC7E,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,uEAAuE;IACvE,MAAM,CAAC,EAAE,sBAAsB,CAAA;CAChC;AAeD,wBAAgB,wBAAwB,CAAC,OAAO,CAAC,EAAE,yBAAyB,GAAG,kBAAkB,CA2YhG"}
@@ -1,3 +0,0 @@
1
- import type { OrdersDataProvider } from './types';
2
- export declare function createMockOrdersProvider(): OrdersDataProvider;
3
- //# sourceMappingURL=mock.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"mock.d.ts","sourceRoot":"","sources":["../../src/data/mock.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAA;AAgMjD,wBAAgB,wBAAwB,IAAI,kBAAkB,CA2T7D"}
@@ -1,19 +0,0 @@
1
- import { type FayzClientOptions } from '@fayz-ai/sdk';
2
- import type { OrdersDataProvider } from './types';
3
- export interface FayzOrdersProviderOptions extends FayzClientOptions {
4
- projectId?: string;
5
- schema?: string;
6
- runtime?: boolean;
7
- ordersTable?: string;
8
- orderItemsTable?: string;
9
- /**
10
- * Active tenant id (or a getter) used to scope reads and stamp writes on the
11
- * canonical orders and items tables. When omitted, scoping is left to
12
- * the runtime/RLS context.
13
- */
14
- tenantId?: string | (() => string | undefined | null);
15
- /** Active unit id stamped on new orders and their items when available. */
16
- unitId?: string | (() => string | undefined | null);
17
- }
18
- export declare function createFayzOrdersProvider(options?: FayzOrdersProviderOptions): OrdersDataProvider;
19
- //# sourceMappingURL=platform.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"platform.d.ts","sourceRoot":"","sources":["../../src/data/platform.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoB,KAAK,iBAAiB,EAAwB,MAAM,cAAc,CAAA;AAa7F,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAA;AAEjD,MAAM,WAAW,yBAA0B,SAAQ,iBAAiB;IAClE,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB;;;;OAIG;IACH,QAAQ,CAAC,EAAE,MAAM,GAAG,CAAC,MAAM,MAAM,GAAG,SAAS,GAAG,IAAI,CAAC,CAAA;IACrD,2EAA2E;IAC3E,MAAM,CAAC,EAAE,MAAM,GAAG,CAAC,MAAM,MAAM,GAAG,SAAS,GAAG,IAAI,CAAC,CAAA;CACpD;AAwVD,wBAAgB,wBAAwB,CAAC,OAAO,GAAE,yBAA8B,GAAG,kBAAkB,CAmMpG"}
@@ -1,17 +0,0 @@
1
- import type { RestaurantOrder, RestaurantOrderItem, CreateOrderInput, CreateOrderItemInput, UpdateOrderStatusInput, OrderQuery, PaginatedResult, OrdersSummary } from '../types';
2
- export interface OrdersDataProvider {
3
- getOrders(query: OrderQuery): Promise<PaginatedResult<RestaurantOrder>>;
4
- getOrderById(id: string): Promise<RestaurantOrder | null>;
5
- createOrder(input: CreateOrderInput): Promise<RestaurantOrder>;
6
- updateOrderStatus(input: UpdateOrderStatusInput): Promise<RestaurantOrder>;
7
- updateOrder(id: string, data: Partial<RestaurantOrder>): Promise<RestaurantOrder>;
8
- cancelOrder(id: string, reason?: string): Promise<void>;
9
- addOrderItem(orderId: string, item: CreateOrderItemInput): Promise<RestaurantOrderItem>;
10
- removeOrderItem(itemId: string): Promise<void>;
11
- updateOrderItem(itemId: string, data: Partial<RestaurantOrderItem>): Promise<RestaurantOrderItem>;
12
- getSummary(dateRange?: {
13
- from: string;
14
- to: string;
15
- }): Promise<OrdersSummary>;
16
- }
17
- //# sourceMappingURL=types.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/data/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,eAAe,EAAE,mBAAmB,EACpC,gBAAgB,EAAE,oBAAoB,EAAE,sBAAsB,EAC9D,UAAU,EAAE,eAAe,EAAE,aAAa,EAC3C,MAAM,UAAU,CAAA;AAEjB,MAAM,WAAW,kBAAkB;IAEjC,SAAS,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,eAAe,CAAC,eAAe,CAAC,CAAC,CAAA;IACvE,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,iBAAiB,CAAC,KAAK,EAAE,sBAAsB,GAAG,OAAO,CAAC,eAAe,CAAC,CAAA;IAC1E,WAAW,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,CAAC,eAAe,CAAC,GAAG,OAAO,CAAC,eAAe,CAAC,CAAA;IACjF,WAAW,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAGvD,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,oBAAoB,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAAA;IACvF,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAC9C,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,CAAC,mBAAmB,CAAC,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAAA;IAGjG,UAAU,CAAC,SAAS,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,aAAa,CAAC,CAAA;CAC7E"}
@@ -1,8 +0,0 @@
1
- export { ifoodConnectorDef, IFOOD_CONNECTOR_ID, IFOOD_SETTINGS } from './ifood/connectorDef';
2
- export { nineNineFoodConnectorDef, NINETY_NINE_FOOD_CONNECTOR_ID, NINETY_NINE_FOOD_SETTINGS, } from './99food/connectorDef';
3
- export { keetaConnectorDef, KEETA_CONNECTOR_ID, KEETA_SETTINGS } from './keeta/connectorDef';
4
- export { uberEatsConnectorDef, UBER_EATS_CONNECTOR_ID, UBER_EATS_SETTINGS } from './ubereats/connectorDef';
5
- export { rappiConnectorDef, RAPPI_CONNECTOR_ID, RAPPI_SETTINGS } from './rappi/connectorDef';
6
- export { aiqfomeConnectorDef, AIQFOME_CONNECTOR_ID, AIQFOME_SETTINGS } from './aiqfome/connectorDef';
7
- export { marketplacePermissions, AUTO_ACCEPT_SETTING, PREP_TIME_SETTING } from './shared';
8
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/integrations/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AAC5F,OAAO,EACL,wBAAwB,EACxB,6BAA6B,EAC7B,yBAAyB,GAC1B,MAAM,uBAAuB,CAAA;AAC9B,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AAC5F,OAAO,EAAE,oBAAoB,EAAE,sBAAsB,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAA;AAC1G,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AAC5F,OAAO,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAA;AACpG,OAAO,EAAE,sBAAsB,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAA"}
package/dist/store.d.ts DELETED
@@ -1,33 +0,0 @@
1
- import { type StoreApi } from 'zustand/vanilla';
2
- import type { OrdersDataProvider } from './data/types';
3
- import type { RestaurantOrder, OrdersSummary, OrderQuery, CreateOrderInput, CreateOrderItemInput, UpdateOrderStatusInput } from './types';
4
- export interface OrdersUIState {
5
- orders: RestaurantOrder[];
6
- ordersTotal: number;
7
- ordersLoading: boolean;
8
- orderQuery: OrderQuery;
9
- activeOrders: RestaurantOrder[];
10
- activeOrdersLoading: boolean;
11
- summary: OrdersSummary | null;
12
- summaryLoading: boolean;
13
- selectedOrderId: string | null;
14
- fetchOrders(query: OrderQuery): Promise<void>;
15
- fetchActiveOrders(): Promise<void>;
16
- fetchSummary(dateRange?: {
17
- from: string;
18
- to: string;
19
- }): Promise<void>;
20
- selectOrder(id: string | null): void;
21
- createOrder(input: CreateOrderInput): Promise<RestaurantOrder>;
22
- advanceOrderStatus(orderId: string): Promise<void>;
23
- updateOrderStatus(input: UpdateOrderStatusInput): Promise<void>;
24
- cancelOrder(id: string, reason?: string): Promise<void>;
25
- addOrderItem(orderId: string, item: CreateOrderItemInput): Promise<void>;
26
- removeOrderItem(itemId: string): Promise<void>;
27
- }
28
- export interface OrdersLifecycleHooks {
29
- onOrderCompleted?: (order: RestaurantOrder) => Promise<void>;
30
- onOrderCancelled?: (order: RestaurantOrder) => Promise<void>;
31
- }
32
- export declare function createOrdersStore(provider: OrdersDataProvider, hooks?: OrdersLifecycleHooks): StoreApi<OrdersUIState>;
33
- //# sourceMappingURL=store.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../src/store.ts"],"names":[],"mappings":"AACA,OAAO,EAAe,KAAK,QAAQ,EAAE,MAAM,iBAAiB,CAAA;AAI5D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAA;AACtD,OAAO,KAAK,EACV,eAAe,EAAE,aAAa,EAC9B,UAAU,EAAE,gBAAgB,EAAE,oBAAoB,EAClD,sBAAsB,EACvB,MAAM,SAAS,CAAA;AA0BhB,MAAM,WAAW,aAAa;IAE5B,MAAM,EAAE,eAAe,EAAE,CAAA;IACzB,WAAW,EAAE,MAAM,CAAA;IACnB,aAAa,EAAE,OAAO,CAAA;IACtB,UAAU,EAAE,UAAU,CAAA;IAEtB,YAAY,EAAE,eAAe,EAAE,CAAA;IAC/B,mBAAmB,EAAE,OAAO,CAAA;IAE5B,OAAO,EAAE,aAAa,GAAG,IAAI,CAAA;IAC7B,cAAc,EAAE,OAAO,CAAA;IAEvB,eAAe,EAAE,MAAM,GAAG,IAAI,CAAA;IAG9B,WAAW,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAC7C,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;IAClC,YAAY,CAAC,SAAS,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IACrE,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAAA;IACpC,WAAW,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,eAAe,CAAC,CAAA;IAC9D,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAClD,iBAAiB,CAAC,KAAK,EAAE,sBAAsB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAC/D,WAAW,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IACvD,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,oBAAoB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IACxE,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;CAC/C;AAED,MAAM,WAAW,oBAAoB;IACnC,gBAAgB,CAAC,EAAE,CAAC,KAAK,EAAE,eAAe,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IAC5D,gBAAgB,CAAC,EAAE,CAAC,KAAK,EAAE,eAAe,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;CAC7D;AAoCD,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE,kBAAkB,EAC5B,KAAK,GAAE,oBAAyB,GAC/B,QAAQ,CAAC,aAAa,CAAC,CA2KzB"}
package/dist/types.d.ts DELETED
@@ -1,145 +0,0 @@
1
- export type OrderKind = 'dine_in' | 'takeout' | 'delivery';
2
- export type DineInStatus = 'draft' | 'new' | 'confirmed' | 'preparing' | 'ready' | 'served' | 'completed' | 'cancelled';
3
- export type TakeoutStatus = 'draft' | 'new' | 'confirmed' | 'preparing' | 'ready' | 'picked_up' | 'completed' | 'cancelled';
4
- export type DeliveryStatus = 'draft' | 'new' | 'confirmed' | 'preparing' | 'ready' | 'dispatched' | 'delivered' | 'completed' | 'cancelled';
5
- export type OrderStatus = DineInStatus | TakeoutStatus | DeliveryStatus;
6
- /** Unified columns for the kanban board */
7
- export type KanbanColumn = 'new' | 'confirmed' | 'preparing' | 'ready' | 'out' | 'completed' | 'cancelled';
8
- export declare const STATUS_FLOW: Record<OrderKind, OrderStatus[]>;
9
- export declare function getNextStatus(kind: OrderKind, current: OrderStatus): OrderStatus | null;
10
- /**
11
- * O VERBO de cada passo — o que o botão FAZ, não o estado a que chega.
12
- *
13
- * "Avançar" é a palavra do desenvolvedor: descreve o movimento no diagrama, e
14
- * não o ato. Quem está no salão numa sexta cheia não avança um pedido, ele
15
- * confirma, prepara, serve ou despacha — e a diferença aparece justamente no
16
- * cartão, que é onde a decisão é tomada sem abrir nada.
17
- *
18
- * Chaveado pelo estado ALVO, porque é o alvo que nomeia o ato: `getNextStatus`
19
- * já sabe qual é, inclusive no passo que cada espécie chama de um jeito (o
20
- * salão serve, o balcão entrega, o motoboy despacha — um passo, quatro
21
- * vocabulários; ver OUT_STATUSES acima).
22
- *
23
- * `draft → new` é "Enviar" e não "Novo": o rascunho existe porque "a cozinha só
24
- * vê depois de enviada", e enviar é literalmente o que o botão faz.
25
- */
26
- export declare const ADVANCE_VERB: Record<OrderStatus, string>;
27
- export declare function getPreviousStatus(kind: OrderKind, current: OrderStatus): OrderStatus | null;
28
- export declare function mapToKanbanColumn(status: OrderStatus): KanbanColumn;
29
- export declare const KANBAN_COLUMNS: KanbanColumn[];
30
- /** Restaurant order — public.orders + public.orders extension */
31
- export interface RestaurantOrder {
32
- id: string;
33
- referenceNumber: string;
34
- kind: OrderKind;
35
- status: OrderStatus;
36
- partyId?: string;
37
- partyName?: string;
38
- assigneeId?: string;
39
- assigneeName?: string;
40
- locationId?: string;
41
- subtotal: number;
42
- discount: number;
43
- tax: number;
44
- total: number;
45
- currency: string;
46
- notes?: string;
47
- tags: string[];
48
- source: string;
49
- tableId?: string;
50
- tableName?: string;
51
- estimatedMinutes?: number;
52
- items: RestaurantOrderItem[];
53
- metadata?: Record<string, unknown>;
54
- tenantId: string;
55
- unitId?: string;
56
- createdAt: string;
57
- updatedAt: string;
58
- completedAt?: string;
59
- }
60
- export interface RestaurantOrderItem {
61
- id: string;
62
- orderId: string;
63
- productId?: string;
64
- name: string;
65
- description?: string;
66
- quantity: number;
67
- unitPrice: number;
68
- discount: number;
69
- total: number;
70
- sortOrder: number;
71
- modifiers?: string;
72
- kitchenNotes?: string;
73
- metadata?: Record<string, unknown>;
74
- createdAt: string;
75
- }
76
- export interface CreateOrderInput {
77
- kind: OrderKind;
78
- source?: string;
79
- tableId?: string;
80
- partyId?: string;
81
- assigneeId?: string;
82
- notes?: string;
83
- estimatedMinutes?: number;
84
- items: CreateOrderItemInput[];
85
- }
86
- export interface CreateOrderItemInput {
87
- productId?: string;
88
- name: string;
89
- quantity: number;
90
- unitPrice: number;
91
- discount?: number;
92
- modifiers?: string;
93
- kitchenNotes?: string;
94
- }
95
- export interface UpdateOrderStatusInput {
96
- orderId: string;
97
- status: OrderStatus;
98
- }
99
- export interface OrderQuery {
100
- kind?: OrderKind | OrderKind[] | (string & {}) | string[];
101
- status?: OrderStatus | OrderStatus[] | (string & {}) | string[];
102
- source?: string;
103
- /** Sales channel as `orders.channel` holds it (balcao · shop · delivery…). */
104
- channel?: string;
105
- /** unfulfilled · partially_fulfilled · fulfilled */
106
- fulfillmentStatus?: string;
107
- /** Kinds left out — the sales list drops `purchase`, which shares the table. */
108
- excludeKinds?: string[];
109
- /** `false` skips the lines — a list row does not draw them. Default true. */
110
- withItems?: boolean;
111
- tableId?: string;
112
- assigneeId?: string;
113
- dateRange?: {
114
- from: string;
115
- to: string;
116
- };
117
- search?: string;
118
- page?: number;
119
- pageSize?: number;
120
- }
121
- export interface PaginatedResult<T> {
122
- data: T[];
123
- total: number;
124
- }
125
- export interface OrdersSummary {
126
- todayOrderCount: number;
127
- todayRevenue: number;
128
- averageTicket: number;
129
- activeOrderCount: number;
130
- ordersByKind: Record<OrderKind, number>;
131
- ordersByStatus: Record<string, number>;
132
- topItems: Array<{
133
- name: string;
134
- quantity: number;
135
- revenue: number;
136
- }>;
137
- }
138
- export interface OrderStatusConfig {
139
- value: string;
140
- label: string;
141
- color: string;
142
- icon?: string;
143
- }
144
- export declare const DEFAULT_STATUS_CONFIGS: OrderStatusConfig[];
145
- //# sourceMappingURL=types.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}