@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.mjs CHANGED
@@ -1,5 +1,5 @@
1
1
  import * as React5 from 'react';
2
- import React5__default, { createContext, useState, useEffect, useMemo, useRef, useCallback, useContext } from 'react';
2
+ import React5__default, { createContext, useState, useEffect, useMemo, useCallback, useRef, useContext } from 'react';
3
3
  import { Slot } from '@radix-ui/react-slot';
4
4
  import { cva } from 'class-variance-authority';
5
5
  import { clsx } from 'clsx';
@@ -1984,7 +1984,7 @@ function DesktopOrderbookLayout({
1984
1984
  /* @__PURE__ */ jsx(
1985
1985
  "div",
1986
1986
  {
1987
- className: "divide-y divide-white/5 overflow-y-auto",
1987
+ className: "flex flex-col justify-end divide-y divide-white/5 overflow-y-auto",
1988
1988
  style: { height: `${sectionHeight}px`, scrollbarGutter: "stable" },
1989
1989
  children: asks.map((l, idx) => /* @__PURE__ */ jsx(
1990
1990
  DepthRow,
@@ -4850,6 +4850,7 @@ var Header = ({
4850
4850
  const portfolioActive = resolvedActiveTab === "portfolio";
4851
4851
  const learnActive = resolvedActiveTab === "learn";
4852
4852
  return /* @__PURE__ */ jsxs(Fragment, { children: [
4853
+ /* @__PURE__ */ jsx(SafeAreaCover, {}),
4853
4854
  /* @__PURE__ */ jsx(Overlay, { $isOpen: isMobileMenuOpen, onClick: () => setIsMobileMenuOpen(false) }),
4854
4855
  /* @__PURE__ */ jsxs(HeaderContainer, { children: [
4855
4856
  /* @__PURE__ */ jsxs("div", { style: { display: "flex", alignItems: "center" }, children: [
@@ -5099,6 +5100,17 @@ var Header = ({
5099
5100
  ] });
5100
5101
  };
5101
5102
  Header.displayName = "Header";
5103
+ var SafeAreaCover = styled24.div`
5104
+ position: fixed;
5105
+ top: 0;
5106
+ left: 0;
5107
+ right: 0;
5108
+ height: env(safe-area-inset-top, 0px);
5109
+ min-height: env(safe-area-inset-top, 0px);
5110
+ background-color: #0d1117;
5111
+ z-index: 1001;
5112
+ pointer-events: none;
5113
+ `;
5102
5114
  var Overlay = styled24.div`
5103
5115
  display: ${(props) => props.$isOpen ? "block" : "none"};
5104
5116
  position: fixed;
@@ -5145,20 +5157,24 @@ var HeaderContainer = styled24.header`
5145
5157
  display: flex;
5146
5158
  justify-content: space-between;
5147
5159
  align-items: center;
5160
+ /* Split padding so browsers that don't support env() inside shorthand
5161
+ still get the horizontal padding — only the top falls back to 0 */
5148
5162
  padding: 0 2rem;
5163
+ padding-top: env(safe-area-inset-top, 0px);
5149
5164
  background-color: #0d1117;
5150
5165
  border-bottom: 1px solid #232a32;
5151
5166
  position: sticky;
5152
5167
  top: 0;
5153
- left: 0;
5154
- right: 0;
5155
5168
  z-index: 1000;
5156
5169
  width: 100%;
5157
- height: 56px;
5170
+ /* Fallback min-height for browsers that can't evaluate calc+env */
5171
+ min-height: 56px;
5172
+ min-height: calc(56px + env(safe-area-inset-top, 0px));
5158
5173
  box-sizing: border-box;
5159
5174
 
5160
5175
  @media (max-width: 768px) {
5161
5176
  padding: 0 1rem;
5177
+ padding-top: env(safe-area-inset-top, 0px);
5162
5178
  }
5163
5179
  `;
5164
5180
  var Logo = styled24.div`
@@ -7270,7 +7286,7 @@ function GalleryMapSection({
7270
7286
  const [carouselIndex, setCarouselIndex] = useState(0);
7271
7287
  const [showVideo, setShowVideo] = useState(false);
7272
7288
  const [autoPlaying, setAutoPlaying] = useState(autoPlay);
7273
- const resolvedMapUrl = mapUrl ?? (tokenName ? `https://demo.loafmarkets.com/map/${tokenName}?embed=true&zoom=14&hideOthers=true` : "about:blank");
7289
+ const resolvedMapUrl = mapUrl ?? (tokenName ? `/map/${tokenName}?embed=true&zoom=14&hideOthers=true` : "about:blank");
7274
7290
  useEffect(() => {
7275
7291
  if (!autoPlaying || images.length <= 1) return;
7276
7292
  const interval = setInterval(() => {
@@ -8945,6 +8961,16 @@ var IPOAssetSelector = styled24.div`
8945
8961
  z-index: 10;
8946
8962
  transition: all 0.3s ease;
8947
8963
  &:hover { box-shadow: 0 12px 32px rgba(0,0,0,0.4); border-color: rgba(255,255,255,0.15); }
8964
+
8965
+ @media (max-width: 768px) {
8966
+ flex-wrap: wrap;
8967
+ padding: 0.75rem 1rem;
8968
+ gap: 0.5rem;
8969
+ }
8970
+
8971
+ @media (max-width: 480px) {
8972
+ padding: 0.6rem 0.75rem;
8973
+ }
8948
8974
  `;
8949
8975
  var AssetSelectorDropdown = styled24.div`
8950
8976
  display: flex;
@@ -8964,6 +8990,15 @@ var AssetName = styled24.div`
8964
8990
  letter-spacing: -0.02em;
8965
8991
  svg { margin-left: 0.75rem; transition: transform 0.3s cubic-bezier(0.4,0,0.2,1); opacity: 0.7; }
8966
8992
  &:hover svg { opacity: 1; }
8993
+
8994
+ @media (max-width: 768px) {
8995
+ font-size: 1rem;
8996
+ }
8997
+
8998
+ @media (max-width: 480px) {
8999
+ font-size: 0.9rem;
9000
+ svg { margin-left: 0.4rem; width: 16px; height: 16px; }
9001
+ }
8967
9002
  `;
8968
9003
  var SelectorMetrics = styled24.div`
8969
9004
  display: flex;
@@ -8975,6 +9010,20 @@ var SelectorMetrics = styled24.div`
8975
9010
  background: rgba(255,255,255,0.03);
8976
9011
  border-radius: 8px;
8977
9012
  border: 1px solid rgba(255,255,255,0.05);
9013
+
9014
+ @media (max-width: 768px) {
9015
+ gap: 0.6rem;
9016
+ padding: 0.4rem 0.75rem;
9017
+ margin-right: 0;
9018
+ }
9019
+
9020
+ @media (max-width: 480px) {
9021
+ width: 100%;
9022
+ justify-content: center;
9023
+ margin-left: 0;
9024
+ padding: 0.35rem 0.5rem;
9025
+ gap: 0.5rem;
9026
+ }
8978
9027
  `;
8979
9028
  var MetricLabel2 = styled24.span`
8980
9029
  font-size: 0.75rem;
@@ -8983,11 +9032,24 @@ var MetricLabel2 = styled24.span`
8983
9032
  letter-spacing: 0.05em;
8984
9033
  font-weight: 500;
8985
9034
  margin-right: 0.5rem;
9035
+
9036
+ @media (max-width: 768px) {
9037
+ font-size: 0.65rem;
9038
+ margin-right: 0.35rem;
9039
+ }
8986
9040
  `;
8987
9041
  var MetricValue = styled24.span`
8988
9042
  font-size: 1.25rem;
8989
9043
  font-weight: 700;
8990
9044
  color: ${(p) => p.$accent ? "#D4AF37" : "#fff"};
9045
+
9046
+ @media (max-width: 768px) {
9047
+ font-size: 1.05rem;
9048
+ }
9049
+
9050
+ @media (max-width: 480px) {
9051
+ font-size: 0.95rem;
9052
+ }
8991
9053
  `;
8992
9054
  var MetricChange = styled24.span`
8993
9055
  font-size: 0.85rem;
@@ -8996,6 +9058,10 @@ var MetricChange = styled24.span`
8996
9058
  display: flex;
8997
9059
  align-items: center;
8998
9060
  gap: 0.25rem;
9061
+
9062
+ @media (max-width: 768px) {
9063
+ font-size: 0.75rem;
9064
+ }
8999
9065
  `;
9000
9066
  var Separator = styled24.span`
9001
9067
  font-size: 1rem;
@@ -9014,6 +9080,11 @@ var IPODropdown = styled24.div`
9014
9080
  max-height: 360px;
9015
9081
  overflow-y: auto;
9016
9082
  border: 1px solid rgba(255,255,255,0.08);
9083
+
9084
+ @media (max-width: 480px) {
9085
+ max-height: 280px;
9086
+ border-radius: 12px;
9087
+ }
9017
9088
  animation: slideDown 0.3s cubic-bezier(0.4,0,0.2,1);
9018
9089
  @keyframes slideDown {
9019
9090
  from { opacity: 0; transform: translateY(-10px); }
@@ -9701,6 +9772,7 @@ function OrderPanel({
9701
9772
  displayedOwnedTokens,
9702
9773
  ownedTokensJustUpdated,
9703
9774
  lastOrderQuantity,
9775
+ orderPendingAllocation,
9704
9776
  orderPlacedSuccess,
9705
9777
  lastOrderDetails,
9706
9778
  tokenQuantity,
@@ -9763,7 +9835,40 @@ function OrderPanel({
9763
9835
  statusLabel
9764
9836
  ] })
9765
9837
  ] }),
9766
- orderPlacedSuccess ? /* @__PURE__ */ jsxs(OrderSuccessCard, { children: [
9838
+ orderPendingAllocation ? /* @__PURE__ */ jsxs(OrderPendingCard, { children: [
9839
+ /* @__PURE__ */ jsxs("div", { className: "pending-header", children: [
9840
+ /* @__PURE__ */ jsx("div", { className: "spinner" }),
9841
+ /* @__PURE__ */ jsxs("div", { children: [
9842
+ /* @__PURE__ */ jsx("p", { children: "Processing Order" }),
9843
+ /* @__PURE__ */ jsx("small", { children: "Awaiting allocation..." })
9844
+ ] })
9845
+ ] }),
9846
+ /* @__PURE__ */ jsxs("div", { className: "pending-body", children: [
9847
+ [
9848
+ { label: "Units Requested", value: /* @__PURE__ */ jsxs(Fragment, { children: [
9849
+ lastOrderDetails?.tokens?.toFixed(2) || "0.00",
9850
+ " ",
9851
+ /* @__PURE__ */ jsx("span", { style: { color: "rgba(255,255,255,0.4)", fontWeight: 400 }, children: tokenSymbol })
9852
+ ] }) },
9853
+ { label: "Price Per Unit", value: `$${tokenPrice.toFixed(2)}` },
9854
+ {
9855
+ label: `${tokenDisplayName} Exposure`,
9856
+ value: `${((lastOrderDetails?.tokens ?? 0) / supplyToSell * 100).toFixed(3)}%`
9857
+ }
9858
+ ].map((row) => /* @__PURE__ */ jsxs("div", { className: "pending-row", children: [
9859
+ /* @__PURE__ */ jsx("span", { children: row.label }),
9860
+ /* @__PURE__ */ jsx("strong", { children: row.value })
9861
+ ] }, row.label)),
9862
+ /* @__PURE__ */ jsxs("div", { className: "pending-total", children: [
9863
+ /* @__PURE__ */ jsx("span", { children: "Total Investment" }),
9864
+ /* @__PURE__ */ jsxs("strong", { children: [
9865
+ "$",
9866
+ lastOrderDetails?.total?.toLocaleString() || "0"
9867
+ ] })
9868
+ ] })
9869
+ ] }),
9870
+ /* @__PURE__ */ jsx("div", { className: "pending-footnote", children: "Your order has been submitted and is being processed. This usually takes a few seconds." })
9871
+ ] }) : orderPlacedSuccess ? /* @__PURE__ */ jsxs(OrderSuccessCard, { children: [
9767
9872
  /* @__PURE__ */ jsxs("div", { className: "success-header", children: [
9768
9873
  /* @__PURE__ */ jsx("div", { className: "icon", children: /* @__PURE__ */ jsx("svg", { width: "14", height: "14", viewBox: "0 0 24 24", fill: "none", stroke: "#D4AF37", strokeWidth: "2.5", strokeLinecap: "round", strokeLinejoin: "round", children: /* @__PURE__ */ jsx("polyline", { points: "20 6 9 17 4 12" }) }) }),
9769
9874
  /* @__PURE__ */ jsxs("div", { children: [
@@ -9942,7 +10047,7 @@ function OrderPanel({
9942
10047
  ] })
9943
10048
  ] })
9944
10049
  ] }),
9945
- !orderPlacedSuccess && /* @__PURE__ */ jsx(
10050
+ !orderPlacedSuccess && !orderPendingAllocation && /* @__PURE__ */ jsx(
9946
10051
  SubscribeButton,
9947
10052
  {
9948
10053
  type: "button",
@@ -10023,9 +10128,10 @@ var Panel2 = styled24.div`
10023
10128
  }
10024
10129
  @media (max-width: 768px) {
10025
10130
  padding: 1rem;
10026
- input[style*="font-size: 1.75rem"] {
10027
- font-size: 1.25rem !important;
10028
- }
10131
+ }
10132
+ @media (max-width: 480px) {
10133
+ padding: 0.75rem;
10134
+ border-radius: 6px;
10029
10135
  }
10030
10136
  `;
10031
10137
  var PanelHeader2 = styled24.div`
@@ -10059,6 +10165,11 @@ var Card2 = styled24.div`
10059
10165
  border: 1px solid rgba(255,255,255,0.15);
10060
10166
  border-radius: 12px;
10061
10167
  padding: 1rem 1.25rem;
10168
+
10169
+ @media (max-width: 480px) {
10170
+ padding: 0.75rem 1rem;
10171
+ border-radius: 10px;
10172
+ }
10062
10173
  `;
10063
10174
  var CardLabel = styled24.div`
10064
10175
  font-size: 0.75rem;
@@ -10077,6 +10188,10 @@ var CardInputRow = styled24.div`
10077
10188
  font-weight: 600;
10078
10189
  color: #fff;
10079
10190
  width: 100%;
10191
+
10192
+ @media (max-width: 480px) {
10193
+ font-size: 1.35rem;
10194
+ }
10080
10195
  }
10081
10196
  span {
10082
10197
  font-size: 1rem;
@@ -10090,8 +10205,10 @@ var QuickSelectRow = styled24.div`
10090
10205
  display: flex;
10091
10206
  gap: 0.5rem;
10092
10207
  margin-top: 0.75rem;
10208
+ flex-wrap: wrap;
10093
10209
  button {
10094
10210
  flex: 1;
10211
+ min-width: 50px;
10095
10212
  padding: 0.4rem 0;
10096
10213
  font-size: 0.75rem;
10097
10214
  font-weight: 500;
@@ -10107,6 +10224,11 @@ var QuickSelectRow = styled24.div`
10107
10224
  border-color: rgba(212,175,55,0.5);
10108
10225
  color: #D4AF37;
10109
10226
  }
10227
+
10228
+ @media (max-width: 480px) {
10229
+ gap: 0.35rem;
10230
+ button { font-size: 0.7rem; padding: 0.35rem 0; }
10231
+ }
10110
10232
  `;
10111
10233
  var FundsRow = styled24.div`
10112
10234
  display: flex;
@@ -10230,6 +10352,10 @@ var BalanceValue = styled24.div`
10230
10352
  color: #0ecb81;
10231
10353
  font-weight: 600;
10232
10354
  }
10355
+
10356
+ @media (max-width: 480px) {
10357
+ font-size: 1.2rem;
10358
+ }
10233
10359
  `;
10234
10360
  var BalanceAction = styled24.div`
10235
10361
  font-size: 0.75rem;
@@ -10244,6 +10370,110 @@ var BalanceSub = styled24.div`
10244
10370
  color: var(--color-text-secondary);
10245
10371
  margin-top: 0.25rem;
10246
10372
  `;
10373
+ var OrderPendingCard = styled24.div`
10374
+ margin-bottom: 1.5rem;
10375
+ background: linear-gradient(180deg, rgba(25,27,31,0.95) 0%, rgba(18,20,24,0.98) 100%);
10376
+ border: 1px solid rgba(212,175,55,0.08);
10377
+ border-radius: 12px;
10378
+ overflow: hidden;
10379
+ box-shadow: 0 4px 20px rgba(0,0,0,0.3);
10380
+
10381
+ @keyframes spin {
10382
+ to { transform: rotate(360deg); }
10383
+ }
10384
+
10385
+ @keyframes pulse {
10386
+ 0%, 100% { opacity: 1; }
10387
+ 50% { opacity: 0.6; }
10388
+ }
10389
+
10390
+ .pending-header {
10391
+ border-bottom: 1px solid rgba(255,255,255,0.06);
10392
+ padding: 1.25rem 1.5rem;
10393
+ display: flex;
10394
+ align-items: center;
10395
+ gap: 0.875rem;
10396
+ background: linear-gradient(135deg, rgba(212,175,55,0.04) 0%, transparent 100%);
10397
+
10398
+ .spinner {
10399
+ width: 32px;
10400
+ height: 32px;
10401
+ border-radius: 50%;
10402
+ border: 2.5px solid rgba(212,175,55,0.15);
10403
+ border-top-color: #D4AF37;
10404
+ animation: spin 0.8s linear infinite;
10405
+ flex-shrink: 0;
10406
+ }
10407
+
10408
+ p {
10409
+ font-size: 0.95rem;
10410
+ font-weight: 600;
10411
+ color: #fff;
10412
+ margin: 0;
10413
+ animation: pulse 2s ease-in-out infinite;
10414
+ }
10415
+ small {
10416
+ font-size: 0.7rem;
10417
+ color: rgba(255,255,255,0.4);
10418
+ }
10419
+ }
10420
+
10421
+ .pending-body {
10422
+ padding: 1.25rem 1.5rem;
10423
+ }
10424
+ .pending-row {
10425
+ display: flex;
10426
+ justify-content: space-between;
10427
+ align-items: center;
10428
+ padding-bottom: 0.875rem;
10429
+ margin-bottom: 0.875rem;
10430
+ border-bottom: 1px solid rgba(255,255,255,0.06);
10431
+ span {
10432
+ font-size: 0.75rem;
10433
+ color: rgba(255,255,255,0.4);
10434
+ text-transform: uppercase;
10435
+ letter-spacing: 0.05em;
10436
+ font-weight: 500;
10437
+ }
10438
+ strong {
10439
+ font-size: 0.95rem;
10440
+ font-weight: 500;
10441
+ color: rgba(255,255,255,0.5);
10442
+ font-family: monospace;
10443
+ }
10444
+ }
10445
+ .pending-total {
10446
+ display: flex;
10447
+ justify-content: space-between;
10448
+ align-items: center;
10449
+ padding: 0.875rem;
10450
+ background: rgba(212,175,55,0.03);
10451
+ border-radius: 8px;
10452
+ border: 1px solid rgba(212,175,55,0.06);
10453
+ span {
10454
+ font-size: 0.75rem;
10455
+ color: rgba(255,255,255,0.5);
10456
+ text-transform: uppercase;
10457
+ letter-spacing: 0.05em;
10458
+ font-weight: 500;
10459
+ }
10460
+ strong {
10461
+ font-size: 1.05rem;
10462
+ font-weight: 700;
10463
+ color: rgba(212,175,55,0.7);
10464
+ font-family: monospace;
10465
+ }
10466
+ }
10467
+ .pending-footnote {
10468
+ padding: 1rem 1.5rem;
10469
+ border-top: 1px solid rgba(255,255,255,0.06);
10470
+ background: rgba(0,0,0,0.2);
10471
+ font-size: 0.75rem;
10472
+ color: rgba(255,255,255,0.4);
10473
+ line-height: 1.6;
10474
+ animation: pulse 2s ease-in-out infinite;
10475
+ }
10476
+ `;
10247
10477
  var OrderSuccessCard = styled24.div`
10248
10478
  margin-bottom: 1.5rem;
10249
10479
  background: linear-gradient(180deg, rgba(25,27,31,0.95) 0%, rgba(18,20,24,0.98) 100%);
@@ -10688,6 +10918,10 @@ var TabContainer = styled24.div`
10688
10918
  gap: 0;
10689
10919
  border-bottom: 1px solid rgba(255, 255, 255, 0.06);
10690
10920
  margin-bottom: 0.75rem;
10921
+ overflow-x: auto;
10922
+ -webkit-overflow-scrolling: touch;
10923
+ scrollbar-width: none;
10924
+ &::-webkit-scrollbar { display: none; }
10691
10925
  `;
10692
10926
  var Tab = styled24.button`
10693
10927
  background: transparent;
@@ -10695,6 +10929,8 @@ var Tab = styled24.button`
10695
10929
  padding: 0.6rem 1rem;
10696
10930
  font-size: 0.75rem;
10697
10931
  font-weight: 500;
10932
+ white-space: nowrap;
10933
+ flex-shrink: 0;
10698
10934
  color: ${({ $active }) => $active ? "#f0b90b" : "rgba(255, 255, 255, 0.4)"};
10699
10935
  cursor: pointer;
10700
10936
  transition: color 0.15s;
@@ -10965,8 +11201,14 @@ var Row2 = styled24.div`
10965
11201
  max-width: 1800px;
10966
11202
  margin-left: auto;
10967
11203
  margin-right: auto;
10968
- @media (max-width: 1024px) {
11204
+ overflow: hidden;
11205
+ @media (max-width: 768px) {
10969
11206
  grid-template-columns: 1fr;
11207
+ gap: 1rem;
11208
+ }
11209
+ & > * {
11210
+ min-width: 0;
11211
+ overflow: hidden;
10970
11212
  }
10971
11213
  `;
10972
11214
  var TradeNewsPanel = styled24.div`
@@ -10978,8 +11220,8 @@ var TradeNewsPanel = styled24.div`
10978
11220
  box-shadow: 0 4px 8px rgba(0,0,0,0.2);
10979
11221
  border: 1px solid var(--color-border);
10980
11222
  min-height: 280px;
10981
- overflow: visible !important;
10982
- @media (max-width: 1024px) {
11223
+ overflow: hidden;
11224
+ @media (max-width: 768px) {
10983
11225
  max-width: 100%;
10984
11226
  flex: 0 0 100%;
10985
11227
  }
@@ -11087,6 +11329,7 @@ function OrderConfirmationModal({
11087
11329
  tokenQuantity,
11088
11330
  tokenPrice,
11089
11331
  propertyName,
11332
+ tokenSymbol,
11090
11333
  estExposure,
11091
11334
  orderTotal,
11092
11335
  availableBalance,
@@ -11101,7 +11344,7 @@ function OrderConfirmationModal({
11101
11344
  /* @__PURE__ */ jsx(ModalBody, { children: [
11102
11345
  { label: "Order Type", value: "Primary Offering" },
11103
11346
  { label: "Property", value: propertyName },
11104
- { label: "Units", value: `${tokenQuantity.toLocaleString()} MUS`, highlight: true },
11347
+ { label: "Units", value: `${tokenQuantity.toLocaleString()} ${tokenSymbol}`, highlight: true },
11105
11348
  {
11106
11349
  label: "Unit Price",
11107
11350
  value: `$${tokenPrice.toLocaleString(void 0, { minimumFractionDigits: 2, maximumFractionDigits: 2 })}`
@@ -11132,7 +11375,9 @@ function OrderConfirmationModal({
11132
11375
  "Your order for ",
11133
11376
  /* @__PURE__ */ jsxs("strong", { children: [
11134
11377
  tokenQuantity.toLocaleString(),
11135
- " MUS units"
11378
+ " ",
11379
+ tokenSymbol,
11380
+ " units"
11136
11381
  ] }),
11137
11382
  " in the",
11138
11383
  " ",
@@ -11361,6 +11606,7 @@ function PropertyBuy({
11361
11606
  const [displayedOwnedTokens, setDisplayedOwnedTokens] = useState(0);
11362
11607
  const [ownedTokensJustUpdated, setOwnedTokensJustUpdated] = useState(false);
11363
11608
  const [lastOrderQuantity, setLastOrderQuantity] = useState(0);
11609
+ const [orderPendingAllocation, setOrderPendingAllocation] = useState(false);
11364
11610
  const [orderPlacedSuccess, setOrderPlacedSuccess] = useState(false);
11365
11611
  const [lastOrderDetails, setLastOrderDetails] = useState(null);
11366
11612
  const [showOrderConfirmModal, setShowOrderConfirmModal] = useState(false);
@@ -11408,12 +11654,23 @@ function PropertyBuy({
11408
11654
  }
11409
11655
  setShowOrderConfirmModal(true);
11410
11656
  };
11411
- const isPurchaseInFlight = purchaseStatus === "checking-allowance" || purchaseStatus === "approving" || purchaseStatus === "purchasing";
11657
+ useEffect(() => {
11658
+ if (purchaseStatus === "success" && orderPendingAllocation) {
11659
+ setOrderPendingAllocation(false);
11660
+ setOrderPlacedSuccess(true);
11661
+ }
11662
+ }, [purchaseStatus, orderPendingAllocation]);
11663
+ const handlePlaceAnotherOrder = useCallback(() => {
11664
+ setOrderPlacedSuccess(false);
11665
+ setOrderPendingAllocation(false);
11666
+ }, []);
11667
+ const isPurchaseInFlight = purchaseStatus === "checking-allowance" || purchaseStatus === "approving" || purchaseStatus === "purchasing" || purchaseStatus === "pending-allocation";
11412
11668
  const getOrderButtonText = () => {
11413
11669
  if (!isAuthenticated) return "Sign In to Invest";
11414
11670
  if (purchaseStatus === "checking-allowance") return "Checking allowance\u2026";
11415
11671
  if (purchaseStatus === "approving") return "Approving USDC\u2026";
11416
11672
  if (purchaseStatus === "purchasing") return "Confirming purchase\u2026";
11673
+ if (purchaseStatus === "pending-allocation") return "Awaiting allocation\u2026";
11417
11674
  if (ipoStatus === "PENDING" && !isPrivateClient) return "Sale Not Open Yet";
11418
11675
  if (ipoStatus === "CLOSED") return "Sale Completed";
11419
11676
  if (ipoStatus === "CANCELLED") return "Sale Cancelled";
@@ -11456,7 +11713,7 @@ function PropertyBuy({
11456
11713
  total: orderTotal,
11457
11714
  price: tokenPrice
11458
11715
  });
11459
- setOrderPlacedSuccess(true);
11716
+ setOrderPendingAllocation(true);
11460
11717
  setSliderValue(0);
11461
11718
  setManualOrderAmount(null);
11462
11719
  };
@@ -11542,6 +11799,7 @@ function PropertyBuy({
11542
11799
  displayedOwnedTokens,
11543
11800
  ownedTokensJustUpdated,
11544
11801
  lastOrderQuantity,
11802
+ orderPendingAllocation,
11545
11803
  orderPlacedSuccess,
11546
11804
  lastOrderDetails,
11547
11805
  tokenQuantity,
@@ -11556,7 +11814,7 @@ function PropertyBuy({
11556
11814
  orderButtonText: getOrderButtonText(),
11557
11815
  isOrderButtonDisabled: isOrderButtonDisabled(),
11558
11816
  hasInsufficientFunds,
11559
- onPlaceAnotherOrder: () => setOrderPlacedSuccess(false),
11817
+ onPlaceAnotherOrder: handlePlaceAnotherOrder,
11560
11818
  onDeposit
11561
11819
  }
11562
11820
  ),
@@ -11590,6 +11848,7 @@ function PropertyBuy({
11590
11848
  tokenQuantity,
11591
11849
  tokenPrice,
11592
11850
  propertyName,
11851
+ tokenSymbol,
11593
11852
  estExposure,
11594
11853
  orderTotal,
11595
11854
  availableBalance,
@@ -11630,29 +11889,42 @@ var HeroGrid = styled24.div`
11630
11889
  }
11631
11890
 
11632
11891
  @media (max-width: 1024px) {
11633
- grid-template-columns: 1fr;
11634
- grid-template-rows: auto;
11892
+ display: flex;
11893
+ flex-direction: column;
11635
11894
  gap: 1rem;
11895
+ overflow: hidden;
11636
11896
 
11637
11897
  & > div:nth-child(1) {
11638
11898
  display: none;
11639
11899
  }
11640
11900
 
11641
11901
  & > div:nth-child(2) {
11642
- grid-column: 1 / -1;
11643
11902
  order: 1;
11903
+ min-width: 0;
11904
+ width: 100%;
11644
11905
  }
11645
11906
 
11646
11907
  & > div:nth-child(4) {
11647
- grid-column: 1 / -1;
11648
11908
  order: 2;
11909
+ min-width: 0;
11910
+ width: 100%;
11911
+ height: auto;
11649
11912
  }
11650
11913
 
11651
11914
  & > div:nth-child(3) {
11652
- grid-column: 1 / -1;
11653
11915
  order: 3;
11916
+ min-width: 0;
11917
+ width: 100%;
11654
11918
  }
11655
11919
  }
11920
+
11921
+ @media (max-width: 768px) {
11922
+ gap: 0.75rem;
11923
+ }
11924
+
11925
+ @media (max-width: 480px) {
11926
+ gap: 0.5rem;
11927
+ }
11656
11928
  `;
11657
11929
  var PaymentOption = styled24.div`
11658
11930
  display: flex;