@loafmarkets/ui 0.1.262 → 0.1.264

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
@@ -900,13 +900,14 @@ type PortfolioActivityPanelProps = {
900
900
  price?: number;
901
901
  }) => Promise<void>;
902
902
  cancellingOrderId?: number | null;
903
+ compactPositions?: boolean;
903
904
  defaultTab?: ActivityTabId;
904
905
  pageSize?: number;
905
906
  blockExplorerBaseUrl?: string;
906
907
  className?: string;
907
908
  style?: React.CSSProperties;
908
909
  };
909
- declare function PortfolioActivityPanel({ positions, showPositionsTab, onPositionClick, onClosePosition, offeringOrders, openOrders, orderHistory, tradeHistory, transfers, onCancelOrder, onCancelAllOrders, onAmendOrder, cancellingOrderId, defaultTab, pageSize, blockExplorerBaseUrl, className, style, }: PortfolioActivityPanelProps): react_jsx_runtime.JSX.Element;
910
+ declare function PortfolioActivityPanel({ positions, showPositionsTab, onPositionClick, onClosePosition, offeringOrders, openOrders, orderHistory, tradeHistory, transfers, onCancelOrder, onCancelAllOrders, onAmendOrder, cancellingOrderId, compactPositions, defaultTab, pageSize, blockExplorerBaseUrl, className, style, }: PortfolioActivityPanelProps): react_jsx_runtime.JSX.Element;
910
911
 
911
912
  type SelectorItem = {
912
913
  readonly tokenName: string;
package/dist/index.d.ts CHANGED
@@ -900,13 +900,14 @@ type PortfolioActivityPanelProps = {
900
900
  price?: number;
901
901
  }) => Promise<void>;
902
902
  cancellingOrderId?: number | null;
903
+ compactPositions?: boolean;
903
904
  defaultTab?: ActivityTabId;
904
905
  pageSize?: number;
905
906
  blockExplorerBaseUrl?: string;
906
907
  className?: string;
907
908
  style?: React.CSSProperties;
908
909
  };
909
- declare function PortfolioActivityPanel({ positions, showPositionsTab, onPositionClick, onClosePosition, offeringOrders, openOrders, orderHistory, tradeHistory, transfers, onCancelOrder, onCancelAllOrders, onAmendOrder, cancellingOrderId, defaultTab, pageSize, blockExplorerBaseUrl, className, style, }: PortfolioActivityPanelProps): react_jsx_runtime.JSX.Element;
910
+ declare function PortfolioActivityPanel({ positions, showPositionsTab, onPositionClick, onClosePosition, offeringOrders, openOrders, orderHistory, tradeHistory, transfers, onCancelOrder, onCancelAllOrders, onAmendOrder, cancellingOrderId, compactPositions, defaultTab, pageSize, blockExplorerBaseUrl, className, style, }: PortfolioActivityPanelProps): react_jsx_runtime.JSX.Element;
910
911
 
911
912
  type SelectorItem = {
912
913
  readonly tokenName: string;
package/dist/index.js CHANGED
@@ -13639,6 +13639,7 @@ function PortfolioActivityPanel({
13639
13639
  onCancelAllOrders,
13640
13640
  onAmendOrder,
13641
13641
  cancellingOrderId = null,
13642
+ compactPositions = false,
13642
13643
  defaultTab,
13643
13644
  pageSize = ACTIVITY_PAGE_SIZE_DEFAULT,
13644
13645
  blockExplorerBaseUrl = "https://sepolia.basescan.org/tx",
@@ -13663,6 +13664,41 @@ function PortfolioActivityPanel({
13663
13664
  setPosSortAsc(key === "asset");
13664
13665
  }
13665
13666
  };
13667
+ const [expandedPositions, setExpandedPositions] = React5.useState(/* @__PURE__ */ new Set());
13668
+ const [allExpanded, setAllExpanded] = React5.useState(false);
13669
+ const togglePosition = (tokenName) => {
13670
+ setExpandedPositions((prev) => {
13671
+ const next = new Set(prev);
13672
+ if (next.has(tokenName)) next.delete(tokenName);
13673
+ else next.add(tokenName);
13674
+ return next;
13675
+ });
13676
+ };
13677
+ const sortKeyLabel = (key) => {
13678
+ switch (key) {
13679
+ case "asset":
13680
+ return "Asset";
13681
+ case "units":
13682
+ return "Units";
13683
+ case "value":
13684
+ return "Value";
13685
+ case "avgPrice":
13686
+ return "Avg Price";
13687
+ case "currentPrice":
13688
+ return "Price";
13689
+ case "pnl":
13690
+ return "PNL";
13691
+ default:
13692
+ return "Asset";
13693
+ }
13694
+ };
13695
+ const sortKeys = ["asset", "units", "value", "avgPrice", "currentPrice", "pnl"];
13696
+ const cycleSortKey = () => {
13697
+ const idx = sortKeys.indexOf(posSortKey);
13698
+ const nextKey = sortKeys[(idx + 1) % sortKeys.length];
13699
+ setPosSortKey(nextKey);
13700
+ setPosSortAsc(true);
13701
+ };
13666
13702
  const sortedPositions = React5.useMemo(() => {
13667
13703
  const arr = [...positions];
13668
13704
  const dir = posSortAsc ? 1 : -1;
@@ -13689,6 +13725,15 @@ function PortfolioActivityPanel({
13689
13725
  });
13690
13726
  return arr;
13691
13727
  }, [positions, posSortKey, posSortAsc]);
13728
+ const toggleExpandAll = () => {
13729
+ if (allExpanded) {
13730
+ setExpandedPositions(/* @__PURE__ */ new Set());
13731
+ setAllExpanded(false);
13732
+ } else {
13733
+ setExpandedPositions(new Set(sortedPositions.map((p) => p.tokenName)));
13734
+ setAllExpanded(true);
13735
+ }
13736
+ };
13692
13737
  const activeTabTotal = React5.useMemo(() => {
13693
13738
  switch (activeTab) {
13694
13739
  case "positions":
@@ -13769,7 +13814,70 @@ function PortfolioActivityPanel({
13769
13814
  ] }),
13770
13815
  activeTab === "positions" && showPositionsTab && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
13771
13816
  positions.length === 0 && /* @__PURE__ */ jsxRuntime.jsx(EmptyState, { children: "No positions yet. Subscribe to an offering or buy on the secondary market." }),
13772
- positions.length > 0 && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
13817
+ positions.length > 0 && compactPositions && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
13818
+ /* @__PURE__ */ jsxRuntime.jsxs(CompactToolbar, { children: [
13819
+ /* @__PURE__ */ jsxRuntime.jsxs(CompactSortBtn, { onClick: cycleSortKey, children: [
13820
+ "Sort by: ",
13821
+ sortKeyLabel(posSortKey),
13822
+ " ",
13823
+ posSortAsc ? "\u2191" : "\u2193"
13824
+ ] }),
13825
+ /* @__PURE__ */ jsxRuntime.jsxs(CompactToolbarRight, { children: [
13826
+ /* @__PURE__ */ jsxRuntime.jsx(CompactActionBtn, { onClick: toggleExpandAll, children: allExpanded ? "Collapse All" : "Expand All" }),
13827
+ onClosePosition && /* @__PURE__ */ jsxRuntime.jsx(CompactSellAllBtn, { onClick: () => setCloseAllOpen(true), children: "Sell All" })
13828
+ ] })
13829
+ ] }),
13830
+ pageSlice(sortedPositions).map((pos) => {
13831
+ const currentValue = pos.quantity * pos.marketPrice;
13832
+ const costBasis = pos.quantity * pos.averageEntryPrice;
13833
+ const pnl = pos.propertyPnl ?? currentValue - costBasis;
13834
+ const pnlPercent = pos.propertyPnlPercent ?? pos.percentChange ?? 0;
13835
+ const isPositive = pnl >= 0;
13836
+ const isExpanded = expandedPositions.has(pos.tokenName);
13837
+ return /* @__PURE__ */ jsxRuntime.jsxs(CompactCard, { children: [
13838
+ /* @__PURE__ */ jsxRuntime.jsxs(CompactCardHeader, { onClick: () => togglePosition(pos.tokenName), children: [
13839
+ /* @__PURE__ */ jsxRuntime.jsx(CompactAsset, { onClick: (e) => {
13840
+ e.stopPropagation();
13841
+ onPositionClick?.(pos.tokenName, pos.isIpoAllocation);
13842
+ }, children: pos.tokenName }),
13843
+ /* @__PURE__ */ jsxRuntime.jsxs(CompactUnits, { children: [
13844
+ formatNumber2(pos.quantity),
13845
+ " units"
13846
+ ] }),
13847
+ /* @__PURE__ */ jsxRuntime.jsxs(CompactPnl, { $positive: isPositive, children: [
13848
+ isPositive ? "+" : "-",
13849
+ formatCurrency4(Math.abs(pnl)),
13850
+ " (",
13851
+ isPositive ? "+" : "",
13852
+ pnlPercent.toFixed(1),
13853
+ "%)"
13854
+ ] }),
13855
+ /* @__PURE__ */ jsxRuntime.jsx(CompactChevron, { $expanded: isExpanded, children: /* @__PURE__ */ jsxRuntime.jsx(fi.FiChevronDown, { size: 14 }) })
13856
+ ] }),
13857
+ isExpanded && /* @__PURE__ */ jsxRuntime.jsxs(CompactCardBody, { children: [
13858
+ /* @__PURE__ */ jsxRuntime.jsxs(CompactDetailRow, { children: [
13859
+ /* @__PURE__ */ jsxRuntime.jsxs(CompactDetail, { children: [
13860
+ /* @__PURE__ */ jsxRuntime.jsx(CompactDetailLabel, { children: "Position Value" }),
13861
+ /* @__PURE__ */ jsxRuntime.jsx(CompactDetailValue, { children: formatCurrency4(currentValue, { minimumFractionDigits: 0, maximumFractionDigits: 0 }) })
13862
+ ] }),
13863
+ /* @__PURE__ */ jsxRuntime.jsxs(CompactDetail, { children: [
13864
+ /* @__PURE__ */ jsxRuntime.jsx(CompactDetailLabel, { children: "Avg Price" }),
13865
+ /* @__PURE__ */ jsxRuntime.jsx(CompactDetailValue, { children: formatCurrency4(pos.averageEntryPrice) })
13866
+ ] }),
13867
+ /* @__PURE__ */ jsxRuntime.jsxs(CompactDetail, { children: [
13868
+ /* @__PURE__ */ jsxRuntime.jsx(CompactDetailLabel, { children: "Current Price" }),
13869
+ /* @__PURE__ */ jsxRuntime.jsx(CompactDetailValue, { children: formatCurrency4(pos.marketPrice) })
13870
+ ] })
13871
+ ] }),
13872
+ onClosePosition && /* @__PURE__ */ jsxRuntime.jsxs(CompactCloseActions, { children: [
13873
+ /* @__PURE__ */ jsxRuntime.jsx(CloseBtn2, { onClick: () => onClosePosition(pos.tokenName, "market", pos.quantity, pos.marketPrice), children: "Market Sell" }),
13874
+ /* @__PURE__ */ jsxRuntime.jsx(CloseBtn2, { onClick: () => onClosePosition(pos.tokenName, "limit", pos.quantity, pos.marketPrice), children: "Limit Sell" })
13875
+ ] })
13876
+ ] })
13877
+ ] }, pos.tokenName);
13878
+ })
13879
+ ] }),
13880
+ positions.length > 0 && !compactPositions && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
13773
13881
  /* @__PURE__ */ jsxRuntime.jsxs(PositionsHeader, { $hasClose: !!onClosePosition, children: [
13774
13882
  /* @__PURE__ */ jsxRuntime.jsxs(SortableHeaderCell, { $active: posSortKey === "asset", onClick: () => handlePosSort("asset"), children: [
13775
13883
  "Asset ",
@@ -13839,29 +13947,29 @@ function PortfolioActivityPanel({
13839
13947
  }, children: "Limit Sell" })
13840
13948
  ] }) })
13841
13949
  ] }, pos.tokenName);
13842
- }),
13843
- closeAllOpen && onClosePosition && /* @__PURE__ */ jsxRuntime.jsx(CloseAllOverlay, { onClick: () => setCloseAllOpen(false), children: /* @__PURE__ */ jsxRuntime.jsxs(CloseAllModal, { onClick: (e) => e.stopPropagation(), children: [
13844
- /* @__PURE__ */ jsxRuntime.jsx(CloseAllModalX, { onClick: () => setCloseAllOpen(false), children: "\xD7" }),
13845
- /* @__PURE__ */ jsxRuntime.jsx(CloseAllTitle, { children: "Confirm Sell All" }),
13846
- /* @__PURE__ */ jsxRuntime.jsx(CloseAllDesc, { children: "This will sell all your positions and cancel their associated TP/SL orders." }),
13847
- /* @__PURE__ */ jsxRuntime.jsxs(CloseAllOption, { onClick: () => setCloseAllType("market"), children: [
13848
- /* @__PURE__ */ jsxRuntime.jsx(CloseAllRadio, { $selected: closeAllType === "market" }),
13849
- /* @__PURE__ */ jsxRuntime.jsx("span", { children: "Market Sell" })
13850
- ] }),
13851
- /* @__PURE__ */ jsxRuntime.jsxs(CloseAllOption, { onClick: () => setCloseAllType("limit"), children: [
13852
- /* @__PURE__ */ jsxRuntime.jsx(CloseAllRadio, { $selected: closeAllType === "limit" }),
13853
- /* @__PURE__ */ jsxRuntime.jsx("span", { children: "Limit Sell at Mid Price" })
13854
- ] }),
13855
- /* @__PURE__ */ jsxRuntime.jsxs(CloseAllConfirmBtn, { onClick: () => {
13856
- positions.forEach((pos) => onClosePosition(pos.tokenName, closeAllType, pos.quantity, pos.marketPrice));
13857
- setCloseAllOpen(false);
13858
- }, children: [
13859
- "Confirm ",
13860
- closeAllType === "market" ? "Market" : "Limit",
13861
- " Sell"
13862
- ] })
13863
- ] }) })
13864
- ] })
13950
+ })
13951
+ ] }),
13952
+ positions.length > 0 && closeAllOpen && onClosePosition && /* @__PURE__ */ jsxRuntime.jsx(CloseAllOverlay, { onClick: () => setCloseAllOpen(false), children: /* @__PURE__ */ jsxRuntime.jsxs(CloseAllModal, { onClick: (e) => e.stopPropagation(), children: [
13953
+ /* @__PURE__ */ jsxRuntime.jsx(CloseAllModalX, { onClick: () => setCloseAllOpen(false), children: "\xD7" }),
13954
+ /* @__PURE__ */ jsxRuntime.jsx(CloseAllTitle, { children: "Confirm Sell All" }),
13955
+ /* @__PURE__ */ jsxRuntime.jsx(CloseAllDesc, { children: "This will sell all your positions and cancel their associated TP/SL orders." }),
13956
+ /* @__PURE__ */ jsxRuntime.jsxs(CloseAllOption, { onClick: () => setCloseAllType("market"), children: [
13957
+ /* @__PURE__ */ jsxRuntime.jsx(CloseAllRadio, { $selected: closeAllType === "market" }),
13958
+ /* @__PURE__ */ jsxRuntime.jsx("span", { children: "Market Sell" })
13959
+ ] }),
13960
+ /* @__PURE__ */ jsxRuntime.jsxs(CloseAllOption, { onClick: () => setCloseAllType("limit"), children: [
13961
+ /* @__PURE__ */ jsxRuntime.jsx(CloseAllRadio, { $selected: closeAllType === "limit" }),
13962
+ /* @__PURE__ */ jsxRuntime.jsx("span", { children: "Limit Sell at Mid Price" })
13963
+ ] }),
13964
+ /* @__PURE__ */ jsxRuntime.jsxs(CloseAllConfirmBtn, { onClick: () => {
13965
+ positions.forEach((pos) => onClosePosition(pos.tokenName, closeAllType, pos.quantity, pos.marketPrice));
13966
+ setCloseAllOpen(false);
13967
+ }, children: [
13968
+ "Confirm ",
13969
+ closeAllType === "market" ? "Market" : "Limit",
13970
+ " Sell"
13971
+ ] })
13972
+ ] }) })
13865
13973
  ] }),
13866
13974
  activeTab === "subscriptions" && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
13867
13975
  offeringOrders.length === 0 && /* @__PURE__ */ jsxRuntime.jsx(EmptyState, { children: "IPO allocations will appear here once you subscribe." }),
@@ -14266,8 +14374,8 @@ var PaginationLabel = styled9__default.default.span`
14266
14374
  `;
14267
14375
  var PositionsHeader = styled9__default.default.div`
14268
14376
  display: grid;
14269
- grid-template-columns: ${(p) => p.$hasClose ? "0.8fr 0.9fr 1fr 0.85fr 0.85fr 0.9fr minmax(140px, auto)" : "1fr 0.8fr 1fr 1fr 1fr 1.2fr"};
14270
- gap: 0 0.4rem;
14377
+ grid-template-columns: ${(p) => p.$hasClose ? "repeat(6, 1fr) minmax(130px, auto)" : "repeat(6, 1fr)"};
14378
+ gap: 0 0.25rem;
14271
14379
  padding: 0.4rem 0.5rem;
14272
14380
  border-bottom: 1px solid rgba(255, 255, 255, 0.06);
14273
14381
  `;
@@ -14290,9 +14398,9 @@ var SortableHeaderCell = styled9__default.default.div`
14290
14398
  `;
14291
14399
  var PositionsRow = styled9__default.default.div`
14292
14400
  display: grid;
14293
- grid-template-columns: ${(p) => p.$hasClose ? "0.8fr 0.9fr 1fr 0.85fr 0.85fr 0.9fr minmax(140px, auto)" : "1fr 0.8fr 1fr 1fr 1fr 1.2fr"};
14401
+ grid-template-columns: ${(p) => p.$hasClose ? "repeat(6, 1fr) minmax(130px, auto)" : "repeat(6, 1fr)"};
14294
14402
  align-items: center;
14295
- gap: 0 0.4rem;
14403
+ gap: 0 0.25rem;
14296
14404
  padding: 0.5rem 0.5rem;
14297
14405
  min-height: 2.6rem;
14298
14406
  border-bottom: 1px solid rgba(255, 255, 255, 0.03);
@@ -14664,6 +14772,148 @@ var CloseAllConfirmBtn = styled9__default.default.button`
14664
14772
  background: rgba(246, 70, 93, 0.25);
14665
14773
  }
14666
14774
  `;
14775
+ var CompactToolbar = styled9__default.default.div`
14776
+ display: flex;
14777
+ align-items: center;
14778
+ justify-content: space-between;
14779
+ padding: 0.35rem 0.5rem;
14780
+ margin-bottom: 0.25rem;
14781
+ border-bottom: 1px solid rgba(255, 255, 255, 0.06);
14782
+ `;
14783
+ var CompactSortBtn = styled9__default.default.button`
14784
+ background: transparent;
14785
+ border: 1px solid rgba(255, 255, 255, 0.1);
14786
+ border-radius: 4px;
14787
+ padding: 0.2rem 0.6rem;
14788
+ font-size: 0.68rem;
14789
+ font-weight: 500;
14790
+ color: rgba(255, 255, 255, 0.6);
14791
+ cursor: pointer;
14792
+ transition: all 0.15s ease;
14793
+
14794
+ &:hover {
14795
+ color: rgba(255, 255, 255, 0.85);
14796
+ border-color: rgba(255, 255, 255, 0.2);
14797
+ }
14798
+ `;
14799
+ var CompactToolbarRight = styled9__default.default.div`
14800
+ display: flex;
14801
+ align-items: center;
14802
+ gap: 0.4rem;
14803
+ `;
14804
+ var CompactActionBtn = styled9__default.default.button`
14805
+ background: transparent;
14806
+ border: 1px solid rgba(255, 255, 255, 0.1);
14807
+ border-radius: 4px;
14808
+ padding: 0.2rem 0.6rem;
14809
+ font-size: 0.68rem;
14810
+ font-weight: 500;
14811
+ color: rgba(255, 255, 255, 0.6);
14812
+ cursor: pointer;
14813
+ transition: all 0.15s ease;
14814
+
14815
+ &:hover {
14816
+ color: rgba(255, 255, 255, 0.85);
14817
+ border-color: rgba(255, 255, 255, 0.2);
14818
+ }
14819
+ `;
14820
+ var CompactSellAllBtn = styled9__default.default.button`
14821
+ background: rgba(246, 70, 93, 0.08);
14822
+ border: 1px solid rgba(246, 70, 93, 0.25);
14823
+ border-radius: 4px;
14824
+ padding: 0.2rem 0.6rem;
14825
+ font-size: 0.68rem;
14826
+ font-weight: 600;
14827
+ color: #f6465d;
14828
+ cursor: pointer;
14829
+ transition: all 0.15s ease;
14830
+
14831
+ &:hover {
14832
+ background: rgba(246, 70, 93, 0.15);
14833
+ border-color: rgba(246, 70, 93, 0.4);
14834
+ }
14835
+ `;
14836
+ var CompactCard = styled9__default.default.div`
14837
+ border-bottom: 1px solid rgba(255, 255, 255, 0.04);
14838
+
14839
+ &:last-child {
14840
+ border-bottom: none;
14841
+ }
14842
+ `;
14843
+ var CompactCardHeader = styled9__default.default.div`
14844
+ display: grid;
14845
+ grid-template-columns: 1fr 1fr 1.4fr auto;
14846
+ align-items: center;
14847
+ gap: 0.5rem;
14848
+ padding: 0.6rem 0.5rem;
14849
+ cursor: pointer;
14850
+ transition: background 0.15s ease;
14851
+ border-radius: 4px;
14852
+
14853
+ &:hover {
14854
+ background: rgba(255, 255, 255, 0.03);
14855
+ }
14856
+ `;
14857
+ var CompactAsset = styled9__default.default.span`
14858
+ font-size: 0.8rem;
14859
+ font-weight: 600;
14860
+ color: #fff;
14861
+ cursor: pointer;
14862
+
14863
+ &:hover {
14864
+ text-decoration: underline;
14865
+ color: var(--color-accent, #E6C87E);
14866
+ }
14867
+ `;
14868
+ var CompactUnits = styled9__default.default.span`
14869
+ font-size: 0.75rem;
14870
+ color: rgba(255, 255, 255, 0.6);
14871
+ `;
14872
+ var CompactPnl = styled9__default.default.span`
14873
+ font-size: 0.75rem;
14874
+ font-weight: 600;
14875
+ color: ${(p) => p.$positive ? "#0ecb81" : "#f6465d"};
14876
+ text-align: right;
14877
+ `;
14878
+ var CompactChevron = styled9__default.default.span`
14879
+ display: flex;
14880
+ align-items: center;
14881
+ justify-content: center;
14882
+ color: rgba(255, 255, 255, 0.35);
14883
+ transition: transform 0.2s ease;
14884
+ transform: rotate(${(p) => p.$expanded ? "180deg" : "0deg"});
14885
+ `;
14886
+ var CompactCardBody = styled9__default.default.div`
14887
+ padding: 0 0.5rem 0.6rem;
14888
+ `;
14889
+ var CompactDetailRow = styled9__default.default.div`
14890
+ display: flex;
14891
+ gap: 1.5rem;
14892
+ padding: 0.5rem 0.75rem;
14893
+ background: rgba(255, 255, 255, 0.02);
14894
+ border-radius: 6px;
14895
+ margin-bottom: 0.5rem;
14896
+ `;
14897
+ var CompactDetail = styled9__default.default.div`
14898
+ display: flex;
14899
+ flex-direction: column;
14900
+ gap: 0.15rem;
14901
+ `;
14902
+ var CompactDetailLabel = styled9__default.default.span`
14903
+ font-size: 0.62rem;
14904
+ color: rgba(255, 255, 255, 0.35);
14905
+ font-weight: 500;
14906
+ `;
14907
+ var CompactDetailValue = styled9__default.default.span`
14908
+ font-size: 0.78rem;
14909
+ color: #fff;
14910
+ font-weight: 500;
14911
+ `;
14912
+ var CompactCloseActions = styled9__default.default.div`
14913
+ display: flex;
14914
+ gap: 0.5rem;
14915
+ padding: 0 0.75rem;
14916
+ `;
14667
14917
  function PropertyBuy({
14668
14918
  propertyName = "Loaf Property",
14669
14919
  propertyLocation: propertyLocationLabel = "Sydney, NSW",