@nok-integration/storefront-react 0.18.5 → 0.19.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.mjs CHANGED
@@ -5141,7 +5141,27 @@ function requireSupport() {
5141
5141
  * CS agent's browser fetch whatever a stranger typed, from inside DAZN's network, on
5142
5142
  * a page showing another customer's data.
5143
5143
  */
5144
- image_url: zod_1.z.string().url().max(2048).optional()
5144
+ image_url: zod_1.z.string().url().max(2048).optional(),
5145
+ /**
5146
+ * The fan this ticket belongs to — **only when the caller is a DAZN service holding a
5147
+ * support API key**, and refused outright when the caller holds a shop session.
5148
+ *
5149
+ * Optional here because one field cannot be required of one caller and forbidden to
5150
+ * another in a single schema. The engine decides which rule applies from how the
5151
+ * request authenticated, and rejects the wrong combination either way: absent under a
5152
+ * key is a 400, present under a session is a 400.
5153
+ *
5154
+ * **This is not a relaxation of the rule it looks like a relaxation of.** The rule is
5155
+ * that an *untrusted* caller may not name the fan: a browser that could would let
5156
+ * anyone file a ticket as anyone, and CS would answer it in good faith with another
5157
+ * customer's account detail. A backend authenticated by a shared secret is not that
5158
+ * caller. It is authoritative for its own users in exactly the way order intake
5159
+ * already is when DAZN tells us whose order they have taken.
5160
+ *
5161
+ * Added for DAZN's Contact Support form, which lives outside the shop and therefore
5162
+ * has no shop session to read an identity from (21 Aug 2026).
5163
+ */
5164
+ dazn_user_id: zod_1.z.string().trim().min(1).max(128).optional()
5145
5165
  }).strict();
5146
5166
  exports.SupportTicket = zod_1.z.object({
5147
5167
  reference: zod_1.z.string().min(1),
@@ -5913,8 +5933,228 @@ const styles$L = {
5913
5933
  row: row$9,
5914
5934
  action: action$2
5915
5935
  };
5936
+ const MINOR_UNIT_EXPONENT = {
5937
+ JPY: 0,
5938
+ KRW: 0,
5939
+ VND: 0,
5940
+ CLP: 0,
5941
+ ISK: 0,
5942
+ BHD: 3,
5943
+ KWD: 3,
5944
+ OMR: 3,
5945
+ TND: 3,
5946
+ JOD: 3
5947
+ };
5948
+ function minorUnitExponent(currency) {
5949
+ return MINOR_UNIT_EXPONENT[currency.toUpperCase()] ?? 2;
5950
+ }
5951
+ function formatMoney(money2, locale) {
5952
+ const exponent = minorUnitExponent(money2.currency);
5953
+ const major = money2.amount / 10 ** exponent;
5954
+ try {
5955
+ return new Intl.NumberFormat(locale, {
5956
+ style: "currency",
5957
+ currency: money2.currency
5958
+ }).format(major);
5959
+ } catch {
5960
+ return `${major.toFixed(exponent)} ${money2.currency}`;
5961
+ }
5962
+ }
5963
+ function discountPct(price2, compareAt2) {
5964
+ if (!compareAt2) return void 0;
5965
+ if (compareAt2.currency !== price2.currency) return void 0;
5966
+ if (compareAt2.amount <= price2.amount) return void 0;
5967
+ const pct = Math.round((compareAt2.amount - price2.amount) / compareAt2.amount * 100);
5968
+ return pct > 0 ? pct : void 0;
5969
+ }
5970
+ function useMoney(defaultLocale) {
5971
+ const locale = useLocale(defaultLocale);
5972
+ const format = useCallback(
5973
+ (money2, localeOverride) => formatMoney(money2, localeOverride ?? locale),
5974
+ [locale]
5975
+ );
5976
+ return { format };
5977
+ }
5978
+ function useLocale(override) {
5979
+ const shop = useShopOptional();
5980
+ return override ?? shop?.locale ?? shop?.market?.lang ?? (typeof navigator !== "undefined" ? navigator.language : void 0);
5981
+ }
5982
+ const ES = {
5983
+ "(opens {0} in a new tab)": "(abre {0} en una nueva pestaña)",
5984
+ "(out of stock)": "(agotado)",
5985
+ "14 days returns": "Devoluciones en 14 días",
5986
+ "Add something to your basket to carry on.": "Añade algún artículo a tu cesta para continuar.",
5987
+ "Add to cart": "Añadir a la cesta",
5988
+ "All items": "Todos los artículos",
5989
+ "and {0} more items": "y {0} artículos más",
5990
+ "Back": "Atrás",
5991
+ "Calculated at checkout": "Se calculará al finalizar la compra",
5992
+ "Cart": "Cesta",
5993
+ "Cart, empty": "Cesta vacía",
5994
+ "Cart, {0} item{1}": "Cesta, {0} artículo{1}",
5995
+ "Category unavailable": "Categoría no disponible",
5996
+ "Checkout in progress": "Finalización de la compra en curso",
5997
+ "Clear": "Borrar",
5998
+ "Clear filters": "Borrar filtros",
5999
+ "Close": "Cerrar",
6000
+ "Close size guide": "Cerrar la guía de tallas",
6001
+ "Color": "Color",
6002
+ "Color:": "Color:",
6003
+ "Complete the look with everyday essentials and finishing details": "Completa tu look con básicos para el día a día y detalles que marcan la diferencia",
6004
+ "Continue shopping": "Seguir comprando",
6005
+ "DAZN": "DAZN",
6006
+ "DAZN Shop": "Tienda DAZN",
6007
+ "DAZN SHOP": "TIENDA DAZN",
6008
+ "Decrease quantity": "Reducir cantidad",
6009
+ "Delivery": "Envío",
6010
+ "Delivery status": "Estado del envío",
6011
+ "Everyday essentials with sport-inspired fits and minimal branding": "Artículos básicos para el día a día con cortes de inspiración deportiva y logotipos discretos",
6012
+ "Explore": "Explorar",
6013
+ "Filters": "Filtros",
6014
+ "Finish signing up": "Finalizar el registro",
6015
+ "Free": "Gratis",
6016
+ "Fresh drops inspired by sport, culture, and everyday movement": "Novedades inspiradas en el deporte, la cultura y el movimiento diario",
6017
+ "Gallery pagination": "Paginación de la galería",
6018
+ "Go to image {0}": "Ir a la imagen {0}",
6019
+ "Heavyweight comfort built for training days and off-duty moments": "Comodidad y resistencia pensadas para los días de entrenamiento y los momentos de ocio",
6020
+ "Help & Support": "Ayuda y asistencia",
6021
+ "Hoodies": "Sudaderas con capucha",
6022
+ "Increase quantity": "Aumentar la cantidad",
6023
+ "Item unavailable": "Artículo no disponible",
6024
+ "Items": "Artículos",
6025
+ "Jackets": "Chaquetas",
6026
+ "Loading": "Cargando",
6027
+ "Manage orders": "Gestionar pedidos",
6028
+ "More options": "Más opciones",
6029
+ "No products": "Sin productos",
6030
+ "Not available to you": "No disponible para ti",
6031
+ "Nothing here yet": "Aún no hay nada aquí",
6032
+ "One moment": "Un momento",
6033
+ "One or more items just sold out. Adjust your cart to continue.": "Uno o más artículos se han agotado. Ajusta tu carrito para continuar.",
6034
+ "Only {0} left": "Solo quedan {0}",
6035
+ "Order #{0}": "Pedido n.º {0}",
6036
+ "Order already placed": "Pedido ya realizado",
6037
+ "Order not found": "Pedido no encontrado",
6038
+ "Order summary": "Resumen del pedido",
6039
+ "Order {0}, {1}": "Pedido {0}, {1}",
6040
+ "Out of stock": "Agotado",
6041
+ "Placed {0}": "Realizado {0}",
6042
+ "Please check the details and try again.": "Por favor, comprueba los datos e inténtalo de nuevo.",
6043
+ "Please select a size": "Selecciona una talla",
6044
+ "Please try again.": "Inténtalo de nuevo.",
6045
+ "Price updated": "Precio actualizado",
6046
+ "Proceed to checkout": "Pasar por caja",
6047
+ "Product details": "Detalles del producto",
6048
+ "Qty: {0}": "Cantidad: {0}",
6049
+ "Quantity {0}": "Cantidad {0}",
6050
+ "Reconnecting…": "Restableciendo la conexión…",
6051
+ "Redeem a code": "Canjear un código",
6052
+ "Remind me when available": "Avísame cuando esté disponible",
6053
+ "Remove item": "Eliminar artículo",
6054
+ "Restoring your session.": "Restaurando tu sesión.",
6055
+ "Reviews": "Opiniones",
6056
+ "Seasonal": "De temporada",
6057
+ "See all": "Ver todo",
6058
+ "See more": "Ver más",
6059
+ "Select an option": "Selecciona una opción",
6060
+ "Share": "Compartir",
6061
+ "Shipping": "Envío",
6062
+ "Shipping address": "Dirección de envío",
6063
+ "Shipping and returns": "Envíos y devoluciones",
6064
+ "Shop menu": "Menú de la tienda",
6065
+ "Shop now": "Comprar ahora",
6066
+ "Size": "Talla",
6067
+ "Size guide": "Guía de tallas",
6068
+ "Something looks off": "Algo no va bien",
6069
+ "Something went wrong": "Ha surgido un error",
6070
+ "Standard or express delivery": "Envío estándar o urgente",
6071
+ "Subtotal": "Subtotal",
6072
+ "Swipe down for more": "Desliza hacia abajo para ver más",
6073
+ "T-Shirts": "Camisetas",
6074
+ "Tax": "Impuestos",
6075
+ "That is not possible right now": "Eso no es posible en este momento",
6076
+ "The total changed since you started. Review the updated amount and try again.": "El total ha cambiado desde que empezaste. Revisa el importe actualizado e inténtalo de nuevo.",
6077
+ "This category is no longer available.": "Esta categoría ya no está disponible.",
6078
+ "This has already moved on. Refresh to see where it is.": "Esto ya se ha movido. Actualiza la página para ver dónde está.",
6079
+ "This order has already been despatched.": "Este pedido ya se ha enviado.",
6080
+ "This order was already confirmed.": "Este pedido ya se ha confirmado.",
6081
+ "This product is no longer available.": "Este producto ya no está disponible.",
6082
+ "Too late to change this": "Es demasiado tarde para cambiarlo",
6083
+ "Too many requests. Retrying shortly.": "Demasiadas solicitudes. Lo volveremos a intentar en breve.",
6084
+ "Total": "Total",
6085
+ "Try again": "Inténtalo de nuevo",
6086
+ "Undo": "Deshacer",
6087
+ "Variant": "Variante",
6088
+ "View cart": "Ver carrito",
6089
+ "View your order history and track shipments": "Consulta tu historial de pedidos y realiza el seguimiento de los envíos",
6090
+ "Was {0}": "Era {0}",
6091
+ "We could not find that order.": "No hemos podido encontrar ese pedido.",
6092
+ "We hit a snag. Please try again.": "Hemos tenido un problema. Inténtalo de nuevo.",
6093
+ "We'll remind you": "Te lo recordaremos",
6094
+ "Why shop with us": "¿Por qué comprar con nosotros?",
6095
+ "You do not have access to this.": "No tienes acceso a esto.",
6096
+ "You may also like": "Quizá te guste",
6097
+ "Your basket is empty": "Tu cesta está vacía",
6098
+ "Your checkout is still open. Return to it to finish or cancel your order.": "Tu proceso de pago sigue abierto. Vuelve a él para finalizar o cancelar tu pedido.",
6099
+ "{0} images": "{0} imágenes",
6100
+ "{0} left": "{0} restantes",
6101
+ "{0} — image {1} of {2}": "{0} — imagen {1} de {2}",
6102
+ /*
6103
+ * ── Order status badges ──────────────────────────────────────────────────────────
6104
+ *
6105
+ * **These seven are ours, not the translator's.** The workbook carries no row for any of
6106
+ * them: it was extracted from the rendered UAT build, and an order list only renders the
6107
+ * statuses its orders happened to be in that day, so a status nothing was sitting in was
6108
+ * never collected.
6109
+ *
6110
+ * Added on instruction rather than left in English, and grouped here so they can be
6111
+ * reviewed as a set when DAZN's translator next looks at this file. Two of the seven are
6112
+ * anchored in the translator's own vocabulary rather than chosen freely: `en curso` is how
6113
+ * they rendered "Checkout in progress", and `confirmado` is the stem they used for "This
6114
+ * order was already confirmed."
6115
+ *
6116
+ * All seven describe `el pedido`, so they are masculine singular throughout.
6117
+ *
6118
+ * `Preparado` rather than `Empaquetado` for "Packed": the fulfilment vocabulary already
6119
+ * translates that state to a fan as preparing the order, not as boxing it, and the
6120
+ * notification copy says `estamos preparando`. A fan should not meet two different words
6121
+ * for the same moment.
6122
+ */
6123
+ "Confirmed": "Confirmado",
6124
+ "Packed": "Preparado",
6125
+ "Shipped": "Enviado",
6126
+ "Delivered": "Entregado",
6127
+ "Cancelled": "Cancelado",
6128
+ "Refunded": "Reembolsado",
6129
+ "In progress": "En curso"
6130
+ };
6131
+ const CATALOGUES = { es: ES };
6132
+ function catalogueFor(locale) {
6133
+ if (!locale) return null;
6134
+ const tag = locale.toLowerCase();
6135
+ return CATALOGUES[tag] ?? CATALOGUES[tag.split("-")[0]] ?? null;
6136
+ }
6137
+ function interpolate(template, args) {
6138
+ if (args.length === 0) return template;
6139
+ return template.replace(/\{(\d)\}/g, (whole, digit) => {
6140
+ const value2 = args[Number(digit)];
6141
+ return value2 === void 0 ? whole : String(value2);
6142
+ });
6143
+ }
6144
+ function translate(locale, source, ...args) {
6145
+ const catalogue = catalogueFor(locale);
6146
+ return interpolate(catalogue?.[source] ?? source, args);
6147
+ }
6148
+ function useT() {
6149
+ const locale = useLocale();
6150
+ return useCallback(
6151
+ (source, ...args) => translate(locale, source, ...args),
6152
+ [locale]
6153
+ );
6154
+ }
5916
6155
  function ScreenSkeleton({ tone, shape = "media" }) {
5917
- return /* @__PURE__ */ jsx(ShopSurface, { tone, fill: true, className: styles$L.root, children: /* @__PURE__ */ jsx("div", { className: styles$L.inner, role: "status", "aria-label": "Loading", children: shape === "media" ? /* @__PURE__ */ jsxs(Fragment, { children: [
6156
+ const t = useT();
6157
+ return /* @__PURE__ */ jsx(ShopSurface, { tone, fill: true, className: styles$L.root, children: /* @__PURE__ */ jsx("div", { className: styles$L.inner, role: "status", "aria-label": t("Loading"), children: shape === "media" ? /* @__PURE__ */ jsxs(Fragment, { children: [
5918
6158
  /* @__PURE__ */ jsx(Skeleton, { className: styles$L.media }),
5919
6159
  /* @__PURE__ */ jsxs("div", { className: styles$L.lines, children: [
5920
6160
  /* @__PURE__ */ jsx(Skeleton, { height: 22, className: styles$L.lineWide }),
@@ -6110,12 +6350,13 @@ const styles$J = {
6110
6350
  body: body$7
6111
6351
  };
6112
6352
  function ErrorState({ code, title: title2, body: body3, onRetry, retryLabel }) {
6353
+ const t = useT();
6113
6354
  const treatment = treatmentFor(code);
6114
6355
  const showRetry = Boolean(onRetry) && treatment.retriable;
6115
6356
  return /* @__PURE__ */ jsxs("div", { className: styles$J.root, role: "alert", children: [
6116
- /* @__PURE__ */ jsx("h2", { className: styles$J.title, children: title2 ?? treatment.title }),
6117
- /* @__PURE__ */ jsx("p", { className: styles$J.body, children: body3 ?? treatment.body }),
6118
- showRetry && /* @__PURE__ */ jsx(Button, { variant: "secondary", onClick: onRetry, children: retryLabel ?? "Try again" })
6357
+ /* @__PURE__ */ jsx("h2", { className: styles$J.title, children: title2 ?? t(treatment.title) }),
6358
+ /* @__PURE__ */ jsx("p", { className: styles$J.body, children: body3 ?? t(treatment.body) }),
6359
+ showRetry && /* @__PURE__ */ jsx(Button, { variant: "secondary", onClick: onRetry, children: retryLabel ?? t("Try again") })
6119
6360
  ] });
6120
6361
  }
6121
6362
  const STATUS_LABEL = {
@@ -6135,9 +6376,10 @@ const STATUS_TONE = {
6135
6376
  refunded: "critical"
6136
6377
  };
6137
6378
  function StatusBadge({ status }) {
6379
+ const t = useT();
6138
6380
  const tone = STATUS_TONE[status] ?? "neutral";
6139
6381
  const label2 = STATUS_LABEL[status] ?? status;
6140
- return /* @__PURE__ */ jsx(Badge, { tone, children: label2 });
6382
+ return /* @__PURE__ */ jsx(Badge, { tone, children: t(label2) });
6141
6383
  }
6142
6384
  const viewport = "_viewport_5aafz_14";
6143
6385
  const anchor = "_anchor_5aafz_41";
@@ -6307,52 +6549,6 @@ function ToastProvider({ children }) {
6307
6549
  }) })
6308
6550
  ] });
6309
6551
  }
6310
- const MINOR_UNIT_EXPONENT = {
6311
- JPY: 0,
6312
- KRW: 0,
6313
- VND: 0,
6314
- CLP: 0,
6315
- ISK: 0,
6316
- BHD: 3,
6317
- KWD: 3,
6318
- OMR: 3,
6319
- TND: 3,
6320
- JOD: 3
6321
- };
6322
- function minorUnitExponent(currency) {
6323
- return MINOR_UNIT_EXPONENT[currency.toUpperCase()] ?? 2;
6324
- }
6325
- function formatMoney(money2, locale) {
6326
- const exponent = minorUnitExponent(money2.currency);
6327
- const major = money2.amount / 10 ** exponent;
6328
- try {
6329
- return new Intl.NumberFormat(locale, {
6330
- style: "currency",
6331
- currency: money2.currency
6332
- }).format(major);
6333
- } catch {
6334
- return `${major.toFixed(exponent)} ${money2.currency}`;
6335
- }
6336
- }
6337
- function discountPct(price2, compareAt2) {
6338
- if (!compareAt2) return void 0;
6339
- if (compareAt2.currency !== price2.currency) return void 0;
6340
- if (compareAt2.amount <= price2.amount) return void 0;
6341
- const pct = Math.round((compareAt2.amount - price2.amount) / compareAt2.amount * 100);
6342
- return pct > 0 ? pct : void 0;
6343
- }
6344
- function useMoney(defaultLocale) {
6345
- const locale = useLocale(defaultLocale);
6346
- const format = useCallback(
6347
- (money2, localeOverride) => formatMoney(money2, localeOverride ?? locale),
6348
- [locale]
6349
- );
6350
- return { format };
6351
- }
6352
- function useLocale(override) {
6353
- const shop = useShopOptional();
6354
- return override ?? shop?.locale ?? shop?.market?.lang ?? (typeof navigator !== "undefined" ? navigator.language : void 0);
6355
- }
6356
6552
  const badge$4 = "_badge_156ya_2";
6357
6553
  const icon$3 = "_icon_156ya_18";
6358
6554
  const styles$H = {
@@ -6649,26 +6845,27 @@ function OrderSummary({
6649
6845
  rows = CART_ROWS,
6650
6846
  discount: discount2
6651
6847
  }) {
6848
+ const t = useT();
6652
6849
  const { format } = useMoney();
6653
6850
  const isDeferred = (key) => deferred.includes(key);
6654
6851
  const visible = rows.filter((row2) => !hidden.includes(row2.key)).filter((row2) => row2.key !== "discount" || discount2 !== void 0);
6655
6852
  return /* @__PURE__ */ jsx("dl", { className: styles$E.summary, children: visible.map(({ label: label2, key }) => {
6656
6853
  if (key === "discount" && discount2) {
6657
6854
  return /* @__PURE__ */ jsxs("div", { className: [styles$E.row, styles$E.discount].join(" "), children: [
6658
- /* @__PURE__ */ jsx("dt", { children: label2 }),
6855
+ /* @__PURE__ */ jsx("dt", { children: t(label2) }),
6659
6856
  /* @__PURE__ */ jsx("dd", { children: `−${format(discount2)}` })
6660
6857
  ] }, key);
6661
6858
  }
6662
6859
  const pending2 = key !== "total" && isDeferred(key);
6663
6860
  return /* @__PURE__ */ jsxs("div", { className: styles$E.row, children: [
6664
- /* @__PURE__ */ jsx("dt", { children: label2 }),
6665
- /* @__PURE__ */ jsx("dd", { className: pending2 ? styles$E.pending : void 0, children: pending2 ? "Calculated at checkout" : renderValue(key, pricing, format) })
6861
+ /* @__PURE__ */ jsx("dt", { children: t(label2) }),
6862
+ /* @__PURE__ */ jsx("dd", { className: pending2 ? styles$E.pending : void 0, children: pending2 ? t("Calculated at checkout") : renderValue(key, pricing, format, t) })
6666
6863
  ] }, key);
6667
6864
  }) });
6668
6865
  }
6669
- function renderValue(key, pricing, format) {
6866
+ function renderValue(key, pricing, format, t) {
6670
6867
  if (key === "shipping" && pricing.shipping.amount === 0) {
6671
- return /* @__PURE__ */ jsx("span", { className: styles$E.free, children: "Free" });
6868
+ return /* @__PURE__ */ jsx("span", { className: styles$E.free, children: t("Free") });
6672
6869
  }
6673
6870
  return key === "discount" ? null : format(pricing[key]);
6674
6871
  }
@@ -6714,9 +6911,10 @@ const SUMMARY_ROWS = [
6714
6911
  ];
6715
6912
  function OrderLine({ item: item2 }) {
6716
6913
  const { format } = useMoney();
6914
+ const t = useT();
6717
6915
  const compareAt2 = item2.compare_at_unit_price;
6718
6916
  const pct = compareAt2 ? discountPct(item2.unit_price, compareAt2) : void 0;
6719
- const details2 = detailsOf(item2);
6917
+ const details2 = detailsOf(item2, t);
6720
6918
  return /* @__PURE__ */ jsxs("li", { className: styles$D.line, children: [
6721
6919
  /* @__PURE__ */ jsx("div", { className: styles$D.thumb, children: item2.image ? /* @__PURE__ */ jsx(ShopImage, { src: item2.image, alt: "", fill: true, sizes: "48px", className: styles$D.image }) : /* @__PURE__ */ jsx("div", { className: styles$D.placeholder, "aria-hidden": "true" }) }),
6722
6920
  /* @__PURE__ */ jsxs("div", { className: styles$D.lineBody, children: [
@@ -6738,23 +6936,26 @@ function OrderLine({ item: item2 }) {
6738
6936
  ] });
6739
6937
  }
6740
6938
  function OrderLines({ order }) {
6741
- return /* @__PURE__ */ jsx("ul", { className: styles$D.lines, "aria-label": "Items", children: order.items.map((item2) => /* @__PURE__ */ jsx(OrderLine, { item: item2 }, item2.line_ref)) });
6939
+ const t = useT();
6940
+ return /* @__PURE__ */ jsx("ul", { className: styles$D.lines, "aria-label": t("Items"), children: order.items.map((item2) => /* @__PURE__ */ jsx(OrderLine, { item: item2 }, item2.line_ref)) });
6742
6941
  }
6743
6942
  function ShippingAddressCard({ order }) {
6744
- return /* @__PURE__ */ jsxs("section", { className: styles$D.card, "aria-label": "Shipping address", children: [
6943
+ const t = useT();
6944
+ return /* @__PURE__ */ jsxs("section", { className: styles$D.card, "aria-label": t("Shipping address"), children: [
6745
6945
  /* @__PURE__ */ jsx("h2", { className: styles$D.cardTitle, children: "Shipping address" }),
6746
6946
  /* @__PURE__ */ jsx("p", { className: styles$D.cardBody, children: formatAddress(order.ship_to) })
6747
6947
  ] });
6748
6948
  }
6749
6949
  function OrderSummaryCard({ order }) {
6750
- return /* @__PURE__ */ jsxs("section", { className: [styles$D.card, styles$D.summaryCard].join(" "), "aria-label": "Order summary", children: [
6950
+ const t = useT();
6951
+ return /* @__PURE__ */ jsxs("section", { className: [styles$D.card, styles$D.summaryCard].join(" "), "aria-label": t("Order summary"), children: [
6751
6952
  /* @__PURE__ */ jsx("h2", { className: styles$D.cardTitle, children: "Order summary" }),
6752
6953
  /* @__PURE__ */ jsx(OrderSummary, { pricing: toPricing(order), rows: rowsFor(order), discount: order.totals.discount })
6753
6954
  ] });
6754
6955
  }
6755
- function detailsOf(item2) {
6756
- const pairs = variantPairs(item2.attributes).map((p) => `${p.label}: ${p.value}`);
6757
- return item2.qty > 1 ? [...pairs, `Qty: ${item2.qty}`] : pairs;
6956
+ function detailsOf(item2, t) {
6957
+ const pairs = variantPairs(item2.attributes).map((p) => `${t(p.label)}: ${p.value}`);
6958
+ return item2.qty > 1 ? [...pairs, t("Qty: {0}", item2.qty)] : pairs;
6758
6959
  }
6759
6960
  function rowsFor(order) {
6760
6961
  if (order.totals.tax.amount === 0) return SUMMARY_ROWS;
@@ -7014,6 +7215,7 @@ function OrderTrackingContent({
7014
7215
  onCancelled,
7015
7216
  onReorder
7016
7217
  }) {
7218
+ const t = useT();
7017
7219
  const { api } = useShop();
7018
7220
  const locale = useLocale(localeProp);
7019
7221
  const [order, setOrder] = useState(null);
@@ -7057,7 +7259,7 @@ function OrderTrackingContent({
7057
7259
  emit({ type: "order_cancellation_requested", orderRef, reason: reason2 });
7058
7260
  onCancelled?.(updated);
7059
7261
  } catch (err) {
7060
- setCancelError(treatmentFor(codeOf(err)).body);
7262
+ setCancelError(t(treatmentFor(codeOf(err)).body));
7061
7263
  } finally {
7062
7264
  setCancelling(false);
7063
7265
  }
@@ -7086,7 +7288,7 @@ function OrderTrackingContent({
7086
7288
  ] });
7087
7289
  }
7088
7290
  return /* @__PURE__ */ jsxs("div", { className: styles$A.page, children: [
7089
- /* @__PURE__ */ jsxs("section", { className: styles$A.widget, "aria-label": "Delivery status", children: [
7291
+ /* @__PURE__ */ jsxs("section", { className: styles$A.widget, "aria-label": t("Delivery status"), children: [
7090
7292
  /* @__PURE__ */ jsxs("div", { className: styles$A.titleRow, children: [
7091
7293
  /* @__PURE__ */ jsx("h1", { className: styles$A.headline, children: `Order #${shortRef$1(order.order_ref)}` }),
7092
7294
  order.tracking?.url && /* @__PURE__ */ jsxs(
@@ -7684,9 +7886,10 @@ const TONE = {
7684
7886
  cancelled: "cancelled"
7685
7887
  };
7686
7888
  function OrderStatusBadge({ status }) {
7889
+ const t = useT();
7687
7890
  const label2 = LABEL[status] ?? status.replace(/_/g, " ");
7688
7891
  const tone = TONE[status] ?? "progress";
7689
- return /* @__PURE__ */ jsx("span", { className: [styles$v.badge, styles$v[tone]].join(" "), children: label2 });
7892
+ return /* @__PURE__ */ jsx("span", { className: [styles$v.badge, styles$v[tone]].join(" "), children: t(label2) });
7690
7893
  }
7691
7894
  const page$1 = "_page_6xodo_2";
7692
7895
  const empty = "_empty_6xodo_22";
@@ -7736,6 +7939,7 @@ function OrderListView(props) {
7736
7939
  return /* @__PURE__ */ jsx(ShopSurface, { tone: "light", fill: true, children: /* @__PURE__ */ jsx(OrderListContent, { ...props }) });
7737
7940
  }
7738
7941
  function OrderListContent({ onOpenOrder, onStartShopping, locale: localeProp }) {
7942
+ const t = useT();
7739
7943
  const { api } = useShop();
7740
7944
  const locale = useLocale(localeProp);
7741
7945
  const [orders2, setOrders] = useState([]);
@@ -7769,7 +7973,7 @@ function OrderListContent({ onOpenOrder, onStartShopping, locale: localeProp })
7769
7973
  return /* @__PURE__ */ jsx("div", { className: styles$u.empty, children: /* @__PURE__ */ jsx(
7770
7974
  EmptyState,
7771
7975
  {
7772
- title: "Nothing here yet",
7976
+ title: t("Nothing here yet"),
7773
7977
  body: "Your orders will show up here once you've shopped.",
7774
7978
  ...onStartShopping ? {
7775
7979
  action: /* @__PURE__ */ jsx("button", { type: "button", className: styles$u.cta, onClick: onStartShopping, children: "Continue shopping" })
@@ -8011,8 +8215,9 @@ const styles$r = {
8011
8215
  clear
8012
8216
  };
8013
8217
  function FilterBar({ options: options2, active, onToggle, onClear }) {
8218
+ const t = useT();
8014
8219
  const hasActive = active.length > 0;
8015
- return /* @__PURE__ */ jsxs("div", { className: styles$r.bar, role: "group", "aria-label": "Filters", children: [
8220
+ return /* @__PURE__ */ jsxs("div", { className: styles$r.bar, role: "group", "aria-label": t("Filters"), children: [
8016
8221
  /* @__PURE__ */ jsx("div", { className: styles$r.chips, children: options2.map((opt) => {
8017
8222
  const on2 = active.includes(opt.value);
8018
8223
  return /* @__PURE__ */ jsx(
@@ -8042,6 +8247,7 @@ function ProductGrid({
8042
8247
  initialCursor,
8043
8248
  filters = []
8044
8249
  }) {
8250
+ const t = useT();
8045
8251
  const { api, market, emit } = useShop();
8046
8252
  const [products, setProducts] = useState(initialProducts);
8047
8253
  const [cursor, setCursor] = useState(initialCursor);
@@ -8090,7 +8296,7 @@ function ProductGrid({
8090
8296
  visible.length === 0 ? /* @__PURE__ */ jsx(
8091
8297
  EmptyState,
8092
8298
  {
8093
- title: "No products",
8299
+ title: t("No products"),
8094
8300
  body: "Nothing matches these filters.",
8095
8301
  action: active.length > 0 ? /* @__PURE__ */ jsx(Button, { variant: "secondary", onClick: () => setActive([]), children: "Clear filters" }) : void 0
8096
8302
  }
@@ -8149,6 +8355,7 @@ const styles$o = {
8149
8355
  };
8150
8356
  const DISMISS_THRESHOLD_PX = 96;
8151
8357
  function BottomSheet({ open, onClose, title: title2, children, footer: footer2 }) {
8358
+ const t = useT();
8152
8359
  const sheetRef = useRef(null);
8153
8360
  const dragStartY = useRef(null);
8154
8361
  const dragDistance = useRef(0);
@@ -8202,7 +8409,7 @@ function BottomSheet({ open, onClose, title: title2, children, footer: footer2 }
8202
8409
  ),
8203
8410
  /* @__PURE__ */ jsxs("div", { className: styles$o.header, children: [
8204
8411
  /* @__PURE__ */ jsx("h2", { id: titleId, className: styles$o.title, children: title2 }),
8205
- /* @__PURE__ */ jsx("button", { type: "button", className: styles$o.close, onClick: onClose, "aria-label": "Close", children: /* @__PURE__ */ jsx("svg", { width: "20", height: "20", viewBox: "0 0 24 24", fill: "none", "aria-hidden": "true", children: /* @__PURE__ */ jsx(
8412
+ /* @__PURE__ */ jsx("button", { type: "button", className: styles$o.close, onClick: onClose, "aria-label": t("Close"), children: /* @__PURE__ */ jsx("svg", { width: "20", height: "20", viewBox: "0 0 24 24", fill: "none", "aria-hidden": "true", children: /* @__PURE__ */ jsx(
8206
8413
  "path",
8207
8414
  {
8208
8415
  d: "M6 6l12 12M18 6L6 18",
@@ -8223,9 +8430,6 @@ const LOW_STOCK_THRESHOLD = 5;
8223
8430
  function isLowStock(available) {
8224
8431
  return available !== void 0 && available > 0 && available <= LOW_STOCK_THRESHOLD;
8225
8432
  }
8226
- function lowStockLabel(available) {
8227
- return `Only ${available} left`;
8228
- }
8229
8433
  let idCounter = 0;
8230
8434
  function useStableId(prefix) {
8231
8435
  const [id] = useState(() => `${prefix}-${idCounter += 1}`);
@@ -8283,6 +8487,7 @@ function QtyStepper({
8283
8487
  disabled: disabled2,
8284
8488
  capDescribedBy
8285
8489
  }) {
8490
+ const t = useT();
8286
8491
  const ownCapId = useStableId("qty-cap");
8287
8492
  const atMax = max !== void 0 && qty >= max;
8288
8493
  const capId = capDescribedBy ?? ownCapId;
@@ -8306,7 +8511,7 @@ function QtyStepper({
8306
8511
  className: styles$n.button,
8307
8512
  onClick: decrement,
8308
8513
  disabled: disabled2,
8309
- "aria-label": willDelete ? "Remove item" : "Decrease quantity",
8514
+ "aria-label": willDelete ? t("Remove item") : t("Decrease quantity"),
8310
8515
  children: willDelete ? /* @__PURE__ */ jsx(TrashIcon, {}) : /* @__PURE__ */ jsx(MinusIcon, {})
8311
8516
  }
8312
8517
  ),
@@ -8318,13 +8523,13 @@ function QtyStepper({
8318
8523
  className: styles$n.button,
8319
8524
  onClick: increment,
8320
8525
  disabled: disabled2 || atMax,
8321
- "aria-label": "Increase quantity",
8526
+ "aria-label": t("Increase quantity"),
8322
8527
  "aria-describedby": atMax ? capId : void 0,
8323
8528
  children: /* @__PURE__ */ jsx(PlusIcon, {})
8324
8529
  }
8325
8530
  )
8326
8531
  ] }),
8327
- atMax && capDescribedBy === void 0 && /* @__PURE__ */ jsx("span", { id: ownCapId, className: styles$n.cap, role: "status", children: max === 0 ? "Out of stock" : lowStockLabel(max) })
8532
+ atMax && capDescribedBy === void 0 && /* @__PURE__ */ jsx("span", { id: ownCapId, className: styles$n.cap, role: "status", children: max === 0 ? t("Out of stock") : t("Only {0} left", max) })
8328
8533
  ] });
8329
8534
  }
8330
8535
  const line = "_line_1s2s6_6";
@@ -8378,6 +8583,7 @@ function CartLineItem({
8378
8583
  onRemove,
8379
8584
  pending: pending2
8380
8585
  }) {
8586
+ const t = useT();
8381
8587
  const { format } = useMoney();
8382
8588
  const displayTitle = title2 ?? item2.title ?? item2.sku;
8383
8589
  const displayImage = image2 ?? item2.image;
@@ -8399,7 +8605,7 @@ function CartLineItem({
8399
8605
  /* @__PURE__ */ jsxs("div", { className: styles$m.meta, children: [
8400
8606
  /* @__PURE__ */ jsx("span", { className: styles$m.title, children: displayTitle }),
8401
8607
  pairs.length > 0 && /* @__PURE__ */ jsx("div", { className: styles$m.details, children: pairs.map(({ key, label: label2, value: value2 }) => /* @__PURE__ */ jsxs("span", { className: styles$m.detail, children: [
8402
- label2,
8608
+ t(label2),
8403
8609
  ": ",
8404
8610
  value2
8405
8611
  ] }, key)) })
@@ -8422,7 +8628,7 @@ function CartLineItem({
8422
8628
  )
8423
8629
  ] })
8424
8630
  ] }),
8425
- lowStock2 && /* @__PURE__ */ jsx("div", { className: styles$m.labels, children: /* @__PURE__ */ jsx("span", { id: noticeId, className: styles$m.lowStock, role: "status", children: lowStockLabel(available) }) })
8631
+ lowStock2 && /* @__PURE__ */ jsx("div", { className: styles$m.labels, children: /* @__PURE__ */ jsx("span", { id: noticeId, className: styles$m.lowStock, role: "status", children: t("Only {0} left", available) }) })
8426
8632
  ] });
8427
8633
  }
8428
8634
  const box$1 = "_box_1cf1a_1";
@@ -8438,7 +8644,8 @@ const styles$l = {
8438
8644
  divider: divider$1
8439
8645
  };
8440
8646
  function ShippingInfo() {
8441
- return /* @__PURE__ */ jsxs("section", { className: styles$l.box, "aria-label": "Shipping and returns", children: [
8647
+ const t = useT();
8648
+ return /* @__PURE__ */ jsxs("section", { className: styles$l.box, "aria-label": t("Shipping and returns"), children: [
8442
8649
  /* @__PURE__ */ jsxs("div", { className: styles$l.row, children: [
8443
8650
  /* @__PURE__ */ jsxs("svg", { className: styles$l.icon, width: "24", height: "24", viewBox: "0 0 24 24", fill: "none", "aria-hidden": "true", children: [
8444
8651
  /* @__PURE__ */ jsx(
@@ -8520,13 +8727,15 @@ const styles$j = {
8520
8727
  lines
8521
8728
  };
8522
8729
  function CartView(props = {}) {
8523
- useSetScreenTitle("Cart");
8730
+ const t = useT();
8731
+ useSetScreenTitle(t("Cart"));
8524
8732
  return /* @__PURE__ */ jsx(ShopSurface, { tone: "light", fill: true, className: styles$j.surface, children: /* @__PURE__ */ jsx(CartViewContent, { ...props }) });
8525
8733
  }
8526
8734
  function CartViewContent({
8527
8735
  onContinueShopping,
8528
- checkoutLabel = "Proceed to checkout"
8736
+ checkoutLabel
8529
8737
  } = {}) {
8738
+ const t = useT();
8530
8739
  const toast2 = useToast();
8531
8740
  const { api, emit } = useShop();
8532
8741
  const [cart2, setCart] = useState(null);
@@ -8576,7 +8785,7 @@ function CartViewContent({
8576
8785
  } catch (err) {
8577
8786
  if (optimistic) setCart(snapshot);
8578
8787
  const code = codeOf(err);
8579
- toast2.show(treatmentFor(code).body, code === "out_of_stock" ? "critical" : "neutral");
8788
+ toast2.show(t(treatmentFor(code).body), code === "out_of_stock" ? "critical" : "neutral");
8580
8789
  return false;
8581
8790
  } finally {
8582
8791
  setPendingSku(null);
@@ -8602,7 +8811,7 @@ function CartViewContent({
8602
8811
  description: describeLine(removed),
8603
8812
  image: removed.image,
8604
8813
  action: {
8605
- label: "Undo",
8814
+ label: t("Undo"),
8606
8815
  onAction: () => {
8607
8816
  void mutate(sku, () => api.cart.addItem({ sku, qty: removed.qty })).then((undone) => {
8608
8817
  if (undone) emit({ type: "add_to_cart", sku, qty: removed.qty });
@@ -8636,7 +8845,7 @@ function CartViewContent({
8636
8845
  /* @__PURE__ */ jsx(
8637
8846
  EmptyState,
8638
8847
  {
8639
- title: "Nothing here yet",
8848
+ title: t("Nothing here yet"),
8640
8849
  body: "Your items will show up here once you've added to your cart.",
8641
8850
  action: (
8642
8851
  // One label, because the design gives one. In the sheet, "continue shopping"
@@ -8658,7 +8867,7 @@ function CartViewContent({
8658
8867
  window.location.assign(checkout_url);
8659
8868
  } catch (err) {
8660
8869
  const code = codeOf(err);
8661
- toast2.show(treatmentFor(code).body, "critical");
8870
+ toast2.show(t(treatmentFor(code).body), "critical");
8662
8871
  setHandingOff(false);
8663
8872
  }
8664
8873
  }
@@ -8667,7 +8876,7 @@ function CartViewContent({
8667
8876
  /* @__PURE__ */ jsxs("div", { className: styles$j.body, children: [
8668
8877
  /* @__PURE__ */ jsxs("section", { className: styles$j.items, children: [
8669
8878
  /* @__PURE__ */ jsxs("div", { className: styles$j.sectionHeader, children: [
8670
- /* @__PURE__ */ jsx("h2", { className: styles$j.sectionTitle, children: "Items" }),
8879
+ /* @__PURE__ */ jsx("h2", { className: styles$j.sectionTitle, children: t("Items") }),
8671
8880
  /* @__PURE__ */ jsx("span", { className: styles$j.count, children: itemCount })
8672
8881
  ] }),
8673
8882
  /* @__PURE__ */ jsx("ul", { className: styles$j.lines, children: cart2.items.map((item2) => /* @__PURE__ */ jsx("li", { children: /* @__PURE__ */ jsx(
@@ -8693,7 +8902,7 @@ function CartViewContent({
8693
8902
  }
8694
8903
  )
8695
8904
  ] }),
8696
- /* @__PURE__ */ jsx(StickyCtaBar, { variant: "divider", children: /* @__PURE__ */ jsx(Button, { variant: "primary", onClick: () => void handOff(cart2), disabled: handingOff, children: checkoutLabel }) })
8905
+ /* @__PURE__ */ jsx(StickyCtaBar, { variant: "divider", children: /* @__PURE__ */ jsx(Button, { variant: "primary", onClick: () => void handOff(cart2), disabled: handingOff, children: checkoutLabel ?? t("Proceed to checkout") }) })
8697
8906
  ] });
8698
8907
  }
8699
8908
  function describeLine(item2) {
@@ -8705,24 +8914,25 @@ function useCartSheet() {
8705
8914
  return useContext(CartSheetContext);
8706
8915
  }
8707
8916
  function CartSheetProvider({ children }) {
8917
+ const t = useT();
8708
8918
  const [isOpen, setIsOpen] = useState(false);
8709
8919
  const open = useCallback(() => setIsOpen(true), []);
8710
8920
  const close2 = useCallback(() => setIsOpen(false), []);
8711
8921
  const api = useMemo(() => ({ open, close: close2, isOpen }), [open, close2, isOpen]);
8712
8922
  return /* @__PURE__ */ jsxs(CartSheetContext.Provider, { value: api, children: [
8713
8923
  children,
8714
- isOpen && /* @__PURE__ */ jsx(BottomSheet, { open: true, onClose: close2, title: "Cart", children: /* @__PURE__ */ jsx(NoScreenTitle, { children: /* @__PURE__ */ jsx(CartView, { onContinueShopping: close2 }) }) })
8924
+ isOpen && /* @__PURE__ */ jsx(BottomSheet, { open: true, onClose: close2, title: t("Cart"), children: /* @__PURE__ */ jsx(NoScreenTitle, { children: /* @__PURE__ */ jsx(CartView, { onContinueShopping: close2 }) }) })
8715
8925
  ] });
8716
8926
  }
8717
- const gallery = "_gallery_10mch_1";
8718
- const track$2 = "_track_10mch_8";
8719
- const slide$1 = "_slide_10mch_32";
8720
- const image$4 = "_image_10mch_39";
8721
- const placeholder$1 = "_placeholder_10mch_43";
8722
- const share = "_share_10mch_50";
8723
- const dots$2 = "_dots_10mch_67";
8724
- const dot$2 = "_dot_10mch_67";
8725
- const dotActive$2 = "_dotActive_10mch_91";
8927
+ const gallery = "_gallery_9e68b_1";
8928
+ const track$2 = "_track_9e68b_8";
8929
+ const slide$1 = "_slide_9e68b_32";
8930
+ const image$4 = "_image_9e68b_39";
8931
+ const placeholder$1 = "_placeholder_9e68b_43";
8932
+ const share = "_share_9e68b_50";
8933
+ const dots$2 = "_dots_9e68b_83";
8934
+ const dot$2 = "_dot_9e68b_83";
8935
+ const dotActive$2 = "_dotActive_9e68b_134";
8726
8936
  const styles$i = {
8727
8937
  gallery,
8728
8938
  track: track$2,
@@ -8735,6 +8945,7 @@ const styles$i = {
8735
8945
  dotActive: dotActive$2
8736
8946
  };
8737
8947
  function MediaGallery({ media: media2, alt }) {
8948
+ const t = useT();
8738
8949
  const trackRef = useRef(null);
8739
8950
  const [active, setActive] = useState(0);
8740
8951
  useEffect(() => {
@@ -8770,7 +8981,7 @@ function MediaGallery({ media: media2, alt }) {
8770
8981
  }
8771
8982
  }
8772
8983
  return /* @__PURE__ */ jsxs("div", { className: styles$i.gallery, children: [
8773
- /* @__PURE__ */ jsx("button", { type: "button", className: styles$i.share, onClick: share2, "aria-label": "Share", children: /* @__PURE__ */ jsx("svg", { width: "20", height: "20", viewBox: "0 0 24 24", fill: "none", "aria-hidden": "true", children: /* @__PURE__ */ jsx(
8984
+ /* @__PURE__ */ jsx("button", { type: "button", className: styles$i.share, onClick: share2, "aria-label": t("Share"), children: /* @__PURE__ */ jsx("svg", { width: "20", height: "20", viewBox: "0 0 24 24", fill: "none", "aria-hidden": "true", children: /* @__PURE__ */ jsx(
8774
8985
  "path",
8775
8986
  {
8776
8987
  d: "M12 3v12M12 3 8 7m4-4 4 4M5 12v6a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2v-6",
@@ -8791,7 +9002,7 @@ function MediaGallery({ media: media2, alt }) {
8791
9002
  priority: i === 0
8792
9003
  }
8793
9004
  ) }, src)) }),
8794
- media2.length > 1 && /* @__PURE__ */ jsx("div", { className: styles$i.dots, role: "tablist", "aria-label": "Gallery pagination", children: media2.map((src, i) => /* @__PURE__ */ jsx(
9005
+ media2.length > 1 && /* @__PURE__ */ jsx("div", { className: styles$i.dots, role: "tablist", "aria-label": t("Gallery pagination"), children: media2.map((src, i) => /* @__PURE__ */ jsx(
8795
9006
  "button",
8796
9007
  {
8797
9008
  type: "button",
@@ -8869,6 +9080,7 @@ function convert(cell, from, to) {
8869
9080
  return (to === "in" ? n / CM_PER_INCH : n * CM_PER_INCH).toFixed(1);
8870
9081
  }
8871
9082
  function SizeGuideSheet({ guide, onClose }) {
9083
+ const t = useT();
8872
9084
  const sheetRef = useRef(null);
8873
9085
  const columns = guide.columns ?? [];
8874
9086
  const rows = useMemo(() => guide.rows ?? [], [guide.rows]);
@@ -8893,7 +9105,7 @@ function SizeGuideSheet({ guide, onClose }) {
8893
9105
  "aria-labelledby": "size-guide-title",
8894
9106
  onClick: (e) => e.stopPropagation(),
8895
9107
  children: [
8896
- /* @__PURE__ */ jsx(SheetHeader, { onClose, closeLabel: "Close size guide" }),
9108
+ /* @__PURE__ */ jsx(SheetHeader, { onClose, closeLabel: t("Close size guide") }),
8897
9109
  /* @__PURE__ */ jsxs("div", { className: styles$h.body, children: [
8898
9110
  /* @__PURE__ */ jsxs("div", { className: styles$h.titles, children: [
8899
9111
  /* @__PURE__ */ jsx("h2", { id: "size-guide-title", className: styles$h.title, children: guide.title }),
@@ -8944,16 +9156,16 @@ function SizeGuideSheet({ guide, onClose }) {
8944
9156
  }
8945
9157
  ) });
8946
9158
  }
8947
- const root$2 = "_root_9zj90_1";
8948
- const header$3 = "_header_9zj90_7";
8949
- const title$9 = "_title_9zj90_12";
8950
- const chips = "_chips_9zj90_20";
8951
- const chip = "_chip_9zj90_20";
8952
- const selected$2 = "_selected_9zj90_44";
8953
- const disabled$1 = "_disabled_9zj90_56";
8954
- const error = "_error_9zj90_64";
8955
- const sizeGuide = "_sizeGuide_9zj90_71";
8956
- const chevron$2 = "_chevron_9zj90_85";
9159
+ const root$2 = "_root_6sbl9_1";
9160
+ const header$3 = "_header_6sbl9_7";
9161
+ const title$9 = "_title_6sbl9_12";
9162
+ const chips = "_chips_6sbl9_20";
9163
+ const chip = "_chip_6sbl9_20";
9164
+ const selected$2 = "_selected_6sbl9_44";
9165
+ const disabled$1 = "_disabled_6sbl9_56";
9166
+ const error = "_error_6sbl9_64";
9167
+ const sizeGuide = "_sizeGuide_6sbl9_71";
9168
+ const chevron$2 = "_chevron_6sbl9_87";
8957
9169
  const styles$g = {
8958
9170
  root: root$2,
8959
9171
  header: header$3,
@@ -8973,10 +9185,11 @@ function SizeSelector({
8973
9185
  error: error2 = false,
8974
9186
  guide
8975
9187
  }) {
9188
+ const t = useT();
8976
9189
  const [guideOpen, setGuideOpen] = useState(false);
8977
9190
  return /* @__PURE__ */ jsxs("section", { className: styles$g.root, "aria-labelledby": "size-heading", children: [
8978
9191
  /* @__PURE__ */ jsx("div", { className: styles$g.header, children: /* @__PURE__ */ jsx("h2", { id: "size-heading", className: styles$g.title, children: "Size" }) }),
8979
- /* @__PURE__ */ jsx("div", { className: styles$g.chips, role: "radiogroup", "aria-label": "Size", "aria-required": "true", children: sizes.map((size) => {
9192
+ /* @__PURE__ */ jsx("div", { className: styles$g.chips, role: "radiogroup", "aria-label": t("Size"), "aria-required": "true", children: sizes.map((size) => {
8980
9193
  const isSelected = size.value === selected2;
8981
9194
  const disabled2 = !size.available;
8982
9195
  return /* @__PURE__ */ jsxs(
@@ -9062,13 +9275,14 @@ const styles$f = {
9062
9275
  stockBadge
9063
9276
  };
9064
9277
  function ColorSelector({ colours, selected: selected2, onSelect }) {
9278
+ const t = useT();
9065
9279
  return /* @__PURE__ */ jsxs("section", { className: styles$f.root, "aria-labelledby": "colour-heading", children: [
9066
9280
  /* @__PURE__ */ jsxs("p", { className: styles$f.header, children: [
9067
9281
  /* @__PURE__ */ jsx("span", { id: "colour-heading", className: styles$f.title, children: "Color:" }),
9068
9282
  " ",
9069
9283
  /* @__PURE__ */ jsx("span", { className: styles$f.value, children: selected2 ?? "Select" })
9070
9284
  ] }),
9071
- /* @__PURE__ */ jsx("div", { className: styles$f.tiles, role: "radiogroup", "aria-label": "Color", "aria-required": "true", children: colours.map((c) => {
9285
+ /* @__PURE__ */ jsx("div", { className: styles$f.tiles, role: "radiogroup", "aria-label": t("Color"), "aria-required": "true", children: colours.map((c) => {
9072
9286
  const isSelected = c.value === selected2;
9073
9287
  const soldOut = !c.available;
9074
9288
  const lowStock2 = !soldOut && isLowStock(c.remaining);
@@ -9114,6 +9328,7 @@ function VariantSelector({
9114
9328
  onSelect,
9115
9329
  labelAttribute
9116
9330
  }) {
9331
+ const t = useT();
9117
9332
  function labelFor(variant) {
9118
9333
  if (labelAttribute && variant.attributes[labelAttribute]) {
9119
9334
  return variant.attributes[labelAttribute];
@@ -9123,7 +9338,7 @@ function VariantSelector({
9123
9338
  }
9124
9339
  return /* @__PURE__ */ jsxs("fieldset", { className: styles$e.fieldset, children: [
9125
9340
  /* @__PURE__ */ jsx("legend", { className: styles$e.legend, children: "Select an option" }),
9126
- /* @__PURE__ */ jsx("div", { className: styles$e.options, role: "radiogroup", "aria-label": "Variant", children: variants.map((variant) => {
9341
+ /* @__PURE__ */ jsx("div", { className: styles$e.options, role: "radiogroup", "aria-label": t("Variant"), children: variants.map((variant) => {
9127
9342
  const selected2 = variant.sku === selectedSku;
9128
9343
  const disabled2 = !variant.in_stock;
9129
9344
  return /* @__PURE__ */ jsxs(
@@ -9150,13 +9365,13 @@ function VariantSelector({
9150
9365
  }) })
9151
9366
  ] });
9152
9367
  }
9153
- const root = "_root_t4qba_2";
9154
- const group = "_group_t4qba_8";
9155
- const title$7 = "_title_t4qba_14";
9156
- const body$1 = "_body_t4qba_22";
9157
- const paragraph = "_paragraph_t4qba_26";
9158
- const clamped = "_clamped_t4qba_46";
9159
- const toggle = "_toggle_t4qba_51";
9368
+ const root = "_root_9cj0g_2";
9369
+ const group = "_group_9cj0g_8";
9370
+ const title$7 = "_title_9cj0g_14";
9371
+ const body$1 = "_body_9cj0g_22";
9372
+ const paragraph = "_paragraph_9cj0g_26";
9373
+ const clamped = "_clamped_9cj0g_46";
9374
+ const toggle = "_toggle_9cj0g_51";
9160
9375
  const styles$d = {
9161
9376
  root,
9162
9377
  group,
@@ -9286,6 +9501,7 @@ const styles$a = {
9286
9501
  oos
9287
9502
  };
9288
9503
  function ProductDetail({ product, inventory: inventory2, recommendations = [] }) {
9504
+ const t = useT();
9289
9505
  const toast2 = useToast();
9290
9506
  const { api, emit } = useShop();
9291
9507
  const cartSheet = useCartSheet();
@@ -9364,7 +9580,7 @@ function ProductDetail({ product, inventory: inventory2, recommendations = [] })
9364
9580
  return false;
9365
9581
  }
9366
9582
  emit({ type: "error", code, scope: "cart.addItem" });
9367
- toast2.show(treatmentFor(code).body, code === "out_of_stock" ? "critical" : "neutral");
9583
+ toast2.show(t(treatmentFor(code).body), code === "out_of_stock" ? "critical" : "neutral");
9368
9584
  return false;
9369
9585
  }
9370
9586
  }
@@ -9387,7 +9603,7 @@ function ProductDetail({ product, inventory: inventory2, recommendations = [] })
9387
9603
  return;
9388
9604
  }
9389
9605
  emit({ type: "error", code, scope: "stockAlerts.create" });
9390
- toast2.show(treatmentFor(code).body, "neutral");
9606
+ toast2.show(t(treatmentFor(code).body), "neutral");
9391
9607
  } finally {
9392
9608
  setBusy(null);
9393
9609
  }
@@ -9419,7 +9635,7 @@ function ProductDetail({ product, inventory: inventory2, recommendations = [] })
9419
9635
  description: [product.title, size && `Size ${size}`].filter(Boolean).join(" · "),
9420
9636
  image: variant?.image ?? product.media[0],
9421
9637
  // Falls back to the /cart route where the sheet provider isn't mounted.
9422
- action: cartSheet || navigate ? { label: "View cart", onAction: openCart } : void 0,
9638
+ action: cartSheet || navigate ? { label: t("View cart"), onAction: openCart } : void 0,
9423
9639
  // Points the caret at the cart icon this just landed in.
9424
9640
  anchor: "cart"
9425
9641
  });
@@ -9429,7 +9645,7 @@ function ProductDetail({ product, inventory: inventory2, recommendations = [] })
9429
9645
  const available = selectedVariant?.available ?? inventory2?.available ?? 0;
9430
9646
  const lowStock2 = isLowStock(available);
9431
9647
  const stockNotice = !purchasable || lowStock2;
9432
- const availabilityLabel = !purchasable ? "Out of stock" : lowStock2 ? lowStockLabel(available) : "";
9648
+ const availabilityLabel = !purchasable ? t("Out of stock") : lowStock2 ? t("Only {0} left", available) : "";
9433
9649
  const cta2 = purchasable ? (
9434
9650
  /*
9435
9651
  * Three labels, one button (5241:71382 / 5295:75115 / 5268:72907). "Adding to cart"
@@ -9448,7 +9664,7 @@ function ProductDetail({ product, inventory: inventory2, recommendations = [] })
9448
9664
  onClick: inCart ? openCart : handleAdd,
9449
9665
  loading: busy === "add",
9450
9666
  disabled: busy !== null,
9451
- children: busy === "add" ? "Adding to cart" : inCart ? "Go to cart" : "Add to cart"
9667
+ children: busy === "add" ? t("Adding to cart") : inCart ? t("Go to cart") : t("Add to cart")
9452
9668
  }
9453
9669
  )
9454
9670
  ) : /* @__PURE__ */ jsx(
@@ -9458,7 +9674,7 @@ function ProductDetail({ product, inventory: inventory2, recommendations = [] })
9458
9674
  onClick: handleRemind,
9459
9675
  loading: busy === "remind",
9460
9676
  disabled: alerted || busy !== null,
9461
- children: alerted ? "We'll remind you" : "Remind me when available"
9677
+ children: alerted ? t("We'll remind you") : t("Remind me when available")
9462
9678
  }
9463
9679
  );
9464
9680
  return /* @__PURE__ */ jsxs(ShopSurface, { tone: "light", fill: true, className: styles$a.page, children: [
@@ -9515,7 +9731,7 @@ function ProductDetail({ product, inventory: inventory2, recommendations = [] })
9515
9731
  /* @__PURE__ */ jsx(
9516
9732
  RailCarousel,
9517
9733
  {
9518
- title: "You may also like",
9734
+ title: t("You may also like"),
9519
9735
  products: recommendations.filter((p) => p.sku !== product.sku),
9520
9736
  inset: true
9521
9737
  }
@@ -9643,6 +9859,7 @@ const styles$6 = {
9643
9859
  disclaimer
9644
9860
  };
9645
9861
  function ReviewCarousel({ quotes, disclaimer: disclaimer2 }) {
9862
+ const t = useT();
9646
9863
  const trackRef = useRef(null);
9647
9864
  const [active, setActive] = useState(0);
9648
9865
  useEffect(() => {
@@ -9652,7 +9869,7 @@ function ReviewCarousel({ quotes, disclaimer: disclaimer2 }) {
9652
9869
  track2.addEventListener("scroll", onScroll, { passive: true });
9653
9870
  return () => track2.removeEventListener("scroll", onScroll);
9654
9871
  }, []);
9655
- return /* @__PURE__ */ jsxs("section", { className: styles$6.section, "aria-label": "Reviews", children: [
9872
+ return /* @__PURE__ */ jsxs("section", { className: styles$6.section, "aria-label": t("Reviews"), children: [
9656
9873
  /* @__PURE__ */ jsx("ul", { className: styles$6.track, ref: trackRef, children: quotes.map((q, i) => /* @__PURE__ */ jsxs("li", { className: styles$6.card, children: [
9657
9874
  /* @__PURE__ */ jsxs("blockquote", { className: styles$6.quote, children: [
9658
9875
  "“",
@@ -9676,7 +9893,8 @@ const styles$5 = {
9676
9893
  body
9677
9894
  };
9678
9895
  function WhyUs({ items: items2 }) {
9679
- return /* @__PURE__ */ jsx("section", { className: styles$5.section, "aria-label": "Why shop with us", children: items2.map((it, i) => /* @__PURE__ */ jsxs("div", { className: styles$5.row, children: [
9896
+ const t = useT();
9897
+ return /* @__PURE__ */ jsx("section", { className: styles$5.section, "aria-label": t("Why shop with us"), children: items2.map((it, i) => /* @__PURE__ */ jsxs("div", { className: styles$5.row, children: [
9680
9898
  /* @__PURE__ */ jsx("p", { className: styles$5.title, children: it.title }),
9681
9899
  /* @__PURE__ */ jsx("p", { className: styles$5.body, children: it.body })
9682
9900
  ] }, i)) });
@@ -9751,6 +9969,7 @@ function CategoryContent({ page: page2 }) {
9751
9969
  ] });
9752
9970
  }
9753
9971
  function CategoryView({ code, initialData, onNotFound }) {
9972
+ const t = useT();
9754
9973
  const { api, market, emit } = useShop();
9755
9974
  const [page2, setPage] = useState(initialData ?? null);
9756
9975
  const [error2, setError] = useState();
@@ -9774,7 +9993,7 @@ function CategoryView({ code, initialData, onNotFound }) {
9774
9993
  if (error2 === "category_not_found" && onNotFound) return /* @__PURE__ */ jsx(Fragment, { children: onNotFound() });
9775
9994
  if (page2) return /* @__PURE__ */ jsx(CategoryContent, { page: page2 });
9776
9995
  if (loading) return /* @__PURE__ */ jsx(ScreenSkeleton, { tone: "dark" });
9777
- return /* @__PURE__ */ jsx(ShopSurface, { tone: "dark", fill: true, children: error2 ? /* @__PURE__ */ jsx(ErrorState, { code: error2 }) : /* @__PURE__ */ jsx(EmptyState, { title: "Category unavailable", body: "Check back soon." }) });
9996
+ return /* @__PURE__ */ jsx(ShopSurface, { tone: "dark", fill: true, children: error2 ? /* @__PURE__ */ jsx(ErrorState, { code: error2 }) : /* @__PURE__ */ jsx(EmptyState, { title: t("Category unavailable"), body: "Check back soon." }) });
9778
9997
  }
9779
9998
  function ProductView({
9780
9999
  sku,
@@ -9782,6 +10001,7 @@ function ProductView({
9782
10001
  showRecommendations = true,
9783
10002
  onNotFound
9784
10003
  }) {
10004
+ const t = useT();
9785
10005
  const { api, market, emit } = useShop();
9786
10006
  const [product, setProduct] = useState(initialData?.product ?? null);
9787
10007
  const [inventory2, setInventory] = useState(initialData?.inventory ?? null);
@@ -9817,7 +10037,7 @@ function ProductView({
9817
10037
  live = false;
9818
10038
  };
9819
10039
  }, [api, sku, market, emit, showRecommendations]);
9820
- const unavailable = /* @__PURE__ */ jsx(ShopSurface, { tone: "light", fill: true, children: /* @__PURE__ */ jsx(EmptyState, { title: "Item unavailable", body: "This product is no longer available." }) });
10040
+ const unavailable = /* @__PURE__ */ jsx(ShopSurface, { tone: "light", fill: true, children: /* @__PURE__ */ jsx(EmptyState, { title: t("Item unavailable"), body: t("This product is no longer available.") }) });
9821
10041
  if (error2 === "sku_not_found") {
9822
10042
  if (onNotFound) return /* @__PURE__ */ jsx(Fragment, { children: onNotFound() });
9823
10043
  return unavailable;
@@ -9936,15 +10156,25 @@ function CategoryPanel({ panel: panel2 }) {
9936
10156
  ] });
9937
10157
  }
9938
10158
  function useSlides() {
10159
+ const t = useT();
9939
10160
  const shop = useShopOptional();
9940
- const [panels, setPanels] = useState(FALLBACK_PANELS);
10161
+ const [fetched, setFetched] = useState(null);
10162
+ const fallback = useMemo(
10163
+ () => FALLBACK_PANELS.map((p) => ({
10164
+ ...p,
10165
+ title: t(p.title),
10166
+ subtitle: t(p.subtitle),
10167
+ cta: t(p.cta)
10168
+ })),
10169
+ [t]
10170
+ );
9941
10171
  useEffect(() => {
9942
10172
  const api = shop?.api;
9943
10173
  if (!api) return;
9944
10174
  let live = true;
9945
10175
  void api.content.home().then((home) => {
9946
10176
  if (!live || home.slides.length === 0) return;
9947
- setPanels(
10177
+ setFetched(
9948
10178
  home.slides.map((s) => ({
9949
10179
  key: s.key,
9950
10180
  title: s.title,
@@ -9960,9 +10190,10 @@ function useSlides() {
9960
10190
  live = false;
9961
10191
  };
9962
10192
  }, [shop]);
9963
- return panels;
10193
+ return fetched ?? fallback;
9964
10194
  }
9965
10195
  function HomeShowcase() {
10196
+ const t = useT();
9966
10197
  const assetUrl = useAssetUrl();
9967
10198
  const panels = useSlides();
9968
10199
  const showcaseRef = useRef(null);
@@ -9975,7 +10206,7 @@ function HomeShowcase() {
9975
10206
  * for the surface to fill.
9976
10207
  */
9977
10208
  /* @__PURE__ */ jsx(ShopSurface, { tone: "dark", children: /* @__PURE__ */ jsxs("div", { className: styles$2.showcase, ref: showcaseRef, children: [
9978
- /* @__PURE__ */ jsxs("section", { className: `${styles$2.panel} ${styles$2.hero}`, "aria-label": "DAZN Shop", children: [
10209
+ /* @__PURE__ */ jsxs("section", { className: `${styles$2.panel} ${styles$2.hero}`, "aria-label": t("DAZN Shop"), children: [
9979
10210
  /* @__PURE__ */ jsx("div", { className: styles$2.heroImageBox, children: /* @__PURE__ */ jsx(
9980
10211
  ShopImage,
9981
10212
  {
@@ -9993,7 +10224,7 @@ function HomeShowcase() {
9993
10224
  "img",
9994
10225
  {
9995
10226
  src: assetUrl("/figma/home/dazn-logo.svg"),
9996
- alt: "DAZN",
10227
+ alt: t("DAZN"),
9997
10228
  className: styles$2.logo
9998
10229
  }
9999
10230
  ),
@@ -10037,11 +10268,12 @@ function CartTrigger({ className, children, ...rest }) {
10037
10268
  );
10038
10269
  }
10039
10270
  function IdentityGate({ returnTo }) {
10271
+ const t = useT();
10040
10272
  const emit = useShopEvent();
10041
10273
  return /* @__PURE__ */ jsx(
10042
10274
  EmptyState,
10043
10275
  {
10044
- title: "Finish signing up",
10276
+ title: t("Finish signing up"),
10045
10277
  body: "Complete your DAZN sign-up to check out. Your cart is saved.",
10046
10278
  action: /* @__PURE__ */ jsx(Button, { onClick: () => emit({ type: "session_required", action: `sign_in:${returnTo}` }), children: "Finish signing up" })
10047
10279
  }
@@ -10072,22 +10304,24 @@ function useCartCount() {
10072
10304
  }, [subscribe]);
10073
10305
  return count2;
10074
10306
  }
10075
- const header$1 = "_header_1yjrk_25";
10076
- const floating = "_floating_1yjrk_44";
10077
- const scrolled = "_scrolled_1yjrk_79";
10078
- const title$1 = "_title_1yjrk_172";
10079
- const right = "_right_1yjrk_185";
10080
- const spacer = "_spacer_1yjrk_198";
10081
- const iconBtn = "_iconBtn_1yjrk_203";
10082
- const menuBtn = "_menuBtn_1yjrk_230";
10083
- const badge = "_badge_1yjrk_258";
10084
- const closeSlot = "_closeSlot_1yjrk_285";
10085
- const centred = "_centred_1yjrk_300";
10307
+ const header$1 = "_header_8o3d7_25";
10308
+ const floating = "_floating_8o3d7_44";
10309
+ const scrolled = "_scrolled_8o3d7_79";
10310
+ const title$1 = "_title_8o3d7_172";
10311
+ const leading = "_leading_8o3d7_199";
10312
+ const right = "_right_8o3d7_205";
10313
+ const spacer = "_spacer_8o3d7_218";
10314
+ const iconBtn = "_iconBtn_8o3d7_223";
10315
+ const menuBtn = "_menuBtn_8o3d7_250";
10316
+ const badge = "_badge_8o3d7_278";
10317
+ const closeSlot = "_closeSlot_8o3d7_305";
10318
+ const centred = "_centred_8o3d7_320";
10086
10319
  const styles$1 = {
10087
10320
  header: header$1,
10088
10321
  floating,
10089
10322
  scrolled,
10090
10323
  title: title$1,
10324
+ leading,
10091
10325
  right,
10092
10326
  spacer,
10093
10327
  iconBtn,
@@ -10160,9 +10394,10 @@ function ShopHeader(props) {
10160
10394
  function CheckoutBar({
10161
10395
  title: title2,
10162
10396
  onClose,
10163
- closeLabel = "Close",
10397
+ closeLabel,
10164
10398
  className
10165
10399
  }) {
10400
+ const t = useT();
10166
10401
  const classes = [styles$1.header, className ?? ""].filter(Boolean).join(" ");
10167
10402
  return /* @__PURE__ */ jsxs("header", { className: classes, children: [
10168
10403
  /* @__PURE__ */ jsx("span", { className: styles$1.closeSlot, "aria-hidden": "true" }),
@@ -10172,7 +10407,7 @@ function CheckoutBar({
10172
10407
  {
10173
10408
  type: "button",
10174
10409
  className: [styles$1.iconBtn, styles$1.closeSlot].join(" "),
10175
- "aria-label": closeLabel,
10410
+ "aria-label": closeLabel ?? t("Close"),
10176
10411
  onClick: onClose,
10177
10412
  children: /* @__PURE__ */ jsx(CloseMedium, {})
10178
10413
  }
@@ -10186,16 +10421,18 @@ function ShopBar({
10186
10421
  showCart = true,
10187
10422
  floating: floating2 = false,
10188
10423
  scrolled: scrolled2,
10189
- backLabel = "Back",
10190
- menuLabel = "More options",
10424
+ backLabel,
10425
+ menuLabel,
10191
10426
  className
10192
10427
  }) {
10428
+ const t = useT();
10193
10429
  const cartCount = useCartCount();
10194
10430
  const screenTitle = useScreenTitle();
10195
10431
  const shownTitle = title2 ?? screenTitle;
10432
+ const hasTrailing = showCart || Boolean(onMenu);
10196
10433
  const atTop = useScrolledUnder(floating2 && scrolled2 === void 0);
10197
10434
  const isScrolled = scrolled2 ?? atTop;
10198
- const cartLabel = cartCount === null ? "Cart" : cartCount === 0 ? "Cart, empty" : `Cart, ${cartCount} item${cartCount === 1 ? "" : "s"}`;
10435
+ const cartLabel = cartCount === null ? t("Cart") : cartCount === 0 ? t("Cart, empty") : t("Cart, {0} item{1}", cartCount, cartCount === 1 ? "" : "s");
10199
10436
  const classes = [
10200
10437
  styles$1.header,
10201
10438
  floating2 ? styles$1.floating : "",
@@ -10203,8 +10440,14 @@ function ShopBar({
10203
10440
  className ?? ""
10204
10441
  ].filter(Boolean).join(" ");
10205
10442
  return /* @__PURE__ */ jsxs("header", { className: classes, children: [
10206
- onBack ? /* @__PURE__ */ jsx("button", { type: "button", className: styles$1.iconBtn, "aria-label": backLabel, onClick: onBack, children: /* @__PURE__ */ jsx(ChevronLeft, {}) }) : /* @__PURE__ */ jsx("span", { className: styles$1.spacer, "aria-hidden": "true" }),
10207
- shownTitle ? /* @__PURE__ */ jsx("span", { className: styles$1.title, children: shownTitle }) : null,
10443
+ onBack ? /* @__PURE__ */ jsx("button", { type: "button", className: styles$1.iconBtn, "aria-label": backLabel ?? t("Back"), onClick: onBack, children: /* @__PURE__ */ jsx(ChevronLeft, {}) }) : /* @__PURE__ */ jsx("span", { className: styles$1.spacer, "aria-hidden": "true" }),
10444
+ shownTitle ? /* @__PURE__ */ jsx(
10445
+ "span",
10446
+ {
10447
+ className: hasTrailing ? styles$1.title : `${styles$1.title} ${styles$1.leading}`,
10448
+ children: shownTitle
10449
+ }
10450
+ ) : null,
10208
10451
  /* @__PURE__ */ jsxs("div", { className: styles$1.right, children: [
10209
10452
  showCart ? /* @__PURE__ */ jsxs(CartTrigger, { className: styles$1.iconBtn, "aria-label": cartLabel, children: [
10210
10453
  /* @__PURE__ */ jsx(CartIcon, {}),
@@ -10215,7 +10458,7 @@ function ShopBar({
10215
10458
  {
10216
10459
  type: "button",
10217
10460
  className: `${styles$1.iconBtn} ${styles$1.menuBtn}`,
10218
- "aria-label": menuLabel,
10461
+ "aria-label": menuLabel ?? t("More options"),
10219
10462
  onClick: onMenu,
10220
10463
  children: /* @__PURE__ */ jsx(MenuIcon, {})
10221
10464
  }
@@ -10327,24 +10570,25 @@ function ShopMenuSheet({
10327
10570
  onClose,
10328
10571
  onManageOrders,
10329
10572
  onHelp,
10330
- closeLabel = "Close",
10331
- label: label2 = "Shop menu"
10573
+ closeLabel,
10574
+ label: label2
10332
10575
  }) {
10333
10576
  const sheetRef = useRef(null);
10577
+ const t = useT();
10334
10578
  useModalDialog(open, onClose, sheetRef);
10335
10579
  if (!open) return null;
10336
10580
  const rows = [
10337
10581
  {
10338
10582
  key: "orders",
10339
10583
  icon: /* @__PURE__ */ jsx(OrderIcon, {}),
10340
- title: "Manage orders",
10341
- subtitle: "View your order history and track shipments",
10584
+ title: t("Manage orders"),
10585
+ subtitle: t("View your order history and track shipments"),
10342
10586
  ...onManageOrders ? { onSelect: onManageOrders } : {}
10343
10587
  },
10344
10588
  {
10345
10589
  key: "help",
10346
10590
  icon: /* @__PURE__ */ jsx(HelpIcon, {}),
10347
- title: "Help & Support",
10591
+ title: t("Help & Support"),
10348
10592
  ...onHelp ? { onSelect: onHelp } : {}
10349
10593
  }
10350
10594
  ];
@@ -10357,10 +10601,10 @@ function ShopMenuSheet({
10357
10601
  className: styles.sheet,
10358
10602
  role: "dialog",
10359
10603
  "aria-modal": "true",
10360
- "aria-label": label2,
10604
+ "aria-label": label2 ?? t("Shop menu"),
10361
10605
  ref: sheetRef,
10362
10606
  children: [
10363
- /* @__PURE__ */ jsx("div", { className: styles.header, children: /* @__PURE__ */ jsx("button", { type: "button", className: styles.close, onClick: onClose, "aria-label": closeLabel, children: /* @__PURE__ */ jsx(CloseIcon, {}) }) }),
10607
+ /* @__PURE__ */ jsx("div", { className: styles.header, children: /* @__PURE__ */ jsx("button", { type: "button", className: styles.close, onClick: onClose, "aria-label": closeLabel ?? t("Close"), children: /* @__PURE__ */ jsx(CloseIcon, {}) }) }),
10364
10608
  /* @__PURE__ */ jsx("ul", { className: styles.list, children: rows.map((row2) => /* @__PURE__ */ jsx("li", { children: /* @__PURE__ */ jsxs(
10365
10609
  "button",
10366
10610
  {