@loafmarkets/ui 0.1.84 → 0.1.86

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
@@ -824,7 +824,6 @@ interface TradeHistoryItem {
824
824
  readonly price: number;
825
825
  readonly executedAt: number;
826
826
  readonly fee: number;
827
- readonly status?: string;
828
827
  }
829
828
  interface TransferHistoryItem {
830
829
  readonly type: 'DEPOSIT' | 'WITHDRAWAL';
@@ -979,10 +978,12 @@ type OfferingProgressCardProps = {
979
978
  raisedAmount?: number;
980
979
  targetAmount?: number;
981
980
  isPrivateClient?: boolean;
981
+ /** "default" = full card with header/countdown, "compact" = bar-only, "home" = countdown left + spinner right */
982
+ variant?: 'default' | 'compact' | 'home';
982
983
  style?: React__default.CSSProperties;
983
984
  className?: string;
984
985
  };
985
- declare function OfferingProgressCard({ ipoStarted, statusLabel, statusColor, ipoStatus, tokenPrice, offeringValuation, percentSold, totalSold, supplyToSell, opensAt, subscriberCount, raisedAmount, targetAmount, isPrivateClient, style, className, }: OfferingProgressCardProps): react_jsx_runtime.JSX.Element;
986
+ declare function OfferingProgressCard({ ipoStarted, statusLabel, statusColor, ipoStatus, tokenPrice, offeringValuation, percentSold, totalSold, supplyToSell, opensAt, subscriberCount, raisedAmount, targetAmount, isPrivateClient, variant, style, className, }: OfferingProgressCardProps): react_jsx_runtime.JSX.Element;
986
987
 
987
988
  type OwnerBookingProps = {
988
989
  propertyName?: string | null;
package/dist/index.d.ts CHANGED
@@ -824,7 +824,6 @@ interface TradeHistoryItem {
824
824
  readonly price: number;
825
825
  readonly executedAt: number;
826
826
  readonly fee: number;
827
- readonly status?: string;
828
827
  }
829
828
  interface TransferHistoryItem {
830
829
  readonly type: 'DEPOSIT' | 'WITHDRAWAL';
@@ -979,10 +978,12 @@ type OfferingProgressCardProps = {
979
978
  raisedAmount?: number;
980
979
  targetAmount?: number;
981
980
  isPrivateClient?: boolean;
981
+ /** "default" = full card with header/countdown, "compact" = bar-only, "home" = countdown left + spinner right */
982
+ variant?: 'default' | 'compact' | 'home';
982
983
  style?: React__default.CSSProperties;
983
984
  className?: string;
984
985
  };
985
- declare function OfferingProgressCard({ ipoStarted, statusLabel, statusColor, ipoStatus, tokenPrice, offeringValuation, percentSold, totalSold, supplyToSell, opensAt, subscriberCount, raisedAmount, targetAmount, isPrivateClient, style, className, }: OfferingProgressCardProps): react_jsx_runtime.JSX.Element;
986
+ declare function OfferingProgressCard({ ipoStarted, statusLabel, statusColor, ipoStatus, tokenPrice, offeringValuation, percentSold, totalSold, supplyToSell, opensAt, subscriberCount, raisedAmount, targetAmount, isPrivateClient, variant, style, className, }: OfferingProgressCardProps): react_jsx_runtime.JSX.Element;
986
987
 
987
988
  type OwnerBookingProps = {
988
989
  propertyName?: string | null;
package/dist/index.js CHANGED
@@ -2690,7 +2690,7 @@ var PropertyTour = React5__namespace.forwardRef(
2690
2690
  }
2691
2691
  );
2692
2692
  PropertyTour.displayName = "PropertyTour";
2693
- var ITEMS_PER_PAGE = 4;
2693
+ var ITEMS_PER_PAGE = 5;
2694
2694
  var ensureAnimationsInjected = () => {
2695
2695
  if (typeof document === "undefined") return;
2696
2696
  if (document.getElementById("property-news-updates-animations")) return;
@@ -2938,10 +2938,10 @@ var PropertyNewsUpdates = React5__namespace.forwardRef(
2938
2938
  children: [
2939
2939
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center justify-between", children: [
2940
2940
  /* @__PURE__ */ jsxRuntime.jsxs("div", { style: { display: "flex", alignItems: "center", gap: "0.5rem" }, children: [
2941
- isHomeVariant && /* @__PURE__ */ jsxRuntime.jsx("svg", { xmlns: "http://www.w3.org/2000/svg", width: "20", height: "20", viewBox: "0 0 24 24", fill: "currentColor", style: { color: "var(--color-text, #fff)" }, children: /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M20 4H4c-1.1 0-1.99.9-1.99 2L2 18c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2zm-5 14H4v-4h11v4zm0-5H4V9h11v4zm5 5h-4V9h4v9z" }) }),
2941
+ isHomeVariant && /* @__PURE__ */ jsxRuntime.jsx("svg", { xmlns: "http://www.w3.org/2000/svg", width: "16", height: "16", viewBox: "0 0 24 24", fill: "currentColor", style: { color: "var(--color-text, #fff)", flexShrink: 0, display: "block" }, children: /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M20 4H4c-1.1 0-1.99.9-1.99 2L2 18c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2zm-5 14H4v-4h11v4zm0-5H4V9h11v4zm5 5h-4V9h4v9z" }) }),
2942
2942
  isPurchaseVariant && /* @__PURE__ */ jsxRuntime.jsx("span", { style: { display: "inline-block", width: "8px", height: "8px", borderRadius: "50%", backgroundColor: "#0ecb81", boxShadow: "0 0 8px rgba(14,203,129,0.8)", animation: "propertyNewsPulse 1.5s infinite" } }),
2943
2943
  /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
2944
- /* @__PURE__ */ jsxRuntime.jsx("p", { className: isHomeVariant ? "text-base font-semibold text-white" : "text-lg font-semibold text-white", children: resolvedHeading }),
2944
+ /* @__PURE__ */ jsxRuntime.jsx("p", { className: isHomeVariant ? "text-base font-semibold text-white" : "text-lg font-semibold text-white", style: { margin: 0 }, children: resolvedHeading }),
2945
2945
  subheading ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm text-white/60", children: subheading }) : null
2946
2946
  ] })
2947
2947
  ] }),
@@ -2956,7 +2956,7 @@ var PropertyNewsUpdates = React5__namespace.forwardRef(
2956
2956
  "LIVE"
2957
2957
  ] }) : null
2958
2958
  ] }),
2959
- isHomeVariant && /* @__PURE__ */ jsxRuntime.jsx("div", { style: { display: "flex", gap: 0, marginTop: "0.75rem", marginBottom: "0.25rem" }, children: ["all", "property", "market"].map((tab) => /* @__PURE__ */ jsxRuntime.jsx(
2959
+ isHomeVariant && /* @__PURE__ */ jsxRuntime.jsx("div", { style: { display: "flex", gap: "1.5rem", marginTop: "0.75rem", marginBottom: "0.5rem", borderBottom: "1px solid rgba(255, 255, 255, 0.08)", paddingBottom: "0.5rem" }, children: ["all", "property", "market"].map((tab) => /* @__PURE__ */ jsxRuntime.jsx(
2960
2960
  "button",
2961
2961
  {
2962
2962
  type: "button",
@@ -2965,7 +2965,8 @@ var PropertyNewsUpdates = React5__namespace.forwardRef(
2965
2965
  background: "transparent",
2966
2966
  border: "none",
2967
2967
  borderBottom: homeTab === tab ? "2px solid var(--color-accent, #f0b90b)" : "2px solid transparent",
2968
- padding: "0.5rem 0.75rem",
2968
+ padding: "0 0 0.5rem 0",
2969
+ marginBottom: "-1px",
2969
2970
  fontSize: "0.75rem",
2970
2971
  fontWeight: homeTab === tab ? 600 : 400,
2971
2972
  color: homeTab === tab ? "var(--color-text, #fff)" : "var(--color-text-secondary, #848e9c)",
@@ -2979,7 +2980,7 @@ var PropertyNewsUpdates = React5__namespace.forwardRef(
2979
2980
  /* @__PURE__ */ jsxRuntime.jsx(
2980
2981
  "div",
2981
2982
  {
2982
- className: "mt-4 flex flex-1 flex-col gap-3 overflow-hidden",
2983
+ className: cn("flex flex-1 flex-col overflow-hidden", isHomeVariant ? "mt-2 gap-0" : "mt-4 gap-3"),
2983
2984
  style: !isPurchaseVariant && !isHomeVariant ? { minHeight: `${ITEMS_PER_PAGE * 86}px` } : void 0,
2984
2985
  children: isPurchaseVariant ? purchaseItems.length > 0 ? purchaseItems.slice(0, 7).map((purchase, index) => {
2985
2986
  const maxAmount = 6e4;
@@ -3018,7 +3019,7 @@ var PropertyNewsUpdates = React5__namespace.forwardRef(
3018
3019
  style: {
3019
3020
  width: "100%",
3020
3021
  textAlign: "left",
3021
- background: "transparent",
3022
+ backgroundColor: "transparent",
3022
3023
  border: "none",
3023
3024
  cursor: "pointer",
3024
3025
  padding: "0.75rem 0",
@@ -3027,11 +3028,22 @@ var PropertyNewsUpdates = React5__namespace.forwardRef(
3027
3028
  justifyContent: "space-between",
3028
3029
  alignItems: "flex-start",
3029
3030
  gap: "0.5rem",
3030
- color: "inherit"
3031
+ color: "inherit",
3032
+ transition: "background-color 0.15s"
3033
+ },
3034
+ onMouseEnter: (e) => {
3035
+ e.currentTarget.style.backgroundColor = "rgba(255,255,255,0.04)";
3036
+ const title = e.currentTarget.querySelector("h3");
3037
+ if (title) title.style.color = "var(--color-accent, #E6C87E)";
3038
+ },
3039
+ onMouseLeave: (e) => {
3040
+ e.currentTarget.style.backgroundColor = "transparent";
3041
+ const title = e.currentTarget.querySelector("h3");
3042
+ if (title) title.style.color = "#f8f9fa";
3031
3043
  },
3032
3044
  children: [
3033
3045
  /* @__PURE__ */ jsxRuntime.jsxs("div", { style: { flex: 1 }, children: [
3034
- /* @__PURE__ */ jsxRuntime.jsx("h3", { style: { fontSize: "0.85rem", fontWeight: 400, marginBottom: "0.25rem", color: "#f8f9fa", lineHeight: 1.4 }, children: item.title }),
3046
+ /* @__PURE__ */ jsxRuntime.jsx("h3", { style: { fontSize: "0.85rem", fontWeight: 400, marginBottom: "0.25rem", color: "#f8f9fa", lineHeight: 1.4, transition: "color 0.15s" }, children: item.title }),
3035
3047
  /* @__PURE__ */ jsxRuntime.jsxs("div", { style: { display: "flex", gap: "0.5rem", alignItems: "center", flexWrap: "wrap" }, children: [
3036
3048
  /* @__PURE__ */ jsxRuntime.jsx("span", { style: { color: "#848e9c", fontSize: "0.7rem" }, children: typeof item.date === "string" ? item.date : formatDate(item.date) }),
3037
3049
  item.source && /* @__PURE__ */ jsxRuntime.jsx("span", { style: { padding: "0.1rem 0.4rem", borderRadius: "3px", fontSize: "0.62rem", fontWeight: 500, backgroundColor: "rgba(255,255,255,0.07)", color: "#848e9c", whiteSpace: "nowrap" }, children: item.source }),
@@ -3121,8 +3133,8 @@ var PropertyNewsUpdates = React5__namespace.forwardRef(
3121
3133
  type: "button",
3122
3134
  onClick: () => setHomePage((p) => Math.max(0, p - 1)),
3123
3135
  disabled: homePage === 0,
3124
- style: { background: "transparent", border: "1px solid rgba(255,255,255,0.15)", borderRadius: "999px", padding: "0.2rem 0.75rem", fontSize: "0.7rem", textTransform: "uppercase", letterSpacing: "0.15em", cursor: homePage === 0 ? "not-allowed" : "pointer", opacity: homePage === 0 ? 0.4 : 1, color: "rgba(255,255,255,0.6)" },
3125
- children: "Prev"
3136
+ style: { background: "transparent", border: "1px solid rgba(255,255,255,0.15)", borderRadius: "50%", width: "28px", height: "28px", display: "flex", alignItems: "center", justifyContent: "center", padding: 0, cursor: homePage === 0 ? "not-allowed" : "pointer", opacity: homePage === 0 ? 0.4 : 1, color: "rgba(255,255,255,0.6)" },
3137
+ children: /* @__PURE__ */ jsxRuntime.jsx("svg", { xmlns: "http://www.w3.org/2000/svg", width: "14", height: "14", viewBox: "0 0 24 24", fill: "currentColor", children: /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M15.41 7.41L14 6l-6 6 6 6 1.41-1.41L10.83 12z" }) })
3126
3138
  }
3127
3139
  ),
3128
3140
  /* @__PURE__ */ jsxRuntime.jsxs("span", { style: { fontSize: "0.7rem", color: "rgba(255,255,255,0.5)" }, children: [
@@ -3136,8 +3148,8 @@ var PropertyNewsUpdates = React5__namespace.forwardRef(
3136
3148
  type: "button",
3137
3149
  onClick: () => setHomePage((p) => Math.min(homeTotalPages - 1, p + 1)),
3138
3150
  disabled: homePage >= homeTotalPages - 1,
3139
- style: { background: "transparent", border: "1px solid rgba(255,255,255,0.15)", borderRadius: "999px", padding: "0.2rem 0.75rem", fontSize: "0.7rem", textTransform: "uppercase", letterSpacing: "0.15em", cursor: homePage >= homeTotalPages - 1 ? "not-allowed" : "pointer", opacity: homePage >= homeTotalPages - 1 ? 0.4 : 1, color: "rgba(255,255,255,0.6)" },
3140
- children: "Next"
3151
+ style: { background: "transparent", border: "1px solid rgba(255,255,255,0.15)", borderRadius: "50%", width: "28px", height: "28px", display: "flex", alignItems: "center", justifyContent: "center", padding: 0, cursor: homePage >= homeTotalPages - 1 ? "not-allowed" : "pointer", opacity: homePage >= homeTotalPages - 1 ? 0.4 : 1, color: "rgba(255,255,255,0.6)" },
3152
+ children: /* @__PURE__ */ jsxRuntime.jsx("svg", { xmlns: "http://www.w3.org/2000/svg", width: "14", height: "14", viewBox: "0 0 24 24", fill: "currentColor", children: /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M10 6L8.59 7.41 13.17 12l-4.58 4.59L10 18l6-6z" }) })
3141
3153
  }
3142
3154
  )
3143
3155
  ] }),
@@ -3148,8 +3160,9 @@ var PropertyNewsUpdates = React5__namespace.forwardRef(
3148
3160
  type: "button",
3149
3161
  onClick: () => setPage((p) => Math.max(0, p - 1)),
3150
3162
  disabled: page === 0,
3151
- className: cn("rounded-full border border-white/15 px-3 py-1 uppercase tracking-[0.2em]", page === 0 ? "opacity-40 cursor-not-allowed" : "hover:border-white/40"),
3152
- children: "Prev"
3163
+ className: cn("rounded-full border border-white/15 flex items-center justify-center", page === 0 ? "opacity-40 cursor-not-allowed" : "hover:border-white/40"),
3164
+ style: { width: "28px", height: "28px", padding: 0, background: "transparent", color: "rgba(255,255,255,0.6)" },
3165
+ children: /* @__PURE__ */ jsxRuntime.jsx("svg", { xmlns: "http://www.w3.org/2000/svg", width: "14", height: "14", viewBox: "0 0 24 24", fill: "currentColor", children: /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M15.41 7.41L14 6l-6 6 6 6 1.41-1.41L10.83 12z" }) })
3153
3166
  }
3154
3167
  ),
3155
3168
  /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "font-medium text-white/70", children: [
@@ -3164,8 +3177,9 @@ var PropertyNewsUpdates = React5__namespace.forwardRef(
3164
3177
  type: "button",
3165
3178
  onClick: () => setPage((p) => Math.min(totalPages - 1, p + 1)),
3166
3179
  disabled: page >= totalPages - 1,
3167
- className: cn("rounded-full border border-white/15 px-3 py-1 uppercase tracking-[0.2em]", page >= totalPages - 1 ? "opacity-40 cursor-not-allowed" : "hover:border-white/40"),
3168
- children: "Next"
3180
+ className: cn("rounded-full border border-white/15 flex items-center justify-center", page >= totalPages - 1 ? "opacity-40 cursor-not-allowed" : "hover:border-white/40"),
3181
+ style: { width: "28px", height: "28px", padding: 0, background: "transparent", color: "rgba(255,255,255,0.6)" },
3182
+ children: /* @__PURE__ */ jsxRuntime.jsx("svg", { xmlns: "http://www.w3.org/2000/svg", width: "14", height: "14", viewBox: "0 0 24 24", fill: "currentColor", children: /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M10 6L8.59 7.41 13.17 12l-4.58 4.59L10 18l6-6z" }) })
3169
3183
  }
3170
3184
  )
3171
3185
  ] }),
@@ -5674,8 +5688,19 @@ var HeaderContainer = styled25__default.default.header`
5674
5688
  box-sizing: border-box;
5675
5689
 
5676
5690
  @media (max-width: 768px) {
5677
- padding: 0 1rem;
5678
- padding-top: max(env(safe-area-inset-top, 0px), var(--telegram-safe-top, 0px));
5691
+ top: 0.5rem;
5692
+ left: 0.75rem;
5693
+ right: 0.75rem;
5694
+ width: calc(100% - 1.5rem);
5695
+ height: 46px;
5696
+ min-height: 46px;
5697
+ padding: 0 0.75rem;
5698
+ border-radius: 12px;
5699
+ background-color: rgba(13, 17, 23, 0.92);
5700
+ backdrop-filter: blur(12px);
5701
+ border: 1px solid rgba(255, 255, 255, 0.08);
5702
+ border-bottom: 1px solid rgba(255, 255, 255, 0.08);
5703
+ box-shadow: 0 4px 20px rgba(0, 0, 0, 0.3);
5679
5704
  }
5680
5705
  `;
5681
5706
  var HeaderSpacer = styled25__default.default.div`
@@ -5683,6 +5708,10 @@ var HeaderSpacer = styled25__default.default.div`
5683
5708
  min-height: 56px;
5684
5709
  min-height: calc(56px + max(env(safe-area-inset-top, 0px), var(--telegram-safe-top, 0px)));
5685
5710
  flex-shrink: 0;
5711
+
5712
+ @media (max-width: 768px) {
5713
+ min-height: calc(46px + 0.5rem);
5714
+ }
5686
5715
  `;
5687
5716
  var Logo = styled25__default.default.div`
5688
5717
  display: flex;
@@ -9670,6 +9699,7 @@ function OfferingProgressCard({
9670
9699
  raisedAmount,
9671
9700
  targetAmount,
9672
9701
  isPrivateClient = false,
9702
+ variant = "default",
9673
9703
  style,
9674
9704
  className
9675
9705
  }) {
@@ -9701,6 +9731,108 @@ function OfferingProgressCard({
9701
9731
  const interval = setInterval(() => setCountdown(calculateCountdown()), 1e3);
9702
9732
  return () => clearInterval(interval);
9703
9733
  }, [opensAt]);
9734
+ if (variant === "compact") {
9735
+ return /* @__PURE__ */ jsxRuntime.jsxs(CompactContainer, { style, className, children: [
9736
+ /* @__PURE__ */ jsxRuntime.jsx(ProgressBarOuter, { children: /* @__PURE__ */ jsxRuntime.jsx(ProgressBarInner, { style: { width: `${Math.min(percentSold, 100)}%` } }) }),
9737
+ /* @__PURE__ */ jsxRuntime.jsxs(ProgressInfo, { children: [
9738
+ /* @__PURE__ */ jsxRuntime.jsxs(ProgressSubscribers, { children: [
9739
+ "Subscribers: ",
9740
+ subscriberCount.toLocaleString()
9741
+ ] }),
9742
+ /* @__PURE__ */ jsxRuntime.jsxs(ProgressAmounts, { children: [
9743
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "raised", children: formatCurrency3(computedRaised) }),
9744
+ /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "target", children: [
9745
+ " / ",
9746
+ formatCurrency3(computedTarget)
9747
+ ] })
9748
+ ] })
9749
+ ] })
9750
+ ] });
9751
+ }
9752
+ if (variant === "home") {
9753
+ const isPreLive = !ipoStarted && ipoStatus !== "CLOSED" && ipoStatus !== "CANCELLED";
9754
+ return /* @__PURE__ */ jsxRuntime.jsxs(Container, { style, className, children: [
9755
+ /* @__PURE__ */ jsxRuntime.jsxs(Header2, { children: [
9756
+ /* @__PURE__ */ jsxRuntime.jsxs("h3", { children: [
9757
+ /* @__PURE__ */ jsxRuntime.jsx(fa.FaChartLine, {}),
9758
+ " Offering Progress"
9759
+ ] }),
9760
+ /* @__PURE__ */ jsxRuntime.jsx("div", { style: { display: "flex", alignItems: "center", gap: "0.4rem" }, children: ipoStarted ? /* @__PURE__ */ jsxRuntime.jsxs(StatusSpan, { $color: "#0ecb81", children: [
9761
+ /* @__PURE__ */ jsxRuntime.jsx(StatusDot, { $color: "#0ecb81", $pulse: true }),
9762
+ "LIVE"
9763
+ ] }) : /* @__PURE__ */ jsxRuntime.jsxs(StatusSpan, { $color: statusColor || "#D4AF37", children: [
9764
+ /* @__PURE__ */ jsxRuntime.jsx(StatusDot, { $color: statusColor || "#D4AF37" }),
9765
+ statusLabel || "Preparing"
9766
+ ] }) })
9767
+ ] }),
9768
+ isPreLive ? /* @__PURE__ */ jsxRuntime.jsxs(HomePreLiveRow, { children: [
9769
+ countdown ? /* @__PURE__ */ jsxRuntime.jsxs(HomeCountdownSide, { children: [
9770
+ /* @__PURE__ */ jsxRuntime.jsx(CountdownLabel, { children: "Opens In" }),
9771
+ /* @__PURE__ */ jsxRuntime.jsxs(CountdownDigits, { children: [
9772
+ /* @__PURE__ */ jsxRuntime.jsx(CountdownNumber, { children: String(countdown.days).padStart(2, "0") }),
9773
+ /* @__PURE__ */ jsxRuntime.jsx(CountdownUnitLabel, { children: "D" }),
9774
+ /* @__PURE__ */ jsxRuntime.jsx(CountdownSeparator, { children: ":" }),
9775
+ /* @__PURE__ */ jsxRuntime.jsx(CountdownNumber, { children: String(countdown.hours).padStart(2, "0") }),
9776
+ /* @__PURE__ */ jsxRuntime.jsx(CountdownUnitLabel, { children: "H" }),
9777
+ /* @__PURE__ */ jsxRuntime.jsx(CountdownSeparator, { children: ":" }),
9778
+ /* @__PURE__ */ jsxRuntime.jsx(CountdownNumber, { children: String(countdown.minutes).padStart(2, "0") }),
9779
+ /* @__PURE__ */ jsxRuntime.jsx(CountdownUnitLabel, { children: "M" }),
9780
+ /* @__PURE__ */ jsxRuntime.jsx(CountdownSeparator, { children: ":" }),
9781
+ /* @__PURE__ */ jsxRuntime.jsx(CountdownNumber, { children: String(countdown.seconds).padStart(2, "0") }),
9782
+ /* @__PURE__ */ jsxRuntime.jsx(CountdownUnitLabel, { children: "S" })
9783
+ ] })
9784
+ ] }) : /* @__PURE__ */ jsxRuntime.jsx(HomeCountdownSide, { children: /* @__PURE__ */ jsxRuntime.jsx(PreLiveStatus, { $statusColor: statusColor, children: "Sale Not Yet Open" }) }),
9785
+ /* @__PURE__ */ jsxRuntime.jsxs(HomeUnitsSide, { children: [
9786
+ /* @__PURE__ */ jsxRuntime.jsx(HomeUnitsLabel, { children: "Units Subscribed" }),
9787
+ /* @__PURE__ */ jsxRuntime.jsxs(HomeUnitsValue, { children: [
9788
+ /* @__PURE__ */ jsxRuntime.jsx(HomeSpinner, {}),
9789
+ /* @__PURE__ */ jsxRuntime.jsxs("span", { children: [
9790
+ " / ",
9791
+ supplyToSell.toLocaleString()
9792
+ ] })
9793
+ ] })
9794
+ ] })
9795
+ ] }) : /* @__PURE__ */ jsxRuntime.jsxs(LiveBody, { children: [
9796
+ /* @__PURE__ */ jsxRuntime.jsxs(LiveTopRow, { children: [
9797
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
9798
+ /* @__PURE__ */ jsxRuntime.jsxs(LiveLabel, { children: [
9799
+ "Offering Subscribed ",
9800
+ /* @__PURE__ */ jsxRuntime.jsx("span", { children: "\u24D8" })
9801
+ ] }),
9802
+ /* @__PURE__ */ jsxRuntime.jsxs(LivePercent, { children: [
9803
+ percentSold.toFixed(1),
9804
+ "%",
9805
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "arrow", children: "\u2191" })
9806
+ ] })
9807
+ ] }),
9808
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { style: { textAlign: "right" }, children: [
9809
+ /* @__PURE__ */ jsxRuntime.jsx(LiveLabel, { children: "Units Subscribed" }),
9810
+ /* @__PURE__ */ jsxRuntime.jsxs(UnitsValue, { children: [
9811
+ /* @__PURE__ */ jsxRuntime.jsx("span", { children: totalSold.toLocaleString() }),
9812
+ /* @__PURE__ */ jsxRuntime.jsxs("small", { children: [
9813
+ "/ ",
9814
+ supplyToSell.toLocaleString()
9815
+ ] })
9816
+ ] })
9817
+ ] })
9818
+ ] }),
9819
+ /* @__PURE__ */ jsxRuntime.jsx(ProgressBarOuter, { children: /* @__PURE__ */ jsxRuntime.jsx(ProgressBarInner, { style: { width: `${Math.min(percentSold, 100)}%` } }) }),
9820
+ /* @__PURE__ */ jsxRuntime.jsxs(ProgressInfo, { children: [
9821
+ /* @__PURE__ */ jsxRuntime.jsxs(ProgressSubscribers, { children: [
9822
+ "Subscribers: ",
9823
+ subscriberCount.toLocaleString()
9824
+ ] }),
9825
+ /* @__PURE__ */ jsxRuntime.jsxs(ProgressAmounts, { children: [
9826
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "raised", children: formatCurrency3(computedRaised) }),
9827
+ /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "target", children: [
9828
+ " / ",
9829
+ formatCurrency3(computedTarget)
9830
+ ] })
9831
+ ] })
9832
+ ] })
9833
+ ] })
9834
+ ] });
9835
+ }
9704
9836
  return /* @__PURE__ */ jsxRuntime.jsxs(Container, { style, className, children: [
9705
9837
  /* @__PURE__ */ jsxRuntime.jsxs(Header2, { children: [
9706
9838
  /* @__PURE__ */ jsxRuntime.jsxs("h3", { children: [
@@ -9769,7 +9901,7 @@ function OfferingProgressCard({
9769
9901
  /* @__PURE__ */ jsxRuntime.jsx("span", { children: "\u24D8" })
9770
9902
  ] }),
9771
9903
  /* @__PURE__ */ jsxRuntime.jsxs(LivePercent, { children: [
9772
- percentSold < 0.1 && percentSold > 0 ? percentSold.toFixed(3) : percentSold.toFixed(1),
9904
+ percentSold.toFixed(1),
9773
9905
  "%",
9774
9906
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "arrow", children: "\u2191" })
9775
9907
  ] })
@@ -10002,6 +10134,59 @@ var ProgressAmounts = styled25__default.default.div`
10002
10134
  .raised { color: #D4AF37; }
10003
10135
  .target { color: rgba(255,255,255,0.3); }
10004
10136
  `;
10137
+ var CompactContainer = styled25__default.default.div`
10138
+ width: 100%;
10139
+ margin: 1.5rem 0;
10140
+ display: flex;
10141
+ flex-direction: column;
10142
+ gap: 0.5rem;
10143
+ `;
10144
+ var HomePreLiveRow = styled25__default.default.div`
10145
+ display: flex;
10146
+ align-items: center;
10147
+ justify-content: space-between;
10148
+ padding-top: 1rem;
10149
+ `;
10150
+ var HomeCountdownSide = styled25__default.default.div`
10151
+ display: flex;
10152
+ flex-direction: column;
10153
+ align-items: center;
10154
+ flex: 1;
10155
+ `;
10156
+ var HomeUnitsSide = styled25__default.default.div`
10157
+ text-align: center;
10158
+ flex-shrink: 0;
10159
+ `;
10160
+ var HomeUnitsLabel = styled25__default.default.div`
10161
+ font-size: 0.6rem;
10162
+ color: var(--color-text-secondary);
10163
+ text-transform: uppercase;
10164
+ letter-spacing: 0.1em;
10165
+ margin-bottom: 0.2rem;
10166
+ `;
10167
+ var HomeUnitsValue = styled25__default.default.div`
10168
+ font-size: 1.1rem;
10169
+ font-weight: 700;
10170
+ font-family: monospace;
10171
+ span {
10172
+ color: var(--color-text-secondary);
10173
+ font-weight: 400;
10174
+ }
10175
+ `;
10176
+ var HomeSpinner = styled25__default.default.span`
10177
+ display: inline-block;
10178
+ width: 14px;
10179
+ height: 14px;
10180
+ border: 2px solid rgba(255, 255, 255, 0.1);
10181
+ border-top-color: var(--color-accent, #f0b90b);
10182
+ border-radius: 50%;
10183
+ animation: homeSpin 1s linear infinite;
10184
+ vertical-align: middle;
10185
+ margin-right: 0.15rem;
10186
+ @keyframes homeSpin {
10187
+ to { transform: rotate(360deg); }
10188
+ }
10189
+ `;
10005
10190
  var MAX_DISPLAY_AMOUNT = 6e4;
10006
10191
  var formatCurrency4 = (amount) => {
10007
10192
  if (amount >= 1e6) return `$${(amount / 1e6).toFixed(2)}M`;
@@ -11679,7 +11864,7 @@ function PortfolioActivityPanel({
11679
11864
  formatTimestamp(trade.executedAt)
11680
11865
  ] })
11681
11866
  ] }),
11682
- trade.status === "SETTLEMENT_FAILED" ? /* @__PURE__ */ jsxRuntime.jsx(ActivityTag, { $color: "#f6465d", $bg: "rgba(246,70,93,0.12)", children: "Failed" }) : /* @__PURE__ */ jsxRuntime.jsx(
11867
+ /* @__PURE__ */ jsxRuntime.jsx(
11683
11868
  ActivityTag,
11684
11869
  {
11685
11870
  $color: trade.side === "SELL" ? "#f6465d" : "#0ecb81",
@@ -13758,7 +13943,7 @@ function PropertyValuation({
13758
13943
  /* @__PURE__ */ jsxRuntime.jsxs("div", { style: { display: "flex", flexDirection: "column", gap: "0.5rem" }, children: [
13759
13944
  /* @__PURE__ */ jsxRuntime.jsxs(PricingModelDetail, { children: [
13760
13945
  /* @__PURE__ */ jsxRuntime.jsx(PropertyDetailLabel, { children: "Last Price" }),
13761
- /* @__PURE__ */ jsxRuntime.jsx(PricingDetailValue, { children: formatCompact(lastPrice) })
13946
+ /* @__PURE__ */ jsxRuntime.jsx(PricingDetailValue, { children: formatCurrency6(lastPrice) })
13762
13947
  ] }),
13763
13948
  /* @__PURE__ */ jsxRuntime.jsxs(PricingModelDetail, { children: [
13764
13949
  /* @__PURE__ */ jsxRuntime.jsxs("div", { style: { display: "flex", justifyContent: "space-between", alignItems: "center", width: "100%" }, children: [
@@ -13769,11 +13954,11 @@ function PropertyValuation({
13769
13954
  ] })
13770
13955
  ] }),
13771
13956
  /* @__PURE__ */ jsxRuntime.jsxs(PricingDetailValue, { style: { color: "var(--color-accent)", fontWeight: "bold" }, children: [
13772
- formatCompact(fairValue),
13957
+ formatCurrency6(fairValue),
13773
13958
  " ",
13774
13959
  /* @__PURE__ */ jsxRuntime.jsxs("span", { style: { fontSize: "0.85em", fontWeight: "normal", opacity: 0.8 }, children: [
13775
13960
  "(",
13776
- formatCompact(fairValue * tokensOutstanding),
13961
+ formatCurrency6(fairValue * tokensOutstanding, { maximumFractionDigits: 0 }),
13777
13962
  ")"
13778
13963
  ] })
13779
13964
  ] })
@@ -13790,7 +13975,7 @@ function PropertyValuation({
13790
13975
  /* @__PURE__ */ jsxRuntime.jsx(GaugeIndicator, { type: "fairValue", position: 50 }),
13791
13976
  /* @__PURE__ */ jsxRuntime.jsxs(GaugePriceTag, { position: gaugePosition, children: [
13792
13977
  /* @__PURE__ */ jsxRuntime.jsx("span", { children: "Last Price" }),
13793
- /* @__PURE__ */ jsxRuntime.jsx("span", { children: formatCompact(lastPrice) })
13978
+ /* @__PURE__ */ jsxRuntime.jsx("span", { children: formatCurrency6(lastPrice) })
13794
13979
  ] }),
13795
13980
  /* @__PURE__ */ jsxRuntime.jsx(GaugeIndicator, { type: "lastPrice", position: gaugePosition })
13796
13981
  ] }),
@@ -13798,36 +13983,36 @@ function PropertyValuation({
13798
13983
  /* @__PURE__ */ jsxRuntime.jsx(ValuationItem, { children: /* @__PURE__ */ jsxRuntime.jsxs(ValuationValue, { style: { color: "#4CAF50" }, children: [
13799
13984
  /* @__PURE__ */ jsxRuntime.jsxs("span", { children: [
13800
13985
  "< ",
13801
- formatCompact(undervaluedThreshold)
13986
+ formatCurrency6(undervaluedThreshold)
13802
13987
  ] }),
13803
13988
  /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "valuation-amount-span", style: { fontSize: "0.8rem", fontWeight: "normal" }, children: [
13804
13989
  "(",
13805
- formatCompact(undervaluedThreshold * tokensOutstanding),
13990
+ formatMillions(undervaluedThreshold * tokensOutstanding),
13806
13991
  ")"
13807
13992
  ] })
13808
13993
  ] }) }),
13809
13994
  /* @__PURE__ */ jsxRuntime.jsx(ValuationItem, { children: /* @__PURE__ */ jsxRuntime.jsxs(ValuationValue, { style: { color: "var(--color-accent)" }, children: [
13810
- /* @__PURE__ */ jsxRuntime.jsx("span", { children: formatCompact(fairValue) }),
13995
+ /* @__PURE__ */ jsxRuntime.jsx("span", { children: formatCurrency6(fairValue) }),
13811
13996
  /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "valuation-amount-span", style: { fontSize: "0.8rem", fontWeight: "normal" }, children: [
13812
13997
  "(",
13813
- formatCompact(fairValue * tokensOutstanding),
13998
+ formatMillions(fairValue * tokensOutstanding),
13814
13999
  ")"
13815
14000
  ] })
13816
14001
  ] }) }),
13817
14002
  /* @__PURE__ */ jsxRuntime.jsx(ValuationItem, { children: /* @__PURE__ */ jsxRuntime.jsxs(ValuationValue, { style: { color: "#F44336" }, children: [
13818
14003
  /* @__PURE__ */ jsxRuntime.jsxs("span", { children: [
13819
14004
  "> ",
13820
- formatCompact(overvaluedThreshold)
14005
+ formatCurrency6(overvaluedThreshold)
13821
14006
  ] }),
13822
14007
  /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "valuation-amount-span", style: { fontSize: "0.8rem", fontWeight: "normal" }, children: [
13823
14008
  "(",
13824
- formatCompact(overvaluedThreshold * tokensOutstanding),
14009
+ formatMillions(overvaluedThreshold * tokensOutstanding),
13825
14010
  ")"
13826
14011
  ] })
13827
14012
  ] }) })
13828
14013
  ] })
13829
14014
  ] }),
13830
- /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
14015
+ /* @__PURE__ */ jsxRuntime.jsxs(HiddenMobileChart, { children: [
13831
14016
  /* @__PURE__ */ jsxRuntime.jsx("h3", { style: { marginBottom: "1rem", fontSize: "1.1rem", color: "#fff" }, children: "Historical Valuation" }),
13832
14017
  /* @__PURE__ */ jsxRuntime.jsx(ChartContainer, { children: /* @__PURE__ */ jsxRuntime.jsxs(ChartBackground, { children: [
13833
14018
  axisLabels.map((label, index) => /* @__PURE__ */ jsxRuntime.jsx(YAxisLabel, { style: { top: `${10 + index * 22}%` }, children: label }, `${label}-${index}`)),
@@ -13946,7 +14131,15 @@ function PropertyValuation({
13946
14131
  ] })
13947
14132
  ] }) })
13948
14133
  ] })
13949
- ] })
14134
+ ] }),
14135
+ /* @__PURE__ */ jsxRuntime.jsx("h3", { className: "desktop-only-historical-chart", style: { marginBottom: "1rem", fontSize: "1.1rem", color: "#fff" }, children: "Historical Valuation" }),
14136
+ /* @__PURE__ */ jsxRuntime.jsx(ChartContainer, { className: "desktop-only-historical-chart", children: /* @__PURE__ */ jsxRuntime.jsxs(ChartBackground, { children: [
14137
+ axisLabels.map((label, index) => /* @__PURE__ */ jsxRuntime.jsx(YAxisLabel, { style: { top: `${10 + index * 22}%` }, children: label }, `${label}-${index}`)),
14138
+ /* @__PURE__ */ jsxRuntime.jsxs(ValuationSvg, { viewBox: `0 0 ${CHART_WIDTH} ${CHART_HEIGHT}`, preserveAspectRatio: "none", children: [
14139
+ valuationPath ? /* @__PURE__ */ jsxRuntime.jsx("path", { d: valuationPath, fill: "none", stroke: "#D4AF37", strokeWidth: "2.5", strokeLinecap: "round", strokeLinejoin: "round", vectorEffect: "non-scaling-stroke" }) : null,
14140
+ fairValuePath ? /* @__PURE__ */ jsxRuntime.jsx("path", { d: fairValuePath, fill: "none", stroke: "#FFFFFF", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", vectorEffect: "non-scaling-stroke" }) : null
14141
+ ] })
14142
+ ] }) })
13950
14143
  ] })
13951
14144
  ] }),
13952
14145
  /* @__PURE__ */ jsxRuntime.jsxs(RecentSalesSection, { children: [
@@ -14020,14 +14213,6 @@ function formatMillions(value) {
14020
14213
  }
14021
14214
  return `$${(value / 1e6).toFixed(2)}m`;
14022
14215
  }
14023
- function formatCompact(value) {
14024
- if (value == null || !Number.isFinite(value)) return "\u2014";
14025
- const abs = Math.abs(value);
14026
- if (abs >= 1e9) return `$${(value / 1e9).toFixed(2)}B`;
14027
- if (abs >= 1e6) return `$${(value / 1e6).toFixed(2)}M`;
14028
- if (abs >= 1e3) return `$${(value / 1e3).toFixed(1)}K`;
14029
- return formatCurrency6(value);
14030
- }
14031
14216
  function formatBedroomLabel(bedrooms) {
14032
14217
  if (!Number.isFinite(bedrooms)) return "\u2014";
14033
14218
  return `${bedrooms} Bed`;
@@ -14151,6 +14336,12 @@ var GaugePriceTag = styled25__default.default.div`
14151
14336
  color: var(--color-accent);
14152
14337
  }
14153
14338
  `;
14339
+ var HiddenMobileChart = styled25__default.default.div`
14340
+ display: none;
14341
+ @media (max-width: 480px) {
14342
+ display: block;
14343
+ }
14344
+ `;
14154
14345
  var ValuationWrapper = styled25__default.default.div`
14155
14346
  display: flex;
14156
14347
  flex-direction: column;
@@ -14202,10 +14393,9 @@ var PricingModelCard = styled25__default.default.div`
14202
14393
  var PricingModelHeader = styled25__default.default.div`
14203
14394
  display: flex;
14204
14395
  justify-content: space-between;
14205
- align-items: flex-start;
14396
+ align-items: center;
14206
14397
  margin-bottom: 1.5rem;
14207
14398
  gap: 1rem;
14208
- flex-wrap: wrap;
14209
14399
 
14210
14400
  .valuation-info {
14211
14401
  display: flex;
@@ -14213,7 +14403,6 @@ var PricingModelHeader = styled25__default.default.div`
14213
14403
  gap: 0.25rem;
14214
14404
  font-size: 0.85rem;
14215
14405
  color: rgba(255, 255, 255, 0.75);
14216
- flex-shrink: 0;
14217
14406
  }
14218
14407
  `;
14219
14408
  var PricingModelTitle = styled25__default.default.h3`
@@ -14280,31 +14469,15 @@ var ValuationDetails = styled25__default.default.div`
14280
14469
  display: flex;
14281
14470
  justify-content: space-between;
14282
14471
  margin-top: 1rem;
14283
- gap: 0.25rem;
14284
14472
  `;
14285
14473
  var ValuationItem = styled25__default.default.div`
14286
14474
  display: flex;
14287
14475
  flex-direction: column;
14288
- min-width: 0;
14289
- overflow: hidden;
14290
14476
  `;
14291
14477
  var ValuationValue = styled25__default.default.div`
14292
14478
  font-size: 1rem;
14293
14479
  font-weight: 600;
14294
14480
  color: #fff;
14295
- display: flex;
14296
- flex-direction: column;
14297
- gap: 2px;
14298
- overflow-wrap: break-word;
14299
- word-break: break-word;
14300
-
14301
- @media (max-width: 480px) {
14302
- font-size: 0.72rem;
14303
-
14304
- .valuation-amount-span {
14305
- display: none;
14306
- }
14307
- }
14308
14481
  `;
14309
14482
  var ChartContainer = styled25__default.default.div`
14310
14483
  width: 100%;