@fayz-ai/pos 0.20.4 → 0.21.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.
- package/dist/app/config.d.ts +216 -4
- package/dist/app/config.d.ts.map +1 -1
- package/dist/index.d.ts +101 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +10849 -2517
- package/dist/index.js.map +1 -1
- package/dist/lib/useFloorBell.d.ts +21 -0
- package/dist/lib/useFloorBell.d.ts.map +1 -0
- package/dist/screen/AreaInspector.d.ts +19 -0
- package/dist/screen/AreaInspector.d.ts.map +1 -0
- package/dist/screen/AreaOutlineSheet.d.ts +15 -0
- package/dist/screen/AreaOutlineSheet.d.ts.map +1 -0
- package/dist/screen/ArrangeSheet.d.ts +8 -0
- package/dist/screen/ArrangeSheet.d.ts.map +1 -0
- package/dist/screen/AuthorizeSheet.d.ts +73 -0
- package/dist/screen/AuthorizeSheet.d.ts.map +1 -0
- package/dist/screen/CancelSheet.d.ts +35 -0
- package/dist/screen/CancelSheet.d.ts.map +1 -0
- package/dist/screen/ClosedPanel.d.ts +55 -0
- package/dist/screen/ClosedPanel.d.ts.map +1 -0
- package/dist/screen/ConfirmSheet.d.ts +12 -0
- package/dist/screen/ConfirmSheet.d.ts.map +1 -0
- package/dist/screen/CourtesySheet.d.ts +23 -0
- package/dist/screen/CourtesySheet.d.ts.map +1 -0
- package/dist/screen/CoverChargeSheet.d.ts +16 -0
- package/dist/screen/CoverChargeSheet.d.ts.map +1 -0
- package/dist/screen/DeliveryBoard.d.ts +13 -0
- package/dist/screen/DeliveryBoard.d.ts.map +1 -1
- package/dist/screen/DiscountSheet.d.ts +85 -0
- package/dist/screen/DiscountSheet.d.ts.map +1 -0
- package/dist/screen/DispatchRail.d.ts.map +1 -1
- package/dist/screen/FloorScopeBanner.d.ts +11 -0
- package/dist/screen/FloorScopeBanner.d.ts.map +1 -0
- package/dist/screen/GuestBar.d.ts +51 -0
- package/dist/screen/GuestBar.d.ts.map +1 -0
- package/dist/screen/GuestCountSheet.d.ts +16 -0
- package/dist/screen/GuestCountSheet.d.ts.map +1 -0
- package/dist/screen/IdentitySheet.d.ts.map +1 -1
- package/dist/screen/ModifierSheet.d.ts.map +1 -1
- package/dist/screen/OpenTableSheet.d.ts.map +1 -1
- package/dist/screen/PinSheet.d.ts.map +1 -1
- package/dist/screen/PlanStage.d.ts +130 -0
- package/dist/screen/PlanStage.d.ts.map +1 -0
- package/dist/screen/PosScreen.d.ts +350 -3
- package/dist/screen/PosScreen.d.ts.map +1 -1
- package/dist/screen/ServiceChargeSheet.d.ts +98 -0
- package/dist/screen/ServiceChargeSheet.d.ts.map +1 -0
- package/dist/screen/SheetLayer.d.ts +8 -0
- package/dist/screen/SheetLayer.d.ts.map +1 -0
- package/dist/screen/ShiftPanel.d.ts +45 -0
- package/dist/screen/ShiftPanel.d.ts.map +1 -0
- package/dist/screen/ShortcutsOverlay.d.ts.map +1 -1
- package/dist/screen/SplitSheet.d.ts.map +1 -1
- package/dist/screen/TableInspector.d.ts +22 -0
- package/dist/screen/TableInspector.d.ts.map +1 -0
- package/dist/screen/TicketRail.d.ts +175 -2
- package/dist/screen/TicketRail.d.ts.map +1 -1
- package/dist/screen/TransferHistorySheet.d.ts +17 -0
- package/dist/screen/TransferHistorySheet.d.ts.map +1 -0
- package/dist/screen/TransferSheet.d.ts +65 -0
- package/dist/screen/TransferSheet.d.ts.map +1 -0
- package/dist/screen/UnassignedTables.d.ts +14 -0
- package/dist/screen/UnassignedTables.d.ts.map +1 -0
- package/dist/screen/WaitlistEntrySheet.d.ts +23 -0
- package/dist/screen/WaitlistEntrySheet.d.ts.map +1 -0
- package/dist/screen/WaitlistView.d.ts +41 -0
- package/dist/screen/WaitlistView.d.ts.map +1 -0
- package/dist/screen/ZoneDrawLayer.d.ts +11 -0
- package/dist/screen/ZoneDrawLayer.d.ts.map +1 -0
- package/dist/screen/ZoneHandles.d.ts +18 -0
- package/dist/screen/ZoneHandles.d.ts.map +1 -0
- package/dist/screen/ZoneInspector.d.ts +27 -0
- package/dist/screen/ZoneInspector.d.ts.map +1 -0
- package/dist/screen/accountFit.d.ts +17 -0
- package/dist/screen/accountFit.d.ts.map +1 -0
- package/dist/screen/accountPick.d.ts +16 -0
- package/dist/screen/accountPick.d.ts.map +1 -0
- package/dist/screen/areaOutline.d.ts +59 -0
- package/dist/screen/areaOutline.d.ts.map +1 -0
- package/dist/screen/arrangePlan.d.ts +109 -0
- package/dist/screen/arrangePlan.d.ts.map +1 -0
- package/dist/screen/arrangeTables.d.ts +69 -0
- package/dist/screen/arrangeTables.d.ts.map +1 -0
- package/dist/screen/billPrint.d.ts +66 -0
- package/dist/screen/billPrint.d.ts.map +1 -0
- package/dist/screen/cancelCheck.d.ts +31 -0
- package/dist/screen/cancelCheck.d.ts.map +1 -0
- package/dist/screen/cardBrand.d.ts +44 -0
- package/dist/screen/cardBrand.d.ts.map +1 -0
- package/dist/screen/cashGate.d.ts +31 -0
- package/dist/screen/cashGate.d.ts.map +1 -0
- package/dist/screen/catalogEmpty.d.ts +13 -0
- package/dist/screen/catalogEmpty.d.ts.map +1 -0
- package/dist/screen/categoryIcon.d.ts +4 -0
- package/dist/screen/categoryIcon.d.ts.map +1 -0
- package/dist/screen/channelSlot.d.ts +93 -0
- package/dist/screen/channelSlot.d.ts.map +1 -0
- package/dist/screen/comandaChannel.d.ts +25 -0
- package/dist/screen/comandaChannel.d.ts.map +1 -0
- package/dist/screen/courtesyGate.d.ts +31 -0
- package/dist/screen/courtesyGate.d.ts.map +1 -0
- package/dist/screen/coverQuantities.d.ts +46 -0
- package/dist/screen/coverQuantities.d.ts.map +1 -0
- package/dist/screen/deliveryColumns.d.ts +54 -0
- package/dist/screen/deliveryColumns.d.ts.map +1 -0
- package/dist/screen/discardCheck.d.ts +8 -0
- package/dist/screen/discardCheck.d.ts.map +1 -0
- package/dist/screen/discountBook.d.ts +40 -0
- package/dist/screen/discountBook.d.ts.map +1 -0
- package/dist/screen/discountCap.d.ts +9 -0
- package/dist/screen/discountCap.d.ts.map +1 -0
- package/dist/screen/discountSelectable.d.ts +20 -0
- package/dist/screen/discountSelectable.d.ts.map +1 -0
- package/dist/screen/dockScope.d.ts +9 -0
- package/dist/screen/dockScope.d.ts.map +1 -0
- package/dist/screen/fiscalSeal.d.ts +40 -0
- package/dist/screen/fiscalSeal.d.ts.map +1 -0
- package/dist/screen/floorEmpty.d.ts +20 -0
- package/dist/screen/floorEmpty.d.ts.map +1 -0
- package/dist/screen/floorGeometry.d.ts +295 -0
- package/dist/screen/floorGeometry.d.ts.map +1 -0
- package/dist/screen/floorScope.d.ts +49 -0
- package/dist/screen/floorScope.d.ts.map +1 -0
- package/dist/screen/floorStale.d.ts +5 -0
- package/dist/screen/floorStale.d.ts.map +1 -0
- package/dist/screen/guestCount.d.ts +28 -0
- package/dist/screen/guestCount.d.ts.map +1 -0
- package/dist/screen/guestCountOnClose.d.ts +11 -0
- package/dist/screen/guestCountOnClose.d.ts.map +1 -0
- package/dist/screen/ledgerMethod.d.ts +11 -0
- package/dist/screen/ledgerMethod.d.ts.map +1 -0
- package/dist/screen/menuFreshness.d.ts +18 -0
- package/dist/screen/menuFreshness.d.ts.map +1 -0
- package/dist/screen/menuSearch.d.ts +55 -0
- package/dist/screen/menuSearch.d.ts.map +1 -0
- package/dist/screen/modifierCheck.d.ts +23 -0
- package/dist/screen/modifierCheck.d.ts.map +1 -0
- package/dist/screen/openChannelCounts.d.ts +26 -0
- package/dist/screen/openChannelCounts.d.ts.map +1 -0
- package/dist/screen/orderRef.d.ts +17 -0
- package/dist/screen/orderRef.d.ts.map +1 -0
- package/dist/screen/paymentList.d.ts +26 -0
- package/dist/screen/paymentList.d.ts.map +1 -0
- package/dist/screen/pinGate.d.ts +28 -0
- package/dist/screen/pinGate.d.ts.map +1 -0
- package/dist/screen/reopen.d.ts +36 -0
- package/dist/screen/reopen.d.ts.map +1 -0
- package/dist/screen/searchSubject.d.ts +22 -0
- package/dist/screen/searchSubject.d.ts.map +1 -0
- package/dist/screen/serviceChargeCheck.d.ts +29 -0
- package/dist/screen/serviceChargeCheck.d.ts.map +1 -0
- package/dist/screen/serviceChargeGuard.d.ts +145 -0
- package/dist/screen/serviceChargeGuard.d.ts.map +1 -0
- package/dist/screen/servicePreview.d.ts +35 -0
- package/dist/screen/servicePreview.d.ts.map +1 -0
- package/dist/screen/session.d.ts +207 -0
- package/dist/screen/session.d.ts.map +1 -1
- package/dist/screen/sheetSubtitle.d.ts +8 -0
- package/dist/screen/sheetSubtitle.d.ts.map +1 -0
- package/dist/screen/shift.d.ts +97 -0
- package/dist/screen/shift.d.ts.map +1 -0
- package/dist/screen/specialReuse.d.ts +45 -0
- package/dist/screen/specialReuse.d.ts.map +1 -0
- package/dist/screen/svgDrag.d.ts +24 -0
- package/dist/screen/svgDrag.d.ts.map +1 -0
- package/dist/screen/tableTone.d.ts +64 -0
- package/dist/screen/tableTone.d.ts.map +1 -0
- package/dist/screen/transferDone.d.ts +12 -0
- package/dist/screen/transferDone.d.ts.map +1 -0
- package/dist/screen/transferGuestBlock.d.ts +30 -0
- package/dist/screen/transferGuestBlock.d.ts.map +1 -0
- package/dist/screen/transferPick.d.ts +51 -0
- package/dist/screen/transferPick.d.ts.map +1 -0
- package/dist/screen/views.d.ts +139 -4
- package/dist/screen/views.d.ts.map +1 -1
- package/dist/screen/waitlist.d.ts +211 -0
- package/dist/screen/waitlist.d.ts.map +1 -0
- package/dist/screen/writeFailure.d.ts +22 -0
- package/dist/screen/writeFailure.d.ts.map +1 -0
- package/dist/screen/zoneDraft.d.ts +75 -0
- package/dist/screen/zoneDraft.d.ts.map +1 -0
- package/dist/screen/zoneEditing.d.ts +56 -0
- package/dist/screen/zoneEditing.d.ts.map +1 -0
- package/dist/styles.css +2697 -200
- package/package.json +2 -2
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"floorScope.d.ts","sourceRoot":"","sources":["../../src/screen/floorScope.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,UAAU;IACzB,uEAAuE;IACvE,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACvB,gDAAgD;IAChD,OAAO,EAAE,MAAM,EAAE,CAAA;IACjB,+CAA+C;IAC/C,cAAc,EAAE,MAAM,EAAE,CAAA;CACzB;AAED,MAAM,MAAM,WAAW,GACnB;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,GAChB;IAAE,IAAI,EAAE,eAAe,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GACvC;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,OAAO,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAA;AAI7E;;;;;;;;;;;;;GAaG;AACH,wBAAgB,WAAW,CACzB,KAAK,EAAE,UAAU,GAAG,IAAI,EACxB,KAAK,EAAE,KAAK,CAAC;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,EAC1C,SAAS,EAAE,OAAO,GACjB,WAAW,CAeb;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,UAAU,EACjB,KAAK,EAAE,KAAK,CAAC;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,GACzC,MAAM,CAOR;AAED,mEAAmE;AACnE,wBAAgB,OAAO,CACrB,OAAO,EAAE,MAAM,EACf,YAAY,EAAE,MAAM,EAAE,EACtB,KAAK,EAAE,UAAU,GAAG,IAAI,GACvB,OAAO,CAKT"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/** A frase do V1, literal. */
|
|
2
|
+
export declare const FLOOR_STALE_WARNING = "Valores das mesas n\u00E3o atualizados. N\u00E3o considere a aus\u00EAncia de comanda como mesa livre.";
|
|
3
|
+
/** O botão ao lado dela, também do V1. */
|
|
4
|
+
export declare const FLOOR_STALE_RETRY = "Tentar novamente";
|
|
5
|
+
//# sourceMappingURL=floorStale.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"floorStale.d.ts","sourceRoot":"","sources":["../../src/screen/floorStale.ts"],"names":[],"mappings":"AAkBA,8BAA8B;AAC9B,eAAO,MAAM,mBAAmB,2GAC2D,CAAA;AAE3F,0CAA0C;AAC1C,eAAO,MAAM,iBAAiB,qBAAqB,CAAA"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { type TicketGuest } from './session';
|
|
2
|
+
/** O teto do V1, literal: um `input` de três dígitos. */
|
|
3
|
+
export declare const MAX_GUESTS = 999;
|
|
4
|
+
/**
|
|
5
|
+
* O PISO: nunca menos que 1, nunca menos que o número de pessoas
|
|
6
|
+
* IDENTIFICADAS.
|
|
7
|
+
*
|
|
8
|
+
* «Identificada» é a mesma pergunta que o resto do PDV faz (`isAnonymousGuest`):
|
|
9
|
+
* tem telefone, tem ficha, ou alguém digitou um nome em cima de «Pessoa 3».
|
|
10
|
+
* Quem continua «Pessoa 3» é cadeira, não pessoa, e cadeira pode sumir.
|
|
11
|
+
*/
|
|
12
|
+
export declare function guestCountFloor(party: TicketGuest[] | undefined): number;
|
|
13
|
+
/**
|
|
14
|
+
* O número que vale, dado o que o operador digitou.
|
|
15
|
+
*
|
|
16
|
+
* Sobe para o piso e desce do teto — a normalização que o V1 faz no `onBlur`.
|
|
17
|
+
* Entrada vazia ou não-numérica vira o PISO, não zero: um campo limpo é «não
|
|
18
|
+
* sei», e a resposta menos errada para «não sei» é o que já existe.
|
|
19
|
+
*/
|
|
20
|
+
export declare function normalizeGuestCount(entrada: string | number | null | undefined, piso: number): number;
|
|
21
|
+
/**
|
|
22
|
+
* Quantas cadeiras NOVAS o número pede.
|
|
23
|
+
*
|
|
24
|
+
* O V1 desenha essas vagas tracejadas no próprio diálogo, para o operador ver
|
|
25
|
+
* o que vai nascer antes de confirmar.
|
|
26
|
+
*/
|
|
27
|
+
export declare function newSlotCount(alvo: number, party: TicketGuest[] | undefined): number;
|
|
28
|
+
//# sourceMappingURL=guestCount.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"guestCount.d.ts","sourceRoot":"","sources":["../../src/screen/guestCount.ts"],"names":[],"mappings":"AAaA,OAAO,EAAoB,KAAK,WAAW,EAAE,MAAM,WAAW,CAAA;AAE9D,yDAAyD;AACzD,eAAO,MAAM,UAAU,MAAM,CAAA;AAE7B;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,WAAW,EAAE,GAAG,SAAS,GAAG,MAAM,CAGxE;AAED;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,GAAG,SAAS,EAC3C,IAAI,EAAE,MAAM,GACX,MAAM,CAIR;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,GAAG,SAAS,GAAG,MAAM,CAEnF"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export interface CloseGuestCheck {
|
|
2
|
+
/** Quantas linhas de couvert a comanda tem. */
|
|
3
|
+
coverCount: number;
|
|
4
|
+
/** A casa ligou «Confirmar número de pessoas ao fechar». */
|
|
5
|
+
confirmOnClose: boolean;
|
|
6
|
+
/** A conferência já aconteceu neste gesto. */
|
|
7
|
+
alreadyConfirmed?: boolean;
|
|
8
|
+
}
|
|
9
|
+
/** Pergunta antes de fechar? */
|
|
10
|
+
export declare function asksGuestCountOnClose(c: CloseGuestCheck): boolean;
|
|
11
|
+
//# sourceMappingURL=guestCountOnClose.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"guestCountOnClose.d.ts","sourceRoot":"","sources":["../../src/screen/guestCountOnClose.ts"],"names":[],"mappings":"AA6BA,MAAM,WAAW,eAAe;IAC9B,+CAA+C;IAC/C,UAAU,EAAE,MAAM,CAAA;IAClB,4DAA4D;IAC5D,cAAc,EAAE,OAAO,CAAA;IACvB,8CAA8C;IAC9C,gBAAgB,CAAC,EAAE,OAAO,CAAA;CAC3B;AAED,gCAAgC;AAChC,wBAAgB,qBAAqB,CAAC,CAAC,EAAE,eAAe,GAAG,OAAO,CAIjE"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/** O vocabulário do razão — o mesmo `PaymentMethod` de `@fayz-ai/core/orders`. */
|
|
2
|
+
export type LedgerMethod = 'cash' | 'pix' | 'credit_card' | 'debit_card' | 'transfer' | 'other';
|
|
3
|
+
/**
|
|
4
|
+
* Qual conta recebe este pagamento.
|
|
5
|
+
*
|
|
6
|
+
* Desconhecido vira `other` em vez de estourar: uma forma nova no catálogo não
|
|
7
|
+
* pode impedir o fechamento de uma mesa com gente esperando. Ela cai no caixa
|
|
8
|
+
* do operador e aparece na conciliação — visível, e não perdida.
|
|
9
|
+
*/
|
|
10
|
+
export declare function ledgerMethod(transactionType: string | null | undefined): LedgerMethod;
|
|
11
|
+
//# sourceMappingURL=ledgerMethod.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ledgerMethod.d.ts","sourceRoot":"","sources":["../../src/screen/ledgerMethod.ts"],"names":[],"mappings":"AAaA,kFAAkF;AAClF,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,KAAK,GAAG,aAAa,GAAG,YAAY,GAAG,UAAU,GAAG,OAAO,CAAA;AAsB/F;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,eAAe,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,YAAY,CAGrF"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export interface MenuFreshness {
|
|
2
|
+
/** Epoch ms de quando esta cópia do cardápio saiu do banco. */
|
|
3
|
+
fetchedAt?: number;
|
|
4
|
+
/** Há uma revalidação em curso, por trás. */
|
|
5
|
+
refreshing?: boolean;
|
|
6
|
+
/** A última revalidação falhou — o que está na tela é a cópia anterior. */
|
|
7
|
+
failed?: boolean;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* O rótulo da linha de frescor.
|
|
11
|
+
*
|
|
12
|
+
* A falha vem ANTES da idade porque é ela que muda a decisão: um cardápio de
|
|
13
|
+
* 8 minutos é normal, um cardápio de 8 minutos que não consegue atualizar quer
|
|
14
|
+
* dizer que a casa está sem rede e que a indisponibilidade de hoje pode não
|
|
15
|
+
* ter chegado.
|
|
16
|
+
*/
|
|
17
|
+
export declare function menuFreshnessLabel(f: MenuFreshness, now?: number): string;
|
|
18
|
+
//# sourceMappingURL=menuFreshness.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"menuFreshness.d.ts","sourceRoot":"","sources":["../../src/screen/menuFreshness.ts"],"names":[],"mappings":"AAeA,MAAM,WAAW,aAAa;IAC5B,+DAA+D;IAC/D,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,6CAA6C;IAC7C,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,2EAA2E;IAC3E,MAAM,CAAC,EAAE,OAAO,CAAA;CACjB;AAED;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAAC,CAAC,EAAE,aAAa,EAAE,GAAG,GAAE,MAAmB,GAAG,MAAM,CAWrF"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/** O mínimo de letras para a busca começar a filtrar — o `>= 2` do V1. */
|
|
2
|
+
export declare const MENU_SEARCH_MIN = 2;
|
|
3
|
+
/** Minúsculas e sem acento, como o `normalize` do V1. */
|
|
4
|
+
export declare function semAcento(s: string): string;
|
|
5
|
+
export interface MenuSearchable {
|
|
6
|
+
name: string;
|
|
7
|
+
/** O código de barras, quando a casa cadastrou. */
|
|
8
|
+
code?: string | null;
|
|
9
|
+
}
|
|
10
|
+
/** A busca está filtrando? Abaixo do mínimo, a lista fica como estava. */
|
|
11
|
+
export declare function menuSearchActive(query: string): boolean;
|
|
12
|
+
/**
|
|
13
|
+
* Este item casa com o que foi digitado?
|
|
14
|
+
*
|
|
15
|
+
* Só faz sentido perguntar quando `menuSearchActive` é verdade — com menos de
|
|
16
|
+
* duas letras o V1 não filtra, e responder aqui esconderia essa regra.
|
|
17
|
+
*/
|
|
18
|
+
export declare function menuMatches(item: MenuSearchable, query: string): boolean;
|
|
19
|
+
export interface MenuSellable {
|
|
20
|
+
/** Escondido no cardápio: não entra em canal nenhum. */
|
|
21
|
+
isActive?: boolean;
|
|
22
|
+
/** Marcado para o PDV. Ausente conta como SIM, como o `?? true` do provider. */
|
|
23
|
+
availableForPos?: boolean;
|
|
24
|
+
/** O preço em centavos, como o PDV conta dinheiro. */
|
|
25
|
+
priceCents?: number;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Este item aparece no cardápio do SALÃO?
|
|
29
|
+
*
|
|
30
|
+
* Duas perguntas, e só estas: está escondido no cardápio, e a casa o marcou
|
|
31
|
+
* para o PDV. As duas HONRAM uma decisão que alguém já tomou no cadastro — é
|
|
32
|
+
* por isso que valem sem perguntar nada a ninguém.
|
|
33
|
+
*
|
|
34
|
+
* O preço NÃO entra aqui. Ver `menuItemHasPrice`.
|
|
35
|
+
*/
|
|
36
|
+
export declare function menuItemInPos(item: MenuSellable): boolean;
|
|
37
|
+
/**
|
|
38
|
+
* A terceira regra do V1 — `gt('sale_price', 0)` —, medida e AINDA NÃO APLICADA.
|
|
39
|
+
*
|
|
40
|
+
* Ela é diferente das outras duas: escondido e fora-do-canal honram uma decisão
|
|
41
|
+
* que a casa tomou, e esta IMPÕE uma regra sobre um cadastro que ninguém pediu
|
|
42
|
+
* para esconder. Medido no cluster em 29-09, o que ela tiraria da tela:
|
|
43
|
+
*
|
|
44
|
+
* · Synthetic Bistro — **2 dos 4** itens
|
|
45
|
+
* · Zedek Pizzas — 1 de 16
|
|
46
|
+
* · Pertinho do Céu — nenhum
|
|
47
|
+
*
|
|
48
|
+
* Metade do cardápio de uma casa sumindo é decisão de produto, não conserto de
|
|
49
|
+
* defeito. A regra fica escrita, testada e exportada, esperando o founder — e o
|
|
50
|
+
* raciocínio do V1 a favor dela é bom: item de R$ 0,00 no cardápio é quase
|
|
51
|
+
* sempre cadastro pela metade, e lançá-lo põe uma linha de R$ 0,00 na conta de
|
|
52
|
+
* alguém.
|
|
53
|
+
*/
|
|
54
|
+
export declare function menuItemHasPrice(item: MenuSellable): boolean;
|
|
55
|
+
//# sourceMappingURL=menuSearch.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"menuSearch.d.ts","sourceRoot":"","sources":["../../src/screen/menuSearch.ts"],"names":[],"mappings":"AA4BA,0EAA0E;AAC1E,eAAO,MAAM,eAAe,IAAI,CAAA;AAEhC,yDAAyD;AACzD,wBAAgB,SAAS,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAE3C;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAA;IACZ,mDAAmD;IACnD,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CACrB;AAED,0EAA0E;AAC1E,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAEvD;AAED;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,cAAc,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAOxE;AA0BD,MAAM,WAAW,YAAY;IAC3B,wDAAwD;IACxD,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,gFAAgF;IAChF,eAAe,CAAC,EAAE,OAAO,CAAA;IACzB,sDAAsD;IACtD,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB;AAED;;;;;;;;GAQG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,YAAY,GAAG,OAAO,CAIzD;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,YAAY,GAAG,OAAO,CAE5D"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/** O que a tela mostra quando o cadastro está quebrado — literal do V1. */
|
|
2
|
+
export declare const MODIFIERS_NEED_REVIEW = "O cadastro de complementos deste produto precisa de revis\u00E3o. Pe\u00E7a ajuda ao gar\u00E7om.";
|
|
3
|
+
/** E quando o problema é de UM grupo, o V1 o nomeia. */
|
|
4
|
+
export declare function modifierGroupUnavailable(name: string): string;
|
|
5
|
+
/** A frase da leitura que falhou, para quem carrega os complementos. */
|
|
6
|
+
export declare const MODIFIERS_LOAD_FAILED = "N\u00E3o foi poss\u00EDvel carregar os complementos. Tente novamente antes de adicionar o produto.";
|
|
7
|
+
export interface CheckableGroup {
|
|
8
|
+
label: string;
|
|
9
|
+
min?: number;
|
|
10
|
+
max?: number;
|
|
11
|
+
options: readonly {
|
|
12
|
+
priceDeltaCents?: number;
|
|
13
|
+
}[];
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* O problema do cadastro, ou `null` quando ele serve.
|
|
17
|
+
*
|
|
18
|
+
* A ordem é a do V1: primeiro o que é malformado em QUALQUER grupo — porque
|
|
19
|
+
* aí o defeito é do cadastro inteiro e não adianta nomear um —, depois o
|
|
20
|
+
* primeiro grupo que não fecha sozinho.
|
|
21
|
+
*/
|
|
22
|
+
export declare function modifierGroupsProblem(groups: readonly CheckableGroup[]): string | null;
|
|
23
|
+
//# sourceMappingURL=modifierCheck.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"modifierCheck.d.ts","sourceRoot":"","sources":["../../src/screen/modifierCheck.ts"],"names":[],"mappings":"AAcA,2EAA2E;AAC3E,eAAO,MAAM,qBAAqB,sGACoD,CAAA;AAEtF,wDAAwD;AACxD,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAE7D;AAED,wEAAwE;AACxE,eAAO,MAAM,qBAAqB,uGAC0D,CAAA;AAE5F,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAA;IACb,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,SAAS;QAAE,eAAe,CAAC,EAAE,MAAM,CAAA;KAAE,EAAE,CAAA;CACjD;AAED;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,SAAS,cAAc,EAAE,GAAG,MAAM,GAAG,IAAI,CAqBtF"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/** As espécies que são do PDV. `sale` e `purchase` não são comanda de salão. */
|
|
2
|
+
export declare const ESPECIE_DE_SALAO: Set<string>;
|
|
3
|
+
export interface OpenOrderRow {
|
|
4
|
+
channel?: string | null;
|
|
5
|
+
kind?: string | null;
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* Conta as comandas abertas por canal.
|
|
9
|
+
*
|
|
10
|
+
* `channelOf` é a tradução canal+espécie → canal (o `channelOfOrder` do core),
|
|
11
|
+
* injetada para esta regra não amarrar o pacote a ela. Devolve `null` em dois
|
|
12
|
+
* casos bem diferentes: a comanda sem canal nem espécie — que É mesa — e a
|
|
13
|
+
* linha que não é do salão (`sale`, `purchase`). O segundo caso sai da conta;
|
|
14
|
+
* sem isso, uma venda de estoque que ficasse aberta entraria como mesa.
|
|
15
|
+
*/
|
|
16
|
+
export declare function countOpenByChannel(rows: readonly OpenOrderRow[], channelOf: (row: OpenOrderRow) => string | null | undefined): Record<string, number>;
|
|
17
|
+
/**
|
|
18
|
+
* O salão passa a contar MESA.
|
|
19
|
+
*
|
|
20
|
+
* Recebe as contagens por comanda e as mesas com comanda aberta, e substitui a
|
|
21
|
+
* do salão. Vale SEMPRE — inclusive quando a contagem por comanda falhou e veio
|
|
22
|
+
* vazia —, porque este número sai de outra leitura: quem chama já sabe quais
|
|
23
|
+
* mesas estão ocupadas.
|
|
24
|
+
*/
|
|
25
|
+
export declare function withDineInByTable(counts: Record<string, number>, occupiedTableIds: readonly (string | null | undefined)[]): Record<string, number>;
|
|
26
|
+
//# sourceMappingURL=openChannelCounts.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openChannelCounts.d.ts","sourceRoot":"","sources":["../../src/screen/openChannelCounts.ts"],"names":[],"mappings":"AAyBA,gFAAgF;AAChF,eAAO,MAAM,gBAAgB,aAAyD,CAAA;AAEtF,MAAM,WAAW,YAAY;IAC3B,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACvB,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CACrB;AAED;;;;;;;;GAQG;AACH,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,SAAS,YAAY,EAAE,EAC7B,SAAS,EAAE,CAAC,GAAG,EAAE,YAAY,KAAK,MAAM,GAAG,IAAI,GAAG,SAAS,GAC1D,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAUxB;AAED;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC9B,gBAAgB,EAAE,SAAS,CAAC,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC,EAAE,GACvD,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAGxB"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A referência para mostrar: `1898` para a comanda numerada,
|
|
3
|
+
* `046dfcd7` para a que ficou sem número.
|
|
4
|
+
*
|
|
5
|
+
* Devolve `undefined` só quando não há NEM número NEM id — o que não acontece
|
|
6
|
+
* numa comanda gravada, e por isso não tem texto de reserva: um «—» aqui
|
|
7
|
+
* esconderia um defeito em vez de mostrá-lo.
|
|
8
|
+
*/
|
|
9
|
+
export declare function displayRef(reference: string | null | undefined, orderId?: string | null): string | undefined;
|
|
10
|
+
/**
|
|
11
|
+
* O rótulo da ficha na bandeja — `{cliente}` ou `{Canal} #{referência}`.
|
|
12
|
+
*
|
|
13
|
+
* É a linha do V1, com o mesmo `||`: o nome de quem consome ganha do número
|
|
14
|
+
* sempre que existe, porque é por ele que o balcão chama.
|
|
15
|
+
*/
|
|
16
|
+
export declare function orderChipLabel(channelLabel: string, reference: string | null | undefined, orderId?: string | null, customerName?: string | null): string;
|
|
17
|
+
//# sourceMappingURL=orderRef.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"orderRef.d.ts","sourceRoot":"","sources":["../../src/screen/orderRef.ts"],"names":[],"mappings":"AAgCA;;;;;;;GAOG;AACH,wBAAgB,UAAU,CACxB,SAAS,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EACpC,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,GACtB,MAAM,GAAG,SAAS,CAKpB;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAC5B,YAAY,EAAE,MAAM,EACpB,SAAS,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EACpC,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,EACvB,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,GAC3B,MAAM,CAKR"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
export interface PaymentRow {
|
|
2
|
+
id: string;
|
|
3
|
+
amountCents: number;
|
|
4
|
+
/** O participante que pagou. Ausente = pagou a mesa. */
|
|
5
|
+
guestName?: string | null;
|
|
6
|
+
/** A forma de pagamento, quando o V2 sabe o nome dela. */
|
|
7
|
+
methodName?: string | null;
|
|
8
|
+
/** Quem entregou o dinheiro, quando não há forma cadastrada. */
|
|
9
|
+
paidByName?: string | null;
|
|
10
|
+
}
|
|
11
|
+
export interface PaymentEntry {
|
|
12
|
+
id: string;
|
|
13
|
+
amountCents: number;
|
|
14
|
+
/** «Fulano · Cartão» — o que a linha mostra à esquerda. */
|
|
15
|
+
label: string;
|
|
16
|
+
}
|
|
17
|
+
export interface PaymentSummary {
|
|
18
|
+
entries: PaymentEntry[];
|
|
19
|
+
totalCents: number;
|
|
20
|
+
/** «3 pagamentos» — plural do V1, singular incluído. */
|
|
21
|
+
countLabel: string;
|
|
22
|
+
}
|
|
23
|
+
export declare function paymentSummary(rows: PaymentRow[], { sharedLabel }?: {
|
|
24
|
+
sharedLabel?: string;
|
|
25
|
+
}): PaymentSummary;
|
|
26
|
+
//# sourceMappingURL=paymentList.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"paymentList.d.ts","sourceRoot":"","sources":["../../src/screen/paymentList.ts"],"names":[],"mappings":"AAaA,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAA;IACV,WAAW,EAAE,MAAM,CAAA;IACnB,wDAAwD;IACxD,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACzB,0DAA0D;IAC1D,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC1B,gEAAgE;IAChE,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CAC3B;AAED,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAA;IACV,WAAW,EAAE,MAAM,CAAA;IACnB,2DAA2D;IAC3D,KAAK,EAAE,MAAM,CAAA;CACd;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,YAAY,EAAE,CAAA;IACvB,UAAU,EAAE,MAAM,CAAA;IAClB,wDAAwD;IACxD,UAAU,EAAE,MAAM,CAAA;CACnB;AAiCD,wBAAgB,cAAc,CAC5B,IAAI,EAAE,UAAU,EAAE,EAClB,EAAE,WAAoB,EAAE,GAAE;IAAE,WAAW,CAAC,EAAE,MAAM,CAAA;CAAO,GACtD,cAAc,CAYhB"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/** Quando a ação pede PIN e o app não ligou quem o confere. */
|
|
2
|
+
export declare const PIN_SEM_VERIFICADOR = "Esta a\u00E7\u00E3o exige autoriza\u00E7\u00E3o, e este aplicativo n\u00E3o tem quem confira a senha.";
|
|
3
|
+
export type PinGate =
|
|
4
|
+
/** Abre a folha de autorização. */
|
|
5
|
+
{
|
|
6
|
+
kind: 'ask';
|
|
7
|
+
}
|
|
8
|
+
/** Nega, e DIZ o que falta. */
|
|
9
|
+
| {
|
|
10
|
+
kind: 'deny';
|
|
11
|
+
message: string;
|
|
12
|
+
}
|
|
13
|
+
/** A ação não pede senha. */
|
|
14
|
+
| {
|
|
15
|
+
kind: 'run';
|
|
16
|
+
};
|
|
17
|
+
/**
|
|
18
|
+
* `requiresPin` sem `verifyPin` NEGA.
|
|
19
|
+
*
|
|
20
|
+
* Aqui estava `requiresPin && verifyPin`: um app que declarasse
|
|
21
|
+
* `requiresPin: true` e esquecesse de ligar o verificador executava a ação
|
|
22
|
+
* SEM PIN NENHUM — cancelar, descontar e dar cortesia passariam sem ninguém
|
|
23
|
+
* responder por elas. E o comentário do portão prometia o contrário.
|
|
24
|
+
*
|
|
25
|
+
* Falta de verificador é falta de autorização, e falta de autorização nega.
|
|
26
|
+
*/
|
|
27
|
+
export declare function pinGate(requiresPin: boolean | undefined, hasVerifier: boolean): PinGate;
|
|
28
|
+
//# sourceMappingURL=pinGate.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pinGate.d.ts","sourceRoot":"","sources":["../../src/screen/pinGate.ts"],"names":[],"mappings":"AAQA,+DAA+D;AAC/D,eAAO,MAAM,mBAAmB,0GACgD,CAAA;AAEhF,MAAM,MAAM,OAAO;AACjB,mCAAmC;AACjC;IAAE,IAAI,EAAE,KAAK,CAAA;CAAE;AACjB,+BAA+B;GAC7B;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE;AACnC,6BAA6B;GAC3B;IAAE,IAAI,EAAE,KAAK,CAAA;CAAE,CAAA;AAEnB;;;;;;;;;GASG;AACH,wBAAgB,OAAO,CACrB,WAAW,EAAE,OAAO,GAAG,SAAS,EAChC,WAAW,EAAE,OAAO,GACnB,OAAO,CAIT"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/** O que impede a reabertura, ou `null` quando ela pode ser oferecida. */
|
|
2
|
+
export type ReopenBlock = 'not-closed' | 'courtesy' | 'delivery' | 'paid';
|
|
3
|
+
export interface ReopenState {
|
|
4
|
+
/** `closed` é o único estado de onde se reabre. */
|
|
5
|
+
status?: string | null;
|
|
6
|
+
/** A comanda foi encerrada como cortesia. */
|
|
7
|
+
courtesy?: boolean;
|
|
8
|
+
/** É um pedido de delivery. */
|
|
9
|
+
delivery?: boolean;
|
|
10
|
+
/**
|
|
11
|
+
* A comanda já recebeu dinheiro?
|
|
12
|
+
*
|
|
13
|
+
* `undefined` é «NÃO SEI», e não sei também fecha a porta — mesma regra que
|
|
14
|
+
* o painel de fechadas já aplica à cortesia: esconder um botão custa um
|
|
15
|
+
* chamado, oferecê-lo errado custa uma conta cobrada duas vezes.
|
|
16
|
+
*/
|
|
17
|
+
hasPayment?: boolean;
|
|
18
|
+
}
|
|
19
|
+
export declare function reopenBlock(state: ReopenState): ReopenBlock | null;
|
|
20
|
+
/** A explicação do V1 para o caso da cortesia. As outras duas nem desenham. */
|
|
21
|
+
export declare const COURTESY_REOPEN_NOTE = "A reabertura exige um estorno controlado da cortesia.";
|
|
22
|
+
/** E a mesma explicação para a comanda que já recebeu dinheiro. */
|
|
23
|
+
export declare const PAID_REOPEN_NOTE = "A comanda j\u00E1 recebeu pagamento. A reabertura exige um estorno controlado.";
|
|
24
|
+
/** O rótulo muda com o que se reabre — «Mesa» ou «Comanda», como no V1. */
|
|
25
|
+
export declare function reopenLabel(atTable: boolean, busy?: boolean): string;
|
|
26
|
+
/**
|
|
27
|
+
* A pergunta antes de reabrir — literal, e ela diz o EFEITO.
|
|
28
|
+
*
|
|
29
|
+
* «Tem certeza?» não informa nada; esta frase diz para onde o estado volta, e
|
|
30
|
+
* é isso que deixa a pessoa decidir.
|
|
31
|
+
*/
|
|
32
|
+
export declare const REOPEN_CONFIRM = "Reabrir esta comanda? O status voltar\u00E1 para \"em andamento\".";
|
|
33
|
+
/** O aviso de sucesso, na palavra do que foi reaberto. */
|
|
34
|
+
export declare function reopenedNotice(atTable: boolean): string;
|
|
35
|
+
export declare const REOPEN_FAILED = "Erro ao reabrir";
|
|
36
|
+
//# sourceMappingURL=reopen.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reopen.d.ts","sourceRoot":"","sources":["../../src/screen/reopen.ts"],"names":[],"mappings":"AAyBA,0EAA0E;AAC1E,MAAM,MAAM,WAAW,GAAG,YAAY,GAAG,UAAU,GAAG,UAAU,GAAG,MAAM,CAAA;AAEzE,MAAM,WAAW,WAAW;IAC1B,mDAAmD;IACnD,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACtB,6CAA6C;IAC7C,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,+BAA+B;IAC/B,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB;;;;;;OAMG;IACH,UAAU,CAAC,EAAE,OAAO,CAAA;CACrB;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,WAAW,GAAG,WAAW,GAAG,IAAI,CAiBlE;AAED,+EAA+E;AAC/E,eAAO,MAAM,oBAAoB,0DAA0D,CAAA;AAE3F,mEAAmE;AACnE,eAAO,MAAM,gBAAgB,mFAA8E,CAAA;AAE3G,2EAA2E;AAC3E,wBAAgB,WAAW,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,UAAQ,GAAG,MAAM,CAGlE;AAED;;;;;GAKG;AACH,eAAO,MAAM,cAAc,uEAAgE,CAAA;AAE3F,0DAA0D;AAC1D,wBAAgB,cAAc,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,CAEvD;AAED,eAAO,MAAM,aAAa,oBAAoB,CAAA"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/** As visões do PDV, como o `PosMenu` as nomeia. */
|
|
2
|
+
export type PosView = 'floor' | 'catalog' | 'list' | 'shift' | 'reservations' | 'waitlist';
|
|
3
|
+
export declare function searchPlaceholder(view?: PosView | null): string | null;
|
|
4
|
+
/** A visão tem o que buscar? */
|
|
5
|
+
export declare function viewIsSearchable(view?: PosView | null): boolean;
|
|
6
|
+
/**
|
|
7
|
+
* A mesa casa com o termo — pela regra do V1, que é mais crua do que parece.
|
|
8
|
+
*
|
|
9
|
+
* O NÚMERO casa por `includes` sobre o texto dele: buscar `1` acende a 1, a
|
|
10
|
+
* 10, a 21 e a 100. Isso não é descuido — num salão de duzentas mesas o
|
|
11
|
+
* garçom digita o começo do número e varre o resto com o olho, e uma busca
|
|
12
|
+
* que só aceitasse o número exato o obrigaria a digitar os três dígitos.
|
|
13
|
+
*
|
|
14
|
+
* O NOME casa sem caixa. O V1 compara o número SEM baixar a caixa (dígito não
|
|
15
|
+
* tem caixa) e o nome COM — e repetir isso aqui mantém as duas telas
|
|
16
|
+
* concordando sobre o que "Varanda" acha.
|
|
17
|
+
*/
|
|
18
|
+
export declare function tableMatches(table: {
|
|
19
|
+
label?: string | null;
|
|
20
|
+
name?: string | null;
|
|
21
|
+
}, term: string): boolean;
|
|
22
|
+
//# sourceMappingURL=searchSubject.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"searchSubject.d.ts","sourceRoot":"","sources":["../../src/screen/searchSubject.ts"],"names":[],"mappings":"AAqBA,oDAAoD;AACpD,MAAM,MAAM,OAAO,GAAG,OAAO,GAAG,SAAS,GAAG,MAAM,GAAG,OAAO,GAAG,cAAc,GAAG,UAAU,CAAA;AAuB1F,wBAAgB,iBAAiB,CAAC,IAAI,CAAC,EAAE,OAAO,GAAG,IAAI,GAAG,MAAM,GAAG,IAAI,CAOtE;AAED,gCAAgC;AAChC,wBAAgB,gBAAgB,CAAC,IAAI,CAAC,EAAE,OAAO,GAAG,IAAI,GAAG,OAAO,CAE/D;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,YAAY,CAC1B,KAAK,EAAE;IAAE,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,EAAE,IAAI,EAAE,MAAM,GACnE,OAAO,CAOT"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/** A frase do V1, palavra por palavra. */
|
|
2
|
+
export declare const SERVICE_CHARGE_BAD_ANSWER = "Resposta inv\u00E1lida ao salvar a taxa de servi\u00E7o.";
|
|
3
|
+
export interface ServiceChargeAsked {
|
|
4
|
+
/** A taxa da comanda. */
|
|
5
|
+
percent: number;
|
|
6
|
+
/** Quem tem taxa própria. `null` = volta a herdar a da comanda. */
|
|
7
|
+
overrides: Array<{
|
|
8
|
+
guestId: string;
|
|
9
|
+
percent: number | null;
|
|
10
|
+
}>;
|
|
11
|
+
}
|
|
12
|
+
export interface ServiceChargeConfirmed {
|
|
13
|
+
/** O que a comanda diz agora. `null` = herda a da casa. */
|
|
14
|
+
percent: number | null;
|
|
15
|
+
/** O que cada participante diz agora. */
|
|
16
|
+
guests: Array<{
|
|
17
|
+
id: string;
|
|
18
|
+
percent: number | null;
|
|
19
|
+
}>;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Lança quando o banco não confirma o que a tela pediu.
|
|
23
|
+
*
|
|
24
|
+
* Só olha os participantes que foram PEDIDOS: quem não entrou no gesto não é
|
|
25
|
+
* assunto desta conferência, e exigir a lista inteira faria a checagem falhar
|
|
26
|
+
* quando outra pessoa mexesse na mesa ao mesmo tempo.
|
|
27
|
+
*/
|
|
28
|
+
export declare function assertServiceCharge(asked: ServiceChargeAsked, got: ServiceChargeConfirmed | null | undefined): void;
|
|
29
|
+
//# sourceMappingURL=serviceChargeCheck.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"serviceChargeCheck.d.ts","sourceRoot":"","sources":["../../src/screen/serviceChargeCheck.ts"],"names":[],"mappings":"AAmBA,0CAA0C;AAC1C,eAAO,MAAM,yBAAyB,6DAAmD,CAAA;AAEzF,MAAM,WAAW,kBAAkB;IACjC,yBAAyB;IACzB,OAAO,EAAE,MAAM,CAAA;IACf,mEAAmE;IACnE,SAAS,EAAE,KAAK,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,CAAC,CAAA;CAC9D;AAED,MAAM,WAAW,sBAAsB;IACrC,2DAA2D;IAC3D,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;IACtB,yCAAyC;IACzC,MAAM,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,CAAC,CAAA;CACtD;AAUD;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,kBAAkB,EACzB,GAAG,EAAE,sBAAsB,GAAG,IAAI,GAAG,SAAS,GAC7C,IAAI,CASN"}
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
/** Os motivos pelos quais a taxa não pode mudar agora. */
|
|
2
|
+
export type ServiceChargeBlock = 'unscoped-payment' | 'unresolved-pos' | 'busy';
|
|
3
|
+
/** O título é sempre o mesmo; o que muda é a explicação. */
|
|
4
|
+
export declare const SERVICE_CHARGE_BLOCK_TITLE = "N\u00E3o foi poss\u00EDvel alterar a taxa de servi\u00E7o";
|
|
5
|
+
export declare function serviceChargeBlockMessage(block: ServiceChargeBlock): string;
|
|
6
|
+
export interface ServiceChargeState {
|
|
7
|
+
/** Quanto a comanda já recebeu, no total. */
|
|
8
|
+
paidCents: number;
|
|
9
|
+
/** Quanto desse pagamento está preso a um participante específico. */
|
|
10
|
+
scopedPaidCents: number;
|
|
11
|
+
/** Um pagamento de POS ainda em conciliação. */
|
|
12
|
+
hasUnresolvedPosPayment?: boolean;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Pode mudar a taxa? `null` quando sim.
|
|
16
|
+
*
|
|
17
|
+
* A ordem das perguntas é a do V1: o POS em conciliação vem antes, porque é
|
|
18
|
+
* transitório — daqui a um minuto resolve sozinho, e mandar «confira a
|
|
19
|
+
* conciliação» num caso que ia se resolver gasta o tempo de alguém.
|
|
20
|
+
*/
|
|
21
|
+
export declare function serviceChargeBlock(state: ServiceChargeState): ServiceChargeBlock | null;
|
|
22
|
+
/**
|
|
23
|
+
* A saída de emergência — «Retirar somente a taxa pendente» — se oferece?
|
|
24
|
+
*
|
|
25
|
+
* Só depois de a mudança ter sido RECUSADA por pagamento sem dono, e só
|
|
26
|
+
* quando a intenção era BAIXAR a taxa. Não é item de menu: é o que resta
|
|
27
|
+
* quando o caminho normal fechou, e oferecê-la antes convidaria a usá-la como
|
|
28
|
+
* atalho para não cobrar.
|
|
29
|
+
*/
|
|
30
|
+
export declare function offersWaive(block: ServiceChargeBlock | null, { current, next }: {
|
|
31
|
+
current: number;
|
|
32
|
+
next: number;
|
|
33
|
+
}): boolean;
|
|
34
|
+
/** O motivo do «retirar» é FIXO — o sistema sabe por que está retirando. */
|
|
35
|
+
export declare const WAIVE_REASON = "Taxa de servi\u00E7o n\u00E3o recebida ap\u00F3s pagamento parcial";
|
|
36
|
+
/**
|
|
37
|
+
* Esta linha está ISENTA da taxa de serviço?
|
|
38
|
+
*
|
|
39
|
+
* A casa isenta por PRODUTO ou por CATEGORIA — couvert, brinde, item de revenda
|
|
40
|
+
* — e o V1 aplica as duas (`exemptProductIds` no produto, e a isenção de
|
|
41
|
+
* categoria resolvida pelo cardápio).
|
|
42
|
+
*
|
|
43
|
+
* Existe aqui porque a linha que vem do BANCO não carrega categoria:
|
|
44
|
+
* `categoryId` vive no item do menu. Só o cardápio marcava a isenção, então o
|
|
45
|
+
* couvert ficava isento enquanto a página vivia e voltava TRIBUTÁVEL depois de um
|
|
46
|
+
* reload — a taxa passava a incidir sobre o que a casa disse que não cobra, e
|
|
47
|
+
* ninguém vê isso acontecer.
|
|
48
|
+
*/
|
|
49
|
+
export declare function isExemptFromService(productId: string | undefined | null, rule?: {
|
|
50
|
+
productIds: Set<string>;
|
|
51
|
+
categoryIds: Set<string>;
|
|
52
|
+
/** `productId` → `categoryId`, montado do cardápio. */
|
|
53
|
+
categoryOf: Map<string, string>;
|
|
54
|
+
}): boolean;
|
|
55
|
+
/**
|
|
56
|
+
* A taxa que VALE para esta comanda.
|
|
57
|
+
*
|
|
58
|
+
* Duas fontes, e a ordem importa:
|
|
59
|
+
*
|
|
60
|
+
* 1. **O percentual da própria comanda**, quando existe — inclusive ZERO. Alguém
|
|
61
|
+
* escolheu, e escolha manual não se sobrescreve.
|
|
62
|
+
* 2. **A política da casa**, e só para comanda de MESA.
|
|
63
|
+
*
|
|
64
|
+
* A segunda linha é a regra do V1, escrita no `taxaServico.ts` dele:
|
|
65
|
+
*
|
|
66
|
+
* ```ts
|
|
67
|
+
* const taxaPrevista = c.tipo === 'dine_in' ? arred(c.itensSubtotal * percentual / 100) : 0
|
|
68
|
+
* ```
|
|
69
|
+
*
|
|
70
|
+
* Fora do salão a taxa prevista é ZERO. É a mesma regra que o
|
|
71
|
+
* `OrdersDashboard` aplica ao abrir a comanda de canal — *"Pedidos sem mesa
|
|
72
|
+
* (balcão, delivery e retirada) não começam com taxa"* — e as duas precisam
|
|
73
|
+
* concordar, senão a tela pede uma gorjeta que o banco não registrou.
|
|
74
|
+
*
|
|
75
|
+
* No Pertinho isso estava CERTO POR ACIDENTE: não existe linha em
|
|
76
|
+
* `plg_tables_settings`, então a política da casa lê 0 e o balcão não cobrava
|
|
77
|
+
* nada. No dia em que alguém salvasse 13% ali, o balcão passaria a mostrar 13%
|
|
78
|
+
* com o banco gravando 0 — e quem está no caixa seria cobrado de uma taxa que a
|
|
79
|
+
* casa diz não cobrar naquele canal.
|
|
80
|
+
*/
|
|
81
|
+
export declare function effectiveServicePercent(storedPercent: number | null | undefined, housePercent: number | null | undefined, kind: string | null | undefined): number;
|
|
82
|
+
/** O aviso âmbar que precede o botão. Explica por que este caminho existe. */
|
|
83
|
+
export declare const WAIVE_BANNER: string;
|
|
84
|
+
/** O rótulo do botão — «somente» é a palavra que o distingue de cancelar a taxa. */
|
|
85
|
+
export declare const WAIVE_LABEL = "Retirar somente a taxa pendente";
|
|
86
|
+
export declare const WAIVE_BAD_ANSWER = "Resposta inv\u00E1lida ao retirar a taxa pendente.";
|
|
87
|
+
/** O que o servidor precisa devolver — os quatro números, e nenhum opcional. */
|
|
88
|
+
export interface WaiveAnswer {
|
|
89
|
+
/** Quanto de taxa saiu do saldo. */
|
|
90
|
+
waivedAmount: number;
|
|
91
|
+
/** O que sobra na comanda depois disso. */
|
|
92
|
+
remainingAfter: number;
|
|
93
|
+
/** O percentual com que a comanda ficou. */
|
|
94
|
+
serviceChargePercent: number;
|
|
95
|
+
/** E o valor de taxa que restou. */
|
|
96
|
+
serviceChargeAmount: number;
|
|
97
|
+
/**
|
|
98
|
+
* Isto é a REPETIÇÃO de um gesto que já aconteceu.
|
|
99
|
+
*
|
|
100
|
+
* A RPC devolve `idempotent: true` quando a chave de operação já foi usada:
|
|
101
|
+
* ela responde o que aconteceu ANTES e não retira de novo (migration 027,
|
|
102
|
+
* *«sem isto o toque duplo tira a taxa duas vezes»*). O campo existia desde
|
|
103
|
+
* lá e ninguém o lia, então a tela anunciava «Taxa pendente retirada:
|
|
104
|
+
* R$ 12,00» — com o valor original, no presente, como se tivesse acabado de
|
|
105
|
+
* acontecer.
|
|
106
|
+
*
|
|
107
|
+
* Opcional porque um servidor antigo pode não mandá-lo, e ausente quer dizer
|
|
108
|
+
* «foi agora», que é o caso comum.
|
|
109
|
+
*/
|
|
110
|
+
idempotent?: boolean;
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* A resposta do servidor é conferida ANTES de a tela mudar.
|
|
114
|
+
*
|
|
115
|
+
* O V1 exige os quatro campos como número — `typeof !== 'number'` derruba a
|
|
116
|
+
* operação inteira. A razão é a mesma do `assertServiceCharge`: aqui a tela
|
|
117
|
+
* está prestes a afirmar ao operador que R$ X saíram da conta, e afirmar isso
|
|
118
|
+
* a partir de um campo ausente é inventar o número na frente de quem paga.
|
|
119
|
+
*/
|
|
120
|
+
export declare function assertWaive(answer: unknown): WaiveAnswer;
|
|
121
|
+
/**
|
|
122
|
+
* O que a tela diz depois de retirar — título e explicação, como no V1.
|
|
123
|
+
*
|
|
124
|
+
* A segunda linha muda conforme sobra ou não saldo, e essa é a informação que
|
|
125
|
+
* decide o próximo gesto do operador: se ainda resta, ele continua cobrando;
|
|
126
|
+
* se zerou, a comanda pode fechar. O V1 usa a mesma folga de meio centavo que
|
|
127
|
+
* usa no resto do arquivo.
|
|
128
|
+
*/
|
|
129
|
+
/** A frase do V1 para a repetição, sem ponto final, como lá. */
|
|
130
|
+
export declare const WAIVE_ALREADY = "A taxa pendente j\u00E1 estava retirada";
|
|
131
|
+
export declare function waiveNotice(waived: number, remainingAfter: number,
|
|
132
|
+
/** `true` = a RPC respondeu uma retirada que já havia acontecido. */
|
|
133
|
+
already?: boolean): {
|
|
134
|
+
title: string;
|
|
135
|
+
description: string;
|
|
136
|
+
};
|
|
137
|
+
/**
|
|
138
|
+
* A lista de participantes quitados não pôde ser lida — a frase do V1,
|
|
139
|
+
* palavra por palavra.
|
|
140
|
+
*
|
|
141
|
+
* Ele a mostra num toast E trava o salvar (`loadFailed`). Aqui ela é o
|
|
142
|
+
* impedimento da folha, que é onde o V2 diz por que um botão está desligado.
|
|
143
|
+
*/
|
|
144
|
+
export declare const GUESTS_UNAVAILABLE = "N\u00E3o foi poss\u00EDvel conferir os participantes quitados. Reabra a taxa para tentar novamente.";
|
|
145
|
+
//# sourceMappingURL=serviceChargeGuard.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"serviceChargeGuard.d.ts","sourceRoot":"","sources":["../../src/screen/serviceChargeGuard.ts"],"names":[],"mappings":"AAuBA,0DAA0D;AAC1D,MAAM,MAAM,kBAAkB,GAC1B,kBAAkB,GAClB,gBAAgB,GAChB,MAAM,CAAA;AAUV,4DAA4D;AAC5D,eAAO,MAAM,0BAA0B,8DAA+C,CAAA;AAEtF,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,kBAAkB,GAAG,MAAM,CAE3E;AAED,MAAM,WAAW,kBAAkB;IACjC,6CAA6C;IAC7C,SAAS,EAAE,MAAM,CAAA;IACjB,sEAAsE;IACtE,eAAe,EAAE,MAAM,CAAA;IACvB,gDAAgD;IAChD,uBAAuB,CAAC,EAAE,OAAO,CAAA;CAClC;AAED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,kBAAkB,GAAG,kBAAkB,GAAG,IAAI,CAKvF;AAED;;;;;;;GAOG;AACH,wBAAgB,WAAW,CACzB,KAAK,EAAE,kBAAkB,GAAG,IAAI,EAChC,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GACnD,OAAO,CAET;AAED,4EAA4E;AAC5E,eAAO,MAAM,YAAY,uEAAwD,CAAA;AAEjF;;;;;;;;;;;;GAYG;AACH,wBAAgB,mBAAmB,CACjC,SAAS,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,EACpC,IAAI,CAAC,EAAE;IACL,UAAU,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;IACvB,WAAW,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;IACxB,uDAAuD;IACvD,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAChC,GACA,OAAO,CAKT;AAED;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAgB,uBAAuB,CACrC,aAAa,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EACxC,YAAY,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EACvC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAC9B,MAAM,CAGR;AAUD,8EAA8E;AAC9E,eAAO,MAAM,YAAY,QAEmE,CAAA;AAE5F,oFAAoF;AACpF,eAAO,MAAM,WAAW,oCAAoC,CAAA;AAE5D,eAAO,MAAM,gBAAgB,uDAAkD,CAAA;AAE/E,gFAAgF;AAChF,MAAM,WAAW,WAAW;IAC1B,oCAAoC;IACpC,YAAY,EAAE,MAAM,CAAA;IACpB,2CAA2C;IAC3C,cAAc,EAAE,MAAM,CAAA;IACtB,4CAA4C;IAC5C,oBAAoB,EAAE,MAAM,CAAA;IAC5B,oCAAoC;IACpC,mBAAmB,EAAE,MAAM,CAAA;IAC3B;;;;;;;;;;;;OAYG;IACH,UAAU,CAAC,EAAE,OAAO,CAAA;CACrB;AAED;;;;;;;GAOG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,OAAO,GAAG,WAAW,CAUxD;AAED;;;;;;;GAOG;AACH,gEAAgE;AAChE,eAAO,MAAM,aAAa,4CAAuC,CAAA;AAEjE,wBAAgB,WAAW,CACzB,MAAM,EAAE,MAAM,EACd,cAAc,EAAE,MAAM;AACtB,qEAAqE;AACrE,OAAO,CAAC,EAAE,OAAO,GAChB;IACD,KAAK,EAAE,MAAM,CAAA;IACb,WAAW,EAAE,MAAM,CAAA;CACpB,CAWA;AAGD;;;;;;GAMG;AACH,eAAO,MAAM,kBAAkB,wGAC8D,CAAA"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A parte da taxa que JÁ FOI QUITADA, e por isso não se recalcula.
|
|
3
|
+
*
|
|
4
|
+
* O V1 monta a prévia como `settled_service_charge + Σ(base × percentual)`,
|
|
5
|
+
* onde as bases elegíveis vêm do servidor já SEM quem fechou a conta. Aqui as
|
|
6
|
+
* linhas chegam todas — inclusive as de quem quitou —, então o corte é feito
|
|
7
|
+
* aqui: o dono quitado sai do laço e o valor dele entra somado.
|
|
8
|
+
*
|
|
9
|
+
* Sem isto, baixar a taxa da mesa de 13% para 10% mostrava a fatia de quem já
|
|
10
|
+
* pagou recalculada em 10% — um número menor do que a casa recebeu, sobre
|
|
11
|
+
* dinheiro que já entrou. Latente hoje (o fechamento por participante é a onda
|
|
12
|
+
* seguinte) e escrito agora porque o consumidor está a um passo.
|
|
13
|
+
*/
|
|
14
|
+
export interface SettledService {
|
|
15
|
+
isSettled: (guestId: string) => boolean;
|
|
16
|
+
/** A taxa já quitada, em centavos, congelada. */
|
|
17
|
+
serviceCents: number;
|
|
18
|
+
}
|
|
19
|
+
export interface PreviewLine {
|
|
20
|
+
unitPriceCents: number;
|
|
21
|
+
quantity: number;
|
|
22
|
+
discountCents?: number;
|
|
23
|
+
/** Nulo/ausente = a linha é da MESA. */
|
|
24
|
+
guestId?: string | null;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Quanto de taxa esta comanda vai cobrar com os percentuais que estão na tela.
|
|
28
|
+
*
|
|
29
|
+
* `percentOf` devolve o percentual do participante — `null` quer dizer «usa o
|
|
30
|
+
* da mesa», que é diferente de zero. Sem `lines` (o app que ainda não as passa)
|
|
31
|
+
* cai na conta simples da mesa inteira, que é o comportamento de uma comanda
|
|
32
|
+
* sem participante e não inventa distribuição nenhuma.
|
|
33
|
+
*/
|
|
34
|
+
export declare function previewServiceCents(lines: readonly PreviewLine[] | undefined, eligibleCents: number, tablePercent: number, percentOf: (guestId: string) => number | null | undefined, settled?: SettledService): number;
|
|
35
|
+
//# sourceMappingURL=servicePreview.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"servicePreview.d.ts","sourceRoot":"","sources":["../../src/screen/servicePreview.ts"],"names":[],"mappings":"AA6BA;;;;;;;;;;;;GAYG;AACH,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAA;IACvC,iDAAiD;IACjD,YAAY,EAAE,MAAM,CAAA;CACrB;AAED,MAAM,WAAW,WAAW;IAC1B,cAAc,EAAE,MAAM,CAAA;IACtB,QAAQ,EAAE,MAAM,CAAA;IAChB,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,wCAAwC;IACxC,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CACxB;AAED;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,SAAS,WAAW,EAAE,GAAG,SAAS,EACzC,aAAa,EAAE,MAAM,EACrB,YAAY,EAAE,MAAM,EACpB,SAAS,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,MAAM,GAAG,IAAI,GAAG,SAAS,EACzD,OAAO,CAAC,EAAE,cAAc,GACvB,MAAM,CAyBR"}
|