@loafmarkets/ui 0.1.404 → 0.1.405
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.mts +3 -10
- package/dist/index.d.ts +3 -10
- package/dist/index.js +79 -155
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +79 -155
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
package/dist/index.mjs
CHANGED
|
@@ -5076,7 +5076,6 @@ var Header = ({
|
|
|
5076
5076
|
onOrdersNavigate: _onOrdersNavigate,
|
|
5077
5077
|
onWalletNavigate: _onWalletNavigate,
|
|
5078
5078
|
onSettingsClick,
|
|
5079
|
-
onReferClick,
|
|
5080
5079
|
portfolioSummary,
|
|
5081
5080
|
fundsPending = false,
|
|
5082
5081
|
transparentOnTop = false,
|
|
@@ -5515,7 +5514,7 @@ var Header = ({
|
|
|
5515
5514
|
onClick: (event) => {
|
|
5516
5515
|
event?.preventDefault();
|
|
5517
5516
|
closeMenus();
|
|
5518
|
-
|
|
5517
|
+
onSettingsClick?.();
|
|
5519
5518
|
},
|
|
5520
5519
|
children: "Refer"
|
|
5521
5520
|
}
|
|
@@ -5558,7 +5557,7 @@ var Header = ({
|
|
|
5558
5557
|
onClick: (event) => {
|
|
5559
5558
|
event?.preventDefault();
|
|
5560
5559
|
closeMenus();
|
|
5561
|
-
|
|
5560
|
+
onSettingsClick?.();
|
|
5562
5561
|
},
|
|
5563
5562
|
children: /* @__PURE__ */ jsx(MenuItem, { children: "Refer" })
|
|
5564
5563
|
}
|
|
@@ -7551,7 +7550,6 @@ var LoginPopup = ({
|
|
|
7551
7550
|
] })
|
|
7552
7551
|
] });
|
|
7553
7552
|
if (gate) {
|
|
7554
|
-
const codeAccepted = codeStatus === "valid";
|
|
7555
7553
|
const showSignIn = signInMode || signInRevealed;
|
|
7556
7554
|
return /* @__PURE__ */ jsxs(GateShell, { children: [
|
|
7557
7555
|
/* @__PURE__ */ jsx(GateTint, { $reveal: showSignIn ? 1 : 0 }),
|
|
@@ -7577,35 +7575,30 @@ var LoginPopup = ({
|
|
|
7577
7575
|
] }) : /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
7578
7576
|
/* @__PURE__ */ jsxs(CodeInputWrapper, { $status: codeStatus, children: [
|
|
7579
7577
|
/* @__PURE__ */ jsx(CodePrefix, { children: CODE_PREFIX }),
|
|
7580
|
-
codeInput
|
|
7581
|
-
/* @__PURE__ */ jsx(
|
|
7582
|
-
GateSubmit,
|
|
7583
|
-
{
|
|
7584
|
-
type: "button",
|
|
7585
|
-
"aria-label": "Submit access code",
|
|
7586
|
-
$status: codeStatus,
|
|
7587
|
-
disabled: codeStatus === "checking" || !codeComplete,
|
|
7588
|
-
onClick: () => void runCodeValidation(referralCode),
|
|
7589
|
-
children: codeAccepted ? /* @__PURE__ */ jsx("svg", { width: "22", height: "22", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2.4", strokeLinecap: "round", strokeLinejoin: "round", children: /* @__PURE__ */ jsx("path", { d: "M20 6L9 17l-5-5" }) }) : codeStatus === "checking" ? /* @__PURE__ */ jsx(GateSpinner, {}) : /* @__PURE__ */ jsx("svg", { width: "22", height: "22", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2.2", strokeLinecap: "round", strokeLinejoin: "round", children: /* @__PURE__ */ jsx("path", { d: "M5 12h14M13 6l6 6-6 6" }) })
|
|
7590
|
-
}
|
|
7591
|
-
)
|
|
7578
|
+
codeInput
|
|
7592
7579
|
] }),
|
|
7593
7580
|
(codeStatus === "invalid" || error && !signInRevealed) && /* @__PURE__ */ jsx(StatusMessage, { $error: true, children: error || "That code isn't valid. Double-check and try again." }),
|
|
7594
|
-
signInRevealed ? signInStep : /* @__PURE__ */ jsxs(
|
|
7595
|
-
|
|
7596
|
-
|
|
7597
|
-
|
|
7598
|
-
|
|
7599
|
-
|
|
7600
|
-
|
|
7601
|
-
|
|
7602
|
-
|
|
7603
|
-
|
|
7604
|
-
|
|
7605
|
-
|
|
7606
|
-
|
|
7607
|
-
|
|
7608
|
-
|
|
7581
|
+
signInRevealed ? signInStep : /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
7582
|
+
/* @__PURE__ */ jsxs(GateResendText, { children: [
|
|
7583
|
+
"Already have an account?",
|
|
7584
|
+
" ",
|
|
7585
|
+
/* @__PURE__ */ jsx(
|
|
7586
|
+
"button",
|
|
7587
|
+
{
|
|
7588
|
+
type: "button",
|
|
7589
|
+
onClick: () => {
|
|
7590
|
+
setError("");
|
|
7591
|
+
setIsSignUp(false);
|
|
7592
|
+
setSignInMode(true);
|
|
7593
|
+
},
|
|
7594
|
+
children: "Sign in"
|
|
7595
|
+
}
|
|
7596
|
+
)
|
|
7597
|
+
] }),
|
|
7598
|
+
/* @__PURE__ */ jsxs(GateEarlyAccess, { href: "https://loafmarkets.com/?waitlist=1", children: [
|
|
7599
|
+
"Signup for early access",
|
|
7600
|
+
/* @__PURE__ */ jsx("svg", { viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2.2", strokeLinecap: "round", strokeLinejoin: "round", children: /* @__PURE__ */ jsx("path", { d: "M5 12h14M13 6l6 6-6 6" }) })
|
|
7601
|
+
] })
|
|
7609
7602
|
] })
|
|
7610
7603
|
] })
|
|
7611
7604
|
] })
|
|
@@ -7682,12 +7675,12 @@ var LoginPopup = ({
|
|
|
7682
7675
|
marginBottom: "1.25rem"
|
|
7683
7676
|
}, children: [
|
|
7684
7677
|
/* @__PURE__ */ jsx("div", { style: { width: 7, height: 7, borderRadius: "50%", background: "#0052FF", flexShrink: 0 } }),
|
|
7685
|
-
/* @__PURE__ */ jsx("span", { style: { fontSize: "0.72rem", fontWeight: 600, color: "#6b9fff", letterSpacing: "0.02em" }, children: "
|
|
7678
|
+
/* @__PURE__ */ jsx("span", { style: { fontSize: "0.72rem", fontWeight: 600, color: "#6b9fff", letterSpacing: "0.02em" }, children: "Base Sepolia" })
|
|
7686
7679
|
] }),
|
|
7687
7680
|
/* @__PURE__ */ jsxs("p", { style: { fontSize: "0.82rem", color: "rgba(255,255,255,0.5)", textAlign: "center", marginBottom: "1.1rem", lineHeight: 1.5, maxWidth: 320 }, children: [
|
|
7688
7681
|
"Send ",
|
|
7689
7682
|
/* @__PURE__ */ jsx("strong", { style: { color: "rgba(255,255,255,0.8)" }, children: "USDC" }),
|
|
7690
|
-
" on
|
|
7683
|
+
" on Base Sepolia to the address below. Only send on this network."
|
|
7691
7684
|
] }),
|
|
7692
7685
|
/* @__PURE__ */ jsxs("div", { style: {
|
|
7693
7686
|
width: "100%",
|
|
@@ -8228,6 +8221,33 @@ var GateResendText = styled10.p`
|
|
|
8228
8221
|
font-size: inherit;
|
|
8229
8222
|
}
|
|
8230
8223
|
`;
|
|
8224
|
+
var GateEarlyAccess = styled10.a`
|
|
8225
|
+
display: inline-flex;
|
|
8226
|
+
align-items: center;
|
|
8227
|
+
gap: 0.4rem;
|
|
8228
|
+
margin-top: 0.15rem;
|
|
8229
|
+
color: var(--color-text-secondary, #848e9c);
|
|
8230
|
+
font-size: 0.8rem;
|
|
8231
|
+
font-weight: 500;
|
|
8232
|
+
letter-spacing: 0.02em;
|
|
8233
|
+
text-decoration: none;
|
|
8234
|
+
cursor: pointer;
|
|
8235
|
+
transition: color 0.15s ease;
|
|
8236
|
+
|
|
8237
|
+
svg {
|
|
8238
|
+
width: 13px;
|
|
8239
|
+
height: 13px;
|
|
8240
|
+
transition: transform 0.15s ease;
|
|
8241
|
+
}
|
|
8242
|
+
|
|
8243
|
+
&:hover {
|
|
8244
|
+
color: var(--color-accent, #E6C87E);
|
|
8245
|
+
}
|
|
8246
|
+
|
|
8247
|
+
&:hover svg {
|
|
8248
|
+
transform: translateX(3px);
|
|
8249
|
+
}
|
|
8250
|
+
`;
|
|
8231
8251
|
var GateSubmit = styled10.button`
|
|
8232
8252
|
display: flex;
|
|
8233
8253
|
align-items: center;
|
|
@@ -10305,7 +10325,7 @@ function PropertyOverview({
|
|
|
10305
10325
|
isLoading = false,
|
|
10306
10326
|
ticker,
|
|
10307
10327
|
contractAddress,
|
|
10308
|
-
chain = "
|
|
10328
|
+
chain = "Base (Ethereum L2)",
|
|
10309
10329
|
volume24h,
|
|
10310
10330
|
priceHistory: priceHistoryProp,
|
|
10311
10331
|
beta = false,
|
|
@@ -10344,13 +10364,13 @@ function PropertyOverview({
|
|
|
10344
10364
|
const resolvedPropertyType = rawPropertyType?.toLowerCase() === "house" ? "Residential" : rawPropertyType;
|
|
10345
10365
|
const galleryImages = images ?? [];
|
|
10346
10366
|
const chainValue = /* @__PURE__ */ jsxs(ChainLogos, { children: [
|
|
10347
|
-
/* @__PURE__ */ jsx(ChainLogoImg, { src: "/
|
|
10367
|
+
/* @__PURE__ */ jsx(ChainLogoImg, { src: "/Base-Symbol.png", alt: "Base" }),
|
|
10348
10368
|
/* @__PURE__ */ jsx(ChainLogoImg, { src: "/Ethereum-Logo.png", alt: "Ethereum", style: { filter: "brightness(0) invert(1)" } }),
|
|
10349
10369
|
/* @__PURE__ */ jsx("span", { children: chain })
|
|
10350
10370
|
] });
|
|
10351
10371
|
const tokenDetailsItems = [
|
|
10352
10372
|
{ label: "Chain", value: chainValue },
|
|
10353
|
-
{ label: "On-Chain Address", value: contractAddress ? truncateAddress(contractAddress) : "\u2014", mono: true, link: contractAddress ? `https://sepolia.
|
|
10373
|
+
{ label: "On-Chain Address", value: contractAddress ? truncateAddress(contractAddress) : "\u2014", mono: true, link: contractAddress ? `https://sepolia.basescan.org/address/${contractAddress}` : void 0, copyValue: contractAddress },
|
|
10354
10374
|
{ label: "Token Ticker", value: ticker ?? "\u2014" },
|
|
10355
10375
|
{ label: "Total Circulating Tokens", value: isLoading && resolvedTokensIssued == null ? loadingSkeleton : resolvedTokensIssued?.toLocaleString() ?? "\u2014" },
|
|
10356
10376
|
{ label: "Legal Structuring", value: "See Documents", docLink: true },
|
|
@@ -10370,9 +10390,7 @@ function PropertyOverview({
|
|
|
10370
10390
|
];
|
|
10371
10391
|
const growthPct = overviewData?.growth5Yr;
|
|
10372
10392
|
const propertyStats = [
|
|
10373
|
-
|
|
10374
|
-
// midPrice×tokensIssued market cap (fixed 2026-07-22). null → '—', never a fabricated cap.
|
|
10375
|
-
{ label: "Property Value", value: isLoading && overviewData?.offeringValuation == null ? loadingSkeleton : overviewData?.offeringValuation ? fmtDollar(overviewData.offeringValuation) : "\u2014" },
|
|
10393
|
+
{ label: "Property Value", value: isLoading && tokenMarketCap == null ? loadingSkeleton : tokenMarketCap ? fmtDollar(tokenMarketCap) : "\u2014" },
|
|
10376
10394
|
...beta ? [] : [{ label: "Offers", value: "3" }],
|
|
10377
10395
|
{ label: "Growth (5yr)", value: growthPct != null ? `${growthPct > 0 ? "+" : ""}${growthPct}%` : "\u2014" },
|
|
10378
10396
|
{ label: "Last Dividend", value: overviewData?.lastDividend != null ? `$${overviewData.lastDividend.toFixed(2)}` : "\u2014" },
|
|
@@ -14873,7 +14891,7 @@ var getOrderStatusMeta = (statusRaw) => {
|
|
|
14873
14891
|
return { color: "#E6C87E", bg: "rgba(240,185,11,0.15)" };
|
|
14874
14892
|
};
|
|
14875
14893
|
var ChevronDown = () => /* @__PURE__ */ jsx("svg", { width: "14", height: "14", viewBox: "0 0 24 24", fill: "none", stroke: "rgba(255,255,255,0.5)", strokeWidth: "2.5", strokeLinecap: "round", strokeLinejoin: "round", children: /* @__PURE__ */ jsx("polyline", { points: "6 9 12 15 18 9" }) });
|
|
14876
|
-
var
|
|
14894
|
+
var BaseScanIconLink = ({ url }) => /* @__PURE__ */ jsx(TxLink, { href: url, target: "_blank", rel: "noopener noreferrer", title: "View on BaseScan", onClick: (e) => e.stopPropagation(), children: /* @__PURE__ */ jsxs("svg", { width: "13", height: "13", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", children: [
|
|
14877
14895
|
/* @__PURE__ */ jsx("path", { d: "M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6" }),
|
|
14878
14896
|
/* @__PURE__ */ jsx("polyline", { points: "15 3 21 3 21 9" }),
|
|
14879
14897
|
/* @__PURE__ */ jsx("line", { x1: "10", y1: "14", x2: "21", y2: "3" })
|
|
@@ -14898,7 +14916,7 @@ function PortfolioActivityPanel({
|
|
|
14898
14916
|
defaultTab,
|
|
14899
14917
|
onTabChange,
|
|
14900
14918
|
pageSize = ACTIVITY_PAGE_SIZE_DEFAULT,
|
|
14901
|
-
blockExplorerBaseUrl: _blockExplorerBaseUrl = "https://sepolia.
|
|
14919
|
+
blockExplorerBaseUrl: _blockExplorerBaseUrl = "https://sepolia.basescan.org/tx",
|
|
14902
14920
|
className,
|
|
14903
14921
|
style
|
|
14904
14922
|
}) {
|
|
@@ -15342,7 +15360,7 @@ function PortfolioActivityPanel({
|
|
|
15342
15360
|
/* @__PURE__ */ jsxs("span", { style: { display: "inline-flex", alignItems: "center", gap: "0.35rem" }, children: [
|
|
15343
15361
|
formatNumber2(order.quantity),
|
|
15344
15362
|
order.ticker && /* @__PURE__ */ jsx(TickerTag, { style: { marginLeft: 0 }, children: order.ticker.toUpperCase() }),
|
|
15345
|
-
order.txHash && /* @__PURE__ */ jsx(
|
|
15363
|
+
order.txHash && /* @__PURE__ */ jsx(BaseScanIconLink, { url: `${_blockExplorerBaseUrl}/${order.txHash}` })
|
|
15346
15364
|
] })
|
|
15347
15365
|
] }),
|
|
15348
15366
|
/* @__PURE__ */ jsxs(CUnitsCell, { children: [
|
|
@@ -15395,7 +15413,7 @@ function PortfolioActivityPanel({
|
|
|
15395
15413
|
order.status === "REJECTED" && order.rejectionReason && /* @__PURE__ */ jsx(CellText, { $muted: true, style: { fontSize: "0.62rem", marginTop: "0.2rem", maxWidth: "120px", overflow: "hidden", textOverflow: "ellipsis", whiteSpace: "nowrap" }, title: order.rejectionReason, children: order.rejectionReason })
|
|
15396
15414
|
] }),
|
|
15397
15415
|
/* @__PURE__ */ jsx(GridCell, { children: /* @__PURE__ */ jsx(CellText, { $muted: true, children: formatTimestamp(order.createdAt) }) }),
|
|
15398
|
-
/* @__PURE__ */ jsx(GridCell, { children: order.txHash && /* @__PURE__ */ jsx(TxLink, { href: `${_blockExplorerBaseUrl}/${order.txHash}`, target: "_blank", rel: "noopener noreferrer", title: "View on
|
|
15416
|
+
/* @__PURE__ */ jsx(GridCell, { children: order.txHash && /* @__PURE__ */ jsx(TxLink, { href: `${_blockExplorerBaseUrl}/${order.txHash}`, target: "_blank", rel: "noopener noreferrer", title: "View on BaseScan", children: /* @__PURE__ */ jsxs("svg", { width: "15", height: "15", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", children: [
|
|
15399
15417
|
/* @__PURE__ */ jsx("path", { d: "M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6" }),
|
|
15400
15418
|
/* @__PURE__ */ jsx("polyline", { points: "15 3 21 3 21 9" }),
|
|
15401
15419
|
/* @__PURE__ */ jsx("line", { x1: "10", y1: "14", x2: "21", y2: "3" })
|
|
@@ -15639,7 +15657,7 @@ function PortfolioActivityPanel({
|
|
|
15639
15657
|
/* @__PURE__ */ jsxs("span", { style: { display: "inline-flex", alignItems: "center", gap: "0.35rem" }, children: [
|
|
15640
15658
|
formatNumber2(trade.quantity),
|
|
15641
15659
|
trade.ticker && /* @__PURE__ */ jsx(TickerTag, { style: { marginLeft: 0 }, children: trade.ticker.toUpperCase() }),
|
|
15642
|
-
trade.txHash && /* @__PURE__ */ jsx(
|
|
15660
|
+
trade.txHash && /* @__PURE__ */ jsx(BaseScanIconLink, { url: `${_blockExplorerBaseUrl}/${trade.txHash}` })
|
|
15643
15661
|
] })
|
|
15644
15662
|
] }),
|
|
15645
15663
|
/* @__PURE__ */ jsxs(CUnitsCell, { children: [
|
|
@@ -15706,7 +15724,7 @@ function PortfolioActivityPanel({
|
|
|
15706
15724
|
/* @__PURE__ */ jsx(GridCell, { children: /* @__PURE__ */ jsx(CellText, { children: formatCurrency4(trade.price * trade.quantity) }) }),
|
|
15707
15725
|
/* @__PURE__ */ jsx(GridCell, { children: settlementMeta ? /* @__PURE__ */ jsx(ActivityTag, { $color: settlementMeta.color, $bg: settlementMeta.bg, children: settlementLabel }) : /* @__PURE__ */ jsx(CellText, { $muted: true, children: "\u2014" }) }),
|
|
15708
15726
|
/* @__PURE__ */ jsx(GridCell, { children: /* @__PURE__ */ jsx(CellText, { $muted: true, children: formatTimestamp(trade.executedAt) }) }),
|
|
15709
|
-
/* @__PURE__ */ jsx(GridCell, { children: trade.txHash && /* @__PURE__ */ jsx(TxLink, { href: `${_blockExplorerBaseUrl}/${trade.txHash}`, target: "_blank", rel: "noopener noreferrer", title: "View on
|
|
15727
|
+
/* @__PURE__ */ jsx(GridCell, { children: trade.txHash && /* @__PURE__ */ jsx(TxLink, { href: `${_blockExplorerBaseUrl}/${trade.txHash}`, target: "_blank", rel: "noopener noreferrer", title: "View on BaseScan", children: /* @__PURE__ */ jsxs("svg", { width: "15", height: "15", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", children: [
|
|
15710
15728
|
/* @__PURE__ */ jsx("path", { d: "M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6" }),
|
|
15711
15729
|
/* @__PURE__ */ jsx("polyline", { points: "15 3 21 3 21 9" }),
|
|
15712
15730
|
/* @__PURE__ */ jsx("line", { x1: "10", y1: "14", x2: "21", y2: "3" })
|
|
@@ -15753,7 +15771,7 @@ function PortfolioActivityPanel({
|
|
|
15753
15771
|
/* @__PURE__ */ jsx(CDValue, { children: formatTimestamp(t.createdAt) })
|
|
15754
15772
|
] })
|
|
15755
15773
|
] }),
|
|
15756
|
-
txUrl && /* @__PURE__ */ jsx(CExpandedLink, { href: txUrl, target: "_blank", rel: "noopener noreferrer", children: "View on
|
|
15774
|
+
txUrl && /* @__PURE__ */ jsx(CExpandedLink, { href: txUrl, target: "_blank", rel: "noopener noreferrer", children: "View on BaseScan \u2197" })
|
|
15757
15775
|
] })
|
|
15758
15776
|
] }, rowKey);
|
|
15759
15777
|
}),
|
|
@@ -15779,7 +15797,7 @@ function PortfolioActivityPanel({
|
|
|
15779
15797
|
/* @__PURE__ */ jsx(GridCell, { children: /* @__PURE__ */ jsx(CellText, { $muted: true, children: formatAddress(t.address) }) }),
|
|
15780
15798
|
/* @__PURE__ */ jsx(GridCell, { children: /* @__PURE__ */ jsx(ActivityTag, { $color: statusMeta.color, $bg: statusMeta.bg, children: prettyLabel(t.status) }) }),
|
|
15781
15799
|
/* @__PURE__ */ jsx(GridCell, { children: /* @__PURE__ */ jsx(CellText, { $muted: true, children: formatTimestamp(t.createdAt) }) }),
|
|
15782
|
-
/* @__PURE__ */ jsx(GridCell, { children: txUrl && /* @__PURE__ */ jsx(TxLink, { href: txUrl, target: "_blank", rel: "noopener noreferrer", title: "View on
|
|
15800
|
+
/* @__PURE__ */ jsx(GridCell, { children: txUrl && /* @__PURE__ */ jsx(TxLink, { href: txUrl, target: "_blank", rel: "noopener noreferrer", title: "View on BaseScan", children: /* @__PURE__ */ jsxs("svg", { width: "15", height: "15", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", children: [
|
|
15783
15801
|
/* @__PURE__ */ jsx("path", { d: "M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6" }),
|
|
15784
15802
|
/* @__PURE__ */ jsx("polyline", { points: "15 3 21 3 21 9" }),
|
|
15785
15803
|
/* @__PURE__ */ jsx("line", { x1: "10", y1: "14", x2: "21", y2: "3" })
|
|
@@ -18882,14 +18900,13 @@ var CloseButton3 = styled10.button`
|
|
|
18882
18900
|
var MainImageContainer = styled10.div`
|
|
18883
18901
|
position: relative;
|
|
18884
18902
|
flex: 1;
|
|
18885
|
-
min-height: 0;
|
|
18886
18903
|
display: flex;
|
|
18887
18904
|
align-items: center;
|
|
18888
18905
|
justify-content: center;
|
|
18889
|
-
padding:
|
|
18906
|
+
padding: 80px 20px 140px;
|
|
18890
18907
|
|
|
18891
18908
|
@media (max-width: 768px) {
|
|
18892
|
-
padding:
|
|
18909
|
+
padding: 60px 0 110px;
|
|
18893
18910
|
}
|
|
18894
18911
|
`;
|
|
18895
18912
|
var MainImage = styled10.img`
|
|
@@ -18901,11 +18918,8 @@ var MainImage = styled10.img`
|
|
|
18901
18918
|
opacity: ${(p) => p.$visible ? 1 : 0};
|
|
18902
18919
|
pointer-events: ${(p) => p.$visible ? "auto" : "none"};
|
|
18903
18920
|
transition: opacity 300ms ease;
|
|
18904
|
-
/*
|
|
18905
|
-
|
|
18906
|
-
The inset box excludes the bottom thumbnail strip so margin:auto centres the image
|
|
18907
|
-
in the space ABOVE the thumbnails (absolute positioning ignores the parent's padding,
|
|
18908
|
-
which otherwise let the image sink behind the thumbnails / "lean down"). */
|
|
18921
|
+
/* Inset box excludes the bottom thumbnail strip so margin:auto centres the image in the
|
|
18922
|
+
space ABOVE the thumbnails (absolute ignores the parent's padding). */
|
|
18909
18923
|
position: absolute;
|
|
18910
18924
|
top: 24px;
|
|
18911
18925
|
left: 24px;
|
|
@@ -19099,11 +19113,9 @@ function PropertyPhotoGallery({
|
|
|
19099
19113
|
isOpen,
|
|
19100
19114
|
onClose,
|
|
19101
19115
|
startIndex = 0,
|
|
19102
|
-
startWithVideo = false,
|
|
19103
19116
|
title = "28 Derby Street, Vaucluse",
|
|
19104
19117
|
subtitle = "Elara \u2014 Luxury Harbour Residence",
|
|
19105
|
-
images
|
|
19106
|
-
videoUrl
|
|
19118
|
+
images
|
|
19107
19119
|
}) {
|
|
19108
19120
|
const galleryImages = images?.length ? images : DEFAULT_IMAGES;
|
|
19109
19121
|
if (!isOpen) return null;
|
|
@@ -19112,19 +19124,16 @@ function PropertyPhotoGallery({
|
|
|
19112
19124
|
{
|
|
19113
19125
|
galleryImages,
|
|
19114
19126
|
startIndex,
|
|
19115
|
-
startWithVideo,
|
|
19116
19127
|
title,
|
|
19117
19128
|
subtitle,
|
|
19118
|
-
onClose
|
|
19119
|
-
videoUrl
|
|
19129
|
+
onClose
|
|
19120
19130
|
},
|
|
19121
|
-
`${startIndex}-${galleryImages.length}
|
|
19131
|
+
`${startIndex}-${galleryImages.length}`
|
|
19122
19132
|
);
|
|
19123
19133
|
}
|
|
19124
|
-
function GalleryContent({ galleryImages, startIndex,
|
|
19134
|
+
function GalleryContent({ galleryImages, startIndex, title, subtitle, onClose }) {
|
|
19125
19135
|
const [currentIndex, setCurrentIndex] = useState(() => clampIndex(startIndex, galleryImages.length));
|
|
19126
19136
|
const [activeHotspotId, setActiveHotspotId] = useState(null);
|
|
19127
|
-
const [showVideo, setShowVideo] = useState(startWithVideo ?? false);
|
|
19128
19137
|
const sliderRef = useRef(null);
|
|
19129
19138
|
const [isDragging, setIsDragging] = useState(false);
|
|
19130
19139
|
const wasDraggingRef = useRef(false);
|
|
@@ -19174,7 +19183,7 @@ function GalleryContent({ galleryImages, startIndex, startWithVideo, title, subt
|
|
|
19174
19183
|
] }),
|
|
19175
19184
|
/* @__PURE__ */ jsx(CloseButton3, { onClick: onClose, "aria-label": "Close gallery", children: /* @__PURE__ */ jsx("svg", { viewBox: "0 0 24 24", width: "22", height: "22", fill: "none", stroke: "currentColor", strokeWidth: 2, children: /* @__PURE__ */ jsx("path", { d: "M6 6l12 12M6 18L18 6" }) }) })
|
|
19176
19185
|
] }),
|
|
19177
|
-
|
|
19186
|
+
/* @__PURE__ */ jsxs(SliderContainer, { onClick: (event) => event.stopPropagation(), children: [
|
|
19178
19187
|
/* @__PURE__ */ jsxs(
|
|
19179
19188
|
SliderTrack,
|
|
19180
19189
|
{
|
|
@@ -19237,21 +19246,7 @@ function GalleryContent({ galleryImages, startIndex, startWithVideo, title, subt
|
|
|
19237
19246
|
children: /* @__PURE__ */ jsx("svg", { viewBox: "0 0 24 24", width: "22", height: "22", fill: "none", stroke: "currentColor", strokeWidth: 2, children: /* @__PURE__ */ jsx("path", { d: "M15 18l-6-6 6-6" }) })
|
|
19238
19247
|
}
|
|
19239
19248
|
),
|
|
19240
|
-
|
|
19241
|
-
"video",
|
|
19242
|
-
{
|
|
19243
|
-
autoPlay: true,
|
|
19244
|
-
loop: true,
|
|
19245
|
-
playsInline: true,
|
|
19246
|
-
muted: true,
|
|
19247
|
-
controls: true,
|
|
19248
|
-
onVolumeChange: (e) => {
|
|
19249
|
-
if (!e.currentTarget.muted) e.currentTarget.muted = true;
|
|
19250
|
-
},
|
|
19251
|
-
style: { objectFit: "contain", borderRadius: 12, boxShadow: "0 30px 80px rgba(0,0,0,0.55)" },
|
|
19252
|
-
children: /* @__PURE__ */ jsx("source", { src: videoUrl, type: "video/mp4" })
|
|
19253
|
-
}
|
|
19254
|
-
) }) : galleryImages.map((image, idx) => /* @__PURE__ */ jsx(MainImage, { src: image.src, alt: image.alt, $visible: idx === currentIndex }, image.alt)),
|
|
19249
|
+
galleryImages.map((image, idx) => /* @__PURE__ */ jsx(MainImage, { src: image.src, alt: image.alt, $visible: idx === currentIndex }, image.alt)),
|
|
19255
19250
|
galleryImages[currentIndex]?.hotspots?.map((hotspot) => /* @__PURE__ */ jsx(
|
|
19256
19251
|
Hotspot,
|
|
19257
19252
|
{
|
|
@@ -19296,83 +19291,11 @@ function GalleryContent({ galleryImages, startIndex, startWithVideo, title, subt
|
|
|
19296
19291
|
]
|
|
19297
19292
|
}
|
|
19298
19293
|
),
|
|
19299
|
-
/* @__PURE__ */
|
|
19300
|
-
galleryImages.map((image, idx) => /* @__PURE__ */ jsx(Thumbnail3, { $active: !showVideo && idx === currentIndex, onClick: () => {
|
|
19301
|
-
setShowVideo(false);
|
|
19302
|
-
setCurrentIndex(idx);
|
|
19303
|
-
}, "aria-label": `Preview ${image.label}`, children: /* @__PURE__ */ jsx("img", { src: image.src, alt: image.alt }) }, image.alt)),
|
|
19304
|
-
videoUrl && /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
19305
|
-
/* @__PURE__ */ jsx(ThumbnailDivider, {}),
|
|
19306
|
-
/* @__PURE__ */ jsxs(VideoBtn, { $active: showVideo, onClick: () => setShowVideo(true), children: [
|
|
19307
|
-
/* @__PURE__ */ jsxs("svg", { width: "16", height: "16", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", children: [
|
|
19308
|
-
/* @__PURE__ */ jsx("rect", { x: "2", y: "4", width: "14", height: "16", rx: "2" }),
|
|
19309
|
-
/* @__PURE__ */ jsx("path", { d: "M16 8l6-4v16l-6-4z" })
|
|
19310
|
-
] }),
|
|
19311
|
-
"Video"
|
|
19312
|
-
] })
|
|
19313
|
-
] })
|
|
19314
|
-
] })
|
|
19294
|
+
/* @__PURE__ */ jsx(ThumbnailStrip, { onClick: (event) => event.stopPropagation(), children: galleryImages.map((image, idx) => /* @__PURE__ */ jsx(Thumbnail3, { $active: idx === currentIndex, onClick: () => setCurrentIndex(idx), "aria-label": `Preview ${image.label}`, children: /* @__PURE__ */ jsx("img", { src: image.src, alt: image.alt }) }, image.alt)) })
|
|
19315
19295
|
]
|
|
19316
19296
|
}
|
|
19317
19297
|
);
|
|
19318
19298
|
}
|
|
19319
|
-
var GalleryVideoWrap = styled10.div`
|
|
19320
|
-
position: absolute;
|
|
19321
|
-
inset: 0;
|
|
19322
|
-
display: flex;
|
|
19323
|
-
align-items: center;
|
|
19324
|
-
justify-content: center;
|
|
19325
|
-
padding: 20px 20px 160px;
|
|
19326
|
-
|
|
19327
|
-
video {
|
|
19328
|
-
max-width: 90%;
|
|
19329
|
-
max-height: 100%;
|
|
19330
|
-
}
|
|
19331
|
-
|
|
19332
|
-
/* Property videos stay permanently muted — remove the volume + mute buttons
|
|
19333
|
-
from the native player (Chrome/Edge/Safari/iOS/Android). Firefox ignores
|
|
19334
|
-
these and is covered by the onVolumeChange force-mute fallback. */
|
|
19335
|
-
video::-webkit-media-controls-mute-button,
|
|
19336
|
-
video::-webkit-media-controls-volume-slider,
|
|
19337
|
-
video::-webkit-media-controls-volume-control-container {
|
|
19338
|
-
display: none !important;
|
|
19339
|
-
}
|
|
19340
|
-
|
|
19341
|
-
@media (max-width: 768px) {
|
|
19342
|
-
padding: 10px 0 130px;
|
|
19343
|
-
|
|
19344
|
-
video {
|
|
19345
|
-
max-width: 100%;
|
|
19346
|
-
}
|
|
19347
|
-
}
|
|
19348
|
-
`;
|
|
19349
|
-
var ThumbnailDivider = styled10.div`
|
|
19350
|
-
width: 1px;
|
|
19351
|
-
height: 48px;
|
|
19352
|
-
background: rgba(255, 255, 255, 0.15);
|
|
19353
|
-
flex-shrink: 0;
|
|
19354
|
-
align-self: center;
|
|
19355
|
-
`;
|
|
19356
|
-
var VideoBtn = styled10.button`
|
|
19357
|
-
display: flex;
|
|
19358
|
-
align-items: center;
|
|
19359
|
-
gap: 6px;
|
|
19360
|
-
padding: 8px 14px;
|
|
19361
|
-
border-radius: 8px;
|
|
19362
|
-
border: 1px solid ${(p) => p.$active ? "var(--color-accent, #E6C87E)" : "rgba(255, 255, 255, 0.2)"};
|
|
19363
|
-
background: ${(p) => p.$active ? "rgba(240, 185, 11, 0.15)" : "rgba(255, 255, 255, 0.08)"};
|
|
19364
|
-
color: ${(p) => p.$active ? "var(--color-accent, #E6C87E)" : "#fff"};
|
|
19365
|
-
font-size: 0.82rem;
|
|
19366
|
-
font-weight: 500;
|
|
19367
|
-
cursor: pointer;
|
|
19368
|
-
flex-shrink: 0;
|
|
19369
|
-
transition: all 0.2s ease;
|
|
19370
|
-
|
|
19371
|
-
&:hover {
|
|
19372
|
-
background: rgba(255, 255, 255, 0.15);
|
|
19373
|
-
border-color: rgba(255, 255, 255, 0.3);
|
|
19374
|
-
}
|
|
19375
|
-
`;
|
|
19376
19299
|
var slideIn2 = keyframes`
|
|
19377
19300
|
from { transform: translateX(110%); opacity: 0; }
|
|
19378
19301
|
to { transform: translateX(0); opacity: 1; }
|
|
@@ -19541,7 +19464,7 @@ var Container3 = styled10.div`
|
|
|
19541
19464
|
gap: 8px;
|
|
19542
19465
|
}
|
|
19543
19466
|
`;
|
|
19544
|
-
var DEFAULT_EXPLORER = "https://sepolia.
|
|
19467
|
+
var DEFAULT_EXPLORER = "https://sepolia.basescan.org/tx/";
|
|
19545
19468
|
function truncateHash(hash) {
|
|
19546
19469
|
return `${hash.slice(0, 6)}\u2026${hash.slice(-4)}`;
|
|
19547
19470
|
}
|
|
@@ -20108,7 +20031,8 @@ var SiteFooter = () => {
|
|
|
20108
20031
|
/* @__PURE__ */ jsxs(LegalLinks, { children: [
|
|
20109
20032
|
/* @__PURE__ */ jsx(LegalLink, { href: "/privacy", children: "Privacy Policy" }),
|
|
20110
20033
|
/* @__PURE__ */ jsx(LegalLink, { href: "/terms", children: "Terms of Use" }),
|
|
20111
|
-
/* @__PURE__ */ jsx(LegalLink, { href: "/cookies", children: "Cookie Policy" })
|
|
20034
|
+
/* @__PURE__ */ jsx(LegalLink, { href: "/cookies", children: "Cookie Policy" }),
|
|
20035
|
+
/* @__PURE__ */ jsx(LegalLink, { href: "/risk", children: "Risk Warning" })
|
|
20112
20036
|
] })
|
|
20113
20037
|
] }),
|
|
20114
20038
|
/* @__PURE__ */ jsx(Disclaimer2, { children: /* @__PURE__ */ jsx(DisclaimerText, { children: "Warning: Digital asset prices can be volatile. The value of your investment can go down or up and you may not get back the amount invested. Past gains are not indicative of future returns. You are solely responsible for your investment decisions and Loaf is not liable for any losses you may incur. The information here should not be regarded as financial or investment advice. For more information, see our Terms of Use and Risk Warning." }) })
|