@loafmarkets/ui 0.1.254 → 0.1.256

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.js CHANGED
@@ -183,7 +183,7 @@ var PortfolioSummary = React5__namespace.forwardRef(
183
183
  onResetAccount,
184
184
  positionsHeading = "Current Positions",
185
185
  emptyPositionsText = "No positions yet. Start trading to build your portfolio!",
186
- formatCurrency: formatCurrency7 = defaultFormatCurrency,
186
+ formatCurrency: formatCurrency6 = defaultFormatCurrency,
187
187
  formatPercent: formatPercent2 = defaultFormatPercent,
188
188
  formatSignedCurrency = defaultFormatSignedCurrency,
189
189
  className,
@@ -221,11 +221,11 @@ var PortfolioSummary = React5__namespace.forwardRef(
221
221
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "grid grid-cols-2 gap-4", children: [
222
222
  /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
223
223
  /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-xs uppercase tracking-[0.5px] text-white/50", children: "Available Cash" }),
224
- /* @__PURE__ */ jsxRuntime.jsx("p", { className: "mt-1 text-[1.25rem] font-semibold text-white", children: formatCurrency7(availableCash) })
224
+ /* @__PURE__ */ jsxRuntime.jsx("p", { className: "mt-1 text-[1.25rem] font-semibold text-white", children: formatCurrency6(availableCash) })
225
225
  ] }),
226
226
  /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
227
227
  /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-xs uppercase tracking-[0.5px] text-white/50", children: "Portfolio Value" }),
228
- /* @__PURE__ */ jsxRuntime.jsx("p", { className: "mt-1 text-[1.25rem] font-semibold text-white", children: formatCurrency7(portfolioValue) })
228
+ /* @__PURE__ */ jsxRuntime.jsx("p", { className: "mt-1 text-[1.25rem] font-semibold text-white", children: formatCurrency6(portfolioValue) })
229
229
  ] }),
230
230
  /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
231
231
  /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-xs uppercase tracking-[0.5px] text-white/50", children: "Total Return" }),
@@ -7416,7 +7416,7 @@ var MiniLiveFeed = () => {
7416
7416
  }, 2e3 + Math.random() * 2e3);
7417
7417
  return () => clearInterval(interval);
7418
7418
  }, []);
7419
- const formatCurrency7 = (amount) => `$${amount.toLocaleString()}`;
7419
+ const formatCurrency6 = (amount) => `$${amount.toLocaleString()}`;
7420
7420
  return /* @__PURE__ */ jsxRuntime.jsxs(
7421
7421
  "div",
7422
7422
  {
@@ -7506,7 +7506,7 @@ var MiniLiveFeed = () => {
7506
7506
  ] }),
7507
7507
  /* @__PURE__ */ jsxRuntime.jsxs("div", { style: { display: "flex", alignItems: "center", gap: "0.5rem", position: "relative", zIndex: 1 }, children: [
7508
7508
  /* @__PURE__ */ jsxRuntime.jsx("span", { style: { fontSize: "0.75rem", color: "var(--color-text-secondary, #848e9c)" }, children: "bought" }),
7509
- /* @__PURE__ */ jsxRuntime.jsx("span", { style: { fontSize: "0.8rem", fontWeight: 600, color: "#fff" }, children: formatCurrency7(purchase.amount) })
7509
+ /* @__PURE__ */ jsxRuntime.jsx("span", { style: { fontSize: "0.8rem", fontWeight: 600, color: "#fff" }, children: formatCurrency6(purchase.amount) })
7510
7510
  ] })
7511
7511
  ]
7512
7512
  },
@@ -8457,7 +8457,7 @@ function PropertyOverview({
8457
8457
  description: descriptionProp,
8458
8458
  tradeButtonLabel = "Trade",
8459
8459
  images,
8460
- galleryCategories: galleryCategories2 = [],
8460
+ galleryCategories = [],
8461
8461
  videoUrl,
8462
8462
  tokenName,
8463
8463
  landSizeSqm: landProp,
@@ -8679,7 +8679,7 @@ function PropertyOverview({
8679
8679
  GalleryMapSection,
8680
8680
  {
8681
8681
  images: galleryImages.map((img) => ({ src: img.imageUrl, title: img.title, subtitle: img.subtitle })),
8682
- categories: galleryCategories2,
8682
+ categories: galleryCategories,
8683
8683
  propertyLocation: location,
8684
8684
  videoUrl,
8685
8685
  tokenName,
@@ -8911,7 +8911,7 @@ function PropertyOverview({
8911
8911
  GalleryMapSection,
8912
8912
  {
8913
8913
  images: galleryImages.map((img) => ({ src: img.imageUrl, title: img.title, subtitle: img.subtitle })),
8914
- categories: galleryCategories2,
8914
+ categories: galleryCategories,
8915
8915
  propertyLocation: location,
8916
8916
  videoUrl,
8917
8917
  tokenName,
@@ -12245,342 +12245,6 @@ var HomeSpinner = styled9__default.default.span`
12245
12245
  to { transform: rotate(360deg); }
12246
12246
  }
12247
12247
  `;
12248
- var MAX_DISPLAY_AMOUNT = 6e4;
12249
- var formatCurrency4 = (amount) => {
12250
- if (amount >= 1e6) return `$${(amount / 1e6).toFixed(2)}M`;
12251
- return `$${Math.round(amount).toLocaleString()}`;
12252
- };
12253
- var formatTimeAgo2 = (timestamp) => {
12254
- const seconds = Math.floor(Date.now() / 1e3) - timestamp;
12255
- if (seconds < 60) return `${seconds}s ago`;
12256
- const minutes = Math.floor(seconds / 60);
12257
- if (minutes < 60) return `${minutes}m ago`;
12258
- const hours = Math.floor(minutes / 60);
12259
- if (hours < 24) return `${hours}h ago`;
12260
- return `${Math.floor(hours / 24)}d ago`;
12261
- };
12262
- function VideoActivitySection({
12263
- ipoStarted,
12264
- ipoEnded = false,
12265
- isLoading = false,
12266
- recentOrders = [],
12267
- ordersAllocated = 0,
12268
- tokenPrice = 0
12269
- }) {
12270
- const sortedOrders = React5.useMemo(
12271
- () => [...recentOrders].sort((a, b) => b.timestamp - a.timestamp).slice(0, 7),
12272
- [recentOrders]
12273
- );
12274
- const headerStatusText = ipoEnded ? `Sale ended${ordersAllocated > 0 ? ` \xB7 ${ordersAllocated.toLocaleString()} orders` : ""}` : ipoStarted ? isLoading && sortedOrders.length === 0 ? "Loading orders\u2026" : `Active orders: ${ordersAllocated.toLocaleString()}` : "Waiting for Offer to Open";
12275
- const showSkeletonFeed = ipoStarted && isLoading && sortedOrders.length === 0;
12276
- const showOrderFeed = !showSkeletonFeed && (ipoStarted || ipoEnded && sortedOrders.length > 0);
12277
- return /* @__PURE__ */ jsxRuntime.jsxs(Section4, { children: [
12278
- /* @__PURE__ */ jsxRuntime.jsxs(VideoPanel, { children: [
12279
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "section-header", children: /* @__PURE__ */ jsxRuntime.jsx("h3", { children: "Musgrave" }) }),
12280
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "video-container", children: /* @__PURE__ */ jsxRuntime.jsxs("video", { controls: true, loop: true, autoPlay: true, muted: true, playsInline: true, children: [
12281
- /* @__PURE__ */ jsxRuntime.jsx("source", { src: "/properties/Musgrave/musgrave.mp4", type: "video/mp4" }),
12282
- "Your browser does not support the video tag."
12283
- ] }) })
12284
- ] }),
12285
- /* @__PURE__ */ jsxRuntime.jsxs(ActivityPanel, { children: [
12286
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "section-header", children: [
12287
- /* @__PURE__ */ jsxRuntime.jsxs("h3", { children: [
12288
- /* @__PURE__ */ jsxRuntime.jsx(LiveIndicatorDot, { $active: ipoStarted && !ipoEnded }),
12289
- "Recent Order Activity"
12290
- ] }),
12291
- /* @__PURE__ */ jsxRuntime.jsx("span", { children: headerStatusText })
12292
- ] }),
12293
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "activity-content", children: showSkeletonFeed ? /* @__PURE__ */ jsxRuntime.jsx(FeedList, { children: Array.from({ length: 6 }).map((_, i) => /* @__PURE__ */ jsxRuntime.jsxs(SkeletonFeedRow, { children: [
12294
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "info-col", children: [
12295
- /* @__PURE__ */ jsxRuntime.jsx(Skeleton, { width: 110, height: 14 }),
12296
- /* @__PURE__ */ jsxRuntime.jsx(Skeleton, { width: 56, height: 10 })
12297
- ] }),
12298
- /* @__PURE__ */ jsxRuntime.jsx(Skeleton, { width: 70, height: 14 })
12299
- ] }, `feed-skel-${i}`)) }) : showOrderFeed ? /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
12300
- ipoEnded && /* @__PURE__ */ jsxRuntime.jsx(EndedBanner, { children: "Sale ended \u2014 final allocations" }),
12301
- /* @__PURE__ */ jsxRuntime.jsx(FeedList, { children: sortedOrders.map((order, index) => {
12302
- const amount = tokenPrice * order.quantity;
12303
- const barPercent = Math.min(85, Math.max(15, amount / MAX_DISPLAY_AMOUNT * 100));
12304
- const isAlternate = index % 2 === 1;
12305
- return /* @__PURE__ */ jsxRuntime.jsxs(
12306
- PurchaseItem,
12307
- {
12308
- $barWidth: `${barPercent}%`,
12309
- $isAlternate: isAlternate,
12310
- children: [
12311
- /* @__PURE__ */ jsxRuntime.jsxs(PurchaseInfo, { children: [
12312
- /* @__PURE__ */ jsxRuntime.jsx(PurchaseName, { children: order.buyerHandle || `${order.buyerAddress.slice(0, 6)}...${order.buyerAddress.slice(-4)}` }),
12313
- /* @__PURE__ */ jsxRuntime.jsx(PurchaseTime, { children: formatTimeAgo2(order.timestamp) })
12314
- ] }),
12315
- /* @__PURE__ */ jsxRuntime.jsx(PurchaseAmount, { children: formatCurrency4(amount) })
12316
- ]
12317
- },
12318
- order.txHash
12319
- );
12320
- }) })
12321
- ] }) : ipoEnded ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "activity-empty", children: /* @__PURE__ */ jsxRuntime.jsx("p", { children: "Sale ended \u2014 no orders were placed." }) }) : /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "activity-empty", children: [
12322
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "spinner" }),
12323
- /* @__PURE__ */ jsxRuntime.jsx("p", { children: "Activity will appear once the Offering opens" })
12324
- ] }) })
12325
- ] })
12326
- ] });
12327
- }
12328
- var Section4 = styled9__default.default.div`
12329
- display: flex;
12330
- gap: 1.5rem;
12331
- align-items: stretch;
12332
- @media (max-width: 1024px) {
12333
- flex-direction: column;
12334
- gap: 1rem;
12335
- }
12336
- `;
12337
- var VideoPanel = styled9__default.default.div`
12338
- flex: 1;
12339
- background-color: var(--color-card-darker, #111);
12340
- border-radius: 8px;
12341
- padding: 1.5rem;
12342
- box-shadow: 0 4px 8px rgba(0,0,0,0.2);
12343
- border: 1px solid var(--color-border);
12344
- overflow: hidden;
12345
- display: flex;
12346
- flex-direction: column;
12347
- @media (max-width: 768px) {
12348
- display: none;
12349
- }
12350
- .section-header {
12351
- display: flex;
12352
- justify-content: space-between;
12353
- align-items: center;
12354
- padding-bottom: 0.75rem;
12355
- margin-bottom: 1rem;
12356
- border-bottom: 1px solid rgba(255,255,255,0.1);
12357
- h3 {
12358
- font-size: 0.9rem;
12359
- font-weight: 600;
12360
- color: var(--color-text);
12361
- margin: 0;
12362
- }
12363
- }
12364
- .video-container {
12365
- flex: 1;
12366
- position: relative;
12367
- background: #000;
12368
- border-radius: 8px;
12369
- overflow: hidden;
12370
- min-height: 300px;
12371
- video {
12372
- position: absolute;
12373
- top: 0;
12374
- left: 0;
12375
- width: 100%;
12376
- height: 100%;
12377
- object-fit: cover;
12378
- }
12379
- }
12380
- `;
12381
- var ActivityPanel = styled9__default.default.div`
12382
- flex: 0 0 auto;
12383
- min-width: 450px;
12384
- max-width: 520px;
12385
- display: flex;
12386
- flex-direction: column;
12387
- background-color: var(--color-card-darker, #111);
12388
- border-radius: 8px;
12389
- padding: 1.5rem;
12390
- box-shadow: 0 4px 8px rgba(0,0,0,0.2);
12391
- border: 1px solid var(--color-border);
12392
- @media (max-width: 1024px) {
12393
- min-width: 0;
12394
- max-width: none;
12395
- width: 100%;
12396
- padding: 1rem;
12397
- }
12398
- @media (max-width: 768px) {
12399
- max-height: 280px;
12400
- .activity-content {
12401
- max-height: 220px;
12402
- }
12403
- }
12404
- .section-header {
12405
- display: flex;
12406
- justify-content: space-between;
12407
- align-items: center;
12408
- padding-bottom: 0.75rem;
12409
- margin-bottom: 1rem;
12410
- border-bottom: 1px solid rgba(255,255,255,0.1);
12411
- h3 {
12412
- font-size: 0.9rem;
12413
- font-weight: 600;
12414
- color: var(--color-text);
12415
- margin: 0;
12416
- display: flex;
12417
- align-items: center;
12418
- gap: 0.5rem;
12419
- }
12420
- span {
12421
- font-size: 0.75rem;
12422
- color: var(--color-text-secondary);
12423
- font-weight: 500;
12424
- }
12425
- }
12426
- .activity-content {
12427
- flex: 1;
12428
- overflow-y: auto;
12429
- scrollbar-width: none;
12430
- -ms-overflow-style: none;
12431
- }
12432
- .activity-content::-webkit-scrollbar {
12433
- display: none;
12434
- }
12435
- .activity-empty {
12436
- display: flex;
12437
- flex-direction: column;
12438
- align-items: center;
12439
- justify-content: center;
12440
- height: 200px;
12441
- color: var(--color-text-secondary);
12442
- text-align: center;
12443
- gap: 0.75rem;
12444
- .spinner {
12445
- width: 40px;
12446
- height: 40px;
12447
- border-radius: 50%;
12448
- border: 2px solid rgba(212,175,55,0.3);
12449
- border-top-color: #D4AF37;
12450
- animation: spin 1s linear infinite;
12451
- }
12452
- p {
12453
- font-size: 0.85rem;
12454
- margin: 0;
12455
- }
12456
- }
12457
- @keyframes spin {
12458
- from { transform: rotate(0deg); }
12459
- to { transform: rotate(360deg); }
12460
- }
12461
- `;
12462
- var SkeletonFeedRow = styled9__default.default.div`
12463
- padding: 0.625rem 0.75rem;
12464
- border-bottom: 1px solid rgba(255,255,255,0.04);
12465
- display: flex;
12466
- justify-content: space-between;
12467
- align-items: center;
12468
- gap: 1rem;
12469
-
12470
- &:last-child {
12471
- border-bottom: none;
12472
- }
12473
-
12474
- .info-col {
12475
- display: flex;
12476
- flex-direction: column;
12477
- gap: 0.3rem;
12478
- min-width: 0;
12479
- flex: 1;
12480
- }
12481
-
12482
- @media (max-width: 768px) {
12483
- padding: 0.4rem 0.6rem;
12484
- }
12485
- `;
12486
- var EndedBanner = styled9__default.default.div`
12487
- font-size: 0.7rem;
12488
- font-weight: 600;
12489
- letter-spacing: 0.04em;
12490
- text-transform: uppercase;
12491
- color: rgba(255, 255, 255, 0.55);
12492
- background: rgba(255, 255, 255, 0.04);
12493
- border: 1px solid rgba(255, 255, 255, 0.08);
12494
- border-radius: 6px;
12495
- padding: 0.4rem 0.6rem;
12496
- margin-bottom: 0.5rem;
12497
- text-align: center;
12498
- `;
12499
- var FeedList = styled9__default.default.div`
12500
- width: 100%;
12501
- overflow-y: auto;
12502
- scrollbar-width: none;
12503
- -ms-overflow-style: none;
12504
- &::-webkit-scrollbar {
12505
- display: none;
12506
- }
12507
- `;
12508
- var PurchaseItem = styled9__default.default.div`
12509
- padding: 0.625rem 0.75rem;
12510
- border-bottom: 1px solid rgba(255,255,255,0.05);
12511
- display: flex;
12512
- justify-content: space-between;
12513
- align-items: center;
12514
- position: relative;
12515
- overflow: hidden;
12516
- background-color: ${(p) => p.$isAlternate ? "rgba(255,255,255,0.03)" : "transparent"};
12517
-
12518
- &::before {
12519
- content: '';
12520
- position: absolute;
12521
- top: 0;
12522
- right: 0;
12523
- bottom: 0;
12524
- width: ${(p) => p.$barWidth || "20%"};
12525
- background: linear-gradient(90deg, transparent 0%, rgba(14,203,129,0.15) 100%);
12526
- pointer-events: none;
12527
- }
12528
-
12529
- &:last-child {
12530
- border-bottom: none;
12531
- }
12532
-
12533
- @media (max-width: 768px) {
12534
- padding: 0.4rem 0.6rem;
12535
- }
12536
- `;
12537
- var PurchaseInfo = styled9__default.default.div`
12538
- display: flex;
12539
- flex-direction: column;
12540
- min-width: 0;
12541
- `;
12542
- var PurchaseName = styled9__default.default.div`
12543
- font-weight: 500;
12544
- font-size: 0.875rem;
12545
- color: #fff;
12546
- white-space: nowrap;
12547
- overflow: hidden;
12548
- text-overflow: ellipsis;
12549
- `;
12550
- var PurchaseTime = styled9__default.default.div`
12551
- font-size: 0.7rem;
12552
- color: var(--color-text-secondary);
12553
- margin-top: 0.125rem;
12554
- `;
12555
- var PurchaseAmount = styled9__default.default.div`
12556
- font-weight: 600;
12557
- font-size: 0.875rem;
12558
- color: #fff;
12559
- white-space: nowrap;
12560
- margin-left: 1rem;
12561
- `;
12562
- var LiveIndicatorDot = styled9__default.default.span`
12563
- display: inline-block;
12564
- width: 8px;
12565
- height: 8px;
12566
- background-color: ${(p) => p.$active ? "#0ecb81" : "#848e9c"};
12567
- border-radius: 50%;
12568
- position: relative;
12569
- &:after {
12570
- content: '';
12571
- position: absolute;
12572
- width: 100%;
12573
- height: 100%;
12574
- border-radius: 50%;
12575
- background-color: ${(p) => p.$active ? "#0ecb81" : "transparent"};
12576
- animation: ${(p) => p.$active ? "liveGlow 2s infinite" : "none"};
12577
- }
12578
- @keyframes liveGlow {
12579
- 0% { box-shadow: 0 0 0 0 rgba(14,203,129,0.4); }
12580
- 70% { box-shadow: 0 0 0 10px rgba(14,203,129,0); }
12581
- 100% { box-shadow: 0 0 0 0 rgba(14,203,129,0); }
12582
- }
12583
- `;
12584
12248
  var slideIn = styled9.keyframes`
12585
12249
  from { transform: translateX(110%); opacity: 0; }
12586
12250
  to { transform: translateX(0); opacity: 1; }
@@ -13627,52 +13291,312 @@ var InsufficientFunds = styled9__default.default.div`
13627
13291
  font-size: 0.85rem;
13628
13292
  font-weight: 600;
13629
13293
  `;
13630
- var ACTIVITY_PAGE_SIZE_DEFAULT = 10;
13631
- var formatCurrency5 = (value, opts) => {
13632
- const min = opts?.minimumFractionDigits ?? 2;
13633
- const max = opts?.maximumFractionDigits ?? 2;
13634
- return `$${value.toLocaleString("en-US", { minimumFractionDigits: min, maximumFractionDigits: max })}`;
13635
- };
13636
- var formatNumber2 = (value, maximumFractionDigits = 2) => value.toLocaleString("en-US", { minimumFractionDigits: 0, maximumFractionDigits });
13637
- var formatTimestamp = (unix) => {
13638
- if (!unix) return "\u2014";
13639
- let sec;
13640
- if (unix > 1e18) sec = Math.floor(unix / 1e9);
13641
- else if (unix > 1e14) sec = Math.floor(unix / 1e6);
13642
- else if (unix > 1e12) sec = Math.floor(unix / 1e3);
13643
- else sec = unix;
13644
- return new Date(sec * 1e3).toLocaleString("en-AU", {
13645
- day: "2-digit",
13646
- month: "short",
13647
- hour: "2-digit",
13648
- minute: "2-digit",
13649
- hour12: false
13650
- });
13651
- };
13652
- var formatAddress = (address) => `${address.slice(0, 6)}...${address.slice(-4)}`;
13653
- var prettyLabel = (value) => value.split("_").map((part) => part.charAt(0) + part.slice(1).toLowerCase()).join(" ");
13654
- var sideLabel = (side) => side?.toUpperCase() === "SELL" ? "Sell" : "Buy";
13655
- var getOrderStatusMeta = (statusRaw) => {
13656
- const status = statusRaw.toUpperCase();
13657
- if (status === "FILLED" || status === "CONFIRMED" || status === "ALLOCATED") {
13658
- return { color: "#0ecb81", bg: "rgba(14,203,129,0.1)" };
13659
- }
13660
- if (status === "CANCELLED" || status === "CANCELED" || status === "REJECTED") {
13661
- return { color: "#f6465d", bg: "rgba(246,70,93,0.12)" };
13662
- }
13663
- return { color: "#f0b90b", bg: "rgba(240,185,11,0.15)" };
13664
- };
13665
- function EditableField({ value, onCommit, format }) {
13666
- const [editing, setEditing] = React5.useState(false);
13667
- const [draft, setDraft] = React5.useState("");
13668
- const inputRef = React5.useRef(null);
13669
- React5.useEffect(() => {
13670
- if (editing) inputRef.current?.focus();
13671
- }, [editing]);
13672
- const commit = () => {
13673
- const parsed = parseFloat(draft);
13674
- if (!isNaN(parsed) && parsed > 0 && parsed !== value) {
13675
- onCommit(parsed);
13294
+ function OrderConfirmationModal({
13295
+ open,
13296
+ onClose,
13297
+ hasInsufficientFunds,
13298
+ tokenQuantity,
13299
+ tokenPrice,
13300
+ propertyName,
13301
+ tokenSymbol,
13302
+ estExposure,
13303
+ orderTotal,
13304
+ availableBalance,
13305
+ onConfirm,
13306
+ isPlacing = false,
13307
+ placingLabel = "Placing order\u2026"
13308
+ }) {
13309
+ if (!open) return null;
13310
+ const handleOverlayClose = () => {
13311
+ if (isPlacing) return;
13312
+ onClose();
13313
+ };
13314
+ return /* @__PURE__ */ jsxRuntime.jsx(Overlay3, { onClick: handleOverlayClose, children: /* @__PURE__ */ jsxRuntime.jsxs(Modal, { onClick: (e) => e.stopPropagation(), children: [
13315
+ /* @__PURE__ */ jsxRuntime.jsx(ModalHeader, { children: /* @__PURE__ */ jsxRuntime.jsxs("h3", { children: [
13316
+ "Confirm Order",
13317
+ /* @__PURE__ */ jsxRuntime.jsx(Badge2, { children: "Subscribe" })
13318
+ ] }) }),
13319
+ /* @__PURE__ */ jsxRuntime.jsx(ModalBody, { children: [
13320
+ { label: "Order Type", value: "Primary Offering" },
13321
+ { label: "Property", value: propertyName },
13322
+ { label: "Units", value: `${tokenQuantity.toLocaleString()} ${tokenSymbol}`, highlight: true },
13323
+ {
13324
+ label: "Unit Price",
13325
+ value: `$${tokenPrice.toLocaleString(void 0, { minimumFractionDigits: 2, maximumFractionDigits: 2 })}`
13326
+ },
13327
+ { label: "Property Exposure", value: `${estExposure}%` },
13328
+ { label: "Total Investment", value: `$${orderTotal.toLocaleString()}`, highlight: true }
13329
+ ].map((row, index, arr) => /* @__PURE__ */ jsxRuntime.jsxs(ModalRow, { "data-divider": index < arr.length - 1, children: [
13330
+ /* @__PURE__ */ jsxRuntime.jsx("span", { children: row.label }),
13331
+ /* @__PURE__ */ jsxRuntime.jsx("strong", { "data-highlight": row.highlight, children: row.value })
13332
+ ] }, row.label)) }),
13333
+ hasInsufficientFunds ? /* @__PURE__ */ jsxRuntime.jsxs(Warning, { children: [
13334
+ /* @__PURE__ */ jsxRuntime.jsx("p", { children: "\u26A0 Insufficient Balance" }),
13335
+ /* @__PURE__ */ jsxRuntime.jsxs("small", { children: [
13336
+ "You need ",
13337
+ /* @__PURE__ */ jsxRuntime.jsxs("strong", { children: [
13338
+ "$",
13339
+ orderTotal.toLocaleString()
13340
+ ] }),
13341
+ " but only have",
13342
+ " ",
13343
+ /* @__PURE__ */ jsxRuntime.jsxs("strong", { children: [
13344
+ "$",
13345
+ availableBalance.toLocaleString()
13346
+ ] }),
13347
+ " available."
13348
+ ] })
13349
+ ] }) : /* @__PURE__ */ jsxRuntime.jsxs(Summary, { children: [
13350
+ "Your order for ",
13351
+ /* @__PURE__ */ jsxRuntime.jsxs("strong", { children: [
13352
+ tokenQuantity.toLocaleString(),
13353
+ " ",
13354
+ tokenSymbol,
13355
+ " units"
13356
+ ] }),
13357
+ " in the",
13358
+ " ",
13359
+ /* @__PURE__ */ jsxRuntime.jsx("strong", { children: propertyName }),
13360
+ " Primary Offering will be placed for ",
13361
+ /* @__PURE__ */ jsxRuntime.jsxs("strong", { children: [
13362
+ "$",
13363
+ tokenPrice.toFixed(2),
13364
+ "/unit"
13365
+ ] }),
13366
+ "."
13367
+ ] }),
13368
+ /* @__PURE__ */ jsxRuntime.jsxs(ButtonRow2, { children: [
13369
+ /* @__PURE__ */ jsxRuntime.jsx(
13370
+ "button",
13371
+ {
13372
+ type: "button",
13373
+ onClick: onClose,
13374
+ className: "secondary",
13375
+ disabled: isPlacing,
13376
+ children: "Cancel"
13377
+ }
13378
+ ),
13379
+ !hasInsufficientFunds && /* @__PURE__ */ jsxRuntime.jsx(
13380
+ "button",
13381
+ {
13382
+ type: "button",
13383
+ onClick: onConfirm,
13384
+ className: "primary",
13385
+ disabled: isPlacing,
13386
+ children: isPlacing ? /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
13387
+ /* @__PURE__ */ jsxRuntime.jsx(Spinner, { "aria-hidden": true }),
13388
+ /* @__PURE__ */ jsxRuntime.jsx("span", { children: placingLabel })
13389
+ ] }) : "Place Order"
13390
+ }
13391
+ )
13392
+ ] })
13393
+ ] }) });
13394
+ }
13395
+ var Overlay3 = styled9__default.default.div`
13396
+ position: fixed;
13397
+ top: 0;
13398
+ left: 0;
13399
+ right: 0;
13400
+ bottom: 0;
13401
+ background-color: rgba(0,0,0,0.7);
13402
+ display: flex;
13403
+ align-items: center;
13404
+ justify-content: center;
13405
+ z-index: 10000;
13406
+ backdrop-filter: blur(4px);
13407
+ `;
13408
+ var Modal = styled9__default.default.div`
13409
+ background: linear-gradient(135deg, rgba(26,29,35,0.95) 0%, rgba(26,29,35,0.98) 100%);
13410
+ border: 1px solid rgba(255,255,255,0.1);
13411
+ border-radius: 16px;
13412
+ padding: 2rem;
13413
+ max-width: 480px;
13414
+ width: 90%;
13415
+ box-shadow: 0 20px 60px rgba(0,0,0,0.5);
13416
+ `;
13417
+ var ModalHeader = styled9__default.default.div`
13418
+ display: flex;
13419
+ align-items: center;
13420
+ margin-bottom: 1.5rem;
13421
+ padding-bottom: 1rem;
13422
+ border-bottom: 1px solid rgba(255,255,255,0.1);
13423
+ h3 {
13424
+ margin: 0;
13425
+ font-size: 1.25rem;
13426
+ font-weight: 600;
13427
+ color: #fff;
13428
+ display: flex;
13429
+ align-items: center;
13430
+ gap: 0.5rem;
13431
+ }
13432
+ `;
13433
+ var Badge2 = styled9__default.default.span`
13434
+ padding: 0.25rem 0.75rem;
13435
+ border-radius: 6px;
13436
+ font-size: 0.75rem;
13437
+ font-weight: 600;
13438
+ text-transform: uppercase;
13439
+ letter-spacing: 0.5px;
13440
+ background: linear-gradient(135deg, rgba(212,175,55,0.2) 0%, rgba(212,175,55,0.1) 100%);
13441
+ color: #D4AF37;
13442
+ border: 1px solid rgba(212,175,55,0.3);
13443
+ `;
13444
+ var ModalBody = styled9__default.default.div`
13445
+ margin-bottom: 1.5rem;
13446
+ display: flex;
13447
+ flex-direction: column;
13448
+ `;
13449
+ var ModalRow = styled9__default.default.div`
13450
+ display: flex;
13451
+ justify-content: space-between;
13452
+ align-items: center;
13453
+ padding: 0.75rem 0;
13454
+ border-bottom: 1px solid rgba(255,255,255,0.05);
13455
+ &[data-divider='false'] {
13456
+ border-bottom: none;
13457
+ }
13458
+ span {
13459
+ color: rgba(255,255,255,0.6);
13460
+ font-size: 0.9rem;
13461
+ }
13462
+ strong {
13463
+ color: #fff;
13464
+ font-weight: 500;
13465
+ font-size: 0.95rem;
13466
+ }
13467
+ strong[data-highlight='true'] {
13468
+ color: #D4AF37;
13469
+ font-weight: 600;
13470
+ }
13471
+ `;
13472
+ var Warning = styled9__default.default.div`
13473
+ background: rgba(246,70,93,0.1);
13474
+ border: 1px solid rgba(246,70,93,0.3);
13475
+ border-radius: 8px;
13476
+ padding: 1rem;
13477
+ margin-bottom: 1.5rem;
13478
+ p {
13479
+ margin: 0;
13480
+ color: #f6465d;
13481
+ font-size: 0.9rem;
13482
+ font-weight: 600;
13483
+ }
13484
+ small {
13485
+ display: block;
13486
+ margin-top: 0.5rem;
13487
+ color: rgba(255,255,255,0.7);
13488
+ font-size: 0.85rem;
13489
+ line-height: 1.5;
13490
+ }
13491
+ `;
13492
+ var Summary = styled9__default.default.div`
13493
+ background: rgba(255,255,255,0.03);
13494
+ border: 1px solid rgba(255,255,255,0.08);
13495
+ border-radius: 8px;
13496
+ padding: 1rem;
13497
+ margin-bottom: 1.5rem;
13498
+ color: rgba(255,255,255,0.8);
13499
+ font-size: 0.9rem;
13500
+ line-height: 1.5;
13501
+ `;
13502
+ var spin = styled9.keyframes`
13503
+ to { transform: rotate(360deg); }
13504
+ `;
13505
+ var Spinner = styled9__default.default.span`
13506
+ display: inline-block;
13507
+ width: 14px;
13508
+ height: 14px;
13509
+ border-radius: 50%;
13510
+ border: 2px solid rgba(255, 255, 255, 0.35);
13511
+ border-top-color: #fff;
13512
+ animation: ${spin} 0.7s linear infinite;
13513
+ margin-right: 0.5rem;
13514
+ vertical-align: -2px;
13515
+ `;
13516
+ var ButtonRow2 = styled9__default.default.div`
13517
+ display: flex;
13518
+ gap: 1rem;
13519
+ justify-content: flex-end;
13520
+ button {
13521
+ padding: 0.75rem 1.5rem;
13522
+ border-radius: 8px;
13523
+ font-weight: 600;
13524
+ font-size: 0.95rem;
13525
+ cursor: pointer;
13526
+ display: inline-flex;
13527
+ align-items: center;
13528
+ justify-content: center;
13529
+ }
13530
+ button:disabled {
13531
+ cursor: not-allowed;
13532
+ opacity: 0.75;
13533
+ }
13534
+ .secondary {
13535
+ background: rgba(255,255,255,0.1);
13536
+ color: rgba(255,255,255,0.8);
13537
+ border: 1px solid rgba(255,255,255,0.2);
13538
+ }
13539
+ .primary {
13540
+ background: linear-gradient(135deg, #0ecb81 0%, #0ba968 100%);
13541
+ color: #fff;
13542
+ border: none;
13543
+ box-shadow: 0 4px 12px rgba(14,203,129,0.3);
13544
+ }
13545
+ `;
13546
+
13547
+ // src/components/property-buy/constants.ts
13548
+ var STATUS_COLOR2 = {
13549
+ PENDING: "#D4AF37",
13550
+ LIVE: "#0ecb81",
13551
+ CLOSED: "#848e9c",
13552
+ CANCELLED: "#f6465d"
13553
+ };
13554
+ var ACTIVITY_PAGE_SIZE_DEFAULT = 10;
13555
+ var formatCurrency4 = (value, opts) => {
13556
+ const min = opts?.minimumFractionDigits ?? 2;
13557
+ const max = opts?.maximumFractionDigits ?? 2;
13558
+ return `$${value.toLocaleString("en-US", { minimumFractionDigits: min, maximumFractionDigits: max })}`;
13559
+ };
13560
+ var formatNumber2 = (value, maximumFractionDigits = 2) => value.toLocaleString("en-US", { minimumFractionDigits: 0, maximumFractionDigits });
13561
+ var formatTimestamp = (unix) => {
13562
+ if (!unix) return "\u2014";
13563
+ let sec;
13564
+ if (unix > 1e18) sec = Math.floor(unix / 1e9);
13565
+ else if (unix > 1e14) sec = Math.floor(unix / 1e6);
13566
+ else if (unix > 1e12) sec = Math.floor(unix / 1e3);
13567
+ else sec = unix;
13568
+ return new Date(sec * 1e3).toLocaleString("en-AU", {
13569
+ day: "2-digit",
13570
+ month: "short",
13571
+ hour: "2-digit",
13572
+ minute: "2-digit",
13573
+ hour12: false
13574
+ });
13575
+ };
13576
+ var formatAddress = (address) => `${address.slice(0, 6)}...${address.slice(-4)}`;
13577
+ var prettyLabel = (value) => value.split("_").map((part) => part.charAt(0) + part.slice(1).toLowerCase()).join(" ");
13578
+ var sideLabel = (side) => side?.toUpperCase() === "SELL" ? "Sell" : "Buy";
13579
+ var getOrderStatusMeta = (statusRaw) => {
13580
+ const status = statusRaw.toUpperCase();
13581
+ if (status === "FILLED" || status === "CONFIRMED" || status === "ALLOCATED") {
13582
+ return { color: "#0ecb81", bg: "rgba(14,203,129,0.1)" };
13583
+ }
13584
+ if (status === "CANCELLED" || status === "CANCELED" || status === "REJECTED") {
13585
+ return { color: "#f6465d", bg: "rgba(246,70,93,0.12)" };
13586
+ }
13587
+ return { color: "#f0b90b", bg: "rgba(240,185,11,0.15)" };
13588
+ };
13589
+ function EditableField({ value, onCommit, format }) {
13590
+ const [editing, setEditing] = React5.useState(false);
13591
+ const [draft, setDraft] = React5.useState("");
13592
+ const inputRef = React5.useRef(null);
13593
+ React5.useEffect(() => {
13594
+ if (editing) inputRef.current?.focus();
13595
+ }, [editing]);
13596
+ const commit = () => {
13597
+ const parsed = parseFloat(draft);
13598
+ if (!isNaN(parsed) && parsed > 0 && parsed !== value) {
13599
+ onCommit(parsed);
13676
13600
  }
13677
13601
  setEditing(false);
13678
13602
  };
@@ -13887,16 +13811,16 @@ function PortfolioActivityPanel({
13887
13811
  /* @__PURE__ */ jsxRuntime.jsx("span", { style: { color: "rgba(255,255,255,0.4)", fontSize: "0.7rem" }, children: pos.tokenName.toUpperCase() })
13888
13812
  ] }) }),
13889
13813
  /* @__PURE__ */ jsxRuntime.jsx(PositionsCell, { children: /* @__PURE__ */ jsxRuntime.jsxs("span", { style: { color: "#fff", fontSize: "0.8rem" }, children: [
13890
- formatCurrency5(currentValue, { minimumFractionDigits: 0, maximumFractionDigits: 0 }),
13814
+ formatCurrency4(currentValue, { minimumFractionDigits: 0, maximumFractionDigits: 0 }),
13891
13815
  " ",
13892
13816
  /* @__PURE__ */ jsxRuntime.jsx("span", { style: { color: "rgba(255,255,255,0.4)", fontSize: "0.7rem" }, children: "USD" })
13893
13817
  ] }) }),
13894
- /* @__PURE__ */ jsxRuntime.jsx(PositionsCell, { children: /* @__PURE__ */ jsxRuntime.jsx("span", { style: { color: "rgba(255,255,255,0.7)", fontSize: "0.8rem" }, children: formatCurrency5(pos.averageEntryPrice) }) }),
13895
- /* @__PURE__ */ jsxRuntime.jsx(PositionsCell, { children: /* @__PURE__ */ jsxRuntime.jsx("span", { style: { color: "#fff", fontSize: "0.8rem" }, children: formatCurrency5(pos.marketPrice) }) }),
13818
+ /* @__PURE__ */ jsxRuntime.jsx(PositionsCell, { children: /* @__PURE__ */ jsxRuntime.jsx("span", { style: { color: "rgba(255,255,255,0.7)", fontSize: "0.8rem" }, children: formatCurrency4(pos.averageEntryPrice) }) }),
13819
+ /* @__PURE__ */ jsxRuntime.jsx(PositionsCell, { children: /* @__PURE__ */ jsxRuntime.jsx("span", { style: { color: "#fff", fontSize: "0.8rem" }, children: formatCurrency4(pos.marketPrice) }) }),
13896
13820
  /* @__PURE__ */ jsxRuntime.jsxs(PositionsCell, { children: [
13897
13821
  /* @__PURE__ */ jsxRuntime.jsxs(PnLAmount, { $positive: isPositive, children: [
13898
13822
  isPositive ? "+" : "-",
13899
- formatCurrency5(Math.abs(pnl))
13823
+ formatCurrency4(Math.abs(pnl))
13900
13824
  ] }),
13901
13825
  /* @__PURE__ */ jsxRuntime.jsxs(PnLPercentage, { $positive: isPositive, children: [
13902
13826
  isPositive ? "+" : "",
@@ -13955,8 +13879,8 @@ function PortfolioActivityPanel({
13955
13879
  return /* @__PURE__ */ jsxRuntime.jsxs(GridRow, { $columns: "1.2fr 0.8fr 1fr 1fr 0.8fr 1fr", children: [
13956
13880
  /* @__PURE__ */ jsxRuntime.jsx(GridCell, { children: /* @__PURE__ */ jsxRuntime.jsx(CellText, { $primary: true, children: order.tokenName }) }),
13957
13881
  /* @__PURE__ */ jsxRuntime.jsx(GridCell, { children: /* @__PURE__ */ jsxRuntime.jsx(CellText, { children: formatNumber2(order.quantity) }) }),
13958
- /* @__PURE__ */ jsxRuntime.jsx(GridCell, { children: /* @__PURE__ */ jsxRuntime.jsx(CellText, { $muted: true, children: formatCurrency5(order.price) }) }),
13959
- /* @__PURE__ */ jsxRuntime.jsx(GridCell, { children: /* @__PURE__ */ jsxRuntime.jsx(CellText, { children: formatCurrency5(order.price * order.quantity) }) }),
13882
+ /* @__PURE__ */ jsxRuntime.jsx(GridCell, { children: /* @__PURE__ */ jsxRuntime.jsx(CellText, { $muted: true, children: formatCurrency4(order.price) }) }),
13883
+ /* @__PURE__ */ jsxRuntime.jsx(GridCell, { children: /* @__PURE__ */ jsxRuntime.jsx(CellText, { children: formatCurrency4(order.price * order.quantity) }) }),
13960
13884
  /* @__PURE__ */ jsxRuntime.jsx(GridCell, { children: /* @__PURE__ */ jsxRuntime.jsx(ActivityTag, { $color: meta.color, $bg: meta.bg, children: prettyLabel(order.status) }) }),
13961
13885
  /* @__PURE__ */ jsxRuntime.jsx(GridCell, { children: /* @__PURE__ */ jsxRuntime.jsx(CellText, { $muted: true, children: formatTimestamp(order.createdAt) }) })
13962
13886
  ] }, `${order.tokenName}-${order.txHash}-${order.createdAt}`);
@@ -13987,7 +13911,7 @@ function PortfolioActivityPanel({
13987
13911
  /* @__PURE__ */ jsxRuntime.jsx(GridCell, { children: /* @__PURE__ */ jsxRuntime.jsx(SideBadge, { $side: sideLabel(order.side), children: sideLabel(order.side) }) }),
13988
13912
  /* @__PURE__ */ jsxRuntime.jsx(GridCell, { children: /* @__PURE__ */ jsxRuntime.jsx(CellText, { $muted: true, children: prettyLabel(order.type) }) }),
13989
13913
  /* @__PURE__ */ jsxRuntime.jsx(GridCell, { children: onAmendOrder ? /* @__PURE__ */ jsxRuntime.jsx(EditableField, { value: order.quantity, format: formatNumber2, onCommit: (v) => onAmendOrder(order.id, { quantity: v }) }) : /* @__PURE__ */ jsxRuntime.jsx(CellText, { children: formatNumber2(order.quantity) }) }),
13990
- /* @__PURE__ */ jsxRuntime.jsx(GridCell, { children: !isMarket && order.price && onAmendOrder ? /* @__PURE__ */ jsxRuntime.jsx(EditableField, { value: order.price, format: (v) => formatCurrency5(v), onCommit: (v) => onAmendOrder(order.id, { price: v }) }) : /* @__PURE__ */ jsxRuntime.jsx(CellText, { children: isMarket || !order.price ? "Market" : formatCurrency5(order.price) }) }),
13914
+ /* @__PURE__ */ jsxRuntime.jsx(GridCell, { children: !isMarket && order.price && onAmendOrder ? /* @__PURE__ */ jsxRuntime.jsx(EditableField, { value: order.price, format: (v) => formatCurrency4(v), onCommit: (v) => onAmendOrder(order.id, { price: v }) }) : /* @__PURE__ */ jsxRuntime.jsx(CellText, { children: isMarket || !order.price ? "Market" : formatCurrency4(order.price) }) }),
13991
13915
  /* @__PURE__ */ jsxRuntime.jsx(GridCell, { children: /* @__PURE__ */ jsxRuntime.jsxs(CellText, { $muted: true, children: [
13992
13916
  filledPercent,
13993
13917
  "%"
@@ -14031,7 +13955,7 @@ function PortfolioActivityPanel({
14031
13955
  /* @__PURE__ */ jsxRuntime.jsx(GridCell, { children: /* @__PURE__ */ jsxRuntime.jsx(SideBadge, { $side: sideLabel(order.side), children: sideLabel(order.side) }) }),
14032
13956
  /* @__PURE__ */ jsxRuntime.jsx(GridCell, { children: /* @__PURE__ */ jsxRuntime.jsx(CellText, { $muted: true, children: prettyLabel(order.type) }) }),
14033
13957
  /* @__PURE__ */ jsxRuntime.jsx(GridCell, { children: /* @__PURE__ */ jsxRuntime.jsx(CellText, { children: formatNumber2(order.quantity) }) }),
14034
- /* @__PURE__ */ jsxRuntime.jsx(GridCell, { children: /* @__PURE__ */ jsxRuntime.jsx(CellText, { children: isMarket || !order.price ? "Market" : formatCurrency5(order.price) }) }),
13958
+ /* @__PURE__ */ jsxRuntime.jsx(GridCell, { children: /* @__PURE__ */ jsxRuntime.jsx(CellText, { children: isMarket || !order.price ? "Market" : formatCurrency4(order.price) }) }),
14035
13959
  /* @__PURE__ */ jsxRuntime.jsx(GridCell, { children: /* @__PURE__ */ jsxRuntime.jsxs(CellText, { $muted: true, children: [
14036
13960
  filledPercent,
14037
13961
  "%"
@@ -14058,9 +13982,9 @@ function PortfolioActivityPanel({
14058
13982
  /* @__PURE__ */ jsxRuntime.jsx(GridCell, { children: /* @__PURE__ */ jsxRuntime.jsx(CellText, { $primary: true, children: trade.tokenName }) }),
14059
13983
  /* @__PURE__ */ jsxRuntime.jsx(GridCell, { children: /* @__PURE__ */ jsxRuntime.jsx(SideBadge, { $side: sideLabel(trade.side), children: sideLabel(trade.side) }) }),
14060
13984
  /* @__PURE__ */ jsxRuntime.jsx(GridCell, { children: /* @__PURE__ */ jsxRuntime.jsx(CellText, { children: formatNumber2(trade.quantity) }) }),
14061
- /* @__PURE__ */ jsxRuntime.jsx(GridCell, { children: /* @__PURE__ */ jsxRuntime.jsx(CellText, { children: formatCurrency5(trade.price) }) }),
14062
- /* @__PURE__ */ jsxRuntime.jsx(GridCell, { children: /* @__PURE__ */ jsxRuntime.jsx(CellText, { children: formatCurrency5(trade.price * trade.quantity) }) }),
14063
- /* @__PURE__ */ jsxRuntime.jsx(GridCell, { children: /* @__PURE__ */ jsxRuntime.jsx(CellText, { $muted: true, children: formatCurrency5(trade.fee) }) }),
13985
+ /* @__PURE__ */ jsxRuntime.jsx(GridCell, { children: /* @__PURE__ */ jsxRuntime.jsx(CellText, { children: formatCurrency4(trade.price) }) }),
13986
+ /* @__PURE__ */ jsxRuntime.jsx(GridCell, { children: /* @__PURE__ */ jsxRuntime.jsx(CellText, { children: formatCurrency4(trade.price * trade.quantity) }) }),
13987
+ /* @__PURE__ */ jsxRuntime.jsx(GridCell, { children: /* @__PURE__ */ jsxRuntime.jsx(CellText, { $muted: true, children: formatCurrency4(trade.fee) }) }),
14064
13988
  /* @__PURE__ */ jsxRuntime.jsx(GridCell, { children: /* @__PURE__ */ jsxRuntime.jsx(CellText, { $muted: true, children: formatTimestamp(trade.executedAt) }) })
14065
13989
  ] }, trade.tradeId))
14066
13990
  ] })
@@ -14082,7 +14006,7 @@ function PortfolioActivityPanel({
14082
14006
  /* @__PURE__ */ jsxRuntime.jsx(GridCell, { children: /* @__PURE__ */ jsxRuntime.jsx(SideBadge, { $side: isDeposit ? "Buy" : "Sell", children: isDeposit ? "Deposit" : "Withdraw" }) }),
14083
14007
  /* @__PURE__ */ jsxRuntime.jsx(GridCell, { children: /* @__PURE__ */ jsxRuntime.jsxs(CellText, { $color: isDeposit ? "#0ecb81" : "#f6465d", children: [
14084
14008
  isDeposit ? "+" : "-",
14085
- formatCurrency5(t.amount)
14009
+ formatCurrency4(t.amount)
14086
14010
  ] }) }),
14087
14011
  /* @__PURE__ */ jsxRuntime.jsx(GridCell, { children: /* @__PURE__ */ jsxRuntime.jsx(CellText, { $muted: true, children: formatAddress(t.address) }) }),
14088
14012
  /* @__PURE__ */ jsxRuntime.jsx(GridCell, { children: /* @__PURE__ */ jsxRuntime.jsx(ActivityTag, { $color: statusMeta.color, $bg: statusMeta.bg, children: prettyLabel(t.status) }) }),
@@ -14642,451 +14566,104 @@ var CloseAllHeaderBtn = styled9__default.default.button`
14642
14566
  border-color: rgba(230, 200, 126, 0.5);
14643
14567
  }
14644
14568
  `;
14645
- var CloseAllOverlay = styled9__default.default.div`
14646
- position: fixed;
14647
- inset: 0;
14648
- background: rgba(0, 0, 0, 0.6);
14649
- display: flex;
14650
- align-items: center;
14651
- justify-content: center;
14652
- z-index: 1000;
14653
- `;
14654
- var CloseAllModal = styled9__default.default.div`
14655
- background: #1a1a1a;
14656
- border: 1px solid rgba(255, 255, 255, 0.12);
14657
- border-radius: 12px;
14658
- padding: 1.5rem;
14659
- max-width: 380px;
14660
- width: 90%;
14661
- position: relative;
14662
- `;
14663
- var CloseAllModalX = styled9__default.default.button`
14664
- position: absolute;
14665
- top: 0.75rem;
14666
- right: 0.75rem;
14667
- background: none;
14668
- border: none;
14669
- color: rgba(255, 255, 255, 0.4);
14670
- font-size: 1.25rem;
14671
- cursor: pointer;
14672
- padding: 0.25rem;
14673
- line-height: 1;
14674
- transition: color 0.15s;
14675
-
14676
- &:hover { color: #fff; }
14677
- `;
14678
- var CloseAllTitle = styled9__default.default.div`
14679
- font-size: 1rem;
14680
- font-weight: 600;
14681
- color: #fff;
14682
- margin-bottom: 0.5rem;
14683
- `;
14684
- var CloseAllDesc = styled9__default.default.div`
14685
- font-size: 0.8rem;
14686
- color: rgba(255, 255, 255, 0.5);
14687
- line-height: 1.45;
14688
- margin-bottom: 1rem;
14689
- `;
14690
- var CloseAllOption = styled9__default.default.div`
14691
- display: flex;
14692
- align-items: center;
14693
- gap: 0.6rem;
14694
- padding: 0.6rem 0.75rem;
14695
- border-radius: 8px;
14696
- cursor: pointer;
14697
- font-size: 0.85rem;
14698
- color: rgba(255, 255, 255, 0.85);
14699
- transition: background 0.15s;
14700
- margin-bottom: 0.35rem;
14701
-
14702
- &:hover { background: rgba(255, 255, 255, 0.04); }
14703
- `;
14704
- var CloseAllRadio = styled9__default.default.div`
14705
- width: 16px;
14706
- height: 16px;
14707
- border-radius: 50%;
14708
- border: 2px solid ${(p) => p.$selected ? "#f6465d" : "rgba(255, 255, 255, 0.2)"};
14709
- position: relative;
14710
- flex-shrink: 0;
14711
- transition: border-color 0.15s;
14712
-
14713
- &::after {
14714
- content: '';
14715
- position: absolute;
14716
- top: 50%;
14717
- left: 50%;
14718
- transform: translate(-50%, -50%);
14719
- width: 8px;
14720
- height: 8px;
14721
- border-radius: 50%;
14722
- background: ${(p) => p.$selected ? "#f6465d" : "transparent"};
14723
- transition: background 0.15s;
14724
- }
14725
- `;
14726
- var CloseAllConfirmBtn = styled9__default.default.button`
14727
- width: 100%;
14728
- margin-top: 0.75rem;
14729
- background: rgba(246, 70, 93, 0.15);
14730
- border: 1px solid rgba(246, 70, 93, 0.4);
14731
- border-radius: 8px;
14732
- padding: 0.7rem 1rem;
14733
- font-size: 0.85rem;
14734
- font-weight: 600;
14735
- color: #f6465d;
14736
- cursor: pointer;
14737
- transition: all 0.15s ease;
14738
-
14739
- &:hover {
14740
- background: rgba(246, 70, 93, 0.25);
14741
- }
14742
- `;
14743
- function NewsOrdersSection({ newsItems, newsConnectionStatus, activityData }) {
14744
- return /* @__PURE__ */ jsxRuntime.jsxs(Row2, { children: [
14745
- /* @__PURE__ */ jsxRuntime.jsx(
14746
- PropertyNewsUpdates,
14747
- {
14748
- items: newsItems,
14749
- heading: "Property News & Updates",
14750
- connectionStatus: newsConnectionStatus
14751
- }
14752
- ),
14753
- /* @__PURE__ */ jsxRuntime.jsx(ActivityWrapper, { children: /* @__PURE__ */ jsxRuntime.jsx(
14754
- PortfolioActivityPanel,
14755
- {
14756
- positions: activityData?.positions,
14757
- showPositionsTab: true,
14758
- onPositionClick: activityData?.onPositionClick,
14759
- offeringOrders: activityData?.offeringOrders,
14760
- openOrders: activityData?.openOrders,
14761
- orderHistory: activityData?.orderHistory,
14762
- tradeHistory: activityData?.tradeHistory,
14763
- transfers: activityData?.transfers,
14764
- onCancelOrder: activityData?.onCancelOrder,
14765
- cancellingOrderId: activityData?.cancellingOrderId,
14766
- defaultTab: activityData?.defaultTab ?? "positions",
14767
- pageSize: activityData?.pageSize ?? 6
14768
- }
14769
- ) })
14770
- ] });
14771
- }
14772
- var Row2 = styled9__default.default.div`
14773
- display: grid;
14774
- grid-template-columns: 1fr 2fr;
14775
- gap: 1.5rem;
14776
- margin-top: 1.5rem;
14777
- max-width: 1800px;
14778
- margin-left: auto;
14779
- margin-right: auto;
14780
- overflow: hidden;
14781
- @media (max-width: 768px) {
14782
- grid-template-columns: 1fr;
14783
- gap: 1rem;
14784
- }
14785
- & > * {
14786
- min-width: 0;
14787
- overflow: hidden;
14788
- }
14789
- `;
14790
- var ActivityWrapper = styled9__default.default.div`
14791
- background-color: var(--color-card-darker, #111);
14792
- border-radius: 8px;
14793
- padding: 1.5rem;
14794
- display: flex;
14795
- flex-direction: column;
14796
- box-shadow: 0 4px 8px rgba(0,0,0,0.2);
14797
- border: 1px solid var(--color-border);
14798
- min-height: 280px;
14799
- overflow: hidden;
14800
- @media (max-width: 768px) {
14801
- padding: 1rem;
14802
- min-height: auto;
14803
- }
14804
- `;
14805
- function OrderConfirmationModal({
14806
- open,
14807
- onClose,
14808
- hasInsufficientFunds,
14809
- tokenQuantity,
14810
- tokenPrice,
14811
- propertyName,
14812
- tokenSymbol,
14813
- estExposure,
14814
- orderTotal,
14815
- availableBalance,
14816
- onConfirm,
14817
- isPlacing = false,
14818
- placingLabel = "Placing order\u2026"
14819
- }) {
14820
- if (!open) return null;
14821
- const handleOverlayClose = () => {
14822
- if (isPlacing) return;
14823
- onClose();
14824
- };
14825
- return /* @__PURE__ */ jsxRuntime.jsx(Overlay3, { onClick: handleOverlayClose, children: /* @__PURE__ */ jsxRuntime.jsxs(Modal, { onClick: (e) => e.stopPropagation(), children: [
14826
- /* @__PURE__ */ jsxRuntime.jsx(ModalHeader, { children: /* @__PURE__ */ jsxRuntime.jsxs("h3", { children: [
14827
- "Confirm Order",
14828
- /* @__PURE__ */ jsxRuntime.jsx(Badge2, { children: "Subscribe" })
14829
- ] }) }),
14830
- /* @__PURE__ */ jsxRuntime.jsx(ModalBody, { children: [
14831
- { label: "Order Type", value: "Primary Offering" },
14832
- { label: "Property", value: propertyName },
14833
- { label: "Units", value: `${tokenQuantity.toLocaleString()} ${tokenSymbol}`, highlight: true },
14834
- {
14835
- label: "Unit Price",
14836
- value: `$${tokenPrice.toLocaleString(void 0, { minimumFractionDigits: 2, maximumFractionDigits: 2 })}`
14837
- },
14838
- { label: "Property Exposure", value: `${estExposure}%` },
14839
- { label: "Total Investment", value: `$${orderTotal.toLocaleString()}`, highlight: true }
14840
- ].map((row, index, arr) => /* @__PURE__ */ jsxRuntime.jsxs(ModalRow, { "data-divider": index < arr.length - 1, children: [
14841
- /* @__PURE__ */ jsxRuntime.jsx("span", { children: row.label }),
14842
- /* @__PURE__ */ jsxRuntime.jsx("strong", { "data-highlight": row.highlight, children: row.value })
14843
- ] }, row.label)) }),
14844
- hasInsufficientFunds ? /* @__PURE__ */ jsxRuntime.jsxs(Warning, { children: [
14845
- /* @__PURE__ */ jsxRuntime.jsx("p", { children: "\u26A0 Insufficient Balance" }),
14846
- /* @__PURE__ */ jsxRuntime.jsxs("small", { children: [
14847
- "You need ",
14848
- /* @__PURE__ */ jsxRuntime.jsxs("strong", { children: [
14849
- "$",
14850
- orderTotal.toLocaleString()
14851
- ] }),
14852
- " but only have",
14853
- " ",
14854
- /* @__PURE__ */ jsxRuntime.jsxs("strong", { children: [
14855
- "$",
14856
- availableBalance.toLocaleString()
14857
- ] }),
14858
- " available."
14859
- ] })
14860
- ] }) : /* @__PURE__ */ jsxRuntime.jsxs(Summary, { children: [
14861
- "Your order for ",
14862
- /* @__PURE__ */ jsxRuntime.jsxs("strong", { children: [
14863
- tokenQuantity.toLocaleString(),
14864
- " ",
14865
- tokenSymbol,
14866
- " units"
14867
- ] }),
14868
- " in the",
14869
- " ",
14870
- /* @__PURE__ */ jsxRuntime.jsx("strong", { children: propertyName }),
14871
- " Primary Offering will be placed for ",
14872
- /* @__PURE__ */ jsxRuntime.jsxs("strong", { children: [
14873
- "$",
14874
- tokenPrice.toFixed(2),
14875
- "/unit"
14876
- ] }),
14877
- "."
14878
- ] }),
14879
- /* @__PURE__ */ jsxRuntime.jsxs(ButtonRow2, { children: [
14880
- /* @__PURE__ */ jsxRuntime.jsx(
14881
- "button",
14882
- {
14883
- type: "button",
14884
- onClick: onClose,
14885
- className: "secondary",
14886
- disabled: isPlacing,
14887
- children: "Cancel"
14888
- }
14889
- ),
14890
- !hasInsufficientFunds && /* @__PURE__ */ jsxRuntime.jsx(
14891
- "button",
14892
- {
14893
- type: "button",
14894
- onClick: onConfirm,
14895
- className: "primary",
14896
- disabled: isPlacing,
14897
- children: isPlacing ? /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
14898
- /* @__PURE__ */ jsxRuntime.jsx(Spinner, { "aria-hidden": true }),
14899
- /* @__PURE__ */ jsxRuntime.jsx("span", { children: placingLabel })
14900
- ] }) : "Place Order"
14901
- }
14902
- )
14903
- ] })
14904
- ] }) });
14905
- }
14906
- var Overlay3 = styled9__default.default.div`
14907
- position: fixed;
14908
- top: 0;
14909
- left: 0;
14910
- right: 0;
14911
- bottom: 0;
14912
- background-color: rgba(0,0,0,0.7);
14569
+ var CloseAllOverlay = styled9__default.default.div`
14570
+ position: fixed;
14571
+ inset: 0;
14572
+ background: rgba(0, 0, 0, 0.6);
14913
14573
  display: flex;
14914
14574
  align-items: center;
14915
14575
  justify-content: center;
14916
- z-index: 10000;
14917
- backdrop-filter: blur(4px);
14576
+ z-index: 1000;
14918
14577
  `;
14919
- var Modal = styled9__default.default.div`
14920
- background: linear-gradient(135deg, rgba(26,29,35,0.95) 0%, rgba(26,29,35,0.98) 100%);
14921
- border: 1px solid rgba(255,255,255,0.1);
14922
- border-radius: 16px;
14923
- padding: 2rem;
14924
- max-width: 480px;
14578
+ var CloseAllModal = styled9__default.default.div`
14579
+ background: #1a1a1a;
14580
+ border: 1px solid rgba(255, 255, 255, 0.12);
14581
+ border-radius: 12px;
14582
+ padding: 1.5rem;
14583
+ max-width: 380px;
14925
14584
  width: 90%;
14926
- box-shadow: 0 20px 60px rgba(0,0,0,0.5);
14585
+ position: relative;
14927
14586
  `;
14928
- var ModalHeader = styled9__default.default.div`
14929
- display: flex;
14930
- align-items: center;
14931
- margin-bottom: 1.5rem;
14932
- padding-bottom: 1rem;
14933
- border-bottom: 1px solid rgba(255,255,255,0.1);
14934
- h3 {
14935
- margin: 0;
14936
- font-size: 1.25rem;
14937
- font-weight: 600;
14938
- color: #fff;
14939
- display: flex;
14940
- align-items: center;
14941
- gap: 0.5rem;
14942
- }
14587
+ var CloseAllModalX = styled9__default.default.button`
14588
+ position: absolute;
14589
+ top: 0.75rem;
14590
+ right: 0.75rem;
14591
+ background: none;
14592
+ border: none;
14593
+ color: rgba(255, 255, 255, 0.4);
14594
+ font-size: 1.25rem;
14595
+ cursor: pointer;
14596
+ padding: 0.25rem;
14597
+ line-height: 1;
14598
+ transition: color 0.15s;
14599
+
14600
+ &:hover { color: #fff; }
14943
14601
  `;
14944
- var Badge2 = styled9__default.default.span`
14945
- padding: 0.25rem 0.75rem;
14946
- border-radius: 6px;
14947
- font-size: 0.75rem;
14602
+ var CloseAllTitle = styled9__default.default.div`
14603
+ font-size: 1rem;
14948
14604
  font-weight: 600;
14949
- text-transform: uppercase;
14950
- letter-spacing: 0.5px;
14951
- background: linear-gradient(135deg, rgba(212,175,55,0.2) 0%, rgba(212,175,55,0.1) 100%);
14952
- color: #D4AF37;
14953
- border: 1px solid rgba(212,175,55,0.3);
14605
+ color: #fff;
14606
+ margin-bottom: 0.5rem;
14954
14607
  `;
14955
- var ModalBody = styled9__default.default.div`
14956
- margin-bottom: 1.5rem;
14957
- display: flex;
14958
- flex-direction: column;
14608
+ var CloseAllDesc = styled9__default.default.div`
14609
+ font-size: 0.8rem;
14610
+ color: rgba(255, 255, 255, 0.5);
14611
+ line-height: 1.45;
14612
+ margin-bottom: 1rem;
14959
14613
  `;
14960
- var ModalRow = styled9__default.default.div`
14614
+ var CloseAllOption = styled9__default.default.div`
14961
14615
  display: flex;
14962
- justify-content: space-between;
14963
14616
  align-items: center;
14964
- padding: 0.75rem 0;
14965
- border-bottom: 1px solid rgba(255,255,255,0.05);
14966
- &[data-divider='false'] {
14967
- border-bottom: none;
14968
- }
14969
- span {
14970
- color: rgba(255,255,255,0.6);
14971
- font-size: 0.9rem;
14972
- }
14973
- strong {
14974
- color: #fff;
14975
- font-weight: 500;
14976
- font-size: 0.95rem;
14977
- }
14978
- strong[data-highlight='true'] {
14979
- color: #D4AF37;
14980
- font-weight: 600;
14981
- }
14982
- `;
14983
- var Warning = styled9__default.default.div`
14984
- background: rgba(246,70,93,0.1);
14985
- border: 1px solid rgba(246,70,93,0.3);
14986
- border-radius: 8px;
14987
- padding: 1rem;
14988
- margin-bottom: 1.5rem;
14989
- p {
14990
- margin: 0;
14991
- color: #f6465d;
14992
- font-size: 0.9rem;
14993
- font-weight: 600;
14994
- }
14995
- small {
14996
- display: block;
14997
- margin-top: 0.5rem;
14998
- color: rgba(255,255,255,0.7);
14999
- font-size: 0.85rem;
15000
- line-height: 1.5;
15001
- }
15002
- `;
15003
- var Summary = styled9__default.default.div`
15004
- background: rgba(255,255,255,0.03);
15005
- border: 1px solid rgba(255,255,255,0.08);
14617
+ gap: 0.6rem;
14618
+ padding: 0.6rem 0.75rem;
15006
14619
  border-radius: 8px;
15007
- padding: 1rem;
15008
- margin-bottom: 1.5rem;
15009
- color: rgba(255,255,255,0.8);
15010
- font-size: 0.9rem;
15011
- line-height: 1.5;
15012
- `;
15013
- var spin = styled9.keyframes`
15014
- to { transform: rotate(360deg); }
14620
+ cursor: pointer;
14621
+ font-size: 0.85rem;
14622
+ color: rgba(255, 255, 255, 0.85);
14623
+ transition: background 0.15s;
14624
+ margin-bottom: 0.35rem;
14625
+
14626
+ &:hover { background: rgba(255, 255, 255, 0.04); }
15015
14627
  `;
15016
- var Spinner = styled9__default.default.span`
15017
- display: inline-block;
15018
- width: 14px;
15019
- height: 14px;
14628
+ var CloseAllRadio = styled9__default.default.div`
14629
+ width: 16px;
14630
+ height: 16px;
15020
14631
  border-radius: 50%;
15021
- border: 2px solid rgba(255, 255, 255, 0.35);
15022
- border-top-color: #fff;
15023
- animation: ${spin} 0.7s linear infinite;
15024
- margin-right: 0.5rem;
15025
- vertical-align: -2px;
15026
- `;
15027
- var ButtonRow2 = styled9__default.default.div`
15028
- display: flex;
15029
- gap: 1rem;
15030
- justify-content: flex-end;
15031
- button {
15032
- padding: 0.75rem 1.5rem;
15033
- border-radius: 8px;
15034
- font-weight: 600;
15035
- font-size: 0.95rem;
15036
- cursor: pointer;
15037
- display: inline-flex;
15038
- align-items: center;
15039
- justify-content: center;
15040
- }
15041
- button:disabled {
15042
- cursor: not-allowed;
15043
- opacity: 0.75;
15044
- }
15045
- .secondary {
15046
- background: rgba(255,255,255,0.1);
15047
- color: rgba(255,255,255,0.8);
15048
- border: 1px solid rgba(255,255,255,0.2);
15049
- }
15050
- .primary {
15051
- background: linear-gradient(135deg, #0ecb81 0%, #0ba968 100%);
15052
- color: #fff;
15053
- border: none;
15054
- box-shadow: 0 4px 12px rgba(14,203,129,0.3);
14632
+ border: 2px solid ${(p) => p.$selected ? "#f6465d" : "rgba(255, 255, 255, 0.2)"};
14633
+ position: relative;
14634
+ flex-shrink: 0;
14635
+ transition: border-color 0.15s;
14636
+
14637
+ &::after {
14638
+ content: '';
14639
+ position: absolute;
14640
+ top: 50%;
14641
+ left: 50%;
14642
+ transform: translate(-50%, -50%);
14643
+ width: 8px;
14644
+ height: 8px;
14645
+ border-radius: 50%;
14646
+ background: ${(p) => p.$selected ? "#f6465d" : "transparent"};
14647
+ transition: background 0.15s;
15055
14648
  }
15056
14649
  `;
14650
+ var CloseAllConfirmBtn = styled9__default.default.button`
14651
+ width: 100%;
14652
+ margin-top: 0.75rem;
14653
+ background: rgba(246, 70, 93, 0.15);
14654
+ border: 1px solid rgba(246, 70, 93, 0.4);
14655
+ border-radius: 8px;
14656
+ padding: 0.7rem 1rem;
14657
+ font-size: 0.85rem;
14658
+ font-weight: 600;
14659
+ color: #f6465d;
14660
+ cursor: pointer;
14661
+ transition: all 0.15s ease;
15057
14662
 
15058
- // src/components/property-buy/constants.ts
15059
- var musgraveGalleryImages = [
15060
- { src: "/properties/Musgrave/ExteriorFront_Musgrave_Loafmarkets.jpg", title: "Exterior Front", subtitle: "Grand entrance" },
15061
- { src: "/properties/Musgrave/ExteriorDusk_Musgrave_Loafmarkets.jpg", title: "Exterior Dusk", subtitle: "Evening ambiance" },
15062
- { src: "/properties/Musgrave/LivingRoom_Musgrave_Loafmarkets.jpg", title: "Living Room", subtitle: "Spacious living" },
15063
- { src: "/properties/Musgrave/Kitchen_Musgrave_Loafmarkets.jpg", title: "Kitchen", subtitle: "Modern design" },
15064
- { src: "/properties/Musgrave/DiningRoom_Musgrave_Loafmarkets.jpg", title: "Dining Room", subtitle: "Elegant dining" },
15065
- { src: "/properties/Musgrave/BreakfastRoom_Musgrave_Loafmarkets.jpg", title: "Breakfast Room", subtitle: "Morning light" },
15066
- { src: "/properties/Musgrave/MainBedroom_Musgrave_Loafmarkets.jpg", title: "Main Bedroom", subtitle: "Master suite" },
15067
- { src: "/properties/Musgrave/GuestBedroom_Musgrave_Loafmarkets.jpg", title: "Guest Bedroom", subtitle: "Comfortable stay" },
15068
- { src: "/properties/Musgrave/Bathroom_Musgrave_Loafmarkets.jpg", title: "Bathroom", subtitle: "Luxury finishes" },
15069
- { src: "/properties/Musgrave/PoolArea_Musgrave_Loafmarkets.jpg", title: "Pool Area", subtitle: "Resort living" },
15070
- { src: "/properties/Musgrave/GardenView_Musgrave_Loafmarkets.jpg", title: "Garden View", subtitle: "Lush gardens" },
15071
- { src: "/properties/Musgrave/SideGarden_Musgrave_Loafmarkets.jpg", title: "Side Garden", subtitle: "Private retreat" },
15072
- { src: "/properties/Musgrave/AerialView_Musgrave_Loafmarkets.jpg", title: "Aerial View", subtitle: "Property overview" },
15073
- { src: "/properties/Musgrave/AerialLocation_Musgrave_Loafmarkets.jpg", title: "Aerial Location", subtitle: "Neighborhood" },
15074
- { src: "/properties/Musgrave/Floorplan_Musgrave_Loafmarkets.jpg", title: "Floorplan", subtitle: "Layout" }
15075
- ];
15076
- var galleryCategories = [
15077
- { name: "Exterior", startIndex: 0 },
15078
- { name: "Living", startIndex: 2 },
15079
- { name: "Bedrooms", startIndex: 6 },
15080
- { name: "Outdoor", startIndex: 9 },
15081
- { name: "Aerial", startIndex: 12 },
15082
- { name: "Floorplan", startIndex: 14 }
15083
- ];
15084
- var STATUS_COLOR2 = {
15085
- PENDING: "#D4AF37",
15086
- LIVE: "#0ecb81",
15087
- CLOSED: "#848e9c",
15088
- CANCELLED: "#f6465d"
15089
- };
14663
+ &:hover {
14664
+ background: rgba(246, 70, 93, 0.25);
14665
+ }
14666
+ `;
15090
14667
  function PropertyBuy({
15091
14668
  propertyName = "Loaf Property",
15092
14669
  propertyLocation: propertyLocationLabel = "Sydney, NSW",
@@ -15133,7 +14710,6 @@ function PropertyBuy({
15133
14710
  const offeringValuation = saleData?.offeringValuation ?? tokenPrice * supplyToSell;
15134
14711
  const ipoStatus = saleData?.status ?? "PENDING";
15135
14712
  const ipoStarted = ipoStatus === "LIVE" || isPrivateClient && ipoStatus === "PENDING";
15136
- const ipoEnded = ipoStatus === "CLOSED" || ipoStatus === "CANCELLED";
15137
14713
  const statusLabel = ipoStatus;
15138
14714
  const statusColor = STATUS_COLOR2[ipoStatus] ?? "#D4AF37";
15139
14715
  const displayStatusLabel = isPrivateClient && ipoStatus !== "LIVE" ? "Private Client Access" : statusLabel;
@@ -15257,17 +14833,23 @@ function PropertyBuy({
15257
14833
  isPrivateClient
15258
14834
  }
15259
14835
  ),
15260
- /* @__PURE__ */ jsxRuntime.jsx(
15261
- VideoActivitySection,
14836
+ /* @__PURE__ */ jsxRuntime.jsx(ActivityWrapper, { children: /* @__PURE__ */ jsxRuntime.jsx(
14837
+ PortfolioActivityPanel,
15262
14838
  {
15263
- ipoStarted,
15264
- ipoEnded,
15265
- isLoading: isLoadingActivity,
15266
- recentOrders,
15267
- ordersAllocated,
15268
- tokenPrice
14839
+ positions: portfolioActivity?.positions,
14840
+ showPositionsTab: true,
14841
+ onPositionClick: portfolioActivity?.onPositionClick,
14842
+ offeringOrders: portfolioActivity?.offeringOrders,
14843
+ openOrders: portfolioActivity?.openOrders,
14844
+ orderHistory: portfolioActivity?.orderHistory,
14845
+ tradeHistory: portfolioActivity?.tradeHistory,
14846
+ transfers: portfolioActivity?.transfers,
14847
+ onCancelOrder: portfolioActivity?.onCancelOrder,
14848
+ cancellingOrderId: portfolioActivity?.cancellingOrderId,
14849
+ defaultTab: "subscriptions",
14850
+ pageSize: 6
15269
14851
  }
15270
- ),
14852
+ ) }),
15271
14853
  /* @__PURE__ */ jsxRuntime.jsxs("div", { style: { display: "flex", flexDirection: "column" }, children: [
15272
14854
  /* @__PURE__ */ jsxRuntime.jsx(
15273
14855
  OrderPanel,
@@ -15307,22 +14889,33 @@ function PropertyBuy({
15307
14889
  purchaseError && /* @__PURE__ */ jsxRuntime.jsx("div", { style: { marginTop: "0.75rem", padding: "0.75rem 1rem", borderRadius: "8px", background: "rgba(246,70,93,0.1)", border: "1px solid rgba(246,70,93,0.3)", color: "#f6465d", fontSize: "0.8rem", fontWeight: 500 }, children: purchaseError })
15308
14890
  ] })
15309
14891
  ] }),
15310
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col gap-6", children: [
14892
+ /* @__PURE__ */ jsxRuntime.jsxs(NewsVideoRow, { children: [
15311
14893
  /* @__PURE__ */ jsxRuntime.jsx(
15312
- GalleryMapSection,
14894
+ PropertyNewsUpdates,
15313
14895
  {
15314
- images: musgraveGalleryImages,
15315
- categories: galleryCategories,
15316
- propertyLocation: propertyLocationLabel,
15317
- tokenName
14896
+ items: newsItems,
14897
+ variant: "home",
14898
+ heading: "Property News & Headlines",
14899
+ connectionStatus: newsConnectionStatus,
14900
+ highlightFirst: false,
14901
+ style: {
14902
+ maxWidth: "none",
14903
+ background: "#111111",
14904
+ borderRadius: "8px",
14905
+ padding: "1.25rem 1.5rem",
14906
+ boxShadow: "0 4px 12px rgba(0,0,0,0.1)",
14907
+ border: "none",
14908
+ height: "100%",
14909
+ overflow: "hidden"
14910
+ }
15318
14911
  }
15319
14912
  ),
15320
14913
  /* @__PURE__ */ jsxRuntime.jsx(
15321
- NewsOrdersSection,
14914
+ PropertyTour,
15322
14915
  {
15323
- newsItems,
15324
- newsConnectionStatus,
15325
- activityData: portfolioActivity
14916
+ title: propertyName,
14917
+ src: "/properties/Musgrave/musgrave.mp4",
14918
+ className: "h-full !max-w-none"
15326
14919
  }
15327
14920
  )
15328
14921
  ] }),
@@ -15415,6 +15008,41 @@ var HeroGrid = styled9__default.default.div`
15415
15008
  gap: 0.5rem;
15416
15009
  }
15417
15010
  `;
15011
+ var ActivityWrapper = styled9__default.default.div`
15012
+ background-color: var(--color-card-darker, #111);
15013
+ border-radius: 8px;
15014
+ padding: 1.5rem;
15015
+ display: flex;
15016
+ flex-direction: column;
15017
+ box-shadow: 0 4px 8px rgba(0,0,0,0.2);
15018
+ border: 1px solid var(--color-border);
15019
+ min-height: 280px;
15020
+ overflow: hidden;
15021
+ @media (max-width: 768px) {
15022
+ padding: 1rem;
15023
+ min-height: auto;
15024
+ }
15025
+ `;
15026
+ var NewsVideoRow = styled9__default.default.div`
15027
+ display: grid;
15028
+ grid-template-columns: minmax(380px, 520px) minmax(0, 1fr);
15029
+ gap: 1.5rem;
15030
+ margin-top: 1.5rem;
15031
+ max-width: 1800px;
15032
+ margin-left: auto;
15033
+ margin-right: auto;
15034
+ height: 700px;
15035
+ overflow: hidden;
15036
+ @media (max-width: 1024px) {
15037
+ grid-template-columns: 1fr;
15038
+ height: auto;
15039
+ gap: 1rem;
15040
+ }
15041
+ & > * {
15042
+ min-width: 0;
15043
+ overflow: hidden;
15044
+ }
15045
+ `;
15418
15046
  var PaymentOption = styled9__default.default.div`
15419
15047
  display: flex;
15420
15048
  align-items: center;
@@ -16404,7 +16032,7 @@ function PropertyValuation({
16404
16032
  /* @__PURE__ */ jsxRuntime.jsxs("div", { style: { display: "flex", flexDirection: "column", gap: "0.5rem" }, children: [
16405
16033
  /* @__PURE__ */ jsxRuntime.jsxs(PricingModelDetail, { children: [
16406
16034
  /* @__PURE__ */ jsxRuntime.jsx(PropertyDetailLabel, { children: "Last Price" }),
16407
- /* @__PURE__ */ jsxRuntime.jsx(PricingDetailValue, { children: formatCurrency6(lastPrice) })
16035
+ /* @__PURE__ */ jsxRuntime.jsx(PricingDetailValue, { children: formatCurrency5(lastPrice) })
16408
16036
  ] }),
16409
16037
  /* @__PURE__ */ jsxRuntime.jsxs(PricingModelDetail, { children: [
16410
16038
  /* @__PURE__ */ jsxRuntime.jsxs("div", { style: { display: "flex", justifyContent: "space-between", alignItems: "center", width: "100%" }, children: [
@@ -16415,11 +16043,11 @@ function PropertyValuation({
16415
16043
  ] })
16416
16044
  ] }),
16417
16045
  /* @__PURE__ */ jsxRuntime.jsxs(PricingDetailValue, { style: { color: "var(--color-accent)", fontWeight: "bold" }, children: [
16418
- formatCurrency6(fairValue),
16046
+ formatCurrency5(fairValue),
16419
16047
  " ",
16420
16048
  /* @__PURE__ */ jsxRuntime.jsxs("span", { style: { fontSize: "0.85em", fontWeight: "normal", opacity: 0.8 }, children: [
16421
16049
  "(",
16422
- formatCurrency6(fairValue * tokensOutstanding, { maximumFractionDigits: 0 }),
16050
+ formatCurrency5(fairValue * tokensOutstanding, { maximumFractionDigits: 0 }),
16423
16051
  ")"
16424
16052
  ] })
16425
16053
  ] })
@@ -16436,7 +16064,7 @@ function PropertyValuation({
16436
16064
  /* @__PURE__ */ jsxRuntime.jsx(GaugeIndicator, { type: "fairValue", position: 50 }),
16437
16065
  /* @__PURE__ */ jsxRuntime.jsxs(GaugePriceTag, { position: gaugePosition, children: [
16438
16066
  /* @__PURE__ */ jsxRuntime.jsx("span", { children: "Last Price" }),
16439
- /* @__PURE__ */ jsxRuntime.jsx("span", { children: formatCurrency6(lastPrice) })
16067
+ /* @__PURE__ */ jsxRuntime.jsx("span", { children: formatCurrency5(lastPrice) })
16440
16068
  ] }),
16441
16069
  /* @__PURE__ */ jsxRuntime.jsx(GaugeIndicator, { type: "lastPrice", position: gaugePosition })
16442
16070
  ] }),
@@ -16444,7 +16072,7 @@ function PropertyValuation({
16444
16072
  /* @__PURE__ */ jsxRuntime.jsx(ValuationItem, { children: /* @__PURE__ */ jsxRuntime.jsxs(ValuationValue, { style: { color: "#4CAF50" }, children: [
16445
16073
  /* @__PURE__ */ jsxRuntime.jsxs("span", { children: [
16446
16074
  "< ",
16447
- formatCurrency6(undervaluedThreshold)
16075
+ formatCurrency5(undervaluedThreshold)
16448
16076
  ] }),
16449
16077
  /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "valuation-amount-span", style: { fontSize: "0.8rem", fontWeight: "normal" }, children: [
16450
16078
  "(",
@@ -16453,7 +16081,7 @@ function PropertyValuation({
16453
16081
  ] })
16454
16082
  ] }) }),
16455
16083
  /* @__PURE__ */ jsxRuntime.jsx(ValuationItem, { children: /* @__PURE__ */ jsxRuntime.jsxs(ValuationValue, { style: { color: "var(--color-accent)" }, children: [
16456
- /* @__PURE__ */ jsxRuntime.jsx("span", { children: formatCurrency6(fairValue) }),
16084
+ /* @__PURE__ */ jsxRuntime.jsx("span", { children: formatCurrency5(fairValue) }),
16457
16085
  /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "valuation-amount-span", style: { fontSize: "0.8rem", fontWeight: "normal" }, children: [
16458
16086
  "(",
16459
16087
  formatMillions(fairValue * tokensOutstanding),
@@ -16463,7 +16091,7 @@ function PropertyValuation({
16463
16091
  /* @__PURE__ */ jsxRuntime.jsx(ValuationItem, { children: /* @__PURE__ */ jsxRuntime.jsxs(ValuationValue, { style: { color: "#F44336" }, children: [
16464
16092
  /* @__PURE__ */ jsxRuntime.jsxs("span", { children: [
16465
16093
  "> ",
16466
- formatCurrency6(overvaluedThreshold)
16094
+ formatCurrency5(overvaluedThreshold)
16467
16095
  ] }),
16468
16096
  /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "valuation-amount-span", style: { fontSize: "0.8rem", fontWeight: "normal" }, children: [
16469
16097
  "(",
@@ -16556,7 +16184,7 @@ function PropertyValuation({
16556
16184
  /* @__PURE__ */ jsxRuntime.jsx(GaugeIndicator, { type: "fairValue", position: 50 }),
16557
16185
  /* @__PURE__ */ jsxRuntime.jsxs(GaugePriceTag, { position: gaugePosition, children: [
16558
16186
  /* @__PURE__ */ jsxRuntime.jsx("span", { children: "Last Price" }),
16559
- /* @__PURE__ */ jsxRuntime.jsx("span", { children: formatCurrency6(lastPrice) })
16187
+ /* @__PURE__ */ jsxRuntime.jsx("span", { children: formatCurrency5(lastPrice) })
16560
16188
  ] }),
16561
16189
  /* @__PURE__ */ jsxRuntime.jsx(GaugeIndicator, { type: "lastPrice", position: gaugePosition })
16562
16190
  ] }),
@@ -16564,7 +16192,7 @@ function PropertyValuation({
16564
16192
  /* @__PURE__ */ jsxRuntime.jsx(ValuationItem, { children: /* @__PURE__ */ jsxRuntime.jsxs(ValuationValue, { style: { color: "#0ecb81" }, children: [
16565
16193
  /* @__PURE__ */ jsxRuntime.jsxs("span", { children: [
16566
16194
  "< ",
16567
- formatCurrency6(undervaluedThreshold)
16195
+ formatCurrency5(undervaluedThreshold)
16568
16196
  ] }),
16569
16197
  /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "valuation-amount-span", style: { fontSize: "0.8rem", fontWeight: "normal" }, children: [
16570
16198
  "(",
@@ -16573,7 +16201,7 @@ function PropertyValuation({
16573
16201
  ] })
16574
16202
  ] }) }),
16575
16203
  /* @__PURE__ */ jsxRuntime.jsx(ValuationItem, { children: /* @__PURE__ */ jsxRuntime.jsxs(ValuationValue, { style: { color: "#f0b90b" }, children: [
16576
- /* @__PURE__ */ jsxRuntime.jsx("span", { children: formatCurrency6(fairValue) }),
16204
+ /* @__PURE__ */ jsxRuntime.jsx("span", { children: formatCurrency5(fairValue) }),
16577
16205
  /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "valuation-amount-span", style: { fontSize: "0.8rem", fontWeight: "normal" }, children: [
16578
16206
  "(",
16579
16207
  formatMillions(fairValue * tokensOutstanding),
@@ -16583,7 +16211,7 @@ function PropertyValuation({
16583
16211
  /* @__PURE__ */ jsxRuntime.jsx(ValuationItem, { children: /* @__PURE__ */ jsxRuntime.jsxs(ValuationValue, { style: { color: "#f6465d" }, children: [
16584
16212
  /* @__PURE__ */ jsxRuntime.jsxs("span", { children: [
16585
16213
  "> ",
16586
- formatCurrency6(overvaluedThreshold)
16214
+ formatCurrency5(overvaluedThreshold)
16587
16215
  ] }),
16588
16216
  /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "valuation-amount-span", style: { fontSize: "0.8rem", fontWeight: "normal" }, children: [
16589
16217
  "(",
@@ -16626,7 +16254,7 @@ function PropertyValuation({
16626
16254
  /* @__PURE__ */ jsxRuntime.jsxs(SalePriceBar, { children: [
16627
16255
  /* @__PURE__ */ jsxRuntime.jsxs(SalePriceLeft, { children: [
16628
16256
  /* @__PURE__ */ jsxRuntime.jsx(SalePriceLabel, { children: "Sale Price" }),
16629
- /* @__PURE__ */ jsxRuntime.jsx(SalePriceAmount, { children: formatCurrency6(sale.price) })
16257
+ /* @__PURE__ */ jsxRuntime.jsx(SalePriceAmount, { children: formatCurrency5(sale.price) })
16630
16258
  ] }),
16631
16259
  /* @__PURE__ */ jsxRuntime.jsx(SaleDate, { children: sale.saleDate ?? "\u2014" })
16632
16260
  ] }),
@@ -16653,7 +16281,7 @@ function PropertyValuation({
16653
16281
  error ? /* @__PURE__ */ jsxRuntime.jsx(ErrorMessage, { children: error }) : null
16654
16282
  ] });
16655
16283
  }
16656
- function formatCurrency6(value, options) {
16284
+ function formatCurrency5(value, options) {
16657
16285
  if (value == null || Number.isNaN(value)) {
16658
16286
  return "\u2014";
16659
16287
  }
@@ -16727,7 +16355,7 @@ function buildAxisLabels(min, max) {
16727
16355
  for (let i = 0; i < steps; i += 1) {
16728
16356
  const ratio = i / (steps - 1);
16729
16357
  const value = max - ratio * (max - min);
16730
- labels.push(formatCurrency6(value, { maximumFractionDigits: 0, minimumFractionDigits: 0 }));
16358
+ labels.push(formatCurrency5(value, { maximumFractionDigits: 0, minimumFractionDigits: 0 }));
16731
16359
  }
16732
16360
  return labels;
16733
16361
  }