@loafmarkets/ui 0.1.23 → 0.1.24

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.mts CHANGED
@@ -690,30 +690,14 @@ type PropertyInspectionTimesProps = {
690
690
  };
691
691
  declare function PropertyInspectionTimes({ isAuthenticated, slots, loading, error, bookingSlotId, bookingStatus, bookingError, onBook, onRetry, onSignIn, }: PropertyInspectionTimesProps): react_jsx_runtime.JSX.Element;
692
692
 
693
+ type IpoStatus = 'PENDING' | 'LIVE' | 'CLOSED' | 'CANCELLED';
693
694
  type SaleData = {
694
- state: {
695
- status: number;
696
- totalSold: bigint;
697
- totalRaised: bigint;
698
- totalFees: bigint;
699
- propertyToken: `0x${string}`;
700
- fundsWithdrawn: boolean;
701
- } | null;
702
- config: {
703
- supplyToSell: bigint;
704
- tokenPrice: bigint;
705
- maxPerWallet: bigint;
706
- feeBps: bigint;
707
- paymentToken: `0x${string}`;
708
- feeRecipient: `0x${string}`;
709
- fundsRecipient: `0x${string}`;
710
- } | null;
711
695
  loading: boolean;
712
696
  error: string | null;
713
697
  totalSold: number;
714
698
  supplyToSell: number;
715
699
  percentSold: number;
716
- statusLabel: string;
700
+ status: IpoStatus;
717
701
  tokenPrice: number;
718
702
  feePercent: number;
719
703
  offeringValuation: number;
@@ -744,8 +728,10 @@ type PropertyBuyProps = {
744
728
  purchaseError?: string | null;
745
729
  onDeposit?: () => void;
746
730
  initialUserSubscriptions?: PropertySubscription[];
731
+ opensAt?: number | null;
732
+ isPrivateClient?: boolean;
747
733
  };
748
- declare function PropertyBuy({ propertyName, propertyLocation: propertyLocationLabel, tokenDisplayName, tokenSymbol, isAuthenticated, onSignIn, saleData, walletUsdcBalance, walletPropertyTokenBalance, onPurchase, purchaseStatus, purchaseError, onDeposit, initialUserSubscriptions, }: PropertyBuyProps): react_jsx_runtime.JSX.Element;
734
+ declare function PropertyBuy({ propertyName, propertyLocation: propertyLocationLabel, tokenDisplayName, tokenSymbol, isAuthenticated, onSignIn, saleData, walletUsdcBalance, walletPropertyTokenBalance, onPurchase, purchaseStatus, purchaseError, onDeposit, initialUserSubscriptions, opensAt, isPrivateClient, }: PropertyBuyProps): react_jsx_runtime.JSX.Element;
749
735
 
750
736
  type OwnerBookingProps = {
751
737
  propertyName?: string | null;
package/dist/index.d.ts CHANGED
@@ -690,30 +690,14 @@ type PropertyInspectionTimesProps = {
690
690
  };
691
691
  declare function PropertyInspectionTimes({ isAuthenticated, slots, loading, error, bookingSlotId, bookingStatus, bookingError, onBook, onRetry, onSignIn, }: PropertyInspectionTimesProps): react_jsx_runtime.JSX.Element;
692
692
 
693
+ type IpoStatus = 'PENDING' | 'LIVE' | 'CLOSED' | 'CANCELLED';
693
694
  type SaleData = {
694
- state: {
695
- status: number;
696
- totalSold: bigint;
697
- totalRaised: bigint;
698
- totalFees: bigint;
699
- propertyToken: `0x${string}`;
700
- fundsWithdrawn: boolean;
701
- } | null;
702
- config: {
703
- supplyToSell: bigint;
704
- tokenPrice: bigint;
705
- maxPerWallet: bigint;
706
- feeBps: bigint;
707
- paymentToken: `0x${string}`;
708
- feeRecipient: `0x${string}`;
709
- fundsRecipient: `0x${string}`;
710
- } | null;
711
695
  loading: boolean;
712
696
  error: string | null;
713
697
  totalSold: number;
714
698
  supplyToSell: number;
715
699
  percentSold: number;
716
- statusLabel: string;
700
+ status: IpoStatus;
717
701
  tokenPrice: number;
718
702
  feePercent: number;
719
703
  offeringValuation: number;
@@ -744,8 +728,10 @@ type PropertyBuyProps = {
744
728
  purchaseError?: string | null;
745
729
  onDeposit?: () => void;
746
730
  initialUserSubscriptions?: PropertySubscription[];
731
+ opensAt?: number | null;
732
+ isPrivateClient?: boolean;
747
733
  };
748
- declare function PropertyBuy({ propertyName, propertyLocation: propertyLocationLabel, tokenDisplayName, tokenSymbol, isAuthenticated, onSignIn, saleData, walletUsdcBalance, walletPropertyTokenBalance, onPurchase, purchaseStatus, purchaseError, onDeposit, initialUserSubscriptions, }: PropertyBuyProps): react_jsx_runtime.JSX.Element;
734
+ declare function PropertyBuy({ propertyName, propertyLocation: propertyLocationLabel, tokenDisplayName, tokenSymbol, isAuthenticated, onSignIn, saleData, walletUsdcBalance, walletPropertyTokenBalance, onPurchase, purchaseStatus, purchaseError, onDeposit, initialUserSubscriptions, opensAt, isPrivateClient, }: PropertyBuyProps): react_jsx_runtime.JSX.Element;
749
735
 
750
736
  type OwnerBookingProps = {
751
737
  propertyName?: string | null;
package/dist/index.js CHANGED
@@ -5613,8 +5613,29 @@ var LoginPopup = ({
5613
5613
  setView("otp");
5614
5614
  setOtp(Array(OTP_INPUT_LENGTH).fill(""));
5615
5615
  } catch (err) {
5616
+ const message = err instanceof Error ? err.message : "Failed to send verification code";
5616
5617
  console.error("[LoginTrace][Popup] onSendEmailCode threw", err);
5617
- setError(err instanceof Error ? err.message : "Failed to send verification code");
5618
+ if (!isSignUp && message.includes("No account found")) {
5619
+ console.log("[LoginTrace][Popup] No account found during sign-in, switching to sign-up view");
5620
+ setIsSignUp(true);
5621
+ setError("");
5622
+ setLoading(false);
5623
+ return;
5624
+ }
5625
+ if (isSignUp && message.includes("Account already exists")) {
5626
+ console.log("[LoginTrace][Popup] Account exists during sign-up, auto-switching to sign-in and sending OTP");
5627
+ setIsSignUp(false);
5628
+ try {
5629
+ await onSendEmailCode({ email, isSignUp: false, handle: null });
5630
+ setView("otp");
5631
+ setOtp(Array(OTP_INPUT_LENGTH).fill(""));
5632
+ } catch (retryErr) {
5633
+ setError(retryErr instanceof Error ? retryErr.message : "Failed to send verification code");
5634
+ }
5635
+ setLoading(false);
5636
+ return;
5637
+ }
5638
+ setError(message);
5618
5639
  } finally {
5619
5640
  setLoading(false);
5620
5641
  }
@@ -5689,8 +5710,8 @@ var LoginPopup = ({
5689
5710
  console.log("[LoginTrace][Popup] Calling onVerifyEmailCode");
5690
5711
  await onVerifyEmailCode({ code, email });
5691
5712
  if (isSignUp) {
5692
- console.log("[LoginTrace][Popup] Signup OTP verified, moving to KYC view");
5693
- setView("kyc");
5713
+ console.log("[LoginTrace][Popup] Signup OTP verified, moving to funding view");
5714
+ setView("funding");
5694
5715
  setLoading(false);
5695
5716
  return;
5696
5717
  }
@@ -5749,7 +5770,7 @@ var LoginPopup = ({
5749
5770
  setFundingError("");
5750
5771
  setCryptoFundingLoading(true);
5751
5772
  try {
5752
- const result = await onFundWallet({ amount: fundingAmount || "100", mode: "crypto" });
5773
+ const result = await onFundWallet({ amount: fundingAmount, mode: "crypto" });
5753
5774
  if (result?.funded) {
5754
5775
  onClose();
5755
5776
  }
@@ -5767,7 +5788,7 @@ var LoginPopup = ({
5767
5788
  setFundingError("");
5768
5789
  setFiatFundingLoading(true);
5769
5790
  try {
5770
- const result = await onFundWallet({ amount: fundingAmount || "100", mode: "fiat" });
5791
+ const result = await onFundWallet({ amount: fundingAmount, mode: "fiat" });
5771
5792
  if (result?.widgetUrl) {
5772
5793
  setTransakWidgetUrl(result.widgetUrl);
5773
5794
  } else if (result?.requiresKyc) {
@@ -5789,10 +5810,6 @@ var LoginPopup = ({
5789
5810
  setTransakWidgetUrl(null);
5790
5811
  setFundingError("");
5791
5812
  };
5792
- const handleFundingAmountChange = (event) => {
5793
- const next = event.target.value.replace(/[^0-9.]/g, "");
5794
- setFundingAmount(next);
5795
- };
5796
5813
  const handleBack = () => {
5797
5814
  setView("main");
5798
5815
  setEmail("");
@@ -5990,10 +6007,7 @@ var LoginPopup = ({
5990
6007
  "Thanks for submitting your documents.",
5991
6008
  /* @__PURE__ */ jsxRuntime.jsx("br", {})
5992
6009
  ] }),
5993
- /* @__PURE__ */ jsxRuntime.jsxs(OnboardingButtonGroup, { children: [
5994
- /* @__PURE__ */ jsxRuntime.jsx(SubmitButton, { onClick: onClose, children: "Close" }),
5995
- /* @__PURE__ */ jsxRuntime.jsx(OnboardingSkipButton, { onClick: () => setView("funding"), children: "Fund now" })
5996
- ] })
6010
+ /* @__PURE__ */ jsxRuntime.jsx(OnboardingButtonGroup, { children: /* @__PURE__ */ jsxRuntime.jsx(SubmitButton, { onClick: onClose, children: "Continue" }) })
5997
6011
  ] })
5998
6012
  ] }) });
5999
6013
  }
@@ -6051,20 +6065,6 @@ var LoginPopup = ({
6051
6065
  ] }) : /* @__PURE__ */ jsxRuntime.jsxs(OnboardingStepContainer, { children: [
6052
6066
  /* @__PURE__ */ jsxRuntime.jsx(OnboardingHeading, { children: "Fund your account" }),
6053
6067
  /* @__PURE__ */ jsxRuntime.jsxs(FundingCard, { children: [
6054
- /* @__PURE__ */ jsxRuntime.jsx(FundingCardLabel, { children: "How much would you like to transfer?" }),
6055
- /* @__PURE__ */ jsxRuntime.jsxs(FundingInputWrapper, { children: [
6056
- /* @__PURE__ */ jsxRuntime.jsx(FundingCurrencyLabel, { children: "USD" }),
6057
- /* @__PURE__ */ jsxRuntime.jsx(
6058
- FundingAmountInput,
6059
- {
6060
- type: "text",
6061
- inputMode: "decimal",
6062
- value: fundingAmount,
6063
- onChange: handleFundingAmountChange,
6064
- placeholder: "0"
6065
- }
6066
- )
6067
- ] }),
6068
6068
  /* @__PURE__ */ jsxRuntime.jsxs(FundingOptionsGrid, { children: [
6069
6069
  /* @__PURE__ */ jsxRuntime.jsxs(FundingOptionCard, { children: [
6070
6070
  /* @__PURE__ */ jsxRuntime.jsx(FundingOptionHeading, { children: "Crypto transfer" }),
@@ -6484,25 +6484,25 @@ var FundingCard = styled23__default.default.div`
6484
6484
  text-align: left;
6485
6485
  box-shadow: 0 18px 60px rgba(0, 0, 0, 0.4);
6486
6486
  `;
6487
- var FundingCardLabel = styled23__default.default.p`
6487
+ styled23__default.default.p`
6488
6488
  font-size: 0.9rem;
6489
6489
  color: var(--color-text, #eaecef);
6490
6490
  margin-bottom: 0.5rem;
6491
6491
  `;
6492
- var FundingInputWrapper = styled23__default.default.div`
6492
+ styled23__default.default.div`
6493
6493
  border-radius: 12px;
6494
6494
  border: 1px solid rgba(255, 255, 255, 0.08);
6495
6495
  background-color: var(--color-background, #0d0e14);
6496
6496
  padding: 0.75rem 0.85rem;
6497
6497
  `;
6498
- var FundingCurrencyLabel = styled23__default.default.label`
6498
+ styled23__default.default.label`
6499
6499
  display: block;
6500
6500
  font-size: 0.65rem;
6501
6501
  text-transform: uppercase;
6502
6502
  letter-spacing: 0.4em;
6503
6503
  color: rgba(255, 255, 255, 0.45);
6504
6504
  `;
6505
- var FundingAmountInput = styled23__default.default.input`
6505
+ styled23__default.default.input`
6506
6506
  width: 100%;
6507
6507
  background: transparent;
6508
6508
  border: none;
@@ -8484,10 +8484,10 @@ var galleryCategories = [
8484
8484
  { name: "Floorplan", startIndex: 14 }
8485
8485
  ];
8486
8486
  var STATUS_COLOR2 = {
8487
- 0: "#D4AF37",
8488
- 1: "#0ecb81",
8489
- 2: "#848e9c",
8490
- 3: "#f6465d"
8487
+ PENDING: "#D4AF37",
8488
+ LIVE: "#0ecb81",
8489
+ CLOSED: "#848e9c",
8490
+ CANCELLED: "#f6465d"
8491
8491
  };
8492
8492
  var recentOrderPurchases = [
8493
8493
  { name: "investor_au", amount: 12500 },
@@ -8674,18 +8674,44 @@ function OfferingProgressCard({
8674
8674
  ipoStarted,
8675
8675
  statusLabel,
8676
8676
  statusColor,
8677
- scStatus,
8677
+ ipoStatus,
8678
8678
  tokenPrice,
8679
8679
  offeringValuation,
8680
8680
  percentSold,
8681
8681
  totalSold,
8682
- supplyToSell
8682
+ supplyToSell,
8683
+ opensAt
8683
8684
  }) {
8684
8685
  const [currentTime, setCurrentTime] = React5.useState(/* @__PURE__ */ new Date());
8686
+ const [countdown, setCountdown] = React5.useState(null);
8685
8687
  React5.useEffect(() => {
8686
8688
  const timer = setInterval(() => setCurrentTime(/* @__PURE__ */ new Date()), 1e3);
8687
8689
  return () => clearInterval(timer);
8688
8690
  }, []);
8691
+ React5.useEffect(() => {
8692
+ if (!opensAt) {
8693
+ setCountdown(null);
8694
+ return;
8695
+ }
8696
+ const calculateCountdown = () => {
8697
+ const now = Math.floor(Date.now() / 1e3);
8698
+ const diff = opensAt - now;
8699
+ if (diff <= 0) {
8700
+ return null;
8701
+ }
8702
+ return {
8703
+ days: Math.floor(diff / 86400),
8704
+ hours: Math.floor(diff % 86400 / 3600),
8705
+ minutes: Math.floor(diff % 3600 / 60),
8706
+ seconds: diff % 60
8707
+ };
8708
+ };
8709
+ setCountdown(calculateCountdown());
8710
+ const interval = setInterval(() => {
8711
+ setCountdown(calculateCountdown());
8712
+ }, 1e3);
8713
+ return () => clearInterval(interval);
8714
+ }, [opensAt]);
8689
8715
  return /* @__PURE__ */ jsxRuntime.jsxs(Container, { children: [
8690
8716
  /* @__PURE__ */ jsxRuntime.jsxs(Header2, { children: [
8691
8717
  /* @__PURE__ */ jsxRuntime.jsxs("h3", { children: [
@@ -8707,7 +8733,7 @@ function OfferingProgressCard({
8707
8733
  ] })
8708
8734
  ] })
8709
8735
  ] }),
8710
- !ipoStarted ? /* @__PURE__ */ jsxRuntime.jsxs(PreLive, { children: [
8736
+ ipoStatus === "PENDING" ? /* @__PURE__ */ jsxRuntime.jsxs(PreLive, { children: [
8711
8737
  /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
8712
8738
  /* @__PURE__ */ jsxRuntime.jsx(MetricLabel2, { children: "Token Price" }),
8713
8739
  /* @__PURE__ */ jsxRuntime.jsxs(MetricValue2, { accent: true, children: [
@@ -8715,7 +8741,30 @@ function OfferingProgressCard({
8715
8741
  tokenPrice.toLocaleString(void 0, { minimumFractionDigits: 2, maximumFractionDigits: 2 })
8716
8742
  ] })
8717
8743
  ] }),
8718
- /* @__PURE__ */ jsxRuntime.jsx(PreLiveStatus, { $statusColor: statusColor, children: scStatus === 2 ? "Sale Completed" : scStatus === 3 ? "Sale Paused" : "Sale Not Yet Open" }),
8744
+ countdown ? /* @__PURE__ */ jsxRuntime.jsxs(CountdownCenter, { children: [
8745
+ /* @__PURE__ */ jsxRuntime.jsx(CountdownLabel, { children: "Opens In" }),
8746
+ /* @__PURE__ */ jsxRuntime.jsxs(CountdownDigits, { children: [
8747
+ /* @__PURE__ */ jsxRuntime.jsxs(CountdownUnit, { children: [
8748
+ /* @__PURE__ */ jsxRuntime.jsx(CountdownNumber, { children: String(countdown.days).padStart(2, "0") }),
8749
+ /* @__PURE__ */ jsxRuntime.jsx(CountdownUnitLabel, { children: "D" })
8750
+ ] }),
8751
+ /* @__PURE__ */ jsxRuntime.jsx(CountdownSeparator, { children: ":" }),
8752
+ /* @__PURE__ */ jsxRuntime.jsxs(CountdownUnit, { children: [
8753
+ /* @__PURE__ */ jsxRuntime.jsx(CountdownNumber, { children: String(countdown.hours).padStart(2, "0") }),
8754
+ /* @__PURE__ */ jsxRuntime.jsx(CountdownUnitLabel, { children: "H" })
8755
+ ] }),
8756
+ /* @__PURE__ */ jsxRuntime.jsx(CountdownSeparator, { children: ":" }),
8757
+ /* @__PURE__ */ jsxRuntime.jsxs(CountdownUnit, { children: [
8758
+ /* @__PURE__ */ jsxRuntime.jsx(CountdownNumber, { children: String(countdown.minutes).padStart(2, "0") }),
8759
+ /* @__PURE__ */ jsxRuntime.jsx(CountdownUnitLabel, { children: "M" })
8760
+ ] }),
8761
+ /* @__PURE__ */ jsxRuntime.jsx(CountdownSeparator, { children: ":" }),
8762
+ /* @__PURE__ */ jsxRuntime.jsxs(CountdownUnit, { children: [
8763
+ /* @__PURE__ */ jsxRuntime.jsx(CountdownNumber, { children: String(countdown.seconds).padStart(2, "0") }),
8764
+ /* @__PURE__ */ jsxRuntime.jsx(CountdownUnitLabel, { children: "S" })
8765
+ ] })
8766
+ ] })
8767
+ ] }) : /* @__PURE__ */ jsxRuntime.jsx(PreLiveStatus, { $statusColor: statusColor, children: ipoStatus === "CLOSED" ? "Sale Completed" : ipoStatus === "CANCELLED" ? "Sale Cancelled" : "Sale Not Yet Open" }),
8719
8768
  /* @__PURE__ */ jsxRuntime.jsxs("div", { style: { textAlign: "right" }, children: [
8720
8769
  /* @__PURE__ */ jsxRuntime.jsx(MetricLabel2, { children: "Offering Valuation" }),
8721
8770
  /* @__PURE__ */ jsxRuntime.jsxs(MetricValue2, { children: [
@@ -8829,6 +8878,51 @@ var PreLiveStatus = styled23__default.default.div`
8829
8878
  letter-spacing: 0.15em;
8830
8879
  font-weight: 600;
8831
8880
  `;
8881
+ var CountdownCenter = styled23__default.default.div`
8882
+ text-align: center;
8883
+ display: flex;
8884
+ flex-direction: column;
8885
+ align-items: center;
8886
+ flex: 1;
8887
+ `;
8888
+ var CountdownLabel = styled23__default.default.div`
8889
+ font-size: 0.7rem;
8890
+ color: #D4AF37;
8891
+ text-transform: uppercase;
8892
+ letter-spacing: 0.15em;
8893
+ margin-bottom: 0.5rem;
8894
+ font-weight: 600;
8895
+ `;
8896
+ var CountdownDigits = styled23__default.default.div`
8897
+ display: flex;
8898
+ align-items: baseline;
8899
+ justify-content: center;
8900
+ gap: 0.35rem;
8901
+ `;
8902
+ var CountdownUnit = styled23__default.default.div`
8903
+ display: flex;
8904
+ align-items: baseline;
8905
+ gap: 0.1rem;
8906
+ `;
8907
+ var CountdownNumber = styled23__default.default.span`
8908
+ font-size: 2.5rem;
8909
+ font-weight: 700;
8910
+ font-family: monospace;
8911
+ color: #D4AF37;
8912
+
8913
+ @media (max-width: 768px) {
8914
+ font-size: 1.75rem;
8915
+ }
8916
+ `;
8917
+ var CountdownUnitLabel = styled23__default.default.span`
8918
+ font-size: 0.85rem;
8919
+ color: var(--color-text-secondary);
8920
+ `;
8921
+ var CountdownSeparator = styled23__default.default.span`
8922
+ color: rgba(255, 255, 255, 0.2);
8923
+ margin: 0 0.2rem;
8924
+ font-size: 1.5rem;
8925
+ `;
8832
8926
  var LiveStats = styled23__default.default.div`
8833
8927
  display: flex;
8834
8928
  flex-direction: column;
@@ -10504,7 +10598,9 @@ function PropertyBuy({
10504
10598
  purchaseStatus = "idle",
10505
10599
  purchaseError,
10506
10600
  onDeposit,
10507
- initialUserSubscriptions = []
10601
+ initialUserSubscriptions = [],
10602
+ opensAt,
10603
+ isPrivateClient = false
10508
10604
  }) {
10509
10605
  const [sliderValue, setSliderValue] = React5.useState(0);
10510
10606
  const [availableBalance, setAvailableBalance] = React5.useState(walletUsdcBalance ?? 125e3);
@@ -10538,10 +10634,12 @@ function PropertyBuy({
10538
10634
  const supplyToSell = saleData?.supplyToSell ?? 5e4;
10539
10635
  const percentSold = saleData?.percentSold ?? 0;
10540
10636
  const offeringValuation = saleData?.offeringValuation ?? tokenPrice * supplyToSell;
10541
- const scStatus = saleData?.state?.status ?? 0;
10542
- const ipoStarted = scStatus === 1;
10543
- const statusLabel = saleData?.statusLabel ?? "PREPARING";
10544
- const statusColor = STATUS_COLOR2[scStatus] ?? "#D4AF37";
10637
+ const ipoStatus = saleData?.status ?? "PENDING";
10638
+ const ipoStarted = ipoStatus === "LIVE" || isPrivateClient && ipoStatus === "PENDING";
10639
+ const statusLabel = ipoStatus;
10640
+ const statusColor = STATUS_COLOR2[ipoStatus] ?? "#D4AF37";
10641
+ const displayStatusLabel = isPrivateClient && ipoStatus !== "LIVE" ? "Private Client Access" : statusLabel;
10642
+ const displayStatusColor = isPrivateClient && ipoStatus !== "LIVE" ? "#D4AF37" : statusColor;
10545
10643
  const totalSpend = manualOrderAmount !== null ? manualOrderAmount : Math.round(sliderValue / 100 * availableBalance);
10546
10644
  const grossTokens = totalSpend / tokenPrice;
10547
10645
  const feeInTokens = grossTokens * feeRate;
@@ -10572,16 +10670,16 @@ function PropertyBuy({
10572
10670
  if (purchaseStatus === "checking-allowance") return "Checking allowance\u2026";
10573
10671
  if (purchaseStatus === "approving") return "Approving USDC\u2026";
10574
10672
  if (purchaseStatus === "purchasing") return "Confirming purchase\u2026";
10575
- if (scStatus === 0) return "Sale Not Open Yet";
10576
- if (scStatus === 2) return "Sale Completed";
10577
- if (scStatus === 3) return "Sale Paused";
10673
+ if (ipoStatus === "PENDING" && !isPrivateClient) return "Sale Not Open Yet";
10674
+ if (ipoStatus === "CLOSED") return "Sale Completed";
10675
+ if (ipoStatus === "CANCELLED") return "Sale Cancelled";
10578
10676
  if (tokenQuantity === 0) return "Enter Amount";
10579
10677
  return "Place Order";
10580
10678
  };
10581
10679
  const isOrderButtonDisabled = () => {
10582
10680
  if (!isAuthenticated) return false;
10583
10681
  if (isPurchaseInFlight) return true;
10584
- if (scStatus !== 1) return true;
10682
+ if (!ipoStarted) return true;
10585
10683
  if (tokenQuantity === 0) return true;
10586
10684
  return false;
10587
10685
  };
@@ -10667,12 +10765,13 @@ function PropertyBuy({
10667
10765
  ipoStarted,
10668
10766
  statusLabel,
10669
10767
  statusColor,
10670
- scStatus,
10768
+ ipoStatus,
10671
10769
  tokenPrice,
10672
10770
  offeringValuation,
10673
10771
  percentSold,
10674
10772
  totalSold,
10675
- supplyToSell
10773
+ supplyToSell,
10774
+ opensAt
10676
10775
  }
10677
10776
  ),
10678
10777
  /* @__PURE__ */ jsxRuntime.jsx(VideoActivitySection, { ipoStarted }),
@@ -10680,8 +10779,8 @@ function PropertyBuy({
10680
10779
  /* @__PURE__ */ jsxRuntime.jsx(
10681
10780
  OrderPanel,
10682
10781
  {
10683
- statusLabel,
10684
- statusColor,
10782
+ statusLabel: displayStatusLabel,
10783
+ statusColor: displayStatusColor,
10685
10784
  ipoStarted,
10686
10785
  tokenDisplayName,
10687
10786
  tokenSymbol,