@fayz-ai/core 0.21.0 → 0.22.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.
@@ -0,0 +1,15 @@
1
+ /** An acknowledged SQL rejection is different from losing the response. */
2
+ export declare function isSqlRejection(error: unknown): boolean;
3
+ /**
4
+ * In-memory command attempt for a mounted editor. A retry sends an immutable
5
+ * snapshot with the same key; it cannot turn into a different payment/entry.
6
+ * This is not durable recovery after reload and must never be advertised as it.
7
+ */
8
+ export declare function createPendingCommand<Input extends {
9
+ idempotencyKey?: string;
10
+ }>(key: () => string, context?: (input: Input) => string): {
11
+ readonly pending: boolean;
12
+ readonly running: boolean;
13
+ run<Result>(input: Input, write: (snapshot: Input) => Promise<Result>): Promise<Result>;
14
+ };
15
+ //# sourceMappingURL=pending-command.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pending-command.d.ts","sourceRoot":"","sources":["../../src/lib/pending-command.ts"],"names":[],"mappings":"AAAA,2EAA2E;AAC3E,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAGtD;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,SAAS;IAAE,cAAc,CAAC,EAAE,MAAM,CAAA;CAAE,EAC5E,GAAG,EAAE,MAAM,MAAM,EACjB,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,MAAM;;;QAQtB,MAAM,SAAS,KAAK,SAAS,CAAC,QAAQ,EAAE,KAAK,KAAK,OAAO,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;EAuBhG"}
@@ -28,6 +28,14 @@ export interface EscPosOptions {
28
28
  qr?: QrEncoder;
29
29
  /** Dots per QR module. 7 is comfortably scannable; 5 halves the payload. */
30
30
  qrModuleScale?: number;
31
+ /**
32
+ * This document emends onto one already on the paper, so it must not reset.
33
+ *
34
+ * Set it on every document of a strip except the first. The reset is not
35
+ * merely redundant there — `ESC @` immediately after a partial cut completes
36
+ * that cut, which is exactly what a strip is trying to avoid.
37
+ */
38
+ continued?: boolean;
31
39
  }
32
40
  export declare function renderEscPos(job: PrintJob, options?: EscPosOptions): Uint8Array;
33
41
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"escpos.d.ts","sourceRoot":"","sources":["../../src/printing/escpos.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAyD,UAAU,EAAE,QAAQ,EAAa,MAAM,aAAa,CAAA;AAwDzH,8EAA8E;AAC9E,QAAA,MAAM,SAAS;;;;;;;;;CAGL,CAAA;AAEV,MAAM,MAAM,QAAQ,GAAG,MAAM,OAAO,SAAS,CAAA;AA6I7C;;;;;;GAMG;AACH,MAAM,MAAM,SAAS,GAAG,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,EAAE,EAAE,CAAA;AAExD,MAAM,WAAW,aAAa;IAC5B,KAAK,CAAC,EAAE,UAAU,CAAA;IAClB,wEAAwE;IACxE,QAAQ,CAAC,EAAE,QAAQ,CAAA;IACnB,4EAA4E;IAC5E,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,EAAE,CAAC,EAAE,SAAS,CAAA;IACd,4EAA4E;IAC5E,aAAa,CAAC,EAAE,MAAM,CAAA;CACvB;AAED,wBAAgB,YAAY,CAAC,GAAG,EAAE,QAAQ,EAAE,OAAO,GAAE,aAAkB,GAAG,UAAU,CAiBnF"}
1
+ {"version":3,"file":"escpos.d.ts","sourceRoot":"","sources":["../../src/printing/escpos.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAyD,UAAU,EAAE,QAAQ,EAAa,MAAM,aAAa,CAAA;AAwDzH,8EAA8E;AAC9E,QAAA,MAAM,SAAS;;;;;;;;;CAGL,CAAA;AAEV,MAAM,MAAM,QAAQ,GAAG,MAAM,OAAO,SAAS,CAAA;AAwK7C;;;;;;GAMG;AACH,MAAM,MAAM,SAAS,GAAG,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,EAAE,EAAE,CAAA;AAExD,MAAM,WAAW,aAAa;IAC5B,KAAK,CAAC,EAAE,UAAU,CAAA;IAClB,wEAAwE;IACxE,QAAQ,CAAC,EAAE,QAAQ,CAAA;IACnB,4EAA4E;IAC5E,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,EAAE,CAAC,EAAE,SAAS,CAAA;IACd,4EAA4E;IAC5E,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB;;;;;;OAMG;IACH,SAAS,CAAC,EAAE,OAAO,CAAA;CACpB;AAED,wBAAgB,YAAY,CAAC,GAAG,EAAE,QAAQ,EAAE,OAAO,GAAE,aAAkB,GAAG,UAAU,CAkBnF"}
@@ -2,5 +2,5 @@ export { renderEscPos } from './escpos';
2
2
  export type { EscPosOptions, Codepage, QrEncoder } from './escpos';
3
3
  export { memoryPrinter } from './printer';
4
4
  export type { PrinterPort, PrintResult } from './printer';
5
- export type { PrintJob, PrintLine, PaperWidth, KitchenTicket, CustomerTicket, BillJob, FiscalReceipt, } from './print-job';
5
+ export type { PrintJob, PrintLine, PaperWidth, KitchenTicket, CustomerTicket, TicketPromo, BillJob, FiscalReceipt, } from './print-job';
6
6
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/printing/index.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA;AACvC,YAAY,EAAE,aAAa,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,UAAU,CAAA;AAClE,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAA;AACzC,YAAY,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,WAAW,CAAA;AACzD,YAAY,EACV,QAAQ,EAAE,SAAS,EAAE,UAAU,EAAE,aAAa,EAAE,cAAc,EAAE,OAAO,EAAE,aAAa,GACvF,MAAM,aAAa,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/printing/index.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA;AACvC,YAAY,EAAE,aAAa,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,UAAU,CAAA;AAClE,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAA;AACzC,YAAY,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,WAAW,CAAA;AACzD,YAAY,EACV,QAAQ,EAAE,SAAS,EAAE,UAAU,EAAE,aAAa,EAAE,cAAc,EAAE,WAAW,EAAE,OAAO,EAAE,aAAa,GACpG,MAAM,aAAa,CAAA"}
@@ -219,8 +219,15 @@ var Ribbon = class {
219
219
  this.bytes.push(...bytes);
220
220
  return this;
221
221
  }
222
- /** Initialize, then select the code page. ESC @ resets it, so order matters. */
222
+ /**
223
+ * Initialize, then select the code page. ESC @ resets it, so order matters.
224
+ *
225
+ * Skipped entirely for a continued document. `ESC @` arriving just after the
226
+ * previous document's partial cut makes the printer finish that cut, and the
227
+ * ticket meant to stay attached falls on the floor.
228
+ */
223
229
  init() {
230
+ if (this.opts.continued) return this;
224
231
  return this.raw(ESC, 64).raw(ESC, 116, CODEPAGES[this.opts.codepage].index);
225
232
  }
226
233
  align(at) {
@@ -288,6 +295,10 @@ var Ribbon = class {
288
295
  * is the only version that is portable across the hardware a restaurant
289
296
  * actually buys.
290
297
  */
298
+ /** Há codificador? Um QR prometido e não desenhado é pior que nenhum. */
299
+ canQr() {
300
+ return Boolean(this.opts.qr);
301
+ }
291
302
  qr(payload) {
292
303
  if (!this.opts.qr) throw new Error("renderEscPos: a QR encoder is required to print this job.");
293
304
  const matrix = this.opts.qr(payload);
@@ -318,9 +329,25 @@ var Ribbon = class {
318
329
  drawer() {
319
330
  return this.raw(ESC, 112, 0, 50, 250);
320
331
  }
321
- /** Feed clear of the head before cutting, or the cut lands mid-text. */
332
+ /**
333
+ * Partial cut, with the paper held by a tab.
334
+ *
335
+ * Three details, all of them measured on a Masung POS80 rather than chosen:
336
+ *
337
+ * GS V 1 Plain partial cut. `GS V 66 n` — "feed then partial" — is the
338
+ * tidier-looking command and this printer severs the paper
339
+ * completely when it is followed by more content.
340
+ * bare LFs `ESC d n` before the cut had the same effect. Line feeds do
341
+ * not.
342
+ * three Enough to clear the cutter, which sits a few millimetres above
343
+ * the head; fewer and the cut lands in the last line.
344
+ *
345
+ * A document that emends onto another must also skip `init()` — see
346
+ * `EscPosOptions.continued`. `ESC @` landing right after a partial cut
347
+ * finishes it.
348
+ */
322
349
  cut() {
323
- return this.feed(4).raw(GS, 86, 66, 0);
350
+ return this.raw(10, 10, 10).raw(GS, 86, 1);
324
351
  }
325
352
  done() {
326
353
  return Uint8Array.from(this.bytes);
@@ -355,6 +382,7 @@ function renderEscPos(job, options = {}) {
355
382
  dots: options.dots ?? width * 12,
356
383
  codepage: options.codepage ?? "cp860",
357
384
  qrModuleScale: options.qrModuleScale ?? 7,
385
+ continued: options.continued ?? false,
358
386
  ...options.qr ? { qr: options.qr } : {}
359
387
  };
360
388
  const r = new Ribbon(resolved).init();
@@ -390,6 +418,24 @@ function customer(r, job) {
390
418
  r.feed(1);
391
419
  for (const part of wrap(job.footer, r.width)) r.line(part);
392
420
  }
421
+ promo(r, job);
422
+ }
423
+ function promo(r, job) {
424
+ const promo2 = job.promo;
425
+ if (!promo2 || !promo2.headline && !promo2.offer && !promo2.site && !promo2.qr) return;
426
+ r.feed(1).rule();
427
+ if (promo2.headline) {
428
+ r.bold(true);
429
+ for (const part of wrap(promo2.headline, r.width)) r.line(part);
430
+ r.bold(false);
431
+ }
432
+ if (promo2.offer) {
433
+ r.feed(1).bold(true).size(2, 2);
434
+ for (const part of wrap(promo2.offer, Math.floor(r.width / 2))) r.line(part);
435
+ r.size(1, 1).bold(false).feed(1);
436
+ }
437
+ if (promo2.site) r.line(promo2.site);
438
+ if (promo2.qr && r.canQr()) r.feed(1).qr(promo2.qr);
393
439
  }
394
440
  function bill(r, job) {
395
441
  r.align("center").bold(true).line(job.brandName).bold(false).line(job.reference).rule().align("left");
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/printing/escpos.ts","../../src/printing/printer.ts"],"names":[],"mappings":"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AA,EAAM,MAAA,EAAK,GAAA;AAAA,EAAM,MAAA,EAAK,GAAA;AAAA,EAClF,MAAA,EAAK,GAAA;AAAA,EAAM,MAAA,EAAK,GAAA;AAAA,EAAM,MAAA,EAAK,GAAA;AAAA,EAAM,MAAA,EAAK,GAAA;AAAA,EAAM,MAAA,EAAK,GAAA;AAAA,EAAM,MAAA,EAAK,GAAA;AAAA,EAAM,MAAA,EAAK,GAAA;AAAA,EAAM,MAAA,EAAK,GAAA;AAAA,EAClF,MAAA,EAAK,GAAA;AAAA,EAAM,MAAA,EAAK,GAAA;AAAA,EAAM,MAAA,EAAK,GAAA;AAAA,EAAM,MAAA,EAAK,GAAA;AAAA,EAAM,MAAA,EAAK,GAAA;AAAA,EAAM,MAAA,EAAK,GAAA;AAAA,EAAM,MAAA,EAAK,GAAA;AAAA,EAAM,MAAA,EAAK,GAAA;AAAA,EAClF,MAAA,EAAK,GAAA;AAAA,EAAM,MAAA,EAAK,GAAA;AAAA,EAAM,MAAA,EAAK,GAAA;AAAA,EAAM,MAAA,EAAK,GAAA;AAAA,EAAM,MAAA,EAAK,GAAA;AAAA,EAAM,MAAA,EAAK,GAAA;AAAA,EAAM,MAAA,EAAK,GAAA;AAAA,EAAM,QAAA,EAAK,GAAA;AAAA,EAClF,MAAA,EAAK,GAAA;AAAA,EAAM,MAAA,EAAK,GAAA;AAAA,EAAM,MAAA,EAAK,GAAA;AAAA,EAAM,MAAA,EAAK,GAAA;AAAA,EAAM,MAAA,EAAK,GAAA;AAAA,EAAM,MAAA,EAAK,GAAA;AAAA,EAAM,MAAA,EAAK,GAAA;AAAA,EAAM,MAAA,EAAK,GAAA;AAAA,EAClF,MAAA,EAAK,GAAA;AAAA,EAAM,MAAA,EAAK,GAAA;AAAA,EAAM,MAAA,EAAK,GAAA;AAAA,EAAM,MAAA,EAAK,GAAA;AAAA,EAAM,MAAA,EAAK,GAAA;AAAA,EAAM,MAAA,EAAK,GAAA;AAAA,EAAM,MAAA,EAAK,GAAA;AAAA,EAAM,MAAA,EAAK,GAAA;AAAA,EAClF,MAAA,EAAK,GAAA;AAAA,EAAM,MAAA,EAAK,GAAA;AAAA,EAAM,MAAA,EAAK,GAAA;AAAA,EAAM,MAAA,EAAK,GAAA;AAAA,EAAM,MAAA,EAAK,GAAA;AAAA,EAAM,MAAA,EAAK,G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","file":"index.js","sourcesContent":["// ---------------------------------------------------------------------------\n// ESC/POS — a PrintJob rendered to the bytes a thermal printer understands.\n//\n// Pure: job in, Uint8Array out. No transport, no device handle, no I/O. That is\n// what lets the same renderer serve a network socket, a USB endpoint, an\n// Electron shell and a unit test, and it is why the bytes can be asserted.\n//\n// The Brazilian detail that breaks every naive implementation: accents. A\n// thermal printer boots on CP437, which has no ã, no ç and no õ, so \"Ração\n// Frango\" prints as \"Ra??o Frango\" — or worse, as line-drawing characters. The\n// fix is one command (ESC t) and a translation table, both below. UTF-8 bytes\n// sent raw are always wrong.\n// ---------------------------------------------------------------------------\n\nimport type { BillJob, CustomerTicket, FiscalReceipt, KitchenTicket, PaperWidth, PrintJob, PrintLine } from './print-job'\n\n/**\n * Money on paper, pinned to pt-BR/BRL rather than the app's active locale.\n *\n * A receipt is read by whoever is standing at the counter, not by whoever set\n * the operator's language. An English-locale POS printing `R$ 73.50` to a\n * Brazilian customer is a support call, and on a DANFE NFC-e it is wrong\n * against the XML the note was authorized with.\n */\nconst formatCents = (cents: number) =>\n new Intl.NumberFormat('pt-BR', { style: 'currency', currency: 'BRL' }).format(cents / 100)\n\nconst ESC = 0x1b\nconst GS = 0x1d\n\n/**\n * Code page 860 (Portuguese). Proved on the panel's Masung POS80: of the twelve\n * `ESC t` indices swept, only n=3 rendered `ração ÇÃO açaí` correctly.\n *\n * Not interchangeable with CP850 — `ã` is 0x84 here and 0xC6 there, so the\n * wrong pair prints a different letter rather than failing loudly.\n */\nconst CP860: Record<string, number> = {\n 'Ç': 0x80, 'ü': 0x81, 'é': 0x82, 'â': 0x83, 'ã': 0x84, 'à': 0x85, 'Á': 0x86, 'ç': 0x87,\n 'ê': 0x88, 'Ê': 0x89, 'è': 0x8a, 'Í': 0x8b, 'Ô': 0x8c, 'ì': 0x8d, 'Ã': 0x8e, 'Â': 0x8f,\n 'É': 0x90, 'À': 0x91, 'È': 0x92, 'ô': 0x93, 'õ': 0x94, 'ò': 0x95, 'Ú': 0x96, 'ù': 0x97,\n 'Ì': 0x98, 'Õ': 0x99, 'Ü': 0x9a, '¢': 0x9b, '£': 0x9c, 'Ù': 0x9d, '₧': 0x9e, 'Ó': 0x9f,\n 'á': 0xa0, 'í': 0xa1, 'ó': 0xa2, 'ú': 0xa3, 'ñ': 0xa4, 'Ñ': 0xa5, 'ª': 0xa6, 'º': 0xa7,\n '¿': 0xa8, 'Ò': 0xa9, '¬': 0xaa, '½': 0xab, '¼': 0xac, '¡': 0xad, '«': 0xae, '»': 0xaf,\n 'α': 0xe0, 'ß': 0xe1, 'Γ': 0xe2, 'π': 0xe3, 'Σ': 0xe4, 'σ': 0xe5, 'µ': 0xe6, 'τ': 0xe7,\n 'Φ': 0xe8, 'Θ': 0xe9, 'Ω': 0xea, 'δ': 0xeb, '∞': 0xec, 'φ': 0xed, 'ε': 0xee, '∩': 0xef,\n '≡': 0xf0, '±': 0xf1, '≥': 0xf2, '≤': 0xf3, '⌠': 0xf4, '⌡': 0xf5, '÷': 0xf6, '≈': 0xf7,\n '°': 0xf8, '∙': 0xf9, '·': 0xfa, '√': 0xfb, 'ⁿ': 0xfc, '²': 0xfd, '■': 0xfe, ' ': 0xff,\n}\n\n/** Code page 850 (Multilingual). Kept for printers that answer to `ESC t 2`. */\nconst CP850: Record<string, number> = {\n 'Ç': 0x80, 'ü': 0x81, 'é': 0x82, 'â': 0x83, 'ä': 0x84, 'à': 0x85, 'å': 0x86, 'ç': 0x87,\n 'ê': 0x88, 'ë': 0x89, 'è': 0x8a, 'ï': 0x8b, 'î': 0x8c, 'ì': 0x8d, 'Ä': 0x8e, 'Å': 0x8f,\n 'É': 0x90, 'æ': 0x91, 'Æ': 0x92, 'ô': 0x93, 'ö': 0x94, 'ò': 0x95, 'û': 0x96, 'ù': 0x97,\n 'ÿ': 0x98, 'Ö': 0x99, 'Ü': 0x9a, 'ø': 0x9b, '£': 0x9c, 'Ø': 0x9d, '×': 0x9e, 'ƒ': 0x9f,\n 'á': 0xa0, 'í': 0xa1, 'ó': 0xa2, 'ú': 0xa3, 'ñ': 0xa4, 'Ñ': 0xa5, 'ª': 0xa6, 'º': 0xa7,\n '¿': 0xa8, '®': 0xa9, '¬': 0xaa, '½': 0xab, '¼': 0xac, '¡': 0xad, '«': 0xae, '»': 0xaf,\n 'Á': 0xb5, 'Â': 0xb6, 'À': 0xb7, '©': 0xb8, '¢': 0xbd, '¥': 0xbe, 'ã': 0xc6, 'Ã': 0xc7,\n '¤': 0xcf, 'ð': 0xd0, 'Ð': 0xd1, 'Ê': 0xd2, 'Ë': 0xd3, 'È': 0xd4, 'ı': 0xd5, 'Í': 0xd6,\n 'Î': 0xd7, 'Ï': 0xd8, '¦': 0xdd, 'Ì': 0xde, 'Ó': 0xe0, 'ß': 0xe1, 'Ô': 0xe2, 'Ò': 0xe3,\n 'õ': 0xe4, 'Õ': 0xe5, 'µ': 0xe6, 'þ': 0xe7, 'Þ': 0xe8, 'Ú': 0xe9, 'Û': 0xea, 'Ù': 0xeb,\n 'ý': 0xec, 'Ý': 0xed, '¯': 0xee, '´': 0xef, '­': 0xf0, '±': 0xf1, '‗': 0xf2, '¾': 0xf3,\n '¶': 0xf4, '§': 0xf5, '÷': 0xf6, '¸': 0xf7, '°': 0xf8, '¨': 0xf9, '·': 0xfa, '¹': 0xfb,\n '³': 0xfc, '²': 0xfd, '■': 0xfe, ' ': 0xff,\n}\n\n/** Last resort for a character CP850 cannot represent, so a name still reads. */\nconst FOLD: Record<string, string> = { '–': '-', '—': '-', '‘': \"'\", '’': \"'\", '“': '\"', '”': '\"', '…': '...' }\n\n/** `ESC t` index per code page. The pair (index, table) must always match. */\nconst CODEPAGES = {\n cp860: { index: 0x03, table: CP860 },\n cp850: { index: 0x02, table: CP850 },\n} as const\n\nexport type Codepage = keyof typeof CODEPAGES\n\nfunction encode(text: string, table: Record<string, number>): number[] {\n const out: number[] = []\n for (const char of text) {\n const mapped = table[char]\n if (mapped !== undefined) { out.push(mapped); continue }\n const folded = FOLD[char]\n if (folded !== undefined) { for (const c of folded) out.push(c.charCodeAt(0)); continue }\n const code = char.charCodeAt(0)\n // Anything still outside 7-bit ASCII would print as garbage; '?' at least\n // tells the reader a character was lost instead of drawing a box.\n out.push(code >= 0x20 && code <= 0x7e ? code : 0x3f)\n }\n return out\n}\n\ntype Align = 'left' | 'center' | 'right'\n\ninterface Resolved {\n width: PaperWidth\n dots: number\n codepage: Codepage\n qr?: QrEncoder\n qrModuleScale: number\n}\n\n/** A byte buffer with the ESC/POS vocabulary spelled out as methods. */\nclass Ribbon {\n private readonly bytes: number[] = []\n readonly width: PaperWidth\n constructor(private readonly opts: Resolved) { this.width = opts.width }\n\n raw(...bytes: number[]): this { this.bytes.push(...bytes); return this }\n /** Initialize, then select the code page. ESC @ resets it, so order matters. */\n init(): this {\n return this.raw(ESC, 0x40).raw(ESC, 0x74, CODEPAGES[this.opts.codepage].index)\n }\n align(at: Align): this { return this.raw(ESC, 0x61, at === 'center' ? 1 : at === 'right' ? 2 : 0) }\n bold(on: boolean): this { return this.raw(ESC, 0x45, on ? 1 : 0) }\n /** GS ! packs width and height into one byte as two 4-bit multipliers. */\n size(w: 1 | 2 | 3 | 4, h: 1 | 2 | 3 | 4): this { return this.raw(GS, 0x21, ((w - 1) << 4) | (h - 1)) }\n text(value: string): this { this.bytes.push(...encode(value, CODEPAGES[this.opts.codepage].table)); return this }\n line(value = ''): this { return this.text(value).raw(0x0a) }\n feed(lines: number): this { return this.raw(ESC, 0x64, lines) }\n rule(char = '-'): this { return this.line(char.repeat(this.width)) }\n\n /**\n * Name left, value right, on one line. Wraps the name rather than letting a\n * long product push the price off the paper — a receipt whose total is not\n * on it is not a receipt.\n */\n columns(left: string, right: string, indent = 0): this {\n const room = this.width - right.length - indent - 1\n const pad = ' '.repeat(indent)\n if (room <= 0) return this.line(left).line(right.padStart(this.width))\n const [head, ...rest] = wrap(left, room)\n this.line(`${pad}${(head ?? '').padEnd(room)} ${right}`)\n for (const extra of rest) this.line(`${pad}${extra}`)\n return this\n }\n\n /**\n * A 1-bit bitmap as `GS v 0`. Rows are packed MSB-first and every row is\n * `dots / 8` bytes wide, padded — the printer reads a fixed stride and a\n * short row shears the whole image diagonally.\n */\n raster(rows: Uint8Array, heightDots: number): this {\n const perRow = this.opts.dots >> 3\n return this\n .raw(GS, 0x76, 0x30, 0x00, perRow & 0xff, (perRow >> 8) & 0xff,\n heightDots & 0xff, (heightDots >> 8) & 0xff)\n .raw(...rows)\n }\n\n /**\n * QR as a raster bitmap, NOT as `GS ( k`.\n *\n * The panel's Masung answers `GS k` (1D barcode) and `GS v 0` (raster) but\n * ignores every `GS ( k` variant — model 1 and 2, three module sizes, three\n * error levels all printed nothing and reported no error. Cheap ESC/POS\n * clones commonly skip the QR command set, so drawing the modules ourselves\n * is the only version that is portable across the hardware a restaurant\n * actually buys.\n */\n qr(payload: string): this {\n if (!this.opts.qr) throw new Error('renderEscPos: a QR encoder is required to print this job.')\n const matrix = this.opts.qr(payload)\n const modules = matrix.length\n if (!modules) throw new Error('renderEscPos: the QR encoder returned an empty matrix.')\n const scale = this.opts.qrModuleScale\n const quiet = 2\n const side = (modules + quiet * 2) * scale\n const perRow = this.opts.dots >> 3\n // Byte-align the left edge so the image starts on a whole byte; a bit\n // offset would cost a shift of every row for no visible gain.\n const left = Math.max(0, ((this.opts.dots - side) >> 1) & ~7)\n const rows = new Uint8Array(perRow * side)\n for (let y = 0; y < side; y++) {\n const my = Math.floor(y / scale) - quiet\n if (my < 0 || my >= modules) continue\n const row = matrix[my]\n if (!row) continue\n for (let x = 0; x < side; x++) {\n const mx = Math.floor(x / scale) - quiet\n if (mx < 0 || mx >= modules || !row[mx]) continue\n const px = left + x\n if (px >= this.opts.dots) continue\n rows[y * perRow + (px >> 3)]! |= 0x80 >> (px & 7)\n }\n }\n return this.raster(rows, side)\n }\n\n /** Pin 2, 50ms on / 250ms off — the timing every BR drawer ships wired for. */\n drawer(): this { return this.raw(ESC, 0x70, 0x00, 0x32, 0xfa) }\n /** Feed clear of the head before cutting, or the cut lands mid-text. */\n cut(): this { return this.feed(4).raw(GS, 0x56, 0x42, 0x00) }\n\n done(): Uint8Array { return Uint8Array.from(this.bytes) }\n}\n\nfunction wrap(text: string, width: number): string[] {\n const out: string[] = []\n let current = ''\n for (const word of text.split(/\\s+/).filter(Boolean)) {\n if (!current) { current = word }\n else if (current.length + 1 + word.length <= width) { current += ` ${word}` }\n else { out.push(current); current = word }\n while (current.length > width) { out.push(current.slice(0, width)); current = current.slice(width) }\n }\n if (current) out.push(current)\n return out.length ? out : ['']\n}\n\nconst time = (at: Date) =>\n new Intl.DateTimeFormat('pt-BR', { dateStyle: 'short', timeStyle: 'short', timeZone: 'America/Sao_Paulo' }).format(at)\n\n/** 44 digits are unreadable in one run; SEFAZ groups them in fours. */\nconst groupKey = (key: string) => (key.match(/.{1,4}/g) ?? []).join(' ')\n\n/**\n * Encodes a QR payload into a module matrix (`true` = dark).\n *\n * Injected rather than bundled: core carries no QR library, and every surface\n * that prints already has one — the browser can hand over a canvas-derived\n * matrix, a worker can use whatever the app installed.\n */\nexport type QrEncoder = (payload: string) => boolean[][]\n\nexport interface EscPosOptions {\n width?: PaperWidth\n /** Defaults to CP860 — the code page the Brazilian panels answer to. */\n codepage?: Codepage\n /** Printable dots. Defaults to 12 per character column (48 chars = 576). */\n dots?: number\n qr?: QrEncoder\n /** Dots per QR module. 7 is comfortably scannable; 5 halves the payload. */\n qrModuleScale?: number\n}\n\nexport function renderEscPos(job: PrintJob, options: EscPosOptions = {}): Uint8Array {\n const width = options.width ?? 48\n const resolved: Resolved = {\n width,\n dots: options.dots ?? width * 12,\n codepage: options.codepage ?? 'cp860',\n qrModuleScale: options.qrModuleScale ?? 7,\n ...(options.qr ? { qr: options.qr } : {}),\n }\n const r = new Ribbon(resolved).init()\n if (job.kind === 'kitchen_ticket') kitchen(r, job)\n else if (job.kind === 'customer_ticket') customer(r, job)\n else if (job.kind === 'bill') bill(r, job)\n else fiscal(r, job)\n if (job.openDrawer) r.drawer()\n if (job.cut !== false) r.cut()\n return r.done()\n}\n\nfunction kitchen(r: Ribbon, job: KitchenTicket): void {\n r.align('center').size(3, 3).bold(true).line(job.ticket).bold(false).size(1, 1)\n r.line(job.serviceMode.toUpperCase()).line(time(job.placedAt)).rule().align('left')\n for (const line of job.lines) {\n // Quantity at double height: a cook misreading 1 for 7 is a remade plate.\n r.size(1, 2).bold(true).text(`${line.quantity}x `).bold(false)\n for (const [i, part] of wrap(line.name, r.width - 4).entries()) r.line(i === 0 ? part : ` ${part}`)\n r.size(1, 1)\n if (line.note) for (const part of wrap(line.note, r.width - 4)) r.line(` ${part}`)\n }\n if (job.notes) { r.rule().bold(true).line('OBS:').bold(false); for (const p of wrap(job.notes, r.width)) r.line(p) }\n}\n\nfunction customer(r: Ribbon, job: CustomerTicket): void {\n r.align('center').bold(true).line(job.brandName).bold(false).feed(1)\n r.size(4, 4).bold(true).line(job.ticket).bold(false).size(1, 1)\n r.line(job.serviceMode.toUpperCase()).line(job.reference).feed(1)\n r.size(1, 2).line(formatCents(job.totalCents)).size(1, 1)\n if (!job.paid) r.feed(1).bold(true).line('PENDENTE').line('PASSE NO CAIXA').bold(false)\n if (job.footer) { r.feed(1); for (const part of wrap(job.footer, r.width)) r.line(part) }\n}\n\nfunction bill(r: Ribbon, job: BillJob): void {\n r.align('center').bold(true).line(job.brandName).bold(false).line(job.reference).rule().align('left')\n for (const line of job.lines) priced(r, line)\n r.rule()\n r.columns('Subtotal', formatCents(job.subtotalCents))\n if (job.serviceChargeCents) r.columns('Serviço', formatCents(job.serviceChargeCents))\n r.bold(true).size(1, 2).columns('TOTAL', formatCents(job.totalCents)).size(1, 1).bold(false)\n r.align('center').feed(1)\n for (const part of wrap(job.footer ?? 'Este documento não é documento fiscal', r.width)) r.line(part)\n}\n\nfunction priced(r: Ribbon, line: PrintLine): void {\n const total = (line.unitPriceCents ?? 0) * line.quantity\n r.columns(`${line.quantity}x ${line.name}`, formatCents(total))\n if (line.note) for (const part of wrap(line.note, r.width - 4)) r.line(` ${part}`)\n}\n\nfunction fiscal(r: Ribbon, job: FiscalReceipt): void {\n r.align('center').bold(true).line(job.emitter.name).bold(false)\n r.line(`CNPJ: ${job.emitter.cnpj}`)\n for (const part of wrap(job.emitter.address, r.width)) r.line(part)\n r.rule()\n for (const part of wrap('DANFE NFC-e - Documento Auxiliar da Nota Fiscal de Consumidor Eletrônica', r.width)) r.line(part)\n // The banner is a legal requirement of the test environment, and it goes\n // ABOVE the items where nobody can miss it — not in a footer.\n if (job.homologation) {\n r.rule('=').bold(true)\n for (const part of wrap('EMITIDA EM AMBIENTE DE HOMOLOGAÇÃO - SEM VALOR FISCAL', r.width)) r.line(part)\n r.bold(false).rule('=')\n }\n r.align('left').rule()\n r.line('COD DESCRICAO QTD UN VL UN VL TOT')\n r.rule()\n for (const line of job.lines) {\n r.line(`${line.code} ${line.name}`.slice(0, r.width))\n r.columns(` ${line.quantity} ${line.unit} x ${formatCents(line.unitPriceCents ?? 0)}`, formatCents(line.totalCents))\n }\n r.rule()\n r.columns('Qtd. total de itens', String(job.lines.length))\n r.bold(true).size(1, 2).columns('VALOR TOTAL R$', formatCents(job.totalCents)).size(1, 1).bold(false)\n for (const payment of job.payments) r.columns(payment.label, formatCents(payment.amountCents))\n if (job.changeCents) r.columns('Troco', formatCents(job.changeCents))\n r.rule().align('center')\n for (const part of wrap('Consulte pela Chave de Acesso em', r.width)) r.line(part)\n r.line(job.lookupUrl)\n r.feed(1).line(groupKey(job.accessKey)).feed(1)\n r.line(job.consumer?.document ? `CONSUMIDOR: ${job.consumer.document}` : 'CONSUMIDOR NAO IDENTIFICADO')\n if (job.consumer?.name) r.line(job.consumer.name)\n r.rule()\n r.line(`NFC-e n. ${job.number} Serie ${job.series}`)\n r.line(time(job.issuedAt))\n for (const part of wrap(`Protocolo de Autorizacao: ${job.protocol}`, r.width)) r.line(part)\n r.feed(1).qr(job.qrCode)\n}\n","// ---------------------------------------------------------------------------\n// PrinterPort — the seam between \"what to print\" and \"how it reaches paper\".\n//\n// Every adapter behind this is a different answer to the transport question,\n// and the app must not know which one is installed:\n//\n// memoryPrinter records jobs, prints nothing. Tests and the diagnostics\n// panel, where \"what would have printed\" is the answer.\n// ePOS Epson TM over its built-in HTTP service. No install, no\n// daemon, works from the browser build.\n// raw 9100 any network ESC/POS printer, through a local bridge,\n// because a browser cannot open a TCP socket.\n// usb Electron shell (FAY-1483) or WebUSB.\n//\n// The renderer is shared by all of them: only the last hop differs.\n// ---------------------------------------------------------------------------\n\nimport { renderEscPos, type EscPosOptions } from './escpos'\nimport type { PrintJob } from './print-job'\n\nexport interface PrintResult {\n ok: boolean\n /** Written for an operator mid-service, not for a log file. */\n message?: string\n}\n\nexport interface PrinterPort {\n readonly id: string\n print(job: PrintJob): Promise<PrintResult>\n /** Prove the paper path without a sale. This is what support asks for. */\n selfTest?(): Promise<PrintResult>\n}\n\n/**\n * Records instead of printing.\n *\n * Not a placeholder to be deleted: a totem with no printer attached still has\n * to complete a sale, and a diagnostics screen still has to show what the last\n * job looked like. Failing the sale because the paper ran out is worse than\n * printing nothing.\n */\nexport function memoryPrinter(options: EscPosOptions = {}): PrinterPort & { readonly jobs: readonly PrintJob[] } {\n const jobs: PrintJob[] = []\n return {\n id: 'memory',\n get jobs() { return jobs },\n async print(job) {\n jobs.push(job)\n // Rendered even though it is discarded: a job that cannot be rendered\n // must fail here, in development, and not on the night it first prints.\n renderEscPos(job, options)\n return { ok: true }\n },\n }\n}\n"]}
1
+ {"version":3,"sources":["../../src/printing/escpos.ts","../../src/printing/printer.ts"],"names":["promo"],"mappings":"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AA,EAAM,MAAA,EAAK,GAAA;AAAA,EAAM,MAAA,EAAK,GAAA;AAAA,EAClF,MAAA,EAAK,GAAA;AAAA,EAAM,MAAA,EAAK,GAAA;AAAA,EAAM,MAAA,EAAK,GAAA;AAAA,EAAM,MAAA,EAAK,GAAA;AAAA,EAAM,MAAA,EAAK,GAAA;AAAA,EAAM,MAAA,EAAK,GAAA;AAAA,EAAM,MAAA,EAAK,GAAA;AAAA,EAAM,MAAA,EAAK,GAAA;AAAA,EAClF,MAAA,EAAK,GAAA;AAAA,EAAM,MAAA,EAAK,GAAA;AAAA,EAAM,MAAA,EAAK,GAAA;AAAA,EAAM,MAAA,EAAK,GAAA;AAAA,EAAM,MAAA,EAAK,GAAA;AAAA,EAAM,MAAA,EAAK,GAAA;AAAA,EAAM,MAAA,EAAK,GAAA;AAAA,EAAM,MAAA,EAAK,GAAA;AAAA,EAClF,MAAA,EAAK,GAAA;AAAA,EAAM,MAAA,EAAK,GAAA;AAAA,EAAM,MAAA,EAAK,GAAA;AAAA,EAAM,MAAA,EAAK,GAAA;AAAA,EAAM,MAAA,EAAK,GAAA;AAAA,EAAM,MAAA,EAAK,GAAA;AAAA,EAAM,MAAA,EAAK,GAAA;AAAA,EAAM,QAAA,EAAK,GAAA;AAAA,EAClF,MAAA,EAAK,GAAA;AAAA,EAAM,MAAA,EAAK,GAAA;AAAA,EAAM,MAAA,EAAK,GAAA;AAAA,EAAM,MAAA,EAAK,GAAA;AAAA,EAAM,MAAA,EAAK,GAAA;AAAA,EAAM,MAAA,EAAK,GAAA;AAAA,EAAM,MAAA,EAAK,GAAA;AAAA,EAAM,MAAA,EAAK,GAAA;AAAA,EAClF,MAAA,EAAK,GAAA;AAAA,EAAM,MAAA,EAAK,GAAA;AAAA,EAAM,MAAA,EAAK,GAAA;AAAA,EAAM,MAAA,EAAK,GAAA;AAAA,EAAM,MAAA,EAAK,GAAA;AAAA,EAAM,MAAA,EAAK,GAAA;AAAA,EAAM,MAAA,EAAK,GAAA;AAAA,EAAM,MAAA,EAAK,GAAA;AAAA,EAClF,MAAA,EAAK,GAAA;AAAA,EAAM,MAAA,EAAK,GAAA;AAAA,EAAM,MAAA,EAAK,GAAA;AAAA,EAAM,MAAA,EAAK,GAAA;AAAA,EAAM,MAAA,EAAK,GAAA;AAAA,EAAM,MAAA,EAAK,G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","file":"index.js","sourcesContent":["// ---------------------------------------------------------------------------\n// ESC/POS — a PrintJob rendered to the bytes a thermal printer understands.\n//\n// Pure: job in, Uint8Array out. No transport, no device handle, no I/O. That is\n// what lets the same renderer serve a network socket, a USB endpoint, an\n// Electron shell and a unit test, and it is why the bytes can be asserted.\n//\n// The Brazilian detail that breaks every naive implementation: accents. A\n// thermal printer boots on CP437, which has no ã, no ç and no õ, so \"Ração\n// Frango\" prints as \"Ra??o Frango\" — or worse, as line-drawing characters. The\n// fix is one command (ESC t) and a translation table, both below. UTF-8 bytes\n// sent raw are always wrong.\n// ---------------------------------------------------------------------------\n\nimport type { BillJob, CustomerTicket, FiscalReceipt, KitchenTicket, PaperWidth, PrintJob, PrintLine } from './print-job'\n\n/**\n * Money on paper, pinned to pt-BR/BRL rather than the app's active locale.\n *\n * A receipt is read by whoever is standing at the counter, not by whoever set\n * the operator's language. An English-locale POS printing `R$ 73.50` to a\n * Brazilian customer is a support call, and on a DANFE NFC-e it is wrong\n * against the XML the note was authorized with.\n */\nconst formatCents = (cents: number) =>\n new Intl.NumberFormat('pt-BR', { style: 'currency', currency: 'BRL' }).format(cents / 100)\n\nconst ESC = 0x1b\nconst GS = 0x1d\n\n/**\n * Code page 860 (Portuguese). Proved on the panel's Masung POS80: of the twelve\n * `ESC t` indices swept, only n=3 rendered `ração ÇÃO açaí` correctly.\n *\n * Not interchangeable with CP850 — `ã` is 0x84 here and 0xC6 there, so the\n * wrong pair prints a different letter rather than failing loudly.\n */\nconst CP860: Record<string, number> = {\n 'Ç': 0x80, 'ü': 0x81, 'é': 0x82, 'â': 0x83, 'ã': 0x84, 'à': 0x85, 'Á': 0x86, 'ç': 0x87,\n 'ê': 0x88, 'Ê': 0x89, 'è': 0x8a, 'Í': 0x8b, 'Ô': 0x8c, 'ì': 0x8d, 'Ã': 0x8e, 'Â': 0x8f,\n 'É': 0x90, 'À': 0x91, 'È': 0x92, 'ô': 0x93, 'õ': 0x94, 'ò': 0x95, 'Ú': 0x96, 'ù': 0x97,\n 'Ì': 0x98, 'Õ': 0x99, 'Ü': 0x9a, '¢': 0x9b, '£': 0x9c, 'Ù': 0x9d, '₧': 0x9e, 'Ó': 0x9f,\n 'á': 0xa0, 'í': 0xa1, 'ó': 0xa2, 'ú': 0xa3, 'ñ': 0xa4, 'Ñ': 0xa5, 'ª': 0xa6, 'º': 0xa7,\n '¿': 0xa8, 'Ò': 0xa9, '¬': 0xaa, '½': 0xab, '¼': 0xac, '¡': 0xad, '«': 0xae, '»': 0xaf,\n 'α': 0xe0, 'ß': 0xe1, 'Γ': 0xe2, 'π': 0xe3, 'Σ': 0xe4, 'σ': 0xe5, 'µ': 0xe6, 'τ': 0xe7,\n 'Φ': 0xe8, 'Θ': 0xe9, 'Ω': 0xea, 'δ': 0xeb, '∞': 0xec, 'φ': 0xed, 'ε': 0xee, '∩': 0xef,\n '≡': 0xf0, '±': 0xf1, '≥': 0xf2, '≤': 0xf3, '⌠': 0xf4, '⌡': 0xf5, '÷': 0xf6, '≈': 0xf7,\n '°': 0xf8, '∙': 0xf9, '·': 0xfa, '√': 0xfb, 'ⁿ': 0xfc, '²': 0xfd, '■': 0xfe, ' ': 0xff,\n}\n\n/** Code page 850 (Multilingual). Kept for printers that answer to `ESC t 2`. */\nconst CP850: Record<string, number> = {\n 'Ç': 0x80, 'ü': 0x81, 'é': 0x82, 'â': 0x83, 'ä': 0x84, 'à': 0x85, 'å': 0x86, 'ç': 0x87,\n 'ê': 0x88, 'ë': 0x89, 'è': 0x8a, 'ï': 0x8b, 'î': 0x8c, 'ì': 0x8d, 'Ä': 0x8e, 'Å': 0x8f,\n 'É': 0x90, 'æ': 0x91, 'Æ': 0x92, 'ô': 0x93, 'ö': 0x94, 'ò': 0x95, 'û': 0x96, 'ù': 0x97,\n 'ÿ': 0x98, 'Ö': 0x99, 'Ü': 0x9a, 'ø': 0x9b, '£': 0x9c, 'Ø': 0x9d, '×': 0x9e, 'ƒ': 0x9f,\n 'á': 0xa0, 'í': 0xa1, 'ó': 0xa2, 'ú': 0xa3, 'ñ': 0xa4, 'Ñ': 0xa5, 'ª': 0xa6, 'º': 0xa7,\n '¿': 0xa8, '®': 0xa9, '¬': 0xaa, '½': 0xab, '¼': 0xac, '¡': 0xad, '«': 0xae, '»': 0xaf,\n 'Á': 0xb5, 'Â': 0xb6, 'À': 0xb7, '©': 0xb8, '¢': 0xbd, '¥': 0xbe, 'ã': 0xc6, 'Ã': 0xc7,\n '¤': 0xcf, 'ð': 0xd0, 'Ð': 0xd1, 'Ê': 0xd2, 'Ë': 0xd3, 'È': 0xd4, 'ı': 0xd5, 'Í': 0xd6,\n 'Î': 0xd7, 'Ï': 0xd8, '¦': 0xdd, 'Ì': 0xde, 'Ó': 0xe0, 'ß': 0xe1, 'Ô': 0xe2, 'Ò': 0xe3,\n 'õ': 0xe4, 'Õ': 0xe5, 'µ': 0xe6, 'þ': 0xe7, 'Þ': 0xe8, 'Ú': 0xe9, 'Û': 0xea, 'Ù': 0xeb,\n 'ý': 0xec, 'Ý': 0xed, '¯': 0xee, '´': 0xef, '­': 0xf0, '±': 0xf1, '‗': 0xf2, '¾': 0xf3,\n '¶': 0xf4, '§': 0xf5, '÷': 0xf6, '¸': 0xf7, '°': 0xf8, '¨': 0xf9, '·': 0xfa, '¹': 0xfb,\n '³': 0xfc, '²': 0xfd, '■': 0xfe, ' ': 0xff,\n}\n\n/** Last resort for a character CP850 cannot represent, so a name still reads. */\nconst FOLD: Record<string, string> = { '–': '-', '—': '-', '‘': \"'\", '’': \"'\", '“': '\"', '”': '\"', '…': '...' }\n\n/** `ESC t` index per code page. The pair (index, table) must always match. */\nconst CODEPAGES = {\n cp860: { index: 0x03, table: CP860 },\n cp850: { index: 0x02, table: CP850 },\n} as const\n\nexport type Codepage = keyof typeof CODEPAGES\n\nfunction encode(text: string, table: Record<string, number>): number[] {\n const out: number[] = []\n for (const char of text) {\n const mapped = table[char]\n if (mapped !== undefined) { out.push(mapped); continue }\n const folded = FOLD[char]\n if (folded !== undefined) { for (const c of folded) out.push(c.charCodeAt(0)); continue }\n const code = char.charCodeAt(0)\n // Anything still outside 7-bit ASCII would print as garbage; '?' at least\n // tells the reader a character was lost instead of drawing a box.\n out.push(code >= 0x20 && code <= 0x7e ? code : 0x3f)\n }\n return out\n}\n\ntype Align = 'left' | 'center' | 'right'\n\ninterface Resolved {\n width: PaperWidth\n dots: number\n codepage: Codepage\n qr?: QrEncoder\n qrModuleScale: number\n continued: boolean\n}\n\n/** A byte buffer with the ESC/POS vocabulary spelled out as methods. */\nclass Ribbon {\n private readonly bytes: number[] = []\n readonly width: PaperWidth\n constructor(private readonly opts: Resolved) { this.width = opts.width }\n\n raw(...bytes: number[]): this { this.bytes.push(...bytes); return this }\n /**\n * Initialize, then select the code page. ESC @ resets it, so order matters.\n *\n * Skipped entirely for a continued document. `ESC @` arriving just after the\n * previous document's partial cut makes the printer finish that cut, and the\n * ticket meant to stay attached falls on the floor.\n */\n init(): this {\n if (this.opts.continued) return this\n return this.raw(ESC, 0x40).raw(ESC, 0x74, CODEPAGES[this.opts.codepage].index)\n }\n align(at: Align): this { return this.raw(ESC, 0x61, at === 'center' ? 1 : at === 'right' ? 2 : 0) }\n bold(on: boolean): this { return this.raw(ESC, 0x45, on ? 1 : 0) }\n /** GS ! packs width and height into one byte as two 4-bit multipliers. */\n size(w: 1 | 2 | 3 | 4, h: 1 | 2 | 3 | 4): this { return this.raw(GS, 0x21, ((w - 1) << 4) | (h - 1)) }\n text(value: string): this { this.bytes.push(...encode(value, CODEPAGES[this.opts.codepage].table)); return this }\n line(value = ''): this { return this.text(value).raw(0x0a) }\n feed(lines: number): this { return this.raw(ESC, 0x64, lines) }\n rule(char = '-'): this { return this.line(char.repeat(this.width)) }\n\n /**\n * Name left, value right, on one line. Wraps the name rather than letting a\n * long product push the price off the paper — a receipt whose total is not\n * on it is not a receipt.\n */\n columns(left: string, right: string, indent = 0): this {\n const room = this.width - right.length - indent - 1\n const pad = ' '.repeat(indent)\n if (room <= 0) return this.line(left).line(right.padStart(this.width))\n const [head, ...rest] = wrap(left, room)\n this.line(`${pad}${(head ?? '').padEnd(room)} ${right}`)\n for (const extra of rest) this.line(`${pad}${extra}`)\n return this\n }\n\n /**\n * A 1-bit bitmap as `GS v 0`. Rows are packed MSB-first and every row is\n * `dots / 8` bytes wide, padded — the printer reads a fixed stride and a\n * short row shears the whole image diagonally.\n */\n raster(rows: Uint8Array, heightDots: number): this {\n const perRow = this.opts.dots >> 3\n return this\n .raw(GS, 0x76, 0x30, 0x00, perRow & 0xff, (perRow >> 8) & 0xff,\n heightDots & 0xff, (heightDots >> 8) & 0xff)\n .raw(...rows)\n }\n\n /**\n * QR as a raster bitmap, NOT as `GS ( k`.\n *\n * The panel's Masung answers `GS k` (1D barcode) and `GS v 0` (raster) but\n * ignores every `GS ( k` variant — model 1 and 2, three module sizes, three\n * error levels all printed nothing and reported no error. Cheap ESC/POS\n * clones commonly skip the QR command set, so drawing the modules ourselves\n * is the only version that is portable across the hardware a restaurant\n * actually buys.\n */\n /** Há codificador? Um QR prometido e não desenhado é pior que nenhum. */\n canQr(): boolean { return Boolean(this.opts.qr) }\n\n qr(payload: string): this {\n if (!this.opts.qr) throw new Error('renderEscPos: a QR encoder is required to print this job.')\n const matrix = this.opts.qr(payload)\n const modules = matrix.length\n if (!modules) throw new Error('renderEscPos: the QR encoder returned an empty matrix.')\n const scale = this.opts.qrModuleScale\n const quiet = 2\n const side = (modules + quiet * 2) * scale\n const perRow = this.opts.dots >> 3\n // Byte-align the left edge so the image starts on a whole byte; a bit\n // offset would cost a shift of every row for no visible gain.\n const left = Math.max(0, ((this.opts.dots - side) >> 1) & ~7)\n const rows = new Uint8Array(perRow * side)\n for (let y = 0; y < side; y++) {\n const my = Math.floor(y / scale) - quiet\n if (my < 0 || my >= modules) continue\n const row = matrix[my]\n if (!row) continue\n for (let x = 0; x < side; x++) {\n const mx = Math.floor(x / scale) - quiet\n if (mx < 0 || mx >= modules || !row[mx]) continue\n const px = left + x\n if (px >= this.opts.dots) continue\n rows[y * perRow + (px >> 3)]! |= 0x80 >> (px & 7)\n }\n }\n return this.raster(rows, side)\n }\n\n /** Pin 2, 50ms on / 250ms off — the timing every BR drawer ships wired for. */\n drawer(): this { return this.raw(ESC, 0x70, 0x00, 0x32, 0xfa) }\n /**\n * Partial cut, with the paper held by a tab.\n *\n * Three details, all of them measured on a Masung POS80 rather than chosen:\n *\n * GS V 1 Plain partial cut. `GS V 66 n` — \"feed then partial\" — is the\n * tidier-looking command and this printer severs the paper\n * completely when it is followed by more content.\n * bare LFs `ESC d n` before the cut had the same effect. Line feeds do\n * not.\n * three Enough to clear the cutter, which sits a few millimetres above\n * the head; fewer and the cut lands in the last line.\n *\n * A document that emends onto another must also skip `init()` — see\n * `EscPosOptions.continued`. `ESC @` landing right after a partial cut\n * finishes it.\n */\n cut(): this { return this.raw(0x0a, 0x0a, 0x0a).raw(GS, 0x56, 0x01) }\n\n done(): Uint8Array { return Uint8Array.from(this.bytes) }\n}\n\nfunction wrap(text: string, width: number): string[] {\n const out: string[] = []\n let current = ''\n for (const word of text.split(/\\s+/).filter(Boolean)) {\n if (!current) { current = word }\n else if (current.length + 1 + word.length <= width) { current += ` ${word}` }\n else { out.push(current); current = word }\n while (current.length > width) { out.push(current.slice(0, width)); current = current.slice(width) }\n }\n if (current) out.push(current)\n return out.length ? out : ['']\n}\n\nconst time = (at: Date) =>\n new Intl.DateTimeFormat('pt-BR', { dateStyle: 'short', timeStyle: 'short', timeZone: 'America/Sao_Paulo' }).format(at)\n\n/** 44 digits are unreadable in one run; SEFAZ groups them in fours. */\nconst groupKey = (key: string) => (key.match(/.{1,4}/g) ?? []).join(' ')\n\n/**\n * Encodes a QR payload into a module matrix (`true` = dark).\n *\n * Injected rather than bundled: core carries no QR library, and every surface\n * that prints already has one — the browser can hand over a canvas-derived\n * matrix, a worker can use whatever the app installed.\n */\nexport type QrEncoder = (payload: string) => boolean[][]\n\nexport interface EscPosOptions {\n width?: PaperWidth\n /** Defaults to CP860 — the code page the Brazilian panels answer to. */\n codepage?: Codepage\n /** Printable dots. Defaults to 12 per character column (48 chars = 576). */\n dots?: number\n qr?: QrEncoder\n /** Dots per QR module. 7 is comfortably scannable; 5 halves the payload. */\n qrModuleScale?: number\n /**\n * This document emends onto one already on the paper, so it must not reset.\n *\n * Set it on every document of a strip except the first. The reset is not\n * merely redundant there — `ESC @` immediately after a partial cut completes\n * that cut, which is exactly what a strip is trying to avoid.\n */\n continued?: boolean\n}\n\nexport function renderEscPos(job: PrintJob, options: EscPosOptions = {}): Uint8Array {\n const width = options.width ?? 48\n const resolved: Resolved = {\n width,\n dots: options.dots ?? width * 12,\n codepage: options.codepage ?? 'cp860',\n qrModuleScale: options.qrModuleScale ?? 7,\n continued: options.continued ?? false,\n ...(options.qr ? { qr: options.qr } : {}),\n }\n const r = new Ribbon(resolved).init()\n if (job.kind === 'kitchen_ticket') kitchen(r, job)\n else if (job.kind === 'customer_ticket') customer(r, job)\n else if (job.kind === 'bill') bill(r, job)\n else fiscal(r, job)\n if (job.openDrawer) r.drawer()\n if (job.cut !== false) r.cut()\n return r.done()\n}\n\nfunction kitchen(r: Ribbon, job: KitchenTicket): void {\n r.align('center').size(3, 3).bold(true).line(job.ticket).bold(false).size(1, 1)\n r.line(job.serviceMode.toUpperCase()).line(time(job.placedAt)).rule().align('left')\n for (const line of job.lines) {\n // Quantity at double height: a cook misreading 1 for 7 is a remade plate.\n r.size(1, 2).bold(true).text(`${line.quantity}x `).bold(false)\n for (const [i, part] of wrap(line.name, r.width - 4).entries()) r.line(i === 0 ? part : ` ${part}`)\n r.size(1, 1)\n if (line.note) for (const part of wrap(line.note, r.width - 4)) r.line(` ${part}`)\n }\n if (job.notes) { r.rule().bold(true).line('OBS:').bold(false); for (const p of wrap(job.notes, r.width)) r.line(p) }\n}\n\nfunction customer(r: Ribbon, job: CustomerTicket): void {\n r.align('center').bold(true).line(job.brandName).bold(false).feed(1)\n r.size(4, 4).bold(true).line(job.ticket).bold(false).size(1, 1)\n r.line(job.serviceMode.toUpperCase()).line(job.reference).feed(1)\n r.size(1, 2).line(formatCents(job.totalCents)).size(1, 1)\n if (!job.paid) r.feed(1).bold(true).line('PENDENTE').line('PASSE NO CAIXA').bold(false)\n if (job.footer) { r.feed(1); for (const part of wrap(job.footer, r.width)) r.line(part) }\n promo(r, job)\n}\n\n/**\n * O rodapé que fala do PAINEL, e não do pedido.\n *\n * Só sai quando o documento pede: um restaurante de verdade não anuncia o\n * totem que comprou. Numa feira é o contrário — este papel é a única coisa que\n * a pessoa leva do estande, e ela o lê no caminho para casa.\n *\n * O QR vem POR ÚLTIMO e o endereço logo acima dele: quem tem o celular na mão\n * aponta, e quem não tem digita. Um QR sem o endereço escrito é um convite que\n * só funciona para metade das pessoas.\n */\nfunction promo(r: Ribbon, job: CustomerTicket): void {\n const promo = job.promo\n if (!promo || (!promo.headline && !promo.offer && !promo.site && !promo.qr)) return\n r.feed(1).rule()\n if (promo.headline) { r.bold(true); for (const part of wrap(promo.headline, r.width)) r.line(part); r.bold(false) }\n if (promo.offer) {\n // DOBRADO NAS DUAS DIREÇÕES. Esta linha é a única do papel que precisa ser\n // legível de longe e sem óculos — ela é a oferta, e uma oferta em corpo de\n // rodapé é letra miúda. Em dobro cabe metade dos caracteres por linha, por\n // isso a quebra usa `width / 2`.\n r.feed(1).bold(true).size(2, 2)\n for (const part of wrap(promo.offer, Math.floor(r.width / 2))) r.line(part)\n r.size(1, 1).bold(false).feed(1)\n }\n if (promo.site) r.line(promo.site)\n // Sem codificador não há QR — e um retângulo preto no lugar dele seria pior\n // que nada. O resto do bloco continua valendo: o endereço está escrito acima.\n if (promo.qr && r.canQr()) r.feed(1).qr(promo.qr)\n}\n\nfunction bill(r: Ribbon, job: BillJob): void {\n r.align('center').bold(true).line(job.brandName).bold(false).line(job.reference).rule().align('left')\n for (const line of job.lines) priced(r, line)\n r.rule()\n r.columns('Subtotal', formatCents(job.subtotalCents))\n if (job.serviceChargeCents) r.columns('Serviço', formatCents(job.serviceChargeCents))\n r.bold(true).size(1, 2).columns('TOTAL', formatCents(job.totalCents)).size(1, 1).bold(false)\n r.align('center').feed(1)\n for (const part of wrap(job.footer ?? 'Este documento não é documento fiscal', r.width)) r.line(part)\n}\n\nfunction priced(r: Ribbon, line: PrintLine): void {\n const total = (line.unitPriceCents ?? 0) * line.quantity\n r.columns(`${line.quantity}x ${line.name}`, formatCents(total))\n if (line.note) for (const part of wrap(line.note, r.width - 4)) r.line(` ${part}`)\n}\n\nfunction fiscal(r: Ribbon, job: FiscalReceipt): void {\n r.align('center').bold(true).line(job.emitter.name).bold(false)\n r.line(`CNPJ: ${job.emitter.cnpj}`)\n for (const part of wrap(job.emitter.address, r.width)) r.line(part)\n r.rule()\n for (const part of wrap('DANFE NFC-e - Documento Auxiliar da Nota Fiscal de Consumidor Eletrônica', r.width)) r.line(part)\n // The banner is a legal requirement of the test environment, and it goes\n // ABOVE the items where nobody can miss it — not in a footer.\n if (job.homologation) {\n r.rule('=').bold(true)\n for (const part of wrap('EMITIDA EM AMBIENTE DE HOMOLOGAÇÃO - SEM VALOR FISCAL', r.width)) r.line(part)\n r.bold(false).rule('=')\n }\n r.align('left').rule()\n r.line('COD DESCRICAO QTD UN VL UN VL TOT')\n r.rule()\n for (const line of job.lines) {\n r.line(`${line.code} ${line.name}`.slice(0, r.width))\n r.columns(` ${line.quantity} ${line.unit} x ${formatCents(line.unitPriceCents ?? 0)}`, formatCents(line.totalCents))\n }\n r.rule()\n r.columns('Qtd. total de itens', String(job.lines.length))\n r.bold(true).size(1, 2).columns('VALOR TOTAL R$', formatCents(job.totalCents)).size(1, 1).bold(false)\n for (const payment of job.payments) r.columns(payment.label, formatCents(payment.amountCents))\n if (job.changeCents) r.columns('Troco', formatCents(job.changeCents))\n r.rule().align('center')\n for (const part of wrap('Consulte pela Chave de Acesso em', r.width)) r.line(part)\n r.line(job.lookupUrl)\n r.feed(1).line(groupKey(job.accessKey)).feed(1)\n r.line(job.consumer?.document ? `CONSUMIDOR: ${job.consumer.document}` : 'CONSUMIDOR NAO IDENTIFICADO')\n if (job.consumer?.name) r.line(job.consumer.name)\n r.rule()\n r.line(`NFC-e n. ${job.number} Serie ${job.series}`)\n r.line(time(job.issuedAt))\n for (const part of wrap(`Protocolo de Autorizacao: ${job.protocol}`, r.width)) r.line(part)\n r.feed(1).qr(job.qrCode)\n}\n","// ---------------------------------------------------------------------------\n// PrinterPort — the seam between \"what to print\" and \"how it reaches paper\".\n//\n// Every adapter behind this is a different answer to the transport question,\n// and the app must not know which one is installed:\n//\n// memoryPrinter records jobs, prints nothing. Tests and the diagnostics\n// panel, where \"what would have printed\" is the answer.\n// ePOS Epson TM over its built-in HTTP service. No install, no\n// daemon, works from the browser build.\n// raw 9100 any network ESC/POS printer, through a local bridge,\n// because a browser cannot open a TCP socket.\n// usb Electron shell (FAY-1483) or WebUSB.\n//\n// The renderer is shared by all of them: only the last hop differs.\n// ---------------------------------------------------------------------------\n\nimport { renderEscPos, type EscPosOptions } from './escpos'\nimport type { PrintJob } from './print-job'\n\nexport interface PrintResult {\n ok: boolean\n /** Written for an operator mid-service, not for a log file. */\n message?: string\n}\n\nexport interface PrinterPort {\n readonly id: string\n print(job: PrintJob): Promise<PrintResult>\n /** Prove the paper path without a sale. This is what support asks for. */\n selfTest?(): Promise<PrintResult>\n}\n\n/**\n * Records instead of printing.\n *\n * Not a placeholder to be deleted: a totem with no printer attached still has\n * to complete a sale, and a diagnostics screen still has to show what the last\n * job looked like. Failing the sale because the paper ran out is worse than\n * printing nothing.\n */\nexport function memoryPrinter(options: EscPosOptions = {}): PrinterPort & { readonly jobs: readonly PrintJob[] } {\n const jobs: PrintJob[] = []\n return {\n id: 'memory',\n get jobs() { return jobs },\n async print(job) {\n jobs.push(job)\n // Rendered even though it is discarded: a job that cannot be rendered\n // must fail here, in development, and not on the night it first prints.\n renderEscPos(job, options)\n return { ok: true }\n },\n }\n}\n"]}
@@ -44,6 +44,29 @@ export interface CustomerTicket extends JobBase {
44
44
  /** False prints the "pay at the till" warning, which is the whole point. */
45
45
  paid: boolean;
46
46
  footer?: string;
47
+ /**
48
+ * The strip the customer walks away with, used as a channel.
49
+ *
50
+ * A kiosk ticket is the one piece of paper a restaurant's customer carries
51
+ * out of the room, and at a trade show the person holding it is the one
52
+ * deciding whether to buy the panel. `footer` could not carry this: a QR is
53
+ * not a sentence, and an offer that reads as small print is an offer nobody
54
+ * takes.
55
+ *
56
+ * Every field is optional, and a ticket without `promo` prints exactly as it
57
+ * did before — a real restaurant does not advertise the till it bought.
58
+ */
59
+ promo?: TicketPromo;
60
+ }
61
+ export interface TicketPromo {
62
+ /** One line, large: who is talking. */
63
+ headline?: string;
64
+ /** The offer itself, in the words the customer will repeat. */
65
+ offer?: string;
66
+ /** Where to type it by hand, for whoever does not scan. */
67
+ site?: string;
68
+ /** What the QR encodes. Needs an encoder in the ESC/POS options. */
69
+ qr?: string;
47
70
  }
48
71
  /** The bill, or a partial. Priced, totalled, and never a fiscal document. */
49
72
  export interface BillJob extends JobBase {
@@ -1 +1 @@
1
- {"version":3,"file":"print-job.d.ts","sourceRoot":"","sources":["../../src/printing/print-job.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"print-job.d.ts","sourceRoot":"","sources":["../../src/printing/print-job.ts"],"names":[],"mappings":"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"}
@@ -487,6 +487,17 @@ export interface PluginRegistryDef {
487
487
  icon?: string;
488
488
  description?: string;
489
489
  display?: 'table' | 'cards' | 'tree';
490
+ /**
491
+ * What this registry is FOR, written for the agent — shown next to the key in
492
+ * the entity catalogue of `createRecord`/`searchRecords`.
493
+ *
494
+ * Only worth setting where the plural name invites the wrong call: "payment
495
+ * methods" reads as a place to record a supplier you paid, when it is the
496
+ * configuration of how customers pay. `description` is the settings UI's
497
+ * caption and deliberately stays separate — one is read by a person looking
498
+ * at a screen, the other by a model choosing between twenty keys.
499
+ */
500
+ agentHint?: string;
490
501
  seedData?: Record<string, unknown>[];
491
502
  mockData?: Record<string, unknown>[];
492
503
  readOnly?: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"plugins.d.ts","sourceRoot":"","sources":["../../src/types/plugins.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AACjD,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAC9B,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,UAAU,CAAA;AACzC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAA;AACvC,OAAO,KAAK,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAA;AAC1E,OAAO,KAAK,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAA;AACzE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAA;AACtD,OAAO,KAAK,EAAE,oBAAoB,EAAE,yBAAyB,EAAE,MAAM,cAAc,CAAA;AACnF,OAAO,KAAK,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAA;AACtE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAA;AAC1D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA;AAEjD,MAAM,MAAM,UAAU,GAAG,QAAQ,GAAG,MAAM,GAAG,QAAQ,GAAG,UAAU,GAAG,QAAQ,GAAG,WAAW,GAAG,CAAC,MAAM,GAAG,EAAE,CAAC,CAAA;AAC3G,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,UAAU,GAAG,WAAW,GAAG,OAAO,GAAG,QAAQ,CAAA;AAChF,MAAM,MAAM,YAAY,GAAG,eAAe,GAAG,QAAQ,GAAG,UAAU,GAAG,SAAS,CAAA;AAE9E;;;;GAIG;AACH,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,WAAW,GAAG,cAAc,GAAG,SAAS,GAAG,CAAC,MAAM,GAAG,EAAE,CAAC,CAAA;AAE5F,MAAM,WAAW,2BAA2B;IAC1C,OAAO,EAAE,MAAM,CAAA;IACf,MAAM,EAAE,gBAAgB,CAAA;CACzB;AAED,MAAM,WAAW,qBAAqB;IACpC,EAAE,CAAC,EAAE,MAAM,CAAA;IACX,OAAO,EAAE,MAAM,GAAG,WAAW,GAAG,UAAU,CAAA;IAC1C,QAAQ,EAAE,MAAM,CAAA;IAChB,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;IACvB,UAAU,CAAC,EAAE,2BAA2B,CAAA;IACxC;;;;;;;;;OASG;IACH,KAAK,CAAC,EAAE,MAAM,CAAA;IACd;;;;;;OAMG;IACH,IAAI,CAAC,EAAE,MAAM,CAAA;IACb;;;;;;OAMG;IACH,UAAU,CAAC,EAAE,OAAO,CAAA;CACrB;AAED,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,MAAM,CAAA;IACV,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,CAAC,EAAE,MAAM,CAAA;IACb;;;;;OAKG;IACH,KAAK,CAAC,EAAE,MAAM,CAAA;IACd;;mCAE+B;IAC/B,SAAS,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC,OAAO,CAAC,CAAA;IACxC,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,UAAU,CAAC,EAAE,2BAA2B,CAAA;CACzC;AAED,4EAA4E;AAC5E,MAAM,WAAW,sBAAsB;IACrC,EAAE,EAAE,MAAM,CAAA;IACV,SAAS,EAAE,KAAK,CAAC,aAAa,CAAC,OAAO,CAAC,CAAA;IACvC,mDAAmD;IACnD,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,UAAU,CAAC,EAAE,2BAA2B,CAAA;CACzC;AAED,MAAM,WAAW,qBAAsB,SAAQ,sBAAsB;IACnE,QAAQ,EAAE,MAAM,CAAA;CACjB;AAED,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,MAAM,CAAA;IACZ,wEAAwE;IACxE,SAAS,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC,OAAO,CAAC,CAAA;IACxC,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,KAAK,CAAC,EAAE,eAAe,GAAG,MAAM,GAAG,QAAQ,GAAG,aAAa,CAAA;IAC3D,KAAK,CAAC,EAAE,MAAM,EAAE,CAAA;IAChB,UAAU,CAAC,EAAE,2BAA2B,CAAA;IACxC,yFAAyF;IACzF,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB;;;;OAIG;IACH,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB;;kEAE8D;IAC9D,YAAY,CAAC,EAAE,MAAM,EAAE,CAAA;IACvB;;;;;;;;;OASG;IACH,KAAK,CAAC,EAAE,MAAM,CAAA;IACd;;;;OAIG;IACH,WAAW,CAAC,EAAE,MAAM,CAAA;CACrB;AAED,MAAM,MAAM,gBAAgB,GACxB,0BAA0B,GAC1B,sBAAsB,GACtB,oBAAoB,GACpB,kBAAkB,GAClB,aAAa,GACb,YAAY,GACZ,iBAAiB,GACjB,gBAAgB,GAChB,gBAAgB,GAChB,CAAC,MAAM,GAAG,EAAE,CAAC,CAAA;AAEjB,eAAO,MAAM,UAAU;;;;;;;;;;CAUb,CAAA;AAEV,MAAM,WAAW,mBAAmB;IAClC,EAAE,CAAC,EAAE,MAAM,CAAA;IACX,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,IAAI,CAAC,EAAE,MAAM,CAAA;CACd;AAED,MAAM,WAAW,iBAAiB;IAChC,EAAE,CAAC,EAAE,MAAM,CAAA;IACX,IAAI,CAAC,EAAE,MAAM,CAAA;CACd;AAED,MAAM,WAAW,sBAAsB;IACrC,MAAM,CAAC,EAAE,MAAM,EAAE,CAAA;IACjB,aAAa,CAAC,EAAE,MAAM,EAAE,CAAA;IACxB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAA;IAClB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAA;IAChB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAA;IAChB,WAAW,CAAC,EAAE,2BAA2B,EAAE,CAAA;IAC3C,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,oBAAoB,KAAK,OAAO,CAAA;CAClD;AAED,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE,mBAAmB,GAAG,IAAI,CAAA;IAClC,IAAI,EAAE,iBAAiB,GAAG,IAAI,CAAA;IAC9B,WAAW,EAAE,MAAM,CAAA;IACnB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,MAAM,EAAE,MAAM,CAAA;IACd,aAAa,CAAC,EAAE,CAAC,GAAG,EAAE,2BAA2B,KAAK,OAAO,CAAA;CAC9D;AAED,MAAM,WAAW,sBAAsB,CAAC,OAAO,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IACvG,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,gBAAgB,CAAA;IACtB,wEAAwE;IACxE,SAAS,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC,OAAO,CAAC,CAAA;IACxC,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,UAAU,CAAC,EAAE,2BAA2B,CAAA;IACxC,UAAU,CAAC,EAAE,sBAAsB,CAAA;IACnC,KAAK,CAAC,EAAE,OAAO,CAAA;CAChB;AAOD,MAAM,MAAM,mBAAmB,GAAG,KAAK,GAAG,OAAO,GAAG,OAAO,GAAG,YAAY,GAAG,QAAQ,CAAA;AAErF;;;;iFAIiF;AACjF,MAAM,MAAM,gBAAgB,GAAG,MAAM,GAAG,aAAa,GAAG,cAAc,GAAG,WAAW,CAAA;AAEpF,MAAM,WAAW,kBAAkB,CAAC,MAAM,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAClG,sDAAsD;IACtD,EAAE,EAAE,MAAM,CAAA;IACV,+BAA+B;IAC/B,KAAK,EAAE,MAAM,CAAA;IACb,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,qFAAqF;IACrF,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,IAAI,EAAE,mBAAmB,CAAA;IACzB,iFAAiF;IACjF,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;IACpB,gEAAgE;IAChE,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,wDAAwD;IACxD,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,sDAAsD;IACtD,QAAQ,CAAC,EAAE,gBAAgB,EAAE,CAAA;IAC7B,UAAU,CAAC,EAAE,UAAU,CAAA;IACvB,UAAU,CAAC,EAAE,2BAA2B,CAAA;IACxC,wEAAwE;IACxE,SAAS,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC,OAAO,CAAC,CAAA;IACxC,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAED,8EAA8E;AAC9E,MAAM,WAAW,qBAAqB;IACpC,OAAO,CAAC,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,OAAO,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAClF;AAED,MAAM,WAAW,uBAAwB,SAAQ,kBAAkB;IACjE,kEAAkE;IAClE,MAAM,EAAE,MAAM,CAAA;IACd,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,sBAAsB,CAAA;CAC/B;AAED;0EAC0E;AAC1E,MAAM,WAAW,qBAAqB;IACpC,8DAA8D;IAC9D,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,8DAA8D;IAC9D,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAOvC,kEAAkE;IAClE,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,+BAA+B;IAC/B,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,mBAAmB;IACnB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb;;;;;OAKG;IACH,MAAM,CAAC,EAAE,UAAU,EAAE,CAAA;IACrB;;;;OAIG;IACH,KAAK,CAAC,EAAE,OAAO,CAAA;CAChB;AAED,yDAAyD;AACzD;;;;;;;;;;;;;;GAcG;AACH;;;;;;;;;;;;;;;GAeG;AACH,MAAM,WAAW,WAAW;IAC1B,qFAAqF;IACrF,EAAE,EAAE,MAAM,CAAA;IACV,kFAAkF;IAClF,KAAK,EAAE,MAAM,CAAA;IACb,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB;;;;OAIG;IACH,kBAAkB,CAAC,EAAE,OAAO,CAAA;CAC7B;AAED,MAAM,WAAW,uBAAuB;IACtC,+DAA+D;IAC/D,KAAK,EAAE,MAAM,CAAA;IACb,qEAAqE;IACrE,OAAO,EAAE,MAAM,CAAA;IACf,gEAAgE;IAChE,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB;;;;OAIG;IACH,WAAW,CAAC,EAAE,MAAM,CAAA;CACrB;AAED,MAAM,WAAW,mBAAoB,SAAQ,qBAAqB;IAChE,QAAQ,EAAE,MAAM,CAAA;IAChB,UAAU,EAAE,MAAM,CAAA;IAClB,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB;AAED;;;;;;;;GAQG;AACH,MAAM,WAAW,iBAAiB;IAChC,2DAA2D;IAC3D,KAAK,EAAE,MAAM,CAAA;IACb,2EAA2E;IAC3E,SAAS,EAAE,MAAM,CAAA;IACjB,2CAA2C;IAC3C,OAAO,CAAC,EAAE,KAAK,CAAC,SAAS,GAAG,SAAS,GAAG,SAAS,CAAC,CAAA;CACnD;AAED,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,MAAM,CAAA;IACV,KAAK,EAAE,MAAM,CAAA;IACb,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,IAAI,CAAC,EAAE,MAAM,GAAG,QAAQ,GAAG,MAAM,GAAG,aAAa,CAAA;CAClD;AAED,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,MAAM,CAAA;IACV,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB;;;;;;;OAOG;IACH,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,sDAAsD;IACtD,MAAM,EAAE,MAAM,IAAI,CAAA;CACnB;AAED,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,SAAS,CAAA;AAE3C,MAAM,WAAW,uBAAuB;IACtC,IAAI,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS,GAAG,OAAO,GAAG,QAAQ,CAAA;IAC1D,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAA;IACf,KAAK,CAAC,EAAE,uBAAuB,CAAA;IAC/B;;;;;OAKG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,uBAAuB,CAAC,CAAA;IACpD,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAA;IACnB,OAAO,CAAC,EAAE,OAAO,CAAA;CAClB;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,QAAQ,CAAA;IACd,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,uBAAuB,CAAC,CAAA;IACnD,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAA;CACpB;AAED,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,UAAU,CAAC,EAAE,UAAU,CAAA;CACxB;AAED,MAAM,MAAM,eAAe,GACvB;IAAE,KAAK,EAAE,QAAQ,CAAC;IAAC,IAAI,EAAE,KAAK,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,GAC7C;IAAE,KAAK,EAAE,QAAQ,CAAC;IAAC,IAAI,EAAE,aAAa,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GACxD;IAAE,KAAK,EAAE,QAAQ,CAAA;CAAE,CAAA;AAEvB;;;;GAIG;AACH,MAAM,WAAW,mBAAmB;IAClC,yEAAyE;IACzE,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,GAAG,OAAO,CAAA;IACtB,WAAW,EAAE,MAAM,CAAA;IACnB,6CAA6C;IAC7C,aAAa,CAAC,EAAE,gBAAgB,CAAA;IAChC,qDAAqD;IACrD,MAAM,CAAC,EAAE,OAAO,CAAA;CACjB;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,yBAAyB;IACxC,oEAAoE;IACpE,IAAI,EAAE,MAAM,CAAA;IACZ;;;OAGG;IACH,SAAS,EAAE,OAAO,CAAA;IAClB,4EAA4E;IAC5E,OAAO,CAAC,EAAE,MAAM,EAAE,CAAA;IAClB,iFAAiF;IACjF,OAAO,EAAE,MAAM,GAAG,MAAM,CAAA;IACxB;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,EAAE,CAAA;CAClB;AAED,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,EAAE,MAAM,CAAA;IACnB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,UAAU,CAAA;IAChB,UAAU,CAAC,EAAE,gBAAgB,CAAA;IAC7B,UAAU,CAAC,EAAE,2BAA2B,CAAA;IACxC;;;;;;OAMG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB;;;;;;;;;OASG;IACH,SAAS,CAAC,EAAE,eAAe,CAAA;IAC3B;;;;OAIG;IACH,oBAAoB,CAAC,EAAE,OAAO,CAAA;IAC9B;;;;;OAKG;IACH,IAAI,CAAC,EAAE,SAAS,CAAA;IAChB,WAAW,CAAC,EAAE,gBAAgB,EAAE,CAAA;IAChC,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAA;CAChB;AAED,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,MAAM,CAAA;IACV,MAAM,EAAE,SAAS,CAAA;IACjB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,OAAO,CAAC,EAAE,OAAO,GAAG,OAAO,GAAG,MAAM,CAAA;IACpC,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAA;IACpC,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAA;IACpC,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB;;;;;;;OAOG;IACH,YAAY,CAAC,EAAE,YAAY,CAAC,KAAK,CAAC,CAAA;CACnC;AAED,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAA;IACV,OAAO,EAAE,MAAM,CAAA;IACf,GAAG,EAAE,MAAM,CAAA;IACX,WAAW,CAAC,EAAE,MAAM,CAAA;CACrB;AAED,MAAM,WAAW,gBAAgB;IAC/B,wEAAwE;IACxE,SAAS,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;QAAE,UAAU,EAAE,MAAM,IAAI,CAAA;KAAE,CAAC,CAAA;IAC3D,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB;;;;;OAKG;IACH,OAAO,CAAC,EAAE,oBAAoB,CAAA;CAC/B;AAED;;;;GAIG;AACH,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,MAAM,CAAA;IACV,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,qEAAqE;IACrE,QAAQ,EAAE;QACR,IAAI,CAAC,EAAE,MAAM,EAAE,CAAA;QACf,KAAK,CAAC,EAAE,MAAM,EAAE,CAAA;QAChB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAA;QACjB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAA;QACrB,GAAG,CAAC,EAAE,MAAM,EAAE,CAAA;KACf,CAAA;IACD,oEAAoE;IACpE,KAAK,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,MAAM,CAAA;CAClC;AAED,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,MAAM,CAAA;IACf;wFACoF;IACpF,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,KAAK,CAAC,EAAE,WAAW,CAAA;IACnB,UAAU,CAAC,EAAE,UAAU,CAAA;IACvB,qFAAqF;IACrF,MAAM,CAAC,EAAE,qBAAqB,EAAE,CAAA;IAChC,6FAA6F;IAC7F,SAAS,CAAC,EAAE,iBAAiB,EAAE,CAAA;IAC/B,oGAAoG;IACpG,YAAY,CAAC,EAAE,uBAAuB,EAAE,CAAA;IACxC;;;OAGG;IACH,MAAM,CAAC,EAAE,WAAW,EAAE,CAAA;IACtB,4EAA4E;IAC5E,SAAS,CAAC,EAAE,YAAY,EAAE,CAAA;IAC1B,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,YAAY,CAAC,EAAE,MAAM,EAAE,CAAA;IACvB,UAAU,EAAE,qBAAqB,EAAE,CAAA;IACnC,QAAQ,CAAC,EAAE,iBAAiB,EAAE,CAAA;IAC9B,MAAM,EAAE,qBAAqB,EAAE,CAAA;IAC/B,OAAO,CAAC,EAAE,sBAAsB,EAAE,CAAA;IAClC,2EAA2E;IAC3E,gBAAgB,CAAC,EAAE,kBAAkB,EAAE,CAAA;IACvC;;;;;;;;;;;OAWG;IACH,cAAc,CAAC,EAAE,sBAAsB,EAAE,CAAA;IACzC;;;;OAIG;IACH,cAAc,CAAC,EAAE,gBAAgB,EAAE,CAAA;IACnC,YAAY,CAAC,EAAE,gBAAgB,EAAE,CAAA;IACjC,OAAO,CAAC,EAAE,YAAY,EAAE,CAAA;IACxB;;;;;OAKG;IACH,gBAAgB,CAAC,EAAE,SAAS,CAAA;IAC5B,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAA;IACnB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAA;IACtB,gBAAgB,CAAC,EAAE,kBAAkB,EAAE,CAAA;IACvC;;;;;OAKG;IACH,cAAc,CAAC,EAAE,gBAAgB,EAAE,CAAA;IACnC,uEAAuE;IACvE,YAAY,CAAC,EAAE,mBAAmB,EAAE,CAAA;IACpC;;;;;;OAMG;IACH,aAAa,CAAC,EAAE,KAAK,CAAC;QACpB,GAAG,EAAE,MAAM,CAAA;QACX,MAAM,EAAE,SAAS,CAAA;QACjB,2EAA2E;QAC3E,QAAQ,CAAC,EAAE,OAAO,CAAA;KACnB,CAAC,CAAA;IACF,UAAU,CAAC,EAAE,iBAAiB,EAAE,CAAA;IAChC;;;;OAIG;IACH,UAAU,CAAC,EAAE,mBAAmB,EAAE,CAAA;IAClC;;;;;;;;;;;;;;;;;OAiBG;IACH,YAAY,CAAC,EAAE,MAAM,EAAE,CAAA;IACvB,wFAAwF;IACxF,SAAS,CAAC,EAAE,yBAAyB,EAAE,CAAA;IACvC,UAAU,CAAC,EAAE,eAAe,EAAE,CAAA;IAC9B,yEAAyE;IACzE,WAAW,CAAC,EAAE,gBAAgB,EAAE,CAAA;IAChC,UAAU,CAAC,EAAE,gBAAgB,CAAA;IAC7B;;;;;;;OAOG;IACH,WAAW,CAAC,EAAE,aAAa,EAAE,CAAA;IAC7B,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAA;CACjD;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,MAAM,CAAA;IAChB,MAAM,EAAE,YAAY,CAAA;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CACjC;AAED,MAAM,WAAW,kBAAkB;IACjC,IAAI,EACA,kBAAkB,GAClB,oBAAoB,GACpB,qBAAqB,GACrB,mBAAmB,GACnB,0BAA0B,CAAA;IAC9B,QAAQ,EAAE,MAAM,CAAA;IAChB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,OAAO,EAAE,MAAM,CAAA;CAChB;AAED,MAAM,WAAW,sBAAuB,SAAQ,cAAc;IAC5D,MAAM,EAAE,YAAY,CAAA;IACpB,QAAQ,EAAE,OAAO,CAAA;IACjB,gBAAgB,EAAE,SAAS,GAAG,QAAQ,GAAG,YAAY,GAAG,UAAU,CAAA;IAClE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAC/B,mBAAmB,EAAE,MAAM,EAAE,CAAA;IAC7B,YAAY,EAAE,iBAAiB,EAAE,CAAA;IACjC,OAAO,EAAE,sBAAsB,EAAE,CAAA;IACjC,kBAAkB,EAAE,iBAAiB,EAAE,CAAA;IACvC,eAAe,EAAE,YAAY,EAAE,CAAA;CAChC;AAED,MAAM,WAAW,oBAAoB,CAAC,OAAO,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CACrG,SAAQ,sBAAsB,CAAC,OAAO,CAAC;IACvC,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,OAAO,CAAA;IACf,MAAM,EAAE,sBAAsB,CAAA;CAC/B;AAED,MAAM,WAAW,kBAAmB,SAAQ,qBAAqB;IAC/D,MAAM,EAAE,sBAAsB,CAAA;CAC/B;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,oBAAoB,CAAA;IAC7B,OAAO,EAAE,sBAAsB,EAAE,CAAA;IACjC,aAAa,EAAE,sBAAsB,EAAE,CAAA;IACvC,MAAM,EAAE,kBAAkB,EAAE,CAAA;IAC5B,UAAU,EAAE,qBAAqB,EAAE,CAAA;IACnC,YAAY,EAAE,iBAAiB,EAAE,CAAA;IACjC,OAAO,EAAE,oBAAoB,EAAE,CAAA;IAC/B,gBAAgB,EAAE,uBAAuB,EAAE,CAAA;IAC3C,cAAc,EAAE,qBAAqB,EAAE,CAAA;IACvC,cAAc,EAAE,qBAAqB,EAAE,CAAA;IACvC;uCACmC;IACnC,MAAM,EAAE,mBAAmB,EAAE,CAAA;IAC7B,YAAY,EAAE,gBAAgB,EAAE,CAAA;IAChC,OAAO,EAAE,YAAY,EAAE,CAAA;IACvB,MAAM,EAAE,kBAAkB,EAAE,CAAA;IAC5B,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE,iBAAiB,EAAE,CAAC,CAAA;IAC5C,wFAAwF;IACxF,gBAAgB,EAAE,GAAG,CAAC,MAAM,EAAE,mBAAmB,EAAE,CAAC,CAAA;IACpD,cAAc,EAAE,kBAAkB,EAAE,CAAA;IACpC,iFAAiF;IACjF,YAAY,EAAE,gBAAgB,EAAE,CAAA;IAChC;iFAC6E;IAC7E,kBAAkB,EAAE,yBAAyB,EAAE,CAAA;IAC/C,gFAAgF;IAChF,WAAW,EAAE,kBAAkB,EAAE,CAAA;CAClC"}
1
+ {"version":3,"file":"plugins.d.ts","sourceRoot":"","sources":["../../src/types/plugins.ts"],"names":[],"mappings":"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"}
@@ -51,6 +51,15 @@ export interface SetupPrerequisite {
51
51
  /** Nothing works without it. Default true; `false` reads as "nice to have". */
52
52
  required?: boolean;
53
53
  }
54
+ /** A field the person fills themselves in practice mode, after the tour. */
55
+ export interface PracticeAction {
56
+ /** `data-tour` anchor of the field this footprint pins to. */
57
+ anchor: string;
58
+ /** What to do here, imperative: 'Selecione o fornecedor'. */
59
+ label: string;
60
+ /** Completing this ends practice and fires the celebration. */
61
+ final?: boolean;
62
+ }
54
63
  /** One move of the setup, in the order it is done. */
55
64
  export interface SetupAction {
56
65
  /** The thing to do, imperative, in the owner's words. */
@@ -61,6 +70,13 @@ export interface SetupAction {
61
70
  route?: string;
62
71
  /** `data-tour` anchor to spotlight while saying it. */
63
72
  anchor?: string;
73
+ /**
74
+ * The person is meant to CLICK the anchored control: the tour shows no
75
+ * "next" and steps aside when the control goes away (they clicked, the
76
+ * screen changed). Only meaningful on a control that disappears when used —
77
+ * on a persistent field it would wait forever.
78
+ */
79
+ handOver?: boolean;
64
80
  /**
65
81
  * The assistant can complete this alone — it has a tool for it, or it is a
66
82
  * setting it may write. Default false, which means HAND THE CONTROL OVER:
@@ -95,6 +111,13 @@ export interface SetupGuideDef {
95
111
  statusNote?: string;
96
112
  requires?: SetupPrerequisite[];
97
113
  steps?: SetupAction[];
114
+ /**
115
+ * After the tour lands on the create screen, the fields the person fills in
116
+ * THEMSELVES — numbered footprints that tick as they go, the last (`final`)
117
+ * raining confetti. This is the doing half: the tour showed where, practice
118
+ * makes it stick.
119
+ */
120
+ practice?: PracticeAction[];
98
121
  /** What the system imposes, whether anybody likes it or not. */
99
122
  rules?: string[];
100
123
  /** The mistakes people make here, and how each one looks from the screen. */
@@ -1 +1 @@
1
- {"version":3,"file":"setup-guide.d.ts","sourceRoot":"","sources":["../../src/types/setup-guide.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,UAAU,CAAA;AAEzC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AAEH,sEAAsE;AACtE,MAAM,WAAW,iBAAiB;IAChC,8EAA8E;IAC9E,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,0DAA0D;IAC1D,KAAK,EAAE,MAAM,CAAA;IACb,4EAA4E;IAC5E,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,uEAAuE;IACvE,KAAK,CAAC,EAAE,MAAM,CAAA;IACd;;;;;;OAMG;IACH,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,+EAA+E;IAC/E,QAAQ,CAAC,EAAE,OAAO,CAAA;CACnB;AAED,sDAAsD;AACtD,MAAM,WAAW,WAAW;IAC1B,yDAAyD;IACzD,EAAE,EAAE,MAAM,CAAA;IACV,uEAAuE;IACvE,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,sEAAsE;IACtE,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,uDAAuD;IACvD,MAAM,CAAC,EAAE,MAAM,CAAA;IACf;;;;OAIG;IACH,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,yDAAyD;IACzD,IAAI,CAAC,EAAE,MAAM,CAAA;CACd;AAED;;;;;;;GAOG;AACH,MAAM,MAAM,gBAAgB,GAAG,OAAO,GAAG,aAAa,GAAG,aAAa,CAAA;AAEtE,MAAM,WAAW,aAAa;IAC5B,kEAAkE;IAClE,OAAO,EAAE,MAAM,CAAA;IACf,yEAAyE;IACzE,KAAK,EAAE,MAAM,CAAA;IACb,0EAA0E;IAC1E,KAAK,EAAE,MAAM,CAAA;IACb,+BAA+B;IAC/B,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,0DAA0D;IAC1D,IAAI,CAAC,EAAE,SAAS,CAAA;IAChB,MAAM,CAAC,EAAE,gBAAgB,CAAA;IACzB,qEAAqE;IACrE,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,QAAQ,CAAC,EAAE,iBAAiB,EAAE,CAAA;IAC9B,KAAK,CAAC,EAAE,WAAW,EAAE,CAAA;IACrB,gEAAgE;IAChE,KAAK,CAAC,EAAE,MAAM,EAAE,CAAA;IAChB,6EAA6E;IAC7E,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAA;IACnB,iEAAiE;IACjE,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAA;IACnB,6EAA6E;IAC7E,OAAO,CAAC,EAAE,MAAM,EAAE,CAAA;IAClB,sDAAsD;IACtD,IAAI,CAAC,EAAE,MAAM,EAAE,CAAA;IACf;;;;OAIG;IACH,IAAI,CAAC,EAAE,MAAM,CAAA;CACd;AAED,qDAAqD;AACrD,MAAM,WAAW,kBAAmB,SAAQ,aAAa;IACvD,QAAQ,EAAE,MAAM,CAAA;IAChB,UAAU,EAAE,MAAM,CAAA;CACnB"}
1
+ {"version":3,"file":"setup-guide.d.ts","sourceRoot":"","sources":["../../src/types/setup-guide.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,UAAU,CAAA;AAEzC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AAEH,sEAAsE;AACtE,MAAM,WAAW,iBAAiB;IAChC,8EAA8E;IAC9E,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,0DAA0D;IAC1D,KAAK,EAAE,MAAM,CAAA;IACb,4EAA4E;IAC5E,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,uEAAuE;IACvE,KAAK,CAAC,EAAE,MAAM,CAAA;IACd;;;;;;OAMG;IACH,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,+EAA+E;IAC/E,QAAQ,CAAC,EAAE,OAAO,CAAA;CACnB;AAED,4EAA4E;AAC5E,MAAM,WAAW,cAAc;IAC7B,8DAA8D;IAC9D,MAAM,EAAE,MAAM,CAAA;IACd,6DAA6D;IAC7D,KAAK,EAAE,MAAM,CAAA;IACb,+DAA+D;IAC/D,KAAK,CAAC,EAAE,OAAO,CAAA;CAChB;AAED,sDAAsD;AACtD,MAAM,WAAW,WAAW;IAC1B,yDAAyD;IACzD,EAAE,EAAE,MAAM,CAAA;IACV,uEAAuE;IACvE,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,sEAAsE;IACtE,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,uDAAuD;IACvD,MAAM,CAAC,EAAE,MAAM,CAAA;IACf;;;;;OAKG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB;;;;OAIG;IACH,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,yDAAyD;IACzD,IAAI,CAAC,EAAE,MAAM,CAAA;CACd;AAED;;;;;;;GAOG;AACH,MAAM,MAAM,gBAAgB,GAAG,OAAO,GAAG,aAAa,GAAG,aAAa,CAAA;AAEtE,MAAM,WAAW,aAAa;IAC5B,kEAAkE;IAClE,OAAO,EAAE,MAAM,CAAA;IACf,yEAAyE;IACzE,KAAK,EAAE,MAAM,CAAA;IACb,0EAA0E;IAC1E,KAAK,EAAE,MAAM,CAAA;IACb,+BAA+B;IAC/B,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,0DAA0D;IAC1D,IAAI,CAAC,EAAE,SAAS,CAAA;IAChB,MAAM,CAAC,EAAE,gBAAgB,CAAA;IACzB,qEAAqE;IACrE,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,QAAQ,CAAC,EAAE,iBAAiB,EAAE,CAAA;IAC9B,KAAK,CAAC,EAAE,WAAW,EAAE,CAAA;IACrB;;;;;OAKG;IACH,QAAQ,CAAC,EAAE,cAAc,EAAE,CAAA;IAC3B,gEAAgE;IAChE,KAAK,CAAC,EAAE,MAAM,EAAE,CAAA;IAChB,6EAA6E;IAC7E,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAA;IACnB,iEAAiE;IACjE,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAA;IACnB,6EAA6E;IAC7E,OAAO,CAAC,EAAE,MAAM,EAAE,CAAA;IAClB,sDAAsD;IACtD,IAAI,CAAC,EAAE,MAAM,EAAE,CAAA;IACf;;;;OAIG;IACH,IAAI,CAAC,EAAE,MAAM,CAAA;CACd;AAED,qDAAqD;AACrD,MAAM,WAAW,kBAAmB,SAAQ,aAAa;IACvD,QAAQ,EAAE,MAAM,CAAA;IAChB,UAAU,EAAE,MAAM,CAAA;CACnB"}
package/package.json CHANGED
@@ -3,7 +3,7 @@
3
3
  "fayz": {
4
4
  "status": "beta"
5
5
  },
6
- "version": "0.21.0",
6
+ "version": "0.22.0",
7
7
  "description": "Fayz SDK core — data providers, entity system, plugin runtime, i18n, routing",
8
8
  "type": "module",
9
9
  "sideEffects": false,