@loafmarkets/ui 0.1.23 → 0.1.25
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 +5 -19
- package/dist/index.d.ts +5 -19
- package/dist/index.js +152 -53
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +152 -53
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
5693
|
-
setView("
|
|
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
|
|
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
|
|
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.
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
8488
|
-
|
|
8489
|
-
|
|
8490
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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.
|
|
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;
|
|
@@ -9210,7 +9304,7 @@ function OrderPanel({
|
|
|
9210
9304
|
}
|
|
9211
9305
|
}
|
|
9212
9306
|
),
|
|
9213
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { children: "
|
|
9307
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { children: "USD" })
|
|
9214
9308
|
] }),
|
|
9215
9309
|
/* @__PURE__ */ jsxRuntime.jsx(QuickSelectRow, { children: [25, 50, 75, 100].map((pct) => /* @__PURE__ */ jsxRuntime.jsxs(
|
|
9216
9310
|
"button",
|
|
@@ -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
|
|
10542
|
-
const ipoStarted =
|
|
10543
|
-
const statusLabel =
|
|
10544
|
-
const statusColor = STATUS_COLOR2[
|
|
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 (
|
|
10576
|
-
if (
|
|
10577
|
-
if (
|
|
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 (
|
|
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
|
-
|
|
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,
|