@loafmarkets/ui 0.1.356 → 0.1.357

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.d.mts CHANGED
@@ -772,8 +772,6 @@ type PropertyOverviewProps = {
772
772
  chain?: string;
773
773
  percentageTokenized?: number | null;
774
774
  volume24h?: number | null;
775
- openOrdersValue?: number | null;
776
- holderCount?: number | null;
777
775
  priceHistory?: {
778
776
  time: number;
779
777
  close: number;
@@ -788,7 +786,7 @@ type PropertyOverviewProps = {
788
786
  marketClosedDays: readonly string[];
789
787
  } | null;
790
788
  };
791
- declare function PropertyOverview({ propertyName: _propertyName, location, midPrice, onTradeClick, onDocumentsClick, onPhotosClick, description: descriptionProp, tradeButtonLabel, images, galleryCategories, videoUrl, tokenName, landSizeSqm: landProp, buildingSizeSqm: buildingProp, features: featuresProp, propertyInfo: _propertyInfoProp, overviewData, bedrooms, bathrooms, carSpaces, propertyTypeLabel, tokensIssued: tokensIssuedProp, isLoading, ticker, contractAddress, chain, volume24h, openOrdersValue, holderCount, priceHistory: priceHistoryProp, beta, marketHours, }: PropertyOverviewProps): react_jsx_runtime.JSX.Element;
789
+ declare function PropertyOverview({ propertyName: _propertyName, location, midPrice, onTradeClick, onDocumentsClick, onPhotosClick, description: descriptionProp, tradeButtonLabel, images, galleryCategories, videoUrl, tokenName, landSizeSqm: landProp, buildingSizeSqm: buildingProp, features: featuresProp, propertyInfo: _propertyInfoProp, overviewData, bedrooms, bathrooms, carSpaces, propertyTypeLabel, tokensIssued: tokensIssuedProp, isLoading, ticker, contractAddress, chain, volume24h, priceHistory: priceHistoryProp, beta, marketHours, }: PropertyOverviewProps): react_jsx_runtime.JSX.Element;
792
790
 
793
791
  type OfferStatus = 'active' | 'rejected' | 'expired' | 'historical' | 'pending';
794
792
  type PropertyOffer = {
package/dist/index.d.ts CHANGED
@@ -772,8 +772,6 @@ type PropertyOverviewProps = {
772
772
  chain?: string;
773
773
  percentageTokenized?: number | null;
774
774
  volume24h?: number | null;
775
- openOrdersValue?: number | null;
776
- holderCount?: number | null;
777
775
  priceHistory?: {
778
776
  time: number;
779
777
  close: number;
@@ -788,7 +786,7 @@ type PropertyOverviewProps = {
788
786
  marketClosedDays: readonly string[];
789
787
  } | null;
790
788
  };
791
- declare function PropertyOverview({ propertyName: _propertyName, location, midPrice, onTradeClick, onDocumentsClick, onPhotosClick, description: descriptionProp, tradeButtonLabel, images, galleryCategories, videoUrl, tokenName, landSizeSqm: landProp, buildingSizeSqm: buildingProp, features: featuresProp, propertyInfo: _propertyInfoProp, overviewData, bedrooms, bathrooms, carSpaces, propertyTypeLabel, tokensIssued: tokensIssuedProp, isLoading, ticker, contractAddress, chain, volume24h, openOrdersValue, holderCount, priceHistory: priceHistoryProp, beta, marketHours, }: PropertyOverviewProps): react_jsx_runtime.JSX.Element;
789
+ declare function PropertyOverview({ propertyName: _propertyName, location, midPrice, onTradeClick, onDocumentsClick, onPhotosClick, description: descriptionProp, tradeButtonLabel, images, galleryCategories, videoUrl, tokenName, landSizeSqm: landProp, buildingSizeSqm: buildingProp, features: featuresProp, propertyInfo: _propertyInfoProp, overviewData, bedrooms, bathrooms, carSpaces, propertyTypeLabel, tokensIssued: tokensIssuedProp, isLoading, ticker, contractAddress, chain, volume24h, priceHistory: priceHistoryProp, beta, marketHours, }: PropertyOverviewProps): react_jsx_runtime.JSX.Element;
792
790
 
793
791
  type OfferStatus = 'active' | 'rejected' | 'expired' | 'historical' | 'pending';
794
792
  type PropertyOffer = {
package/dist/index.js CHANGED
@@ -9038,15 +9038,12 @@ function PropertyOverview({
9038
9038
  contractAddress,
9039
9039
  chain = "Base (Ethereum L2)",
9040
9040
  volume24h,
9041
- openOrdersValue,
9042
- holderCount,
9043
9041
  priceHistory: priceHistoryProp,
9044
9042
  beta = false,
9045
9043
  marketHours
9046
9044
  }) {
9047
9045
  const [isDescExpanded, setDescExpanded] = React5.useState(false);
9048
9046
  const [showDividendHistory, setShowDividendHistory] = React5.useState(false);
9049
- const [showHolders, setShowHolders] = React5.useState(false);
9050
9047
  const [copiedAddress, setCopiedAddress] = React5.useState(false);
9051
9048
  const [statsTab, setStatsTab] = React5.useState("token");
9052
9049
  const description = descriptionProp ?? overviewData?.description ?? DEFAULT_DESCRIPTION;
@@ -9100,9 +9097,7 @@ function PropertyOverview({
9100
9097
  const tokenStats = [
9101
9098
  { label: "Token Price", value: isLoading && tokenPriceValue == null ? loadingSkeleton : tokenPriceValue ? `$${tokenPriceValue.toFixed(2)}` : "\u2014", gold: true },
9102
9099
  { label: "24h Volume", value: isLoading && vol24hDollar == null ? loadingSkeleton : vol24hDollar != null && vol24hDollar > 0 ? fmtDollar(vol24hDollar) : "\u2014" },
9103
- { label: "Dividend Yield", value: isLoading && currentDividendYield == null ? loadingSkeleton : currentDividendYield ? `${currentDividendYield}%` : "\u2014" },
9104
- { label: "Open Orders", value: isLoading && openOrdersValue == null ? loadingSkeleton : openOrdersValue != null && openOrdersValue > 0 ? fmtDollar(openOrdersValue) : "\u2014" },
9105
- { label: "Holders", value: isLoading && holderCount == null ? loadingSkeleton : holderCount != null ? holderCount.toLocaleString() : "\u2014" }
9100
+ { label: "Dividend Yield", value: isLoading && currentDividendYield == null ? loadingSkeleton : currentDividendYield ? `${currentDividendYield}%` : "\u2014" }
9106
9101
  ];
9107
9102
  const growthPct = overviewData?.growth5Yr;
9108
9103
  const propertyStats = [
@@ -9169,7 +9164,7 @@ function PropertyOverview({
9169
9164
  /* @__PURE__ */ jsxRuntime.jsx(StatsRowLabel, { children: "Token Performance" }),
9170
9165
  /* @__PURE__ */ jsxRuntime.jsx(StatsHRow, { children: tokenStats.map((item) => /* @__PURE__ */ jsxRuntime.jsxs(StatsHCell, { children: [
9171
9166
  /* @__PURE__ */ jsxRuntime.jsx(StatsHCellLabel, { children: item.label }),
9172
- item.label === "Holders" && holderCount != null && !beta ? /* @__PURE__ */ jsxRuntime.jsx(StatValueClickable, { onClick: () => setShowHolders(true), children: item.value }) : /* @__PURE__ */ jsxRuntime.jsx(StatsHCellValue, { $gold: !!item.gold, children: item.value })
9167
+ /* @__PURE__ */ jsxRuntime.jsx(StatsHCellValue, { $gold: !!item.gold, children: item.value })
9173
9168
  ] }, item.label)) })
9174
9169
  ] }),
9175
9170
  /* @__PURE__ */ jsxRuntime.jsxs(StatsRowSection, { children: [
@@ -9188,7 +9183,7 @@ function PropertyOverview({
9188
9183
  ] }),
9189
9184
  statsTab === "token" && /* @__PURE__ */ jsxRuntime.jsx(StatsTabContent, { children: tokenStats.map((item) => /* @__PURE__ */ jsxRuntime.jsxs(StatRow, { $gold: !!item.gold, children: [
9190
9185
  /* @__PURE__ */ jsxRuntime.jsx(StatLabel, { children: item.label }),
9191
- item.label === "Holders" && holderCount != null && !beta ? /* @__PURE__ */ jsxRuntime.jsx(StatValueClickable, { onClick: () => setShowHolders(true), children: item.value }) : /* @__PURE__ */ jsxRuntime.jsx(StatValue, { $gold: !!item.gold, children: item.value })
9186
+ /* @__PURE__ */ jsxRuntime.jsx(StatValue, { $gold: !!item.gold, children: item.value })
9192
9187
  ] }, item.label)) }),
9193
9188
  statsTab === "property" && /* @__PURE__ */ jsxRuntime.jsxs(StatsTabContent, { children: [
9194
9189
  propertyStats.map((item) => /* @__PURE__ */ jsxRuntime.jsxs(StatRow, { children: [
@@ -9210,14 +9205,6 @@ function PropertyOverview({
9210
9205
  onClose: () => setShowDividendHistory(false)
9211
9206
  }
9212
9207
  ),
9213
- showHolders && /* @__PURE__ */ jsxRuntime.jsx(
9214
- HoldersPopup,
9215
- {
9216
- contractAddress,
9217
- ticker,
9218
- onClose: () => setShowHolders(false)
9219
- }
9220
- ),
9221
9208
  /* @__PURE__ */ jsxRuntime.jsxs(Section, { children: [
9222
9209
  /* @__PURE__ */ jsxRuntime.jsx(SectionHeader, { children: "The Asset" }),
9223
9210
  galleryImages.length > 0 && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
@@ -9274,14 +9261,6 @@ function PropertyOverview({
9274
9261
  /* @__PURE__ */ jsxRuntime.jsx(StatLabel, { children: "Suburb Median" }),
9275
9262
  /* @__PURE__ */ jsxRuntime.jsx(StatValue, { children: overviewData?.suburbMedian != null ? fmtDollar(overviewData.suburbMedian) : "\u2014" })
9276
9263
  ] }),
9277
- /* @__PURE__ */ jsxRuntime.jsxs(StatRow, { children: [
9278
- /* @__PURE__ */ jsxRuntime.jsx(StatLabel, { children: "5yr Property Growth" }),
9279
- /* @__PURE__ */ jsxRuntime.jsx(StatValue, { style: growthPct != null && growthPct > 0 ? { color: "#4ade80" } : void 0, children: growthPct != null ? `${growthPct > 0 ? "+" : ""}${growthPct}%` : "\u2014" })
9280
- ] }),
9281
- /* @__PURE__ */ jsxRuntime.jsxs(StatRow, { children: [
9282
- /* @__PURE__ */ jsxRuntime.jsx(StatLabel, { children: "Current Dividend" }),
9283
- /* @__PURE__ */ jsxRuntime.jsx(StatValue, { children: overviewData?.lastDividend != null ? `$${overviewData.lastDividend.toFixed(2)} / share / mo` : "\u2014" })
9284
- ] }),
9285
9264
  propertyHistory.length > 0 && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
9286
9265
  /* @__PURE__ */ jsxRuntime.jsx(StatsColumnHeader, { style: { marginTop: "1.25rem" }, children: "Capital History" }),
9287
9266
  /* @__PURE__ */ jsxRuntime.jsx(TimelineWrap, { children: propertyHistory.map((h, i) => {
@@ -9506,65 +9485,6 @@ function DividendHistoryPopup({
9506
9485
  ] }) })
9507
9486
  ] }) });
9508
9487
  }
9509
- var MOCK_HOLDERS = [
9510
- { rank: 1, address: "0xA1b2...9F3e", label: "Loaf Treasury", tokens: 12500, pct: 25 },
9511
- { rank: 2, address: "0xC4d5...1A7b", label: null, tokens: 6200, pct: 12.4 },
9512
- { rank: 3, address: "0xE8f9...3C2d", label: null, tokens: 4800, pct: 9.6 },
9513
- { rank: 4, address: "0x2B3c...7D4e", label: "Market Maker", tokens: 3500, pct: 7 },
9514
- { rank: 5, address: "0x5F6a...8E1c", label: null, tokens: 2900, pct: 5.8 },
9515
- { rank: 6, address: "0x7A8b...0F2d", label: null, tokens: 2400, pct: 4.8 },
9516
- { rank: 7, address: "0x9C0d...4A3e", label: null, tokens: 1800, pct: 3.6 },
9517
- { rank: 8, address: "0xB1e2...6C5f", label: null, tokens: 1500, pct: 3 },
9518
- { rank: 9, address: "0xD3f4...8E7a", label: null, tokens: 1200, pct: 2.4 },
9519
- { rank: 10, address: "0xF5a6...2B9c", label: null, tokens: 950, pct: 1.9 }
9520
- ];
9521
- function HoldersPopup({
9522
- contractAddress,
9523
- ticker,
9524
- onClose
9525
- }) {
9526
- React5.useEffect(() => {
9527
- const handleEsc = (e) => {
9528
- if (e.key === "Escape") onClose();
9529
- };
9530
- window.addEventListener("keydown", handleEsc);
9531
- return () => window.removeEventListener("keydown", handleEsc);
9532
- }, [onClose]);
9533
- const basescanUrl = contractAddress ? `https://sepolia.basescan.org/token/${contractAddress}#balances` : "https://sepolia.basescan.org";
9534
- return /* @__PURE__ */ jsxRuntime.jsx(DivPopupOverlay, { onClick: onClose, children: /* @__PURE__ */ jsxRuntime.jsxs(HoldersPanel, { onClick: (e) => e.stopPropagation(), children: [
9535
- /* @__PURE__ */ jsxRuntime.jsxs(DivPopupHeader, { children: [
9536
- /* @__PURE__ */ jsxRuntime.jsxs(DivPopupTitle, { children: [
9537
- "Top Holders",
9538
- ticker ? ` (${ticker})` : ""
9539
- ] }),
9540
- /* @__PURE__ */ jsxRuntime.jsxs(HoldersHeaderRight, { children: [
9541
- /* @__PURE__ */ jsxRuntime.jsx(HoldersBasescanLink, { href: basescanUrl, target: "_blank", rel: "noopener noreferrer", children: "View on BaseScan\xA0\u2197" }),
9542
- /* @__PURE__ */ jsxRuntime.jsx(DivPopupClose, { onClick: onClose, "aria-label": "Close holders", children: "\u2715" })
9543
- ] })
9544
- ] }),
9545
- /* @__PURE__ */ jsxRuntime.jsxs(HoldersTableWrap, { children: [
9546
- /* @__PURE__ */ jsxRuntime.jsxs(HoldersTableHeader, { children: [
9547
- /* @__PURE__ */ jsxRuntime.jsx(HoldersColRank, { children: "#" }),
9548
- /* @__PURE__ */ jsxRuntime.jsx(HoldersColAddr, { children: "Address" }),
9549
- /* @__PURE__ */ jsxRuntime.jsx(HoldersColTokens, { children: "Tokens" }),
9550
- /* @__PURE__ */ jsxRuntime.jsx(HoldersColPct, { children: "%" })
9551
- ] }),
9552
- MOCK_HOLDERS.map((h) => /* @__PURE__ */ jsxRuntime.jsxs(HoldersTableRow, { children: [
9553
- /* @__PURE__ */ jsxRuntime.jsx(HoldersColRank, { children: h.rank }),
9554
- /* @__PURE__ */ jsxRuntime.jsxs(HoldersColAddr, { children: [
9555
- /* @__PURE__ */ jsxRuntime.jsx(HolderAddrLink, { href: `https://sepolia.basescan.org/address/${h.address.replace("...", "")}`, target: "_blank", rel: "noopener noreferrer", children: h.address }),
9556
- h.label && /* @__PURE__ */ jsxRuntime.jsx(HolderLabel, { children: h.label })
9557
- ] }),
9558
- /* @__PURE__ */ jsxRuntime.jsx(HoldersColTokens, { children: h.tokens.toLocaleString() }),
9559
- /* @__PURE__ */ jsxRuntime.jsxs(HoldersColPct, { children: [
9560
- h.pct.toFixed(1),
9561
- "%"
9562
- ] })
9563
- ] }, h.rank))
9564
- ] }),
9565
- /* @__PURE__ */ jsxRuntime.jsx(HoldersFooter, { children: /* @__PURE__ */ jsxRuntime.jsx(HoldersFullListBtn, { href: basescanUrl, target: "_blank", rel: "noopener noreferrer", children: "See Full List of Holders\xA0\u2197" }) })
9566
- ] }) });
9567
- }
9568
9488
  var Wrapper = styled9__default.default.div`
9569
9489
  display: flex;
9570
9490
  flex-direction: column;
@@ -10174,133 +10094,6 @@ var DivTableTD = styled9__default.default.td`
10174
10094
  font-size: 0.82rem;
10175
10095
  color: rgba(255,255,255,0.75);
10176
10096
  `;
10177
- var HoldersPanel = styled9__default.default.div`
10178
- background: #111;
10179
- border: 1px solid rgba(255,255,255,0.08);
10180
- border-radius: 14px;
10181
- width: 90%;
10182
- max-width: 520px;
10183
- max-height: 85vh;
10184
- overflow-y: auto;
10185
- display: flex;
10186
- flex-direction: column;
10187
- `;
10188
- var HoldersHeaderRight = styled9__default.default.div`
10189
- display: flex;
10190
- align-items: center;
10191
- gap: 1rem;
10192
- `;
10193
- var HoldersBasescanLink = styled9__default.default.a`
10194
- font-size: 0.75rem;
10195
- color: rgba(255,255,255,0.4);
10196
- text-decoration: none;
10197
- transition: color 0.15s;
10198
- &:hover { color: rgba(212,175,55,0.9); }
10199
- `;
10200
- var HoldersTableWrap = styled9__default.default.div`
10201
- padding: 0 1.5rem;
10202
- `;
10203
- var HoldersTableHeader = styled9__default.default.div`
10204
- display: flex;
10205
- align-items: center;
10206
- padding: 0.6rem 0;
10207
- border-bottom: 1px solid rgba(255,255,255,0.08);
10208
- font-size: 0.65rem;
10209
- font-weight: 500;
10210
- color: rgba(255,255,255,0.4);
10211
- text-transform: uppercase;
10212
- letter-spacing: 0.06em;
10213
- `;
10214
- var HoldersTableRow = styled9__default.default.div`
10215
- display: flex;
10216
- align-items: center;
10217
- padding: 0.6rem 0;
10218
- border-bottom: 1px solid rgba(255,255,255,0.03);
10219
- font-size: 0.82rem;
10220
- color: rgba(255,255,255,0.75);
10221
- border-radius: 6px;
10222
- transition: background 0.15s;
10223
- &:hover { background: rgba(255,255,255,0.03); }
10224
- &:last-child { border-bottom: none; }
10225
- `;
10226
- var HoldersColRank = styled9__default.default.span`
10227
- width: 32px;
10228
- flex-shrink: 0;
10229
- color: rgba(255,255,255,0.35);
10230
- font-size: 0.75rem;
10231
- `;
10232
- var HoldersColAddr = styled9__default.default.span`
10233
- flex: 1;
10234
- min-width: 0;
10235
- display: flex;
10236
- align-items: center;
10237
- gap: 0.5rem;
10238
- `;
10239
- var HolderAddrLink = styled9__default.default.a`
10240
- font-family: monospace;
10241
- font-size: 0.8rem;
10242
- color: rgba(255,255,255,0.7);
10243
- text-decoration: none;
10244
- &:hover { color: rgba(212,175,55,0.9); }
10245
- `;
10246
- var HolderLabel = styled9__default.default.span`
10247
- font-size: 0.68rem;
10248
- color: rgba(212,175,55,0.7);
10249
- background: rgba(212,175,55,0.08);
10250
- padding: 1px 6px;
10251
- border-radius: 4px;
10252
- white-space: nowrap;
10253
- `;
10254
- var HoldersColTokens = styled9__default.default.span`
10255
- width: 90px;
10256
- text-align: right;
10257
- flex-shrink: 0;
10258
- font-variant-numeric: tabular-nums;
10259
- `;
10260
- var HoldersColPct = styled9__default.default.span`
10261
- width: 55px;
10262
- text-align: right;
10263
- flex-shrink: 0;
10264
- font-variant-numeric: tabular-nums;
10265
- color: rgba(255,255,255,0.5);
10266
- `;
10267
- var HoldersFooter = styled9__default.default.div`
10268
- padding: 1rem 1.5rem 1.25rem;
10269
- display: flex;
10270
- justify-content: center;
10271
- `;
10272
- var HoldersFullListBtn = styled9__default.default.a`
10273
- display: inline-flex;
10274
- align-items: center;
10275
- padding: 0.55rem 1.5rem;
10276
- border: 1px solid rgba(255,255,255,0.1);
10277
- border-radius: 8px;
10278
- background: rgba(255,255,255,0.03);
10279
- color: rgba(255,255,255,0.6);
10280
- font-size: 0.78rem;
10281
- font-weight: 500;
10282
- text-decoration: none;
10283
- transition: border-color 0.15s, color 0.15s, background 0.15s;
10284
- &:hover {
10285
- border-color: rgba(212,175,55,0.4);
10286
- color: rgba(212,175,55,0.9);
10287
- background: rgba(212,175,55,0.05);
10288
- }
10289
- `;
10290
- var StatValueClickable = styled9__default.default.span`
10291
- font-size: 0.88rem;
10292
- font-weight: 500;
10293
- color: #fff;
10294
- cursor: pointer;
10295
- text-decoration: underline;
10296
- text-underline-offset: 3px;
10297
- text-decoration-color: rgba(255,255,255,0.15);
10298
- transition: color 0.15s, text-decoration-color 0.15s;
10299
- &:hover {
10300
- color: rgba(212,175,55,0.9);
10301
- text-decoration-color: rgba(212,175,55,0.5);
10302
- }
10303
- `;
10304
10097
  var STATUS_BG = {
10305
10098
  active: "rgba(14,203,129,0.18)",
10306
10099
  rejected: "rgba(246,70,93,0.18)",