@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.js CHANGED
@@ -8450,12 +8450,12 @@ var DEFAULT_PROPERTY_INFO = [
8450
8450
  { label: "Status", value: "N/A" }
8451
8451
  ];
8452
8452
  var DEFAULT_DESCRIPTION = "Property description not available.";
8453
- var TOKENHOLDER_PROTECTIONS = [
8454
- { icon: ShieldIcon, title: "SPV Structure", desc: "Each property is held in a dedicated Special Purpose Vehicle, isolating investor assets from platform risk." },
8455
- { icon: LockIcon, title: "Smart Contract Audit", desc: "All token contracts are audited by independent security firms before deployment." },
8456
- { icon: FileCheckIcon, title: "Title Insurance", desc: "Full title insurance coverage protects token holders against title defects and encumbrances." },
8457
- { icon: BuildingIcon, title: "Regulated Exchange", desc: "Trading occurs on a regulated marketplace with KYC/AML compliance and investor protections." }
8458
- ];
8453
+ var ScaleIcon = /* @__PURE__ */ jsxRuntime.jsxs("svg", { width: "20", height: "20", viewBox: "0 0 24 24", fill: "none", stroke: "#D4AF37", strokeWidth: "1.5", strokeLinecap: "round", strokeLinejoin: "round", children: [
8454
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M12 3v18" }),
8455
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M3 7l9-4 9 4" }),
8456
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M3 7l3 5h-6l3-5z" }),
8457
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M18 7l3 5h-6l3-5z" })
8458
+ ] });
8459
8459
  function truncateAddress(addr) {
8460
8460
  if (addr.length <= 12) return addr;
8461
8461
  return `${addr.slice(0, 6)}...${addr.slice(-4)}`;
@@ -8593,7 +8593,6 @@ function PropertyOverview({
8593
8593
  { label: "Last Valuation", value: isLoading && resolvedValuation == null ? loadingSkeleton : resolvedValuation ? resolvedValuation >= 1e6 ? `$${(resolvedValuation / 1e6).toFixed(2)}M` : `$${resolvedValuation.toLocaleString()}` : "\u2014" },
8594
8594
  { label: "Number of Offers", value: "\u2014" },
8595
8595
  { label: "Growth (Past 5 Years)", value: "\u2014" },
8596
- { label: "Security Interest in Asset", value: "Yes, secured to Land Registry" },
8597
8596
  { label: "Last Dividend", value: isLoading && monthlyDivPerShare == null ? loadingSkeleton : monthlyDivPerShare != null ? `${(monthlyDivPerShare * 100).toFixed(1)} cents` : "\u2014" },
8598
8597
  { label: "Upcoming Dividend", value: (() => {
8599
8598
  const now = /* @__PURE__ */ new Date();
@@ -8756,12 +8755,99 @@ function PropertyOverview({
8756
8755
  ] })
8757
8756
  ] }),
8758
8757
  /* @__PURE__ */ jsxRuntime.jsxs(Section, { children: [
8759
- /* @__PURE__ */ jsxRuntime.jsx(SectionHeader, { children: "Tokenholder Protections" }),
8760
- /* @__PURE__ */ jsxRuntime.jsx(ProtectionsGrid, { children: TOKENHOLDER_PROTECTIONS.map((p) => /* @__PURE__ */ jsxRuntime.jsxs(ProtectionCard, { children: [
8761
- /* @__PURE__ */ jsxRuntime.jsx(ProtectionIconWrap, { children: p.icon }),
8762
- /* @__PURE__ */ jsxRuntime.jsx(ProtectionTitle, { children: p.title }),
8763
- /* @__PURE__ */ jsxRuntime.jsx(ProtectionDesc, { children: p.desc })
8764
- ] }, p.title)) })
8758
+ /* @__PURE__ */ jsxRuntime.jsx(SectionHeader, { children: "Tokenholder Security" }),
8759
+ /* @__PURE__ */ jsxRuntime.jsx(SecurityIntro, { children: "Every token issued by Loaf Markets is underpinned by institutional-grade legal and structural protections, independently verified and documented." }),
8760
+ /* @__PURE__ */ jsxRuntime.jsxs(SecurityTopRow, { children: [
8761
+ /* @__PURE__ */ jsxRuntime.jsxs(SecurityBadge, { children: [
8762
+ /* @__PURE__ */ jsxRuntime.jsx(SecurityBadgeIcon, { children: ScaleIcon }),
8763
+ /* @__PURE__ */ jsxRuntime.jsxs(SecurityBadgeContent, { children: [
8764
+ /* @__PURE__ */ jsxRuntime.jsx(SecurityBadgeLabel, { children: "Legal Structuring by" }),
8765
+ /* @__PURE__ */ jsxRuntime.jsx(SecurityBadgeLogo, { children: /* @__PURE__ */ jsxRuntime.jsx("img", { src: "/Baker_McKenzie.png", alt: "Baker McKenzie", style: { height: "28px", filter: "brightness(0) invert(1)", opacity: 0.85 } }) })
8766
+ ] })
8767
+ ] }),
8768
+ /* @__PURE__ */ jsxRuntime.jsxs(SecurityBadge, { children: [
8769
+ /* @__PURE__ */ jsxRuntime.jsx(SecurityBadgeIcon, { children: FileCheckIcon }),
8770
+ /* @__PURE__ */ jsxRuntime.jsxs(SecurityBadgeContent, { children: [
8771
+ /* @__PURE__ */ jsxRuntime.jsx(SecurityBadgeLabel, { children: "Independent Valuation by" }),
8772
+ /* @__PURE__ */ jsxRuntime.jsx(SecurityBadgeValuer, { children: "CBRE & Savills" })
8773
+ ] })
8774
+ ] })
8775
+ ] }),
8776
+ /* @__PURE__ */ jsxRuntime.jsxs(ProtectionsGrid, { children: [
8777
+ /* @__PURE__ */ jsxRuntime.jsxs(ProtectionCard, { children: [
8778
+ /* @__PURE__ */ jsxRuntime.jsxs(ProtectionCardHeader, { children: [
8779
+ /* @__PURE__ */ jsxRuntime.jsx(ProtectionIconWrap, { children: ShieldIcon }),
8780
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
8781
+ /* @__PURE__ */ jsxRuntime.jsx(ProtectionTitle, { children: "Security Interest in Asset" }),
8782
+ /* @__PURE__ */ jsxRuntime.jsxs(ProtectionStatus, { children: [
8783
+ /* @__PURE__ */ jsxRuntime.jsx(ProtectionStatusDot, {}),
8784
+ "Secured & Registered"
8785
+ ] })
8786
+ ] })
8787
+ ] }),
8788
+ /* @__PURE__ */ jsxRuntime.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." }),
8789
+ /* @__PURE__ */ jsxRuntime.jsxs(ProtectionDocs, { children: [
8790
+ /* @__PURE__ */ jsxRuntime.jsx(ProtectionDocTag, { children: "Mortgage Agreement" }),
8791
+ /* @__PURE__ */ jsxRuntime.jsx(ProtectionDocTag, { children: "Land Registry Filing" })
8792
+ ] })
8793
+ ] }),
8794
+ /* @__PURE__ */ jsxRuntime.jsxs(ProtectionCard, { children: [
8795
+ /* @__PURE__ */ jsxRuntime.jsxs(ProtectionCardHeader, { children: [
8796
+ /* @__PURE__ */ jsxRuntime.jsx(ProtectionIconWrap, { children: LockIcon }),
8797
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
8798
+ /* @__PURE__ */ jsxRuntime.jsx(ProtectionTitle, { children: "Bankruptcy Remote SPV" }),
8799
+ /* @__PURE__ */ jsxRuntime.jsxs(ProtectionStatus, { children: [
8800
+ /* @__PURE__ */ jsxRuntime.jsx(ProtectionStatusDot, {}),
8801
+ "Active"
8802
+ ] })
8803
+ ] })
8804
+ ] }),
8805
+ /* @__PURE__ */ jsxRuntime.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." }),
8806
+ /* @__PURE__ */ jsxRuntime.jsxs(ProtectionDocs, { children: [
8807
+ /* @__PURE__ */ jsxRuntime.jsx(ProtectionDocTag, { children: "SPV Constitution" }),
8808
+ /* @__PURE__ */ jsxRuntime.jsx(ProtectionDocTag, { children: "Legal Opinion" })
8809
+ ] })
8810
+ ] }),
8811
+ /* @__PURE__ */ jsxRuntime.jsxs(ProtectionCard, { children: [
8812
+ /* @__PURE__ */ jsxRuntime.jsxs(ProtectionCardHeader, { children: [
8813
+ /* @__PURE__ */ jsxRuntime.jsx(ProtectionIconWrap, { children: FileCheckIcon }),
8814
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
8815
+ /* @__PURE__ */ jsxRuntime.jsx(ProtectionTitle, { children: "Data Protection & Compliance" }),
8816
+ /* @__PURE__ */ jsxRuntime.jsxs(ProtectionStatus, { children: [
8817
+ /* @__PURE__ */ jsxRuntime.jsx(ProtectionStatusDot, {}),
8818
+ "Compliant"
8819
+ ] })
8820
+ ] })
8821
+ ] }),
8822
+ /* @__PURE__ */ jsxRuntime.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." }),
8823
+ /* @__PURE__ */ jsxRuntime.jsxs(ProtectionDocs, { children: [
8824
+ /* @__PURE__ */ jsxRuntime.jsx(ProtectionDocTag, { children: "DPA Agreement" }),
8825
+ /* @__PURE__ */ jsxRuntime.jsx(ProtectionDocTag, { children: "Privacy Policy" })
8826
+ ] })
8827
+ ] }),
8828
+ /* @__PURE__ */ jsxRuntime.jsxs(ProtectionCard, { children: [
8829
+ /* @__PURE__ */ jsxRuntime.jsxs(ProtectionCardHeader, { children: [
8830
+ /* @__PURE__ */ jsxRuntime.jsx(ProtectionIconWrap, { children: BuildingIcon }),
8831
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
8832
+ /* @__PURE__ */ jsxRuntime.jsx(ProtectionTitle, { children: "Independent Valuation" }),
8833
+ /* @__PURE__ */ jsxRuntime.jsxs(ProtectionStatus, { children: [
8834
+ /* @__PURE__ */ jsxRuntime.jsx(ProtectionStatusDot, {}),
8835
+ "Current"
8836
+ ] })
8837
+ ] })
8838
+ ] }),
8839
+ /* @__PURE__ */ jsxRuntime.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." }),
8840
+ /* @__PURE__ */ jsxRuntime.jsxs(ProtectionDocs, { children: [
8841
+ /* @__PURE__ */ jsxRuntime.jsx(ProtectionDocTag, { children: "Valuation Report" }),
8842
+ /* @__PURE__ */ jsxRuntime.jsx(ProtectionDocTag, { children: "Methodology" })
8843
+ ] })
8844
+ ] })
8845
+ ] }),
8846
+ /* @__PURE__ */ jsxRuntime.jsxs(SecurityFooter, { children: [
8847
+ "Full documentation including legal opinions, mortgage instruments, SPV constitutions, and valuation reports is available in the ",
8848
+ /* @__PURE__ */ jsxRuntime.jsx("strong", { children: "Documents" }),
8849
+ " tab."
8850
+ ] })
8765
8851
  ] })
8766
8852
  ] });
8767
8853
  }
@@ -9135,6 +9221,62 @@ var TradingHoursNote = styled9__default.default.div`
9135
9221
  color: rgba(255,255,255,0.35);
9136
9222
  border-top: 1px solid rgba(255,255,255,0.04);
9137
9223
  `;
9224
+ var SecurityIntro = styled9__default.default.p`
9225
+ font-size: 0.85rem;
9226
+ color: rgba(255,255,255,0.5);
9227
+ line-height: 1.6;
9228
+ margin: 0 0 1.5rem;
9229
+ max-width: 720px;
9230
+ `;
9231
+ var SecurityTopRow = styled9__default.default.div`
9232
+ display: flex;
9233
+ gap: 1rem;
9234
+ margin-bottom: 1.25rem;
9235
+ @media (max-width: 768px) { flex-direction: column; }
9236
+ `;
9237
+ var SecurityBadge = styled9__default.default.div`
9238
+ flex: 1;
9239
+ display: flex;
9240
+ align-items: center;
9241
+ gap: 1rem;
9242
+ background: rgba(212,175,55,0.04);
9243
+ border: 1px solid rgba(212,175,55,0.15);
9244
+ border-radius: 10px;
9245
+ padding: 1rem 1.25rem;
9246
+ `;
9247
+ var SecurityBadgeIcon = styled9__default.default.div`
9248
+ width: 40px;
9249
+ height: 40px;
9250
+ border-radius: 8px;
9251
+ background: rgba(212,175,55,0.1);
9252
+ display: flex;
9253
+ align-items: center;
9254
+ justify-content: center;
9255
+ flex-shrink: 0;
9256
+ `;
9257
+ var SecurityBadgeContent = styled9__default.default.div`
9258
+ display: flex;
9259
+ flex-direction: column;
9260
+ gap: 4px;
9261
+ `;
9262
+ var SecurityBadgeLabel = styled9__default.default.span`
9263
+ font-size: 0.72rem;
9264
+ color: rgba(255,255,255,0.45);
9265
+ text-transform: uppercase;
9266
+ letter-spacing: 0.04em;
9267
+ font-weight: 500;
9268
+ `;
9269
+ var SecurityBadgeLogo = styled9__default.default.div`
9270
+ display: flex;
9271
+ align-items: center;
9272
+ height: 28px;
9273
+ `;
9274
+ var SecurityBadgeValuer = styled9__default.default.div`
9275
+ font-size: 1rem;
9276
+ font-weight: 600;
9277
+ color: #fff;
9278
+ letter-spacing: 0.02em;
9279
+ `;
9138
9280
  var ProtectionsGrid = styled9__default.default.div`
9139
9281
  display: grid;
9140
9282
  grid-template-columns: 1fr 1fr;
@@ -9146,6 +9288,14 @@ var ProtectionCard = styled9__default.default.div`
9146
9288
  border: 1px solid rgba(255,255,255,0.06);
9147
9289
  border-radius: 10px;
9148
9290
  padding: 1.25rem;
9291
+ display: flex;
9292
+ flex-direction: column;
9293
+ gap: 0.75rem;
9294
+ `;
9295
+ var ProtectionCardHeader = styled9__default.default.div`
9296
+ display: flex;
9297
+ align-items: flex-start;
9298
+ gap: 0.75rem;
9149
9299
  `;
9150
9300
  var ProtectionIconWrap = styled9__default.default.div`
9151
9301
  width: 36px;
@@ -9155,18 +9305,62 @@ var ProtectionIconWrap = styled9__default.default.div`
9155
9305
  display: flex;
9156
9306
  align-items: center;
9157
9307
  justify-content: center;
9158
- margin-bottom: 0.75rem;
9308
+ flex-shrink: 0;
9159
9309
  `;
9160
9310
  var ProtectionTitle = styled9__default.default.div`
9161
9311
  font-size: 0.92rem;
9162
9312
  font-weight: 600;
9163
9313
  color: #fff;
9164
- margin-bottom: 0.4rem;
9314
+ margin-bottom: 2px;
9315
+ `;
9316
+ var ProtectionStatus = styled9__default.default.div`
9317
+ display: flex;
9318
+ align-items: center;
9319
+ gap: 5px;
9320
+ font-size: 0.72rem;
9321
+ color: #4ade80;
9322
+ font-weight: 500;
9323
+ `;
9324
+ var ProtectionStatusDot = styled9__default.default.span`
9325
+ width: 6px;
9326
+ height: 6px;
9327
+ border-radius: 50%;
9328
+ background: #4ade80;
9329
+ display: inline-block;
9165
9330
  `;
9166
9331
  var ProtectionDesc = styled9__default.default.div`
9167
9332
  font-size: 0.8rem;
9168
9333
  color: rgba(255,255,255,0.5);
9334
+ line-height: 1.6;
9335
+ `;
9336
+ var ProtectionDocs = styled9__default.default.div`
9337
+ display: flex;
9338
+ flex-wrap: wrap;
9339
+ gap: 6px;
9340
+ margin-top: auto;
9341
+ `;
9342
+ var ProtectionDocTag = styled9__default.default.span`
9343
+ font-size: 0.68rem;
9344
+ color: rgba(212,175,55,0.8);
9345
+ background: rgba(212,175,55,0.08);
9346
+ border: 1px solid rgba(212,175,55,0.12);
9347
+ border-radius: 4px;
9348
+ padding: 3px 8px;
9349
+ font-weight: 500;
9350
+ `;
9351
+ var SecurityFooter = styled9__default.default.div`
9352
+ margin-top: 1.25rem;
9353
+ padding: 0.85rem 1rem;
9354
+ background: rgba(255,255,255,0.02);
9355
+ border: 1px solid rgba(255,255,255,0.05);
9356
+ border-radius: 8px;
9357
+ font-size: 0.78rem;
9358
+ color: rgba(255,255,255,0.4);
9169
9359
  line-height: 1.5;
9360
+ strong {
9361
+ color: rgba(212,175,55,0.8);
9362
+ font-weight: 600;
9363
+ }
9170
9364
  `;
9171
9365
  var HoldRatioWrap = styled9__default.default.div`
9172
9366
  display: flex;