@loafmarkets/ui 0.1.152 → 0.1.154

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
@@ -8055,13 +8055,38 @@ function GalleryMapSection({
8055
8055
  src: resolvedMapUrl,
8056
8056
  width: "100%",
8057
8057
  height: "100%",
8058
- style: { border: 0, minHeight: 500, pointerEvents: "auto" },
8058
+ style: { border: 0, minHeight: 380, pointerEvents: "auto" },
8059
8059
  allow: "autoplay; fullscreen; web-share; xr-spatial-tracking;",
8060
8060
  title: "Property Location",
8061
8061
  referrerPolicy: "unsafe-url",
8062
8062
  tabIndex: -1
8063
8063
  }
8064
8064
  )
8065
+ ] }),
8066
+ /* @__PURE__ */ jsxs(SuburbProfile, { children: [
8067
+ /* @__PURE__ */ jsxs(SuburbProfileTitle, { children: [
8068
+ "Suburb Profile \u2014 ",
8069
+ propertyLocation.split(",")[0]?.trim() || propertyLocation
8070
+ ] }),
8071
+ /* @__PURE__ */ jsxs(SuburbStatsGrid, { children: [
8072
+ /* @__PURE__ */ jsxs(SuburbStat, { children: [
8073
+ /* @__PURE__ */ jsx(SuburbStatLabel, { children: "Median House Price" }),
8074
+ /* @__PURE__ */ jsx(SuburbStatValue, { children: "$6.2M" })
8075
+ ] }),
8076
+ /* @__PURE__ */ jsxs(SuburbStat, { children: [
8077
+ /* @__PURE__ */ jsx(SuburbStatLabel, { children: "5yr Growth" }),
8078
+ /* @__PURE__ */ jsx(SuburbStatValue, { children: "+42%" })
8079
+ ] }),
8080
+ /* @__PURE__ */ jsxs(SuburbStat, { children: [
8081
+ /* @__PURE__ */ jsx(SuburbStatLabel, { children: "Rental Yield" }),
8082
+ /* @__PURE__ */ jsx(SuburbStatValue, { children: "2.1%" })
8083
+ ] }),
8084
+ /* @__PURE__ */ jsxs(SuburbStat, { children: [
8085
+ /* @__PURE__ */ jsx(SuburbStatLabel, { children: "Population" }),
8086
+ /* @__PURE__ */ jsx(SuburbStatValue, { children: "30,200" })
8087
+ ] })
8088
+ ] }),
8089
+ /* @__PURE__ */ jsx(SuburbDesc, { children: "Premium harbourside suburb on Sydney's Lower North Shore. Known for heritage homes, village atmosphere, and proximity to Taronga Zoo and Balmoral Beach." })
8065
8090
  ] })
8066
8091
  ] }),
8067
8092
  showFullMap && /* @__PURE__ */ jsx(FullMapPopup, { onClose: () => setShowFullMap(false) })
@@ -8214,11 +8239,55 @@ var MapPanel = styled9(PanelBase)`
8214
8239
  min-width: 0; overflow: hidden;
8215
8240
  `;
8216
8241
  var MapFrame = styled9.div`
8217
- flex: 1; border-radius: 6px; overflow: hidden; min-height: 500px; position: relative;
8242
+ flex: 1; border-radius: 6px; overflow: hidden; min-height: 380px; position: relative;
8218
8243
  `;
8219
8244
  var IframeShield = styled9.div`
8220
8245
  position: absolute; inset: 0; z-index: 1; cursor: pointer;
8221
8246
  `;
8247
+ var SuburbProfile = styled9.div`
8248
+ margin-top: 1rem;
8249
+ padding-top: 0.85rem;
8250
+ border-top: 1px solid rgba(255,255,255,0.06);
8251
+ `;
8252
+ var SuburbProfileTitle = styled9.div`
8253
+ font-size: 0.65rem;
8254
+ color: #D4AF37;
8255
+ text-transform: uppercase;
8256
+ letter-spacing: 0.1em;
8257
+ font-weight: 600;
8258
+ margin-bottom: 0.75rem;
8259
+ `;
8260
+ var SuburbStatsGrid = styled9.div`
8261
+ display: grid;
8262
+ grid-template-columns: 1fr 1fr;
8263
+ gap: 0.5rem;
8264
+ margin-bottom: 0.75rem;
8265
+ `;
8266
+ var SuburbStat = styled9.div`
8267
+ background: rgba(255,255,255,0.03);
8268
+ border-radius: 6px;
8269
+ padding: 0.5rem 0.65rem;
8270
+ border: 1px solid rgba(255,255,255,0.04);
8271
+ `;
8272
+ var SuburbStatLabel = styled9.div`
8273
+ font-size: 0.6rem;
8274
+ color: rgba(255,255,255,0.4);
8275
+ text-transform: uppercase;
8276
+ letter-spacing: 0.06em;
8277
+ margin-bottom: 0.2rem;
8278
+ `;
8279
+ var SuburbStatValue = styled9.div`
8280
+ font-size: 0.9rem;
8281
+ font-weight: 600;
8282
+ color: #fff;
8283
+ font-variant-numeric: tabular-nums;
8284
+ `;
8285
+ var SuburbDesc = styled9.p`
8286
+ margin: 0;
8287
+ font-size: 0.75rem;
8288
+ color: rgba(255,255,255,0.45);
8289
+ line-height: 1.5;
8290
+ `;
8222
8291
  var MapHeaderRight = styled9.div`
8223
8292
  display: flex;
8224
8293
  align-items: center;
@@ -8355,12 +8424,12 @@ var DEFAULT_PROPERTY_INFO = [
8355
8424
  { label: "Status", value: "N/A" }
8356
8425
  ];
8357
8426
  var DEFAULT_DESCRIPTION = "Property description not available.";
8358
- var TOKENHOLDER_PROTECTIONS = [
8359
- { icon: ShieldIcon, title: "SPV Structure", desc: "Each property is held in a dedicated Special Purpose Vehicle, isolating investor assets from platform risk." },
8360
- { icon: LockIcon, title: "Smart Contract Audit", desc: "All token contracts are audited by independent security firms before deployment." },
8361
- { icon: FileCheckIcon, title: "Title Insurance", desc: "Full title insurance coverage protects token holders against title defects and encumbrances." },
8362
- { icon: BuildingIcon, title: "Regulated Exchange", desc: "Trading occurs on a regulated marketplace with KYC/AML compliance and investor protections." }
8363
- ];
8427
+ var ScaleIcon = /* @__PURE__ */ jsxs("svg", { width: "20", height: "20", viewBox: "0 0 24 24", fill: "none", stroke: "#D4AF37", strokeWidth: "1.5", strokeLinecap: "round", strokeLinejoin: "round", children: [
8428
+ /* @__PURE__ */ jsx("path", { d: "M12 3v18" }),
8429
+ /* @__PURE__ */ jsx("path", { d: "M3 7l9-4 9 4" }),
8430
+ /* @__PURE__ */ jsx("path", { d: "M3 7l3 5h-6l3-5z" }),
8431
+ /* @__PURE__ */ jsx("path", { d: "M18 7l3 5h-6l3-5z" })
8432
+ ] });
8364
8433
  function truncateAddress(addr) {
8365
8434
  if (addr.length <= 12) return addr;
8366
8435
  return `${addr.slice(0, 6)}...${addr.slice(-4)}`;
@@ -8498,7 +8567,6 @@ function PropertyOverview({
8498
8567
  { label: "Last Valuation", value: isLoading && resolvedValuation == null ? loadingSkeleton : resolvedValuation ? resolvedValuation >= 1e6 ? `$${(resolvedValuation / 1e6).toFixed(2)}M` : `$${resolvedValuation.toLocaleString()}` : "\u2014" },
8499
8568
  { label: "Number of Offers", value: "\u2014" },
8500
8569
  { label: "Growth (Past 5 Years)", value: "\u2014" },
8501
- { label: "Security Interest in Asset", value: "Yes, secured to Land Registry" },
8502
8570
  { label: "Last Dividend", value: isLoading && monthlyDivPerShare == null ? loadingSkeleton : monthlyDivPerShare != null ? `${(monthlyDivPerShare * 100).toFixed(1)} cents` : "\u2014" },
8503
8571
  { label: "Upcoming Dividend", value: (() => {
8504
8572
  const now = /* @__PURE__ */ new Date();
@@ -8661,12 +8729,99 @@ function PropertyOverview({
8661
8729
  ] })
8662
8730
  ] }),
8663
8731
  /* @__PURE__ */ jsxs(Section, { children: [
8664
- /* @__PURE__ */ jsx(SectionHeader, { children: "Tokenholder Protections" }),
8665
- /* @__PURE__ */ jsx(ProtectionsGrid, { children: TOKENHOLDER_PROTECTIONS.map((p) => /* @__PURE__ */ jsxs(ProtectionCard, { children: [
8666
- /* @__PURE__ */ jsx(ProtectionIconWrap, { children: p.icon }),
8667
- /* @__PURE__ */ jsx(ProtectionTitle, { children: p.title }),
8668
- /* @__PURE__ */ jsx(ProtectionDesc, { children: p.desc })
8669
- ] }, p.title)) })
8732
+ /* @__PURE__ */ jsx(SectionHeader, { children: "Tokenholder Security" }),
8733
+ /* @__PURE__ */ jsx(SecurityIntro, { children: "Every token issued by Loaf Markets is underpinned by institutional-grade legal and structural protections, independently verified and documented." }),
8734
+ /* @__PURE__ */ jsxs(SecurityTopRow, { children: [
8735
+ /* @__PURE__ */ jsxs(SecurityBadge, { children: [
8736
+ /* @__PURE__ */ jsx(SecurityBadgeIcon, { children: ScaleIcon }),
8737
+ /* @__PURE__ */ jsxs(SecurityBadgeContent, { children: [
8738
+ /* @__PURE__ */ jsx(SecurityBadgeLabel, { children: "Legal Structuring by" }),
8739
+ /* @__PURE__ */ jsx(SecurityBadgeLogo, { children: /* @__PURE__ */ jsx("img", { src: "/Baker_McKenzie.png", alt: "Baker McKenzie", style: { height: "28px", filter: "brightness(0) invert(1)", opacity: 0.85 } }) })
8740
+ ] })
8741
+ ] }),
8742
+ /* @__PURE__ */ jsxs(SecurityBadge, { children: [
8743
+ /* @__PURE__ */ jsx(SecurityBadgeIcon, { children: FileCheckIcon }),
8744
+ /* @__PURE__ */ jsxs(SecurityBadgeContent, { children: [
8745
+ /* @__PURE__ */ jsx(SecurityBadgeLabel, { children: "Independent Valuation by" }),
8746
+ /* @__PURE__ */ jsx(SecurityBadgeValuer, { children: "CBRE & Savills" })
8747
+ ] })
8748
+ ] })
8749
+ ] }),
8750
+ /* @__PURE__ */ jsxs(ProtectionsGrid, { children: [
8751
+ /* @__PURE__ */ jsxs(ProtectionCard, { children: [
8752
+ /* @__PURE__ */ jsxs(ProtectionCardHeader, { children: [
8753
+ /* @__PURE__ */ jsx(ProtectionIconWrap, { children: ShieldIcon }),
8754
+ /* @__PURE__ */ jsxs("div", { children: [
8755
+ /* @__PURE__ */ jsx(ProtectionTitle, { children: "Security Interest in Asset" }),
8756
+ /* @__PURE__ */ jsxs(ProtectionStatus, { children: [
8757
+ /* @__PURE__ */ jsx(ProtectionStatusDot, {}),
8758
+ "Secured & Registered"
8759
+ ] })
8760
+ ] })
8761
+ ] }),
8762
+ /* @__PURE__ */ jsx(ProtectionDesc, { children: "A registered mortgage over the property is held on behalf of token holders, secured against the NSW Land Registry. This ensures token holders have a direct, enforceable claim over the underlying real estate." }),
8763
+ /* @__PURE__ */ jsxs(ProtectionDocs, { children: [
8764
+ /* @__PURE__ */ jsx(ProtectionDocTag, { children: "Mortgage Agreement" }),
8765
+ /* @__PURE__ */ jsx(ProtectionDocTag, { children: "Land Registry Filing" })
8766
+ ] })
8767
+ ] }),
8768
+ /* @__PURE__ */ jsxs(ProtectionCard, { children: [
8769
+ /* @__PURE__ */ jsxs(ProtectionCardHeader, { children: [
8770
+ /* @__PURE__ */ jsx(ProtectionIconWrap, { children: LockIcon }),
8771
+ /* @__PURE__ */ jsxs("div", { children: [
8772
+ /* @__PURE__ */ jsx(ProtectionTitle, { children: "Bankruptcy Remote SPV" }),
8773
+ /* @__PURE__ */ jsxs(ProtectionStatus, { children: [
8774
+ /* @__PURE__ */ jsx(ProtectionStatusDot, {}),
8775
+ "Active"
8776
+ ] })
8777
+ ] })
8778
+ ] }),
8779
+ /* @__PURE__ */ jsx(ProtectionDesc, { children: "The property is held within a dedicated Special Purpose Vehicle, legally isolated from Loaf Markets' operating entity. In the event of platform insolvency, token holder assets remain protected and ring-fenced." }),
8780
+ /* @__PURE__ */ jsxs(ProtectionDocs, { children: [
8781
+ /* @__PURE__ */ jsx(ProtectionDocTag, { children: "SPV Constitution" }),
8782
+ /* @__PURE__ */ jsx(ProtectionDocTag, { children: "Legal Opinion" })
8783
+ ] })
8784
+ ] }),
8785
+ /* @__PURE__ */ jsxs(ProtectionCard, { children: [
8786
+ /* @__PURE__ */ jsxs(ProtectionCardHeader, { children: [
8787
+ /* @__PURE__ */ jsx(ProtectionIconWrap, { children: FileCheckIcon }),
8788
+ /* @__PURE__ */ jsxs("div", { children: [
8789
+ /* @__PURE__ */ jsx(ProtectionTitle, { children: "Data Protection & Compliance" }),
8790
+ /* @__PURE__ */ jsxs(ProtectionStatus, { children: [
8791
+ /* @__PURE__ */ jsx(ProtectionStatusDot, {}),
8792
+ "Compliant"
8793
+ ] })
8794
+ ] })
8795
+ ] }),
8796
+ /* @__PURE__ */ jsx(ProtectionDesc, { children: "All investor data is handled under executed Data Processing Agreements compliant with Australian Privacy Act and GDPR standards. KYC/AML procedures follow AUSTRAC reporting obligations." }),
8797
+ /* @__PURE__ */ jsxs(ProtectionDocs, { children: [
8798
+ /* @__PURE__ */ jsx(ProtectionDocTag, { children: "DPA Agreement" }),
8799
+ /* @__PURE__ */ jsx(ProtectionDocTag, { children: "Privacy Policy" })
8800
+ ] })
8801
+ ] }),
8802
+ /* @__PURE__ */ jsxs(ProtectionCard, { children: [
8803
+ /* @__PURE__ */ jsxs(ProtectionCardHeader, { children: [
8804
+ /* @__PURE__ */ jsx(ProtectionIconWrap, { children: BuildingIcon }),
8805
+ /* @__PURE__ */ jsxs("div", { children: [
8806
+ /* @__PURE__ */ jsx(ProtectionTitle, { children: "Independent Valuation" }),
8807
+ /* @__PURE__ */ jsxs(ProtectionStatus, { children: [
8808
+ /* @__PURE__ */ jsx(ProtectionStatusDot, {}),
8809
+ "Current"
8810
+ ] })
8811
+ ] })
8812
+ ] }),
8813
+ /* @__PURE__ */ jsx(ProtectionDesc, { children: "Property valuations are conducted by independent, internationally recognised firms (CBRE, Savills) at regular intervals. Reports are available for review in the Documents tab." }),
8814
+ /* @__PURE__ */ jsxs(ProtectionDocs, { children: [
8815
+ /* @__PURE__ */ jsx(ProtectionDocTag, { children: "Valuation Report" }),
8816
+ /* @__PURE__ */ jsx(ProtectionDocTag, { children: "Methodology" })
8817
+ ] })
8818
+ ] })
8819
+ ] }),
8820
+ /* @__PURE__ */ jsxs(SecurityFooter, { children: [
8821
+ "Full documentation including legal opinions, mortgage instruments, SPV constitutions, and valuation reports is available in the ",
8822
+ /* @__PURE__ */ jsx("strong", { children: "Documents" }),
8823
+ " tab."
8824
+ ] })
8670
8825
  ] })
8671
8826
  ] });
8672
8827
  }
@@ -9040,6 +9195,62 @@ var TradingHoursNote = styled9.div`
9040
9195
  color: rgba(255,255,255,0.35);
9041
9196
  border-top: 1px solid rgba(255,255,255,0.04);
9042
9197
  `;
9198
+ var SecurityIntro = styled9.p`
9199
+ font-size: 0.85rem;
9200
+ color: rgba(255,255,255,0.5);
9201
+ line-height: 1.6;
9202
+ margin: 0 0 1.5rem;
9203
+ max-width: 720px;
9204
+ `;
9205
+ var SecurityTopRow = styled9.div`
9206
+ display: flex;
9207
+ gap: 1rem;
9208
+ margin-bottom: 1.25rem;
9209
+ @media (max-width: 768px) { flex-direction: column; }
9210
+ `;
9211
+ var SecurityBadge = styled9.div`
9212
+ flex: 1;
9213
+ display: flex;
9214
+ align-items: center;
9215
+ gap: 1rem;
9216
+ background: rgba(212,175,55,0.04);
9217
+ border: 1px solid rgba(212,175,55,0.15);
9218
+ border-radius: 10px;
9219
+ padding: 1rem 1.25rem;
9220
+ `;
9221
+ var SecurityBadgeIcon = styled9.div`
9222
+ width: 40px;
9223
+ height: 40px;
9224
+ border-radius: 8px;
9225
+ background: rgba(212,175,55,0.1);
9226
+ display: flex;
9227
+ align-items: center;
9228
+ justify-content: center;
9229
+ flex-shrink: 0;
9230
+ `;
9231
+ var SecurityBadgeContent = styled9.div`
9232
+ display: flex;
9233
+ flex-direction: column;
9234
+ gap: 4px;
9235
+ `;
9236
+ var SecurityBadgeLabel = styled9.span`
9237
+ font-size: 0.72rem;
9238
+ color: rgba(255,255,255,0.45);
9239
+ text-transform: uppercase;
9240
+ letter-spacing: 0.04em;
9241
+ font-weight: 500;
9242
+ `;
9243
+ var SecurityBadgeLogo = styled9.div`
9244
+ display: flex;
9245
+ align-items: center;
9246
+ height: 28px;
9247
+ `;
9248
+ var SecurityBadgeValuer = styled9.div`
9249
+ font-size: 1rem;
9250
+ font-weight: 600;
9251
+ color: #fff;
9252
+ letter-spacing: 0.02em;
9253
+ `;
9043
9254
  var ProtectionsGrid = styled9.div`
9044
9255
  display: grid;
9045
9256
  grid-template-columns: 1fr 1fr;
@@ -9051,6 +9262,14 @@ var ProtectionCard = styled9.div`
9051
9262
  border: 1px solid rgba(255,255,255,0.06);
9052
9263
  border-radius: 10px;
9053
9264
  padding: 1.25rem;
9265
+ display: flex;
9266
+ flex-direction: column;
9267
+ gap: 0.75rem;
9268
+ `;
9269
+ var ProtectionCardHeader = styled9.div`
9270
+ display: flex;
9271
+ align-items: flex-start;
9272
+ gap: 0.75rem;
9054
9273
  `;
9055
9274
  var ProtectionIconWrap = styled9.div`
9056
9275
  width: 36px;
@@ -9060,18 +9279,62 @@ var ProtectionIconWrap = styled9.div`
9060
9279
  display: flex;
9061
9280
  align-items: center;
9062
9281
  justify-content: center;
9063
- margin-bottom: 0.75rem;
9282
+ flex-shrink: 0;
9064
9283
  `;
9065
9284
  var ProtectionTitle = styled9.div`
9066
9285
  font-size: 0.92rem;
9067
9286
  font-weight: 600;
9068
9287
  color: #fff;
9069
- margin-bottom: 0.4rem;
9288
+ margin-bottom: 2px;
9289
+ `;
9290
+ var ProtectionStatus = styled9.div`
9291
+ display: flex;
9292
+ align-items: center;
9293
+ gap: 5px;
9294
+ font-size: 0.72rem;
9295
+ color: #4ade80;
9296
+ font-weight: 500;
9297
+ `;
9298
+ var ProtectionStatusDot = styled9.span`
9299
+ width: 6px;
9300
+ height: 6px;
9301
+ border-radius: 50%;
9302
+ background: #4ade80;
9303
+ display: inline-block;
9070
9304
  `;
9071
9305
  var ProtectionDesc = styled9.div`
9072
9306
  font-size: 0.8rem;
9073
9307
  color: rgba(255,255,255,0.5);
9308
+ line-height: 1.6;
9309
+ `;
9310
+ var ProtectionDocs = styled9.div`
9311
+ display: flex;
9312
+ flex-wrap: wrap;
9313
+ gap: 6px;
9314
+ margin-top: auto;
9315
+ `;
9316
+ var ProtectionDocTag = styled9.span`
9317
+ font-size: 0.68rem;
9318
+ color: rgba(212,175,55,0.8);
9319
+ background: rgba(212,175,55,0.08);
9320
+ border: 1px solid rgba(212,175,55,0.12);
9321
+ border-radius: 4px;
9322
+ padding: 3px 8px;
9323
+ font-weight: 500;
9324
+ `;
9325
+ var SecurityFooter = styled9.div`
9326
+ margin-top: 1.25rem;
9327
+ padding: 0.85rem 1rem;
9328
+ background: rgba(255,255,255,0.02);
9329
+ border: 1px solid rgba(255,255,255,0.05);
9330
+ border-radius: 8px;
9331
+ font-size: 0.78rem;
9332
+ color: rgba(255,255,255,0.4);
9074
9333
  line-height: 1.5;
9334
+ strong {
9335
+ color: rgba(212,175,55,0.8);
9336
+ font-weight: 600;
9337
+ }
9075
9338
  `;
9076
9339
  var HoldRatioWrap = styled9.div`
9077
9340
  display: flex;