@burdenoff/microfe-housingvista 2026.703.13 → 2026.709.2

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.
Files changed (163) hide show
  1. package/dist/generated/global-operations.d.ts +2 -0
  2. package/dist/generated/global-operations.d.ts.map +1 -0
  3. package/dist/generated/global-types.d.ts +23527 -0
  4. package/dist/generated/global-types.d.ts.map +1 -0
  5. package/dist/generated/wspace-operations.d.ts +267 -0
  6. package/dist/generated/wspace-operations.d.ts.map +1 -0
  7. package/dist/generated/wspace-operations.js +67 -0
  8. package/dist/generated/wspace-operations.js.map +1 -0
  9. package/dist/generated/wspace-types.d.ts +57868 -0
  10. package/dist/generated/wspace-types.d.ts.map +1 -0
  11. package/dist/housingvista/HousingVistaRoot.d.ts +5 -0
  12. package/dist/housingvista/HousingVistaRoot.d.ts.map +1 -0
  13. package/dist/housingvista/HousingVistaRoutes.d.ts +7 -0
  14. package/dist/housingvista/HousingVistaRoutes.d.ts.map +1 -0
  15. package/dist/housingvista/components/Breadcrumbs.d.ts +13 -0
  16. package/dist/housingvista/components/Breadcrumbs.d.ts.map +1 -0
  17. package/dist/housingvista/components/ChartCard.d.ts +12 -0
  18. package/dist/housingvista/components/ChartCard.d.ts.map +1 -0
  19. package/dist/housingvista/components/ContactOwnerDialog.d.ts +33 -0
  20. package/dist/housingvista/components/ContactOwnerDialog.d.ts.map +1 -0
  21. package/dist/housingvista/components/DataTable.d.ts +42 -0
  22. package/dist/housingvista/components/DataTable.d.ts.map +1 -0
  23. package/dist/housingvista/components/EmptyState.d.ts +19 -0
  24. package/dist/housingvista/components/EmptyState.d.ts.map +1 -0
  25. package/dist/housingvista/components/ErrorBoundary.d.ts +19 -0
  26. package/dist/housingvista/components/ErrorBoundary.d.ts.map +1 -0
  27. package/dist/housingvista/components/FileUploader.d.ts +16 -0
  28. package/dist/housingvista/components/FileUploader.d.ts.map +1 -0
  29. package/dist/housingvista/components/FilterBar.d.ts +13 -0
  30. package/dist/housingvista/components/FilterBar.d.ts.map +1 -0
  31. package/dist/housingvista/components/LoadingSkeleton.d.ts +10 -0
  32. package/dist/housingvista/components/LoadingSkeleton.d.ts.map +1 -0
  33. package/dist/housingvista/components/PageLayout.d.ts +18 -0
  34. package/dist/housingvista/components/PageLayout.d.ts.map +1 -0
  35. package/dist/housingvista/components/PropertyCard.d.ts +26 -0
  36. package/dist/housingvista/components/PropertyCard.d.ts.map +1 -0
  37. package/dist/housingvista/components/ReviewsSection.d.ts +12 -0
  38. package/dist/housingvista/components/ReviewsSection.d.ts.map +1 -0
  39. package/dist/housingvista/components/StatCard.d.ts +18 -0
  40. package/dist/housingvista/components/StatCard.d.ts.map +1 -0
  41. package/dist/housingvista/components/StatusBadge.d.ts +12 -0
  42. package/dist/housingvista/components/StatusBadge.d.ts.map +1 -0
  43. package/dist/housingvista/components/index.d.ts +17 -0
  44. package/dist/housingvista/components/index.d.ts.map +1 -0
  45. package/dist/housingvista/context/HousingVistaContext.d.ts +15 -0
  46. package/dist/housingvista/context/HousingVistaContext.d.ts.map +1 -0
  47. package/dist/housingvista/hooks/index.d.ts +804 -0
  48. package/dist/housingvista/hooks/index.d.ts.map +1 -0
  49. package/dist/housingvista/hooks/index.js +1 -0
  50. package/dist/housingvista/hooks/index.js.map +1 -1
  51. package/dist/housingvista/hooks/messages.d.ts +65 -0
  52. package/dist/housingvista/hooks/messages.d.ts.map +1 -0
  53. package/dist/housingvista/hooks/platform.d.ts +140 -0
  54. package/dist/housingvista/hooks/platform.d.ts.map +1 -0
  55. package/dist/housingvista/hooks/useHousingVistaAnalytics.d.ts +16 -0
  56. package/dist/housingvista/hooks/useHousingVistaAnalytics.d.ts.map +1 -0
  57. package/dist/housingvista/hooks/useHousingVistaAnalytics.js +57 -0
  58. package/dist/housingvista/hooks/useHousingVistaAnalytics.js.map +1 -0
  59. package/dist/housingvista/hooks/useServerPagination.d.ts +12 -0
  60. package/dist/housingvista/hooks/useServerPagination.d.ts.map +1 -0
  61. package/dist/housingvista/index.d.ts +13 -0
  62. package/dist/housingvista/index.d.ts.map +1 -0
  63. package/dist/housingvista/index.js +2 -0
  64. package/dist/housingvista/lib/toast.d.ts +11 -0
  65. package/dist/housingvista/lib/toast.d.ts.map +1 -0
  66. package/dist/housingvista/pages/HomePage.d.ts +7 -0
  67. package/dist/housingvista/pages/HomePage.d.ts.map +1 -0
  68. package/dist/housingvista/pages/HomePage.js +135 -132
  69. package/dist/housingvista/pages/HomePage.js.map +1 -1
  70. package/dist/housingvista/pages/amc/AMCManagementPage.d.ts +2 -0
  71. package/dist/housingvista/pages/amc/AMCManagementPage.d.ts.map +1 -0
  72. package/dist/housingvista/pages/analytics/AnalyticsPage.d.ts +2 -0
  73. package/dist/housingvista/pages/analytics/AnalyticsPage.d.ts.map +1 -0
  74. package/dist/housingvista/pages/analytics/AnalyticsPage.js +136 -134
  75. package/dist/housingvista/pages/analytics/AnalyticsPage.js.map +1 -1
  76. package/dist/housingvista/pages/assets/AssetDetailPage.d.ts +9 -0
  77. package/dist/housingvista/pages/assets/AssetDetailPage.d.ts.map +1 -0
  78. package/dist/housingvista/pages/assets/AssetManagementPage.d.ts +2 -0
  79. package/dist/housingvista/pages/assets/AssetManagementPage.d.ts.map +1 -0
  80. package/dist/housingvista/pages/assets/AssetManagementPage.js.map +1 -1
  81. package/dist/housingvista/pages/chat/ChatPage.d.ts +14 -0
  82. package/dist/housingvista/pages/chat/ChatPage.d.ts.map +1 -0
  83. package/dist/housingvista/pages/finance/HomeLoanDetailPage.d.ts +11 -0
  84. package/dist/housingvista/pages/finance/HomeLoanDetailPage.d.ts.map +1 -0
  85. package/dist/housingvista/pages/finance/HomeLoansPage.d.ts +2 -0
  86. package/dist/housingvista/pages/finance/HomeLoansPage.d.ts.map +1 -0
  87. package/dist/housingvista/pages/investments/InvestmentDetailPage.d.ts +2 -0
  88. package/dist/housingvista/pages/investments/InvestmentDetailPage.d.ts.map +1 -0
  89. package/dist/housingvista/pages/investments/InvestmentsPage.d.ts +2 -0
  90. package/dist/housingvista/pages/investments/InvestmentsPage.d.ts.map +1 -0
  91. package/dist/housingvista/pages/investments/InvestmentsPage.js.map +1 -1
  92. package/dist/housingvista/pages/legal/LegalPage.d.ts +2 -0
  93. package/dist/housingvista/pages/legal/LegalPage.d.ts.map +1 -0
  94. package/dist/housingvista/pages/legal/LegalServiceDetailPage.d.ts +12 -0
  95. package/dist/housingvista/pages/legal/LegalServiceDetailPage.d.ts.map +1 -0
  96. package/dist/housingvista/pages/market/AreaInsightsPage.d.ts +2 -0
  97. package/dist/housingvista/pages/market/AreaInsightsPage.d.ts.map +1 -0
  98. package/dist/housingvista/pages/market/MarketAnalyticsPage.d.ts +2 -0
  99. package/dist/housingvista/pages/market/MarketAnalyticsPage.d.ts.map +1 -0
  100. package/dist/housingvista/pages/marketplace/MarketplacePage.d.ts +2 -0
  101. package/dist/housingvista/pages/marketplace/MarketplacePage.d.ts.map +1 -0
  102. package/dist/housingvista/pages/marketplace/ServiceDetailPage.d.ts +12 -0
  103. package/dist/housingvista/pages/marketplace/ServiceDetailPage.d.ts.map +1 -0
  104. package/dist/housingvista/pages/offers/OffersPage.d.ts +10 -0
  105. package/dist/housingvista/pages/offers/OffersPage.d.ts.map +1 -0
  106. package/dist/housingvista/pages/properties/AddPropertyPage.d.ts +8 -0
  107. package/dist/housingvista/pages/properties/AddPropertyPage.d.ts.map +1 -0
  108. package/dist/housingvista/pages/properties/AddPropertyPage.js +279 -278
  109. package/dist/housingvista/pages/properties/AddPropertyPage.js.map +1 -1
  110. package/dist/housingvista/pages/properties/PropertiesPage.d.ts +7 -0
  111. package/dist/housingvista/pages/properties/PropertiesPage.d.ts.map +1 -0
  112. package/dist/housingvista/pages/properties/PropertiesPage.js +93 -86
  113. package/dist/housingvista/pages/properties/PropertiesPage.js.map +1 -1
  114. package/dist/housingvista/pages/properties/PropertyDetailPage.d.ts +9 -0
  115. package/dist/housingvista/pages/properties/PropertyDetailPage.d.ts.map +1 -0
  116. package/dist/housingvista/pages/properties/PropertyDetailPage.js +514 -511
  117. package/dist/housingvista/pages/properties/PropertyDetailPage.js.map +1 -1
  118. package/dist/housingvista/pages/rental/RentalManagementPage.d.ts +2 -0
  119. package/dist/housingvista/pages/rental/RentalManagementPage.d.ts.map +1 -0
  120. package/dist/housingvista/pages/settings/ProfilePage.d.ts +2 -0
  121. package/dist/housingvista/pages/settings/ProfilePage.d.ts.map +1 -0
  122. package/dist/housingvista/pages/settings/SettingsPage.d.ts +2 -0
  123. package/dist/housingvista/pages/settings/SettingsPage.d.ts.map +1 -0
  124. package/dist/housingvista/pages/shortlist/ShortlistPage.d.ts +8 -0
  125. package/dist/housingvista/pages/shortlist/ShortlistPage.d.ts.map +1 -0
  126. package/dist/housingvista/pages/transactions/TransactionDetailPage.d.ts +8 -0
  127. package/dist/housingvista/pages/transactions/TransactionDetailPage.d.ts.map +1 -0
  128. package/dist/housingvista/pages/transactions/TransactionsPage.d.ts +7 -0
  129. package/dist/housingvista/pages/transactions/TransactionsPage.d.ts.map +1 -0
  130. package/dist/housingvista/pages/transactions/milestones.d.ts +35 -0
  131. package/dist/housingvista/pages/transactions/milestones.d.ts.map +1 -0
  132. package/dist/housingvista/pages/verification/VerificationDetailPage.d.ts +10 -0
  133. package/dist/housingvista/pages/verification/VerificationDetailPage.d.ts.map +1 -0
  134. package/dist/housingvista/pages/verification/VerificationPage.d.ts +2 -0
  135. package/dist/housingvista/pages/verification/VerificationPage.d.ts.map +1 -0
  136. package/dist/housingvista/pages/viewings/ViewingsPage.d.ts +9 -0
  137. package/dist/housingvista/pages/viewings/ViewingsPage.d.ts.map +1 -0
  138. package/dist/housingvista/services/assistantApi.d.ts +90 -0
  139. package/dist/housingvista/services/assistantApi.d.ts.map +1 -0
  140. package/dist/housingvista/services/assistantApi.js +222 -0
  141. package/dist/housingvista/services/assistantApi.js.map +1 -0
  142. package/dist/housingvista/services/createSandboxAssistantTransport.d.ts +42 -0
  143. package/dist/housingvista/services/createSandboxAssistantTransport.d.ts.map +1 -0
  144. package/dist/housingvista/services/createSandboxAssistantTransport.js +120 -0
  145. package/dist/housingvista/services/createSandboxAssistantTransport.js.map +1 -0
  146. package/dist/housingvista/store/housingvistaStore.d.ts +72 -0
  147. package/dist/housingvista/store/housingvistaStore.d.ts.map +1 -0
  148. package/dist/housingvista/types/assistant.d.ts +16 -0
  149. package/dist/housingvista/types/assistant.d.ts.map +1 -0
  150. package/dist/housingvista/types/index.d.ts +1328 -0
  151. package/dist/housingvista/types/index.d.ts.map +1 -0
  152. package/dist/housingvista/utils/helpers.d.ts +25 -0
  153. package/dist/housingvista/utils/helpers.d.ts.map +1 -0
  154. package/dist/housingvista/utils/index.d.ts +2 -0
  155. package/dist/housingvista/utils/index.d.ts.map +1 -0
  156. package/dist/housingvista/utils/pageContext.d.ts +25 -0
  157. package/dist/housingvista/utils/pageContext.d.ts.map +1 -0
  158. package/dist/housingvista/utils/pageContext.js +77 -0
  159. package/dist/housingvista/utils/pageContext.js.map +1 -0
  160. package/dist/index.d.ts +6 -0
  161. package/dist/index.d.ts.map +1 -0
  162. package/dist/index.js +5 -3
  163. package/package.json +6 -2
@@ -1,10 +1,11 @@
1
1
  import { cn as e, formatCurrency as t, formatNumber as n } from "../../utils/helpers.js";
2
2
  import { PageLayout as r } from "../../components/PageLayout.js";
3
3
  import { StatCard as i } from "../../components/StatCard.js";
4
- import { DataTable as a } from "../../components/DataTable.js";
5
- import { EmptyState as o } from "../../components/EmptyState.js";
6
- import { ChartCard as s } from "../../components/ChartCard.js";
7
- import { LoadingSkeleton as c } from "../../components/LoadingSkeleton.js";
4
+ import { DataTable as ee } from "../../components/DataTable.js";
5
+ import { EmptyState as te } from "../../components/EmptyState.js";
6
+ import { ChartCard as a } from "../../components/ChartCard.js";
7
+ import { LoadingSkeleton as o } from "../../components/LoadingSkeleton.js";
8
+ import { useHousingVistaAnalytics as s, useTrackPageView as c } from "../../hooks/useHousingVistaAnalytics.js";
8
9
  import { useAnalyticsData as l } from "../../hooks/index.js";
9
10
  import { notify as u } from "../../lib/toast.js";
10
11
  import "../../components/index.js";
@@ -17,33 +18,33 @@ import { Line as g } from "../../../node_modules/recharts/es6/cartesian/Line.js"
17
18
  import { Area as _ } from "../../../node_modules/recharts/es6/cartesian/Area.js";
18
19
  import { XAxis as v } from "../../../node_modules/recharts/es6/cartesian/XAxis.js";
19
20
  import { YAxis as y } from "../../../node_modules/recharts/es6/cartesian/YAxis.js";
20
- import { LineChart as ee } from "../../../node_modules/recharts/es6/chart/LineChart.js";
21
- import { PieChart as te } from "../../../node_modules/recharts/es6/chart/PieChart.js";
22
- import { AreaChart as ne } from "../../../node_modules/recharts/es6/chart/AreaChart.js";
23
- import { useState as b } from "react";
24
- import { Activity as x, BarChart3 as re, Building as S, Clock as C, DollarSign as w, Download as T, TrendingUp as E } from "lucide-react";
25
- import { jsx as D, jsxs as O } from "react/jsx-runtime";
26
- import { EmphasisPanel as k, NextSteps as ie } from "@burdenoff/fe-libs/ui";
21
+ import { LineChart as b } from "../../../node_modules/recharts/es6/chart/LineChart.js";
22
+ import { PieChart as x } from "../../../node_modules/recharts/es6/chart/PieChart.js";
23
+ import { AreaChart as S } from "../../../node_modules/recharts/es6/chart/AreaChart.js";
24
+ import { useState as C } from "react";
25
+ import { Activity as w, BarChart3 as T, Building as ne, Clock as re, DollarSign as ie, Download as ae, TrendingUp as oe } from "lucide-react";
26
+ import { jsx as E, jsxs as D } from "react/jsx-runtime";
27
+ import { EmphasisPanel as se, NextSteps as O } from "@burdenoff/fe-libs/ui";
27
28
  //#region src/housingvista/pages/analytics/AnalyticsPage.tsx
28
- var A = [
29
+ var k = [
29
30
  "var(--color-chart-1)",
30
31
  "var(--color-chart-2)",
31
32
  "var(--color-chart-3)",
32
33
  "var(--color-chart-4)",
33
34
  "var(--color-chart-5)"
34
- ], j = "var(--color-chart-2)", M = "var(--color-chart-1)", N = {
35
+ ], A = "var(--color-chart-2)", j = "var(--color-chart-1)", M = {
35
36
  background: "var(--color-bg-surface)",
36
37
  border: "1px solid var(--color-border-subtle)",
37
38
  borderRadius: 10,
38
39
  fontSize: 12,
39
40
  boxShadow: "0 8px 24px rgb(0 0 0 / 0.12)"
40
- }, P = {
41
+ }, N = {
41
42
  color: "var(--color-text-primary)",
42
43
  fontWeight: 600
43
- }, F = {
44
+ }, P = {
44
45
  fontSize: 11,
45
46
  fill: "var(--color-text-secondary)"
46
- }, I = [
47
+ }, F = [
47
48
  {
48
49
  value: 3,
49
50
  label: "3M"
@@ -61,8 +62,9 @@ var A = [
61
62
  label: "All"
62
63
  }
63
64
  ];
64
- function L() {
65
- let { data: L, loading: R } = l(), [z, B] = b(12), V = () => {
65
+ function I() {
66
+ c("housingvista.analytics.viewed");
67
+ let { emitExport: I } = s(), { data: L, loading: R } = l(), [z, B] = C(12), V = () => {
66
68
  if (!L) return;
67
69
  let e = (e) => {
68
70
  let t = String(e);
@@ -83,12 +85,12 @@ function L() {
83
85
  n.revenue - n.expenses
84
86
  ].map(e).join(","));
85
87
  let n = new Blob([t.join("\n")], { type: "text/csv;charset=utf-8;" }), r = URL.createObjectURL(n), i = document.createElement("a");
86
- i.href = r, i.download = `housingvista-analytics-${(/* @__PURE__ */ new Date()).toISOString().slice(0, 10)}.csv`, document.body.appendChild(i), i.click(), document.body.removeChild(i), URL.revokeObjectURL(r), u.success("Report exported", "Your analytics data was downloaded as a CSV file.");
88
+ i.href = r, i.download = `housingvista-analytics-${(/* @__PURE__ */ new Date()).toISOString().slice(0, 10)}.csv`, document.body.appendChild(i), i.click(), document.body.removeChild(i), URL.revokeObjectURL(r), I("analytics"), u.success("Report exported", "Your analytics data was downloaded as a CSV file.");
87
89
  }, H = [
88
90
  {
89
91
  key: "month",
90
92
  header: "Month",
91
- render: (e) => /* @__PURE__ */ D("span", {
93
+ render: (e) => /* @__PURE__ */ E("span", {
92
94
  className: "font-medium text-text-primary",
93
95
  children: e.month
94
96
  })
@@ -96,7 +98,7 @@ function L() {
96
98
  {
97
99
  key: "revenue",
98
100
  header: "Revenue",
99
- render: (e) => /* @__PURE__ */ D("span", {
101
+ render: (e) => /* @__PURE__ */ E("span", {
100
102
  className: "font-medium text-status-success-text",
101
103
  children: t(e.revenue)
102
104
  })
@@ -104,7 +106,7 @@ function L() {
104
106
  {
105
107
  key: "expenses",
106
108
  header: "Expenses",
107
- render: (e) => /* @__PURE__ */ D("span", {
109
+ render: (e) => /* @__PURE__ */ E("span", {
108
110
  className: "font-medium text-status-error-text",
109
111
  children: t(e.expenses)
110
112
  })
@@ -115,7 +117,7 @@ function L() {
115
117
  sortable: !1,
116
118
  render: (n) => {
117
119
  let r = n.revenue - n.expenses;
118
- return /* @__PURE__ */ D("span", {
120
+ return /* @__PURE__ */ E("span", {
119
121
  className: e("font-medium", r >= 0 ? "text-status-success-text" : "text-status-error-text"),
120
122
  children: t(r)
121
123
  });
@@ -127,27 +129,27 @@ function L() {
127
129
  sortable: !1,
128
130
  render: (t) => {
129
131
  let n = t.revenue > 0 ? (t.revenue - t.expenses) / t.revenue * 100 : 0;
130
- return /* @__PURE__ */ O("span", {
132
+ return /* @__PURE__ */ D("span", {
131
133
  className: e("font-medium", n >= 0 ? "text-status-success-text" : "text-status-error-text"),
132
134
  children: [n.toFixed(1), "%"]
133
135
  });
134
136
  }
135
137
  }
136
138
  ];
137
- if (R) return /* @__PURE__ */ O(r, {
139
+ if (R) return /* @__PURE__ */ D(r, {
138
140
  title: "Analytics",
139
141
  description: "Track your property portfolio performance and market insights",
140
- children: [/* @__PURE__ */ D(c, { className: "h-28" }), /* @__PURE__ */ O("div", {
142
+ children: [/* @__PURE__ */ E(o, { className: "h-28" }), /* @__PURE__ */ D("div", {
141
143
  className: "grid grid-cols-1 gap-6 lg:grid-cols-2",
142
- children: [/* @__PURE__ */ D(c, { className: "h-64" }), /* @__PURE__ */ D(c, { className: "h-64" })]
144
+ children: [/* @__PURE__ */ E(o, { className: "h-64" }), /* @__PURE__ */ E(o, { className: "h-64" })]
143
145
  })]
144
146
  });
145
- if (!(L && (L.kpis.length > 0 || L.revenueByMonth.length > 0 || L.propertyTypeDistribution.length > 0))) return /* @__PURE__ */ D(r, {
147
+ if (!(L && (L.kpis.length > 0 || L.revenueByMonth.length > 0 || L.propertyTypeDistribution.length > 0))) return /* @__PURE__ */ E(r, {
146
148
  title: "Analytics",
147
149
  description: "Track your property portfolio performance and market insights",
148
- children: /* @__PURE__ */ D(o, {
150
+ children: /* @__PURE__ */ E(te, {
149
151
  illustration: "empty-generic",
150
- icon: /* @__PURE__ */ D(re, { className: "h-12 w-12" }),
152
+ icon: /* @__PURE__ */ E(T, { className: "h-12 w-12" }),
151
153
  title: "No analytics yet",
152
154
  description: "Once you have properties, transactions, and rentals recorded, revenue, occupancy, and portfolio insights will appear here."
153
155
  })
@@ -161,19 +163,19 @@ function L() {
161
163
  name: e.type.charAt(0).toUpperCase() + e.type.slice(1),
162
164
  value: e.value,
163
165
  count: e.count,
164
- color: A[t % A.length]
165
- })), Z = K.reduce((e, t) => e + t.revenue, 0), Q = K.reduce((e, t) => e + t.expenses, 0), $ = Z - Q, ae = Z > 0 ? $ / Z * 100 : 0;
166
- return /* @__PURE__ */ O(r, {
166
+ color: k[t % k.length]
167
+ })), Z = K.reduce((e, t) => e + t.revenue, 0), Q = K.reduce((e, t) => e + t.expenses, 0), $ = Z - Q, ce = Z > 0 ? $ / Z * 100 : 0;
168
+ return /* @__PURE__ */ D(r, {
167
169
  title: "Analytics",
168
170
  description: "Track your property portfolio performance and market insights",
169
171
  purpose: "Understand how your portfolio is actually performing — revenue versus expenses, occupancy, property-type mix, and profitability — so you can spot trends, compare periods, and decide where to buy, sell, or raise rents.",
170
- actions: /* @__PURE__ */ O("button", {
172
+ actions: /* @__PURE__ */ D("button", {
171
173
  onClick: V,
172
174
  className: "inline-flex items-center gap-2 rounded-md border border-border-subtle px-4 py-2 text-sm font-medium text-text-primary transition-colors hover:bg-bg-sunken focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--color-focus-ring)]",
173
- children: [/* @__PURE__ */ D(T, { className: "h-4 w-4" }), "Export Report"]
175
+ children: [/* @__PURE__ */ E(ae, { className: "h-4 w-4" }), "Export Report"]
174
176
  }),
175
177
  children: [
176
- /* @__PURE__ */ D(ie, {
178
+ /* @__PURE__ */ E(O, {
177
179
  storageKey: "housingvista-analytics",
178
180
  steps: [{
179
181
  id: "performance",
@@ -182,16 +184,16 @@ function L() {
182
184
  href: "#analytics-performance"
183
185
  }]
184
186
  }),
185
- /* @__PURE__ */ O("div", {
187
+ /* @__PURE__ */ D("div", {
186
188
  className: "flex flex-wrap items-center gap-3",
187
- children: [/* @__PURE__ */ D("span", {
189
+ children: [/* @__PURE__ */ E("span", {
188
190
  className: "text-sm font-medium text-text-secondary",
189
191
  children: "Period"
190
- }), /* @__PURE__ */ D("div", {
192
+ }), /* @__PURE__ */ E("div", {
191
193
  role: "group",
192
194
  "aria-label": "Select analytics period",
193
195
  className: "inline-flex rounded-lg border border-border-subtle bg-bg-sunken/60 p-1",
194
- children: I.map((t) => /* @__PURE__ */ D("button", {
196
+ children: F.map((t) => /* @__PURE__ */ E("button", {
195
197
  type: "button",
196
198
  "aria-pressed": z === t.value,
197
199
  onClick: () => B(t.value),
@@ -200,56 +202,56 @@ function L() {
200
202
  }, t.value))
201
203
  })]
202
204
  }),
203
- U.length > 0 && /* @__PURE__ */ D(k, {
205
+ U.length > 0 && /* @__PURE__ */ E(se, {
204
206
  className: "p-4",
205
- children: /* @__PURE__ */ D("div", {
207
+ children: /* @__PURE__ */ E("div", {
206
208
  className: "grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-4",
207
209
  children: U.map((e) => {
208
210
  let t = {
209
- "Portfolio Value": w,
210
- "Monthly Revenue": E,
211
- "Occupancy Rate": S,
212
- "Avg. Days to Rent": C
213
- }[e.label] || x;
214
- return /* @__PURE__ */ D(i, {
211
+ "Portfolio Value": ie,
212
+ "Monthly Revenue": oe,
213
+ "Occupancy Rate": ne,
214
+ "Avg. Days to Rent": re
215
+ }[e.label] || w;
216
+ return /* @__PURE__ */ E(i, {
215
217
  label: e.label,
216
218
  value: e.unit === "USD" ? e.value : `${n(e.value)}${e.unit === "%" ? "%" : ` ${e.unit}`}`,
217
219
  prefix: e.unit === "USD" ? "$" : void 0,
218
- icon: /* @__PURE__ */ D(t, { className: "h-4 w-4" }),
220
+ icon: /* @__PURE__ */ E(t, { className: "h-4 w-4" }),
219
221
  trend: e.trend === "up" ? "up" : e.trend === "down" ? "down" : "stable",
220
222
  change: e.changePercent
221
223
  }, e.id);
222
224
  })
223
225
  })
224
226
  }),
225
- /* @__PURE__ */ O("div", {
227
+ /* @__PURE__ */ D("div", {
226
228
  className: "grid grid-cols-1 gap-6 lg:grid-cols-3",
227
- children: [J.length > 0 && /* @__PURE__ */ D(s, {
229
+ children: [J.length > 0 && /* @__PURE__ */ E(a, {
228
230
  title: "Revenue vs Expenses",
229
231
  description: "Real income against costs across the selected period",
230
232
  className: "lg:col-span-2",
231
- actions: /* @__PURE__ */ O("div", {
233
+ actions: /* @__PURE__ */ D("div", {
232
234
  className: "flex items-center gap-4 text-xs text-text-secondary",
233
- children: [/* @__PURE__ */ O("span", {
235
+ children: [/* @__PURE__ */ D("span", {
234
236
  className: "flex items-center gap-1.5",
235
- children: [/* @__PURE__ */ D("span", {
237
+ children: [/* @__PURE__ */ E("span", {
236
238
  className: "h-2.5 w-2.5 rounded-full",
237
- style: { background: j }
239
+ style: { background: A }
238
240
  }), "Revenue"]
239
- }), /* @__PURE__ */ O("span", {
241
+ }), /* @__PURE__ */ D("span", {
240
242
  className: "flex items-center gap-1.5",
241
- children: [/* @__PURE__ */ D("span", {
243
+ children: [/* @__PURE__ */ E("span", {
242
244
  className: "h-2.5 w-2.5 rounded-full",
243
- style: { background: M }
245
+ style: { background: j }
244
246
  }), "Expenses"]
245
247
  })]
246
248
  }),
247
- children: /* @__PURE__ */ D("div", {
249
+ children: /* @__PURE__ */ E("div", {
248
250
  className: "h-72 w-full",
249
- children: /* @__PURE__ */ D(f, {
251
+ children: /* @__PURE__ */ E(f, {
250
252
  width: "100%",
251
253
  height: "100%",
252
- children: /* @__PURE__ */ O(ne, {
254
+ children: /* @__PURE__ */ D(S, {
253
255
  data: J,
254
256
  margin: {
255
257
  top: 8,
@@ -258,73 +260,73 @@ function L() {
258
260
  bottom: 0
259
261
  },
260
262
  children: [
261
- /* @__PURE__ */ O("defs", { children: [/* @__PURE__ */ O("linearGradient", {
263
+ /* @__PURE__ */ D("defs", { children: [/* @__PURE__ */ D("linearGradient", {
262
264
  id: "revGrad",
263
265
  x1: "0",
264
266
  y1: "0",
265
267
  x2: "0",
266
268
  y2: "1",
267
- children: [/* @__PURE__ */ D("stop", {
269
+ children: [/* @__PURE__ */ E("stop", {
268
270
  offset: "5%",
269
- stopColor: j,
271
+ stopColor: A,
270
272
  stopOpacity: .35
271
- }), /* @__PURE__ */ D("stop", {
273
+ }), /* @__PURE__ */ E("stop", {
272
274
  offset: "95%",
273
- stopColor: j,
275
+ stopColor: A,
274
276
  stopOpacity: .02
275
277
  })]
276
- }), /* @__PURE__ */ O("linearGradient", {
278
+ }), /* @__PURE__ */ D("linearGradient", {
277
279
  id: "expGrad",
278
280
  x1: "0",
279
281
  y1: "0",
280
282
  x2: "0",
281
283
  y2: "1",
282
- children: [/* @__PURE__ */ D("stop", {
284
+ children: [/* @__PURE__ */ E("stop", {
283
285
  offset: "5%",
284
- stopColor: M,
286
+ stopColor: j,
285
287
  stopOpacity: .3
286
- }), /* @__PURE__ */ D("stop", {
288
+ }), /* @__PURE__ */ E("stop", {
287
289
  offset: "95%",
288
- stopColor: M,
290
+ stopColor: j,
289
291
  stopOpacity: .02
290
292
  })]
291
293
  })] }),
292
- /* @__PURE__ */ D(h, {
294
+ /* @__PURE__ */ E(h, {
293
295
  strokeDasharray: "3 3",
294
296
  stroke: "var(--color-border-subtle)",
295
297
  vertical: !1
296
298
  }),
297
- /* @__PURE__ */ D(v, {
299
+ /* @__PURE__ */ E(v, {
298
300
  dataKey: "month",
299
- tick: F,
301
+ tick: P,
300
302
  tickLine: !1,
301
303
  axisLine: !1
302
304
  }),
303
- /* @__PURE__ */ D(y, {
304
- tick: F,
305
+ /* @__PURE__ */ E(y, {
306
+ tick: P,
305
307
  tickLine: !1,
306
308
  axisLine: !1,
307
309
  width: 52,
308
310
  tickFormatter: (e) => t(e)
309
311
  }),
310
- /* @__PURE__ */ D(d, {
311
- contentStyle: N,
312
- labelStyle: P,
312
+ /* @__PURE__ */ E(d, {
313
+ contentStyle: M,
314
+ labelStyle: N,
313
315
  formatter: (e, n) => [t(e), n]
314
316
  }),
315
- /* @__PURE__ */ D(_, {
317
+ /* @__PURE__ */ E(_, {
316
318
  type: "monotone",
317
319
  dataKey: "revenue",
318
320
  name: "Revenue",
319
- stroke: j,
321
+ stroke: A,
320
322
  strokeWidth: 2.5,
321
323
  fill: "url(#revGrad)"
322
324
  }),
323
- /* @__PURE__ */ D(_, {
325
+ /* @__PURE__ */ E(_, {
324
326
  type: "monotone",
325
327
  dataKey: "expenses",
326
328
  name: "Expenses",
327
- stroke: M,
329
+ stroke: j,
328
330
  strokeWidth: 2.5,
329
331
  fill: "url(#expGrad)"
330
332
  })
@@ -332,15 +334,15 @@ function L() {
332
334
  })
333
335
  })
334
336
  })
335
- }), X.length > 0 && /* @__PURE__ */ O(s, {
337
+ }), X.length > 0 && /* @__PURE__ */ D(a, {
336
338
  title: "Property-Type Distribution",
337
339
  description: "Portfolio value split by type",
338
- children: [/* @__PURE__ */ O("div", {
340
+ children: [/* @__PURE__ */ D("div", {
339
341
  className: "relative h-56 w-full",
340
- children: [/* @__PURE__ */ D(f, {
342
+ children: [/* @__PURE__ */ E(f, {
341
343
  width: "100%",
342
344
  height: "100%",
343
- children: /* @__PURE__ */ O(te, { children: [/* @__PURE__ */ D(m, {
345
+ children: /* @__PURE__ */ D(x, { children: [/* @__PURE__ */ E(m, {
344
346
  data: X,
345
347
  dataKey: "value",
346
348
  nameKey: "name",
@@ -349,36 +351,36 @@ function L() {
349
351
  paddingAngle: 2,
350
352
  stroke: "var(--color-bg-surface)",
351
353
  strokeWidth: 2,
352
- children: X.map((e) => /* @__PURE__ */ D(p, { fill: e.color }, e.name))
353
- }), /* @__PURE__ */ D(d, {
354
- contentStyle: N,
355
- labelStyle: P,
354
+ children: X.map((e) => /* @__PURE__ */ E(p, { fill: e.color }, e.name))
355
+ }), /* @__PURE__ */ E(d, {
356
+ contentStyle: M,
357
+ labelStyle: N,
356
358
  formatter: (e, n, r) => [`${t(e)} · ${r?.payload?.count ?? 0} properties`, r?.payload?.name]
357
359
  })] })
358
- }), /* @__PURE__ */ O("div", {
360
+ }), /* @__PURE__ */ D("div", {
359
361
  className: "pointer-events-none absolute inset-0 flex flex-col items-center justify-center",
360
- children: [/* @__PURE__ */ D("span", {
362
+ children: [/* @__PURE__ */ E("span", {
361
363
  className: "text-xs text-text-secondary",
362
364
  children: "Total value"
363
- }), /* @__PURE__ */ D("span", {
365
+ }), /* @__PURE__ */ E("span", {
364
366
  className: "text-lg font-bold text-text-primary",
365
367
  children: t(Y)
366
368
  })]
367
369
  })]
368
- }), /* @__PURE__ */ D("ul", {
370
+ }), /* @__PURE__ */ E("ul", {
369
371
  className: "mt-3 space-y-2",
370
- children: X.map((e) => /* @__PURE__ */ O("li", {
372
+ children: X.map((e) => /* @__PURE__ */ D("li", {
371
373
  className: "flex items-center justify-between text-sm",
372
- children: [/* @__PURE__ */ O("span", {
374
+ children: [/* @__PURE__ */ D("span", {
373
375
  className: "flex items-center gap-2",
374
- children: [/* @__PURE__ */ D("span", {
376
+ children: [/* @__PURE__ */ E("span", {
375
377
  className: "h-2.5 w-2.5 rounded-full",
376
378
  style: { background: e.color }
377
- }), /* @__PURE__ */ D("span", {
379
+ }), /* @__PURE__ */ E("span", {
378
380
  className: "text-text-primary",
379
381
  children: e.name
380
382
  })]
381
- }), /* @__PURE__ */ O("span", {
383
+ }), /* @__PURE__ */ D("span", {
382
384
  className: "text-text-secondary",
383
385
  children: [Y > 0 ? Math.round(e.value / Y * 100) : 0, "%"]
384
386
  })]
@@ -386,18 +388,18 @@ function L() {
386
388
  })]
387
389
  })]
388
390
  }),
389
- /* @__PURE__ */ O("div", {
391
+ /* @__PURE__ */ D("div", {
390
392
  className: "grid grid-cols-1 gap-6 lg:grid-cols-3",
391
- children: [q.length > 0 && /* @__PURE__ */ D(s, {
393
+ children: [q.length > 0 && /* @__PURE__ */ E(a, {
392
394
  title: "Occupancy Trend",
393
395
  description: "Share of units occupied over the selected period",
394
396
  className: "lg:col-span-2",
395
- children: /* @__PURE__ */ D("div", {
397
+ children: /* @__PURE__ */ E("div", {
396
398
  className: "h-56 w-full",
397
- children: /* @__PURE__ */ D(f, {
399
+ children: /* @__PURE__ */ E(f, {
398
400
  width: "100%",
399
401
  height: "100%",
400
- children: /* @__PURE__ */ O(ee, {
402
+ children: /* @__PURE__ */ D(b, {
401
403
  data: q,
402
404
  margin: {
403
405
  top: 8,
@@ -406,31 +408,31 @@ function L() {
406
408
  bottom: 0
407
409
  },
408
410
  children: [
409
- /* @__PURE__ */ D(h, {
411
+ /* @__PURE__ */ E(h, {
410
412
  strokeDasharray: "3 3",
411
413
  stroke: "var(--color-border-subtle)",
412
414
  vertical: !1
413
415
  }),
414
- /* @__PURE__ */ D(v, {
416
+ /* @__PURE__ */ E(v, {
415
417
  dataKey: "month",
416
- tick: F,
418
+ tick: P,
417
419
  tickLine: !1,
418
420
  axisLine: !1
419
421
  }),
420
- /* @__PURE__ */ D(y, {
421
- tick: F,
422
+ /* @__PURE__ */ E(y, {
423
+ tick: P,
422
424
  tickLine: !1,
423
425
  axisLine: !1,
424
426
  width: 40,
425
427
  domain: [0, 100],
426
428
  tickFormatter: (e) => `${e}%`
427
429
  }),
428
- /* @__PURE__ */ D(d, {
429
- contentStyle: N,
430
- labelStyle: P,
430
+ /* @__PURE__ */ E(d, {
431
+ contentStyle: M,
432
+ labelStyle: N,
431
433
  formatter: (e) => [`${e}%`, "Occupancy"]
432
434
  }),
433
- /* @__PURE__ */ D(g, {
435
+ /* @__PURE__ */ E(g, {
434
436
  type: "monotone",
435
437
  dataKey: "rate",
436
438
  stroke: "var(--color-chart-2)",
@@ -446,46 +448,46 @@ function L() {
446
448
  })
447
449
  })
448
450
  })
449
- }), K.length > 0 && /* @__PURE__ */ D(s, {
451
+ }), K.length > 0 && /* @__PURE__ */ E(a, {
450
452
  title: "Period Summary",
451
453
  description: "Totals across the selected range",
452
- children: /* @__PURE__ */ O("div", {
454
+ children: /* @__PURE__ */ D("div", {
453
455
  className: "space-y-4",
454
- children: [/* @__PURE__ */ O("div", {
456
+ children: [/* @__PURE__ */ D("div", {
455
457
  className: "flex items-center justify-between rounded-lg bg-bg-sunken/50 p-3",
456
- children: [/* @__PURE__ */ O("div", { children: [/* @__PURE__ */ D("p", {
458
+ children: [/* @__PURE__ */ D("div", { children: [/* @__PURE__ */ E("p", {
457
459
  className: "text-sm text-text-secondary",
458
460
  children: "Total Revenue"
459
- }), /* @__PURE__ */ D("p", {
461
+ }), /* @__PURE__ */ E("p", {
460
462
  className: "text-lg font-bold text-text-primary",
461
463
  children: t(Z)
462
- })] }), /* @__PURE__ */ O("div", {
464
+ })] }), /* @__PURE__ */ D("div", {
463
465
  className: "text-right",
464
- children: [/* @__PURE__ */ D("p", {
466
+ children: [/* @__PURE__ */ E("p", {
465
467
  className: "text-sm text-text-secondary",
466
468
  children: "Total Expenses"
467
- }), /* @__PURE__ */ D("p", {
469
+ }), /* @__PURE__ */ E("p", {
468
470
  className: "text-lg font-bold text-text-primary",
469
471
  children: t(Q)
470
472
  })]
471
473
  })]
472
- }), /* @__PURE__ */ O("div", {
474
+ }), /* @__PURE__ */ D("div", {
473
475
  className: "grid grid-cols-2 gap-3",
474
- children: [/* @__PURE__ */ O("div", {
476
+ children: [/* @__PURE__ */ D("div", {
475
477
  className: "rounded-lg bg-status-success-bg-subtle p-3 text-center",
476
- children: [/* @__PURE__ */ D("p", {
478
+ children: [/* @__PURE__ */ E("p", {
477
479
  className: "text-xl font-bold text-status-success-text",
478
480
  children: t($)
479
- }), /* @__PURE__ */ D("p", {
481
+ }), /* @__PURE__ */ E("p", {
480
482
  className: "text-xs text-text-secondary",
481
483
  children: "Net Income"
482
484
  })]
483
- }), /* @__PURE__ */ O("div", {
485
+ }), /* @__PURE__ */ D("div", {
484
486
  className: "rounded-lg bg-status-info-bg-subtle p-3 text-center",
485
- children: [/* @__PURE__ */ O("p", {
487
+ children: [/* @__PURE__ */ D("p", {
486
488
  className: "text-xl font-bold text-status-info-text",
487
- children: [ae.toFixed(1), "%"]
488
- }), /* @__PURE__ */ D("p", {
489
+ children: [ce.toFixed(1), "%"]
490
+ }), /* @__PURE__ */ E("p", {
489
491
  className: "text-xs text-text-secondary",
490
492
  children: "Profit Margin"
491
493
  })]
@@ -494,13 +496,13 @@ function L() {
494
496
  })
495
497
  })]
496
498
  }),
497
- K.length > 0 && /* @__PURE__ */ O("div", {
499
+ K.length > 0 && /* @__PURE__ */ D("div", {
498
500
  id: "analytics-performance",
499
501
  className: "scroll-mt-6",
500
- children: [/* @__PURE__ */ D("h2", {
502
+ children: [/* @__PURE__ */ E("h2", {
501
503
  className: "mb-4 text-lg font-semibold text-text-primary",
502
504
  children: "Monthly Performance"
503
- }), /* @__PURE__ */ D(a, {
505
+ }), /* @__PURE__ */ E(ee, {
504
506
  columns: H,
505
507
  data: K,
506
508
  keyField: "month",
@@ -511,6 +513,6 @@ function L() {
511
513
  });
512
514
  }
513
515
  //#endregion
514
- export { L as AnalyticsPage };
516
+ export { I as AnalyticsPage };
515
517
 
516
518
  //# sourceMappingURL=AnalyticsPage.js.map