@cimplify/sdk 0.56.0 → 0.58.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/react.js CHANGED
@@ -1,13 +1,13 @@
1
1
  "use client";
2
2
  'use strict';
3
3
 
4
- var chunkJYPLT56O_js = require('./chunk-JYPLT56O.js');
4
+ var chunkVV3GTDIP_js = require('./chunk-VV3GTDIP.js');
5
5
  var chunkMW7ICTVK_js = require('./chunk-MW7ICTVK.js');
6
6
  var chunkJGBDWEPJ_js = require('./chunk-JGBDWEPJ.js');
7
7
  var chunk7Y2O3E4D_js = require('./chunk-7Y2O3E4D.js');
8
8
  var chunkXA3ZNR75_js = require('./chunk-XA3ZNR75.js');
9
9
  require('./chunk-OWW5GUSB.js');
10
- var React11 = require('react');
10
+ var React12 = require('react');
11
11
  var jsxRuntime = require('react/jsx-runtime');
12
12
  var clsx = require('clsx');
13
13
  var tailwindMerge = require('tailwind-merge');
@@ -26,7 +26,7 @@ var input = require('@base-ui/react/input');
26
26
 
27
27
  function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
28
28
 
29
- var React11__default = /*#__PURE__*/_interopDefault(React11);
29
+ var React12__default = /*#__PURE__*/_interopDefault(React12);
30
30
 
31
31
  // src/ads/identity.ts
32
32
  var COOKIE_NAME = "_cimplify_uid";
@@ -203,7 +203,7 @@ function deriveAdsApiUrl() {
203
203
  }
204
204
  return "https://api.cimplify.io";
205
205
  }
206
- var AdContext = React11.createContext({
206
+ var AdContext = React12.createContext({
207
207
  siteId: null,
208
208
  config: null,
209
209
  isLoading: true,
@@ -211,7 +211,7 @@ var AdContext = React11.createContext({
211
211
  apiBase: "https://api.cimplify.io"
212
212
  });
213
213
  function useAds() {
214
- return React11.useContext(AdContext);
214
+ return React12.useContext(AdContext);
215
215
  }
216
216
  function AdProvider({
217
217
  siteId,
@@ -220,10 +220,10 @@ function AdProvider({
220
220
  children
221
221
  }) {
222
222
  const resolvedApiBase = apiBase || deriveAdsApiUrl();
223
- const [config, setConfig] = React11.useState(null);
224
- const [isLoading, setIsLoading] = React11.useState(true);
225
- const [identity, setIdentity] = React11.useState(null);
226
- React11.useEffect(() => {
223
+ const [config, setConfig] = React12.useState(null);
224
+ const [isLoading, setIsLoading] = React12.useState(true);
225
+ const [identity, setIdentity] = React12.useState(null);
226
+ React12.useEffect(() => {
227
227
  const userIdentity = getUserIdentity(authenticatedAccountId);
228
228
  setIdentity(userIdentity);
229
229
  fetch(`${resolvedApiBase}/ads/config/${siteId}`).then((r) => r.json()).then((data) => {
@@ -246,11 +246,11 @@ function Ad({
246
246
  onClick
247
247
  }) {
248
248
  const { siteId, config, isLoading, identity, apiBase } = useAds();
249
- const [ad, setAd] = React11.useState(null);
250
- const [error, setError] = React11.useState(false);
251
- const impressionTracked = React11.useRef(false);
252
- const containerRef = React11.useRef(null);
253
- React11.useEffect(() => {
249
+ const [ad, setAd] = React12.useState(null);
250
+ const [error, setError] = React12.useState(false);
251
+ const impressionTracked = React12.useRef(false);
252
+ const containerRef = React12.useRef(null);
253
+ React12.useEffect(() => {
254
254
  if (isLoading || !config?.enabled || !siteId || !identity) return;
255
255
  const path = typeof window !== "undefined" ? window.location.pathname : "/";
256
256
  const referrer = typeof document !== "undefined" ? document.referrer : "";
@@ -293,7 +293,7 @@ function Ad({
293
293
  }
294
294
  }).catch(() => setError(true));
295
295
  }, [siteId, config, isLoading, slot, identity, apiBase]);
296
- React11.useEffect(() => {
296
+ React12.useEffect(() => {
297
297
  if (!ad || impressionTracked.current || typeof window === "undefined" || !identity) return;
298
298
  const observer = new IntersectionObserver(
299
299
  ([entry]) => {
@@ -622,7 +622,7 @@ function applyCartPatch(base, patch) {
622
622
  }
623
623
  }
624
624
  function useCollectionStore(collection) {
625
- return React11.useSyncExternalStore(
625
+ return React12.useSyncExternalStore(
626
626
  (listener) => collection.subscribe(listener),
627
627
  () => collection.getSnapshot(),
628
628
  () => collection.getSnapshot()
@@ -992,7 +992,7 @@ function useCart(options = {}) {
992
992
  const locationId = options.locationId ?? client.getLocationId();
993
993
  const currency = options.currency ?? context?.currency ?? "USD";
994
994
  const optimisticEnabled = context?.optimistic ?? true;
995
- const entry = React11.useMemo(
995
+ const entry = React12.useMemo(
996
996
  () => getOrCreateStore({
997
997
  client,
998
998
  locationId,
@@ -1002,44 +1002,44 @@ function useCart(options = {}) {
1002
1002
  [client, currency, locationId, optimisticEnabled]
1003
1003
  );
1004
1004
  const view = useCollectionStore(entry.collection);
1005
- React11.useEffect(() => {
1005
+ React12.useEffect(() => {
1006
1006
  void ensureInitialized(entry);
1007
1007
  }, [entry]);
1008
- const addItem = React11.useCallback(
1008
+ const addItem = React12.useCallback(
1009
1009
  async (product, quantity, addOptions) => {
1010
1010
  await performAddItem(entry, product, quantity ?? 1, addOptions ?? {});
1011
1011
  },
1012
1012
  [entry]
1013
1013
  );
1014
- const removeItem = React11.useCallback(
1014
+ const removeItem = React12.useCallback(
1015
1015
  async (itemId) => {
1016
1016
  await performRemoveItem(entry, itemId);
1017
1017
  },
1018
1018
  [entry]
1019
1019
  );
1020
- const updateQuantity = React11.useCallback(
1020
+ const updateQuantity = React12.useCallback(
1021
1021
  async (itemId, quantity) => {
1022
1022
  await performUpdateQuantity(entry, itemId, quantity);
1023
1023
  },
1024
1024
  [entry]
1025
1025
  );
1026
- const clearCart = React11.useCallback(async () => {
1026
+ const clearCart = React12.useCallback(async () => {
1027
1027
  await performClear(entry);
1028
1028
  }, [entry]);
1029
- const sync = React11.useCallback(async () => {
1029
+ const sync = React12.useCallback(async () => {
1030
1030
  await syncFromServer(entry);
1031
1031
  }, [entry]);
1032
- const reorder = React11.useCallback(
1032
+ const reorder = React12.useCallback(
1033
1033
  async (orderId) => {
1034
1034
  return performReorder(entry, orderId);
1035
1035
  },
1036
1036
  [entry]
1037
1037
  );
1038
- const itemCount = React11.useMemo(
1038
+ const itemCount = React12.useMemo(
1039
1039
  () => view.items.reduce((sum, item) => sum + item.quantity, 0),
1040
1040
  [view.items]
1041
1041
  );
1042
- return React11.useMemo(
1042
+ return React12.useMemo(
1043
1043
  () => ({
1044
1044
  items: view.items,
1045
1045
  itemCount,
@@ -1142,30 +1142,30 @@ function resolveInitialLocation(locations) {
1142
1142
  }
1143
1143
  return locations[0];
1144
1144
  }
1145
- var CimplifyClientContext = React11.createContext(null);
1146
- var CimplifyStateContext = React11.createContext(null);
1145
+ var CimplifyClientContext = React12.createContext(null);
1146
+ var CimplifyStateContext = React12.createContext(null);
1147
1147
  function CimplifyProvider({
1148
1148
  client,
1149
1149
  children,
1150
1150
  onLocationChange,
1151
1151
  optimistic = true
1152
1152
  }) {
1153
- const resolvedClient = React11.useMemo(() => client ?? createDefaultClient(), [client]);
1154
- const onLocationChangeRef = React11.useRef(onLocationChange);
1155
- const [business, setBusiness] = React11.useState(null);
1156
- const [locations, setLocations] = React11.useState([]);
1157
- const [currentLocation, setCurrentLocationState] = React11.useState(null);
1158
- const [isReady, setIsReady] = React11.useState(false);
1159
- React11.useEffect(() => {
1153
+ const resolvedClient = React12.useMemo(() => client ?? createDefaultClient(), [client]);
1154
+ const onLocationChangeRef = React12.useRef(onLocationChange);
1155
+ const [business, setBusiness] = React12.useState(null);
1156
+ const [locations, setLocations] = React12.useState([]);
1157
+ const [currentLocation, setCurrentLocationState] = React12.useState(null);
1158
+ const [isReady, setIsReady] = React12.useState(false);
1159
+ React12.useEffect(() => {
1160
1160
  onLocationChangeRef.current = onLocationChange;
1161
1161
  }, [onLocationChange]);
1162
1162
  const baseCurrency = business?.default_currency || DEFAULT_CURRENCY;
1163
- const [displayCurrencyOverride, setDisplayCurrencyOverride] = React11.useState(
1163
+ const [displayCurrencyOverride, setDisplayCurrencyOverride] = React12.useState(
1164
1164
  () => getStoredDisplayCurrency()
1165
1165
  );
1166
- const [fxRate, setFxRate] = React11.useState(null);
1166
+ const [fxRate, setFxRate] = React12.useState(null);
1167
1167
  const displayCurrency = displayCurrencyOverride && displayCurrencyOverride !== baseCurrency ? displayCurrencyOverride : baseCurrency;
1168
- const setDisplayCurrency = React11.useCallback(
1168
+ const setDisplayCurrency = React12.useCallback(
1169
1169
  (currency) => {
1170
1170
  const normalized = currency?.trim().toUpperCase() || null;
1171
1171
  if (normalized && !chunkXA3ZNR75_js.isSupportedCurrency(normalized)) {
@@ -1179,7 +1179,7 @@ function CimplifyProvider({
1179
1179
  },
1180
1180
  [baseCurrency]
1181
1181
  );
1182
- React11.useEffect(() => {
1182
+ React12.useEffect(() => {
1183
1183
  if (displayCurrency === baseCurrency) {
1184
1184
  setFxRate(null);
1185
1185
  return;
@@ -1204,7 +1204,7 @@ function CimplifyProvider({
1204
1204
  clearInterval(intervalId);
1205
1205
  };
1206
1206
  }, [resolvedClient, baseCurrency, displayCurrency]);
1207
- const convertPrice = React11.useCallback(
1207
+ const convertPrice = React12.useCallback(
1208
1208
  (amount) => {
1209
1209
  const num = typeof amount === "string" ? parseFloat(amount) : amount;
1210
1210
  if (isNaN(num)) return 0;
@@ -1213,7 +1213,7 @@ function CimplifyProvider({
1213
1213
  },
1214
1214
  [fxRate, displayCurrency, baseCurrency]
1215
1215
  );
1216
- const setCurrentLocation = React11.useCallback(
1216
+ const setCurrentLocation = React12.useCallback(
1217
1217
  (location) => {
1218
1218
  const previousLocationId = resolvedClient.getLocationId();
1219
1219
  if (previousLocationId && previousLocationId !== location.id) {
@@ -1226,7 +1226,7 @@ function CimplifyProvider({
1226
1226
  },
1227
1227
  [resolvedClient]
1228
1228
  );
1229
- React11.useEffect(() => {
1229
+ React12.useEffect(() => {
1230
1230
  let cancelled = false;
1231
1231
  async function bootstrap() {
1232
1232
  setIsReady(false);
@@ -1271,7 +1271,7 @@ function CimplifyProvider({
1271
1271
  cancelled = true;
1272
1272
  };
1273
1273
  }, [resolvedClient]);
1274
- const clientContextValue = React11.useMemo(
1274
+ const clientContextValue = React12.useMemo(
1275
1275
  () => ({
1276
1276
  client: resolvedClient,
1277
1277
  business,
@@ -1291,7 +1291,7 @@ function CimplifyProvider({
1291
1291
  optimistic
1292
1292
  ]
1293
1293
  );
1294
- const stateContextValue = React11.useMemo(
1294
+ const stateContextValue = React12.useMemo(
1295
1295
  () => ({
1296
1296
  currentLocation,
1297
1297
  setCurrentLocation,
@@ -1312,20 +1312,20 @@ function CimplifyProvider({
1312
1312
  return /* @__PURE__ */ jsxRuntime.jsx(CimplifyClientContext.Provider, { value: clientContextValue, children: /* @__PURE__ */ jsxRuntime.jsx(CimplifyStateContext.Provider, { value: stateContextValue, children }) });
1313
1313
  }
1314
1314
  function useCimplify() {
1315
- const clientContext = React11.useContext(CimplifyClientContext);
1316
- const stateContext = React11.useContext(CimplifyStateContext);
1315
+ const clientContext = React12.useContext(CimplifyClientContext);
1316
+ const stateContext = React12.useContext(CimplifyStateContext);
1317
1317
  if (!clientContext || !stateContext) {
1318
1318
  throw new Error("useCimplify must be used within CimplifyProvider");
1319
1319
  }
1320
- return React11.useMemo(
1320
+ return React12.useMemo(
1321
1321
  () => ({ ...clientContext, ...stateContext }),
1322
1322
  [clientContext, stateContext]
1323
1323
  );
1324
1324
  }
1325
1325
  function useOptionalCimplify() {
1326
- const clientContext = React11.useContext(CimplifyClientContext);
1327
- const stateContext = React11.useContext(CimplifyStateContext);
1328
- return React11.useMemo(() => {
1326
+ const clientContext = React12.useContext(CimplifyClientContext);
1327
+ const stateContext = React12.useContext(CimplifyStateContext);
1328
+ return React12.useMemo(() => {
1329
1329
  if (!clientContext || !stateContext) {
1330
1330
  return null;
1331
1331
  }
@@ -1333,14 +1333,14 @@ function useOptionalCimplify() {
1333
1333
  }, [clientContext, stateContext]);
1334
1334
  }
1335
1335
  function useCimplifyClient() {
1336
- const context = React11.useContext(CimplifyClientContext);
1336
+ const context = React12.useContext(CimplifyClientContext);
1337
1337
  if (!context) {
1338
1338
  throw new Error("useCimplifyClient must be used within CimplifyProvider");
1339
1339
  }
1340
1340
  return context;
1341
1341
  }
1342
1342
  function useOptionalCimplifyClient() {
1343
- return React11.useContext(CimplifyClientContext);
1343
+ return React12.useContext(CimplifyClientContext);
1344
1344
  }
1345
1345
  function shellColors(isDark) {
1346
1346
  return {
@@ -1391,34 +1391,34 @@ function CimplifyCheckout({
1391
1391
  appearance,
1392
1392
  className
1393
1393
  }) {
1394
- const resolvedOrderTypes = React11.useMemo(
1394
+ const resolvedOrderTypes = React12.useMemo(
1395
1395
  () => orderTypes && orderTypes.length > 0 ? orderTypes : ["pickup", "delivery"],
1396
1396
  [orderTypes]
1397
1397
  );
1398
- const resolvedDefaultOrderType = React11.useMemo(() => {
1398
+ const resolvedDefaultOrderType = React12.useMemo(() => {
1399
1399
  if (defaultOrderType && resolvedOrderTypes.includes(defaultOrderType)) {
1400
1400
  return defaultOrderType;
1401
1401
  }
1402
1402
  return resolvedOrderTypes[0] || "pickup";
1403
1403
  }, [defaultOrderType, resolvedOrderTypes]);
1404
- const [orderType, setOrderType] = React11.useState(resolvedDefaultOrderType);
1405
- const [status, setStatus] = React11.useState(null);
1406
- const [statusText, setStatusText] = React11.useState("");
1407
- const [isSubmitting, setIsSubmitting] = React11.useState(false);
1408
- const [isInitializing, setIsInitializing] = React11.useState(false);
1409
- const [errorMessage, setErrorMessage] = React11.useState(null);
1410
- const [resolvedBusinessId, setResolvedBusinessId] = React11.useState(businessId ?? null);
1411
- const [resolvedCartId, setResolvedCartId] = React11.useState(cartId ?? null);
1412
- const [resolvedCart, setResolvedCart] = React11.useState(null);
1413
- const checkoutMountRef = React11.useRef(null);
1414
- const elementsRef = React11.useRef(null);
1415
- const activeCheckoutRef = React11.useRef(null);
1416
- const initialAppearanceRef = React11.useRef(appearance);
1417
- const hasWarnedInlineAppearanceRef = React11.useRef(false);
1418
- const isMountedRef = React11.useRef(true);
1404
+ const [orderType, setOrderType] = React12.useState(resolvedDefaultOrderType);
1405
+ const [status, setStatus] = React12.useState(null);
1406
+ const [statusText, setStatusText] = React12.useState("");
1407
+ const [isSubmitting, setIsSubmitting] = React12.useState(false);
1408
+ const [isInitializing, setIsInitializing] = React12.useState(false);
1409
+ const [errorMessage, setErrorMessage] = React12.useState(null);
1410
+ const [resolvedBusinessId, setResolvedBusinessId] = React12.useState(businessId ?? null);
1411
+ const [resolvedCartId, setResolvedCartId] = React12.useState(cartId ?? null);
1412
+ const [resolvedCart, setResolvedCart] = React12.useState(null);
1413
+ const checkoutMountRef = React12.useRef(null);
1414
+ const elementsRef = React12.useRef(null);
1415
+ const activeCheckoutRef = React12.useRef(null);
1416
+ const initialAppearanceRef = React12.useRef(appearance);
1417
+ const hasWarnedInlineAppearanceRef = React12.useRef(false);
1418
+ const isMountedRef = React12.useRef(true);
1419
1419
  const isTestMode = client.isTestMode();
1420
1420
  const cimplifyCtx = useOptionalCimplify();
1421
- const fxOptions = React11.useMemo(() => {
1421
+ const fxOptions = React12.useMemo(() => {
1422
1422
  if (!cimplifyCtx?.fxRate) return void 0;
1423
1423
  if (cimplifyCtx.displayCurrency === cimplifyCtx.baseCurrency) return void 0;
1424
1424
  return {
@@ -1426,29 +1426,29 @@ function CimplifyCheckout({
1426
1426
  convertPrice: cimplifyCtx.convertPrice
1427
1427
  };
1428
1428
  }, [cimplifyCtx?.fxRate, cimplifyCtx?.displayCurrency, cimplifyCtx?.baseCurrency, cimplifyCtx?.convertPrice]);
1429
- const fxOptionsRef = React11.useRef(fxOptions);
1429
+ const fxOptionsRef = React12.useRef(fxOptions);
1430
1430
  fxOptionsRef.current = fxOptions;
1431
- const resolvedCartRef = React11.useRef(resolvedCart);
1431
+ const resolvedCartRef = React12.useRef(resolvedCart);
1432
1432
  resolvedCartRef.current = resolvedCart;
1433
1433
  const isDark = appearance?.theme === "dark";
1434
- const emitStatus = React11__default.default.useEffectEvent(
1434
+ const emitStatus = React12__default.default.useEffectEvent(
1435
1435
  (nextStatus, context = {}) => {
1436
1436
  setStatus(nextStatus);
1437
1437
  setStatusText(context.display_text || "");
1438
1438
  onStatusChange?.(nextStatus, context);
1439
1439
  }
1440
1440
  );
1441
- const fireError = React11__default.default.useEffectEvent(
1441
+ const fireError = React12__default.default.useEffectEvent(
1442
1442
  (error) => {
1443
1443
  onError?.(error);
1444
1444
  }
1445
1445
  );
1446
- React11.useEffect(() => {
1446
+ React12.useEffect(() => {
1447
1447
  if (!resolvedOrderTypes.includes(orderType)) {
1448
1448
  setOrderType(resolvedDefaultOrderType);
1449
1449
  }
1450
1450
  }, [resolvedOrderTypes, resolvedDefaultOrderType, orderType]);
1451
- React11.useEffect(() => {
1451
+ React12.useEffect(() => {
1452
1452
  if (appearance && appearance !== initialAppearanceRef.current && !hasWarnedInlineAppearanceRef.current) {
1453
1453
  hasWarnedInlineAppearanceRef.current = true;
1454
1454
  console.warn(
@@ -1456,7 +1456,7 @@ function CimplifyCheckout({
1456
1456
  );
1457
1457
  }
1458
1458
  }, [appearance]);
1459
- React11.useEffect(() => {
1459
+ React12.useEffect(() => {
1460
1460
  let cancelled = false;
1461
1461
  async function bootstrap() {
1462
1462
  const needsBusinessResolve = !businessId;
@@ -1527,14 +1527,14 @@ function CimplifyCheckout({
1527
1527
  cancelled = true;
1528
1528
  };
1529
1529
  }, [businessId, cartId, client]);
1530
- React11.useEffect(() => {
1530
+ React12.useEffect(() => {
1531
1531
  return () => {
1532
1532
  isMountedRef.current = false;
1533
1533
  activeCheckoutRef.current?.abort();
1534
1534
  activeCheckoutRef.current = null;
1535
1535
  };
1536
1536
  }, []);
1537
- const handleSubmit = React11__default.default.useEffectEvent(async () => {
1537
+ const handleSubmit = React12__default.default.useEffectEvent(async () => {
1538
1538
  if (isSubmitting || isInitializing || !resolvedCartId) {
1539
1539
  if (!resolvedCartId && !isInitializing) {
1540
1540
  const message = "Your cart is empty. Add items before checkout.";
@@ -1579,7 +1579,7 @@ function CimplifyCheckout({
1579
1579
  }
1580
1580
  }
1581
1581
  });
1582
- React11.useEffect(() => {
1582
+ React12.useEffect(() => {
1583
1583
  if (!resolvedBusinessId) {
1584
1584
  elementsRef.current = null;
1585
1585
  return;
@@ -1625,7 +1625,7 @@ function CimplifyCheckout({
1625
1625
  resolvedDefaultOrderType,
1626
1626
  submitLabel
1627
1627
  ]);
1628
- React11.useEffect(() => {
1628
+ React12.useEffect(() => {
1629
1629
  if (!resolvedCart || !elementsRef.current) return;
1630
1630
  const checkoutElement = elementsRef.current.getElement("checkout");
1631
1631
  if (checkoutElement) {
@@ -1676,16 +1676,16 @@ function CimplifyAccount({
1676
1676
  const client = clientProp ?? context?.client;
1677
1677
  const resolvedLinkUrl = linkUrl || DEFAULT_LINK_URL;
1678
1678
  const resolvedBusinessId = businessIdProp || client?.getBusinessId?.() || "";
1679
- const iframeRef = React11.useRef(null);
1680
- const [height, setHeight] = React11.useState(400);
1681
- const [isReady, setIsReady] = React11.useState(false);
1682
- const iframeSrc = React11.useMemo(() => {
1679
+ const iframeRef = React12.useRef(null);
1680
+ const [height, setHeight] = React12.useState(400);
1681
+ const [isReady, setIsReady] = React12.useState(false);
1682
+ const iframeSrc = React12.useMemo(() => {
1683
1683
  const path = section ? `/elements/account/${section}` : "/elements/account";
1684
1684
  const url = new URL(path, resolvedLinkUrl);
1685
1685
  if (resolvedBusinessId) url.searchParams.set("businessId", resolvedBusinessId);
1686
1686
  return url.toString();
1687
1687
  }, [resolvedLinkUrl, section, resolvedBusinessId]);
1688
- React11.useEffect(() => {
1688
+ React12.useEffect(() => {
1689
1689
  function handleMessage(event) {
1690
1690
  if (!event.data || typeof event.data !== "object") return;
1691
1691
  if (iframeRef.current?.contentWindow && event.source !== iframeRef.current.contentWindow) {
@@ -1755,6 +1755,944 @@ function CimplifyAccount({
1755
1755
  }
1756
1756
  );
1757
1757
  }
1758
+ var BUTTON_BASE = "inline-flex items-center justify-center gap-2 font-semibold leading-none transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary/40 disabled:opacity-50 disabled:cursor-not-allowed [font-family:inherit] cursor-pointer rounded-[10px]";
1759
+ var BUTTON_VARIANTS = {
1760
+ primary: "bg-foreground text-background hover:bg-foreground/90",
1761
+ secondary: "bg-card text-foreground border border-border hover:bg-muted/40 hover:border-foreground/40",
1762
+ ghost: "bg-transparent text-foreground/80 hover:bg-muted/40 hover:text-foreground",
1763
+ danger: "bg-transparent text-destructive border border-border hover:bg-destructive/10 hover:border-destructive"
1764
+ };
1765
+ var BUTTON_SIZES = {
1766
+ sm: "px-[13px] py-[7px] text-[12.5px]",
1767
+ md: "px-[18px] py-[10px] text-[13.5px]"
1768
+ };
1769
+ var Button = React12__default.default.forwardRef(function Button2({ variant = "primary", size = "md", className, children, ...props }, ref) {
1770
+ return /* @__PURE__ */ jsxRuntime.jsx(
1771
+ "button",
1772
+ {
1773
+ ref,
1774
+ type: props.type ?? "button",
1775
+ className: cn(BUTTON_BASE, BUTTON_VARIANTS[variant], BUTTON_SIZES[size], className),
1776
+ "data-cimplify-account-button": true,
1777
+ "data-variant": variant,
1778
+ ...props,
1779
+ children
1780
+ }
1781
+ );
1782
+ });
1783
+ var STATUS_COLOR = {
1784
+ preparing: "text-amber-600",
1785
+ active: "text-amber-600",
1786
+ delivered: "text-emerald-600",
1787
+ completed: "text-foreground/55",
1788
+ cancelled: "text-destructive",
1789
+ paused: "text-foreground/55"
1790
+ };
1791
+ var STATUS_WEIGHT = {
1792
+ preparing: "font-semibold",
1793
+ active: "font-semibold",
1794
+ delivered: "font-medium",
1795
+ completed: "font-medium",
1796
+ cancelled: "font-medium",
1797
+ paused: "font-medium"
1798
+ };
1799
+ var STATUS_DEFAULT_LABEL = {
1800
+ preparing: "In progress",
1801
+ active: "Active",
1802
+ delivered: "Delivered",
1803
+ completed: "Completed",
1804
+ cancelled: "Cancelled",
1805
+ paused: "Paused"
1806
+ };
1807
+ function Status({ status, className }) {
1808
+ const label = status.label ?? STATUS_DEFAULT_LABEL[status.kind];
1809
+ return /* @__PURE__ */ jsxRuntime.jsxs(
1810
+ "span",
1811
+ {
1812
+ "data-cimplify-account-status": true,
1813
+ "data-kind": status.kind,
1814
+ className: cn(
1815
+ "inline-flex items-center gap-[7px] text-[12.5px]",
1816
+ STATUS_COLOR[status.kind],
1817
+ STATUS_WEIGHT[status.kind],
1818
+ className
1819
+ ),
1820
+ children: [
1821
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "size-[7px] rounded-full bg-current", "aria-hidden": true }),
1822
+ label
1823
+ ]
1824
+ }
1825
+ );
1826
+ }
1827
+ function BackLink({ label = "Back", className, ...props }) {
1828
+ return /* @__PURE__ */ jsxRuntime.jsxs(
1829
+ "a",
1830
+ {
1831
+ "data-cimplify-account-back": true,
1832
+ className: cn(
1833
+ "inline-flex items-center gap-1.5 text-[13px] text-foreground/55 hover:text-primary",
1834
+ "transition-colors mb-7",
1835
+ className
1836
+ ),
1837
+ ...props,
1838
+ children: [
1839
+ /* @__PURE__ */ jsxRuntime.jsx("span", { "aria-hidden": true, children: "\u2190" }),
1840
+ props.children ?? label
1841
+ ]
1842
+ }
1843
+ );
1844
+ }
1845
+ function FilterTabs({
1846
+ items,
1847
+ value,
1848
+ onChange,
1849
+ className
1850
+ }) {
1851
+ return /* @__PURE__ */ jsxRuntime.jsx(
1852
+ "div",
1853
+ {
1854
+ role: "tablist",
1855
+ "data-cimplify-account-filter-tabs": true,
1856
+ className: cn("flex gap-0 border-b border-border/60 mb-7 overflow-x-auto", className),
1857
+ children: items.map((item) => {
1858
+ const active = item.value === value;
1859
+ return /* @__PURE__ */ jsxRuntime.jsxs(
1860
+ "button",
1861
+ {
1862
+ role: "tab",
1863
+ "aria-selected": active,
1864
+ type: "button",
1865
+ onClick: () => onChange?.(item.value),
1866
+ "data-active": active || void 0,
1867
+ className: cn(
1868
+ "inline-flex items-baseline gap-2 px-4 pt-3 pb-[13px] text-[13.5px]",
1869
+ "border-b-2 -mb-px whitespace-nowrap transition-colors",
1870
+ active ? "text-foreground border-foreground font-semibold" : "text-foreground/55 border-transparent hover:text-foreground font-medium"
1871
+ ),
1872
+ children: [
1873
+ item.label,
1874
+ item.count !== void 0 && /* @__PURE__ */ jsxRuntime.jsx(
1875
+ "span",
1876
+ {
1877
+ className: cn(
1878
+ "text-[11.5px] tabular-nums font-medium",
1879
+ active ? "text-foreground/70" : "text-foreground/55"
1880
+ ),
1881
+ children: item.count
1882
+ }
1883
+ )
1884
+ ]
1885
+ },
1886
+ item.value
1887
+ );
1888
+ })
1889
+ }
1890
+ );
1891
+ }
1892
+ function EmptyState({ glyph, title, description, action, className }) {
1893
+ return /* @__PURE__ */ jsxRuntime.jsxs(
1894
+ "div",
1895
+ {
1896
+ "data-cimplify-account-empty": true,
1897
+ className: cn(
1898
+ "rounded-[16px] border border-dashed border-border bg-card",
1899
+ "px-6 py-20 text-center",
1900
+ className
1901
+ ),
1902
+ children: [
1903
+ glyph && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mx-auto mb-5 size-14 rounded-[12px] bg-muted/40 text-foreground/55 grid place-items-center", children: glyph }),
1904
+ /* @__PURE__ */ jsxRuntime.jsx("h3", { className: "font-serif text-[22px] font-semibold tracking-[-0.02em] text-foreground mb-2", children: title }),
1905
+ description && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "mx-auto mb-6 max-w-[380px] text-sm leading-[1.55] text-foreground/70", children: description }),
1906
+ action
1907
+ ]
1908
+ }
1909
+ );
1910
+ }
1911
+ function ErrorState({
1912
+ title = "Something went wrong",
1913
+ message = "We couldn't load this right now. Try again in a moment.",
1914
+ onRetry,
1915
+ className
1916
+ }) {
1917
+ return /* @__PURE__ */ jsxRuntime.jsxs(
1918
+ "div",
1919
+ {
1920
+ "data-cimplify-account-error": true,
1921
+ className: cn("rounded-[16px] border border-border bg-card px-6 py-8 text-center", className),
1922
+ children: [
1923
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mx-auto mb-4 size-11 rounded-[12px] bg-destructive/10 text-destructive grid place-items-center", children: /* @__PURE__ */ jsxRuntime.jsxs("svg", { width: "20", height: "20", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "1.8", children: [
1924
+ /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: "12", cy: "12", r: "9" }),
1925
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M12 8v5M12 16v.5" })
1926
+ ] }) }),
1927
+ /* @__PURE__ */ jsxRuntime.jsx("h4", { className: "text-sm font-semibold mb-1.5 text-foreground", children: title }),
1928
+ /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-[12.5px] text-foreground/55 mb-4 leading-[1.5]", children: message }),
1929
+ onRetry && /* @__PURE__ */ jsxRuntime.jsx(Button, { variant: "secondary", size: "sm", onClick: onRetry, children: "Try again" })
1930
+ ]
1931
+ }
1932
+ );
1933
+ }
1934
+ function Skeleton({ className, variant = "block" }) {
1935
+ if (variant === "row") {
1936
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { "data-cimplify-account-skeleton": true, className: cn("grid grid-cols-[44px_1fr_60px] gap-3 items-center py-3", className), children: [
1937
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "size-11 rounded-md bg-muted/50 animate-pulse" }),
1938
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-2", children: [
1939
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "h-3 bg-muted/50 rounded animate-pulse w-3/4" }),
1940
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "h-2.5 bg-muted/40 rounded animate-pulse w-1/2" })
1941
+ ] }),
1942
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "h-4 bg-muted/50 rounded animate-pulse" })
1943
+ ] });
1944
+ }
1945
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { "data-cimplify-account-skeleton": true, className: cn("bg-muted/50 rounded-md animate-pulse", className) });
1946
+ }
1947
+ function Toast({ title, description, onUndo, onDismiss, className }) {
1948
+ return /* @__PURE__ */ jsxRuntime.jsxs(
1949
+ "div",
1950
+ {
1951
+ "data-cimplify-account-toast": true,
1952
+ role: "status",
1953
+ "aria-live": "polite",
1954
+ className: cn(
1955
+ "relative grid grid-cols-[22px_1fr_auto_auto] gap-3 items-center mb-6",
1956
+ "rounded-[10px] bg-foreground text-background px-4 py-3.5 pr-5 text-[13.5px]",
1957
+ "shadow-[0_1px_0_rgba(0,0,0,0.04),0_8px_24px_rgba(0,0,0,0.12)]",
1958
+ className
1959
+ ),
1960
+ children: [
1961
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "size-[22px] rounded-full bg-emerald-500 grid place-items-center", children: /* @__PURE__ */ jsxRuntime.jsx("svg", { width: "12", height: "12", viewBox: "0 0 16 16", fill: "none", stroke: "white", strokeWidth: "2.4", children: /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M4 8.5l2.5 2.5L12 5.5" }) }) }),
1962
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
1963
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "font-semibold", children: title }),
1964
+ description && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-[12px] opacity-75 mt-0.5", children: description })
1965
+ ] }),
1966
+ onUndo && /* @__PURE__ */ jsxRuntime.jsx(
1967
+ "button",
1968
+ {
1969
+ type: "button",
1970
+ onClick: onUndo,
1971
+ className: "rounded-[8px] border border-white/20 bg-transparent text-background px-3 py-1.5 text-[12.5px] font-semibold hover:bg-white/10",
1972
+ children: "Undo"
1973
+ }
1974
+ ),
1975
+ onDismiss && /* @__PURE__ */ jsxRuntime.jsx(
1976
+ "button",
1977
+ {
1978
+ type: "button",
1979
+ "aria-label": "Dismiss",
1980
+ onClick: onDismiss,
1981
+ className: "bg-transparent border-0 text-background/60 p-1 hover:text-background",
1982
+ children: /* @__PURE__ */ jsxRuntime.jsx("svg", { width: "14", height: "14", viewBox: "0 0 14 14", fill: "none", stroke: "currentColor", strokeWidth: "1.6", children: /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M3.5 3.5l7 7M10.5 3.5l-7 7" }) })
1983
+ }
1984
+ )
1985
+ ]
1986
+ }
1987
+ );
1988
+ }
1989
+ function AccountShell({ sidebar, children, className }) {
1990
+ return /* @__PURE__ */ jsxRuntime.jsxs(
1991
+ "div",
1992
+ {
1993
+ "data-cimplify-account-shell": true,
1994
+ className: cn(
1995
+ "grid min-h-[720px] bg-background",
1996
+ "grid-cols-1 md:grid-cols-[280px_1fr]",
1997
+ className
1998
+ ),
1999
+ children: [
2000
+ sidebar,
2001
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "min-w-0", children })
2002
+ ]
2003
+ }
2004
+ );
2005
+ }
2006
+ function AccountSidebar({ children, scopeNote, className }) {
2007
+ return /* @__PURE__ */ jsxRuntime.jsxs(
2008
+ "aside",
2009
+ {
2010
+ "data-cimplify-account-sidebar": true,
2011
+ className: cn(
2012
+ "hidden md:flex flex-col bg-background border-r border-border/60",
2013
+ "px-6 pt-9 pb-7",
2014
+ className
2015
+ ),
2016
+ children: [
2017
+ children,
2018
+ scopeNote && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mt-auto pt-6 px-2 text-[11.5px] leading-[1.55] text-foreground/55", children: scopeNote })
2019
+ ]
2020
+ }
2021
+ );
2022
+ }
2023
+ function avatarGradient(seed) {
2024
+ let hash = 0;
2025
+ for (let i = 0; i < seed.length; i++) hash = (hash << 5) - hash + seed.charCodeAt(i) | 0;
2026
+ const hue = (Math.abs(hash) % 60 + 20) % 360;
2027
+ return `linear-gradient(135deg, oklch(0.78 0.10 ${hue}), oklch(0.55 0.16 ${hue - 8}))`;
2028
+ }
2029
+ function initials(name) {
2030
+ return name.trim().split(/\s+/).map((p) => p[0]).filter(Boolean).slice(0, 2).join("").toUpperCase();
2031
+ }
2032
+ function AccountIdentityStrip({
2033
+ name,
2034
+ email,
2035
+ customerId,
2036
+ className
2037
+ }) {
2038
+ const seed = customerId ?? name;
2039
+ return /* @__PURE__ */ jsxRuntime.jsxs(
2040
+ "div",
2041
+ {
2042
+ "data-cimplify-account-identity": true,
2043
+ className: cn(
2044
+ "grid grid-cols-[40px_1fr] gap-3 items-center",
2045
+ "border-b border-border/60 px-2 pb-[22px] mb-2",
2046
+ className
2047
+ ),
2048
+ children: [
2049
+ /* @__PURE__ */ jsxRuntime.jsx(
2050
+ "div",
2051
+ {
2052
+ "aria-hidden": true,
2053
+ className: "size-10 rounded-full grid place-items-center text-white font-serif font-semibold text-[16px] tracking-[-0.01em]",
2054
+ style: { background: avatarGradient(seed) },
2055
+ children: initials(name)
2056
+ }
2057
+ ),
2058
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "min-w-0", children: [
2059
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-[14px] font-semibold text-foreground truncate", children: name }),
2060
+ email && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-[12px] text-foreground/55 truncate", children: email })
2061
+ ] })
2062
+ ]
2063
+ }
2064
+ );
2065
+ }
2066
+ var externIcon = /* @__PURE__ */ jsxRuntime.jsx("svg", { width: "12", height: "12", viewBox: "0 0 12 12", fill: "none", stroke: "currentColor", strokeWidth: "1.5", "aria-hidden": true, children: /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M4 8l4-4M5 4h3v3" }) });
2067
+ function AccountNav({ items, activeHref, className }) {
2068
+ return /* @__PURE__ */ jsxRuntime.jsx("nav", { "aria-label": "Account", "data-cimplify-account-nav": true, className: cn("pt-4", className), children: /* @__PURE__ */ jsxRuntime.jsx("ul", { className: "flex flex-col gap-px list-none p-0 m-0", children: items.map((item, idx) => {
2069
+ if (item.divider) {
2070
+ return /* @__PURE__ */ jsxRuntime.jsx("li", { "aria-hidden": true, children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "h-px bg-border/60 mx-2 my-3" }) }, `d-${idx}`);
2071
+ }
2072
+ const active = item.href === activeHref;
2073
+ return /* @__PURE__ */ jsxRuntime.jsx("li", { children: /* @__PURE__ */ jsxRuntime.jsxs(
2074
+ "a",
2075
+ {
2076
+ href: item.href,
2077
+ "aria-current": active ? "page" : void 0,
2078
+ "data-active": active || void 0,
2079
+ className: cn(
2080
+ "grid grid-cols-[16px_1fr_auto] gap-3 items-center rounded-lg px-3 py-2",
2081
+ "text-[13.5px] no-underline transition-colors",
2082
+ "focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary/40",
2083
+ active ? "bg-card shadow-[0_0_0_1px_var(--color-border)] text-foreground font-semibold" : "text-foreground/70 font-medium hover:bg-muted/40 hover:text-foreground"
2084
+ ),
2085
+ children: [
2086
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: cn("size-4 grid place-items-center", active ? "text-primary opacity-100" : "opacity-70"), children: item.icon }),
2087
+ /* @__PURE__ */ jsxRuntime.jsx("span", { children: item.label }),
2088
+ item.external && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-foreground/55 opacity-70", children: externIcon })
2089
+ ]
2090
+ }
2091
+ ) }, item.href);
2092
+ }) }) });
2093
+ }
2094
+ function AccountHero({ eyebrow = "Your account", title, subtitle, className }) {
2095
+ return /* @__PURE__ */ jsxRuntime.jsxs(
2096
+ "header",
2097
+ {
2098
+ "data-cimplify-account-hero": true,
2099
+ className: cn("mb-11", className),
2100
+ children: [
2101
+ eyebrow && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-[11px] font-semibold tracking-[0.16em] uppercase text-primary mb-2", children: eyebrow }),
2102
+ /* @__PURE__ */ jsxRuntime.jsx("h1", { className: "font-serif text-[clamp(28px,3vw,40px)] font-semibold tracking-[-0.025em] leading-[1.05] text-foreground m-0", children: title }),
2103
+ subtitle && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-foreground/70 mt-3 text-[14.5px] m-0", children: subtitle })
2104
+ ]
2105
+ }
2106
+ );
2107
+ }
2108
+ function AccountContent({ children, className }) {
2109
+ return /* @__PURE__ */ jsxRuntime.jsx(
2110
+ "main",
2111
+ {
2112
+ "data-cimplify-account-content": true,
2113
+ className: cn(
2114
+ "bg-background min-w-0",
2115
+ "px-6 sm:px-10 md:px-16 pt-14 pb-18",
2116
+ className
2117
+ ),
2118
+ children
2119
+ }
2120
+ );
2121
+ }
2122
+ function Section({ title, meta, action, children, className }) {
2123
+ return /* @__PURE__ */ jsxRuntime.jsxs("section", { "data-cimplify-account-section": true, className: cn("mt-11 first:mt-0", className), children: [
2124
+ (title || meta || action) && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-baseline justify-between mb-3.5", children: [
2125
+ title && /* @__PURE__ */ jsxRuntime.jsx("h2", { className: "text-[12px] font-semibold tracking-[0.1em] uppercase text-foreground/55 m-0", children: title }),
2126
+ meta && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-[12px] text-foreground/55 tabular-nums", children: meta }),
2127
+ action
2128
+ ] }),
2129
+ children
2130
+ ] });
2131
+ }
2132
+ function SectionMore({ children, className, ...props }) {
2133
+ return /* @__PURE__ */ jsxRuntime.jsx(
2134
+ "a",
2135
+ {
2136
+ "data-cimplify-account-section-more": true,
2137
+ className: cn("text-[13px] font-medium text-primary no-underline hover:underline", className),
2138
+ ...props,
2139
+ children
2140
+ }
2141
+ );
2142
+ }
2143
+ function Pane({ pane, side }) {
2144
+ const color = pane.variant === "live" ? "text-amber-600" : "text-emerald-600";
2145
+ const haloAnim = pane.variant === "live" ? "cimplify-live-pulse" : "";
2146
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("flex flex-col gap-4", side === "right" && "md:pl-8 md:border-l border-border/60"), children: [
2147
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col gap-2", children: [
2148
+ /* @__PURE__ */ jsxRuntime.jsxs("span", { className: cn("inline-flex items-center gap-2 text-[11.5px] font-semibold tracking-[0.08em] uppercase", color), children: [
2149
+ /* @__PURE__ */ jsxRuntime.jsx(
2150
+ "span",
2151
+ {
2152
+ "data-cimplify-live-dot": pane.variant === "live" || void 0,
2153
+ className: cn("size-1.5 rounded-full bg-current", haloAnim),
2154
+ "aria-hidden": true
2155
+ }
2156
+ ),
2157
+ pane.label
2158
+ ] }),
2159
+ /* @__PURE__ */ jsxRuntime.jsx("h3", { className: "font-serif text-[22px] font-semibold tracking-[-0.02em] leading-[1.2] text-foreground m-0", children: pane.title }),
2160
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-[13.5px] text-foreground/70", children: pane.when })
2161
+ ] }),
2162
+ pane.actions && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex gap-2.5 mt-auto", children: pane.actions })
2163
+ ] });
2164
+ }
2165
+ function HappeningCard({ left, right, className }) {
2166
+ if (!left && !right) return null;
2167
+ const dual = !!left && !!right;
2168
+ return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
2169
+ /* @__PURE__ */ jsxRuntime.jsx("style", { children: `
2170
+ @keyframes cimplify-live-pulse {
2171
+ 0%, 100% { box-shadow: 0 0 0 4px color-mix(in oklch, currentColor 18%, transparent); }
2172
+ 50% { box-shadow: 0 0 0 8px color-mix(in oklch, currentColor 5%, transparent); }
2173
+ }
2174
+ .cimplify-live-pulse { animation: cimplify-live-pulse 1.8s ease-in-out infinite; }
2175
+ ` }),
2176
+ /* @__PURE__ */ jsxRuntime.jsxs(
2177
+ "div",
2178
+ {
2179
+ "data-cimplify-happening-card": true,
2180
+ "data-dual": dual || void 0,
2181
+ className: cn(
2182
+ "bg-card border border-border rounded-[16px] p-7",
2183
+ "grid gap-4 md:gap-0 items-stretch",
2184
+ dual ? "md:grid-cols-2" : "grid-cols-1",
2185
+ className
2186
+ ),
2187
+ children: [
2188
+ left && /* @__PURE__ */ jsxRuntime.jsx(Pane, { pane: left, side: "left" }),
2189
+ right && /* @__PURE__ */ jsxRuntime.jsx(Pane, { pane: right, side: "right" })
2190
+ ]
2191
+ }
2192
+ )
2193
+ ] });
2194
+ }
2195
+ function ContinuityCard({ glyph, title, description, badge, className }) {
2196
+ return /* @__PURE__ */ jsxRuntime.jsxs(
2197
+ "div",
2198
+ {
2199
+ "data-cimplify-continuity-card": true,
2200
+ className: cn(
2201
+ "grid grid-cols-[auto_1fr_auto] gap-3.5 items-center",
2202
+ "rounded-[12px] px-5 py-3.5 mb-8 -mt-5",
2203
+ "border bg-card text-foreground text-[13.5px]",
2204
+ // soft primary-tinted gradient
2205
+ "bg-[linear-gradient(135deg,color-mix(in_oklch,var(--color-primary)_8%,transparent),var(--color-background))]",
2206
+ "border-[color-mix(in_oklch,var(--color-primary)_18%,transparent)]",
2207
+ className
2208
+ ),
2209
+ children: [
2210
+ glyph && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "size-[26px] rounded-full bg-card border border-border grid place-items-center text-primary text-[13px]", children: glyph }),
2211
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
2212
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "font-semibold text-foreground", children: title }),
2213
+ description && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-foreground/55 text-[12px] mt-0.5", children: description })
2214
+ ] }),
2215
+ badge && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-[11.5px] text-primary font-semibold uppercase tracking-[0.06em] px-2.5 py-1 rounded-full bg-card border border-border", children: badge })
2216
+ ]
2217
+ }
2218
+ );
2219
+ }
2220
+ function WelcomeCard({ title, description, action, className }) {
2221
+ return /* @__PURE__ */ jsxRuntime.jsxs(
2222
+ "div",
2223
+ {
2224
+ "data-cimplify-welcome-card": true,
2225
+ className: cn(
2226
+ "rounded-[16px] border border-border bg-card",
2227
+ "px-9 py-9 grid grid-cols-1 md:grid-cols-[1fr_auto] gap-8 items-center",
2228
+ className
2229
+ ),
2230
+ children: [
2231
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
2232
+ /* @__PURE__ */ jsxRuntime.jsx("h3", { className: "font-serif text-[24px] font-semibold tracking-[-0.02em] text-foreground m-0 mb-2", children: title }),
2233
+ /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-foreground/70 text-sm leading-[1.55] max-w-[460px] m-0", children: description })
2234
+ ] }),
2235
+ /* @__PURE__ */ jsxRuntime.jsx("div", { children: action })
2236
+ ]
2237
+ }
2238
+ );
2239
+ }
2240
+ function summaryLine(s) {
2241
+ if (!s) return "Addresses, payment, profile \xB7 syncs to every Cimplify shop";
2242
+ const parts = [];
2243
+ if (typeof s.addresses === "number")
2244
+ parts.push(`${s.addresses} address${s.addresses === 1 ? "" : "es"}`);
2245
+ if (typeof s.paymentMethods === "number")
2246
+ parts.push(`${s.paymentMethods} payment method${s.paymentMethods === 1 ? "" : "s"}`);
2247
+ if (typeof s.shops === "number")
2248
+ parts.push(`${s.shops} shop${s.shops === 1 ? "" : "s"}`);
2249
+ if (parts.length === 0) return "Addresses, payment, profile \xB7 syncs to every Cimplify shop";
2250
+ return parts.join(" \xB7 ");
2251
+ }
2252
+ function IdentityOfframp({
2253
+ title = "Cimplify identity",
2254
+ summary,
2255
+ href = "https://link.cimplify.io",
2256
+ className,
2257
+ ...props
2258
+ }) {
2259
+ return /* @__PURE__ */ jsxRuntime.jsxs(
2260
+ "a",
2261
+ {
2262
+ "data-cimplify-identity-offramp": true,
2263
+ href,
2264
+ target: href.startsWith("http") ? "_blank" : void 0,
2265
+ rel: href.startsWith("http") ? "noopener noreferrer" : void 0,
2266
+ className: cn(
2267
+ "grid grid-cols-[40px_1fr_auto] gap-4 items-center",
2268
+ "rounded-[16px] border border-border bg-card px-5 py-4",
2269
+ "no-underline text-foreground transition-colors",
2270
+ "hover:bg-muted/40 hover:border-foreground/40",
2271
+ "group",
2272
+ className
2273
+ ),
2274
+ ...props,
2275
+ children: [
2276
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "size-10 rounded-md bg-foreground text-background grid place-items-center font-serif font-bold text-[18px]", children: "C" }),
2277
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
2278
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-[14px] font-semibold text-foreground", children: title }),
2279
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-[12.5px] text-foreground/55 mt-0.5 tabular-nums", children: summaryLine(summary) })
2280
+ ] }),
2281
+ /* @__PURE__ */ jsxRuntime.jsx(
2282
+ "svg",
2283
+ {
2284
+ width: "14",
2285
+ height: "14",
2286
+ viewBox: "0 0 14 14",
2287
+ fill: "none",
2288
+ stroke: "currentColor",
2289
+ strokeWidth: "1.6",
2290
+ className: "text-foreground/55 transition-transform group-hover:text-primary group-hover:translate-x-0.5",
2291
+ children: /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M5 3l4 4-4 4" })
2292
+ }
2293
+ )
2294
+ ]
2295
+ }
2296
+ );
2297
+ }
2298
+ var THUMB_GRADIENTS = [
2299
+ "linear-gradient(135deg, oklch(0.86 0.06 60), oklch(0.74 0.11 35))",
2300
+ "linear-gradient(135deg, oklch(0.92 0.04 80), oklch(0.84 0.08 60))",
2301
+ "linear-gradient(135deg, oklch(0.94 0.05 25), oklch(0.82 0.10 30))",
2302
+ "linear-gradient(135deg, oklch(0.74 0.10 45), oklch(0.58 0.13 30))"
2303
+ ];
2304
+ function deterministicGradient(seed, idx) {
2305
+ let hash = idx;
2306
+ for (let i = 0; i < seed.length; i++) hash = (hash << 5) - hash + seed.charCodeAt(i) | 0;
2307
+ return THUMB_GRADIENTS[Math.abs(hash) % THUMB_GRADIENTS.length];
2308
+ }
2309
+ function Thumbs({ thumbnails, seed = "" }) {
2310
+ const list = thumbnails && thumbnails.length > 0 ? thumbnails : [`${seed}-a`, `${seed}-b`, `${seed}-c`];
2311
+ const solo = list.length === 1;
2312
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "relative size-14", "aria-hidden": true, children: list.slice(0, 3).map((src, i) => {
2313
+ const isImg = src.startsWith("http") || src.startsWith("/");
2314
+ const sizes = solo ? "size-14 left-0 top-0 z-30" : [
2315
+ "size-11 left-0 top-0 z-30",
2316
+ "size-[38px] left-[14px] top-1 z-20",
2317
+ "size-8 left-6 top-2 z-10"
2318
+ ][i];
2319
+ const style = isImg ? { backgroundImage: `url(${src})`, backgroundSize: "cover", backgroundPosition: "center" } : { background: deterministicGradient(src, i) };
2320
+ return /* @__PURE__ */ jsxRuntime.jsx(
2321
+ "div",
2322
+ {
2323
+ className: cn(
2324
+ "absolute rounded-md shadow-[0_0_0_2px_var(--color-card)]",
2325
+ sizes
2326
+ ),
2327
+ style
2328
+ },
2329
+ i
2330
+ );
2331
+ }) });
2332
+ }
2333
+ function OrderRow({ order, onSelect, className }) {
2334
+ const Element = order.href ? "a" : "button";
2335
+ return /* @__PURE__ */ jsxRuntime.jsxs(
2336
+ Element,
2337
+ {
2338
+ "data-cimplify-order-row": true,
2339
+ href: order.href,
2340
+ type: order.href ? void 0 : "button",
2341
+ onClick: () => onSelect?.(order.id),
2342
+ className: cn(
2343
+ "grid grid-cols-[56px_1fr_auto_auto] gap-5 items-center px-[22px] py-[18px]",
2344
+ "border-b border-border/60 last:border-b-0",
2345
+ "text-left no-underline w-full bg-transparent",
2346
+ "transition-colors hover:bg-muted/40",
2347
+ "group cursor-pointer",
2348
+ className
2349
+ ),
2350
+ children: [
2351
+ /* @__PURE__ */ jsxRuntime.jsx(Thumbs, { thumbnails: order.thumbnails, seed: order.id }),
2352
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col gap-1 min-w-0", children: [
2353
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-[14px] font-semibold text-foreground leading-[1.4] truncate", children: order.summary }),
2354
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "text-[12.5px] text-foreground/55 flex gap-2 items-center tabular-nums", children: [
2355
+ /* @__PURE__ */ jsxRuntime.jsx("span", { children: order.meta }),
2356
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-border", children: "\xB7" }),
2357
+ /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "font-mono text-[11px]", children: [
2358
+ "#",
2359
+ order.id
2360
+ ] })
2361
+ ] })
2362
+ ] }),
2363
+ /* @__PURE__ */ jsxRuntime.jsx(Status, { status: order.status }),
2364
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-[14.5px] font-semibold text-foreground tabular-nums", children: order.total })
2365
+ ]
2366
+ }
2367
+ );
2368
+ }
2369
+ function OrderList({ orders, onSelect, className }) {
2370
+ return /* @__PURE__ */ jsxRuntime.jsx(
2371
+ "div",
2372
+ {
2373
+ "data-cimplify-order-list": true,
2374
+ className: cn("bg-card border border-border rounded-[16px] overflow-hidden", className),
2375
+ children: orders.map((order) => /* @__PURE__ */ jsxRuntime.jsx(OrderRow, { order, onSelect }, order.id))
2376
+ }
2377
+ );
2378
+ }
2379
+ function OrderDetailHeader({ title, meta, className }) {
2380
+ return /* @__PURE__ */ jsxRuntime.jsxs("header", { "data-cimplify-order-detail-header": true, className: cn("mb-9", className), children: [
2381
+ /* @__PURE__ */ jsxRuntime.jsx("h1", { className: "font-serif font-semibold text-[clamp(26px,2.8vw,34px)] tracking-[-0.025em] leading-[1.1] text-foreground m-0 mb-2.5", children: title }),
2382
+ meta && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex items-center gap-3 flex-wrap text-[13px] text-foreground/55", children: meta })
2383
+ ] });
2384
+ }
2385
+ function OrderDetailMetaPipe() {
2386
+ return /* @__PURE__ */ jsxRuntime.jsx("span", { "aria-hidden": true, className: "text-border", children: "\xB7" });
2387
+ }
2388
+ function OrderTimeline({ steps, className }) {
2389
+ const doneCount = steps.filter((s) => s.state === "done").length;
2390
+ const currentIdx = steps.findIndex((s) => s.state === "current");
2391
+ const filledRatio = currentIdx >= 0 ? (doneCount + (currentIdx >= doneCount ? 0.5 : 0)) / (steps.length - 1) : doneCount / Math.max(1, steps.length - 1);
2392
+ return /* @__PURE__ */ jsxRuntime.jsxs(
2393
+ "div",
2394
+ {
2395
+ "data-cimplify-order-timeline": true,
2396
+ className: cn("bg-card border border-border rounded-[16px] px-7 py-8 mb-6 relative", className),
2397
+ children: [
2398
+ /* @__PURE__ */ jsxRuntime.jsx(
2399
+ "div",
2400
+ {
2401
+ className: "absolute top-[18px] h-0.5 bg-border z-[1]",
2402
+ style: {
2403
+ left: `calc(${100 / steps.length / 2}% + 18px)`,
2404
+ right: `calc(${100 / steps.length / 2}% + 18px)`
2405
+ },
2406
+ children: /* @__PURE__ */ jsxRuntime.jsx(
2407
+ "div",
2408
+ {
2409
+ className: "h-full bg-primary",
2410
+ style: { width: `${Math.min(100, filledRatio * 100)}%` }
2411
+ }
2412
+ )
2413
+ }
2414
+ ),
2415
+ /* @__PURE__ */ jsxRuntime.jsx(
2416
+ "div",
2417
+ {
2418
+ className: "grid relative",
2419
+ style: { gridTemplateColumns: `repeat(${steps.length}, 1fr)` },
2420
+ children: steps.map((step, i) => /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "text-center px-1 relative", children: [
2421
+ /* @__PURE__ */ jsxRuntime.jsx(
2422
+ "div",
2423
+ {
2424
+ className: cn(
2425
+ "size-9 rounded-full border-2 grid place-items-center mx-auto mb-3 relative z-[2]",
2426
+ step.state === "current" && "bg-primary text-white border-primary shadow-[0_0_0_6px_color-mix(in_oklch,var(--color-primary)_18%,transparent)]",
2427
+ step.state === "done" && "bg-foreground text-white border-foreground",
2428
+ step.state === "pending" && "bg-muted/40 text-foreground/55 border-border"
2429
+ ),
2430
+ children: step.icon
2431
+ }
2432
+ ),
2433
+ /* @__PURE__ */ jsxRuntime.jsx(
2434
+ "div",
2435
+ {
2436
+ className: cn(
2437
+ "text-[12.5px] font-semibold",
2438
+ step.state === "current" ? "text-foreground" : "text-foreground/70"
2439
+ ),
2440
+ children: step.label
2441
+ }
2442
+ ),
2443
+ step.time && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-[11.5px] text-foreground/55 mt-0.5", children: step.time })
2444
+ ] }, i))
2445
+ }
2446
+ )
2447
+ ]
2448
+ }
2449
+ );
2450
+ }
2451
+ function ItemsCard({ title, rightLabel, items, totals, className }) {
2452
+ return /* @__PURE__ */ jsxRuntime.jsxs(
2453
+ "div",
2454
+ {
2455
+ "data-cimplify-items-card": true,
2456
+ className: cn("bg-card border border-border rounded-[16px] overflow-hidden", className),
2457
+ children: [
2458
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center justify-between px-[22px] py-4 border-b border-border/60", children: [
2459
+ /* @__PURE__ */ jsxRuntime.jsx("h3", { className: "text-[13.5px] font-semibold text-foreground m-0", children: title }),
2460
+ rightLabel && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-[12.5px] text-foreground/55", children: rightLabel })
2461
+ ] }),
2462
+ /* @__PURE__ */ jsxRuntime.jsx("ul", { className: "list-none p-0 m-0", children: items.map((item, idx) => /* @__PURE__ */ jsxRuntime.jsxs(
2463
+ "li",
2464
+ {
2465
+ className: "grid grid-cols-[48px_1fr_auto_auto] gap-4 items-center px-[22px] py-3.5 border-b border-border/60 last:border-b-0",
2466
+ children: [
2467
+ /* @__PURE__ */ jsxRuntime.jsx(
2468
+ "div",
2469
+ {
2470
+ className: "size-12 rounded",
2471
+ style: {
2472
+ background: item.thumbnail ? `url(${item.thumbnail}) center/cover` : deterministicGradient(item.id, idx)
2473
+ },
2474
+ "aria-hidden": true
2475
+ }
2476
+ ),
2477
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
2478
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-[14px] font-semibold text-foreground", children: item.name }),
2479
+ item.meta && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-[12px] text-foreground/55 mt-0.5", children: item.meta })
2480
+ ] }),
2481
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "text-[12.5px] text-foreground/55 tabular-nums", children: [
2482
+ "\xD7 ",
2483
+ item.qty
2484
+ ] }),
2485
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-[14px] font-semibold text-foreground tabular-nums", children: item.price })
2486
+ ]
2487
+ },
2488
+ item.id
2489
+ )) }),
2490
+ totals && /* @__PURE__ */ jsxRuntime.jsx(OrderTotals, { data: totals })
2491
+ ]
2492
+ }
2493
+ );
2494
+ }
2495
+ function OrderTotals({ data, className }) {
2496
+ return /* @__PURE__ */ jsxRuntime.jsxs(
2497
+ "div",
2498
+ {
2499
+ "data-cimplify-order-totals": true,
2500
+ className: cn("px-[22px] py-4 bg-muted/30 border-t border-border/60", className),
2501
+ children: [
2502
+ data.rows.map((row) => /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex justify-between py-1 text-[13.5px]", children: [
2503
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-foreground/70", children: row.label }),
2504
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "tabular-nums text-foreground", children: row.value })
2505
+ ] }, row.label)),
2506
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex justify-between pt-3 mt-2 border-t border-border font-bold text-[15px]", children: [
2507
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-foreground", children: data.grandLabel }),
2508
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "tabular-nums text-foreground", children: data.grandValue })
2509
+ ] })
2510
+ ]
2511
+ }
2512
+ );
2513
+ }
2514
+ function ContextCard({ rows, className }) {
2515
+ return /* @__PURE__ */ jsxRuntime.jsx(
2516
+ "div",
2517
+ {
2518
+ "data-cimplify-context-card": true,
2519
+ className: cn("bg-card border border-border rounded-[16px] overflow-hidden", className),
2520
+ children: rows.map((row) => /* @__PURE__ */ jsxRuntime.jsxs(
2521
+ "div",
2522
+ {
2523
+ className: "grid grid-cols-[130px_1fr_auto] gap-5 px-[22px] py-4 border-b border-border/60 last:border-b-0 items-center",
2524
+ children: [
2525
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-[12.5px] text-foreground/55 font-medium", children: row.label }),
2526
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-[13.5px] text-foreground leading-[1.5]", children: row.value }),
2527
+ row.manageHref && /* @__PURE__ */ jsxRuntime.jsxs(
2528
+ "a",
2529
+ {
2530
+ href: row.manageHref,
2531
+ target: "_blank",
2532
+ rel: "noopener noreferrer",
2533
+ className: "text-[12px] text-foreground/55 no-underline hover:text-primary inline-flex items-center gap-1 transition-colors",
2534
+ children: [
2535
+ row.manageLabel ?? "Manage",
2536
+ " ",
2537
+ /* @__PURE__ */ jsxRuntime.jsx("span", { "aria-hidden": true, children: "\u2197" })
2538
+ ]
2539
+ }
2540
+ )
2541
+ ]
2542
+ },
2543
+ row.label
2544
+ ))
2545
+ }
2546
+ );
2547
+ }
2548
+ function SubscriptionRow({
2549
+ subscription,
2550
+ onSelect,
2551
+ iconTile,
2552
+ className
2553
+ }) {
2554
+ const Element = subscription.href ? "a" : "button";
2555
+ const muted = subscription.cancelled;
2556
+ return /* @__PURE__ */ jsxRuntime.jsxs(
2557
+ Element,
2558
+ {
2559
+ "data-cimplify-subscription-row": true,
2560
+ href: subscription.href,
2561
+ type: subscription.href ? void 0 : "button",
2562
+ onClick: () => onSelect?.(subscription.id),
2563
+ className: cn(
2564
+ "grid grid-cols-[56px_1fr_auto_auto] gap-5 items-center px-[22px] py-5",
2565
+ "border-b border-border/60 last:border-b-0",
2566
+ "text-left no-underline w-full bg-transparent",
2567
+ "transition-colors hover:bg-muted/40 cursor-pointer",
2568
+ muted && "opacity-60",
2569
+ className
2570
+ ),
2571
+ children: [
2572
+ /* @__PURE__ */ jsxRuntime.jsx(
2573
+ "div",
2574
+ {
2575
+ className: cn(
2576
+ "size-14 rounded-[12px] grid place-items-center",
2577
+ subscription.paused || muted ? "bg-muted/40 text-foreground/55" : "text-amber-700 bg-[linear-gradient(135deg,oklch(0.92_0.05_80),oklch(0.84_0.10_60))]"
2578
+ ),
2579
+ children: iconTile ?? /* @__PURE__ */ jsxRuntime.jsxs("svg", { width: "26", height: "26", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "1.5", children: [
2580
+ /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: "12", cy: "12", r: "9" }),
2581
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M12 7v5l3 2" })
2582
+ ] })
2583
+ }
2584
+ ),
2585
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
2586
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-[14.5px] font-semibold text-foreground", children: subscription.title }),
2587
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-[12.5px] text-foreground/55 mt-0.5", children: subscription.meta })
2588
+ ] }),
2589
+ /* @__PURE__ */ jsxRuntime.jsx(Status, { status: subscription.status }),
2590
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "text-right tabular-nums", children: [
2591
+ /* @__PURE__ */ jsxRuntime.jsx(
2592
+ "span",
2593
+ {
2594
+ className: cn(
2595
+ "text-[14.5px] font-semibold",
2596
+ muted ? "text-foreground/55" : "text-foreground"
2597
+ ),
2598
+ children: subscription.price
2599
+ }
2600
+ ),
2601
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "block text-[11px] text-foreground/55 mt-0.5", children: subscription.unit })
2602
+ ] })
2603
+ ]
2604
+ }
2605
+ );
2606
+ }
2607
+ function SubscriptionList({
2608
+ subscriptions,
2609
+ onSelect,
2610
+ renderIcon,
2611
+ className
2612
+ }) {
2613
+ return /* @__PURE__ */ jsxRuntime.jsx(
2614
+ "div",
2615
+ {
2616
+ "data-cimplify-subscription-list": true,
2617
+ className: cn("bg-card border border-border rounded-[16px] overflow-hidden", className),
2618
+ children: subscriptions.map((s) => /* @__PURE__ */ jsxRuntime.jsx(
2619
+ SubscriptionRow,
2620
+ {
2621
+ subscription: s,
2622
+ onSelect,
2623
+ iconTile: renderIcon?.(s)
2624
+ },
2625
+ s.id
2626
+ ))
2627
+ }
2628
+ );
2629
+ }
2630
+ function NextDeliveryCard({
2631
+ label,
2632
+ date,
2633
+ meta,
2634
+ actions,
2635
+ footnote,
2636
+ rightFootnote,
2637
+ paused,
2638
+ className
2639
+ }) {
2640
+ return /* @__PURE__ */ jsxRuntime.jsxs(
2641
+ "div",
2642
+ {
2643
+ "data-cimplify-next-delivery": true,
2644
+ "data-paused": paused || void 0,
2645
+ className: cn(
2646
+ "bg-card border border-border rounded-[16px] mb-6 overflow-hidden",
2647
+ className
2648
+ ),
2649
+ children: [
2650
+ /* @__PURE__ */ jsxRuntime.jsxs(
2651
+ "div",
2652
+ {
2653
+ className: cn(
2654
+ "px-8 py-7 grid grid-cols-1 md:grid-cols-[1fr_auto] gap-6 items-center",
2655
+ paused && "opacity-85"
2656
+ ),
2657
+ children: [
2658
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col gap-1.5", children: [
2659
+ /* @__PURE__ */ jsxRuntime.jsxs(
2660
+ "span",
2661
+ {
2662
+ className: cn(
2663
+ "inline-flex items-center gap-2 text-[11.5px] font-semibold tracking-[0.08em] uppercase",
2664
+ paused ? "text-foreground/55" : "text-emerald-600"
2665
+ ),
2666
+ children: [
2667
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "size-1.5 rounded-full bg-current", "aria-hidden": true }),
2668
+ label
2669
+ ]
2670
+ }
2671
+ ),
2672
+ /* @__PURE__ */ jsxRuntime.jsx(
2673
+ "div",
2674
+ {
2675
+ className: cn(
2676
+ "font-serif font-semibold text-[30px] tracking-[-0.025em] leading-[1.05]",
2677
+ paused ? "text-foreground/55" : "text-foreground"
2678
+ ),
2679
+ children: date
2680
+ }
2681
+ ),
2682
+ meta && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-[14px] text-foreground/70 mt-0.5", children: meta })
2683
+ ] }),
2684
+ actions && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex gap-2.5", children: actions })
2685
+ ]
2686
+ }
2687
+ ),
2688
+ (footnote || rightFootnote) && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "px-8 py-3.5 border-t border-dashed border-border bg-muted/30 flex justify-between items-center text-[12px] text-foreground/55", children: [
2689
+ footnote && /* @__PURE__ */ jsxRuntime.jsx("span", { children: footnote }),
2690
+ rightFootnote && /* @__PURE__ */ jsxRuntime.jsx("span", { children: rightFootnote })
2691
+ ] })
2692
+ ]
2693
+ }
2694
+ );
2695
+ }
1758
2696
  var BASE_CLASSES = "inline-flex items-center justify-center gap-2 font-medium text-sm rounded-md transition-colors cursor-pointer disabled:opacity-50 disabled:cursor-not-allowed";
1759
2697
  var VARIANT_CLASSES = {
1760
2698
  primary: "bg-emerald-600 text-white hover:bg-emerald-700 px-4 py-2.5 border border-transparent",
@@ -1772,11 +2710,11 @@ function CimplifySignInButton({
1772
2710
  onError,
1773
2711
  ...signInOpts
1774
2712
  }) {
1775
- const [busy, setBusy] = React11.useState(false);
2713
+ const [busy, setBusy] = React12.useState(false);
1776
2714
  const onClick = async () => {
1777
2715
  if (busy || disabled) return;
1778
2716
  setBusy(true);
1779
- await chunkJYPLT56O_js.startSignIn({
2717
+ await chunkVV3GTDIP_js.startSignIn({
1780
2718
  ...signInOpts,
1781
2719
  onSuccess: () => {
1782
2720
  setBusy(false);
@@ -1806,11 +2744,591 @@ function CimplifySignInButton({
1806
2744
  }
1807
2745
  );
1808
2746
  }
2747
+ function AccountSignedOutPrompt({
2748
+ eyebrow = "Sign in",
2749
+ title = "Sign in to see your account",
2750
+ description = "Your orders and subscriptions, all in one place.",
2751
+ clientId,
2752
+ redirectUri,
2753
+ lastEmail,
2754
+ onSuccess,
2755
+ className
2756
+ }) {
2757
+ return /* @__PURE__ */ jsxRuntime.jsx(
2758
+ "div",
2759
+ {
2760
+ "data-cimplify-signed-out": true,
2761
+ className: cn(
2762
+ "min-h-[480px] px-6 pt-24 pb-32",
2763
+ "bg-[radial-gradient(900px_480px_at_50%_0%,color-mix(in_oklch,var(--color-primary)_8%,transparent),transparent_70%),var(--color-background)]",
2764
+ className
2765
+ ),
2766
+ children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "max-w-[420px] mx-auto p-10 bg-card border border-border rounded-[16px] text-center shadow-[0_1px_0_rgba(0,0,0,0.04),0_16px_48px_rgba(0,0,0,0.08)]", children: [
2767
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-[11px] font-semibold tracking-[0.16em] uppercase text-primary mb-2.5", children: eyebrow }),
2768
+ /* @__PURE__ */ jsxRuntime.jsx("h2", { className: "font-serif text-[28px] font-semibold tracking-[-0.025em] leading-[1.15] m-0 mb-3 text-foreground", children: title }),
2769
+ /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-foreground/70 text-sm leading-[1.55] m-0 mb-7", children: description }),
2770
+ /* @__PURE__ */ jsxRuntime.jsx(
2771
+ CimplifySignInButton,
2772
+ {
2773
+ clientId,
2774
+ redirectUri,
2775
+ fullWidth: true,
2776
+ onSuccess
2777
+ }
2778
+ ),
2779
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "inline-flex items-center gap-1.5 mt-5 text-[11.5px] text-foreground/55", children: [
2780
+ /* @__PURE__ */ jsxRuntime.jsxs("svg", { width: "12", height: "12", viewBox: "0 0 16 16", fill: "none", stroke: "currentColor", strokeWidth: "1.5", children: [
2781
+ /* @__PURE__ */ jsxRuntime.jsx("rect", { x: "3", y: "7", width: "10", height: "7", rx: "1" }),
2782
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M5.5 7V5a2.5 2.5 0 0 1 5 0v2" })
2783
+ ] }),
2784
+ "One identity for every Cimplify shop"
2785
+ ] }),
2786
+ lastEmail && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "text-[12.5px] text-foreground/55 mt-4 pt-4 border-t border-border/60", children: [
2787
+ "Returning? Last signed in as ",
2788
+ /* @__PURE__ */ jsxRuntime.jsx("strong", { className: "text-foreground font-semibold", children: lastEmail })
2789
+ ] })
2790
+ ] })
2791
+ }
2792
+ );
2793
+ }
2794
+ function MobileAccountShell({
2795
+ storeName,
2796
+ leading,
2797
+ trailing,
2798
+ tabBar,
2799
+ children,
2800
+ className
2801
+ }) {
2802
+ return /* @__PURE__ */ jsxRuntime.jsxs(
2803
+ "div",
2804
+ {
2805
+ "data-cimplify-mobile-shell": true,
2806
+ className: cn(
2807
+ "md:hidden flex flex-col min-h-screen bg-background",
2808
+ className
2809
+ ),
2810
+ children: [
2811
+ /* @__PURE__ */ jsxRuntime.jsxs("header", { className: "flex items-center justify-between px-[18px] py-3.5 border-b border-border/60 flex-shrink-0", children: [
2812
+ leading ?? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "w-9" }),
2813
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "font-serif font-semibold text-[17px] tracking-[-0.015em]", children: storeName }),
2814
+ trailing ?? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "w-9" })
2815
+ ] }),
2816
+ /* @__PURE__ */ jsxRuntime.jsx("main", { className: "flex-1 overflow-y-auto px-[18px] py-6", children }),
2817
+ tabBar
2818
+ ]
2819
+ }
2820
+ );
2821
+ }
2822
+ function MobileTabBar({ items, activeHref, className }) {
2823
+ return /* @__PURE__ */ jsxRuntime.jsx(
2824
+ "nav",
2825
+ {
2826
+ "data-cimplify-mobile-tabbar": true,
2827
+ "aria-label": "Account",
2828
+ className: cn("grid grid-cols-3 border-t border-border bg-background flex-shrink-0", className),
2829
+ children: items.map((item) => {
2830
+ const active = item.href === activeHref;
2831
+ return /* @__PURE__ */ jsxRuntime.jsxs(
2832
+ "a",
2833
+ {
2834
+ href: item.href,
2835
+ "aria-current": active ? "page" : void 0,
2836
+ className: cn(
2837
+ "flex flex-col items-center gap-1 py-3 pb-3.5 no-underline text-[10.5px] font-medium",
2838
+ active ? "text-primary" : "text-foreground/55"
2839
+ ),
2840
+ children: [
2841
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "size-5", children: item.icon }),
2842
+ item.label
2843
+ ]
2844
+ },
2845
+ item.href
2846
+ );
2847
+ })
2848
+ }
2849
+ );
2850
+ }
2851
+ function MobileBackButton({ href, label = "Back" }) {
2852
+ return /* @__PURE__ */ jsxRuntime.jsxs(
2853
+ "a",
2854
+ {
2855
+ href,
2856
+ className: "inline-flex items-center gap-1 text-foreground/70 text-[13.5px] font-medium no-underline",
2857
+ children: [
2858
+ /* @__PURE__ */ jsxRuntime.jsx("svg", { width: "12", height: "12", viewBox: "0 0 12 12", fill: "none", stroke: "currentColor", strokeWidth: "1.8", children: /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M7.5 2L3.5 6l4 4" }) }),
2859
+ label
2860
+ ]
2861
+ }
2862
+ );
2863
+ }
2864
+ function MobileMoreButton({ onClick }) {
2865
+ return /* @__PURE__ */ jsxRuntime.jsx(
2866
+ "button",
2867
+ {
2868
+ type: "button",
2869
+ onClick,
2870
+ "aria-label": "Menu",
2871
+ className: "size-9 rounded-[12px] bg-card border border-border grid place-items-center text-foreground/70",
2872
+ children: /* @__PURE__ */ jsxRuntime.jsxs("svg", { width: "16", height: "16", viewBox: "0 0 16 16", fill: "none", stroke: "currentColor", strokeWidth: "1.5", children: [
2873
+ /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: "8", cy: "4", r: "1" }),
2874
+ /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: "8", cy: "8", r: "1" }),
2875
+ /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: "8", cy: "12", r: "1" })
2876
+ ] })
2877
+ }
2878
+ );
2879
+ }
2880
+ var I = (props) => /* @__PURE__ */ jsxRuntime.jsx("svg", { fill: "none", stroke: "currentColor", strokeWidth: "1.5", viewBox: "0 0 16 16", ...props });
2881
+ var I20 = (props) => /* @__PURE__ */ jsxRuntime.jsx("svg", { fill: "none", stroke: "currentColor", strokeWidth: "1.5", viewBox: "0 0 20 20", ...props });
2882
+ var DashboardIcon = () => /* @__PURE__ */ jsxRuntime.jsxs(I, { children: [
2883
+ /* @__PURE__ */ jsxRuntime.jsx("rect", { x: "2", y: "2", width: "5", height: "5", rx: "1" }),
2884
+ /* @__PURE__ */ jsxRuntime.jsx("rect", { x: "9", y: "2", width: "5", height: "5", rx: "1" }),
2885
+ /* @__PURE__ */ jsxRuntime.jsx("rect", { x: "2", y: "9", width: "5", height: "5", rx: "1" }),
2886
+ /* @__PURE__ */ jsxRuntime.jsx("rect", { x: "9", y: "9", width: "5", height: "5", rx: "1" })
2887
+ ] });
2888
+ var OrdersIcon = () => /* @__PURE__ */ jsxRuntime.jsxs(I, { children: [
2889
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M3 4l5-2 5 2v8l-5 2-5-2V4z" }),
2890
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M3 4l5 2 5-2M8 6v8" })
2891
+ ] });
2892
+ var SubscriptionsIcon = () => /* @__PURE__ */ jsxRuntime.jsxs(I, { children: [
2893
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M13 6a5 5 0 1 0-1.5 3.5L13 11" }),
2894
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M13 4v3h-3" })
2895
+ ] });
2896
+ var IdentityIcon = () => /* @__PURE__ */ jsxRuntime.jsxs(I, { children: [
2897
+ /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: "8", cy: "6", r: "2.5" }),
2898
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M3.5 13.5a4.5 4.5 0 0 1 9 0" })
2899
+ ] });
2900
+ var SignOutIcon = () => /* @__PURE__ */ jsxRuntime.jsxs(I, { children: [
2901
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M6.5 3.5h-3v9h3" }),
2902
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M9 5l3 3-3 3" }),
2903
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M12 8H6" })
2904
+ ] });
2905
+ var DashboardIcon20 = () => /* @__PURE__ */ jsxRuntime.jsxs(I20, { children: [
2906
+ /* @__PURE__ */ jsxRuntime.jsx("rect", { x: "3", y: "3", width: "6", height: "6", rx: "1" }),
2907
+ /* @__PURE__ */ jsxRuntime.jsx("rect", { x: "11", y: "3", width: "6", height: "6", rx: "1" }),
2908
+ /* @__PURE__ */ jsxRuntime.jsx("rect", { x: "3", y: "11", width: "6", height: "6", rx: "1" }),
2909
+ /* @__PURE__ */ jsxRuntime.jsx("rect", { x: "11", y: "11", width: "6", height: "6", rx: "1" })
2910
+ ] });
2911
+ var OrdersIcon20 = () => /* @__PURE__ */ jsxRuntime.jsxs(I20, { children: [
2912
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M4 5l6-2 6 2v10l-6 2-6-2V5z" }),
2913
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M4 5l6 2 6-2M10 7v10" })
2914
+ ] });
2915
+ var SubscriptionsIcon20 = () => /* @__PURE__ */ jsxRuntime.jsx(I20, { children: /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M16 8a6 6 0 1 0-1.5 4M16 5v3h-3" }) });
2916
+ var CheckIcon = () => /* @__PURE__ */ jsxRuntime.jsx(I, { children: /* @__PURE__ */ jsxRuntime.jsx("path", { strokeWidth: "2", d: "M3 8l3.5 3.5L13 5" }) });
2917
+ var OvenIcon = () => /* @__PURE__ */ jsxRuntime.jsx(I, { children: /* @__PURE__ */ jsxRuntime.jsx("path", { strokeWidth: "2", d: "M3 11h10M3 8l1.5-4.5h7L13 8M5 11v2M11 11v2" }) });
2918
+ var DeliveryTruckIcon = () => /* @__PURE__ */ jsxRuntime.jsx(I, { children: /* @__PURE__ */ jsxRuntime.jsx("path", { strokeWidth: "2", d: "M2 6h9v6H2zM11 9h2l1 2v1h-3M5 14v-1M11 14v-1" }) });
2919
+ var PackageIcon = () => /* @__PURE__ */ jsxRuntime.jsxs(I, { children: [
2920
+ /* @__PURE__ */ jsxRuntime.jsx("path", { strokeWidth: "2", d: "M3 6l5-3 5 3v6l-5 3-5-3V6z" }),
2921
+ /* @__PURE__ */ jsxRuntime.jsx("path", { strokeWidth: "2", d: "M3 6l5 3 5-3M8 9v6" })
2922
+ ] });
2923
+ var BoxIcon24 = () => /* @__PURE__ */ jsxRuntime.jsxs("svg", { width: "28", height: "28", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "1.5", children: [
2924
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M5 6l7-3 7 3v10l-7 3-7-3V6z" }),
2925
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M5 6l7 3 7-3M12 9v10" })
2926
+ ] });
2927
+ function defaultNavItems(opts) {
2928
+ const items = [
2929
+ { label: "Dashboard", href: "/account", icon: /* @__PURE__ */ jsxRuntime.jsx(DashboardIcon, {}) },
2930
+ { label: opts.ordersLabel ?? "Orders", href: "/account/orders", icon: /* @__PURE__ */ jsxRuntime.jsx(OrdersIcon, {}) }
2931
+ ];
2932
+ if (opts.showSubscriptions !== false) {
2933
+ items.push({
2934
+ label: opts.subscriptionsLabel ?? "Subscriptions",
2935
+ href: "/account/subscriptions",
2936
+ icon: /* @__PURE__ */ jsxRuntime.jsx(SubscriptionsIcon, {})
2937
+ });
2938
+ }
2939
+ items.push({ label: "Cimplify identity", href: "https://link.cimplify.io", icon: /* @__PURE__ */ jsxRuntime.jsx(IdentityIcon, {}), external: true });
2940
+ items.push({ label: "Sign out", href: "/auth/signout", icon: /* @__PURE__ */ jsxRuntime.jsx(SignOutIcon, {}) });
2941
+ return items;
2942
+ }
2943
+ function timeOfDayGreeting(name) {
2944
+ if (typeof window === "undefined") return `Hi, ${name}`;
2945
+ const h = (/* @__PURE__ */ new Date()).getHours();
2946
+ if (h < 5) return `Up late, ${name}`;
2947
+ if (h < 12) return `Good morning, ${name}`;
2948
+ if (h < 17) return `Good afternoon, ${name}`;
2949
+ return `Good evening, ${name}`;
2950
+ }
2951
+ function AccountDashboardPage({
2952
+ customerName,
2953
+ customerEmail,
2954
+ customerId,
2955
+ merchantName,
2956
+ nav,
2957
+ activeHref = "/account",
2958
+ scopeNote,
2959
+ greeting,
2960
+ activePane,
2961
+ upcomingPane,
2962
+ continuity,
2963
+ recentOrders,
2964
+ identitySummary,
2965
+ welcomeCta
2966
+ }) {
2967
+ const navItems = nav ?? defaultNavItems({});
2968
+ const hasHero = !!activePane || !!upcomingPane;
2969
+ const hasOrders = !!recentOrders && recentOrders.length > 0;
2970
+ const isNewCustomer = !hasHero && !hasOrders;
2971
+ return /* @__PURE__ */ jsxRuntime.jsx(
2972
+ AccountShell,
2973
+ {
2974
+ sidebar: /* @__PURE__ */ jsxRuntime.jsxs(
2975
+ AccountSidebar,
2976
+ {
2977
+ scopeNote: scopeNote ?? /* @__PURE__ */ jsxRuntime.jsxs("span", { children: [
2978
+ "Your orders and subscriptions with ",
2979
+ /* @__PURE__ */ jsxRuntime.jsx("strong", { className: "text-foreground font-semibold", children: merchantName }),
2980
+ "."
2981
+ ] }),
2982
+ children: [
2983
+ /* @__PURE__ */ jsxRuntime.jsx(AccountIdentityStrip, { name: customerName, email: customerEmail, customerId }),
2984
+ /* @__PURE__ */ jsxRuntime.jsx(AccountNav, { items: navItems, activeHref })
2985
+ ]
2986
+ }
2987
+ ),
2988
+ children: /* @__PURE__ */ jsxRuntime.jsxs(AccountContent, { children: [
2989
+ /* @__PURE__ */ jsxRuntime.jsx(AccountHero, { title: greeting ?? timeOfDayGreeting(customerName.split(" ")[0] ?? customerName) }),
2990
+ continuity && /* @__PURE__ */ jsxRuntime.jsx(
2991
+ ContinuityCard,
2992
+ {
2993
+ glyph: continuity.glyph,
2994
+ title: continuity.title,
2995
+ description: continuity.description,
2996
+ badge: continuity.badge
2997
+ }
2998
+ ),
2999
+ isNewCustomer ? /* @__PURE__ */ jsxRuntime.jsx(
3000
+ WelcomeCard,
3001
+ {
3002
+ title: `Welcome to ${merchantName}`,
3003
+ description: "Your orders and subscriptions will appear here. Start with something fresh?",
3004
+ action: welcomeCta ?? /* @__PURE__ */ jsxRuntime.jsx(Button, { variant: "primary", children: "Browse" })
3005
+ }
3006
+ ) : hasHero && /* @__PURE__ */ jsxRuntime.jsx(
3007
+ HappeningCard,
3008
+ {
3009
+ left: activePane ? { ...activePane, variant: "live" } : void 0,
3010
+ right: upcomingPane ? { ...upcomingPane, variant: "next" } : void 0
3011
+ }
3012
+ ),
3013
+ hasOrders && /* @__PURE__ */ jsxRuntime.jsx(
3014
+ Section,
3015
+ {
3016
+ title: "Recent orders",
3017
+ action: /* @__PURE__ */ jsxRuntime.jsx(SectionMore, { href: "/account/orders", children: "View all \u2192" }),
3018
+ children: /* @__PURE__ */ jsxRuntime.jsx(OrderList, { orders: recentOrders })
3019
+ }
3020
+ ),
3021
+ /* @__PURE__ */ jsxRuntime.jsx(Section, { title: "Identity", children: /* @__PURE__ */ jsxRuntime.jsx(IdentityOfframp, { summary: identitySummary }) })
3022
+ ] })
3023
+ }
3024
+ );
3025
+ }
3026
+ function AccountOrdersPage({
3027
+ customerName,
3028
+ customerEmail,
3029
+ customerId,
3030
+ merchantName,
3031
+ nav,
3032
+ activeHref = "/account/orders",
3033
+ scopeNote,
3034
+ title = "Orders",
3035
+ description,
3036
+ orders,
3037
+ filterTabs,
3038
+ loadMore,
3039
+ emptyAction,
3040
+ emptyTitle = "No orders yet",
3041
+ emptyDescription
3042
+ }) {
3043
+ const navItems = nav ?? defaultNavItems({});
3044
+ return /* @__PURE__ */ jsxRuntime.jsx(
3045
+ AccountShell,
3046
+ {
3047
+ sidebar: /* @__PURE__ */ jsxRuntime.jsxs(
3048
+ AccountSidebar,
3049
+ {
3050
+ scopeNote: scopeNote ?? /* @__PURE__ */ jsxRuntime.jsxs("span", { children: [
3051
+ "Your activity with ",
3052
+ /* @__PURE__ */ jsxRuntime.jsx("strong", { className: "text-foreground font-semibold", children: merchantName }),
3053
+ "."
3054
+ ] }),
3055
+ children: [
3056
+ /* @__PURE__ */ jsxRuntime.jsx(AccountIdentityStrip, { name: customerName, email: customerEmail, customerId }),
3057
+ /* @__PURE__ */ jsxRuntime.jsx(AccountNav, { items: navItems, activeHref })
3058
+ ]
3059
+ }
3060
+ ),
3061
+ children: /* @__PURE__ */ jsxRuntime.jsxs(AccountContent, { children: [
3062
+ /* @__PURE__ */ jsxRuntime.jsx(
3063
+ AccountHero,
3064
+ {
3065
+ title,
3066
+ subtitle: description ?? /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
3067
+ orders.length,
3068
+ " orders with ",
3069
+ /* @__PURE__ */ jsxRuntime.jsx("strong", { children: merchantName }),
3070
+ "."
3071
+ ] })
3072
+ }
3073
+ ),
3074
+ orders.length > 0 ? /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
3075
+ filterTabs,
3076
+ /* @__PURE__ */ jsxRuntime.jsx(OrderList, { orders }),
3077
+ loadMore && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-center mt-8", children: loadMore })
3078
+ ] }) : /* @__PURE__ */ jsxRuntime.jsx(
3079
+ EmptyState,
3080
+ {
3081
+ glyph: /* @__PURE__ */ jsxRuntime.jsx(BoxIcon24, {}),
3082
+ title: emptyTitle,
3083
+ description: emptyDescription ?? `Your first order from ${merchantName} will show up here.`,
3084
+ action: emptyAction
3085
+ }
3086
+ )
3087
+ ] })
3088
+ }
3089
+ );
3090
+ }
3091
+ function AccountOrderDetailPage({
3092
+ customerName,
3093
+ customerEmail,
3094
+ customerId,
3095
+ merchantName,
3096
+ nav,
3097
+ activeHref = "/account/orders",
3098
+ scopeNote,
3099
+ title,
3100
+ metaText,
3101
+ orderId,
3102
+ status,
3103
+ timelineSteps,
3104
+ itemsTitle = "Items",
3105
+ itemsRightLabel,
3106
+ items,
3107
+ totals,
3108
+ contextRows,
3109
+ primaryAction,
3110
+ secondaryAction,
3111
+ continuity
3112
+ }) {
3113
+ const navItems = nav ?? defaultNavItems({});
3114
+ return /* @__PURE__ */ jsxRuntime.jsx(
3115
+ AccountShell,
3116
+ {
3117
+ sidebar: /* @__PURE__ */ jsxRuntime.jsxs(
3118
+ AccountSidebar,
3119
+ {
3120
+ scopeNote: scopeNote ?? /* @__PURE__ */ jsxRuntime.jsxs("span", { children: [
3121
+ "Your activity with ",
3122
+ /* @__PURE__ */ jsxRuntime.jsx("strong", { className: "text-foreground font-semibold", children: merchantName }),
3123
+ "."
3124
+ ] }),
3125
+ children: [
3126
+ /* @__PURE__ */ jsxRuntime.jsx(AccountIdentityStrip, { name: customerName, email: customerEmail, customerId }),
3127
+ /* @__PURE__ */ jsxRuntime.jsx(AccountNav, { items: navItems, activeHref })
3128
+ ]
3129
+ }
3130
+ ),
3131
+ children: /* @__PURE__ */ jsxRuntime.jsxs(AccountContent, { children: [
3132
+ /* @__PURE__ */ jsxRuntime.jsx("a", { href: "/account/orders", className: "text-foreground/55 text-[13px] no-underline hover:text-primary inline-block mb-7", children: "\u2190 All orders" }),
3133
+ /* @__PURE__ */ jsxRuntime.jsx(
3134
+ OrderDetailHeader,
3135
+ {
3136
+ title,
3137
+ meta: /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
3138
+ /* @__PURE__ */ jsxRuntime.jsx("span", { children: metaText }),
3139
+ /* @__PURE__ */ jsxRuntime.jsx(OrderDetailMetaPipe, {}),
3140
+ /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "font-mono text-[11.5px]", children: [
3141
+ "#",
3142
+ orderId
3143
+ ] }),
3144
+ /* @__PURE__ */ jsxRuntime.jsx(OrderDetailMetaPipe, {}),
3145
+ /* @__PURE__ */ jsxRuntime.jsx(Status, { status })
3146
+ ] })
3147
+ }
3148
+ ),
3149
+ continuity && /* @__PURE__ */ jsxRuntime.jsx(
3150
+ ContinuityCard,
3151
+ {
3152
+ glyph: continuity.glyph,
3153
+ title: continuity.title,
3154
+ description: continuity.description,
3155
+ className: "mt-0 mb-6"
3156
+ }
3157
+ ),
3158
+ /* @__PURE__ */ jsxRuntime.jsx(OrderTimeline, { steps: timelineSteps }),
3159
+ /* @__PURE__ */ jsxRuntime.jsx(ItemsCard, { title: itemsTitle, rightLabel: itemsRightLabel, items, totals, className: "mb-4" }),
3160
+ contextRows && contextRows.length > 0 && /* @__PURE__ */ jsxRuntime.jsx(
3161
+ ContextCard,
3162
+ {
3163
+ rows: contextRows.map((r) => ({
3164
+ label: r.label,
3165
+ value: r.value,
3166
+ manageHref: r.manageHref,
3167
+ manageLabel: "Manage"
3168
+ }))
3169
+ }
3170
+ ),
3171
+ (primaryAction || secondaryAction) && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex gap-3 mt-8", children: [
3172
+ primaryAction,
3173
+ secondaryAction
3174
+ ] })
3175
+ ] })
3176
+ }
3177
+ );
3178
+ }
3179
+ function AccountSubscriptionsPage({
3180
+ customerName,
3181
+ customerEmail,
3182
+ customerId,
3183
+ merchantName,
3184
+ nav,
3185
+ activeHref = "/account/subscriptions",
3186
+ scopeNote,
3187
+ active,
3188
+ paused,
3189
+ past,
3190
+ emptyAction,
3191
+ emptyTitle = "No subscriptions yet",
3192
+ emptyDescription
3193
+ }) {
3194
+ const navItems = nav ?? defaultNavItems({});
3195
+ const isEmpty = (!active || active.length === 0) && (!paused || paused.length === 0) && (!past || past.length === 0);
3196
+ return /* @__PURE__ */ jsxRuntime.jsx(
3197
+ AccountShell,
3198
+ {
3199
+ sidebar: /* @__PURE__ */ jsxRuntime.jsxs(
3200
+ AccountSidebar,
3201
+ {
3202
+ scopeNote: scopeNote ?? /* @__PURE__ */ jsxRuntime.jsxs("span", { children: [
3203
+ "Your activity with ",
3204
+ /* @__PURE__ */ jsxRuntime.jsx("strong", { className: "text-foreground font-semibold", children: merchantName }),
3205
+ "."
3206
+ ] }),
3207
+ children: [
3208
+ /* @__PURE__ */ jsxRuntime.jsx(AccountIdentityStrip, { name: customerName, email: customerEmail, customerId }),
3209
+ /* @__PURE__ */ jsxRuntime.jsx(AccountNav, { items: navItems, activeHref })
3210
+ ]
3211
+ }
3212
+ ),
3213
+ children: /* @__PURE__ */ jsxRuntime.jsxs(AccountContent, { children: [
3214
+ /* @__PURE__ */ jsxRuntime.jsx(
3215
+ AccountHero,
3216
+ {
3217
+ title: "Subscriptions",
3218
+ subtitle: /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
3219
+ "Recurring orders from ",
3220
+ /* @__PURE__ */ jsxRuntime.jsx("strong", { children: merchantName }),
3221
+ "."
3222
+ ] })
3223
+ }
3224
+ ),
3225
+ isEmpty ? /* @__PURE__ */ jsxRuntime.jsx(
3226
+ EmptyState,
3227
+ {
3228
+ title: emptyTitle,
3229
+ description: emptyDescription ?? `Set up a recurring delivery from ${merchantName} and it'll show up here.`,
3230
+ action: emptyAction
3231
+ }
3232
+ ) : /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
3233
+ active && active.length > 0 && /* @__PURE__ */ jsxRuntime.jsx(Section, { title: "Active", meta: `${active.length}`, children: /* @__PURE__ */ jsxRuntime.jsx(SubscriptionList, { subscriptions: active }) }),
3234
+ paused && paused.length > 0 && /* @__PURE__ */ jsxRuntime.jsx(Section, { title: "Paused", meta: `${paused.length}`, children: /* @__PURE__ */ jsxRuntime.jsx(SubscriptionList, { subscriptions: paused }) }),
3235
+ past && past.length > 0 && /* @__PURE__ */ jsxRuntime.jsx(Section, { title: "Past", meta: `${past.length}`, children: /* @__PURE__ */ jsxRuntime.jsx(SubscriptionList, { subscriptions: past }) })
3236
+ ] })
3237
+ ] })
3238
+ }
3239
+ );
3240
+ }
3241
+ function AccountSubscriptionDetailPage({
3242
+ customerName,
3243
+ customerEmail,
3244
+ customerId,
3245
+ merchantName,
3246
+ nav,
3247
+ activeHref = "/account/subscriptions",
3248
+ scopeNote,
3249
+ title,
3250
+ metaText,
3251
+ status,
3252
+ paused,
3253
+ nextDeliveryLabel,
3254
+ nextDeliveryDate,
3255
+ nextDeliveryMeta,
3256
+ nextDeliveryActions,
3257
+ nextDeliveryFootnote,
3258
+ nextDeliveryRightFootnote,
3259
+ itemsTitle = "What's in each delivery",
3260
+ items,
3261
+ totals,
3262
+ contextRows,
3263
+ toast,
3264
+ cancelAction
3265
+ }) {
3266
+ const navItems = nav ?? defaultNavItems({});
3267
+ return /* @__PURE__ */ jsxRuntime.jsx(
3268
+ AccountShell,
3269
+ {
3270
+ sidebar: /* @__PURE__ */ jsxRuntime.jsxs(
3271
+ AccountSidebar,
3272
+ {
3273
+ scopeNote: scopeNote ?? /* @__PURE__ */ jsxRuntime.jsxs("span", { children: [
3274
+ "Your activity with ",
3275
+ /* @__PURE__ */ jsxRuntime.jsx("strong", { className: "text-foreground font-semibold", children: merchantName }),
3276
+ "."
3277
+ ] }),
3278
+ children: [
3279
+ /* @__PURE__ */ jsxRuntime.jsx(AccountIdentityStrip, { name: customerName, email: customerEmail, customerId }),
3280
+ /* @__PURE__ */ jsxRuntime.jsx(AccountNav, { items: navItems, activeHref })
3281
+ ]
3282
+ }
3283
+ ),
3284
+ children: /* @__PURE__ */ jsxRuntime.jsxs(AccountContent, { children: [
3285
+ /* @__PURE__ */ jsxRuntime.jsx("a", { href: "/account/subscriptions", className: "text-foreground/55 text-[13px] no-underline hover:text-primary inline-block mb-7", children: "\u2190 All subscriptions" }),
3286
+ /* @__PURE__ */ jsxRuntime.jsx(
3287
+ OrderDetailHeader,
3288
+ {
3289
+ title,
3290
+ meta: /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
3291
+ /* @__PURE__ */ jsxRuntime.jsx("span", { children: metaText }),
3292
+ /* @__PURE__ */ jsxRuntime.jsx(OrderDetailMetaPipe, {}),
3293
+ /* @__PURE__ */ jsxRuntime.jsx(Status, { status })
3294
+ ] })
3295
+ }
3296
+ ),
3297
+ toast,
3298
+ /* @__PURE__ */ jsxRuntime.jsx(
3299
+ NextDeliveryCard,
3300
+ {
3301
+ label: nextDeliveryLabel,
3302
+ date: nextDeliveryDate,
3303
+ meta: nextDeliveryMeta,
3304
+ actions: nextDeliveryActions,
3305
+ footnote: nextDeliveryFootnote,
3306
+ rightFootnote: nextDeliveryRightFootnote,
3307
+ paused
3308
+ }
3309
+ ),
3310
+ /* @__PURE__ */ jsxRuntime.jsx(ItemsCard, { title: itemsTitle, items, totals, className: "mb-4" }),
3311
+ contextRows && contextRows.length > 0 && /* @__PURE__ */ jsxRuntime.jsx(
3312
+ ContextCard,
3313
+ {
3314
+ rows: contextRows.map((r) => ({
3315
+ label: r.label,
3316
+ value: r.value,
3317
+ manageHref: r.manageHref,
3318
+ manageLabel: "Manage"
3319
+ }))
3320
+ }
3321
+ ),
3322
+ cancelAction && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mt-9 pt-7 border-t border-border", children: cancelAction })
3323
+ ] })
3324
+ }
3325
+ );
3326
+ }
1809
3327
  function useCimplifySession(options) {
1810
3328
  const sessionUri = options?.sessionUri ?? "/auth/session";
1811
- const [session, setSession] = React11.useState(null);
1812
- const [loading, setLoading] = React11.useState(true);
1813
- const fetchSession = React11.useCallback(async () => {
3329
+ const [session, setSession] = React12.useState(null);
3330
+ const [loading, setLoading] = React12.useState(true);
3331
+ const fetchSession = React12.useCallback(async () => {
1814
3332
  setLoading(true);
1815
3333
  try {
1816
3334
  const res = await fetch(sessionUri, { credentials: "include" });
@@ -1826,7 +3344,7 @@ function useCimplifySession(options) {
1826
3344
  setLoading(false);
1827
3345
  }
1828
3346
  }, [sessionUri]);
1829
- React11.useEffect(() => {
3347
+ React12.useEffect(() => {
1830
3348
  void fetchSession();
1831
3349
  }, [fetchSession]);
1832
3350
  return { session, loading, refresh: fetchSession };
@@ -1865,9 +3383,9 @@ function createCachedQuery(config) {
1865
3383
  }
1866
3384
  const enabled = options.enabled ?? true;
1867
3385
  const locationId = client.getLocationId();
1868
- const previousLocationRef = React11.useRef(locationId);
1869
- const requestIdRef = React11.useRef(0);
1870
- const optionsRef = React11.useRef(options);
3386
+ const previousLocationRef = React12.useRef(locationId);
3387
+ const requestIdRef = React12.useRef(0);
3388
+ const optionsRef = React12.useRef(options);
1871
3389
  optionsRef.current = options;
1872
3390
  if (config.locationSensitive && previousLocationRef.current !== locationId) {
1873
3391
  cache.clear();
@@ -1877,10 +3395,10 @@ function createCachedQuery(config) {
1877
3395
  sweep();
1878
3396
  const cacheKey2 = config.key(client, options);
1879
3397
  const cached = cache.get(cacheKey2);
1880
- const [data, setData] = React11.useState(cached?.data ?? null);
1881
- const [isLoading, setIsLoading] = React11.useState(enabled && !cached);
1882
- const [error, setError] = React11.useState(null);
1883
- const load = React11.useCallback(
3398
+ const [data, setData] = React12.useState(cached?.data ?? null);
3399
+ const [isLoading, setIsLoading] = React12.useState(enabled && !cached);
3400
+ const [error, setError] = React12.useState(null);
3401
+ const load = React12.useCallback(
1884
3402
  async (force = false) => {
1885
3403
  if (!enabled) {
1886
3404
  setIsLoading(false);
@@ -1923,10 +3441,10 @@ function createCachedQuery(config) {
1923
3441
  },
1924
3442
  [cacheKey2, client, enabled]
1925
3443
  );
1926
- React11.useEffect(() => {
3444
+ React12.useEffect(() => {
1927
3445
  void load(false);
1928
3446
  }, [load]);
1929
- const refetch = React11.useCallback(async () => {
3447
+ const refetch = React12.useCallback(async () => {
1930
3448
  cache.delete(cacheKey2);
1931
3449
  await load(true);
1932
3450
  }, [cacheKey2, load]);
@@ -2056,25 +3574,25 @@ function useOrder(orderId, options = {}) {
2056
3574
  if (!client) {
2057
3575
  throw new Error("useOrder must be used within CimplifyProvider or passed { client }.");
2058
3576
  }
2059
- const normalizedOrderId = React11.useMemo(() => (orderId || "").trim(), [orderId]);
3577
+ const normalizedOrderId = React12.useMemo(() => (orderId || "").trim(), [orderId]);
2060
3578
  const enabled = options.enabled ?? true;
2061
3579
  const poll = options.poll ?? false;
2062
3580
  const pollInterval = options.pollInterval ?? 5e3;
2063
- const requestIdRef = React11.useRef(0);
2064
- const previousStatusRef = React11.useRef(null);
2065
- const onStatusChangeRef = React11.useRef(options.onStatusChange);
3581
+ const requestIdRef = React12.useRef(0);
3582
+ const previousStatusRef = React12.useRef(null);
3583
+ const onStatusChangeRef = React12.useRef(options.onStatusChange);
2066
3584
  onStatusChangeRef.current = options.onStatusChange;
2067
- const cacheKey2 = React11.useMemo(
3585
+ const cacheKey2 = React12.useMemo(
2068
3586
  () => buildOrderCacheKey(client, normalizedOrderId),
2069
3587
  [client, normalizedOrderId]
2070
3588
  );
2071
3589
  const cached = orderCache.get(cacheKey2);
2072
- const [order, setOrder] = React11.useState(cached?.order ?? null);
2073
- const [isLoading, setIsLoading] = React11.useState(
3590
+ const [order, setOrder] = React12.useState(cached?.order ?? null);
3591
+ const [isLoading, setIsLoading] = React12.useState(
2074
3592
  enabled && normalizedOrderId.length > 0 && !cached
2075
3593
  );
2076
- const [error, setError] = React11.useState(null);
2077
- const load = React11.useCallback(
3594
+ const [error, setError] = React12.useState(null);
3595
+ const load = React12.useCallback(
2078
3596
  async (force = false) => {
2079
3597
  if (!enabled || normalizedOrderId.length === 0) {
2080
3598
  setOrder(null);
@@ -2133,11 +3651,11 @@ function useOrder(orderId, options = {}) {
2133
3651
  },
2134
3652
  [cacheKey2, client, enabled, normalizedOrderId]
2135
3653
  );
2136
- React11.useEffect(() => {
3654
+ React12.useEffect(() => {
2137
3655
  void load(false);
2138
3656
  }, [load]);
2139
3657
  const isTerminal = order ? TERMINAL_STATUSES.has(order.status) : false;
2140
- React11.useEffect(() => {
3658
+ React12.useEffect(() => {
2141
3659
  if (!poll || !enabled || normalizedOrderId.length === 0 || isTerminal) {
2142
3660
  return;
2143
3661
  }
@@ -2148,7 +3666,7 @@ function useOrder(orderId, options = {}) {
2148
3666
  window.clearInterval(timer);
2149
3667
  };
2150
3668
  }, [enabled, isTerminal, load, normalizedOrderId, poll, pollInterval]);
2151
- const refetch = React11.useCallback(async () => {
3669
+ const refetch = React12.useCallback(async () => {
2152
3670
  orderCache.delete(cacheKey2);
2153
3671
  await load(true);
2154
3672
  }, [cacheKey2, load]);
@@ -2199,10 +3717,10 @@ function useLocations(options = {}) {
2199
3717
  };
2200
3718
  }
2201
3719
  const client = options.client;
2202
- const [locations, setLocations] = React11.useState([]);
2203
- const [currentLocation, setCurrentLocationState] = React11.useState(null);
2204
- const [isLoading, setIsLoading] = React11.useState(true);
2205
- const setCurrentLocation = React11.useCallback(
3720
+ const [locations, setLocations] = React12.useState([]);
3721
+ const [currentLocation, setCurrentLocationState] = React12.useState(null);
3722
+ const [isLoading, setIsLoading] = React12.useState(true);
3723
+ const setCurrentLocation = React12.useCallback(
2206
3724
  (location) => {
2207
3725
  setCurrentLocationState(location);
2208
3726
  if (client) {
@@ -2212,7 +3730,7 @@ function useLocations(options = {}) {
2212
3730
  },
2213
3731
  [client]
2214
3732
  );
2215
- React11.useEffect(() => {
3733
+ React12.useEffect(() => {
2216
3734
  if (!client) {
2217
3735
  setLocations([]);
2218
3736
  setCurrentLocationState(null);
@@ -2316,14 +3834,14 @@ function useSearch(options = {}) {
2316
3834
  const minLength = Math.max(0, options.minLength ?? 2);
2317
3835
  const debounceMs = Math.max(0, options.debounceMs ?? 300);
2318
3836
  const limit = Math.max(1, options.limit ?? 20);
2319
- const [query, setQueryState] = React11.useState("");
2320
- const [results, setResults] = React11.useState([]);
2321
- const [isLoading, setIsLoading] = React11.useState(false);
2322
- const [error, setError] = React11.useState(null);
2323
- const requestIdRef = React11.useRef(0);
2324
- const timerRef = React11.useRef(null);
3837
+ const [query, setQueryState] = React12.useState("");
3838
+ const [results, setResults] = React12.useState([]);
3839
+ const [isLoading, setIsLoading] = React12.useState(false);
3840
+ const [error, setError] = React12.useState(null);
3841
+ const requestIdRef = React12.useRef(0);
3842
+ const timerRef = React12.useRef(null);
2325
3843
  const tagsSignature = options.tags?.join(",") ?? "";
2326
- React11.useEffect(() => {
3844
+ React12.useEffect(() => {
2327
3845
  if (timerRef.current) {
2328
3846
  clearTimeout(timerRef.current);
2329
3847
  timerRef.current = null;
@@ -2378,10 +3896,10 @@ function useSearch(options = {}) {
2378
3896
  }
2379
3897
  };
2380
3898
  }, [client, debounceMs, limit, minLength, options.category, options.taxonomy, tagsSignature, options.featured, options.in_stock, options.min_price, options.max_price, options.sort_by, options.sort_order, query]);
2381
- const setQuery = React11.useCallback((nextQuery) => {
3899
+ const setQuery = React12.useCallback((nextQuery) => {
2382
3900
  setQueryState(nextQuery);
2383
3901
  }, []);
2384
- const clear = React11.useCallback(() => {
3902
+ const clear = React12.useCallback(() => {
2385
3903
  requestIdRef.current += 1;
2386
3904
  if (timerRef.current) {
2387
3905
  clearTimeout(timerRef.current);
@@ -2472,34 +3990,34 @@ function useQuote(input, options = {}) {
2472
3990
  const autoRefresh = options.autoRefresh ?? true;
2473
3991
  const refreshBeforeExpiryMs = Math.max(0, options.refreshBeforeExpiryMs ?? 3e4);
2474
3992
  const locationId = client.getLocationId();
2475
- const requestIdRef = React11.useRef(0);
2476
- const debounceTimerRef = React11.useRef(null);
3993
+ const requestIdRef = React12.useRef(0);
3994
+ const debounceTimerRef = React12.useRef(null);
2477
3995
  const inputSignature = buildQuoteInputSignature(input);
2478
- const normalizedInput = React11.useMemo(() => {
3996
+ const normalizedInput = React12.useMemo(() => {
2479
3997
  if (!input) {
2480
3998
  return null;
2481
3999
  }
2482
4000
  const normalized = normalizeInput(input, locationId);
2483
4001
  return normalized.product_id.length > 0 ? normalized : null;
2484
4002
  }, [inputSignature, locationId]);
2485
- const cacheKey2 = React11.useMemo(
4003
+ const cacheKey2 = React12.useMemo(
2486
4004
  () => buildQuoteCacheKey(client, locationId, inputSignature),
2487
4005
  [client, inputSignature, locationId]
2488
4006
  );
2489
4007
  const cached = quoteCache.get(cacheKey2);
2490
- const [quote, setQuote] = React11.useState(cached?.quote ?? null);
2491
- const [isLoading, setIsLoading] = React11.useState(enabled && normalizedInput !== null && !cached);
2492
- const [error, setError] = React11.useState(null);
2493
- const [isExpired, setIsExpired] = React11.useState(isQuoteExpired(cached?.quote ?? null));
2494
- const [messages, setMessages] = React11.useState(cached?.quote?.ui_messages ?? []);
2495
- const quoteExpiryTimestamp = React11.useMemo(() => {
4008
+ const [quote, setQuote] = React12.useState(cached?.quote ?? null);
4009
+ const [isLoading, setIsLoading] = React12.useState(enabled && normalizedInput !== null && !cached);
4010
+ const [error, setError] = React12.useState(null);
4011
+ const [isExpired, setIsExpired] = React12.useState(isQuoteExpired(cached?.quote ?? null));
4012
+ const [messages, setMessages] = React12.useState(cached?.quote?.ui_messages ?? []);
4013
+ const quoteExpiryTimestamp = React12.useMemo(() => {
2496
4014
  if (!quote?.expires_at) {
2497
4015
  return Number.NaN;
2498
4016
  }
2499
4017
  const expiresAt = Date.parse(quote.expires_at);
2500
4018
  return Number.isFinite(expiresAt) ? expiresAt : Number.NaN;
2501
4019
  }, [quote?.expires_at]);
2502
- const load = React11.useCallback(
4020
+ const load = React12.useCallback(
2503
4021
  async (force = false) => {
2504
4022
  if (!enabled || !normalizedInput) {
2505
4023
  setQuote(null);
@@ -2559,7 +4077,7 @@ function useQuote(input, options = {}) {
2559
4077
  },
2560
4078
  [cacheKey2, client, enabled, normalizedInput]
2561
4079
  );
2562
- React11.useEffect(() => {
4080
+ React12.useEffect(() => {
2563
4081
  if (debounceTimerRef.current) {
2564
4082
  clearTimeout(debounceTimerRef.current);
2565
4083
  }
@@ -2578,7 +4096,7 @@ function useQuote(input, options = {}) {
2578
4096
  }
2579
4097
  };
2580
4098
  }, [load, cacheKey2, enabled, normalizedInput]);
2581
- const refresh = React11.useCallback(async () => {
4099
+ const refresh = React12.useCallback(async () => {
2582
4100
  if (!enabled || !normalizedInput) {
2583
4101
  return;
2584
4102
  }
@@ -2615,7 +4133,7 @@ function useQuote(input, options = {}) {
2615
4133
  }
2616
4134
  }
2617
4135
  }, [cacheKey2, client, enabled, load, normalizedInput, quote]);
2618
- React11.useEffect(() => {
4136
+ React12.useEffect(() => {
2619
4137
  if (!Number.isFinite(quoteExpiryTimestamp)) {
2620
4138
  setIsExpired(false);
2621
4139
  return;
@@ -2791,9 +4309,9 @@ function useValidateDiscount(options = {}) {
2791
4309
  if (!client) {
2792
4310
  throw new Error("useValidateDiscount must be used within CimplifyProvider or passed { client }.");
2793
4311
  }
2794
- const [isValidating, setIsValidating] = React11.useState(false);
2795
- const [error, setError] = React11.useState(null);
2796
- const validate = React11.useCallback(
4312
+ const [isValidating, setIsValidating] = React12.useState(false);
4313
+ const [error, setError] = React12.useState(null);
4314
+ const validate = React12.useCallback(
2797
4315
  async (code, orderSubtotal, locationId) => {
2798
4316
  setError(null);
2799
4317
  setIsValidating(true);
@@ -2840,7 +4358,7 @@ function useProductPrice(input) {
2840
4358
  compositePrice,
2841
4359
  bundleTotalPrice
2842
4360
  } = input;
2843
- return React11.useMemo(() => {
4361
+ return React12.useMemo(() => {
2844
4362
  let unitPrice;
2845
4363
  if (bundleTotalPrice != null) {
2846
4364
  unitPrice = bundleTotalPrice;
@@ -2889,10 +4407,10 @@ function useOrders(options = {}) {
2889
4407
  function useSubscriptions(options = {}) {
2890
4408
  const { client } = useCimplifyClient();
2891
4409
  const { status, enabled = true } = options;
2892
- const [subscriptions, setSubscriptions] = React11.useState([]);
2893
- const [isLoading, setIsLoading] = React11.useState(false);
2894
- const [error, setError] = React11.useState(null);
2895
- const fetch2 = React11.useCallback(async () => {
4410
+ const [subscriptions, setSubscriptions] = React12.useState([]);
4411
+ const [isLoading, setIsLoading] = React12.useState(false);
4412
+ const [error, setError] = React12.useState(null);
4413
+ const fetch2 = React12.useCallback(async () => {
2896
4414
  if (!enabled) return;
2897
4415
  setIsLoading(true);
2898
4416
  setError(null);
@@ -2910,7 +4428,7 @@ function useSubscriptions(options = {}) {
2910
4428
  setIsLoading(false);
2911
4429
  }
2912
4430
  }, [client, enabled, status]);
2913
- React11.useEffect(() => {
4431
+ React12.useEffect(() => {
2914
4432
  void fetch2();
2915
4433
  }, [fetch2]);
2916
4434
  return { subscriptions, isLoading, error, refetch: fetch2 };
@@ -2919,10 +4437,10 @@ function useSubscription(id, options = {}) {
2919
4437
  const { client } = useCimplifyClient();
2920
4438
  const { enabled = true } = options;
2921
4439
  const normalizedId = (id || "").trim();
2922
- const [subscription, setSubscription] = React11.useState(null);
2923
- const [isLoading, setIsLoading] = React11.useState(false);
2924
- const [error, setError] = React11.useState(null);
2925
- const fetch2 = React11.useCallback(async () => {
4440
+ const [subscription, setSubscription] = React12.useState(null);
4441
+ const [isLoading, setIsLoading] = React12.useState(false);
4442
+ const [error, setError] = React12.useState(null);
4443
+ const fetch2 = React12.useCallback(async () => {
2926
4444
  if (!enabled || !normalizedId) return;
2927
4445
  setIsLoading(true);
2928
4446
  setError(null);
@@ -2939,25 +4457,25 @@ function useSubscription(id, options = {}) {
2939
4457
  setIsLoading(false);
2940
4458
  }
2941
4459
  }, [client, enabled, normalizedId]);
2942
- React11.useEffect(() => {
4460
+ React12.useEffect(() => {
2943
4461
  void fetch2();
2944
4462
  }, [fetch2]);
2945
- const cancel = React11.useCallback(async (reason) => {
4463
+ const cancel = React12.useCallback(async (reason) => {
2946
4464
  if (!normalizedId) return;
2947
4465
  await client.subscriptions.cancel(normalizedId, reason);
2948
4466
  void fetch2();
2949
4467
  }, [client, normalizedId, fetch2]);
2950
- const pause = React11.useCallback(async () => {
4468
+ const pause = React12.useCallback(async () => {
2951
4469
  if (!normalizedId) return;
2952
4470
  await client.subscriptions.pause(normalizedId);
2953
4471
  void fetch2();
2954
4472
  }, [client, normalizedId, fetch2]);
2955
- const resume = React11.useCallback(async () => {
4473
+ const resume = React12.useCallback(async () => {
2956
4474
  if (!normalizedId) return;
2957
4475
  await client.subscriptions.resume(normalizedId);
2958
4476
  void fetch2();
2959
4477
  }, [client, normalizedId, fetch2]);
2960
- const skipNext = React11.useCallback(async () => {
4478
+ const skipNext = React12.useCallback(async () => {
2961
4479
  if (!normalizedId) return;
2962
4480
  await client.subscriptions.skipNextRenewal(normalizedId);
2963
4481
  void fetch2();
@@ -3061,7 +4579,7 @@ function useBookings(options = {}) {
3061
4579
  const context = useOptionalCimplifyClient();
3062
4580
  const client = options.client ?? context?.client;
3063
4581
  const { data, isLoading, error, refetch } = bookingsQuery(options);
3064
- const cancelBooking = React11.useCallback(
4582
+ const cancelBooking = React12.useCallback(
3065
4583
  async (bookingId, reason) => {
3066
4584
  if (!client) throw new Error("useBookings must be used within CimplifyProvider or passed { client }.");
3067
4585
  const result = await client.scheduling.cancelBooking({
@@ -3117,14 +4635,14 @@ function useBillingPlans(productId, options = {}) {
3117
4635
  throw new Error("useBillingPlans must be used within CimplifyProvider or passed { client }.");
3118
4636
  }
3119
4637
  const enabled = options.enabled ?? true;
3120
- const requestIdRef = React11.useRef(0);
3121
- const [plans, setPlans] = React11.useState([]);
3122
- const [isLoading, setIsLoading] = React11.useState(enabled && !!productId);
3123
- const [error, setError] = React11.useState(null);
4638
+ const requestIdRef = React12.useRef(0);
4639
+ const [plans, setPlans] = React12.useState([]);
4640
+ const [isLoading, setIsLoading] = React12.useState(enabled && !!productId);
4641
+ const [error, setError] = React12.useState(null);
3124
4642
  const customerId = options.customerId;
3125
4643
  const quantity = options.quantity;
3126
4644
  const orderValue = options.orderValue;
3127
- const load = React11.useCallback(
4645
+ const load = React12.useCallback(
3128
4646
  async (force = false) => {
3129
4647
  if (!enabled || !productId) {
3130
4648
  setPlans([]);
@@ -3159,17 +4677,17 @@ function useBillingPlans(productId, options = {}) {
3159
4677
  },
3160
4678
  [client, enabled, productId, customerId, quantity, orderValue]
3161
4679
  );
3162
- React11.useEffect(() => {
4680
+ React12.useEffect(() => {
3163
4681
  void load(false);
3164
4682
  }, [load]);
3165
- const refetch = React11.useCallback(async () => {
4683
+ const refetch = React12.useCallback(async () => {
3166
4684
  await load(true);
3167
4685
  }, [load]);
3168
- const subscriptionPlans = React11.useMemo(
4686
+ const subscriptionPlans = React12.useMemo(
3169
4687
  () => plans.filter((p) => p.plan_type === "subscription"),
3170
4688
  [plans]
3171
4689
  );
3172
- const installmentPlans = React11.useMemo(
4690
+ const installmentPlans = React12.useMemo(
3173
4691
  () => plans.filter((p) => p.plan_type === "installment"),
3174
4692
  [plans]
3175
4693
  );
@@ -3204,8 +4722,8 @@ function computeAvailableValues(variants, axes, selections) {
3204
4722
  }
3205
4723
  function useVariantSelector(options) {
3206
4724
  const { variants, axes } = options;
3207
- const [selectedValues, setSelectedValues] = React11.useState({});
3208
- const selectValue = React11.useCallback(
4725
+ const [selectedValues, setSelectedValues] = React12.useState({});
4726
+ const selectValue = React12.useCallback(
3209
4727
  (axisId, valueId) => {
3210
4728
  setSelectedValues((prev) => {
3211
4729
  if (prev[axisId] === valueId) {
@@ -3218,16 +4736,16 @@ function useVariantSelector(options) {
3218
4736
  },
3219
4737
  []
3220
4738
  );
3221
- const reset = React11.useCallback(() => setSelectedValues({}), []);
3222
- const selectedVariant = React11.useMemo(
4739
+ const reset = React12.useCallback(() => setSelectedValues({}), []);
4740
+ const selectedVariant = React12.useMemo(
3223
4741
  () => findMatchingVariant(variants, selectedValues),
3224
4742
  [variants, selectedValues]
3225
4743
  );
3226
- const variantImage = React11.useMemo(
4744
+ const variantImage = React12.useMemo(
3227
4745
  () => selectedVariant?.images?.[0] ?? null,
3228
4746
  [selectedVariant]
3229
4747
  );
3230
- const availableValues = React11.useMemo(
4748
+ const availableValues = React12.useMemo(
3231
4749
  () => computeAvailableValues(variants, axes, selectedValues),
3232
4750
  [variants, axes, selectedValues]
3233
4751
  );
@@ -3253,7 +4771,7 @@ function useActivityState(options = {}) {
3253
4771
  const context = useOptionalCimplifyClient();
3254
4772
  const client = options.client ?? context?.client;
3255
4773
  const { data, isLoading, error, refetch } = activityStateQuery(options);
3256
- const dismissMessage = React11.useCallback(
4774
+ const dismissMessage = React12.useCallback(
3257
4775
  async (code) => {
3258
4776
  if (!client) return;
3259
4777
  const result = await client.activity.dismissMessage(code);
@@ -3355,31 +4873,31 @@ var WS_PATH = "/api/v1/support/conversation/ws";
3355
4873
  function useChat(options = {}) {
3356
4874
  const context = useOptionalCimplifyClient();
3357
4875
  const client = options.client ?? context?.client;
3358
- const [messages, setMessages] = React11.useState([]);
3359
- const [isLoading, setIsLoading] = React11.useState(false);
3360
- const [isSending, setIsSending] = React11.useState(false);
3361
- const [error, setError] = React11.useState(null);
3362
- const [conversationOpened, setConversationOpened] = React11.useState(false);
3363
- const pollRef = React11.useRef(null);
3364
- const lastActivityRef = React11.useRef(Date.now());
3365
- const openedRef = React11.useRef(false);
3366
- const messagesRef = React11.useRef([]);
3367
- const clientRef = React11.useRef(client);
3368
- const wsRef = React11.useRef(null);
3369
- const wsReconnectAttemptRef = React11.useRef(0);
3370
- const wsReconnectTimerRef = React11.useRef(null);
4876
+ const [messages, setMessages] = React12.useState([]);
4877
+ const [isLoading, setIsLoading] = React12.useState(false);
4878
+ const [isSending, setIsSending] = React12.useState(false);
4879
+ const [error, setError] = React12.useState(null);
4880
+ const [conversationOpened, setConversationOpened] = React12.useState(false);
4881
+ const pollRef = React12.useRef(null);
4882
+ const lastActivityRef = React12.useRef(Date.now());
4883
+ const openedRef = React12.useRef(false);
4884
+ const messagesRef = React12.useRef([]);
4885
+ const clientRef = React12.useRef(client);
4886
+ const wsRef = React12.useRef(null);
4887
+ const wsReconnectAttemptRef = React12.useRef(0);
4888
+ const wsReconnectTimerRef = React12.useRef(null);
3371
4889
  messagesRef.current = messages;
3372
4890
  clientRef.current = client;
3373
4891
  const pollInterval = options.pollInterval ?? POLL_INTERVAL_MS;
3374
4892
  const pollIdleInterval = options.pollIdleInterval ?? POLL_IDLE_INTERVAL_MS;
3375
- const appendMessages = React11.useCallback((incoming) => {
4893
+ const appendMessages = React12.useCallback((incoming) => {
3376
4894
  setMessages((prev) => {
3377
4895
  const ids = new Set(prev.map((m) => m.id));
3378
4896
  const fresh = incoming.filter((m) => !ids.has(m.id));
3379
4897
  return fresh.length > 0 ? [...prev, ...fresh] : prev;
3380
4898
  });
3381
4899
  }, []);
3382
- const pollMessages = React11.useCallback(async () => {
4900
+ const pollMessages = React12.useCallback(async () => {
3383
4901
  const c = clientRef.current;
3384
4902
  if (!c) return;
3385
4903
  if (Date.now() - lastActivityRef.current > IDLE_TIMEOUT_MS) return;
@@ -3392,18 +4910,18 @@ function useChat(options = {}) {
3392
4910
  appendMessages(result.value);
3393
4911
  }
3394
4912
  }, [appendMessages]);
3395
- const startPolling = React11.useCallback(() => {
4913
+ const startPolling = React12.useCallback(() => {
3396
4914
  if (pollRef.current) clearInterval(pollRef.current);
3397
4915
  const interval = Date.now() - lastActivityRef.current > IDLE_TIMEOUT_MS ? pollIdleInterval : pollInterval;
3398
4916
  pollRef.current = setInterval(pollMessages, interval);
3399
4917
  }, [pollMessages, pollInterval, pollIdleInterval]);
3400
- const stopPolling = React11.useCallback(() => {
4918
+ const stopPolling = React12.useCallback(() => {
3401
4919
  if (pollRef.current) {
3402
4920
  clearInterval(pollRef.current);
3403
4921
  pollRef.current = null;
3404
4922
  }
3405
4923
  }, []);
3406
- const connectWebSocket = React11.useCallback(() => {
4924
+ const connectWebSocket = React12.useCallback(() => {
3407
4925
  const c = clientRef.current;
3408
4926
  if (!c || typeof WebSocket === "undefined") {
3409
4927
  startPolling();
@@ -3444,7 +4962,7 @@ function useChat(options = {}) {
3444
4962
  };
3445
4963
  wsRef.current = ws;
3446
4964
  }, [appendMessages, startPolling, stopPolling, pollMessages]);
3447
- React11.useEffect(() => {
4965
+ React12.useEffect(() => {
3448
4966
  return () => {
3449
4967
  if (pollRef.current) clearInterval(pollRef.current);
3450
4968
  if (wsReconnectTimerRef.current) clearTimeout(wsReconnectTimerRef.current);
@@ -3454,7 +4972,7 @@ function useChat(options = {}) {
3454
4972
  }
3455
4973
  };
3456
4974
  }, []);
3457
- const openConversation = React11.useCallback(async () => {
4975
+ const openConversation = React12.useCallback(async () => {
3458
4976
  if (openedRef.current || !client) return;
3459
4977
  openedRef.current = true;
3460
4978
  setIsLoading(true);
@@ -3470,7 +4988,7 @@ function useChat(options = {}) {
3470
4988
  }
3471
4989
  setIsLoading(false);
3472
4990
  }, [client, connectWebSocket]);
3473
- const send = React11.useCallback(
4991
+ const send = React12.useCallback(
3474
4992
  async (content) => {
3475
4993
  if (!client || !content.trim()) return;
3476
4994
  setError(null);
@@ -3504,7 +5022,7 @@ function useChat(options = {}) {
3504
5022
  },
3505
5023
  [client, openConversation]
3506
5024
  );
3507
- const startConversation = React11.useCallback(
5025
+ const startConversation = React12.useCallback(
3508
5026
  async (starterText) => {
3509
5027
  await openConversation();
3510
5028
  if (starterText) {
@@ -3523,15 +5041,15 @@ function useChat(options = {}) {
3523
5041
  startConversation
3524
5042
  };
3525
5043
  }
3526
- var ElementsContext = React11.createContext({
5044
+ var ElementsContext = React12.createContext({
3527
5045
  elements: null,
3528
5046
  isReady: false
3529
5047
  });
3530
5048
  function useElements() {
3531
- return React11.useContext(ElementsContext).elements;
5049
+ return React12.useContext(ElementsContext).elements;
3532
5050
  }
3533
5051
  function useElementsReady() {
3534
- return React11.useContext(ElementsContext).isReady;
5052
+ return React12.useContext(ElementsContext).isReady;
3535
5053
  }
3536
5054
  function ElementsProvider({
3537
5055
  client,
@@ -3539,10 +5057,10 @@ function ElementsProvider({
3539
5057
  options,
3540
5058
  children
3541
5059
  }) {
3542
- const [elements, setElements] = React11.useState(null);
3543
- const [isReady, setIsReady] = React11.useState(false);
3544
- const initialOptionsRef = React11.useRef(options);
3545
- React11.useEffect(() => {
5060
+ const [elements, setElements] = React12.useState(null);
5061
+ const [isReady, setIsReady] = React12.useState(false);
5062
+ const initialOptionsRef = React12.useRef(options);
5063
+ React12.useEffect(() => {
3546
5064
  let cancelled = false;
3547
5065
  let instance = null;
3548
5066
  setIsReady(false);
@@ -3583,20 +5101,20 @@ function AuthElement({
3583
5101
  onRequiresOtp,
3584
5102
  onError
3585
5103
  }) {
3586
- const containerRef = React11.useRef(null);
3587
- const elementRef = React11.useRef(null);
5104
+ const containerRef = React12.useRef(null);
5105
+ const elementRef = React12.useRef(null);
3588
5106
  const elements = useElements();
3589
- const onReadyRef = React11.useRef(onReady);
3590
- const onAuthenticatedRef = React11.useRef(onAuthenticated);
3591
- const onRequiresOtpRef = React11.useRef(onRequiresOtp);
3592
- const onErrorRef = React11.useRef(onError);
3593
- React11.useEffect(() => {
5107
+ const onReadyRef = React12.useRef(onReady);
5108
+ const onAuthenticatedRef = React12.useRef(onAuthenticated);
5109
+ const onRequiresOtpRef = React12.useRef(onRequiresOtp);
5110
+ const onErrorRef = React12.useRef(onError);
5111
+ React12.useEffect(() => {
3594
5112
  onReadyRef.current = onReady;
3595
5113
  onAuthenticatedRef.current = onAuthenticated;
3596
5114
  onRequiresOtpRef.current = onRequiresOtp;
3597
5115
  onErrorRef.current = onError;
3598
5116
  }, [onReady, onAuthenticated, onRequiresOtp, onError]);
3599
- React11.useEffect(() => {
5117
+ React12.useEffect(() => {
3600
5118
  if (!elements || !containerRef.current) return;
3601
5119
  const element = elements.create(chunkJGBDWEPJ_js.ELEMENT_TYPES.AUTH, { prefillEmail });
3602
5120
  elementRef.current = element;
@@ -3626,18 +5144,18 @@ function AddressElement({
3626
5144
  onChange,
3627
5145
  onError
3628
5146
  }) {
3629
- const containerRef = React11.useRef(null);
3630
- const elementRef = React11.useRef(null);
5147
+ const containerRef = React12.useRef(null);
5148
+ const elementRef = React12.useRef(null);
3631
5149
  const elements = useElements();
3632
- const onReadyRef = React11.useRef(onReady);
3633
- const onChangeRef = React11.useRef(onChange);
3634
- const onErrorRef = React11.useRef(onError);
3635
- React11.useEffect(() => {
5150
+ const onReadyRef = React12.useRef(onReady);
5151
+ const onChangeRef = React12.useRef(onChange);
5152
+ const onErrorRef = React12.useRef(onError);
5153
+ React12.useEffect(() => {
3636
5154
  onReadyRef.current = onReady;
3637
5155
  onChangeRef.current = onChange;
3638
5156
  onErrorRef.current = onError;
3639
5157
  }, [onReady, onChange, onError]);
3640
- React11.useEffect(() => {
5158
+ React12.useEffect(() => {
3641
5159
  if (!elements || !containerRef.current) return;
3642
5160
  const element = elements.create(chunkJGBDWEPJ_js.ELEMENT_TYPES.ADDRESS, { mode });
3643
5161
  elementRef.current = element;
@@ -3664,18 +5182,18 @@ function PaymentElement({
3664
5182
  onChange,
3665
5183
  onError
3666
5184
  }) {
3667
- const containerRef = React11.useRef(null);
3668
- const elementRef = React11.useRef(null);
5185
+ const containerRef = React12.useRef(null);
5186
+ const elementRef = React12.useRef(null);
3669
5187
  const elements = useElements();
3670
- const onReadyRef = React11.useRef(onReady);
3671
- const onChangeRef = React11.useRef(onChange);
3672
- const onErrorRef = React11.useRef(onError);
3673
- React11.useEffect(() => {
5188
+ const onReadyRef = React12.useRef(onReady);
5189
+ const onChangeRef = React12.useRef(onChange);
5190
+ const onErrorRef = React12.useRef(onError);
5191
+ React12.useEffect(() => {
3674
5192
  onReadyRef.current = onReady;
3675
5193
  onChangeRef.current = onChange;
3676
5194
  onErrorRef.current = onError;
3677
5195
  }, [onReady, onChange, onError]);
3678
- React11.useEffect(() => {
5196
+ React12.useEffect(() => {
3679
5197
  if (!elements || !containerRef.current) return;
3680
5198
  const element = elements.create(chunkJGBDWEPJ_js.ELEMENT_TYPES.PAYMENT, { amount, currency });
3681
5199
  elementRef.current = element;
@@ -3695,8 +5213,8 @@ function PaymentElement({
3695
5213
  }
3696
5214
  function useCheckout() {
3697
5215
  const elements = useElements();
3698
- const [isLoading, setIsLoading] = React11.useState(false);
3699
- const submit = React11.useCallback(
5216
+ const [isLoading, setIsLoading] = React12.useState(false);
5217
+ const submit = React12.useCallback(
3700
5218
  async (data) => {
3701
5219
  if (!elements) {
3702
5220
  return { success: false, error: { code: "NO_ELEMENTS", message: "Elements not initialized" } };
@@ -3710,7 +5228,7 @@ function useCheckout() {
3710
5228
  },
3711
5229
  [elements]
3712
5230
  );
3713
- const process = React11.useCallback(
5231
+ const process = React12.useCallback(
3714
5232
  async (options) => {
3715
5233
  if (!elements) {
3716
5234
  return {
@@ -3804,13 +5322,13 @@ function VariantSelector({
3804
5322
  className,
3805
5323
  classNames
3806
5324
  }) {
3807
- const [axisSelections, setAxisSelections] = React11.useState({});
3808
- const initialized = React11.useRef(false);
3809
- const idPrefix = React11.useId();
3810
- React11.useEffect(() => {
5325
+ const [axisSelections, setAxisSelections] = React12.useState({});
5326
+ const initialized = React12.useRef(false);
5327
+ const idPrefix = React12.useId();
5328
+ React12.useEffect(() => {
3811
5329
  initialized.current = false;
3812
5330
  }, [variants]);
3813
- React11.useEffect(() => {
5331
+ React12.useEffect(() => {
3814
5332
  if (initialized.current) return;
3815
5333
  if (!variants || variants.length === 0) return;
3816
5334
  const defaultVariant = variants.find((v) => v.is_default) || variants[0];
@@ -3825,7 +5343,7 @@ function VariantSelector({
3825
5343
  setAxisSelections(initial);
3826
5344
  }
3827
5345
  }, [variants, onVariantChange]);
3828
- React11.useEffect(() => {
5346
+ React12.useEffect(() => {
3829
5347
  if (!initialized.current) return;
3830
5348
  if (!variantAxes || variantAxes.length === 0) return;
3831
5349
  const match = variants.find((v) => {
@@ -3945,7 +5463,7 @@ function VariantSelector({
3945
5463
  {
3946
5464
  "data-cimplify-variant-name": true,
3947
5465
  className: cn("flex-1 min-w-0 text-sm", classNames?.name),
3948
- children: chunkJYPLT56O_js.getVariantDisplayName(variant, productName)
5466
+ children: chunkVV3GTDIP_js.getVariantDisplayName(variant, productName)
3949
5467
  }
3950
5468
  ),
3951
5469
  /* @__PURE__ */ jsxRuntime.jsxs("span", { "data-cimplify-variant-pricing": true, className: cn("text-sm text-muted-foreground", classNames?.pricing), children: [
@@ -3968,12 +5486,12 @@ function AddOnSelector({
3968
5486
  className,
3969
5487
  classNames
3970
5488
  }) {
3971
- const selectedSet = React11.useMemo(() => new Set(selectedOptions), [selectedOptions]);
3972
- const isOptionSelected = React11.useCallback(
5489
+ const selectedSet = React12.useMemo(() => new Set(selectedOptions), [selectedOptions]);
5490
+ const isOptionSelected = React12.useCallback(
3973
5491
  (optionId) => selectedSet.has(optionId),
3974
5492
  [selectedSet]
3975
5493
  );
3976
- const handleCheckedChange = React11.useCallback(
5494
+ const handleCheckedChange = React12.useCallback(
3977
5495
  (addOn, optionId, checked) => {
3978
5496
  const isSelected = selectedSet.has(optionId);
3979
5497
  if (addOn.is_mutually_exclusive || !addOn.is_multiple_allowed) {
@@ -4149,9 +5667,9 @@ function BundleSelector({
4149
5667
  className,
4150
5668
  classNames
4151
5669
  }) {
4152
- const [variantChoices, setVariantChoices] = React11.useState({});
4153
- const lastComponentIds = React11.useRef("");
4154
- React11.useEffect(() => {
5670
+ const [variantChoices, setVariantChoices] = React12.useState({});
5671
+ const lastComponentIds = React12.useRef("");
5672
+ React12.useEffect(() => {
4155
5673
  const ids = components.map((c) => c.id).sort().join();
4156
5674
  if (ids === lastComponentIds.current) return;
4157
5675
  lastComponentIds.current = ids;
@@ -4168,20 +5686,20 @@ function BundleSelector({
4168
5686
  }
4169
5687
  setVariantChoices(defaults);
4170
5688
  }, [components]);
4171
- const selections = React11.useMemo(() => {
5689
+ const selections = React12.useMemo(() => {
4172
5690
  return components.map((comp) => ({
4173
5691
  component_id: comp.id,
4174
5692
  variant_id: variantChoices[comp.id],
4175
5693
  quantity: comp.quantity
4176
5694
  }));
4177
5695
  }, [components, variantChoices]);
4178
- React11.useEffect(() => {
5696
+ React12.useEffect(() => {
4179
5697
  onSelectionsChange(selections);
4180
5698
  }, [selections, onSelectionsChange]);
4181
- React11.useEffect(() => {
5699
+ React12.useEffect(() => {
4182
5700
  onReady?.(components.length > 0 && selections.length > 0);
4183
5701
  }, [components, selections, onReady]);
4184
- const totalPrice = React11.useMemo(() => {
5702
+ const totalPrice = React12.useMemo(() => {
4185
5703
  if (pricingType === "fixed" && bundlePrice) {
4186
5704
  return chunk7Y2O3E4D_js.parsePrice(bundlePrice);
4187
5705
  }
@@ -4196,10 +5714,10 @@ function BundleSelector({
4196
5714
  }
4197
5715
  return componentsTotal;
4198
5716
  }, [components, variantChoices, pricingType, bundlePrice, discountValue]);
4199
- React11.useEffect(() => {
5717
+ React12.useEffect(() => {
4200
5718
  onPriceChange?.(totalPrice);
4201
5719
  }, [totalPrice, onPriceChange]);
4202
- const handleVariantChange = React11.useCallback(
5720
+ const handleVariantChange = React12.useCallback(
4203
5721
  (componentId, variantId) => {
4204
5722
  setVariantChoices((prev) => ({ ...prev, [componentId]: variantId }));
4205
5723
  },
@@ -4280,9 +5798,9 @@ function BundleComponentCard({
4280
5798
  onVariantChange,
4281
5799
  classNames
4282
5800
  }) {
4283
- const idPrefix = React11.useId();
5801
+ const idPrefix = React12.useId();
4284
5802
  const showVariantPicker = component.allow_variant_choice && component.available_variants.length > 1;
4285
- const displayPrice = React11.useMemo(
5803
+ const displayPrice = React12.useMemo(
4286
5804
  () => getComponentPrice(component, selectedVariantId),
4287
5805
  [component, selectedVariantId]
4288
5806
  );
@@ -4430,11 +5948,11 @@ function CompositeSelector({
4430
5948
  classNames
4431
5949
  }) {
4432
5950
  const { client } = useCimplifyClient();
4433
- const [groupSelections, setGroupSelections] = React11.useState({});
4434
- const [priceResult, setPriceResult] = React11.useState(null);
4435
- const [isPriceLoading, setIsPriceLoading] = React11.useState(false);
4436
- const [priceError, setPriceError] = React11.useState(false);
4437
- const selections = React11.useMemo(() => {
5951
+ const [groupSelections, setGroupSelections] = React12.useState({});
5952
+ const [priceResult, setPriceResult] = React12.useState(null);
5953
+ const [isPriceLoading, setIsPriceLoading] = React12.useState(false);
5954
+ const [priceError, setPriceError] = React12.useState(false);
5955
+ const selections = React12.useMemo(() => {
4438
5956
  const result = [];
4439
5957
  for (const groupSels of Object.values(groupSelections)) {
4440
5958
  for (const [componentId, qty] of Object.entries(groupSels)) {
@@ -4445,13 +5963,13 @@ function CompositeSelector({
4445
5963
  }
4446
5964
  return result;
4447
5965
  }, [groupSelections]);
4448
- React11.useEffect(() => {
5966
+ React12.useEffect(() => {
4449
5967
  onSelectionsChange(selections);
4450
5968
  }, [selections, onSelectionsChange]);
4451
- React11.useEffect(() => {
5969
+ React12.useEffect(() => {
4452
5970
  onPriceChange?.(priceResult);
4453
5971
  }, [priceResult, onPriceChange]);
4454
- const allGroupsSatisfied = React11.useMemo(() => {
5972
+ const allGroupsSatisfied = React12.useMemo(() => {
4455
5973
  for (const group of groups) {
4456
5974
  const groupSels = groupSelections[group.id] || {};
4457
5975
  const totalSelected = Object.values(groupSels).reduce((sum, q) => sum + q, 0);
@@ -4459,17 +5977,17 @@ function CompositeSelector({
4459
5977
  }
4460
5978
  return true;
4461
5979
  }, [groups, groupSelections]);
4462
- const sortedGroups = React11.useMemo(
5980
+ const sortedGroups = React12.useMemo(
4463
5981
  () => [...groups].sort((a, b) => a.display_order - b.display_order).map((group) => ({
4464
5982
  ...group,
4465
5983
  _sortedComponents: group.components.filter((component) => component.is_available && !component.is_archived).sort((a, b) => a.display_order - b.display_order)
4466
5984
  })),
4467
5985
  [groups]
4468
5986
  );
4469
- React11.useEffect(() => {
5987
+ React12.useEffect(() => {
4470
5988
  onReady?.(allGroupsSatisfied);
4471
5989
  }, [allGroupsSatisfied, onReady]);
4472
- React11.useEffect(() => {
5990
+ React12.useEffect(() => {
4473
5991
  if (skipPriceFetch || !allGroupsSatisfied || selections.length === 0) return;
4474
5992
  let cancelled = false;
4475
5993
  const timer = setTimeout(() => {
@@ -4496,7 +6014,7 @@ function CompositeSelector({
4496
6014
  clearTimeout(timer);
4497
6015
  };
4498
6016
  }, [selections, allGroupsSatisfied, compositeId, client, skipPriceFetch]);
4499
- const toggleComponent = React11.useCallback(
6017
+ const toggleComponent = React12.useCallback(
4500
6018
  (group, component) => {
4501
6019
  setGroupSelections((prev) => {
4502
6020
  const groupSels = { ...prev[group.id] || {} };
@@ -4524,7 +6042,7 @@ function CompositeSelector({
4524
6042
  },
4525
6043
  []
4526
6044
  );
4527
- const updateQuantity = React11.useCallback(
6045
+ const updateQuantity = React12.useCallback(
4528
6046
  (group, componentId, newValue) => {
4529
6047
  setGroupSelections((prev) => {
4530
6048
  const groupSels = { ...prev[group.id] || {} };
@@ -5103,7 +6621,7 @@ function DatePicker({
5103
6621
  classNames,
5104
6622
  "aria-label": ariaLabel
5105
6623
  }) {
5106
- const [open, setOpen] = React11.useState(false);
6624
+ const [open, setOpen] = React12.useState(false);
5107
6625
  const selected = parseValue(value);
5108
6626
  const disabledMatchers = [];
5109
6627
  if (minDate) disabledMatchers.push({ before: minDate });
@@ -5257,9 +6775,9 @@ function TimePicker({
5257
6775
  classNames,
5258
6776
  "aria-label": ariaLabel
5259
6777
  }) {
5260
- const [open, setOpen] = React11.useState(false);
6778
+ const [open, setOpen] = React12.useState(false);
5261
6779
  const parsed = parseHHmm(value);
5262
- const options = React11.useMemo(
6780
+ const options = React12.useMemo(
5263
6781
  () => buildOptions(minTime, maxTime, stepMinutes),
5264
6782
  [minTime, maxTime, stepMinutes]
5265
6783
  );
@@ -5348,13 +6866,13 @@ function CustomerInputFields({
5348
6866
  const clientContext = useOptionalCimplifyClient();
5349
6867
  if (fields.length === 0) return null;
5350
6868
  const sorted = [...fields].sort((a, b) => a.display_order - b.display_order);
5351
- const setValue = React11.useCallback(
6869
+ const setValue = React12.useCallback(
5352
6870
  (fieldId, value) => {
5353
6871
  onChange({ ...values, [fieldId]: value });
5354
6872
  },
5355
6873
  [values, onChange]
5356
6874
  );
5357
- const defaultFileUpload = React11.useCallback(
6875
+ const defaultFileUpload = React12.useCallback(
5358
6876
  async (file) => {
5359
6877
  if (onFileUpload) return onFileUpload(file, {});
5360
6878
  if (!clientContext?.client) throw new Error("No upload provider available");
@@ -5418,12 +6936,12 @@ function FieldInput({
5418
6936
  classNames?.input
5419
6937
  );
5420
6938
  switch (field.field_type) {
5421
- case chunkJYPLT56O_js.INPUT_FIELD_TYPE.Text:
5422
- case chunkJYPLT56O_js.INPUT_FIELD_TYPE.Url:
6939
+ case chunkVV3GTDIP_js.INPUT_FIELD_TYPE.Text:
6940
+ case chunkVV3GTDIP_js.INPUT_FIELD_TYPE.Url:
5423
6941
  return /* @__PURE__ */ jsxRuntime.jsx(
5424
6942
  "input",
5425
6943
  {
5426
- type: field.field_type === chunkJYPLT56O_js.INPUT_FIELD_TYPE.Url ? "url" : "text",
6944
+ type: field.field_type === chunkVV3GTDIP_js.INPUT_FIELD_TYPE.Url ? "url" : "text",
5427
6945
  value: typeof value === "string" ? value : "",
5428
6946
  onChange: (e) => onValueChange(e.target.value),
5429
6947
  placeholder: field.placeholder,
@@ -5432,7 +6950,7 @@ function FieldInput({
5432
6950
  className: inputClass
5433
6951
  }
5434
6952
  );
5435
- case chunkJYPLT56O_js.INPUT_FIELD_TYPE.Textarea:
6953
+ case chunkVV3GTDIP_js.INPUT_FIELD_TYPE.Textarea:
5436
6954
  return /* @__PURE__ */ jsxRuntime.jsx(
5437
6955
  "textarea",
5438
6956
  {
@@ -5445,7 +6963,7 @@ function FieldInput({
5445
6963
  className: cn(inputClass, "resize-none", classNames?.textarea)
5446
6964
  }
5447
6965
  );
5448
- case chunkJYPLT56O_js.INPUT_FIELD_TYPE.Number:
6966
+ case chunkVV3GTDIP_js.INPUT_FIELD_TYPE.Number:
5449
6967
  return /* @__PURE__ */ jsxRuntime.jsx(
5450
6968
  "input",
5451
6969
  {
@@ -5459,7 +6977,7 @@ function FieldInput({
5459
6977
  className: inputClass
5460
6978
  }
5461
6979
  );
5462
- case chunkJYPLT56O_js.INPUT_FIELD_TYPE.Select:
6980
+ case chunkVV3GTDIP_js.INPUT_FIELD_TYPE.Select:
5463
6981
  return /* @__PURE__ */ jsxRuntime.jsxs(
5464
6982
  "select",
5465
6983
  {
@@ -5473,7 +6991,7 @@ function FieldInput({
5473
6991
  ]
5474
6992
  }
5475
6993
  );
5476
- case chunkJYPLT56O_js.INPUT_FIELD_TYPE.Radio:
6994
+ case chunkVV3GTDIP_js.INPUT_FIELD_TYPE.Radio:
5477
6995
  return /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("space-y-2", classNames?.radioGroup), children: (field.options || []).map((opt) => /* @__PURE__ */ jsxRuntime.jsxs(
5478
6996
  "label",
5479
6997
  {
@@ -5498,7 +7016,7 @@ function FieldInput({
5498
7016
  },
5499
7017
  opt
5500
7018
  )) });
5501
- case chunkJYPLT56O_js.INPUT_FIELD_TYPE.Checkbox:
7019
+ case chunkVV3GTDIP_js.INPUT_FIELD_TYPE.Checkbox:
5502
7020
  return /* @__PURE__ */ jsxRuntime.jsxs("label", { className: cn("flex items-center gap-2 text-sm cursor-pointer", classNames?.checkboxLabel), children: [
5503
7021
  /* @__PURE__ */ jsxRuntime.jsx(
5504
7022
  "input",
@@ -5511,7 +7029,7 @@ function FieldInput({
5511
7029
  ),
5512
7030
  field.placeholder || field.name
5513
7031
  ] });
5514
- case chunkJYPLT56O_js.INPUT_FIELD_TYPE.Color:
7032
+ case chunkVV3GTDIP_js.INPUT_FIELD_TYPE.Color:
5515
7033
  return /* @__PURE__ */ jsxRuntime.jsx(
5516
7034
  "input",
5517
7035
  {
@@ -5521,7 +7039,7 @@ function FieldInput({
5521
7039
  className: cn("w-12 h-10 rounded-md border border-input cursor-pointer", classNames?.colorInput)
5522
7040
  }
5523
7041
  );
5524
- case chunkJYPLT56O_js.INPUT_FIELD_TYPE.Date:
7042
+ case chunkVV3GTDIP_js.INPUT_FIELD_TYPE.Date:
5525
7043
  return /* @__PURE__ */ jsxRuntime.jsx(
5526
7044
  DatePicker,
5527
7045
  {
@@ -5532,8 +7050,8 @@ function FieldInput({
5532
7050
  "aria-label": field.name
5533
7051
  }
5534
7052
  );
5535
- case chunkJYPLT56O_js.INPUT_FIELD_TYPE.File:
5536
- case chunkJYPLT56O_js.INPUT_FIELD_TYPE.Image:
7053
+ case chunkVV3GTDIP_js.INPUT_FIELD_TYPE.File:
7054
+ case chunkVV3GTDIP_js.INPUT_FIELD_TYPE.Image:
5537
7055
  return /* @__PURE__ */ jsxRuntime.jsx(
5538
7056
  FileUploadInput,
5539
7057
  {
@@ -5544,7 +7062,7 @@ function FieldInput({
5544
7062
  classNames
5545
7063
  }
5546
7064
  );
5547
- case chunkJYPLT56O_js.INPUT_FIELD_TYPE.Email:
7065
+ case chunkVV3GTDIP_js.INPUT_FIELD_TYPE.Email:
5548
7066
  return /* @__PURE__ */ jsxRuntime.jsx(
5549
7067
  "input",
5550
7068
  {
@@ -5556,7 +7074,7 @@ function FieldInput({
5556
7074
  className: inputClass
5557
7075
  }
5558
7076
  );
5559
- case chunkJYPLT56O_js.INPUT_FIELD_TYPE.DateTime: {
7077
+ case chunkVV3GTDIP_js.INPUT_FIELD_TYPE.DateTime: {
5560
7078
  const stringValue = typeof value === "string" ? value : "";
5561
7079
  const [datePart, timePartRaw] = stringValue.includes("T") ? stringValue.split("T", 2) : [stringValue, ""];
5562
7080
  const timePart = (timePartRaw ?? "").slice(0, 5);
@@ -5595,7 +7113,7 @@ function FieldInput({
5595
7113
  )
5596
7114
  ] });
5597
7115
  }
5598
- case chunkJYPLT56O_js.INPUT_FIELD_TYPE.Time:
7116
+ case chunkVV3GTDIP_js.INPUT_FIELD_TYPE.Time:
5599
7117
  return /* @__PURE__ */ jsxRuntime.jsx(
5600
7118
  TimePicker,
5601
7119
  {
@@ -5606,7 +7124,7 @@ function FieldInput({
5606
7124
  "aria-label": field.name
5607
7125
  }
5608
7126
  );
5609
- case chunkJYPLT56O_js.INPUT_FIELD_TYPE.MultiSelect:
7127
+ case chunkVV3GTDIP_js.INPUT_FIELD_TYPE.MultiSelect:
5610
7128
  return /* @__PURE__ */ jsxRuntime.jsx(
5611
7129
  MultiSelectInput,
5612
7130
  {
@@ -5616,7 +7134,7 @@ function FieldInput({
5616
7134
  classNames
5617
7135
  }
5618
7136
  );
5619
- case chunkJYPLT56O_js.INPUT_FIELD_TYPE.DateRange:
7137
+ case chunkVV3GTDIP_js.INPUT_FIELD_TYPE.DateRange:
5620
7138
  return /* @__PURE__ */ jsxRuntime.jsx(
5621
7139
  DateRangeInput,
5622
7140
  {
@@ -5626,7 +7144,7 @@ function FieldInput({
5626
7144
  classNames
5627
7145
  }
5628
7146
  );
5629
- case chunkJYPLT56O_js.INPUT_FIELD_TYPE.Address:
7147
+ case chunkVV3GTDIP_js.INPUT_FIELD_TYPE.Address:
5630
7148
  return /* @__PURE__ */ jsxRuntime.jsx(
5631
7149
  AddressInput,
5632
7150
  {
@@ -5637,7 +7155,7 @@ function FieldInput({
5637
7155
  inputClass
5638
7156
  }
5639
7157
  );
5640
- case chunkJYPLT56O_js.INPUT_FIELD_TYPE.Location:
7158
+ case chunkVV3GTDIP_js.INPUT_FIELD_TYPE.Location:
5641
7159
  return /* @__PURE__ */ jsxRuntime.jsx(
5642
7160
  LocationInput,
5643
7161
  {
@@ -5648,7 +7166,7 @@ function FieldInput({
5648
7166
  inputClass
5649
7167
  }
5650
7168
  );
5651
- case chunkJYPLT56O_js.INPUT_FIELD_TYPE.Phone:
7169
+ case chunkVV3GTDIP_js.INPUT_FIELD_TYPE.Phone:
5652
7170
  return /* @__PURE__ */ jsxRuntime.jsx(
5653
7171
  PhoneInput,
5654
7172
  {
@@ -5659,7 +7177,7 @@ function FieldInput({
5659
7177
  inputClass
5660
7178
  }
5661
7179
  );
5662
- case chunkJYPLT56O_js.INPUT_FIELD_TYPE.Signature:
7180
+ case chunkVV3GTDIP_js.INPUT_FIELD_TYPE.Signature:
5663
7181
  return /* @__PURE__ */ jsxRuntime.jsx(
5664
7182
  SignatureInput,
5665
7183
  {
@@ -5689,10 +7207,10 @@ function FileUploadInput({
5689
7207
  onFileUpload,
5690
7208
  classNames
5691
7209
  }) {
5692
- const [isUploading, setIsUploading] = React11__default.default.useState(false);
7210
+ const [isUploading, setIsUploading] = React12__default.default.useState(false);
5693
7211
  const fileUrl = typeof value === "string" ? value : void 0;
5694
7212
  const acceptedFormats = field.validation?.accepted_formats;
5695
- const accept = acceptedFormats ? acceptedFormats.map((f) => `.${f}`).join(",") : field.field_type === chunkJYPLT56O_js.INPUT_FIELD_TYPE.Image ? "image/*" : void 0;
7213
+ const accept = acceptedFormats ? acceptedFormats.map((f) => `.${f}`).join(",") : field.field_type === chunkVV3GTDIP_js.INPUT_FIELD_TYPE.Image ? "image/*" : void 0;
5696
7214
  const handleFile = async (file) => {
5697
7215
  if (!onFileUpload) return;
5698
7216
  if (field.validation?.max_size_mb) {
@@ -5710,7 +7228,7 @@ function FileUploadInput({
5710
7228
  }
5711
7229
  };
5712
7230
  return /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("space-y-2", classNames?.fileInput), children: fileUrl ? /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-3", children: [
5713
- field.field_type === chunkJYPLT56O_js.INPUT_FIELD_TYPE.Image && /* @__PURE__ */ jsxRuntime.jsx("img", { src: fileUrl, alt: "Uploaded", className: "w-16 h-16 object-cover rounded-md border border-border" }),
7231
+ field.field_type === chunkVV3GTDIP_js.INPUT_FIELD_TYPE.Image && /* @__PURE__ */ jsxRuntime.jsx("img", { src: fileUrl, alt: "Uploaded", className: "w-16 h-16 object-cover rounded-md border border-border" }),
5714
7232
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex-1 min-w-0", children: /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm text-foreground truncate", children: fileUrl.split("/").pop() }) }),
5715
7233
  /* @__PURE__ */ jsxRuntime.jsx(
5716
7234
  "button",
@@ -5736,7 +7254,7 @@ function FileUploadInput({
5736
7254
  }
5737
7255
  ),
5738
7256
  isUploading ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-sm text-muted-foreground", children: "Uploading..." }) : /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
5739
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-sm text-muted-foreground", children: field.placeholder || `Upload ${field.field_type === chunkJYPLT56O_js.INPUT_FIELD_TYPE.Image ? "image" : "file"}` }),
7257
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-sm text-muted-foreground", children: field.placeholder || `Upload ${field.field_type === chunkVV3GTDIP_js.INPUT_FIELD_TYPE.Image ? "image" : "file"}` }),
5740
7258
  acceptedFormats && /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "text-xs text-muted-foreground/60 mt-1", children: [
5741
7259
  acceptedFormats.map((f) => f.toUpperCase()).join(", "),
5742
7260
  field.validation?.max_size_mb && ` \xB7 Max ${field.validation.max_size_mb}MB`
@@ -5839,22 +7357,22 @@ function AddressInput({
5839
7357
  }) {
5840
7358
  const clientContext = useOptionalCimplifyClient();
5841
7359
  const addr = value && typeof value === "object" ? value : null;
5842
- const [inputText, setInputText] = React11__default.default.useState(addr?.formatted_address ?? "");
5843
- const [suggestions, setSuggestions] = React11__default.default.useState([]);
5844
- const [isOpen, setIsOpen] = React11__default.default.useState(false);
5845
- const [highlightedIndex, setHighlightedIndex] = React11__default.default.useState(-1);
5846
- const debounceRef = React11__default.default.useRef(null);
5847
- const seqRef = React11__default.default.useRef(0);
5848
- const sessionTokenRef = React11__default.default.useRef(createSessionToken());
5849
- const blurTimeoutRef = React11__default.default.useRef(null);
5850
- React11__default.default.useEffect(() => {
7360
+ const [inputText, setInputText] = React12__default.default.useState(addr?.formatted_address ?? "");
7361
+ const [suggestions, setSuggestions] = React12__default.default.useState([]);
7362
+ const [isOpen, setIsOpen] = React12__default.default.useState(false);
7363
+ const [highlightedIndex, setHighlightedIndex] = React12__default.default.useState(-1);
7364
+ const debounceRef = React12__default.default.useRef(null);
7365
+ const seqRef = React12__default.default.useRef(0);
7366
+ const sessionTokenRef = React12__default.default.useRef(createSessionToken());
7367
+ const blurTimeoutRef = React12__default.default.useRef(null);
7368
+ React12__default.default.useEffect(() => {
5851
7369
  return () => {
5852
7370
  if (debounceRef.current) clearTimeout(debounceRef.current);
5853
7371
  if (blurTimeoutRef.current) clearTimeout(blurTimeoutRef.current);
5854
7372
  seqRef.current += 1;
5855
7373
  };
5856
7374
  }, []);
5857
- const fetchSuggestions = React11__default.default.useCallback(async (query) => {
7375
+ const fetchSuggestions = React12__default.default.useCallback(async (query) => {
5858
7376
  const client = clientContext?.client;
5859
7377
  if (!client || query.length < 3) {
5860
7378
  setSuggestions([]);
@@ -5878,7 +7396,7 @@ function AddressInput({
5878
7396
  if (debounceRef.current) clearTimeout(debounceRef.current);
5879
7397
  debounceRef.current = setTimeout(() => void fetchSuggestions(nextValue.trim()), 300);
5880
7398
  };
5881
- const selectSuggestion = React11__default.default.useCallback(async (suggestion) => {
7399
+ const selectSuggestion = React12__default.default.useCallback(async (suggestion) => {
5882
7400
  if (debounceRef.current) clearTimeout(debounceRef.current);
5883
7401
  if (blurTimeoutRef.current) clearTimeout(blurTimeoutRef.current);
5884
7402
  const fallback = suggestion.description.split(",")[0]?.trim() || suggestion.description;
@@ -5981,22 +7499,22 @@ function LocationInput({
5981
7499
  }) {
5982
7500
  const clientContext = useOptionalCimplifyClient();
5983
7501
  const loc = value && typeof value === "object" ? value : null;
5984
- const [inputText, setInputText] = React11__default.default.useState(loc?.label ?? "");
5985
- const [suggestions, setSuggestions] = React11__default.default.useState([]);
5986
- const [isOpen, setIsOpen] = React11__default.default.useState(false);
5987
- const [highlightedIndex, setHighlightedIndex] = React11__default.default.useState(-1);
5988
- const debounceRef = React11__default.default.useRef(null);
5989
- const seqRef = React11__default.default.useRef(0);
5990
- const sessionTokenRef = React11__default.default.useRef(createSessionToken());
5991
- const blurTimeoutRef = React11__default.default.useRef(null);
5992
- React11__default.default.useEffect(() => {
7502
+ const [inputText, setInputText] = React12__default.default.useState(loc?.label ?? "");
7503
+ const [suggestions, setSuggestions] = React12__default.default.useState([]);
7504
+ const [isOpen, setIsOpen] = React12__default.default.useState(false);
7505
+ const [highlightedIndex, setHighlightedIndex] = React12__default.default.useState(-1);
7506
+ const debounceRef = React12__default.default.useRef(null);
7507
+ const seqRef = React12__default.default.useRef(0);
7508
+ const sessionTokenRef = React12__default.default.useRef(createSessionToken());
7509
+ const blurTimeoutRef = React12__default.default.useRef(null);
7510
+ React12__default.default.useEffect(() => {
5993
7511
  return () => {
5994
7512
  if (debounceRef.current) clearTimeout(debounceRef.current);
5995
7513
  if (blurTimeoutRef.current) clearTimeout(blurTimeoutRef.current);
5996
7514
  seqRef.current += 1;
5997
7515
  };
5998
7516
  }, []);
5999
- const fetchSuggestions = React11__default.default.useCallback(async (query) => {
7517
+ const fetchSuggestions = React12__default.default.useCallback(async (query) => {
6000
7518
  const client = clientContext?.client;
6001
7519
  if (!client || query.length < 3) {
6002
7520
  setSuggestions([]);
@@ -6020,7 +7538,7 @@ function LocationInput({
6020
7538
  if (debounceRef.current) clearTimeout(debounceRef.current);
6021
7539
  debounceRef.current = setTimeout(() => void fetchSuggestions(nextValue.trim()), 300);
6022
7540
  };
6023
- const selectSuggestion = React11__default.default.useCallback(async (suggestion) => {
7541
+ const selectSuggestion = React12__default.default.useCallback(async (suggestion) => {
6024
7542
  if (debounceRef.current) clearTimeout(debounceRef.current);
6025
7543
  if (blurTimeoutRef.current) clearTimeout(blurTimeoutRef.current);
6026
7544
  const label = suggestion.description.split(",")[0]?.trim() || suggestion.description;
@@ -6109,8 +7627,8 @@ function PhoneInput({
6109
7627
  inputClass
6110
7628
  }) {
6111
7629
  const phone = value && typeof value === "object" ? value : null;
6112
- const [code, setCode] = React11__default.default.useState(phone?.country_code ?? "+1");
6113
- const [number, setNumber] = React11__default.default.useState(phone?.number ?? "");
7630
+ const [code, setCode] = React12__default.default.useState(phone?.country_code ?? "+1");
7631
+ const [number, setNumber] = React12__default.default.useState(phone?.number ?? "");
6114
7632
  const update = (nextCode, nextNumber) => {
6115
7633
  setCode(nextCode);
6116
7634
  setNumber(nextNumber);
@@ -6155,8 +7673,8 @@ function SignatureInput({
6155
7673
  classNames
6156
7674
  }) {
6157
7675
  const sig = value && typeof value === "object" ? value : null;
6158
- const canvasRef = React11__default.default.useRef(null);
6159
- const isDrawing = React11__default.default.useRef(false);
7676
+ const canvasRef = React12__default.default.useRef(null);
7677
+ const isDrawing = React12__default.default.useRef(false);
6160
7678
  const getCtx = () => canvasRef.current?.getContext("2d") ?? null;
6161
7679
  const startDraw = (e) => {
6162
7680
  const ctx = getCtx();
@@ -6332,7 +7850,7 @@ function SlotPicker({
6332
7850
  }
6333
7851
  );
6334
7852
  const rawSlots = slotsProp ?? fetched;
6335
- const slots = React11.useMemo(() => {
7853
+ const slots = React12.useMemo(() => {
6336
7854
  if (!hideElapsedSlots) return rawSlots;
6337
7855
  const cutoff = Date.now() + minLeadMinutes * 6e4;
6338
7856
  return rawSlots.filter((slot) => {
@@ -6470,9 +7988,9 @@ function DateSlotPicker({
6470
7988
  className,
6471
7989
  classNames
6472
7990
  }) {
6473
- const [offset, setOffset] = React11.useState(0);
6474
- const [selectedDate, setSelectedDate] = React11.useState(toDateString(/* @__PURE__ */ new Date()));
6475
- const dateRange = React11.useMemo(() => {
7991
+ const [offset, setOffset] = React12.useState(0);
7992
+ const [selectedDate, setSelectedDate] = React12.useState(toDateString(/* @__PURE__ */ new Date()));
7993
+ const dateRange = React12.useMemo(() => {
6476
7994
  const today = /* @__PURE__ */ new Date();
6477
7995
  const start = addDays(today, offset);
6478
7996
  const dates = [];
@@ -6495,25 +8013,25 @@ function DateSlotPicker({
6495
8013
  }
6496
8014
  );
6497
8015
  const days = availabilityProp ?? fetchedDays;
6498
- const availabilityMap = React11.useMemo(() => {
8016
+ const availabilityMap = React12.useMemo(() => {
6499
8017
  const map = /* @__PURE__ */ new Map();
6500
8018
  for (const day of days) {
6501
8019
  map.set(day.date, day);
6502
8020
  }
6503
8021
  return map;
6504
8022
  }, [days]);
6505
- const handlePrev = React11.useCallback(() => {
8023
+ const handlePrev = React12.useCallback(() => {
6506
8024
  setOffset((prev) => Math.max(0, prev - daysToShow));
6507
8025
  }, [daysToShow]);
6508
- const handleNext = React11.useCallback(() => {
8026
+ const handleNext = React12.useCallback(() => {
6509
8027
  setOffset((prev) => prev + daysToShow);
6510
8028
  }, [daysToShow]);
6511
- const handleDateChange = React11.useCallback((value) => {
8029
+ const handleDateChange = React12.useCallback((value) => {
6512
8030
  if (typeof value === "string") {
6513
8031
  setSelectedDate(value);
6514
8032
  }
6515
8033
  }, []);
6516
- const handleSlotSelect = React11.useCallback(
8034
+ const handleSlotSelect = React12.useCallback(
6517
8035
  (slot) => {
6518
8036
  onSlotSelect?.(slot, selectedDate);
6519
8037
  },
@@ -6629,22 +8147,22 @@ function ProductCustomizer({
6629
8147
  className,
6630
8148
  classNames
6631
8149
  }) {
6632
- const [quantity, setQuantity] = React11.useState(product.min_order_quantity ?? 1);
6633
- const [isAdded, setIsAdded] = React11.useState(false);
6634
- const [isSubmitting, setIsSubmitting] = React11.useState(false);
6635
- const [selectedVariantId, setSelectedVariantId] = React11.useState();
6636
- const [selectedVariant, setSelectedVariant] = React11.useState();
6637
- const [selectedAddOnOptionIds, setSelectedAddOnOptionIds] = React11.useState([]);
6638
- const [compositeSelections, setCompositeSelections] = React11.useState([]);
6639
- const [compositePrice, setCompositePrice] = React11.useState(null);
6640
- const [compositeReady, setCompositeReady] = React11.useState(false);
6641
- const [bundleSelections, setBundleSelections] = React11.useState([]);
6642
- const [bundleTotalPrice, setBundleTotalPrice] = React11.useState(null);
6643
- const [bundleReady, setBundleReady] = React11.useState(false);
6644
- const [selectedBillingPlan, setSelectedBillingPlan] = React11.useState(null);
6645
- const [customerInputValues, setCustomerInputValues] = React11.useState({});
6646
- const [specialInstructions, setSpecialInstructions] = React11.useState("");
6647
- const [selectedSlot, setSelectedSlot] = React11.useState(null);
8150
+ const [quantity, setQuantity] = React12.useState(product.min_order_quantity ?? 1);
8151
+ const [isAdded, setIsAdded] = React12.useState(false);
8152
+ const [isSubmitting, setIsSubmitting] = React12.useState(false);
8153
+ const [selectedVariantId, setSelectedVariantId] = React12.useState();
8154
+ const [selectedVariant, setSelectedVariant] = React12.useState();
8155
+ const [selectedAddOnOptionIds, setSelectedAddOnOptionIds] = React12.useState([]);
8156
+ const [compositeSelections, setCompositeSelections] = React12.useState([]);
8157
+ const [compositePrice, setCompositePrice] = React12.useState(null);
8158
+ const [compositeReady, setCompositeReady] = React12.useState(false);
8159
+ const [bundleSelections, setBundleSelections] = React12.useState([]);
8160
+ const [bundleTotalPrice, setBundleTotalPrice] = React12.useState(null);
8161
+ const [bundleReady, setBundleReady] = React12.useState(false);
8162
+ const [selectedBillingPlan, setSelectedBillingPlan] = React12.useState(null);
8163
+ const [customerInputValues, setCustomerInputValues] = React12.useState({});
8164
+ const [specialInstructions, setSpecialInstructions] = React12.useState("");
8165
+ const [selectedSlot, setSelectedSlot] = React12.useState(null);
6648
8166
  const cart = useCart();
6649
8167
  const productType = product.type || "product";
6650
8168
  const isComposite = productType === "composite";
@@ -6654,7 +8172,7 @@ function ProductCustomizer({
6654
8172
  const isStandard = !isComposite && !isBundle;
6655
8173
  const hasVariants = isStandard && product.variants && product.variants.length > 0;
6656
8174
  const hasAddOns = isStandard && product.add_ons && product.add_ons.length > 0;
6657
- React11.useEffect(() => {
8175
+ React12.useEffect(() => {
6658
8176
  setQuantity(product.min_order_quantity ?? 1);
6659
8177
  setIsAdded(false);
6660
8178
  setIsSubmitting(false);
@@ -6672,7 +8190,7 @@ function ProductCustomizer({
6672
8190
  setSpecialInstructions("");
6673
8191
  setSelectedSlot(null);
6674
8192
  }, [product.id, product.min_order_quantity]);
6675
- const selectedAddOnOptions = React11.useMemo(() => {
8193
+ const selectedAddOnOptions = React12.useMemo(() => {
6676
8194
  if (!product.add_ons) return [];
6677
8195
  const options = [];
6678
8196
  for (const addOn of product.add_ons) {
@@ -6684,11 +8202,11 @@ function ProductCustomizer({
6684
8202
  }
6685
8203
  return options;
6686
8204
  }, [product.add_ons, selectedAddOnOptionIds]);
6687
- const normalizedAddOnOptionIds = React11.useMemo(() => {
8205
+ const normalizedAddOnOptionIds = React12.useMemo(() => {
6688
8206
  if (selectedAddOnOptionIds.length === 0) return [];
6689
8207
  return Array.from(new Set(selectedAddOnOptionIds.map((id) => id.trim()).filter(Boolean))).sort();
6690
8208
  }, [selectedAddOnOptionIds]);
6691
- const localTotalPrice = React11.useMemo(() => {
8209
+ const localTotalPrice = React12.useMemo(() => {
6692
8210
  if (isComposite && compositePrice) {
6693
8211
  return chunk7Y2O3E4D_js.parsePrice(compositePrice.final_price) * quantity;
6694
8212
  }
@@ -6706,7 +8224,7 @@ function ProductCustomizer({
6706
8224
  }
6707
8225
  return price * quantity;
6708
8226
  }, [product.default_price, selectedVariant, selectedAddOnOptions, quantity, isComposite, compositePrice, isBundle, bundleTotalPrice]);
6709
- const requiredAddOnsSatisfied = React11.useMemo(() => {
8227
+ const requiredAddOnsSatisfied = React12.useMemo(() => {
6710
8228
  if (!product.add_ons) return true;
6711
8229
  for (const addOn of product.add_ons) {
6712
8230
  if (addOn.is_required) {
@@ -6721,7 +8239,7 @@ function ProductCustomizer({
6721
8239
  }
6722
8240
  return true;
6723
8241
  }, [product.add_ons, selectedAddOnOptionIds]);
6724
- const quoteInput = React11.useMemo(
8242
+ const quoteInput = React12.useMemo(
6725
8243
  () => ({
6726
8244
  productId: product.id,
6727
8245
  quantity,
@@ -6732,7 +8250,7 @@ function ProductCustomizer({
6732
8250
  }),
6733
8251
  [product.id, quantity, selectedVariantId, normalizedAddOnOptionIds, isBundle, bundleSelections, isComposite, compositeSelections]
6734
8252
  );
6735
- const requiredInputsSatisfied = React11.useMemo(() => {
8253
+ const requiredInputsSatisfied = React12.useMemo(() => {
6736
8254
  if (!product.input_fields || product.input_fields.length === 0) return true;
6737
8255
  return product.input_fields.every((field) => {
6738
8256
  if (!field.is_required) return true;
@@ -6745,7 +8263,7 @@ function ProductCustomizer({
6745
8263
  enabled: quoteEnabled
6746
8264
  });
6747
8265
  const quoteId = quote?.quote_id;
6748
- const quotedTotalPrice = React11.useMemo(() => {
8266
+ const quotedTotalPrice = React12.useMemo(() => {
6749
8267
  if (!quote) return void 0;
6750
8268
  const priceInfo = quote.quoted_total_price_info ?? quote.final_price_info;
6751
8269
  const perUnit = priceInfo.pre_tax_price;
@@ -6753,7 +8271,7 @@ function ProductCustomizer({
6753
8271
  return chunk7Y2O3E4D_js.parsePrice(perUnit) * quantity;
6754
8272
  }, [quote, quantity]);
6755
8273
  const displayTotalPrice = quotedTotalPrice ?? localTotalPrice;
6756
- const handleVariantChange = React11.useCallback(
8274
+ const handleVariantChange = React12.useCallback(
6757
8275
  (variantId, variant) => {
6758
8276
  setSelectedVariantId(variantId);
6759
8277
  setSelectedVariant(variant);
@@ -6761,9 +8279,9 @@ function ProductCustomizer({
6761
8279
  },
6762
8280
  [onVariantChange]
6763
8281
  );
6764
- const addedTimerRef = React11.useRef(void 0);
6765
- React11.useEffect(() => () => clearTimeout(addedTimerRef.current), []);
6766
- const handleAddToCart = React11.useCallback(async () => {
8282
+ const addedTimerRef = React12.useRef(void 0);
8283
+ React12.useEffect(() => () => clearTimeout(addedTimerRef.current), []);
8284
+ const handleAddToCart = React12.useCallback(async () => {
6767
8285
  if (isSubmitting) return;
6768
8286
  setIsSubmitting(true);
6769
8287
  const options = {
@@ -6988,14 +8506,14 @@ function ProductImageGallery({
6988
8506
  aspectRatio = "4/3",
6989
8507
  className
6990
8508
  }) {
6991
- const normalizedImages = React11.useMemo(
8509
+ const normalizedImages = React12.useMemo(
6992
8510
  () => images.filter(
6993
8511
  (image) => typeof image === "string" && image.trim().length > 0
6994
8512
  ),
6995
8513
  [images]
6996
8514
  );
6997
- const [selectedImage, setSelectedImage] = React11.useState(0);
6998
- React11.useEffect(() => {
8515
+ const [selectedImage, setSelectedImage] = React12.useState(0);
8516
+ React12.useEffect(() => {
6999
8517
  setSelectedImage(0);
7000
8518
  }, [normalizedImages.length, productName]);
7001
8519
  if (normalizedImages.length === 0) {
@@ -7078,9 +8596,9 @@ function StoreVideo({
7078
8596
  lazy = true,
7079
8597
  className
7080
8598
  }) {
7081
- const ref = React11.useRef(null);
7082
- const [inView, setInView] = React11.useState(!lazy);
7083
- React11.useEffect(() => {
8599
+ const ref = React12.useRef(null);
8600
+ const [inView, setInView] = React12.useState(!lazy);
8601
+ React12.useEffect(() => {
7084
8602
  if (!lazy || inView) return;
7085
8603
  const node = ref.current;
7086
8604
  if (!node || typeof IntersectionObserver === "undefined") {
@@ -7168,8 +8686,8 @@ function ProductModel3D({
7168
8686
  cameraControls = true,
7169
8687
  className
7170
8688
  }) {
7171
- const [ready, setReady] = React11.useState(false);
7172
- React11.useEffect(() => {
8689
+ const [ready, setReady] = React12.useState(false);
8690
+ React12.useEffect(() => {
7173
8691
  let cancelled = false;
7174
8692
  ensureModelViewer().then(
7175
8693
  () => {
@@ -7188,7 +8706,7 @@ function ProductModel3D({
7188
8706
  "data-cimplify-product-model-3d": true,
7189
8707
  className,
7190
8708
  style: { position: "relative", overflow: "hidden", ...ASPECT_STYLES3[aspectRatio] },
7191
- children: ready ? React11__default.default.createElement("model-viewer", {
8709
+ children: ready ? React12__default.default.createElement("model-viewer", {
7192
8710
  src,
7193
8711
  "ios-src": iosSrc,
7194
8712
  alt,
@@ -7199,12 +8717,12 @@ function ProductModel3D({
7199
8717
  "auto-rotate": autoRotate || void 0,
7200
8718
  "shadow-intensity": "1",
7201
8719
  style: { width: "100%", height: "100%", backgroundColor: "transparent" }
7202
- }) : poster ? React11__default.default.createElement("img", {
8720
+ }) : poster ? React12__default.default.createElement("img", {
7203
8721
  src: poster,
7204
8722
  alt: alt ?? "",
7205
8723
  "data-cimplify-product-model-3d-loading": true,
7206
8724
  style: { width: "100%", height: "100%", objectFit: "cover" }
7207
- }) : React11__default.default.createElement("div", {
8725
+ }) : React12__default.default.createElement("div", {
7208
8726
  "data-cimplify-product-model-3d-loading": true,
7209
8727
  style: { width: "100%", height: "100%", backgroundColor: "var(--muted, #f3f4f6)" }
7210
8728
  })
@@ -7232,12 +8750,12 @@ function MediaGallery({
7232
8750
  aspectRatio = "4/3",
7233
8751
  className
7234
8752
  }) {
7235
- const validItems = React11.useMemo(
8753
+ const validItems = React12.useMemo(
7236
8754
  () => items.filter((i) => typeof i.src === "string" && i.src.trim().length > 0),
7237
8755
  [items]
7238
8756
  );
7239
- const [selected, setSelected] = React11.useState(0);
7240
- React11.useEffect(() => {
8757
+ const [selected, setSelected] = React12.useState(0);
8758
+ React12.useEffect(() => {
7241
8759
  setSelected(0);
7242
8760
  }, [validItems.length, productName]);
7243
8761
  if (validItems.length === 0) return null;
@@ -7358,7 +8876,7 @@ function CartLineItemRow({
7358
8876
  const isOptimistic = item.isOptimistic === true;
7359
8877
  const lineTotal = chunk7Y2O3E4D_js.parsePrice(unitPrice) * item.quantity;
7360
8878
  const imageUrl = item.product.image_url;
7361
- const variantLabel = item.variant ? chunkJYPLT56O_js.getVariantDisplayName(item.variant, item.product.name) : null;
8879
+ const variantLabel = item.variant ? chunkVV3GTDIP_js.getVariantDisplayName(item.variant, item.product.name) : null;
7362
8880
  return /* @__PURE__ */ jsxRuntime.jsxs(
7363
8881
  "div",
7364
8882
  {
@@ -7458,7 +8976,7 @@ function CartLineItemRow({
7458
8976
  input.field_name,
7459
8977
  ":"
7460
8978
  ] }),
7461
- /* @__PURE__ */ jsxRuntime.jsx("dd", { "data-cimplify-cart-input-value": true, className: "text-foreground m-0 truncate", children: input.field_type === chunkJYPLT56O_js.INPUT_FIELD_TYPE.File || input.field_type === chunkJYPLT56O_js.INPUT_FIELD_TYPE.Image ? String(input.value).split("/").pop() || "Uploaded file" : String(input.value) })
8979
+ /* @__PURE__ */ jsxRuntime.jsx("dd", { "data-cimplify-cart-input-value": true, className: "text-foreground m-0 truncate", children: input.field_type === chunkVV3GTDIP_js.INPUT_FIELD_TYPE.File || input.field_type === chunkVV3GTDIP_js.INPUT_FIELD_TYPE.Image ? String(input.value).split("/").pop() || "Uploaded file" : String(input.value) })
7462
8980
  ] }, input.field_id)) }),
7463
8981
  (item.lineType === "service" || item.product.type === "service") && item.scheduledStart && /* @__PURE__ */ jsxRuntime.jsxs("div", { "data-cimplify-cart-service-info": true, className: cn("mt-1.5 flex items-center gap-1.5 text-xs text-muted-foreground", classNames?.serviceInfo), children: [
7464
8982
  /* @__PURE__ */ jsxRuntime.jsx("svg", { className: "w-3.5 h-3.5 shrink-0", fill: "none", stroke: "currentColor", strokeWidth: "2", viewBox: "0 0 24 24", "aria-hidden": true, children: /* @__PURE__ */ jsxRuntime.jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M8 7V3m8 4V3m-9 8h10M5 21h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v12a2 2 0 002 2z" }) }),
@@ -7802,7 +9320,7 @@ function ProductSheet({
7802
9320
  }
7803
9321
  );
7804
9322
  }
7805
- const [selectedVariant, setSelectedVariant] = React11.useState(
9323
+ const [selectedVariant, setSelectedVariant] = React12.useState(
7806
9324
  void 0
7807
9325
  );
7808
9326
  const variantImages = selectedVariant?.images?.filter(Boolean) ?? [];
@@ -8014,7 +9532,7 @@ function FoodProductCard({
8014
9532
  const tags = product.tags || [];
8015
9533
  const isSignature = product.metadata?.is_signature === true;
8016
9534
  const isNew = product.metadata?.is_new === true;
8017
- const isComposite = product.type === chunkJYPLT56O_js.PRODUCT_TYPE.Composite;
9535
+ const isComposite = product.type === chunkVV3GTDIP_js.PRODUCT_TYPE.Composite;
8018
9536
  return /* @__PURE__ */ jsxRuntime.jsxs(CardShell, { product, renderLink, className, children: [
8019
9537
  /* @__PURE__ */ jsxRuntime.jsxs(CardImage, { src: image, alt: product.name, aspectRatio: "square", renderImage, children: [
8020
9538
  isSignature && /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "absolute top-3 left-3 inline-flex items-center gap-1 text-[11px] font-semibold tracking-wide bg-amber-50 text-amber-700 border border-amber-200/60 px-2 py-0.5 rounded-md", children: [
@@ -8767,26 +10285,26 @@ var BUILT_IN_CARDS = {
8767
10285
  ["composite" /* Composite */]: CompositeProductCard,
8768
10286
  ["subscription" /* Subscription */]: SubscriptionCard
8769
10287
  };
8770
- var RENTAL_UNITS = /* @__PURE__ */ new Set([chunkJYPLT56O_js.DURATION_UNIT.Days, chunkJYPLT56O_js.DURATION_UNIT.Hours]);
8771
- var LEASE_UNITS = /* @__PURE__ */ new Set([chunkJYPLT56O_js.DURATION_UNIT.Weeks, chunkJYPLT56O_js.DURATION_UNIT.Months, chunkJYPLT56O_js.DURATION_UNIT.Years]);
10288
+ var RENTAL_UNITS = /* @__PURE__ */ new Set([chunkVV3GTDIP_js.DURATION_UNIT.Days, chunkVV3GTDIP_js.DURATION_UNIT.Hours]);
10289
+ var LEASE_UNITS = /* @__PURE__ */ new Set([chunkVV3GTDIP_js.DURATION_UNIT.Weeks, chunkVV3GTDIP_js.DURATION_UNIT.Months, chunkVV3GTDIP_js.DURATION_UNIT.Years]);
8772
10290
  function resolveCardVariant(product) {
8773
- if (product.type === chunkJYPLT56O_js.PRODUCT_TYPE.Bundle) {
10291
+ if (product.type === chunkVV3GTDIP_js.PRODUCT_TYPE.Bundle) {
8774
10292
  return "bundle" /* Bundle */;
8775
10293
  }
8776
- if (product.type === chunkJYPLT56O_js.PRODUCT_TYPE.Composite) {
10294
+ if (product.type === chunkVV3GTDIP_js.PRODUCT_TYPE.Composite) {
8777
10295
  return "composite" /* Composite */;
8778
10296
  }
8779
10297
  if (product.quantity_pricing && product.quantity_pricing.length > 1) {
8780
10298
  return "wholesale" /* Wholesale */;
8781
10299
  }
8782
- if (product.type === chunkJYPLT56O_js.PRODUCT_TYPE.Digital) {
10300
+ if (product.type === chunkVV3GTDIP_js.PRODUCT_TYPE.Digital) {
8783
10301
  return "digital" /* Digital */;
8784
10302
  }
8785
- if (product.type === chunkJYPLT56O_js.PRODUCT_TYPE.Service) {
10303
+ if (product.type === chunkVV3GTDIP_js.PRODUCT_TYPE.Service) {
8786
10304
  if (product.duration_unit && RENTAL_UNITS.has(product.duration_unit)) {
8787
10305
  return "rental" /* Rental */;
8788
10306
  }
8789
- if (product.duration_unit === chunkJYPLT56O_js.DURATION_UNIT.Nights) {
10307
+ if (product.duration_unit === chunkVV3GTDIP_js.DURATION_UNIT.Nights) {
8790
10308
  return "accommodation" /* Accommodation */;
8791
10309
  }
8792
10310
  if (product.duration_unit && LEASE_UNITS.has(product.duration_unit)) {
@@ -8797,10 +10315,10 @@ function resolveCardVariant(product) {
8797
10315
  }
8798
10316
  return "standard" /* Standard */;
8799
10317
  }
8800
- if (product.render_hint === chunkJYPLT56O_js.RENDER_HINT.Food) {
10318
+ if (product.render_hint === chunkVV3GTDIP_js.RENDER_HINT.Food) {
8801
10319
  return "food" /* Food */;
8802
10320
  }
8803
- if (product.render_hint === chunkJYPLT56O_js.RENDER_HINT.Physical) {
10321
+ if (product.render_hint === chunkVV3GTDIP_js.RENDER_HINT.Physical) {
8804
10322
  return "retail" /* Retail */;
8805
10323
  }
8806
10324
  return "retail" /* Retail */;
@@ -8821,22 +10339,22 @@ function ProductCard({
8821
10339
  classNames
8822
10340
  }) {
8823
10341
  const mode = displayMode ?? product.display_mode ?? "card";
8824
- const [isOpen, setIsOpen] = React11.useState(false);
8825
- const [shouldFetch, setShouldFetch] = React11.useState(false);
10342
+ const [isOpen, setIsOpen] = React12.useState(false);
10343
+ const [shouldFetch, setShouldFetch] = React12.useState(false);
8826
10344
  const { product: productDetails } = useProduct(
8827
10345
  product.slug ?? product.id,
8828
10346
  { enabled: shouldFetch || isOpen }
8829
10347
  );
8830
- const handlePrefetch = React11.useCallback(() => {
10348
+ const handlePrefetch = React12.useCallback(() => {
8831
10349
  setShouldFetch(true);
8832
10350
  }, []);
8833
- const handleOpenChange = React11.useCallback((open) => {
10351
+ const handleOpenChange = React12.useCallback((open) => {
8834
10352
  setIsOpen(open);
8835
10353
  if (open) {
8836
10354
  setShouldFetch(true);
8837
10355
  }
8838
10356
  }, []);
8839
- const handleClose = React11.useCallback(() => {
10357
+ const handleClose = React12.useCallback(() => {
8840
10358
  setIsOpen(false);
8841
10359
  }, []);
8842
10360
  const imageUrl = product.image_url || product.images?.[0];
@@ -8965,13 +10483,13 @@ function ProductGrid({
8965
10483
  className,
8966
10484
  classNames
8967
10485
  }) {
8968
- const rawId = React11__default.default.useId();
10486
+ const rawId = React12__default.default.useId();
8969
10487
  const gridId = `cimplify-grid-${rawId.replace(/:/g, "")}`;
8970
10488
  const sm = columns?.sm ?? 1;
8971
10489
  const md = columns?.md ?? 2;
8972
10490
  const lg = columns?.lg ?? 3;
8973
10491
  const xl = columns?.xl ?? 4;
8974
- const css = React11__default.default.useMemo(
10492
+ const css = React12__default.default.useMemo(
8975
10493
  () => [
8976
10494
  `#${gridId}{display:grid;grid-template-columns:repeat(${sm},1fr);gap:1rem}`,
8977
10495
  `@media(min-width:768px){#${gridId}{grid-template-columns:repeat(${md},1fr)}}`,
@@ -9049,12 +10567,12 @@ function SearchInput({
9049
10567
  className,
9050
10568
  classNames
9051
10569
  }) {
9052
- const mergedOptions = React11.useMemo(
10570
+ const mergedOptions = React12.useMemo(
9053
10571
  () => categoryId ? { ...searchOptions, category: categoryId } : searchOptions ?? {},
9054
10572
  [searchOptions, categoryId]
9055
10573
  );
9056
10574
  const { results, isLoading, query, setQuery, clear } = useSearch(mergedOptions);
9057
- const handleValueChange = React11.useCallback(
10575
+ const handleValueChange = React12.useCallback(
9058
10576
  (value) => {
9059
10577
  setQuery(value);
9060
10578
  },
@@ -9153,7 +10671,7 @@ function CategoryFilter({
9153
10671
  classNames
9154
10672
  }) {
9155
10673
  const { categories, isLoading } = useCategories();
9156
- const handleValueChange = React11.useCallback(
10674
+ const handleValueChange = React12.useCallback(
9157
10675
  (value) => {
9158
10676
  onSelect(value === ALL_VALUE ? null : String(value));
9159
10677
  },
@@ -9220,10 +10738,10 @@ function DiscountInput({
9220
10738
  className,
9221
10739
  classNames
9222
10740
  }) {
9223
- const [code, setCode] = React11.useState("");
9224
- const [appliedValidation, setAppliedValidation] = React11.useState(null);
10741
+ const [code, setCode] = React12.useState("");
10742
+ const [appliedValidation, setAppliedValidation] = React12.useState(null);
9225
10743
  const { validate, isValidating, error } = useValidateDiscount();
9226
- const handleApply = React11.useCallback(async () => {
10744
+ const handleApply = React12.useCallback(async () => {
9227
10745
  const trimmed = code.trim();
9228
10746
  if (!trimmed) return;
9229
10747
  const result = await validate(trimmed, orderSubtotal, locationId);
@@ -9236,12 +10754,12 @@ function DiscountInput({
9236
10754
  }
9237
10755
  }
9238
10756
  }, [code, validate, orderSubtotal, locationId, onApply]);
9239
- const handleClear = React11.useCallback(() => {
10757
+ const handleClear = React12.useCallback(() => {
9240
10758
  setCode("");
9241
10759
  setAppliedValidation(null);
9242
10760
  onClear?.();
9243
10761
  }, [onClear]);
9244
- const handleKeyDown = React11.useCallback(
10762
+ const handleKeyDown = React12.useCallback(
9245
10763
  (e) => {
9246
10764
  if (e.key === "Enter") {
9247
10765
  void handleApply();
@@ -9332,7 +10850,7 @@ function CategoryGrid({
9332
10850
  enabled: categoriesProp === void 0
9333
10851
  });
9334
10852
  const categories = categoriesProp ?? fetched;
9335
- const rawId = React11__default.default.useId();
10853
+ const rawId = React12__default.default.useId();
9336
10854
  const gridId = `cimplify-cat-grid-${rawId.replace(/:/g, "")}`;
9337
10855
  const sm = columns?.sm ?? 2;
9338
10856
  const md = columns?.md ?? 3;
@@ -9558,7 +11076,7 @@ function OrderSummary({
9558
11076
  /* @__PURE__ */ jsxRuntime.jsx("p", { children: order.delivery_address })
9559
11077
  ] }),
9560
11078
  /* @__PURE__ */ jsxRuntime.jsx("div", { "data-cimplify-order-items": true, className: classNames?.items, children: order.items.map(
9561
- (item) => renderLineItem ? /* @__PURE__ */ jsxRuntime.jsx(React11__default.default.Fragment, { children: renderLineItem(item) }, item.id) : /* @__PURE__ */ jsxRuntime.jsxs("div", { "data-cimplify-order-line-item": true, className: classNames?.lineItem, children: [
11079
+ (item) => renderLineItem ? /* @__PURE__ */ jsxRuntime.jsx(React12__default.default.Fragment, { children: renderLineItem(item) }, item.id) : /* @__PURE__ */ jsxRuntime.jsxs("div", { "data-cimplify-order-line-item": true, className: classNames?.lineItem, children: [
9562
11080
  /* @__PURE__ */ jsxRuntime.jsxs("div", { "data-cimplify-order-line-info": true, children: [
9563
11081
  /* @__PURE__ */ jsxRuntime.jsxs("span", { "data-cimplify-order-line-qty": true, children: [
9564
11082
  item.quantity,
@@ -10216,13 +11734,13 @@ function BookingPage({
10216
11734
  const { addItem } = useCart();
10217
11735
  const { client } = useCimplifyClient();
10218
11736
  const isReschedule = existingBooking !== void 0;
10219
- const [step, setStep] = React11.useState(STEP.SELECT_SLOT);
10220
- const [selectedSlot, setSelectedSlot] = React11.useState(null);
10221
- const [selectedDate, setSelectedDate] = React11.useState(null);
10222
- const [selectedStaffId, setSelectedStaffId] = React11.useState(null);
10223
- const [selectedResourceId, setSelectedResourceId] = React11.useState(null);
10224
- const [isSubmitting, setIsSubmitting] = React11.useState(false);
10225
- const [error, setError] = React11.useState(null);
11737
+ const [step, setStep] = React12.useState(STEP.SELECT_SLOT);
11738
+ const [selectedSlot, setSelectedSlot] = React12.useState(null);
11739
+ const [selectedDate, setSelectedDate] = React12.useState(null);
11740
+ const [selectedStaffId, setSelectedStaffId] = React12.useState(null);
11741
+ const [selectedResourceId, setSelectedResourceId] = React12.useState(null);
11742
+ const [isSubmitting, setIsSubmitting] = React12.useState(false);
11743
+ const [error, setError] = React12.useState(null);
10226
11744
  const hasResourceStep = resources && resources.length > 0;
10227
11745
  const hasStaffStep = staff && staff.length > 0;
10228
11746
  const depositType = product?.deposit_type;
@@ -10230,7 +11748,7 @@ function BookingPage({
10230
11748
  const hasDeposit = depositType !== void 0 && depositType !== "none" && depositAmount !== void 0 && chunk7Y2O3E4D_js.parsePrice(depositAmount) !== 0;
10231
11749
  const cancellationMinutes = product?.cancellation_window_minutes;
10232
11750
  const noShowFee = product?.no_show_fee;
10233
- const handleSlotSelect = React11.useCallback(
11751
+ const handleSlotSelect = React12.useCallback(
10234
11752
  (slot, date) => {
10235
11753
  setSelectedSlot(slot);
10236
11754
  setSelectedDate(date);
@@ -10245,7 +11763,7 @@ function BookingPage({
10245
11763
  },
10246
11764
  [hasResourceStep, hasStaffStep]
10247
11765
  );
10248
- const handleResourceSelect = React11.useCallback(
11766
+ const handleResourceSelect = React12.useCallback(
10249
11767
  (resourceId) => {
10250
11768
  setSelectedResourceId(resourceId);
10251
11769
  if (hasStaffStep) {
@@ -10256,11 +11774,11 @@ function BookingPage({
10256
11774
  },
10257
11775
  [hasStaffStep]
10258
11776
  );
10259
- const handleStaffSelect = React11.useCallback((staffId) => {
11777
+ const handleStaffSelect = React12.useCallback((staffId) => {
10260
11778
  setSelectedStaffId(staffId);
10261
11779
  setStep(STEP.CONFIRM);
10262
11780
  }, []);
10263
- const handleBack = React11.useCallback(() => {
11781
+ const handleBack = React12.useCallback(() => {
10264
11782
  setError(null);
10265
11783
  if (step === STEP.CONFIRM && hasStaffStep) {
10266
11784
  setStep(STEP.SELECT_STAFF);
@@ -10274,7 +11792,7 @@ function BookingPage({
10274
11792
  onBack?.();
10275
11793
  }
10276
11794
  }, [step, hasStaffStep, hasResourceStep, onBack]);
10277
- const handleConfirm = React11.useCallback(async () => {
11795
+ const handleConfirm = React12.useCallback(async () => {
10278
11796
  if (!selectedSlot || !selectedDate) return;
10279
11797
  setIsSubmitting(true);
10280
11798
  setError(null);
@@ -10476,9 +11994,9 @@ function BookingsPage({
10476
11994
  className,
10477
11995
  classNames
10478
11996
  }) {
10479
- const [filter, setFilter] = React11.useState("all");
10480
- const [selectedBooking, setSelectedBooking] = React11.useState(null);
10481
- const handleBookingClick = React11.useCallback(
11997
+ const [filter, setFilter] = React12.useState("all");
11998
+ const [selectedBooking, setSelectedBooking] = React12.useState(null);
11999
+ const handleBookingClick = React12.useCallback(
10482
12000
  (booking) => {
10483
12001
  if (onBookingNavigate) {
10484
12002
  onBookingNavigate(booking);
@@ -10488,7 +12006,7 @@ function BookingsPage({
10488
12006
  },
10489
12007
  [onBookingNavigate]
10490
12008
  );
10491
- const handleBack = React11.useCallback(() => {
12009
+ const handleBack = React12.useCallback(() => {
10492
12010
  setSelectedBooking(null);
10493
12011
  }, []);
10494
12012
  if (selectedBooking && !onBookingNavigate) {
@@ -10718,7 +12236,7 @@ function DefaultCatalogueLayout({
10718
12236
  /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-lg font-medium", children: "No products found" }),
10719
12237
  /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm text-muted-foreground mt-1", children: "Try adjusting your filters" })
10720
12238
  ] }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: "grid grid-cols-2 md:grid-cols-3 gap-4", children: products.map(
10721
- (product) => renderCard ? /* @__PURE__ */ jsxRuntime.jsx(React11__default.default.Fragment, { children: renderCard(product) }, product.id) : /* @__PURE__ */ jsxRuntime.jsx(
12239
+ (product) => renderCard ? /* @__PURE__ */ jsxRuntime.jsx(React12__default.default.Fragment, { children: renderCard(product) }, product.id) : /* @__PURE__ */ jsxRuntime.jsx(
10722
12240
  ProductCard,
10723
12241
  {
10724
12242
  product,
@@ -10825,7 +12343,7 @@ function CompactCatalogueLayout({
10825
12343
  /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-lg font-medium", children: "No items found" }),
10826
12344
  /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm text-muted-foreground mt-1", children: "Try a different category or search" })
10827
12345
  ] }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: "grid grid-cols-2 lg:grid-cols-3 gap-5", children: products.map(
10828
- (product) => renderCard ? /* @__PURE__ */ jsxRuntime.jsx(React11__default.default.Fragment, { children: renderCard(product) }, product.id) : /* @__PURE__ */ jsxRuntime.jsx(
12346
+ (product) => renderCard ? /* @__PURE__ */ jsxRuntime.jsx(React12__default.default.Fragment, { children: renderCard(product) }, product.id) : /* @__PURE__ */ jsxRuntime.jsx(
10829
12347
  ProductCard,
10830
12348
  {
10831
12349
  product,
@@ -10848,8 +12366,8 @@ var BUILT_IN_LAYOUTS = {
10848
12366
  ["compact" /* Compact */]: CompactCatalogueLayout
10849
12367
  };
10850
12368
  function useDebounce(value, delay) {
10851
- const [debounced, setDebounced] = React11__default.default.useState(value);
10852
- React11__default.default.useEffect(() => {
12369
+ const [debounced, setDebounced] = React12__default.default.useState(value);
12370
+ React12__default.default.useEffect(() => {
10853
12371
  const timer = setTimeout(() => setDebounced(value), delay);
10854
12372
  return () => clearTimeout(timer);
10855
12373
  }, [value, delay]);
@@ -10873,15 +12391,15 @@ function CataloguePage({
10873
12391
  className,
10874
12392
  classNames
10875
12393
  }) {
10876
- const [selectedCategory, setSelectedCategory] = React11.useState(null);
10877
- const [searchQuery, setSearchQuery] = React11.useState("");
10878
- const [sortBy, setSortBy] = React11.useState(defaultSort?.by ?? "created_at");
10879
- const [sortOrder, setSortOrder] = React11.useState(defaultSort?.order ?? "desc");
10880
- const [inStockOnly, setInStockOnly] = React11.useState(false);
10881
- const [selectedTags, setSelectedTags] = React11.useState([]);
10882
- const [minPrice, setMinPrice] = React11.useState("");
10883
- const [maxPrice, setMaxPrice] = React11.useState("");
10884
- const [page, setPage] = React11.useState(1);
12394
+ const [selectedCategory, setSelectedCategory] = React12.useState(null);
12395
+ const [searchQuery, setSearchQuery] = React12.useState("");
12396
+ const [sortBy, setSortBy] = React12.useState(defaultSort?.by ?? "created_at");
12397
+ const [sortOrder, setSortOrder] = React12.useState(defaultSort?.order ?? "desc");
12398
+ const [inStockOnly, setInStockOnly] = React12.useState(false);
12399
+ const [selectedTags, setSelectedTags] = React12.useState([]);
12400
+ const [minPrice, setMinPrice] = React12.useState("");
12401
+ const [maxPrice, setMaxPrice] = React12.useState("");
12402
+ const [page, setPage] = React12.useState(1);
10885
12403
  const debouncedSearch = useDebounce(searchQuery, 300);
10886
12404
  const { products: fetchedProducts, isLoading, pagination } = useProducts({
10887
12405
  enabled: productsProp === void 0,
@@ -10902,22 +12420,22 @@ function CataloguePage({
10902
12420
  const products = productsProp ?? fetchedProducts;
10903
12421
  const categories = categoriesProp ?? fetchedCategories;
10904
12422
  const totalPages = pagination?.total_pages ?? 1;
10905
- const handleCategoryChange = React11.useCallback((id) => {
12423
+ const handleCategoryChange = React12.useCallback((id) => {
10906
12424
  setSelectedCategory(id);
10907
12425
  setPage(1);
10908
12426
  }, []);
10909
- const handleSortChange = React11.useCallback((by, order) => {
12427
+ const handleSortChange = React12.useCallback((by, order) => {
10910
12428
  setSortBy(by);
10911
12429
  setSortOrder(order);
10912
12430
  setPage(1);
10913
12431
  }, []);
10914
- const handleTagToggle = React11.useCallback((tag) => {
12432
+ const handleTagToggle = React12.useCallback((tag) => {
10915
12433
  setSelectedTags(
10916
12434
  (prev) => prev.includes(tag) ? prev.filter((t) => t !== tag) : [...prev, tag]
10917
12435
  );
10918
12436
  setPage(1);
10919
12437
  }, []);
10920
- const handlePriceRangeChange = React11.useCallback((min, max) => {
12438
+ const handlePriceRangeChange = React12.useCallback((min, max) => {
10921
12439
  setMinPrice(min);
10922
12440
  setMaxPrice(max);
10923
12441
  setPage(1);
@@ -11105,7 +12623,8 @@ function DefaultProductLayout({
11105
12623
  showRelated = true,
11106
12624
  className
11107
12625
  }) {
11108
- const images = product.images || (product.image_url ? [product.image_url] : []);
12626
+ const [selectedVariantId, setSelectedVariantId] = React12__default.default.useState();
12627
+ const images = chunkVV3GTDIP_js.resolveGallery(product, selectedVariantId);
11109
12628
  const hasRange = product.quantity_pricing && product.quantity_pricing.length > 1 || product.variants && product.variants.length > 1;
11110
12629
  const onSale = chunk7Y2O3E4D_js.isOnSale(product);
11111
12630
  const hasPhysicalDetails = product.sku || product.vendor || product.material;
@@ -11170,7 +12689,8 @@ function DefaultProductLayout({
11170
12689
  ProductCustomizer,
11171
12690
  {
11172
12691
  product,
11173
- onAddToCart
12692
+ onAddToCart,
12693
+ onVariantChange: (variantId) => setSelectedVariantId(variantId)
11174
12694
  }
11175
12695
  )
11176
12696
  ] })
@@ -11740,25 +13260,25 @@ function resolveTemplateKey(product) {
11740
13260
  if (typeof metaTemplate === "string" && metaTemplate.trim()) {
11741
13261
  return metaTemplate.trim();
11742
13262
  }
11743
- if (product.type === chunkJYPLT56O_js.PRODUCT_TYPE.Bundle) {
13263
+ if (product.type === chunkVV3GTDIP_js.PRODUCT_TYPE.Bundle) {
11744
13264
  return "bundle" /* Bundle */;
11745
13265
  }
11746
- if (product.type === chunkJYPLT56O_js.PRODUCT_TYPE.Composite) {
13266
+ if (product.type === chunkVV3GTDIP_js.PRODUCT_TYPE.Composite) {
11747
13267
  return "composite" /* Composite */;
11748
13268
  }
11749
13269
  if (product.quantity_pricing && product.quantity_pricing.length > 1) {
11750
13270
  return "wholesale" /* Wholesale */;
11751
13271
  }
11752
- if (product.type === chunkJYPLT56O_js.PRODUCT_TYPE.Service) {
13272
+ if (product.type === chunkVV3GTDIP_js.PRODUCT_TYPE.Service) {
11753
13273
  return "service" /* Service */;
11754
13274
  }
11755
- if (product.type === chunkJYPLT56O_js.PRODUCT_TYPE.Digital) {
13275
+ if (product.type === chunkVV3GTDIP_js.PRODUCT_TYPE.Digital) {
11756
13276
  return "digital" /* Digital */;
11757
13277
  }
11758
- if (product.render_hint === chunkJYPLT56O_js.RENDER_HINT.Food) {
13278
+ if (product.render_hint === chunkVV3GTDIP_js.RENDER_HINT.Food) {
11759
13279
  return "food" /* Food */;
11760
13280
  }
11761
- if (product.render_hint === chunkJYPLT56O_js.RENDER_HINT.Physical) {
13281
+ if (product.render_hint === chunkVV3GTDIP_js.RENDER_HINT.Physical) {
11762
13282
  return "physical" /* Physical */;
11763
13283
  }
11764
13284
  return "default" /* Default */;
@@ -12021,36 +13541,36 @@ function CartPage({
12021
13541
  }
12022
13542
  ) });
12023
13543
  }
12024
- var CartDrawerContext = React11.createContext(null);
13544
+ var CartDrawerContext = React12.createContext(null);
12025
13545
  function useCartDrawer() {
12026
- const ctx = React11.useContext(CartDrawerContext);
13546
+ const ctx = React12.useContext(CartDrawerContext);
12027
13547
  if (!ctx) {
12028
13548
  throw new Error("useCartDrawer must be used within <CartDrawerProvider>");
12029
13549
  }
12030
13550
  return ctx;
12031
13551
  }
12032
13552
  function CartDrawerProvider({ children, openOnAdd = true }) {
12033
- const [isOpen, setIsOpen] = React11.useState(false);
13553
+ const [isOpen, setIsOpen] = React12.useState(false);
12034
13554
  const cart = useCart();
12035
- const lastPendingRef = React11.useRef(0);
12036
- const open = React11.useCallback(() => setIsOpen(true), []);
12037
- const close = React11.useCallback(() => setIsOpen(false), []);
12038
- const toggle = React11.useCallback(() => setIsOpen((v) => !v), []);
12039
- React11.useEffect(() => {
13555
+ const lastPendingRef = React12.useRef(0);
13556
+ const open = React12.useCallback(() => setIsOpen(true), []);
13557
+ const close = React12.useCallback(() => setIsOpen(false), []);
13558
+ const toggle = React12.useCallback(() => setIsOpen((v) => !v), []);
13559
+ React12.useEffect(() => {
12040
13560
  if (!openOnAdd) return;
12041
13561
  if (cart.pendingOpCount > lastPendingRef.current && cart.pendingOpCount > 0) {
12042
13562
  setIsOpen(true);
12043
13563
  }
12044
13564
  lastPendingRef.current = cart.pendingOpCount;
12045
13565
  }, [cart.pendingOpCount, openOnAdd]);
12046
- const value = React11.useMemo(() => ({ isOpen, open, close, toggle }), [isOpen, open, close, toggle]);
13566
+ const value = React12.useMemo(() => ({ isOpen, open, close, toggle }), [isOpen, open, close, toggle]);
12047
13567
  return /* @__PURE__ */ jsxRuntime.jsx(CartDrawerContext.Provider, { value, children });
12048
13568
  }
12049
13569
  function useAnimatedNumber(target, durationMs = 250) {
12050
- const [value, setValue] = React11.useState(target);
12051
- const fromRef = React11.useRef(target);
12052
- const startRef = React11.useRef(null);
12053
- React11.useEffect(() => {
13570
+ const [value, setValue] = React12.useState(target);
13571
+ const fromRef = React12.useRef(target);
13572
+ const startRef = React12.useRef(null);
13573
+ React12.useEffect(() => {
12054
13574
  fromRef.current = value;
12055
13575
  startRef.current = null;
12056
13576
  let raf = 0;
@@ -12078,7 +13598,7 @@ function CartDrawer({
12078
13598
  const cart = useCart();
12079
13599
  const subtotalNum = chunk7Y2O3E4D_js.parsePrice(cart.subtotal);
12080
13600
  const animatedSubtotal = useAnimatedNumber(subtotalNum);
12081
- React11.useEffect(() => {
13601
+ React12.useEffect(() => {
12082
13602
  if (!isOpen) return;
12083
13603
  const original = document.body.style.overflow;
12084
13604
  document.body.style.overflow = "hidden";
@@ -12176,7 +13696,7 @@ function CartDrawer({
12176
13696
  }
12177
13697
  ) })
12178
13698
  ] }),
12179
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex-1 overflow-y-auto px-6", children: cart.isEmpty ? /* @__PURE__ */ jsxRuntime.jsx(EmptyState, { onShop: handleShop }) : /* @__PURE__ */ jsxRuntime.jsx(CartSummary, { showTotals: false, showCheckoutButton: false }) }),
13699
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex-1 overflow-y-auto px-6", children: cart.isEmpty ? /* @__PURE__ */ jsxRuntime.jsx(EmptyState2, { onShop: handleShop }) : /* @__PURE__ */ jsxRuntime.jsx(CartSummary, { showTotals: false, showCheckoutButton: false }) }),
12180
13700
  !cart.isEmpty && /* @__PURE__ */ jsxRuntime.jsxs("footer", { className: "border-t border-border px-6 py-5 shrink-0 space-y-3 bg-background", children: [
12181
13701
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-baseline justify-between", children: [
12182
13702
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-sm text-muted-foreground", children: "Subtotal" }),
@@ -12216,7 +13736,7 @@ function CartDrawer({
12216
13736
  }
12217
13737
  );
12218
13738
  }
12219
- function EmptyState({ onShop }) {
13739
+ function EmptyState2({ onShop }) {
12220
13740
  return /* @__PURE__ */ jsxRuntime.jsx("div", { "data-cimplify-cart-empty": true, className: "h-full grid place-items-center text-center py-16", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-5 max-w-[260px]", children: [
12221
13741
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "relative w-20 h-20 mx-auto", children: [
12222
13742
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "absolute inset-0 rounded-full bg-muted" }),
@@ -12283,9 +13803,9 @@ function DefaultCollectionLayout({
12283
13803
  onQuickAdd,
12284
13804
  className
12285
13805
  }) {
12286
- const [searchQuery, setSearchQuery] = React11.useState("");
12287
- const [activeTag, setActiveTag] = React11.useState(null);
12288
- const collectionTags = React11.useMemo(() => {
13806
+ const [searchQuery, setSearchQuery] = React12.useState("");
13807
+ const [activeTag, setActiveTag] = React12.useState(null);
13808
+ const collectionTags = React12.useMemo(() => {
12289
13809
  const tagSet = /* @__PURE__ */ new Set();
12290
13810
  for (const p of products) {
12291
13811
  if (p.tags) {
@@ -12294,7 +13814,7 @@ function DefaultCollectionLayout({
12294
13814
  }
12295
13815
  return Array.from(tagSet).slice(0, 6);
12296
13816
  }, [products]);
12297
- const filtered = React11.useMemo(() => {
13817
+ const filtered = React12.useMemo(() => {
12298
13818
  let result = products;
12299
13819
  if (searchQuery.trim().length >= 2) {
12300
13820
  const q = searchQuery.toLowerCase();
@@ -12369,7 +13889,7 @@ function DefaultCollectionLayout({
12369
13889
  ] })
12370
13890
  ] }),
12371
13891
  filtered.length > 0 ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "grid grid-cols-2 md:grid-cols-3 lg:grid-cols-4 gap-4", children: filtered.map(
12372
- (product) => renderCard ? /* @__PURE__ */ jsxRuntime.jsx(React11__default.default.Fragment, { children: renderCard(product) }, product.id) : /* @__PURE__ */ jsxRuntime.jsx(
13892
+ (product) => renderCard ? /* @__PURE__ */ jsxRuntime.jsx(React12__default.default.Fragment, { children: renderCard(product) }, product.id) : /* @__PURE__ */ jsxRuntime.jsx(
12373
13893
  ProductCard,
12374
13894
  {
12375
13895
  product,
@@ -12422,7 +13942,7 @@ function FeaturedCollectionLayout({
12422
13942
  ] })
12423
13943
  ] }),
12424
13944
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-6", children: products.map(
12425
- (product) => renderCard ? /* @__PURE__ */ jsxRuntime.jsx(React11__default.default.Fragment, { children: renderCard(product) }, product.id) : /* @__PURE__ */ jsxRuntime.jsx(
13945
+ (product) => renderCard ? /* @__PURE__ */ jsxRuntime.jsx(React12__default.default.Fragment, { children: renderCard(product) }, product.id) : /* @__PURE__ */ jsxRuntime.jsx(
12426
13946
  ProductCard,
12427
13947
  {
12428
13948
  product,
@@ -12444,10 +13964,10 @@ function CatalogueCollectionLayout({
12444
13964
  onQuickAdd,
12445
13965
  className
12446
13966
  }) {
12447
- const [searchQuery, setSearchQuery] = React11.useState("");
12448
- const [activeCategory, setActiveCategory] = React11.useState(null);
12449
- const [sortBy, setSortBy] = React11.useState("default");
12450
- const categories = React11.useMemo(() => {
13967
+ const [searchQuery, setSearchQuery] = React12.useState("");
13968
+ const [activeCategory, setActiveCategory] = React12.useState(null);
13969
+ const [sortBy, setSortBy] = React12.useState("default");
13970
+ const categories = React12.useMemo(() => {
12451
13971
  const cats = /* @__PURE__ */ new Map();
12452
13972
  for (const p of products) {
12453
13973
  if (p.category_id && p.tags) {
@@ -12458,7 +13978,7 @@ function CatalogueCollectionLayout({
12458
13978
  }
12459
13979
  return Array.from(cats.values()).slice(0, 8);
12460
13980
  }, [products]);
12461
- const filtered = React11.useMemo(() => {
13981
+ const filtered = React12.useMemo(() => {
12462
13982
  let result = products;
12463
13983
  if (searchQuery.trim().length >= 2) {
12464
13984
  const q = searchQuery.toLowerCase();
@@ -12546,7 +14066,7 @@ function CatalogueCollectionLayout({
12546
14066
  ] })
12547
14067
  ] }),
12548
14068
  filtered.length > 0 ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "grid grid-cols-2 md:grid-cols-3 lg:grid-cols-4 gap-4", children: filtered.map(
12549
- (product) => renderCard ? /* @__PURE__ */ jsxRuntime.jsx(React11__default.default.Fragment, { children: renderCard(product) }, product.id) : /* @__PURE__ */ jsxRuntime.jsx(
14069
+ (product) => renderCard ? /* @__PURE__ */ jsxRuntime.jsx(React12__default.default.Fragment, { children: renderCard(product) }, product.id) : /* @__PURE__ */ jsxRuntime.jsx(
12550
14070
  ProductCard,
12551
14071
  {
12552
14072
  product,
@@ -12725,13 +14245,13 @@ function OrderHistoryPage({
12725
14245
  className,
12726
14246
  classNames
12727
14247
  }) {
12728
- const [statusFilter, setStatusFilter] = React11.useState(void 0);
12729
- const [selectedOrder, setSelectedOrder] = React11.useState(null);
12730
- const handleTabChange = React11.useCallback((value) => {
14248
+ const [statusFilter, setStatusFilter] = React12.useState(void 0);
14249
+ const [selectedOrder, setSelectedOrder] = React12.useState(null);
14250
+ const handleTabChange = React12.useCallback((value) => {
12731
14251
  const filter = STATUS_FILTERS.find((f) => f.tabValue === value);
12732
14252
  setStatusFilter(filter?.value);
12733
14253
  }, []);
12734
- const handleOrderClick = React11.useCallback(
14254
+ const handleOrderClick = React12.useCallback(
12735
14255
  (order) => {
12736
14256
  if (onOrderNavigate) {
12737
14257
  onOrderNavigate(order);
@@ -12741,7 +14261,7 @@ function OrderHistoryPage({
12741
14261
  },
12742
14262
  [onOrderNavigate]
12743
14263
  );
12744
- const handleBack = React11.useCallback(() => {
14264
+ const handleBack = React12.useCallback(() => {
12745
14265
  setSelectedOrder(null);
12746
14266
  }, []);
12747
14267
  const activeTabValue = STATUS_FILTERS.find((f) => f.value === statusFilter)?.tabValue ?? "all";
@@ -12926,7 +14446,7 @@ function DefaultSearchLayout({
12926
14446
  /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm text-muted-foreground mt-1", children: "Try a different search term" }),
12927
14447
  /* @__PURE__ */ jsxRuntime.jsx("button", { onClick: clear, className: "text-sm font-medium text-primary mt-4 hover:underline", children: "Clear search" })
12928
14448
  ] }) : results.length > 0 ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "grid grid-cols-2 md:grid-cols-3 gap-4", children: results.map(
12929
- (product) => renderCard ? /* @__PURE__ */ jsxRuntime.jsx(React11__default.default.Fragment, { children: renderCard(product) }, product.id) : /* @__PURE__ */ jsxRuntime.jsx(
14449
+ (product) => renderCard ? /* @__PURE__ */ jsxRuntime.jsx(React12__default.default.Fragment, { children: renderCard(product) }, product.id) : /* @__PURE__ */ jsxRuntime.jsx(
12930
14450
  ProductCard,
12931
14451
  {
12932
14452
  product,
@@ -13028,7 +14548,7 @@ function CompactSearchLayout({
13028
14548
  /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm text-muted-foreground mt-1", children: "Try a different search term" }),
13029
14549
  /* @__PURE__ */ jsxRuntime.jsx("button", { onClick: clear, className: "text-sm font-medium text-primary mt-4 hover:underline", children: "Clear search" })
13030
14550
  ] }) : results.length > 0 ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "grid grid-cols-2 lg:grid-cols-3 gap-5", children: results.map(
13031
- (product) => renderCard ? /* @__PURE__ */ jsxRuntime.jsx(React11__default.default.Fragment, { children: renderCard(product) }, product.id) : /* @__PURE__ */ jsxRuntime.jsx(
14551
+ (product) => renderCard ? /* @__PURE__ */ jsxRuntime.jsx(React12__default.default.Fragment, { children: renderCard(product) }, product.id) : /* @__PURE__ */ jsxRuntime.jsx(
13032
14552
  ProductCard,
13033
14553
  {
13034
14554
  product,
@@ -13359,11 +14879,11 @@ function DeliveryEstimate({
13359
14879
  }) {
13360
14880
  const context = useOptionalCimplifyClient();
13361
14881
  const client = context?.client ?? null;
13362
- const [result, setResult] = React11.useState(null);
13363
- const [isLoading, setIsLoading] = React11.useState(true);
13364
- const [error, setError] = React11.useState(null);
13365
- const requestIdRef = React11.useRef(0);
13366
- React11.useEffect(() => {
14882
+ const [result, setResult] = React12.useState(null);
14883
+ const [isLoading, setIsLoading] = React12.useState(true);
14884
+ const [error, setError] = React12.useState(null);
14885
+ const requestIdRef = React12.useRef(0);
14886
+ React12.useEffect(() => {
13367
14887
  if (!client) return;
13368
14888
  const nextRequestId = ++requestIdRef.current;
13369
14889
  setIsLoading(true);
@@ -13444,10 +14964,10 @@ function CurrencySelector({
13444
14964
  }) {
13445
14965
  const context = useOptionalCimplifyClient();
13446
14966
  const client = context?.client ?? null;
13447
- const [rates, setRates] = React11.useState({});
13448
- const [isLoadingRates, setIsLoadingRates] = React11.useState(false);
13449
- const requestIdRef = React11.useRef(0);
13450
- React11.useEffect(() => {
14967
+ const [rates, setRates] = React12.useState({});
14968
+ const [isLoadingRates, setIsLoadingRates] = React12.useState(false);
14969
+ const requestIdRef = React12.useRef(0);
14970
+ React12.useEffect(() => {
13451
14971
  if (!showRate || !baseCurrency || !client) return;
13452
14972
  const targets = currencies.filter((c) => c !== baseCurrency);
13453
14973
  if (targets.length === 0) return;
@@ -13510,11 +15030,11 @@ function ChatWidget({
13510
15030
  }) {
13511
15031
  const context = useOptionalCimplifyClient();
13512
15032
  const client = clientProp ?? context?.client;
13513
- const [open, setOpen] = React11.useState(defaultOpen);
13514
- const [unread, setUnread] = React11.useState(0);
15033
+ const [open, setOpen] = React12.useState(defaultOpen);
15034
+ const [unread, setUnread] = React12.useState(0);
13515
15035
  const { messages, isLoading, isSending, error, isActive, send, startConversation } = useChat({ client, pollInterval });
13516
- const prevCountRef = React11.useRef(messages.length);
13517
- React11.useEffect(() => {
15036
+ const prevCountRef = React12.useRef(messages.length);
15037
+ React12.useEffect(() => {
13518
15038
  if (!open && messages.length > prevCountRef.current) {
13519
15039
  const newMessages = messages.slice(prevCountRef.current);
13520
15040
  const incomingCount = newMessages.filter(
@@ -13524,11 +15044,11 @@ function ChatWidget({
13524
15044
  }
13525
15045
  prevCountRef.current = messages.length;
13526
15046
  }, [messages, open]);
13527
- const handleOpen = React11.useCallback(() => {
15047
+ const handleOpen = React12.useCallback(() => {
13528
15048
  setOpen(true);
13529
15049
  setUnread(0);
13530
15050
  }, []);
13531
- const handleClose = React11.useCallback(() => setOpen(false), []);
15051
+ const handleClose = React12.useCallback(() => setOpen(false), []);
13532
15052
  const isLeft = position === "bottom-left";
13533
15053
  return /* @__PURE__ */ jsxRuntime.jsxs(
13534
15054
  "div",
@@ -13770,8 +15290,8 @@ function MessageList({
13770
15290
  isSending,
13771
15291
  className
13772
15292
  }) {
13773
- const bottomRef = React11.useRef(null);
13774
- React11.useEffect(() => {
15293
+ const bottomRef = React12.useRef(null);
15294
+ React12.useEffect(() => {
13775
15295
  bottomRef.current?.scrollIntoView({ behavior: "smooth" });
13776
15296
  }, [messages.length, isSending]);
13777
15297
  return /* @__PURE__ */ jsxRuntime.jsxs(
@@ -13831,9 +15351,9 @@ function ChatInput({
13831
15351
  onSend,
13832
15352
  className
13833
15353
  }) {
13834
- const [value, setValue] = React11.useState("");
13835
- const textareaRef = React11.useRef(null);
13836
- const handleSend = React11.useCallback(() => {
15354
+ const [value, setValue] = React12.useState("");
15355
+ const textareaRef = React12.useRef(null);
15356
+ const handleSend = React12.useCallback(() => {
13837
15357
  const trimmed = value.trim();
13838
15358
  if (!trimmed || isSending) return;
13839
15359
  setValue("");
@@ -13842,7 +15362,7 @@ function ChatInput({
13842
15362
  }
13843
15363
  onSend(trimmed);
13844
15364
  }, [value, isSending, onSend]);
13845
- const handleKeyDown = React11.useCallback(
15365
+ const handleKeyDown = React12.useCallback(
13846
15366
  (e) => {
13847
15367
  if (e.key === "Enter" && !e.shiftKey) {
13848
15368
  e.preventDefault();
@@ -13851,7 +15371,7 @@ function ChatInput({
13851
15371
  },
13852
15372
  [handleSend]
13853
15373
  );
13854
- const handleInput = React11.useCallback(() => {
15374
+ const handleInput = React12.useCallback(() => {
13855
15375
  const el = textareaRef.current;
13856
15376
  if (!el) return;
13857
15377
  el.style.height = "auto";
@@ -13984,23 +15504,38 @@ function SparkleIcon({ className }) {
13984
15504
 
13985
15505
  Object.defineProperty(exports, "getVariantDisplayName", {
13986
15506
  enumerable: true,
13987
- get: function () { return chunkJYPLT56O_js.getVariantDisplayName; }
15507
+ get: function () { return chunkVV3GTDIP_js.getVariantDisplayName; }
13988
15508
  });
13989
15509
  exports.AccommodationCard = AccommodationCard;
15510
+ exports.AccountContent = AccountContent;
15511
+ exports.AccountDashboardPage = AccountDashboardPage;
15512
+ exports.AccountHero = AccountHero;
15513
+ exports.AccountIdentityStrip = AccountIdentityStrip;
15514
+ exports.AccountNav = AccountNav;
15515
+ exports.AccountOrderDetailPage = AccountOrderDetailPage;
15516
+ exports.AccountOrdersPage = AccountOrdersPage;
15517
+ exports.AccountShell = AccountShell;
15518
+ exports.AccountSidebar = AccountSidebar;
15519
+ exports.AccountSignedOutPrompt = AccountSignedOutPrompt;
15520
+ exports.AccountSubscriptionDetailPage = AccountSubscriptionDetailPage;
15521
+ exports.AccountSubscriptionsPage = AccountSubscriptionsPage;
13990
15522
  exports.Ad = Ad;
13991
15523
  exports.AdProvider = AdProvider;
13992
15524
  exports.AddOnSelector = AddOnSelector;
13993
15525
  exports.AddressElement = AddressElement;
13994
15526
  exports.AuthElement = AuthElement;
13995
15527
  exports.AvailabilityBadge = AvailabilityBadge;
15528
+ exports.BackLink = BackLink;
13996
15529
  exports.BillingPlanSelector = BillingPlanSelector;
13997
15530
  exports.BookingCard = BookingCard;
13998
15531
  exports.BookingList = BookingList;
13999
15532
  exports.BookingPage = BookingPage;
14000
15533
  exports.BookingsPage = BookingsPage;
15534
+ exports.BoxIcon24 = BoxIcon24;
14001
15535
  exports.BundleProductCard = BundleProductCard;
14002
15536
  exports.BundleProductLayout = BundleProductLayout;
14003
15537
  exports.BundleSelector = BundleSelector;
15538
+ exports.Button = Button;
14004
15539
  exports.CardImage = CardImage;
14005
15540
  exports.CardShell = CardShell;
14006
15541
  exports.CardVariant = CardVariant;
@@ -14015,6 +15550,7 @@ exports.CatalogueTemplate = CatalogueTemplate;
14015
15550
  exports.CategoryFilter = CategoryFilter;
14016
15551
  exports.CategoryGrid = CategoryGrid;
14017
15552
  exports.ChatWidget = ChatWidget;
15553
+ exports.CheckIcon = CheckIcon;
14018
15554
  exports.CheckoutPage = CheckoutPage;
14019
15555
  exports.CimplifyAccount = CimplifyAccount;
14020
15556
  exports.CimplifyCheckout = CimplifyCheckout;
@@ -14029,9 +15565,13 @@ exports.CompactServiceCard = CompactServiceCard;
14029
15565
  exports.CompositeProductCard = CompositeProductCard;
14030
15566
  exports.CompositeProductLayout = CompositeProductLayout;
14031
15567
  exports.CompositeSelector = CompositeSelector;
15568
+ exports.ContextCard = ContextCard;
15569
+ exports.ContinuityCard = ContinuityCard;
14032
15570
  exports.CurrencySelector = CurrencySelector;
14033
15571
  exports.CustomAttributesTable = CustomAttributesTable;
14034
15572
  exports.CustomerInputFields = CustomerInputFields;
15573
+ exports.DashboardIcon = DashboardIcon;
15574
+ exports.DashboardIcon20 = DashboardIcon20;
14035
15575
  exports.DatePicker = DatePicker;
14036
15576
  exports.DateSlotPicker = DateSlotPicker;
14037
15577
  exports.DealBanner = DealBanner;
@@ -14042,22 +15582,45 @@ exports.DefaultCollectionLayout = DefaultCollectionLayout;
14042
15582
  exports.DefaultProductLayout = DefaultProductLayout;
14043
15583
  exports.DefaultSearchLayout = DefaultSearchLayout;
14044
15584
  exports.DeliveryEstimate = DeliveryEstimate;
15585
+ exports.DeliveryTruckIcon = DeliveryTruckIcon;
14045
15586
  exports.DigitalProductCard = DigitalProductCard;
14046
15587
  exports.DigitalProductLayout = DigitalProductLayout;
14047
15588
  exports.DiscountInput = DiscountInput;
14048
15589
  exports.ElementsProvider = ElementsProvider;
15590
+ exports.EmptyState = EmptyState;
15591
+ exports.ErrorState = ErrorState;
14049
15592
  exports.FeaturedCollectionLayout = FeaturedCollectionLayout;
15593
+ exports.FilterTabs = FilterTabs;
14050
15594
  exports.FoodProductCard = FoodProductCard;
14051
15595
  exports.FoodProductLayout = FoodProductLayout;
15596
+ exports.HappeningCard = HappeningCard;
15597
+ exports.IdentityIcon = IdentityIcon;
15598
+ exports.IdentityOfframp = IdentityOfframp;
14052
15599
  exports.InventoryBadge = InventoryBadge;
15600
+ exports.ItemsCard = ItemsCard;
14053
15601
  exports.LeaseServiceCard = LeaseServiceCard;
14054
15602
  exports.LocationPicker = LocationPicker;
14055
15603
  exports.MediaGallery = MediaGallery;
14056
15604
  exports.MetadataStringList = MetadataStringList;
15605
+ exports.MobileAccountShell = MobileAccountShell;
15606
+ exports.MobileBackButton = MobileBackButton;
15607
+ exports.MobileMoreButton = MobileMoreButton;
15608
+ exports.MobileTabBar = MobileTabBar;
15609
+ exports.NextDeliveryCard = NextDeliveryCard;
15610
+ exports.OrderDetailHeader = OrderDetailHeader;
15611
+ exports.OrderDetailMetaPipe = OrderDetailMetaPipe;
14057
15612
  exports.OrderDetailPage = OrderDetailPage;
14058
15613
  exports.OrderHistory = OrderHistory;
14059
15614
  exports.OrderHistoryPage = OrderHistoryPage;
15615
+ exports.OrderList = OrderList;
15616
+ exports.OrderRow = OrderRow;
14060
15617
  exports.OrderSummary = OrderSummary;
15618
+ exports.OrderTimeline = OrderTimeline;
15619
+ exports.OrderTotals = OrderTotals;
15620
+ exports.OrdersIcon = OrdersIcon;
15621
+ exports.OrdersIcon20 = OrdersIcon20;
15622
+ exports.OvenIcon = OvenIcon;
15623
+ exports.PackageIcon = PackageIcon;
14061
15624
  exports.PaymentElement = PaymentElement;
14062
15625
  exports.Price = Price;
14063
15626
  exports.PriceRange = PriceRange;
@@ -14083,20 +15646,31 @@ exports.ScheduleServiceCard = ScheduleServiceCard;
14083
15646
  exports.SearchInput = SearchInput;
14084
15647
  exports.SearchPage = SearchPage;
14085
15648
  exports.SearchTemplate = SearchTemplate;
15649
+ exports.Section = Section;
15650
+ exports.SectionMore = SectionMore;
14086
15651
  exports.ServiceProductLayout = ServiceProductLayout;
14087
15652
  exports.SessionMessageBanner = SessionMessageBanner;
15653
+ exports.SignOutIcon = SignOutIcon;
15654
+ exports.Skeleton = Skeleton;
14088
15655
  exports.SlotPicker = SlotPicker;
14089
15656
  exports.SoldOutOverlay = SoldOutOverlay;
14090
15657
  exports.StaffPicker = StaffPicker;
14091
15658
  exports.StandardServiceCard = StandardServiceCard;
15659
+ exports.Status = Status;
14092
15660
  exports.StoreNav = StoreNav;
14093
15661
  exports.StoreVideo = StoreVideo;
14094
15662
  exports.SubscriptionCard = SubscriptionCard;
15663
+ exports.SubscriptionList = SubscriptionList;
15664
+ exports.SubscriptionRow = SubscriptionRow;
15665
+ exports.SubscriptionsIcon = SubscriptionsIcon;
15666
+ exports.SubscriptionsIcon20 = SubscriptionsIcon20;
14095
15667
  exports.TagPills = TagPills;
14096
15668
  exports.TimePicker = TimePicker;
15669
+ exports.Toast = Toast;
14097
15670
  exports.TwoColumnGrid = TwoColumnGrid;
14098
15671
  exports.VariantSelector = VariantSelector;
14099
15672
  exports.VolumePricing = VolumePricing;
15673
+ exports.WelcomeCard = WelcomeCard;
14100
15674
  exports.WholesaleProductCard = WholesaleProductCard;
14101
15675
  exports.WholesaleProductLayout = WholesaleProductLayout;
14102
15676
  exports.WishlistButton = WishlistButton;