@fayz-ai/storefront 0.83.0 → 0.83.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.
@@ -4,8 +4,8 @@ import { create } from 'zustand';
4
4
  import { persist } from 'zustand/middleware';
5
5
  import { normalizePostalCode, getCountrySchema, lookupPostalCode, useBlockPath, BlockRenderer, BlockChildren, defineLoader, repairBlockTree, renderBlocks, clearExtensionPoints, defineExtensionPoint, runExtensionPoint, runEscapeValve, errorMessage, hasEntityDeclaration, resolveEntityDeclaration, defineBlock, formatPostalCode, countryName, defineEntity, defaultRouterAdapter, describeError, validateAddress } from '@fayz-ai/core';
6
6
  import { getShopProvider, setShopProvider } from '@fayz-ai/shop/runtime';
7
- import * as React37 from 'react';
8
- import React37__default, { createContext, useRef, useState, useEffect, useMemo, useContext, useCallback } from 'react';
7
+ import * as React38 from 'react';
8
+ import React38__default, { createContext, useRef, useState, useEffect, useMemo, useContext, useCallback } from 'react';
9
9
  import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
10
10
  import { createMockAuthAdapter } from '@fayz-ai/auth';
11
11
  import { createAuthRuntime } from '@fayz-ai/auth/lib/runtime';
@@ -543,26 +543,26 @@ var bootstrap = null;
543
543
  function getExperimentBootstrap() {
544
544
  return bootstrap;
545
545
  }
546
- var ExperimentContext = React37__default.createContext(null);
546
+ var ExperimentContext = React38__default.createContext(null);
547
547
  function ExperimentProvider({ assignments, path, children }) {
548
548
  const config = useStorefrontConfig();
549
- const kept = React37__default.useRef(null);
549
+ const kept = React38__default.useRef(null);
550
550
  if (!kept.current && assignments) kept.current = assignments;
551
551
  const current = kept.current ?? { flags: {} };
552
552
  if (typeof window !== "undefined" && kept.current && !bootstrap) bootstrap = kept.current;
553
553
  const declaredKeys = Object.keys(runningExperiments(config.experiments)).sort().join("\n");
554
- const declared = React37__default.useMemo(() => new Set(declaredKeys ? declaredKeys.split("\n") : []), [declaredKeys]);
555
- const exposed = React37__default.useMemo(() => /* @__PURE__ */ new Set(), [path]);
556
- const value = React37__default.useMemo(() => ({ assignments: current, declared, exposed }), [current, declared, exposed]);
554
+ const declared = React38__default.useMemo(() => new Set(declaredKeys ? declaredKeys.split("\n") : []), [declaredKeys]);
555
+ const exposed = React38__default.useMemo(() => /* @__PURE__ */ new Set(), [path]);
556
+ const value = React38__default.useMemo(() => ({ assignments: current, declared, exposed }), [current, declared, exposed]);
557
557
  return /* @__PURE__ */ jsx(ExperimentContext.Provider, { value, children });
558
558
  }
559
559
  function useExperiment(key) {
560
- const state = React37__default.useContext(ExperimentContext);
560
+ const state = React38__default.useContext(ExperimentContext);
561
561
  const assigned = state?.declared.has(key) ? state.assignments.flags[key] : void 0;
562
562
  const result = assigned ?? { variant: CONTROL };
563
563
  const variant = result.variant;
564
564
  const inExperiment = Boolean(assigned);
565
- React37__default.useEffect(() => {
565
+ React38__default.useEffect(() => {
566
566
  if (!state || !inExperiment || state.exposed.has(key)) return;
567
567
  state.exposed.add(key);
568
568
  trackStorefront("experiment_exposed", { experiment: key, variant });
@@ -657,6 +657,7 @@ function startStorefrontPostHog(config, context) {
657
657
  capture_heatmaps: true,
658
658
  disable_session_recording: config.replay === false,
659
659
  session_recording: { maskAllInputs: true },
660
+ disable_surveys: config.surveys !== true,
660
661
  before_send: (event) => {
661
662
  if (!event) return event;
662
663
  const groups = event.properties.$groups ?? {};
@@ -736,6 +737,16 @@ function metaEventFor(event, currency) {
736
737
  }
737
738
  }
738
739
  var strip = (params) => Object.fromEntries(Object.entries(params).filter(([, v]) => v !== void 0 && v !== null));
740
+ function loadFbEventsAfterLoad() {
741
+ const inject = () => {
742
+ const script = document.createElement("script");
743
+ script.async = true;
744
+ script.src = "https://connect.facebook.net/en_US/fbevents.js";
745
+ document.head.appendChild(script);
746
+ };
747
+ if (document.readyState === "complete") inject();
748
+ else window.addEventListener("load", inject, { once: true });
749
+ }
739
750
  function installFbq() {
740
751
  if (window.fbq) return window.fbq;
741
752
  const fbq = function(...args) {
@@ -748,10 +759,7 @@ function installFbq() {
748
759
  fbq.queue = [];
749
760
  window.fbq = fbq;
750
761
  if (!window._fbq) window._fbq = fbq;
751
- const script = document.createElement("script");
752
- script.async = true;
753
- script.src = "https://connect.facebook.net/en_US/fbevents.js";
754
- document.head.appendChild(script);
762
+ loadFbEventsAfterLoad();
755
763
  return fbq;
756
764
  }
757
765
  var PURCHASES_KEY = "fayz.meta.purchases";
@@ -815,19 +823,19 @@ function StorefrontAnalytics({ config, path }) {
815
823
  const metaPixel = pixelId && META_PIXEL_ID.test(pixelId) ? pixelId : null;
816
824
  const reporting = Boolean(posthog || metaPixel);
817
825
  const menuPath = config.delivery?.menuPath;
818
- const previous = React37.useRef(null);
819
- React37.useEffect(() => {
826
+ const previous = React38.useRef(null);
827
+ React38.useEffect(() => {
820
828
  if (!posthog) return;
821
829
  startStorefrontPostHog(posthog, { storeName: config.name, commerceMode: config.commerceMode });
822
830
  }, [posthog, config.name, config.commerceMode]);
823
- React37.useEffect(() => {
831
+ React38.useEffect(() => {
824
832
  if (!metaPixel) return;
825
833
  startStorefrontMetaPixel({ pixelId: metaPixel }, { currency: config.currency ?? "BRL" });
826
834
  }, [metaPixel, config.currency]);
827
- React37.useEffect(() => {
835
+ React38.useEffect(() => {
828
836
  if (metaPixel) trackMetaPageView();
829
837
  }, [metaPixel, path]);
830
- React37.useEffect(() => {
838
+ React38.useEffect(() => {
831
839
  if (!reporting) return;
832
840
  let ready = useCartStore.persist?.hasHydrated?.() ?? true;
833
841
  const unhydrated = useCartStore.persist?.onFinishHydration?.(() => {
@@ -858,7 +866,7 @@ function StorefrontAnalytics({ config, path }) {
858
866
  unhydrated?.();
859
867
  };
860
868
  }, [reporting]);
861
- React37.useEffect(() => {
869
+ React38.useEffect(() => {
862
870
  if (!reporting) return;
863
871
  const from = previous.current;
864
872
  previous.current = path;
@@ -1672,9 +1680,9 @@ function SmoothImage({
1672
1680
  const easing = resolved.easing ?? "cubic-bezier(0.22, 1, 0.36, 1)";
1673
1681
  const blur = resolved.blur ?? true;
1674
1682
  const transform = resolved.transform ?? "none";
1675
- const ref = React37__default.useRef(null);
1676
- const [loaded, setLoaded] = React37__default.useState(() => mode === "none" || !clientMounted);
1677
- const delivered = React37__default.useMemo(() => {
1683
+ const ref = React38__default.useRef(null);
1684
+ const [loaded, setLoaded] = React38__default.useState(() => mode === "none" || !clientMounted);
1685
+ const delivered = React38__default.useMemo(() => {
1678
1686
  if (transform !== "supabase" || !src || srcSet || !isStorageImageUrl(src)) return { src, srcSet, sizes };
1679
1687
  if (variant?.width) {
1680
1688
  const w = variant.width;
@@ -1692,10 +1700,10 @@ function SmoothImage({
1692
1700
  sizes: variant?.sizes ?? sizes ?? "100vw"
1693
1701
  };
1694
1702
  }, [transform, src, srcSet, sizes, variant?.width, variant?.sizes, variant?.widths, variant?.quality]);
1695
- React37__default.useEffect(() => {
1703
+ React38__default.useEffect(() => {
1696
1704
  clientMounted = true;
1697
1705
  }, []);
1698
- React37__default.useEffect(() => {
1706
+ React38__default.useEffect(() => {
1699
1707
  if (mode === "none") {
1700
1708
  setLoaded(true);
1701
1709
  return;
@@ -2637,8 +2645,8 @@ var BADGE_TONE_CLASSES = {
2637
2645
  warning: "bg-amber-500 text-white"
2638
2646
  };
2639
2647
  function useExtensionBadges(product) {
2640
- const [badges, setBadges] = React37__default.useState([]);
2641
- React37__default.useEffect(() => {
2648
+ const [badges, setBadges] = React38__default.useState([]);
2649
+ React38__default.useEffect(() => {
2642
2650
  let cancelled = false;
2643
2651
  getProductCardBadges(product).then((next) => {
2644
2652
  if (!cancelled && next.length > 0) setBadges(next);
@@ -3778,7 +3786,7 @@ function scalarToString(value) {
3778
3786
  }
3779
3787
  function ProductSpecs({ product }) {
3780
3788
  const config = useStorefrontConfig();
3781
- const extraExcluded = React37__default.useMemo(
3789
+ const extraExcluded = React38__default.useMemo(
3782
3790
  () => new Set(config.productSpecs?.exclude ?? []),
3783
3791
  [config.productSpecs?.exclude]
3784
3792
  );
@@ -5503,7 +5511,7 @@ function CollectionHero({
5503
5511
  {
5504
5512
  className: `absolute inset-0 flex flex-col justify-center p-6 text-white sm:p-12 ${OVERLAY_CLASS[overlay]} ${centered ? "items-center text-center" : "items-start text-left"}`,
5505
5513
  children: /* @__PURE__ */ jsxs(Reveal, { className: centered ? "max-w-3xl" : "max-w-2xl", children: [
5506
- logos && logos.length > 0 && /* @__PURE__ */ jsx("div", { className: `mb-6 flex items-center gap-5 ${centered ? "justify-center" : ""}`, children: logos.map((logo, i) => /* @__PURE__ */ jsxs(React37__default.Fragment, { children: [
5514
+ logos && logos.length > 0 && /* @__PURE__ */ jsx("div", { className: `mb-6 flex items-center gap-5 ${centered ? "justify-center" : ""}`, children: logos.map((logo, i) => /* @__PURE__ */ jsxs(React38__default.Fragment, { children: [
5507
5515
  i > 0 && /* @__PURE__ */ jsx("span", { className: "text-2xl font-light opacity-60", "aria-hidden": true, children: "\xD7" }),
5508
5516
  /* @__PURE__ */ jsx("img", { src: logo.src, alt: logo.alt, className: "h-10 w-auto object-contain sm:h-14" })
5509
5517
  ] }, logo.src)) }),
@@ -6287,10 +6295,10 @@ function StorefrontConfigHost({
6287
6295
  buyer,
6288
6296
  children
6289
6297
  }) {
6290
- const [policy, setPolicy] = React37__default.useState(null);
6291
- const [shipping, setShipping] = React37__default.useState(null);
6292
- const [delivery, setDelivery] = React37__default.useState(null);
6293
- React37__default.useEffect(() => {
6298
+ const [policy, setPolicy] = React38__default.useState(null);
6299
+ const [shipping, setShipping] = React38__default.useState(null);
6300
+ const [delivery, setDelivery] = React38__default.useState(null);
6301
+ React38__default.useEffect(() => {
6294
6302
  let cancelled = false;
6295
6303
  let provider;
6296
6304
  try {
@@ -6327,7 +6335,7 @@ function StorefrontConfigHost({
6327
6335
  cancelled = true;
6328
6336
  };
6329
6337
  }, [config]);
6330
- const resolved = React37__default.useMemo(
6338
+ const resolved = React38__default.useMemo(
6331
6339
  () => applyBuyer(applyDeliveryPolicy(applyShippingSettings(applyStoreSettings(config, policy), shipping), delivery), buyer),
6332
6340
  [config, policy, shipping, delivery, buyer?.language, buyer?.country]
6333
6341
  );
@@ -6339,7 +6347,7 @@ function MarketScope({ children }) {
6339
6347
  const markets = useMarketStore((s2) => s2.markets);
6340
6348
  const market = markets.length ? marketForCountry(markets, country) : null;
6341
6349
  const prices = useMarketStore((s2) => market ? s2.prices[market.code] : void 0);
6342
- React37__default.useEffect(() => {
6350
+ React38__default.useEffect(() => {
6343
6351
  useMarketStore.getState().setActive(market);
6344
6352
  if (!market || market.isDefault || prices) return;
6345
6353
  let provider;
@@ -6351,11 +6359,11 @@ function MarketScope({ children }) {
6351
6359
  void provider.getMarketPrices?.(market.code).then((list) => useMarketStore.getState().setPrices(market.code, list)).catch(() => {
6352
6360
  });
6353
6361
  }, [market?.code, prices]);
6354
- React37__default.useEffect(() => {
6362
+ React38__default.useEffect(() => {
6355
6363
  if (!market || !market.isDefault && !prices) return;
6356
6364
  useCartStore.getState().repriceForMarket();
6357
6365
  }, [market?.code, prices]);
6358
- const value = React37__default.useMemo(() => {
6366
+ const value = React38__default.useMemo(() => {
6359
6367
  if (!market) return base;
6360
6368
  return {
6361
6369
  ...base,
@@ -6461,6 +6469,7 @@ function googleFontsHref(theme) {
6461
6469
  (f) => Boolean(f)
6462
6470
  );
6463
6471
  const unique = [...new Set(families)];
6472
+ if (!unique.length) return null;
6464
6473
  const params = unique.map((f) => `family=${encodeURIComponent(f).replace(/%20/g, "+")}:wght@300;400;500;600;700`).join("&");
6465
6474
  return `https://fonts.googleapis.com/css2?${params}&display=swap`;
6466
6475
  }
@@ -6485,7 +6494,7 @@ function StorefrontThemeStyle({
6485
6494
  document.getElementById(linkId)?.remove();
6486
6495
  };
6487
6496
  }, [fontsHref, linkId, selector]);
6488
- return React37__default.createElement(
6497
+ return React38__default.createElement(
6489
6498
  "style",
6490
6499
  { "data-sf-theme": theme.name },
6491
6500
  themeToCss(theme, { selector })
@@ -6584,7 +6593,7 @@ function SearchOverlay({ onClose }) {
6584
6593
  "\u201D."
6585
6594
  ] }) : /* @__PURE__ */ jsxs(Fragment, { children: [
6586
6595
  /* @__PURE__ */ jsx("div", { className: "grid gap-4 sm:grid-cols-2 lg:grid-cols-4", children: suggestions.map(
6587
- (product) => searchConfig.renderSuggestion ? /* @__PURE__ */ jsx(React37__default.Fragment, { children: searchConfig.renderSuggestion(product) }, product.id) : /* @__PURE__ */ jsx(SuggestionCard, { product, onNavigate: onClose }, product.id)
6596
+ (product) => searchConfig.renderSuggestion ? /* @__PURE__ */ jsx(React38__default.Fragment, { children: searchConfig.renderSuggestion(product) }, product.id) : /* @__PURE__ */ jsx(SuggestionCard, { product, onNavigate: onClose }, product.id)
6588
6597
  ) }),
6589
6598
  /* @__PURE__ */ jsx(
6590
6599
  "button",
@@ -6791,11 +6800,11 @@ function HeaderActions({ onMenuClick }) {
6791
6800
  const openDrawer = useCartStore((s2) => s2.openDrawer);
6792
6801
  const session = useSessionStore();
6793
6802
  const [accountOpen, setAccountOpen] = useState(false);
6794
- const accountRef = React37__default.useRef(null);
6803
+ const accountRef = React38__default.useRef(null);
6795
6804
  const pop = usePopOnChange(count);
6796
6805
  const firstName = session.name?.split(/\s+/)[0];
6797
6806
  const initial2 = (firstName ?? session.email ?? "C").slice(0, 1).toUpperCase();
6798
- React37__default.useEffect(() => {
6807
+ React38__default.useEffect(() => {
6799
6808
  if (!accountOpen) return;
6800
6809
  const onPointerDown = (event) => {
6801
6810
  if (!accountRef.current?.contains(event.target)) setAccountOpen(false);
@@ -6962,7 +6971,7 @@ function MobileMenuDrawer({ open, onClose }) {
6962
6971
  navigateTo(config.catalogPath);
6963
6972
  onClose();
6964
6973
  };
6965
- React37__default.useEffect(() => {
6974
+ React38__default.useEffect(() => {
6966
6975
  if (!open) return;
6967
6976
  const onKey = (e) => {
6968
6977
  if (e.key === "Escape") onClose();
@@ -7936,8 +7945,8 @@ function AddressForm({ country, language, value, onChange, onPostalCode, lookup,
7936
7945
  postalHint()
7937
7946
  ] }, "postalCode");
7938
7947
  }
7939
- if (row.length === 1) return /* @__PURE__ */ jsx(React37__default.Fragment, { children: input(specs.get(cells[0])) }, cells[0]);
7940
- return /* @__PURE__ */ jsx("div", { className: "grid grid-cols-2 gap-3", children: cells.map((key) => /* @__PURE__ */ jsx(React37__default.Fragment, { children: input(specs.get(key)) }, key)) }, cells.join("-"));
7948
+ if (row.length === 1) return /* @__PURE__ */ jsx(React38__default.Fragment, { children: input(specs.get(cells[0])) }, cells[0]);
7949
+ return /* @__PURE__ */ jsx("div", { className: "grid grid-cols-2 gap-3", children: cells.map((key) => /* @__PURE__ */ jsx(React38__default.Fragment, { children: input(specs.get(key)) }, key)) }, cells.join("-"));
7941
7950
  }) });
7942
7951
  }
7943
7952
  function flag(iso2) {
@@ -8293,13 +8302,13 @@ function CardBrick({ publicKey, amount, email, onSubmit, onError }) {
8293
8302
  var POLL_MS = 3e3;
8294
8303
  var RESUME_KEY = "fz.checkout.resume";
8295
8304
  function useExpiry(expiresAt) {
8296
- const target = React37__default.useMemo(() => {
8305
+ const target = React38__default.useMemo(() => {
8297
8306
  if (!expiresAt) return null;
8298
8307
  const t = new Date(expiresAt).getTime();
8299
8308
  return Number.isFinite(t) ? t : null;
8300
8309
  }, [expiresAt]);
8301
- const [now, setNow] = React37__default.useState(() => Date.now());
8302
- React37__default.useEffect(() => {
8310
+ const [now, setNow] = React38__default.useState(() => Date.now());
8311
+ React38__default.useEffect(() => {
8303
8312
  if (target === null) return;
8304
8313
  const id = setInterval(() => setNow(Date.now()), 1e3);
8305
8314
  return () => clearInterval(id);
@@ -8995,7 +9004,7 @@ function CheckoutPage() {
8995
9004
  district: "",
8996
9005
  state: ""
8997
9006
  });
8998
- React37__default.useEffect(() => {
9007
+ React38__default.useEffect(() => {
8999
9008
  if (!known.ready) return;
9000
9009
  setForm((current) => ({
9001
9010
  ...current,
@@ -9011,7 +9020,7 @@ function CheckoutPage() {
9011
9020
  }));
9012
9021
  }, [known.ready, known.phone, known.document, known.address]);
9013
9022
  const [step, setStep] = useState(resume ? 3 : 1);
9014
- const reportedStart = React37__default.useRef(false);
9023
+ const reportedStart = React38__default.useRef(false);
9015
9024
  useEffect(() => {
9016
9025
  if (reportedStart.current) return;
9017
9026
  reportedStart.current = true;
@@ -9024,7 +9033,7 @@ function CheckoutPage() {
9024
9033
  });
9025
9034
  }
9026
9035
  }, []);
9027
- const reportedStep = React37__default.useRef(null);
9036
+ const reportedStep = React38__default.useRef(null);
9028
9037
  useEffect(() => {
9029
9038
  if (reportedStep.current === step) return;
9030
9039
  reportedStep.current = step;
@@ -9033,7 +9042,7 @@ function CheckoutPage() {
9033
9042
  }, [step]);
9034
9043
  const [contactKnown, setContactKnown] = useState(false);
9035
9044
  const [editingContact, setEditingContact] = useState(false);
9036
- const skippedContact = React37__default.useRef(false);
9045
+ const skippedContact = React38__default.useRef(false);
9037
9046
  const fulfillmentType = useDeliveryStore((s2) => s2.fulfillmentType);
9038
9047
  const scheduledFor = useDeliveryStore((s2) => s2.scheduledFor);
9039
9048
  const deliveryReference = useDeliveryStore((s2) => {
@@ -9062,7 +9071,7 @@ function CheckoutPage() {
9062
9071
  const [applyingDiscount, setApplyingDiscount] = useState(false);
9063
9072
  const [showSignin, setShowSignin] = useState(false);
9064
9073
  const [placing, setPlacing] = useState(false);
9065
- const leaving = React37__default.useRef(false);
9074
+ const leaving = React38__default.useRef(false);
9066
9075
  const [zipLookup, setZipLookup] = useState("idle");
9067
9076
  const subtotal = selectSubtotal(cart);
9068
9077
  const discountTotal = selectDiscountTotal(cart);
@@ -9070,7 +9079,7 @@ function CheckoutPage() {
9070
9079
  const shipping = isPickup ? 0 : shippingRaw;
9071
9080
  const total = selectTotal(cart, config) - (isPickup ? shippingRaw : 0);
9072
9081
  const checkoutSlotContext = { subtotal, total };
9073
- const checkoutSessionInput = React37__default.useMemo(() => ({
9082
+ const checkoutSessionInput = React38__default.useMemo(() => ({
9074
9083
  items: cart.lines.map((line) => ({
9075
9084
  productId: line.productId,
9076
9085
  variantId: line.variantId ?? null,
@@ -9247,7 +9256,7 @@ function CheckoutPage() {
9247
9256
  cancelled = true;
9248
9257
  };
9249
9258
  }, [session.customerId]);
9250
- const shownCountry = React37__default.useRef(country);
9259
+ const shownCountry = React38__default.useRef(country);
9251
9260
  useEffect(() => {
9252
9261
  if (shownCountry.current === country) return;
9253
9262
  shownCountry.current = country;
@@ -10029,6 +10038,7 @@ function etaParts(minutes) {
10029
10038
  }
10030
10039
  return { approx: false, text: `${Math.ceil(m / 60)} h` };
10031
10040
  }
10041
+ var COVER_PRIORITY = React38__default.version.startsWith("18.") ? { fetchpriority: "high" } : { fetchPriority: "high" };
10032
10042
  function StoreCover({ onShowHours, onOpenAccount }) {
10033
10043
  const sessionName = useSessionStore((s2) => s2.name || s2.email);
10034
10044
  const config = useStorefrontConfig();
@@ -10064,6 +10074,7 @@ function StoreCover({ onShowHours, onOpenAccount }) {
10064
10074
  src: cover,
10065
10075
  alt: "",
10066
10076
  "aria-hidden": true,
10077
+ ...COVER_PRIORITY,
10067
10078
  className: "absolute inset-0 -z-10 h-full w-full object-cover"
10068
10079
  }
10069
10080
  ),
@@ -10172,8 +10183,8 @@ function AddressStrip({
10172
10183
  const money = (v) => formatMoney(v, config.currency, config.locale);
10173
10184
  const subtotal = selectSubtotal(useCartStore());
10174
10185
  const resolve = useDeliveryStore((s2) => s2.resolve);
10175
- const quotedOnce = React37__default.useRef(false);
10176
- React37__default.useEffect(() => {
10186
+ const quotedOnce = React38__default.useRef(false);
10187
+ React38__default.useEffect(() => {
10177
10188
  if (quotedOnce.current || isPickup) return;
10178
10189
  if (delivery.status !== "idle" || delivery.options.length > 0 || !delivery.postalCode) return;
10179
10190
  quotedOnce.current = true;
@@ -10235,17 +10246,17 @@ function MenuToolbar({
10235
10246
  onQuery,
10236
10247
  autoFocusSearch
10237
10248
  }) {
10238
- const inputRef = React37__default.useRef(null);
10239
- const [active, setActive] = React37__default.useState(null);
10240
- React37__default.useEffect(() => {
10249
+ const inputRef = React38__default.useRef(null);
10250
+ const [active, setActive] = React38__default.useState(null);
10251
+ React38__default.useEffect(() => {
10241
10252
  setActive(
10242
10253
  (current) => current && sections.some((s2) => s2.slug === current) ? current : sections[0]?.slug ?? null
10243
10254
  );
10244
10255
  }, [sections]);
10245
- React37__default.useEffect(() => {
10256
+ React38__default.useEffect(() => {
10246
10257
  if (autoFocusSearch) inputRef.current?.focus();
10247
10258
  }, [autoFocusSearch]);
10248
- React37__default.useEffect(() => {
10259
+ React38__default.useEffect(() => {
10249
10260
  if (typeof IntersectionObserver === "undefined") return;
10250
10261
  const seen = /* @__PURE__ */ new Map();
10251
10262
  const observer = new IntersectionObserver(
@@ -10432,10 +10443,10 @@ function ItemSheet({
10432
10443
  }) {
10433
10444
  const config = useStorefrontConfig();
10434
10445
  const money = (v) => formatMoney(v, config.currency, config.locale);
10435
- const groups = React37__default.useMemo(() => getProductOptionGroups(product), [product]);
10436
- const [options, setOptions] = React37__default.useState({});
10437
- const [notes, setNotes] = React37__default.useState("");
10438
- const [quantity, setQuantity] = React37__default.useState(1);
10446
+ const groups = React38__default.useMemo(() => getProductOptionGroups(product), [product]);
10447
+ const [options, setOptions] = React38__default.useState({});
10448
+ const [notes, setNotes] = React38__default.useState("");
10449
+ const [quantity, setQuantity] = React38__default.useState(1);
10439
10450
  const image = product.images?.find((i) => i.isPrimary) ?? product.images?.[0];
10440
10451
  const stock = product.inventoryCount;
10441
10452
  const missing = groups.filter((g) => !options[g.label]);
@@ -10629,8 +10640,8 @@ function ScheduleSheet({ onClose }) {
10629
10640
  const scheduledFor = useDeliveryStore((s2) => s2.scheduledFor);
10630
10641
  const setScheduledFor = useDeliveryStore((s2) => s2.setScheduledFor);
10631
10642
  const timezone = useServiceStore((s2) => s2.service?.timezone) ?? "America/Sao_Paulo";
10632
- const [slots, setSlots] = React37__default.useState(null);
10633
- React37__default.useEffect(() => {
10643
+ const [slots, setSlots] = React38__default.useState(null);
10644
+ React38__default.useEffect(() => {
10634
10645
  let alive = true;
10635
10646
  void (async () => {
10636
10647
  const rows = await getShopProvider()?.listScheduleSlots?.(fulfillmentType) ?? [];
@@ -10640,7 +10651,7 @@ function ScheduleSheet({ onClose }) {
10640
10651
  alive = false;
10641
10652
  };
10642
10653
  }, [fulfillmentType]);
10643
- const days = React37__default.useMemo(() => {
10654
+ const days = React38__default.useMemo(() => {
10644
10655
  const fmtDay = new Intl.DateTimeFormat("pt-BR", {
10645
10656
  weekday: "long",
10646
10657
  day: "2-digit",
@@ -10726,8 +10737,8 @@ function hhmm(time) {
10726
10737
  }
10727
10738
  function ServiceHoursModal({ onClose }) {
10728
10739
  const fulfillmentType = useServiceStore((s2) => s2.fulfillmentType);
10729
- const [hours, setHours] = React37__default.useState(null);
10730
- React37__default.useEffect(() => {
10740
+ const [hours, setHours] = React38__default.useState(null);
10741
+ React38__default.useEffect(() => {
10731
10742
  let alive = true;
10732
10743
  void (async () => {
10733
10744
  const rows = await getShopProvider()?.listServiceHours?.(fulfillmentType) ?? [];
@@ -10737,7 +10748,7 @@ function ServiceHoursModal({ onClose }) {
10737
10748
  alive = false;
10738
10749
  };
10739
10750
  }, [fulfillmentType]);
10740
- const byDay = React37__default.useMemo(() => {
10751
+ const byDay = React38__default.useMemo(() => {
10741
10752
  const map = /* @__PURE__ */ new Map();
10742
10753
  for (const h of hours ?? []) {
10743
10754
  const list = map.get(h.weekday) ?? [];
@@ -10822,7 +10833,7 @@ function AddressSheet({ onClose, onSignIn }) {
10822
10833
  const unsavedCurrent = current && !saved.some((a) => a.id === selectedId) ? current : null;
10823
10834
  const fromAccount = accountBook.filter((a) => !saved.some((b) => normalizePostalCode(b.postalCode) === normalizePostalCode(a.postalCode) && b.number.trim().toLowerCase() === (a.number ?? "").trim().toLowerCase()));
10824
10835
  const nothingToList = saved.length === 0 && !unsavedCurrent && fromAccount.length === 0 && !customerId;
10825
- const [editing, setEditing] = React37__default.useState(
10836
+ const [editing, setEditing] = React38__default.useState(
10826
10837
  nothingToList && !onSignIn ? {} : null
10827
10838
  );
10828
10839
  function pickAccountAddress(a) {
@@ -10841,13 +10852,13 @@ function AddressSheet({ onClose, onSignIn }) {
10841
10852
  void selectAddress(id, subtotal);
10842
10853
  onClose();
10843
10854
  }
10844
- const closeRef = React37__default.useRef(() => {
10855
+ const closeRef = React38__default.useRef(() => {
10845
10856
  });
10846
10857
  closeRef.current = () => {
10847
10858
  if (editing && !nothingToList) setEditing(null);
10848
10859
  else onClose();
10849
10860
  };
10850
- React37__default.useEffect(() => {
10861
+ React38__default.useEffect(() => {
10851
10862
  const onKey = (e) => {
10852
10863
  if (e.key === "Escape") closeRef.current();
10853
10864
  };
@@ -11028,8 +11039,8 @@ function AddressLines({ address }) {
11028
11039
  ] });
11029
11040
  }
11030
11041
  function useAccountAddresses(customerId) {
11031
- const [rows, setRows] = React37__default.useState([]);
11032
- React37__default.useEffect(() => {
11042
+ const [rows, setRows] = React38__default.useState([]);
11043
+ React38__default.useEffect(() => {
11033
11044
  if (!customerId) {
11034
11045
  setRows([]);
11035
11046
  return;
@@ -11057,24 +11068,24 @@ function AddressForm2({ onDone, initial: initial2, replaces }) {
11057
11068
  const storeError = useDeliveryStore((s2) => s2.error);
11058
11069
  const refusedZone = useDeliveryStore((s2) => s2.refusedZone);
11059
11070
  const subtotal = selectSubtotal(useCartStore());
11060
- const [cep, setCep] = React37__default.useState(initial2?.postalCode ? formatPostalCode(initial2.postalCode) : "");
11061
- const [number, setNumber] = React37__default.useState(initial2?.number ?? "");
11062
- const [complement, setComplement] = React37__default.useState(initial2?.complement ?? "");
11063
- const [reference, setReference] = React37__default.useState(initial2?.reference ?? "");
11064
- const [label, setLabel] = React37__default.useState(initial2?.label ?? "");
11065
- const [touched, setTouched] = React37__default.useState(false);
11066
- const numberRef = React37__default.useRef(null);
11071
+ const [cep, setCep] = React38__default.useState(initial2?.postalCode ? formatPostalCode(initial2.postalCode) : "");
11072
+ const [number, setNumber] = React38__default.useState(initial2?.number ?? "");
11073
+ const [complement, setComplement] = React38__default.useState(initial2?.complement ?? "");
11074
+ const [reference, setReference] = React38__default.useState(initial2?.reference ?? "");
11075
+ const [label, setLabel] = React38__default.useState(initial2?.label ?? "");
11076
+ const [touched, setTouched] = React38__default.useState(false);
11077
+ const numberRef = React38__default.useRef(null);
11067
11078
  const digits = normalizePostalCode(cep);
11068
11079
  const found = Boolean(looked) && normalizePostalCode(looked.postalCode) === digits;
11069
- React37__default.useEffect(() => {
11080
+ React38__default.useEffect(() => {
11070
11081
  if (found) numberRef.current?.focus();
11071
11082
  }, [found]);
11072
11083
  async function lookUp() {
11073
11084
  if (digits.length !== 8) return;
11074
11085
  await resolve(digits, subtotal);
11075
11086
  }
11076
- const prefilled = React37__default.useRef(false);
11077
- React37__default.useEffect(() => {
11087
+ const prefilled = React38__default.useRef(false);
11088
+ React38__default.useEffect(() => {
11078
11089
  if (prefilled.current || !initial2?.postalCode) return;
11079
11090
  prefilled.current = true;
11080
11091
  if (!found) void lookUp();
@@ -11290,7 +11301,7 @@ function AccountDrawer({ onClose, onSignIn, onAddresses, onShowHours }) {
11290
11301
  const session = useSessionStore();
11291
11302
  const signedIn = Boolean(session.email);
11292
11303
  const name = session.name || session.email?.split("@")[0] || "";
11293
- React37__default.useEffect(() => {
11304
+ React38__default.useEffect(() => {
11294
11305
  const onKey = (event) => {
11295
11306
  if (event.key === "Escape") onClose();
11296
11307
  };
@@ -11374,8 +11385,8 @@ function AccountDrawer({ onClose, onSignIn, onAddresses, onShowHours }) {
11374
11385
  function MenuPage() {
11375
11386
  const config = useStorefrontConfig();
11376
11387
  const addItem = useCartStore((s2) => s2.addItem);
11377
- const [openProduct, setOpenProduct] = React37__default.useState(null);
11378
- React37__default.useEffect(() => {
11388
+ const [openProduct, setOpenProduct] = React38__default.useState(null);
11389
+ React38__default.useEffect(() => {
11379
11390
  if (!openProduct) return;
11380
11391
  trackStorefront("product_viewed", {
11381
11392
  product_id: openProduct.id,
@@ -11386,18 +11397,18 @@ function MenuPage() {
11386
11397
  surface: "menu_sheet"
11387
11398
  });
11388
11399
  }, [openProduct?.id]);
11389
- const [showHours, setShowHours] = React37__default.useState(false);
11390
- const [showClosed, setShowClosed] = React37__default.useState(false);
11391
- const [showAddress, setShowAddress] = React37__default.useState(false);
11392
- const [showAccount, setShowAccount] = React37__default.useState(false);
11393
- const [showSignIn, setShowSignIn] = React37__default.useState(false);
11394
- const [showSchedule, setShowSchedule] = React37__default.useState(false);
11395
- const [query, setQuery] = React37__default.useState("");
11400
+ const [showHours, setShowHours] = React38__default.useState(false);
11401
+ const [showClosed, setShowClosed] = React38__default.useState(false);
11402
+ const [showAddress, setShowAddress] = React38__default.useState(false);
11403
+ const [showAccount, setShowAccount] = React38__default.useState(false);
11404
+ const [showSignIn, setShowSignIn] = React38__default.useState(false);
11405
+ const [showSchedule, setShowSchedule] = React38__default.useState(false);
11406
+ const [query, setQuery] = React38__default.useState("");
11396
11407
  const serviceState = useServiceStore();
11397
11408
  const refreshService = useServiceStore((s2) => s2.refresh);
11398
11409
  const paused = Boolean(config.delivery?.paused);
11399
11410
  const isOpen = selectIsOpen(serviceState) && !paused;
11400
- React37__default.useEffect(() => {
11411
+ React38__default.useEffect(() => {
11401
11412
  void refreshService();
11402
11413
  }, [refreshService]);
11403
11414
  const cart = useCartStore();
@@ -11419,7 +11430,7 @@ function MenuPage() {
11419
11430
  const loading = products.status === "loading" || products.status === "idle";
11420
11431
  const items = products.data ?? [];
11421
11432
  const cats = categories.data ?? [];
11422
- const allSections = React37__default.useMemo(() => {
11433
+ const allSections = React38__default.useMemo(() => {
11423
11434
  const byCategory = /* @__PURE__ */ new Map();
11424
11435
  const loose = [];
11425
11436
  for (const p of items) {
@@ -11447,7 +11458,7 @@ function MenuPage() {
11447
11458
  }
11448
11459
  return ordered;
11449
11460
  }, [items, cats]);
11450
- const highlights = React37__default.useMemo(
11461
+ const highlights = React38__default.useMemo(
11451
11462
  () => pickHighlights(items, {
11452
11463
  listingFeaturedIds: featured.data?.listing,
11453
11464
  menuFeaturedIds: featured.data?.menu,
@@ -11456,7 +11467,7 @@ function MenuPage() {
11456
11467
  [items, featured.data, config.delivery?.highlightSlugs]
11457
11468
  );
11458
11469
  const normalized = query.trim().toLowerCase();
11459
- const sections = React37__default.useMemo(() => {
11470
+ const sections = React38__default.useMemo(() => {
11460
11471
  if (!normalized) return allSections;
11461
11472
  return allSections.map((section) => ({
11462
11473
  ...section,
@@ -11629,7 +11640,7 @@ function MenuPage() {
11629
11640
  );
11630
11641
  }
11631
11642
  function BottomBarSpace() {
11632
- React37__default.useEffect(() => {
11643
+ React38__default.useEffect(() => {
11633
11644
  const root = document.documentElement;
11634
11645
  root.style.setProperty("--fayz-bottom-bar", "4.5rem");
11635
11646
  return () => {
@@ -11920,7 +11931,7 @@ function OrderConfirmationPage({ orderId }) {
11920
11931
  const [loading, setLoading] = useState(true);
11921
11932
  const money = (v) => formatMoney(v, config.currency, config.locale);
11922
11933
  useStorefrontHead({ title: order ? `Pedido #${order.orderNumber} \u2014 ${config.name}` : config.name });
11923
- const reload = React37__default.useCallback(() => {
11934
+ const reload = React38__default.useCallback(() => {
11924
11935
  let cancelled = false;
11925
11936
  getShopProvider().getOrder(orderId).then((o) => {
11926
11937
  if (!cancelled) setOrder(o);
@@ -11949,7 +11960,7 @@ function OrderConfirmationPage({ orderId }) {
11949
11960
  ] }, column)) }),
11950
11961
  /* @__PURE__ */ jsxs("div", { className: "mt-6", children: [
11951
11962
  /* @__PURE__ */ jsx(Skeleton, { className: "h-3 w-32" }),
11952
- /* @__PURE__ */ jsx("div", { className: "mt-3 flex items-center gap-2", children: [0, 1, 2, 3].map((node) => /* @__PURE__ */ jsxs(React37__default.Fragment, { children: [
11963
+ /* @__PURE__ */ jsx("div", { className: "mt-3 flex items-center gap-2", children: [0, 1, 2, 3].map((node) => /* @__PURE__ */ jsxs(React38__default.Fragment, { children: [
11953
11964
  /* @__PURE__ */ jsx(Skeleton, { className: "h-7 w-7 shrink-0 rounded-full" }),
11954
11965
  node < 3 && /* @__PURE__ */ jsx(Skeleton, { className: "h-px flex-1" })
11955
11966
  ] }, node)) })
@@ -12236,7 +12247,7 @@ function OrdersPanel() {
12236
12247
  /* @__PURE__ */ jsx(Skeleton, { className: "h-5 w-24 rounded-full" })
12237
12248
  ] }),
12238
12249
  /* @__PURE__ */ jsx(Skeleton, { className: "mt-2 h-3 w-20" }),
12239
- /* @__PURE__ */ jsx("div", { className: "mt-4 flex items-center gap-2", children: [0, 1, 2, 3].map((node) => /* @__PURE__ */ jsxs(React37__default.Fragment, { children: [
12250
+ /* @__PURE__ */ jsx("div", { className: "mt-4 flex items-center gap-2", children: [0, 1, 2, 3].map((node) => /* @__PURE__ */ jsxs(React38__default.Fragment, { children: [
12240
12251
  /* @__PURE__ */ jsx(Skeleton, { className: "h-6 w-6 shrink-0 rounded-full" }),
12241
12252
  node < 3 && /* @__PURE__ */ jsx(Skeleton, { className: "h-px flex-1" })
12242
12253
  ] }, node)) }),
@@ -12315,7 +12326,7 @@ function ProfilePanel() {
12315
12326
  const [saving, setSaving] = useState(false);
12316
12327
  const [saved, setSaved] = useState(false);
12317
12328
  const [error, setError] = useState(null);
12318
- React37__default.useEffect(() => {
12329
+ React38__default.useEffect(() => {
12319
12330
  if (!supported) return;
12320
12331
  let cancelled = false;
12321
12332
  provider.getMyProfile().then((p) => {
@@ -12608,7 +12619,7 @@ function PolicyPage({ kind }) {
12608
12619
  ] }) })
12609
12620
  ] });
12610
12621
  }
12611
- var StorefrontErrorBoundary = class extends React37__default.Component {
12622
+ var StorefrontErrorBoundary = class extends React38__default.Component {
12612
12623
  constructor() {
12613
12624
  super(...arguments);
12614
12625
  this.state = { error: null };
@@ -12898,5 +12909,5 @@ function createStorefront(options) {
12898
12909
  }
12899
12910
 
12900
12911
  export { AddressForm, AddressSheet, AddressStrip, BEFORE_PLACE_ORDER_VALVE, BUYER_COUNTRY_COOKIE, BenefitsRow, CART_LINE_ANNOTATION_POINT, CHECKOUT_FIELD_POINT, CartDrawer, CatalogPage, CategoryShowcase, CheckoutPage, ClosedStoreDialog, CollectionCta, CollectionHero, ContentPage, CountdownBand, CountrySelect, DeliverToPicker, EmailConfirmationRequiredError, EntityListBlock, ExperimentBlock, ExperimentProvider, ExperimentVariantBlock, FaqSection, FiltersPanel, FormBlock, HeroSection, ImageTiles, ItemSheet, ManifestoBlock, MediaCarousel, MenuItemRow, MenuPage, MenuToolbar, MotifStrip, MyPurchasesPage, NewsletterBand, ORDER_METADATA_POINT, OrderConfirmationPage, OrderTrackingTimeline, PAGE_DATA_SCRIPT_ID, PLACEHOLDER_ASPECTS, PRODUCT_CARD_BADGE_POINT, PaymentTerms, Price, ProductCard, ProductDetailPage, ProductEnquiryForm, ProductGallery, ProductGrid, ProductOptionSelector, ProductRail, ProductReviews, ProductSlider, ProductSpecs, ProductSpotlight, PromoBanner, QuantityInput, Reveal, STOREFRONT_SLOTS, ScheduleSheet, SealsBand, SearchOverlay, ServiceHoursModal, Slot, SmoothImage, StepsSection, StoreCover, StorefrontAnalytics, StorefrontConfigHost, StorefrontFooter, StorefrontHeader, StorefrontPage, StorefrontShell, StorefrontThemeStyle, StoryQuote, THEME_SCALE_FIELDS, THEME_SCALE_VAR_PREFIX, TID, Testimonials, TierCards, applyDeliveryPolicy, applyStoreSettings, bannerPlaceholder, buildEnquiryFromForm, collectOrderMetadata, createStorefront, createStorefrontApp, entityListBlockMeta, establishCustomerSession, formatMoney, formatProductOptionSelection, getCartLineAnnotations, getCheckoutFieldContributions, getCustomerAuthAdapter, getProductCardBadges, getProductOptionGroups, hydratedEntriesFor, identifyStorefrontBuyer, initStorefrontRuntime, isExperimentBinding, listSlots, marketForCountry, marketUnitPrice, matchesFacets, mergeCollectionFacet, nextMilestone, normalizeProductOptionSelection, onStorefrontEvent, orderGalleryImages, overrideComponent, overrideProps, pickProductCardImage, placeStorefrontOrder, prefersReducedMotion, productCardComponentContract, productOptionSelectionKey, productPlaceholder, readHydratedPageData, registerStorefrontBlocks, registerStorefrontEntities, registerStorefrontExtensionPoints, registerStorefrontLoaders, resetPageDiagnostics, resetProductOptionsDeprecationWarnings, resetStorefrontExtensionPoints, resolveAuthAdapter, resolveExperimental, resolveOverride, resolvePaymentTerms, resolveStorefrontProvider, resolveVariantForSelection, roundCents, runBeforePlaceOrderValve, sectionsToBlocks, selectCount, selectDiscountTotal, selectIsOpen, selectRequiresShipping, selectShipping, selectShowsHours, selectSubtotal, selectTotal, selectionPrice, serializePageData, signInByEmail, signOutCustomer, signUpCustomer, startStorefrontPostHog, storeBuyerId, storefrontComponentContracts, themeToCss, toFacetMap, trackStorefront, useBuyerCountry, useBuyerStore, useCartStore, useCatalogStore, useCategories, useDeliveryStore, useDiscountValidator, useEnquiry, useExperiment, useExperimentValue, useInView, useMarketProduct, useMarketStore, useMyOrders, usePopOnChange, useProduct, useProducts, useScrolled, useServiceStore, useSessionStore, useSlotContext, useStorefrontActions, useStorefrontHead, useStorefrontPage, useStorefrontPageOptional, useT, usedSlots, withFacet, withMarketPrice };
12901
- //# sourceMappingURL=chunk-7GX7JLF7.js.map
12902
- //# sourceMappingURL=chunk-7GX7JLF7.js.map
12912
+ //# sourceMappingURL=chunk-OV6DVQMB.js.map
12913
+ //# sourceMappingURL=chunk-OV6DVQMB.js.map