@asteby/storefront-react 0.26.0 → 0.28.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/README.md +7 -2
- package/dist/account-server.cjs +533 -83
- package/dist/account-server.cjs.map +1 -1
- package/dist/account-server.d.cts +13 -2
- package/dist/account-server.d.ts +13 -2
- package/dist/account-server.js +23 -6
- package/dist/account-server.js.map +1 -1
- package/dist/account.cjs +572 -96
- package/dist/account.cjs.map +1 -1
- package/dist/account.d.cts +82 -45
- package/dist/account.d.ts +82 -45
- package/dist/account.js +53 -14
- package/dist/account.js.map +1 -1
- package/dist/checkout.cjs +114 -38
- package/dist/checkout.cjs.map +1 -1
- package/dist/checkout.d.cts +24 -1
- package/dist/checkout.d.ts +24 -1
- package/dist/checkout.js +114 -38
- package/dist/checkout.js.map +1 -1
- package/dist/chunk-BXKV2KWZ.js +291 -0
- package/dist/chunk-BXKV2KWZ.js.map +1 -0
- package/dist/chunk-LIUEQENV.js +156 -0
- package/dist/chunk-LIUEQENV.js.map +1 -0
- package/dist/fiscal-server.cjs +27 -2
- package/dist/fiscal-server.cjs.map +1 -1
- package/dist/fiscal-server.d.cts +10 -1
- package/dist/fiscal-server.d.ts +10 -1
- package/dist/fiscal-server.js +26 -3
- package/dist/fiscal-server.js.map +1 -1
- package/dist/voucher-document-FWH4DQ5N.js +72 -0
- package/dist/voucher-document-FWH4DQ5N.js.map +1 -0
- package/dist/voucher-pdf-LQC333AB.js +213 -0
- package/dist/voucher-pdf-LQC333AB.js.map +1 -0
- package/package.json +1 -1
- package/dist/chunk-TXEYBDFG.js +0 -182
- package/dist/chunk-TXEYBDFG.js.map +0 -1
- package/dist/voucher-document-SFWJCLTN.js +0 -124
- package/dist/voucher-document-SFWJCLTN.js.map +0 -1
package/dist/account.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/account/voucher.ts","../src/account/voucher-document.ts","../src/checkout/fields.tsx","../src/account/account-auth.tsx","../src/account/post-purchase-prompt.tsx","../src/fiscal/messages.ts","../src/account/orders-messages.ts","../src/context.tsx","../src/components.tsx","../src/ui/product-preview.tsx","../src/locale.ts","../src/account/orders-ui.tsx","../src/account/order-lines.tsx","../src/account/progress.tsx","../src/account/order-list.tsx","../src/account/shipment.tsx","../src/account/invoices.tsx","../src/account/pending.tsx","../src/account/payment-method.ts","../src/account/refunds.tsx","../src/account/hooks.ts","../src/account/index.ts","../src/account/settings-messages.ts","../src/account/settings-ui.tsx","../src/account/sessions.tsx","../src/account/preferences.tsx"],"names":["formatMoney","formatDate","EN","ES","text","useRef","useState","useEffect","jsxs","jsx","errorText","Fragment","createContext","useContext","useCallback","deriveProgress","deriveNextAction","safeTrackingUrl","isTestShipment","useId","sortTrackingEvents","isTestInvoice","groupInvoiceDocs","useMemo","renderVoucherDocument"],"mappings":"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,MAAe,aAAA;AAAA,MAAe,aAAA;AAAA,MAAe,aAAA;AAAA,MAAe,aAAA;AAAA,MAAe,aAAA;AAAA,MAAe,aAAA;AAAA,MACvI,aAAA;AAAA,MAAe,aAAA;AAAA,MAAe,aAAA;AAAA,MAAe,aAAA;AAAA,MAAe,aAAA;AAAA,MAAe,aAAA;AAAA,MAAe,aAAA;AAAA,MAAe,aAAA;AAAA,MAAe,aAAA;AAAA,MAAe,aAAA;AAAA,MACvI,aAAA;AAAA,MAAe,aAAA;AAAA,MAAe,aAAA;AAAA,MAAe,aAAA;AAAA,MAAe,aAAA;AAAA,MAAe,aAAA;AAAA,MAAe,aAAA;AAAA,MAAe,aAAA;AAAA,MAAe,aAAA;AAAA,MAAe,aAAA;AAAA,MACvI,aAAA;AAAA,MAAe,aAAA;AAAA,MAAe,aAAA;AAAA,MAAe,aAAA;AAAA,MAAe,aAAA;AAAA,MAAe,aAAA;AAAA,MAAe,aAAA;AAAA,MAAe,aAAA;AAAA,MAAe,aAAA;AAAA,MAAe,aAAA;AAAA,MACvI,aAAA;AAAA,MAAe,aAAA;AAAA,MAAe,aAAA;AAAA,MAAe,aAAA;AAAA,MAAe,aAAA;AAAA,MAAe,aAAA;AAAA,MAAe,aAAA;AAAA,MAAe,aAAA;AAAA,MAAe,aAAA;AAAA,MAAe,aAAA;AAAA,MACvI,aAAA;AAAA,MAAe,aAAA;AAAA,MAAe,aAAA;AAAA,MAAe,aAAA;AAAA,MAAe,aAAA;AAAA,MAAe,aAAA;AAAA,MAAe,aAAA;AAAA,MAAe,aAAA;AAAA,MAAe,aAAA;AAAA,MAAe,aAAA;AAAA,MACvI,aAAA;AAAA,MAAe,aAAA;AAAA,MAAe,aAAA;AAAA,MAAe,aAAA;AAAA,MAAe,aAAA;AAAA,MAAe,aAAA;AAAA,MAAe,aAAA;AAAA,MAAe,aAAA;AAAA,MAAe,aAAA;AAAA,MAAe,aAAA;AAAA,MACvI,aAAA;AAAA,MAAe,aAAA;AAAA,MAAe,aAAA;AAAA,MAAe,aAAA;AAAA,MAAe,aAAA;AAAA,MAAe,aAAA;AAAA,MAAe,aAAA;AAAA,MAAe,aAAA;AAAA,MAAe,aAAA;AAAA,MAAe,aAAA;AAAA,MACvI,aAAA;AAAA,MAAe,aAAA;AAAA,MAAe,aAAA;AAAA,MAAe,a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","file":"account.cjs","sourcesContent":["/**\n * Pure pieces of the cash voucher (OXXO, SPEI, deposit): the normalized `VoucherView` of a `PendingPayment` and the\n * Code 128 barcode (the one cashiers' readers scan). No React, no DOM: the same code draws the barcode in the page\n * (`<Barcode>`) and in the printable document (`voucher-document.ts`, loaded only when the buyer prints).\n */\nimport type { Money, PendingPayment } from '@asteby/storefront'\n\nexport type VoucherView = {\n /** `oxxo`, `spei`, ... as the gateway publishes it. */\n method: string | null\n reference: string | null\n barcode: string | null\n clabe: string | null\n expires_at: string | null\n amount: Money | null\n instructions: string | null\n}\n\nconst MAX = 256\n\nfunction text(v: unknown): string | null {\n if (typeof v === 'number' && Number.isFinite(v)) return String(v)\n if (typeof v !== 'string') return null\n const s = v.trim().slice(0, MAX)\n return s || null\n}\n\nfunction moneyOf(v: unknown): Money | null {\n if (!v || typeof v !== 'object') return null\n const m = v as Record<string, unknown>\n const amount = text(m.amount)\n const cur = text(m.currency_code)\n return amount && cur && Number.isFinite(Number(amount)) ? { amount, currency_code: cur.toUpperCase() } : null\n}\n\n/** The voucher of a pending payment; `null` when it has neither reference, barcode nor CLABE (nothing to pay with). */\nexport function voucherOf(p: Pick<PendingPayment, 'payment' | 'total' | 'expires_at'> | null | undefined): VoucherView | null {\n const pay = p?.payment\n if (!pay || typeof pay !== 'object') return null\n const v: VoucherView = {\n method: text(pay.method ?? pay.provider),\n reference: text(pay.reference),\n barcode: text(pay.barcode),\n clabe: text(pay.clabe),\n expires_at: text(pay.expires_at) ?? text(p?.expires_at),\n amount: moneyOf(pay.amount) ?? moneyOf(p?.total),\n instructions: text(pay.instructions),\n }\n return v.reference || v.barcode || v.clabe ? v : null\n}\n\n/** The value the barcode encodes: the gateway's `barcode`, else the reference of an OXXO voucher. */\nexport function barcodeValue(v: Pick<VoucherView, 'barcode' | 'method' | 'reference'>): string | null {\n return v.barcode ?? (v.method?.toLowerCase() === 'oxxo' ? v.reference : null)\n}\n\n// 11-module patterns of symbols 0..105 and the 13-module stop (ISO/IEC 15417).\nconst BARS = [\n '11011001100', '11001101100', '11001100110', '10010011000', '10010001100', '10001001100', '10011001000', '10011000100', '10001100100', '11001001000',\n '11001000100', '11000100100', '10110011100', '10011011100', '10011001110', '10111001100', '10011101100', '10011100110', '11001110010', '11001011100',\n '11001001110', '11011100100', '11001110100', '11101101110', '11101001100', '11100101100', '11100100110', '11101100100', '11100110100', '11100110010',\n '11011011000', '11011000110', '11000110110', '10100011000', '10001011000', '10001000110', '10110001000', '10001101000', '10001100010', '11010001000',\n '11000101000', '11000100010', '10110111000', '10110001110', '10001101110', '10111011000', '10111000110', '10001110110', '11101110110', '11010001110',\n '11000101110', '11011101000', '11011100010', '11011101110', '11101011000', '11101000110', '11100010110', '11101101000', '11101100010', '11100011010',\n '11101111010', '11001000010', '11110001010', '10100110000', '10100001100', '10010110000', '10010000110', '10000101100', '10000100110', '10110010000',\n '10110000100', '10011010000', '10011000010', '10000110100', '10000110010', '11000010010', '11001010000', '11110111010', '11000010100', '10001111010',\n '10100111100', '10010111100', '10010011110', '10111100100', '10011110100', '10011110010', '11110100100', '11110010100', '11110010010', '11011011110',\n '11011110110', '11110110110', '10101111000', '10100011110', '10001011110', '10111101000', '10111100010', '11110101000', '11110100010', '10111011110',\n '10111101110', '11101011110', '11110101110', '11010000100', '11010010000', '11010011100',\n]\nconst STOP = '1100011101011'\n\n/**\n * Modules (`1` bar, `0` space) of the Code 128 of `value`: set C (digit pairs) when it is all digits of even length,\n * set B (printable ASCII) otherwise. `null` when it cannot be encoded.\n */\nexport function code128Modules(value: string): string | null {\n if (!value || value.length > 80) return null\n let codes: number[]\n if (/^\\d+$/.test(value) && value.length % 2 === 0) {\n codes = [105]\n for (let i = 0; i < value.length; i += 2) codes.push(Number(value.slice(i, i + 2)))\n } else {\n codes = [104]\n for (const ch of value) {\n const c = ch.charCodeAt(0)\n if (c < 32 || c > 126) return null\n codes.push(c - 32)\n }\n }\n let sum = codes[0]!\n for (let i = 1; i < codes.length; i++) sum += codes[i]! * i\n codes.push(sum % 103)\n return codes.map((c) => BARS[c]).join('') + STOP\n}\n\nexport type BarcodeGeometry = { width: number; height: number; rects: { x: number; w: number }[] }\n\n/** Bars of the barcode as rectangles (quiet zone of 10 modules each side included in `width`). `null` if not encodable. */\nexport function barcodeGeometry(value: string, opts: { module?: number; height?: number } = {}): BarcodeGeometry | null {\n const bits = code128Modules(value)\n if (!bits) return null\n const mod = opts.module ?? 2\n const quiet = 10\n const rects: { x: number; w: number }[] = []\n for (let i = 0; i < bits.length; ) {\n if (bits[i] === '0') {\n i++\n continue\n }\n let j = i\n while (j < bits.length && bits[j] === '1') j++\n rects.push({ x: (quiet + i) * mod, w: (j - i) * mod })\n i = j\n }\n return { width: (bits.length + quiet * 2) * mod, height: opts.height ?? 70, rects }\n}\n","/**\n * Printable voucher (A4 HTML) that does not depend on any payment gateway: built only from the voucher data OPS keeps.\n * Loaded on demand (the buyer taps print/download) or by `pendingVoucherResponse` on the server; plain text, no React.\n * Everything external passes through `esc` before it enters the HTML.\n */\nimport type { Money } from '@asteby/storefront'\nimport { barcodeGeometry, barcodeValue, type VoucherView } from './voucher.js'\n\nexport function esc(s: string): string {\n return s.replace(/[&<>\"']/g, (c) => ({ '&': '&', '<': '<', '>': '>', '\"': '"', \"'\": ''' })[c] as string)\n}\n\ntype DocText = {\n title: string\n total: string\n reference: string\n clabe: string\n expires: string\n expiresNote: string\n order: string\n barcode: string\n print: string\n footer: string\n stepsCash: string[]\n stepsSpei: string[]\n methods: Record<string, string>\n cash: string\n}\n\nconst ES: DocText = {\n title: 'Ficha de pago',\n total: 'Total a pagar',\n reference: 'Referencia',\n clabe: 'CLABE',\n expires: 'Vence',\n expiresNote: 'Pasada esa fecha la ficha deja de ser válida.',\n order: 'Pedido',\n barcode: 'Código de barras',\n print: 'Imprimir ficha',\n footer: 'Tu pedido se genera cuando se confirma el pago. Esta ficha es de un solo uso; no la compartas.',\n stepsCash: [\n 'Acude a la tienda OXXO (o el comercio indicado) y di que vas a hacer un pago de servicio en efectivo.',\n 'Muestra el código de barras o dicta la referencia y paga el monto exacto.',\n 'Conserva tu comprobante: confirmaremos tu pago automáticamente.',\n ],\n stepsSpei: ['Entra a la banca en línea o app de tu banco.', 'Haz una transferencia SPEI a la CLABE indicada por el monto exacto.', 'Conserva tu comprobante: confirmaremos tu pago automáticamente.'],\n methods: { oxxo: 'OXXO', spei: 'Transferencia SPEI', bank_transfer: 'Transferencia bancaria', bank_deposit: 'Depósito bancario', cash: 'Pago en efectivo' },\n cash: 'Pago en efectivo',\n}\n\nconst EN: DocText = {\n title: 'Payment voucher',\n total: 'Amount to pay',\n reference: 'Reference',\n clabe: 'CLABE',\n expires: 'Expires',\n expiresNote: 'After that date the voucher is no longer valid.',\n order: 'Order',\n barcode: 'Barcode',\n print: 'Print voucher',\n footer: 'Your order is created when the payment is confirmed. This voucher is single-use; do not share it.',\n stepsCash: [\n 'Go to an OXXO store (or the store indicated) and say you want to make a cash service payment.',\n 'Show the barcode or read out the reference and pay the exact amount.',\n 'Keep your receipt: we will confirm your payment automatically.',\n ],\n stepsSpei: ['Open your bank online or app.', 'Make a SPEI transfer to the CLABE below for the exact amount.', 'Keep your receipt: we will confirm your payment automatically.'],\n methods: { oxxo: 'OXXO', spei: 'SPEI transfer', bank_transfer: 'Bank transfer', bank_deposit: 'Bank deposit', cash: 'Cash payment' },\n cash: 'Cash payment',\n}\n\nexport type VoucherDocumentOptions = {\n shopName?: string\n /** Order number, if there is one yet. */\n number?: string | null\n locale?: string\n /** IANA zone the expiry is printed in (default: the runtime's). */\n timeZone?: string\n /** Print button on screen (hidden when printing). */\n printButton?: boolean\n /** Opens the print dialog on load. */\n autoPrint?: boolean\n /** `<script>` nonce when the one serving the voucher sends a CSP with `script-src 'nonce-…'`. */\n nonce?: string\n}\n\nconst CSS = `\n@page { size: A4; margin: 18mm; }\n* { box-sizing: border-box; }\nbody { margin: 0; font: 14px/1.5 system-ui, -apple-system, \"Segoe UI\", Roboto, sans-serif; color: #111; background: #fff; }\nmain { max-width: 174mm; margin: 0 auto; padding: 24px 16px; }\nh1 { font-size: 22px; margin: 0; }\n.muted { color: #555; }\n.head { display: flex; justify-content: space-between; align-items: flex-start; gap: 16px; border-bottom: 3px solid #111; padding-bottom: 12px; }\n.amount { font-size: 28px; font-weight: 700; text-align: right; }\n.box { border: 1px solid #111; padding: 14px 16px; margin-top: 18px; }\n.label { font-size: 12px; letter-spacing: .08em; text-transform: uppercase; color: #555; }\n.value { font: 700 22px/1.3 ui-monospace, \"SF Mono\", Menlo, Consolas, monospace; word-break: break-all; letter-spacing: .04em; }\n.bar { margin-top: 18px; text-align: center; }\n.bar svg { max-width: 100%; height: auto; }\n.steps { margin: 18px 0 0; padding-left: 20px; }\n.note { margin-top: 18px; font-size: 12px; }\n.pre { white-space: pre-line; }\n.actions { margin-top: 24px; display: flex; gap: 12px; }\n.actions button { font: inherit; padding: 10px 18px; border: 1px solid #111; background: #111; color: #fff; cursor: pointer; }\n@media print { .actions { display: none; } main { padding: 0; } }\n`\n\nfunction formatMoney(m: Money | null, locale: string): string {\n if (!m) return ''\n try {\n return new Intl.NumberFormat(locale, { style: 'currency', currency: m.currency_code }).format(Number(m.amount))\n } catch {\n return `${m.amount} ${m.currency_code}`\n }\n}\n\nfunction formatDate(iso: string | null, locale: string, timeZone?: string): string {\n if (!iso) return ''\n const d = new Date(iso)\n if (Number.isNaN(d.getTime())) return ''\n try {\n return d.toLocaleString(locale, { dateStyle: 'long', timeStyle: 'short', ...(timeZone ? { timeZone } : {}) })\n } catch {\n return d.toISOString()\n }\n}\n\nfunction barcodeSvg(value: string, label: string): string | null {\n const g = barcodeGeometry(value)\n if (!g) return null\n const rects = g.rects.map((r) => `<rect x=\"${r.x}\" y=\"0\" width=\"${r.w}\" height=\"${g.height}\"/>`).join('')\n return `<svg viewBox=\"0 0 ${g.width} ${g.height}\" width=\"${g.width}\" height=\"${g.height}\" role=\"img\" aria-label=\"${esc(label)} ${esc(value)}\" shape-rendering=\"crispEdges\" fill=\"#000\">${rects}</svg>`\n}\n\n/** Complete HTML document of the voucher. Missing data is simply not drawn. */\nexport function renderVoucherDocument(v: VoucherView, opts: VoucherDocumentOptions = {}): string {\n const locale = opts.locale ?? 'es-MX'\n const t = locale.toLowerCase().startsWith('en') ? EN : ES\n const shop = opts.shopName || ''\n // Own keys only: a gateway method named `constructor` or `__proto__` must print as itself, not as Object internals.\n const method = v.method ? (Object.prototype.hasOwnProperty.call(t.methods, v.method.toLowerCase()) ? t.methods[v.method.toLowerCase()]! : v.method) : t.cash\n const isSpei = !!v.clabe && !v.reference\n const code = barcodeValue(v)\n const svg = code ? barcodeSvg(code, t.barcode) : null\n const expires = formatDate(v.expires_at, locale, opts.timeZone)\n const field = (label: string, value: string | null) => (value ? `<div class=\"box\"><div class=\"label\">${esc(label)}</div><div class=\"value\">${esc(value)}</div></div>` : '')\n const steps = isSpei ? t.stepsSpei : t.stepsCash\n const subtitle = [shop, method, opts.number ? `${t.order} ${opts.number}` : ''].filter(Boolean).map(esc).join(' · ')\n return `<!doctype html>\n<html lang=\"${esc(locale)}\"><head><meta charset=\"utf-8\"><meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n<meta name=\"robots\" content=\"noindex\"><title>${esc(t.title)}${shop ? ` - ${esc(shop)}` : ''}</title><style>${CSS}</style></head>\n<body><main>\n<div class=\"head\"><div><h1>${esc(t.title)}</h1><div class=\"muted\">${subtitle}</div></div>\n${v.amount ? `<div><div class=\"label\" style=\"text-align:right\">${esc(t.total)}</div><div class=\"amount\">${esc(formatMoney(v.amount, locale))}</div></div>` : ''}</div>\n${field(t.reference, v.reference)}${field(t.clabe, v.clabe)}\n${svg ? `<div class=\"bar\">${svg}<div class=\"muted\" style=\"font-family:ui-monospace,monospace\">${esc(code as string)}</div></div>` : ''}\n${expires ? `<p><strong>${esc(t.expires)}:</strong> ${esc(expires)}. ${esc(t.expiresNote)}</p>` : ''}\n<ol class=\"steps\">${steps.map((s) => `<li>${esc(s)}</li>`).join('')}</ol>\n${v.instructions ? `<p class=\"note pre muted\">${esc(v.instructions)}</p>` : ''}\n<p class=\"note muted\">${esc(t.footer)}</p>\n${opts.printButton ? `<div class=\"actions\"><button type=\"button\" id=\"print\">${esc(t.print)}</button></div>` : ''}\n</main>\n${opts.printButton || opts.autoPrint ? `<script${opts.nonce ? ` nonce=\"${esc(opts.nonce)}\"` : ''}>(function(){var b=document.getElementById(\"print\");if(b)b.addEventListener(\"click\",function(){window.print()});${opts.autoPrint ? 'window.addEventListener(\"load\",function(){setTimeout(function(){window.print()},300)});' : ''}})();</script>` : ''}\n</body></html>`\n}\n","/**\n * Form fields of a checkout with inline validation: a labelled field that shows its own error under it, a focusable\n * error summary for the submit, and one hook that reads the browser's own constraint validation (`required`, `type`,\n * `pattern`, `minLength`...) so the rules stay in the HTML and the page keeps working without JavaScript (then the\n * browser explains the errors itself).\n *\n * WCAG 2.2: errors are identified in text next to the field (3.3.1), linked with `aria-describedby` and `aria-invalid`,\n * and the summary takes focus and links to every field (3.3.1 / 2.4.3). Validation runs when the buyer leaves a field\n * that has a value, and clears as soon as it is fixed: it never nags while typing.\n */\nimport { useEffect, useRef, useState, type InputHTMLAttributes, type ReactNode, type RefObject, type SelectHTMLAttributes } from 'react'\n\nexport type FieldMessages = {\n valueMissing: string\n /** Required radio group (delivery, payment). */\n choiceMissing: string\n email: string\n tel: string\n pattern: string\n /** `{n}` = minimum length. */\n tooShort: string\n /** A field the server rejected. */\n server: string\n /** Error summary title, `{n}` = number of fields. */\n summaryOne: string\n summaryMany: string\n optional: string\n}\n\nconst ES: FieldMessages = {\n valueMissing: 'Completa este campo.',\n choiceMissing: 'Elige una opción.',\n email: 'Escribe un correo válido, por ejemplo nombre@correo.com.',\n tel: 'Escribe un teléfono válido.',\n pattern: 'Revisa el formato.',\n tooShort: 'Escribe al menos {n} caracteres.',\n server: 'Revisa este campo.',\n summaryOne: 'Revisa 1 campo para continuar',\n summaryMany: 'Revisa {n} campos para continuar',\n optional: '(opcional)',\n}\n\nconst EN: FieldMessages = {\n valueMissing: 'Fill in this field.',\n choiceMissing: 'Choose an option.',\n email: 'Enter a valid email, like name@example.com.',\n tel: 'Enter a valid phone number.',\n pattern: 'Check the format.',\n tooShort: 'Enter at least {n} characters.',\n server: 'Check this field.',\n summaryOne: 'Check 1 field to continue',\n summaryMany: 'Check {n} fields to continue',\n optional: '(optional)',\n}\n\n/** Messages for a locale (`es*` default, `en*`), with optional overrides. */\nexport function fieldMessages(locale?: string | null, overrides?: Partial<FieldMessages> | null): FieldMessages {\n const base = (locale ?? 'es-MX').toLowerCase().startsWith('en') ? EN : ES\n return overrides ? { ...base, ...overrides } : base\n}\n\n/** Field name -> error text. */\nexport type FieldErrors = Record<string, string>\n\nexport type ErrorSummaryItem = { name: string; id: string; label: string; message: string }\n\ntype Control = HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement\n\nconst isControl = (el: EventTarget | null): el is Control =>\n !!el && typeof (el as Element).tagName === 'string' && ['INPUT', 'SELECT', 'TEXTAREA'].includes((el as Element).tagName) && !!(el as Control).name\n\n/**\n * The error text for a control, from its validity. A control can bring its own text with `data-sf-error` (any\n * failure) or `title` (pattern mismatch, the HTML convention).\n */\nexport function validationMessage(el: Control, m: FieldMessages = ES): string | null {\n const v = el.validity\n if (!v || v.valid) return null\n const own = el.getAttribute('data-sf-error')\n if (own) return own\n if (v.valueMissing) return el instanceof HTMLInputElement && (el.type === 'radio' || el.type === 'checkbox') ? m.choiceMissing : m.valueMissing\n if (v.typeMismatch && el instanceof HTMLInputElement) return el.type === 'email' ? m.email : el.type === 'tel' ? m.tel : m.pattern\n if (v.patternMismatch) return el.getAttribute('title') || (el instanceof HTMLInputElement && el.type === 'tel' ? m.tel : m.pattern)\n if (v.tooShort && el instanceof HTMLInputElement) return m.tooShort.replace('{n}', String(el.minLength))\n return el.validationMessage || m.pattern\n}\n\n/** Visible name of a control: its `<label>`, `aria-label`, or the legend of its group (radios). */\nfunction labelOf(el: Control): string {\n if (el instanceof HTMLInputElement && el.type === 'radio') {\n const legend = el.closest('fieldset')?.querySelector('legend')\n if (legend?.textContent) return legend.textContent.trim()\n }\n const text = el.labels?.[0]?.getAttribute('data-sf-label') ?? el.labels?.[0]?.textContent ?? el.getAttribute('aria-label') ?? el.name\n return text.trim()\n}\n\nexport type UseFieldErrorsOptions = {\n locale?: string\n messages?: Partial<FieldMessages>\n /** Fields the server rejected (e.g. from the action), shown with `serverMessages[name]` or the generic text. */\n serverFields?: Iterable<string> | null\n serverMessages?: Record<string, string> | null\n}\n\nexport type FieldErrorsState = {\n errors: FieldErrors\n /** Non-null after a submit with problems (or with server errors): render it in `<ErrorSummary>`. */\n summary: ErrorSummaryItem[] | null\n /** Changes every time a new summary appears, so `<ErrorSummary>` focuses it again. */\n summaryKey: number\n clear: () => void\n}\n\n/**\n * Inline validation for the page `<form>`. Listens to the form (no wrapping component): leaving a field with a value\n * checks it; typing in a field with an error clears it when fixed; a submit or `reportValidity()` with problems\n * collects them (the browser's bubbles are replaced by the inline texts) for the summary.\n */\nexport function useFieldErrors(formRef: RefObject<HTMLFormElement | null>, options: UseFieldErrorsOptions = {}): FieldErrorsState {\n const m = fieldMessages(options.locale, options.messages)\n const live = useRef(m)\n live.current = m\n const server = [...(options.serverFields ?? [])]\n const serverKey = server.join('|')\n const [errors, setErrors] = useState<FieldErrors>(() => Object.fromEntries(server.map((n) => [n, options.serverMessages?.[n] ?? m.server])))\n const [summary, setSummary] = useState<ErrorSummaryItem[] | null>(null)\n const [summaryKey, setSummaryKey] = useState(0)\n\n // Server errors (a new action result): inline texts plus a summary.\n useEffect(() => {\n if (!server.length) return\n const form = formRef.current\n const items: ErrorSummaryItem[] = []\n const next: FieldErrors = {}\n for (const name of server) {\n const msg = options.serverMessages?.[name] ?? live.current.server\n next[name] = msg\n const el = form?.elements.namedItem(name)\n const ctl = el && 'length' in el && !(el instanceof HTMLSelectElement) ? ((el as RadioNodeList)[0] as Control | undefined) : (el as Control | null)\n if (ctl) items.push({ name, id: ctl.id || name, label: labelOf(ctl), message: msg })\n }\n setErrors((e) => ({ ...e, ...next }))\n if (items.length) {\n setSummary(items)\n setSummaryKey((k) => k + 1)\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [serverKey])\n\n useEffect(() => {\n const form = formRef.current\n if (!form) return\n let batch: Control[] | null = null\n const set = (name: string, msg: string | null) =>\n setErrors((e) => {\n if (msg === null) {\n if (!(name in e)) return e\n const { [name]: _gone, ...rest } = e\n return rest\n }\n return e[name] === msg ? e : { ...e, [name]: msg }\n })\n const onBlur = (ev: FocusEvent) => {\n const el = ev.target\n if (!isControl(el) || (el instanceof HTMLInputElement && (el.type === 'radio' || el.type === 'checkbox' || el.type === 'hidden'))) return\n // Leaving an empty field you only tabbed through is not an error yet; it is at submit.\n if (!el.value) return\n set(el.name, validationMessage(el, live.current))\n }\n const onInput = (ev: Event) => {\n const el = ev.target\n if (!isControl(el)) return\n setErrors((e) => {\n if (!(el.name in e)) return e\n const msg = el.validity.valid ? null : validationMessage(el, live.current)\n if (msg !== null) return e // keep the text until the field is fixed (no flicker while typing)\n const { [el.name]: _gone, ...rest } = e\n return rest\n })\n }\n const onInvalid = (ev: Event) => {\n const el = ev.target\n if (!isControl(el)) return\n ev.preventDefault() // the inline text replaces the browser bubble\n if (!batch) {\n batch = []\n queueMicrotask(() => {\n const list = batch ?? []\n batch = null\n const seen = new Set<string>()\n const items: ErrorSummaryItem[] = []\n const next: FieldErrors = {}\n for (const c of list) {\n if (seen.has(c.name)) continue\n seen.add(c.name)\n const msg = validationMessage(c, live.current) ?? live.current.valueMissing\n next[c.name] = msg\n items.push({ name: c.name, id: c.id || c.name, label: labelOf(c), message: msg })\n }\n setErrors((e) => ({ ...e, ...next }))\n setSummary(items)\n setSummaryKey((k) => k + 1)\n })\n }\n batch.push(el)\n }\n form.addEventListener('focusout', onBlur)\n form.addEventListener('input', onInput)\n form.addEventListener('change', onInput)\n form.addEventListener('invalid', onInvalid, true)\n return () => {\n form.removeEventListener('focusout', onBlur)\n form.removeEventListener('input', onInput)\n form.removeEventListener('change', onInput)\n form.removeEventListener('invalid', onInvalid, true)\n }\n }, [formRef])\n\n // The summary follows the fixes: a field fixed after the submit leaves the list.\n const shown = summary ? summary.filter((s) => s.name in errors).map((s) => ({ ...s, message: errors[s.name]! })) : null\n return {\n errors,\n summary: shown && shown.length ? shown : null,\n summaryKey,\n clear: () => {\n setErrors({})\n setSummary(null)\n },\n }\n}\n\nexport type ErrorSummaryProps = {\n items: readonly ErrorSummaryItem[] | null\n /** Changes when a new summary must take focus (`useFieldErrors().summaryKey`). */\n focusKey?: number\n locale?: string\n messages?: Partial<FieldMessages>\n title?: ReactNode\n className?: string\n classNames?: Partial<Record<'title' | 'list' | 'link', string>>\n}\n\n/**\n * The list of problems after a submit, above the form: `role=\"alert\"`, takes focus, one link per field (moves the\n * focus to it). Renders nothing without items.\n */\nexport function ErrorSummary({ items, focusKey, locale, messages, title, className, classNames: cx = {} }: ErrorSummaryProps) {\n const ref = useRef<HTMLDivElement>(null)\n const m = fieldMessages(locale, messages)\n const has = !!items && items.length > 0\n useEffect(() => {\n if (has) ref.current?.focus()\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [focusKey])\n if (!has) return null\n const n = items!.length\n return (\n <div ref={ref} role=\"alert\" tabIndex={-1} className={className} data-sf-error-summary aria-labelledby=\"sf-error-summary-title\">\n <p id=\"sf-error-summary-title\" className={cx.title} data-sf-error-summary-title>\n {title ?? (n === 1 ? m.summaryOne : m.summaryMany.replace('{n}', String(n)))}\n </p>\n <ul className={cx.list}>\n {items!.map((it) => (\n <li key={it.name}>\n <a\n href={`#${it.id}`}\n className={cx.link}\n onClick={(e) => {\n const el = document.getElementById(it.id)\n if (!el) return\n e.preventDefault()\n el.focus()\n el.scrollIntoView?.({ block: 'center' })\n }}\n >\n {it.label}: {it.message}\n </a>\n </li>\n ))}\n </ul>\n </div>\n )\n}\n\nexport type CheckoutFieldClassNames = Partial<Record<'root' | 'label' | 'optional' | 'input' | 'hint' | 'error', string>>\n\ntype BaseFieldProps = {\n name: string\n label: string\n /** Field id. Default: the name. */\n id?: string\n /** Error text (from `useFieldErrors().errors[name]` or the server). */\n error?: string | null\n /** Help under the label (\"we only use it for the delivery\"). */\n hint?: ReactNode\n /** Marks the label \"(optional)\" and drops `required`. */\n optional?: boolean\n classNames?: CheckoutFieldClassNames\n locale?: string\n messages?: Partial<FieldMessages>\n}\n\nexport type CheckoutFieldProps = BaseFieldProps & Omit<InputHTMLAttributes<HTMLInputElement>, 'name' | 'id'> & { as?: 'input' }\nexport type CheckoutSelectProps = BaseFieldProps & Omit<SelectHTMLAttributes<HTMLSelectElement>, 'name' | 'id'> & { as: 'select'; children: ReactNode }\n\n/**\n * One labelled field: label (with \"(optional)\"), hint, the control and its error text, wired with `aria-describedby`\n * and `aria-invalid`. Required unless `optional`. `as=\"select\"` renders a `<select>` with the given options.\n */\nexport function CheckoutField(props: CheckoutFieldProps | CheckoutSelectProps) {\n const { name, label, id = name, error, hint, optional = false, classNames: cx = {}, locale, messages, ...rest } = props\n const m = fieldMessages(locale, messages)\n const hintId = hint ? `${id}-hint` : undefined\n const errorId = `${id}-error`\n const describedBy = [hintId, error ? errorId : undefined].filter(Boolean).join(' ') || undefined\n const common = {\n id,\n name,\n required: !optional,\n 'aria-invalid': error ? true : undefined,\n 'aria-describedby': describedBy,\n className: cx.input,\n 'data-sf-field-control': '',\n } as const\n return (\n <div className={cx.root} data-sf-field data-invalid={error ? '' : undefined}>\n <label htmlFor={id} className={cx.label} data-sf-label={label}>\n {label}\n {optional ? (\n <span className={cx.optional} data-sf-field-optional>\n {' '}\n {m.optional}\n </span>\n ) : null}\n </label>\n {hint ? (\n <p id={hintId} className={cx.hint} data-sf-field-hint>\n {hint}\n </p>\n ) : null}\n {rest.as === 'select' ? (\n (() => {\n const { as: _as, children, ...select } = rest\n return (\n <select {...select} {...common}>\n {children}\n </select>\n )\n })()\n ) : (\n (() => {\n const { as: _as, ...input } = rest as CheckoutFieldProps\n return <input {...input} {...common} />\n })()\n )}\n {/* Reserved only when there is an error: the text sits right under its field. */}\n {error ? (\n <p id={errorId} className={cx.error} data-sf-field-error>\n {error}\n </p>\n ) : null}\n </div>\n )\n}\n","/**\n * The account screen: sign in with password, create an account, verify the emailed code, sign in with a code and\n * recover a forgotten password, in one `<form method=\"post\">` driven by `createAuthAction` (`./server`). What the store\n * offers comes from `loadAuthCapabilities`; the form shows only that. Plain HTML: it works without JavaScript for the\n * password sign-in and the steps the action sends back; the view switches (links) need JavaScript.\n *\n * Styling: `data-sf-account-*` attributes and `classNames` slots, fields reuse `CheckoutField` (and `checkout.css`);\n * `account.css` is an optional neutral sheet. Texts are Spanish by default, English with `locale=\"en\"`, any with `messages`.\n */\nimport { useEffect, useRef, useState, type ComponentType, type ReactNode } from 'react'\nimport type { CustomerCapabilities } from '@asteby/storefront'\nimport { CheckoutField, ErrorSummary, useFieldErrors, type CheckoutFieldClassNames } from '../checkout/fields.js'\nimport type { AuthActionData, AuthErrorCode, AuthStep } from './types.js'\n\nexport type AccountAuthView = 'login' | 'register' | 'otp-email' | 'forgot' | AuthStep\n\nexport type AccountAuthMessages = {\n titles: Record<AccountAuthView, string>\n email: string\n password: string\n newPassword: string\n passwordHint: string\n firstName: string\n lastName: string\n code: string\n codeSentTo: string\n submit: Record<AccountAuthView, string>\n resend: string\n forgotLink: string\n registerLink: string\n loginLink: string\n otpLink: string\n backToLogin: string\n nothingAvailable: string\n errors: Record<AuthErrorCode, string>\n}\n\nconst ES: AccountAuthMessages = {\n titles: {\n login: 'Entrar a tu cuenta',\n register: 'Crear una cuenta',\n verify: 'Confirma tu correo',\n 'otp-email': 'Entrar con un código',\n otp: 'Escribe tu código',\n forgot: 'Recuperar contraseña',\n reset: 'Elige una contraseña nueva',\n },\n email: 'Correo electrónico',\n password: 'Contraseña',\n newPassword: 'Contraseña nueva',\n passwordHint: 'Entre 10 y 128 caracteres.',\n firstName: 'Nombre',\n lastName: 'Apellido',\n code: 'Código',\n codeSentTo: 'Enviamos un código a {email}. Puede tardar un minuto.',\n submit: {\n login: 'Entrar',\n register: 'Crear cuenta',\n verify: 'Confirmar',\n 'otp-email': 'Enviarme el código',\n otp: 'Entrar',\n forgot: 'Enviarme el código',\n reset: 'Guardar y entrar',\n },\n resend: 'Reenviar código',\n forgotLink: '¿Olvidaste tu contraseña?',\n registerLink: 'Crear una cuenta',\n loginLink: 'Ya tengo cuenta',\n otpLink: 'Entrar con un código por correo',\n backToLogin: 'Volver a entrar con contraseña',\n nothingAvailable: 'Esta tienda no admite iniciar sesión por ahora.',\n errors: {\n invalid_credentials: 'El correo o la contraseña no coinciden.',\n invalid_code: 'El código no es válido o ya venció.',\n email_taken: 'Ya existe una cuenta con este correo. Entra o recupera tu contraseña.',\n rate_limited: 'Demasiados intentos. Espera unos minutos e inténtalo de nuevo.',\n validation: 'Revisa los datos e inténtalo de nuevo.',\n unsupported: 'Esta forma de entrar no está disponible en esta tienda.',\n store_misconfigured: 'No pudimos crear tu cuenta por un problema de configuración de la tienda. Puedes comprar como invitado; ya avisamos a la tienda.',\n unavailable: 'No pudimos completar la acción. Inténtalo de nuevo en un momento.',\n },\n}\n\nconst EN: AccountAuthMessages = {\n titles: {\n login: 'Sign in',\n register: 'Create an account',\n verify: 'Confirm your email',\n 'otp-email': 'Sign in with a code',\n otp: 'Enter your code',\n forgot: 'Reset your password',\n reset: 'Choose a new password',\n },\n email: 'Email',\n password: 'Password',\n newPassword: 'New password',\n passwordHint: 'Between 10 and 128 characters.',\n firstName: 'First name',\n lastName: 'Last name',\n code: 'Code',\n codeSentTo: 'We sent a code to {email}. It can take a minute.',\n submit: {\n login: 'Sign in',\n register: 'Create account',\n verify: 'Confirm',\n 'otp-email': 'Email me the code',\n otp: 'Sign in',\n forgot: 'Email me the code',\n reset: 'Save and sign in',\n },\n resend: 'Resend code',\n forgotLink: 'Forgot your password?',\n registerLink: 'Create an account',\n loginLink: 'I already have an account',\n otpLink: 'Sign in with an emailed code',\n backToLogin: 'Back to password sign-in',\n nothingAvailable: 'This store does not support signing in right now.',\n errors: {\n invalid_credentials: 'The email and password do not match.',\n invalid_code: 'The code is not valid or has expired.',\n email_taken: 'An account with this email already exists. Sign in or reset your password.',\n rate_limited: 'Too many attempts. Wait a few minutes and try again.',\n validation: 'Check the details and try again.',\n unsupported: 'This way of signing in is not available in this store.',\n store_misconfigured: 'We could not create your account because of a store configuration problem. You can check out as a guest; we have already told the store.',\n unavailable: 'We could not complete that. Try again in a moment.',\n },\n}\n\n/** Messages for a locale (`es*` default, `en*`), with optional overrides (nested `titles`/`submit`/`errors` merge). */\nexport function accountAuthMessages(locale?: string | null, overrides?: DeepPartial<AccountAuthMessages> | null): AccountAuthMessages {\n const base = (locale ?? 'es-MX').toLowerCase().startsWith('en') ? EN : ES\n if (!overrides) return base\n return {\n ...base,\n ...(overrides as Partial<AccountAuthMessages>),\n titles: { ...base.titles, ...overrides.titles },\n submit: { ...base.submit, ...overrides.submit },\n errors: { ...base.errors, ...overrides.errors },\n }\n}\n\ntype DeepPartial<T> = { [K in keyof T]?: T[K] extends Record<string, string> ? Partial<T[K]> : T[K] }\n\nexport type AccountAuthClassNames = Partial<Record<'root' | 'title' | 'form' | 'notice' | 'error' | 'actions' | 'submit' | 'links' | 'link', string>> & {\n field?: CheckoutFieldClassNames\n}\n\n/** What `<AccountAuth>` passes to its `form` component: the few props a router `Form` and the HTML `<form>` both accept. */\nexport type AccountFormProps = {\n method?: 'post'\n action?: string\n className?: string\n children?: ReactNode\n /** Loose on purpose: a router `Form` types its ref with its own copy of `@types/react`. */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ref?: any\n 'data-sf-account-form'?: boolean | string\n}\n\nexport type AccountAuthProps = {\n /** From `loadAuthCapabilities` (the loader). */\n capabilities: CustomerCapabilities\n /** What the action returned (`useActionData()`); drives the next screen and the errors. */\n data?: AuthActionData | null\n /** Where to go after signing in (sent as `next`; the server validates it). */\n next?: string | null\n /** A submit is in flight (`navigation.state !== 'idle'`): disables the buttons. */\n pending?: boolean\n /** First screen. Default `login`, or `otp-email` when the store has no password sign-in. */\n initialView?: AccountAuthView\n /** Form component, e.g. React Router's `Form`, to submit without a reload. It must forward `ref` to the `<form>` (React 19: a prop). Default: the HTML `<form>`. */\n form?: 'form' | ComponentType<AccountFormProps>\n /** `action` of the form (default: the current URL). */\n action?: string\n locale?: string\n messages?: DeepPartial<AccountAuthMessages>\n classNames?: AccountAuthClassNames\n /** Shown above the form (a logo, a welcome text). */\n header?: ReactNode\n}\n\nconst initialOf = (caps: CustomerCapabilities, initialView?: AccountAuthView): AccountAuthView =>\n initialView ?? (caps.password ? 'login' : caps.otp_channels.includes('email') ? 'otp-email' : 'login')\n\n/**\n * The whole account screen. Headless enough to restyle, complete enough to drop in:\n * `export default function Account() { return <AccountAuth capabilities={useLoaderData()} data={useActionData()} form={Form} /> }`.\n */\nexport function AccountAuth({ capabilities, data, next, pending = false, initialView, form: FormTag = 'form', action, locale, messages, classNames: cx = {}, header }: AccountAuthProps) {\n const m = accountAuthMessages(locale, messages)\n const passwordOn = capabilities.password\n const otpOn = capabilities.otp_channels.includes('email')\n const [view, setView] = useState<AccountAuthView>(() => data?.step ?? initialOf(capabilities, initialView))\n const [email, setEmail] = useState(data?.email ?? '')\n const ref = useRef<HTMLFormElement>(null)\n const serverFields = data?.error?.field ? [data.error.field] : null\n const errorText = data?.error ? m.errors[data.error.code] : null\n const v = useFieldErrors(ref, { ...(locale ? { locale } : {}), serverFields, serverMessages: data?.error?.field && errorText ? { [data.error.field]: errorText } : null })\n\n // The action decides the next screen; the email it carries survives it.\n useEffect(() => {\n if (data?.step) setView(data.step)\n if (data?.email) setEmail(data.email)\n }, [data])\n\n const go = (to: AccountAuthView) => {\n v.clear()\n setView(to)\n }\n const fieldProps = { classNames: cx.field, ...(locale ? { locale } : {}) }\n const emailField = (\n <CheckoutField {...fieldProps} name=\"email\" type=\"email\" label={m.email} autoComplete=\"email\" inputMode=\"email\" value={email} onChange={(e) => setEmail(e.currentTarget.value)} error={v.errors.email ?? null} />\n )\n const codeField = (\n <CheckoutField {...fieldProps} name=\"code\" label={m.code} autoComplete=\"one-time-code\" inputMode=\"numeric\" pattern=\"[0-9]*\" error={v.errors.code ?? null} />\n )\n const passwordField = (label: string, autoComplete: string, newPassword: boolean) => (\n <CheckoutField\n {...fieldProps}\n name=\"password\"\n type=\"password\"\n label={label}\n autoComplete={autoComplete}\n error={v.errors.password ?? null}\n {...(newPassword ? { minLength: 10, maxLength: 128, hint: m.passwordHint } : {})}\n />\n )\n const link = (to: AccountAuthView, text: string) => (\n <button type=\"button\" className={cx.link} data-sf-account-link={to} onClick={() => go(to)}>\n {text}\n </button>\n )\n\n let body: ReactNode\n let links: ReactNode = null\n switch (view) {\n case 'register':\n body = (\n <>\n <CheckoutField {...fieldProps} name=\"first_name\" label={m.firstName} autoComplete=\"given-name\" optional />\n <CheckoutField {...fieldProps} name=\"last_name\" label={m.lastName} autoComplete=\"family-name\" optional />\n {emailField}\n {passwordField(m.password, 'new-password', true)}\n </>\n )\n links = link('login', m.loginLink)\n break\n case 'verify':\n case 'otp':\n body = (\n <>\n <p className={cx.notice} data-sf-account-notice>\n {m.codeSentTo.replace('{email}', email)}\n </p>\n <input type=\"hidden\" name=\"email\" value={email} />\n {codeField}\n </>\n )\n links = (\n <>\n {view === 'otp' ? (\n <button type=\"submit\" name=\"intent\" value=\"otp-request\" formNoValidate className={cx.link} data-sf-account-link=\"resend\">\n {m.resend}\n </button>\n ) : null}\n {link('login', m.backToLogin)}\n </>\n )\n break\n case 'otp-email':\n case 'forgot':\n body = emailField\n links = link('login', m.backToLogin)\n break\n case 'reset':\n body = (\n <>\n <p className={cx.notice} data-sf-account-notice>\n {m.codeSentTo.replace('{email}', email)}\n </p>\n <input type=\"hidden\" name=\"email\" value={email} />\n {codeField}\n {passwordField(m.newPassword, 'new-password', true)}\n </>\n )\n links = link('login', m.backToLogin)\n break\n default:\n body = (\n <>\n {emailField}\n {passwordField(m.password, 'current-password', false)}\n </>\n )\n links = (\n <>\n {otpOn ? link('forgot', m.forgotLink) : null}\n {link('register', m.registerLink)}\n {otpOn ? link('otp-email', m.otpLink) : null}\n </>\n )\n }\n\n const intent = { login: 'login', register: 'register', verify: 'verify', 'otp-email': 'otp-request', otp: 'otp-login', forgot: 'forgot', reset: 'reset' }[view]\n // Without password accounts the password views do not exist; only the code sign-in does.\n const available = view === 'login' || view === 'register' || view === 'forgot' || view === 'reset' || view === 'verify' ? passwordOn : otpOn\n const showSummary = !data?.error?.field\n const title = m.titles[view]\n if (!available && !passwordOn && !otpOn) {\n return (\n <section className={cx.root} data-sf-account-auth data-sf-account-view=\"unavailable\">\n <p className={cx.notice} role=\"status\">\n {capabilities.unavailable_reason === 'missing_scope' ? m.errors.store_misconfigured : m.nothingAvailable}\n </p>\n </section>\n )\n }\n return (\n <section className={cx.root} data-sf-account-auth data-sf-account-view={view} aria-labelledby=\"sf-account-title\">\n {header}\n <h1 id=\"sf-account-title\" className={cx.title}>\n {title}\n </h1>\n <FormTag ref={ref as never} method=\"post\" {...(action ? { action } : {})} className={cx.form} data-sf-account-form>\n <ErrorSummary items={v.summary} focusKey={v.summaryKey} {...(locale ? { locale } : {})} />\n {errorText && showSummary ? (\n <p role=\"alert\" className={cx.error} data-sf-account-error={data!.error!.code}>\n {errorText}\n </p>\n ) : null}\n {next ? <input type=\"hidden\" name=\"next\" value={next} /> : null}\n {body}\n <div className={cx.actions}>\n <button type=\"submit\" name=\"intent\" value={intent} disabled={pending} className={cx.submit} data-sf-account-submit>\n {m.submit[view]}\n </button>\n </div>\n <div className={cx.links} data-sf-account-links>\n {links}\n </div>\n </FormTag>\n </section>\n )\n}\n","/**\n * Post-purchase invitation to create an account, for the thank-you page (`/pagar/gracias`). Headless: no styles of its\n * own, `data-sf-ppa-*` hooks and `classNames` slots. It reuses the account action (`createAuthAction`, `./server`):\n * the form posts `register` (or `otp-request` in a store without passwords) with the buyer's email, so the verification,\n * the session cookie and the errors are exactly the ones of `<AccountAuth>`; nothing about addresses or phones is asked.\n *\n * Privacy: the email is the one of the receipt the SERVER read from the buyer's own session (the `email` prop); it is\n * sent as a hidden field and never editable here, so the form cannot be used to probe other addresses. With email\n * verification the action answers the same whether or not the address already has an account (no enumeration); the\n * guest orders of that address show up in the order history once the mailbox is verified (the store's addon scopes by\n * VERIFIED email). Without verification the account is created unverified and its history does not include guest\n * orders: the text then promises nothing about the order.\n *\n * Texts are Spanish by default, English with `locale=\"en\"`, any with `messages`.\n */\nimport { useRef, type ComponentType, type ReactNode } from 'react'\nimport type { CustomerCapabilities } from '@asteby/storefront'\nimport { CheckoutField, ErrorSummary, useFieldErrors, type CheckoutFieldClassNames } from '../checkout/fields.js'\nimport type { AccountFormProps } from './account-auth.js'\nimport type { AuthActionData, AuthErrorCode } from './types.js'\n\nexport type PostPurchaseAccountPromptMessages = {\n title: string\n /** Why, when the email is verified and the guest order will appear in the history. `{email}` is replaced. */\n benefit: string\n /** Why, when it will not (no email verification in the store). */\n benefitBasic: string\n accountFor: string\n password: string\n passwordHint: string\n code: string\n codeSentTo: string\n submit: string\n submitOtp: string\n submitCode: string\n skipNote: string\n loginLink: string\n errors: Record<AuthErrorCode, string>\n}\n\nconst ES: PostPurchaseAccountPromptMessages = {\n title: 'Crea tu cuenta para seguir tu pedido',\n benefit: 'Con {email} verás aquí tu pedido y su envío, y la próxima compra será más rápida. No te pedimos tu dirección ni tu teléfono otra vez.',\n benefitBasic: 'Guarda tus datos para que la próxima compra sea más rápida.',\n accountFor: 'Cuenta para {email}',\n password: 'Contraseña',\n passwordHint: 'Entre 10 y 128 caracteres.',\n code: 'Código',\n codeSentTo: 'Enviamos un código a {email}. Puede tardar un minuto.',\n submit: 'Crear cuenta',\n submitOtp: 'Enviarme un código',\n submitCode: 'Confirmar',\n skipNote: 'Si no quieres cuenta, no pasa nada: te avisaremos por correo de tu pedido.',\n loginLink: 'Ya tengo cuenta',\n errors: {\n invalid_credentials: 'El correo o la contraseña no coinciden.',\n invalid_code: 'El código no es válido o ya venció.',\n email_taken: 'Ya existe una cuenta con este correo. Entra para ver tu pedido.',\n rate_limited: 'Demasiados intentos. Espera unos minutos e inténtalo de nuevo.',\n validation: 'Revisa los datos e inténtalo de nuevo.',\n unsupported: 'Esta tienda no permite crear cuentas por ahora.',\n store_misconfigured: 'No pudimos crear tu cuenta por un problema de configuración de la tienda. Tu pedido sigue en pie.',\n unavailable: 'No pudimos completar la acción. Inténtalo de nuevo en un momento.',\n },\n}\n\nconst EN: PostPurchaseAccountPromptMessages = {\n title: 'Create your account to follow your order',\n benefit: 'With {email} you will see your order and its shipment here, and your next purchase will be faster. We will not ask for your address or phone again.',\n benefitBasic: 'Save your details so your next purchase is faster.',\n accountFor: 'Account for {email}',\n password: 'Password',\n passwordHint: 'Between 10 and 128 characters.',\n code: 'Code',\n codeSentTo: 'We sent a code to {email}. It can take a minute.',\n submit: 'Create account',\n submitOtp: 'Email me a code',\n submitCode: 'Confirm',\n skipNote: 'If you do not want an account, that is fine: we will email you about your order.',\n loginLink: 'I already have an account',\n errors: {\n invalid_credentials: 'The email and password do not match.',\n invalid_code: 'The code is not valid or has expired.',\n email_taken: 'An account with this email already exists. Sign in to see your order.',\n rate_limited: 'Too many attempts. Wait a few minutes and try again.',\n validation: 'Check the details and try again.',\n unsupported: 'This store does not allow creating accounts right now.',\n store_misconfigured: 'We could not create your account because of a store configuration problem. Your order is safe.',\n unavailable: 'We could not complete that. Try again in a moment.',\n },\n}\n\ntype DeepPartial<T> = { [K in keyof T]?: T[K] extends Record<string, string> ? Partial<T[K]> : T[K] }\n\n/** Messages for a locale (`es*` default, `en*`), with optional overrides (`errors` merges). */\nexport function postPurchaseAccountPromptMessages(locale?: string | null, overrides?: DeepPartial<PostPurchaseAccountPromptMessages> | null): PostPurchaseAccountPromptMessages {\n const base = (locale ?? 'es-MX').toLowerCase().startsWith('en') ? EN : ES\n if (!overrides) return base\n return { ...base, ...(overrides as Partial<PostPurchaseAccountPromptMessages>), errors: { ...base.errors, ...overrides.errors } }\n}\n\nexport type PostPurchaseAccountPromptClassNames = Partial<Record<'root' | 'title' | 'text' | 'email' | 'form' | 'notice' | 'error' | 'actions' | 'submit' | 'note' | 'link', string>> & {\n field?: CheckoutFieldClassNames\n}\n\nexport type PostPurchaseAccountPromptProps = {\n /** The buyer's email from the receipt of THIS session (read on the server). Without it nothing renders. */\n email?: string | null\n /** From `loadAuthCapabilities`. Without password nor email codes nothing renders. */\n capabilities: CustomerCapabilities\n /** What the account action returned (`useActionData()`); drives the code step and the errors. */\n data?: AuthActionData | null\n /** Where to go after the account is ready (sent as `next`; the server validates it). E.g. the order history. */\n next?: string | null\n /** A submit is in flight: disables the button. */\n pending?: boolean\n /** Form component, e.g. React Router's `Form`. Default: the HTML `<form>`. */\n form?: 'form' | ComponentType<AccountFormProps>\n /** `action` of the form: the route that mounts `createAuthAction`. Default: the current URL. */\n action?: string\n /** Heading level of the title (default 2). */\n headingLevel?: 2 | 3 | 4\n /** Where \"I already have an account\" goes (e.g. `/cuenta/entrar?next=...`). Omitted: no link. */\n loginHref?: string | null\n locale?: string\n messages?: DeepPartial<PostPurchaseAccountPromptMessages>\n classNames?: PostPurchaseAccountPromptClassNames\n /** Extra content under the form. */\n children?: ReactNode\n}\n\nconst validEmail = (v: string | null | undefined): v is string => typeof v === 'string' && v.length <= 254 && /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/.test(v.trim())\n\n/**\n * `<PostPurchaseAccountPrompt email={receipt.email} capabilities={caps} data={actionData} form={Form} next=\"/cuenta/pedidos\" />`\n */\nexport function PostPurchaseAccountPrompt({\n email,\n capabilities,\n data,\n next,\n pending = false,\n form: FormTag = 'form',\n action,\n headingLevel = 2,\n loginHref,\n locale,\n messages,\n classNames: cx = {},\n children,\n}: PostPurchaseAccountPromptProps) {\n const m = postPurchaseAccountPromptMessages(locale, messages)\n const ref = useRef<HTMLFormElement>(null)\n const passwordOn = capabilities.password\n const otpOn = capabilities.otp_channels.includes('email')\n const errorText = data?.error ? m.errors[data.error.code] : null\n const v = useFieldErrors(ref, { ...(locale ? { locale } : {}), serverFields: data?.error?.field === 'code' || data?.error?.field === 'password' ? [data.error.field] : null, serverMessages: data?.error?.field && errorText ? { [data.error.field]: errorText } : null })\n if (!validEmail(email) || (!passwordOn && !otpOn)) return null\n\n const address = email.trim().toLowerCase()\n const step = data?.step === 'verify' || data?.step === 'otp' ? data.step : null\n const view = step ?? (passwordOn ? 'register' : 'otp-request')\n const intent = step === 'verify' ? 'verify' : step === 'otp' ? 'otp-login' : passwordOn ? 'register' : 'otp-request'\n const label = view === 'verify' || view === 'otp' ? m.submitCode : view === 'otp-request' ? m.submitOtp : m.submit\n const Heading = `h${headingLevel}` as 'h2'\n const fieldProps = { classNames: cx.field, ...(locale ? { locale } : {}) }\n // Only the errors with no field of their own go in the alert; the others are inline.\n const showAlert = errorText && !(data?.error?.field === 'code' || data?.error?.field === 'password')\n // Only a verified mailbox earns the guest order in the history (storefront_customers scopes by verified email).\n const benefit = (capabilities.email_verification ? m.benefit : m.benefitBasic).replace('{email}', address)\n\n return (\n <section className={cx.root} data-sf-ppa data-sf-ppa-view={view} aria-labelledby=\"sf-ppa-title\">\n <Heading id=\"sf-ppa-title\" className={cx.title}>\n {m.title}\n </Heading>\n <p className={cx.text} data-sf-ppa-benefit>\n {benefit}\n </p>\n <FormTag ref={ref as never} method=\"post\" {...(action ? { action } : {})} className={cx.form} data-sf-ppa-form>\n <ErrorSummary items={v.summary} focusKey={v.summaryKey} {...(locale ? { locale } : {})} />\n {showAlert ? (\n <p role=\"alert\" className={cx.error} data-sf-ppa-error={data!.error!.code}>\n {errorText}\n </p>\n ) : null}\n <input type=\"hidden\" name=\"email\" value={address} />\n {next ? <input type=\"hidden\" name=\"next\" value={next} /> : null}\n <p className={cx.email} data-sf-ppa-email>\n {m.accountFor.replace('{email}', address)}\n </p>\n {step ? (\n <>\n <p className={cx.notice} role=\"status\" data-sf-ppa-notice>\n {m.codeSentTo.replace('{email}', address)}\n </p>\n <CheckoutField {...fieldProps} name=\"code\" label={m.code} autoComplete=\"one-time-code\" inputMode=\"numeric\" pattern=\"[0-9]*\" error={v.errors.code ?? null} />\n </>\n ) : passwordOn ? (\n <CheckoutField {...fieldProps} name=\"password\" type=\"password\" label={m.password} autoComplete=\"new-password\" minLength={10} maxLength={128} hint={m.passwordHint} error={v.errors.password ?? null} />\n ) : null}\n <div className={cx.actions}>\n <button type=\"submit\" name=\"intent\" value={intent} disabled={pending} className={cx.submit} data-sf-ppa-submit>\n {label}\n </button>\n </div>\n </FormTag>\n <p className={cx.note} data-sf-ppa-note>\n {m.skipNote}\n {loginHref ? (\n <>\n {' '}\n <a href={loginHref} className={cx.link} data-sf-ppa-login>\n {m.loginLink}\n </a>\n </>\n ) : null}\n </p>\n {children}\n </section>\n )\n}\n","/** Texts of the fiscal components. Spanish (es-MX) by default, English with `en*`, any locale with `messages`. */\nimport type { FiscalReadError } from './types.js'\n\nexport type DeepPartial<T> = { [K in keyof T]?: T[K] extends Record<string, unknown> ? DeepPartial<T[K]> : T[K] }\n\nexport type FiscalMessages = {\n fields: {\n legend: string\n taxId: string\n taxIdHint: string\n legalName: string\n /** Used when the region publishes no help for the legal name. */\n legalNameHint: string\n postalCode: string\n postalCodeHint: string\n regime: string\n regimeHint: string\n regimeChoose: string\n regimeFromDocument: string\n use: string\n useHint: string\n useChoose: string\n /** `{document}` = the document's name. */\n fromDocument: string\n /** Mark on an invoice use the region suggested (an editable preselection). */\n suggested: string\n errors: {\n required: string\n taxIdFormat: string\n postalFormat: string\n unknown: string\n personType: string\n useNotAllowed: string\n }\n }\n reader: {\n /** `{document}`. */\n title: string\n dropHint: string\n dropActive: string\n choose: string\n obtain: string\n privacyBrowser: string\n privacyServer: string\n uploadServer: string\n manual: string\n reading: string\n cancel: string\n done: string\n reviewTitle: string\n reviewHint: string\n confirm: string\n changeFile: string\n saveToAccount: string\n saveConsent: string\n warnings: { qrMismatch: string; stale: string; regimeMissing: string; fieldsMissing: string; qrPartial: string }\n /** Reading a photo or the camera (the region's `image_mode`). `{document}` where noted. */\n scan: {\n title: string\n photo: string\n photoHint: string\n camera: string\n cameraTitle: string\n cameraGuide: string\n cameraStarting: string\n cameraRead: string\n cameraDenied: string\n cameraUnavailable: string\n closeCamera: string\n choosePhoto: string\n /** Button that opens the sheet; `{document}` is the document's label. */\n open: string\n manual: string\n close: string\n }\n errors: Record<FiscalReadError, string>\n summaryTitleOne: string\n summaryTitleMany: string\n }\n toggle: {\n label: string\n payDefault: string\n payAndInvoice: string\n profileTitle: string\n change: string\n useOther: string\n useSaved: string\n manualTitle: string\n unavailable: string\n privacy: string\n fieldsOf: { taxId: string; legalName: string; postalCode: string; regime: string; use: string }\n }\n status: {\n title: string\n request: string\n requestHelp: string\n awaitingTitle: string\n awaitingBody: string\n processingTitle: string\n processingBody: string\n processingSlow: string\n refresh: string\n issuedTitle: string\n issuedBody: string\n folio: string\n pdf: string\n xml: string\n needsDataTitle: string\n needsDataBody: string\n correct: string\n reviewTitle: string\n reviewBody: string\n contact: string\n contactBy: string\n windowTitle: string\n windowBody: string\n unavailableTitle: string\n unavailableBody: string\n /** The server says the store has no invoicing active (`capabilities.invoicing.available: false`). */\n notEnabledTitle: string\n notEnabledBody: string\n /** The server does not say (older server) or could not be asked: never claims the store does not invoice. */\n unknownTitle: string\n unknownBody: string\n unreachableBody: string\n /** Invoicing in test mode (sandbox): invoices have no fiscal validity. */\n sandbox: string\n /** `{days}`: how long after the purchase an invoice can be requested. */\n windowNote: string\n cancelledTitle: string\n cancelledBody: string\n /** `reason_code` -> cause for the buyer. `default` when unknown. */\n reasons: Record<string, string>\n }\n server: { errors: Record<string, string> }\n}\n\nconst ES: FiscalMessages = {\n fields: {\n legend: 'Datos fiscales',\n taxId: 'RFC',\n taxIdHint: 'Se escribe en mayúsculas y sin espacios.',\n legalName: 'Nombre o razón social',\n legalNameHint: 'Escríbelo tal como aparece en tu registro fiscal.',\n postalCode: 'Código postal fiscal',\n postalCodeHint: 'El de tu domicilio fiscal, que puede ser distinto al de entrega.',\n regime: 'Régimen fiscal',\n regimeHint: 'Solo mostramos los que aplican a tu tipo de persona.',\n regimeChoose: 'Elige tu régimen',\n regimeFromDocument: 'Tu documento menciona más de un régimen. Elige el que usarás para esta factura.',\n use: 'Uso de la factura',\n useHint: 'Solo mostramos los usos que admite tu régimen.',\n useChoose: 'Elige el uso',\n fromDocument: 'De tu {document}',\n suggested: 'Sugerido',\n errors: {\n required: 'Completa este campo.',\n taxIdFormat: 'Revisa el formato: {kind} no válido.',\n postalFormat: 'Escribe un código postal válido, por ejemplo {example}.',\n unknown: 'Elige una opción de la lista.',\n personType: 'Este régimen no corresponde a tu tipo de persona.',\n useNotAllowed: 'Este uso no está disponible con el régimen elegido.',\n },\n },\n reader: {\n title: 'Sube tu {document}',\n dropHint: 'Arrastra el PDF aquí o toca para elegirlo',\n dropActive: 'Suelta el archivo para leerlo',\n choose: 'Elegir archivo',\n obtain: 'Descárgala aquí',\n privacyBrowser: 'La leemos en tu dispositivo. No guardamos el archivo, solo los datos que confirmes.',\n privacyServer: 'La procesamos y la descartamos al terminar. Solo guardamos los datos que confirmes.',\n uploadServer: 'Leer mi archivo',\n manual: 'Captura tus datos a mano',\n reading: 'Leyendo tu {document}…',\n cancel: 'Cancelar',\n done: 'Listo. Revisa tus datos.',\n reviewTitle: 'Revisa tus datos',\n reviewHint: 'Puedes corregir cualquier campo antes de continuar.',\n confirm: 'Usar estos datos',\n changeFile: 'Subir otro archivo',\n saveToAccount: 'Guardar en mi cuenta para la próxima',\n saveConsent: 'Guardaremos estos datos en tu cuenta para facturar más rápido. Puedes borrarlos cuando quieras.',\n warnings: {\n qrMismatch: 'El código QR de tu documento no coincide con los datos leídos. Revisa con calma tu RFC y tu nombre.',\n stale: 'Tu documento tiene {days} días de emitido. Si algo cambió en tu registro, descarga uno nuevo.',\n regimeMissing: 'No pudimos detectar tu régimen. Elígelo de la lista.',\n fieldsMissing: 'No encontramos algunos datos en el documento. Complétalos para continuar.',\n qrPartial: 'Del código QR solo leímos tu identificador fiscal. Completa los demás datos o sube el PDF.',\n },\n scan: {\n title: 'Escanea tu {document}',\n photo: 'Tomar foto del QR',\n photoHint: 'Enfoca el código QR de tu documento.',\n camera: 'Escanear con la cámara',\n cameraTitle: 'Apunta al código QR',\n cameraGuide: 'Centra el código QR dentro del marco.',\n cameraStarting: 'Abriendo la cámara…',\n cameraRead: 'Código leído',\n cameraDenied: 'No pudimos usar la cámara. Elige una foto o sube el PDF.',\n cameraUnavailable: 'Este dispositivo no permite usar la cámara aquí. Elige una foto o sube el PDF.',\n closeCamera: 'Cerrar la cámara',\n choosePhoto: 'Elegir una foto',\n open: 'Escanear {document}',\n manual: 'Capturar a mano',\n close: 'Cerrar',\n },\n errors: {\n not_pdf: 'Ese archivo no es un PDF. Sube el PDF que descargaste o captura tus datos a mano.',\n too_large: 'El archivo pesa más de {size}. Sube el PDF original o captura tus datos a mano.',\n no_text: 'Este PDF parece una imagen escaneada y no podemos leerlo. Captura tus datos a mano.',\n password: 'Este PDF tiene contraseña y no podemos abrirlo. Descárgalo de nuevo sin contraseña o captura tus datos a mano.',\n unreadable: 'No pudimos leer este archivo. Inténtalo con otro o captura tus datos a mano.',\n no_qr: 'No encontramos el código QR en la foto. Acércate, evita reflejos o sube el PDF.',\n not_image: 'Ese archivo no es una foto que podamos leer. Toma otra foto o sube el PDF.',\n },\n summaryTitleOne: 'Revisa 1 campo para continuar',\n summaryTitleMany: 'Revisa {n} campos para continuar',\n },\n toggle: {\n label: 'Necesito factura (CFDI)',\n payDefault: 'Pagar',\n payAndInvoice: 'Pagar y facturar',\n profileTitle: 'Facturaremos con estos datos',\n change: 'Cambiar',\n useOther: 'Usar otros datos',\n useSaved: 'Usar mis datos guardados',\n manualTitle: 'Datos de facturación',\n unavailable: 'Esta tienda todavía no factura en línea.',\n privacy: 'Usamos estos datos solo para emitir tu factura.',\n fieldsOf: { taxId: 'RFC', legalName: 'Nombre o razón social', postalCode: 'Código postal fiscal', regime: 'Régimen', use: 'Uso' },\n },\n status: {\n title: 'Factura',\n request: 'Solicitar factura',\n requestHelp: '¿Necesitas factura de este pedido?',\n awaitingTitle: 'Esperando tu pago',\n awaitingBody: 'Cuando se acredite tu pago emitimos la factura. Con OXXO o transferencia puede tardar un poco.',\n processingTitle: 'Estamos generando tu factura',\n processingBody: 'Suele tardar menos de un minuto. Esta página se actualiza sola.',\n processingSlow: 'Sigue en proceso. Puedes cerrar esta página: tu factura aparecerá aquí cuando esté lista.',\n refresh: 'Actualizar',\n issuedTitle: 'Tu factura está lista',\n issuedBody: 'Descárgala cuando la necesites. Los enlaces vencen en 15 minutos; vuelve a abrir esta página para generar nuevos.',\n folio: 'Folio fiscal',\n pdf: 'Descargar PDF',\n xml: 'Descargar XML',\n needsDataTitle: 'Faltan datos para tu factura',\n needsDataBody: 'No pudimos emitirla con los datos que nos diste.',\n correct: 'Corregir y reintentar',\n reviewTitle: 'La tienda está revisando tu factura',\n reviewBody: 'Necesita una revisión del negocio. No tienes que hacer nada más; si tarda, escríbenos.',\n contact: 'Contactar a la tienda',\n contactBy: 'Escríbenos a {contact} con tu número de pedido.',\n windowTitle: 'Ya pasó el plazo para facturar',\n windowBody: 'Este pedido está fuera del plazo para pedir factura. Si necesitas ayuda, contacta a la tienda.',\n unavailableTitle: 'Factura no disponible',\n unavailableBody: 'Este pedido no se puede facturar por ahora. Si la necesitas, contacta a la tienda.',\n notEnabledTitle: 'Facturación aún no activa',\n notEnabledBody: 'La tienda todavía no tiene la facturación en línea activa. Si necesitas factura, contáctala.',\n unknownTitle: 'Factura',\n unknownBody: 'Por ahora no podemos mostrar el estado de la facturación de este pedido. Si necesitas factura, contacta a la tienda.',\n unreachableBody: 'No pudimos verificar la facturación en este momento. Inténtalo de nuevo en unos minutos o contacta a la tienda.',\n sandbox: 'Facturación en pruebas (sandbox): las facturas no tienen validez fiscal.',\n windowNote: 'Puedes pedirla hasta {days} días después de la compra.',\n cancelledTitle: 'Factura cancelada',\n cancelledBody: 'Esta factura fue cancelada. Si necesitas una nueva, contacta a la tienda.',\n reasons: {\n 'invoice.tax_id': 'El RFC no es válido.',\n 'invoice.legal_name': 'El nombre o la razón social no coincide con tu registro.',\n 'invoice.tax_regime': 'El régimen fiscal no es válido para tus datos.',\n 'invoice.postal_code': 'El código postal fiscal no es válido.',\n 'invoice.use': 'El uso de la factura no es válido con tu régimen.',\n default: 'Revisa tus datos fiscales y vuelve a intentarlo.',\n },\n },\n server: {\n errors: {\n validation: 'Revisa este campo.',\n required: 'Completa este campo.',\n invalid: 'El valor no es válido.',\n },\n },\n}\n\nconst EN: FiscalMessages = {\n fields: {\n legend: 'Tax details',\n taxId: 'Tax ID',\n taxIdHint: 'Uppercase, without spaces.',\n legalName: 'Legal name',\n legalNameHint: 'Write it as it appears in your tax registration.',\n postalCode: 'Tax postal code',\n postalCodeHint: 'The one of your tax address, which can differ from the delivery address.',\n regime: 'Tax regime',\n regimeHint: 'We only list the ones that apply to your kind of taxpayer.',\n regimeChoose: 'Choose your regime',\n regimeFromDocument: 'Your document lists more than one regime. Choose the one for this invoice.',\n use: 'Invoice use',\n useHint: 'We only list the uses your regime admits.',\n useChoose: 'Choose the use',\n fromDocument: 'From your {document}',\n suggested: 'Suggested',\n errors: {\n required: 'Fill in this field.',\n taxIdFormat: 'Check the format: not a valid {kind}.',\n postalFormat: 'Enter a valid postal code, like {example}.',\n unknown: 'Choose an option from the list.',\n personType: 'This regime does not match your kind of taxpayer.',\n useNotAllowed: 'This use is not available with the chosen regime.',\n },\n },\n reader: {\n title: 'Upload your {document}',\n dropHint: 'Drag the PDF here or tap to choose it',\n dropActive: 'Drop the file to read it',\n choose: 'Choose file',\n obtain: 'Get it here',\n privacyBrowser: 'We read it on your device. We do not keep the file, only the details you confirm.',\n privacyServer: 'We process it and discard it when done. We only keep the details you confirm.',\n uploadServer: 'Read my file',\n manual: 'Enter your details by hand',\n reading: 'Reading your {document}…',\n cancel: 'Cancel',\n done: 'Done. Review your details.',\n reviewTitle: 'Review your details',\n reviewHint: 'You can fix any field before continuing.',\n confirm: 'Use these details',\n changeFile: 'Upload another file',\n saveToAccount: 'Save to my account for next time',\n saveConsent: 'We will save these details to your account to invoice faster. You can delete them any time.',\n warnings: {\n qrMismatch: 'The QR code of your document does not match what we read. Check your tax ID and name carefully.',\n stale: 'Your document was issued {days} days ago. If something changed in your registration, download a new one.',\n regimeMissing: 'We could not detect your regime. Choose it from the list.',\n fieldsMissing: 'We did not find some details in the document. Fill them in to continue.',\n qrPartial: 'The QR code only gave us your tax ID. Fill in the rest or upload the PDF.',\n },\n scan: {\n title: 'Scan your {document}',\n photo: 'Take a photo of the QR',\n photoHint: 'Point at the QR code of your document.',\n camera: 'Scan with the camera',\n cameraTitle: 'Point at the QR code',\n cameraGuide: 'Center the QR code inside the frame.',\n cameraStarting: 'Opening the camera…',\n cameraRead: 'Code read',\n cameraDenied: 'We could not use the camera. Choose a photo or upload the PDF.',\n cameraUnavailable: 'This device does not allow the camera here. Choose a photo or upload the PDF.',\n closeCamera: 'Close the camera',\n choosePhoto: 'Choose a photo',\n open: 'Scan {document}',\n manual: 'Enter by hand',\n close: 'Close',\n },\n errors: {\n not_pdf: 'That file is not a PDF. Upload the PDF you downloaded or enter your details by hand.',\n too_large: 'The file is larger than {size}. Upload the original PDF or enter your details by hand.',\n no_text: 'This PDF looks like a scanned image and we cannot read it. Enter your details by hand.',\n password: 'This PDF is password protected and we cannot open it. Download it again without a password or enter your details by hand.',\n unreadable: 'We could not read this file. Try another one or enter your details by hand.',\n no_qr: 'We could not find the QR code in the photo. Move closer, avoid glare or upload the PDF.',\n not_image: 'That file is not a photo we can read. Take another photo or upload the PDF.',\n },\n summaryTitleOne: 'Check 1 field to continue',\n summaryTitleMany: 'Check {n} fields to continue',\n },\n toggle: {\n label: 'I need an invoice',\n payDefault: 'Pay',\n payAndInvoice: 'Pay and invoice',\n profileTitle: 'We will invoice with these details',\n change: 'Change',\n useOther: 'Use other details',\n useSaved: 'Use my saved details',\n manualTitle: 'Invoice details',\n unavailable: 'This store does not invoice online yet.',\n privacy: 'We only use these details to issue your invoice.',\n fieldsOf: { taxId: 'Tax ID', legalName: 'Legal name', postalCode: 'Tax postal code', regime: 'Regime', use: 'Use' },\n },\n status: {\n title: 'Invoice',\n request: 'Request invoice',\n requestHelp: 'Do you need an invoice for this order?',\n awaitingTitle: 'Waiting for your payment',\n awaitingBody: 'We issue the invoice once your payment clears. Cash and bank transfers can take a while.',\n processingTitle: 'We are generating your invoice',\n processingBody: 'It usually takes under a minute. This page updates by itself.',\n processingSlow: 'Still in progress. You can close this page: your invoice will show up here when it is ready.',\n refresh: 'Refresh',\n issuedTitle: 'Your invoice is ready',\n issuedBody: 'Download it whenever you need. The links expire in 15 minutes; reopen this page for new ones.',\n folio: 'Tax folio',\n pdf: 'Download PDF',\n xml: 'Download XML',\n needsDataTitle: 'Your invoice needs more details',\n needsDataBody: 'We could not issue it with the details you gave us.',\n correct: 'Fix and retry',\n reviewTitle: 'The store is reviewing your invoice',\n reviewBody: 'It needs a review by the business. You do not need to do anything else; if it takes long, write to us.',\n contact: 'Contact the store',\n contactBy: 'Write to {contact} with your order number.',\n windowTitle: 'The invoicing period has ended',\n windowBody: 'This order is outside the period to request an invoice. If you need help, contact the store.',\n unavailableTitle: 'Invoice not available',\n unavailableBody: 'This order cannot be invoiced right now. If you need one, contact the store.',\n notEnabledTitle: 'Invoicing not active yet',\n notEnabledBody: 'The store has not turned on online invoicing yet. If you need an invoice, contact them.',\n unknownTitle: 'Invoice',\n unknownBody: 'We cannot show the invoicing status of this order right now. If you need an invoice, contact the store.',\n unreachableBody: 'We could not check invoicing right now. Try again in a few minutes or contact the store.',\n sandbox: 'Invoicing in test mode (sandbox): invoices have no fiscal validity.',\n windowNote: 'You can request it up to {days} days after the purchase.',\n cancelledTitle: 'Invoice cancelled',\n cancelledBody: 'This invoice was cancelled. If you need a new one, contact the store.',\n reasons: {\n 'invoice.tax_id': 'The tax ID is not valid.',\n 'invoice.legal_name': 'The legal name does not match your registration.',\n 'invoice.tax_regime': 'The tax regime is not valid for your details.',\n 'invoice.postal_code': 'The tax postal code is not valid.',\n 'invoice.use': 'The invoice use is not valid with your regime.',\n default: 'Check your tax details and try again.',\n },\n },\n server: {\n errors: {\n validation: 'Check this field.',\n required: 'Fill in this field.',\n invalid: 'The value is not valid.',\n },\n },\n}\n\nconst merge = <T extends Record<string, unknown>>(base: T, over: DeepPartial<T> | undefined): T => {\n if (!over) return base\n const out: Record<string, unknown> = { ...base }\n for (const [k, v] of Object.entries(over)) {\n if (v === undefined) continue\n const b = base[k]\n out[k] = typeof v === 'object' && v !== null && !Array.isArray(v) && typeof b === 'object' && b !== null ? merge(b as Record<string, unknown>, v as DeepPartial<Record<string, unknown>>) : v\n }\n return out as T\n}\n\n/** Messages for a locale (`es*` default, `en*`), with optional overrides (merged level by level). */\nexport function fiscalMessages(locale?: string | null, overrides?: DeepPartial<FiscalMessages> | null): FiscalMessages {\n const base = (locale ?? 'es-MX').toLowerCase().startsWith('en') ? EN : ES\n return overrides ? merge(base, overrides) : base\n}\n\n/** `{name}` placeholders. */\nexport function fill(template: string, vars: Record<string, string | number>): string {\n return template.replace(/\\{(\\w+)\\}/g, (m, k: string) => (k in vars ? String(vars[k]) : m))\n}\n","/**\n * Texts of the order screens (`OrderList`, `OrderProgress`, `NextActionBar`, `ShipmentCard`, `InvoiceList`,\n * `PendingPaymentCard`, `RefundList`). Spanish (es-MX) by default, English with `en*`, anything with `messages`.\n * Server enums are open: every group has a `*.unknown` text so a value this SDK has never seen reads as plain words,\n * never as a raw code.\n */\nimport { fill } from '../fiscal/messages.js'\n\nexport { fill }\n\nconst ES = {\n // order list\n 'order.number': 'Pedido {number}',\n 'order.placed': 'Realizado el {date}',\n 'order.total': 'Total',\n 'order.view': 'Ver pedido',\n 'order.items.one': '{count} artículo',\n 'order.items.other': '{count} artículos',\n 'order.lines': 'Artículos del pedido',\n 'order.line.quantity': 'Cantidad {n}',\n 'order.line.each': '{price} c/u',\n 'order.line.unavailable': 'Producto no disponible',\n 'order.productsMore': 'y {n} más',\n 'order.stepOf': 'Paso {n} de {total}: {step}',\n 'order.listLabel': 'Tus pedidos',\n 'order.loading': 'Cargando tus pedidos',\n 'order.loadMore': 'Ver más pedidos',\n 'order.loadingMore': 'Cargando…',\n 'order.error': 'No pudimos cargar tus pedidos. Tus compras están a salvo.',\n 'order.retry': 'Reintentar',\n 'order.emptyTitle': 'Aún no tienes pedidos',\n 'order.emptyBody': 'Cuando compres, aquí verás el estado y el envío de cada pedido.',\n 'order.emptyGuest': '¿Compraste como invitado? Verifica tu correo para ver aquí tus pedidos.',\n // stage (order status)\n 'stage.pending_payment': 'Esperando pago',\n 'stage.paid': 'Pagado',\n 'stage.preparing': 'En preparación',\n 'stage.ready_for_pickup': 'Listo para recoger',\n 'stage.shipped': 'Enviado',\n 'stage.in_transit': 'En camino',\n 'stage.out_for_delivery': 'En reparto',\n 'stage.delivered': 'Entregado',\n 'stage.cancelled': 'Cancelado',\n 'stage.refunded': 'Reembolsado',\n 'stage.unknown': 'En proceso',\n // progress\n 'progress.label': 'Progreso del pedido',\n 'step.paid': 'Pagado',\n 'step.preparing': 'En preparación',\n 'step.shipped': 'Enviado',\n 'step.in_transit': 'En camino',\n 'step.ready_for_pickup': 'Listo para recoger',\n 'step.delivered': 'Entregado',\n 'step.unknown': 'Siguiente paso',\n 'stepState.done': 'completado',\n 'stepState.current': 'paso actual',\n 'stepState.pending': 'pendiente',\n 'stepState.problem': 'con incidencia',\n 'problem.delivery_exception': 'Hubo un problema con la entrega. Contacta a la tienda si no se resuelve.',\n 'problem.returned': 'El paquete regresó a la tienda. Contáctanos para coordinar un nuevo envío.',\n 'problem.lost': 'No encontramos tu paquete. Contáctanos y lo resolvemos.',\n 'problem.payment_failed': 'El pago no se completó. Puedes intentarlo de nuevo.',\n 'problem.unknown': 'Tu pedido tiene una incidencia. Contacta a la tienda.',\n 'progress.cancelled': 'Este pedido fue cancelado.',\n 'progress.refunded': 'Este pedido fue reembolsado.',\n // next action\n 'action.pay': 'Pagar ahora',\n 'action.track': 'Rastrear envío',\n 'action.pickup': 'Recoger en sucursal',\n 'action.download_invoice': 'Descargar factura',\n 'action.request_invoice': 'Solicitar factura',\n 'action.correct_invoice_data': 'Corregir datos de facturación',\n 'action.contact_store': 'Contactar a la tienda',\n 'action.unknown': 'Ver detalle',\n 'action.newTab': '(se abre en una pestaña nueva)',\n 'action.label': 'Siguiente paso del pedido',\n // shipment\n 'shipment.title': 'Envío',\n 'shipment.return': 'Devolución',\n 'shipment.carrier': 'Paquetería',\n 'shipment.service': 'Servicio',\n 'shipment.number': 'Número de guía',\n 'shipment.copy': 'Copiar',\n 'shipment.copied': 'Copiado',\n 'shipment.copyFailed': 'No pudimos copiar; selecciona el texto.',\n 'shipment.track': 'Rastrear con {carrier}',\n 'shipment.trackGeneric': 'Rastrear envío',\n 'shipment.promised': 'Llega a más tardar el {date}',\n 'shipment.delivered': 'Entregado el {date}',\n 'shipment.shipped': 'Enviado el {date}',\n 'shipment.events': 'Movimientos',\n 'shipment.noEvents': 'La paquetería aún no registra movimientos; suele tardar 24 horas.',\n 'shipment.showAll': 'Ver todo ({count})',\n 'shipment.showLess': 'Ver menos',\n 'shipment.returnLabel': 'Guía de devolución',\n 'shipment.test': 'De prueba',\n 'shipment.testNote': 'Envío de prueba: no es un envío real.',\n 'shipment.preparing': 'Preparando tu envío',\n 'shipment.status.pending': 'Preparando envío',\n 'shipment.status.label_created': 'Guía generada',\n 'shipment.status.in_transit': 'En camino',\n 'shipment.status.out_for_delivery': 'En reparto',\n 'shipment.status.delivered': 'Entregado',\n 'shipment.status.exception': 'Incidencia en la entrega',\n 'shipment.status.returned': 'Devuelto a la tienda',\n 'shipment.status.lost': 'Extraviado',\n 'shipment.status.cancelled': 'Cancelado',\n 'shipment.status.unknown': 'En proceso',\n 'shipment.eventFrom': '{location}',\n // invoices\n 'invoice.title': 'Facturas',\n 'invoice.invoice': 'Factura',\n 'invoice.creditNote': 'Nota de crédito',\n 'invoice.creditNoteOf': 'Corrige la factura {folio}',\n 'invoice.folio': 'Folio fiscal',\n 'invoice.series': 'Serie y folio',\n 'invoice.issued': 'Emitida el {date}',\n 'invoice.total': 'Total',\n 'invoice.pdf': 'Descargar PDF',\n 'invoice.xml': 'Descargar XML',\n 'invoice.downloadOf': '{action}, {kind} {name}',\n 'invoice.none': 'Aún no hay facturas de este pedido.',\n 'invoice.test': 'Factura de prueba, sin validez',\n 'invoice.status.issued': 'Emitida',\n 'invoice.status.pending': 'En proceso',\n 'invoice.status.cancelled': 'Cancelada',\n 'invoice.status.error': 'No se pudo emitir',\n 'invoice.status.unknown': 'En proceso',\n 'invoice.statusNote.pending': 'La estamos generando; te avisaremos cuando esté lista.',\n 'invoice.statusNote.error': 'Contacta a la tienda para resolverlo.',\n 'invoice.statusNote.cancelled': 'Esta factura fue cancelada y ya no tiene validez.',\n // pending payment\n 'pending.title': 'Pendientes de pago',\n 'pending.intro': 'Tu pedido se genera en cuanto confirmamos el pago. Paga con la ficha antes de que venza.',\n 'pending.waiting': 'Esperando pago',\n 'pending.expired': 'Vencida',\n 'pending.reference': 'Referencia',\n 'pending.clabe': 'CLABE',\n 'pending.expires': 'Vence el {date}',\n 'pending.expiredOn': 'Venció el {date}',\n 'pending.total': 'Total',\n 'pending.copyReference': 'Copiar referencia',\n 'pending.copyClabe': 'Copiar CLABE',\n 'pending.copied': 'Copiada',\n 'pending.copyFailed': 'No pudimos copiar; selecciona el texto.',\n 'pending.print': 'Ver e imprimir ficha',\n 'pending.download': 'Descargar ficha',\n 'pending.expiredNote': 'Esta ficha ya no es válida. Haz tu pedido de nuevo.',\n 'pending.barcode': 'Código de barras {code}',\n 'pending.method.oxxo': 'OXXO',\n 'pending.method.spei': 'Transferencia SPEI',\n 'pending.method.bank_transfer': 'Transferencia bancaria',\n 'pending.method.bank_deposit': 'Depósito bancario',\n 'pending.method.cash': 'Pago en efectivo',\n 'pending.method.unknown': 'Pago en efectivo',\n // refunds & payments\n 'refund.title': 'Reembolsos',\n 'refund.status.requested': 'Solicitado',\n 'refund.status.processing': 'En proceso',\n 'refund.status.completed': 'Completado',\n 'refund.status.failed': 'No se pudo completar',\n 'refund.status.unknown': 'En proceso',\n 'refund.requested': 'Solicitado el {date}',\n 'refund.completed': 'Completado el {date}',\n 'refund.none': 'Este pedido no tiene reembolsos.',\n 'payment.title': 'Pagos',\n 'payment.status.paid': 'Pagado',\n 'payment.status.pending': 'Pendiente',\n 'payment.status.failed': 'Fallido',\n 'payment.status.refunded': 'Reembolsado',\n 'payment.status.partially_refunded': 'Reembolsado parcialmente',\n 'payment.status.unknown': 'En proceso',\n 'payment.paidOn': 'Pagado el {date}',\n 'payment.method.card': 'Tarjeta',\n 'payment.method.credit_card': 'Tarjeta de crédito',\n 'payment.method.debit_card': 'Tarjeta de débito',\n 'payment.method.cash_voucher': 'Efectivo con ficha (OXXO, tienda de conveniencia)',\n 'payment.method.oxxo': 'Efectivo en OXXO',\n 'payment.method.spei': 'Transferencia SPEI',\n 'payment.method.transfer': 'Transferencia bancaria',\n 'payment.method.bank_deposit': 'Depósito bancario',\n 'payment.method.wallet': 'Billetera digital',\n 'payment.method.cash': 'Efectivo',\n 'payment.method.other': 'Otro medio de pago',\n 'payment.method.unknown': 'Medio de pago',\n // sections\n 'section.error': 'No pudimos cargar esta sección.',\n 'section.retry': 'Reintentar',\n 'section.loading': 'Cargando',\n} as const\n\nexport type AccountMessageKey = keyof typeof ES\nexport type AccountMessages = Record<AccountMessageKey, string>\n\nconst EN: AccountMessages = {\n 'order.number': 'Order {number}',\n 'order.placed': 'Placed on {date}',\n 'order.total': 'Total',\n 'order.view': 'View order',\n 'order.items.one': '{count} item',\n 'order.items.other': '{count} items',\n 'order.lines': 'Items in this order',\n 'order.line.quantity': 'Quantity {n}',\n 'order.line.each': '{price} each',\n 'order.line.unavailable': 'Product unavailable',\n 'order.productsMore': 'and {n} more',\n 'order.stepOf': 'Step {n} of {total}: {step}',\n 'order.listLabel': 'Your orders',\n 'order.loading': 'Loading your orders',\n 'order.loadMore': 'Show more orders',\n 'order.loadingMore': 'Loading…',\n 'order.error': 'We could not load your orders. Your purchases are safe.',\n 'order.retry': 'Try again',\n 'order.emptyTitle': 'You have no orders yet',\n 'order.emptyBody': 'When you buy, you will see the status and shipment of each order here.',\n 'order.emptyGuest': 'Did you buy as a guest? Verify your email to see your orders here.',\n 'stage.pending_payment': 'Waiting for payment',\n 'stage.paid': 'Paid',\n 'stage.preparing': 'Being prepared',\n 'stage.ready_for_pickup': 'Ready for pickup',\n 'stage.shipped': 'Shipped',\n 'stage.in_transit': 'On its way',\n 'stage.out_for_delivery': 'Out for delivery',\n 'stage.delivered': 'Delivered',\n 'stage.cancelled': 'Cancelled',\n 'stage.refunded': 'Refunded',\n 'stage.unknown': 'In progress',\n 'progress.label': 'Order progress',\n 'step.paid': 'Paid',\n 'step.preparing': 'Being prepared',\n 'step.shipped': 'Shipped',\n 'step.in_transit': 'On its way',\n 'step.ready_for_pickup': 'Ready for pickup',\n 'step.delivered': 'Delivered',\n 'step.unknown': 'Next step',\n 'stepState.done': 'completed',\n 'stepState.current': 'current step',\n 'stepState.pending': 'pending',\n 'stepState.problem': 'has a problem',\n 'problem.delivery_exception': 'There was a problem with the delivery. Contact the store if it is not resolved.',\n 'problem.returned': 'The package went back to the store. Contact us to arrange a new shipment.',\n 'problem.lost': 'We could not find your package. Contact us and we will sort it out.',\n 'problem.payment_failed': 'The payment did not go through. You can try again.',\n 'problem.unknown': 'Your order has a problem. Contact the store.',\n 'progress.cancelled': 'This order was cancelled.',\n 'progress.refunded': 'This order was refunded.',\n 'action.pay': 'Pay now',\n 'action.track': 'Track shipment',\n 'action.pickup': 'Pick up in store',\n 'action.download_invoice': 'Download invoice',\n 'action.request_invoice': 'Request invoice',\n 'action.correct_invoice_data': 'Fix billing details',\n 'action.contact_store': 'Contact the store',\n 'action.unknown': 'View details',\n 'action.newTab': '(opens in a new tab)',\n 'action.label': 'Next step of the order',\n 'shipment.title': 'Shipment',\n 'shipment.return': 'Return',\n 'shipment.carrier': 'Carrier',\n 'shipment.service': 'Service',\n 'shipment.number': 'Tracking number',\n 'shipment.copy': 'Copy',\n 'shipment.copied': 'Copied',\n 'shipment.copyFailed': 'We could not copy; select the text.',\n 'shipment.track': 'Track with {carrier}',\n 'shipment.trackGeneric': 'Track shipment',\n 'shipment.promised': 'Arrives by {date}',\n 'shipment.delivered': 'Delivered on {date}',\n 'shipment.shipped': 'Shipped on {date}',\n 'shipment.events': 'Updates',\n 'shipment.noEvents': 'The carrier has not reported any movement yet; it usually takes 24 hours.',\n 'shipment.showAll': 'Show all ({count})',\n 'shipment.showLess': 'Show less',\n 'shipment.returnLabel': 'Return label',\n 'shipment.test': 'Test',\n 'shipment.testNote': 'Test shipment: it is not a real shipment.',\n 'shipment.preparing': 'Preparing your shipment',\n 'shipment.status.pending': 'Preparing shipment',\n 'shipment.status.label_created': 'Label created',\n 'shipment.status.in_transit': 'On its way',\n 'shipment.status.out_for_delivery': 'Out for delivery',\n 'shipment.status.delivered': 'Delivered',\n 'shipment.status.exception': 'Delivery problem',\n 'shipment.status.returned': 'Returned to the store',\n 'shipment.status.lost': 'Lost',\n 'shipment.status.cancelled': 'Cancelled',\n 'shipment.status.unknown': 'In progress',\n 'shipment.eventFrom': '{location}',\n 'invoice.title': 'Invoices',\n 'invoice.invoice': 'Invoice',\n 'invoice.creditNote': 'Credit note',\n 'invoice.creditNoteOf': 'Corrects invoice {folio}',\n 'invoice.folio': 'Tax folio',\n 'invoice.series': 'Series and number',\n 'invoice.issued': 'Issued on {date}',\n 'invoice.total': 'Total',\n 'invoice.pdf': 'Download PDF',\n 'invoice.xml': 'Download XML',\n 'invoice.downloadOf': '{action}, {kind} {name}',\n 'invoice.none': 'There are no invoices for this order yet.',\n 'invoice.test': 'Test invoice, not valid',\n 'invoice.status.issued': 'Issued',\n 'invoice.status.pending': 'In progress',\n 'invoice.status.cancelled': 'Cancelled',\n 'invoice.status.error': 'Could not be issued',\n 'invoice.status.unknown': 'In progress',\n 'invoice.statusNote.pending': 'We are generating it; we will let you know when it is ready.',\n 'invoice.statusNote.error': 'Contact the store to resolve it.',\n 'invoice.statusNote.cancelled': 'This invoice was cancelled and is no longer valid.',\n 'pending.title': 'Waiting for payment',\n 'pending.intro': 'Your order is created as soon as we confirm the payment. Pay with the voucher before it expires.',\n 'pending.waiting': 'Waiting for payment',\n 'pending.expired': 'Expired',\n 'pending.reference': 'Reference',\n 'pending.clabe': 'CLABE',\n 'pending.expires': 'Expires on {date}',\n 'pending.expiredOn': 'Expired on {date}',\n 'pending.total': 'Total',\n 'pending.copyReference': 'Copy reference',\n 'pending.copyClabe': 'Copy CLABE',\n 'pending.copied': 'Copied',\n 'pending.copyFailed': 'We could not copy; select the text.',\n 'pending.print': 'View and print voucher',\n 'pending.download': 'Download voucher',\n 'pending.expiredNote': 'This voucher is no longer valid. Place your order again.',\n 'pending.barcode': 'Barcode {code}',\n 'pending.method.oxxo': 'OXXO',\n 'pending.method.spei': 'SPEI transfer',\n 'pending.method.bank_transfer': 'Bank transfer',\n 'pending.method.bank_deposit': 'Bank deposit',\n 'pending.method.cash': 'Cash payment',\n 'pending.method.unknown': 'Cash payment',\n 'refund.title': 'Refunds',\n 'refund.status.requested': 'Requested',\n 'refund.status.processing': 'In progress',\n 'refund.status.completed': 'Completed',\n 'refund.status.failed': 'Could not be completed',\n 'refund.status.unknown': 'In progress',\n 'refund.requested': 'Requested on {date}',\n 'refund.completed': 'Completed on {date}',\n 'refund.none': 'This order has no refunds.',\n 'payment.title': 'Payments',\n 'payment.status.paid': 'Paid',\n 'payment.status.pending': 'Pending',\n 'payment.status.failed': 'Failed',\n 'payment.status.refunded': 'Refunded',\n 'payment.status.partially_refunded': 'Partially refunded',\n 'payment.status.unknown': 'In progress',\n 'payment.paidOn': 'Paid on {date}',\n 'payment.method.card': 'Card',\n 'payment.method.credit_card': 'Credit card',\n 'payment.method.debit_card': 'Debit card',\n 'payment.method.cash_voucher': 'Cash with a voucher (OXXO, convenience store)',\n 'payment.method.oxxo': 'Cash at OXXO',\n 'payment.method.spei': 'SPEI transfer',\n 'payment.method.transfer': 'Bank transfer',\n 'payment.method.bank_deposit': 'Bank deposit',\n 'payment.method.wallet': 'Digital wallet',\n 'payment.method.cash': 'Cash',\n 'payment.method.other': 'Other payment method',\n 'payment.method.unknown': 'Payment method',\n 'section.error': 'We could not load this section.',\n 'section.retry': 'Try again',\n 'section.loading': 'Loading',\n}\n\n/** Messages for a locale (`es*` default, `en*`), with optional per-key overrides. */\nexport function accountMessages(locale?: string | null, overrides?: Partial<AccountMessages> | null): AccountMessages {\n const base: AccountMessages = (locale ?? 'es-MX').toLowerCase().startsWith('en') ? EN : ES\n return overrides ? { ...base, ...overrides } : base\n}\n\n/** Text for an open enum: `<group>.<value>` when this SDK knows it, else `<group>.unknown`. Never the raw value. */\nexport function enumText(m: AccountMessages, group: string, value: unknown): string {\n const key = `${group}.${typeof value === 'string' ? value : ''}` as AccountMessageKey\n return Object.prototype.hasOwnProperty.call(m, key) ? m[key] : m[`${group}.unknown` as AccountMessageKey]\n}\n","import { createContext, useContext, useMemo, type ReactNode } from 'react'\nimport { createStorefrontClient, type Shop, type StorefrontClient, type StorefrontClientOptions } from '@asteby/storefront'\n\nexport type StorefrontContextValue = {\n /** Client for browser-side calls (use a public `pk_` token). */\n client: StorefrontClient | null\n shop: Shop | null\n /** BCP 47 locale used for formatting (defaults to `shop.locale`, then `es-MX`). */\n locale: string\n /** ISO 4217 currency (defaults to `shop.currency_code`, then `MXN`). */\n currency: string\n}\n\nconst StorefrontContext = createContext<StorefrontContextValue | null>(null)\n\nexport type StorefrontProviderProps = {\n /** A ready client. Takes precedence over `config`. */\n client?: StorefrontClient\n /** Options to create the browser client (use a `pk_` token). */\n config?: StorefrontClientOptions\n /** Shop info loaded on the server (root loader). */\n shop?: Shop | null\n locale?: string\n currency?: string\n children?: ReactNode\n}\n\n/**\n * Makes the storefront client, shop, locale and currency available to the\n * tree. SSR-safe: creating the client does not touch `window`.\n */\nexport function StorefrontProvider({ client, config, shop = null, locale, currency, children }: StorefrontProviderProps) {\n const configKey = config ? `${config.baseUrl}|${config.token}|${config.locale ?? ''}|${config.customerToken ?? ''}` : ''\n const resolvedClient = useMemo(\n () => client ?? (config ? createStorefrontClient(config) : null),\n [client, configKey],\n )\n const value = useMemo<StorefrontContextValue>(\n () => ({\n client: resolvedClient,\n shop,\n locale: locale ?? config?.locale ?? shop?.locale ?? 'es-MX',\n currency: currency ?? shop?.currency_code ?? 'MXN',\n }),\n [resolvedClient, shop, locale, currency, config?.locale],\n )\n return <StorefrontContext.Provider value={value}>{children}</StorefrontContext.Provider>\n}\n\n/** Storefront context. Throws outside `<StorefrontProvider>`. */\nexport function useStorefront(): StorefrontContextValue {\n const ctx = useContext(StorefrontContext)\n if (!ctx) throw new Error('useStorefront must be used inside <StorefrontProvider>')\n return ctx\n}\n\n/** Storefront context or `null` outside a provider (for components that work standalone). */\nexport function useOptionalStorefront(): StorefrontContextValue | null {\n return useContext(StorefrontContext)\n}\n\n/** The client from context; throws when the provider has none. */\nexport function useStorefrontClient(): StorefrontClient {\n const { client } = useStorefront()\n if (!client) throw new Error('<StorefrontProvider> needs a `client` or `config` for browser-side calls')\n return client\n}\n","import { createElement, type ComponentPropsWithoutRef, type ElementType, type ReactNode } from 'react'\nimport { formatMoney, parseMoney, type FormatMoneyOptions, type Image as ImageData, type Money as MoneyData, type Product, type ProductVariant } from '@asteby/storefront'\nimport { useOptionalStorefront } from './context.js'\n\n// ---------------------------------------------------------------------------\n// Money\n// ---------------------------------------------------------------------------\n\nexport type MoneyProps<As extends ElementType = 'span'> = FormatMoneyOptions & {\n data: MoneyData\n /** Element to render (default `span`). */\n as?: As\n /** Overrides the provider locale. */\n locale?: string\n} & Omit<ComponentPropsWithoutRef<As>, 'children' | 'as'>\n\n/** Formats `Money` with the provider locale (or `locale`). */\nexport function Money<As extends ElementType = 'span'>({\n data,\n as,\n locale,\n withoutTrailingZeros,\n withoutCurrency,\n currencyDisplay,\n ...rest\n}: MoneyProps<As>) {\n const sf = useOptionalStorefront()\n const text = formatMoney(data, locale ?? sf?.locale, {\n ...(withoutTrailingZeros !== undefined ? { withoutTrailingZeros } : {}),\n ...(withoutCurrency !== undefined ? { withoutCurrency } : {}),\n ...(currencyDisplay !== undefined ? { currencyDisplay } : {}),\n })\n return createElement(as ?? 'span', rest, text)\n}\n\n// ---------------------------------------------------------------------------\n// Image\n// ---------------------------------------------------------------------------\n\nexport const DEFAULT_IMAGE_WIDTHS = [320, 480, 640, 768, 1024, 1280, 1600] as const\n\n/** Builds the URL for one srcset width. */\nexport type ImageLoader = (src: string, width: number, height?: number) => string\n\n/**\n * Default loader: adds `?width=<w>` (the convention of most image CDNs and of\n * the OPS image proxy). URLs that cannot be parsed are returned unchanged.\n */\nexport const defaultImageLoader: ImageLoader = (src, width, height) => {\n try {\n const isAbsolute = /^[a-z][a-z0-9+.-]*:/i.test(src)\n const url = new URL(src, 'http://relative.invalid')\n url.searchParams.set('width', String(width))\n if (height) url.searchParams.set('height', String(height))\n return isAbsolute ? url.toString() : url.pathname + url.search + url.hash\n } catch {\n return src\n }\n}\n\nexport type ImageProps = Omit<ComponentPropsWithoutRef<'img'>, 'src' | 'srcSet' | 'width' | 'height'> & {\n data: ImageData\n /** `sizes` attribute (default `100vw`). */\n sizes?: string\n /** Candidate widths for `srcset` (capped at the intrinsic width when known). */\n widths?: readonly number[]\n /** URL builder per width (default adds `?width=`). Pass `null` to disable srcset. */\n loader?: ImageLoader | null\n /** Above-the-fold image: eager loading and `fetchpriority=\"high\"`. */\n priority?: boolean\n /** Forces an aspect ratio, e.g. `1/1` or `4/3`, used for width/height and srcset heights. */\n aspectRatio?: string\n}\n\nfunction parseRatio(ratio: string | undefined): number | null {\n if (!ratio) return null\n const [w, h] = ratio.split(/[/:]/).map((n) => Number.parseFloat(n))\n return w && h ? w / h : null\n}\n\n/** Responsive `<img>` with `srcset`, lazy by default, intrinsic size to avoid layout shift. */\nexport function Image({\n data,\n sizes = '100vw',\n widths = DEFAULT_IMAGE_WIDTHS,\n loader = defaultImageLoader,\n priority = false,\n aspectRatio,\n alt,\n loading,\n decoding,\n ...rest\n}: ImageProps) {\n const ratio = parseRatio(aspectRatio) ?? (data.width && data.height ? data.width / data.height : null)\n let candidates = [...widths].sort((a, b) => a - b)\n if (data.width) {\n const capped = candidates.filter((w) => w <= data.width!)\n candidates = capped.length ? capped : [data.width]\n }\n const srcSet = loader\n ? candidates.map((w) => `${loader(data.url, w, ratio ? Math.round(w / ratio) : undefined)} ${w}w`).join(', ')\n : undefined\n const width = data.width ?? candidates[candidates.length - 1]\n const height = data.height ?? (ratio && width ? Math.round(width / ratio) : undefined)\n return (\n <img\n src={data.url}\n alt={alt ?? data.alt ?? ''}\n {...(srcSet ? { srcSet, sizes } : {})}\n {...(width ? { width } : {})}\n {...(height ? { height } : {})}\n loading={loading ?? (priority ? 'eager' : 'lazy')}\n decoding={decoding ?? (priority ? 'auto' : 'async')}\n {...(priority ? { fetchPriority: 'high' as const } : {})}\n {...rest}\n />\n )\n}\n\n// ---------------------------------------------------------------------------\n// ProductPrice\n// ---------------------------------------------------------------------------\n\nconst VISUALLY_HIDDEN = {\n position: 'absolute',\n width: 1,\n height: 1,\n padding: 0,\n margin: -1,\n overflow: 'hidden',\n clip: 'rect(0, 0, 0, 0)',\n whiteSpace: 'nowrap',\n border: 0,\n} as const\n\nexport type ProductPriceProps = Omit<ComponentPropsWithoutRef<'div'>, 'children'> & {\n product?: Pick<Product, 'price_range' | 'compare_at_price_range'> | null\n variant?: Pick<ProductVariant, 'price' | 'compare_at_price'> | null\n /** Prefix shown when the product has a price range and no variant is selected (default `Desde`). */\n fromLabel?: ReactNode\n /** Accessible label for the compare-at price (default `Precio anterior`). */\n compareAtLabel?: string\n locale?: string\n withoutTrailingZeros?: boolean\n}\n\n/**\n * Price with optional compare-at (strikethrough). With a `variant` it shows\n * that variant; otherwise the product's minimum price (prefixed with\n * `fromLabel` when prices vary).\n */\nexport function ProductPrice({\n product,\n variant,\n fromLabel = 'Desde',\n compareAtLabel = 'Precio anterior',\n locale,\n withoutTrailingZeros,\n ...rest\n}: ProductPriceProps) {\n let price: MoneyData | null = null\n let compareAt: MoneyData | null = null\n let isRange = false\n if (variant) {\n price = variant.price\n compareAt = variant.compare_at_price\n } else if (product) {\n price = product.price_range.min\n compareAt = product.compare_at_price_range?.min ?? null\n isRange = product.price_range.min.amount !== product.price_range.max.amount\n }\n if (!price) return null\n const onSale = compareAt !== null && parseMoney(compareAt) > parseMoney(price)\n const opts = { ...(locale ? { locale } : {}), ...(withoutTrailingZeros !== undefined ? { withoutTrailingZeros } : {}) }\n return (\n <div data-on-sale={onSale || undefined} {...rest}>\n {isRange ? <span data-price-prefix=\"\">{fromLabel} </span> : null}\n <Money data={price} data-price=\"\" {...opts} />\n {onSale && compareAt ? (\n <>\n {' '}\n <s data-compare-at-price=\"\">\n <span style={VISUALLY_HIDDEN}>{compareAtLabel}: </span>\n <Money data={compareAt} {...opts} />\n </s>\n </>\n ) : null}\n </div>\n )\n}\n","/**\n * Product preview of the storefront: ONE picture-plus-text pattern for every place a product is listed (cart drawer,\n * checkout summary, \"Mis pedidos\", order detail). Headless (`data-sf-preview*`, `classNames`), styled by\n * `product-preview.css` (plain CSS on the store tokens, dark mode included), SSR-safe.\n *\n * - `ProductThumb`: the picture alone. Fixed aspect ratio, `object-fit: contain` on a soft surface (parts photographed\n * on white are never cropped), responsive `srcset` through the shared `Image`, lazy by default, a shimmer while it\n * loads and an elegant fallback (initial of the name, or a package glyph) when there is no image, it is broken, or\n * the product no longer exists. Optional quantity badge.\n * - `ProductPreview`: thumb + name (2 lines) + variant + SKU + quantity x unit price, with the line total aligned right.\n * - `ProductThumbStack`: overlapped thumbs with a \"+N\" counter (order cards).\n */\nimport { useEffect, useRef, useState, type ReactNode } from 'react'\nimport type { Image as ImageData } from '@asteby/storefront'\nimport { Image, type ImageLoader } from '../components.js'\n\ntype ThumbState = 'loading' | 'loaded' | 'fallback'\n\n/** First letter(s) of the name for the fallback: two initials from two words, one otherwise. Empty when nothing usable. */\nexport function productInitials(name: string | null | undefined): string {\n const words = (name ?? '')\n .normalize('NFKC')\n .split(/[\\s\\-_/.,()]+/)\n .map((w) => Array.from(w).find((c) => /\\p{L}|\\p{N}/u.test(c)) ?? '')\n .filter(Boolean)\n if (words.length === 0) return ''\n return (words.length > 1 ? words[0]! + words[1]! : words[0]!).toLocaleUpperCase()\n}\n\nexport type ProductThumbClassNames = Partial<Record<'root' | 'img' | 'fallback' | 'badge', string>>\n\nexport type ProductThumbImage = { url: string; alt?: string | null; width?: number; height?: number }\n\nexport type ProductThumbProps = {\n /** Picture of the product or variant. `null`/missing: shows the fallback. */\n image?: ProductThumbImage | null\n /** Name of the product: alt of the picture (unless `decorative`) and source of the fallback initial. */\n name?: string | null\n /** Side in px. Default 56. */\n size?: number\n /** Aspect ratio of the box, `w/h`. Default `1/1`. */\n ratio?: string\n /** `contain` (default) never crops; `cover` fills the box. */\n fit?: 'contain' | 'cover'\n /** Quantity badge, shown when greater than 1. */\n quantity?: number\n /** The name sits next to it as text: the picture has `alt=\"\"` and the fallback is hidden from screen readers. Default false. */\n decorative?: boolean\n /** Slight zoom on hover (honours `prefers-reduced-motion`). Default true. */\n zoom?: boolean\n /** Above the fold: eager load. */\n priority?: boolean\n sizes?: string\n loader?: ImageLoader | null\n className?: string\n classNames?: ProductThumbClassNames\n}\n\n/** The picture of a product with fixed ratio, shimmer, lazy loading and a fallback that always looks designed. */\nexport function ProductThumb({\n image,\n name,\n size = 56,\n ratio = '1/1',\n fit = 'contain',\n quantity,\n decorative = false,\n zoom = true,\n priority = false,\n sizes,\n loader,\n className,\n classNames: cx = {},\n}: ProductThumbProps) {\n const url = image?.url || null\n const [state, setState] = useState<ThumbState>(url ? 'loading' : 'fallback')\n const box = useRef<HTMLSpanElement>(null)\n // A new picture (another variant) starts over; a missing one goes straight to the fallback.\n useEffect(() => {\n const img = box.current?.querySelector('img')\n // The browser may have loaded the picture before hydration: no `load` event will come.\n setState(!url ? 'fallback' : img?.complete ? (img.naturalWidth > 0 ? 'loaded' : 'fallback') : 'loading')\n }, [url])\n\n const label = name?.trim() || ''\n const initials = productInitials(label)\n const showBadge = typeof quantity === 'number' && quantity > 1\n const a11y = state === 'fallback' && !decorative && label ? { role: 'img', 'aria-label': label } : { 'aria-hidden': decorative || state === 'fallback' ? true : undefined }\n return (\n <span\n ref={box}\n className={[cx.root, className].filter(Boolean).join(' ') || undefined}\n style={{ ['--sf-preview-size' as string]: `${size}px`, ['--sf-preview-ratio' as string]: ratio.replace(':', '/') }}\n data-sf-thumb=\"\"\n data-state={state}\n data-fit={fit}\n data-zoom={zoom || undefined}\n {...a11y}\n >\n {url && state !== 'fallback' ? (\n <Image\n data={{ url, alt: image?.alt ?? null, ...(image?.width ? { width: image.width } : {}), ...(image?.height ? { height: image.height } : {}) }}\n alt={decorative ? '' : (image?.alt ?? label)}\n aspectRatio={ratio}\n sizes={sizes ?? `${size * 2}px`}\n widths={[Math.round(size), Math.round(size * 2), Math.round(size * 3)]}\n {...(loader !== undefined ? { loader } : {})}\n priority={priority}\n className={cx.img}\n onLoad={() => setState('loaded')}\n onError={() => setState('fallback')}\n />\n ) : null}\n {state === 'fallback' ? (\n <span className={cx.fallback} data-sf-thumb-fallback=\"\" aria-hidden=\"true\">\n {initials ? <span data-sf-thumb-initial=\"\">{initials}</span> : <PackageGlyph />}\n </span>\n ) : null}\n {showBadge ? (\n <span className={cx.badge} data-sf-thumb-qty=\"\" aria-hidden=\"true\">\n {quantity}\n </span>\n ) : null}\n </span>\n )\n}\n\nfunction PackageGlyph() {\n return (\n <svg viewBox=\"0 0 24 24\" width=\"45%\" height=\"45%\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.6\" strokeLinecap=\"round\" strokeLinejoin=\"round\" focusable=\"false\">\n <path d=\"M21 8 12 3 3 8v8l9 5 9-5V8Z\" />\n <path d=\"m3 8 9 5 9-5M12 13v8\" />\n </svg>\n )\n}\n\nexport type ProductPreviewClassNames = Partial<Record<'root' | 'media' | 'body' | 'name' | 'variant' | 'meta' | 'sku' | 'qty' | 'price' | 'total' | 'unit', string>> & { thumb?: ProductThumbClassNames }\n\nexport type ProductPreviewProps = Pick<ProductThumbProps, 'image' | 'size' | 'ratio' | 'fit' | 'zoom' | 'priority' | 'sizes' | 'loader'> & {\n name: string\n /** \"Rojo / L\". Omit for default variants. */\n variant?: string | null\n sku?: string | null\n /** Quantity: a badge on the picture (> 1) and \"Cantidad N\" under the name. */\n quantity?: number\n /** Unit price, already formatted. Shown next to the quantity when it is greater than 1. */\n unitPrice?: ReactNode\n /** Line total, already formatted: aligned right, the strongest number. */\n total?: ReactNode\n /** Link on the name (product page). */\n href?: string | null\n /** Rendered under the text (status, note, actions). */\n children?: ReactNode\n /** Text of the quantity for screen readers and the meta line. Default `Cantidad {n}`. */\n quantityLabel?: string\n /** Name shown when the line has none (product deleted). Default `Producto no disponible`. */\n unavailableLabel?: string\n className?: string\n classNames?: ProductPreviewClassNames\n}\n\n/**\n * A product line: picture, name (2 lines), variant, SKU, quantity and prices with a clear hierarchy. Degrades to a\n * designed placeholder when the product has no image or no longer exists (empty name).\n */\nexport function ProductPreview({\n image,\n name,\n variant,\n sku,\n quantity,\n unitPrice,\n total,\n href,\n children,\n size = 64,\n ratio,\n fit,\n zoom,\n priority,\n sizes,\n loader,\n quantityLabel,\n unavailableLabel = 'Producto no disponible',\n className,\n classNames: cx = {},\n}: ProductPreviewProps) {\n const missing = !name.trim()\n const title = missing ? unavailableLabel : name\n const hasQty = typeof quantity === 'number' && Number.isFinite(quantity)\n return (\n <div className={[cx.root, className].filter(Boolean).join(' ') || undefined} data-sf-preview=\"\" data-missing={missing || undefined}>\n <span className={cx.media} data-sf-preview-media=\"\">\n <ProductThumb\n image={image}\n name={missing ? null : name}\n size={size}\n decorative\n {...(ratio ? { ratio } : {})}\n {...(fit ? { fit } : {})}\n {...(zoom !== undefined ? { zoom } : {})}\n {...(priority ? { priority } : {})}\n {...(sizes ? { sizes } : {})}\n {...(loader !== undefined ? { loader } : {})}\n {...(hasQty ? { quantity: quantity! } : {})}\n {...(cx.thumb ? { classNames: cx.thumb } : {})}\n />\n </span>\n <span className={cx.body} data-sf-preview-body=\"\">\n <span className={cx.name} data-sf-preview-name=\"\">\n {href && !missing ? <a href={href}>{title}</a> : title}\n </span>\n {variant ? (\n <span className={cx.variant} data-sf-preview-variant=\"\">\n {variant}\n </span>\n ) : null}\n {sku ? (\n <span className={cx.sku} data-sf-preview-sku=\"\">\n SKU {sku}\n </span>\n ) : null}\n {hasQty ? (\n <span className={cx.meta} data-sf-preview-meta=\"\">\n <span className={cx.qty} data-sf-preview-qty=\"\">\n {(quantityLabel ?? 'Cantidad {n}').replace('{n}', String(quantity))}\n </span>\n {unitPrice != null && quantity! > 1 ? (\n <span className={cx.unit} data-sf-preview-unit=\"\">\n {' · '}\n {unitPrice}\n </span>\n ) : null}\n </span>\n ) : null}\n {children}\n </span>\n {total != null ? (\n <span className={cx.total} data-sf-preview-total=\"\">\n {total}\n </span>\n ) : unitPrice != null && !(hasQty && quantity! > 1) ? (\n <span className={cx.price} data-sf-preview-total=\"\">\n {unitPrice}\n </span>\n ) : null}\n </div>\n )\n}\n\nexport type ProductThumbStackProps = {\n items: ReadonlyArray<{ image?: ProductThumbImage | null; name?: string | null }>\n /** Thumbs shown before \"+N\". Default 4. */\n max?: number\n size?: number\n /** Screen reader text for the hidden remainder, `{n}` = how many. Default `y {n} más`. */\n moreLabel?: string\n className?: string\n}\n\n/** Overlapped thumbs with a \"+N\" counter: the products of an order at a glance. */\nexport function ProductThumbStack({ items, max = 4, size = 44, moreLabel = 'y {n} más', className }: ProductThumbStackProps) {\n if (items.length === 0) return null\n const shown = items.length > max ? items.slice(0, max - 1) : items\n const rest = items.length - shown.length\n return (\n <span className={className} data-sf-thumb-stack=\"\" style={{ ['--sf-preview-size' as string]: `${size}px` }}>\n {shown.map((it, i) => (\n <ProductThumb key={i} image={it.image ?? null} name={it.name ?? null} size={size} zoom={false} />\n ))}\n {rest > 0 ? (\n <span data-sf-thumb-more=\"\" role=\"img\" aria-label={moreLabel.replace('{n}', String(rest))}>\n +{rest}\n </span>\n ) : null}\n </span>\n )\n}\n","import { useOptionalStorefront } from './context.js'\n\n/** Locale of a component: its own prop, else the `StorefrontProvider`'s, else `es-MX`. */\nexport function useResolvedLocale(locale?: string | null): string {\n const sf = useOptionalStorefront()\n return locale ?? sf?.locale ?? 'es-MX'\n}\n","/** Small shared pieces of the order screens: date formatting, hidden text, copy button, text resolution. */\nimport { formatMoney } from '@asteby/storefront'\nimport { useCallback, useEffect, useRef, useState, type CSSProperties, type ReactNode } from 'react'\nimport { useResolvedLocale } from '../locale.js'\nimport { accountMessages, fill, type AccountMessages } from './orders-messages.js'\n\nconst SR_ONLY: CSSProperties = {\n position: 'absolute',\n width: 1,\n height: 1,\n padding: 0,\n margin: -1,\n overflow: 'hidden',\n clip: 'rect(0 0 0 0)',\n whiteSpace: 'nowrap',\n border: 0,\n}\n\n/**\n * Text the server (or the carrier through it) sent, ready to render: a trimmed non-empty string, a finite number as\n * text, else `null`. Every free-text field passes here, so an object or a number where a string was expected never\n * reaches React as a child (which throws) and never prints as `[object Object]`.\n */\nexport function str(v: unknown): string | null {\n if (typeof v === 'number') return Number.isFinite(v) ? String(v) : null\n if (typeof v !== 'string') return null\n const s = v.trim()\n return s ? s : null\n}\n\n/** A `Money` formatted, or `null` when it is missing or malformed (never a made-up `$0.00`). */\nexport function moneyText(v: unknown, locale: string): string | null {\n if (!v || typeof v !== 'object') return null\n const { amount, currency_code } = v as Record<string, unknown>\n const a = typeof amount === 'number' ? String(amount) : amount\n if (typeof a !== 'string' || !a.trim() || !Number.isFinite(Number(a)) || typeof currency_code !== 'string' || !/^[A-Za-z]{3}$/.test(currency_code)) return null\n return formatMoney({ amount: a.trim(), currency_code: currency_code.toUpperCase() }, locale)\n}\n\n/** Visually hidden text for screen readers. */\nexport function Hidden({ children }: { children: ReactNode }) {\n return <span style={SR_ONLY}>{children}</span>\n}\n\nexport type AccountTextProps = {\n /** BCP 47; defaults to the provider's, then `es-MX`. */\n locale?: string\n /** Per-key text overrides (a store's own words). */\n messages?: Partial<AccountMessages>\n /** IANA time zone for dates (`America/Mexico_City`). Pass the store's own to get the same text on server and browser. */\n timeZone?: string\n}\n\n/** The texts and the date formatter of a component. */\nexport function useAccountText({ locale, messages, timeZone }: AccountTextProps) {\n const resolved = useResolvedLocale(locale)\n const m = accountMessages(resolved, messages)\n const date = (iso: string | null | undefined, style: 'date' | 'datetime' = 'date'): string | null => formatDate(iso, resolved, style, timeZone)\n const t = (key: keyof AccountMessages, vars?: Record<string, string | number>): string => (vars ? fill(m[key], vars) : m[key])\n return { locale: resolved, m, t, date, timeZone }\n}\n\n/** `\"12 de agosto de 2026\"`; `null` for a missing or invalid value. A bare `YYYY-MM-DD` is a calendar day, not an instant. */\nexport function formatDate(iso: string | null | undefined, locale: string, style: 'date' | 'datetime' = 'date', timeZone?: string): string | null {\n if (!iso || typeof iso !== 'string') return null\n const dayOnly = /^\\d{4}-\\d{2}-\\d{2}$/.test(iso)\n const d = new Date(dayOnly ? `${iso}T12:00:00Z` : iso)\n if (Number.isNaN(d.getTime())) return null\n const zone = dayOnly ? 'UTC' : timeZone\n try {\n return new Intl.DateTimeFormat(locale, { dateStyle: 'long', ...(style === 'datetime' && !dayOnly ? { timeStyle: 'short' } : {}), ...(zone ? { timeZone: zone } : {}) }).format(d)\n } catch {\n return d.toISOString().slice(0, 10)\n }\n}\n\n/** A `<time>` with its machine value. Server and browser may disagree on the zone: the text is allowed to differ. */\nexport function Time({ value, text, className }: { value: string | null | undefined; text: string | null; className?: string | undefined }) {\n if (!value || !text) return null\n return (\n <time dateTime={value} className={className} suppressHydrationWarning>\n {text}\n </time>\n )\n}\n\n/** Plural by count (`one` for 1) with the `{count}` template. */\nexport function plural(m: AccountMessages, base: 'order.items', count: number): string {\n return fill(base === 'order.items' && count === 1 ? m['order.items.one'] : m['order.items.other'], { count })\n}\n\nexport type CopyButtonProps = {\n value: string\n label: string\n copiedLabel: string\n failedLabel: string\n className?: string | undefined\n /** Accessible name when the visible label is generic (\"Copiar\" for the tracking number). */\n ariaLabel?: string | undefined\n 'data-sf-copy'?: string\n}\n\n/**\n * Copies `value` to the clipboard. The result is announced in a polite live region (visible text or not) so it is\n * heard; when the browser refuses (no permission, insecure context) the buyer is told to select the text instead.\n */\nexport function CopyButton({ value, label, copiedLabel, failedLabel, className, ariaLabel, ...rest }: CopyButtonProps) {\n const [state, setState] = useState<'idle' | 'copied' | 'failed'>('idle')\n const timer = useRef<ReturnType<typeof setTimeout> | undefined>(undefined)\n useEffect(() => () => clearTimeout(timer.current), [])\n const copy = useCallback(async () => {\n try {\n await navigator.clipboard.writeText(value)\n setState('copied')\n } catch {\n setState('failed')\n }\n clearTimeout(timer.current)\n timer.current = setTimeout(() => setState('idle'), 3000)\n }, [value])\n return (\n <>\n <button type=\"button\" onClick={copy} className={className} aria-label={ariaLabel} data-sf-copy={rest['data-sf-copy'] ?? ''} data-state={state}>\n {state === 'copied' ? copiedLabel : label}\n </button>\n <span role=\"status\" aria-live=\"polite\" data-sf-copy-status style={state === 'failed' ? undefined : SR_ONLY}>\n {state === 'copied' ? copiedLabel : state === 'failed' ? failedLabel : ''}\n </span>\n </>\n )\n}\n","/**\n * Lines of an order, as the customer recognises them: picture, name, variant, SKU, quantity and the line total.\n * Headless (`data-sf-order-lines`), built on the shared `ProductPreview`. A line without picture or whose product no\n * longer exists is still a complete row (designed placeholder, \"Producto no disponible\"), and a malformed line from\n * the server is skipped instead of breaking the page.\n */\nimport type { Order, OrderLine } from '@asteby/storefront'\nimport { ProductPreview, ProductThumbStack, type ProductPreviewClassNames, type ProductThumbImage } from '../ui/product-preview.js'\nimport { fill } from './orders-messages.js'\nimport { moneyText, str, useAccountText, type AccountTextProps } from './orders-ui.js'\n\n/** The picture of a line when it carries a usable URL. */\nexport function lineImage(line: Partial<OrderLine> | null | undefined): ProductThumbImage | null {\n const img = line?.image\n if (!img || typeof img !== 'object') return null\n const url = str((img as { url?: unknown }).url)\n if (!url) return null\n const alt = str((img as { alt?: unknown }).alt)\n const w = Number((img as { width?: unknown }).width)\n const h = Number((img as { height?: unknown }).height)\n return { url, alt, ...(Number.isFinite(w) && w > 0 ? { width: w } : {}), ...(Number.isFinite(h) && h > 0 ? { height: h } : {}) }\n}\n\nfunction validLines(order: Pick<Order, 'lines'> | { lines?: unknown }): OrderLine[] {\n return (Array.isArray(order.lines) ? order.lines : []).filter((l): l is OrderLine => !!l && typeof l === 'object')\n}\n\nexport type OrderLinesClassNames = Partial<Record<'root' | 'list' | 'item', string>> & { preview?: ProductPreviewClassNames }\n\nexport type OrderLinesProps = AccountTextProps & {\n order: Pick<Order, 'lines'>\n /** Product page of a line (return `null` for none). */\n lineHref?: (line: OrderLine) => string | null | undefined\n /** Thumb side in px. Default 64. */\n size?: number\n /** Heading of the list for screen readers. */\n label?: string\n classNames?: OrderLinesClassNames\n}\n\nexport function OrderLines({ order, lineHref, size = 64, label, classNames: cx = {}, ...text }: OrderLinesProps) {\n const { m, locale } = useAccountText(text)\n const lines = validLines(order)\n if (lines.length === 0) return null\n return (\n <div className={cx.root} data-sf-order-lines=\"\">\n <ul className={cx.list} aria-label={label ?? m['order.lines']} data-sf-order-lines-list=\"\">\n {lines.map((l, i) => {\n const qty = Number.isFinite(l.quantity) && l.quantity > 0 ? l.quantity : 1\n const unit = moneyText(l.unit, locale)\n const variant = str(l.variant_title)\n return (\n <li key={`${str(l.sku) ?? ''}-${i}`} className={cx.item} data-sf-order-line=\"\">\n <ProductPreview\n image={lineImage(l)}\n name={str(l.title) ?? ''}\n variant={variant && !/^default( title)?$/i.test(variant) ? variant : null}\n sku={str(l.sku)}\n quantity={qty}\n quantityLabel={m['order.line.quantity']}\n unavailableLabel={m['order.line.unavailable']}\n unitPrice={unit ? fill(m['order.line.each'], { price: unit }) : null}\n total={moneyText(l.total, locale)}\n href={lineHref?.(l) ?? null}\n size={size}\n {...(cx.preview ? { classNames: cx.preview } : {})}\n />\n </li>\n )\n })}\n </ul>\n </div>\n )\n}\n\n/** The products of an order as overlapped pictures with \"+N\": the glance of an order card. */\nexport function OrderProductsStack({ order, size = 44, max = 4, className, ...text }: AccountTextProps & { order: Pick<Order, 'lines'>; size?: number; max?: number; className?: string }) {\n const { m } = useAccountText(text)\n const lines = validLines(order)\n if (lines.length === 0) return null\n return (\n <ProductThumbStack\n items={lines.map((l) => ({ image: lineImage(l), name: str(l.title) }))}\n size={size}\n max={max}\n moreLabel={m['order.productsMore']}\n {...(className ? { className } : {})}\n />\n )\n}\n","/**\n * The unified timeline of an order (`OrderProgress`), the status badge and the next-action button. Headless: no styles,\n * `data-sf-*` hooks and `classNames` slots. Reads `order.progress` / `order.next_action` (or derives them for an older\n * OPS) and never invents a state: an unknown stage, step or problem code renders as a generic text.\n */\nimport type { NextAction, Order, OrderProgress as OrderProgressData, OrderProgressStep } from '@asteby/storefront'\nimport { nextAction as deriveNextAction, orderProgress as deriveProgress, safeTrackingUrl } from '@asteby/storefront'\nimport type { MouseEvent, ReactNode } from 'react'\nimport { enumText } from './orders-messages.js'\nimport { Hidden, Time, useAccountText, type AccountTextProps } from './orders-ui.js'\n\nconst STEP_STATES = new Set(['done', 'current', 'pending', 'problem'])\nconst stepState = (s: unknown): 'done' | 'current' | 'pending' | 'problem' => (typeof s === 'string' && STEP_STATES.has(s) ? (s as 'done') : 'pending')\n\n/** A shape per state so the state never depends on color alone. */\nconst GLYPH = { done: '✓', current: '●', pending: '○', problem: '!' } as const\n\nexport type OrderTone = 'done' | 'current' | 'problem' | 'muted'\n\n/** Tone of a stage for the store's own colors (`data-sf-tone`). */\nexport function stageTone(stage: string, problem?: unknown): OrderTone {\n if (problem) return 'problem'\n if (stage === 'delivered') return 'done'\n if (stage === 'cancelled' || stage === 'refunded') return 'muted'\n if (['pending_payment', 'paid', 'preparing', 'ready_for_pickup', 'shipped', 'in_transit', 'out_for_delivery'].includes(stage)) return 'current'\n return 'muted'\n}\n\nexport type OrderStatusBadgeProps = AccountTextProps & {\n /** The order (its `progress` or a derived one is used) ... */\n order?: Order\n /** ... or the progress itself. */\n progress?: OrderProgressData\n className?: string\n}\n\n/** Status in words with a semantic tone: `<span data-sf-order-badge data-sf-tone=\"current\">En camino</span>`. */\nexport function OrderStatusBadge({ order, progress, className, ...text }: OrderStatusBadgeProps) {\n const { m } = useAccountText(text)\n const p = progress ?? (order ? deriveProgress(order) : null)\n if (!p) return null\n return (\n <span className={className} data-sf-order-badge data-sf-stage={p.stage} data-sf-tone={stageTone(p.stage, p.problem)}>\n {enumText(m, 'stage', p.stage)}\n {p.problem ? <Hidden>{`, ${m['stepState.problem']}`}</Hidden> : null}\n </span>\n )\n}\n\nexport type OrderProgressClassNames = Partial<Record<'root' | 'list' | 'step' | 'marker' | 'label' | 'time' | 'problem' | 'terminal', string>>\n\nexport type OrderProgressProps = AccountTextProps & {\n /** Pass the order (progress is read or derived) ... */\n order?: Order\n /** ... or the progress. */\n progress?: OrderProgressData\n /** `compact`: only the current step and \"step 3 of 5\", for a list card. */\n variant?: 'full' | 'compact'\n classNames?: OrderProgressClassNames\n}\n\n/**\n * `<ol>` with the steps paid → preparing → shipped → on its way → delivered (or pickup). The current step carries\n * `aria-current=\"step\"`; every state also has text for screen readers, and a problem is written out below the list.\n */\nexport function OrderProgress({ order, progress, variant = 'full', classNames: cx = {}, ...text }: OrderProgressProps) {\n const { m, t, date } = useAccountText(text)\n const p = progress ?? (order ? deriveProgress(order) : null)\n if (!p) return null\n const steps: OrderProgressStep[] = Array.isArray(p.steps) ? p.steps.filter((s) => s && typeof s === 'object') : []\n const stepLabel = (s: OrderProgressStep) => enumText(m, 'step', s.key)\n\n if (steps.length === 0 || p.stage === 'cancelled' || p.stage === 'refunded') {\n const note = p.stage === 'cancelled' ? m['progress.cancelled'] : p.stage === 'refunded' ? m['progress.refunded'] : enumText(m, 'stage', p.stage)\n return (\n <div className={cx.root} data-sf-progress data-sf-stage={p.stage} data-sf-variant={variant}>\n <p className={cx.terminal} data-sf-progress-terminal>\n {note}\n </p>\n </div>\n )\n }\n\n if (variant === 'compact') {\n const at = Math.max(0, steps.findIndex((s) => stepState(s.state) === 'current' || stepState(s.state) === 'problem'))\n const index = steps.some((s) => stepState(s.state) === 'current' || stepState(s.state) === 'problem') ? at : steps.every((s) => stepState(s.state) === 'done') ? steps.length - 1 : 0\n return (\n <div className={cx.root} data-sf-progress data-sf-stage={p.stage} data-sf-variant=\"compact\">\n <p className={cx.label} data-sf-progress-summary>\n {t('order.stepOf', { n: index + 1, total: steps.length, step: stepLabel(steps[index]!) })}\n </p>\n </div>\n )\n }\n\n return (\n <div className={cx.root} data-sf-progress data-sf-stage={p.stage} data-sf-variant=\"full\">\n <ol className={cx.list} aria-label={m['progress.label']} data-sf-progress-list>\n {steps.map((s, i) => {\n const state = stepState(s.state)\n return (\n <li key={`${s.key}-${i}`} className={cx.step} data-sf-step={typeof s.key === 'string' ? s.key : 'unknown'} data-sf-step-state={state} {...(state === 'current' || state === 'problem' ? { 'aria-current': 'step' as const } : {})}>\n <span className={cx.marker} aria-hidden=\"true\" data-sf-step-marker>\n {GLYPH[state]}\n </span>\n <span className={cx.label} data-sf-step-label>\n {stepLabel(s)}\n <Hidden>{`, ${m[`stepState.${state}`]}`}</Hidden>\n </span>\n <Time value={s.at} text={date(s.at)} className={cx.time} />\n </li>\n )\n })}\n </ol>\n {p.problem ? (\n <p className={cx.problem} data-sf-progress-problem={typeof p.problem.code === 'string' ? p.problem.code : 'unknown'}>\n {enumText(m, 'problem', p.problem.code)}\n </p>\n ) : null}\n </div>\n )\n}\n\nexport type NextActionBarClassNames = Partial<Record<'root' | 'primary' | 'secondary', string>>\n\nexport type NextActionBarProps = AccountTextProps & {\n /** The order (its `next_action` is read or derived) ... */\n order?: Order\n /** ... or the action itself. */\n action?: NextAction | null\n /**\n * Where each action goes in YOUR store: `pay` → the voucher/checkout, `download_invoice` → your invoice-file route,\n * `request_invoice` / `correct_invoice_data` → your invoice form, `contact_store` → your contact page. `track` and\n * `pickup` default to the action's own `https` link. Return `null` when there is nowhere to go: the bar then renders\n * a button only if `onAction` handles it, and nothing otherwise.\n */\n hrefFor?: (action: NextAction) => string | null | undefined\n /** Click handler for actions with no link (`pay` opening a dialog...). Called with the action. */\n onAction?: (action: NextAction, event: MouseEvent<HTMLElement>) => void\n /** Secondary buttons next to the primary one (copy tracking number, request return...). */\n secondary?: ReactNode\n classNames?: NextActionBarClassNames\n}\n\n/**\n * ONE primary call to action: \"Rastrear envío\", \"Descargar factura\", \"Pagar ahora\"... Links that leave the store carry\n * `rel=\"noopener noreferrer\"` and a hidden \"(opens in a new tab)\". Nothing renders for `none` or an action with no\n * way to act.\n */\nexport function NextActionBar({ order, action, hrefFor, onAction, secondary, classNames: cx = {}, ...text }: NextActionBarProps) {\n const { m } = useAccountText(text)\n const a = action ?? (order ? deriveNextAction(order) : null)\n if (!a || a.kind === 'none') return secondary ? <div className={cx.root} data-sf-action-bar>{secondary}</div> : null\n const fromApi = a.kind === 'track' || a.kind === 'pickup' ? safeTrackingUrl(a.href) : null\n const href = hrefFor?.(a) ?? fromApi\n const external = !!href && /^https:\\/\\//i.test(href)\n const label = enumText(m, 'action', a.kind)\n const common = { className: cx.primary, 'data-sf-action': typeof a.kind === 'string' ? a.kind : 'unknown' } as const\n let primary = null\n if (href) {\n primary = (\n <a href={href} {...common} {...(external ? { target: '_blank', rel: 'noopener noreferrer' } : {})} onClick={onAction ? (e) => onAction(a, e) : undefined}>\n {label}\n {external ? <Hidden> {m['action.newTab']}</Hidden> : null}\n </a>\n )\n } else if (onAction) {\n primary = (\n <button type=\"button\" {...common} onClick={(e) => onAction(a, e)}>\n {label}\n </button>\n )\n }\n if (!primary && !secondary) return null\n return (\n <div className={cx.root} role=\"group\" aria-label={m['action.label']} data-sf-action-bar>\n {primary}\n {secondary}\n </div>\n )\n}\n","/**\n * \"Mis pedidos\": a list of order cards with status in words, a compact progress, the shipment summary, the total and\n * the one next action. Headless (`data-sf-order*`, `classNames`). Every state of the list is a real state of the\n * component: `loading` (fixed-height skeletons, no layout shift), `error` (recoverable, says purchases are safe),\n * `empty` (useful text and your own call to action) and `ready`.\n */\nimport type { NextAction, Order } from '@asteby/storefront'\nimport { nextAction as deriveNextAction, orderProgress as deriveProgress, isTestShipment } from '@asteby/storefront'\nimport type { ReactNode } from 'react'\nimport { enumText, fill } from './orders-messages.js'\nimport { OrderProductsStack } from './order-lines.js'\nimport { Hidden, Time, moneyText, plural, str, useAccountText, type AccountTextProps } from './orders-ui.js'\nimport { NextActionBar, OrderProgress, OrderStatusBadge, type NextActionBarClassNames, type OrderProgressClassNames } from './progress.js'\n\nexport type OrderCardClassNames = Partial<Record<'root' | 'header' | 'products' | 'number' | 'link' | 'meta' | 'badge' | 'summary' | 'shipment' | 'footer' | 'total' | 'actions', string>> & {\n progress?: OrderProgressClassNames\n action?: NextActionBarClassNames\n}\n\nexport type OrderCardProps = AccountTextProps & {\n order: Order\n /** Where the order detail lives in your store. The whole card is reached through the number's link. */\n orderHref: (order: Order) => string\n /** Where each next action goes (see `NextActionBar.hrefFor`). */\n actionHref?: (action: NextAction, order: Order) => string | null | undefined\n onAction?: (action: NextAction, order: Order) => void\n /** Heading level of the order number (default 3). */\n headingLevel?: 2 | 3 | 4\n classNames?: OrderCardClassNames\n}\n\nexport function OrderCard({ order, orderHref, actionHref, onAction, headingLevel = 3, classNames: cx = {}, ...text }: OrderCardProps) {\n const { m, date, locale } = useAccountText(text)\n const Heading = `h${headingLevel}` as 'h3'\n const progress = deriveProgress(order)\n const items = (Array.isArray(order.lines) ? order.lines : []).reduce((n, l) => n + (Number.isFinite(l?.quantity) ? l.quantity : 0), 0)\n const summary = order.shipments_summary && typeof order.shipments_summary === 'object' ? order.shipments_summary : null\n const shipments = Array.isArray(order.shipments) ? order.shipments : []\n const showShipment = !!summary && typeof summary.count === 'number' && summary.count > 0 && !(shipments.length > 0 && shipments.every(isTestShipment)) && !['pending_payment', 'cancelled', 'refunded'].includes(progress.stage)\n const action = deriveNextAction(order)\n const total = moneyText(order.total, locale)\n const carrier = summary ? str(summary.carrier) : null\n return (\n <article className={cx.root} data-sf-order data-sf-order-status={progress.stage} data-sf-order-id={order.id}>\n <header className={cx.header}>\n <Heading className={cx.number} data-sf-order-number>\n <a href={orderHref(order)} className={cx.link} data-sf-order-link>\n {fill(m['order.number'], { number: str(order.number) ?? (str(order.id) ?? '').slice(0, 8) })}\n </a>\n </Heading>\n <OrderStatusBadge progress={progress} {...text} {...(cx.badge ? { className: cx.badge } : {})} />\n </header>\n <p className={cx.meta} data-sf-order-meta>\n <Time value={order.created_at} text={date(order.created_at) ? fill(m['order.placed'], { date: date(order.created_at)! }) : null} />\n {items > 0 ? <> · {plural(m, 'order.items', items)}</> : null}\n </p>\n {Array.isArray(order.lines) && order.lines.length > 0 ? (\n <div className={cx.products} data-sf-order-products>\n <OrderProductsStack order={order} {...text} />\n </div>\n ) : null}\n <div className={cx.summary} data-sf-order-summary>\n <OrderProgress progress={progress} variant=\"compact\" {...text} {...(cx.progress ? { classNames: cx.progress } : {})} />\n {showShipment ? (\n <p className={cx.shipment} data-sf-order-shipment>\n {carrier ? <>{carrier} · </> : null}\n {enumText(m, 'shipment.status', summary!.status)}\n </p>\n ) : null}\n </div>\n <div className={cx.footer}>\n {total ? (\n <p className={cx.total} data-sf-order-total>\n <span>{m['order.total']}: </span>\n <strong>{total}</strong>\n </p>\n ) : null}\n <NextActionBar\n action={action}\n {...text}\n hrefFor={(a) => actionHref?.(a, order) ?? undefined}\n {...(onAction ? { onAction: (a: NextAction) => onAction(a, order) } : {})}\n classNames={{ ...(cx.actions ? { root: cx.actions } : {}), ...(cx.action ?? {}) }}\n />\n </div>\n </article>\n )\n}\n\nexport type OrderListClassNames = Partial<Record<'root' | 'list' | 'item' | 'skeleton' | 'empty' | 'emptyTitle' | 'emptyBody' | 'emptyGuest' | 'error' | 'retry' | 'more', string>> & {\n card?: OrderCardClassNames\n}\n\nexport type OrderListProps = AccountTextProps &\n Pick<OrderCardProps, 'orderHref' | 'actionHref' | 'onAction' | 'headingLevel'> & {\n orders?: readonly Order[] | null\n status?: 'loading' | 'ready' | 'error'\n /** Skeleton cards while loading (default 3). */\n skeletons?: number\n onRetry?: () => void\n hasMore?: boolean\n loadingMore?: boolean\n onLoadMore?: () => void\n /** Your call to action in the empty state (\"Ver catálogo\"). */\n emptyAction?: ReactNode\n /** Show \"bought as a guest? verify your email\" in the empty state (default true). */\n guestHint?: boolean\n classNames?: OrderListClassNames\n }\n\nexport function OrderList({ orders, status = 'ready', skeletons = 3, onRetry, hasMore, loadingMore, onLoadMore, emptyAction, guestHint = true, orderHref, actionHref, onAction, headingLevel = 3, classNames: cx = {}, ...text }: OrderListProps) {\n const { m } = useAccountText(text)\n const list = (Array.isArray(orders) ? orders : []).filter((o): o is Order => !!o && typeof o === 'object' && typeof o.id === 'string')\n\n if (status === 'loading' && list.length === 0) {\n return (\n <div className={cx.root} role=\"status\" aria-busy=\"true\" data-sf-orders data-sf-orders-state=\"loading\">\n <Hidden>{m['order.loading']}</Hidden>\n <ul className={cx.list} aria-hidden=\"true\">\n {Array.from({ length: Math.max(1, skeletons) }, (_, i) => (\n <li key={i} className={cx.skeleton} data-sf-skeleton />\n ))}\n </ul>\n </div>\n )\n }\n if (status === 'error' && list.length === 0) {\n return (\n <div className={cx.root} data-sf-orders data-sf-orders-state=\"error\">\n <div className={cx.error} role=\"alert\" data-sf-orders-error>\n <p>{m['order.error']}</p>\n {onRetry ? (\n <button type=\"button\" className={cx.retry} onClick={onRetry} data-sf-retry>\n {m['order.retry']}\n </button>\n ) : null}\n </div>\n </div>\n )\n }\n if (list.length === 0) {\n return (\n <div className={cx.root} data-sf-orders data-sf-orders-state=\"empty\">\n <div className={cx.empty} data-sf-orders-empty>\n <p className={cx.emptyTitle}>\n <strong>{m['order.emptyTitle']}</strong>\n </p>\n <p className={cx.emptyBody}>{m['order.emptyBody']}</p>\n {guestHint ? (\n <p className={cx.emptyGuest} data-sf-orders-guest-hint>\n {m['order.emptyGuest']}\n </p>\n ) : null}\n {emptyAction}\n </div>\n </div>\n )\n }\n return (\n <div className={cx.root} data-sf-orders data-sf-orders-state=\"ready\">\n <ul className={cx.list} aria-label={m['order.listLabel']} data-sf-orders-list>\n {list.map((o) => (\n <li key={o.id} className={cx.item}>\n <OrderCard order={o} orderHref={orderHref} {...(actionHref ? { actionHref } : {})} {...(onAction ? { onAction } : {})} headingLevel={headingLevel} {...text} {...(cx.card ? { classNames: cx.card } : {})} />\n </li>\n ))}\n </ul>\n {status === 'error' ? (\n <div className={cx.error} role=\"alert\" data-sf-orders-error>\n <p>{m['order.error']}</p>\n {onRetry ? (\n <button type=\"button\" className={cx.retry} onClick={onRetry} data-sf-retry>\n {m['order.retry']}\n </button>\n ) : null}\n </div>\n ) : null}\n {hasMore && onLoadMore ? (\n <button type=\"button\" className={cx.more} onClick={onLoadMore} disabled={loadingMore} aria-disabled={loadingMore || undefined} data-sf-orders-more>\n {loadingMore ? m['order.loadingMore'] : m['order.loadMore']}\n </button>\n ) : null}\n </div>\n )\n}\n","/**\n * One shipment as the buyer sees it: carrier, status in words, tracking number (copy) and `https` link, promised date\n * and the carrier's events newest first. Headless (`data-sf-shipment-*`, `classNames`). Privacy rules enforced here\n * too, not only on the server: only a RETURN shipment may show its label link, a sandbox (`test_mode`) shipment is\n * hidden or marked \"test\" (never shown with a tracking number or link as if it were real), links must be `https`.\n *\n * The map is NOT here: `renderMap` is the slot the map component fills (it receives the approximate points; the event\n * list below is always rendered and is the text equivalent of the map).\n */\nimport type { Shipment, ShipmentMap } from '@asteby/storefront'\nimport { isTestShipment, safeTrackingUrl, sortTrackingEvents } from '@asteby/storefront'\nimport { useId, useState, type ReactNode } from 'react'\nimport { enumText } from './orders-messages.js'\nimport { CopyButton, Hidden, Time, str, useAccountText, type AccountTextProps } from './orders-ui.js'\n\nexport type ShipmentCardClassNames = Partial<\n Record<'root' | 'header' | 'carrier' | 'status' | 'meta' | 'number' | 'actions' | 'link' | 'copy' | 'events' | 'event' | 'toggle' | 'empty' | 'test' | 'map', string>\n>\n\n/** What `renderMap` receives. */\nexport type ShipmentMapSlotProps = { shipment: Shipment; map: ShipmentMap }\n\nexport type ShipmentCardProps = AccountTextProps & {\n shipment: Shipment\n /** A sandbox shipment: `hide` (default) renders nothing; `mark` shows it labelled \"test\", without number or link. */\n testMode?: 'hide' | 'mark'\n /** How many events show before \"Show all\". Default 3. */\n eventsPreview?: number\n /** The carrier's logo/brand mark (e.g. `<BrandMark brand={shipment.carrier_logo_key} />` from `/checkout`); kept out of this bundle on purpose. */\n renderCarrierMark?: (shipment: Shipment) => ReactNode\n /** Slot for the map (F7). Called only when the shipment has a `map`. */\n renderMap?: (props: ShipmentMapSlotProps) => ReactNode\n /** Heading level of the title (default 3). */\n headingLevel?: 2 | 3 | 4 | 5\n classNames?: ShipmentCardClassNames\n}\n\nexport function ShipmentCard({ shipment, testMode = 'hide', eventsPreview = 3, renderCarrierMark, renderMap, headingLevel = 3, classNames: cx = {}, ...text }: ShipmentCardProps) {\n const { m, t, date } = useAccountText(text)\n const [open, setOpen] = useState(false)\n const id = useId().replace(/:/g, '')\n if (!shipment || typeof shipment !== 'object') return null\n const test = isTestShipment(shipment)\n if (test && testMode === 'hide') return null\n\n const isReturn = shipment.kind === 'return'\n const Heading = `h${headingLevel}` as 'h3'\n const SubHeading = `h${headingLevel + 1}` as 'h4'\n const carrier = str(shipment.carrier)\n const service = test ? null : str(shipment.service)\n const number = test ? null : str(shipment.tracking_number)\n const trackUrl = test ? null : safeTrackingUrl(shipment.tracking_url)\n const labelUrl = isReturn && !test ? safeTrackingUrl(shipment.label_url) : null\n const events = test ? [] : sortTrackingEvents(shipment.events)\n const shown = open ? events : events.slice(0, Math.max(1, eventsPreview))\n const status = test ? m['shipment.preparing'] : enumText(m, 'shipment.status', shipment.status)\n const promised = !test && shipment.status !== 'delivered' ? date(shipment.promised_by) : null\n const delivered = !test ? date(shipment.delivered_at) : null\n const shipped = !test && !delivered ? date(shipment.shipped_at) : null\n const titleId = `sf-shp-${id}`\n const eventsId = `sf-shp-ev-${id}`\n\n return (\n <article className={cx.root} aria-labelledby={titleId} data-sf-shipment data-sf-shipment-status={test ? 'test' : typeof shipment.status === 'string' ? shipment.status : 'unknown'} data-sf-shipment-kind={isReturn ? 'return' : 'outbound'} {...(test ? { 'data-sf-test': '' } : {})}>\n <header className={cx.header} data-sf-shipment-header>\n {renderCarrierMark && !test ? <span data-sf-shipment-mark>{renderCarrierMark(shipment)}</span> : null}\n <Heading id={titleId} className={cx.carrier} data-sf-shipment-title>\n {carrier && !test ? (\n <span data-sf-shipment-eyebrow>\n {m['shipment.carrier']}\n <Hidden>: </Hidden>\n </span>\n ) : null}\n {isReturn ? m['shipment.return'] : (carrier ?? m['shipment.title'])}\n {isReturn && carrier ? <> · {carrier}</> : null}\n </Heading>\n <span className={cx.status} data-sf-shipment-state>\n {status}\n </span>\n {test ? (\n <span className={cx.test} data-sf-shipment-test>\n {m['shipment.test']}\n </span>\n ) : null}\n </header>\n {test ? (\n <p className={cx.meta} data-sf-shipment-test-note>\n {m['shipment.testNote']}\n </p>\n ) : null}\n {service ? (\n <p className={cx.meta} data-sf-shipment-service>\n {m['shipment.service']}: {service}\n </p>\n ) : null}\n {number ? (\n <p className={cx.number} data-sf-shipment-number>\n <span>{m['shipment.number']}: </span>\n <code>{number}</code>{' '}\n <CopyButton value={number} label={m['shipment.copy']} copiedLabel={m['shipment.copied']} failedLabel={m['shipment.copyFailed']} ariaLabel={`${m['shipment.copy']} ${m['shipment.number']}`} className={cx.copy} data-sf-copy=\"tracking\" />\n </p>\n ) : null}\n {promised || delivered || shipped ? (\n <p className={cx.meta} data-sf-shipment-dates>\n {delivered ? (\n <Time value={shipment.delivered_at} text={t('shipment.delivered', { date: delivered })} />\n ) : promised ? (\n <Time value={shipment.promised_by} text={t('shipment.promised', { date: promised })} />\n ) : (\n <Time value={shipment.shipped_at} text={t('shipment.shipped', { date: shipped ?? '' })} />\n )}\n </p>\n ) : null}\n {trackUrl || labelUrl ? (\n <p className={cx.actions} data-sf-shipment-actions>\n {trackUrl ? (\n <a href={trackUrl} target=\"_blank\" rel=\"noopener noreferrer\" className={cx.link} data-sf-shipment-track>\n {carrier ? t('shipment.track', { carrier }) : m['shipment.trackGeneric']}\n <Hidden> {m['action.newTab']}</Hidden>\n </a>\n ) : null}\n {labelUrl ? (\n <a href={labelUrl} target=\"_blank\" rel=\"noopener noreferrer\" className={cx.link} data-sf-shipment-label>\n {m['shipment.returnLabel']}\n <Hidden> {m['action.newTab']}</Hidden>\n </a>\n ) : null}\n </p>\n ) : null}\n {renderMap && !test && shipment.map ? (\n <div className={cx.map} data-sf-shipment-map-slot>\n {renderMap({ shipment, map: shipment.map })}\n </div>\n ) : null}\n {!test ? (\n events.length === 0 ? (\n <p className={cx.empty} data-sf-shipment-empty>\n {m['shipment.noEvents']}\n </p>\n ) : (\n <div data-sf-shipment-events-wrap>\n <SubHeading className={cx.meta} data-sf-shipment-events-title>\n {m['shipment.events']}\n </SubHeading>\n <ol className={cx.events} id={eventsId} data-sf-shipment-events>\n {shown.map((e, i) => {\n const description = str(e.description)\n const location = str(e.location)\n return (\n <li key={`${str(e.id) ?? ''}-${i}`} className={cx.event} data-sf-event-status={typeof e.status === 'string' ? e.status : 'unknown'}>\n <span data-sf-event-state>{enumText(m, 'shipment.status', e.status)}</span>\n {description ? <span data-sf-event-description> · {description}</span> : null}\n {location ? <span data-sf-event-location> · {location}</span> : null}{' '}\n <Time value={e.occurred_at} text={date(e.occurred_at, 'datetime')} />\n </li>\n )\n })}\n </ol>\n {events.length > Math.max(1, eventsPreview) ? (\n <button type=\"button\" className={cx.toggle} aria-expanded={open} aria-controls={eventsId} onClick={() => setOpen((v) => !v)} data-sf-shipment-toggle>\n {open ? m['shipment.showLess'] : t('shipment.showAll', { count: events.length })}\n </button>\n ) : null}\n </div>\n )\n ) : null}\n </article>\n )\n}\n","/**\n * The invoices and credit notes of an order. Headless (`data-sf-invoice-*`, `classNames`). A credit note is listed\n * under the invoice it corrects. Downloads go ONLY through YOUR authenticated route (`fileHref`, backed by\n * `invoiceFileResponse` in `/account/server`) or a handler (`onDownload`): this component never prints a link it did\n * not get from the store, so a PAC URL can never end up in the page. An invoice from a sandbox PAC (`test_mode`) is\n * hidden or marked \"test, not valid\" and gets no download.\n *\n * With no documents it hands the order's `invoice` summary (not requested, needs data, being generated...) to\n * `renderSummary`; the usual one is `(s) => <InvoiceStatusCard invoice={s} ... />` from `@asteby/storefront-react/fiscal`\n * (a slot, so this bundle does not carry the fiscal texts for stores that never request invoices from here).\n */\nimport type { InvoiceDoc, InvoiceFileKind, InvoiceSummary } from '@asteby/storefront'\nimport { groupInvoiceDocs, isTestInvoice } from '@asteby/storefront'\nimport { useId, type ReactNode } from 'react'\nimport { enumText, fill } from './orders-messages.js'\nimport { Hidden, Time, moneyText, str, useAccountText, type AccountTextProps } from './orders-ui.js'\n\nexport type InvoiceListClassNames = Partial<\n Record<'root' | 'title' | 'group' | 'doc' | 'status' | 'meta' | 'note' | 'actions' | 'download' | 'creditNotes' | 'test' | 'error' | 'retry' | 'empty', string>\n>\n\nexport type InvoiceListProps = AccountTextProps & {\n invoices?: readonly InvoiceDoc[] | null\n /** The order's invoice summary, handed to `renderSummary` when there are no documents. */\n summary?: InvoiceSummary | null\n /** Draws the summary (request, needs data, being generated...): `(s) => <InvoiceStatusCard invoice={s} requestHref=\"/factura\" />`. */\n renderSummary?: (summary: InvoiceSummary) => ReactNode\n /** Your authenticated download route for a file of a document, e.g. `/cuenta/pedidos/${order}/facturas/${doc.id}.${kind}`. */\n fileHref?: (doc: InvoiceDoc, kind: InvoiceFileKind) => string | null | undefined\n /** Alternative to `fileHref`: a handler (opens your own download flow). */\n onDownload?: (doc: InvoiceDoc, kind: InvoiceFileKind) => void\n /** The server could not read the invoices (`order.degraded` has `invoices`): shows a recoverable error. */\n degraded?: boolean\n onRetry?: () => void\n /** A sandbox invoice: `mark` (default) shows it labelled and with no download; `hide` removes it. */\n testMode?: 'hide' | 'mark'\n /** Money formatter is `Intl`; the order's currency comes with each total. */\n headingLevel?: 2 | 3 | 4\n /** Content under the list (e.g. a \"Request invoice\" button). */\n children?: ReactNode\n classNames?: InvoiceListClassNames\n}\n\nconst known = (s: unknown): s is 'issued' | 'pending' | 'cancelled' | 'error' => s === 'issued' || s === 'pending' || s === 'cancelled' || s === 'error'\n\nexport function InvoiceList({ invoices, summary, renderSummary, fileHref, onDownload, degraded, onRetry, testMode = 'mark', headingLevel = 3, children, classNames: cx = {}, ...text }: InvoiceListProps) {\n const { m, t, date, locale } = useAccountText(text)\n const Heading = `h${headingLevel}` as 'h3'\n const titleId = `sf-invoices-${useId().replace(/:/g, '')}`\n const all = (Array.isArray(invoices) ? invoices : []).filter((d): d is InvoiceDoc => !!d && typeof d === 'object' && typeof d.id === 'string')\n const docs = testMode === 'hide' ? all.filter((d) => !isTestInvoice(d)) : all\n const { groups, orphans } = groupInvoiceDocs(docs)\n\n const renderDoc = (doc: InvoiceDoc, parent?: InvoiceDoc) => {\n const test = isTestInvoice(doc)\n const status = known(doc.status) ? doc.status : 'unknown'\n const kindLabel = doc.kind === 'credit_note' ? m['invoice.creditNote'] : m['invoice.invoice']\n const docName = (d: InvoiceDoc) => [str(d.series), str(d.folio_number)].filter(Boolean).join('-')\n const name = docName(doc)\n const folio = str(doc.folio)\n const canDownload = status === 'issued' && !test\n const total = moneyText(doc.total, locale)\n const link = (kind: InvoiceFileKind) => {\n const label = kind === 'pdf' ? m['invoice.pdf'] : m['invoice.xml']\n const aria = fill(m['invoice.downloadOf'], { action: label, kind: kindLabel.toLowerCase(), name: name || folio || '' }).replace(/\\s+,/g, ',').replace(/,\\s*$/, '').trim()\n const href = fileHref?.(doc, kind)\n if (href) {\n return (\n <a key={kind} href={href} download className={cx.download} aria-label={aria} data-sf-invoice-download={kind}>\n {label}\n </a>\n )\n }\n if (onDownload) {\n return (\n <button key={kind} type=\"button\" className={cx.download} aria-label={aria} onClick={() => onDownload(doc, kind)} data-sf-invoice-download={kind}>\n {label}\n </button>\n )\n }\n return null\n }\n return (\n <li key={doc.id} className={cx.doc} data-sf-invoice-doc data-sf-invoice-kind={doc.kind === 'credit_note' ? 'credit_note' : 'invoice'} data-sf-invoice-status={status}>\n <p className={cx.status} data-sf-invoice-heading>\n <strong>{kindLabel}</strong>\n {name ? <> {name}</> : null} · <span data-sf-invoice-state>{enumText(m, 'invoice.status', doc.status)}</span>\n {test ? (\n <>\n {' '}\n <span className={cx.test} data-sf-invoice-test>\n {m['invoice.test']}\n </span>\n </>\n ) : null}\n </p>\n {parent ? (\n <p className={cx.meta} data-sf-invoice-parent>\n {fill(m['invoice.creditNoteOf'], { folio: docName(parent) || str(parent.folio) || '' }).trim()}\n </p>\n ) : null}\n {folio && !test ? (\n <p className={cx.meta} data-sf-invoice-folio>\n {m['invoice.folio']}: <code>{folio}</code>\n </p>\n ) : null}\n <p className={cx.meta}>\n {doc.issued_at ? <Time value={doc.issued_at} text={fill(m['invoice.issued'], { date: date(doc.issued_at) ?? '' })} /> : null}\n {total ? <> · {m['invoice.total']}: {total}</> : null}\n </p>\n {status === 'pending' || status === 'error' || status === 'cancelled' ? (\n <p className={cx.note} data-sf-invoice-note>\n {m[`invoice.statusNote.${status}`]}\n </p>\n ) : null}\n {canDownload && (fileHref || onDownload) ? (\n <p className={cx.actions} data-sf-invoice-actions>\n {link('pdf')}\n {link('xml')}\n </p>\n ) : null}\n </li>\n )\n }\n\n const hasDocs = groups.length + orphans.length > 0\n return (\n <section className={cx.root} aria-labelledby={titleId} data-sf-invoices>\n <Heading id={titleId} className={cx.title}>\n {m['invoice.title']}\n </Heading>\n {degraded ? (\n <div className={cx.error} role=\"alert\" data-sf-section-error=\"invoices\">\n <p>{m['section.error']}</p>\n {onRetry ? (\n <button type=\"button\" className={cx.retry} onClick={onRetry} data-sf-retry>\n {m['section.retry']}\n <Hidden> {m['invoice.title']}</Hidden>\n </button>\n ) : null}\n </div>\n ) : hasDocs ? (\n <ul data-sf-invoice-list>\n {groups.map(({ invoice, creditNotes }) => (\n <li key={invoice.id} className={cx.group} data-sf-invoice-group>\n <ul>{renderDoc(invoice)}</ul>\n {creditNotes.length ? (\n <ul className={cx.creditNotes} data-sf-invoice-credit-notes>\n {creditNotes.map((nc) => renderDoc(nc, invoice))}\n </ul>\n ) : null}\n </li>\n ))}\n {orphans.map((nc) => (\n <li key={nc.id} className={cx.group} data-sf-invoice-group>\n <ul>{renderDoc(nc)}</ul>\n </li>\n ))}\n </ul>\n ) : summary && renderSummary ? (\n <div data-sf-invoice-summary>{renderSummary(summary)}</div>\n ) : (\n <p className={cx.empty} data-sf-invoice-empty>\n {m['invoice.none']}\n </p>\n )}\n {children}\n </section>\n )\n}\n","/**\n * Cash voucher of a payment that is still waiting (OXXO, SPEI, deposit): reference / CLABE with a copy button, the\n * Code 128 barcode drawn as SVG, the expiry, and print / download. Ported from the ProtekAuto store (#84) so no store\n * keeps its own copy. Headless (`data-sf-voucher-*`, `classNames`), texts es/en.\n *\n * Print / download: pass `voucherHref` to serve the voucher from YOUR server route (`pendingVoucherResponse` in\n * `/account/server`, the right choice for the account page: ownership is re-checked on each request), or leave it out\n * and the card builds the document in the browser from the data it already has (thank-you page: guests have no\n * account to go back to). The document generator is a separate chunk, fetched only when the buyer taps.\n */\nimport type { PendingPayment } from '@asteby/storefront'\nimport { useId, useMemo, type ReactNode } from 'react'\nimport { enumText, fill } from './orders-messages.js'\nimport { CopyButton, Hidden, Time, moneyText, useAccountText, type AccountTextProps } from './orders-ui.js'\nimport { barcodeGeometry, barcodeValue, voucherOf } from './voucher.js'\n\nexport type BarcodeProps = { value: string; label: string; height?: number; className?: string }\n\n/** Code 128 as an inline `<svg role=\"img\">` (no HTML injection). `null` when the value cannot be encoded. */\nexport function Barcode({ value, label, height = 56, className }: BarcodeProps) {\n const g = useMemo(() => barcodeGeometry(value, { height }), [value, height])\n if (!g) return null\n return (\n <svg className={className} viewBox={`0 0 ${g.width} ${g.height}`} width={g.width} height={g.height} role=\"img\" aria-label={label} shapeRendering=\"crispEdges\" fill=\"#000\" data-sf-voucher-barcode-svg>\n {g.rects.map((r) => (\n <rect key={r.x} x={r.x} y={0} width={r.w} height={g.height} />\n ))}\n </svg>\n )\n}\n\nexport type PendingPaymentCardClassNames = Partial<\n Record<'root' | 'header' | 'method' | 'badge' | 'field' | 'label' | 'value' | 'barcode' | 'expiry' | 'total' | 'note' | 'actions' | 'primary' | 'secondary', string>\n>\n\nexport type PendingPaymentCardProps = AccountTextProps & {\n payment: PendingPayment\n /** Server route that serves the printable voucher: `(payment, { download })`. Without it the browser builds it. */\n voucherHref?: (payment: PendingPayment, opts: { download: boolean }) => string\n /** Store name printed on the document built in the browser. */\n shopName?: string\n headingLevel?: 2 | 3 | 4\n classNames?: PendingPaymentCardClassNames\n children?: ReactNode\n}\n\nasync function openDocument(payment: PendingPayment, mode: 'print' | 'download', opts: { locale: string; shopName?: string | undefined; timeZone?: string | undefined }) {\n const v = voucherOf(payment)\n if (!v) return\n const { renderVoucherDocument } = await import('./voucher-document.js')\n const html = renderVoucherDocument(v, { locale: opts.locale, ...(opts.shopName ? { shopName: opts.shopName } : {}), ...(opts.timeZone ? { timeZone: opts.timeZone } : {}), printButton: mode === 'print', autoPrint: mode === 'print' })\n const url = URL.createObjectURL(new Blob([html], { type: 'text/html;charset=utf-8' }))\n const download = () => {\n const a = document.createElement('a')\n a.href = url\n a.download = 'ficha-de-pago.html'\n a.click()\n }\n if (mode === 'print') {\n // (`noopener` in the features would make `open` return null, which is how a blocked pop-up is told apart.)\n const w = window.open(url, '_blank')\n if (w) w.opener = null\n else download()\n } else download()\n setTimeout(() => URL.revokeObjectURL(url), 60_000)\n}\n\nexport function PendingPaymentCard({ payment, voucherHref, shopName, headingLevel = 3, classNames: cx = {}, children, ...text }: PendingPaymentCardProps) {\n const { m, t, date, locale, timeZone } = useAccountText(text)\n const titleId = `sf-voucher-${useId().replace(/:/g, '')}`\n const v = voucherOf(payment)\n if (!v) return null\n const expired = payment.status === 'expired'\n const Heading = `h${headingLevel}` as 'h3'\n const code = barcodeValue(v)\n const methodLabel = enumText(m, 'pending.method', v.method?.toLowerCase())\n const total = moneyText(payment.total, locale) ?? moneyText(v.amount, locale)\n const copyValue = v.reference ?? v.clabe\n const expires = date(v.expires_at ?? payment.expires_at, 'datetime')\n\n return (\n <article className={cx.root} aria-labelledby={titleId} data-sf-voucher data-sf-voucher-status={expired ? 'expired' : 'pending_payment'}>\n <header className={cx.header}>\n <Heading id={titleId} className={cx.method} data-sf-voucher-method>\n {methodLabel}\n </Heading>\n <span className={cx.badge} data-sf-voucher-badge data-sf-tone={expired ? 'muted' : 'current'}>\n {expired ? m['pending.expired'] : m['pending.waiting']}\n </span>\n </header>\n {v.reference ? (\n <div className={cx.field} data-sf-voucher-reference>\n <p className={cx.label}>{m['pending.reference']}</p>\n <p className={cx.value} data-sf-voucher-value>\n {v.reference}\n </p>\n </div>\n ) : null}\n {v.clabe ? (\n <div className={cx.field} data-sf-voucher-clabe>\n <p className={cx.label}>{m['pending.clabe']}</p>\n <p className={cx.value} data-sf-voucher-value>\n {v.clabe}\n </p>\n </div>\n ) : null}\n {code && !expired ? (\n <div className={cx.barcode} data-sf-voucher-barcode>\n <Barcode value={code} label={fill(m['pending.barcode'], { code })} />\n </div>\n ) : null}\n {expires ? (\n <p className={cx.expiry} data-sf-voucher-expiry>\n <Time value={v.expires_at ?? payment.expires_at} text={fill(m[expired ? 'pending.expiredOn' : 'pending.expires'], { date: expires })} />\n </p>\n ) : null}\n {total ? (\n <p className={cx.total} data-sf-voucher-total>\n <span>{m['pending.total']}: </span>\n <strong>{total}</strong>\n </p>\n ) : null}\n {expired ? (\n <p className={cx.note} data-sf-voucher-expired-note>\n {m['pending.expiredNote']}\n </p>\n ) : (\n <div className={cx.actions} data-sf-voucher-actions>\n {voucherHref ? (\n <>\n <a href={voucherHref(payment, { download: false })} target=\"_blank\" rel=\"noopener\" className={cx.primary} data-sf-voucher-print>\n {m['pending.print']}\n <Hidden> {m['action.newTab']}</Hidden>\n </a>\n <a href={voucherHref(payment, { download: true })} download className={cx.secondary} data-sf-voucher-download>\n {m['pending.download']}\n </a>\n </>\n ) : (\n <>\n <button type=\"button\" className={cx.primary} onClick={() => void openDocument(payment, 'print', { locale, shopName, timeZone })} data-sf-voucher-print>\n {m['pending.print']}\n </button>\n <button type=\"button\" className={cx.secondary} onClick={() => void openDocument(payment, 'download', { locale, shopName, timeZone })} data-sf-voucher-download>\n {m['pending.download']}\n </button>\n </>\n )}\n {copyValue ? (\n <CopyButton value={copyValue} label={v.reference ? m['pending.copyReference'] : m['pending.copyClabe']} copiedLabel={m['pending.copied']} failedLabel={m['pending.copyFailed']} className={cx.secondary} data-sf-copy=\"voucher\" />\n ) : null}\n </div>\n )}\n {children}\n </article>\n )\n}\n\nexport type PendingPaymentListProps = AccountTextProps &\n Pick<PendingPaymentCardProps, 'voucherHref' | 'shopName' | 'classNames'> & {\n payments?: readonly PendingPayment[] | null\n headingLevel?: 2 | 3\n /** Classes of the section itself. */\n listClassNames?: Partial<Record<'root' | 'title' | 'intro' | 'list' | 'item', string>>\n }\n\n/** \"Pendientes de pago\": the valid vouchers first, then the expired ones. Renders nothing when there are none. */\nexport function PendingPaymentList({ payments, voucherHref, shopName, classNames, listClassNames: lc = {}, headingLevel = 2, ...text }: PendingPaymentListProps) {\n const { m } = useAccountText(text)\n const titleId = `sf-pending-${useId().replace(/:/g, '')}`\n const items = (Array.isArray(payments) ? payments : []).filter((p) => !!voucherOf(p))\n if (items.length === 0) return null\n const sorted = [...items.filter((p) => p.status !== 'expired'), ...items.filter((p) => p.status === 'expired')]\n const Heading = `h${headingLevel}` as 'h2'\n const cardHeading = (headingLevel + 1) as 3 | 4\n return (\n <section className={lc.root} aria-labelledby={titleId} data-sf-pending>\n <Heading id={titleId} className={lc.title}>\n {m['pending.title']}\n </Heading>\n <p className={lc.intro}>{m['pending.intro']}</p>\n <ul className={lc.list}>\n {sorted.map((p) => (\n <li key={p.id} className={lc.item}>\n <PendingPaymentCard payment={p} {...(voucherHref ? { voucherHref } : {})} {...(shopName ? { shopName } : {})} {...(classNames ? { classNames } : {})} headingLevel={cardHeading} {...text} />\n </li>\n ))}\n </ul>\n </section>\n )\n}\n","/**\n * The friendly name of how an order was paid. The server sends `family` (a short enum) and `method_label` (its own\n * text, which an older or English-locale server may fill with the provider's raw word: `Card`, `credit_card`, `oxxo`).\n * The buyer never reads a raw provider key: the label is built from the SDK's texts (es/en), extended by the store.\n */\nimport type { PaymentInfo } from '@asteby/storefront'\nimport type { AccountMessages } from './orders-messages.js'\n\nexport type PaymentMethodKey = 'card' | 'credit_card' | 'debit_card' | 'cash_voucher' | 'oxxo' | 'spei' | 'transfer' | 'bank_deposit' | 'wallet' | 'cash' | 'other'\n\nconst FAMILY: Record<string, PaymentMethodKey> = {\n card: 'card',\n credit_card: 'credit_card',\n debit_card: 'debit_card',\n cash_voucher: 'cash_voucher',\n oxxo: 'oxxo',\n spei: 'spei',\n transfer: 'transfer',\n bank_transfer: 'transfer',\n bank_deposit: 'bank_deposit',\n wallet: 'wallet',\n cash: 'cash',\n other: 'other',\n}\n\n/** Words of a provider's label, in order of specificity (debit before card, oxxo before voucher). */\nconst KEYWORDS: [RegExp, PaymentMethodKey][] = [\n [/oxxo/, 'oxxo'],\n [/spei/, 'spei'],\n [/d[eé]bit/, 'debit_card'],\n [/cr[eé]dit/, 'credit_card'],\n [/card|tarjeta/, 'card'],\n [/deposit|dep[oó]sito/, 'bank_deposit'],\n [/transfer/, 'transfer'],\n [/wallet|billetera|paypal|mercado ?pago|apple ?pay|google ?pay/, 'wallet'],\n [/voucher|ficha|convenience|conveniencia|store|tienda/, 'cash_voucher'],\n [/cash|efectivo/, 'cash'],\n]\n\nconst BRANDS: Record<string, string> = { visa: 'Visa', mastercard: 'Mastercard', master: 'Mastercard', amex: 'American Express', american_express: 'American Express', carnet: 'Carnet', discover: 'Discover' }\n\n/** A label that is a provider key or a bare English word, not a sentence a person wrote (\"Tarjeta Visa terminada en 4242\"). */\nconst RAW = /^[A-Za-z0-9_.:-]+(?: [A-Za-z0-9_.:-]+)?$/\n\n/** The method family of a payment (`card`, `oxxo`, `spei`...), for the store's own icon or styling; `null` when unknown. */\nexport function paymentMethodKey(p: PaymentInfo): PaymentMethodKey | null {\n return keyOf(p)\n}\n\nfunction keyOf(p: PaymentInfo): PaymentMethodKey | null {\n const fam = typeof p.family === 'string' ? p.family.toLowerCase() : ''\n const byLabel = (): PaymentMethodKey | null => {\n const label = typeof p.method_label === 'string' ? p.method_label.toLowerCase().replace(/[_-]+/g, ' ') : ''\n for (const [re, key] of KEYWORDS) if (re.test(label)) return key\n return null\n }\n if (fam && fam !== 'other' && FAMILY[fam]) {\n // `card` family + a label that says credit/debit is more precise.\n const l = byLabel()\n return fam === 'card' && (l === 'credit_card' || l === 'debit_card') ? l : FAMILY[fam]!\n }\n return byLabel() ?? (fam === 'other' ? 'other' : null)\n}\n\nexport type PaymentLabelOptions = {\n /** The store's own words for a payment (by organization, provider...). Return a string to use it; `null`/`undefined` falls through to the SDK's. */\n override?: (payment: PaymentInfo) => string | null | undefined\n}\n\n/**\n * `Tarjeta Visa •••• 1234`, `Efectivo con ficha (OXXO…)`, `Transferencia SPEI`… in the buyer's language. A label the\n * server already wrote as a sentence (it carries its own detail) is kept; a raw key becomes a readable text and never\n * shows as it came; with nothing to go on, a neutral \"Medio de pago\".\n */\nexport function paymentLabel(p: PaymentInfo, m: AccountMessages, options: PaymentLabelOptions = {}): string {\n const custom = options.override?.(p)\n if (typeof custom === 'string' && custom.trim()) return custom.trim()\n const raw = typeof p.method_label === 'string' ? p.method_label.trim() : ''\n const key = keyOf(p)\n const human = raw && !RAW.test(raw)\n // A server sentence with its own detail wins (and the structured brand/last4 are not repeated on top of it).\n if (human && /\\d{4}/.test(raw)) return raw\n if (key) {\n const base = m[`payment.method.${key}` as const]\n if (key !== 'card' && key !== 'credit_card' && key !== 'debit_card') return human && key === 'other' ? raw : base\n const brandRaw = typeof p.brand === 'string' ? p.brand.trim() : ''\n const brand = brandRaw ? (BRANDS[brandRaw.toLowerCase().replace(/[ -]/g, '_')] ?? brandRaw) : ''\n const last4 = typeof p.last4 === 'string' && /^\\d{2,4}$/.test(p.last4.trim()) ? p.last4.trim() : ''\n return `${base}${brand ? ` ${brand}` : ''}${last4 ? ` •••• ${last4}` : ''}`\n }\n return human ? raw : m['payment.method.unknown']\n}\n","/** Refunds and payments of an order. Headless (`data-sf-refund-*`, `data-sf-payment-*`, `classNames`). */\nimport type { PaymentInfo, Refund } from '@asteby/storefront'\nimport { useId } from 'react'\nimport { enumText, fill } from './orders-messages.js'\nimport { paymentLabel, paymentMethodKey, type PaymentLabelOptions } from './payment-method.js'\nimport { Hidden, Time, moneyText, str, useAccountText, type AccountTextProps } from './orders-ui.js'\n\nexport type RefundListClassNames = Partial<Record<'root' | 'title' | 'list' | 'item' | 'amount' | 'status' | 'meta' | 'empty' | 'error' | 'retry', string>>\n\nexport type RefundListProps = AccountTextProps & {\n refunds?: readonly Refund[] | null\n /** Show the \"no refunds\" text when empty (default: render nothing, the usual case). */\n showEmpty?: boolean\n /** The server could not read refunds (`order.degraded`): recoverable error. */\n degraded?: boolean\n onRetry?: () => void\n headingLevel?: 2 | 3 | 4\n classNames?: RefundListClassNames\n}\n\nconst tone = (s: unknown) => (s === 'completed' ? 'done' : s === 'failed' ? 'problem' : 'current')\n\nexport function RefundList({ refunds, showEmpty = false, degraded, onRetry, headingLevel = 3, classNames: cx = {}, ...text }: RefundListProps) {\n const { m, locale, date } = useAccountText(text)\n const titleId = `sf-refunds-${useId().replace(/:/g, '')}`\n const items = (Array.isArray(refunds) ? refunds : []).filter((r): r is Refund => !!r && typeof r === 'object' && typeof r.id === 'string')\n if (!degraded && items.length === 0 && !showEmpty) return null\n const Heading = `h${headingLevel}` as 'h3'\n return (\n <section className={cx.root} aria-labelledby={titleId} data-sf-refunds>\n <Heading id={titleId} className={cx.title}>\n {m['refund.title']}\n </Heading>\n {degraded ? (\n <div className={cx.error} role=\"alert\" data-sf-section-error=\"refunds\">\n <p>{m['section.error']}</p>\n {onRetry ? (\n <button type=\"button\" className={cx.retry} onClick={onRetry} data-sf-retry>\n {m['section.retry']}\n <Hidden> {m['refund.title']}</Hidden>\n </button>\n ) : null}\n </div>\n ) : items.length === 0 ? (\n <p className={cx.empty}>{m['refund.none']}</p>\n ) : (\n <ul className={cx.list}>\n {items.map((r) => (\n <li key={r.id} className={cx.item} data-sf-refund data-sf-refund-status={typeof r.status === 'string' ? r.status : 'unknown'}>\n <span className={cx.amount} data-sf-refund-amount>\n {moneyText(r.amount, locale) ?? ''}\n </span>{' '}\n <span className={cx.status} data-sf-tone={tone(r.status)}>\n {enumText(m, 'refund.status', r.status)}\n </span>\n <span className={cx.meta}>\n {str(r.method_label) ? <> · {paymentLabel({ method_label: r.method_label ?? '', status: 'paid', amount: r.amount }, m)}</> : null}\n {r.completed_at ? (\n <>\n {' · '}\n <Time value={r.completed_at} text={fill(m['refund.completed'], { date: date(r.completed_at) ?? '' })} />\n </>\n ) : r.created_at ? (\n <>\n {' · '}\n <Time value={r.created_at} text={fill(m['refund.requested'], { date: date(r.created_at) ?? '' })} />\n </>\n ) : null}\n </span>\n </li>\n ))}\n </ul>\n )}\n </section>\n )\n}\n\nexport type PaymentSummaryProps = AccountTextProps & {\n payments?: readonly PaymentInfo[] | null\n headingLevel?: 2 | 3 | 4\n /** The store's own name for a payment (by organization, provider...); `null` falls through to the SDK's es/en text. */\n methodLabel?: PaymentLabelOptions['override']\n classNames?: Partial<Record<'root' | 'title' | 'list' | 'item' | 'status' | 'meta', string>>\n}\n\n/** What the buyer paid with (card, voucher...) and its status. Renders nothing when the order has no payments. */\nexport function PaymentSummary({ payments, headingLevel = 3, methodLabel, classNames: cx = {}, ...text }: PaymentSummaryProps) {\n const { m, locale, date } = useAccountText(text)\n const titleId = `sf-payments-${useId().replace(/:/g, '')}`\n const items = (Array.isArray(payments) ? payments : []).filter((p): p is PaymentInfo => !!p && typeof p === 'object' && typeof p.method_label === 'string')\n if (items.length === 0) return null\n const Heading = `h${headingLevel}` as 'h3'\n return (\n <section className={cx.root} aria-labelledby={titleId} data-sf-payments>\n <Heading id={titleId} className={cx.title}>\n {m['payment.title']}\n </Heading>\n <ul className={cx.list}>\n {items.map((p, i) => (\n <li key={`${p.method_label}-${i}`} className={cx.item} data-sf-payment data-sf-payment-method-key={paymentMethodKey(p) ?? 'unknown'} data-sf-payment-status={typeof p.status === 'string' ? p.status : 'unknown'}>\n <span data-sf-payment-method>{paymentLabel(p, m, methodLabel ? { override: methodLabel } : {})}</span>\n {moneyText(p.amount, locale) ? <> · <span>{moneyText(p.amount, locale)}</span></> : null} ·{' '}\n <span className={cx.status} data-sf-tone={p.status === 'failed' ? 'problem' : p.status === 'paid' ? 'done' : 'current'}>\n {enumText(m, 'payment.status', p.status)}\n </span>\n {p.paid_at ? (\n <span className={cx.meta}>\n {' · '}\n <Time value={p.paid_at} text={fill(m['payment.paidOn'], { date: date(p.paid_at) ?? '' })} />\n </span>\n ) : null}\n </li>\n ))}\n </ul>\n </section>\n )\n}\n","/**\n * Data hooks of the account screens. They talk to the client of the `StorefrontProvider` (or `client`), which must carry\n * the buyer's session (`withCustomerToken`); on a store that renders on the server, pass what the loader read as\n * `initial` and nothing is fetched until the buyer asks (`reload`, `loadMore`) or a poll tick fires.\n *\n * They never throw: a failure is `status: 'error'` with the `StorefrontError` in `error`, and `reload()` is the retry.\n * A 404 on one order is `status: 'not_found'` (also when it belongs to someone else: the server does not tell).\n */\nimport type { Connection, Order, PendingPayment, StorefrontClient } from '@asteby/storefront'\nimport { useCallback, useEffect, useRef, useState } from 'react'\nimport { useOptionalStorefront } from '../context.js'\n\nexport type AccountStatus = 'loading' | 'ready' | 'error' | 'not_found'\n\nfunction useClient(client?: StorefrontClient | null): StorefrontClient | null {\n const ctx = useOptionalStorefront()\n return client ?? ctx?.client ?? null\n}\n\nconst asError = (e: unknown): Error => (e instanceof Error ? e : new Error('Request failed'))\n\n// A stable id per client object (one per buyer session with `withCustomerToken`), to tell whose data a hook holds.\nconst ids = new WeakMap<object, string>()\nlet seq = 0\nfunction clientKey(c: StorefrontClient | null): string {\n if (!c) return 'none'\n let k = ids.get(c)\n if (!k) ids.set(c, (k = `c${++seq}`))\n return k\n}\n\n// ---------------------------------------------------------------------------\n// Lists (orders, pending payments)\n// ---------------------------------------------------------------------------\n\nexport type UseConnectionResult<T> = {\n status: Exclude<AccountStatus, 'not_found'>\n nodes: T[]\n error: Error | null\n hasMore: boolean\n loadingMore: boolean\n totalCount: number | null\n /** Fetches the first page again (the retry). Keeps showing the current list meanwhile. */\n reload: () => void\n /** Appends the next page. */\n loadMore: () => void\n}\n\ntype ConnectionState<T> = { status: UseConnectionResult<T>['status']; nodes: T[]; error: Error | null; cursor: string | null; hasMore: boolean; total: number | null; owner: string }\n\nfunction useConnection<T>(fetchPage: (c: StorefrontClient, after: string | null, signal: AbortSignal) => Promise<Connection<T>>, client: StorefrontClient | null, initial: Connection<T> | null | undefined, key: string): UseConnectionResult<T> {\n // What the list belongs to: this client (a buyer's session) and this query. Data of another owner is never returned,\n // so the next buyer on a shared device never sees the previous one's orders, not even while his own load.\n const owner = `${clientKey(client)}|${key}`\n const empty = (status: ConnectionState<T>['status']): ConnectionState<T> => ({ status, nodes: [], error: null, cursor: null, hasMore: false, total: null, owner })\n const [state, setState] = useState<ConnectionState<T>>(() =>\n initial\n ? { status: 'ready', nodes: initial.nodes ?? [], error: null, cursor: initial.page_info?.end_cursor ?? null, hasMore: !!initial.page_info?.has_next_page, total: initial.total_count ?? null, owner }\n : empty('loading'),\n )\n const [loadingMore, setLoadingMore] = useState(false)\n const alive = useRef<AbortController | null>(null)\n const more = useRef<AbortController | null>(null)\n const fetchRef = useRef(fetchPage)\n fetchRef.current = fetchPage\n\n const first = useCallback(() => {\n alive.current?.abort()\n more.current?.abort()\n setLoadingMore(false)\n if (!client) {\n // No session (yet, or signed out): nothing is fetched and nothing of a previous session is kept.\n setState(empty('loading'))\n return\n }\n const ctl = new AbortController()\n alive.current = ctl\n setState((s) => (s.owner === owner && s.nodes.length ? { ...s, error: null } : empty('loading')))\n fetchRef.current(client, null, ctl.signal).then(\n (page) => !ctl.signal.aborted && setState({ status: 'ready', nodes: page.nodes ?? [], error: null, cursor: page.page_info?.end_cursor ?? null, hasMore: !!page.page_info?.has_next_page, total: page.total_count ?? null, owner }),\n (e: unknown) => !ctl.signal.aborted && setState((s) => (s.owner === owner ? { ...s, status: 'error', error: asError(e) } : { ...empty('error'), error: asError(e) })),\n )\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [client, owner])\n\n useEffect(() => {\n if (!(initial && state.owner === owner)) first()\n return () => {\n alive.current?.abort()\n more.current?.abort()\n }\n // `owner` restarts the load when the session or what is asked for changes (page size, filter).\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [first, owner])\n\n const loadMore = useCallback(() => {\n if (!client || state.owner !== owner || !state.hasMore || loadingMore) return\n const ctl = new AbortController()\n more.current = ctl\n setLoadingMore(true)\n fetchRef.current(client, state.cursor, ctl.signal).then(\n (page) => {\n // A reload or another session since this page was asked: it belongs to a list that no longer exists.\n if (ctl.signal.aborted) return\n setLoadingMore(false)\n setState((s) => (s.owner !== owner ? s : { ...s, nodes: [...s.nodes, ...(page.nodes ?? [])], cursor: page.page_info?.end_cursor ?? null, hasMore: !!page.page_info?.has_next_page, total: page.total_count ?? s.total, error: null }))\n },\n (e: unknown) => {\n if (ctl.signal.aborted) return\n setLoadingMore(false)\n setState((s) => (s.owner !== owner ? s : { ...s, error: asError(e) }))\n },\n )\n }, [client, owner, state.owner, state.hasMore, state.cursor, loadingMore])\n\n const view = state.owner === owner ? state : empty('loading')\n return { status: view.status, nodes: view.nodes, error: view.error, hasMore: view.hasMore, loadingMore: state.owner === owner && loadingMore, totalCount: view.total, reload: first, loadMore }\n}\n\nexport type UseCustomerOrdersOptions = {\n client?: StorefrontClient | null\n /** Page size (default 20). */\n first?: number\n /** First page already read on the server: renders at once, nothing is fetched. */\n initial?: Connection<Order> | null\n}\n\n/** The buyer's orders (summaries), newest first, with `loadMore`. */\nexport function useCustomerOrders({ client, first = 20, initial }: UseCustomerOrdersOptions = {}): UseConnectionResult<Order> {\n return useConnection<Order>((c, after, signal) => c.customer.orders({ first, ...(after ? { after } : {}) }, { signal }), useClient(client), initial, `orders:${first}`)\n}\n\nexport type UsePendingPaymentsOptions = UseCustomerOrdersOptions & { initial?: Connection<PendingPayment> | null }\n\n/** Cash vouchers still waiting for payment. A failure of this section never blocks the orders: it is its own `status`. */\nexport function usePendingPayments({ client, first = 20, initial }: UsePendingPaymentsOptions = {}): UseConnectionResult<PendingPayment> {\n return useConnection<PendingPayment>((c, after, signal) => c.customer.pendingPayments({ first, ...(after ? { after } : {}) }, { signal }), useClient(client), initial, `pending:${first}`)\n}\n\n// ---------------------------------------------------------------------------\n// One order\n// ---------------------------------------------------------------------------\n\nexport type UseCustomerOrderOptions = {\n client?: StorefrontClient | null\n /** The order already read on the server (`null` = the server found none: `not_found`). */\n initial?: Order | null\n /**\n * Re-reads the order every `everyMs` (default 10 s) for at most `forMs` (default 60 s) while `while(order)` is true,\n * e.g. an invoice being generated: `{ while: (o) => ['queued','issuing'].includes(o.invoice?.stage ?? '') }`.\n * Polling is silent: the order stays on screen and `refreshing` flips.\n */\n poll?: { while: (order: Order) => boolean; everyMs?: number; forMs?: number }\n}\n\nexport type UseCustomerOrderResult = {\n status: AccountStatus\n order: Order | null\n error: Error | null\n /** A silent re-read is in flight (retry or poll): keep showing `order`. */\n refreshing: boolean\n reload: () => void\n}\n\n/** One order with its detail (shipments, invoices, payments, refunds, `degraded`). */\nexport function useCustomerOrder(id: string | null | undefined, { client, initial, poll }: UseCustomerOrderOptions = {}): UseCustomerOrderResult {\n const c = useClient(client)\n const given = initial !== undefined\n // Whose order this is: the session and the id. A change of either never shows the previous order meanwhile.\n const owner = `${clientKey(c)}|${id ?? ''}`\n const [state, setState] = useState<{ status: AccountStatus; order: Order | null; error: Error | null; owner: string }>(() => (given ? { status: initial ? 'ready' : 'not_found', order: initial, error: null, owner } : { status: 'loading', order: null, error: null, owner }))\n const [refreshing, setRefreshing] = useState(false)\n const ctlRef = useRef<AbortController | null>(null)\n const initialOwner = useRef(given ? owner : null)\n\n const load = useCallback(\n (silent: boolean) => {\n ctlRef.current?.abort()\n setRefreshing(false)\n if (!c || !id) {\n setState({ status: 'loading', order: null, error: null, owner })\n return\n }\n const ctl = new AbortController()\n ctlRef.current = ctl\n if (silent) setRefreshing(true)\n else setState((s) => (s.owner === owner && s.order ? { ...s, error: null } : { status: 'loading', order: null, error: null, owner }))\n c.customer.order(id, { signal: ctl.signal }).then(\n (o) => {\n if (ctl.signal.aborted) return\n setRefreshing(false)\n setState(o ? { status: 'ready', order: o, error: null, owner } : { status: 'not_found', order: null, error: null, owner })\n },\n (e: unknown) => {\n if (ctl.signal.aborted) return\n setRefreshing(false)\n // A failed silent read keeps the order on screen; only a first load turns into an error.\n setState((s) => (s.owner === owner && s.order ? { ...s, error: asError(e) } : { status: 'error', order: null, error: asError(e), owner }))\n },\n )\n },\n [c, id, owner],\n )\n\n useEffect(() => {\n if (initialOwner.current !== owner) load(false)\n initialOwner.current = null\n return () => ctlRef.current?.abort()\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [load, owner])\n\n const mine = state.owner === owner\n const order = mine ? state.order : null\n const keepPolling = !!poll && !!order && poll.while(order)\n const everyMs = poll?.everyMs ?? 10_000\n const forMs = poll?.forMs ?? 60_000\n useEffect(() => {\n if (!keepPolling) return\n const t0 = Date.now()\n const timer = setInterval(() => {\n if (Date.now() - t0 >= forMs) clearInterval(timer)\n else load(true)\n }, everyMs)\n return () => clearInterval(timer)\n }, [keepPolling, everyMs, forMs, load])\n\n const hasOrder = order !== null\n const reload = useCallback(() => load(hasOrder), [load, hasOrder])\n return { status: mine ? state.status : 'loading', order, error: mine ? state.error : null, refreshing: mine && refreshing, reload }\n}\n","export { AccountAuth, accountAuthMessages } from './account-auth.js'\nexport type { AccountAuthClassNames, AccountFormProps, AccountAuthMessages, AccountAuthProps, AccountAuthView } from './account-auth.js'\nexport type { AuthActionData, AuthErrorCode, AuthIntent, AuthStep } from './types.js'\nexport { PostPurchaseAccountPrompt, postPurchaseAccountPromptMessages } from './post-purchase-prompt.js'\nexport type { PostPurchaseAccountPromptClassNames, PostPurchaseAccountPromptMessages, PostPurchaseAccountPromptProps } from './post-purchase-prompt.js'\n\n// Order screens (contract 1.8): headless, `data-sf-*` hooks, `classNames`, es/en texts.\nexport { OrderList, OrderCard } from './order-list.js'\nexport type { OrderCardClassNames, OrderCardProps, OrderListClassNames, OrderListProps } from './order-list.js'\nexport { OrderLines, OrderProductsStack, lineImage } from './order-lines.js'\nexport type { OrderLinesClassNames, OrderLinesProps } from './order-lines.js'\nexport { ProductPreview, ProductThumb, ProductThumbStack, productInitials } from '../ui/product-preview.js'\nexport type { ProductPreviewProps, ProductThumbProps, ProductThumbStackProps } from '../ui/product-preview.js'\nexport { OrderProgress, OrderStatusBadge, NextActionBar, stageTone } from './progress.js'\nexport type { NextActionBarClassNames, NextActionBarProps, OrderProgressClassNames, OrderProgressProps, OrderStatusBadgeProps, OrderTone } from './progress.js'\nexport { ShipmentCard } from './shipment.js'\nexport type { ShipmentCardClassNames, ShipmentCardProps, ShipmentMapSlotProps } from './shipment.js'\nexport { InvoiceList } from './invoices.js'\nexport type { InvoiceListClassNames, InvoiceListProps } from './invoices.js'\nexport { PendingPaymentCard, PendingPaymentList, Barcode } from './pending.js'\nexport type { BarcodeProps, PendingPaymentCardClassNames, PendingPaymentCardProps, PendingPaymentListProps } from './pending.js'\nexport { RefundList, PaymentSummary } from './refunds.js'\nexport type { PaymentSummaryProps, RefundListClassNames, RefundListProps } from './refunds.js'\nexport { useCustomerOrders, useCustomerOrder, usePendingPayments } from './hooks.js'\nexport type { AccountStatus, UseConnectionResult, UseCustomerOrderOptions, UseCustomerOrderResult, UseCustomerOrdersOptions, UsePendingPaymentsOptions } from './hooks.js'\nexport { accountMessages, enumText } from './orders-messages.js'\nexport type { AccountMessageKey, AccountMessages } from './orders-messages.js'\nexport type { AccountTextProps } from './orders-ui.js'\nexport { voucherOf, barcodeValue, barcodeGeometry, code128Modules } from './voucher.js'\nexport type { BarcodeGeometry, VoucherView } from './voucher.js'\nexport { paymentLabel, paymentMethodKey } from './payment-method.js'\nexport type { PaymentLabelOptions, PaymentMethodKey } from './payment-method.js'\n\n// Account settings (contract 1.9): headless, `data-sf-*` hooks, `classNames`, es/en texts. The action is in `./server`.\nexport { SessionsList } from './sessions.js'\nexport type { SessionsListClassNames, SessionsListProps } from './sessions.js'\nexport { LanguagePreference, NotificationPreferences, NOTIFICATION_EVENTS } from './preferences.js'\nexport type { LanguagePreferenceClassNames, LanguagePreferenceProps, NotificationPreferencesClassNames, NotificationPreferencesProps } from './preferences.js'\nexport { settingsMessages, settingsEnumText } from './settings-messages.js'\nexport type { SettingsMessageKey, SettingsMessages } from './settings-messages.js'\nexport type { SettingsTextProps } from './settings-ui.js'\nexport type { AccountSettingsActionData, SettingsErrorCode, SettingsIntent } from './settings-types.js'\n","/**\n * Texts of the account settings screens (`SessionsList`, and the other sections). Spanish (es-MX) by default,\n * English with `en*`, anything with `messages`. Server errors are codes (`SettingsErrorCode`); the words are here.\n */\nimport { fill } from '../fiscal/messages.js'\n\nexport { fill }\n\nconst ES = {\n // shared\n 'settings.saved': 'Listo, guardamos tus cambios.',\n 'settings.error.session_expired': 'Tu sesión venció. Inicia sesión de nuevo para continuar.',\n 'settings.error.invalid_credential': 'No pudimos verificarte. Revisa tu contraseña o el código e inténtalo de nuevo.',\n 'settings.error.reauth_required': 'Por seguridad, confirma tu contraseña o un código antes de continuar.',\n 'settings.error.rate_limited': 'Demasiados intentos. Espera unos minutos e inténtalo de nuevo.',\n 'settings.error.rate_limited_in': 'Demasiados intentos. Inténtalo de nuevo en {minutes} min.',\n 'settings.error.validation': 'Revisa los datos e inténtalo de nuevo.',\n 'settings.error.blocked_orders': 'Tienes un pedido en camino. Podrás hacerlo cuando llegue.',\n 'settings.error.blocked_pending_payments': 'Tienes un pago pendiente. Págalo o espera a que venza para continuar.',\n 'settings.error.unsupported': 'Esta tienda no ofrece esta opción por ahora.',\n 'settings.error.unavailable': 'No pudimos completar la acción. Inténtalo de nuevo en un momento.',\n // language\n 'lang.title': 'Idioma',\n 'lang.label': 'Idioma de tus mensajes',\n 'lang.default': 'El de la tienda',\n 'lang.save': 'Guardar idioma',\n // notifications\n 'notif.title': 'Avisos',\n 'notif.intro': 'Elige cómo quieres que te avisemos.',\n 'notif.event.order_updates': 'Actualizaciones de tu pedido',\n 'notif.event.shipping': 'Envío y seguimiento',\n 'notif.event.restock': 'Producto otra vez disponible',\n 'notif.event.unknown': 'Otros avisos',\n 'notif.channel.email': 'Correo',\n 'notif.channel.whatsapp': 'WhatsApp',\n 'notif.channel.unknown': 'Otro canal',\n 'notif.required': 'La confirmación de tu pedido, tus pagos y tus facturas siempre se envían: son necesarios.',\n 'notif.save': 'Guardar avisos',\n 'notif.matrixLabel': 'Avisos por tipo y canal',\n // sessions\n 'sessions.title': 'Dispositivos con sesión abierta',\n 'sessions.intro': 'Estos son los dispositivos donde tu cuenta tiene la sesión abierta. Si no reconoces alguno, ciérralo.',\n 'sessions.current': 'Este dispositivo',\n 'sessions.lastUsed': 'Último uso: {date}',\n 'sessions.signedIn': 'Inicio de sesión: {date}',\n 'sessions.method.email': 'Con código por correo',\n 'sessions.method.phone': 'Con código por mensaje',\n 'sessions.method.password': 'Con contraseña',\n 'sessions.method.unknown': 'Inicio de sesión',\n 'sessions.revoke': 'Cerrar sesión',\n 'sessions.revokeLabel': 'Cerrar la sesión de {device}',\n 'sessions.revokeOthers': 'Cerrar las demás sesiones',\n 'sessions.revoked': 'Cerramos la sesión.',\n 'sessions.revokedOthers': 'Cerramos las demás sesiones.',\n 'sessions.none': 'No hay otras sesiones abiertas.',\n 'sessions.error': 'No pudimos cargar tus dispositivos. Inténtalo de nuevo más tarde.',\n 'sessions.loading': 'Cargando tus dispositivos',\n 'sessions.listLabel': 'Dispositivos con sesión abierta',\n}\n\nexport type SettingsMessageKey = keyof typeof ES\nexport type SettingsMessages = Record<SettingsMessageKey, string>\n\nconst EN: SettingsMessages = {\n 'settings.saved': 'Done, your changes are saved.',\n 'settings.error.session_expired': 'Your session expired. Sign in again to continue.',\n 'settings.error.invalid_credential': 'We could not verify you. Check your password or the code and try again.',\n 'settings.error.reauth_required': 'For your security, confirm your password or a code before continuing.',\n 'settings.error.rate_limited': 'Too many attempts. Wait a few minutes and try again.',\n 'settings.error.rate_limited_in': 'Too many attempts. Try again in {minutes} min.',\n 'settings.error.validation': 'Check the details and try again.',\n 'settings.error.blocked_orders': 'You have an order on its way. You will be able to do this once it arrives.',\n 'settings.error.blocked_pending_payments': 'You have a pending payment. Pay it or wait for it to expire to continue.',\n 'settings.error.unsupported': 'This store does not offer this option right now.',\n 'settings.error.unavailable': 'We could not complete that. Try again in a moment.',\n 'lang.title': 'Language',\n 'lang.label': 'Language of your messages',\n 'lang.default': 'The store’s',\n 'lang.save': 'Save language',\n 'notif.title': 'Notices',\n 'notif.intro': 'Choose how you want us to notify you.',\n 'notif.event.order_updates': 'Updates about your order',\n 'notif.event.shipping': 'Shipping and tracking',\n 'notif.event.restock': 'A product is available again',\n 'notif.event.unknown': 'Other notices',\n 'notif.channel.email': 'Email',\n 'notif.channel.whatsapp': 'WhatsApp',\n 'notif.channel.unknown': 'Other channel',\n 'notif.required': 'Your order confirmation, payments and invoices are always sent: they are required.',\n 'notif.save': 'Save notices',\n 'notif.matrixLabel': 'Notices by type and channel',\n 'sessions.title': 'Devices signed in',\n 'sessions.intro': 'These are the devices where your account is signed in. If you do not recognize one, sign it out.',\n 'sessions.current': 'This device',\n 'sessions.lastUsed': 'Last used: {date}',\n 'sessions.signedIn': 'Signed in: {date}',\n 'sessions.method.email': 'With an email code',\n 'sessions.method.phone': 'With a text code',\n 'sessions.method.password': 'With a password',\n 'sessions.method.unknown': 'Sign-in',\n 'sessions.revoke': 'Sign out',\n 'sessions.revokeLabel': 'Sign out {device}',\n 'sessions.revokeOthers': 'Sign out of all other devices',\n 'sessions.revoked': 'We signed that device out.',\n 'sessions.revokedOthers': 'We signed out the other devices.',\n 'sessions.none': 'There are no other signed-in devices.',\n 'sessions.error': 'We could not load your devices. Try again later.',\n 'sessions.loading': 'Loading your devices',\n 'sessions.listLabel': 'Devices signed in',\n}\n\n/** Messages for a locale (`es*` default, `en*`), with optional per-key overrides. */\nexport function settingsMessages(locale?: string | null, overrides?: Partial<SettingsMessages> | null): SettingsMessages {\n const base: SettingsMessages = (locale ?? 'es-MX').toLowerCase().startsWith('en') ? EN : ES\n return overrides ? { ...base, ...overrides } : base\n}\n\n/** The text of an open enum (`<group>.<value>`), else `<group>.unknown`. Never the raw value. */\nexport function settingsEnumText(m: SettingsMessages, group: string, value: unknown): string {\n const key = `${group}.${typeof value === 'string' ? value : ''}` as SettingsMessageKey\n return Object.prototype.hasOwnProperty.call(m, key) ? m[key] : m[`${group}.unknown` as SettingsMessageKey]\n}\n","/** Small shared pieces of the settings screens: texts, dates and the error line. */\nimport { useResolvedLocale } from '../locale.js'\nimport { formatDate } from './orders-ui.js'\nimport { fill, settingsMessages, type SettingsMessageKey, type SettingsMessages } from './settings-messages.js'\nimport type { AccountSettingsActionData, SettingsIntent } from './settings-types.js'\n\nexport type SettingsTextProps = {\n /** BCP 47; defaults to the provider's, then `es-MX`. */\n locale?: string\n /** Per-key text overrides (a store's own words). */\n messages?: Partial<SettingsMessages>\n /** IANA time zone for dates. Pass the store's own to get the same text on server and browser. */\n timeZone?: string\n}\n\nexport function useSettingsText({ locale, messages, timeZone }: SettingsTextProps) {\n const resolved = useResolvedLocale(locale)\n const m = settingsMessages(resolved, messages)\n const t = (key: SettingsMessageKey, vars?: Record<string, string | number>): string => (vars ? fill(m[key], vars) : m[key])\n const date = (iso: string | null | undefined): string | null => formatDate(iso, resolved, 'datetime', timeZone)\n return { locale: resolved, m, t, date }\n}\n\n/** The sentence for an error code (never the raw code, never a server message). */\nexport function errorText(m: SettingsMessages, error: NonNullable<AccountSettingsActionData['error']>): string {\n if (error.code === 'rate_limited' && typeof error.retryAfter === 'number' && error.retryAfter > 0) {\n return fill(m['settings.error.rate_limited_in'], { minutes: Math.max(1, Math.ceil(error.retryAfter / 60)) })\n }\n const key = `settings.error.${error.code}` as SettingsMessageKey\n return Object.prototype.hasOwnProperty.call(m, key) ? m[key] : m['settings.error.unavailable']\n}\n\n/** The result of the action when it answers THIS form (`intents`), else `null`. */\nexport function resultFor(data: AccountSettingsActionData | null | undefined, ...intents: SettingsIntent[]): AccountSettingsActionData | null {\n return data && data.intent && intents.includes(data.intent) ? data : null\n}\n\n","/**\n * «Devices»: the sessions the buyer has open, with a button to close each one and one to close all the others.\n * Headless: no styles of its own, `data-sf-session*` hooks and `classNames` slots. Every button is a real form\n * submit (`intent` = `session-revoke` | `session-revoke-others`), so it works without JavaScript and is answered by\n * `createAccountSettingsAction` (`@asteby/storefront-react/account/server`). The list comes from `loadAccountSessions`.\n *\n * Degradation: `sessions={null}` (the store could not list them, or its server is older than contract 1.9) renders a\n * calm notice instead of an error page, and the rest of the settings keeps working. The server sends no address and\n * no token, so there is nothing sensitive to leak here; the device label is plain text (never HTML).\n */\nimport type { CustomerSessionInfo } from '@asteby/storefront'\nimport { useId, type ComponentType, type ReactNode } from 'react'\nimport type { AccountFormProps } from './account-auth.js'\nimport { str } from './orders-ui.js'\nimport { settingsEnumText, type SettingsMessages } from './settings-messages.js'\nimport type { AccountSettingsActionData } from './settings-types.js'\nimport { errorText, resultFor, useSettingsText, type SettingsTextProps } from './settings-ui.js'\n\nexport type SessionsListClassNames = Partial<Record<'root' | 'title' | 'intro' | 'list' | 'item' | 'device' | 'badge' | 'meta' | 'revoke' | 'revokeOthers' | 'notice' | 'error' | 'empty', string>>\n\nexport type SessionsListProps = SettingsTextProps & {\n /** From `loadAccountSessions`. `null` = could not be loaded (the section degrades). */\n sessions: CustomerSessionInfo[] | null\n /** What the settings action returned (`useActionData()`); drives the confirmation and the errors. */\n data?: AccountSettingsActionData | null\n /** A submit is in flight: disables the buttons. */\n pending?: boolean\n /** Form component, e.g. React Router's `Form`. Default: the HTML `<form>`. */\n form?: 'form' | ComponentType<AccountFormProps>\n /** `action` of the forms: the route that mounts `createAccountSettingsAction`. Default: the current URL. */\n action?: string\n /** Heading level of the title (default 3). */\n headingLevel?: 2 | 3 | 4\n classNames?: SessionsListClassNames\n /** Extra content under the list. */\n children?: ReactNode\n}\n\nfunction methodText(m: SettingsMessages, method: unknown): string {\n return settingsEnumText(m, 'sessions.method', method)\n}\n\nexport function SessionsList({ sessions, data, pending = false, form: FormTag = 'form', action, headingLevel = 3, classNames: cx = {}, children, ...text }: SessionsListProps) {\n const { m, t, date } = useSettingsText(text)\n const titleId = useId()\n const Heading = `h${headingLevel}` as 'h3'\n const result = resultFor(data, 'session-revoke', 'session-revoke-others')\n const list = (sessions ?? []).filter((s) => s && typeof s.id === 'string' && s.id)\n const others = list.filter((s) => !s.current)\n const formProps = { method: 'post' as const, ...(action ? { action } : {}) }\n\n return (\n <section className={cx.root} aria-labelledby={titleId} data-sf-sessions data-state={sessions === null ? 'degraded' : 'ready'}>\n <Heading id={titleId} className={cx.title}>\n {m['sessions.title']}\n </Heading>\n {sessions === null ? (\n <p className={cx.error} role=\"status\" data-sf-sessions-degraded>\n {m['sessions.error']}\n </p>\n ) : (\n <>\n <p className={cx.intro}>{m['sessions.intro']}</p>\n {result?.ok ? (\n <p className={cx.notice} role=\"status\" data-sf-sessions-notice>\n {result.intent === 'session-revoke-others' ? m['sessions.revokedOthers'] : m['sessions.revoked']}\n </p>\n ) : result?.error ? (\n <p className={cx.error} role=\"alert\" data-sf-sessions-error={result.error.code}>\n {errorText(m, result.error)}\n </p>\n ) : null}\n <ul className={cx.list} aria-label={m['sessions.listLabel']} data-sf-sessions-list>\n {list.map((s) => {\n const device = str(s.device_label) ?? m['sessions.method.unknown']\n const last = date(s.last_used_at ?? null)\n const since = date(s.created_at)\n return (\n <li key={s.id} className={cx.item} data-sf-session data-current={s.current ? 'true' : 'false'}>\n <p className={cx.device} data-sf-session-device>\n {device}\n {s.current ? (\n <span className={cx.badge} data-sf-session-current>\n {' '}\n {m['sessions.current']}\n </span>\n ) : null}\n </p>\n <p className={cx.meta} data-sf-session-meta>\n {methodText(m, s.login_method)}\n {last ? ` · ${t('sessions.lastUsed', { date: last })}` : since ? ` · ${t('sessions.signedIn', { date: since })}` : ''}\n </p>\n {s.current ? null : (\n <FormTag {...formProps} data-sf-account-form=\"\">\n <input type=\"hidden\" name=\"session_id\" value={s.id} />\n <button type=\"submit\" name=\"intent\" value=\"session-revoke\" disabled={pending} className={cx.revoke} aria-label={t('sessions.revokeLabel', { device })} data-sf-session-revoke>\n {m['sessions.revoke']}\n </button>\n </FormTag>\n )}\n </li>\n )\n })}\n </ul>\n {others.length === 0 ? (\n <p className={cx.empty} data-sf-sessions-empty>\n {m['sessions.none']}\n </p>\n ) : (\n <FormTag {...formProps} data-sf-account-form=\"\">\n <button type=\"submit\" name=\"intent\" value=\"session-revoke-others\" disabled={pending} className={cx.revokeOthers} data-sf-session-revoke-others>\n {m['sessions.revokeOthers']}\n </button>\n </FormTag>\n )}\n </>\n )}\n {children}\n </section>\n )\n}\n","/**\n * Language and notification preferences of the buyer. Headless: no styles of its own, `data-sf-lang*` /\n * `data-sf-notif*` hooks and `classNames` slots. Both are real form submits answered by\n * `createAccountSettingsAction` (`intent` = `locale` | `notifications`), so they work without JavaScript.\n *\n * Degradation: nothing to choose, nothing rendered. `<LanguagePreference>` needs at least two languages;\n * `<NotificationPreferences>` needs at least one channel the store can deliver on (`capabilities.notifications\n * .channels`; absent on a server older than contract 1.9). A store that composes the page does not need an `if`.\n *\n * What is NOT here on purpose: the confirmation of the order, the payments and the invoices cannot be turned off, so\n * they are not boxes to uncheck, and the page says so. Marketing is a consent (it has a legal record), not a box here.\n */\nimport type { CustomerPreferences } from '@asteby/storefront'\nimport { useId, type ComponentType, type ReactNode } from 'react'\nimport type { AccountFormProps } from './account-auth.js'\nimport { str } from './orders-ui.js'\nimport { settingsEnumText } from './settings-messages.js'\nimport type { AccountSettingsActionData } from './settings-types.js'\nimport { errorText, resultFor, useSettingsText, type SettingsTextProps } from './settings-ui.js'\n\n/** The optional events the server accepts (anything else is refused by it). */\nexport const NOTIFICATION_EVENTS = ['order_updates', 'shipping', 'restock'] as const\n\ntype SectionProps = SettingsTextProps & {\n data?: AccountSettingsActionData | null\n pending?: boolean\n /** Form component, e.g. React Router's `Form`. Default: the HTML `<form>`. */\n form?: 'form' | ComponentType<AccountFormProps>\n /** `action` of the form: the route that mounts `createAccountSettingsAction`. Default: the current URL. */\n action?: string\n headingLevel?: 2 | 3 | 4\n children?: ReactNode\n}\n\n// ---------------------------------------------------------------------------\n// Language\n// ---------------------------------------------------------------------------\n\nexport type LanguagePreferenceClassNames = Partial<Record<'root' | 'title' | 'form' | 'label' | 'select' | 'submit' | 'notice' | 'error', string>>\n\nexport type LanguagePreferenceProps = SectionProps & {\n /** The languages the store offers (`shop.locales`), as BCP 47 tags or `{ value, label }`. Fewer than two renders nothing. */\n locales: ReadonlyArray<string | { value: string; label?: string }> | null | undefined\n /** The buyer's current language (`customer.locale`); `null` = the store's own. */\n value?: string | null\n classNames?: LanguagePreferenceClassNames\n}\n\nfunction languageName(tag: string, inLocale: string): string {\n try {\n const name = new Intl.DisplayNames([inLocale], { type: 'language', languageDisplay: 'dialect' }).of(tag)\n return name ? name.charAt(0).toLocaleUpperCase(inLocale) + name.slice(1) : tag\n } catch {\n return tag\n }\n}\n\nexport function LanguagePreference({ locales, value, data, pending = false, form: FormTag = 'form', action, headingLevel = 3, classNames: cx = {}, children, ...text }: LanguagePreferenceProps) {\n const { m, locale } = useSettingsText(text)\n const titleId = useId()\n const selectId = useId()\n const options = (locales ?? [])\n .map((l) => (typeof l === 'string' ? { value: l, label: undefined } : { value: l?.value, label: l?.label }))\n .filter((o): o is { value: string; label: string | undefined } => typeof o.value === 'string' && /^[A-Za-z]{2,3}(-[A-Za-z0-9]{2,8}){0,2}$/.test(o.value))\n if (options.length < 2) return null\n const Heading = `h${headingLevel}` as 'h3'\n const result = resultFor(data, 'locale')\n const current = options.find((o) => o.value.toLowerCase() === (value ?? '').toLowerCase())?.value ?? ''\n\n return (\n <section className={cx.root} aria-labelledby={titleId} data-sf-lang>\n <Heading id={titleId} className={cx.title}>\n {m['lang.title']}\n </Heading>\n <FormTag method=\"post\" {...(action ? { action } : {})} className={cx.form} data-sf-account-form=\"\">\n {result?.saved ? (\n <p className={cx.notice} role=\"status\" data-sf-lang-notice>\n {m['settings.saved']}\n </p>\n ) : result?.error ? (\n <p className={cx.error} role=\"alert\" data-sf-lang-error={result.error.code}>\n {errorText(m, result.error)}\n </p>\n ) : null}\n <label htmlFor={selectId} className={cx.label}>\n {m['lang.label']}\n </label>\n <select id={selectId} name=\"locale\" defaultValue={current} className={cx.select} data-sf-lang-select>\n <option value=\"\">{m['lang.default']}</option>\n {options.map((o) => (\n <option key={o.value} value={o.value}>\n {str(o.label) ?? languageName(o.value, locale)}\n </option>\n ))}\n </select>\n <button type=\"submit\" name=\"intent\" value=\"locale\" disabled={pending} className={cx.submit} data-sf-lang-submit>\n {m['lang.save']}\n </button>\n </FormTag>\n {children}\n </section>\n )\n}\n\n// ---------------------------------------------------------------------------\n// Notifications\n// ---------------------------------------------------------------------------\n\nexport type NotificationPreferencesClassNames = Partial<Record<'root' | 'title' | 'intro' | 'form' | 'table' | 'row' | 'event' | 'channel' | 'check' | 'required' | 'submit' | 'notice' | 'error', string>>\n\nexport type NotificationPreferencesProps = SectionProps & {\n /** `capabilities.notifications.channels`: the channels the store can deliver on. Empty or absent renders nothing. */\n channels: ReadonlyArray<string> | null | undefined\n /** `customer.preferences`. A choice never made counts as on (what the store sends today). */\n preferences?: CustomerPreferences | null\n /** Events to offer (default: all the optional ones). */\n events?: ReadonlyArray<string>\n classNames?: NotificationPreferencesClassNames\n}\n\nconst TOKEN = /^[a-z][a-z0-9_]{0,31}$/\n\nexport function NotificationPreferences({ channels, preferences, events = NOTIFICATION_EVENTS, data, pending = false, form: FormTag = 'form', action, headingLevel = 3, classNames: cx = {}, children, ...text }: NotificationPreferencesProps) {\n const { m } = useSettingsText(text)\n const titleId = useId()\n const cols = Array.from(new Set((channels ?? []).filter((c): c is string => typeof c === 'string' && TOKEN.test(c))))\n const rows = Array.from(new Set(events.filter((e) => TOKEN.test(e))))\n if (cols.length === 0 || rows.length === 0) return null\n const Heading = `h${headingLevel}` as 'h3'\n const result = resultFor(data, 'notifications')\n const on = (event: string, channel: string): boolean => preferences?.notifications?.[event]?.[channel] !== false\n\n return (\n <section className={cx.root} aria-labelledby={titleId} data-sf-notif>\n <Heading id={titleId} className={cx.title}>\n {m['notif.title']}\n </Heading>\n <p className={cx.intro}>{m['notif.intro']}</p>\n <FormTag method=\"post\" {...(action ? { action } : {})} className={cx.form} data-sf-account-form=\"\">\n {result?.saved ? (\n <p className={cx.notice} role=\"status\" data-sf-notif-notice>\n {m['settings.saved']}\n </p>\n ) : result?.error ? (\n <p className={cx.error} role=\"alert\" data-sf-notif-error={result.error.code}>\n {errorText(m, result.error)}\n </p>\n ) : null}\n <table className={cx.table} aria-label={m['notif.matrixLabel']} data-sf-notif-table>\n <thead>\n <tr>\n <th scope=\"col\">\n <span style={{ position: 'absolute', width: 1, height: 1, overflow: 'hidden', clip: 'rect(0 0 0 0)', whiteSpace: 'nowrap' }}>{m['notif.title']}</span>\n </th>\n {cols.map((c) => (\n <th key={c} scope=\"col\" className={cx.channel} data-sf-notif-channel={c}>\n {settingsEnumText(m, 'notif.channel', c)}\n </th>\n ))}\n </tr>\n </thead>\n <tbody>\n {rows.map((e) => (\n <tr key={e} className={cx.row} data-sf-notif-row={e}>\n <th scope=\"row\" className={cx.event}>\n {settingsEnumText(m, 'notif.event', e)}\n </th>\n {cols.map((c) => {\n const id = `${e}:${c}`\n return (\n <td key={c}>\n {/* Every box shown is listed, so an unchecked one (which a browser does not send) is still read as «off». */}\n <input type=\"hidden\" name=\"pref_shown\" value={id} />\n <input type=\"checkbox\" name=\"pref\" value={id} defaultChecked={on(e, c)} className={cx.check} aria-label={`${settingsEnumText(m, 'notif.event', e)} · ${settingsEnumText(m, 'notif.channel', c)}`} />\n </td>\n )\n })}\n </tr>\n ))}\n </tbody>\n </table>\n <p className={cx.required} data-sf-notif-required>\n {m['notif.required']}\n </p>\n <button type=\"submit\" name=\"intent\" value=\"notifications\" disabled={pending} className={cx.submit} data-sf-notif-submit>\n {m['notif.save']}\n </button>\n </FormTag>\n {children}\n </section>\n )\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/account/voucher.ts","../src/account/voucher-text.ts","../src/account/voucher-pdf.ts","../src/account/voucher-document.ts","../src/checkout/fields.tsx","../src/account/account-auth.tsx","../src/account/post-purchase-prompt.tsx","../src/fiscal/messages.ts","../src/account/orders-messages.ts","../src/context.tsx","../src/components.tsx","../src/ui/product-preview.tsx","../src/locale.ts","../src/account/orders-ui.tsx","../src/account/order-lines.tsx","../src/account/progress.tsx","../src/account/order-list.tsx","../src/account/shipment.tsx","../src/account/invoices.tsx","../src/account/pending.tsx","../src/account/payment-method.ts","../src/account/refunds.tsx","../src/account/hooks.ts","../src/account/index.ts","../src/account/settings-messages.ts","../src/account/settings-ui.tsx","../src/account/sessions.tsx","../src/account/preferences.tsx"],"names":["value","n","EN","ES","formatMoney","formatDate","text","own","useRef","useState","useEffect","jsxs","jsx","errorText","Fragment","createContext","useContext","useCallback","deriveProgress","deriveNextAction","safeTrackingUrl","isTestShipment","useId","sortTrackingEvents","isTestInvoice","groupInvoiceDocs","useMemo","renderVoucherPdf","renderVoucherDocument"],"mappings":"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AAe,aAAA;AAAA,MAAe,aAAA;AAAA,MAAe,aAAA;AAAA,MACvI,aAAA;AAAA,MAAe,aAAA;AAAA,MAAe,aAAA;AAAA,MAAe,aAAA;AAAA,MAAe,aAAA;AAAA,MAAe,aAAA;AAAA,MAAe,aAAA;AAAA,MAAe,aAAA;AAAA,MAAe,aAAA;AAAA,MAAe,aAAA;AAAA,MACvI,aAAA;AAAA,MAAe,aAAA;AAAA,MAAe,aAAA;AAAA,MAAe,aAAA;AAAA,MAAe,aAAA;AAAA,MAAe,aAAA;AAAA,MAAe,aAAA;AAAA,MAAe,aAAA;AAAA,MAAe,aAAA;AAAA,MAAe,aAAA;AAAA,MACvI,aAAA;AAAA,MAAe,aAAA;AAAA,MAAe,aAAA;AAAA,MAAe,aAAA;AAAA,MAAe,aAAA;AAAA,MAAe,aAAA;AAAA,MAAe,aAAA;AAAA,MAAe,aAAA;AAAA,MAAe,aAAA;AAAA,MAAe,aAAA;AAAA,MACvI,aAAA;AAAA,MAAe,aAAA;AAAA,MAAe,aAAA;AAAA,MAAe,aAAA;AAAA,MAAe,aAAA;AAAA,MAAe,aAAA;AAAA,MAAe,aAAA;AAAA,MAAe,aAAA;AAAA,MAAe,aAAA;AAAA,MAAe,aAAA;AAAA,MACvI,aAAA;AAAA,MAAe,aAAA;AAAA,MAAe,aAAA;AAAA,MAAe,aAAA;AAAA,MAAe,aAAA;AAAA,MAAe,aAAA;AAAA,MAAe,aAAA;AAAA,MAAe,aAAA;AAAA,MAAe,aAAA;AAAA,MAAe,aAAA;AAAA,MACvI,aAAA;AAAA,MAAe,aAAA;AAAA,MAAe,aAAA;AAAA,MAAe,aAAA;AAAA,MAAe,aAAA;AAAA,MAAe,aAAA;AAAA,MAAe,aAAA;AAAA,MAAe,aAAA;AAAA,MAAe,aAAA;AAAA,MAAe,aAAA;AAAA,MACvI,aAAA;AAAA,MAAe,aAAA;AAAA,MAAe,aAAA;AAAA,MAAe,aAAA;AAAA,MAAe,aAAA;AAAA,MAAe,aAAA;AAAA,MAAe,aAAA;AAAA,MAAe,aAAA;AAAA,MAAe,aAAA;AAAA,MAAe,aAAA;AAAA,MACvI,aAAA;AAAA,MAAe,aAAA;AAAA,MAAe,aAAA;AAAA,MAAe,aAAA;AAAA,MAAe,aAAA;AAAA,MAAe,aAAA;AAAA,MAAe,aAA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","file":"account.cjs","sourcesContent":["/**\n * Pure pieces of the cash voucher (OXXO, SPEI, deposit): the normalized `VoucherView` of a `PendingPayment` and the\n * Code 128 barcode (the one cashiers' readers scan). No React, no DOM: the same code draws the barcode in the page\n * (`<Barcode>`) and in the printable document (`voucher-document.ts`, loaded only when the buyer prints).\n */\nimport type { Money, PendingPayment } from '@asteby/storefront'\n\nexport type VoucherView = {\n /** `oxxo`, `spei`, ... as the gateway publishes it. */\n method: string | null\n reference: string | null\n /** Value the barcode encodes, exactly as the server sent it. `null` when the server sent none or it cannot be drawn. */\n barcode: string | null\n /** Symbology of `barcode`; `null` when there is no barcode or its format is not one we can draw. */\n barcode_format: BarcodeFormat | null\n /**\n * Code the server sent but that is NOT drawn (`barcode_data` is null or names a symbology we cannot draw): shown as\n * plain text. `null` when there is nothing to show (also when it is the same as `reference`).\n */\n barcode_text: string | null\n clabe: string | null\n /** SPEI / transfer: who receives the money and in which bank. */\n beneficiary: string | null\n bank: string | null\n /** What kind of document to print: cash at a store, bank transfer, or unknown (generic, no brand named). */\n kind: VoucherKind\n /** Server-chosen key of the instructions (`oxxo`, `spei`...); unknown keys fall back to the kind. */\n instructions_key: string | null\n /** `https` link to the provider's own receipt: `ticket_url`, else the older `voucher_url`. */\n ticket_url: string | null\n expires_at: string | null\n amount: Money | null\n instructions: string | null\n}\n\nconst MAX = 256\n\nexport type BarcodeFormat = 'code128' | 'code39' | 'itf' | 'ean13'\nexport type VoucherKind = 'cash' | 'transfer' | 'generic'\n\nconst CASH_METHODS = new Set(['oxxo', 'cash', 'store', 'convenience_store', 'efectivo', 'bank_deposit', 'deposit', 'paynet', 'paycash', 'bancomer', '7eleven', 'seven_eleven', 'farmacias_guadalajara', 'circle_k'])\nconst TRANSFER_METHODS = new Set(['spei', 'bank_transfer', 'transfer', 'wire', 'clabe'])\n\nfunction formatOf(v: unknown): BarcodeFormat | null {\n const f = typeof v === 'string' ? v.toLowerCase().replace(/[^a-z0-9]/g, '') : ''\n if (f === 'code128' || f === 'c128' || f === 'code128b' || f === 'code128c') return 'code128'\n if (f === 'code39' || f === 'c39') return 'code39'\n if (f === 'itf' || f === 'itf14' || f === 'i25' || f === 'interleaved2of5') return 'itf'\n if (f === 'ean13') return 'ean13'\n return null\n}\n\n/**\n * The barcode the server declared. `barcode_data` (contract 1.10) is authoritative when the key is present, object or\n * `null`: `value` is what to draw, `text` what to show when it cannot be drawn. Without the key (older servers) the\n * plain `barcode` string is Code 128.\n */\nfunction barcodeOf(ext: Record<string, unknown>, raw: unknown): { draw: { value: string; format: BarcodeFormat } | null; text: string | null } {\n if ('barcode_data' in ext) {\n const d = ext.barcode_data\n if (d && typeof d === 'object') {\n const o = d as Record<string, unknown>\n const value = text(o.value)\n const format = formatOf(o.format)\n if (value && format && barcodeModules(value, format)) return { draw: { value, format }, text: null }\n return { draw: null, text: value ?? text(raw) }\n }\n return { draw: null, text: text(raw) }\n }\n if (raw && typeof raw === 'object') {\n const o = raw as Record<string, unknown>\n const value = text(o.value)\n const format = formatOf(o.format ?? 'code128')\n return { draw: value && format ? { value, format } : null, text: null }\n }\n const value = text(raw)\n return { draw: value ? { value, format: 'code128' } : null, text: null }\n}\n\n/** `payment.voucher.instructions.oxxo` -> `oxxo`; `other` -> `generic`. */\nfunction instructionsKeyOf(raw: string | null): string | null {\n const k = raw?.replace(/^payment\\.voucher\\.instructions\\./, '').toLowerCase() ?? ''\n return !k ? null : k === 'other' ? 'generic' : k\n}\n\nfunction httpsUrl(v: unknown): string | null {\n const s = typeof v === 'string' ? v.trim() : ''\n return /^https:\\/\\//i.test(s) && s.length <= 2048 ? s : null\n}\n\nfunction kindOf(kind: string | null, method: string | null, key: string | null): VoucherKind {\n for (const c of [kind, method, key]) {\n const k = c?.toLowerCase()\n if (!k || k === 'other' || k === 'generic') continue\n if (k === 'oxxo' || k === 'cash' || CASH_METHODS.has(k)) return 'cash'\n if (k === 'spei' || k === 'transfer' || TRANSFER_METHODS.has(k)) return 'transfer'\n }\n return 'generic'\n}\n\nconst digits = (s: string | null) => (s ? s.replace(/\\D/g, '') : '')\n\nfunction text(v: unknown): string | null {\n if (typeof v === 'number' && Number.isFinite(v)) return String(v)\n if (typeof v !== 'string') return null\n const s = v.trim().slice(0, MAX)\n return s || null\n}\n\nfunction moneyOf(v: unknown): Money | null {\n if (!v || typeof v !== 'object') return null\n const m = v as Record<string, unknown>\n const amount = text(m.amount)\n const cur = text(m.currency_code)\n return amount && cur && Number.isFinite(Number(amount)) ? { amount, currency_code: cur.toUpperCase() } : null\n}\n\n/** The voucher of a pending payment; `null` when it has neither reference, barcode nor CLABE (nothing to pay with). */\nexport function voucherOf(p: Pick<PendingPayment, 'payment' | 'total' | 'expires_at'> | null | undefined): VoucherView | null {\n const pay = p?.payment\n if (!pay || typeof pay !== 'object') return null\n // Fields the contract adds later are read defensively: an older SDK type does not declare them yet.\n const ext = pay as Record<string, unknown>\n const method = text(pay.method ?? pay.provider)\n const key = instructionsKeyOf(text(ext.instructions_key))\n const bc = barcodeOf(ext, pay.barcode)\n const clabe = text(pay.clabe)\n let reference = text(pay.reference)\n // Some gateways publish the CLABE as the \"reference\" too: printing both reads as two different numbers.\n if (clabe && reference && digits(reference) === digits(clabe)) reference = null\n const v: VoucherView = {\n method,\n reference,\n barcode: bc.draw?.value ?? null,\n barcode_format: bc.draw?.format ?? null,\n barcode_text: bc.text && bc.text !== reference ? bc.text : null,\n clabe,\n beneficiary: text(ext.beneficiary),\n bank: text(ext.bank),\n kind: kindOf(text(ext.kind), method, key),\n instructions_key: key,\n ticket_url: httpsUrl(ext.ticket_url) ?? httpsUrl(ext.voucher_url),\n expires_at: text(pay.expires_at) ?? text(p?.expires_at),\n amount: moneyOf(pay.amount) ?? moneyOf(p?.total),\n instructions: text(pay.instructions),\n }\n return v.reference || v.barcode || v.barcode_text || v.clabe ? v : null\n}\n\n/**\n * The value the barcode encodes: only what the server sent. A reference is NOT a barcode (an OXXO reference and its\n * scannable code differ), so without `barcode` nothing is drawn and the reference is shown as text.\n */\nexport function barcodeValue(v: Pick<VoucherView, 'barcode'>): string | null {\n return v.barcode\n}\n\n// 11-module patterns of symbols 0..105 and the 13-module stop (ISO/IEC 15417).\nconst BARS = [\n '11011001100', '11001101100', '11001100110', '10010011000', '10010001100', '10001001100', '10011001000', '10011000100', '10001100100', '11001001000',\n '11001000100', '11000100100', '10110011100', '10011011100', '10011001110', '10111001100', '10011101100', '10011100110', '11001110010', '11001011100',\n '11001001110', '11011100100', '11001110100', '11101101110', '11101001100', '11100101100', '11100100110', '11101100100', '11100110100', '11100110010',\n '11011011000', '11011000110', '11000110110', '10100011000', '10001011000', '10001000110', '10110001000', '10001101000', '10001100010', '11010001000',\n '11000101000', '11000100010', '10110111000', '10110001110', '10001101110', '10111011000', '10111000110', '10001110110', '11101110110', '11010001110',\n '11000101110', '11011101000', '11011100010', '11011101110', '11101011000', '11101000110', '11100010110', '11101101000', '11101100010', '11100011010',\n '11101111010', '11001000010', '11110001010', '10100110000', '10100001100', '10010110000', '10010000110', '10000101100', '10000100110', '10110010000',\n '10110000100', '10011010000', '10011000010', '10000110100', '10000110010', '11000010010', '11001010000', '11110111010', '11000010100', '10001111010',\n '10100111100', '10010111100', '10010011110', '10111100100', '10011110100', '10011110010', '11110100100', '11110010100', '11110010010', '11011011110',\n '11011110110', '11110110110', '10101111000', '10100011110', '10001011110', '10111101000', '10111100010', '11110101000', '11110100010', '10111011110',\n '10111101110', '11101011110', '11110101110', '11010000100', '11010010000', '11010011100',\n]\nconst STOP = '1100011101011'\n\n/**\n * Modules (`1` bar, `0` space) of the Code 128 of `value`: set C (digit pairs) when it is all digits of even length,\n * set B (printable ASCII) otherwise. `null` when it cannot be encoded.\n */\nexport function code128Modules(value: string): string | null {\n if (!value || value.length > 80) return null\n let codes: number[]\n if (/^\\d+$/.test(value) && value.length % 2 === 0) {\n codes = [105]\n for (let i = 0; i < value.length; i += 2) codes.push(Number(value.slice(i, i + 2)))\n } else {\n codes = [104]\n for (const ch of value) {\n const c = ch.charCodeAt(0)\n if (c < 32 || c > 126) return null\n codes.push(c - 32)\n }\n }\n let sum = codes[0]!\n for (let i = 1; i < codes.length; i++) sum += codes[i]! * i\n codes.push(sum % 103)\n return codes.map((c) => BARS[c]).join('') + STOP\n}\n\n// Code 39: 9 elements per character (bar, space, bar...), 3 of them wide (3 modules, the rest 1). Per character, in\n// order of `C39_CHARS`, the indices (0..8) of its wide elements. One narrow gap separates characters.\nconst C39_CHARS = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ-. */+%$'\nconst C39_WIDE = '346038238023348034234368036236058258025458045245568056256456078278027478047247678067267467018128012148014124168016126146137157357135'\n/** Code 39 patterns as `n`/`w` strings per character (exported for the tests). */\nexport const CODE39_PATTERNS: Record<string, string> = Object.fromEntries(\n [...C39_CHARS].map((ch, i) => [ch, [...Array(9).keys()].map((e) => (C39_WIDE.slice(i * 3, i * 3 + 3).includes(String(e)) ? 'w' : 'n')).join('')]),\n)\n\n/** Modules of the Code 39 of `value` (`*` start/stop added). `null` for lower case, `*` or anything outside its set. */\nexport function code39Modules(value: string): string | null {\n if (!value || value.length > 40) return null\n let out = ''\n for (const ch of `*${value}*`) {\n const p = Object.prototype.hasOwnProperty.call(CODE39_PATTERNS, ch) ? CODE39_PATTERNS[ch] : undefined\n if (!p || (ch === '*' && value.includes('*'))) return null\n for (let i = 0; i < 9; i++) out += (i % 2 === 0 ? '1' : '0').repeat(p[i] === 'w' ? 3 : 1)\n out += '0'\n }\n return out.slice(0, -1)\n}\n\n// Interleaved 2 of 5: digits in pairs, the first of each pair in the bars, the second in the spaces. Per digit the\n// 5 elements as `n`/`w` (wide = 3 modules). Start: bar-space-bar-space narrow; stop: wide bar, narrow space, narrow bar.\nconst ITF_DIGITS = ['nnwwn', 'wnnnw', 'nwnnw', 'wwnnn', 'nnwnw', 'wnwnn', 'nwwnn', 'nnnww', 'wnnwn', 'nwnwn']\n\n/** Modules of the ITF (Interleaved 2 of 5) of `value`: digits only, even count. `null` otherwise. */\nexport function itfModules(value: string): string | null {\n if (!value || value.length > 80 || value.length % 2 !== 0 || !/^\\d+$/.test(value)) return null\n let out = '1010'\n for (let i = 0; i < value.length; i += 2) {\n const bars = ITF_DIGITS[Number(value[i])]!\n const spaces = ITF_DIGITS[Number(value[i + 1])]!\n for (let e = 0; e < 5; e++) out += '1'.repeat(bars[e] === 'w' ? 3 : 1) + '0'.repeat(spaces[e] === 'w' ? 3 : 1)\n }\n return out + '11101'\n}\n\nconst EAN_L = ['0001101', '0011001', '0010011', '0111101', '0100011', '0110001', '0101111', '0111011', '0110111', '0001011']\nconst EAN_R = EAN_L.map((c) => [...c].map((b) => (b === '1' ? '0' : '1')).join(''))\nconst EAN_G = EAN_R.map((c) => [...c].reverse().join(''))\nconst EAN_PARITY = ['LLLLLL', 'LLGLGG', 'LLGGLG', 'LLGGGL', 'LGLLGG', 'LGGLLG', 'LGGGLL', 'LGLGLG', 'LGLGGL', 'LGGLGL']\n\n/** Modules (95) of the EAN-13 of `value`: exactly 13 digits whose last one is the correct check digit. `null` otherwise. */\nexport function ean13Modules(value: string): string | null {\n if (!/^\\d{13}$/.test(value)) return null\n const d = [...value].map(Number)\n const sum = d.slice(0, 12).reduce((a, n, i) => a + n * (i % 2 === 0 ? 1 : 3), 0)\n if ((10 - (sum % 10)) % 10 !== d[12]) return null\n const parity = EAN_PARITY[d[0]!]!\n let out = '101'\n for (let i = 0; i < 6; i++) out += (parity[i] === 'L' ? EAN_L : EAN_G)[d[i + 1]!]\n out += '01010'\n for (let i = 7; i < 13; i++) out += EAN_R[d[i]!]\n return out + '101'\n}\n\n/** Modules of `value` in the given symbology. */\nexport function barcodeModules(value: string, format: BarcodeFormat = 'code128'): string | null {\n return format === 'code39' ? code39Modules(value) : format === 'itf' ? itfModules(value) : format === 'ean13' ? ean13Modules(value) : code128Modules(value)\n}\n\nexport type BarcodeGeometry = { width: number; height: number; rects: { x: number; w: number }[] }\n\n/** Bars of the barcode as rectangles (quiet zone of 10 modules each side included in `width`). `null` if not encodable. */\nexport function barcodeGeometry(value: string, opts: { module?: number; height?: number; format?: BarcodeFormat } = {}): BarcodeGeometry | null {\n const bits = barcodeModules(value, opts.format)\n if (!bits) return null\n const mod = opts.module ?? 2\n const quiet = 10\n const rects: { x: number; w: number }[] = []\n for (let i = 0; i < bits.length; ) {\n if (bits[i] === '0') {\n i++\n continue\n }\n let j = i\n while (j < bits.length && bits[j] === '1') j++\n rects.push({ x: (quiet + i) * mod, w: (j - i) * mod })\n i = j\n }\n return { width: (bits.length + quiet * 2) * mod, height: opts.height ?? 70, rects }\n}\n","/**\n * Texts and layout decisions of the printable voucher, shared by the HTML document and the PDF so both say the same\n * thing: which fields a method prints and which instructions it gets. Plain data, no React, no DOM. Loaded only with\n * one of the two generators (never in the first load of the order screens).\n *\n * A voucher is per METHOD: cash at a store (barcode + reference + store steps), bank transfer (beneficiary, bank,\n * CLABE, reference + transfer steps), or generic (no brand named). The server picks the instructions with\n * `instructions_key` (or the method); an unknown key falls back to the kind, never to another method's steps.\n */\nimport type { Money } from '@asteby/storefront'\nimport type { VoucherView } from './voucher.js'\n\nexport type DocText = {\n title: string\n total: string\n reference: string\n clabe: string\n beneficiary: string\n bank: string\n expires: string\n expiresNote: string\n order: string\n barcode: string\n code: string\n print: string\n downloadPdf: string\n noScript: string\n stepsTitle: string\n footer: string\n methods: Record<string, string>\n cash: string\n steps: Record<string, (v: VoucherView) => string[]>\n}\n\nconst KEEP_ES = 'Conserva tu comprobante: confirmaremos tu pago automáticamente.'\nconst KEEP_EN = 'Keep your receipt: we will confirm your payment automatically.'\n\nconst ES: DocText = {\n title: 'Ficha de pago',\n total: 'Total a pagar',\n reference: 'Referencia',\n clabe: 'CLABE',\n beneficiary: 'Beneficiario',\n bank: 'Banco',\n expires: 'Vence',\n expiresNote: 'Pasada esa fecha la ficha deja de ser válida.',\n order: 'Pedido',\n barcode: 'Código de barras',\n code: 'Código',\n print: 'Imprimir',\n downloadPdf: 'Descargar PDF',\n noScript: 'Para imprimir usa la opción Imprimir de tu navegador (Ctrl+P) o descarga el PDF.',\n stepsTitle: 'Cómo pagar',\n footer: 'Tu pedido se genera cuando se confirma el pago. Esta ficha es de un solo uso; no la compartas.',\n methods: { oxxo: 'OXXO', spei: 'Transferencia SPEI', bank_transfer: 'Transferencia bancaria', bank_deposit: 'Depósito bancario', cash: 'Pago en efectivo' },\n cash: 'Pago en efectivo',\n steps: {\n oxxo: (v) => [\n 'Acude a cualquier tienda OXXO y di que vas a hacer un pago de servicio en efectivo.',\n v.barcode ? 'Muestra el código de barras en caja o dicta la referencia, y paga el monto exacto.' : 'Dicta la referencia en caja y paga el monto exacto.',\n KEEP_ES,\n ],\n cash: (v) => [\n 'Acude a la tienda o comercio indicado y di que vas a hacer un pago en efectivo.',\n v.barcode ? 'Muestra el código de barras o dicta la referencia, y paga el monto exacto.' : 'Dicta la referencia y paga el monto exacto.',\n KEEP_ES,\n ],\n spei: (v) => [\n 'Entra a la banca en línea o a la app de tu banco.',\n 'Haz una transferencia SPEI a la CLABE indicada, por el monto exacto.',\n ...(v.reference ? ['Escribe la referencia de esta ficha en el concepto o referencia de la transferencia.'] : []),\n KEEP_ES,\n ],\n bank_transfer: (v) => [\n 'Entra a la banca en línea o a la app de tu banco.',\n 'Haz una transferencia a la cuenta o CLABE indicada, por el monto exacto.',\n ...(v.reference ? ['Escribe la referencia de esta ficha en el concepto de la transferencia.'] : []),\n KEEP_ES,\n ],\n bank_deposit: (v) => [\n 'Acude a una sucursal del banco indicado o a su cajero con depósitos.',\n `Deposita el monto exacto a la cuenta${v.reference ? ' con la referencia de esta ficha' : ' indicada'}.`,\n KEEP_ES,\n ],\n transfer: (v) => [\n 'Entra a la banca en línea o a la app de tu banco.',\n 'Haz una transferencia a la CLABE indicada, por el monto exacto.',\n ...(v.reference ? ['Escribe la referencia de esta ficha en el concepto de la transferencia.'] : []),\n KEEP_ES,\n ],\n generic: () => ['Realiza el pago con los datos de esta ficha, por el monto exacto y antes de que venza.', KEEP_ES],\n },\n}\n\nconst EN: DocText = {\n title: 'Payment voucher',\n total: 'Amount to pay',\n reference: 'Reference',\n clabe: 'CLABE',\n beneficiary: 'Beneficiary',\n bank: 'Bank',\n expires: 'Expires',\n expiresNote: 'After that date the voucher is no longer valid.',\n order: 'Order',\n barcode: 'Barcode',\n code: 'Code',\n print: 'Print',\n downloadPdf: 'Download PDF',\n noScript: 'To print, use your browser\\'s Print option (Ctrl+P) or download the PDF.',\n stepsTitle: 'How to pay',\n footer: 'Your order is created when the payment is confirmed. This voucher is single-use; do not share it.',\n methods: { oxxo: 'OXXO', spei: 'SPEI transfer', bank_transfer: 'Bank transfer', bank_deposit: 'Bank deposit', cash: 'Cash payment' },\n cash: 'Cash payment',\n steps: {\n oxxo: (v) => [\n 'Go to any OXXO store and say you want to make a cash service payment.',\n v.barcode ? 'Show the barcode at the register or read out the reference, and pay the exact amount.' : 'Read out the reference at the register and pay the exact amount.',\n KEEP_EN,\n ],\n cash: (v) => [\n 'Go to the store indicated and say you want to make a cash payment.',\n v.barcode ? 'Show the barcode or read out the reference, and pay the exact amount.' : 'Read out the reference and pay the exact amount.',\n KEEP_EN,\n ],\n spei: (v) => [\n 'Open your online banking or your bank app.',\n 'Make a SPEI transfer to the CLABE below for the exact amount.',\n ...(v.reference ? ['Enter the reference of this voucher as the transfer concept or reference.'] : []),\n KEEP_EN,\n ],\n bank_transfer: (v) => [\n 'Open your online banking or your bank app.',\n 'Make a transfer to the account or CLABE below for the exact amount.',\n ...(v.reference ? ['Enter the reference of this voucher as the transfer concept.'] : []),\n KEEP_EN,\n ],\n bank_deposit: (v) => [\n 'Go to a branch of the bank indicated or to one of its deposit ATMs.',\n `Deposit the exact amount to the account${v.reference ? ' with the reference of this voucher' : ' indicated'}.`,\n KEEP_EN,\n ],\n transfer: (v) => [\n 'Open your online banking or your bank app.',\n 'Make a transfer to the CLABE below for the exact amount.',\n ...(v.reference ? ['Enter the reference of this voucher as the transfer concept.'] : []),\n KEEP_EN,\n ],\n generic: () => ['Make the payment with the details of this voucher, for the exact amount and before it expires.', KEEP_EN],\n },\n}\n\nexport const isEnglish = (locale: string) => locale.toLowerCase().startsWith('en')\nexport function docText(locale: string): DocText {\n return isEnglish(locale) ? EN : ES\n}\n\nconst own = <T>(o: Record<string, T>, k: string | null | undefined): T | undefined => {\n const key = k?.toLowerCase()\n return key && Object.prototype.hasOwnProperty.call(o, key) ? o[key] : undefined\n}\n\n/** Method as the buyer reads it. Own keys only: a method named `constructor` or `__proto__` prints as itself. */\nexport function methodName(v: VoucherView, t: DocText): string {\n return (v.method ? own(t.methods, v.method) ?? v.method : t.cash)\n}\n\n/** Numbered instructions of this voucher: the server's `instructions_key`, else the method, else the kind. */\nexport function voucherSteps(v: VoucherView, t: DocText): string[] {\n const fn = own(t.steps, v.instructions_key) ?? own(t.steps, v.method) ?? (v.kind === 'cash' ? t.steps.cash : v.kind === 'transfer' ? t.steps.transfer : t.steps.generic)\n return fn!(v)\n}\n\nexport type VoucherField = { key: 'beneficiary' | 'bank' | 'clabe' | 'reference' | 'code'; label: string; value: string }\n\n/** Fields to print, in the order the method needs them: transfers lead with who/where/CLABE, cash with the reference. */\nexport function voucherFields(v: VoucherView, t: DocText): VoucherField[] {\n const f = (key: VoucherField['key'], label: string, value: string | null): VoucherField[] => (value ? [{ key, label, value }] : [])\n return v.kind === 'transfer'\n ? [...f('beneficiary', t.beneficiary, v.beneficiary), ...f('bank', t.bank, v.bank), ...f('clabe', t.clabe, v.clabe), ...f('reference', t.reference, v.reference), ...f('code', t.code, v.barcode_text)]\n : [...f('reference', t.reference, v.reference), ...f('clabe', t.clabe, v.clabe), ...f('beneficiary', t.beneficiary, v.beneficiary), ...f('bank', t.bank, v.bank), ...f('code', t.code, v.barcode_text)]\n}\n\nexport function formatMoney(m: Money | null, locale: string): string {\n if (!m) return ''\n try {\n return new Intl.NumberFormat(locale, { style: 'currency', currency: m.currency_code }).format(Number(m.amount))\n } catch {\n return `${m.amount} ${m.currency_code}`\n }\n}\n\nexport function formatDate(iso: string | null, locale: string, timeZone?: string): string {\n if (!iso) return ''\n const d = new Date(iso)\n if (Number.isNaN(d.getTime())) return ''\n try {\n return d.toLocaleString(locale, { dateStyle: 'long', timeStyle: 'short', ...(timeZone ? { timeZone } : {}) })\n } catch {\n return d.toISOString()\n }\n}\n","/**\n * The voucher as a real PDF 1.4, written by hand: no browser, no native module, no dependency, so the same code runs in\n * the store's Node/SSR route and in the buyer's browser. Standard Helvetica / Courier fonts (not embedded: every reader\n * has them), text in WinAnsi, the barcode as filled rectangles. Every external string reaches the file only through\n * `pdfString`, which writes it as ASCII octal escapes, so nothing a gateway sends can close a string or add an object.\n * Loaded on demand (the server route or the buyer's tap), never in the first load of the order screens.\n */\nimport { barcodeGeometry, type VoucherView } from './voucher.js'\nimport { docText, formatDate, formatMoney, methodName, voucherFields, voucherSteps } from './voucher-text.js'\n\nexport type VoucherPdfOptions = {\n shopName?: string\n number?: string | null\n locale?: string\n timeZone?: string\n /** `a4` (default) or `letter` (Mexico prints on both). */\n paper?: 'a4' | 'letter'\n}\n\n/** Hard ceiling of the file: a voucher is a few KB; anything near this is a bug, not a voucher. */\nexport const MAX_VOUCHER_PDF_BYTES = 256 * 1024\nconst MAX_PAGES = 3\n\n// Advance widths (1/1000 em) of ASCII 32..126 for the standard Helvetica and Helvetica-Bold (Adobe AFM).\nconst HELV = [278, 278, 355, 556, 556, 889, 667, 191, 333, 333, 389, 584, 278, 333, 278, 278, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 278, 278, 584, 584, 584, 556, 1015, 667, 667, 722, 722, 667, 611, 778, 722, 278, 500, 667, 556, 833, 722, 778, 667, 778, 722, 667, 611, 722, 667, 944, 667, 667, 611, 278, 278, 278, 469, 556, 333, 556, 556, 500, 556, 556, 278, 556, 556, 222, 222, 500, 222, 833, 556, 556, 556, 556, 333, 500, 278, 556, 500, 722, 500, 500, 500, 334, 260, 334, 584]\nconst HELV_B = [278, 333, 474, 556, 556, 889, 722, 238, 333, 333, 389, 584, 278, 333, 278, 278, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 333, 333, 584, 584, 584, 611, 975, 722, 722, 722, 722, 667, 611, 778, 722, 278, 556, 722, 611, 833, 722, 778, 667, 778, 722, 667, 611, 722, 667, 944, 667, 667, 611, 333, 278, 333, 584, 556, 333, 556, 611, 556, 611, 556, 333, 611, 611, 278, 278, 556, 278, 889, 611, 611, 611, 611, 389, 556, 333, 611, 556, 778, 556, 556, 500, 389, 280, 389, 584]\n\ntype Font = 'F1' | 'F2' | 'F3' | 'F4'\nconst FONT_NAMES: Record<Font, string> = { F1: 'Helvetica', F2: 'Helvetica-Bold', F3: 'Courier-Bold', F4: 'Courier' }\n\n// The few characters outside Latin-1 that WinAnsi (cp1252) has at 0x80..0x9F.\nconst CP1252: Record<number, number> = { 0x20ac: 0x80, 0x2018: 0x91, 0x2019: 0x92, 0x201c: 0x93, 0x201d: 0x94, 0x2022: 0x95, 0x2013: 0x96, 0x2014: 0x97 }\n\n/** One WinAnsi byte per character; anything it cannot show becomes `?` (and control characters a space). */\nfunction toBytes(s: string): number[] {\n const out: number[] = []\n for (const ch of s) {\n const c = ch.codePointAt(0)!\n if (c < 32 || c === 127) out.push(32)\n else if (c < 127 || (c >= 160 && c <= 255)) out.push(c)\n else out.push(CP1252[c] ?? 63)\n }\n return out\n}\n\n/** PDF literal string: printable ASCII as is (minus the three that delimit), the rest as `\\ddd`. */\nexport function pdfString(s: string): string {\n let o = '('\n for (const b of toBytes(s)) o += b >= 32 && b < 127 && b !== 40 && b !== 41 && b !== 92 ? String.fromCharCode(b) : `\\\\${b.toString(8).padStart(3, '0')}`\n return o + ')'\n}\n\nfunction charWidth(font: Font, ch: string): number {\n if (font === 'F3' || font === 'F4') return 600\n const c = ch.codePointAt(0)!\n const table = font === 'F2' ? HELV_B : HELV\n if (c >= 32 && c < 127) return table[c - 32]!\n const base = ch.normalize('NFD')[0]!.codePointAt(0)!\n return base >= 32 && base < 127 ? table[base - 32]! : 556\n}\nconst textWidth = (font: Font, size: number, s: string) => ([...s].reduce((w, ch) => w + charWidth(font, ch), 0) * size) / 1000\n\n/** Greedy word wrap to `max` points; a word wider than the line is cut. Explicit newlines are honored. */\nfunction wrap(font: Font, size: number, text: string, max: number): string[] {\n const lines: string[] = []\n for (const para of text.split(/\\r?\\n/)) {\n let line = ''\n for (const word of para.split(/\\s+/).filter(Boolean)) {\n let w = word\n while (textWidth(font, size, w) > max) {\n let n = 1\n while (n < w.length && textWidth(font, size, w.slice(0, n + 1)) <= max) n++\n if (line) (lines.push(line), (line = ''))\n lines.push(w.slice(0, n))\n w = w.slice(n)\n }\n const next = line ? `${line} ${w}` : w\n if (line && textWidth(font, size, next) > max) (lines.push(line), (line = w))\n else line = next\n }\n lines.push(line)\n }\n return lines\n}\n\nconst n = (x: number) => String(Math.round(x * 100) / 100)\n\n/** The voucher as the bytes of a PDF. Throws only if the result would exceed `MAX_VOUCHER_PDF_BYTES`. */\nexport function renderVoucherPdf(v: VoucherView, opts: VoucherPdfOptions = {}): Uint8Array {\n const locale = opts.locale ?? 'es-MX'\n const t = docText(locale)\n const [W, H] = opts.paper === 'letter' ? [612, 792] : [595.28, 841.89]\n const M = 54\n const right = W - M\n const inner = right - M\n\n const pages: string[] = []\n let ops = ''\n let y = H - M\n const newPage = () => {\n if (pages.length >= MAX_PAGES) return false\n if (ops) pages.push(ops)\n ops = ''\n y = H - M\n return true\n }\n const text = (font: Font, size: number, x: number, s: string, gray = 0) => {\n ops += `BT ${n(gray)} g /${font} ${size} Tf ${n(x)} ${n(y)} Td ${pdfString(s)} Tj ET\\n`\n }\n const ensure = (h: number) => {\n if (y - h < M) newPage()\n }\n const paragraph = (font: Font, size: number, s: string, opt: { x?: number; width?: number; gray?: number; lead?: number } = {}) => {\n const lead = opt.lead ?? size * 1.4\n for (const line of wrap(font, size, s, opt.width ?? inner)) {\n ensure(lead)\n y -= lead\n if (line) text(font, size, opt.x ?? M, line, opt.gray ?? 0)\n }\n }\n\n // Header: title and subtitle on the left, amount on the right.\n const amount = formatMoney(v.amount, locale)\n const top = y\n y -= 20\n text('F2', 20, M, t.title)\n const subtitle = [opts.shopName, methodName(v, t), opts.number ? `${t.order} ${opts.number}` : ''].filter(Boolean).join(' · ')\n if (subtitle) {\n y -= 15\n paragraph('F1', 10, subtitle, { width: amount ? inner * 0.6 : inner, gray: 0.33, lead: 12 })\n }\n const afterTitle = y\n if (amount) {\n y = top - 10\n const label = t.total.toUpperCase()\n text('F1', 8, right - textWidth('F1', 8, label), label, 0.33)\n y -= 22\n text('F2', 22, right - textWidth('F2', 22, amount), amount)\n }\n y = Math.min(afterTitle, y) - 10\n ops += `0 g 2 w ${n(M)} ${n(y)} m ${n(right)} ${n(y)} l S\\n`\n y -= 8\n\n // Fields of the method, each in a box.\n for (const f of voucherFields(v, t)) {\n const size = f.value.length > 36 ? 12 : 16\n const lines = wrap('F3', size, f.value, inner - 24)\n const h = 14 + 12 + lines.length * size * 1.3 + 8\n ensure(h + 12)\n y -= 12\n ops += `0 G 0.8 w ${n(M)} ${n(y - h)} ${n(inner)} ${n(h)} re S\\n`\n const boxTop = y\n y -= 16\n text('F1', 8, M + 12, f.label.toUpperCase(), 0.33)\n y -= 4\n for (const line of lines) {\n y -= size * 1.3\n text('F3', size, M + 12, line)\n }\n y = boxTop - h\n }\n\n // Barcode: filled rectangles, the quiet zone included in the width.\n const g = v.barcode ? barcodeGeometry(v.barcode, { ...(v.barcode_format ? { format: v.barcode_format } : {}), height: 60 }) : null\n if (g && v.barcode) {\n const scale = Math.min(1, inner / g.width) * 0.75 // module = 1.5pt at most\n const bw = g.width * scale\n const bh = 60\n ensure(bh + 40)\n y -= 18\n ops += `0 g\\n`\n const x0 = M + (inner - bw) / 2\n for (const r of g.rects) ops += `${n(x0 + r.x * scale)} ${n(y - bh)} ${n(r.w * scale)} ${n(bh)} re f\\n`\n y -= bh + 12\n const cw = textWidth('F4', 10, v.barcode)\n text('F4', 10, M + (inner - Math.min(cw, inner)) / 2, v.barcode.slice(0, Math.floor(inner / 6)))\n y -= 4\n }\n\n const expires = formatDate(v.expires_at, locale, opts.timeZone)\n if (expires) {\n y -= 8\n paragraph('F2', 10, `${t.expires}: ${expires.replace(/\\.$/, '')}.`)\n paragraph('F1', 10, t.expiresNote)\n }\n\n y -= 10\n ensure(40)\n paragraph('F2', 12, t.stepsTitle, { lead: 16 })\n voucherSteps(v, t).forEach((s, i) => {\n const lines = wrap('F1', 10, s, inner - 18)\n ensure(lines.length * 14 + 2)\n y -= 2\n lines.forEach((line, j) => {\n y -= 14\n if (j === 0) text('F1', 10, M, `${i + 1}.`)\n text('F1', 10, M + 18, line)\n })\n })\n if (v.instructions) {\n y -= 6\n paragraph('F1', 9, v.instructions, { gray: 0.33, lead: 12 })\n }\n y -= 8\n paragraph('F1', 8, t.footer, { gray: 0.33, lead: 11 })\n pages.push(ops)\n\n // Objects: 1 catalog, 2 pages, 3..6 fonts, 7 info, then (page, content) pairs.\n const objs: string[] = []\n const kids = pages.map((_, i) => `${8 + i * 2} 0 R`).join(' ')\n objs[1] = '<< /Type /Catalog /Pages 2 0 R >>'\n objs[2] = `<< /Type /Pages /Kids [${kids}] /Count ${pages.length} >>`\n ;(['F1', 'F2', 'F3', 'F4'] as Font[]).forEach((f, i) => (objs[3 + i] = `<< /Type /Font /Subtype /Type1 /BaseFont /${FONT_NAMES[f]} /Encoding /WinAnsiEncoding >>`))\n objs[7] = `<< /Title ${pdfString(`${t.title}${opts.shopName ? ` - ${opts.shopName}` : ''}`)} /Producer ${pdfString('@asteby/storefront-react')} >>`\n pages.forEach((content, i) => {\n objs[8 + i * 2] = `<< /Type /Page /Parent 2 0 R /MediaBox [0 0 ${n(W)} ${n(H)}] /Resources << /Font << /F1 3 0 R /F2 4 0 R /F3 5 0 R /F4 6 0 R >> >> /Contents ${9 + i * 2} 0 R >>`\n objs[9 + i * 2] = `<< /Length ${content.length} >>\\nstream\\n${content}endstream`\n })\n\n let out = '%PDF-1.4\\n%\\xE2\\xE3\\xCF\\xD3\\n'\n const offsets: number[] = []\n for (let i = 1; i < objs.length; i++) {\n offsets[i] = out.length\n out += `${i} 0 obj\\n${objs[i]}\\nendobj\\n`\n }\n const xref = out.length\n out += `xref\\n0 ${objs.length}\\n0000000000 65535 f \\n`\n for (let i = 1; i < objs.length; i++) out += `${String(offsets[i]).padStart(10, '0')} 00000 n \\n`\n out += `trailer\\n<< /Size ${objs.length} /Root 1 0 R /Info 7 0 R >>\\nstartxref\\n${xref}\\n%%EOF\\n`\n\n if (out.length > MAX_VOUCHER_PDF_BYTES) throw new RangeError('voucher PDF too large')\n const bytes = new Uint8Array(out.length)\n for (let i = 0; i < out.length; i++) bytes[i] = out.charCodeAt(i) & 0xff\n return bytes\n}\n","/**\n * Printable voucher (A4 HTML) that does not depend on any payment gateway: built only from the voucher data OPS keeps.\n * Loaded on demand (the buyer taps print/download) or by `pendingVoucherResponse` on the server; plain text, no React.\n * Everything external passes through `esc` before it enters the HTML.\n */\nimport { barcodeGeometry, type VoucherView } from './voucher.js'\nimport { docText, formatDate, formatMoney, methodName, voucherFields, voucherSteps } from './voucher-text.js'\n\nexport function esc(s: string): string {\n return s.replace(/[&<>\"']/g, (c) => ({ '&': '&', '<': '<', '>': '>', '\"': '"', \"'\": ''' })[c] as string)\n}\n\nexport type VoucherDocumentOptions = {\n shopName?: string\n /** Order number, if there is one yet. */\n number?: string | null\n locale?: string\n /** IANA zone the expiry is printed in (default: the runtime's). */\n timeZone?: string\n /** Print button on screen (hidden when printing). Needs JS; without it the page says to use the browser's print. */\n printButton?: boolean\n /** Link of the real PDF of this voucher (a plain `<a download>`, so it works without JS). */\n pdfHref?: string\n /** Opens the print dialog on load. */\n autoPrint?: boolean\n /** `<script>` nonce when the one serving the voucher sends a CSP with `script-src 'nonce-…'`. */\n nonce?: string\n}\n\nconst CSS = `\n@page { size: A4; margin: 18mm; }\n* { box-sizing: border-box; }\nbody { margin: 0; font: 14px/1.5 system-ui, -apple-system, \"Segoe UI\", Roboto, sans-serif; color: #111; background: #fff; }\nmain { max-width: 174mm; margin: 0 auto; padding: 24px 16px; }\nh1 { font-size: 22px; margin: 0; }\n.muted { color: #555; }\n.head { display: flex; justify-content: space-between; align-items: flex-start; gap: 16px; border-bottom: 3px solid #111; padding-bottom: 12px; }\n.amount { margin: 0; font-size: 28px; font-weight: 700; text-align: right; }\n.box { border: 1px solid #111; padding: 14px 16px; margin-top: 18px; }\n.label { margin: 0; font-weight: 400; font-size: 12px; letter-spacing: .08em; text-transform: uppercase; color: #555; }\n.value { margin: 0; font: 700 22px/1.3 ui-monospace, \"SF Mono\", Menlo, Consolas, monospace; word-break: break-all; letter-spacing: .04em; }\n.bar { text-align: center; }\n.bar svg { max-width: 100%; height: auto; }\n.note { margin-top: 18px; font-size: 12px; }\n.pre { white-space: pre-line; }\n.steps-title { font-size: 16px; margin: 18px 0 0; }\n.steps { margin: 6px 0 0; padding-left: 20px; }\n.bar { margin: 18px 0 0; }\n.actions { margin-top: 24px; display: flex; flex-wrap: wrap; gap: 12px; align-items: center; }\n.btn { display: inline-block; font: inherit; padding: 10px 18px; border: 2px solid #111; background: #111; color: #fff; cursor: pointer; text-decoration: none; }\n.btn.alt { background: #fff; color: #111; }\n.btn:focus-visible { outline: 3px solid #1a56db; outline-offset: 2px; }\n@media print { .actions { display: none; } main { padding: 0; } }\n`\n\nfunction barcodeSvg(value: string, format: VoucherView['barcode_format'], label: string): string | null {\n const g = barcodeGeometry(value, { ...(format ? { format } : {}) })\n if (!g) return null\n const rects = g.rects.map((r) => `<rect x=\"${r.x}\" y=\"0\" width=\"${r.w}\" height=\"${g.height}\"/>`).join('')\n return `<svg viewBox=\"0 0 ${g.width} ${g.height}\" width=\"${g.width}\" height=\"${g.height}\" role=\"img\" aria-label=\"${esc(label)} ${esc(value)}\" shape-rendering=\"crispEdges\" fill=\"#000\">${rects}</svg>`\n}\n\n/** Complete HTML document of the voucher. Missing data is simply not drawn. */\nexport function renderVoucherDocument(v: VoucherView, opts: VoucherDocumentOptions = {}): string {\n const locale = opts.locale ?? 'es-MX'\n const t = docText(locale)\n const shop = opts.shopName || ''\n const method = methodName(v, t)\n const code = v.barcode\n const svg = code ? barcodeSvg(code, v.barcode_format, t.barcode) : null\n const expires = formatDate(v.expires_at, locale, opts.timeZone)\n const fields = voucherFields(v, t)\n const steps = voucherSteps(v, t)\n const subtitle = [shop, method, opts.number ? `${t.order} ${opts.number}` : ''].filter(Boolean).map(esc).join(' · ')\n const actions = opts.printButton || opts.pdfHref\n return `<!doctype html>\n<html lang=\"${esc(locale)}\"><head><meta charset=\"utf-8\"><meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n<meta name=\"robots\" content=\"noindex\"><title>${esc(t.title)}${shop ? ` - ${esc(shop)}` : ''}</title><style>${CSS}</style></head>\n<body><main aria-labelledby=\"t\">\n<header class=\"head\"><div><h1 id=\"t\">${esc(t.title)}</h1><p class=\"muted\" data-voucher-method=\"${esc(v.method ?? '')}\">${subtitle}</p></div>\n${v.amount ? `<div><p class=\"label\" style=\"text-align:right\">${esc(t.total)}</p><p class=\"amount\">${esc(formatMoney(v.amount, locale))}</p></div>` : ''}</header>\n${fields.map((f) => `<section class=\"box\" data-field=\"${f.key}\"><h2 class=\"label\">${esc(f.label)}</h2><p class=\"value\">${esc(f.value)}</p></section>`).join('')}\n${svg ? `<figure class=\"bar\">${svg}<figcaption class=\"muted\" style=\"font-family:ui-monospace,monospace\">${esc(code as string)}</figcaption></figure>` : ''}\n${expires ? `<p><strong>${esc(t.expires)}:</strong> ${esc(expires.replace(/\\.$/, ''))}. ${esc(t.expiresNote)}</p>` : ''}\n<h2 class=\"steps-title\">${esc(t.stepsTitle)}</h2>\n<ol class=\"steps\">${steps.map((s) => `<li>${esc(s)}</li>`).join('')}</ol>\n${v.instructions ? `<p class=\"note pre muted\">${esc(v.instructions)}</p>` : ''}\n<p class=\"note muted\">${esc(t.footer)}</p>\n${\n actions\n ? `<div class=\"actions\" role=\"group\" aria-label=\"${esc(t.title)}\">${opts.pdfHref ? `<a class=\"btn\" href=\"${esc(opts.pdfHref)}\" download=\"ficha-de-pago.pdf\" data-voucher-pdf>${esc(t.downloadPdf)}</a>` : ''}${opts.printButton ? `<button type=\"button\" class=\"btn alt\" id=\"print\" hidden>${esc(t.print)}</button><noscript><p class=\"note muted\">${esc(t.noScript)}</p></noscript>` : ''}</div>`\n : ''\n}\n</main>\n${opts.printButton || opts.autoPrint ? `<script${opts.nonce ? ` nonce=\"${esc(opts.nonce)}\"` : ''}>(function(){var b=document.getElementById(\"print\");if(b){b.hidden=false;b.addEventListener(\"click\",function(){window.print()})}${opts.autoPrint ? 'window.addEventListener(\"load\",function(){setTimeout(function(){window.print()},300)});' : ''}})();</script>` : ''}\n</body></html>`\n}\n","/**\n * Form fields of a checkout with inline validation: a labelled field that shows its own error under it, a focusable\n * error summary for the submit, and one hook that reads the browser's own constraint validation (`required`, `type`,\n * `pattern`, `minLength`...) so the rules stay in the HTML and the page keeps working without JavaScript (then the\n * browser explains the errors itself).\n *\n * WCAG 2.2: errors are identified in text next to the field (3.3.1), linked with `aria-describedby` and `aria-invalid`,\n * and the summary takes focus and links to every field (3.3.1 / 2.4.3). Validation runs when the buyer leaves a field\n * that has a value, and clears as soon as it is fixed: it never nags while typing.\n */\nimport { useEffect, useRef, useState, type InputHTMLAttributes, type ReactNode, type RefObject, type SelectHTMLAttributes } from 'react'\n\nexport type FieldMessages = {\n valueMissing: string\n /** Required radio group (delivery, payment). */\n choiceMissing: string\n email: string\n tel: string\n pattern: string\n /** `{n}` = minimum length. */\n tooShort: string\n /** A field the server rejected. */\n server: string\n /** Error summary title, `{n}` = number of fields. */\n summaryOne: string\n summaryMany: string\n optional: string\n}\n\nconst ES: FieldMessages = {\n valueMissing: 'Completa este campo.',\n choiceMissing: 'Elige una opción.',\n email: 'Escribe un correo válido, por ejemplo nombre@correo.com.',\n tel: 'Escribe un teléfono válido.',\n pattern: 'Revisa el formato.',\n tooShort: 'Escribe al menos {n} caracteres.',\n server: 'Revisa este campo.',\n summaryOne: 'Revisa 1 campo para continuar',\n summaryMany: 'Revisa {n} campos para continuar',\n optional: '(opcional)',\n}\n\nconst EN: FieldMessages = {\n valueMissing: 'Fill in this field.',\n choiceMissing: 'Choose an option.',\n email: 'Enter a valid email, like name@example.com.',\n tel: 'Enter a valid phone number.',\n pattern: 'Check the format.',\n tooShort: 'Enter at least {n} characters.',\n server: 'Check this field.',\n summaryOne: 'Check 1 field to continue',\n summaryMany: 'Check {n} fields to continue',\n optional: '(optional)',\n}\n\n/** Messages for a locale (`es*` default, `en*`), with optional overrides. */\nexport function fieldMessages(locale?: string | null, overrides?: Partial<FieldMessages> | null): FieldMessages {\n const base = (locale ?? 'es-MX').toLowerCase().startsWith('en') ? EN : ES\n return overrides ? { ...base, ...overrides } : base\n}\n\n/** Field name -> error text. */\nexport type FieldErrors = Record<string, string>\n\nexport type ErrorSummaryItem = { name: string; id: string; label: string; message: string }\n\ntype Control = HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement\n\nconst isControl = (el: EventTarget | null): el is Control =>\n !!el && typeof (el as Element).tagName === 'string' && ['INPUT', 'SELECT', 'TEXTAREA'].includes((el as Element).tagName) && !!(el as Control).name\n\n/**\n * The error text for a control, from its validity. A control can bring its own text with `data-sf-error` (any\n * failure) or `title` (pattern mismatch, the HTML convention).\n */\nexport function validationMessage(el: Control, m: FieldMessages = ES): string | null {\n const v = el.validity\n if (!v || v.valid) return null\n const own = el.getAttribute('data-sf-error')\n if (own) return own\n if (v.valueMissing) return el instanceof HTMLInputElement && (el.type === 'radio' || el.type === 'checkbox') ? m.choiceMissing : m.valueMissing\n if (v.typeMismatch && el instanceof HTMLInputElement) return el.type === 'email' ? m.email : el.type === 'tel' ? m.tel : m.pattern\n if (v.patternMismatch) return el.getAttribute('title') || (el instanceof HTMLInputElement && el.type === 'tel' ? m.tel : m.pattern)\n if (v.tooShort && el instanceof HTMLInputElement) return m.tooShort.replace('{n}', String(el.minLength))\n return el.validationMessage || m.pattern\n}\n\n/** Visible name of a control: its `<label>`, `aria-label`, or the legend of its group (radios). */\nfunction labelOf(el: Control): string {\n if (el instanceof HTMLInputElement && el.type === 'radio') {\n const legend = el.closest('fieldset')?.querySelector('legend')\n if (legend?.textContent) return legend.textContent.trim()\n }\n const text = el.labels?.[0]?.getAttribute('data-sf-label') ?? el.labels?.[0]?.textContent ?? el.getAttribute('aria-label') ?? el.name\n return text.trim()\n}\n\nexport type UseFieldErrorsOptions = {\n locale?: string\n messages?: Partial<FieldMessages>\n /** Fields the server rejected (e.g. from the action), shown with `serverMessages[name]` or the generic text. */\n serverFields?: Iterable<string> | null\n serverMessages?: Record<string, string> | null\n}\n\nexport type FieldErrorsState = {\n errors: FieldErrors\n /** Non-null after a submit with problems (or with server errors): render it in `<ErrorSummary>`. */\n summary: ErrorSummaryItem[] | null\n /** Changes every time a new summary appears, so `<ErrorSummary>` focuses it again. */\n summaryKey: number\n clear: () => void\n}\n\n/**\n * Inline validation for the page `<form>`. Listens to the form (no wrapping component): leaving a field with a value\n * checks it; typing in a field with an error clears it when fixed; a submit or `reportValidity()` with problems\n * collects them (the browser's bubbles are replaced by the inline texts) for the summary.\n */\nexport function useFieldErrors(formRef: RefObject<HTMLFormElement | null>, options: UseFieldErrorsOptions = {}): FieldErrorsState {\n const m = fieldMessages(options.locale, options.messages)\n const live = useRef(m)\n live.current = m\n const server = [...(options.serverFields ?? [])]\n const serverKey = server.join('|')\n const [errors, setErrors] = useState<FieldErrors>(() => Object.fromEntries(server.map((n) => [n, options.serverMessages?.[n] ?? m.server])))\n const [summary, setSummary] = useState<ErrorSummaryItem[] | null>(null)\n const [summaryKey, setSummaryKey] = useState(0)\n\n // Server errors (a new action result): inline texts plus a summary.\n useEffect(() => {\n if (!server.length) return\n const form = formRef.current\n const items: ErrorSummaryItem[] = []\n const next: FieldErrors = {}\n for (const name of server) {\n const msg = options.serverMessages?.[name] ?? live.current.server\n next[name] = msg\n const el = form?.elements.namedItem(name)\n const ctl = el && 'length' in el && !(el instanceof HTMLSelectElement) ? ((el as RadioNodeList)[0] as Control | undefined) : (el as Control | null)\n if (ctl) items.push({ name, id: ctl.id || name, label: labelOf(ctl), message: msg })\n }\n setErrors((e) => ({ ...e, ...next }))\n if (items.length) {\n setSummary(items)\n setSummaryKey((k) => k + 1)\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [serverKey])\n\n useEffect(() => {\n const form = formRef.current\n if (!form) return\n let batch: Control[] | null = null\n const set = (name: string, msg: string | null) =>\n setErrors((e) => {\n if (msg === null) {\n if (!(name in e)) return e\n const { [name]: _gone, ...rest } = e\n return rest\n }\n return e[name] === msg ? e : { ...e, [name]: msg }\n })\n const onBlur = (ev: FocusEvent) => {\n const el = ev.target\n if (!isControl(el) || (el instanceof HTMLInputElement && (el.type === 'radio' || el.type === 'checkbox' || el.type === 'hidden'))) return\n // Leaving an empty field you only tabbed through is not an error yet; it is at submit.\n if (!el.value) return\n set(el.name, validationMessage(el, live.current))\n }\n const onInput = (ev: Event) => {\n const el = ev.target\n if (!isControl(el)) return\n setErrors((e) => {\n if (!(el.name in e)) return e\n const msg = el.validity.valid ? null : validationMessage(el, live.current)\n if (msg !== null) return e // keep the text until the field is fixed (no flicker while typing)\n const { [el.name]: _gone, ...rest } = e\n return rest\n })\n }\n const onInvalid = (ev: Event) => {\n const el = ev.target\n if (!isControl(el)) return\n ev.preventDefault() // the inline text replaces the browser bubble\n if (!batch) {\n batch = []\n queueMicrotask(() => {\n const list = batch ?? []\n batch = null\n const seen = new Set<string>()\n const items: ErrorSummaryItem[] = []\n const next: FieldErrors = {}\n for (const c of list) {\n if (seen.has(c.name)) continue\n seen.add(c.name)\n const msg = validationMessage(c, live.current) ?? live.current.valueMissing\n next[c.name] = msg\n items.push({ name: c.name, id: c.id || c.name, label: labelOf(c), message: msg })\n }\n setErrors((e) => ({ ...e, ...next }))\n setSummary(items)\n setSummaryKey((k) => k + 1)\n })\n }\n batch.push(el)\n }\n form.addEventListener('focusout', onBlur)\n form.addEventListener('input', onInput)\n form.addEventListener('change', onInput)\n form.addEventListener('invalid', onInvalid, true)\n return () => {\n form.removeEventListener('focusout', onBlur)\n form.removeEventListener('input', onInput)\n form.removeEventListener('change', onInput)\n form.removeEventListener('invalid', onInvalid, true)\n }\n }, [formRef])\n\n // The summary follows the fixes: a field fixed after the submit leaves the list.\n const shown = summary ? summary.filter((s) => s.name in errors).map((s) => ({ ...s, message: errors[s.name]! })) : null\n return {\n errors,\n summary: shown && shown.length ? shown : null,\n summaryKey,\n clear: () => {\n setErrors({})\n setSummary(null)\n },\n }\n}\n\nexport type ErrorSummaryProps = {\n items: readonly ErrorSummaryItem[] | null\n /** Changes when a new summary must take focus (`useFieldErrors().summaryKey`). */\n focusKey?: number\n locale?: string\n messages?: Partial<FieldMessages>\n title?: ReactNode\n className?: string\n classNames?: Partial<Record<'title' | 'list' | 'link', string>>\n}\n\n/**\n * The list of problems after a submit, above the form: `role=\"alert\"`, takes focus, one link per field (moves the\n * focus to it). Renders nothing without items.\n */\nexport function ErrorSummary({ items, focusKey, locale, messages, title, className, classNames: cx = {} }: ErrorSummaryProps) {\n const ref = useRef<HTMLDivElement>(null)\n const m = fieldMessages(locale, messages)\n const has = !!items && items.length > 0\n useEffect(() => {\n if (has) ref.current?.focus()\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [focusKey])\n if (!has) return null\n const n = items!.length\n return (\n <div ref={ref} role=\"alert\" tabIndex={-1} className={className} data-sf-error-summary aria-labelledby=\"sf-error-summary-title\">\n <p id=\"sf-error-summary-title\" className={cx.title} data-sf-error-summary-title>\n {title ?? (n === 1 ? m.summaryOne : m.summaryMany.replace('{n}', String(n)))}\n </p>\n <ul className={cx.list}>\n {items!.map((it) => (\n <li key={it.name}>\n <a\n href={`#${it.id}`}\n className={cx.link}\n onClick={(e) => {\n const el = document.getElementById(it.id)\n if (!el) return\n e.preventDefault()\n el.focus()\n el.scrollIntoView?.({ block: 'center' })\n }}\n >\n {it.label}: {it.message}\n </a>\n </li>\n ))}\n </ul>\n </div>\n )\n}\n\nexport type CheckoutFieldClassNames = Partial<Record<'root' | 'label' | 'optional' | 'input' | 'hint' | 'error', string>>\n\ntype BaseFieldProps = {\n name: string\n label: string\n /** Field id. Default: the name. */\n id?: string\n /** Error text (from `useFieldErrors().errors[name]` or the server). */\n error?: string | null\n /** Help under the label (\"we only use it for the delivery\"). */\n hint?: ReactNode\n /** Marks the label \"(optional)\" and drops `required`. */\n optional?: boolean\n classNames?: CheckoutFieldClassNames\n locale?: string\n messages?: Partial<FieldMessages>\n}\n\nexport type CheckoutFieldProps = BaseFieldProps & Omit<InputHTMLAttributes<HTMLInputElement>, 'name' | 'id'> & { as?: 'input' }\nexport type CheckoutSelectProps = BaseFieldProps & Omit<SelectHTMLAttributes<HTMLSelectElement>, 'name' | 'id'> & { as: 'select'; children: ReactNode }\n\n/**\n * One labelled field: label (with \"(optional)\"), hint, the control and its error text, wired with `aria-describedby`\n * and `aria-invalid`. Required unless `optional`. `as=\"select\"` renders a `<select>` with the given options.\n */\nexport function CheckoutField(props: CheckoutFieldProps | CheckoutSelectProps) {\n const { name, label, id = name, error, hint, optional = false, classNames: cx = {}, locale, messages, ...rest } = props\n const m = fieldMessages(locale, messages)\n const hintId = hint ? `${id}-hint` : undefined\n const errorId = `${id}-error`\n const describedBy = [hintId, error ? errorId : undefined].filter(Boolean).join(' ') || undefined\n const common = {\n id,\n name,\n required: !optional,\n 'aria-invalid': error ? true : undefined,\n 'aria-describedby': describedBy,\n className: cx.input,\n 'data-sf-field-control': '',\n } as const\n return (\n <div className={cx.root} data-sf-field data-invalid={error ? '' : undefined}>\n <label htmlFor={id} className={cx.label} data-sf-label={label}>\n {label}\n {optional ? (\n <span className={cx.optional} data-sf-field-optional>\n {' '}\n {m.optional}\n </span>\n ) : null}\n </label>\n {hint ? (\n <p id={hintId} className={cx.hint} data-sf-field-hint>\n {hint}\n </p>\n ) : null}\n {rest.as === 'select' ? (\n (() => {\n const { as: _as, children, ...select } = rest\n return (\n <select {...select} {...common}>\n {children}\n </select>\n )\n })()\n ) : (\n (() => {\n const { as: _as, ...input } = rest as CheckoutFieldProps\n return <input {...input} {...common} />\n })()\n )}\n {/* Reserved only when there is an error: the text sits right under its field. */}\n {error ? (\n <p id={errorId} className={cx.error} data-sf-field-error>\n {error}\n </p>\n ) : null}\n </div>\n )\n}\n","/**\n * The account screen: sign in with password, create an account, verify the emailed code, sign in with a code and\n * recover a forgotten password, in one `<form method=\"post\">` driven by `createAuthAction` (`./server`). What the store\n * offers comes from `loadAuthCapabilities`; the form shows only that. Plain HTML: it works without JavaScript for the\n * password sign-in and the steps the action sends back; the view switches (links) need JavaScript.\n *\n * Styling: `data-sf-account-*` attributes and `classNames` slots, fields reuse `CheckoutField` (and `checkout.css`);\n * `account.css` is an optional neutral sheet. Texts are Spanish by default, English with `locale=\"en\"`, any with `messages`.\n */\nimport { useEffect, useRef, useState, type ComponentType, type ReactNode } from 'react'\nimport type { CustomerCapabilities } from '@asteby/storefront'\nimport { CheckoutField, ErrorSummary, useFieldErrors, type CheckoutFieldClassNames } from '../checkout/fields.js'\nimport type { AuthActionData, AuthErrorCode, AuthStep } from './types.js'\n\nexport type AccountAuthView = 'login' | 'register' | 'otp-email' | 'forgot' | AuthStep\n\nexport type AccountAuthMessages = {\n titles: Record<AccountAuthView, string>\n email: string\n password: string\n newPassword: string\n passwordHint: string\n firstName: string\n lastName: string\n code: string\n codeSentTo: string\n submit: Record<AccountAuthView, string>\n resend: string\n forgotLink: string\n registerLink: string\n loginLink: string\n otpLink: string\n backToLogin: string\n nothingAvailable: string\n errors: Record<AuthErrorCode, string>\n}\n\nconst ES: AccountAuthMessages = {\n titles: {\n login: 'Entrar a tu cuenta',\n register: 'Crear una cuenta',\n verify: 'Confirma tu correo',\n 'otp-email': 'Entrar con un código',\n otp: 'Escribe tu código',\n forgot: 'Recuperar contraseña',\n reset: 'Elige una contraseña nueva',\n },\n email: 'Correo electrónico',\n password: 'Contraseña',\n newPassword: 'Contraseña nueva',\n passwordHint: 'Entre 10 y 128 caracteres.',\n firstName: 'Nombre',\n lastName: 'Apellido',\n code: 'Código',\n codeSentTo: 'Enviamos un código a {email}. Puede tardar un minuto.',\n submit: {\n login: 'Entrar',\n register: 'Crear cuenta',\n verify: 'Confirmar',\n 'otp-email': 'Enviarme el código',\n otp: 'Entrar',\n forgot: 'Enviarme el código',\n reset: 'Guardar y entrar',\n },\n resend: 'Reenviar código',\n forgotLink: '¿Olvidaste tu contraseña?',\n registerLink: 'Crear una cuenta',\n loginLink: 'Ya tengo cuenta',\n otpLink: 'Entrar con un código por correo',\n backToLogin: 'Volver a entrar con contraseña',\n nothingAvailable: 'Esta tienda no admite iniciar sesión por ahora.',\n errors: {\n invalid_credentials: 'El correo o la contraseña no coinciden.',\n invalid_code: 'El código no es válido o ya venció.',\n email_taken: 'Ya existe una cuenta con este correo. Entra o recupera tu contraseña.',\n rate_limited: 'Demasiados intentos. Espera unos minutos e inténtalo de nuevo.',\n validation: 'Revisa los datos e inténtalo de nuevo.',\n unsupported: 'Esta forma de entrar no está disponible en esta tienda.',\n store_misconfigured: 'No pudimos crear tu cuenta por un problema de configuración de la tienda. Puedes comprar como invitado; ya avisamos a la tienda.',\n unavailable: 'No pudimos completar la acción. Inténtalo de nuevo en un momento.',\n },\n}\n\nconst EN: AccountAuthMessages = {\n titles: {\n login: 'Sign in',\n register: 'Create an account',\n verify: 'Confirm your email',\n 'otp-email': 'Sign in with a code',\n otp: 'Enter your code',\n forgot: 'Reset your password',\n reset: 'Choose a new password',\n },\n email: 'Email',\n password: 'Password',\n newPassword: 'New password',\n passwordHint: 'Between 10 and 128 characters.',\n firstName: 'First name',\n lastName: 'Last name',\n code: 'Code',\n codeSentTo: 'We sent a code to {email}. It can take a minute.',\n submit: {\n login: 'Sign in',\n register: 'Create account',\n verify: 'Confirm',\n 'otp-email': 'Email me the code',\n otp: 'Sign in',\n forgot: 'Email me the code',\n reset: 'Save and sign in',\n },\n resend: 'Resend code',\n forgotLink: 'Forgot your password?',\n registerLink: 'Create an account',\n loginLink: 'I already have an account',\n otpLink: 'Sign in with an emailed code',\n backToLogin: 'Back to password sign-in',\n nothingAvailable: 'This store does not support signing in right now.',\n errors: {\n invalid_credentials: 'The email and password do not match.',\n invalid_code: 'The code is not valid or has expired.',\n email_taken: 'An account with this email already exists. Sign in or reset your password.',\n rate_limited: 'Too many attempts. Wait a few minutes and try again.',\n validation: 'Check the details and try again.',\n unsupported: 'This way of signing in is not available in this store.',\n store_misconfigured: 'We could not create your account because of a store configuration problem. You can check out as a guest; we have already told the store.',\n unavailable: 'We could not complete that. Try again in a moment.',\n },\n}\n\n/** Messages for a locale (`es*` default, `en*`), with optional overrides (nested `titles`/`submit`/`errors` merge). */\nexport function accountAuthMessages(locale?: string | null, overrides?: DeepPartial<AccountAuthMessages> | null): AccountAuthMessages {\n const base = (locale ?? 'es-MX').toLowerCase().startsWith('en') ? EN : ES\n if (!overrides) return base\n return {\n ...base,\n ...(overrides as Partial<AccountAuthMessages>),\n titles: { ...base.titles, ...overrides.titles },\n submit: { ...base.submit, ...overrides.submit },\n errors: { ...base.errors, ...overrides.errors },\n }\n}\n\ntype DeepPartial<T> = { [K in keyof T]?: T[K] extends Record<string, string> ? Partial<T[K]> : T[K] }\n\nexport type AccountAuthClassNames = Partial<Record<'root' | 'title' | 'form' | 'notice' | 'error' | 'actions' | 'submit' | 'links' | 'link', string>> & {\n field?: CheckoutFieldClassNames\n}\n\n/** What `<AccountAuth>` passes to its `form` component: the few props a router `Form` and the HTML `<form>` both accept. */\nexport type AccountFormProps = {\n method?: 'post'\n action?: string\n className?: string\n children?: ReactNode\n /** Loose on purpose: a router `Form` types its ref with its own copy of `@types/react`. */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ref?: any\n 'data-sf-account-form'?: boolean | string\n}\n\nexport type AccountAuthProps = {\n /** From `loadAuthCapabilities` (the loader). */\n capabilities: CustomerCapabilities\n /** What the action returned (`useActionData()`); drives the next screen and the errors. */\n data?: AuthActionData | null\n /** Where to go after signing in (sent as `next`; the server validates it). */\n next?: string | null\n /** A submit is in flight (`navigation.state !== 'idle'`): disables the buttons. */\n pending?: boolean\n /** First screen. Default `login`, or `otp-email` when the store has no password sign-in. */\n initialView?: AccountAuthView\n /** Form component, e.g. React Router's `Form`, to submit without a reload. It must forward `ref` to the `<form>` (React 19: a prop). Default: the HTML `<form>`. */\n form?: 'form' | ComponentType<AccountFormProps>\n /** `action` of the form (default: the current URL). */\n action?: string\n locale?: string\n messages?: DeepPartial<AccountAuthMessages>\n classNames?: AccountAuthClassNames\n /** Shown above the form (a logo, a welcome text). */\n header?: ReactNode\n}\n\nconst initialOf = (caps: CustomerCapabilities, initialView?: AccountAuthView): AccountAuthView =>\n initialView ?? (caps.password ? 'login' : caps.otp_channels.includes('email') ? 'otp-email' : 'login')\n\n/**\n * The whole account screen. Headless enough to restyle, complete enough to drop in:\n * `export default function Account() { return <AccountAuth capabilities={useLoaderData()} data={useActionData()} form={Form} /> }`.\n */\nexport function AccountAuth({ capabilities, data, next, pending = false, initialView, form: FormTag = 'form', action, locale, messages, classNames: cx = {}, header }: AccountAuthProps) {\n const m = accountAuthMessages(locale, messages)\n const passwordOn = capabilities.password\n const otpOn = capabilities.otp_channels.includes('email')\n const [view, setView] = useState<AccountAuthView>(() => data?.step ?? initialOf(capabilities, initialView))\n const [email, setEmail] = useState(data?.email ?? '')\n const ref = useRef<HTMLFormElement>(null)\n const serverFields = data?.error?.field ? [data.error.field] : null\n const errorText = data?.error ? m.errors[data.error.code] : null\n const v = useFieldErrors(ref, { ...(locale ? { locale } : {}), serverFields, serverMessages: data?.error?.field && errorText ? { [data.error.field]: errorText } : null })\n\n // The action decides the next screen; the email it carries survives it.\n useEffect(() => {\n if (data?.step) setView(data.step)\n if (data?.email) setEmail(data.email)\n }, [data])\n\n const go = (to: AccountAuthView) => {\n v.clear()\n setView(to)\n }\n const fieldProps = { classNames: cx.field, ...(locale ? { locale } : {}) }\n const emailField = (\n <CheckoutField {...fieldProps} name=\"email\" type=\"email\" label={m.email} autoComplete=\"email\" inputMode=\"email\" value={email} onChange={(e) => setEmail(e.currentTarget.value)} error={v.errors.email ?? null} />\n )\n const codeField = (\n <CheckoutField {...fieldProps} name=\"code\" label={m.code} autoComplete=\"one-time-code\" inputMode=\"numeric\" pattern=\"[0-9]*\" error={v.errors.code ?? null} />\n )\n const passwordField = (label: string, autoComplete: string, newPassword: boolean) => (\n <CheckoutField\n {...fieldProps}\n name=\"password\"\n type=\"password\"\n label={label}\n autoComplete={autoComplete}\n error={v.errors.password ?? null}\n {...(newPassword ? { minLength: 10, maxLength: 128, hint: m.passwordHint } : {})}\n />\n )\n const link = (to: AccountAuthView, text: string) => (\n <button type=\"button\" className={cx.link} data-sf-account-link={to} onClick={() => go(to)}>\n {text}\n </button>\n )\n\n let body: ReactNode\n let links: ReactNode = null\n switch (view) {\n case 'register':\n body = (\n <>\n <CheckoutField {...fieldProps} name=\"first_name\" label={m.firstName} autoComplete=\"given-name\" optional />\n <CheckoutField {...fieldProps} name=\"last_name\" label={m.lastName} autoComplete=\"family-name\" optional />\n {emailField}\n {passwordField(m.password, 'new-password', true)}\n </>\n )\n links = link('login', m.loginLink)\n break\n case 'verify':\n case 'otp':\n body = (\n <>\n <p className={cx.notice} data-sf-account-notice>\n {m.codeSentTo.replace('{email}', email)}\n </p>\n <input type=\"hidden\" name=\"email\" value={email} />\n {codeField}\n </>\n )\n links = (\n <>\n {view === 'otp' ? (\n <button type=\"submit\" name=\"intent\" value=\"otp-request\" formNoValidate className={cx.link} data-sf-account-link=\"resend\">\n {m.resend}\n </button>\n ) : null}\n {link('login', m.backToLogin)}\n </>\n )\n break\n case 'otp-email':\n case 'forgot':\n body = emailField\n links = link('login', m.backToLogin)\n break\n case 'reset':\n body = (\n <>\n <p className={cx.notice} data-sf-account-notice>\n {m.codeSentTo.replace('{email}', email)}\n </p>\n <input type=\"hidden\" name=\"email\" value={email} />\n {codeField}\n {passwordField(m.newPassword, 'new-password', true)}\n </>\n )\n links = link('login', m.backToLogin)\n break\n default:\n body = (\n <>\n {emailField}\n {passwordField(m.password, 'current-password', false)}\n </>\n )\n links = (\n <>\n {otpOn ? link('forgot', m.forgotLink) : null}\n {link('register', m.registerLink)}\n {otpOn ? link('otp-email', m.otpLink) : null}\n </>\n )\n }\n\n const intent = { login: 'login', register: 'register', verify: 'verify', 'otp-email': 'otp-request', otp: 'otp-login', forgot: 'forgot', reset: 'reset' }[view]\n // Without password accounts the password views do not exist; only the code sign-in does.\n const available = view === 'login' || view === 'register' || view === 'forgot' || view === 'reset' || view === 'verify' ? passwordOn : otpOn\n const showSummary = !data?.error?.field\n const title = m.titles[view]\n if (!available && !passwordOn && !otpOn) {\n return (\n <section className={cx.root} data-sf-account-auth data-sf-account-view=\"unavailable\">\n <p className={cx.notice} role=\"status\">\n {capabilities.unavailable_reason === 'missing_scope' ? m.errors.store_misconfigured : m.nothingAvailable}\n </p>\n </section>\n )\n }\n return (\n <section className={cx.root} data-sf-account-auth data-sf-account-view={view} aria-labelledby=\"sf-account-title\">\n {header}\n <h1 id=\"sf-account-title\" className={cx.title}>\n {title}\n </h1>\n <FormTag ref={ref as never} method=\"post\" {...(action ? { action } : {})} className={cx.form} data-sf-account-form>\n <ErrorSummary items={v.summary} focusKey={v.summaryKey} {...(locale ? { locale } : {})} />\n {errorText && showSummary ? (\n <p role=\"alert\" className={cx.error} data-sf-account-error={data!.error!.code}>\n {errorText}\n </p>\n ) : null}\n {next ? <input type=\"hidden\" name=\"next\" value={next} /> : null}\n {body}\n <div className={cx.actions}>\n <button type=\"submit\" name=\"intent\" value={intent} disabled={pending} className={cx.submit} data-sf-account-submit>\n {m.submit[view]}\n </button>\n </div>\n <div className={cx.links} data-sf-account-links>\n {links}\n </div>\n </FormTag>\n </section>\n )\n}\n","/**\n * Post-purchase invitation to create an account, for the thank-you page (`/pagar/gracias`). Headless: no styles of its\n * own, `data-sf-ppa-*` hooks and `classNames` slots. It reuses the account action (`createAuthAction`, `./server`):\n * the form posts `register` (or `otp-request` in a store without passwords) with the buyer's email, so the verification,\n * the session cookie and the errors are exactly the ones of `<AccountAuth>`; nothing about addresses or phones is asked.\n *\n * Privacy: the email is the one of the receipt the SERVER read from the buyer's own session (the `email` prop); it is\n * sent as a hidden field and never editable here, so the form cannot be used to probe other addresses. With email\n * verification the action answers the same whether or not the address already has an account (no enumeration); the\n * guest orders of that address show up in the order history once the mailbox is verified (the store's addon scopes by\n * VERIFIED email). Without verification the account is created unverified and its history does not include guest\n * orders: the text then promises nothing about the order.\n *\n * Texts are Spanish by default, English with `locale=\"en\"`, any with `messages`.\n */\nimport { useRef, type ComponentType, type ReactNode } from 'react'\nimport type { CustomerCapabilities } from '@asteby/storefront'\nimport { CheckoutField, ErrorSummary, useFieldErrors, type CheckoutFieldClassNames } from '../checkout/fields.js'\nimport type { AccountFormProps } from './account-auth.js'\nimport type { AuthActionData, AuthErrorCode } from './types.js'\n\nexport type PostPurchaseAccountPromptMessages = {\n title: string\n /** Why, when the email is verified and the guest order will appear in the history. `{email}` is replaced. */\n benefit: string\n /** Why, when it will not (no email verification in the store). */\n benefitBasic: string\n accountFor: string\n password: string\n passwordHint: string\n code: string\n codeSentTo: string\n submit: string\n submitOtp: string\n submitCode: string\n skipNote: string\n loginLink: string\n errors: Record<AuthErrorCode, string>\n}\n\nconst ES: PostPurchaseAccountPromptMessages = {\n title: 'Crea tu cuenta para seguir tu pedido',\n benefit: 'Con {email} verás aquí tu pedido y su envío, y la próxima compra será más rápida. No te pedimos tu dirección ni tu teléfono otra vez.',\n benefitBasic: 'Guarda tus datos para que la próxima compra sea más rápida.',\n accountFor: 'Cuenta para {email}',\n password: 'Contraseña',\n passwordHint: 'Entre 10 y 128 caracteres.',\n code: 'Código',\n codeSentTo: 'Enviamos un código a {email}. Puede tardar un minuto.',\n submit: 'Crear cuenta',\n submitOtp: 'Enviarme un código',\n submitCode: 'Confirmar',\n skipNote: 'Si no quieres cuenta, no pasa nada: te avisaremos por correo de tu pedido.',\n loginLink: 'Ya tengo cuenta',\n errors: {\n invalid_credentials: 'El correo o la contraseña no coinciden.',\n invalid_code: 'El código no es válido o ya venció.',\n email_taken: 'Ya existe una cuenta con este correo. Entra para ver tu pedido.',\n rate_limited: 'Demasiados intentos. Espera unos minutos e inténtalo de nuevo.',\n validation: 'Revisa los datos e inténtalo de nuevo.',\n unsupported: 'Esta tienda no permite crear cuentas por ahora.',\n store_misconfigured: 'No pudimos crear tu cuenta por un problema de configuración de la tienda. Tu pedido sigue en pie.',\n unavailable: 'No pudimos completar la acción. Inténtalo de nuevo en un momento.',\n },\n}\n\nconst EN: PostPurchaseAccountPromptMessages = {\n title: 'Create your account to follow your order',\n benefit: 'With {email} you will see your order and its shipment here, and your next purchase will be faster. We will not ask for your address or phone again.',\n benefitBasic: 'Save your details so your next purchase is faster.',\n accountFor: 'Account for {email}',\n password: 'Password',\n passwordHint: 'Between 10 and 128 characters.',\n code: 'Code',\n codeSentTo: 'We sent a code to {email}. It can take a minute.',\n submit: 'Create account',\n submitOtp: 'Email me a code',\n submitCode: 'Confirm',\n skipNote: 'If you do not want an account, that is fine: we will email you about your order.',\n loginLink: 'I already have an account',\n errors: {\n invalid_credentials: 'The email and password do not match.',\n invalid_code: 'The code is not valid or has expired.',\n email_taken: 'An account with this email already exists. Sign in to see your order.',\n rate_limited: 'Too many attempts. Wait a few minutes and try again.',\n validation: 'Check the details and try again.',\n unsupported: 'This store does not allow creating accounts right now.',\n store_misconfigured: 'We could not create your account because of a store configuration problem. Your order is safe.',\n unavailable: 'We could not complete that. Try again in a moment.',\n },\n}\n\ntype DeepPartial<T> = { [K in keyof T]?: T[K] extends Record<string, string> ? Partial<T[K]> : T[K] }\n\n/** Messages for a locale (`es*` default, `en*`), with optional overrides (`errors` merges). */\nexport function postPurchaseAccountPromptMessages(locale?: string | null, overrides?: DeepPartial<PostPurchaseAccountPromptMessages> | null): PostPurchaseAccountPromptMessages {\n const base = (locale ?? 'es-MX').toLowerCase().startsWith('en') ? EN : ES\n if (!overrides) return base\n return { ...base, ...(overrides as Partial<PostPurchaseAccountPromptMessages>), errors: { ...base.errors, ...overrides.errors } }\n}\n\nexport type PostPurchaseAccountPromptClassNames = Partial<Record<'root' | 'title' | 'text' | 'email' | 'form' | 'notice' | 'error' | 'actions' | 'submit' | 'note' | 'link', string>> & {\n field?: CheckoutFieldClassNames\n}\n\nexport type PostPurchaseAccountPromptProps = {\n /** The buyer's email from the receipt of THIS session (read on the server). Without it nothing renders. */\n email?: string | null\n /** From `loadAuthCapabilities`. Without password nor email codes nothing renders. */\n capabilities: CustomerCapabilities\n /** What the account action returned (`useActionData()`); drives the code step and the errors. */\n data?: AuthActionData | null\n /** Where to go after the account is ready (sent as `next`; the server validates it). E.g. the order history. */\n next?: string | null\n /** A submit is in flight: disables the button. */\n pending?: boolean\n /** Form component, e.g. React Router's `Form`. Default: the HTML `<form>`. */\n form?: 'form' | ComponentType<AccountFormProps>\n /** `action` of the form: the route that mounts `createAuthAction`. Default: the current URL. */\n action?: string\n /** Heading level of the title (default 2). */\n headingLevel?: 2 | 3 | 4\n /** Where \"I already have an account\" goes (e.g. `/cuenta/entrar?next=...`). Omitted: no link. */\n loginHref?: string | null\n locale?: string\n messages?: DeepPartial<PostPurchaseAccountPromptMessages>\n classNames?: PostPurchaseAccountPromptClassNames\n /** Extra content under the form. */\n children?: ReactNode\n}\n\nconst validEmail = (v: string | null | undefined): v is string => typeof v === 'string' && v.length <= 254 && /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/.test(v.trim())\n\n/**\n * `<PostPurchaseAccountPrompt email={receipt.email} capabilities={caps} data={actionData} form={Form} next=\"/cuenta/pedidos\" />`\n */\nexport function PostPurchaseAccountPrompt({\n email,\n capabilities,\n data,\n next,\n pending = false,\n form: FormTag = 'form',\n action,\n headingLevel = 2,\n loginHref,\n locale,\n messages,\n classNames: cx = {},\n children,\n}: PostPurchaseAccountPromptProps) {\n const m = postPurchaseAccountPromptMessages(locale, messages)\n const ref = useRef<HTMLFormElement>(null)\n const passwordOn = capabilities.password\n const otpOn = capabilities.otp_channels.includes('email')\n const errorText = data?.error ? m.errors[data.error.code] : null\n const v = useFieldErrors(ref, { ...(locale ? { locale } : {}), serverFields: data?.error?.field === 'code' || data?.error?.field === 'password' ? [data.error.field] : null, serverMessages: data?.error?.field && errorText ? { [data.error.field]: errorText } : null })\n if (!validEmail(email) || (!passwordOn && !otpOn)) return null\n\n const address = email.trim().toLowerCase()\n const step = data?.step === 'verify' || data?.step === 'otp' ? data.step : null\n const view = step ?? (passwordOn ? 'register' : 'otp-request')\n const intent = step === 'verify' ? 'verify' : step === 'otp' ? 'otp-login' : passwordOn ? 'register' : 'otp-request'\n const label = view === 'verify' || view === 'otp' ? m.submitCode : view === 'otp-request' ? m.submitOtp : m.submit\n const Heading = `h${headingLevel}` as 'h2'\n const fieldProps = { classNames: cx.field, ...(locale ? { locale } : {}) }\n // Only the errors with no field of their own go in the alert; the others are inline.\n const showAlert = errorText && !(data?.error?.field === 'code' || data?.error?.field === 'password')\n // Only a verified mailbox earns the guest order in the history (storefront_customers scopes by verified email).\n const benefit = (capabilities.email_verification ? m.benefit : m.benefitBasic).replace('{email}', address)\n\n return (\n <section className={cx.root} data-sf-ppa data-sf-ppa-view={view} aria-labelledby=\"sf-ppa-title\">\n <Heading id=\"sf-ppa-title\" className={cx.title}>\n {m.title}\n </Heading>\n <p className={cx.text} data-sf-ppa-benefit>\n {benefit}\n </p>\n <FormTag ref={ref as never} method=\"post\" {...(action ? { action } : {})} className={cx.form} data-sf-ppa-form>\n <ErrorSummary items={v.summary} focusKey={v.summaryKey} {...(locale ? { locale } : {})} />\n {showAlert ? (\n <p role=\"alert\" className={cx.error} data-sf-ppa-error={data!.error!.code}>\n {errorText}\n </p>\n ) : null}\n <input type=\"hidden\" name=\"email\" value={address} />\n {next ? <input type=\"hidden\" name=\"next\" value={next} /> : null}\n <p className={cx.email} data-sf-ppa-email>\n {m.accountFor.replace('{email}', address)}\n </p>\n {step ? (\n <>\n <p className={cx.notice} role=\"status\" data-sf-ppa-notice>\n {m.codeSentTo.replace('{email}', address)}\n </p>\n <CheckoutField {...fieldProps} name=\"code\" label={m.code} autoComplete=\"one-time-code\" inputMode=\"numeric\" pattern=\"[0-9]*\" error={v.errors.code ?? null} />\n </>\n ) : passwordOn ? (\n <CheckoutField {...fieldProps} name=\"password\" type=\"password\" label={m.password} autoComplete=\"new-password\" minLength={10} maxLength={128} hint={m.passwordHint} error={v.errors.password ?? null} />\n ) : null}\n <div className={cx.actions}>\n <button type=\"submit\" name=\"intent\" value={intent} disabled={pending} className={cx.submit} data-sf-ppa-submit>\n {label}\n </button>\n </div>\n </FormTag>\n <p className={cx.note} data-sf-ppa-note>\n {m.skipNote}\n {loginHref ? (\n <>\n {' '}\n <a href={loginHref} className={cx.link} data-sf-ppa-login>\n {m.loginLink}\n </a>\n </>\n ) : null}\n </p>\n {children}\n </section>\n )\n}\n","/** Texts of the fiscal components. Spanish (es-MX) by default, English with `en*`, any locale with `messages`. */\nimport type { FiscalReadError } from './types.js'\n\nexport type DeepPartial<T> = { [K in keyof T]?: T[K] extends Record<string, unknown> ? DeepPartial<T[K]> : T[K] }\n\nexport type FiscalMessages = {\n fields: {\n legend: string\n taxId: string\n taxIdHint: string\n legalName: string\n /** Used when the region publishes no help for the legal name. */\n legalNameHint: string\n postalCode: string\n postalCodeHint: string\n regime: string\n regimeHint: string\n regimeChoose: string\n regimeFromDocument: string\n use: string\n useHint: string\n useChoose: string\n /** `{document}` = the document's name. */\n fromDocument: string\n /** Mark on an invoice use the region suggested (an editable preselection). */\n suggested: string\n errors: {\n required: string\n taxIdFormat: string\n postalFormat: string\n unknown: string\n personType: string\n useNotAllowed: string\n }\n }\n reader: {\n /** `{document}`. */\n title: string\n dropHint: string\n dropActive: string\n choose: string\n obtain: string\n privacyBrowser: string\n privacyServer: string\n uploadServer: string\n manual: string\n reading: string\n cancel: string\n done: string\n reviewTitle: string\n reviewHint: string\n confirm: string\n changeFile: string\n saveToAccount: string\n saveConsent: string\n warnings: { qrMismatch: string; stale: string; regimeMissing: string; fieldsMissing: string; qrPartial: string }\n /** Reading a photo or the camera (the region's `image_mode`). `{document}` where noted. */\n scan: {\n title: string\n photo: string\n photoHint: string\n camera: string\n cameraTitle: string\n cameraGuide: string\n cameraStarting: string\n cameraRead: string\n cameraDenied: string\n cameraUnavailable: string\n closeCamera: string\n choosePhoto: string\n /** Button that opens the sheet; `{document}` is the document's label. */\n open: string\n manual: string\n close: string\n }\n errors: Record<FiscalReadError, string>\n summaryTitleOne: string\n summaryTitleMany: string\n }\n toggle: {\n label: string\n payDefault: string\n payAndInvoice: string\n profileTitle: string\n change: string\n useOther: string\n useSaved: string\n manualTitle: string\n unavailable: string\n privacy: string\n fieldsOf: { taxId: string; legalName: string; postalCode: string; regime: string; use: string }\n }\n status: {\n title: string\n request: string\n requestHelp: string\n awaitingTitle: string\n awaitingBody: string\n processingTitle: string\n processingBody: string\n processingSlow: string\n refresh: string\n issuedTitle: string\n issuedBody: string\n folio: string\n pdf: string\n xml: string\n needsDataTitle: string\n needsDataBody: string\n correct: string\n reviewTitle: string\n reviewBody: string\n contact: string\n contactBy: string\n windowTitle: string\n windowBody: string\n unavailableTitle: string\n unavailableBody: string\n /** The server says the store has no invoicing active (`capabilities.invoicing.available: false`). */\n notEnabledTitle: string\n notEnabledBody: string\n /** The server does not say (older server) or could not be asked: never claims the store does not invoice. */\n unknownTitle: string\n unknownBody: string\n unreachableBody: string\n /** Invoicing in test mode (sandbox): invoices have no fiscal validity. */\n sandbox: string\n /** `{days}`: how long after the purchase an invoice can be requested. */\n windowNote: string\n cancelledTitle: string\n cancelledBody: string\n /** `reason_code` -> cause for the buyer. `default` when unknown. */\n reasons: Record<string, string>\n }\n server: { errors: Record<string, string> }\n}\n\nconst ES: FiscalMessages = {\n fields: {\n legend: 'Datos fiscales',\n taxId: 'RFC',\n taxIdHint: 'Se escribe en mayúsculas y sin espacios.',\n legalName: 'Nombre o razón social',\n legalNameHint: 'Escríbelo tal como aparece en tu registro fiscal.',\n postalCode: 'Código postal fiscal',\n postalCodeHint: 'El de tu domicilio fiscal, que puede ser distinto al de entrega.',\n regime: 'Régimen fiscal',\n regimeHint: 'Solo mostramos los que aplican a tu tipo de persona.',\n regimeChoose: 'Elige tu régimen',\n regimeFromDocument: 'Tu documento menciona más de un régimen. Elige el que usarás para esta factura.',\n use: 'Uso de la factura',\n useHint: 'Solo mostramos los usos que admite tu régimen.',\n useChoose: 'Elige el uso',\n fromDocument: 'De tu {document}',\n suggested: 'Sugerido',\n errors: {\n required: 'Completa este campo.',\n taxIdFormat: 'Revisa el formato: {kind} no válido.',\n postalFormat: 'Escribe un código postal válido, por ejemplo {example}.',\n unknown: 'Elige una opción de la lista.',\n personType: 'Este régimen no corresponde a tu tipo de persona.',\n useNotAllowed: 'Este uso no está disponible con el régimen elegido.',\n },\n },\n reader: {\n title: 'Sube tu {document}',\n dropHint: 'Arrastra el PDF aquí o toca para elegirlo',\n dropActive: 'Suelta el archivo para leerlo',\n choose: 'Elegir archivo',\n obtain: 'Descárgala aquí',\n privacyBrowser: 'La leemos en tu dispositivo. No guardamos el archivo, solo los datos que confirmes.',\n privacyServer: 'La procesamos y la descartamos al terminar. Solo guardamos los datos que confirmes.',\n uploadServer: 'Leer mi archivo',\n manual: 'Captura tus datos a mano',\n reading: 'Leyendo tu {document}…',\n cancel: 'Cancelar',\n done: 'Listo. Revisa tus datos.',\n reviewTitle: 'Revisa tus datos',\n reviewHint: 'Puedes corregir cualquier campo antes de continuar.',\n confirm: 'Usar estos datos',\n changeFile: 'Subir otro archivo',\n saveToAccount: 'Guardar en mi cuenta para la próxima',\n saveConsent: 'Guardaremos estos datos en tu cuenta para facturar más rápido. Puedes borrarlos cuando quieras.',\n warnings: {\n qrMismatch: 'El código QR de tu documento no coincide con los datos leídos. Revisa con calma tu RFC y tu nombre.',\n stale: 'Tu documento tiene {days} días de emitido. Si algo cambió en tu registro, descarga uno nuevo.',\n regimeMissing: 'No pudimos detectar tu régimen. Elígelo de la lista.',\n fieldsMissing: 'No encontramos algunos datos en el documento. Complétalos para continuar.',\n qrPartial: 'Del código QR solo leímos tu identificador fiscal. Completa los demás datos o sube el PDF.',\n },\n scan: {\n title: 'Escanea tu {document}',\n photo: 'Tomar foto del QR',\n photoHint: 'Enfoca el código QR de tu documento.',\n camera: 'Escanear con la cámara',\n cameraTitle: 'Apunta al código QR',\n cameraGuide: 'Centra el código QR dentro del marco.',\n cameraStarting: 'Abriendo la cámara…',\n cameraRead: 'Código leído',\n cameraDenied: 'No pudimos usar la cámara. Elige una foto o sube el PDF.',\n cameraUnavailable: 'Este dispositivo no permite usar la cámara aquí. Elige una foto o sube el PDF.',\n closeCamera: 'Cerrar la cámara',\n choosePhoto: 'Elegir una foto',\n open: 'Escanear {document}',\n manual: 'Capturar a mano',\n close: 'Cerrar',\n },\n errors: {\n not_pdf: 'Ese archivo no es un PDF. Sube el PDF que descargaste o captura tus datos a mano.',\n too_large: 'El archivo pesa más de {size}. Sube el PDF original o captura tus datos a mano.',\n no_text: 'Este PDF parece una imagen escaneada y no podemos leerlo. Captura tus datos a mano.',\n password: 'Este PDF tiene contraseña y no podemos abrirlo. Descárgalo de nuevo sin contraseña o captura tus datos a mano.',\n unreadable: 'No pudimos leer este archivo. Inténtalo con otro o captura tus datos a mano.',\n no_qr: 'No encontramos el código QR en la foto. Acércate, evita reflejos o sube el PDF.',\n not_image: 'Ese archivo no es una foto que podamos leer. Toma otra foto o sube el PDF.',\n },\n summaryTitleOne: 'Revisa 1 campo para continuar',\n summaryTitleMany: 'Revisa {n} campos para continuar',\n },\n toggle: {\n label: 'Necesito factura (CFDI)',\n payDefault: 'Pagar',\n payAndInvoice: 'Pagar y facturar',\n profileTitle: 'Facturaremos con estos datos',\n change: 'Cambiar',\n useOther: 'Usar otros datos',\n useSaved: 'Usar mis datos guardados',\n manualTitle: 'Datos de facturación',\n unavailable: 'Esta tienda todavía no factura en línea.',\n privacy: 'Usamos estos datos solo para emitir tu factura.',\n fieldsOf: { taxId: 'RFC', legalName: 'Nombre o razón social', postalCode: 'Código postal fiscal', regime: 'Régimen', use: 'Uso' },\n },\n status: {\n title: 'Factura',\n request: 'Solicitar factura',\n requestHelp: '¿Necesitas factura de este pedido?',\n awaitingTitle: 'Esperando tu pago',\n awaitingBody: 'Cuando se acredite tu pago emitimos la factura. Con OXXO o transferencia puede tardar un poco.',\n processingTitle: 'Estamos generando tu factura',\n processingBody: 'Suele tardar menos de un minuto. Esta página se actualiza sola.',\n processingSlow: 'Sigue en proceso. Puedes cerrar esta página: tu factura aparecerá aquí cuando esté lista.',\n refresh: 'Actualizar',\n issuedTitle: 'Tu factura está lista',\n issuedBody: 'Descárgala cuando la necesites. Los enlaces vencen en 15 minutos; vuelve a abrir esta página para generar nuevos.',\n folio: 'Folio fiscal',\n pdf: 'Descargar PDF',\n xml: 'Descargar XML',\n needsDataTitle: 'Faltan datos para tu factura',\n needsDataBody: 'No pudimos emitirla con los datos que nos diste.',\n correct: 'Corregir y reintentar',\n reviewTitle: 'La tienda está revisando tu factura',\n reviewBody: 'Necesita una revisión del negocio. No tienes que hacer nada más; si tarda, escríbenos.',\n contact: 'Contactar a la tienda',\n contactBy: 'Escríbenos a {contact} con tu número de pedido.',\n windowTitle: 'Ya pasó el plazo para facturar',\n windowBody: 'Este pedido está fuera del plazo para pedir factura. Si necesitas ayuda, contacta a la tienda.',\n unavailableTitle: 'Factura no disponible',\n unavailableBody: 'Este pedido no se puede facturar por ahora. Si la necesitas, contacta a la tienda.',\n notEnabledTitle: 'Facturación aún no activa',\n notEnabledBody: 'La tienda todavía no tiene la facturación en línea activa. Si necesitas factura, contáctala.',\n unknownTitle: 'Factura',\n unknownBody: 'Por ahora no podemos mostrar el estado de la facturación de este pedido. Si necesitas factura, contacta a la tienda.',\n unreachableBody: 'No pudimos verificar la facturación en este momento. Inténtalo de nuevo en unos minutos o contacta a la tienda.',\n sandbox: 'Facturación en pruebas (sandbox): las facturas no tienen validez fiscal.',\n windowNote: 'Puedes pedirla hasta {days} días después de la compra.',\n cancelledTitle: 'Factura cancelada',\n cancelledBody: 'Esta factura fue cancelada. Si necesitas una nueva, contacta a la tienda.',\n reasons: {\n 'invoice.tax_id': 'El RFC no es válido.',\n 'invoice.legal_name': 'El nombre o la razón social no coincide con tu registro.',\n 'invoice.tax_regime': 'El régimen fiscal no es válido para tus datos.',\n 'invoice.postal_code': 'El código postal fiscal no es válido.',\n 'invoice.use': 'El uso de la factura no es válido con tu régimen.',\n default: 'Revisa tus datos fiscales y vuelve a intentarlo.',\n },\n },\n server: {\n errors: {\n validation: 'Revisa este campo.',\n required: 'Completa este campo.',\n invalid: 'El valor no es válido.',\n },\n },\n}\n\nconst EN: FiscalMessages = {\n fields: {\n legend: 'Tax details',\n taxId: 'Tax ID',\n taxIdHint: 'Uppercase, without spaces.',\n legalName: 'Legal name',\n legalNameHint: 'Write it as it appears in your tax registration.',\n postalCode: 'Tax postal code',\n postalCodeHint: 'The one of your tax address, which can differ from the delivery address.',\n regime: 'Tax regime',\n regimeHint: 'We only list the ones that apply to your kind of taxpayer.',\n regimeChoose: 'Choose your regime',\n regimeFromDocument: 'Your document lists more than one regime. Choose the one for this invoice.',\n use: 'Invoice use',\n useHint: 'We only list the uses your regime admits.',\n useChoose: 'Choose the use',\n fromDocument: 'From your {document}',\n suggested: 'Suggested',\n errors: {\n required: 'Fill in this field.',\n taxIdFormat: 'Check the format: not a valid {kind}.',\n postalFormat: 'Enter a valid postal code, like {example}.',\n unknown: 'Choose an option from the list.',\n personType: 'This regime does not match your kind of taxpayer.',\n useNotAllowed: 'This use is not available with the chosen regime.',\n },\n },\n reader: {\n title: 'Upload your {document}',\n dropHint: 'Drag the PDF here or tap to choose it',\n dropActive: 'Drop the file to read it',\n choose: 'Choose file',\n obtain: 'Get it here',\n privacyBrowser: 'We read it on your device. We do not keep the file, only the details you confirm.',\n privacyServer: 'We process it and discard it when done. We only keep the details you confirm.',\n uploadServer: 'Read my file',\n manual: 'Enter your details by hand',\n reading: 'Reading your {document}…',\n cancel: 'Cancel',\n done: 'Done. Review your details.',\n reviewTitle: 'Review your details',\n reviewHint: 'You can fix any field before continuing.',\n confirm: 'Use these details',\n changeFile: 'Upload another file',\n saveToAccount: 'Save to my account for next time',\n saveConsent: 'We will save these details to your account to invoice faster. You can delete them any time.',\n warnings: {\n qrMismatch: 'The QR code of your document does not match what we read. Check your tax ID and name carefully.',\n stale: 'Your document was issued {days} days ago. If something changed in your registration, download a new one.',\n regimeMissing: 'We could not detect your regime. Choose it from the list.',\n fieldsMissing: 'We did not find some details in the document. Fill them in to continue.',\n qrPartial: 'The QR code only gave us your tax ID. Fill in the rest or upload the PDF.',\n },\n scan: {\n title: 'Scan your {document}',\n photo: 'Take a photo of the QR',\n photoHint: 'Point at the QR code of your document.',\n camera: 'Scan with the camera',\n cameraTitle: 'Point at the QR code',\n cameraGuide: 'Center the QR code inside the frame.',\n cameraStarting: 'Opening the camera…',\n cameraRead: 'Code read',\n cameraDenied: 'We could not use the camera. Choose a photo or upload the PDF.',\n cameraUnavailable: 'This device does not allow the camera here. Choose a photo or upload the PDF.',\n closeCamera: 'Close the camera',\n choosePhoto: 'Choose a photo',\n open: 'Scan {document}',\n manual: 'Enter by hand',\n close: 'Close',\n },\n errors: {\n not_pdf: 'That file is not a PDF. Upload the PDF you downloaded or enter your details by hand.',\n too_large: 'The file is larger than {size}. Upload the original PDF or enter your details by hand.',\n no_text: 'This PDF looks like a scanned image and we cannot read it. Enter your details by hand.',\n password: 'This PDF is password protected and we cannot open it. Download it again without a password or enter your details by hand.',\n unreadable: 'We could not read this file. Try another one or enter your details by hand.',\n no_qr: 'We could not find the QR code in the photo. Move closer, avoid glare or upload the PDF.',\n not_image: 'That file is not a photo we can read. Take another photo or upload the PDF.',\n },\n summaryTitleOne: 'Check 1 field to continue',\n summaryTitleMany: 'Check {n} fields to continue',\n },\n toggle: {\n label: 'I need an invoice',\n payDefault: 'Pay',\n payAndInvoice: 'Pay and invoice',\n profileTitle: 'We will invoice with these details',\n change: 'Change',\n useOther: 'Use other details',\n useSaved: 'Use my saved details',\n manualTitle: 'Invoice details',\n unavailable: 'This store does not invoice online yet.',\n privacy: 'We only use these details to issue your invoice.',\n fieldsOf: { taxId: 'Tax ID', legalName: 'Legal name', postalCode: 'Tax postal code', regime: 'Regime', use: 'Use' },\n },\n status: {\n title: 'Invoice',\n request: 'Request invoice',\n requestHelp: 'Do you need an invoice for this order?',\n awaitingTitle: 'Waiting for your payment',\n awaitingBody: 'We issue the invoice once your payment clears. Cash and bank transfers can take a while.',\n processingTitle: 'We are generating your invoice',\n processingBody: 'It usually takes under a minute. This page updates by itself.',\n processingSlow: 'Still in progress. You can close this page: your invoice will show up here when it is ready.',\n refresh: 'Refresh',\n issuedTitle: 'Your invoice is ready',\n issuedBody: 'Download it whenever you need. The links expire in 15 minutes; reopen this page for new ones.',\n folio: 'Tax folio',\n pdf: 'Download PDF',\n xml: 'Download XML',\n needsDataTitle: 'Your invoice needs more details',\n needsDataBody: 'We could not issue it with the details you gave us.',\n correct: 'Fix and retry',\n reviewTitle: 'The store is reviewing your invoice',\n reviewBody: 'It needs a review by the business. You do not need to do anything else; if it takes long, write to us.',\n contact: 'Contact the store',\n contactBy: 'Write to {contact} with your order number.',\n windowTitle: 'The invoicing period has ended',\n windowBody: 'This order is outside the period to request an invoice. If you need help, contact the store.',\n unavailableTitle: 'Invoice not available',\n unavailableBody: 'This order cannot be invoiced right now. If you need one, contact the store.',\n notEnabledTitle: 'Invoicing not active yet',\n notEnabledBody: 'The store has not turned on online invoicing yet. If you need an invoice, contact them.',\n unknownTitle: 'Invoice',\n unknownBody: 'We cannot show the invoicing status of this order right now. If you need an invoice, contact the store.',\n unreachableBody: 'We could not check invoicing right now. Try again in a few minutes or contact the store.',\n sandbox: 'Invoicing in test mode (sandbox): invoices have no fiscal validity.',\n windowNote: 'You can request it up to {days} days after the purchase.',\n cancelledTitle: 'Invoice cancelled',\n cancelledBody: 'This invoice was cancelled. If you need a new one, contact the store.',\n reasons: {\n 'invoice.tax_id': 'The tax ID is not valid.',\n 'invoice.legal_name': 'The legal name does not match your registration.',\n 'invoice.tax_regime': 'The tax regime is not valid for your details.',\n 'invoice.postal_code': 'The tax postal code is not valid.',\n 'invoice.use': 'The invoice use is not valid with your regime.',\n default: 'Check your tax details and try again.',\n },\n },\n server: {\n errors: {\n validation: 'Check this field.',\n required: 'Fill in this field.',\n invalid: 'The value is not valid.',\n },\n },\n}\n\nconst merge = <T extends Record<string, unknown>>(base: T, over: DeepPartial<T> | undefined): T => {\n if (!over) return base\n const out: Record<string, unknown> = { ...base }\n for (const [k, v] of Object.entries(over)) {\n if (v === undefined) continue\n const b = base[k]\n out[k] = typeof v === 'object' && v !== null && !Array.isArray(v) && typeof b === 'object' && b !== null ? merge(b as Record<string, unknown>, v as DeepPartial<Record<string, unknown>>) : v\n }\n return out as T\n}\n\n/** Messages for a locale (`es*` default, `en*`), with optional overrides (merged level by level). */\nexport function fiscalMessages(locale?: string | null, overrides?: DeepPartial<FiscalMessages> | null): FiscalMessages {\n const base = (locale ?? 'es-MX').toLowerCase().startsWith('en') ? EN : ES\n return overrides ? merge(base, overrides) : base\n}\n\n/** `{name}` placeholders. */\nexport function fill(template: string, vars: Record<string, string | number>): string {\n return template.replace(/\\{(\\w+)\\}/g, (m, k: string) => (k in vars ? String(vars[k]) : m))\n}\n","/**\n * Texts of the order screens (`OrderList`, `OrderProgress`, `NextActionBar`, `ShipmentCard`, `InvoiceList`,\n * `PendingPaymentCard`, `RefundList`). Spanish (es-MX) by default, English with `en*`, anything with `messages`.\n * Server enums are open: every group has a `*.unknown` text so a value this SDK has never seen reads as plain words,\n * never as a raw code.\n */\nimport { fill } from '../fiscal/messages.js'\n\nexport { fill }\n\nconst ES = {\n // order list\n 'order.number': 'Pedido {number}',\n 'order.placed': 'Realizado el {date}',\n 'order.total': 'Total',\n 'order.view': 'Ver pedido',\n 'order.items.one': '{count} artículo',\n 'order.items.other': '{count} artículos',\n 'order.lines': 'Artículos del pedido',\n 'order.line.quantity': 'Cantidad {n}',\n 'order.line.each': '{price} c/u',\n 'order.line.unavailable': 'Producto no disponible',\n 'order.productsMore': 'y {n} más',\n 'order.stepOf': 'Paso {n} de {total}: {step}',\n 'order.listLabel': 'Tus pedidos',\n 'order.loading': 'Cargando tus pedidos',\n 'order.loadMore': 'Ver más pedidos',\n 'order.loadingMore': 'Cargando…',\n 'order.error': 'No pudimos cargar tus pedidos. Tus compras están a salvo.',\n 'order.retry': 'Reintentar',\n 'order.emptyTitle': 'Aún no tienes pedidos',\n 'order.emptyBody': 'Cuando compres, aquí verás el estado y el envío de cada pedido.',\n 'order.emptyGuest': '¿Compraste como invitado? Verifica tu correo para ver aquí tus pedidos.',\n // stage (order status)\n 'stage.pending_payment': 'Esperando pago',\n 'stage.paid': 'Pagado',\n 'stage.preparing': 'En preparación',\n 'stage.ready_for_pickup': 'Listo para recoger',\n 'stage.shipped': 'Enviado',\n 'stage.in_transit': 'En camino',\n 'stage.out_for_delivery': 'En reparto',\n 'stage.delivered': 'Entregado',\n 'stage.cancelled': 'Cancelado',\n 'stage.refunded': 'Reembolsado',\n 'stage.unknown': 'En proceso',\n // progress\n 'progress.label': 'Progreso del pedido',\n 'step.paid': 'Pagado',\n 'step.preparing': 'En preparación',\n 'step.shipped': 'Enviado',\n 'step.in_transit': 'En camino',\n 'step.ready_for_pickup': 'Listo para recoger',\n 'step.delivered': 'Entregado',\n 'step.unknown': 'Siguiente paso',\n 'stepState.done': 'completado',\n 'stepState.current': 'paso actual',\n 'stepState.pending': 'pendiente',\n 'stepState.problem': 'con incidencia',\n 'problem.delivery_exception': 'Hubo un problema con la entrega. Contacta a la tienda si no se resuelve.',\n 'problem.returned': 'El paquete regresó a la tienda. Contáctanos para coordinar un nuevo envío.',\n 'problem.lost': 'No encontramos tu paquete. Contáctanos y lo resolvemos.',\n 'problem.payment_failed': 'El pago no se completó. Puedes intentarlo de nuevo.',\n 'problem.unknown': 'Tu pedido tiene una incidencia. Contacta a la tienda.',\n 'progress.cancelled': 'Este pedido fue cancelado.',\n 'progress.refunded': 'Este pedido fue reembolsado.',\n // next action\n 'action.pay': 'Pagar ahora',\n 'action.track': 'Rastrear envío',\n 'action.pickup': 'Recoger en sucursal',\n 'action.download_invoice': 'Descargar factura',\n 'action.request_invoice': 'Solicitar factura',\n 'action.correct_invoice_data': 'Corregir datos de facturación',\n 'action.contact_store': 'Contactar a la tienda',\n 'action.unknown': 'Ver detalle',\n 'action.newTab': '(se abre en una pestaña nueva)',\n 'action.label': 'Siguiente paso del pedido',\n // shipment\n 'shipment.title': 'Envío',\n 'shipment.return': 'Devolución',\n 'shipment.carrier': 'Paquetería',\n 'shipment.service': 'Servicio',\n 'shipment.number': 'Número de guía',\n 'shipment.copy': 'Copiar',\n 'shipment.copied': 'Copiado',\n 'shipment.copyFailed': 'No pudimos copiar; selecciona el texto.',\n 'shipment.track': 'Rastrear con {carrier}',\n 'shipment.trackGeneric': 'Rastrear envío',\n 'shipment.promised': 'Llega a más tardar el {date}',\n 'shipment.delivered': 'Entregado el {date}',\n 'shipment.shipped': 'Enviado el {date}',\n 'shipment.events': 'Movimientos',\n 'shipment.noEvents': 'La paquetería aún no registra movimientos; suele tardar 24 horas.',\n 'shipment.showAll': 'Ver todo ({count})',\n 'shipment.showLess': 'Ver menos',\n 'shipment.returnLabel': 'Guía de devolución',\n 'shipment.test': 'De prueba',\n 'shipment.testNote': 'Envío de prueba: no es un envío real.',\n 'shipment.preparing': 'Preparando tu envío',\n 'shipment.status.pending': 'Preparando envío',\n 'shipment.status.label_created': 'Guía generada',\n 'shipment.status.in_transit': 'En camino',\n 'shipment.status.out_for_delivery': 'En reparto',\n 'shipment.status.delivered': 'Entregado',\n 'shipment.status.exception': 'Incidencia en la entrega',\n 'shipment.status.returned': 'Devuelto a la tienda',\n 'shipment.status.lost': 'Extraviado',\n 'shipment.status.cancelled': 'Cancelado',\n 'shipment.status.unknown': 'En proceso',\n 'shipment.eventFrom': '{location}',\n // invoices\n 'invoice.title': 'Facturas',\n 'invoice.invoice': 'Factura',\n 'invoice.creditNote': 'Nota de crédito',\n 'invoice.creditNoteOf': 'Corrige la factura {folio}',\n 'invoice.folio': 'Folio fiscal',\n 'invoice.series': 'Serie y folio',\n 'invoice.issued': 'Emitida el {date}',\n 'invoice.total': 'Total',\n 'invoice.pdf': 'Descargar PDF',\n 'invoice.xml': 'Descargar XML',\n 'invoice.downloadOf': '{action}, {kind} {name}',\n 'invoice.none': 'Aún no hay facturas de este pedido.',\n 'invoice.test': 'Factura de prueba, sin validez',\n 'invoice.status.issued': 'Emitida',\n 'invoice.status.pending': 'En proceso',\n 'invoice.status.cancelled': 'Cancelada',\n 'invoice.status.error': 'No se pudo emitir',\n 'invoice.status.unknown': 'En proceso',\n 'invoice.statusNote.pending': 'La estamos generando; te avisaremos cuando esté lista.',\n 'invoice.statusNote.error': 'Contacta a la tienda para resolverlo.',\n 'invoice.statusNote.cancelled': 'Esta factura fue cancelada y ya no tiene validez.',\n // pending payment\n 'pending.title': 'Pendientes de pago',\n 'pending.intro': 'Tu pedido se genera en cuanto confirmamos el pago. Paga con la ficha antes de que venza.',\n 'pending.waiting': 'Esperando pago',\n 'pending.expired': 'Vencida',\n 'pending.reference': 'Referencia',\n 'pending.clabe': 'CLABE',\n 'pending.beneficiary': 'Beneficiario',\n 'pending.bank': 'Banco',\n 'pending.expires': 'Vence el {date}',\n 'pending.expiredOn': 'Venció el {date}',\n 'pending.total': 'Total',\n 'pending.copyReference': 'Copiar referencia',\n 'pending.copyClabe': 'Copiar CLABE',\n 'pending.copied': 'Copiada',\n 'pending.copyFailed': 'No pudimos copiar; selecciona el texto.',\n 'pending.print': 'Ver e imprimir ficha',\n 'pending.download': 'Descargar PDF',\n 'pending.expiredNote': 'Esta ficha ya no es válida. Haz tu pedido de nuevo.',\n 'pending.barcode': 'Código de barras {code}',\n 'pending.code': 'Código',\n 'pending.ticket': 'Ver comprobante del proveedor',\n 'pending.method.oxxo': 'OXXO',\n 'pending.method.spei': 'Transferencia SPEI',\n 'pending.method.bank_transfer': 'Transferencia bancaria',\n 'pending.method.bank_deposit': 'Depósito bancario',\n 'pending.method.cash': 'Pago en efectivo',\n 'pending.method.unknown': 'Pago en efectivo',\n // refunds & payments\n 'refund.title': 'Reembolsos',\n 'refund.status.requested': 'Solicitado',\n 'refund.status.processing': 'En proceso',\n 'refund.status.completed': 'Completado',\n 'refund.status.failed': 'No se pudo completar',\n 'refund.status.unknown': 'En proceso',\n 'refund.requested': 'Solicitado el {date}',\n 'refund.completed': 'Completado el {date}',\n 'refund.none': 'Este pedido no tiene reembolsos.',\n 'payment.title': 'Pagos',\n 'payment.status.paid': 'Pagado',\n 'payment.status.pending': 'Pendiente',\n 'payment.status.failed': 'Fallido',\n 'payment.status.refunded': 'Reembolsado',\n 'payment.status.partially_refunded': 'Reembolsado parcialmente',\n 'payment.status.unknown': 'En proceso',\n 'payment.paidOn': 'Pagado el {date}',\n 'payment.method.card': 'Tarjeta',\n 'payment.method.credit_card': 'Tarjeta de crédito',\n 'payment.method.debit_card': 'Tarjeta de débito',\n 'payment.method.cash_voucher': 'Efectivo con ficha (OXXO, tienda de conveniencia)',\n 'payment.method.oxxo': 'Efectivo en OXXO',\n 'payment.method.spei': 'Transferencia SPEI',\n 'payment.method.transfer': 'Transferencia bancaria',\n 'payment.method.bank_deposit': 'Depósito bancario',\n 'payment.method.wallet': 'Billetera digital',\n 'payment.method.cash': 'Efectivo',\n 'payment.method.other': 'Otro medio de pago',\n 'payment.method.unknown': 'Medio de pago',\n // sections\n 'section.error': 'No pudimos cargar esta sección.',\n 'section.retry': 'Reintentar',\n 'section.loading': 'Cargando',\n} as const\n\nexport type AccountMessageKey = keyof typeof ES\nexport type AccountMessages = Record<AccountMessageKey, string>\n\nconst EN: AccountMessages = {\n 'order.number': 'Order {number}',\n 'order.placed': 'Placed on {date}',\n 'order.total': 'Total',\n 'order.view': 'View order',\n 'order.items.one': '{count} item',\n 'order.items.other': '{count} items',\n 'order.lines': 'Items in this order',\n 'order.line.quantity': 'Quantity {n}',\n 'order.line.each': '{price} each',\n 'order.line.unavailable': 'Product unavailable',\n 'order.productsMore': 'and {n} more',\n 'order.stepOf': 'Step {n} of {total}: {step}',\n 'order.listLabel': 'Your orders',\n 'order.loading': 'Loading your orders',\n 'order.loadMore': 'Show more orders',\n 'order.loadingMore': 'Loading…',\n 'order.error': 'We could not load your orders. Your purchases are safe.',\n 'order.retry': 'Try again',\n 'order.emptyTitle': 'You have no orders yet',\n 'order.emptyBody': 'When you buy, you will see the status and shipment of each order here.',\n 'order.emptyGuest': 'Did you buy as a guest? Verify your email to see your orders here.',\n 'stage.pending_payment': 'Waiting for payment',\n 'stage.paid': 'Paid',\n 'stage.preparing': 'Being prepared',\n 'stage.ready_for_pickup': 'Ready for pickup',\n 'stage.shipped': 'Shipped',\n 'stage.in_transit': 'On its way',\n 'stage.out_for_delivery': 'Out for delivery',\n 'stage.delivered': 'Delivered',\n 'stage.cancelled': 'Cancelled',\n 'stage.refunded': 'Refunded',\n 'stage.unknown': 'In progress',\n 'progress.label': 'Order progress',\n 'step.paid': 'Paid',\n 'step.preparing': 'Being prepared',\n 'step.shipped': 'Shipped',\n 'step.in_transit': 'On its way',\n 'step.ready_for_pickup': 'Ready for pickup',\n 'step.delivered': 'Delivered',\n 'step.unknown': 'Next step',\n 'stepState.done': 'completed',\n 'stepState.current': 'current step',\n 'stepState.pending': 'pending',\n 'stepState.problem': 'has a problem',\n 'problem.delivery_exception': 'There was a problem with the delivery. Contact the store if it is not resolved.',\n 'problem.returned': 'The package went back to the store. Contact us to arrange a new shipment.',\n 'problem.lost': 'We could not find your package. Contact us and we will sort it out.',\n 'problem.payment_failed': 'The payment did not go through. You can try again.',\n 'problem.unknown': 'Your order has a problem. Contact the store.',\n 'progress.cancelled': 'This order was cancelled.',\n 'progress.refunded': 'This order was refunded.',\n 'action.pay': 'Pay now',\n 'action.track': 'Track shipment',\n 'action.pickup': 'Pick up in store',\n 'action.download_invoice': 'Download invoice',\n 'action.request_invoice': 'Request invoice',\n 'action.correct_invoice_data': 'Fix billing details',\n 'action.contact_store': 'Contact the store',\n 'action.unknown': 'View details',\n 'action.newTab': '(opens in a new tab)',\n 'action.label': 'Next step of the order',\n 'shipment.title': 'Shipment',\n 'shipment.return': 'Return',\n 'shipment.carrier': 'Carrier',\n 'shipment.service': 'Service',\n 'shipment.number': 'Tracking number',\n 'shipment.copy': 'Copy',\n 'shipment.copied': 'Copied',\n 'shipment.copyFailed': 'We could not copy; select the text.',\n 'shipment.track': 'Track with {carrier}',\n 'shipment.trackGeneric': 'Track shipment',\n 'shipment.promised': 'Arrives by {date}',\n 'shipment.delivered': 'Delivered on {date}',\n 'shipment.shipped': 'Shipped on {date}',\n 'shipment.events': 'Updates',\n 'shipment.noEvents': 'The carrier has not reported any movement yet; it usually takes 24 hours.',\n 'shipment.showAll': 'Show all ({count})',\n 'shipment.showLess': 'Show less',\n 'shipment.returnLabel': 'Return label',\n 'shipment.test': 'Test',\n 'shipment.testNote': 'Test shipment: it is not a real shipment.',\n 'shipment.preparing': 'Preparing your shipment',\n 'shipment.status.pending': 'Preparing shipment',\n 'shipment.status.label_created': 'Label created',\n 'shipment.status.in_transit': 'On its way',\n 'shipment.status.out_for_delivery': 'Out for delivery',\n 'shipment.status.delivered': 'Delivered',\n 'shipment.status.exception': 'Delivery problem',\n 'shipment.status.returned': 'Returned to the store',\n 'shipment.status.lost': 'Lost',\n 'shipment.status.cancelled': 'Cancelled',\n 'shipment.status.unknown': 'In progress',\n 'shipment.eventFrom': '{location}',\n 'invoice.title': 'Invoices',\n 'invoice.invoice': 'Invoice',\n 'invoice.creditNote': 'Credit note',\n 'invoice.creditNoteOf': 'Corrects invoice {folio}',\n 'invoice.folio': 'Tax folio',\n 'invoice.series': 'Series and number',\n 'invoice.issued': 'Issued on {date}',\n 'invoice.total': 'Total',\n 'invoice.pdf': 'Download PDF',\n 'invoice.xml': 'Download XML',\n 'invoice.downloadOf': '{action}, {kind} {name}',\n 'invoice.none': 'There are no invoices for this order yet.',\n 'invoice.test': 'Test invoice, not valid',\n 'invoice.status.issued': 'Issued',\n 'invoice.status.pending': 'In progress',\n 'invoice.status.cancelled': 'Cancelled',\n 'invoice.status.error': 'Could not be issued',\n 'invoice.status.unknown': 'In progress',\n 'invoice.statusNote.pending': 'We are generating it; we will let you know when it is ready.',\n 'invoice.statusNote.error': 'Contact the store to resolve it.',\n 'invoice.statusNote.cancelled': 'This invoice was cancelled and is no longer valid.',\n 'pending.title': 'Waiting for payment',\n 'pending.intro': 'Your order is created as soon as we confirm the payment. Pay with the voucher before it expires.',\n 'pending.waiting': 'Waiting for payment',\n 'pending.expired': 'Expired',\n 'pending.reference': 'Reference',\n 'pending.clabe': 'CLABE',\n 'pending.beneficiary': 'Beneficiary',\n 'pending.bank': 'Bank',\n 'pending.expires': 'Expires on {date}',\n 'pending.expiredOn': 'Expired on {date}',\n 'pending.total': 'Total',\n 'pending.copyReference': 'Copy reference',\n 'pending.copyClabe': 'Copy CLABE',\n 'pending.copied': 'Copied',\n 'pending.copyFailed': 'We could not copy; select the text.',\n 'pending.print': 'View and print voucher',\n 'pending.download': 'Download PDF',\n 'pending.expiredNote': 'This voucher is no longer valid. Place your order again.',\n 'pending.barcode': 'Barcode {code}',\n 'pending.code': 'Code',\n 'pending.ticket': 'View provider receipt',\n 'pending.method.oxxo': 'OXXO',\n 'pending.method.spei': 'SPEI transfer',\n 'pending.method.bank_transfer': 'Bank transfer',\n 'pending.method.bank_deposit': 'Bank deposit',\n 'pending.method.cash': 'Cash payment',\n 'pending.method.unknown': 'Cash payment',\n 'refund.title': 'Refunds',\n 'refund.status.requested': 'Requested',\n 'refund.status.processing': 'In progress',\n 'refund.status.completed': 'Completed',\n 'refund.status.failed': 'Could not be completed',\n 'refund.status.unknown': 'In progress',\n 'refund.requested': 'Requested on {date}',\n 'refund.completed': 'Completed on {date}',\n 'refund.none': 'This order has no refunds.',\n 'payment.title': 'Payments',\n 'payment.status.paid': 'Paid',\n 'payment.status.pending': 'Pending',\n 'payment.status.failed': 'Failed',\n 'payment.status.refunded': 'Refunded',\n 'payment.status.partially_refunded': 'Partially refunded',\n 'payment.status.unknown': 'In progress',\n 'payment.paidOn': 'Paid on {date}',\n 'payment.method.card': 'Card',\n 'payment.method.credit_card': 'Credit card',\n 'payment.method.debit_card': 'Debit card',\n 'payment.method.cash_voucher': 'Cash with a voucher (OXXO, convenience store)',\n 'payment.method.oxxo': 'Cash at OXXO',\n 'payment.method.spei': 'SPEI transfer',\n 'payment.method.transfer': 'Bank transfer',\n 'payment.method.bank_deposit': 'Bank deposit',\n 'payment.method.wallet': 'Digital wallet',\n 'payment.method.cash': 'Cash',\n 'payment.method.other': 'Other payment method',\n 'payment.method.unknown': 'Payment method',\n 'section.error': 'We could not load this section.',\n 'section.retry': 'Try again',\n 'section.loading': 'Loading',\n}\n\n/** Messages for a locale (`es*` default, `en*`), with optional per-key overrides. */\nexport function accountMessages(locale?: string | null, overrides?: Partial<AccountMessages> | null): AccountMessages {\n const base: AccountMessages = (locale ?? 'es-MX').toLowerCase().startsWith('en') ? EN : ES\n return overrides ? { ...base, ...overrides } : base\n}\n\n/** Text for an open enum: `<group>.<value>` when this SDK knows it, else `<group>.unknown`. Never the raw value. */\nexport function enumText(m: AccountMessages, group: string, value: unknown): string {\n const key = `${group}.${typeof value === 'string' ? value : ''}` as AccountMessageKey\n return Object.prototype.hasOwnProperty.call(m, key) ? m[key] : m[`${group}.unknown` as AccountMessageKey]\n}\n","import { createContext, useContext, useMemo, type ReactNode } from 'react'\nimport { createStorefrontClient, type Shop, type StorefrontClient, type StorefrontClientOptions } from '@asteby/storefront'\n\nexport type StorefrontContextValue = {\n /** Client for browser-side calls (use a public `pk_` token). */\n client: StorefrontClient | null\n shop: Shop | null\n /** BCP 47 locale used for formatting (defaults to `shop.locale`, then `es-MX`). */\n locale: string\n /** ISO 4217 currency (defaults to `shop.currency_code`, then `MXN`). */\n currency: string\n}\n\nconst StorefrontContext = createContext<StorefrontContextValue | null>(null)\n\nexport type StorefrontProviderProps = {\n /** A ready client. Takes precedence over `config`. */\n client?: StorefrontClient\n /** Options to create the browser client (use a `pk_` token). */\n config?: StorefrontClientOptions\n /** Shop info loaded on the server (root loader). */\n shop?: Shop | null\n locale?: string\n currency?: string\n children?: ReactNode\n}\n\n/**\n * Makes the storefront client, shop, locale and currency available to the\n * tree. SSR-safe: creating the client does not touch `window`.\n */\nexport function StorefrontProvider({ client, config, shop = null, locale, currency, children }: StorefrontProviderProps) {\n const configKey = config ? `${config.baseUrl}|${config.token}|${config.locale ?? ''}|${config.customerToken ?? ''}` : ''\n const resolvedClient = useMemo(\n () => client ?? (config ? createStorefrontClient(config) : null),\n [client, configKey],\n )\n const value = useMemo<StorefrontContextValue>(\n () => ({\n client: resolvedClient,\n shop,\n locale: locale ?? config?.locale ?? shop?.locale ?? 'es-MX',\n currency: currency ?? shop?.currency_code ?? 'MXN',\n }),\n [resolvedClient, shop, locale, currency, config?.locale],\n )\n return <StorefrontContext.Provider value={value}>{children}</StorefrontContext.Provider>\n}\n\n/** Storefront context. Throws outside `<StorefrontProvider>`. */\nexport function useStorefront(): StorefrontContextValue {\n const ctx = useContext(StorefrontContext)\n if (!ctx) throw new Error('useStorefront must be used inside <StorefrontProvider>')\n return ctx\n}\n\n/** Storefront context or `null` outside a provider (for components that work standalone). */\nexport function useOptionalStorefront(): StorefrontContextValue | null {\n return useContext(StorefrontContext)\n}\n\n/** The client from context; throws when the provider has none. */\nexport function useStorefrontClient(): StorefrontClient {\n const { client } = useStorefront()\n if (!client) throw new Error('<StorefrontProvider> needs a `client` or `config` for browser-side calls')\n return client\n}\n","import { createElement, type ComponentPropsWithoutRef, type ElementType, type ReactNode } from 'react'\nimport { formatMoney, parseMoney, type FormatMoneyOptions, type Image as ImageData, type Money as MoneyData, type Product, type ProductVariant } from '@asteby/storefront'\nimport { useOptionalStorefront } from './context.js'\n\n// ---------------------------------------------------------------------------\n// Money\n// ---------------------------------------------------------------------------\n\nexport type MoneyProps<As extends ElementType = 'span'> = FormatMoneyOptions & {\n data: MoneyData\n /** Element to render (default `span`). */\n as?: As\n /** Overrides the provider locale. */\n locale?: string\n} & Omit<ComponentPropsWithoutRef<As>, 'children' | 'as'>\n\n/** Formats `Money` with the provider locale (or `locale`). */\nexport function Money<As extends ElementType = 'span'>({\n data,\n as,\n locale,\n withoutTrailingZeros,\n withoutCurrency,\n currencyDisplay,\n ...rest\n}: MoneyProps<As>) {\n const sf = useOptionalStorefront()\n const text = formatMoney(data, locale ?? sf?.locale, {\n ...(withoutTrailingZeros !== undefined ? { withoutTrailingZeros } : {}),\n ...(withoutCurrency !== undefined ? { withoutCurrency } : {}),\n ...(currencyDisplay !== undefined ? { currencyDisplay } : {}),\n })\n return createElement(as ?? 'span', rest, text)\n}\n\n// ---------------------------------------------------------------------------\n// Image\n// ---------------------------------------------------------------------------\n\nexport const DEFAULT_IMAGE_WIDTHS = [320, 480, 640, 768, 1024, 1280, 1600] as const\n\n/** Builds the URL for one srcset width. */\nexport type ImageLoader = (src: string, width: number, height?: number) => string\n\n/**\n * Default loader: adds `?width=<w>` (the convention of most image CDNs and of\n * the OPS image proxy). URLs that cannot be parsed are returned unchanged.\n */\nexport const defaultImageLoader: ImageLoader = (src, width, height) => {\n try {\n const isAbsolute = /^[a-z][a-z0-9+.-]*:/i.test(src)\n const url = new URL(src, 'http://relative.invalid')\n url.searchParams.set('width', String(width))\n if (height) url.searchParams.set('height', String(height))\n return isAbsolute ? url.toString() : url.pathname + url.search + url.hash\n } catch {\n return src\n }\n}\n\nexport type ImageProps = Omit<ComponentPropsWithoutRef<'img'>, 'src' | 'srcSet' | 'width' | 'height'> & {\n data: ImageData\n /** `sizes` attribute (default `100vw`). */\n sizes?: string\n /** Candidate widths for `srcset` (capped at the intrinsic width when known). */\n widths?: readonly number[]\n /** URL builder per width (default adds `?width=`). Pass `null` to disable srcset. */\n loader?: ImageLoader | null\n /** Above-the-fold image: eager loading and `fetchpriority=\"high\"`. */\n priority?: boolean\n /** Forces an aspect ratio, e.g. `1/1` or `4/3`, used for width/height and srcset heights. */\n aspectRatio?: string\n}\n\nfunction parseRatio(ratio: string | undefined): number | null {\n if (!ratio) return null\n const [w, h] = ratio.split(/[/:]/).map((n) => Number.parseFloat(n))\n return w && h ? w / h : null\n}\n\n/** Responsive `<img>` with `srcset`, lazy by default, intrinsic size to avoid layout shift. */\nexport function Image({\n data,\n sizes = '100vw',\n widths = DEFAULT_IMAGE_WIDTHS,\n loader = defaultImageLoader,\n priority = false,\n aspectRatio,\n alt,\n loading,\n decoding,\n ...rest\n}: ImageProps) {\n const ratio = parseRatio(aspectRatio) ?? (data.width && data.height ? data.width / data.height : null)\n let candidates = [...widths].sort((a, b) => a - b)\n if (data.width) {\n const capped = candidates.filter((w) => w <= data.width!)\n candidates = capped.length ? capped : [data.width]\n }\n const srcSet = loader\n ? candidates.map((w) => `${loader(data.url, w, ratio ? Math.round(w / ratio) : undefined)} ${w}w`).join(', ')\n : undefined\n const width = data.width ?? candidates[candidates.length - 1]\n const height = data.height ?? (ratio && width ? Math.round(width / ratio) : undefined)\n return (\n <img\n src={data.url}\n alt={alt ?? data.alt ?? ''}\n {...(srcSet ? { srcSet, sizes } : {})}\n {...(width ? { width } : {})}\n {...(height ? { height } : {})}\n loading={loading ?? (priority ? 'eager' : 'lazy')}\n decoding={decoding ?? (priority ? 'auto' : 'async')}\n {...(priority ? { fetchPriority: 'high' as const } : {})}\n {...rest}\n />\n )\n}\n\n// ---------------------------------------------------------------------------\n// ProductPrice\n// ---------------------------------------------------------------------------\n\nconst VISUALLY_HIDDEN = {\n position: 'absolute',\n width: 1,\n height: 1,\n padding: 0,\n margin: -1,\n overflow: 'hidden',\n clip: 'rect(0, 0, 0, 0)',\n whiteSpace: 'nowrap',\n border: 0,\n} as const\n\nexport type ProductPriceProps = Omit<ComponentPropsWithoutRef<'div'>, 'children'> & {\n product?: Pick<Product, 'price_range' | 'compare_at_price_range'> | null\n variant?: Pick<ProductVariant, 'price' | 'compare_at_price'> | null\n /** Prefix shown when the product has a price range and no variant is selected (default `Desde`). */\n fromLabel?: ReactNode\n /** Accessible label for the compare-at price (default `Precio anterior`). */\n compareAtLabel?: string\n locale?: string\n withoutTrailingZeros?: boolean\n}\n\n/**\n * Price with optional compare-at (strikethrough). With a `variant` it shows\n * that variant; otherwise the product's minimum price (prefixed with\n * `fromLabel` when prices vary).\n */\nexport function ProductPrice({\n product,\n variant,\n fromLabel = 'Desde',\n compareAtLabel = 'Precio anterior',\n locale,\n withoutTrailingZeros,\n ...rest\n}: ProductPriceProps) {\n let price: MoneyData | null = null\n let compareAt: MoneyData | null = null\n let isRange = false\n if (variant) {\n price = variant.price\n compareAt = variant.compare_at_price\n } else if (product) {\n price = product.price_range.min\n compareAt = product.compare_at_price_range?.min ?? null\n isRange = product.price_range.min.amount !== product.price_range.max.amount\n }\n if (!price) return null\n const onSale = compareAt !== null && parseMoney(compareAt) > parseMoney(price)\n const opts = { ...(locale ? { locale } : {}), ...(withoutTrailingZeros !== undefined ? { withoutTrailingZeros } : {}) }\n return (\n <div data-on-sale={onSale || undefined} {...rest}>\n {isRange ? <span data-price-prefix=\"\">{fromLabel} </span> : null}\n <Money data={price} data-price=\"\" {...opts} />\n {onSale && compareAt ? (\n <>\n {' '}\n <s data-compare-at-price=\"\">\n <span style={VISUALLY_HIDDEN}>{compareAtLabel}: </span>\n <Money data={compareAt} {...opts} />\n </s>\n </>\n ) : null}\n </div>\n )\n}\n","/**\n * Product preview of the storefront: ONE picture-plus-text pattern for every place a product is listed (cart drawer,\n * checkout summary, \"Mis pedidos\", order detail). Headless (`data-sf-preview*`, `classNames`), styled by\n * `product-preview.css` (plain CSS on the store tokens, dark mode included), SSR-safe.\n *\n * - `ProductThumb`: the picture alone. Fixed aspect ratio, `object-fit: contain` on a soft surface (parts photographed\n * on white are never cropped), responsive `srcset` through the shared `Image`, lazy by default, a shimmer while it\n * loads and an elegant fallback (initial of the name, or a package glyph) when there is no image, it is broken, or\n * the product no longer exists. Optional quantity badge.\n * - `ProductPreview`: thumb + name (2 lines) + variant + SKU + quantity x unit price, with the line total aligned right.\n * - `ProductThumbStack`: overlapped thumbs with a \"+N\" counter (order cards).\n */\nimport { useEffect, useRef, useState, type ReactNode } from 'react'\nimport type { Image as ImageData } from '@asteby/storefront'\nimport { Image, type ImageLoader } from '../components.js'\n\ntype ThumbState = 'loading' | 'loaded' | 'fallback'\n\n/** First letter(s) of the name for the fallback: two initials from two words, one otherwise. Empty when nothing usable. */\nexport function productInitials(name: string | null | undefined): string {\n const words = (name ?? '')\n .normalize('NFKC')\n .split(/[\\s\\-_/.,()]+/)\n .map((w) => Array.from(w).find((c) => /\\p{L}|\\p{N}/u.test(c)) ?? '')\n .filter(Boolean)\n if (words.length === 0) return ''\n return (words.length > 1 ? words[0]! + words[1]! : words[0]!).toLocaleUpperCase()\n}\n\nexport type ProductThumbClassNames = Partial<Record<'root' | 'img' | 'fallback' | 'badge', string>>\n\nexport type ProductThumbImage = { url: string; alt?: string | null; width?: number; height?: number }\n\nexport type ProductThumbProps = {\n /** Picture of the product or variant. `null`/missing: shows the fallback. */\n image?: ProductThumbImage | null\n /** Name of the product: alt of the picture (unless `decorative`) and source of the fallback initial. */\n name?: string | null\n /** Side in px. Default 56. */\n size?: number\n /** Aspect ratio of the box, `w/h`. Default `1/1`. */\n ratio?: string\n /** `contain` (default) never crops; `cover` fills the box. */\n fit?: 'contain' | 'cover'\n /** Quantity badge, shown when greater than 1. */\n quantity?: number\n /** The name sits next to it as text: the picture has `alt=\"\"` and the fallback is hidden from screen readers. Default false. */\n decorative?: boolean\n /** Slight zoom on hover (honours `prefers-reduced-motion`). Default true. */\n zoom?: boolean\n /** Above the fold: eager load. */\n priority?: boolean\n sizes?: string\n loader?: ImageLoader | null\n className?: string\n classNames?: ProductThumbClassNames\n}\n\n/** The picture of a product with fixed ratio, shimmer, lazy loading and a fallback that always looks designed. */\nexport function ProductThumb({\n image,\n name,\n size = 56,\n ratio = '1/1',\n fit = 'contain',\n quantity,\n decorative = false,\n zoom = true,\n priority = false,\n sizes,\n loader,\n className,\n classNames: cx = {},\n}: ProductThumbProps) {\n const url = image?.url || null\n const [state, setState] = useState<ThumbState>(url ? 'loading' : 'fallback')\n const box = useRef<HTMLSpanElement>(null)\n // A new picture (another variant) starts over; a missing one goes straight to the fallback.\n useEffect(() => {\n const img = box.current?.querySelector('img')\n // The browser may have loaded the picture before hydration: no `load` event will come.\n setState(!url ? 'fallback' : img?.complete ? (img.naturalWidth > 0 ? 'loaded' : 'fallback') : 'loading')\n }, [url])\n\n const label = name?.trim() || ''\n const initials = productInitials(label)\n const showBadge = typeof quantity === 'number' && quantity > 1\n const a11y = state === 'fallback' && !decorative && label ? { role: 'img', 'aria-label': label } : { 'aria-hidden': decorative || state === 'fallback' ? true : undefined }\n return (\n <span\n ref={box}\n className={[cx.root, className].filter(Boolean).join(' ') || undefined}\n style={{ ['--sf-preview-size' as string]: `${size}px`, ['--sf-preview-ratio' as string]: ratio.replace(':', '/') }}\n data-sf-thumb=\"\"\n data-state={state}\n data-fit={fit}\n data-zoom={zoom || undefined}\n {...a11y}\n >\n {url && state !== 'fallback' ? (\n <Image\n data={{ url, alt: image?.alt ?? null, ...(image?.width ? { width: image.width } : {}), ...(image?.height ? { height: image.height } : {}) }}\n alt={decorative ? '' : (image?.alt ?? label)}\n aspectRatio={ratio}\n sizes={sizes ?? `${size * 2}px`}\n widths={[Math.round(size), Math.round(size * 2), Math.round(size * 3)]}\n {...(loader !== undefined ? { loader } : {})}\n priority={priority}\n className={cx.img}\n onLoad={() => setState('loaded')}\n onError={() => setState('fallback')}\n />\n ) : null}\n {state === 'fallback' ? (\n <span className={cx.fallback} data-sf-thumb-fallback=\"\" aria-hidden=\"true\">\n {initials ? <span data-sf-thumb-initial=\"\">{initials}</span> : <PackageGlyph />}\n </span>\n ) : null}\n {showBadge ? (\n <span className={cx.badge} data-sf-thumb-qty=\"\" aria-hidden=\"true\">\n {quantity}\n </span>\n ) : null}\n </span>\n )\n}\n\nfunction PackageGlyph() {\n return (\n <svg viewBox=\"0 0 24 24\" width=\"45%\" height=\"45%\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.6\" strokeLinecap=\"round\" strokeLinejoin=\"round\" focusable=\"false\">\n <path d=\"M21 8 12 3 3 8v8l9 5 9-5V8Z\" />\n <path d=\"m3 8 9 5 9-5M12 13v8\" />\n </svg>\n )\n}\n\nexport type ProductPreviewClassNames = Partial<Record<'root' | 'media' | 'body' | 'name' | 'variant' | 'meta' | 'sku' | 'qty' | 'price' | 'total' | 'unit', string>> & { thumb?: ProductThumbClassNames }\n\nexport type ProductPreviewProps = Pick<ProductThumbProps, 'image' | 'size' | 'ratio' | 'fit' | 'zoom' | 'priority' | 'sizes' | 'loader'> & {\n name: string\n /** \"Rojo / L\". Omit for default variants. */\n variant?: string | null\n sku?: string | null\n /** Quantity: a badge on the picture (> 1) and \"Cantidad N\" under the name. */\n quantity?: number\n /** Unit price, already formatted. Shown next to the quantity when it is greater than 1. */\n unitPrice?: ReactNode\n /** Line total, already formatted: aligned right, the strongest number. */\n total?: ReactNode\n /** Link on the name (product page). */\n href?: string | null\n /** Rendered under the text (status, note, actions). */\n children?: ReactNode\n /** Text of the quantity for screen readers and the meta line. Default `Cantidad {n}`. */\n quantityLabel?: string\n /** Name shown when the line has none (product deleted). Default `Producto no disponible`. */\n unavailableLabel?: string\n className?: string\n classNames?: ProductPreviewClassNames\n}\n\n/**\n * A product line: picture, name (2 lines), variant, SKU, quantity and prices with a clear hierarchy. Degrades to a\n * designed placeholder when the product has no image or no longer exists (empty name).\n */\nexport function ProductPreview({\n image,\n name,\n variant,\n sku,\n quantity,\n unitPrice,\n total,\n href,\n children,\n size = 64,\n ratio,\n fit,\n zoom,\n priority,\n sizes,\n loader,\n quantityLabel,\n unavailableLabel = 'Producto no disponible',\n className,\n classNames: cx = {},\n}: ProductPreviewProps) {\n const missing = !name.trim()\n const title = missing ? unavailableLabel : name\n const hasQty = typeof quantity === 'number' && Number.isFinite(quantity)\n return (\n <div className={[cx.root, className].filter(Boolean).join(' ') || undefined} data-sf-preview=\"\" data-missing={missing || undefined}>\n <span className={cx.media} data-sf-preview-media=\"\">\n <ProductThumb\n image={image}\n name={missing ? null : name}\n size={size}\n decorative\n {...(ratio ? { ratio } : {})}\n {...(fit ? { fit } : {})}\n {...(zoom !== undefined ? { zoom } : {})}\n {...(priority ? { priority } : {})}\n {...(sizes ? { sizes } : {})}\n {...(loader !== undefined ? { loader } : {})}\n {...(hasQty ? { quantity: quantity! } : {})}\n {...(cx.thumb ? { classNames: cx.thumb } : {})}\n />\n </span>\n <span className={cx.body} data-sf-preview-body=\"\">\n <span className={cx.name} data-sf-preview-name=\"\">\n {href && !missing ? <a href={href}>{title}</a> : title}\n </span>\n {variant ? (\n <span className={cx.variant} data-sf-preview-variant=\"\">\n {variant}\n </span>\n ) : null}\n {sku ? (\n <span className={cx.sku} data-sf-preview-sku=\"\">\n SKU {sku}\n </span>\n ) : null}\n {hasQty ? (\n <span className={cx.meta} data-sf-preview-meta=\"\">\n <span className={cx.qty} data-sf-preview-qty=\"\">\n {(quantityLabel ?? 'Cantidad {n}').replace('{n}', String(quantity))}\n </span>\n {unitPrice != null && quantity! > 1 ? (\n <span className={cx.unit} data-sf-preview-unit=\"\">\n {' · '}\n {unitPrice}\n </span>\n ) : null}\n </span>\n ) : null}\n {children}\n </span>\n {total != null ? (\n <span className={cx.total} data-sf-preview-total=\"\">\n {total}\n </span>\n ) : unitPrice != null && !(hasQty && quantity! > 1) ? (\n <span className={cx.price} data-sf-preview-total=\"\">\n {unitPrice}\n </span>\n ) : null}\n </div>\n )\n}\n\nexport type ProductThumbStackProps = {\n items: ReadonlyArray<{ image?: ProductThumbImage | null; name?: string | null }>\n /** Thumbs shown before \"+N\". Default 4. */\n max?: number\n size?: number\n /** Screen reader text for the hidden remainder, `{n}` = how many. Default `y {n} más`. */\n moreLabel?: string\n className?: string\n}\n\n/** Overlapped thumbs with a \"+N\" counter: the products of an order at a glance. */\nexport function ProductThumbStack({ items, max = 4, size = 44, moreLabel = 'y {n} más', className }: ProductThumbStackProps) {\n if (items.length === 0) return null\n const shown = items.length > max ? items.slice(0, max - 1) : items\n const rest = items.length - shown.length\n return (\n <span className={className} data-sf-thumb-stack=\"\" style={{ ['--sf-preview-size' as string]: `${size}px` }}>\n {shown.map((it, i) => (\n <ProductThumb key={i} image={it.image ?? null} name={it.name ?? null} size={size} zoom={false} />\n ))}\n {rest > 0 ? (\n <span data-sf-thumb-more=\"\" role=\"img\" aria-label={moreLabel.replace('{n}', String(rest))}>\n +{rest}\n </span>\n ) : null}\n </span>\n )\n}\n","import { useOptionalStorefront } from './context.js'\n\n/** Locale of a component: its own prop, else the `StorefrontProvider`'s, else `es-MX`. */\nexport function useResolvedLocale(locale?: string | null): string {\n const sf = useOptionalStorefront()\n return locale ?? sf?.locale ?? 'es-MX'\n}\n","/** Small shared pieces of the order screens: date formatting, hidden text, copy button, text resolution. */\nimport { formatMoney } from '@asteby/storefront'\nimport { useCallback, useEffect, useRef, useState, type CSSProperties, type ReactNode } from 'react'\nimport { useResolvedLocale } from '../locale.js'\nimport { accountMessages, fill, type AccountMessages } from './orders-messages.js'\n\nconst SR_ONLY: CSSProperties = {\n position: 'absolute',\n width: 1,\n height: 1,\n padding: 0,\n margin: -1,\n overflow: 'hidden',\n clip: 'rect(0 0 0 0)',\n whiteSpace: 'nowrap',\n border: 0,\n}\n\n/**\n * Text the server (or the carrier through it) sent, ready to render: a trimmed non-empty string, a finite number as\n * text, else `null`. Every free-text field passes here, so an object or a number where a string was expected never\n * reaches React as a child (which throws) and never prints as `[object Object]`.\n */\nexport function str(v: unknown): string | null {\n if (typeof v === 'number') return Number.isFinite(v) ? String(v) : null\n if (typeof v !== 'string') return null\n const s = v.trim()\n return s ? s : null\n}\n\n/** A `Money` formatted, or `null` when it is missing or malformed (never a made-up `$0.00`). */\nexport function moneyText(v: unknown, locale: string): string | null {\n if (!v || typeof v !== 'object') return null\n const { amount, currency_code } = v as Record<string, unknown>\n const a = typeof amount === 'number' ? String(amount) : amount\n if (typeof a !== 'string' || !a.trim() || !Number.isFinite(Number(a)) || typeof currency_code !== 'string' || !/^[A-Za-z]{3}$/.test(currency_code)) return null\n return formatMoney({ amount: a.trim(), currency_code: currency_code.toUpperCase() }, locale)\n}\n\n/** Visually hidden text for screen readers. */\nexport function Hidden({ children }: { children: ReactNode }) {\n return <span style={SR_ONLY}>{children}</span>\n}\n\nexport type AccountTextProps = {\n /** BCP 47; defaults to the provider's, then `es-MX`. */\n locale?: string\n /** Per-key text overrides (a store's own words). */\n messages?: Partial<AccountMessages>\n /** IANA time zone for dates (`America/Mexico_City`). Pass the store's own to get the same text on server and browser. */\n timeZone?: string\n}\n\n/** The texts and the date formatter of a component. */\nexport function useAccountText({ locale, messages, timeZone }: AccountTextProps) {\n const resolved = useResolvedLocale(locale)\n const m = accountMessages(resolved, messages)\n const date = (iso: string | null | undefined, style: 'date' | 'datetime' = 'date'): string | null => formatDate(iso, resolved, style, timeZone)\n const t = (key: keyof AccountMessages, vars?: Record<string, string | number>): string => (vars ? fill(m[key], vars) : m[key])\n return { locale: resolved, m, t, date, timeZone }\n}\n\n/** `\"12 de agosto de 2026\"`; `null` for a missing or invalid value. A bare `YYYY-MM-DD` is a calendar day, not an instant. */\nexport function formatDate(iso: string | null | undefined, locale: string, style: 'date' | 'datetime' = 'date', timeZone?: string): string | null {\n if (!iso || typeof iso !== 'string') return null\n const dayOnly = /^\\d{4}-\\d{2}-\\d{2}$/.test(iso)\n const d = new Date(dayOnly ? `${iso}T12:00:00Z` : iso)\n if (Number.isNaN(d.getTime())) return null\n const zone = dayOnly ? 'UTC' : timeZone\n try {\n return new Intl.DateTimeFormat(locale, { dateStyle: 'long', ...(style === 'datetime' && !dayOnly ? { timeStyle: 'short' } : {}), ...(zone ? { timeZone: zone } : {}) }).format(d)\n } catch {\n return d.toISOString().slice(0, 10)\n }\n}\n\n/** A `<time>` with its machine value. Server and browser may disagree on the zone: the text is allowed to differ. */\nexport function Time({ value, text, className }: { value: string | null | undefined; text: string | null; className?: string | undefined }) {\n if (!value || !text) return null\n return (\n <time dateTime={value} className={className} suppressHydrationWarning>\n {text}\n </time>\n )\n}\n\n/** Plural by count (`one` for 1) with the `{count}` template. */\nexport function plural(m: AccountMessages, base: 'order.items', count: number): string {\n return fill(base === 'order.items' && count === 1 ? m['order.items.one'] : m['order.items.other'], { count })\n}\n\nexport type CopyButtonProps = {\n value: string\n label: string\n copiedLabel: string\n failedLabel: string\n className?: string | undefined\n /** Accessible name when the visible label is generic (\"Copiar\" for the tracking number). */\n ariaLabel?: string | undefined\n 'data-sf-copy'?: string\n}\n\n/**\n * Copies `value` to the clipboard. The result is announced in a polite live region (visible text or not) so it is\n * heard; when the browser refuses (no permission, insecure context) the buyer is told to select the text instead.\n */\nexport function CopyButton({ value, label, copiedLabel, failedLabel, className, ariaLabel, ...rest }: CopyButtonProps) {\n const [state, setState] = useState<'idle' | 'copied' | 'failed'>('idle')\n const timer = useRef<ReturnType<typeof setTimeout> | undefined>(undefined)\n useEffect(() => () => clearTimeout(timer.current), [])\n const copy = useCallback(async () => {\n try {\n await navigator.clipboard.writeText(value)\n setState('copied')\n } catch {\n setState('failed')\n }\n clearTimeout(timer.current)\n timer.current = setTimeout(() => setState('idle'), 3000)\n }, [value])\n return (\n <>\n <button type=\"button\" onClick={copy} className={className} aria-label={ariaLabel} data-sf-copy={rest['data-sf-copy'] ?? ''} data-state={state}>\n {state === 'copied' ? copiedLabel : label}\n </button>\n <span role=\"status\" aria-live=\"polite\" data-sf-copy-status style={state === 'failed' ? undefined : SR_ONLY}>\n {state === 'copied' ? copiedLabel : state === 'failed' ? failedLabel : ''}\n </span>\n </>\n )\n}\n","/**\n * Lines of an order, as the customer recognises them: picture, name, variant, SKU, quantity and the line total.\n * Headless (`data-sf-order-lines`), built on the shared `ProductPreview`. A line without picture or whose product no\n * longer exists is still a complete row (designed placeholder, \"Producto no disponible\"), and a malformed line from\n * the server is skipped instead of breaking the page.\n */\nimport type { Order, OrderLine } from '@asteby/storefront'\nimport { ProductPreview, ProductThumbStack, type ProductPreviewClassNames, type ProductThumbImage } from '../ui/product-preview.js'\nimport { fill } from './orders-messages.js'\nimport { moneyText, str, useAccountText, type AccountTextProps } from './orders-ui.js'\n\n/** The picture of a line when it carries a usable URL. */\nexport function lineImage(line: Partial<OrderLine> | null | undefined): ProductThumbImage | null {\n const img = line?.image\n if (!img || typeof img !== 'object') return null\n const url = str((img as { url?: unknown }).url)\n if (!url) return null\n const alt = str((img as { alt?: unknown }).alt)\n const w = Number((img as { width?: unknown }).width)\n const h = Number((img as { height?: unknown }).height)\n return { url, alt, ...(Number.isFinite(w) && w > 0 ? { width: w } : {}), ...(Number.isFinite(h) && h > 0 ? { height: h } : {}) }\n}\n\nfunction validLines(order: Pick<Order, 'lines'> | { lines?: unknown }): OrderLine[] {\n return (Array.isArray(order.lines) ? order.lines : []).filter((l): l is OrderLine => !!l && typeof l === 'object')\n}\n\nexport type OrderLinesClassNames = Partial<Record<'root' | 'list' | 'item', string>> & { preview?: ProductPreviewClassNames }\n\nexport type OrderLinesProps = AccountTextProps & {\n order: Pick<Order, 'lines'>\n /** Product page of a line (return `null` for none). */\n lineHref?: (line: OrderLine) => string | null | undefined\n /** Thumb side in px. Default 64. */\n size?: number\n /** Heading of the list for screen readers. */\n label?: string\n classNames?: OrderLinesClassNames\n}\n\nexport function OrderLines({ order, lineHref, size = 64, label, classNames: cx = {}, ...text }: OrderLinesProps) {\n const { m, locale } = useAccountText(text)\n const lines = validLines(order)\n if (lines.length === 0) return null\n return (\n <div className={cx.root} data-sf-order-lines=\"\">\n <ul className={cx.list} aria-label={label ?? m['order.lines']} data-sf-order-lines-list=\"\">\n {lines.map((l, i) => {\n const qty = Number.isFinite(l.quantity) && l.quantity > 0 ? l.quantity : 1\n const unit = moneyText(l.unit, locale)\n const variant = str(l.variant_title)\n return (\n <li key={`${str(l.sku) ?? ''}-${i}`} className={cx.item} data-sf-order-line=\"\">\n <ProductPreview\n image={lineImage(l)}\n name={str(l.title) ?? ''}\n variant={variant && !/^default( title)?$/i.test(variant) ? variant : null}\n sku={str(l.sku)}\n quantity={qty}\n quantityLabel={m['order.line.quantity']}\n unavailableLabel={m['order.line.unavailable']}\n unitPrice={unit ? fill(m['order.line.each'], { price: unit }) : null}\n total={moneyText(l.total, locale)}\n href={lineHref?.(l) ?? null}\n size={size}\n {...(cx.preview ? { classNames: cx.preview } : {})}\n />\n </li>\n )\n })}\n </ul>\n </div>\n )\n}\n\n/** The products of an order as overlapped pictures with \"+N\": the glance of an order card. */\nexport function OrderProductsStack({ order, size = 44, max = 4, className, ...text }: AccountTextProps & { order: Pick<Order, 'lines'>; size?: number; max?: number; className?: string }) {\n const { m } = useAccountText(text)\n const lines = validLines(order)\n if (lines.length === 0) return null\n return (\n <ProductThumbStack\n items={lines.map((l) => ({ image: lineImage(l), name: str(l.title) }))}\n size={size}\n max={max}\n moreLabel={m['order.productsMore']}\n {...(className ? { className } : {})}\n />\n )\n}\n","/**\n * The unified timeline of an order (`OrderProgress`), the status badge and the next-action button. Headless: no styles,\n * `data-sf-*` hooks and `classNames` slots. Reads `order.progress` / `order.next_action` (or derives them for an older\n * OPS) and never invents a state: an unknown stage, step or problem code renders as a generic text.\n */\nimport type { NextAction, Order, OrderProgress as OrderProgressData, OrderProgressStep } from '@asteby/storefront'\nimport { nextAction as deriveNextAction, orderProgress as deriveProgress, safeTrackingUrl } from '@asteby/storefront'\nimport type { MouseEvent, ReactNode } from 'react'\nimport { enumText } from './orders-messages.js'\nimport { Hidden, Time, useAccountText, type AccountTextProps } from './orders-ui.js'\n\nconst STEP_STATES = new Set(['done', 'current', 'pending', 'problem'])\nconst stepState = (s: unknown): 'done' | 'current' | 'pending' | 'problem' => (typeof s === 'string' && STEP_STATES.has(s) ? (s as 'done') : 'pending')\n\n/** A shape per state so the state never depends on color alone. */\nconst GLYPH = { done: '✓', current: '●', pending: '○', problem: '!' } as const\n\nexport type OrderTone = 'done' | 'current' | 'problem' | 'muted'\n\n/** Tone of a stage for the store's own colors (`data-sf-tone`). */\nexport function stageTone(stage: string, problem?: unknown): OrderTone {\n if (problem) return 'problem'\n if (stage === 'delivered') return 'done'\n if (stage === 'cancelled' || stage === 'refunded') return 'muted'\n if (['pending_payment', 'paid', 'preparing', 'ready_for_pickup', 'shipped', 'in_transit', 'out_for_delivery'].includes(stage)) return 'current'\n return 'muted'\n}\n\nexport type OrderStatusBadgeProps = AccountTextProps & {\n /** The order (its `progress` or a derived one is used) ... */\n order?: Order\n /** ... or the progress itself. */\n progress?: OrderProgressData\n className?: string\n}\n\n/** Status in words with a semantic tone: `<span data-sf-order-badge data-sf-tone=\"current\">En camino</span>`. */\nexport function OrderStatusBadge({ order, progress, className, ...text }: OrderStatusBadgeProps) {\n const { m } = useAccountText(text)\n const p = progress ?? (order ? deriveProgress(order) : null)\n if (!p) return null\n return (\n <span className={className} data-sf-order-badge data-sf-stage={p.stage} data-sf-tone={stageTone(p.stage, p.problem)}>\n {enumText(m, 'stage', p.stage)}\n {p.problem ? <Hidden>{`, ${m['stepState.problem']}`}</Hidden> : null}\n </span>\n )\n}\n\nexport type OrderProgressClassNames = Partial<Record<'root' | 'list' | 'step' | 'marker' | 'label' | 'time' | 'problem' | 'terminal', string>>\n\nexport type OrderProgressProps = AccountTextProps & {\n /** Pass the order (progress is read or derived) ... */\n order?: Order\n /** ... or the progress. */\n progress?: OrderProgressData\n /** `compact`: only the current step and \"step 3 of 5\", for a list card. */\n variant?: 'full' | 'compact'\n classNames?: OrderProgressClassNames\n}\n\n/**\n * `<ol>` with the steps paid → preparing → shipped → on its way → delivered (or pickup). The current step carries\n * `aria-current=\"step\"`; every state also has text for screen readers, and a problem is written out below the list.\n */\nexport function OrderProgress({ order, progress, variant = 'full', classNames: cx = {}, ...text }: OrderProgressProps) {\n const { m, t, date } = useAccountText(text)\n const p = progress ?? (order ? deriveProgress(order) : null)\n if (!p) return null\n const steps: OrderProgressStep[] = Array.isArray(p.steps) ? p.steps.filter((s) => s && typeof s === 'object') : []\n const stepLabel = (s: OrderProgressStep) => enumText(m, 'step', s.key)\n\n if (steps.length === 0 || p.stage === 'cancelled' || p.stage === 'refunded') {\n const note = p.stage === 'cancelled' ? m['progress.cancelled'] : p.stage === 'refunded' ? m['progress.refunded'] : enumText(m, 'stage', p.stage)\n return (\n <div className={cx.root} data-sf-progress data-sf-stage={p.stage} data-sf-variant={variant}>\n <p className={cx.terminal} data-sf-progress-terminal>\n {note}\n </p>\n </div>\n )\n }\n\n if (variant === 'compact') {\n const at = Math.max(0, steps.findIndex((s) => stepState(s.state) === 'current' || stepState(s.state) === 'problem'))\n const index = steps.some((s) => stepState(s.state) === 'current' || stepState(s.state) === 'problem') ? at : steps.every((s) => stepState(s.state) === 'done') ? steps.length - 1 : 0\n return (\n <div className={cx.root} data-sf-progress data-sf-stage={p.stage} data-sf-variant=\"compact\">\n <p className={cx.label} data-sf-progress-summary>\n {t('order.stepOf', { n: index + 1, total: steps.length, step: stepLabel(steps[index]!) })}\n </p>\n </div>\n )\n }\n\n return (\n <div className={cx.root} data-sf-progress data-sf-stage={p.stage} data-sf-variant=\"full\">\n <ol className={cx.list} aria-label={m['progress.label']} data-sf-progress-list>\n {steps.map((s, i) => {\n const state = stepState(s.state)\n return (\n <li key={`${s.key}-${i}`} className={cx.step} data-sf-step={typeof s.key === 'string' ? s.key : 'unknown'} data-sf-step-state={state} {...(state === 'current' || state === 'problem' ? { 'aria-current': 'step' as const } : {})}>\n <span className={cx.marker} aria-hidden=\"true\" data-sf-step-marker>\n {GLYPH[state]}\n </span>\n <span className={cx.label} data-sf-step-label>\n {stepLabel(s)}\n <Hidden>{`, ${m[`stepState.${state}`]}`}</Hidden>\n </span>\n <Time value={s.at} text={date(s.at)} className={cx.time} />\n </li>\n )\n })}\n </ol>\n {p.problem ? (\n <p className={cx.problem} data-sf-progress-problem={typeof p.problem.code === 'string' ? p.problem.code : 'unknown'}>\n {enumText(m, 'problem', p.problem.code)}\n </p>\n ) : null}\n </div>\n )\n}\n\nexport type NextActionBarClassNames = Partial<Record<'root' | 'primary' | 'secondary', string>>\n\nexport type NextActionBarProps = AccountTextProps & {\n /** The order (its `next_action` is read or derived) ... */\n order?: Order\n /** ... or the action itself. */\n action?: NextAction | null\n /**\n * Where each action goes in YOUR store: `pay` → the voucher/checkout, `download_invoice` → your invoice-file route,\n * `request_invoice` / `correct_invoice_data` → your invoice form, `contact_store` → your contact page. `track` and\n * `pickup` default to the action's own `https` link. Return `null` when there is nowhere to go: the bar then renders\n * a button only if `onAction` handles it, and nothing otherwise.\n */\n hrefFor?: (action: NextAction) => string | null | undefined\n /** Click handler for actions with no link (`pay` opening a dialog...). Called with the action. */\n onAction?: (action: NextAction, event: MouseEvent<HTMLElement>) => void\n /** Secondary buttons next to the primary one (copy tracking number, request return...). */\n secondary?: ReactNode\n classNames?: NextActionBarClassNames\n}\n\n/**\n * ONE primary call to action: \"Rastrear envío\", \"Descargar factura\", \"Pagar ahora\"... Links that leave the store carry\n * `rel=\"noopener noreferrer\"` and a hidden \"(opens in a new tab)\". Nothing renders for `none` or an action with no\n * way to act.\n */\nexport function NextActionBar({ order, action, hrefFor, onAction, secondary, classNames: cx = {}, ...text }: NextActionBarProps) {\n const { m } = useAccountText(text)\n const a = action ?? (order ? deriveNextAction(order) : null)\n if (!a || a.kind === 'none') return secondary ? <div className={cx.root} data-sf-action-bar>{secondary}</div> : null\n const fromApi = a.kind === 'track' || a.kind === 'pickup' ? safeTrackingUrl(a.href) : null\n const href = hrefFor?.(a) ?? fromApi\n const external = !!href && /^https:\\/\\//i.test(href)\n const label = enumText(m, 'action', a.kind)\n const common = { className: cx.primary, 'data-sf-action': typeof a.kind === 'string' ? a.kind : 'unknown' } as const\n let primary = null\n if (href) {\n primary = (\n <a href={href} {...common} {...(external ? { target: '_blank', rel: 'noopener noreferrer' } : {})} onClick={onAction ? (e) => onAction(a, e) : undefined}>\n {label}\n {external ? <Hidden> {m['action.newTab']}</Hidden> : null}\n </a>\n )\n } else if (onAction) {\n primary = (\n <button type=\"button\" {...common} onClick={(e) => onAction(a, e)}>\n {label}\n </button>\n )\n }\n if (!primary && !secondary) return null\n return (\n <div className={cx.root} role=\"group\" aria-label={m['action.label']} data-sf-action-bar>\n {primary}\n {secondary}\n </div>\n )\n}\n","/**\n * \"Mis pedidos\": a list of order cards with status in words, a compact progress, the shipment summary, the total and\n * the one next action. Headless (`data-sf-order*`, `classNames`). Every state of the list is a real state of the\n * component: `loading` (fixed-height skeletons, no layout shift), `error` (recoverable, says purchases are safe),\n * `empty` (useful text and your own call to action) and `ready`.\n */\nimport type { NextAction, Order } from '@asteby/storefront'\nimport { nextAction as deriveNextAction, orderProgress as deriveProgress, isTestShipment } from '@asteby/storefront'\nimport type { ReactNode } from 'react'\nimport { enumText, fill } from './orders-messages.js'\nimport { OrderProductsStack } from './order-lines.js'\nimport { Hidden, Time, moneyText, plural, str, useAccountText, type AccountTextProps } from './orders-ui.js'\nimport { NextActionBar, OrderProgress, OrderStatusBadge, type NextActionBarClassNames, type OrderProgressClassNames } from './progress.js'\n\nexport type OrderCardClassNames = Partial<Record<'root' | 'header' | 'products' | 'number' | 'link' | 'meta' | 'badge' | 'summary' | 'shipment' | 'footer' | 'total' | 'actions', string>> & {\n progress?: OrderProgressClassNames\n action?: NextActionBarClassNames\n}\n\nexport type OrderCardProps = AccountTextProps & {\n order: Order\n /** Where the order detail lives in your store. The whole card is reached through the number's link. */\n orderHref: (order: Order) => string\n /** Where each next action goes (see `NextActionBar.hrefFor`). */\n actionHref?: (action: NextAction, order: Order) => string | null | undefined\n onAction?: (action: NextAction, order: Order) => void\n /** Heading level of the order number (default 3). */\n headingLevel?: 2 | 3 | 4\n classNames?: OrderCardClassNames\n}\n\nexport function OrderCard({ order, orderHref, actionHref, onAction, headingLevel = 3, classNames: cx = {}, ...text }: OrderCardProps) {\n const { m, date, locale } = useAccountText(text)\n const Heading = `h${headingLevel}` as 'h3'\n const progress = deriveProgress(order)\n const items = (Array.isArray(order.lines) ? order.lines : []).reduce((n, l) => n + (Number.isFinite(l?.quantity) ? l.quantity : 0), 0)\n const summary = order.shipments_summary && typeof order.shipments_summary === 'object' ? order.shipments_summary : null\n const shipments = Array.isArray(order.shipments) ? order.shipments : []\n const showShipment = !!summary && typeof summary.count === 'number' && summary.count > 0 && !(shipments.length > 0 && shipments.every(isTestShipment)) && !['pending_payment', 'cancelled', 'refunded'].includes(progress.stage)\n const action = deriveNextAction(order)\n const total = moneyText(order.total, locale)\n const carrier = summary ? str(summary.carrier) : null\n return (\n <article className={cx.root} data-sf-order data-sf-order-status={progress.stage} data-sf-order-id={order.id}>\n <header className={cx.header}>\n <Heading className={cx.number} data-sf-order-number>\n <a href={orderHref(order)} className={cx.link} data-sf-order-link>\n {fill(m['order.number'], { number: str(order.number) ?? (str(order.id) ?? '').slice(0, 8) })}\n </a>\n </Heading>\n <OrderStatusBadge progress={progress} {...text} {...(cx.badge ? { className: cx.badge } : {})} />\n </header>\n <p className={cx.meta} data-sf-order-meta>\n <Time value={order.created_at} text={date(order.created_at) ? fill(m['order.placed'], { date: date(order.created_at)! }) : null} />\n {items > 0 ? <> · {plural(m, 'order.items', items)}</> : null}\n </p>\n {Array.isArray(order.lines) && order.lines.length > 0 ? (\n <div className={cx.products} data-sf-order-products>\n <OrderProductsStack order={order} {...text} />\n </div>\n ) : null}\n <div className={cx.summary} data-sf-order-summary>\n <OrderProgress progress={progress} variant=\"compact\" {...text} {...(cx.progress ? { classNames: cx.progress } : {})} />\n {showShipment ? (\n <p className={cx.shipment} data-sf-order-shipment>\n {carrier ? <>{carrier} · </> : null}\n {enumText(m, 'shipment.status', summary!.status)}\n </p>\n ) : null}\n </div>\n <div className={cx.footer}>\n {total ? (\n <p className={cx.total} data-sf-order-total>\n <span>{m['order.total']}: </span>\n <strong>{total}</strong>\n </p>\n ) : null}\n <NextActionBar\n action={action}\n {...text}\n hrefFor={(a) => actionHref?.(a, order) ?? undefined}\n {...(onAction ? { onAction: (a: NextAction) => onAction(a, order) } : {})}\n classNames={{ ...(cx.actions ? { root: cx.actions } : {}), ...(cx.action ?? {}) }}\n />\n </div>\n </article>\n )\n}\n\nexport type OrderListClassNames = Partial<Record<'root' | 'list' | 'item' | 'skeleton' | 'empty' | 'emptyTitle' | 'emptyBody' | 'emptyGuest' | 'error' | 'retry' | 'more', string>> & {\n card?: OrderCardClassNames\n}\n\nexport type OrderListProps = AccountTextProps &\n Pick<OrderCardProps, 'orderHref' | 'actionHref' | 'onAction' | 'headingLevel'> & {\n orders?: readonly Order[] | null\n status?: 'loading' | 'ready' | 'error'\n /** Skeleton cards while loading (default 3). */\n skeletons?: number\n onRetry?: () => void\n hasMore?: boolean\n loadingMore?: boolean\n onLoadMore?: () => void\n /** Your call to action in the empty state (\"Ver catálogo\"). */\n emptyAction?: ReactNode\n /** Show \"bought as a guest? verify your email\" in the empty state (default true). */\n guestHint?: boolean\n classNames?: OrderListClassNames\n }\n\nexport function OrderList({ orders, status = 'ready', skeletons = 3, onRetry, hasMore, loadingMore, onLoadMore, emptyAction, guestHint = true, orderHref, actionHref, onAction, headingLevel = 3, classNames: cx = {}, ...text }: OrderListProps) {\n const { m } = useAccountText(text)\n const list = (Array.isArray(orders) ? orders : []).filter((o): o is Order => !!o && typeof o === 'object' && typeof o.id === 'string')\n\n if (status === 'loading' && list.length === 0) {\n return (\n <div className={cx.root} role=\"status\" aria-busy=\"true\" data-sf-orders data-sf-orders-state=\"loading\">\n <Hidden>{m['order.loading']}</Hidden>\n <ul className={cx.list} aria-hidden=\"true\">\n {Array.from({ length: Math.max(1, skeletons) }, (_, i) => (\n <li key={i} className={cx.skeleton} data-sf-skeleton />\n ))}\n </ul>\n </div>\n )\n }\n if (status === 'error' && list.length === 0) {\n return (\n <div className={cx.root} data-sf-orders data-sf-orders-state=\"error\">\n <div className={cx.error} role=\"alert\" data-sf-orders-error>\n <p>{m['order.error']}</p>\n {onRetry ? (\n <button type=\"button\" className={cx.retry} onClick={onRetry} data-sf-retry>\n {m['order.retry']}\n </button>\n ) : null}\n </div>\n </div>\n )\n }\n if (list.length === 0) {\n return (\n <div className={cx.root} data-sf-orders data-sf-orders-state=\"empty\">\n <div className={cx.empty} data-sf-orders-empty>\n <p className={cx.emptyTitle}>\n <strong>{m['order.emptyTitle']}</strong>\n </p>\n <p className={cx.emptyBody}>{m['order.emptyBody']}</p>\n {guestHint ? (\n <p className={cx.emptyGuest} data-sf-orders-guest-hint>\n {m['order.emptyGuest']}\n </p>\n ) : null}\n {emptyAction}\n </div>\n </div>\n )\n }\n return (\n <div className={cx.root} data-sf-orders data-sf-orders-state=\"ready\">\n <ul className={cx.list} aria-label={m['order.listLabel']} data-sf-orders-list>\n {list.map((o) => (\n <li key={o.id} className={cx.item}>\n <OrderCard order={o} orderHref={orderHref} {...(actionHref ? { actionHref } : {})} {...(onAction ? { onAction } : {})} headingLevel={headingLevel} {...text} {...(cx.card ? { classNames: cx.card } : {})} />\n </li>\n ))}\n </ul>\n {status === 'error' ? (\n <div className={cx.error} role=\"alert\" data-sf-orders-error>\n <p>{m['order.error']}</p>\n {onRetry ? (\n <button type=\"button\" className={cx.retry} onClick={onRetry} data-sf-retry>\n {m['order.retry']}\n </button>\n ) : null}\n </div>\n ) : null}\n {hasMore && onLoadMore ? (\n <button type=\"button\" className={cx.more} onClick={onLoadMore} disabled={loadingMore} aria-disabled={loadingMore || undefined} data-sf-orders-more>\n {loadingMore ? m['order.loadingMore'] : m['order.loadMore']}\n </button>\n ) : null}\n </div>\n )\n}\n","/**\n * One shipment as the buyer sees it: carrier, status in words, tracking number (copy) and `https` link, promised date\n * and the carrier's events newest first. Headless (`data-sf-shipment-*`, `classNames`). Privacy rules enforced here\n * too, not only on the server: only a RETURN shipment may show its label link, a sandbox (`test_mode`) shipment is\n * hidden or marked \"test\" (never shown with a tracking number or link as if it were real), links must be `https`.\n *\n * The map is NOT here: `renderMap` is the slot the map component fills (it receives the approximate points; the event\n * list below is always rendered and is the text equivalent of the map).\n */\nimport type { Shipment, ShipmentMap } from '@asteby/storefront'\nimport { isTestShipment, safeTrackingUrl, sortTrackingEvents } from '@asteby/storefront'\nimport { useId, useState, type ReactNode } from 'react'\nimport { enumText } from './orders-messages.js'\nimport { CopyButton, Hidden, Time, str, useAccountText, type AccountTextProps } from './orders-ui.js'\n\nexport type ShipmentCardClassNames = Partial<\n Record<'root' | 'header' | 'carrier' | 'status' | 'meta' | 'number' | 'actions' | 'link' | 'copy' | 'events' | 'event' | 'toggle' | 'empty' | 'test' | 'map', string>\n>\n\n/** What `renderMap` receives. */\nexport type ShipmentMapSlotProps = { shipment: Shipment; map: ShipmentMap }\n\nexport type ShipmentCardProps = AccountTextProps & {\n shipment: Shipment\n /** A sandbox shipment: `hide` (default) renders nothing; `mark` shows it labelled \"test\", without number or link. */\n testMode?: 'hide' | 'mark'\n /** How many events show before \"Show all\". Default 3. */\n eventsPreview?: number\n /** The carrier's logo/brand mark (e.g. `<BrandMark brand={shipment.carrier_logo_key} />` from `/checkout`); kept out of this bundle on purpose. */\n renderCarrierMark?: (shipment: Shipment) => ReactNode\n /** Slot for the map (F7). Called only when the shipment has a `map`. */\n renderMap?: (props: ShipmentMapSlotProps) => ReactNode\n /** Heading level of the title (default 3). */\n headingLevel?: 2 | 3 | 4 | 5\n classNames?: ShipmentCardClassNames\n}\n\nexport function ShipmentCard({ shipment, testMode = 'hide', eventsPreview = 3, renderCarrierMark, renderMap, headingLevel = 3, classNames: cx = {}, ...text }: ShipmentCardProps) {\n const { m, t, date } = useAccountText(text)\n const [open, setOpen] = useState(false)\n const id = useId().replace(/:/g, '')\n if (!shipment || typeof shipment !== 'object') return null\n const test = isTestShipment(shipment)\n if (test && testMode === 'hide') return null\n\n const isReturn = shipment.kind === 'return'\n const Heading = `h${headingLevel}` as 'h3'\n const SubHeading = `h${headingLevel + 1}` as 'h4'\n const carrier = str(shipment.carrier)\n const service = test ? null : str(shipment.service)\n const number = test ? null : str(shipment.tracking_number)\n const trackUrl = test ? null : safeTrackingUrl(shipment.tracking_url)\n const labelUrl = isReturn && !test ? safeTrackingUrl(shipment.label_url) : null\n const events = test ? [] : sortTrackingEvents(shipment.events)\n const shown = open ? events : events.slice(0, Math.max(1, eventsPreview))\n const status = test ? m['shipment.preparing'] : enumText(m, 'shipment.status', shipment.status)\n const promised = !test && shipment.status !== 'delivered' ? date(shipment.promised_by) : null\n const delivered = !test ? date(shipment.delivered_at) : null\n const shipped = !test && !delivered ? date(shipment.shipped_at) : null\n const titleId = `sf-shp-${id}`\n const eventsId = `sf-shp-ev-${id}`\n\n return (\n <article className={cx.root} aria-labelledby={titleId} data-sf-shipment data-sf-shipment-status={test ? 'test' : typeof shipment.status === 'string' ? shipment.status : 'unknown'} data-sf-shipment-kind={isReturn ? 'return' : 'outbound'} {...(test ? { 'data-sf-test': '' } : {})}>\n <header className={cx.header} data-sf-shipment-header>\n {renderCarrierMark && !test ? <span data-sf-shipment-mark>{renderCarrierMark(shipment)}</span> : null}\n <Heading id={titleId} className={cx.carrier} data-sf-shipment-title>\n {carrier && !test ? (\n <span data-sf-shipment-eyebrow>\n {m['shipment.carrier']}\n <Hidden>: </Hidden>\n </span>\n ) : null}\n {isReturn ? m['shipment.return'] : (carrier ?? m['shipment.title'])}\n {isReturn && carrier ? <> · {carrier}</> : null}\n </Heading>\n <span className={cx.status} data-sf-shipment-state>\n {status}\n </span>\n {test ? (\n <span className={cx.test} data-sf-shipment-test>\n {m['shipment.test']}\n </span>\n ) : null}\n </header>\n {test ? (\n <p className={cx.meta} data-sf-shipment-test-note>\n {m['shipment.testNote']}\n </p>\n ) : null}\n {service ? (\n <p className={cx.meta} data-sf-shipment-service>\n {m['shipment.service']}: {service}\n </p>\n ) : null}\n {number ? (\n <p className={cx.number} data-sf-shipment-number>\n <span>{m['shipment.number']}: </span>\n <code>{number}</code>{' '}\n <CopyButton value={number} label={m['shipment.copy']} copiedLabel={m['shipment.copied']} failedLabel={m['shipment.copyFailed']} ariaLabel={`${m['shipment.copy']} ${m['shipment.number']}`} className={cx.copy} data-sf-copy=\"tracking\" />\n </p>\n ) : null}\n {promised || delivered || shipped ? (\n <p className={cx.meta} data-sf-shipment-dates>\n {delivered ? (\n <Time value={shipment.delivered_at} text={t('shipment.delivered', { date: delivered })} />\n ) : promised ? (\n <Time value={shipment.promised_by} text={t('shipment.promised', { date: promised })} />\n ) : (\n <Time value={shipment.shipped_at} text={t('shipment.shipped', { date: shipped ?? '' })} />\n )}\n </p>\n ) : null}\n {trackUrl || labelUrl ? (\n <p className={cx.actions} data-sf-shipment-actions>\n {trackUrl ? (\n <a href={trackUrl} target=\"_blank\" rel=\"noopener noreferrer\" className={cx.link} data-sf-shipment-track>\n {carrier ? t('shipment.track', { carrier }) : m['shipment.trackGeneric']}\n <Hidden> {m['action.newTab']}</Hidden>\n </a>\n ) : null}\n {labelUrl ? (\n <a href={labelUrl} target=\"_blank\" rel=\"noopener noreferrer\" className={cx.link} data-sf-shipment-label>\n {m['shipment.returnLabel']}\n <Hidden> {m['action.newTab']}</Hidden>\n </a>\n ) : null}\n </p>\n ) : null}\n {renderMap && !test && shipment.map ? (\n <div className={cx.map} data-sf-shipment-map-slot>\n {renderMap({ shipment, map: shipment.map })}\n </div>\n ) : null}\n {!test ? (\n events.length === 0 ? (\n <p className={cx.empty} data-sf-shipment-empty>\n {m['shipment.noEvents']}\n </p>\n ) : (\n <div data-sf-shipment-events-wrap>\n <SubHeading className={cx.meta} data-sf-shipment-events-title>\n {m['shipment.events']}\n </SubHeading>\n <ol className={cx.events} id={eventsId} data-sf-shipment-events>\n {shown.map((e, i) => {\n const description = str(e.description)\n const location = str(e.location)\n return (\n <li key={`${str(e.id) ?? ''}-${i}`} className={cx.event} data-sf-event-status={typeof e.status === 'string' ? e.status : 'unknown'}>\n <span data-sf-event-state>{enumText(m, 'shipment.status', e.status)}</span>\n {description ? <span data-sf-event-description> · {description}</span> : null}\n {location ? <span data-sf-event-location> · {location}</span> : null}{' '}\n <Time value={e.occurred_at} text={date(e.occurred_at, 'datetime')} />\n </li>\n )\n })}\n </ol>\n {events.length > Math.max(1, eventsPreview) ? (\n <button type=\"button\" className={cx.toggle} aria-expanded={open} aria-controls={eventsId} onClick={() => setOpen((v) => !v)} data-sf-shipment-toggle>\n {open ? m['shipment.showLess'] : t('shipment.showAll', { count: events.length })}\n </button>\n ) : null}\n </div>\n )\n ) : null}\n </article>\n )\n}\n","/**\n * The invoices and credit notes of an order. Headless (`data-sf-invoice-*`, `classNames`). A credit note is listed\n * under the invoice it corrects. Downloads go ONLY through YOUR authenticated route (`fileHref`, backed by\n * `invoiceFileResponse` in `/account/server`) or a handler (`onDownload`): this component never prints a link it did\n * not get from the store, so a PAC URL can never end up in the page. An invoice from a sandbox PAC (`test_mode`) is\n * hidden or marked \"test, not valid\" and gets no download.\n *\n * With no documents it hands the order's `invoice` summary (not requested, needs data, being generated...) to\n * `renderSummary`; the usual one is `(s) => <InvoiceStatusCard invoice={s} ... />` from `@asteby/storefront-react/fiscal`\n * (a slot, so this bundle does not carry the fiscal texts for stores that never request invoices from here).\n */\nimport type { InvoiceDoc, InvoiceFileKind, InvoiceSummary } from '@asteby/storefront'\nimport { groupInvoiceDocs, isTestInvoice } from '@asteby/storefront'\nimport { useId, type ReactNode } from 'react'\nimport { enumText, fill } from './orders-messages.js'\nimport { Hidden, Time, moneyText, str, useAccountText, type AccountTextProps } from './orders-ui.js'\n\nexport type InvoiceListClassNames = Partial<\n Record<'root' | 'title' | 'group' | 'doc' | 'status' | 'meta' | 'note' | 'actions' | 'download' | 'creditNotes' | 'test' | 'error' | 'retry' | 'empty', string>\n>\n\nexport type InvoiceListProps = AccountTextProps & {\n invoices?: readonly InvoiceDoc[] | null\n /** The order's invoice summary, handed to `renderSummary` when there are no documents. */\n summary?: InvoiceSummary | null\n /** Draws the summary (request, needs data, being generated...): `(s) => <InvoiceStatusCard invoice={s} requestHref=\"/factura\" />`. */\n renderSummary?: (summary: InvoiceSummary) => ReactNode\n /** Your authenticated download route for a file of a document, e.g. `/cuenta/pedidos/${order}/facturas/${doc.id}.${kind}`. */\n fileHref?: (doc: InvoiceDoc, kind: InvoiceFileKind) => string | null | undefined\n /** Alternative to `fileHref`: a handler (opens your own download flow). */\n onDownload?: (doc: InvoiceDoc, kind: InvoiceFileKind) => void\n /** The server could not read the invoices (`order.degraded` has `invoices`): shows a recoverable error. */\n degraded?: boolean\n onRetry?: () => void\n /** A sandbox invoice: `mark` (default) shows it labelled and with no download; `hide` removes it. */\n testMode?: 'hide' | 'mark'\n /** Money formatter is `Intl`; the order's currency comes with each total. */\n headingLevel?: 2 | 3 | 4\n /** Content under the list (e.g. a \"Request invoice\" button). */\n children?: ReactNode\n classNames?: InvoiceListClassNames\n}\n\nconst known = (s: unknown): s is 'issued' | 'pending' | 'cancelled' | 'error' => s === 'issued' || s === 'pending' || s === 'cancelled' || s === 'error'\n\nexport function InvoiceList({ invoices, summary, renderSummary, fileHref, onDownload, degraded, onRetry, testMode = 'mark', headingLevel = 3, children, classNames: cx = {}, ...text }: InvoiceListProps) {\n const { m, t, date, locale } = useAccountText(text)\n const Heading = `h${headingLevel}` as 'h3'\n const titleId = `sf-invoices-${useId().replace(/:/g, '')}`\n const all = (Array.isArray(invoices) ? invoices : []).filter((d): d is InvoiceDoc => !!d && typeof d === 'object' && typeof d.id === 'string')\n const docs = testMode === 'hide' ? all.filter((d) => !isTestInvoice(d)) : all\n const { groups, orphans } = groupInvoiceDocs(docs)\n\n const renderDoc = (doc: InvoiceDoc, parent?: InvoiceDoc) => {\n const test = isTestInvoice(doc)\n const status = known(doc.status) ? doc.status : 'unknown'\n const kindLabel = doc.kind === 'credit_note' ? m['invoice.creditNote'] : m['invoice.invoice']\n const docName = (d: InvoiceDoc) => [str(d.series), str(d.folio_number)].filter(Boolean).join('-')\n const name = docName(doc)\n const folio = str(doc.folio)\n const canDownload = status === 'issued' && !test\n const total = moneyText(doc.total, locale)\n const link = (kind: InvoiceFileKind) => {\n const label = kind === 'pdf' ? m['invoice.pdf'] : m['invoice.xml']\n const aria = fill(m['invoice.downloadOf'], { action: label, kind: kindLabel.toLowerCase(), name: name || folio || '' }).replace(/\\s+,/g, ',').replace(/,\\s*$/, '').trim()\n const href = fileHref?.(doc, kind)\n if (href) {\n return (\n <a key={kind} href={href} download className={cx.download} aria-label={aria} data-sf-invoice-download={kind}>\n {label}\n </a>\n )\n }\n if (onDownload) {\n return (\n <button key={kind} type=\"button\" className={cx.download} aria-label={aria} onClick={() => onDownload(doc, kind)} data-sf-invoice-download={kind}>\n {label}\n </button>\n )\n }\n return null\n }\n return (\n <li key={doc.id} className={cx.doc} data-sf-invoice-doc data-sf-invoice-kind={doc.kind === 'credit_note' ? 'credit_note' : 'invoice'} data-sf-invoice-status={status}>\n <p className={cx.status} data-sf-invoice-heading>\n <strong>{kindLabel}</strong>\n {name ? <> {name}</> : null} · <span data-sf-invoice-state>{enumText(m, 'invoice.status', doc.status)}</span>\n {test ? (\n <>\n {' '}\n <span className={cx.test} data-sf-invoice-test>\n {m['invoice.test']}\n </span>\n </>\n ) : null}\n </p>\n {parent ? (\n <p className={cx.meta} data-sf-invoice-parent>\n {fill(m['invoice.creditNoteOf'], { folio: docName(parent) || str(parent.folio) || '' }).trim()}\n </p>\n ) : null}\n {folio && !test ? (\n <p className={cx.meta} data-sf-invoice-folio>\n {m['invoice.folio']}: <code>{folio}</code>\n </p>\n ) : null}\n <p className={cx.meta}>\n {doc.issued_at ? <Time value={doc.issued_at} text={fill(m['invoice.issued'], { date: date(doc.issued_at) ?? '' })} /> : null}\n {total ? <> · {m['invoice.total']}: {total}</> : null}\n </p>\n {status === 'pending' || status === 'error' || status === 'cancelled' ? (\n <p className={cx.note} data-sf-invoice-note>\n {m[`invoice.statusNote.${status}`]}\n </p>\n ) : null}\n {canDownload && (fileHref || onDownload) ? (\n <p className={cx.actions} data-sf-invoice-actions>\n {link('pdf')}\n {link('xml')}\n </p>\n ) : null}\n </li>\n )\n }\n\n const hasDocs = groups.length + orphans.length > 0\n return (\n <section className={cx.root} aria-labelledby={titleId} data-sf-invoices>\n <Heading id={titleId} className={cx.title}>\n {m['invoice.title']}\n </Heading>\n {degraded ? (\n <div className={cx.error} role=\"alert\" data-sf-section-error=\"invoices\">\n <p>{m['section.error']}</p>\n {onRetry ? (\n <button type=\"button\" className={cx.retry} onClick={onRetry} data-sf-retry>\n {m['section.retry']}\n <Hidden> {m['invoice.title']}</Hidden>\n </button>\n ) : null}\n </div>\n ) : hasDocs ? (\n <ul data-sf-invoice-list>\n {groups.map(({ invoice, creditNotes }) => (\n <li key={invoice.id} className={cx.group} data-sf-invoice-group>\n <ul>{renderDoc(invoice)}</ul>\n {creditNotes.length ? (\n <ul className={cx.creditNotes} data-sf-invoice-credit-notes>\n {creditNotes.map((nc) => renderDoc(nc, invoice))}\n </ul>\n ) : null}\n </li>\n ))}\n {orphans.map((nc) => (\n <li key={nc.id} className={cx.group} data-sf-invoice-group>\n <ul>{renderDoc(nc)}</ul>\n </li>\n ))}\n </ul>\n ) : summary && renderSummary ? (\n <div data-sf-invoice-summary>{renderSummary(summary)}</div>\n ) : (\n <p className={cx.empty} data-sf-invoice-empty>\n {m['invoice.none']}\n </p>\n )}\n {children}\n </section>\n )\n}\n","/**\n * Cash voucher of a payment that is still waiting (OXXO, SPEI, deposit): reference / CLABE with a copy button, the\n * Code 128 barcode drawn as SVG, the expiry, and print / download. Ported from the ProtekAuto store (#84) so no store\n * keeps its own copy. Headless (`data-sf-voucher-*`, `classNames`), texts es/en.\n *\n * Print / download: pass `voucherHref` to serve the voucher from YOUR server route (`pendingVoucherResponse` in\n * `/account/server`, the right choice for the account page: ownership is re-checked on each request), or leave it out\n * and the card builds the document in the browser from the data it already has (thank-you page: guests have no\n * account to go back to). The document generator is a separate chunk, fetched only when the buyer taps.\n */\nimport type { PendingPayment } from '@asteby/storefront'\nimport { useId, useMemo, type ReactNode } from 'react'\nimport { enumText, fill } from './orders-messages.js'\nimport { CopyButton, Hidden, Time, moneyText, useAccountText, type AccountTextProps } from './orders-ui.js'\nimport { barcodeGeometry, voucherOf, type BarcodeFormat } from './voucher.js'\n\nexport type BarcodeProps = { value: string; label: string; height?: number; className?: string; /** Symbology (default Code 128). */ format?: BarcodeFormat }\n\n/** Code 128 as an inline `<svg role=\"img\">` (no HTML injection). `null` when the value cannot be encoded. */\nexport function Barcode({ value, label, height = 56, className, format }: BarcodeProps) {\n const g = useMemo(() => barcodeGeometry(value, { height, ...(format ? { format } : {}) }), [value, height, format])\n if (!g) return null\n return (\n <svg className={className} viewBox={`0 0 ${g.width} ${g.height}`} width={g.width} height={g.height} role=\"img\" aria-label={label} shapeRendering=\"crispEdges\" fill=\"#000\" data-sf-voucher-barcode-svg>\n {g.rects.map((r) => (\n <rect key={r.x} x={r.x} y={0} width={r.w} height={g.height} />\n ))}\n </svg>\n )\n}\n\nexport type PendingPaymentCardClassNames = Partial<\n Record<'root' | 'header' | 'method' | 'badge' | 'field' | 'label' | 'value' | 'barcode' | 'expiry' | 'total' | 'note' | 'actions' | 'primary' | 'secondary', string>\n>\n\nexport type PendingPaymentCardProps = AccountTextProps & {\n payment: PendingPayment\n /**\n * Server route that serves the voucher: `(payment, { download, format })`. The \"view and print\" link asks for\n * `{ download: false, format: 'html' }`, the download link for `{ download: true, format: 'pdf' }` (a store whose\n * route predates `format` keeps serving the HTML attachment). Without it the browser builds the documents.\n */\n voucherHref?: (payment: PendingPayment, opts: { download: boolean; format: 'html' | 'pdf' }) => string\n /** Store name printed on the document built in the browser. */\n shopName?: string\n headingLevel?: 2 | 3 | 4\n classNames?: PendingPaymentCardClassNames\n children?: ReactNode\n}\n\nasync function downloadPdf(payment: PendingPayment, opts: { locale: string; shopName?: string | undefined; timeZone?: string | undefined }) {\n const v = voucherOf(payment)\n if (!v) return\n const { renderVoucherPdf } = await import('./voucher-pdf.js')\n const bytes = renderVoucherPdf(v, { locale: opts.locale, ...(opts.shopName ? { shopName: opts.shopName } : {}), ...(opts.timeZone ? { timeZone: opts.timeZone } : {}) })\n const url = URL.createObjectURL(new Blob([bytes as BlobPart], { type: 'application/pdf' }))\n const a = document.createElement('a')\n a.href = url\n a.download = 'ficha-de-pago.pdf'\n a.click()\n setTimeout(() => URL.revokeObjectURL(url), 60_000)\n}\n\nasync function openDocument(payment: PendingPayment, mode: 'print' | 'download', opts: { locale: string; shopName?: string | undefined; timeZone?: string | undefined }) {\n const v = voucherOf(payment)\n if (!v) return\n const { renderVoucherDocument } = await import('./voucher-document.js')\n const html = renderVoucherDocument(v, { locale: opts.locale, ...(opts.shopName ? { shopName: opts.shopName } : {}), ...(opts.timeZone ? { timeZone: opts.timeZone } : {}), printButton: mode === 'print', autoPrint: mode === 'print' })\n const url = URL.createObjectURL(new Blob([html], { type: 'text/html;charset=utf-8' }))\n const download = () => {\n const a = document.createElement('a')\n a.href = url\n a.download = 'ficha-de-pago.html'\n a.click()\n }\n if (mode === 'print') {\n // (`noopener` in the features would make `open` return null, which is how a blocked pop-up is told apart.)\n const w = window.open(url, '_blank')\n if (w) w.opener = null\n else download()\n } else download()\n setTimeout(() => URL.revokeObjectURL(url), 60_000)\n}\n\nexport function PendingPaymentCard({ payment, voucherHref, shopName, headingLevel = 3, classNames: cx = {}, children, ...text }: PendingPaymentCardProps) {\n const { m, t, date, locale, timeZone } = useAccountText(text)\n const titleId = `sf-voucher-${useId().replace(/:/g, '')}`\n const v = voucherOf(payment)\n if (!v) return null\n const expired = payment.status === 'expired'\n const Heading = `h${headingLevel}` as 'h3'\n const code = v.barcode\n const methodLabel = enumText(m, 'pending.method', v.method?.toLowerCase())\n const total = moneyText(payment.total, locale) ?? moneyText(v.amount, locale)\n const copyValue = v.reference ?? v.clabe\n const expires = date(v.expires_at ?? payment.expires_at, 'datetime')\n\n return (\n <article className={cx.root} aria-labelledby={titleId} data-sf-voucher data-sf-voucher-status={expired ? 'expired' : 'pending_payment'}>\n <header className={cx.header}>\n <Heading id={titleId} className={cx.method} data-sf-voucher-method>\n {methodLabel}\n </Heading>\n <span className={cx.badge} data-sf-voucher-badge data-sf-tone={expired ? 'muted' : 'current'}>\n {expired ? m['pending.expired'] : m['pending.waiting']}\n </span>\n </header>\n {v.reference ? (\n <div className={cx.field} data-sf-voucher-reference>\n <p className={cx.label}>{m['pending.reference']}</p>\n <p className={cx.value} data-sf-voucher-value>\n {v.reference}\n </p>\n </div>\n ) : null}\n {v.beneficiary ? (\n <div className={cx.field} data-sf-voucher-beneficiary>\n <p className={cx.label}>{m['pending.beneficiary']}</p>\n <p className={cx.value} data-sf-voucher-value>\n {v.beneficiary}\n </p>\n </div>\n ) : null}\n {v.bank ? (\n <div className={cx.field} data-sf-voucher-bank>\n <p className={cx.label}>{m['pending.bank']}</p>\n <p className={cx.value} data-sf-voucher-value>\n {v.bank}\n </p>\n </div>\n ) : null}\n {v.clabe ? (\n <div className={cx.field} data-sf-voucher-clabe>\n <p className={cx.label}>{m['pending.clabe']}</p>\n <p className={cx.value} data-sf-voucher-value>\n {v.clabe}\n </p>\n </div>\n ) : null}\n {v.barcode_text && !expired ? (\n <div className={cx.field} data-sf-voucher-code>\n <p className={cx.label}>{m['pending.code']}</p>\n <p className={cx.value} data-sf-voucher-value>\n {v.barcode_text}\n </p>\n </div>\n ) : null}\n {code && !expired ? (\n <div className={cx.barcode} data-sf-voucher-barcode>\n <Barcode value={code} format={v.barcode_format ?? 'code128'} label={fill(m['pending.barcode'], { code })} />\n </div>\n ) : null}\n {expires ? (\n <p className={cx.expiry} data-sf-voucher-expiry>\n <Time value={v.expires_at ?? payment.expires_at} text={fill(m[expired ? 'pending.expiredOn' : 'pending.expires'], { date: expires })} />\n </p>\n ) : null}\n {total ? (\n <p className={cx.total} data-sf-voucher-total>\n <span>{m['pending.total']}: </span>\n <strong>{total}</strong>\n </p>\n ) : null}\n {expired ? (\n <p className={cx.note} data-sf-voucher-expired-note>\n {m['pending.expiredNote']}\n </p>\n ) : (\n <div className={cx.actions} data-sf-voucher-actions>\n {voucherHref ? (\n <>\n <a href={voucherHref(payment, { download: false, format: 'html' })} target=\"_blank\" rel=\"noopener\" className={cx.primary} data-sf-voucher-print>\n {m['pending.print']}\n <Hidden> {m['action.newTab']}</Hidden>\n </a>\n <a href={voucherHref(payment, { download: true, format: 'pdf' })} download className={cx.secondary} data-sf-voucher-download>\n {m['pending.download']}\n </a>\n </>\n ) : (\n <>\n <button type=\"button\" className={cx.primary} onClick={() => void openDocument(payment, 'print', { locale, shopName, timeZone })} data-sf-voucher-print>\n {m['pending.print']}\n </button>\n <button type=\"button\" className={cx.secondary} onClick={() => void downloadPdf(payment, { locale, shopName, timeZone })} data-sf-voucher-download>\n {m['pending.download']}\n </button>\n </>\n )}\n {v.ticket_url ? (\n <a href={v.ticket_url} target=\"_blank\" rel=\"noopener noreferrer\" className={cx.secondary} data-sf-voucher-ticket>\n {m['pending.ticket']}\n <Hidden> {m['action.newTab']}</Hidden>\n </a>\n ) : null}\n {copyValue ? (\n <CopyButton value={copyValue} label={v.reference ? m['pending.copyReference'] : m['pending.copyClabe']} copiedLabel={m['pending.copied']} failedLabel={m['pending.copyFailed']} className={cx.secondary} data-sf-copy=\"voucher\" />\n ) : null}\n </div>\n )}\n {children}\n </article>\n )\n}\n\nexport type PendingPaymentListProps = AccountTextProps &\n Pick<PendingPaymentCardProps, 'voucherHref' | 'shopName' | 'classNames'> & {\n payments?: readonly PendingPayment[] | null\n headingLevel?: 2 | 3\n /** Classes of the section itself. */\n listClassNames?: Partial<Record<'root' | 'title' | 'intro' | 'list' | 'item', string>>\n }\n\n/** \"Pendientes de pago\": the valid vouchers first, then the expired ones. Renders nothing when there are none. */\nexport function PendingPaymentList({ payments, voucherHref, shopName, classNames, listClassNames: lc = {}, headingLevel = 2, ...text }: PendingPaymentListProps) {\n const { m } = useAccountText(text)\n const titleId = `sf-pending-${useId().replace(/:/g, '')}`\n const items = (Array.isArray(payments) ? payments : []).filter((p) => !!voucherOf(p))\n if (items.length === 0) return null\n const sorted = [...items.filter((p) => p.status !== 'expired'), ...items.filter((p) => p.status === 'expired')]\n const Heading = `h${headingLevel}` as 'h2'\n const cardHeading = (headingLevel + 1) as 3 | 4\n return (\n <section className={lc.root} aria-labelledby={titleId} data-sf-pending>\n <Heading id={titleId} className={lc.title}>\n {m['pending.title']}\n </Heading>\n <p className={lc.intro}>{m['pending.intro']}</p>\n <ul className={lc.list}>\n {sorted.map((p) => (\n <li key={p.id} className={lc.item}>\n <PendingPaymentCard payment={p} {...(voucherHref ? { voucherHref } : {})} {...(shopName ? { shopName } : {})} {...(classNames ? { classNames } : {})} headingLevel={cardHeading} {...text} />\n </li>\n ))}\n </ul>\n </section>\n )\n}\n","/**\n * The friendly name of how an order was paid. The server sends `family` (a short enum) and `method_label` (its own\n * text, which an older or English-locale server may fill with the provider's raw word: `Card`, `credit_card`, `oxxo`).\n * The buyer never reads a raw provider key: the label is built from the SDK's texts (es/en), extended by the store.\n */\nimport type { PaymentInfo } from '@asteby/storefront'\nimport type { AccountMessages } from './orders-messages.js'\n\nexport type PaymentMethodKey = 'card' | 'credit_card' | 'debit_card' | 'cash_voucher' | 'oxxo' | 'spei' | 'transfer' | 'bank_deposit' | 'wallet' | 'cash' | 'other'\n\nconst FAMILY: Record<string, PaymentMethodKey> = {\n card: 'card',\n credit_card: 'credit_card',\n debit_card: 'debit_card',\n cash_voucher: 'cash_voucher',\n oxxo: 'oxxo',\n spei: 'spei',\n transfer: 'transfer',\n bank_transfer: 'transfer',\n bank_deposit: 'bank_deposit',\n wallet: 'wallet',\n cash: 'cash',\n other: 'other',\n}\n\n/** Words of a provider's label, in order of specificity (debit before card, oxxo before voucher). */\nconst KEYWORDS: [RegExp, PaymentMethodKey][] = [\n [/oxxo/, 'oxxo'],\n [/spei/, 'spei'],\n [/d[eé]bit/, 'debit_card'],\n [/cr[eé]dit/, 'credit_card'],\n [/card|tarjeta/, 'card'],\n [/deposit|dep[oó]sito/, 'bank_deposit'],\n [/transfer/, 'transfer'],\n [/wallet|billetera|paypal|mercado ?pago|apple ?pay|google ?pay/, 'wallet'],\n [/voucher|ficha|convenience|conveniencia|store|tienda/, 'cash_voucher'],\n [/cash|efectivo/, 'cash'],\n]\n\nconst BRANDS: Record<string, string> = { visa: 'Visa', mastercard: 'Mastercard', master: 'Mastercard', amex: 'American Express', american_express: 'American Express', carnet: 'Carnet', discover: 'Discover' }\n\n/** A label that is a provider key or a bare English word, not a sentence a person wrote (\"Tarjeta Visa terminada en 4242\"). */\nconst RAW = /^[A-Za-z0-9_.:-]+(?: [A-Za-z0-9_.:-]+)?$/\n\n/** The method family of a payment (`card`, `oxxo`, `spei`...), for the store's own icon or styling; `null` when unknown. */\nexport function paymentMethodKey(p: PaymentInfo): PaymentMethodKey | null {\n return keyOf(p)\n}\n\nfunction keyOf(p: PaymentInfo): PaymentMethodKey | null {\n const fam = typeof p.family === 'string' ? p.family.toLowerCase() : ''\n const byLabel = (): PaymentMethodKey | null => {\n const label = typeof p.method_label === 'string' ? p.method_label.toLowerCase().replace(/[_-]+/g, ' ') : ''\n for (const [re, key] of KEYWORDS) if (re.test(label)) return key\n return null\n }\n if (fam && fam !== 'other' && FAMILY[fam]) {\n // `card` family + a label that says credit/debit is more precise.\n const l = byLabel()\n return fam === 'card' && (l === 'credit_card' || l === 'debit_card') ? l : FAMILY[fam]!\n }\n return byLabel() ?? (fam === 'other' ? 'other' : null)\n}\n\nexport type PaymentLabelOptions = {\n /** The store's own words for a payment (by organization, provider...). Return a string to use it; `null`/`undefined` falls through to the SDK's. */\n override?: (payment: PaymentInfo) => string | null | undefined\n}\n\n/**\n * `Tarjeta Visa •••• 1234`, `Efectivo con ficha (OXXO…)`, `Transferencia SPEI`… in the buyer's language. A label the\n * server already wrote as a sentence (it carries its own detail) is kept; a raw key becomes a readable text and never\n * shows as it came; with nothing to go on, a neutral \"Medio de pago\".\n */\nexport function paymentLabel(p: PaymentInfo, m: AccountMessages, options: PaymentLabelOptions = {}): string {\n const custom = options.override?.(p)\n if (typeof custom === 'string' && custom.trim()) return custom.trim()\n const raw = typeof p.method_label === 'string' ? p.method_label.trim() : ''\n const key = keyOf(p)\n const human = raw && !RAW.test(raw)\n // A server sentence with its own detail wins (and the structured brand/last4 are not repeated on top of it).\n if (human && /\\d{4}/.test(raw)) return raw\n if (key) {\n const base = m[`payment.method.${key}` as const]\n if (key !== 'card' && key !== 'credit_card' && key !== 'debit_card') return human && key === 'other' ? raw : base\n const brandRaw = typeof p.brand === 'string' ? p.brand.trim() : ''\n const brand = brandRaw ? (BRANDS[brandRaw.toLowerCase().replace(/[ -]/g, '_')] ?? brandRaw) : ''\n const last4 = typeof p.last4 === 'string' && /^\\d{2,4}$/.test(p.last4.trim()) ? p.last4.trim() : ''\n return `${base}${brand ? ` ${brand}` : ''}${last4 ? ` •••• ${last4}` : ''}`\n }\n return human ? raw : m['payment.method.unknown']\n}\n","/** Refunds and payments of an order. Headless (`data-sf-refund-*`, `data-sf-payment-*`, `classNames`). */\nimport type { PaymentInfo, Refund } from '@asteby/storefront'\nimport { useId } from 'react'\nimport { enumText, fill } from './orders-messages.js'\nimport { paymentLabel, paymentMethodKey, type PaymentLabelOptions } from './payment-method.js'\nimport { Hidden, Time, moneyText, str, useAccountText, type AccountTextProps } from './orders-ui.js'\n\nexport type RefundListClassNames = Partial<Record<'root' | 'title' | 'list' | 'item' | 'amount' | 'status' | 'meta' | 'empty' | 'error' | 'retry', string>>\n\nexport type RefundListProps = AccountTextProps & {\n refunds?: readonly Refund[] | null\n /** Show the \"no refunds\" text when empty (default: render nothing, the usual case). */\n showEmpty?: boolean\n /** The server could not read refunds (`order.degraded`): recoverable error. */\n degraded?: boolean\n onRetry?: () => void\n headingLevel?: 2 | 3 | 4\n classNames?: RefundListClassNames\n}\n\nconst tone = (s: unknown) => (s === 'completed' ? 'done' : s === 'failed' ? 'problem' : 'current')\n\nexport function RefundList({ refunds, showEmpty = false, degraded, onRetry, headingLevel = 3, classNames: cx = {}, ...text }: RefundListProps) {\n const { m, locale, date } = useAccountText(text)\n const titleId = `sf-refunds-${useId().replace(/:/g, '')}`\n const items = (Array.isArray(refunds) ? refunds : []).filter((r): r is Refund => !!r && typeof r === 'object' && typeof r.id === 'string')\n if (!degraded && items.length === 0 && !showEmpty) return null\n const Heading = `h${headingLevel}` as 'h3'\n return (\n <section className={cx.root} aria-labelledby={titleId} data-sf-refunds>\n <Heading id={titleId} className={cx.title}>\n {m['refund.title']}\n </Heading>\n {degraded ? (\n <div className={cx.error} role=\"alert\" data-sf-section-error=\"refunds\">\n <p>{m['section.error']}</p>\n {onRetry ? (\n <button type=\"button\" className={cx.retry} onClick={onRetry} data-sf-retry>\n {m['section.retry']}\n <Hidden> {m['refund.title']}</Hidden>\n </button>\n ) : null}\n </div>\n ) : items.length === 0 ? (\n <p className={cx.empty}>{m['refund.none']}</p>\n ) : (\n <ul className={cx.list}>\n {items.map((r) => (\n <li key={r.id} className={cx.item} data-sf-refund data-sf-refund-status={typeof r.status === 'string' ? r.status : 'unknown'}>\n <span className={cx.amount} data-sf-refund-amount>\n {moneyText(r.amount, locale) ?? ''}\n </span>{' '}\n <span className={cx.status} data-sf-tone={tone(r.status)}>\n {enumText(m, 'refund.status', r.status)}\n </span>\n <span className={cx.meta}>\n {str(r.method_label) ? <> · {paymentLabel({ method_label: r.method_label ?? '', status: 'paid', amount: r.amount }, m)}</> : null}\n {r.completed_at ? (\n <>\n {' · '}\n <Time value={r.completed_at} text={fill(m['refund.completed'], { date: date(r.completed_at) ?? '' })} />\n </>\n ) : r.created_at ? (\n <>\n {' · '}\n <Time value={r.created_at} text={fill(m['refund.requested'], { date: date(r.created_at) ?? '' })} />\n </>\n ) : null}\n </span>\n </li>\n ))}\n </ul>\n )}\n </section>\n )\n}\n\nexport type PaymentSummaryProps = AccountTextProps & {\n payments?: readonly PaymentInfo[] | null\n headingLevel?: 2 | 3 | 4\n /** The store's own name for a payment (by organization, provider...); `null` falls through to the SDK's es/en text. */\n methodLabel?: PaymentLabelOptions['override']\n classNames?: Partial<Record<'root' | 'title' | 'list' | 'item' | 'status' | 'meta', string>>\n}\n\n/** What the buyer paid with (card, voucher...) and its status. Renders nothing when the order has no payments. */\nexport function PaymentSummary({ payments, headingLevel = 3, methodLabel, classNames: cx = {}, ...text }: PaymentSummaryProps) {\n const { m, locale, date } = useAccountText(text)\n const titleId = `sf-payments-${useId().replace(/:/g, '')}`\n const items = (Array.isArray(payments) ? payments : []).filter((p): p is PaymentInfo => !!p && typeof p === 'object' && typeof p.method_label === 'string')\n if (items.length === 0) return null\n const Heading = `h${headingLevel}` as 'h3'\n return (\n <section className={cx.root} aria-labelledby={titleId} data-sf-payments>\n <Heading id={titleId} className={cx.title}>\n {m['payment.title']}\n </Heading>\n <ul className={cx.list}>\n {items.map((p, i) => (\n <li key={`${p.method_label}-${i}`} className={cx.item} data-sf-payment data-sf-payment-method-key={paymentMethodKey(p) ?? 'unknown'} data-sf-payment-status={typeof p.status === 'string' ? p.status : 'unknown'}>\n <span data-sf-payment-method>{paymentLabel(p, m, methodLabel ? { override: methodLabel } : {})}</span>\n {moneyText(p.amount, locale) ? <> · <span>{moneyText(p.amount, locale)}</span></> : null} ·{' '}\n <span className={cx.status} data-sf-tone={p.status === 'failed' ? 'problem' : p.status === 'paid' ? 'done' : 'current'}>\n {enumText(m, 'payment.status', p.status)}\n </span>\n {p.paid_at ? (\n <span className={cx.meta}>\n {' · '}\n <Time value={p.paid_at} text={fill(m['payment.paidOn'], { date: date(p.paid_at) ?? '' })} />\n </span>\n ) : null}\n </li>\n ))}\n </ul>\n </section>\n )\n}\n","/**\n * Data hooks of the account screens. They talk to the client of the `StorefrontProvider` (or `client`), which must carry\n * the buyer's session (`withCustomerToken`); on a store that renders on the server, pass what the loader read as\n * `initial` and nothing is fetched until the buyer asks (`reload`, `loadMore`) or a poll tick fires.\n *\n * They never throw: a failure is `status: 'error'` with the `StorefrontError` in `error`, and `reload()` is the retry.\n * A 404 on one order is `status: 'not_found'` (also when it belongs to someone else: the server does not tell).\n */\nimport type { Connection, Order, PendingPayment, StorefrontClient } from '@asteby/storefront'\nimport { useCallback, useEffect, useRef, useState } from 'react'\nimport { useOptionalStorefront } from '../context.js'\n\nexport type AccountStatus = 'loading' | 'ready' | 'error' | 'not_found'\n\nfunction useClient(client?: StorefrontClient | null): StorefrontClient | null {\n const ctx = useOptionalStorefront()\n return client ?? ctx?.client ?? null\n}\n\nconst asError = (e: unknown): Error => (e instanceof Error ? e : new Error('Request failed'))\n\n// A stable id per client object (one per buyer session with `withCustomerToken`), to tell whose data a hook holds.\nconst ids = new WeakMap<object, string>()\nlet seq = 0\nfunction clientKey(c: StorefrontClient | null): string {\n if (!c) return 'none'\n let k = ids.get(c)\n if (!k) ids.set(c, (k = `c${++seq}`))\n return k\n}\n\n// ---------------------------------------------------------------------------\n// Lists (orders, pending payments)\n// ---------------------------------------------------------------------------\n\nexport type UseConnectionResult<T> = {\n status: Exclude<AccountStatus, 'not_found'>\n nodes: T[]\n error: Error | null\n hasMore: boolean\n loadingMore: boolean\n totalCount: number | null\n /** Fetches the first page again (the retry). Keeps showing the current list meanwhile. */\n reload: () => void\n /** Appends the next page. */\n loadMore: () => void\n}\n\ntype ConnectionState<T> = { status: UseConnectionResult<T>['status']; nodes: T[]; error: Error | null; cursor: string | null; hasMore: boolean; total: number | null; owner: string }\n\nfunction useConnection<T>(fetchPage: (c: StorefrontClient, after: string | null, signal: AbortSignal) => Promise<Connection<T>>, client: StorefrontClient | null, initial: Connection<T> | null | undefined, key: string): UseConnectionResult<T> {\n // What the list belongs to: this client (a buyer's session) and this query. Data of another owner is never returned,\n // so the next buyer on a shared device never sees the previous one's orders, not even while his own load.\n const owner = `${clientKey(client)}|${key}`\n const empty = (status: ConnectionState<T>['status']): ConnectionState<T> => ({ status, nodes: [], error: null, cursor: null, hasMore: false, total: null, owner })\n const [state, setState] = useState<ConnectionState<T>>(() =>\n initial\n ? { status: 'ready', nodes: initial.nodes ?? [], error: null, cursor: initial.page_info?.end_cursor ?? null, hasMore: !!initial.page_info?.has_next_page, total: initial.total_count ?? null, owner }\n : empty('loading'),\n )\n const [loadingMore, setLoadingMore] = useState(false)\n const alive = useRef<AbortController | null>(null)\n const more = useRef<AbortController | null>(null)\n const fetchRef = useRef(fetchPage)\n fetchRef.current = fetchPage\n\n const first = useCallback(() => {\n alive.current?.abort()\n more.current?.abort()\n setLoadingMore(false)\n if (!client) {\n // No session (yet, or signed out): nothing is fetched and nothing of a previous session is kept.\n setState(empty('loading'))\n return\n }\n const ctl = new AbortController()\n alive.current = ctl\n setState((s) => (s.owner === owner && s.nodes.length ? { ...s, error: null } : empty('loading')))\n fetchRef.current(client, null, ctl.signal).then(\n (page) => !ctl.signal.aborted && setState({ status: 'ready', nodes: page.nodes ?? [], error: null, cursor: page.page_info?.end_cursor ?? null, hasMore: !!page.page_info?.has_next_page, total: page.total_count ?? null, owner }),\n (e: unknown) => !ctl.signal.aborted && setState((s) => (s.owner === owner ? { ...s, status: 'error', error: asError(e) } : { ...empty('error'), error: asError(e) })),\n )\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [client, owner])\n\n useEffect(() => {\n if (!(initial && state.owner === owner)) first()\n return () => {\n alive.current?.abort()\n more.current?.abort()\n }\n // `owner` restarts the load when the session or what is asked for changes (page size, filter).\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [first, owner])\n\n const loadMore = useCallback(() => {\n if (!client || state.owner !== owner || !state.hasMore || loadingMore) return\n const ctl = new AbortController()\n more.current = ctl\n setLoadingMore(true)\n fetchRef.current(client, state.cursor, ctl.signal).then(\n (page) => {\n // A reload or another session since this page was asked: it belongs to a list that no longer exists.\n if (ctl.signal.aborted) return\n setLoadingMore(false)\n setState((s) => (s.owner !== owner ? s : { ...s, nodes: [...s.nodes, ...(page.nodes ?? [])], cursor: page.page_info?.end_cursor ?? null, hasMore: !!page.page_info?.has_next_page, total: page.total_count ?? s.total, error: null }))\n },\n (e: unknown) => {\n if (ctl.signal.aborted) return\n setLoadingMore(false)\n setState((s) => (s.owner !== owner ? s : { ...s, error: asError(e) }))\n },\n )\n }, [client, owner, state.owner, state.hasMore, state.cursor, loadingMore])\n\n const view = state.owner === owner ? state : empty('loading')\n return { status: view.status, nodes: view.nodes, error: view.error, hasMore: view.hasMore, loadingMore: state.owner === owner && loadingMore, totalCount: view.total, reload: first, loadMore }\n}\n\nexport type UseCustomerOrdersOptions = {\n client?: StorefrontClient | null\n /** Page size (default 20). */\n first?: number\n /** First page already read on the server: renders at once, nothing is fetched. */\n initial?: Connection<Order> | null\n}\n\n/** The buyer's orders (summaries), newest first, with `loadMore`. */\nexport function useCustomerOrders({ client, first = 20, initial }: UseCustomerOrdersOptions = {}): UseConnectionResult<Order> {\n return useConnection<Order>((c, after, signal) => c.customer.orders({ first, ...(after ? { after } : {}) }, { signal }), useClient(client), initial, `orders:${first}`)\n}\n\nexport type UsePendingPaymentsOptions = UseCustomerOrdersOptions & { initial?: Connection<PendingPayment> | null }\n\n/** Cash vouchers still waiting for payment. A failure of this section never blocks the orders: it is its own `status`. */\nexport function usePendingPayments({ client, first = 20, initial }: UsePendingPaymentsOptions = {}): UseConnectionResult<PendingPayment> {\n return useConnection<PendingPayment>((c, after, signal) => c.customer.pendingPayments({ first, ...(after ? { after } : {}) }, { signal }), useClient(client), initial, `pending:${first}`)\n}\n\n// ---------------------------------------------------------------------------\n// One order\n// ---------------------------------------------------------------------------\n\nexport type UseCustomerOrderOptions = {\n client?: StorefrontClient | null\n /** The order already read on the server (`null` = the server found none: `not_found`). */\n initial?: Order | null\n /**\n * Re-reads the order every `everyMs` (default 10 s) for at most `forMs` (default 60 s) while `while(order)` is true,\n * e.g. an invoice being generated: `{ while: (o) => ['queued','issuing'].includes(o.invoice?.stage ?? '') }`.\n * Polling is silent: the order stays on screen and `refreshing` flips.\n */\n poll?: { while: (order: Order) => boolean; everyMs?: number; forMs?: number }\n}\n\nexport type UseCustomerOrderResult = {\n status: AccountStatus\n order: Order | null\n error: Error | null\n /** A silent re-read is in flight (retry or poll): keep showing `order`. */\n refreshing: boolean\n reload: () => void\n}\n\n/** One order with its detail (shipments, invoices, payments, refunds, `degraded`). */\nexport function useCustomerOrder(id: string | null | undefined, { client, initial, poll }: UseCustomerOrderOptions = {}): UseCustomerOrderResult {\n const c = useClient(client)\n const given = initial !== undefined\n // Whose order this is: the session and the id. A change of either never shows the previous order meanwhile.\n const owner = `${clientKey(c)}|${id ?? ''}`\n const [state, setState] = useState<{ status: AccountStatus; order: Order | null; error: Error | null; owner: string }>(() => (given ? { status: initial ? 'ready' : 'not_found', order: initial, error: null, owner } : { status: 'loading', order: null, error: null, owner }))\n const [refreshing, setRefreshing] = useState(false)\n const ctlRef = useRef<AbortController | null>(null)\n const initialOwner = useRef(given ? owner : null)\n\n const load = useCallback(\n (silent: boolean) => {\n ctlRef.current?.abort()\n setRefreshing(false)\n if (!c || !id) {\n setState({ status: 'loading', order: null, error: null, owner })\n return\n }\n const ctl = new AbortController()\n ctlRef.current = ctl\n if (silent) setRefreshing(true)\n else setState((s) => (s.owner === owner && s.order ? { ...s, error: null } : { status: 'loading', order: null, error: null, owner }))\n c.customer.order(id, { signal: ctl.signal }).then(\n (o) => {\n if (ctl.signal.aborted) return\n setRefreshing(false)\n setState(o ? { status: 'ready', order: o, error: null, owner } : { status: 'not_found', order: null, error: null, owner })\n },\n (e: unknown) => {\n if (ctl.signal.aborted) return\n setRefreshing(false)\n // A failed silent read keeps the order on screen; only a first load turns into an error.\n setState((s) => (s.owner === owner && s.order ? { ...s, error: asError(e) } : { status: 'error', order: null, error: asError(e), owner }))\n },\n )\n },\n [c, id, owner],\n )\n\n useEffect(() => {\n if (initialOwner.current !== owner) load(false)\n initialOwner.current = null\n return () => ctlRef.current?.abort()\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [load, owner])\n\n const mine = state.owner === owner\n const order = mine ? state.order : null\n const keepPolling = !!poll && !!order && poll.while(order)\n const everyMs = poll?.everyMs ?? 10_000\n const forMs = poll?.forMs ?? 60_000\n useEffect(() => {\n if (!keepPolling) return\n const t0 = Date.now()\n const timer = setInterval(() => {\n if (Date.now() - t0 >= forMs) clearInterval(timer)\n else load(true)\n }, everyMs)\n return () => clearInterval(timer)\n }, [keepPolling, everyMs, forMs, load])\n\n const hasOrder = order !== null\n const reload = useCallback(() => load(hasOrder), [load, hasOrder])\n return { status: mine ? state.status : 'loading', order, error: mine ? state.error : null, refreshing: mine && refreshing, reload }\n}\n","export { AccountAuth, accountAuthMessages } from './account-auth.js'\nexport type { AccountAuthClassNames, AccountFormProps, AccountAuthMessages, AccountAuthProps, AccountAuthView } from './account-auth.js'\nexport type { AuthActionData, AuthErrorCode, AuthIntent, AuthStep } from './types.js'\nexport { PostPurchaseAccountPrompt, postPurchaseAccountPromptMessages } from './post-purchase-prompt.js'\nexport type { PostPurchaseAccountPromptClassNames, PostPurchaseAccountPromptMessages, PostPurchaseAccountPromptProps } from './post-purchase-prompt.js'\n\n// Order screens (contract 1.8): headless, `data-sf-*` hooks, `classNames`, es/en texts.\nexport { OrderList, OrderCard } from './order-list.js'\nexport type { OrderCardClassNames, OrderCardProps, OrderListClassNames, OrderListProps } from './order-list.js'\nexport { OrderLines, OrderProductsStack, lineImage } from './order-lines.js'\nexport type { OrderLinesClassNames, OrderLinesProps } from './order-lines.js'\nexport { ProductPreview, ProductThumb, ProductThumbStack, productInitials } from '../ui/product-preview.js'\nexport type { ProductPreviewProps, ProductThumbProps, ProductThumbStackProps } from '../ui/product-preview.js'\nexport { OrderProgress, OrderStatusBadge, NextActionBar, stageTone } from './progress.js'\nexport type { NextActionBarClassNames, NextActionBarProps, OrderProgressClassNames, OrderProgressProps, OrderStatusBadgeProps, OrderTone } from './progress.js'\nexport { ShipmentCard } from './shipment.js'\nexport type { ShipmentCardClassNames, ShipmentCardProps, ShipmentMapSlotProps } from './shipment.js'\nexport { InvoiceList } from './invoices.js'\nexport type { InvoiceListClassNames, InvoiceListProps } from './invoices.js'\nexport { PendingPaymentCard, PendingPaymentList, Barcode } from './pending.js'\nexport type { BarcodeProps, PendingPaymentCardClassNames, PendingPaymentCardProps, PendingPaymentListProps } from './pending.js'\nexport { RefundList, PaymentSummary } from './refunds.js'\nexport type { PaymentSummaryProps, RefundListClassNames, RefundListProps } from './refunds.js'\nexport { useCustomerOrders, useCustomerOrder, usePendingPayments } from './hooks.js'\nexport type { AccountStatus, UseConnectionResult, UseCustomerOrderOptions, UseCustomerOrderResult, UseCustomerOrdersOptions, UsePendingPaymentsOptions } from './hooks.js'\nexport { accountMessages, enumText } from './orders-messages.js'\nexport type { AccountMessageKey, AccountMessages } from './orders-messages.js'\nexport type { AccountTextProps } from './orders-ui.js'\nexport { voucherOf, barcodeValue, barcodeGeometry, barcodeModules, code128Modules, code39Modules } from './voucher.js'\nexport type { BarcodeFormat, BarcodeGeometry, VoucherKind, VoucherView } from './voucher.js'\nexport { paymentLabel, paymentMethodKey } from './payment-method.js'\nexport type { PaymentLabelOptions, PaymentMethodKey } from './payment-method.js'\n\n// Account settings (contract 1.9): headless, `data-sf-*` hooks, `classNames`, es/en texts. The action is in `./server`.\nexport { SessionsList } from './sessions.js'\nexport type { SessionsListClassNames, SessionsListProps } from './sessions.js'\nexport { LanguagePreference, NotificationPreferences, NOTIFICATION_EVENTS } from './preferences.js'\nexport type { LanguagePreferenceClassNames, LanguagePreferenceProps, NotificationPreferencesClassNames, NotificationPreferencesProps } from './preferences.js'\nexport { settingsMessages, settingsEnumText } from './settings-messages.js'\nexport type { SettingsMessageKey, SettingsMessages } from './settings-messages.js'\nexport type { SettingsTextProps } from './settings-ui.js'\nexport type { AccountSettingsActionData, SettingsErrorCode, SettingsIntent } from './settings-types.js'\n","/**\n * Texts of the account settings screens (`SessionsList`, and the other sections). Spanish (es-MX) by default,\n * English with `en*`, anything with `messages`. Server errors are codes (`SettingsErrorCode`); the words are here.\n */\nimport { fill } from '../fiscal/messages.js'\n\nexport { fill }\n\nconst ES = {\n // shared\n 'settings.saved': 'Listo, guardamos tus cambios.',\n 'settings.error.session_expired': 'Tu sesión venció. Inicia sesión de nuevo para continuar.',\n 'settings.error.invalid_credential': 'No pudimos verificarte. Revisa tu contraseña o el código e inténtalo de nuevo.',\n 'settings.error.reauth_required': 'Por seguridad, confirma tu contraseña o un código antes de continuar.',\n 'settings.error.rate_limited': 'Demasiados intentos. Espera unos minutos e inténtalo de nuevo.',\n 'settings.error.rate_limited_in': 'Demasiados intentos. Inténtalo de nuevo en {minutes} min.',\n 'settings.error.validation': 'Revisa los datos e inténtalo de nuevo.',\n 'settings.error.blocked_orders': 'Tienes un pedido en camino. Podrás hacerlo cuando llegue.',\n 'settings.error.blocked_pending_payments': 'Tienes un pago pendiente. Págalo o espera a que venza para continuar.',\n 'settings.error.unsupported': 'Esta tienda no ofrece esta opción por ahora.',\n 'settings.error.unavailable': 'No pudimos completar la acción. Inténtalo de nuevo en un momento.',\n // language\n 'lang.title': 'Idioma',\n 'lang.label': 'Idioma de tus mensajes',\n 'lang.default': 'El de la tienda',\n 'lang.save': 'Guardar idioma',\n // notifications\n 'notif.title': 'Avisos',\n 'notif.intro': 'Elige cómo quieres que te avisemos.',\n 'notif.event.order_updates': 'Actualizaciones de tu pedido',\n 'notif.event.shipping': 'Envío y seguimiento',\n 'notif.event.restock': 'Producto otra vez disponible',\n 'notif.event.unknown': 'Otros avisos',\n 'notif.channel.email': 'Correo',\n 'notif.channel.whatsapp': 'WhatsApp',\n 'notif.channel.unknown': 'Otro canal',\n 'notif.required': 'La confirmación de tu pedido, tus pagos y tus facturas siempre se envían: son necesarios.',\n 'notif.save': 'Guardar avisos',\n 'notif.matrixLabel': 'Avisos por tipo y canal',\n // sessions\n 'sessions.title': 'Dispositivos con sesión abierta',\n 'sessions.intro': 'Estos son los dispositivos donde tu cuenta tiene la sesión abierta. Si no reconoces alguno, ciérralo.',\n 'sessions.current': 'Este dispositivo',\n 'sessions.lastUsed': 'Último uso: {date}',\n 'sessions.signedIn': 'Inicio de sesión: {date}',\n 'sessions.method.email': 'Con código por correo',\n 'sessions.method.phone': 'Con código por mensaje',\n 'sessions.method.password': 'Con contraseña',\n 'sessions.method.unknown': 'Inicio de sesión',\n 'sessions.revoke': 'Cerrar sesión',\n 'sessions.revokeLabel': 'Cerrar la sesión de {device}',\n 'sessions.revokeOthers': 'Cerrar las demás sesiones',\n 'sessions.revoked': 'Cerramos la sesión.',\n 'sessions.revokedOthers': 'Cerramos las demás sesiones.',\n 'sessions.none': 'No hay otras sesiones abiertas.',\n 'sessions.error': 'No pudimos cargar tus dispositivos. Inténtalo de nuevo más tarde.',\n 'sessions.loading': 'Cargando tus dispositivos',\n 'sessions.listLabel': 'Dispositivos con sesión abierta',\n}\n\nexport type SettingsMessageKey = keyof typeof ES\nexport type SettingsMessages = Record<SettingsMessageKey, string>\n\nconst EN: SettingsMessages = {\n 'settings.saved': 'Done, your changes are saved.',\n 'settings.error.session_expired': 'Your session expired. Sign in again to continue.',\n 'settings.error.invalid_credential': 'We could not verify you. Check your password or the code and try again.',\n 'settings.error.reauth_required': 'For your security, confirm your password or a code before continuing.',\n 'settings.error.rate_limited': 'Too many attempts. Wait a few minutes and try again.',\n 'settings.error.rate_limited_in': 'Too many attempts. Try again in {minutes} min.',\n 'settings.error.validation': 'Check the details and try again.',\n 'settings.error.blocked_orders': 'You have an order on its way. You will be able to do this once it arrives.',\n 'settings.error.blocked_pending_payments': 'You have a pending payment. Pay it or wait for it to expire to continue.',\n 'settings.error.unsupported': 'This store does not offer this option right now.',\n 'settings.error.unavailable': 'We could not complete that. Try again in a moment.',\n 'lang.title': 'Language',\n 'lang.label': 'Language of your messages',\n 'lang.default': 'The store’s',\n 'lang.save': 'Save language',\n 'notif.title': 'Notices',\n 'notif.intro': 'Choose how you want us to notify you.',\n 'notif.event.order_updates': 'Updates about your order',\n 'notif.event.shipping': 'Shipping and tracking',\n 'notif.event.restock': 'A product is available again',\n 'notif.event.unknown': 'Other notices',\n 'notif.channel.email': 'Email',\n 'notif.channel.whatsapp': 'WhatsApp',\n 'notif.channel.unknown': 'Other channel',\n 'notif.required': 'Your order confirmation, payments and invoices are always sent: they are required.',\n 'notif.save': 'Save notices',\n 'notif.matrixLabel': 'Notices by type and channel',\n 'sessions.title': 'Devices signed in',\n 'sessions.intro': 'These are the devices where your account is signed in. If you do not recognize one, sign it out.',\n 'sessions.current': 'This device',\n 'sessions.lastUsed': 'Last used: {date}',\n 'sessions.signedIn': 'Signed in: {date}',\n 'sessions.method.email': 'With an email code',\n 'sessions.method.phone': 'With a text code',\n 'sessions.method.password': 'With a password',\n 'sessions.method.unknown': 'Sign-in',\n 'sessions.revoke': 'Sign out',\n 'sessions.revokeLabel': 'Sign out {device}',\n 'sessions.revokeOthers': 'Sign out of all other devices',\n 'sessions.revoked': 'We signed that device out.',\n 'sessions.revokedOthers': 'We signed out the other devices.',\n 'sessions.none': 'There are no other signed-in devices.',\n 'sessions.error': 'We could not load your devices. Try again later.',\n 'sessions.loading': 'Loading your devices',\n 'sessions.listLabel': 'Devices signed in',\n}\n\n/** Messages for a locale (`es*` default, `en*`), with optional per-key overrides. */\nexport function settingsMessages(locale?: string | null, overrides?: Partial<SettingsMessages> | null): SettingsMessages {\n const base: SettingsMessages = (locale ?? 'es-MX').toLowerCase().startsWith('en') ? EN : ES\n return overrides ? { ...base, ...overrides } : base\n}\n\n/** The text of an open enum (`<group>.<value>`), else `<group>.unknown`. Never the raw value. */\nexport function settingsEnumText(m: SettingsMessages, group: string, value: unknown): string {\n const key = `${group}.${typeof value === 'string' ? value : ''}` as SettingsMessageKey\n return Object.prototype.hasOwnProperty.call(m, key) ? m[key] : m[`${group}.unknown` as SettingsMessageKey]\n}\n","/** Small shared pieces of the settings screens: texts, dates and the error line. */\nimport { useResolvedLocale } from '../locale.js'\nimport { formatDate } from './orders-ui.js'\nimport { fill, settingsMessages, type SettingsMessageKey, type SettingsMessages } from './settings-messages.js'\nimport type { AccountSettingsActionData, SettingsIntent } from './settings-types.js'\n\nexport type SettingsTextProps = {\n /** BCP 47; defaults to the provider's, then `es-MX`. */\n locale?: string\n /** Per-key text overrides (a store's own words). */\n messages?: Partial<SettingsMessages>\n /** IANA time zone for dates. Pass the store's own to get the same text on server and browser. */\n timeZone?: string\n}\n\nexport function useSettingsText({ locale, messages, timeZone }: SettingsTextProps) {\n const resolved = useResolvedLocale(locale)\n const m = settingsMessages(resolved, messages)\n const t = (key: SettingsMessageKey, vars?: Record<string, string | number>): string => (vars ? fill(m[key], vars) : m[key])\n const date = (iso: string | null | undefined): string | null => formatDate(iso, resolved, 'datetime', timeZone)\n return { locale: resolved, m, t, date }\n}\n\n/** The sentence for an error code (never the raw code, never a server message). */\nexport function errorText(m: SettingsMessages, error: NonNullable<AccountSettingsActionData['error']>): string {\n if (error.code === 'rate_limited' && typeof error.retryAfter === 'number' && error.retryAfter > 0) {\n return fill(m['settings.error.rate_limited_in'], { minutes: Math.max(1, Math.ceil(error.retryAfter / 60)) })\n }\n const key = `settings.error.${error.code}` as SettingsMessageKey\n return Object.prototype.hasOwnProperty.call(m, key) ? m[key] : m['settings.error.unavailable']\n}\n\n/** The result of the action when it answers THIS form (`intents`), else `null`. */\nexport function resultFor(data: AccountSettingsActionData | null | undefined, ...intents: SettingsIntent[]): AccountSettingsActionData | null {\n return data && data.intent && intents.includes(data.intent) ? data : null\n}\n\n","/**\n * «Devices»: the sessions the buyer has open, with a button to close each one and one to close all the others.\n * Headless: no styles of its own, `data-sf-session*` hooks and `classNames` slots. Every button is a real form\n * submit (`intent` = `session-revoke` | `session-revoke-others`), so it works without JavaScript and is answered by\n * `createAccountSettingsAction` (`@asteby/storefront-react/account/server`). The list comes from `loadAccountSessions`.\n *\n * Degradation: `sessions={null}` (the store could not list them, or its server is older than contract 1.9) renders a\n * calm notice instead of an error page, and the rest of the settings keeps working. The server sends no address and\n * no token, so there is nothing sensitive to leak here; the device label is plain text (never HTML).\n */\nimport type { CustomerSessionInfo } from '@asteby/storefront'\nimport { useId, type ComponentType, type ReactNode } from 'react'\nimport type { AccountFormProps } from './account-auth.js'\nimport { str } from './orders-ui.js'\nimport { settingsEnumText, type SettingsMessages } from './settings-messages.js'\nimport type { AccountSettingsActionData } from './settings-types.js'\nimport { errorText, resultFor, useSettingsText, type SettingsTextProps } from './settings-ui.js'\n\nexport type SessionsListClassNames = Partial<Record<'root' | 'title' | 'intro' | 'list' | 'item' | 'device' | 'badge' | 'meta' | 'revoke' | 'revokeOthers' | 'notice' | 'error' | 'empty', string>>\n\nexport type SessionsListProps = SettingsTextProps & {\n /** From `loadAccountSessions`. `null` = could not be loaded (the section degrades). */\n sessions: CustomerSessionInfo[] | null\n /** What the settings action returned (`useActionData()`); drives the confirmation and the errors. */\n data?: AccountSettingsActionData | null\n /** A submit is in flight: disables the buttons. */\n pending?: boolean\n /** Form component, e.g. React Router's `Form`. Default: the HTML `<form>`. */\n form?: 'form' | ComponentType<AccountFormProps>\n /** `action` of the forms: the route that mounts `createAccountSettingsAction`. Default: the current URL. */\n action?: string\n /** Heading level of the title (default 3). */\n headingLevel?: 2 | 3 | 4\n classNames?: SessionsListClassNames\n /** Extra content under the list. */\n children?: ReactNode\n}\n\nfunction methodText(m: SettingsMessages, method: unknown): string {\n return settingsEnumText(m, 'sessions.method', method)\n}\n\nexport function SessionsList({ sessions, data, pending = false, form: FormTag = 'form', action, headingLevel = 3, classNames: cx = {}, children, ...text }: SessionsListProps) {\n const { m, t, date } = useSettingsText(text)\n const titleId = useId()\n const Heading = `h${headingLevel}` as 'h3'\n const result = resultFor(data, 'session-revoke', 'session-revoke-others')\n const list = (sessions ?? []).filter((s) => s && typeof s.id === 'string' && s.id)\n const others = list.filter((s) => !s.current)\n const formProps = { method: 'post' as const, ...(action ? { action } : {}) }\n\n return (\n <section className={cx.root} aria-labelledby={titleId} data-sf-sessions data-state={sessions === null ? 'degraded' : 'ready'}>\n <Heading id={titleId} className={cx.title}>\n {m['sessions.title']}\n </Heading>\n {sessions === null ? (\n <p className={cx.error} role=\"status\" data-sf-sessions-degraded>\n {m['sessions.error']}\n </p>\n ) : (\n <>\n <p className={cx.intro}>{m['sessions.intro']}</p>\n {result?.ok ? (\n <p className={cx.notice} role=\"status\" data-sf-sessions-notice>\n {result.intent === 'session-revoke-others' ? m['sessions.revokedOthers'] : m['sessions.revoked']}\n </p>\n ) : result?.error ? (\n <p className={cx.error} role=\"alert\" data-sf-sessions-error={result.error.code}>\n {errorText(m, result.error)}\n </p>\n ) : null}\n <ul className={cx.list} aria-label={m['sessions.listLabel']} data-sf-sessions-list>\n {list.map((s) => {\n const device = str(s.device_label) ?? m['sessions.method.unknown']\n const last = date(s.last_used_at ?? null)\n const since = date(s.created_at)\n return (\n <li key={s.id} className={cx.item} data-sf-session data-current={s.current ? 'true' : 'false'}>\n <p className={cx.device} data-sf-session-device>\n {device}\n {s.current ? (\n <span className={cx.badge} data-sf-session-current>\n {' '}\n {m['sessions.current']}\n </span>\n ) : null}\n </p>\n <p className={cx.meta} data-sf-session-meta>\n {methodText(m, s.login_method)}\n {last ? ` · ${t('sessions.lastUsed', { date: last })}` : since ? ` · ${t('sessions.signedIn', { date: since })}` : ''}\n </p>\n {s.current ? null : (\n <FormTag {...formProps} data-sf-account-form=\"\">\n <input type=\"hidden\" name=\"session_id\" value={s.id} />\n <button type=\"submit\" name=\"intent\" value=\"session-revoke\" disabled={pending} className={cx.revoke} aria-label={t('sessions.revokeLabel', { device })} data-sf-session-revoke>\n {m['sessions.revoke']}\n </button>\n </FormTag>\n )}\n </li>\n )\n })}\n </ul>\n {others.length === 0 ? (\n <p className={cx.empty} data-sf-sessions-empty>\n {m['sessions.none']}\n </p>\n ) : (\n <FormTag {...formProps} data-sf-account-form=\"\">\n <button type=\"submit\" name=\"intent\" value=\"session-revoke-others\" disabled={pending} className={cx.revokeOthers} data-sf-session-revoke-others>\n {m['sessions.revokeOthers']}\n </button>\n </FormTag>\n )}\n </>\n )}\n {children}\n </section>\n )\n}\n","/**\n * Language and notification preferences of the buyer. Headless: no styles of its own, `data-sf-lang*` /\n * `data-sf-notif*` hooks and `classNames` slots. Both are real form submits answered by\n * `createAccountSettingsAction` (`intent` = `locale` | `notifications`), so they work without JavaScript.\n *\n * Degradation: nothing to choose, nothing rendered. `<LanguagePreference>` needs at least two languages;\n * `<NotificationPreferences>` needs at least one channel the store can deliver on (`capabilities.notifications\n * .channels`; absent on a server older than contract 1.9). A store that composes the page does not need an `if`.\n *\n * What is NOT here on purpose: the confirmation of the order, the payments and the invoices cannot be turned off, so\n * they are not boxes to uncheck, and the page says so. Marketing is a consent (it has a legal record), not a box here.\n */\nimport type { CustomerPreferences } from '@asteby/storefront'\nimport { useId, type ComponentType, type ReactNode } from 'react'\nimport type { AccountFormProps } from './account-auth.js'\nimport { str } from './orders-ui.js'\nimport { settingsEnumText } from './settings-messages.js'\nimport type { AccountSettingsActionData } from './settings-types.js'\nimport { errorText, resultFor, useSettingsText, type SettingsTextProps } from './settings-ui.js'\n\n/** The optional events the server accepts (anything else is refused by it). */\nexport const NOTIFICATION_EVENTS = ['order_updates', 'shipping', 'restock'] as const\n\ntype SectionProps = SettingsTextProps & {\n data?: AccountSettingsActionData | null\n pending?: boolean\n /** Form component, e.g. React Router's `Form`. Default: the HTML `<form>`. */\n form?: 'form' | ComponentType<AccountFormProps>\n /** `action` of the form: the route that mounts `createAccountSettingsAction`. Default: the current URL. */\n action?: string\n headingLevel?: 2 | 3 | 4\n children?: ReactNode\n}\n\n// ---------------------------------------------------------------------------\n// Language\n// ---------------------------------------------------------------------------\n\nexport type LanguagePreferenceClassNames = Partial<Record<'root' | 'title' | 'form' | 'label' | 'select' | 'submit' | 'notice' | 'error', string>>\n\nexport type LanguagePreferenceProps = SectionProps & {\n /** The languages the store offers (`shop.locales`), as BCP 47 tags or `{ value, label }`. Fewer than two renders nothing. */\n locales: ReadonlyArray<string | { value: string; label?: string }> | null | undefined\n /** The buyer's current language (`customer.locale`); `null` = the store's own. */\n value?: string | null\n classNames?: LanguagePreferenceClassNames\n}\n\nfunction languageName(tag: string, inLocale: string): string {\n try {\n const name = new Intl.DisplayNames([inLocale], { type: 'language', languageDisplay: 'dialect' }).of(tag)\n return name ? name.charAt(0).toLocaleUpperCase(inLocale) + name.slice(1) : tag\n } catch {\n return tag\n }\n}\n\nexport function LanguagePreference({ locales, value, data, pending = false, form: FormTag = 'form', action, headingLevel = 3, classNames: cx = {}, children, ...text }: LanguagePreferenceProps) {\n const { m, locale } = useSettingsText(text)\n const titleId = useId()\n const selectId = useId()\n const options = (locales ?? [])\n .map((l) => (typeof l === 'string' ? { value: l, label: undefined } : { value: l?.value, label: l?.label }))\n .filter((o): o is { value: string; label: string | undefined } => typeof o.value === 'string' && /^[A-Za-z]{2,3}(-[A-Za-z0-9]{2,8}){0,2}$/.test(o.value))\n if (options.length < 2) return null\n const Heading = `h${headingLevel}` as 'h3'\n const result = resultFor(data, 'locale')\n const current = options.find((o) => o.value.toLowerCase() === (value ?? '').toLowerCase())?.value ?? ''\n\n return (\n <section className={cx.root} aria-labelledby={titleId} data-sf-lang>\n <Heading id={titleId} className={cx.title}>\n {m['lang.title']}\n </Heading>\n <FormTag method=\"post\" {...(action ? { action } : {})} className={cx.form} data-sf-account-form=\"\">\n {result?.saved ? (\n <p className={cx.notice} role=\"status\" data-sf-lang-notice>\n {m['settings.saved']}\n </p>\n ) : result?.error ? (\n <p className={cx.error} role=\"alert\" data-sf-lang-error={result.error.code}>\n {errorText(m, result.error)}\n </p>\n ) : null}\n <label htmlFor={selectId} className={cx.label}>\n {m['lang.label']}\n </label>\n <select id={selectId} name=\"locale\" defaultValue={current} className={cx.select} data-sf-lang-select>\n <option value=\"\">{m['lang.default']}</option>\n {options.map((o) => (\n <option key={o.value} value={o.value}>\n {str(o.label) ?? languageName(o.value, locale)}\n </option>\n ))}\n </select>\n <button type=\"submit\" name=\"intent\" value=\"locale\" disabled={pending} className={cx.submit} data-sf-lang-submit>\n {m['lang.save']}\n </button>\n </FormTag>\n {children}\n </section>\n )\n}\n\n// ---------------------------------------------------------------------------\n// Notifications\n// ---------------------------------------------------------------------------\n\nexport type NotificationPreferencesClassNames = Partial<Record<'root' | 'title' | 'intro' | 'form' | 'table' | 'row' | 'event' | 'channel' | 'check' | 'required' | 'submit' | 'notice' | 'error', string>>\n\nexport type NotificationPreferencesProps = SectionProps & {\n /** `capabilities.notifications.channels`: the channels the store can deliver on. Empty or absent renders nothing. */\n channels: ReadonlyArray<string> | null | undefined\n /** `customer.preferences`. A choice never made counts as on (what the store sends today). */\n preferences?: CustomerPreferences | null\n /** Events to offer (default: all the optional ones). */\n events?: ReadonlyArray<string>\n classNames?: NotificationPreferencesClassNames\n}\n\nconst TOKEN = /^[a-z][a-z0-9_]{0,31}$/\n\nexport function NotificationPreferences({ channels, preferences, events = NOTIFICATION_EVENTS, data, pending = false, form: FormTag = 'form', action, headingLevel = 3, classNames: cx = {}, children, ...text }: NotificationPreferencesProps) {\n const { m } = useSettingsText(text)\n const titleId = useId()\n const cols = Array.from(new Set((channels ?? []).filter((c): c is string => typeof c === 'string' && TOKEN.test(c))))\n const rows = Array.from(new Set(events.filter((e) => TOKEN.test(e))))\n if (cols.length === 0 || rows.length === 0) return null\n const Heading = `h${headingLevel}` as 'h3'\n const result = resultFor(data, 'notifications')\n const on = (event: string, channel: string): boolean => preferences?.notifications?.[event]?.[channel] !== false\n\n return (\n <section className={cx.root} aria-labelledby={titleId} data-sf-notif>\n <Heading id={titleId} className={cx.title}>\n {m['notif.title']}\n </Heading>\n <p className={cx.intro}>{m['notif.intro']}</p>\n <FormTag method=\"post\" {...(action ? { action } : {})} className={cx.form} data-sf-account-form=\"\">\n {result?.saved ? (\n <p className={cx.notice} role=\"status\" data-sf-notif-notice>\n {m['settings.saved']}\n </p>\n ) : result?.error ? (\n <p className={cx.error} role=\"alert\" data-sf-notif-error={result.error.code}>\n {errorText(m, result.error)}\n </p>\n ) : null}\n <table className={cx.table} aria-label={m['notif.matrixLabel']} data-sf-notif-table>\n <thead>\n <tr>\n <th scope=\"col\">\n <span style={{ position: 'absolute', width: 1, height: 1, overflow: 'hidden', clip: 'rect(0 0 0 0)', whiteSpace: 'nowrap' }}>{m['notif.title']}</span>\n </th>\n {cols.map((c) => (\n <th key={c} scope=\"col\" className={cx.channel} data-sf-notif-channel={c}>\n {settingsEnumText(m, 'notif.channel', c)}\n </th>\n ))}\n </tr>\n </thead>\n <tbody>\n {rows.map((e) => (\n <tr key={e} className={cx.row} data-sf-notif-row={e}>\n <th scope=\"row\" className={cx.event}>\n {settingsEnumText(m, 'notif.event', e)}\n </th>\n {cols.map((c) => {\n const id = `${e}:${c}`\n return (\n <td key={c}>\n {/* Every box shown is listed, so an unchecked one (which a browser does not send) is still read as «off». */}\n <input type=\"hidden\" name=\"pref_shown\" value={id} />\n <input type=\"checkbox\" name=\"pref\" value={id} defaultChecked={on(e, c)} className={cx.check} aria-label={`${settingsEnumText(m, 'notif.event', e)} · ${settingsEnumText(m, 'notif.channel', c)}`} />\n </td>\n )\n })}\n </tr>\n ))}\n </tbody>\n </table>\n <p className={cx.required} data-sf-notif-required>\n {m['notif.required']}\n </p>\n <button type=\"submit\" name=\"intent\" value=\"notifications\" disabled={pending} className={cx.submit} data-sf-notif-submit>\n {m['notif.save']}\n </button>\n </FormTag>\n {children}\n </section>\n )\n}\n"]}
|