@loafmarkets/ui 0.1.170 → 0.1.172

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.mjs CHANGED
@@ -8512,7 +8512,7 @@ function PropertyOverview({
8512
8512
  }
8513
8513
  return f;
8514
8514
  })();
8515
- const propertyInfo = propertyInfoProp ?? (() => {
8515
+ propertyInfoProp ?? (() => {
8516
8516
  const info = [...DEFAULT_PROPERTY_INFO];
8517
8517
  if (propertyTypeLabel && !overviewData) info[0] = { label: "Property Type", value: propertyTypeLabel };
8518
8518
  if (overviewData) {
@@ -8668,39 +8668,158 @@ function PropertyOverview({
8668
8668
  }
8669
8669
  ) }),
8670
8670
  /* @__PURE__ */ jsxs(Section, { children: [
8671
- /* @__PURE__ */ jsx(SectionHeader, { children: "Asset Details" }),
8671
+ /* @__PURE__ */ jsx(SectionHeader, { children: "Investment Profile" }),
8672
+ /* @__PURE__ */ jsxs(InvestmentNarrativesRow, { children: [
8673
+ /* @__PURE__ */ jsxs(NarrativeCard, { children: [
8674
+ /* @__PURE__ */ jsx(NarrativeIcon, { children: /* @__PURE__ */ jsx("svg", { width: "18", height: "18", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "1.5", children: /* @__PURE__ */ jsx("path", { d: "M22 12h-4l-3 9L9 3l-3 9H2" }) }) }),
8675
+ /* @__PURE__ */ jsx(NarrativeTitle, { children: "Generational Compounding" }),
8676
+ /* @__PURE__ */ jsx(NarrativeDesc, { children: "Acquired in 1976 for \xA340,000 \u2014 compounded through every market cycle to a current valuation exceeding A$20M." })
8677
+ ] }),
8678
+ /* @__PURE__ */ jsxs(NarrativeCard, { children: [
8679
+ /* @__PURE__ */ jsx(NarrativeIcon, { children: /* @__PURE__ */ jsx("svg", { width: "18", height: "18", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "1.5", children: /* @__PURE__ */ jsx("path", { d: "M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z" }) }) }),
8680
+ /* @__PURE__ */ jsx(NarrativeTitle, { children: "Permanent Scarcity" }),
8681
+ /* @__PURE__ */ jsx(NarrativeDesc, { children: "Heritage harbour-front estates in Mosman cannot be replicated. Sustained global demand into this safe-haven supports long-term price growth." })
8682
+ ] }),
8683
+ /* @__PURE__ */ jsxs(NarrativeCard, { children: [
8684
+ /* @__PURE__ */ jsx(NarrativeIcon, { children: /* @__PURE__ */ jsxs("svg", { width: "18", height: "18", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "1.5", children: [
8685
+ /* @__PURE__ */ jsx("circle", { cx: "12", cy: "12", r: "10" }),
8686
+ /* @__PURE__ */ jsx("path", { d: "M12 6v6l4 2" })
8687
+ ] }) }),
8688
+ /* @__PURE__ */ jsx(NarrativeTitle, { children: "Liquidity Premium" }),
8689
+ /* @__PURE__ */ jsx(NarrativeDesc, { children: "Listed assets historically trade at a 20\u201330% premium to unlisted counterparts. First individual property admitted to a continuously traded market." })
8690
+ ] })
8691
+ ] }),
8672
8692
  /* @__PURE__ */ jsxs(StatsGrid, { children: [
8673
8693
  /* @__PURE__ */ jsxs(StatsColumn, { children: [
8674
- /* @__PURE__ */ jsx(StatsColumnHeader, { children: "Key Metrics" }),
8675
- landSize != null && /* @__PURE__ */ jsxs(StatRow, { children: [
8676
- /* @__PURE__ */ jsx(StatLabel, { children: "Land Size" }),
8694
+ /* @__PURE__ */ jsx(StatsColumnHeader, { children: "Capital History" }),
8695
+ /* @__PURE__ */ jsxs(TimelineWrap, { children: [
8696
+ /* @__PURE__ */ jsxs(TimelineEntry, { children: [
8697
+ /* @__PURE__ */ jsx(TimelineYear, { children: "1880s" }),
8698
+ /* @__PURE__ */ jsx(TimelineDot, {}),
8699
+ /* @__PURE__ */ jsx(TimelineDetail, { children: /* @__PURE__ */ jsx(TimelineLabel, { children: "Built \u2014 Pre-Federation" }) })
8700
+ ] }),
8701
+ /* @__PURE__ */ jsxs(TimelineEntry, { children: [
8702
+ /* @__PURE__ */ jsx(TimelineYear, { children: "1976" }),
8703
+ /* @__PURE__ */ jsx(TimelineDot, {}),
8704
+ /* @__PURE__ */ jsxs(TimelineDetail, { children: [
8705
+ /* @__PURE__ */ jsx(TimelineLabel, { children: "Acquired" }),
8706
+ /* @__PURE__ */ jsx(TimelinePriceWrap, { children: /* @__PURE__ */ jsx(TimelinePrice, { children: "\xA340,000" }) })
8707
+ ] })
8708
+ ] }),
8709
+ /* @__PURE__ */ jsxs(TimelineEntry, { children: [
8710
+ /* @__PURE__ */ jsx(TimelineYear, { children: "1993" }),
8711
+ /* @__PURE__ */ jsx(TimelineDot, {}),
8712
+ /* @__PURE__ */ jsxs(TimelineDetail, { children: [
8713
+ /* @__PURE__ */ jsxs(TimelineLabel, { children: [
8714
+ "Sold ",
8715
+ /* @__PURE__ */ jsx(TimelineHoldPeriod, { children: "17 yrs" })
8716
+ ] }),
8717
+ /* @__PURE__ */ jsxs(TimelinePriceWrap, { children: [
8718
+ /* @__PURE__ */ jsx(TimelineGain, { children: "+1,563%" }),
8719
+ /* @__PURE__ */ jsx(TimelinePrice, { children: "$1.33M" })
8720
+ ] })
8721
+ ] })
8722
+ ] }),
8723
+ /* @__PURE__ */ jsxs(TimelineEntry, { children: [
8724
+ /* @__PURE__ */ jsx(TimelineYear, { children: "2006" }),
8725
+ /* @__PURE__ */ jsx(TimelineDot, {}),
8726
+ /* @__PURE__ */ jsxs(TimelineDetail, { children: [
8727
+ /* @__PURE__ */ jsxs(TimelineLabel, { children: [
8728
+ "Sold ",
8729
+ /* @__PURE__ */ jsx(TimelineHoldPeriod, { children: "13 yrs" })
8730
+ ] }),
8731
+ /* @__PURE__ */ jsxs(TimelinePriceWrap, { children: [
8732
+ /* @__PURE__ */ jsx(TimelineGain, { children: "+491%" }),
8733
+ /* @__PURE__ */ jsx(TimelinePrice, { children: "$7.86M" })
8734
+ ] })
8735
+ ] })
8736
+ ] }),
8737
+ /* @__PURE__ */ jsxs(TimelineEntry, { children: [
8738
+ /* @__PURE__ */ jsx(TimelineYear, { children: "2021" }),
8739
+ /* @__PURE__ */ jsx(TimelineDot, {}),
8740
+ /* @__PURE__ */ jsxs(TimelineDetail, { children: [
8741
+ /* @__PURE__ */ jsxs(TimelineLabel, { children: [
8742
+ "Sold \u2014 COVID correction ",
8743
+ /* @__PURE__ */ jsx(TimelineHoldPeriod, { children: "15 yrs" })
8744
+ ] }),
8745
+ /* @__PURE__ */ jsxs(TimelinePriceWrap, { children: [
8746
+ /* @__PURE__ */ jsx(TimelineGain, { children: "+16%" }),
8747
+ /* @__PURE__ */ jsx(TimelinePrice, { children: "$9.09M" })
8748
+ ] })
8749
+ ] })
8750
+ ] }),
8751
+ /* @__PURE__ */ jsxs(TimelineEntry, { $last: true, children: [
8752
+ /* @__PURE__ */ jsx(TimelineYear, { children: "2026" }),
8753
+ /* @__PURE__ */ jsx(TimelineDot, { $active: true }),
8754
+ /* @__PURE__ */ jsxs(TimelineDetail, { children: [
8755
+ /* @__PURE__ */ jsxs(TimelineLabel, { children: [
8756
+ "Loaf Offering ",
8757
+ /* @__PURE__ */ jsx(TimelineHoldPeriod, { children: "5 yrs" })
8758
+ ] }),
8759
+ /* @__PURE__ */ jsxs(TimelinePriceWrap, { children: [
8760
+ /* @__PURE__ */ jsx(TimelineGain, { children: "+105%" }),
8761
+ /* @__PURE__ */ jsx(TimelinePrice, { $gold: true, children: "$18.65M" })
8762
+ ] })
8763
+ ] })
8764
+ ] })
8765
+ ] }),
8766
+ /* @__PURE__ */ jsx(ComparableSalesTitle, { children: "Comparable Sales" }),
8767
+ /* @__PURE__ */ jsxs(StatRow, { children: [
8768
+ /* @__PURE__ */ jsx(StatLabel, { children: "200A Raglan St, Mosman" }),
8769
+ /* @__PURE__ */ jsxs(StatValue, { children: [
8770
+ "$16.07M ",
8771
+ /* @__PURE__ */ jsx("span", { style: { fontSize: "0.7rem", color: "rgba(255,255,255,0.3)", fontWeight: 400 }, children: "Mar 2022" })
8772
+ ] })
8773
+ ] }),
8774
+ /* @__PURE__ */ jsxs(StatRow, { children: [
8775
+ /* @__PURE__ */ jsx(StatLabel, { children: "7 Bradleys Head Rd, Mosman" }),
8776
+ /* @__PURE__ */ jsxs(StatValue, { children: [
8777
+ "$27.96M ",
8778
+ /* @__PURE__ */ jsx("span", { style: { fontSize: "0.7rem", color: "rgba(255,255,255,0.3)", fontWeight: 400 }, children: "Aug 2024" })
8779
+ ] })
8780
+ ] })
8781
+ ] }),
8782
+ /* @__PURE__ */ jsxs(StatsColumn, { children: [
8783
+ /* @__PURE__ */ jsx(StatsColumnHeader, { children: "Asset Specification" }),
8784
+ /* @__PURE__ */ jsxs(StatRow, { children: [
8785
+ /* @__PURE__ */ jsx(StatLabel, { children: "Land (Freehold)" }),
8677
8786
  /* @__PURE__ */ jsxs(StatValue, { children: [
8678
- landSize.toLocaleString(),
8787
+ landSize?.toLocaleString() ?? "1,848",
8679
8788
  " sqm"
8680
8789
  ] })
8681
8790
  ] }),
8682
- buildingSize != null && /* @__PURE__ */ jsxs(StatRow, { children: [
8683
- /* @__PURE__ */ jsx(StatLabel, { children: "Floor Area" }),
8791
+ /* @__PURE__ */ jsxs(StatRow, { children: [
8792
+ /* @__PURE__ */ jsx(StatLabel, { children: "Interior" }),
8684
8793
  /* @__PURE__ */ jsxs(StatValue, { children: [
8685
- buildingSize.toLocaleString(),
8794
+ buildingSize?.toLocaleString() ?? "~800",
8686
8795
  " sqm"
8687
8796
  ] })
8688
8797
  ] }),
8798
+ /* @__PURE__ */ jsxs(StatRow, { children: [
8799
+ /* @__PURE__ */ jsx(StatLabel, { children: "Built" }),
8800
+ /* @__PURE__ */ jsx(StatValue, { children: "1880 \u2014 Heritage Listed" })
8801
+ ] }),
8802
+ /* @__PURE__ */ jsxs(StatRow, { children: [
8803
+ /* @__PURE__ */ jsx(StatLabel, { children: "Zoning" }),
8804
+ /* @__PURE__ */ jsx(StatValue, { children: "R3 \u2014 Development Potential" })
8805
+ ] }),
8806
+ /* @__PURE__ */ jsxs(StatRow, { children: [
8807
+ /* @__PURE__ */ jsx(StatLabel, { children: "Heritage Premium" }),
8808
+ /* @__PURE__ */ jsx(StatValue, { style: { color: "#4ade80" }, children: "+12% vs non-heritage" })
8809
+ ] }),
8810
+ /* @__PURE__ */ jsxs(StatRow, { children: [
8811
+ /* @__PURE__ */ jsx(StatLabel, { children: "Suburb Median" }),
8812
+ /* @__PURE__ */ jsx(StatValue, { children: "$4.2M (Mosman)" })
8813
+ ] }),
8814
+ /* @__PURE__ */ jsxs(StatRow, { children: [
8815
+ /* @__PURE__ */ jsx(StatLabel, { children: "5yr Suburb Growth" }),
8816
+ /* @__PURE__ */ jsx(StatValue, { style: { color: "#4ade80" }, children: "+90%" })
8817
+ ] }),
8689
8818
  /* @__PURE__ */ jsx(AssetFeatureRow, { children: features.map((item, i) => /* @__PURE__ */ jsxs(AssetFeatureItem, { children: [
8690
8819
  item.icon && /* @__PURE__ */ jsx(AssetFeatureIcon, { children: item.icon }),
8691
8820
  item.value && /* @__PURE__ */ jsx(AssetFeatureValue, { children: item.value }),
8692
8821
  /* @__PURE__ */ jsx(AssetFeatureLabel, { children: item.label })
8693
8822
  ] }, i)) })
8694
- ] }),
8695
- /* @__PURE__ */ jsxs(StatsColumn, { children: [
8696
- /* @__PURE__ */ jsx(StatsColumnHeader, { children: "Property Info" }),
8697
- propertyInfo.map((item, i) => /* @__PURE__ */ jsxs(StatRow, { children: [
8698
- /* @__PURE__ */ jsx(StatLabel, { children: item.label }),
8699
- /* @__PURE__ */ jsxs(StatValue, { style: { color: item.status === "active" ? "#4ade80" : item.status === "progress" ? "#D4AF37" : void 0 }, children: [
8700
- item.status && /* @__PURE__ */ jsx("span", { style: { display: "inline-block", width: 6, height: 6, borderRadius: "50%", background: item.status === "active" ? "#4ade80" : "#D4AF37", marginRight: 6 } }),
8701
- item.value
8702
- ] })
8703
- ] }, i))
8704
8823
  ] })
8705
8824
  ] })
8706
8825
  ] }),
@@ -9128,6 +9247,124 @@ var StatValue = styled9.span`
9128
9247
  color: ${(p) => p.$gold ? "#D4AF37" : "#fff"};
9129
9248
  font-variant-numeric: tabular-nums;
9130
9249
  `;
9250
+ var InvestmentNarrativesRow = styled9.div`
9251
+ display: grid;
9252
+ grid-template-columns: repeat(3, 1fr);
9253
+ gap: 0.75rem;
9254
+ margin-bottom: 1.25rem;
9255
+ @media (max-width: 768px) { grid-template-columns: 1fr; }
9256
+ `;
9257
+ var NarrativeCard = styled9.div`
9258
+ background: rgba(255,255,255,0.025);
9259
+ border: 1px solid rgba(255,255,255,0.06);
9260
+ border-radius: 10px;
9261
+ padding: 1.25rem;
9262
+ display: flex;
9263
+ flex-direction: column;
9264
+ gap: 0.5rem;
9265
+ transition: border-color 0.2s ease;
9266
+ &:hover { border-color: rgba(212,175,55,0.25); }
9267
+ `;
9268
+ var NarrativeIcon = styled9.div`
9269
+ width: 36px;
9270
+ height: 36px;
9271
+ border-radius: 8px;
9272
+ background: rgba(212,175,55,0.08);
9273
+ border: 1px solid rgba(212,175,55,0.15);
9274
+ display: flex;
9275
+ align-items: center;
9276
+ justify-content: center;
9277
+ color: #D4AF37;
9278
+ flex-shrink: 0;
9279
+ `;
9280
+ var NarrativeTitle = styled9.div`
9281
+ font-size: 0.88rem;
9282
+ font-weight: 600;
9283
+ color: #fff;
9284
+ `;
9285
+ var NarrativeDesc = styled9.div`
9286
+ font-size: 0.78rem;
9287
+ color: rgba(255,255,255,0.45);
9288
+ line-height: 1.55;
9289
+ `;
9290
+ var TimelineWrap = styled9.div`
9291
+ display: flex;
9292
+ flex-direction: column;
9293
+ position: relative;
9294
+ padding-left: 0;
9295
+ `;
9296
+ var TimelineEntry = styled9.div`
9297
+ display: grid;
9298
+ grid-template-columns: 48px 12px 1fr;
9299
+ align-items: center;
9300
+ gap: 0.75rem;
9301
+ padding: 0.55rem 0;
9302
+ border-bottom: ${(p) => p.$last ? "none" : "1px solid rgba(255,255,255,0.03)"};
9303
+ `;
9304
+ var TimelineYear = styled9.span`
9305
+ font-size: 0.72rem;
9306
+ font-weight: 500;
9307
+ color: rgba(255,255,255,0.4);
9308
+ text-align: right;
9309
+ font-variant-numeric: tabular-nums;
9310
+ `;
9311
+ var TimelineDot = styled9.div`
9312
+ width: 8px;
9313
+ height: 8px;
9314
+ border-radius: 50%;
9315
+ background: ${(p) => p.$active ? "#D4AF37" : "rgba(255,255,255,0.15)"};
9316
+ border: ${(p) => p.$active ? "2px solid rgba(212,175,55,0.4)" : "none"};
9317
+ justify-self: center;
9318
+ `;
9319
+ var TimelineDetail = styled9.div`
9320
+ display: flex;
9321
+ align-items: center;
9322
+ justify-content: space-between;
9323
+ gap: 0.5rem;
9324
+ `;
9325
+ var TimelineLabel = styled9.span`
9326
+ font-size: 0.8rem;
9327
+ color: rgba(255,255,255,0.6);
9328
+ `;
9329
+ var TimelinePriceWrap = styled9.div`
9330
+ display: flex;
9331
+ align-items: center;
9332
+ gap: 0.5rem;
9333
+ flex-shrink: 0;
9334
+ `;
9335
+ var TimelinePrice = styled9.span`
9336
+ font-size: 0.85rem;
9337
+ font-weight: 600;
9338
+ color: ${(p) => p.$gold ? "#D4AF37" : "#fff"};
9339
+ font-variant-numeric: tabular-nums;
9340
+ `;
9341
+ var TimelineGain = styled9.span`
9342
+ font-size: 0.68rem;
9343
+ font-weight: 600;
9344
+ color: #4ade80;
9345
+ background: rgba(74,222,128,0.08);
9346
+ border: 1px solid rgba(74,222,128,0.15);
9347
+ padding: 1px 6px;
9348
+ border-radius: 4px;
9349
+ font-variant-numeric: tabular-nums;
9350
+ white-space: nowrap;
9351
+ `;
9352
+ var TimelineHoldPeriod = styled9.span`
9353
+ font-size: 0.68rem;
9354
+ color: rgba(255,255,255,0.25);
9355
+ font-weight: 400;
9356
+ `;
9357
+ var ComparableSalesTitle = styled9.div`
9358
+ font-size: 0.65rem;
9359
+ color: rgba(255,255,255,0.35);
9360
+ text-transform: uppercase;
9361
+ letter-spacing: 0.08em;
9362
+ font-weight: 500;
9363
+ margin-top: 1rem;
9364
+ padding-top: 0.75rem;
9365
+ padding-bottom: 0.5rem;
9366
+ border-top: 1px solid rgba(255,255,255,0.04);
9367
+ `;
9131
9368
  var AssetFeatureRow = styled9.div`
9132
9369
  display: flex;
9133
9370
  flex-wrap: wrap;