@loafmarkets/ui 0.1.153 → 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
@@ -8424,12 +8424,12 @@ var DEFAULT_PROPERTY_INFO = [
8424
8424
  { label: "Status", value: "N/A" }
8425
8425
  ];
8426
8426
  var DEFAULT_DESCRIPTION = "Property description not available.";
8427
- var TOKENHOLDER_PROTECTIONS = [
8428
- { icon: ShieldIcon, title: "SPV Structure", desc: "Each property is held in a dedicated Special Purpose Vehicle, isolating investor assets from platform risk." },
8429
- { icon: LockIcon, title: "Smart Contract Audit", desc: "All token contracts are audited by independent security firms before deployment." },
8430
- { icon: FileCheckIcon, title: "Title Insurance", desc: "Full title insurance coverage protects token holders against title defects and encumbrances." },
8431
- { icon: BuildingIcon, title: "Regulated Exchange", desc: "Trading occurs on a regulated marketplace with KYC/AML compliance and investor protections." }
8432
- ];
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
+ ] });
8433
8433
  function truncateAddress(addr) {
8434
8434
  if (addr.length <= 12) return addr;
8435
8435
  return `${addr.slice(0, 6)}...${addr.slice(-4)}`;
@@ -8567,7 +8567,6 @@ function PropertyOverview({
8567
8567
  { label: "Last Valuation", value: isLoading && resolvedValuation == null ? loadingSkeleton : resolvedValuation ? resolvedValuation >= 1e6 ? `$${(resolvedValuation / 1e6).toFixed(2)}M` : `$${resolvedValuation.toLocaleString()}` : "\u2014" },
8568
8568
  { label: "Number of Offers", value: "\u2014" },
8569
8569
  { label: "Growth (Past 5 Years)", value: "\u2014" },
8570
- { label: "Security Interest in Asset", value: "Yes, secured to Land Registry" },
8571
8570
  { label: "Last Dividend", value: isLoading && monthlyDivPerShare == null ? loadingSkeleton : monthlyDivPerShare != null ? `${(monthlyDivPerShare * 100).toFixed(1)} cents` : "\u2014" },
8572
8571
  { label: "Upcoming Dividend", value: (() => {
8573
8572
  const now = /* @__PURE__ */ new Date();
@@ -8730,12 +8729,99 @@ function PropertyOverview({
8730
8729
  ] })
8731
8730
  ] }),
8732
8731
  /* @__PURE__ */ jsxs(Section, { children: [
8733
- /* @__PURE__ */ jsx(SectionHeader, { children: "Tokenholder Protections" }),
8734
- /* @__PURE__ */ jsx(ProtectionsGrid, { children: TOKENHOLDER_PROTECTIONS.map((p) => /* @__PURE__ */ jsxs(ProtectionCard, { children: [
8735
- /* @__PURE__ */ jsx(ProtectionIconWrap, { children: p.icon }),
8736
- /* @__PURE__ */ jsx(ProtectionTitle, { children: p.title }),
8737
- /* @__PURE__ */ jsx(ProtectionDesc, { children: p.desc })
8738
- ] }, 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
+ ] })
8739
8825
  ] })
8740
8826
  ] });
8741
8827
  }
@@ -9109,6 +9195,62 @@ var TradingHoursNote = styled9.div`
9109
9195
  color: rgba(255,255,255,0.35);
9110
9196
  border-top: 1px solid rgba(255,255,255,0.04);
9111
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
+ `;
9112
9254
  var ProtectionsGrid = styled9.div`
9113
9255
  display: grid;
9114
9256
  grid-template-columns: 1fr 1fr;
@@ -9120,6 +9262,14 @@ var ProtectionCard = styled9.div`
9120
9262
  border: 1px solid rgba(255,255,255,0.06);
9121
9263
  border-radius: 10px;
9122
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;
9123
9273
  `;
9124
9274
  var ProtectionIconWrap = styled9.div`
9125
9275
  width: 36px;
@@ -9129,18 +9279,62 @@ var ProtectionIconWrap = styled9.div`
9129
9279
  display: flex;
9130
9280
  align-items: center;
9131
9281
  justify-content: center;
9132
- margin-bottom: 0.75rem;
9282
+ flex-shrink: 0;
9133
9283
  `;
9134
9284
  var ProtectionTitle = styled9.div`
9135
9285
  font-size: 0.92rem;
9136
9286
  font-weight: 600;
9137
9287
  color: #fff;
9138
- 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;
9139
9304
  `;
9140
9305
  var ProtectionDesc = styled9.div`
9141
9306
  font-size: 0.8rem;
9142
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);
9143
9333
  line-height: 1.5;
9334
+ strong {
9335
+ color: rgba(212,175,55,0.8);
9336
+ font-weight: 600;
9337
+ }
9144
9338
  `;
9145
9339
  var HoldRatioWrap = styled9.div`
9146
9340
  display: flex;