@loafmarkets/ui 0.1.39 → 0.1.41

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
@@ -901,7 +901,7 @@ type PropertyBuyProps = {
901
901
  walletUsdcBalance?: number | null;
902
902
  walletPropertyTokenBalance?: number | null;
903
903
  onPurchase?: (tokenAmount: number) => Promise<void>;
904
- purchaseStatus?: 'idle' | 'checking-allowance' | 'approving' | 'purchasing' | 'success' | 'error';
904
+ purchaseStatus?: 'idle' | 'checking-allowance' | 'approving' | 'purchasing' | 'pending-allocation' | 'success' | 'error';
905
905
  purchaseError?: string | null;
906
906
  onDeposit?: () => void;
907
907
  initialUserSubscriptions?: PropertySubscription[];
package/dist/index.d.ts CHANGED
@@ -901,7 +901,7 @@ type PropertyBuyProps = {
901
901
  walletUsdcBalance?: number | null;
902
902
  walletPropertyTokenBalance?: number | null;
903
903
  onPurchase?: (tokenAmount: number) => Promise<void>;
904
- purchaseStatus?: 'idle' | 'checking-allowance' | 'approving' | 'purchasing' | 'success' | 'error';
904
+ purchaseStatus?: 'idle' | 'checking-allowance' | 'approving' | 'purchasing' | 'pending-allocation' | 'success' | 'error';
905
905
  purchaseError?: string | null;
906
906
  onDeposit?: () => void;
907
907
  initialUserSubscriptions?: PropertySubscription[];
package/dist/index.js CHANGED
@@ -2009,7 +2009,7 @@ function DesktopOrderbookLayout({
2009
2009
  /* @__PURE__ */ jsxRuntime.jsx(
2010
2010
  "div",
2011
2011
  {
2012
- className: "divide-y divide-white/5 overflow-y-auto",
2012
+ className: "flex flex-col justify-end divide-y divide-white/5 overflow-y-auto",
2013
2013
  style: { height: `${sectionHeight}px`, scrollbarGutter: "stable" },
2014
2014
  children: asks.map((l, idx) => /* @__PURE__ */ jsxRuntime.jsx(
2015
2015
  DepthRow,
@@ -4875,6 +4875,7 @@ var Header = ({
4875
4875
  const portfolioActive = resolvedActiveTab === "portfolio";
4876
4876
  const learnActive = resolvedActiveTab === "learn";
4877
4877
  return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
4878
+ /* @__PURE__ */ jsxRuntime.jsx(SafeAreaCover, {}),
4878
4879
  /* @__PURE__ */ jsxRuntime.jsx(Overlay, { $isOpen: isMobileMenuOpen, onClick: () => setIsMobileMenuOpen(false) }),
4879
4880
  /* @__PURE__ */ jsxRuntime.jsxs(HeaderContainer, { children: [
4880
4881
  /* @__PURE__ */ jsxRuntime.jsxs("div", { style: { display: "flex", alignItems: "center" }, children: [
@@ -5124,6 +5125,17 @@ var Header = ({
5124
5125
  ] });
5125
5126
  };
5126
5127
  Header.displayName = "Header";
5128
+ var SafeAreaCover = styled24__default.default.div`
5129
+ position: fixed;
5130
+ top: 0;
5131
+ left: 0;
5132
+ right: 0;
5133
+ height: env(safe-area-inset-top, 0px);
5134
+ min-height: env(safe-area-inset-top, 0px);
5135
+ background-color: #0d1117;
5136
+ z-index: 1001;
5137
+ pointer-events: none;
5138
+ `;
5127
5139
  var Overlay = styled24__default.default.div`
5128
5140
  display: ${(props) => props.$isOpen ? "block" : "none"};
5129
5141
  position: fixed;
@@ -5170,20 +5182,24 @@ var HeaderContainer = styled24__default.default.header`
5170
5182
  display: flex;
5171
5183
  justify-content: space-between;
5172
5184
  align-items: center;
5185
+ /* Split padding so browsers that don't support env() inside shorthand
5186
+ still get the horizontal padding — only the top falls back to 0 */
5173
5187
  padding: 0 2rem;
5188
+ padding-top: env(safe-area-inset-top, 0px);
5174
5189
  background-color: #0d1117;
5175
5190
  border-bottom: 1px solid #232a32;
5176
5191
  position: sticky;
5177
5192
  top: 0;
5178
- left: 0;
5179
- right: 0;
5180
5193
  z-index: 1000;
5181
5194
  width: 100%;
5182
- height: 56px;
5195
+ /* Fallback min-height for browsers that can't evaluate calc+env */
5196
+ min-height: 56px;
5197
+ min-height: calc(56px + env(safe-area-inset-top, 0px));
5183
5198
  box-sizing: border-box;
5184
5199
 
5185
5200
  @media (max-width: 768px) {
5186
5201
  padding: 0 1rem;
5202
+ padding-top: env(safe-area-inset-top, 0px);
5187
5203
  }
5188
5204
  `;
5189
5205
  var Logo = styled24__default.default.div`
@@ -7295,7 +7311,7 @@ function GalleryMapSection({
7295
7311
  const [carouselIndex, setCarouselIndex] = React5.useState(0);
7296
7312
  const [showVideo, setShowVideo] = React5.useState(false);
7297
7313
  const [autoPlaying, setAutoPlaying] = React5.useState(autoPlay);
7298
- const resolvedMapUrl = mapUrl ?? (tokenName ? `https://demo.loafmarkets.com/map/${tokenName}?embed=true&zoom=14&hideOthers=true` : "about:blank");
7314
+ const resolvedMapUrl = mapUrl ?? (tokenName ? `/map/${tokenName}?embed=true&zoom=14&hideOthers=true` : "about:blank");
7299
7315
  React5.useEffect(() => {
7300
7316
  if (!autoPlaying || images.length <= 1) return;
7301
7317
  const interval = setInterval(() => {
@@ -8970,6 +8986,16 @@ var IPOAssetSelector = styled24__default.default.div`
8970
8986
  z-index: 10;
8971
8987
  transition: all 0.3s ease;
8972
8988
  &:hover { box-shadow: 0 12px 32px rgba(0,0,0,0.4); border-color: rgba(255,255,255,0.15); }
8989
+
8990
+ @media (max-width: 768px) {
8991
+ flex-wrap: wrap;
8992
+ padding: 0.75rem 1rem;
8993
+ gap: 0.5rem;
8994
+ }
8995
+
8996
+ @media (max-width: 480px) {
8997
+ padding: 0.6rem 0.75rem;
8998
+ }
8973
8999
  `;
8974
9000
  var AssetSelectorDropdown = styled24__default.default.div`
8975
9001
  display: flex;
@@ -8989,6 +9015,15 @@ var AssetName = styled24__default.default.div`
8989
9015
  letter-spacing: -0.02em;
8990
9016
  svg { margin-left: 0.75rem; transition: transform 0.3s cubic-bezier(0.4,0,0.2,1); opacity: 0.7; }
8991
9017
  &:hover svg { opacity: 1; }
9018
+
9019
+ @media (max-width: 768px) {
9020
+ font-size: 1rem;
9021
+ }
9022
+
9023
+ @media (max-width: 480px) {
9024
+ font-size: 0.9rem;
9025
+ svg { margin-left: 0.4rem; width: 16px; height: 16px; }
9026
+ }
8992
9027
  `;
8993
9028
  var SelectorMetrics = styled24__default.default.div`
8994
9029
  display: flex;
@@ -9000,6 +9035,20 @@ var SelectorMetrics = styled24__default.default.div`
9000
9035
  background: rgba(255,255,255,0.03);
9001
9036
  border-radius: 8px;
9002
9037
  border: 1px solid rgba(255,255,255,0.05);
9038
+
9039
+ @media (max-width: 768px) {
9040
+ gap: 0.6rem;
9041
+ padding: 0.4rem 0.75rem;
9042
+ margin-right: 0;
9043
+ }
9044
+
9045
+ @media (max-width: 480px) {
9046
+ width: 100%;
9047
+ justify-content: center;
9048
+ margin-left: 0;
9049
+ padding: 0.35rem 0.5rem;
9050
+ gap: 0.5rem;
9051
+ }
9003
9052
  `;
9004
9053
  var MetricLabel2 = styled24__default.default.span`
9005
9054
  font-size: 0.75rem;
@@ -9008,11 +9057,24 @@ var MetricLabel2 = styled24__default.default.span`
9008
9057
  letter-spacing: 0.05em;
9009
9058
  font-weight: 500;
9010
9059
  margin-right: 0.5rem;
9060
+
9061
+ @media (max-width: 768px) {
9062
+ font-size: 0.65rem;
9063
+ margin-right: 0.35rem;
9064
+ }
9011
9065
  `;
9012
9066
  var MetricValue = styled24__default.default.span`
9013
9067
  font-size: 1.25rem;
9014
9068
  font-weight: 700;
9015
9069
  color: ${(p) => p.$accent ? "#D4AF37" : "#fff"};
9070
+
9071
+ @media (max-width: 768px) {
9072
+ font-size: 1.05rem;
9073
+ }
9074
+
9075
+ @media (max-width: 480px) {
9076
+ font-size: 0.95rem;
9077
+ }
9016
9078
  `;
9017
9079
  var MetricChange = styled24__default.default.span`
9018
9080
  font-size: 0.85rem;
@@ -9021,6 +9083,10 @@ var MetricChange = styled24__default.default.span`
9021
9083
  display: flex;
9022
9084
  align-items: center;
9023
9085
  gap: 0.25rem;
9086
+
9087
+ @media (max-width: 768px) {
9088
+ font-size: 0.75rem;
9089
+ }
9024
9090
  `;
9025
9091
  var Separator = styled24__default.default.span`
9026
9092
  font-size: 1rem;
@@ -9039,6 +9105,11 @@ var IPODropdown = styled24__default.default.div`
9039
9105
  max-height: 360px;
9040
9106
  overflow-y: auto;
9041
9107
  border: 1px solid rgba(255,255,255,0.08);
9108
+
9109
+ @media (max-width: 480px) {
9110
+ max-height: 280px;
9111
+ border-radius: 12px;
9112
+ }
9042
9113
  animation: slideDown 0.3s cubic-bezier(0.4,0,0.2,1);
9043
9114
  @keyframes slideDown {
9044
9115
  from { opacity: 0; transform: translateY(-10px); }
@@ -9726,6 +9797,7 @@ function OrderPanel({
9726
9797
  displayedOwnedTokens,
9727
9798
  ownedTokensJustUpdated,
9728
9799
  lastOrderQuantity,
9800
+ orderPendingAllocation,
9729
9801
  orderPlacedSuccess,
9730
9802
  lastOrderDetails,
9731
9803
  tokenQuantity,
@@ -9788,7 +9860,40 @@ function OrderPanel({
9788
9860
  statusLabel
9789
9861
  ] })
9790
9862
  ] }),
9791
- orderPlacedSuccess ? /* @__PURE__ */ jsxRuntime.jsxs(OrderSuccessCard, { children: [
9863
+ orderPendingAllocation ? /* @__PURE__ */ jsxRuntime.jsxs(OrderPendingCard, { children: [
9864
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "pending-header", children: [
9865
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "spinner" }),
9866
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
9867
+ /* @__PURE__ */ jsxRuntime.jsx("p", { children: "Processing Order" }),
9868
+ /* @__PURE__ */ jsxRuntime.jsx("small", { children: "Awaiting allocation..." })
9869
+ ] })
9870
+ ] }),
9871
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "pending-body", children: [
9872
+ [
9873
+ { label: "Units Requested", value: /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
9874
+ lastOrderDetails?.tokens?.toFixed(2) || "0.00",
9875
+ " ",
9876
+ /* @__PURE__ */ jsxRuntime.jsx("span", { style: { color: "rgba(255,255,255,0.4)", fontWeight: 400 }, children: tokenSymbol })
9877
+ ] }) },
9878
+ { label: "Price Per Unit", value: `$${tokenPrice.toFixed(2)}` },
9879
+ {
9880
+ label: `${tokenDisplayName} Exposure`,
9881
+ value: `${((lastOrderDetails?.tokens ?? 0) / supplyToSell * 100).toFixed(3)}%`
9882
+ }
9883
+ ].map((row) => /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "pending-row", children: [
9884
+ /* @__PURE__ */ jsxRuntime.jsx("span", { children: row.label }),
9885
+ /* @__PURE__ */ jsxRuntime.jsx("strong", { children: row.value })
9886
+ ] }, row.label)),
9887
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "pending-total", children: [
9888
+ /* @__PURE__ */ jsxRuntime.jsx("span", { children: "Total Investment" }),
9889
+ /* @__PURE__ */ jsxRuntime.jsxs("strong", { children: [
9890
+ "$",
9891
+ lastOrderDetails?.total?.toLocaleString() || "0"
9892
+ ] })
9893
+ ] })
9894
+ ] }),
9895
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "pending-footnote", children: "Your order has been submitted and is being processed. This usually takes a few seconds." })
9896
+ ] }) : orderPlacedSuccess ? /* @__PURE__ */ jsxRuntime.jsxs(OrderSuccessCard, { children: [
9792
9897
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "success-header", children: [
9793
9898
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "icon", children: /* @__PURE__ */ jsxRuntime.jsx("svg", { width: "14", height: "14", viewBox: "0 0 24 24", fill: "none", stroke: "#D4AF37", strokeWidth: "2.5", strokeLinecap: "round", strokeLinejoin: "round", children: /* @__PURE__ */ jsxRuntime.jsx("polyline", { points: "20 6 9 17 4 12" }) }) }),
9794
9899
  /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
@@ -9967,7 +10072,7 @@ function OrderPanel({
9967
10072
  ] })
9968
10073
  ] })
9969
10074
  ] }),
9970
- !orderPlacedSuccess && /* @__PURE__ */ jsxRuntime.jsx(
10075
+ !orderPlacedSuccess && !orderPendingAllocation && /* @__PURE__ */ jsxRuntime.jsx(
9971
10076
  SubscribeButton,
9972
10077
  {
9973
10078
  type: "button",
@@ -10048,9 +10153,10 @@ var Panel2 = styled24__default.default.div`
10048
10153
  }
10049
10154
  @media (max-width: 768px) {
10050
10155
  padding: 1rem;
10051
- input[style*="font-size: 1.75rem"] {
10052
- font-size: 1.25rem !important;
10053
- }
10156
+ }
10157
+ @media (max-width: 480px) {
10158
+ padding: 0.75rem;
10159
+ border-radius: 6px;
10054
10160
  }
10055
10161
  `;
10056
10162
  var PanelHeader2 = styled24__default.default.div`
@@ -10084,6 +10190,11 @@ var Card2 = styled24__default.default.div`
10084
10190
  border: 1px solid rgba(255,255,255,0.15);
10085
10191
  border-radius: 12px;
10086
10192
  padding: 1rem 1.25rem;
10193
+
10194
+ @media (max-width: 480px) {
10195
+ padding: 0.75rem 1rem;
10196
+ border-radius: 10px;
10197
+ }
10087
10198
  `;
10088
10199
  var CardLabel = styled24__default.default.div`
10089
10200
  font-size: 0.75rem;
@@ -10102,6 +10213,10 @@ var CardInputRow = styled24__default.default.div`
10102
10213
  font-weight: 600;
10103
10214
  color: #fff;
10104
10215
  width: 100%;
10216
+
10217
+ @media (max-width: 480px) {
10218
+ font-size: 1.35rem;
10219
+ }
10105
10220
  }
10106
10221
  span {
10107
10222
  font-size: 1rem;
@@ -10115,8 +10230,10 @@ var QuickSelectRow = styled24__default.default.div`
10115
10230
  display: flex;
10116
10231
  gap: 0.5rem;
10117
10232
  margin-top: 0.75rem;
10233
+ flex-wrap: wrap;
10118
10234
  button {
10119
10235
  flex: 1;
10236
+ min-width: 50px;
10120
10237
  padding: 0.4rem 0;
10121
10238
  font-size: 0.75rem;
10122
10239
  font-weight: 500;
@@ -10132,6 +10249,11 @@ var QuickSelectRow = styled24__default.default.div`
10132
10249
  border-color: rgba(212,175,55,0.5);
10133
10250
  color: #D4AF37;
10134
10251
  }
10252
+
10253
+ @media (max-width: 480px) {
10254
+ gap: 0.35rem;
10255
+ button { font-size: 0.7rem; padding: 0.35rem 0; }
10256
+ }
10135
10257
  `;
10136
10258
  var FundsRow = styled24__default.default.div`
10137
10259
  display: flex;
@@ -10255,6 +10377,10 @@ var BalanceValue = styled24__default.default.div`
10255
10377
  color: #0ecb81;
10256
10378
  font-weight: 600;
10257
10379
  }
10380
+
10381
+ @media (max-width: 480px) {
10382
+ font-size: 1.2rem;
10383
+ }
10258
10384
  `;
10259
10385
  var BalanceAction = styled24__default.default.div`
10260
10386
  font-size: 0.75rem;
@@ -10269,6 +10395,110 @@ var BalanceSub = styled24__default.default.div`
10269
10395
  color: var(--color-text-secondary);
10270
10396
  margin-top: 0.25rem;
10271
10397
  `;
10398
+ var OrderPendingCard = styled24__default.default.div`
10399
+ margin-bottom: 1.5rem;
10400
+ background: linear-gradient(180deg, rgba(25,27,31,0.95) 0%, rgba(18,20,24,0.98) 100%);
10401
+ border: 1px solid rgba(212,175,55,0.08);
10402
+ border-radius: 12px;
10403
+ overflow: hidden;
10404
+ box-shadow: 0 4px 20px rgba(0,0,0,0.3);
10405
+
10406
+ @keyframes spin {
10407
+ to { transform: rotate(360deg); }
10408
+ }
10409
+
10410
+ @keyframes pulse {
10411
+ 0%, 100% { opacity: 1; }
10412
+ 50% { opacity: 0.6; }
10413
+ }
10414
+
10415
+ .pending-header {
10416
+ border-bottom: 1px solid rgba(255,255,255,0.06);
10417
+ padding: 1.25rem 1.5rem;
10418
+ display: flex;
10419
+ align-items: center;
10420
+ gap: 0.875rem;
10421
+ background: linear-gradient(135deg, rgba(212,175,55,0.04) 0%, transparent 100%);
10422
+
10423
+ .spinner {
10424
+ width: 32px;
10425
+ height: 32px;
10426
+ border-radius: 50%;
10427
+ border: 2.5px solid rgba(212,175,55,0.15);
10428
+ border-top-color: #D4AF37;
10429
+ animation: spin 0.8s linear infinite;
10430
+ flex-shrink: 0;
10431
+ }
10432
+
10433
+ p {
10434
+ font-size: 0.95rem;
10435
+ font-weight: 600;
10436
+ color: #fff;
10437
+ margin: 0;
10438
+ animation: pulse 2s ease-in-out infinite;
10439
+ }
10440
+ small {
10441
+ font-size: 0.7rem;
10442
+ color: rgba(255,255,255,0.4);
10443
+ }
10444
+ }
10445
+
10446
+ .pending-body {
10447
+ padding: 1.25rem 1.5rem;
10448
+ }
10449
+ .pending-row {
10450
+ display: flex;
10451
+ justify-content: space-between;
10452
+ align-items: center;
10453
+ padding-bottom: 0.875rem;
10454
+ margin-bottom: 0.875rem;
10455
+ border-bottom: 1px solid rgba(255,255,255,0.06);
10456
+ span {
10457
+ font-size: 0.75rem;
10458
+ color: rgba(255,255,255,0.4);
10459
+ text-transform: uppercase;
10460
+ letter-spacing: 0.05em;
10461
+ font-weight: 500;
10462
+ }
10463
+ strong {
10464
+ font-size: 0.95rem;
10465
+ font-weight: 500;
10466
+ color: rgba(255,255,255,0.5);
10467
+ font-family: monospace;
10468
+ }
10469
+ }
10470
+ .pending-total {
10471
+ display: flex;
10472
+ justify-content: space-between;
10473
+ align-items: center;
10474
+ padding: 0.875rem;
10475
+ background: rgba(212,175,55,0.03);
10476
+ border-radius: 8px;
10477
+ border: 1px solid rgba(212,175,55,0.06);
10478
+ span {
10479
+ font-size: 0.75rem;
10480
+ color: rgba(255,255,255,0.5);
10481
+ text-transform: uppercase;
10482
+ letter-spacing: 0.05em;
10483
+ font-weight: 500;
10484
+ }
10485
+ strong {
10486
+ font-size: 1.05rem;
10487
+ font-weight: 700;
10488
+ color: rgba(212,175,55,0.7);
10489
+ font-family: monospace;
10490
+ }
10491
+ }
10492
+ .pending-footnote {
10493
+ padding: 1rem 1.5rem;
10494
+ border-top: 1px solid rgba(255,255,255,0.06);
10495
+ background: rgba(0,0,0,0.2);
10496
+ font-size: 0.75rem;
10497
+ color: rgba(255,255,255,0.4);
10498
+ line-height: 1.6;
10499
+ animation: pulse 2s ease-in-out infinite;
10500
+ }
10501
+ `;
10272
10502
  var OrderSuccessCard = styled24__default.default.div`
10273
10503
  margin-bottom: 1.5rem;
10274
10504
  background: linear-gradient(180deg, rgba(25,27,31,0.95) 0%, rgba(18,20,24,0.98) 100%);
@@ -10713,6 +10943,10 @@ var TabContainer = styled24__default.default.div`
10713
10943
  gap: 0;
10714
10944
  border-bottom: 1px solid rgba(255, 255, 255, 0.06);
10715
10945
  margin-bottom: 0.75rem;
10946
+ overflow-x: auto;
10947
+ -webkit-overflow-scrolling: touch;
10948
+ scrollbar-width: none;
10949
+ &::-webkit-scrollbar { display: none; }
10716
10950
  `;
10717
10951
  var Tab = styled24__default.default.button`
10718
10952
  background: transparent;
@@ -10720,6 +10954,8 @@ var Tab = styled24__default.default.button`
10720
10954
  padding: 0.6rem 1rem;
10721
10955
  font-size: 0.75rem;
10722
10956
  font-weight: 500;
10957
+ white-space: nowrap;
10958
+ flex-shrink: 0;
10723
10959
  color: ${({ $active }) => $active ? "#f0b90b" : "rgba(255, 255, 255, 0.4)"};
10724
10960
  cursor: pointer;
10725
10961
  transition: color 0.15s;
@@ -10990,8 +11226,14 @@ var Row2 = styled24__default.default.div`
10990
11226
  max-width: 1800px;
10991
11227
  margin-left: auto;
10992
11228
  margin-right: auto;
10993
- @media (max-width: 1024px) {
11229
+ overflow: hidden;
11230
+ @media (max-width: 768px) {
10994
11231
  grid-template-columns: 1fr;
11232
+ gap: 1rem;
11233
+ }
11234
+ & > * {
11235
+ min-width: 0;
11236
+ overflow: hidden;
10995
11237
  }
10996
11238
  `;
10997
11239
  var TradeNewsPanel = styled24__default.default.div`
@@ -11003,8 +11245,8 @@ var TradeNewsPanel = styled24__default.default.div`
11003
11245
  box-shadow: 0 4px 8px rgba(0,0,0,0.2);
11004
11246
  border: 1px solid var(--color-border);
11005
11247
  min-height: 280px;
11006
- overflow: visible !important;
11007
- @media (max-width: 1024px) {
11248
+ overflow: hidden;
11249
+ @media (max-width: 768px) {
11008
11250
  max-width: 100%;
11009
11251
  flex: 0 0 100%;
11010
11252
  }
@@ -11112,6 +11354,7 @@ function OrderConfirmationModal({
11112
11354
  tokenQuantity,
11113
11355
  tokenPrice,
11114
11356
  propertyName,
11357
+ tokenSymbol,
11115
11358
  estExposure,
11116
11359
  orderTotal,
11117
11360
  availableBalance,
@@ -11126,7 +11369,7 @@ function OrderConfirmationModal({
11126
11369
  /* @__PURE__ */ jsxRuntime.jsx(ModalBody, { children: [
11127
11370
  { label: "Order Type", value: "Primary Offering" },
11128
11371
  { label: "Property", value: propertyName },
11129
- { label: "Units", value: `${tokenQuantity.toLocaleString()} MUS`, highlight: true },
11372
+ { label: "Units", value: `${tokenQuantity.toLocaleString()} ${tokenSymbol}`, highlight: true },
11130
11373
  {
11131
11374
  label: "Unit Price",
11132
11375
  value: `$${tokenPrice.toLocaleString(void 0, { minimumFractionDigits: 2, maximumFractionDigits: 2 })}`
@@ -11157,7 +11400,9 @@ function OrderConfirmationModal({
11157
11400
  "Your order for ",
11158
11401
  /* @__PURE__ */ jsxRuntime.jsxs("strong", { children: [
11159
11402
  tokenQuantity.toLocaleString(),
11160
- " MUS units"
11403
+ " ",
11404
+ tokenSymbol,
11405
+ " units"
11161
11406
  ] }),
11162
11407
  " in the",
11163
11408
  " ",
@@ -11386,6 +11631,7 @@ function PropertyBuy({
11386
11631
  const [displayedOwnedTokens, setDisplayedOwnedTokens] = React5.useState(0);
11387
11632
  const [ownedTokensJustUpdated, setOwnedTokensJustUpdated] = React5.useState(false);
11388
11633
  const [lastOrderQuantity, setLastOrderQuantity] = React5.useState(0);
11634
+ const [orderPendingAllocation, setOrderPendingAllocation] = React5.useState(false);
11389
11635
  const [orderPlacedSuccess, setOrderPlacedSuccess] = React5.useState(false);
11390
11636
  const [lastOrderDetails, setLastOrderDetails] = React5.useState(null);
11391
11637
  const [showOrderConfirmModal, setShowOrderConfirmModal] = React5.useState(false);
@@ -11433,12 +11679,23 @@ function PropertyBuy({
11433
11679
  }
11434
11680
  setShowOrderConfirmModal(true);
11435
11681
  };
11436
- const isPurchaseInFlight = purchaseStatus === "checking-allowance" || purchaseStatus === "approving" || purchaseStatus === "purchasing";
11682
+ React5.useEffect(() => {
11683
+ if (purchaseStatus === "success" && orderPendingAllocation) {
11684
+ setOrderPendingAllocation(false);
11685
+ setOrderPlacedSuccess(true);
11686
+ }
11687
+ }, [purchaseStatus, orderPendingAllocation]);
11688
+ const handlePlaceAnotherOrder = React5.useCallback(() => {
11689
+ setOrderPlacedSuccess(false);
11690
+ setOrderPendingAllocation(false);
11691
+ }, []);
11692
+ const isPurchaseInFlight = purchaseStatus === "checking-allowance" || purchaseStatus === "approving" || purchaseStatus === "purchasing" || purchaseStatus === "pending-allocation";
11437
11693
  const getOrderButtonText = () => {
11438
11694
  if (!isAuthenticated) return "Sign In to Invest";
11439
11695
  if (purchaseStatus === "checking-allowance") return "Checking allowance\u2026";
11440
11696
  if (purchaseStatus === "approving") return "Approving USDC\u2026";
11441
11697
  if (purchaseStatus === "purchasing") return "Confirming purchase\u2026";
11698
+ if (purchaseStatus === "pending-allocation") return "Awaiting allocation\u2026";
11442
11699
  if (ipoStatus === "PENDING" && !isPrivateClient) return "Sale Not Open Yet";
11443
11700
  if (ipoStatus === "CLOSED") return "Sale Completed";
11444
11701
  if (ipoStatus === "CANCELLED") return "Sale Cancelled";
@@ -11481,7 +11738,7 @@ function PropertyBuy({
11481
11738
  total: orderTotal,
11482
11739
  price: tokenPrice
11483
11740
  });
11484
- setOrderPlacedSuccess(true);
11741
+ setOrderPendingAllocation(true);
11485
11742
  setSliderValue(0);
11486
11743
  setManualOrderAmount(null);
11487
11744
  };
@@ -11567,6 +11824,7 @@ function PropertyBuy({
11567
11824
  displayedOwnedTokens,
11568
11825
  ownedTokensJustUpdated,
11569
11826
  lastOrderQuantity,
11827
+ orderPendingAllocation,
11570
11828
  orderPlacedSuccess,
11571
11829
  lastOrderDetails,
11572
11830
  tokenQuantity,
@@ -11581,7 +11839,7 @@ function PropertyBuy({
11581
11839
  orderButtonText: getOrderButtonText(),
11582
11840
  isOrderButtonDisabled: isOrderButtonDisabled(),
11583
11841
  hasInsufficientFunds,
11584
- onPlaceAnotherOrder: () => setOrderPlacedSuccess(false),
11842
+ onPlaceAnotherOrder: handlePlaceAnotherOrder,
11585
11843
  onDeposit
11586
11844
  }
11587
11845
  ),
@@ -11615,6 +11873,7 @@ function PropertyBuy({
11615
11873
  tokenQuantity,
11616
11874
  tokenPrice,
11617
11875
  propertyName,
11876
+ tokenSymbol,
11618
11877
  estExposure,
11619
11878
  orderTotal,
11620
11879
  availableBalance,
@@ -11655,29 +11914,42 @@ var HeroGrid = styled24__default.default.div`
11655
11914
  }
11656
11915
 
11657
11916
  @media (max-width: 1024px) {
11658
- grid-template-columns: 1fr;
11659
- grid-template-rows: auto;
11917
+ display: flex;
11918
+ flex-direction: column;
11660
11919
  gap: 1rem;
11920
+ overflow: hidden;
11661
11921
 
11662
11922
  & > div:nth-child(1) {
11663
11923
  display: none;
11664
11924
  }
11665
11925
 
11666
11926
  & > div:nth-child(2) {
11667
- grid-column: 1 / -1;
11668
11927
  order: 1;
11928
+ min-width: 0;
11929
+ width: 100%;
11669
11930
  }
11670
11931
 
11671
11932
  & > div:nth-child(4) {
11672
- grid-column: 1 / -1;
11673
11933
  order: 2;
11934
+ min-width: 0;
11935
+ width: 100%;
11936
+ height: auto;
11674
11937
  }
11675
11938
 
11676
11939
  & > div:nth-child(3) {
11677
- grid-column: 1 / -1;
11678
11940
  order: 3;
11941
+ min-width: 0;
11942
+ width: 100%;
11679
11943
  }
11680
11944
  }
11945
+
11946
+ @media (max-width: 768px) {
11947
+ gap: 0.75rem;
11948
+ }
11949
+
11950
+ @media (max-width: 480px) {
11951
+ gap: 0.5rem;
11952
+ }
11681
11953
  `;
11682
11954
  var PaymentOption = styled24__default.default.div`
11683
11955
  display: flex;