@loafmarkets/ui 0.1.351 → 0.1.353

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 CHANGED
@@ -778,8 +778,17 @@ type PropertyOverviewProps = {
778
778
  time: number;
779
779
  close: number;
780
780
  }[] | null;
781
- };
782
- declare function PropertyOverview({ propertyName: _propertyName, location, midPrice, onTradeClick, onDocumentsClick, onPhotosClick, description: descriptionProp, tradeButtonLabel, images, galleryCategories, videoUrl, tokenName, landSizeSqm: landProp, buildingSizeSqm: buildingProp, features: featuresProp, propertyInfo: _propertyInfoProp, overviewData, bedrooms, bathrooms, carSpaces, propertyTypeLabel, tokensIssued: tokensIssuedProp, isLoading, ticker, contractAddress, chain, volume24h, openOrdersValue, holderCount, priceHistory: priceHistoryProp, }: PropertyOverviewProps): react_jsx_runtime.JSX.Element;
781
+ /** Beta mode: hide sections that are hardcoded with no backend source (offers, narratives, mock holders, synthetic dividend history, tokenholder security). */
782
+ beta?: boolean;
783
+ /** Live market hours from the trade/token API. When present, Trading Hours renders from it; when absent it is gated by `beta`. */
784
+ marketHours?: {
785
+ marketOpenTime: string;
786
+ marketCloseTime: string;
787
+ marketTimezone: string;
788
+ marketClosedDays: readonly string[];
789
+ } | null;
790
+ };
791
+ declare function PropertyOverview({ propertyName: _propertyName, location, midPrice, onTradeClick, onDocumentsClick, onPhotosClick, description: descriptionProp, tradeButtonLabel, images, galleryCategories, videoUrl, tokenName, landSizeSqm: landProp, buildingSizeSqm: buildingProp, features: featuresProp, propertyInfo: _propertyInfoProp, overviewData, bedrooms, bathrooms, carSpaces, propertyTypeLabel, tokensIssued: tokensIssuedProp, isLoading, ticker, contractAddress, chain, volume24h, openOrdersValue, holderCount, priceHistory: priceHistoryProp, beta, marketHours, }: PropertyOverviewProps): react_jsx_runtime.JSX.Element;
783
792
 
784
793
  type OfferStatus = 'active' | 'rejected' | 'expired' | 'historical' | 'pending';
785
794
  type PropertyOffer = {
package/dist/index.d.ts CHANGED
@@ -778,8 +778,17 @@ type PropertyOverviewProps = {
778
778
  time: number;
779
779
  close: number;
780
780
  }[] | null;
781
- };
782
- declare function PropertyOverview({ propertyName: _propertyName, location, midPrice, onTradeClick, onDocumentsClick, onPhotosClick, description: descriptionProp, tradeButtonLabel, images, galleryCategories, videoUrl, tokenName, landSizeSqm: landProp, buildingSizeSqm: buildingProp, features: featuresProp, propertyInfo: _propertyInfoProp, overviewData, bedrooms, bathrooms, carSpaces, propertyTypeLabel, tokensIssued: tokensIssuedProp, isLoading, ticker, contractAddress, chain, volume24h, openOrdersValue, holderCount, priceHistory: priceHistoryProp, }: PropertyOverviewProps): react_jsx_runtime.JSX.Element;
781
+ /** Beta mode: hide sections that are hardcoded with no backend source (offers, narratives, mock holders, synthetic dividend history, tokenholder security). */
782
+ beta?: boolean;
783
+ /** Live market hours from the trade/token API. When present, Trading Hours renders from it; when absent it is gated by `beta`. */
784
+ marketHours?: {
785
+ marketOpenTime: string;
786
+ marketCloseTime: string;
787
+ marketTimezone: string;
788
+ marketClosedDays: readonly string[];
789
+ } | null;
790
+ };
791
+ declare function PropertyOverview({ propertyName: _propertyName, location, midPrice, onTradeClick, onDocumentsClick, onPhotosClick, description: descriptionProp, tradeButtonLabel, images, galleryCategories, videoUrl, tokenName, landSizeSqm: landProp, buildingSizeSqm: buildingProp, features: featuresProp, propertyInfo: _propertyInfoProp, overviewData, bedrooms, bathrooms, carSpaces, propertyTypeLabel, tokensIssued: tokensIssuedProp, isLoading, ticker, contractAddress, chain, volume24h, openOrdersValue, holderCount, priceHistory: priceHistoryProp, beta, marketHours, }: PropertyOverviewProps): react_jsx_runtime.JSX.Element;
783
792
 
784
793
  type OfferStatus = 'active' | 'rejected' | 'expired' | 'historical' | 'pending';
785
794
  type PropertyOffer = {
package/dist/index.js CHANGED
@@ -9023,7 +9023,9 @@ function PropertyOverview({
9023
9023
  volume24h,
9024
9024
  openOrdersValue,
9025
9025
  holderCount,
9026
- priceHistory: priceHistoryProp
9026
+ priceHistory: priceHistoryProp,
9027
+ beta = false,
9028
+ marketHours
9027
9029
  }) {
9028
9030
  const [isDescExpanded, setDescExpanded] = React5.useState(false);
9029
9031
  const [showDividendHistory, setShowDividendHistory] = React5.useState(false);
@@ -9085,20 +9087,21 @@ function PropertyOverview({
9085
9087
  { label: "Open Orders", value: isLoading && openOrdersValue == null ? loadingSkeleton : openOrdersValue != null && openOrdersValue > 0 ? fmtDollar(openOrdersValue) : "\u2014" },
9086
9088
  { label: "Holders", value: isLoading && holderCount == null ? loadingSkeleton : holderCount != null ? holderCount.toLocaleString() : "\u2014" }
9087
9089
  ];
9088
- const annualDividend = resolvedValuation ? resolvedValuation * 0.02 : null;
9089
- const monthlyDivPerShare = annualDividend && resolvedTokensIssued ? annualDividend / 12 / resolvedTokensIssued : null;
9090
+ const growthPct = overviewData?.growth5Yr;
9090
9091
  const propertyStats = [
9091
9092
  { label: "Property Value", value: isLoading && tokenMarketCap == null ? loadingSkeleton : tokenMarketCap ? fmtDollar(tokenMarketCap) : "\u2014" },
9092
- { label: "Offers", value: "3" },
9093
- { label: "Growth (5yr)", value: "+90%" },
9094
- { label: "Last Dividend", value: isLoading && monthlyDivPerShare == null ? loadingSkeleton : monthlyDivPerShare != null ? `$${monthlyDivPerShare.toFixed(2)}` : "\u2014" },
9095
- { label: "Next Dividend", value: (() => {
9096
- const now = /* @__PURE__ */ new Date();
9097
- const lastDay = new Date(now.getFullYear(), now.getMonth() + 1, 0);
9098
- while (lastDay.getDay() === 0 || lastDay.getDay() === 6) lastDay.setDate(lastDay.getDate() - 1);
9099
- return lastDay.toLocaleDateString("en-AU", { day: "2-digit", month: "short", year: "numeric" });
9100
- })() }
9093
+ ...beta ? [] : [{ label: "Offers", value: "3" }],
9094
+ { label: "Growth (5yr)", value: growthPct != null ? `${growthPct > 0 ? "+" : ""}${growthPct}%` : "\u2014" },
9095
+ { label: "Last Dividend", value: overviewData?.lastDividend != null ? `$${overviewData.lastDividend.toFixed(2)}` : "\u2014" },
9096
+ { label: "Next Dividend", value: overviewData?.nextDividendDate != null ? new Date(overviewData.nextDividendDate * 1e3).toLocaleDateString("en-AU", { day: "2-digit", month: "short", year: "numeric" }) : "\u2014" }
9101
9097
  ];
9098
+ const ownershipLabel = overviewData?.ownership ? overviewData.ownership.charAt(0).toUpperCase() + overviewData.ownership.slice(1).toLowerCase() : null;
9099
+ const propertyHistory = overviewData?.propertyHistory ?? [];
9100
+ const closedDays = marketHours?.marketClosedDays.filter((d) => d.toLowerCase() !== "never") ?? [];
9101
+ const tradingHoursValue = marketHours ? marketHours.marketOpenTime === marketHours.marketCloseTime ? "24 Hours" : `${marketHours.marketOpenTime} \u2013 ${marketHours.marketCloseTime}` : "";
9102
+ const tradingDaysValue = marketHours ? closedDays.length ? `Closed ${closedDays.join(", ")}` : "Every day" : "";
9103
+ const tradingHoursNote = marketHours ? `All times shown in ${marketHours.marketTimezone}.` : "";
9104
+ const showTradingHours = marketHours != null;
9102
9105
  return /* @__PURE__ */ jsxRuntime.jsxs(Wrapper, { children: [
9103
9106
  /* @__PURE__ */ jsxRuntime.jsxs(Section, { children: [
9104
9107
  /* @__PURE__ */ jsxRuntime.jsx(SectionHeader, { children: "About" }),
@@ -9150,7 +9153,7 @@ function PropertyOverview({
9150
9153
  /* @__PURE__ */ jsxRuntime.jsx(StatsRowLabel, { children: "Token Performance" }),
9151
9154
  /* @__PURE__ */ jsxRuntime.jsx(StatsHRow, { children: tokenStats.map((item) => /* @__PURE__ */ jsxRuntime.jsxs(StatsHCell, { children: [
9152
9155
  /* @__PURE__ */ jsxRuntime.jsx(StatsHCellLabel, { children: item.label }),
9153
- item.label === "Holders" && holderCount != null ? /* @__PURE__ */ jsxRuntime.jsx(StatValueClickable, { onClick: () => setShowHolders(true), children: item.value }) : /* @__PURE__ */ jsxRuntime.jsx(StatsHCellValue, { $gold: !!item.gold, children: item.value })
9156
+ item.label === "Holders" && holderCount != null && !beta ? /* @__PURE__ */ jsxRuntime.jsx(StatValueClickable, { onClick: () => setShowHolders(true), children: item.value }) : /* @__PURE__ */ jsxRuntime.jsx(StatsHCellValue, { $gold: !!item.gold, children: item.value })
9154
9157
  ] }, item.label)) })
9155
9158
  ] }),
9156
9159
  /* @__PURE__ */ jsxRuntime.jsxs(StatsRowSection, { children: [
@@ -9159,7 +9162,7 @@ function PropertyOverview({
9159
9162
  /* @__PURE__ */ jsxRuntime.jsx(StatsHCellLabel, { children: item.label }),
9160
9163
  /* @__PURE__ */ jsxRuntime.jsx(StatsHCellValue, { children: item.value })
9161
9164
  ] }, item.label)) }),
9162
- /* @__PURE__ */ jsxRuntime.jsx(DividendHistoryBtn, { onClick: () => setShowDividendHistory(true), children: "See Dividend History \u2192" })
9165
+ !beta && /* @__PURE__ */ jsxRuntime.jsx(DividendHistoryBtn, { onClick: () => setShowDividendHistory(true), children: "See Dividend History \u2192" })
9163
9166
  ] })
9164
9167
  ] }),
9165
9168
  /* @__PURE__ */ jsxRuntime.jsx(StatsMobile, { children: /* @__PURE__ */ jsxRuntime.jsxs(StatsTabbedCard, { children: [
@@ -9169,14 +9172,14 @@ function PropertyOverview({
9169
9172
  ] }),
9170
9173
  statsTab === "token" && /* @__PURE__ */ jsxRuntime.jsx(StatsTabContent, { children: tokenStats.map((item) => /* @__PURE__ */ jsxRuntime.jsxs(StatRow, { $gold: !!item.gold, children: [
9171
9174
  /* @__PURE__ */ jsxRuntime.jsx(StatLabel, { children: item.label }),
9172
- item.label === "Holders" && holderCount != null ? /* @__PURE__ */ jsxRuntime.jsx(StatValueClickable, { onClick: () => setShowHolders(true), children: item.value }) : /* @__PURE__ */ jsxRuntime.jsx(StatValue, { $gold: !!item.gold, children: item.value })
9175
+ item.label === "Holders" && holderCount != null && !beta ? /* @__PURE__ */ jsxRuntime.jsx(StatValueClickable, { onClick: () => setShowHolders(true), children: item.value }) : /* @__PURE__ */ jsxRuntime.jsx(StatValue, { $gold: !!item.gold, children: item.value })
9173
9176
  ] }, item.label)) }),
9174
9177
  statsTab === "property" && /* @__PURE__ */ jsxRuntime.jsxs(StatsTabContent, { children: [
9175
9178
  propertyStats.map((item) => /* @__PURE__ */ jsxRuntime.jsxs(StatRow, { children: [
9176
9179
  /* @__PURE__ */ jsxRuntime.jsx(StatLabel, { children: item.label }),
9177
9180
  /* @__PURE__ */ jsxRuntime.jsx(StatValue, { children: item.value })
9178
9181
  ] }, item.label)),
9179
- /* @__PURE__ */ jsxRuntime.jsx(DividendHistoryBtn, { onClick: () => setShowDividendHistory(true), children: "See Dividend History \u2192" })
9182
+ !beta && /* @__PURE__ */ jsxRuntime.jsx(DividendHistoryBtn, { onClick: () => setShowDividendHistory(true), children: "See Dividend History \u2192" })
9180
9183
  ] })
9181
9184
  ] }) })
9182
9185
  ] }),
@@ -9225,122 +9228,61 @@ function PropertyOverview({
9225
9228
  /* @__PURE__ */ jsxRuntime.jsxs(StatsColumn, { children: [
9226
9229
  /* @__PURE__ */ jsxRuntime.jsx(StatsColumnHeader, { children: "Asset Specification" }),
9227
9230
  /* @__PURE__ */ jsxRuntime.jsxs(StatRow, { children: [
9228
- /* @__PURE__ */ jsxRuntime.jsx(StatLabel, { children: "Land (Freehold)" }),
9229
- /* @__PURE__ */ jsxRuntime.jsxs(StatValue, { children: [
9230
- landSize?.toLocaleString() ?? "1,848",
9231
- " sqm"
9232
- ] })
9231
+ /* @__PURE__ */ jsxRuntime.jsxs(StatLabel, { children: [
9232
+ "Land",
9233
+ ownershipLabel ? ` (${ownershipLabel})` : ""
9234
+ ] }),
9235
+ /* @__PURE__ */ jsxRuntime.jsx(StatValue, { children: landSize != null ? `${landSize.toLocaleString()} sqm` : "\u2014" })
9233
9236
  ] }),
9234
9237
  /* @__PURE__ */ jsxRuntime.jsxs(StatRow, { children: [
9235
9238
  /* @__PURE__ */ jsxRuntime.jsx(StatLabel, { children: "Interior" }),
9236
- /* @__PURE__ */ jsxRuntime.jsxs(StatValue, { children: [
9237
- buildingSize?.toLocaleString() ?? "~800",
9238
- " sqm"
9239
- ] })
9239
+ /* @__PURE__ */ jsxRuntime.jsx(StatValue, { children: buildingSize != null ? `${buildingSize.toLocaleString()} sqm` : "\u2014" })
9240
9240
  ] }),
9241
9241
  /* @__PURE__ */ jsxRuntime.jsxs(StatRow, { children: [
9242
9242
  /* @__PURE__ */ jsxRuntime.jsx(StatLabel, { children: "Built" }),
9243
- /* @__PURE__ */ jsxRuntime.jsx(StatValue, { children: "c.1880" })
9243
+ /* @__PURE__ */ jsxRuntime.jsx(StatValue, { children: overviewData?.yearBuilt ?? "\u2014" })
9244
9244
  ] }),
9245
9245
  /* @__PURE__ */ jsxRuntime.jsxs(StatRow, { children: [
9246
9246
  /* @__PURE__ */ jsxRuntime.jsx(StatLabel, { children: "Heritage Status" }),
9247
- /* @__PURE__ */ jsxRuntime.jsx(StatValue, { children: "Historic Site (Not Protected)" })
9247
+ /* @__PURE__ */ jsxRuntime.jsx(StatValue, { children: overviewData?.heritageStatus || "\u2014" })
9248
9248
  ] }),
9249
9249
  /* @__PURE__ */ jsxRuntime.jsxs(StatRow, { children: [
9250
9250
  /* @__PURE__ */ jsxRuntime.jsx(StatLabel, { children: "Zoning" }),
9251
- /* @__PURE__ */ jsxRuntime.jsx(StatValue, { children: "R3 Medium Density" })
9251
+ /* @__PURE__ */ jsxRuntime.jsx(StatValue, { children: overviewData?.zoning || "\u2014" })
9252
9252
  ] }),
9253
9253
  /* @__PURE__ */ jsxRuntime.jsxs(StatRow, { children: [
9254
9254
  /* @__PURE__ */ jsxRuntime.jsx(StatLabel, { children: "Development Optionality" }),
9255
- /* @__PURE__ */ jsxRuntime.jsx(StatValue, { style: { color: "#4ade80" }, children: "Low-rise / Apartments Permitted" })
9255
+ /* @__PURE__ */ jsxRuntime.jsx(StatValue, { children: overviewData?.developmentOptionality || "\u2014" })
9256
9256
  ] }),
9257
9257
  /* @__PURE__ */ jsxRuntime.jsxs(StatRow, { children: [
9258
- /* @__PURE__ */ jsxRuntime.jsx(StatLabel, { children: "Suburb Median (6 Bed)" }),
9259
- /* @__PURE__ */ jsxRuntime.jsx(StatValue, { children: "$5.5M (Mosman)" })
9258
+ /* @__PURE__ */ jsxRuntime.jsx(StatLabel, { children: "Suburb Median" }),
9259
+ /* @__PURE__ */ jsxRuntime.jsx(StatValue, { children: overviewData?.suburbMedian != null ? fmtDollar(overviewData.suburbMedian) : "\u2014" })
9260
9260
  ] }),
9261
9261
  /* @__PURE__ */ jsxRuntime.jsxs(StatRow, { children: [
9262
9262
  /* @__PURE__ */ jsxRuntime.jsx(StatLabel, { children: "5yr Property Growth" }),
9263
- /* @__PURE__ */ jsxRuntime.jsx(StatValue, { style: { color: "#4ade80" }, children: "+90%" })
9263
+ /* @__PURE__ */ jsxRuntime.jsx(StatValue, { style: growthPct != null && growthPct > 0 ? { color: "#4ade80" } : void 0, children: growthPct != null ? `${growthPct > 0 ? "+" : ""}${growthPct}%` : "\u2014" })
9264
9264
  ] }),
9265
9265
  /* @__PURE__ */ jsxRuntime.jsxs(StatRow, { children: [
9266
9266
  /* @__PURE__ */ jsxRuntime.jsx(StatLabel, { children: "Current Dividend" }),
9267
- /* @__PURE__ */ jsxRuntime.jsx(StatValue, { style: { color: "#4ade80" }, children: "$0.042 / share / mo" })
9267
+ /* @__PURE__ */ jsxRuntime.jsx(StatValue, { children: overviewData?.lastDividend != null ? `$${overviewData.lastDividend.toFixed(2)} / share / mo` : "\u2014" })
9268
9268
  ] }),
9269
- /* @__PURE__ */ jsxRuntime.jsx(StatsColumnHeader, { style: { marginTop: "1.25rem" }, children: "Capital History" }),
9270
- /* @__PURE__ */ jsxRuntime.jsxs(TimelineWrap, { children: [
9271
- /* @__PURE__ */ jsxRuntime.jsxs(TimelineEntry, { children: [
9272
- /* @__PURE__ */ jsxRuntime.jsx(TimelineYear, { children: "1880s" }),
9273
- /* @__PURE__ */ jsxRuntime.jsx(TimelineDot, {}),
9274
- /* @__PURE__ */ jsxRuntime.jsx(TimelineDetail, { children: /* @__PURE__ */ jsxRuntime.jsx(TimelineLabel, { children: "Built c.1880, Pre-Federation" }) })
9275
- ] }),
9276
- /* @__PURE__ */ jsxRuntime.jsxs(TimelineEntry, { children: [
9277
- /* @__PURE__ */ jsxRuntime.jsx(TimelineYear, { children: "1976" }),
9278
- /* @__PURE__ */ jsxRuntime.jsx(TimelineDot, {}),
9279
- /* @__PURE__ */ jsxRuntime.jsxs(TimelineDetail, { children: [
9280
- /* @__PURE__ */ jsxRuntime.jsx(TimelineLabel, { children: "Acquired" }),
9281
- /* @__PURE__ */ jsxRuntime.jsx(TimelinePriceWrap, { children: /* @__PURE__ */ jsxRuntime.jsx(TimelinePrice, { children: "\xA340,000" }) })
9282
- ] })
9283
- ] }),
9284
- /* @__PURE__ */ jsxRuntime.jsxs(TimelineEntry, { children: [
9285
- /* @__PURE__ */ jsxRuntime.jsx(TimelineYear, { children: "1993" }),
9286
- /* @__PURE__ */ jsxRuntime.jsx(TimelineDot, {}),
9287
- /* @__PURE__ */ jsxRuntime.jsxs(TimelineDetail, { children: [
9288
- /* @__PURE__ */ jsxRuntime.jsxs(TimelineLabel, { children: [
9289
- "Sold ",
9290
- /* @__PURE__ */ jsxRuntime.jsx(TimelineHoldPeriod, { children: "17 yrs" })
9291
- ] }),
9292
- /* @__PURE__ */ jsxRuntime.jsxs(TimelinePriceWrap, { children: [
9293
- /* @__PURE__ */ jsxRuntime.jsx(TimelineGain, { children: "+1,563%" }),
9294
- /* @__PURE__ */ jsxRuntime.jsx(TimelinePrice, { children: "$1.33M" })
9295
- ] })
9296
- ] })
9297
- ] }),
9298
- /* @__PURE__ */ jsxRuntime.jsxs(TimelineEntry, { children: [
9299
- /* @__PURE__ */ jsxRuntime.jsx(TimelineYear, { children: "2006" }),
9300
- /* @__PURE__ */ jsxRuntime.jsx(TimelineDot, {}),
9301
- /* @__PURE__ */ jsxRuntime.jsxs(TimelineDetail, { children: [
9302
- /* @__PURE__ */ jsxRuntime.jsxs(TimelineLabel, { children: [
9303
- "Sold ",
9304
- /* @__PURE__ */ jsxRuntime.jsx(TimelineHoldPeriod, { children: "13 yrs" })
9305
- ] }),
9306
- /* @__PURE__ */ jsxRuntime.jsxs(TimelinePriceWrap, { children: [
9307
- /* @__PURE__ */ jsxRuntime.jsx(TimelineGain, { children: "+491%" }),
9308
- /* @__PURE__ */ jsxRuntime.jsx(TimelinePrice, { children: "$7.86M" })
9309
- ] })
9310
- ] })
9311
- ] }),
9312
- /* @__PURE__ */ jsxRuntime.jsxs(TimelineEntry, { children: [
9313
- /* @__PURE__ */ jsxRuntime.jsx(TimelineYear, { children: "2021" }),
9314
- /* @__PURE__ */ jsxRuntime.jsx(TimelineDot, {}),
9315
- /* @__PURE__ */ jsxRuntime.jsxs(TimelineDetail, { children: [
9316
- /* @__PURE__ */ jsxRuntime.jsxs(TimelineLabel, { children: [
9317
- "Sold (COVID correction) ",
9318
- /* @__PURE__ */ jsxRuntime.jsx(TimelineHoldPeriod, { children: "15 yrs" })
9319
- ] }),
9320
- /* @__PURE__ */ jsxRuntime.jsxs(TimelinePriceWrap, { children: [
9321
- /* @__PURE__ */ jsxRuntime.jsx(TimelineGain, { children: "+16%" }),
9322
- /* @__PURE__ */ jsxRuntime.jsx(TimelinePrice, { children: "$9.09M" })
9269
+ propertyHistory.length > 0 && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
9270
+ /* @__PURE__ */ jsxRuntime.jsx(StatsColumnHeader, { style: { marginTop: "1.25rem" }, children: "Capital History" }),
9271
+ /* @__PURE__ */ jsxRuntime.jsx(TimelineWrap, { children: propertyHistory.map((h, i) => {
9272
+ const last = i === propertyHistory.length - 1;
9273
+ return /* @__PURE__ */ jsxRuntime.jsxs(TimelineEntry, { $last: last, children: [
9274
+ /* @__PURE__ */ jsxRuntime.jsx(TimelineYear, { children: h.year }),
9275
+ /* @__PURE__ */ jsxRuntime.jsx(TimelineDot, { $active: last }),
9276
+ /* @__PURE__ */ jsxRuntime.jsxs(TimelineDetail, { children: [
9277
+ /* @__PURE__ */ jsxRuntime.jsx(TimelineLabel, { children: h.event }),
9278
+ h.amount != null && /* @__PURE__ */ jsxRuntime.jsx(TimelinePriceWrap, { children: /* @__PURE__ */ jsxRuntime.jsx(TimelinePrice, { $gold: last, children: fmtDollar(h.amount) }) })
9323
9279
  ] })
9324
- ] })
9325
- ] }),
9326
- /* @__PURE__ */ jsxRuntime.jsxs(TimelineEntry, { $last: true, children: [
9327
- /* @__PURE__ */ jsxRuntime.jsx(TimelineYear, { children: "2026" }),
9328
- /* @__PURE__ */ jsxRuntime.jsx(TimelineDot, { $active: true }),
9329
- /* @__PURE__ */ jsxRuntime.jsxs(TimelineDetail, { children: [
9330
- /* @__PURE__ */ jsxRuntime.jsxs(TimelineLabel, { children: [
9331
- "Loaf Offering ",
9332
- /* @__PURE__ */ jsxRuntime.jsx(TimelineHoldPeriod, { children: "5 yrs" })
9333
- ] }),
9334
- /* @__PURE__ */ jsxRuntime.jsxs(TimelinePriceWrap, { children: [
9335
- /* @__PURE__ */ jsxRuntime.jsx(TimelineGain, { children: "+105%" }),
9336
- /* @__PURE__ */ jsxRuntime.jsx(TimelinePrice, { $gold: true, children: "$18.65M" })
9337
- ] })
9338
- ] })
9339
- ] })
9280
+ ] }, `${h.year}-${i}`);
9281
+ }) })
9340
9282
  ] })
9341
9283
  ] })
9342
9284
  ] }),
9343
- /* @__PURE__ */ jsxRuntime.jsxs(AssetBentoNarratives, { children: [
9285
+ !beta && /* @__PURE__ */ jsxRuntime.jsxs(AssetBentoNarratives, { children: [
9344
9286
  /* @__PURE__ */ jsxRuntime.jsxs(NarrativeCard, { children: [
9345
9287
  /* @__PURE__ */ jsxRuntime.jsx(NarrativeIcon, { children: /* @__PURE__ */ jsxRuntime.jsx("svg", { width: "18", height: "18", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "1.5", children: /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M22 12h-4l-3 9L9 3l-3 9H2" }) }) }),
9346
9288
  /* @__PURE__ */ jsxRuntime.jsx(NarrativeTitle, { children: "Generational Compounding" }),
@@ -9362,23 +9304,23 @@ function PropertyOverview({
9362
9304
  ] })
9363
9305
  ] })
9364
9306
  ] }),
9365
- /* @__PURE__ */ jsxRuntime.jsxs(Section, { children: [
9307
+ showTradingHours && /* @__PURE__ */ jsxRuntime.jsxs(Section, { children: [
9366
9308
  /* @__PURE__ */ jsxRuntime.jsx(SectionHeader, { children: "Trading Hours" }),
9367
9309
  /* @__PURE__ */ jsxRuntime.jsxs(TradingHoursCard, { children: [
9368
9310
  /* @__PURE__ */ jsxRuntime.jsxs(TradingHoursRow, { children: [
9369
9311
  /* @__PURE__ */ jsxRuntime.jsx(THLabel, { children: "Session" }),
9370
- /* @__PURE__ */ jsxRuntime.jsx(THLabel, { children: "Hours (AEST)" }),
9312
+ /* @__PURE__ */ jsxRuntime.jsx(THLabel, { children: "Hours" }),
9371
9313
  /* @__PURE__ */ jsxRuntime.jsx(THLabel, { children: "Days" })
9372
9314
  ] }),
9373
9315
  /* @__PURE__ */ jsxRuntime.jsxs(TradingHoursRow, { $last: true, children: [
9374
9316
  /* @__PURE__ */ jsxRuntime.jsx(THValue, { children: "Continuous Trading" }),
9375
- /* @__PURE__ */ jsxRuntime.jsx(THValue, { children: "10:00 \u2013 16:00" }),
9376
- /* @__PURE__ */ jsxRuntime.jsx(THValue, { children: "Mon \u2013 Fri" })
9317
+ /* @__PURE__ */ jsxRuntime.jsx(THValue, { children: tradingHoursValue }),
9318
+ /* @__PURE__ */ jsxRuntime.jsx(THValue, { children: tradingDaysValue })
9377
9319
  ] }),
9378
- /* @__PURE__ */ jsxRuntime.jsx(TradingHoursNote, { children: "All times are Australian Eastern Standard Time (AEST/AEDT). Markets are closed on Australian public holidays." })
9320
+ /* @__PURE__ */ jsxRuntime.jsx(TradingHoursNote, { children: tradingHoursNote })
9379
9321
  ] })
9380
9322
  ] }),
9381
- /* @__PURE__ */ jsxRuntime.jsxs(Section, { children: [
9323
+ !beta && /* @__PURE__ */ jsxRuntime.jsxs(Section, { children: [
9382
9324
  /* @__PURE__ */ jsxRuntime.jsx(SectionHeader, { children: "Tokenholder Security" }),
9383
9325
  /* @__PURE__ */ jsxRuntime.jsxs(SecurityGrid, { children: [
9384
9326
  /* @__PURE__ */ jsxRuntime.jsxs(SecurityCol, { children: [
@@ -9998,22 +9940,6 @@ var TimelinePrice = styled9__default.default.span`
9998
9940
  color: ${(p) => p.$gold ? "#D4AF37" : "#fff"};
9999
9941
  font-variant-numeric: tabular-nums;
10000
9942
  `;
10001
- var TimelineGain = styled9__default.default.span`
10002
- font-size: 0.68rem;
10003
- font-weight: 600;
10004
- color: #4ade80;
10005
- background: rgba(74,222,128,0.08);
10006
- border: 1px solid rgba(74,222,128,0.15);
10007
- padding: 1px 6px;
10008
- border-radius: 4px;
10009
- font-variant-numeric: tabular-nums;
10010
- white-space: nowrap;
10011
- `;
10012
- var TimelineHoldPeriod = styled9__default.default.span`
10013
- font-size: 0.68rem;
10014
- color: rgba(255,255,255,0.25);
10015
- font-weight: 400;
10016
- `;
10017
9943
  var FeaturesPanel = styled9__default.default.div`
10018
9944
  display: flex;
10019
9945
  flex-wrap: wrap;
@@ -13538,8 +13464,14 @@ var Modal = styled9__default.default.div`
13538
13464
  padding: 2rem;
13539
13465
  max-width: 480px;
13540
13466
  width: 90%;
13467
+ max-height: 90vh;
13468
+ overflow-y: auto;
13469
+ overflow-x: hidden;
13541
13470
  box-shadow: 0 20px 60px rgba(0,0,0,0.5);
13542
- overflow: hidden;
13471
+
13472
+ @media (max-width: 768px) {
13473
+ padding: 1.5rem;
13474
+ }
13543
13475
  `;
13544
13476
  var ModalHeader = styled9__default.default.div`
13545
13477
  display: flex;
@@ -13645,6 +13577,12 @@ var ModalFooter = styled9__default.default.div`
13645
13577
  align-items: center;
13646
13578
  justify-content: space-between;
13647
13579
  gap: 0.75rem;
13580
+
13581
+ @media (max-width: 560px) {
13582
+ flex-direction: column;
13583
+ align-items: stretch;
13584
+ gap: 1rem;
13585
+ }
13648
13586
  `;
13649
13587
  var DontShowLabel = styled9__default.default.label`
13650
13588
  display: flex;
@@ -13662,6 +13600,11 @@ var ButtonRow2 = styled9__default.default.div`
13662
13600
  gap: 1rem;
13663
13601
  justify-content: flex-end;
13664
13602
  flex-shrink: 0;
13603
+
13604
+ @media (max-width: 560px) {
13605
+ width: 100%;
13606
+ gap: 0.75rem;
13607
+ }
13665
13608
  `;
13666
13609
  var BaseButton = styled9__default.default.button`
13667
13610
  padding: 0.75rem 1.5rem;
@@ -13679,6 +13622,11 @@ var BaseButton = styled9__default.default.button`
13679
13622
  cursor: not-allowed;
13680
13623
  opacity: 0.75;
13681
13624
  }
13625
+
13626
+ @media (max-width: 560px) {
13627
+ flex: 1;
13628
+ padding: 0.875rem 1rem;
13629
+ }
13682
13630
  `;
13683
13631
  var SecondaryButton = styled9__default.default(BaseButton)`
13684
13632
  background: rgba(255,255,255,0.1);