@fayz-ai/plugin-orders 0.11.3 → 0.12.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 (37) hide show
  1. package/dist/OrdersPage-IKIIQALX.js +450 -0
  2. package/dist/OrdersPage-IKIIQALX.js.map +1 -0
  3. package/dist/chunk-TYS3LCKX.js +57 -0
  4. package/dist/chunk-TYS3LCKX.js.map +1 -0
  5. package/dist/context.d.ts +9 -0
  6. package/dist/context.d.ts.map +1 -1
  7. package/dist/data/core-supabase.d.ts +26 -0
  8. package/dist/data/core-supabase.d.ts.map +1 -0
  9. package/dist/data/mock.d.ts.map +1 -1
  10. package/dist/data/platform.d.ts +1 -1
  11. package/dist/index.d.ts +59 -0
  12. package/dist/index.d.ts.map +1 -1
  13. package/dist/index.js +608 -38
  14. package/dist/index.js.map +1 -1
  15. package/dist/lib/floor-plan-id.d.ts +13 -0
  16. package/dist/lib/floor-plan-id.d.ts.map +1 -0
  17. package/dist/locales/en.d.ts.map +1 -1
  18. package/dist/locales/pt-BR.d.ts.map +1 -1
  19. package/dist/store.d.ts +5 -1
  20. package/dist/store.d.ts.map +1 -1
  21. package/dist/types.d.ts +20 -3
  22. package/dist/types.d.ts.map +1 -1
  23. package/dist/views/CommercialOrdersScreen.d.ts +3 -0
  24. package/dist/views/CommercialOrdersScreen.d.ts.map +1 -0
  25. package/dist/views/OrderReceivableActions.d.ts +12 -0
  26. package/dist/views/OrderReceivableActions.d.ts.map +1 -0
  27. package/dist/views/OrdersPage.d.ts +7 -1
  28. package/dist/views/OrdersPage.d.ts.map +1 -1
  29. package/dist/views/OrdersScreen.d.ts +3 -0
  30. package/dist/views/OrdersScreen.d.ts.map +1 -0
  31. package/package.json +5 -3
  32. package/dist/OrdersPage-CQ7O74ZW.js +0 -155
  33. package/dist/OrdersPage-CQ7O74ZW.js.map +0 -1
  34. package/dist/chunk-MTVIXIPL.js +0 -23
  35. package/dist/chunk-MTVIXIPL.js.map +0 -1
  36. package/dist/views/OrderKanbanView.d.ts +0 -3
  37. package/dist/views/OrderKanbanView.d.ts.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/types.ts"],"names":[],"mappings":"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","file":"chunk-TYS3LCKX.js","sourcesContent":["// ---------------------------------------------------------------------------\n// Orders Plugin — Pure TypeScript types\n// ---------------------------------------------------------------------------\n\n// ============================================================\n// ENUMS / LITERALS\n// ============================================================\n\nexport type OrderKind = 'dine_in' | 'takeout' | 'delivery'\n\nexport type DineInStatus = 'draft' | 'new' | 'confirmed' | 'preparing' | 'ready' | 'served' | 'completed' | 'cancelled'\nexport type TakeoutStatus = 'draft' | 'new' | 'confirmed' | 'preparing' | 'ready' | 'picked_up' | 'completed' | 'cancelled'\nexport type DeliveryStatus = 'draft' | 'new' | 'confirmed' | 'preparing' | 'ready' | 'dispatched' | 'delivered' | 'completed' | 'cancelled'\nexport type OrderStatus = DineInStatus | TakeoutStatus | DeliveryStatus\n\n/** Unified columns for the kanban board */\nexport type KanbanColumn = 'new' | 'confirmed' | 'preparing' | 'ready' | 'out' | 'completed' | 'cancelled'\n\n// ============================================================\n// STATUS FLOW\n// ============================================================\n\n// `draft` opens each flow because the app can already produce one: \"Ou salve\n// como rascunho — a cozinha só vê depois de enviada\". It was missing here, so\n// `getNextStatus` returned null for a rascunho and every screen that offers to\n// advance an order offered a draft nothing at all — the one state where the\n// next step (\"mandar para a cozinha\") is least ambiguous.\n//\n// Safe against the database: `public.order_kinds` lists `draft` among the valid\n// statuses of all three kinds, and their transitions are `* → *`.\nexport const STATUS_FLOW: Record<OrderKind, OrderStatus[]> = {\n dine_in: ['draft', 'new', 'confirmed', 'preparing', 'ready', 'served', 'completed'],\n takeout: ['draft', 'new', 'confirmed', 'preparing', 'ready', 'picked_up', 'completed'],\n delivery: ['draft', 'new', 'confirmed', 'preparing', 'ready', 'dispatched', 'delivered', 'completed'],\n}\n\n/**\n * The one moment each kind names differently: the food has left the kitchen.\n * A salão serves it, a counter has it picked up, a courier dispatches it, a\n * customer receives it — one step in four vocabularies.\n */\nconst OUT_STATUSES: OrderStatus[] = ['served', 'picked_up', 'dispatched', 'delivered']\n\nexport function getNextStatus(kind: OrderKind, current: OrderStatus): OrderStatus | null {\n const flow = STATUS_FLOW[kind]\n let idx = flow.indexOf(current)\n // A kind can be handed a SIBLING's word for that moment, because the status\n // is derived and the deriving does not always know the kind: resto-saas reads\n // `dispatched` off a timestamp for every kind, so a dine_in comanda arrives\n // here calling itself dispatched while its own flow says `served`. Without\n // this it had no next step at all — the comanda reached Saiu and could never\n // be finished, from the board or the panel.\n if (idx === -1 && OUT_STATUSES.includes(current)) {\n idx = flow.findIndex((status) => OUT_STATUSES.includes(status))\n }\n return idx >= 0 && idx < flow.length - 1 ? flow[idx + 1] : null\n}\n\n/**\n * O VERBO de cada passo — o que o botão FAZ, não o estado a que chega.\n *\n * \"Avançar\" é a palavra do desenvolvedor: descreve o movimento no diagrama, e\n * não o ato. Quem está no salão numa sexta cheia não avança um pedido, ele\n * confirma, prepara, serve ou despacha — e a diferença aparece justamente no\n * cartão, que é onde a decisão é tomada sem abrir nada.\n *\n * Chaveado pelo estado ALVO, porque é o alvo que nomeia o ato: `getNextStatus`\n * já sabe qual é, inclusive no passo que cada espécie chama de um jeito (o\n * salão serve, o balcão entrega, o motoboy despacha — um passo, quatro\n * vocabulários; ver OUT_STATUSES acima).\n *\n * `draft → new` é \"Enviar\" e não \"Novo\": o rascunho existe porque \"a cozinha só\n * vê depois de enviada\", e enviar é literalmente o que o botão faz.\n */\nexport const ADVANCE_VERB: Record<OrderStatus, string> = {\n draft: 'Salvar rascunho',\n new: 'Enviar',\n confirmed: 'Confirmar',\n preparing: 'Preparar',\n ready: 'Marcar pronto',\n served: 'Servir',\n picked_up: 'Entregar',\n dispatched: 'Despachar',\n delivered: 'Confirmar entrega',\n completed: 'Concluir',\n cancelled: 'Cancelar',\n}\n\nexport function getPreviousStatus(kind: OrderKind, current: OrderStatus): OrderStatus | null {\n const flow = STATUS_FLOW[kind]\n const idx = flow.indexOf(current)\n return idx > 0 ? flow[idx - 1] : null\n}\n\nexport function mapToKanbanColumn(status: OrderStatus): KanbanColumn {\n if (['served', 'picked_up', 'dispatched', 'delivered'].includes(status)) return 'out'\n if (['new', 'confirmed', 'preparing', 'ready', 'completed', 'cancelled'].includes(status)) {\n return status as KanbanColumn\n }\n return 'new'\n}\n\nexport const KANBAN_COLUMNS: KanbanColumn[] = ['new', 'confirmed', 'preparing', 'ready', 'out', 'completed']\n\n// ============================================================\n// CORE ENTITIES\n// ============================================================\n\n/** Restaurant order — public.orders + public.orders extension */\nexport interface RestaurantOrder {\n id: string\n referenceNumber: string\n kind: OrderKind\n status: OrderStatus\n partyId?: string\n partyName?: string\n assigneeId?: string\n assigneeName?: string\n locationId?: string\n subtotal: number\n discount: number\n tax: number\n total: number\n currency: string\n notes?: string\n tags: string[]\n // Extension fields\n source: string\n tableId?: string\n tableName?: string\n estimatedMinutes?: number\n items: RestaurantOrderItem[]\n metadata?: Record<string, unknown>\n tenantId: string\n unitId?: string\n createdAt: string\n updatedAt: string\n completedAt?: string\n}\n\nexport interface RestaurantOrderItem {\n id: string\n orderId: string\n productId?: string\n name: string\n description?: string\n quantity: number\n unitPrice: number\n discount: number\n total: number\n sortOrder: number\n modifiers?: string\n kitchenNotes?: string\n metadata?: Record<string, unknown>\n createdAt: string\n}\n\n// ============================================================\n// INPUT TYPES\n// ============================================================\n\nexport interface CreateOrderInput {\n kind: OrderKind\n source?: string\n tableId?: string\n partyId?: string\n assigneeId?: string\n notes?: string\n estimatedMinutes?: number\n items: CreateOrderItemInput[]\n}\n\nexport interface CreateOrderItemInput {\n productId?: string\n name: string\n quantity: number\n unitPrice: number\n discount?: number\n modifiers?: string\n kitchenNotes?: string\n}\n\nexport interface UpdateOrderStatusInput {\n orderId: string\n status: OrderStatus\n}\n\n// ============================================================\n// QUERY TYPES\n// ============================================================\n\nexport interface OrderQuery {\n kind?: OrderKind | OrderKind[]\n status?: OrderStatus | OrderStatus[]\n source?: string\n tableId?: string\n assigneeId?: string\n dateRange?: { from: string; to: string }\n search?: string\n page?: number\n pageSize?: number\n}\n\nexport interface PaginatedResult<T> {\n data: T[]\n total: number\n}\n\n// ============================================================\n// AGGREGATION\n// ============================================================\n\nexport interface OrdersSummary {\n todayOrderCount: number\n todayRevenue: number\n averageTicket: number\n activeOrderCount: number\n ordersByKind: Record<OrderKind, number>\n ordersByStatus: Record<string, number>\n topItems: Array<{ name: string; quantity: number; revenue: number }>\n}\n\n// ============================================================\n// STATUS CONFIG\n// ============================================================\n\nexport interface OrderStatusConfig {\n value: string\n label: string\n color: string\n icon?: string\n}\n\nexport const DEFAULT_STATUS_CONFIGS: OrderStatusConfig[] = [\n { value: 'new', label: 'New', color: '#6366f1', icon: 'PlusCircle' },\n { value: 'confirmed', label: 'Confirmed', color: '#3b82f6', icon: 'CheckCircle' },\n { value: 'preparing', label: 'Preparing', color: '#f59e0b', icon: 'ChefHat' },\n { value: 'ready', label: 'Ready', color: '#10b981', icon: 'Bell' },\n { value: 'served', label: 'Served', color: '#06b6d4', icon: 'Utensils' },\n { value: 'picked_up', label: 'Picked Up', color: '#06b6d4', icon: 'ShoppingBag' },\n { value: 'dispatched', label: 'Dispatched', color: '#8b5cf6', icon: 'Truck' },\n { value: 'delivered', label: 'Delivered', color: '#06b6d4', icon: 'PackageCheck' },\n { value: 'completed', label: 'Completed', color: '#22c55e', icon: 'CircleCheck' },\n { value: 'cancelled', label: 'Cancelled', color: '#ef4444', icon: 'XCircle' },\n]\n"]}
package/dist/context.d.ts CHANGED
@@ -26,6 +26,15 @@ export interface ResolvedOrdersConfig {
26
26
  menuItemLookup?: EntityLookup;
27
27
  staffLookup?: EntityLookup;
28
28
  onOrderCompleted?: (order: RestaurantOrder) => Promise<void>;
29
+ onOrderCancelled?: (order: RestaurantOrder) => Promise<void>;
30
+ /** Route the list's create action opens. Unset = the list offers none. */
31
+ createRoute?: string;
32
+ orderRoute?: (orderId: string) => string;
33
+ editRoute?: (orderId: string) => string;
34
+ /** Whether this order still takes changes. Unset = it always does. */
35
+ canEditOrder?: (order: {
36
+ status?: string;
37
+ }) => boolean;
29
38
  }
30
39
  export declare const OrdersContextProvider: import("react").FC<{
31
40
  config: ResolvedOrdersConfig;
@@ -1 +1 @@
1
- {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../src/context.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAuB,cAAc,EAAE,KAAK,cAAc,EAAE,KAAK,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAC5G,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAA;AACtD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAA;AAC5C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAA;AAM9C,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,OAAO,CAAA;IACjB,OAAO,EAAE,OAAO,CAAA;CACjB;AAED,MAAM,MAAM,cAAc,GAAG,cAAc,CAAA;AAE3C,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,CAAC,EAAE,MAAM,CAAA;CACd;AAED,MAAM,WAAW,kBAAkB;IACjC,SAAS,EAAE,MAAM,CAAA;IACjB,YAAY,EAAE,MAAM,CAAA;IACpB,aAAa,EAAE,MAAM,CAAA;IACrB,WAAW,EAAE,MAAM,CAAA;CACpB;AAED,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,aAAa,CAAA;IACtB,MAAM,EAAE,kBAAkB,CAAA;IAC1B,QAAQ,EAAE,cAAc,CAAA;IACxB,YAAY,EAAE,iBAAiB,EAAE,CAAA;IACjC,cAAc,CAAC,EAAE,YAAY,CAAA;IAC7B,WAAW,CAAC,EAAE,YAAY,CAAA;IAC1B,gBAAgB,CAAC,EAAE,CAAC,KAAK,EAAE,eAAe,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;CAC7D;AAID,eAAO,MAAM,qBAAqB;;;;;EAAsB,CAAA;AACxD,eAAO,MAAM,eAAe,4BAAgB,CAAA;AAC5C,eAAO,MAAM,iBAAiB,0BAAkB,CAAA;AAChD,eAAO,MAAM,cAAc,iDAAe,CAAA;AAE1C,OAAO,EAAE,cAAc,EAAE,CAAA"}
1
+ {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../src/context.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAuB,cAAc,EAAE,KAAK,cAAc,EAAE,KAAK,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAC5G,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAA;AACtD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAA;AAC5C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAA;AAM9C,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,OAAO,CAAA;IACjB,OAAO,EAAE,OAAO,CAAA;CACjB;AAED,MAAM,MAAM,cAAc,GAAG,cAAc,CAAA;AAE3C,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,CAAC,EAAE,MAAM,CAAA;CACd;AAED,MAAM,WAAW,kBAAkB;IACjC,SAAS,EAAE,MAAM,CAAA;IACjB,YAAY,EAAE,MAAM,CAAA;IACpB,aAAa,EAAE,MAAM,CAAA;IACrB,WAAW,EAAE,MAAM,CAAA;CACpB;AAED,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,aAAa,CAAA;IACtB,MAAM,EAAE,kBAAkB,CAAA;IAC1B,QAAQ,EAAE,cAAc,CAAA;IACxB,YAAY,EAAE,iBAAiB,EAAE,CAAA;IACjC,cAAc,CAAC,EAAE,YAAY,CAAA;IAC7B,WAAW,CAAC,EAAE,YAAY,CAAA;IAC1B,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;IAC5D,0EAA0E;IAC1E,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,MAAM,CAAA;IACxC,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,MAAM,CAAA;IACvC,sEAAsE;IACtE,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,KAAK,OAAO,CAAA;CACvD;AAID,eAAO,MAAM,qBAAqB;;;;;EAAsB,CAAA;AACxD,eAAO,MAAM,eAAe,4BAAgB,CAAA;AAC5C,eAAO,MAAM,iBAAiB,0BAAkB,CAAA;AAChD,eAAO,MAAM,cAAc,iDAAe,CAAA;AAE1C,OAAO,EAAE,cAAc,EAAE,CAAA"}
@@ -0,0 +1,26 @@
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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"core-supabase.d.ts","sourceRoot":"","sources":["../../src/data/core-supabase.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAA;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;AAUD,wBAAgB,wBAAwB,CAAC,OAAO,CAAC,EAAE,yBAAyB,GAAG,kBAAkB,CAqXhG"}
@@ -1 +1 @@
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,CAwT7D"}
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"}
@@ -8,7 +8,7 @@ export interface FayzOrdersProviderOptions extends FayzClientOptions {
8
8
  orderItemsTable?: string;
9
9
  /**
10
10
  * Active tenant id (or a getter) used to scope reads and stamp writes on the
11
- * canonical orders and order_items tables. When omitted, scoping is left to
11
+ * canonical orders and items tables. When omitted, scoping is left to
12
12
  * the runtime/RLS context.
13
13
  */
14
14
  tenantId?: string | (() => string | undefined | null);
package/dist/index.d.ts CHANGED
@@ -32,12 +32,71 @@ export interface OrdersPluginOptions {
32
32
  menuItemLookup?: EntityLookup;
33
33
  staffLookup?: EntityLookup;
34
34
  onOrderCompleted?: (order: RestaurantOrder) => Promise<void>;
35
+ onOrderCancelled?: (order: RestaurantOrder) => Promise<void>;
35
36
  orderSources?: OrderSourceOption[];
37
+ /**
38
+ * Which vocabulary the orders screen speaks (#336). `restaurant` is the
39
+ * during-service board plus a list; `commercial` is the salon/clinic reading
40
+ * of the same archetype — Documento · Cliente · Profissional · Total ·
41
+ * Estado · Título — where the last column is whether the Venda produced a
42
+ * Título at all.
43
+ */
44
+ variant?: 'restaurant' | 'commercial';
45
+ /**
46
+ * Where "create order" goes, and whether the list offers it at all.
47
+ *
48
+ * This plugin shipped a board and no way to put anything on it — its own
49
+ * `declaredLimits` note says order creation "flows only through the
50
+ * store/AI-tool with no dedicated UI create handler". The restaurant app
51
+ * worked around that with a rail entry called "Nova comanda", which put the
52
+ * act of opening an order in the navigation instead of on the screen that
53
+ * lists them, two clicks from the board it belongs to.
54
+ *
55
+ * The screen still belongs to the host — a comanda asks for a table and a
56
+ * service mode, an e-commerce order asks for a customer and an address, and
57
+ * neither belongs in this plugin. What belongs here is the BUTTON, in the
58
+ * place every other list in the product keeps it.
59
+ *
60
+ * Unset means no button, which stays right for a variant whose orders arrive
61
+ * from a storefront rather than from someone standing at a counter.
62
+ */
63
+ createRoute?: string;
64
+ /**
65
+ * Where this product keeps the full order page, given an id (e.g.
66
+ * `(id) => `/orders/${id}``). The rail's "Ver pedido completo" appears only
67
+ * when a host supplies one — a product with no dedicated page should not grow
68
+ * a link to nowhere.
69
+ */
70
+ orderRoute?: (orderId: string) => string;
71
+ /**
72
+ * Where this product keeps the EDIT screen, given an id.
73
+ *
74
+ * Unset hides the "Editar pedido" button — which is the right answer for a
75
+ * product whose orders arrive already closed, and the previous answer for
76
+ * every product, since the route existed nowhere.
77
+ */
78
+ editRoute?: (orderId: string) => string;
79
+ /**
80
+ * Whether THIS order may still be edited.
81
+ *
82
+ * The archetype's own answer (`orderIsEditable`: only `open` and `new`) is
83
+ * the default, and it is deliberately conservative. The rule is the product's
84
+ * because the products genuinely disagree: a shop draft stops being editable
85
+ * the moment it is paid or shipped, while a comanda keeps taking items until
86
+ * the table asks for the bill.
87
+ */
88
+ canEditOrder?: (order: {
89
+ status?: string;
90
+ }) => boolean;
36
91
  }
37
92
  export declare function createOrdersPlugin(options?: OrdersPluginOptions): PluginManifest;
38
93
  export * from './integrations';
94
+ export * from './types';
39
95
  export type { OrdersDataProvider } from './data/types';
96
+ export type { RestaurantOrder, RestaurantOrderItem } from './types';
40
97
  export { createFayzOrdersProvider } from './data/platform';
41
98
  export type { FayzOrdersProviderOptions } from './data/platform';
99
+ export { createCoreOrdersProvider } from './data/core-supabase';
100
+ export type { CoreOrdersProviderOptions, CoreOrdersWriteOptions } from './data/core-supabase';
42
101
  export type { ResolvedOrdersConfig } from './context';
43
102
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;AAC5E,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAClD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAA;AACtD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAA;AAmB9C,MAAM,WAAW,kBAAkB;IACjC,SAAS,EAAE,MAAM,CAAA;IACjB,MAAM,EAAE,MAAM,CAAA;IACd,QAAQ,EAAE,MAAM,CAAA;IAChB,SAAS,EAAE,MAAM,CAAA;CAClB;AAeD,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,CAAC,EAAE,MAAM,CAAA;CACd;AAWD,MAAM,WAAW,mBAAmB;IAClC,OAAO,CAAC,EAAE;QACR,QAAQ,CAAC,EAAE,OAAO,CAAA;QAClB,OAAO,CAAC,EAAE,OAAO,CAAA;KAClB,CAAA;IACD,MAAM,CAAC,EAAE,OAAO,CAAC,kBAAkB,CAAC,CAAA;IACpC,QAAQ,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;IAC9D,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,UAAU,CAAC,EAAE,MAAM,GAAG,WAAW,CAAA;IACjC,KAAK,CAAC,EAAE,WAAW,CAAA;IACnB,UAAU,CAAC,EAAE,UAAU,CAAA;IACvB,YAAY,CAAC,EAAE,kBAAkB,CAAA;IACjC,cAAc,CAAC,EAAE,YAAY,CAAA;IAC7B,WAAW,CAAC,EAAE,YAAY,CAAA;IAC1B,gBAAgB,CAAC,EAAE,CAAC,KAAK,EAAE,eAAe,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IAC5D,YAAY,CAAC,EAAE,iBAAiB,EAAE,CAAA;CACnC;AAyBD,wBAAgB,kBAAkB,CAAC,OAAO,CAAC,EAAE,mBAAmB,GAAG,cAAc,CAuIhF;AAED,cAAc,gBAAgB,CAAA;AAE9B,YAAY,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAA;AACtD,OAAO,EAAE,wBAAwB,EAAE,MAAM,iBAAiB,CAAA;AAC1D,YAAY,EAAE,yBAAyB,EAAE,MAAM,iBAAiB,CAAA;AAChE,YAAY,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;AAC5E,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAGlD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAA;AACtD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAA;AAqB9C,MAAM,WAAW,kBAAkB;IACjC,SAAS,EAAE,MAAM,CAAA;IACjB,MAAM,EAAE,MAAM,CAAA;IACd,QAAQ,EAAE,MAAM,CAAA;IAChB,SAAS,EAAE,MAAM,CAAA;CAClB;AAeD,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,CAAC,EAAE,MAAM,CAAA;CACd;AAWD,MAAM,WAAW,mBAAmB;IAClC,OAAO,CAAC,EAAE;QACR,QAAQ,CAAC,EAAE,OAAO,CAAA;QAClB,OAAO,CAAC,EAAE,OAAO,CAAA;KAClB,CAAA;IACD,MAAM,CAAC,EAAE,OAAO,CAAC,kBAAkB,CAAC,CAAA;IACpC,QAAQ,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;IAC9D,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,UAAU,CAAC,EAAE,MAAM,GAAG,WAAW,CAAA;IACjC,KAAK,CAAC,EAAE,WAAW,CAAA;IACnB,UAAU,CAAC,EAAE,UAAU,CAAA;IACvB,YAAY,CAAC,EAAE,kBAAkB,CAAA;IACjC,cAAc,CAAC,EAAE,YAAY,CAAA;IAC7B,WAAW,CAAC,EAAE,YAAY,CAAA;IAC1B,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;IAC5D,YAAY,CAAC,EAAE,iBAAiB,EAAE,CAAA;IAClC;;;;;;OAMG;IACH,OAAO,CAAC,EAAE,YAAY,GAAG,YAAY,CAAA;IACrC;;;;;;;;;;;;;;;;;OAiBG;IACH,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB;;;;;OAKG;IACH,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,MAAM,CAAA;IACxC;;;;;;OAMG;IACH,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,MAAM,CAAA;IACvC;;;;;;;;OAQG;IACH,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,KAAK,OAAO,CAAA;CACvD;AA8BD,wBAAgB,kBAAkB,CAAC,OAAO,CAAC,EAAE,mBAAmB,GAAG,cAAc,CAkOhF;AAED,cAAc,gBAAgB,CAAA;AAO9B,cAAc,SAAS,CAAA;AAEvB,YAAY,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAA;AACtD,YAAY,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAA;AACnE,OAAO,EAAE,wBAAwB,EAAE,MAAM,iBAAiB,CAAA;AAC1D,YAAY,EAAE,yBAAyB,EAAE,MAAM,iBAAiB,CAAA;AAGhE,OAAO,EAAE,wBAAwB,EAAE,MAAM,sBAAsB,CAAA;AAC/D,YAAY,EAAE,yBAAyB,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAA;AAC7F,YAAY,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAA"}