@loafmarkets/ui 0.1.168 → 0.1.170
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 +215 -187
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +215 -187
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -8047,10 +8047,6 @@ function GalleryMapSection({
|
|
|
8047
8047
|
videoUrl && /* @__PURE__ */ jsxRuntime.jsxs(FixedBtn, { $active: showVideo, onClick: () => setShowVideo((p) => !p), children: [
|
|
8048
8048
|
/* @__PURE__ */ jsxRuntime.jsx(bi.BiVideo, { size: 16 }),
|
|
8049
8049
|
" Video"
|
|
8050
|
-
] }),
|
|
8051
|
-
/* @__PURE__ */ jsxRuntime.jsxs(FixedBtn, { $active: false, onClick: () => setShowFullMap(true), children: [
|
|
8052
|
-
/* @__PURE__ */ jsxRuntime.jsx(bi.BiMap, { size: 16 }),
|
|
8053
|
-
" Map View"
|
|
8054
8050
|
] })
|
|
8055
8051
|
] })
|
|
8056
8052
|
] }),
|
|
@@ -8119,10 +8115,10 @@ function GalleryMapSection({
|
|
|
8119
8115
|
/* @__PURE__ */ jsxRuntime.jsx(SuburbDesc, { children: "One of Sydney's most prestigious harbourside suburbs, consistently ranked among Australia's highest-value residential markets. Strong capital growth driven by limited supply, heritage conservation overlays, and international buyer demand." })
|
|
8120
8116
|
] })
|
|
8121
8117
|
] }),
|
|
8122
|
-
showFullMap && /* @__PURE__ */ jsxRuntime.jsx(FullMapPopup, { onClose: () => setShowFullMap(false) })
|
|
8118
|
+
showFullMap && /* @__PURE__ */ jsxRuntime.jsx(FullMapPopup, { onClose: () => setShowFullMap(false), mapUrl: resolvedMapUrl })
|
|
8123
8119
|
] });
|
|
8124
8120
|
}
|
|
8125
|
-
function FullMapPopup({ onClose }) {
|
|
8121
|
+
function FullMapPopup({ onClose, mapUrl }) {
|
|
8126
8122
|
React5.useEffect(() => {
|
|
8127
8123
|
const handleEsc = (e) => {
|
|
8128
8124
|
if (e.key === "Escape") onClose();
|
|
@@ -8164,7 +8160,7 @@ function FullMapPopup({ onClose }) {
|
|
|
8164
8160
|
"iframe",
|
|
8165
8161
|
{
|
|
8166
8162
|
ref: iframeRef,
|
|
8167
|
-
src: "/map?embed=true",
|
|
8163
|
+
src: mapUrl ?? "/map?embed=true",
|
|
8168
8164
|
width: "100%",
|
|
8169
8165
|
height: "100%",
|
|
8170
8166
|
style: { border: 0 },
|
|
@@ -8598,7 +8594,7 @@ function PropertyOverview({
|
|
|
8598
8594
|
const annualDividend = resolvedValuation ? resolvedValuation * 0.02 : null;
|
|
8599
8595
|
const monthlyDivPerShare = annualDividend && resolvedTokensIssued ? annualDividend / 12 / resolvedTokensIssued : null;
|
|
8600
8596
|
const propertyStats = [
|
|
8601
|
-
{ label: "
|
|
8597
|
+
{ label: "Property Value", value: isLoading && tokenMarketCap == null ? loadingSkeleton : tokenMarketCap ? tokenMarketCap >= 1e6 ? `$${(tokenMarketCap / 1e6).toFixed(1)}M` : `$${tokenMarketCap.toLocaleString()}` : "\u2014" },
|
|
8602
8598
|
{ label: "Number of Offers", value: "3" },
|
|
8603
8599
|
{ label: "Growth (Past 5 Years)", value: "+90%" },
|
|
8604
8600
|
{ label: "Last Dividend", value: isLoading && monthlyDivPerShare == null ? loadingSkeleton : monthlyDivPerShare != null ? `${(monthlyDivPerShare * 100).toFixed(1)}c per Share` : "\u2014" },
|
|
@@ -8699,41 +8695,38 @@ function PropertyOverview({
|
|
|
8699
8695
|
) }),
|
|
8700
8696
|
/* @__PURE__ */ jsxRuntime.jsxs(Section, { children: [
|
|
8701
8697
|
/* @__PURE__ */ jsxRuntime.jsx(SectionHeader, { children: "Asset Details" }),
|
|
8702
|
-
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
8703
|
-
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
8704
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
8705
|
-
|
|
8706
|
-
/* @__PURE__ */ jsxRuntime.
|
|
8707
|
-
|
|
8708
|
-
|
|
8709
|
-
|
|
8710
|
-
|
|
8711
|
-
|
|
8712
|
-
|
|
8713
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
8714
|
-
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
8715
|
-
|
|
8716
|
-
|
|
8717
|
-
/* @__PURE__ */ jsxRuntime.jsx(MetricBig, { children: buildingSize?.toLocaleString() ?? "\u2014" }),
|
|
8718
|
-
/* @__PURE__ */ jsxRuntime.jsx(MetricUnit, { children: "sqm" })
|
|
8719
|
-
] })
|
|
8698
|
+
/* @__PURE__ */ jsxRuntime.jsxs(StatsGrid, { children: [
|
|
8699
|
+
/* @__PURE__ */ jsxRuntime.jsxs(StatsColumn, { children: [
|
|
8700
|
+
/* @__PURE__ */ jsxRuntime.jsx(StatsColumnHeader, { children: "Key Metrics" }),
|
|
8701
|
+
landSize != null && /* @__PURE__ */ jsxRuntime.jsxs(StatRow, { children: [
|
|
8702
|
+
/* @__PURE__ */ jsxRuntime.jsx(StatLabel, { children: "Land Size" }),
|
|
8703
|
+
/* @__PURE__ */ jsxRuntime.jsxs(StatValue, { children: [
|
|
8704
|
+
landSize.toLocaleString(),
|
|
8705
|
+
" sqm"
|
|
8706
|
+
] })
|
|
8707
|
+
] }),
|
|
8708
|
+
buildingSize != null && /* @__PURE__ */ jsxRuntime.jsxs(StatRow, { children: [
|
|
8709
|
+
/* @__PURE__ */ jsxRuntime.jsx(StatLabel, { children: "Floor Area" }),
|
|
8710
|
+
/* @__PURE__ */ jsxRuntime.jsxs(StatValue, { children: [
|
|
8711
|
+
buildingSize.toLocaleString(),
|
|
8712
|
+
" sqm"
|
|
8720
8713
|
] })
|
|
8721
8714
|
] }),
|
|
8722
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
8723
|
-
item.icon && /* @__PURE__ */ jsxRuntime.jsx(
|
|
8724
|
-
item.value && /* @__PURE__ */ jsxRuntime.jsx(
|
|
8725
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
8715
|
+
/* @__PURE__ */ jsxRuntime.jsx(AssetFeatureRow, { children: features.map((item, i) => /* @__PURE__ */ jsxRuntime.jsxs(AssetFeatureItem, { children: [
|
|
8716
|
+
item.icon && /* @__PURE__ */ jsxRuntime.jsx(AssetFeatureIcon, { children: item.icon }),
|
|
8717
|
+
item.value && /* @__PURE__ */ jsxRuntime.jsx(AssetFeatureValue, { children: item.value }),
|
|
8718
|
+
/* @__PURE__ */ jsxRuntime.jsx(AssetFeatureLabel, { children: item.label })
|
|
8726
8719
|
] }, i)) })
|
|
8727
8720
|
] }),
|
|
8728
|
-
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
8729
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
8730
|
-
|
|
8731
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
8732
|
-
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
8733
|
-
item.status && /* @__PURE__ */ jsxRuntime.jsx("span", { style: { display: "inline-block", width: 6, height: 6, borderRadius: "50%", background: item.status === "active" ? "#
|
|
8721
|
+
/* @__PURE__ */ jsxRuntime.jsxs(StatsColumn, { children: [
|
|
8722
|
+
/* @__PURE__ */ jsxRuntime.jsx(StatsColumnHeader, { children: "Property Info" }),
|
|
8723
|
+
propertyInfo.map((item, i) => /* @__PURE__ */ jsxRuntime.jsxs(StatRow, { children: [
|
|
8724
|
+
/* @__PURE__ */ jsxRuntime.jsx(StatLabel, { children: item.label }),
|
|
8725
|
+
/* @__PURE__ */ jsxRuntime.jsxs(StatValue, { style: { color: item.status === "active" ? "#4ade80" : item.status === "progress" ? "#D4AF37" : void 0 }, children: [
|
|
8726
|
+
item.status && /* @__PURE__ */ jsxRuntime.jsx("span", { style: { display: "inline-block", width: 6, height: 6, borderRadius: "50%", background: item.status === "active" ? "#4ade80" : "#D4AF37", marginRight: 6 } }),
|
|
8734
8727
|
item.value
|
|
8735
8728
|
] })
|
|
8736
|
-
] }, i))
|
|
8729
|
+
] }, i))
|
|
8737
8730
|
] })
|
|
8738
8731
|
] })
|
|
8739
8732
|
] }),
|
|
@@ -8765,46 +8758,71 @@ function PropertyOverview({
|
|
|
8765
8758
|
] }),
|
|
8766
8759
|
/* @__PURE__ */ jsxRuntime.jsxs(Section, { children: [
|
|
8767
8760
|
/* @__PURE__ */ jsxRuntime.jsx(SectionHeader, { children: "Tokenholder Security" }),
|
|
8768
|
-
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
8769
|
-
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
8770
|
-
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
8771
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
8772
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
8773
|
-
] }),
|
|
8774
|
-
/* @__PURE__ */ jsxRuntime.
|
|
8775
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
8776
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
8777
|
-
|
|
8761
|
+
/* @__PURE__ */ jsxRuntime.jsxs(SecurityCardsGrid, { children: [
|
|
8762
|
+
/* @__PURE__ */ jsxRuntime.jsxs(SecurityCard, { children: [
|
|
8763
|
+
/* @__PURE__ */ jsxRuntime.jsx(SecurityCardIcon, { children: /* @__PURE__ */ jsxRuntime.jsxs("svg", { width: "20", height: "20", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "1.5", strokeLinecap: "round", strokeLinejoin: "round", children: [
|
|
8764
|
+
/* @__PURE__ */ jsxRuntime.jsx("path", { d: "M9 12l2 2 4-4" }),
|
|
8765
|
+
/* @__PURE__ */ jsxRuntime.jsx("path", { d: "M12 3l8 4.5v5c0 5-3.5 8.5-8 10.5-4.5-2-8-5.5-8-10.5v-5l8-4.5z" })
|
|
8766
|
+
] }) }),
|
|
8767
|
+
/* @__PURE__ */ jsxRuntime.jsxs(SecurityCardContent, { children: [
|
|
8768
|
+
/* @__PURE__ */ jsxRuntime.jsx(SecurityCardTitle, { children: "Legal Structuring" }),
|
|
8769
|
+
/* @__PURE__ */ jsxRuntime.jsx(SecurityCardProvider, { children: /* @__PURE__ */ jsxRuntime.jsx("img", { src: "/Baker_McKenzie.png", alt: "Baker McKenzie", style: { height: 16, filter: "brightness(0) invert(1)", opacity: 0.7 } }) }),
|
|
8770
|
+
/* @__PURE__ */ jsxRuntime.jsxs(SecurityCardLinks, { children: [
|
|
8771
|
+
/* @__PURE__ */ jsxRuntime.jsx(SecurityDocLink, { href: "#documents", children: "Legal Opinion" }),
|
|
8772
|
+
/* @__PURE__ */ jsxRuntime.jsx(SecurityDocLink, { href: "#documents", children: "Structuring Memo" })
|
|
8773
|
+
] })
|
|
8774
|
+
] })
|
|
8778
8775
|
] }),
|
|
8779
|
-
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
8780
|
-
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
8781
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
8782
|
-
/* @__PURE__ */ jsxRuntime.
|
|
8776
|
+
/* @__PURE__ */ jsxRuntime.jsxs(SecurityCard, { children: [
|
|
8777
|
+
/* @__PURE__ */ jsxRuntime.jsx(SecurityCardIcon, { children: /* @__PURE__ */ jsxRuntime.jsxs("svg", { width: "20", height: "20", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "1.5", strokeLinecap: "round", strokeLinejoin: "round", children: [
|
|
8778
|
+
/* @__PURE__ */ jsxRuntime.jsx("rect", { x: "3", y: "11", width: "18", height: "11", rx: "2" }),
|
|
8779
|
+
/* @__PURE__ */ jsxRuntime.jsx("path", { d: "M7 11V7a5 5 0 0 1 10 0v4" })
|
|
8780
|
+
] }) }),
|
|
8781
|
+
/* @__PURE__ */ jsxRuntime.jsxs(SecurityCardContent, { children: [
|
|
8782
|
+
/* @__PURE__ */ jsxRuntime.jsx(SecurityCardTitle, { children: "Security Interest in Asset" }),
|
|
8783
|
+
/* @__PURE__ */ jsxRuntime.jsxs(SecurityCardStatus, { children: [
|
|
8783
8784
|
/* @__PURE__ */ jsxRuntime.jsx(SecurityStatusDot, {}),
|
|
8784
8785
|
"Secured \u2014 NSW Land Registry"
|
|
8786
|
+
] }),
|
|
8787
|
+
/* @__PURE__ */ jsxRuntime.jsxs(SecurityCardLinks, { children: [
|
|
8788
|
+
/* @__PURE__ */ jsxRuntime.jsx(SecurityDocLink, { href: "#documents", children: "Mortgage Agreement" }),
|
|
8789
|
+
/* @__PURE__ */ jsxRuntime.jsx(SecurityDocLink, { href: "#documents", children: "Registry Filing" })
|
|
8785
8790
|
] })
|
|
8786
|
-
] })
|
|
8787
|
-
/* @__PURE__ */ jsxRuntime.jsx(SecurityRowRight, { children: /* @__PURE__ */ jsxRuntime.jsxs(SecurityRowLinks, { children: [
|
|
8788
|
-
/* @__PURE__ */ jsxRuntime.jsx(SecurityDocLink, { href: "#documents", children: "Mortgage Agreement" }),
|
|
8789
|
-
/* @__PURE__ */ jsxRuntime.jsx(SecurityDocLink, { href: "#documents", children: "Registry Filing" })
|
|
8790
|
-
] }) })
|
|
8791
|
+
] })
|
|
8791
8792
|
] }),
|
|
8792
|
-
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
8793
|
-
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
8794
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
8795
|
-
/* @__PURE__ */ jsxRuntime.
|
|
8793
|
+
/* @__PURE__ */ jsxRuntime.jsxs(SecurityCard, { children: [
|
|
8794
|
+
/* @__PURE__ */ jsxRuntime.jsx(SecurityCardIcon, { children: /* @__PURE__ */ jsxRuntime.jsxs("svg", { width: "20", height: "20", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "1.5", strokeLinecap: "round", strokeLinejoin: "round", children: [
|
|
8795
|
+
/* @__PURE__ */ jsxRuntime.jsx("path", { d: "M3 21h18" }),
|
|
8796
|
+
/* @__PURE__ */ jsxRuntime.jsx("path", { d: "M5 21V7l8-4v18" }),
|
|
8797
|
+
/* @__PURE__ */ jsxRuntime.jsx("path", { d: "M19 21V11l-6-4" }),
|
|
8798
|
+
/* @__PURE__ */ jsxRuntime.jsx("path", { d: "M9 9v.01" }),
|
|
8799
|
+
/* @__PURE__ */ jsxRuntime.jsx("path", { d: "M9 12v.01" }),
|
|
8800
|
+
/* @__PURE__ */ jsxRuntime.jsx("path", { d: "M9 15v.01" }),
|
|
8801
|
+
/* @__PURE__ */ jsxRuntime.jsx("path", { d: "M9 18v.01" })
|
|
8802
|
+
] }) }),
|
|
8803
|
+
/* @__PURE__ */ jsxRuntime.jsxs(SecurityCardContent, { children: [
|
|
8804
|
+
/* @__PURE__ */ jsxRuntime.jsx(SecurityCardTitle, { children: "Bankruptcy Remote" }),
|
|
8805
|
+
/* @__PURE__ */ jsxRuntime.jsxs(SecurityCardStatus, { children: [
|
|
8796
8806
|
/* @__PURE__ */ jsxRuntime.jsx(SecurityStatusDot, {}),
|
|
8797
8807
|
"Active \u2014 Dedicated SPV"
|
|
8798
|
-
] })
|
|
8799
|
-
|
|
8800
|
-
|
|
8808
|
+
] }),
|
|
8809
|
+
/* @__PURE__ */ jsxRuntime.jsx(SecurityCardLinks, { children: /* @__PURE__ */ jsxRuntime.jsx(SecurityDocLink, { href: "#documents", children: "SPV Constitution" }) })
|
|
8810
|
+
] })
|
|
8801
8811
|
] }),
|
|
8802
|
-
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
8803
|
-
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
8804
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
8805
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
8806
|
-
|
|
8807
|
-
|
|
8812
|
+
/* @__PURE__ */ jsxRuntime.jsxs(SecurityCard, { children: [
|
|
8813
|
+
/* @__PURE__ */ jsxRuntime.jsx(SecurityCardIcon, { children: /* @__PURE__ */ jsxRuntime.jsxs("svg", { width: "20", height: "20", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "1.5", strokeLinecap: "round", strokeLinejoin: "round", children: [
|
|
8814
|
+
/* @__PURE__ */ jsxRuntime.jsx("path", { d: "M16 3h5v5" }),
|
|
8815
|
+
/* @__PURE__ */ jsxRuntime.jsx("path", { d: "M8 3H3v5" }),
|
|
8816
|
+
/* @__PURE__ */ jsxRuntime.jsx("path", { d: "M12 22l-4-4 4-4" }),
|
|
8817
|
+
/* @__PURE__ */ jsxRuntime.jsx("path", { d: "M12 22l4-4-4-4" }),
|
|
8818
|
+
/* @__PURE__ */ jsxRuntime.jsx("path", { d: "M21 3l-9 9" }),
|
|
8819
|
+
/* @__PURE__ */ jsxRuntime.jsx("path", { d: "M3 3l9 9" })
|
|
8820
|
+
] }) }),
|
|
8821
|
+
/* @__PURE__ */ jsxRuntime.jsxs(SecurityCardContent, { children: [
|
|
8822
|
+
/* @__PURE__ */ jsxRuntime.jsx(SecurityCardTitle, { children: "Independent Valuation" }),
|
|
8823
|
+
/* @__PURE__ */ jsxRuntime.jsx(SecurityCardProvider, { children: /* @__PURE__ */ jsxRuntime.jsx("img", { src: "/savills.png", alt: "Savills", style: { height: 14, filter: "brightness(0) invert(1)", opacity: 0.7 } }) }),
|
|
8824
|
+
/* @__PURE__ */ jsxRuntime.jsx(SecurityCardLinks, { children: /* @__PURE__ */ jsxRuntime.jsx(SecurityDocLink, { href: "#documents", children: "Valuation Report" }) })
|
|
8825
|
+
] })
|
|
8808
8826
|
] })
|
|
8809
8827
|
] })
|
|
8810
8828
|
] })
|
|
@@ -8819,6 +8837,7 @@ function DividendHistoryPopup({
|
|
|
8819
8837
|
onClose
|
|
8820
8838
|
}) {
|
|
8821
8839
|
const { records, priceHistory } = generateDividendHistory(valuation ?? 0, totalTokens ?? 0, tokenPrice ?? 0, realPriceHistory);
|
|
8840
|
+
const [highlightedIdx, setHighlightedIdx] = React5.useState(null);
|
|
8822
8841
|
React5.useEffect(() => {
|
|
8823
8842
|
const handleEsc = (e) => {
|
|
8824
8843
|
if (e.key === "Escape") onClose();
|
|
@@ -8836,29 +8855,33 @@ function DividendHistoryPopup({
|
|
|
8836
8855
|
const pad = { top: 20, right: 40, bottom: 30, left: 50 };
|
|
8837
8856
|
const w = chartW - pad.left - pad.right;
|
|
8838
8857
|
const h = chartH - pad.top - pad.bottom;
|
|
8839
|
-
const
|
|
8840
|
-
const
|
|
8858
|
+
const now = Date.now();
|
|
8859
|
+
const twelveMonthsAgo = now - 365 * 864e5;
|
|
8860
|
+
const minTime = Math.min(priceHistory[0]?.time ?? twelveMonthsAgo, twelveMonthsAgo);
|
|
8861
|
+
const maxTime = Math.max(priceHistory[priceHistory.length - 1]?.time ?? now, now);
|
|
8841
8862
|
const prices = priceHistory.map((p) => p.price);
|
|
8842
8863
|
const minP = Math.floor(Math.min(...prices) - 5);
|
|
8843
8864
|
const maxP = Math.ceil(Math.max(...prices) + 5);
|
|
8844
8865
|
const toX = (t) => pad.left + (t - minTime) / (maxTime - minTime) * w;
|
|
8845
8866
|
const toY = (p) => pad.top + (1 - (p - minP) / (maxP - minP)) * h;
|
|
8846
8867
|
const linePath = priceHistory.map((p, i) => `${i === 0 ? "M" : "L"}${toX(p.time).toFixed(1)},${toY(p.price).toFixed(1)}`).join(" ");
|
|
8847
|
-
const areaPath = `${linePath} L${toX(priceHistory[priceHistory.length - 1].time).toFixed(1)},${(pad.top + h).toFixed(1)} L${toX(priceHistory[0].time).toFixed(1)},${(pad.top + h).toFixed(1)} Z
|
|
8868
|
+
const areaPath = priceHistory.length > 0 ? `${linePath} L${toX(priceHistory[priceHistory.length - 1].time).toFixed(1)},${(pad.top + h).toFixed(1)} L${toX(priceHistory[0].time).toFixed(1)},${(pad.top + h).toFixed(1)} Z` : "";
|
|
8848
8869
|
const yTicks = Array.from({ length: 5 }, (_, i) => minP + (maxP - minP) / 4 * i);
|
|
8849
8870
|
const monthLabels = [];
|
|
8850
|
-
|
|
8851
|
-
|
|
8852
|
-
|
|
8853
|
-
|
|
8854
|
-
|
|
8855
|
-
|
|
8856
|
-
|
|
8857
|
-
|
|
8858
|
-
|
|
8859
|
-
|
|
8860
|
-
|
|
8861
|
-
|
|
8871
|
+
for (let i = 11; i >= 0; i--) {
|
|
8872
|
+
const d = /* @__PURE__ */ new Date();
|
|
8873
|
+
d.setMonth(d.getMonth() - i, 1);
|
|
8874
|
+
monthLabels.push({ time: d.getTime(), label: d.toLocaleDateString("en-AU", { month: "short" }) });
|
|
8875
|
+
}
|
|
8876
|
+
const divMarkers = dividendDates.map((t, idx) => {
|
|
8877
|
+
const closest = priceHistory.length > 0 ? priceHistory.reduce((best, p) => Math.abs(p.time - t) < Math.abs(best.time - t) ? p : best) : null;
|
|
8878
|
+
return {
|
|
8879
|
+
x: toX(t),
|
|
8880
|
+
y: closest ? toY(closest.price) : toY((minP + maxP) / 2),
|
|
8881
|
+
price: closest?.price ?? 0,
|
|
8882
|
+
recordIdx: idx,
|
|
8883
|
+
hasPrice: !!closest
|
|
8884
|
+
};
|
|
8862
8885
|
});
|
|
8863
8886
|
return /* @__PURE__ */ jsxRuntime.jsx(DivPopupOverlay, { onClick: onClose, children: /* @__PURE__ */ jsxRuntime.jsxs(DivPopupPanel, { onClick: (e) => e.stopPropagation(), children: [
|
|
8864
8887
|
/* @__PURE__ */ jsxRuntime.jsxs(DivPopupHeader, { children: [
|
|
@@ -8882,13 +8905,26 @@ function DividendHistoryPopup({
|
|
|
8882
8905
|
/* @__PURE__ */ jsxRuntime.jsx("stop", { offset: "0%", stopColor: "rgba(230,200,126,0.2)" }),
|
|
8883
8906
|
/* @__PURE__ */ jsxRuntime.jsx("stop", { offset: "100%", stopColor: "rgba(230,200,126,0)" })
|
|
8884
8907
|
] }) }),
|
|
8885
|
-
/* @__PURE__ */ jsxRuntime.jsx("path", { d: areaPath, fill: "url(#divAreaGrad)" }),
|
|
8908
|
+
areaPath && /* @__PURE__ */ jsxRuntime.jsx("path", { d: areaPath, fill: "url(#divAreaGrad)" }),
|
|
8886
8909
|
/* @__PURE__ */ jsxRuntime.jsx("path", { d: linePath, fill: "none", stroke: "#e6c87e", strokeWidth: "1.5" }),
|
|
8887
|
-
divMarkers.map((m
|
|
8888
|
-
|
|
8889
|
-
/* @__PURE__ */ jsxRuntime.
|
|
8890
|
-
|
|
8891
|
-
|
|
8910
|
+
divMarkers.map((m) => {
|
|
8911
|
+
const active = highlightedIdx === m.recordIdx;
|
|
8912
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
8913
|
+
"g",
|
|
8914
|
+
{
|
|
8915
|
+
onMouseEnter: () => setHighlightedIdx(m.recordIdx),
|
|
8916
|
+
onMouseLeave: () => setHighlightedIdx(null),
|
|
8917
|
+
style: { cursor: "pointer" },
|
|
8918
|
+
children: [
|
|
8919
|
+
/* @__PURE__ */ jsxRuntime.jsx("rect", { x: m.x - 10, y: pad.top, width: 20, height: h, fill: "transparent" }),
|
|
8920
|
+
/* @__PURE__ */ jsxRuntime.jsx("line", { x1: m.x, x2: m.x, y1: m.y, y2: pad.top + h, stroke: active ? "rgba(14,203,129,0.6)" : "rgba(14,203,129,0.25)", strokeWidth: active ? 1.5 : 1, strokeDasharray: "3,3" }),
|
|
8921
|
+
/* @__PURE__ */ jsxRuntime.jsx("circle", { cx: m.x, cy: m.y, r: active ? 6 : 4, fill: active ? "#0ecb81" : "#111", stroke: "#0ecb81", strokeWidth: active ? 2 : 1.5, style: { transition: "r 0.15s ease" } }),
|
|
8922
|
+
/* @__PURE__ */ jsxRuntime.jsx("text", { x: m.x, y: m.y - (active ? 10 : 8), fill: "#0ecb81", fontSize: active ? "9" : "8", fontWeight: "600", textAnchor: "middle", children: "$" })
|
|
8923
|
+
]
|
|
8924
|
+
},
|
|
8925
|
+
m.recordIdx
|
|
8926
|
+
);
|
|
8927
|
+
})
|
|
8892
8928
|
] }),
|
|
8893
8929
|
/* @__PURE__ */ jsxRuntime.jsxs(DivChartLegend, { children: [
|
|
8894
8930
|
/* @__PURE__ */ jsxRuntime.jsxs(DivChartLegendItem, { children: [
|
|
@@ -8908,18 +8944,27 @@ function DividendHistoryPopup({
|
|
|
8908
8944
|
/* @__PURE__ */ jsxRuntime.jsx(DivTableTH, { style: { textAlign: "right" }, children: "Dividend/Share" }),
|
|
8909
8945
|
/* @__PURE__ */ jsxRuntime.jsx(DivTableTH, { style: { textAlign: "right" }, children: "Annualised Yield" })
|
|
8910
8946
|
] }) }),
|
|
8911
|
-
/* @__PURE__ */ jsxRuntime.jsx("tbody", { children: records.map((r, i) => /* @__PURE__ */ jsxRuntime.jsxs(
|
|
8912
|
-
|
|
8913
|
-
|
|
8914
|
-
|
|
8915
|
-
|
|
8916
|
-
|
|
8917
|
-
|
|
8918
|
-
|
|
8919
|
-
|
|
8920
|
-
|
|
8921
|
-
|
|
8922
|
-
|
|
8947
|
+
/* @__PURE__ */ jsxRuntime.jsx("tbody", { children: records.map((r, i) => /* @__PURE__ */ jsxRuntime.jsxs(
|
|
8948
|
+
DivTableRow,
|
|
8949
|
+
{
|
|
8950
|
+
$highlighted: highlightedIdx === i,
|
|
8951
|
+
onMouseEnter: () => setHighlightedIdx(i),
|
|
8952
|
+
onMouseLeave: () => setHighlightedIdx(null),
|
|
8953
|
+
children: [
|
|
8954
|
+
/* @__PURE__ */ jsxRuntime.jsx(DivTableTD, { children: r.exDate }),
|
|
8955
|
+
/* @__PURE__ */ jsxRuntime.jsx(DivTableTD, { children: r.payDate }),
|
|
8956
|
+
/* @__PURE__ */ jsxRuntime.jsxs(DivTableTD, { style: { textAlign: "right", fontVariantNumeric: "tabular-nums" }, children: [
|
|
8957
|
+
"$",
|
|
8958
|
+
r.perShare.toFixed(4)
|
|
8959
|
+
] }),
|
|
8960
|
+
/* @__PURE__ */ jsxRuntime.jsxs(DivTableTD, { style: { textAlign: "right", fontVariantNumeric: "tabular-nums" }, children: [
|
|
8961
|
+
r.yieldPct.toFixed(2),
|
|
8962
|
+
"%"
|
|
8963
|
+
] })
|
|
8964
|
+
]
|
|
8965
|
+
},
|
|
8966
|
+
i
|
|
8967
|
+
)) })
|
|
8923
8968
|
] }) })
|
|
8924
8969
|
] }) });
|
|
8925
8970
|
}
|
|
@@ -9109,68 +9154,35 @@ var StatValue = styled9__default.default.span`
|
|
|
9109
9154
|
color: ${(p) => p.$gold ? "#D4AF37" : "#fff"};
|
|
9110
9155
|
font-variant-numeric: tabular-nums;
|
|
9111
9156
|
`;
|
|
9112
|
-
var
|
|
9113
|
-
display: grid;
|
|
9114
|
-
grid-template-columns: 1fr 1fr;
|
|
9115
|
-
gap: 1rem;
|
|
9116
|
-
@media (max-width: 768px) { grid-template-columns: 1fr; }
|
|
9117
|
-
`;
|
|
9118
|
-
var MetricsPanel = styled9__default.default.div`
|
|
9119
|
-
background: rgba(255,255,255,0.025);
|
|
9120
|
-
border-radius: 10px;
|
|
9121
|
-
border: 1px solid rgba(255,255,255,0.06);
|
|
9122
|
-
padding: 1.25rem 1.5rem;
|
|
9123
|
-
overflow: hidden;
|
|
9124
|
-
`;
|
|
9125
|
-
var InfoPanel = styled9__default.default(MetricsPanel)``;
|
|
9126
|
-
var MetricsPanelTitle = styled9__default.default.div`
|
|
9127
|
-
font-size: 0.65rem;
|
|
9128
|
-
color: #D4AF37;
|
|
9129
|
-
text-transform: uppercase;
|
|
9130
|
-
letter-spacing: 0.12em;
|
|
9131
|
-
font-weight: 600;
|
|
9132
|
-
margin-bottom: 1rem;
|
|
9133
|
-
padding-bottom: 0.75rem;
|
|
9134
|
-
border-bottom: 1px solid rgba(255,255,255,0.06);
|
|
9135
|
-
`;
|
|
9136
|
-
var LandFloorCard = styled9__default.default.div`
|
|
9137
|
-
background: linear-gradient(135deg, rgba(212,175,55,0.12), rgba(184,134,11,0.06));
|
|
9138
|
-
border-radius: 10px;
|
|
9139
|
-
padding: 0.85rem 1rem;
|
|
9140
|
-
border: 1px solid rgba(212,175,55,0.25);
|
|
9157
|
+
var AssetFeatureRow = styled9__default.default.div`
|
|
9141
9158
|
display: flex;
|
|
9142
|
-
|
|
9143
|
-
|
|
9159
|
+
flex-wrap: wrap;
|
|
9160
|
+
gap: 0.5rem 1.25rem;
|
|
9161
|
+
padding-top: 0.75rem;
|
|
9162
|
+
margin-top: 0.25rem;
|
|
9163
|
+
border-top: 1px solid rgba(255,255,255,0.04);
|
|
9144
9164
|
`;
|
|
9145
|
-
var
|
|
9146
|
-
|
|
9147
|
-
|
|
9148
|
-
|
|
9149
|
-
letter-spacing: 0.1em;
|
|
9150
|
-
margin-bottom: 0.4rem;
|
|
9151
|
-
font-weight: 500;
|
|
9165
|
+
var AssetFeatureItem = styled9__default.default.div`
|
|
9166
|
+
display: flex;
|
|
9167
|
+
align-items: center;
|
|
9168
|
+
gap: 0.35rem;
|
|
9152
9169
|
`;
|
|
9153
|
-
var
|
|
9170
|
+
var AssetFeatureIcon = styled9__default.default.span`
|
|
9171
|
+
color: rgba(255,255,255,0.35);
|
|
9154
9172
|
display: flex;
|
|
9155
|
-
align-items:
|
|
9156
|
-
|
|
9173
|
+
align-items: center;
|
|
9174
|
+
flex-shrink: 0;
|
|
9157
9175
|
`;
|
|
9158
|
-
var
|
|
9159
|
-
font-size:
|
|
9160
|
-
font-weight:
|
|
9161
|
-
color: #
|
|
9176
|
+
var AssetFeatureValue = styled9__default.default.span`
|
|
9177
|
+
font-size: 0.95rem;
|
|
9178
|
+
font-weight: 600;
|
|
9179
|
+
color: #fff;
|
|
9162
9180
|
line-height: 1;
|
|
9163
9181
|
`;
|
|
9164
|
-
var
|
|
9165
|
-
font-size: 0.
|
|
9166
|
-
color: rgba(
|
|
9167
|
-
font-weight:
|
|
9168
|
-
`;
|
|
9169
|
-
var FeaturesGrid = styled9__default.default.div`
|
|
9170
|
-
display: grid;
|
|
9171
|
-
grid-template-columns: repeat(3, 1fr);
|
|
9172
|
-
gap: 0.75rem;
|
|
9173
|
-
@media (max-width: 768px) { grid-template-columns: repeat(2, 1fr); }
|
|
9182
|
+
var AssetFeatureLabel = styled9__default.default.span`
|
|
9183
|
+
font-size: 0.8rem;
|
|
9184
|
+
color: rgba(255,255,255,0.5);
|
|
9185
|
+
font-weight: 400;
|
|
9174
9186
|
`;
|
|
9175
9187
|
var TradingHoursCard = styled9__default.default.div`
|
|
9176
9188
|
background: rgba(255,255,255,0.025);
|
|
@@ -9205,40 +9217,56 @@ var TradingHoursNote = styled9__default.default.div`
|
|
|
9205
9217
|
color: rgba(255,255,255,0.35);
|
|
9206
9218
|
border-top: 1px solid rgba(255,255,255,0.04);
|
|
9207
9219
|
`;
|
|
9208
|
-
var
|
|
9220
|
+
var SecurityCardsGrid = styled9__default.default.div`
|
|
9221
|
+
display: grid;
|
|
9222
|
+
grid-template-columns: 1fr 1fr;
|
|
9223
|
+
gap: 0.75rem;
|
|
9224
|
+
@media (max-width: 768px) { grid-template-columns: 1fr; }
|
|
9225
|
+
`;
|
|
9226
|
+
var SecurityCard = styled9__default.default.div`
|
|
9227
|
+
background: rgba(255,255,255,0.025);
|
|
9228
|
+
border: 1px solid rgba(255,255,255,0.06);
|
|
9229
|
+
border-radius: 10px;
|
|
9230
|
+
padding: 1.25rem;
|
|
9209
9231
|
display: flex;
|
|
9210
|
-
|
|
9232
|
+
gap: 1rem;
|
|
9233
|
+
transition: border-color 0.2s ease;
|
|
9234
|
+
&:hover { border-color: rgba(255,255,255,0.12); }
|
|
9211
9235
|
`;
|
|
9212
|
-
var
|
|
9236
|
+
var SecurityCardIcon = styled9__default.default.div`
|
|
9237
|
+
width: 40px;
|
|
9238
|
+
height: 40px;
|
|
9239
|
+
border-radius: 10px;
|
|
9240
|
+
background: rgba(74,222,128,0.08);
|
|
9241
|
+
border: 1px solid rgba(74,222,128,0.15);
|
|
9213
9242
|
display: flex;
|
|
9214
9243
|
align-items: center;
|
|
9215
|
-
justify-content:
|
|
9216
|
-
|
|
9217
|
-
|
|
9218
|
-
gap: 1rem;
|
|
9219
|
-
@media (max-width: 640px) { flex-direction: column; align-items: flex-start; }
|
|
9244
|
+
justify-content: center;
|
|
9245
|
+
flex-shrink: 0;
|
|
9246
|
+
color: #4ade80;
|
|
9220
9247
|
`;
|
|
9221
|
-
var
|
|
9248
|
+
var SecurityCardContent = styled9__default.default.div`
|
|
9222
9249
|
display: flex;
|
|
9223
9250
|
flex-direction: column;
|
|
9224
9251
|
gap: 4px;
|
|
9252
|
+
min-width: 0;
|
|
9225
9253
|
`;
|
|
9226
|
-
var
|
|
9227
|
-
font-size: 0.
|
|
9254
|
+
var SecurityCardTitle = styled9__default.default.div`
|
|
9255
|
+
font-size: 0.85rem;
|
|
9228
9256
|
font-weight: 600;
|
|
9229
9257
|
color: #fff;
|
|
9230
9258
|
`;
|
|
9231
|
-
var
|
|
9259
|
+
var SecurityCardStatus = styled9__default.default.div`
|
|
9232
9260
|
display: flex;
|
|
9233
9261
|
align-items: center;
|
|
9234
9262
|
gap: 6px;
|
|
9235
|
-
font-size: 0.
|
|
9263
|
+
font-size: 0.75rem;
|
|
9236
9264
|
color: rgba(255,255,255,0.5);
|
|
9237
9265
|
`;
|
|
9238
|
-
var
|
|
9266
|
+
var SecurityCardProvider = styled9__default.default.div`
|
|
9239
9267
|
display: flex;
|
|
9240
9268
|
align-items: center;
|
|
9241
|
-
margin-top:
|
|
9269
|
+
margin-top: 1px;
|
|
9242
9270
|
`;
|
|
9243
9271
|
var SecurityStatusDot = styled9__default.default.span`
|
|
9244
9272
|
width: 6px;
|
|
@@ -9248,21 +9276,17 @@ var SecurityStatusDot = styled9__default.default.span`
|
|
|
9248
9276
|
display: inline-block;
|
|
9249
9277
|
flex-shrink: 0;
|
|
9250
9278
|
`;
|
|
9251
|
-
var
|
|
9252
|
-
display: flex;
|
|
9253
|
-
align-items: center;
|
|
9254
|
-
flex-shrink: 0;
|
|
9255
|
-
`;
|
|
9256
|
-
var SecurityRowLinks = styled9__default.default.div`
|
|
9279
|
+
var SecurityCardLinks = styled9__default.default.div`
|
|
9257
9280
|
display: flex;
|
|
9258
|
-
gap:
|
|
9281
|
+
gap: 0.75rem;
|
|
9282
|
+
margin-top: 4px;
|
|
9259
9283
|
`;
|
|
9260
9284
|
var SecurityDocLink = styled9__default.default.a`
|
|
9261
|
-
font-size: 0.
|
|
9262
|
-
color: rgba(255,255,255,0.
|
|
9285
|
+
font-size: 0.72rem;
|
|
9286
|
+
color: rgba(255,255,255,0.4);
|
|
9263
9287
|
text-decoration: underline;
|
|
9264
9288
|
text-underline-offset: 3px;
|
|
9265
|
-
text-decoration-color: rgba(255,255,255,0.
|
|
9289
|
+
text-decoration-color: rgba(255,255,255,0.15);
|
|
9266
9290
|
cursor: pointer;
|
|
9267
9291
|
transition: color 0.15s, text-decoration-color 0.15s;
|
|
9268
9292
|
&:hover {
|
|
@@ -9465,7 +9489,11 @@ var DivTableTH = styled9__default.default.th`
|
|
|
9465
9489
|
`;
|
|
9466
9490
|
var DivTableRow = styled9__default.default.tr`
|
|
9467
9491
|
border-bottom: 1px solid rgba(255,255,255,0.03);
|
|
9492
|
+
background: ${(p) => p.$highlighted ? "rgba(14,203,129,0.08)" : "transparent"};
|
|
9493
|
+
transition: background 0.15s ease;
|
|
9494
|
+
cursor: pointer;
|
|
9468
9495
|
&:last-child { border-bottom: none; }
|
|
9496
|
+
&:hover { background: rgba(14,203,129,0.08); }
|
|
9469
9497
|
`;
|
|
9470
9498
|
var DivTableTD = styled9__default.default.td`
|
|
9471
9499
|
padding: 0.55rem 0.5rem;
|
|
@@ -10531,7 +10559,7 @@ function AssetSelectorBar({
|
|
|
10531
10559
|
i > 0 && /* @__PURE__ */ jsxRuntime.jsx(Separator, { children: "|" }),
|
|
10532
10560
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { style: { display: "flex", alignItems: "center", gap: "0.5rem" }, children: [
|
|
10533
10561
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
|
|
10534
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
10562
|
+
/* @__PURE__ */ jsxRuntime.jsx(MetricLabel, { children: m.label }),
|
|
10535
10563
|
/* @__PURE__ */ jsxRuntime.jsx(MetricValue, { $accent: !!m.accent, $secondary: !!m.secondary, children: m.value })
|
|
10536
10564
|
] }),
|
|
10537
10565
|
m.change != null && /* @__PURE__ */ jsxRuntime.jsxs(MetricChange, { $positive: m.change >= 0, children: [
|
|
@@ -10671,7 +10699,7 @@ var SelectorMetrics = styled9__default.default.div`
|
|
|
10671
10699
|
gap: 0.5rem;
|
|
10672
10700
|
}
|
|
10673
10701
|
`;
|
|
10674
|
-
var
|
|
10702
|
+
var MetricLabel = styled9__default.default.span`
|
|
10675
10703
|
font-size: 0.75rem;
|
|
10676
10704
|
color: var(--color-text-secondary);
|
|
10677
10705
|
text-transform: uppercase;
|
|
@@ -10980,14 +11008,14 @@ function OfferingProgressCard({
|
|
|
10980
11008
|
] }) : /* @__PURE__ */ jsxRuntime.jsx(PreLiveStatus, { $statusColor: statusColor, children: "Sale Not Yet Open" }),
|
|
10981
11009
|
/* @__PURE__ */ jsxRuntime.jsxs(MetricsRow, { children: [
|
|
10982
11010
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
|
|
10983
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
11011
|
+
/* @__PURE__ */ jsxRuntime.jsx(MetricLabel2, { children: isPrivateClient ? "Token Price (Pre-Offering)" : "Token Price" }),
|
|
10984
11012
|
/* @__PURE__ */ jsxRuntime.jsxs(MetricValue2, { $accent: true, children: [
|
|
10985
11013
|
"$",
|
|
10986
11014
|
tokenPrice.toLocaleString(void 0, { minimumFractionDigits: 2, maximumFractionDigits: 2 })
|
|
10987
11015
|
] })
|
|
10988
11016
|
] }),
|
|
10989
11017
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { style: { textAlign: "right" }, children: [
|
|
10990
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
11018
|
+
/* @__PURE__ */ jsxRuntime.jsx(MetricLabel2, { children: isPrivateClient ? "Offering Valuation (Pre-Offering)" : "Offering Valuation" }),
|
|
10991
11019
|
/* @__PURE__ */ jsxRuntime.jsxs(MetricValue2, { children: [
|
|
10992
11020
|
"$",
|
|
10993
11021
|
offeringValuation.toLocaleString()
|
|
@@ -11112,7 +11140,7 @@ var MetricsRow = styled9__default.default.div`
|
|
|
11112
11140
|
border-top: 1px solid rgba(255,255,255,0.06);
|
|
11113
11141
|
padding-top: 1rem;
|
|
11114
11142
|
`;
|
|
11115
|
-
var
|
|
11143
|
+
var MetricLabel2 = styled9__default.default.div`
|
|
11116
11144
|
font-size: 0.6rem;
|
|
11117
11145
|
color: var(--color-text-secondary);
|
|
11118
11146
|
text-transform: uppercase;
|