@loafmarkets/ui 0.1.407 → 0.1.409
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 +9 -1
- package/dist/index.d.ts +9 -1
- package/dist/index.js +348 -72
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +348 -72
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
package/dist/index.mjs
CHANGED
|
@@ -5078,6 +5078,7 @@ var Header = ({
|
|
|
5078
5078
|
onSettingsClick,
|
|
5079
5079
|
onReferClick,
|
|
5080
5080
|
portfolioSummary,
|
|
5081
|
+
totalPoints,
|
|
5081
5082
|
fundsPending = false,
|
|
5082
5083
|
transparentOnTop = false,
|
|
5083
5084
|
headerCta = "deposit",
|
|
@@ -5541,6 +5542,11 @@ var Header = ({
|
|
|
5541
5542
|
}
|
|
5542
5543
|
),
|
|
5543
5544
|
isUserMenuOpen && /* @__PURE__ */ jsxs(DropdownMenu, { className: "user-menu-dropdown", children: [
|
|
5545
|
+
totalPoints != null && /* @__PURE__ */ jsxs(PointsHeader, { children: [
|
|
5546
|
+
/* @__PURE__ */ jsx("div", { className: "pts-label", children: "Total Points" }),
|
|
5547
|
+
/* @__PURE__ */ jsx("div", { className: "pts-value", children: totalPoints.toLocaleString() }),
|
|
5548
|
+
/* @__PURE__ */ jsx("div", { className: "pts-note", children: "Cumulative points earned. More soon." })
|
|
5549
|
+
] }),
|
|
5544
5550
|
/* @__PURE__ */ jsx(
|
|
5545
5551
|
"button",
|
|
5546
5552
|
{
|
|
@@ -5598,7 +5604,7 @@ var Header = ({
|
|
|
5598
5604
|
}
|
|
5599
5605
|
)
|
|
5600
5606
|
] }) : /* @__PURE__ */ jsxs("div", { style: { display: "flex", alignItems: "center" }, children: [
|
|
5601
|
-
/* @__PURE__ */ jsx(Button2, { className: "signup", onClick: handleSignIn, children: "
|
|
5607
|
+
/* @__PURE__ */ jsx(Button2, { className: "signup", onClick: handleSignIn, children: "Join Competition" }),
|
|
5602
5608
|
/* @__PURE__ */ jsx(
|
|
5603
5609
|
MobileOnlyButton,
|
|
5604
5610
|
{
|
|
@@ -6126,6 +6132,33 @@ var DropdownMenu = styled10.div`
|
|
|
6126
6132
|
display: block;
|
|
6127
6133
|
}
|
|
6128
6134
|
`;
|
|
6135
|
+
var PointsHeader = styled10.div`
|
|
6136
|
+
padding: 0.7rem 1.25rem 0.8rem;
|
|
6137
|
+
margin-bottom: 0.35rem;
|
|
6138
|
+
border-bottom: 1px solid rgba(255, 255, 255, 0.08);
|
|
6139
|
+
.pts-note {
|
|
6140
|
+
margin-top: 0.4rem;
|
|
6141
|
+
font-size: 0.6rem;
|
|
6142
|
+
line-height: 1.4;
|
|
6143
|
+
color: rgba(255, 255, 255, 0.4);
|
|
6144
|
+
}
|
|
6145
|
+
.pts-label {
|
|
6146
|
+
font-family: 'SF Mono', 'Fira Code', ui-monospace, monospace;
|
|
6147
|
+
font-size: 0.56rem;
|
|
6148
|
+
font-weight: 700;
|
|
6149
|
+
letter-spacing: 0.16em;
|
|
6150
|
+
text-transform: uppercase;
|
|
6151
|
+
color: rgba(255, 255, 255, 0.45);
|
|
6152
|
+
}
|
|
6153
|
+
.pts-value {
|
|
6154
|
+
margin-top: 0.2rem;
|
|
6155
|
+
font-size: 1.15rem;
|
|
6156
|
+
font-weight: 800;
|
|
6157
|
+
color: #E6C87E;
|
|
6158
|
+
font-variant-numeric: tabular-nums;
|
|
6159
|
+
line-height: 1;
|
|
6160
|
+
}
|
|
6161
|
+
`;
|
|
6129
6162
|
var MenuItem = styled10.div`
|
|
6130
6163
|
padding: 0.75rem 1.25rem;
|
|
6131
6164
|
cursor: pointer;
|
|
@@ -7551,7 +7584,6 @@ var LoginPopup = ({
|
|
|
7551
7584
|
] })
|
|
7552
7585
|
] });
|
|
7553
7586
|
if (gate) {
|
|
7554
|
-
const codeAccepted = codeStatus === "valid";
|
|
7555
7587
|
const showSignIn = signInMode || signInRevealed;
|
|
7556
7588
|
return /* @__PURE__ */ jsxs(GateShell, { children: [
|
|
7557
7589
|
/* @__PURE__ */ jsx(GateTint, { $reveal: showSignIn ? 1 : 0 }),
|
|
@@ -7577,35 +7609,30 @@ var LoginPopup = ({
|
|
|
7577
7609
|
] }) : /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
7578
7610
|
/* @__PURE__ */ jsxs(CodeInputWrapper, { $status: codeStatus, children: [
|
|
7579
7611
|
/* @__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
|
-
)
|
|
7612
|
+
codeInput
|
|
7592
7613
|
] }),
|
|
7593
7614
|
(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
|
-
|
|
7615
|
+
signInRevealed ? signInStep : /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
7616
|
+
/* @__PURE__ */ jsxs(GateResendText, { children: [
|
|
7617
|
+
"Already have an account?",
|
|
7618
|
+
" ",
|
|
7619
|
+
/* @__PURE__ */ jsx(
|
|
7620
|
+
"button",
|
|
7621
|
+
{
|
|
7622
|
+
type: "button",
|
|
7623
|
+
onClick: () => {
|
|
7624
|
+
setError("");
|
|
7625
|
+
setIsSignUp(false);
|
|
7626
|
+
setSignInMode(true);
|
|
7627
|
+
},
|
|
7628
|
+
children: "Sign in"
|
|
7629
|
+
}
|
|
7630
|
+
)
|
|
7631
|
+
] }),
|
|
7632
|
+
/* @__PURE__ */ jsxs(GateEarlyAccess, { href: "https://loafmarkets.com/?waitlist=1", children: [
|
|
7633
|
+
"Signup for early access",
|
|
7634
|
+
/* @__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" }) })
|
|
7635
|
+
] })
|
|
7609
7636
|
] })
|
|
7610
7637
|
] })
|
|
7611
7638
|
] })
|
|
@@ -8228,6 +8255,33 @@ var GateResendText = styled10.p`
|
|
|
8228
8255
|
font-size: inherit;
|
|
8229
8256
|
}
|
|
8230
8257
|
`;
|
|
8258
|
+
var GateEarlyAccess = styled10.a`
|
|
8259
|
+
display: inline-flex;
|
|
8260
|
+
align-items: center;
|
|
8261
|
+
gap: 0.4rem;
|
|
8262
|
+
margin-top: 0.15rem;
|
|
8263
|
+
color: var(--color-text-secondary, #848e9c);
|
|
8264
|
+
font-size: 0.8rem;
|
|
8265
|
+
font-weight: 500;
|
|
8266
|
+
letter-spacing: 0.02em;
|
|
8267
|
+
text-decoration: none;
|
|
8268
|
+
cursor: pointer;
|
|
8269
|
+
transition: color 0.15s ease;
|
|
8270
|
+
|
|
8271
|
+
svg {
|
|
8272
|
+
width: 13px;
|
|
8273
|
+
height: 13px;
|
|
8274
|
+
transition: transform 0.15s ease;
|
|
8275
|
+
}
|
|
8276
|
+
|
|
8277
|
+
&:hover {
|
|
8278
|
+
color: var(--color-accent, #E6C87E);
|
|
8279
|
+
}
|
|
8280
|
+
|
|
8281
|
+
&:hover svg {
|
|
8282
|
+
transform: translateX(3px);
|
|
8283
|
+
}
|
|
8284
|
+
`;
|
|
8231
8285
|
var GateSubmit = styled10.button`
|
|
8232
8286
|
display: flex;
|
|
8233
8287
|
align-items: center;
|
|
@@ -9007,6 +9061,48 @@ var CodeLink = styled10.button`
|
|
|
9007
9061
|
text-underline-offset: 2px;
|
|
9008
9062
|
}
|
|
9009
9063
|
`;
|
|
9064
|
+
var HandleField = styled10.div`
|
|
9065
|
+
display: flex;
|
|
9066
|
+
align-items: center;
|
|
9067
|
+
gap: 0.1rem;
|
|
9068
|
+
width: 100%;
|
|
9069
|
+
margin-bottom: 0.4rem;
|
|
9070
|
+
padding: 0 0.9rem;
|
|
9071
|
+
background: rgba(255, 255, 255, 0.04);
|
|
9072
|
+
border: 1px solid rgba(255, 255, 255, 0.1);
|
|
9073
|
+
border-radius: 10px;
|
|
9074
|
+
transition: border-color 0.15s ease;
|
|
9075
|
+
|
|
9076
|
+
&:focus-within {
|
|
9077
|
+
border-color: rgba(230, 200, 126, 0.6);
|
|
9078
|
+
}
|
|
9079
|
+
`;
|
|
9080
|
+
var HandleAt = styled10.span`
|
|
9081
|
+
color: rgba(255, 255, 255, 0.4);
|
|
9082
|
+
font-size: 1rem;
|
|
9083
|
+
font-weight: 600;
|
|
9084
|
+
`;
|
|
9085
|
+
var HandleInput = styled10.input`
|
|
9086
|
+
flex: 1;
|
|
9087
|
+
min-width: 0;
|
|
9088
|
+
padding: 0.85rem 0.4rem;
|
|
9089
|
+
border: none;
|
|
9090
|
+
background: transparent;
|
|
9091
|
+
color: #fff;
|
|
9092
|
+
font-size: 1rem;
|
|
9093
|
+
font-family: inherit;
|
|
9094
|
+
outline: none;
|
|
9095
|
+
|
|
9096
|
+
&::placeholder {
|
|
9097
|
+
color: rgba(255, 255, 255, 0.35);
|
|
9098
|
+
}
|
|
9099
|
+
`;
|
|
9100
|
+
var FieldError = styled10.div`
|
|
9101
|
+
width: 100%;
|
|
9102
|
+
margin-bottom: 0.6rem;
|
|
9103
|
+
font-size: 0.78rem;
|
|
9104
|
+
color: #ff6b6b;
|
|
9105
|
+
`;
|
|
9010
9106
|
function OnboardingGuide({
|
|
9011
9107
|
open,
|
|
9012
9108
|
fundsReady,
|
|
@@ -9014,8 +9110,21 @@ function OnboardingGuide({
|
|
|
9014
9110
|
onBrowseProperties,
|
|
9015
9111
|
onEnterCode,
|
|
9016
9112
|
onClose,
|
|
9113
|
+
onClaimHandle,
|
|
9017
9114
|
logoSrc = "/Loaf-logo-Banner.png"
|
|
9018
9115
|
}) {
|
|
9116
|
+
const [step, setStep] = useState(onClaimHandle ? "handle" : "funds");
|
|
9117
|
+
const [handle, setHandle] = useState("");
|
|
9118
|
+
const [claiming, setClaiming] = useState(false);
|
|
9119
|
+
const [handleError, setHandleError] = useState("");
|
|
9120
|
+
useEffect(() => {
|
|
9121
|
+
if (open) {
|
|
9122
|
+
setStep(onClaimHandle ? "handle" : "funds");
|
|
9123
|
+
setHandle("");
|
|
9124
|
+
setClaiming(false);
|
|
9125
|
+
setHandleError("");
|
|
9126
|
+
}
|
|
9127
|
+
}, [open, onClaimHandle]);
|
|
9019
9128
|
useEffect(() => {
|
|
9020
9129
|
if (!open) return;
|
|
9021
9130
|
const onKey = (e) => {
|
|
@@ -9025,6 +9134,58 @@ function OnboardingGuide({
|
|
|
9025
9134
|
return () => window.removeEventListener("keydown", onKey);
|
|
9026
9135
|
}, [open, onClose]);
|
|
9027
9136
|
if (!open) return null;
|
|
9137
|
+
const handleClaimContinue = async () => {
|
|
9138
|
+
const trimmed = handle.trim().replace(/^@+/, "");
|
|
9139
|
+
if (trimmed && onClaimHandle) {
|
|
9140
|
+
setClaiming(true);
|
|
9141
|
+
setHandleError("");
|
|
9142
|
+
try {
|
|
9143
|
+
await onClaimHandle(trimmed);
|
|
9144
|
+
} catch (err) {
|
|
9145
|
+
setHandleError(err instanceof Error ? err.message : "Couldn't claim that handle. Try another or skip.");
|
|
9146
|
+
setClaiming(false);
|
|
9147
|
+
return;
|
|
9148
|
+
}
|
|
9149
|
+
setClaiming(false);
|
|
9150
|
+
}
|
|
9151
|
+
setStep("funds");
|
|
9152
|
+
};
|
|
9153
|
+
if (step === "handle") {
|
|
9154
|
+
return /* @__PURE__ */ jsx(Overlay3, { onClick: onClose, role: "dialog", "aria-modal": "true", "aria-label": "Claim your handle", children: /* @__PURE__ */ jsxs(Card2, { onClick: (e) => e.stopPropagation(), children: [
|
|
9155
|
+
/* @__PURE__ */ jsx(CloseButton2, { onClick: onClose, "aria-label": "Skip", children: /* @__PURE__ */ jsx("svg", { width: "16", height: "16", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: 2, children: /* @__PURE__ */ jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M6 6l12 12M18 6L6 18" }) }) }),
|
|
9156
|
+
/* @__PURE__ */ jsxs(LogoRow, { children: [
|
|
9157
|
+
/* @__PURE__ */ jsx(LogoImage2, { src: logoSrc, alt: "Loaf" }),
|
|
9158
|
+
/* @__PURE__ */ jsx(LogoBeta2, { children: "Private Beta" })
|
|
9159
|
+
] }),
|
|
9160
|
+
/* @__PURE__ */ jsx(Title2, { children: "Claim your handle" }),
|
|
9161
|
+
/* @__PURE__ */ jsx(Subtitle2, { children: "Pick a username for your Loaf profile. It's optional \u2014 you can set or change it later." }),
|
|
9162
|
+
/* @__PURE__ */ jsxs(HandleField, { children: [
|
|
9163
|
+
/* @__PURE__ */ jsx(HandleAt, { children: "@" }),
|
|
9164
|
+
/* @__PURE__ */ jsx(
|
|
9165
|
+
HandleInput,
|
|
9166
|
+
{
|
|
9167
|
+
type: "text",
|
|
9168
|
+
autoComplete: "off",
|
|
9169
|
+
autoCapitalize: "none",
|
|
9170
|
+
spellCheck: false,
|
|
9171
|
+
placeholder: "username (optional)",
|
|
9172
|
+
value: handle,
|
|
9173
|
+
onChange: (e) => {
|
|
9174
|
+
setHandle(e.target.value.replace(/[^a-zA-Z0-9_]/g, ""));
|
|
9175
|
+
setHandleError("");
|
|
9176
|
+
},
|
|
9177
|
+
onKeyDown: (e) => {
|
|
9178
|
+
if (e.key === "Enter" && !claiming) void handleClaimContinue();
|
|
9179
|
+
},
|
|
9180
|
+
autoFocus: true
|
|
9181
|
+
}
|
|
9182
|
+
)
|
|
9183
|
+
] }),
|
|
9184
|
+
handleError && /* @__PURE__ */ jsx(FieldError, { children: handleError }),
|
|
9185
|
+
/* @__PURE__ */ jsx(PrimaryButton, { onClick: () => void handleClaimContinue(), disabled: claiming, children: claiming ? "Saving\u2026" : "Continue" }),
|
|
9186
|
+
/* @__PURE__ */ jsx(SkipButton, { onClick: () => setStep("funds"), disabled: claiming, children: "Skip for now" })
|
|
9187
|
+
] }) });
|
|
9188
|
+
}
|
|
9028
9189
|
return /* @__PURE__ */ jsx(Overlay3, { onClick: onClose, role: "dialog", "aria-modal": "true", "aria-label": "Welcome to Loaf", children: /* @__PURE__ */ jsxs(Card2, { onClick: (e) => e.stopPropagation(), children: [
|
|
9029
9190
|
/* @__PURE__ */ jsx(CloseButton2, { onClick: onClose, "aria-label": "Skip", children: /* @__PURE__ */ jsx("svg", { width: "16", height: "16", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: 2, children: /* @__PURE__ */ jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M6 6l12 12M18 6L6 18" }) }) }),
|
|
9030
9191
|
/* @__PURE__ */ jsxs(LogoRow, { children: [
|
|
@@ -12088,6 +12249,11 @@ var DocIcon = () => /* @__PURE__ */ jsxs("svg", { width: "20", height: "20", vie
|
|
|
12088
12249
|
/* @__PURE__ */ jsx("line", { x1: "16", y1: "17", x2: "8", y2: "17" }),
|
|
12089
12250
|
/* @__PURE__ */ jsx("polyline", { points: "10 9 9 9 8 9" })
|
|
12090
12251
|
] });
|
|
12252
|
+
var DownloadIcon = () => /* @__PURE__ */ jsxs("svg", { width: "18", height: "18", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", children: [
|
|
12253
|
+
/* @__PURE__ */ jsx("path", { d: "M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4" }),
|
|
12254
|
+
/* @__PURE__ */ jsx("polyline", { points: "7 10 12 15 17 10" }),
|
|
12255
|
+
/* @__PURE__ */ jsx("line", { x1: "12", y1: "15", x2: "12", y2: "3" })
|
|
12256
|
+
] });
|
|
12091
12257
|
var LIVE_TITLE_PATTERNS = [/term\s*sheet/i, /memo/i];
|
|
12092
12258
|
var COMING_SOON_TITLES = [
|
|
12093
12259
|
"Valuation Report",
|
|
@@ -12102,11 +12268,30 @@ var COMING_SOON_TITLES = [
|
|
|
12102
12268
|
];
|
|
12103
12269
|
function PropertyDocuments({ documentsData, highlightDocument, onClearHighlight }) {
|
|
12104
12270
|
const highlightRef = useRef(null);
|
|
12105
|
-
|
|
12271
|
+
const [previewUrl, setPreviewUrl] = useState(null);
|
|
12272
|
+
const [previewTitle, setPreviewTitle] = useState(null);
|
|
12273
|
+
const backendDocuments = Array.isArray(documentsData?.documents) ? documentsData.documents : [];
|
|
12274
|
+
const liveDocs = backendDocuments.filter(
|
|
12275
|
+
(d) => Boolean(d.documentUrl) && LIVE_TITLE_PATTERNS.some((rx) => rx.test(d.title))
|
|
12276
|
+
);
|
|
12277
|
+
const comingSoonDocs = COMING_SOON_TITLES.filter(
|
|
12278
|
+
(title) => !liveDocs.some((d) => d.title.toLowerCase().includes(title.toLowerCase()) || title.toLowerCase().includes(d.title.toLowerCase()))
|
|
12279
|
+
).map((title) => ({ title, documentUrl: "" }));
|
|
12280
|
+
const documents = [...liveDocs, ...comingSoonDocs];
|
|
12281
|
+
const activeUrl = previewUrl ?? (liveDocs[0]?.documentUrl || null);
|
|
12282
|
+
const activeTitle = previewUrl ? previewTitle : liveDocs[0]?.title || null;
|
|
12283
|
+
const selectPreview = (doc) => {
|
|
12284
|
+
setPreviewUrl(doc.documentUrl);
|
|
12285
|
+
setPreviewTitle(doc.title);
|
|
12286
|
+
};
|
|
12106
12287
|
useEffect(() => {
|
|
12107
12288
|
if (highlightDocument && highlightRef.current) {
|
|
12108
12289
|
highlightRef.current.scrollIntoView({ behavior: "smooth", block: "nearest" });
|
|
12109
12290
|
}
|
|
12291
|
+
if (highlightDocument) {
|
|
12292
|
+
const hit = liveDocs.find((d) => d.title.toLowerCase().includes(highlightDocument.toLowerCase()));
|
|
12293
|
+
if (hit) selectPreview(hit);
|
|
12294
|
+
}
|
|
12110
12295
|
}, [highlightDocument]);
|
|
12111
12296
|
useEffect(() => {
|
|
12112
12297
|
if (!highlightDocument || !onClearHighlight) return;
|
|
@@ -12118,36 +12303,58 @@ function PropertyDocuments({ documentsData, highlightDocument, onClearHighlight
|
|
|
12118
12303
|
document.addEventListener("click", handler, true);
|
|
12119
12304
|
return () => document.removeEventListener("click", handler, true);
|
|
12120
12305
|
}, [highlightDocument, onClearHighlight]);
|
|
12121
|
-
const backendDocuments = Array.isArray(documentsData?.documents) ? documentsData.documents : [];
|
|
12122
|
-
const liveDocs = backendDocuments.filter(
|
|
12123
|
-
(d) => Boolean(d.documentUrl) && LIVE_TITLE_PATTERNS.some((rx) => rx.test(d.title))
|
|
12124
|
-
);
|
|
12125
|
-
const comingSoonDocs = COMING_SOON_TITLES.filter(
|
|
12126
|
-
(title) => !liveDocs.some((d) => d.title.toLowerCase().includes(title.toLowerCase()) || title.toLowerCase().includes(d.title.toLowerCase()))
|
|
12127
|
-
).map((title) => ({ title, documentUrl: "" }));
|
|
12128
|
-
const documents = [...liveDocs, ...comingSoonDocs];
|
|
12129
12306
|
return /* @__PURE__ */ jsxs(Section2, { children: [
|
|
12130
12307
|
/* @__PURE__ */ jsx(SectionHeading, { children: "Investment Documents" }),
|
|
12131
|
-
/* @__PURE__ */
|
|
12132
|
-
|
|
12133
|
-
|
|
12134
|
-
|
|
12135
|
-
|
|
12308
|
+
/* @__PURE__ */ jsxs(SplitLayout, { children: [
|
|
12309
|
+
/* @__PURE__ */ jsx(DocList, { children: documents.map(({ documentUrl, title }) => {
|
|
12310
|
+
const isAvailable = Boolean(documentUrl);
|
|
12311
|
+
const isHighlighted = highlightDocument != null && title.toLowerCase().includes(highlightDocument.toLowerCase());
|
|
12312
|
+
const isActive = isAvailable && documentUrl === activeUrl;
|
|
12313
|
+
return /* @__PURE__ */ jsx(
|
|
12314
|
+
DocItem,
|
|
12315
|
+
{
|
|
12316
|
+
ref: isHighlighted ? highlightRef : void 0,
|
|
12317
|
+
$highlighted: isHighlighted,
|
|
12318
|
+
children: /* @__PURE__ */ jsxs(
|
|
12319
|
+
DocRow,
|
|
12320
|
+
{
|
|
12321
|
+
$available: isAvailable,
|
|
12322
|
+
$active: isActive,
|
|
12323
|
+
onMouseEnter: isAvailable ? () => selectPreview({ documentUrl, title }) : void 0,
|
|
12324
|
+
onClick: isAvailable ? () => selectPreview({ documentUrl, title }) : void 0,
|
|
12325
|
+
children: [
|
|
12326
|
+
/* @__PURE__ */ jsxs(DocName, { $available: isAvailable, children: [
|
|
12327
|
+
/* @__PURE__ */ jsx(DocIconWrapper, { children: /* @__PURE__ */ jsx(DocIcon, {}) }),
|
|
12328
|
+
title
|
|
12329
|
+
] }),
|
|
12330
|
+
isAvailable ? /* @__PURE__ */ jsx(
|
|
12331
|
+
DownloadBtn,
|
|
12332
|
+
{
|
|
12333
|
+
href: documentUrl,
|
|
12334
|
+
target: "_blank",
|
|
12335
|
+
rel: "noopener noreferrer",
|
|
12336
|
+
"aria-label": `Open ${title}`,
|
|
12337
|
+
title: "Open document",
|
|
12338
|
+
onClick: (e) => e.stopPropagation(),
|
|
12339
|
+
children: /* @__PURE__ */ jsx(DownloadIcon, {})
|
|
12340
|
+
}
|
|
12341
|
+
) : /* @__PURE__ */ jsx(ComingSoonBadge, { children: "Coming Soon" })
|
|
12342
|
+
]
|
|
12343
|
+
}
|
|
12344
|
+
)
|
|
12345
|
+
},
|
|
12346
|
+
`${title}-${documentUrl || "pending"}`
|
|
12347
|
+
);
|
|
12348
|
+
}) }),
|
|
12349
|
+
/* @__PURE__ */ jsx(PreviewPane, { children: activeUrl ? /* @__PURE__ */ jsx(
|
|
12350
|
+
PreviewFrame,
|
|
12136
12351
|
{
|
|
12137
|
-
|
|
12138
|
-
|
|
12139
|
-
children: isAvailable ? /* @__PURE__ */ jsxs(DocLink, { href: documentUrl, target: "_blank", rel: "noopener noreferrer", children: [
|
|
12140
|
-
/* @__PURE__ */ jsx(DocIconWrapper, { children: /* @__PURE__ */ jsx(DocIcon, {}) }),
|
|
12141
|
-
title
|
|
12142
|
-
] }) : /* @__PURE__ */ jsxs(DocItemDisabled, { children: [
|
|
12143
|
-
/* @__PURE__ */ jsx(DocIconWrapper, { children: /* @__PURE__ */ jsx(DocIcon, {}) }),
|
|
12144
|
-
title,
|
|
12145
|
-
/* @__PURE__ */ jsx(ComingSoonBadge, { children: "Coming Soon" })
|
|
12146
|
-
] })
|
|
12352
|
+
src: `${activeUrl}#toolbar=0&navpanes=0&view=FitH`,
|
|
12353
|
+
title: activeTitle ?? "Document preview"
|
|
12147
12354
|
},
|
|
12148
|
-
|
|
12149
|
-
)
|
|
12150
|
-
|
|
12355
|
+
activeUrl
|
|
12356
|
+
) : /* @__PURE__ */ jsx(PreviewEmpty, { children: "Hover a document to preview it here" }) })
|
|
12357
|
+
] })
|
|
12151
12358
|
] });
|
|
12152
12359
|
}
|
|
12153
12360
|
var Section2 = styled10.section`
|
|
@@ -12167,45 +12374,103 @@ var SectionHeading = styled10.h2`
|
|
|
12167
12374
|
align-items: center;
|
|
12168
12375
|
gap: 0.5rem;
|
|
12169
12376
|
`;
|
|
12377
|
+
var SplitLayout = styled10.div`
|
|
12378
|
+
display: flex;
|
|
12379
|
+
gap: 1.25rem;
|
|
12380
|
+
align-items: stretch;
|
|
12381
|
+
|
|
12382
|
+
@media (max-width: 768px) {
|
|
12383
|
+
flex-direction: column;
|
|
12384
|
+
}
|
|
12385
|
+
`;
|
|
12170
12386
|
var DocList = styled10.ul`
|
|
12171
12387
|
list-style: none;
|
|
12172
12388
|
padding: 0;
|
|
12173
12389
|
margin: 0;
|
|
12390
|
+
flex: 1 1 50%;
|
|
12391
|
+
min-width: 0;
|
|
12174
12392
|
`;
|
|
12175
12393
|
var DocItem = styled10.li`
|
|
12176
|
-
padding: 0.
|
|
12394
|
+
padding: 0.35rem 0;
|
|
12177
12395
|
border-bottom: 1px solid var(--color-border, rgba(255, 255, 255, 0.1));
|
|
12178
12396
|
border-radius: ${(p) => p.$highlighted ? "6px" : "0"};
|
|
12179
12397
|
background: ${(p) => p.$highlighted ? "rgba(212, 175, 55, 0.08)" : "transparent"};
|
|
12180
|
-
${(p) => p.$highlighted ? "padding: 0.75rem;" : ""}
|
|
12181
12398
|
transition: background 0.3s;
|
|
12182
12399
|
|
|
12183
12400
|
&:last-child {
|
|
12184
12401
|
border-bottom: none;
|
|
12185
12402
|
}
|
|
12186
12403
|
`;
|
|
12187
|
-
var
|
|
12404
|
+
var DocRow = styled10.div`
|
|
12188
12405
|
display: flex;
|
|
12189
12406
|
align-items: center;
|
|
12190
|
-
|
|
12191
|
-
|
|
12192
|
-
|
|
12407
|
+
gap: 0.5rem;
|
|
12408
|
+
padding: 0.4rem 0.5rem;
|
|
12409
|
+
border-radius: 6px;
|
|
12410
|
+
cursor: ${(p) => p.$available ? "pointer" : "not-allowed"};
|
|
12411
|
+
background: ${(p) => p.$active ? "rgba(230, 200, 126, 0.10)" : "transparent"};
|
|
12412
|
+
transition: background 0.2s, color 0.2s;
|
|
12193
12413
|
|
|
12194
|
-
&:hover {
|
|
12195
|
-
color: var(--color-accent);
|
|
12196
|
-
}
|
|
12414
|
+
${(p) => p.$available && !p.$active ? "&:hover { background: rgba(230, 200, 126, 0.06); }" : ""}
|
|
12197
12415
|
`;
|
|
12198
|
-
var
|
|
12416
|
+
var DocName = styled10.span`
|
|
12199
12417
|
display: flex;
|
|
12200
12418
|
align-items: center;
|
|
12201
|
-
|
|
12202
|
-
|
|
12203
|
-
|
|
12419
|
+
flex: 1;
|
|
12420
|
+
min-width: 0;
|
|
12421
|
+
color: ${(p) => p.$available ? "var(--color-text)" : "var(--color-text-secondary)"};
|
|
12422
|
+
opacity: ${(p) => p.$available ? 1 : 0.6};
|
|
12204
12423
|
`;
|
|
12205
12424
|
var DocIconWrapper = styled10.span`
|
|
12206
12425
|
margin-right: 0.75rem;
|
|
12207
12426
|
flex-shrink: 0;
|
|
12208
12427
|
color: var(--color-text-secondary);
|
|
12428
|
+
display: inline-flex;
|
|
12429
|
+
`;
|
|
12430
|
+
var DownloadBtn = styled10.a`
|
|
12431
|
+
flex-shrink: 0;
|
|
12432
|
+
display: inline-flex;
|
|
12433
|
+
align-items: center;
|
|
12434
|
+
justify-content: center;
|
|
12435
|
+
width: 30px;
|
|
12436
|
+
height: 30px;
|
|
12437
|
+
border-radius: 6px;
|
|
12438
|
+
color: var(--color-text-secondary);
|
|
12439
|
+
transition: color 0.2s, background 0.2s;
|
|
12440
|
+
|
|
12441
|
+
&:hover {
|
|
12442
|
+
color: var(--color-accent);
|
|
12443
|
+
background: rgba(230, 200, 126, 0.1);
|
|
12444
|
+
}
|
|
12445
|
+
`;
|
|
12446
|
+
var PreviewPane = styled10.div`
|
|
12447
|
+
flex: 1 1 50%;
|
|
12448
|
+
min-width: 0;
|
|
12449
|
+
min-height: 360px;
|
|
12450
|
+
display: flex;
|
|
12451
|
+
border: 1px solid var(--color-border, rgba(255, 255, 255, 0.1));
|
|
12452
|
+
border-radius: 10px;
|
|
12453
|
+
overflow: hidden;
|
|
12454
|
+
background: rgba(0, 0, 0, 0.25);
|
|
12455
|
+
|
|
12456
|
+
/* No hover on touch devices — fall back to the list + download icon. */
|
|
12457
|
+
@media (max-width: 768px) {
|
|
12458
|
+
display: none;
|
|
12459
|
+
}
|
|
12460
|
+
`;
|
|
12461
|
+
var PreviewFrame = styled10.iframe`
|
|
12462
|
+
width: 100%;
|
|
12463
|
+
height: 100%;
|
|
12464
|
+
min-height: 360px;
|
|
12465
|
+
border: 0;
|
|
12466
|
+
background: #fff;
|
|
12467
|
+
`;
|
|
12468
|
+
var PreviewEmpty = styled10.div`
|
|
12469
|
+
margin: auto;
|
|
12470
|
+
padding: 1rem;
|
|
12471
|
+
text-align: center;
|
|
12472
|
+
color: var(--color-text-secondary);
|
|
12473
|
+
font-size: 0.85rem;
|
|
12209
12474
|
`;
|
|
12210
12475
|
var ComingSoonBadge = styled10.span`
|
|
12211
12476
|
margin-left: auto;
|
|
@@ -12217,6 +12482,7 @@ var ComingSoonBadge = styled10.span`
|
|
|
12217
12482
|
font-weight: 500;
|
|
12218
12483
|
text-transform: uppercase;
|
|
12219
12484
|
letter-spacing: 0.05em;
|
|
12485
|
+
flex-shrink: 0;
|
|
12220
12486
|
`;
|
|
12221
12487
|
var formatIsoDate = (value) => {
|
|
12222
12488
|
const parsed = new Date(value);
|
|
@@ -19854,7 +20120,7 @@ var OpenMailButton = styled10.a`
|
|
|
19854
20120
|
`;
|
|
19855
20121
|
var ContactPopup = ({ onClose }) => {
|
|
19856
20122
|
const [copied, setCopied] = useState(false);
|
|
19857
|
-
const email = "
|
|
20123
|
+
const email = "admin@loafmarkets.com";
|
|
19858
20124
|
const handleCopy = async () => {
|
|
19859
20125
|
try {
|
|
19860
20126
|
await navigator.clipboard.writeText(email);
|
|
@@ -20081,7 +20347,17 @@ var SiteFooter = () => {
|
|
|
20081
20347
|
/* @__PURE__ */ jsx(FooterLinkItem, { children: /* @__PURE__ */ jsx(FooterLink, { href: "/trade", children: "Trade" }) }),
|
|
20082
20348
|
/* @__PURE__ */ jsx(FooterLinkItem, { children: /* @__PURE__ */ jsx(FooterLink, { href: "/offerings", children: "Initial Offerings" }) }),
|
|
20083
20349
|
/* @__PURE__ */ jsx(FooterLinkItem, { children: /* @__PURE__ */ jsx(FooterLink, { href: "/map", children: "Property Map" }) }),
|
|
20084
|
-
/* @__PURE__ */ jsx(FooterLinkItem, { children: /* @__PURE__ */ jsx(
|
|
20350
|
+
/* @__PURE__ */ jsx(FooterLinkItem, { children: /* @__PURE__ */ jsx(
|
|
20351
|
+
FooterLink,
|
|
20352
|
+
{
|
|
20353
|
+
href: "/loaf-liquidity",
|
|
20354
|
+
onClick: (e) => {
|
|
20355
|
+
e.preventDefault();
|
|
20356
|
+
if (typeof window !== "undefined") window.dispatchEvent(new CustomEvent("loaf:open-liquidity-popup"));
|
|
20357
|
+
},
|
|
20358
|
+
children: "Loaf Liquidity"
|
|
20359
|
+
}
|
|
20360
|
+
) })
|
|
20085
20361
|
] })
|
|
20086
20362
|
] }),
|
|
20087
20363
|
/* @__PURE__ */ jsxs(FooterColumn, { children: [
|
|
@@ -20117,7 +20393,7 @@ var SiteFooter = () => {
|
|
|
20117
20393
|
/* @__PURE__ */ jsx(LegalLink, { href: "/cookies", children: "Cookie Policy" })
|
|
20118
20394
|
] })
|
|
20119
20395
|
] }),
|
|
20120
|
-
/* @__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
|
|
20396
|
+
/* @__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." }) })
|
|
20121
20397
|
] }) }),
|
|
20122
20398
|
showContactPopup && /* @__PURE__ */ jsx(ContactPopup, { onClose: () => setShowContactPopup(false) })
|
|
20123
20399
|
] });
|