@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.js CHANGED
@@ -8538,7 +8538,7 @@ function PropertyOverview({
8538
8538
  }
8539
8539
  return f;
8540
8540
  })();
8541
- const propertyInfo = propertyInfoProp ?? (() => {
8541
+ propertyInfoProp ?? (() => {
8542
8542
  const info = [...DEFAULT_PROPERTY_INFO];
8543
8543
  if (propertyTypeLabel && !overviewData) info[0] = { label: "Property Type", value: propertyTypeLabel };
8544
8544
  if (overviewData) {
@@ -8694,39 +8694,158 @@ function PropertyOverview({
8694
8694
  }
8695
8695
  ) }),
8696
8696
  /* @__PURE__ */ jsxRuntime.jsxs(Section, { children: [
8697
- /* @__PURE__ */ jsxRuntime.jsx(SectionHeader, { children: "Asset Details" }),
8697
+ /* @__PURE__ */ jsxRuntime.jsx(SectionHeader, { children: "Investment Profile" }),
8698
+ /* @__PURE__ */ jsxRuntime.jsxs(InvestmentNarrativesRow, { children: [
8699
+ /* @__PURE__ */ jsxRuntime.jsxs(NarrativeCard, { children: [
8700
+ /* @__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" }) }) }),
8701
+ /* @__PURE__ */ jsxRuntime.jsx(NarrativeTitle, { children: "Generational Compounding" }),
8702
+ /* @__PURE__ */ jsxRuntime.jsx(NarrativeDesc, { children: "Acquired in 1976 for \xA340,000 \u2014 compounded through every market cycle to a current valuation exceeding A$20M." })
8703
+ ] }),
8704
+ /* @__PURE__ */ jsxRuntime.jsxs(NarrativeCard, { children: [
8705
+ /* @__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: "M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z" }) }) }),
8706
+ /* @__PURE__ */ jsxRuntime.jsx(NarrativeTitle, { children: "Permanent Scarcity" }),
8707
+ /* @__PURE__ */ jsxRuntime.jsx(NarrativeDesc, { children: "Heritage harbour-front estates in Mosman cannot be replicated. Sustained global demand into this safe-haven supports long-term price growth." })
8708
+ ] }),
8709
+ /* @__PURE__ */ jsxRuntime.jsxs(NarrativeCard, { children: [
8710
+ /* @__PURE__ */ jsxRuntime.jsx(NarrativeIcon, { children: /* @__PURE__ */ jsxRuntime.jsxs("svg", { width: "18", height: "18", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "1.5", children: [
8711
+ /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: "12", cy: "12", r: "10" }),
8712
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M12 6v6l4 2" })
8713
+ ] }) }),
8714
+ /* @__PURE__ */ jsxRuntime.jsx(NarrativeTitle, { children: "Liquidity Premium" }),
8715
+ /* @__PURE__ */ jsxRuntime.jsx(NarrativeDesc, { children: "Listed assets historically trade at a 20\u201330% premium to unlisted counterparts. First individual property admitted to a continuously traded market." })
8716
+ ] })
8717
+ ] }),
8698
8718
  /* @__PURE__ */ jsxRuntime.jsxs(StatsGrid, { children: [
8699
8719
  /* @__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" }),
8720
+ /* @__PURE__ */ jsxRuntime.jsx(StatsColumnHeader, { children: "Capital History" }),
8721
+ /* @__PURE__ */ jsxRuntime.jsxs(TimelineWrap, { children: [
8722
+ /* @__PURE__ */ jsxRuntime.jsxs(TimelineEntry, { children: [
8723
+ /* @__PURE__ */ jsxRuntime.jsx(TimelineYear, { children: "1880s" }),
8724
+ /* @__PURE__ */ jsxRuntime.jsx(TimelineDot, {}),
8725
+ /* @__PURE__ */ jsxRuntime.jsx(TimelineDetail, { children: /* @__PURE__ */ jsxRuntime.jsx(TimelineLabel, { children: "Built \u2014 Pre-Federation" }) })
8726
+ ] }),
8727
+ /* @__PURE__ */ jsxRuntime.jsxs(TimelineEntry, { children: [
8728
+ /* @__PURE__ */ jsxRuntime.jsx(TimelineYear, { children: "1976" }),
8729
+ /* @__PURE__ */ jsxRuntime.jsx(TimelineDot, {}),
8730
+ /* @__PURE__ */ jsxRuntime.jsxs(TimelineDetail, { children: [
8731
+ /* @__PURE__ */ jsxRuntime.jsx(TimelineLabel, { children: "Acquired" }),
8732
+ /* @__PURE__ */ jsxRuntime.jsx(TimelinePriceWrap, { children: /* @__PURE__ */ jsxRuntime.jsx(TimelinePrice, { children: "\xA340,000" }) })
8733
+ ] })
8734
+ ] }),
8735
+ /* @__PURE__ */ jsxRuntime.jsxs(TimelineEntry, { children: [
8736
+ /* @__PURE__ */ jsxRuntime.jsx(TimelineYear, { children: "1993" }),
8737
+ /* @__PURE__ */ jsxRuntime.jsx(TimelineDot, {}),
8738
+ /* @__PURE__ */ jsxRuntime.jsxs(TimelineDetail, { children: [
8739
+ /* @__PURE__ */ jsxRuntime.jsxs(TimelineLabel, { children: [
8740
+ "Sold ",
8741
+ /* @__PURE__ */ jsxRuntime.jsx(TimelineHoldPeriod, { children: "17 yrs" })
8742
+ ] }),
8743
+ /* @__PURE__ */ jsxRuntime.jsxs(TimelinePriceWrap, { children: [
8744
+ /* @__PURE__ */ jsxRuntime.jsx(TimelineGain, { children: "+1,563%" }),
8745
+ /* @__PURE__ */ jsxRuntime.jsx(TimelinePrice, { children: "$1.33M" })
8746
+ ] })
8747
+ ] })
8748
+ ] }),
8749
+ /* @__PURE__ */ jsxRuntime.jsxs(TimelineEntry, { children: [
8750
+ /* @__PURE__ */ jsxRuntime.jsx(TimelineYear, { children: "2006" }),
8751
+ /* @__PURE__ */ jsxRuntime.jsx(TimelineDot, {}),
8752
+ /* @__PURE__ */ jsxRuntime.jsxs(TimelineDetail, { children: [
8753
+ /* @__PURE__ */ jsxRuntime.jsxs(TimelineLabel, { children: [
8754
+ "Sold ",
8755
+ /* @__PURE__ */ jsxRuntime.jsx(TimelineHoldPeriod, { children: "13 yrs" })
8756
+ ] }),
8757
+ /* @__PURE__ */ jsxRuntime.jsxs(TimelinePriceWrap, { children: [
8758
+ /* @__PURE__ */ jsxRuntime.jsx(TimelineGain, { children: "+491%" }),
8759
+ /* @__PURE__ */ jsxRuntime.jsx(TimelinePrice, { children: "$7.86M" })
8760
+ ] })
8761
+ ] })
8762
+ ] }),
8763
+ /* @__PURE__ */ jsxRuntime.jsxs(TimelineEntry, { children: [
8764
+ /* @__PURE__ */ jsxRuntime.jsx(TimelineYear, { children: "2021" }),
8765
+ /* @__PURE__ */ jsxRuntime.jsx(TimelineDot, {}),
8766
+ /* @__PURE__ */ jsxRuntime.jsxs(TimelineDetail, { children: [
8767
+ /* @__PURE__ */ jsxRuntime.jsxs(TimelineLabel, { children: [
8768
+ "Sold \u2014 COVID correction ",
8769
+ /* @__PURE__ */ jsxRuntime.jsx(TimelineHoldPeriod, { children: "15 yrs" })
8770
+ ] }),
8771
+ /* @__PURE__ */ jsxRuntime.jsxs(TimelinePriceWrap, { children: [
8772
+ /* @__PURE__ */ jsxRuntime.jsx(TimelineGain, { children: "+16%" }),
8773
+ /* @__PURE__ */ jsxRuntime.jsx(TimelinePrice, { children: "$9.09M" })
8774
+ ] })
8775
+ ] })
8776
+ ] }),
8777
+ /* @__PURE__ */ jsxRuntime.jsxs(TimelineEntry, { $last: true, children: [
8778
+ /* @__PURE__ */ jsxRuntime.jsx(TimelineYear, { children: "2026" }),
8779
+ /* @__PURE__ */ jsxRuntime.jsx(TimelineDot, { $active: true }),
8780
+ /* @__PURE__ */ jsxRuntime.jsxs(TimelineDetail, { children: [
8781
+ /* @__PURE__ */ jsxRuntime.jsxs(TimelineLabel, { children: [
8782
+ "Loaf Offering ",
8783
+ /* @__PURE__ */ jsxRuntime.jsx(TimelineHoldPeriod, { children: "5 yrs" })
8784
+ ] }),
8785
+ /* @__PURE__ */ jsxRuntime.jsxs(TimelinePriceWrap, { children: [
8786
+ /* @__PURE__ */ jsxRuntime.jsx(TimelineGain, { children: "+105%" }),
8787
+ /* @__PURE__ */ jsxRuntime.jsx(TimelinePrice, { $gold: true, children: "$18.65M" })
8788
+ ] })
8789
+ ] })
8790
+ ] })
8791
+ ] }),
8792
+ /* @__PURE__ */ jsxRuntime.jsx(ComparableSalesTitle, { children: "Comparable Sales" }),
8793
+ /* @__PURE__ */ jsxRuntime.jsxs(StatRow, { children: [
8794
+ /* @__PURE__ */ jsxRuntime.jsx(StatLabel, { children: "200A Raglan St, Mosman" }),
8795
+ /* @__PURE__ */ jsxRuntime.jsxs(StatValue, { children: [
8796
+ "$16.07M ",
8797
+ /* @__PURE__ */ jsxRuntime.jsx("span", { style: { fontSize: "0.7rem", color: "rgba(255,255,255,0.3)", fontWeight: 400 }, children: "Mar 2022" })
8798
+ ] })
8799
+ ] }),
8800
+ /* @__PURE__ */ jsxRuntime.jsxs(StatRow, { children: [
8801
+ /* @__PURE__ */ jsxRuntime.jsx(StatLabel, { children: "7 Bradleys Head Rd, Mosman" }),
8802
+ /* @__PURE__ */ jsxRuntime.jsxs(StatValue, { children: [
8803
+ "$27.96M ",
8804
+ /* @__PURE__ */ jsxRuntime.jsx("span", { style: { fontSize: "0.7rem", color: "rgba(255,255,255,0.3)", fontWeight: 400 }, children: "Aug 2024" })
8805
+ ] })
8806
+ ] })
8807
+ ] }),
8808
+ /* @__PURE__ */ jsxRuntime.jsxs(StatsColumn, { children: [
8809
+ /* @__PURE__ */ jsxRuntime.jsx(StatsColumnHeader, { children: "Asset Specification" }),
8810
+ /* @__PURE__ */ jsxRuntime.jsxs(StatRow, { children: [
8811
+ /* @__PURE__ */ jsxRuntime.jsx(StatLabel, { children: "Land (Freehold)" }),
8703
8812
  /* @__PURE__ */ jsxRuntime.jsxs(StatValue, { children: [
8704
- landSize.toLocaleString(),
8813
+ landSize?.toLocaleString() ?? "1,848",
8705
8814
  " sqm"
8706
8815
  ] })
8707
8816
  ] }),
8708
- buildingSize != null && /* @__PURE__ */ jsxRuntime.jsxs(StatRow, { children: [
8709
- /* @__PURE__ */ jsxRuntime.jsx(StatLabel, { children: "Floor Area" }),
8817
+ /* @__PURE__ */ jsxRuntime.jsxs(StatRow, { children: [
8818
+ /* @__PURE__ */ jsxRuntime.jsx(StatLabel, { children: "Interior" }),
8710
8819
  /* @__PURE__ */ jsxRuntime.jsxs(StatValue, { children: [
8711
- buildingSize.toLocaleString(),
8820
+ buildingSize?.toLocaleString() ?? "~800",
8712
8821
  " sqm"
8713
8822
  ] })
8714
8823
  ] }),
8824
+ /* @__PURE__ */ jsxRuntime.jsxs(StatRow, { children: [
8825
+ /* @__PURE__ */ jsxRuntime.jsx(StatLabel, { children: "Built" }),
8826
+ /* @__PURE__ */ jsxRuntime.jsx(StatValue, { children: "1880 \u2014 Heritage Listed" })
8827
+ ] }),
8828
+ /* @__PURE__ */ jsxRuntime.jsxs(StatRow, { children: [
8829
+ /* @__PURE__ */ jsxRuntime.jsx(StatLabel, { children: "Zoning" }),
8830
+ /* @__PURE__ */ jsxRuntime.jsx(StatValue, { children: "R3 \u2014 Development Potential" })
8831
+ ] }),
8832
+ /* @__PURE__ */ jsxRuntime.jsxs(StatRow, { children: [
8833
+ /* @__PURE__ */ jsxRuntime.jsx(StatLabel, { children: "Heritage Premium" }),
8834
+ /* @__PURE__ */ jsxRuntime.jsx(StatValue, { style: { color: "#4ade80" }, children: "+12% vs non-heritage" })
8835
+ ] }),
8836
+ /* @__PURE__ */ jsxRuntime.jsxs(StatRow, { children: [
8837
+ /* @__PURE__ */ jsxRuntime.jsx(StatLabel, { children: "Suburb Median" }),
8838
+ /* @__PURE__ */ jsxRuntime.jsx(StatValue, { children: "$4.2M (Mosman)" })
8839
+ ] }),
8840
+ /* @__PURE__ */ jsxRuntime.jsxs(StatRow, { children: [
8841
+ /* @__PURE__ */ jsxRuntime.jsx(StatLabel, { children: "5yr Suburb Growth" }),
8842
+ /* @__PURE__ */ jsxRuntime.jsx(StatValue, { style: { color: "#4ade80" }, children: "+90%" })
8843
+ ] }),
8715
8844
  /* @__PURE__ */ jsxRuntime.jsx(AssetFeatureRow, { children: features.map((item, i) => /* @__PURE__ */ jsxRuntime.jsxs(AssetFeatureItem, { children: [
8716
8845
  item.icon && /* @__PURE__ */ jsxRuntime.jsx(AssetFeatureIcon, { children: item.icon }),
8717
8846
  item.value && /* @__PURE__ */ jsxRuntime.jsx(AssetFeatureValue, { children: item.value }),
8718
8847
  /* @__PURE__ */ jsxRuntime.jsx(AssetFeatureLabel, { children: item.label })
8719
8848
  ] }, i)) })
8720
- ] }),
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 } }),
8727
- item.value
8728
- ] })
8729
- ] }, i))
8730
8849
  ] })
8731
8850
  ] })
8732
8851
  ] }),
@@ -9154,6 +9273,124 @@ var StatValue = styled9__default.default.span`
9154
9273
  color: ${(p) => p.$gold ? "#D4AF37" : "#fff"};
9155
9274
  font-variant-numeric: tabular-nums;
9156
9275
  `;
9276
+ var InvestmentNarrativesRow = styled9__default.default.div`
9277
+ display: grid;
9278
+ grid-template-columns: repeat(3, 1fr);
9279
+ gap: 0.75rem;
9280
+ margin-bottom: 1.25rem;
9281
+ @media (max-width: 768px) { grid-template-columns: 1fr; }
9282
+ `;
9283
+ var NarrativeCard = styled9__default.default.div`
9284
+ background: rgba(255,255,255,0.025);
9285
+ border: 1px solid rgba(255,255,255,0.06);
9286
+ border-radius: 10px;
9287
+ padding: 1.25rem;
9288
+ display: flex;
9289
+ flex-direction: column;
9290
+ gap: 0.5rem;
9291
+ transition: border-color 0.2s ease;
9292
+ &:hover { border-color: rgba(212,175,55,0.25); }
9293
+ `;
9294
+ var NarrativeIcon = styled9__default.default.div`
9295
+ width: 36px;
9296
+ height: 36px;
9297
+ border-radius: 8px;
9298
+ background: rgba(212,175,55,0.08);
9299
+ border: 1px solid rgba(212,175,55,0.15);
9300
+ display: flex;
9301
+ align-items: center;
9302
+ justify-content: center;
9303
+ color: #D4AF37;
9304
+ flex-shrink: 0;
9305
+ `;
9306
+ var NarrativeTitle = styled9__default.default.div`
9307
+ font-size: 0.88rem;
9308
+ font-weight: 600;
9309
+ color: #fff;
9310
+ `;
9311
+ var NarrativeDesc = styled9__default.default.div`
9312
+ font-size: 0.78rem;
9313
+ color: rgba(255,255,255,0.45);
9314
+ line-height: 1.55;
9315
+ `;
9316
+ var TimelineWrap = styled9__default.default.div`
9317
+ display: flex;
9318
+ flex-direction: column;
9319
+ position: relative;
9320
+ padding-left: 0;
9321
+ `;
9322
+ var TimelineEntry = styled9__default.default.div`
9323
+ display: grid;
9324
+ grid-template-columns: 48px 12px 1fr;
9325
+ align-items: center;
9326
+ gap: 0.75rem;
9327
+ padding: 0.55rem 0;
9328
+ border-bottom: ${(p) => p.$last ? "none" : "1px solid rgba(255,255,255,0.03)"};
9329
+ `;
9330
+ var TimelineYear = styled9__default.default.span`
9331
+ font-size: 0.72rem;
9332
+ font-weight: 500;
9333
+ color: rgba(255,255,255,0.4);
9334
+ text-align: right;
9335
+ font-variant-numeric: tabular-nums;
9336
+ `;
9337
+ var TimelineDot = styled9__default.default.div`
9338
+ width: 8px;
9339
+ height: 8px;
9340
+ border-radius: 50%;
9341
+ background: ${(p) => p.$active ? "#D4AF37" : "rgba(255,255,255,0.15)"};
9342
+ border: ${(p) => p.$active ? "2px solid rgba(212,175,55,0.4)" : "none"};
9343
+ justify-self: center;
9344
+ `;
9345
+ var TimelineDetail = styled9__default.default.div`
9346
+ display: flex;
9347
+ align-items: center;
9348
+ justify-content: space-between;
9349
+ gap: 0.5rem;
9350
+ `;
9351
+ var TimelineLabel = styled9__default.default.span`
9352
+ font-size: 0.8rem;
9353
+ color: rgba(255,255,255,0.6);
9354
+ `;
9355
+ var TimelinePriceWrap = styled9__default.default.div`
9356
+ display: flex;
9357
+ align-items: center;
9358
+ gap: 0.5rem;
9359
+ flex-shrink: 0;
9360
+ `;
9361
+ var TimelinePrice = styled9__default.default.span`
9362
+ font-size: 0.85rem;
9363
+ font-weight: 600;
9364
+ color: ${(p) => p.$gold ? "#D4AF37" : "#fff"};
9365
+ font-variant-numeric: tabular-nums;
9366
+ `;
9367
+ var TimelineGain = styled9__default.default.span`
9368
+ font-size: 0.68rem;
9369
+ font-weight: 600;
9370
+ color: #4ade80;
9371
+ background: rgba(74,222,128,0.08);
9372
+ border: 1px solid rgba(74,222,128,0.15);
9373
+ padding: 1px 6px;
9374
+ border-radius: 4px;
9375
+ font-variant-numeric: tabular-nums;
9376
+ white-space: nowrap;
9377
+ `;
9378
+ var TimelineHoldPeriod = styled9__default.default.span`
9379
+ font-size: 0.68rem;
9380
+ color: rgba(255,255,255,0.25);
9381
+ font-weight: 400;
9382
+ `;
9383
+ var ComparableSalesTitle = styled9__default.default.div`
9384
+ font-size: 0.65rem;
9385
+ color: rgba(255,255,255,0.35);
9386
+ text-transform: uppercase;
9387
+ letter-spacing: 0.08em;
9388
+ font-weight: 500;
9389
+ margin-top: 1rem;
9390
+ padding-top: 0.75rem;
9391
+ padding-bottom: 0.5rem;
9392
+ border-top: 1px solid rgba(255,255,255,0.04);
9393
+ `;
9157
9394
  var AssetFeatureRow = styled9__default.default.div`
9158
9395
  display: flex;
9159
9396
  flex-wrap: wrap;