@burdenoff/microfe-housingvista 2026.608.1 → 2026.624.1

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.
@@ -3,25 +3,25 @@ import { useCallback as t, useMemo as n, useState as r } from "react";
3
3
  import { ChevronDown as i, ChevronLeft as a, ChevronRight as o, ChevronUp as s, ChevronsUpDown as c } from "lucide-react";
4
4
  import { jsx as l, jsxs as u } from "react/jsx-runtime";
5
5
  //#region src/housingvista/components/DataTable.tsx
6
- function d({ columns: d, data: f, keyField: p, onRowClick: m, emptyMessage: h = "No data available", className: g, pageSize: _ = 10, selectable: v = !1, selectedKeys: y, onSelectionChange: b }) {
7
- let [x, S] = r(null), [C, w] = r(null), [T, E] = r(0), D = t((e) => {
8
- x === e ? C === "asc" ? w("desc") : C === "desc" ? (S(null), w(null)) : w("asc") : (S(e), w("asc")), E(0);
9
- }, [x, C]), O = n(() => !x || !C ? f : [...f].sort((e, t) => {
10
- let n = e[x], r = t[x];
6
+ function d({ columns: d, data: f, keyField: p, onRowClick: m, emptyMessage: h = "No data available", className: g, pageSize: _ = 10, selectable: v = !1, selectedKeys: y, onSelectionChange: b, serverPagination: x }) {
7
+ let [S, C] = r(null), [w, T] = r(null), [E, D] = r(0), O = t((e) => {
8
+ S === e ? w === "asc" ? T("desc") : w === "desc" ? (C(null), T(null)) : T("asc") : (C(e), T("asc")), D(0);
9
+ }, [S, w]), k = n(() => !S || !w ? f : [...f].sort((e, t) => {
10
+ let n = e[S], r = t[S];
11
11
  if (n == null && r == null) return 0;
12
12
  if (n == null) return 1;
13
13
  if (r == null) return -1;
14
14
  let i = typeof n == "number" && typeof r == "number" ? n - r : String(n).localeCompare(String(r));
15
- return C === "asc" ? i : -i;
15
+ return w === "asc" ? i : -i;
16
16
  }), [
17
17
  f,
18
- x,
19
- C
20
- ]), k = Math.max(1, Math.ceil(O.length / _)), A = O.slice(T * _, (T + 1) * _), j = v && y ? A.every((e) => y.has(String(e[p]))) : !1, M = () => {
18
+ S,
19
+ w
20
+ ]), A = x?.pageSize ?? _, j = Math.max(1, Math.ceil(k.length / A)), M = x ? k : k.slice(E * A, (E + 1) * A), N = v && y ? M.every((e) => y.has(String(e[p]))) : !1, P = () => {
21
21
  if (!b || !y) return;
22
22
  let e = new Set(y);
23
- j ? A.forEach((t) => e.delete(String(t[p]))) : A.forEach((t) => e.add(String(t[p]))), b(e);
24
- }, N = (e) => {
23
+ N ? M.forEach((t) => e.delete(String(t[p]))) : M.forEach((t) => e.add(String(t[p]))), b(e);
24
+ }, F = (e) => {
25
25
  if (!b || !y) return;
26
26
  let t = String(e[p]), n = new Set(y);
27
27
  n.has(t) ? n.delete(t) : n.add(t), b(n);
@@ -44,24 +44,24 @@ function d({ columns: d, data: f, keyField: p, onRowClick: m, emptyMessage: h =
44
44
  className: "w-10 px-3 py-3",
45
45
  children: /* @__PURE__ */ l("input", {
46
46
  type: "checkbox",
47
- checked: j && A.length > 0,
48
- onChange: M,
47
+ checked: N && M.length > 0,
48
+ onChange: P,
49
49
  className: "h-4 w-4 rounded border-border"
50
50
  })
51
51
  }), d.map((t) => {
52
- let n = t.sortable !== !1, r = x === t.key;
52
+ let n = t.sortable !== !1, r = S === t.key;
53
53
  return /* @__PURE__ */ l("th", {
54
54
  className: e("px-4 py-3 text-left text-xs font-medium uppercase tracking-wider text-muted-foreground", n && "cursor-pointer select-none hover:text-foreground", t.className),
55
- onClick: n ? () => D(t.key) : void 0,
55
+ onClick: n ? () => O(t.key) : void 0,
56
56
  children: /* @__PURE__ */ u("span", {
57
57
  className: "inline-flex items-center gap-1",
58
- children: [t.header, n && (r ? l(C === "asc" ? s : i, { className: "h-3 w-3" }) : /* @__PURE__ */ l(c, { className: "h-3 w-3 opacity-30" }))]
58
+ children: [t.header, n && (r ? l(w === "asc" ? s : i, { className: "h-3 w-3" }) : /* @__PURE__ */ l(c, { className: "h-3 w-3 opacity-30" }))]
59
59
  })
60
60
  }, t.key);
61
61
  })]
62
62
  }) }), /* @__PURE__ */ l("tbody", {
63
63
  className: "divide-y divide-border bg-card",
64
- children: A.map((t) => {
64
+ children: M.map((t) => {
65
65
  let n = String(t[p]), r = v && y?.has(n);
66
66
  return /* @__PURE__ */ u("tr", {
67
67
  className: e("transition-colors", m && "cursor-pointer hover:bg-muted/50", r && "bg-primary/5"),
@@ -72,7 +72,7 @@ function d({ columns: d, data: f, keyField: p, onRowClick: m, emptyMessage: h =
72
72
  children: /* @__PURE__ */ l("input", {
73
73
  type: "checkbox",
74
74
  checked: r ?? !1,
75
- onChange: () => N(t),
75
+ onChange: () => F(t),
76
76
  className: "h-4 w-4 rounded border-border"
77
77
  })
78
78
  }), d.map((n) => /* @__PURE__ */ l("td", {
@@ -83,41 +83,81 @@ function d({ columns: d, data: f, keyField: p, onRowClick: m, emptyMessage: h =
83
83
  })
84
84
  })]
85
85
  })
86
- }), O.length > _ && /* @__PURE__ */ u("div", {
86
+ }), x ? /* @__PURE__ */ u("div", {
87
+ className: "flex flex-col gap-3 rounded-lg border border-border bg-card p-3 text-sm sm:flex-row sm:items-center sm:justify-between",
88
+ children: [/* @__PURE__ */ u("span", {
89
+ className: "text-muted-foreground",
90
+ children: ["Page ", x.page]
91
+ }), /* @__PURE__ */ u("div", {
92
+ className: "flex flex-wrap items-center gap-2",
93
+ children: [
94
+ x.onPageSizeChange ? /* @__PURE__ */ l("select", {
95
+ value: x.pageSize,
96
+ onChange: (e) => x.onPageSizeChange?.(Number(e.target.value)),
97
+ disabled: x.loading,
98
+ className: "h-8 rounded-md border border-border bg-card px-2 text-sm text-foreground disabled:opacity-50",
99
+ "aria-label": "Rows per page",
100
+ children: [
101
+ 10,
102
+ 25,
103
+ 50,
104
+ 100
105
+ ].map((e) => /* @__PURE__ */ u("option", {
106
+ value: e,
107
+ children: [e, " / page"]
108
+ }, e))
109
+ }) : null,
110
+ /* @__PURE__ */ u("button", {
111
+ type: "button",
112
+ onClick: () => x.onPageChange(x.page - 1),
113
+ disabled: x.loading || x.page <= 1,
114
+ className: "inline-flex items-center gap-1 rounded-md border border-border px-3 py-1.5 text-muted-foreground transition-colors hover:text-foreground disabled:cursor-not-allowed disabled:opacity-40",
115
+ children: [/* @__PURE__ */ l(a, { className: "h-4 w-4" }), "Previous"]
116
+ }),
117
+ /* @__PURE__ */ u("button", {
118
+ type: "button",
119
+ onClick: () => x.onPageChange(x.page + 1),
120
+ disabled: x.loading || !(x.hasNextPage ?? k.length >= x.pageSize),
121
+ className: "inline-flex items-center gap-1 rounded-md border border-border px-3 py-1.5 text-muted-foreground transition-colors hover:text-foreground disabled:cursor-not-allowed disabled:opacity-40",
122
+ children: ["Next", /* @__PURE__ */ l(o, { className: "h-4 w-4" })]
123
+ })
124
+ ]
125
+ })]
126
+ }) : k.length > _ ? /* @__PURE__ */ u("div", {
87
127
  className: "flex items-center justify-between text-sm",
88
128
  children: [/* @__PURE__ */ u("span", {
89
129
  className: "text-muted-foreground",
90
130
  children: [
91
131
  "Showing ",
92
- T * _ + 1,
132
+ E * _ + 1,
93
133
  "-",
94
- Math.min((T + 1) * _, O.length),
134
+ Math.min((E + 1) * _, k.length),
95
135
  " of ",
96
- O.length
136
+ k.length
97
137
  ]
98
138
  }), /* @__PURE__ */ u("div", {
99
139
  className: "flex items-center gap-1",
100
140
  children: [
101
141
  /* @__PURE__ */ l("button", {
102
- onClick: () => E((e) => Math.max(0, e - 1)),
103
- disabled: T === 0,
142
+ onClick: () => D((e) => Math.max(0, e - 1)),
143
+ disabled: E === 0,
104
144
  className: "rounded-md border border-border p-1.5 text-muted-foreground transition-colors hover:text-foreground disabled:cursor-not-allowed disabled:opacity-40",
105
145
  children: /* @__PURE__ */ l(a, { className: "h-4 w-4" })
106
146
  }),
107
- Array.from({ length: k }).map((t, n) => /* @__PURE__ */ l("button", {
108
- onClick: () => E(n),
109
- className: e("h-8 w-8 rounded-md text-xs font-medium transition-colors", n === T ? "bg-foreground text-background" : "text-muted-foreground hover:bg-muted"),
147
+ Array.from({ length: j }).map((t, n) => /* @__PURE__ */ l("button", {
148
+ onClick: () => D(n),
149
+ className: e("h-8 w-8 rounded-md text-xs font-medium transition-colors", n === E ? "bg-foreground text-background" : "text-muted-foreground hover:bg-muted"),
110
150
  children: n + 1
111
151
  }, n)),
112
152
  /* @__PURE__ */ l("button", {
113
- onClick: () => E((e) => Math.min(k - 1, e + 1)),
114
- disabled: T >= k - 1,
153
+ onClick: () => D((e) => Math.min(j - 1, e + 1)),
154
+ disabled: E >= j - 1,
115
155
  className: "rounded-md border border-border p-1.5 text-muted-foreground transition-colors hover:text-foreground disabled:cursor-not-allowed disabled:opacity-40",
116
156
  children: /* @__PURE__ */ l(o, { className: "h-4 w-4" })
117
157
  })
118
158
  ]
119
159
  })]
120
- })]
160
+ }) : null]
121
161
  });
122
162
  }
123
163
  //#endregion
@@ -1 +1 @@
1
- {"version":3,"file":"DataTable.js","names":[],"sources":["../../../src/housingvista/components/DataTable.tsx"],"sourcesContent":["import { useState, useMemo, useCallback, type ReactNode } from 'react';\nimport { ChevronUp, ChevronDown, ChevronsUpDown, ChevronLeft, ChevronRight } from 'lucide-react';\nimport { cn } from '../utils/helpers';\n\nexport interface Column<T> {\n key: string;\n header: string;\n render?: (item: T) => ReactNode;\n className?: string;\n sortable?: boolean;\n}\n\ntype SortDirection = 'asc' | 'desc' | null;\n\ninterface DataTableProps<T> {\n columns: Column<T>[];\n data: T[];\n keyField: string;\n onRowClick?: (item: T) => void;\n emptyMessage?: string;\n className?: string;\n pageSize?: number;\n selectable?: boolean;\n selectedKeys?: Set<string>;\n onSelectionChange?: (keys: Set<string>) => void;\n}\n\nexport function DataTable<T extends object>({\n columns,\n data,\n keyField,\n onRowClick,\n emptyMessage = 'No data available',\n className,\n pageSize = 10,\n selectable = false,\n selectedKeys,\n onSelectionChange,\n}: DataTableProps<T>) {\n const [sortKey, setSortKey] = useState<string | null>(null);\n const [sortDir, setSortDir] = useState<SortDirection>(null);\n const [page, setPage] = useState(0);\n\n const handleSort = useCallback(\n (key: string) => {\n if (sortKey === key) {\n if (sortDir === 'asc') setSortDir('desc');\n else if (sortDir === 'desc') {\n setSortKey(null);\n setSortDir(null);\n } else setSortDir('asc');\n } else {\n setSortKey(key);\n setSortDir('asc');\n }\n setPage(0);\n },\n [sortKey, sortDir]\n );\n\n const sorted = useMemo(() => {\n if (!sortKey || !sortDir) return data;\n return [...data].sort((a, b) => {\n const av = (a as Record<string, unknown>)[sortKey];\n const bv = (b as Record<string, unknown>)[sortKey];\n if (av == null && bv == null) return 0;\n if (av == null) return 1;\n if (bv == null) return -1;\n const cmp = typeof av === 'number' && typeof bv === 'number' ? av - bv : String(av).localeCompare(String(bv));\n return sortDir === 'asc' ? cmp : -cmp;\n });\n }, [data, sortKey, sortDir]);\n\n const totalPages = Math.max(1, Math.ceil(sorted.length / pageSize));\n const paged = sorted.slice(page * pageSize, (page + 1) * pageSize);\n\n const allPageKeysSelected =\n selectable && selectedKeys\n ? paged.every((item) => selectedKeys.has(String((item as Record<string, unknown>)[keyField])))\n : false;\n\n const handleSelectAll = () => {\n if (!onSelectionChange || !selectedKeys) return;\n const keys = new Set(selectedKeys);\n if (allPageKeysSelected) {\n paged.forEach((item) => keys.delete(String((item as Record<string, unknown>)[keyField])));\n } else {\n paged.forEach((item) => keys.add(String((item as Record<string, unknown>)[keyField])));\n }\n onSelectionChange(keys);\n };\n\n const handleSelectRow = (item: T) => {\n if (!onSelectionChange || !selectedKeys) return;\n const key = String((item as Record<string, unknown>)[keyField]);\n const keys = new Set(selectedKeys);\n if (keys.has(key)) keys.delete(key);\n else keys.add(key);\n onSelectionChange(keys);\n };\n\n if (data.length === 0) {\n return (\n <div className=\"flex items-center justify-center rounded-lg border border-border bg-card p-12\">\n <p className=\"text-sm text-muted-foreground\">{emptyMessage}</p>\n </div>\n );\n }\n\n return (\n <div className={cn('space-y-3', className)}>\n <div className=\"overflow-x-auto rounded-lg border border-border\">\n <table className=\"w-full\">\n <thead>\n <tr className=\"border-b border-border bg-muted/50\">\n {selectable && (\n <th className=\"w-10 px-3 py-3\">\n <input\n type=\"checkbox\"\n checked={allPageKeysSelected && paged.length > 0}\n onChange={handleSelectAll}\n className=\"h-4 w-4 rounded border-border\"\n />\n </th>\n )}\n {columns.map((col) => {\n const isSortable = col.sortable !== false;\n const isActive = sortKey === col.key;\n return (\n <th\n key={col.key}\n className={cn(\n 'px-4 py-3 text-left text-xs font-medium uppercase tracking-wider text-muted-foreground',\n isSortable && 'cursor-pointer select-none hover:text-foreground',\n col.className\n )}\n onClick={isSortable ? () => handleSort(col.key) : undefined}\n >\n <span className=\"inline-flex items-center gap-1\">\n {col.header}\n {isSortable &&\n (isActive ? (\n sortDir === 'asc' ? (\n <ChevronUp className=\"h-3 w-3\" />\n ) : (\n <ChevronDown className=\"h-3 w-3\" />\n )\n ) : (\n <ChevronsUpDown className=\"h-3 w-3 opacity-30\" />\n ))}\n </span>\n </th>\n );\n })}\n </tr>\n </thead>\n <tbody className=\"divide-y divide-border bg-card\">\n {paged.map((item) => {\n const rowKey = String((item as Record<string, unknown>)[keyField]);\n const isSelected = selectable && selectedKeys?.has(rowKey);\n return (\n <tr\n key={rowKey}\n className={cn(\n 'transition-colors',\n onRowClick && 'cursor-pointer hover:bg-muted/50',\n isSelected && 'bg-primary/5'\n )}\n onClick={() => onRowClick?.(item)}\n >\n {selectable && (\n <td className=\"w-10 px-3 py-3\" onClick={(e) => e.stopPropagation()}>\n <input\n type=\"checkbox\"\n checked={isSelected ?? false}\n onChange={() => handleSelectRow(item)}\n className=\"h-4 w-4 rounded border-border\"\n />\n </td>\n )}\n {columns.map((col) => (\n <td key={col.key} className={cn('px-4 py-3 text-sm text-foreground', col.className)}>\n {col.render ? col.render(item) : String((item as Record<string, unknown>)[col.key] ?? '')}\n </td>\n ))}\n </tr>\n );\n })}\n </tbody>\n </table>\n </div>\n\n {/* Pagination */}\n {sorted.length > pageSize && (\n <div className=\"flex items-center justify-between text-sm\">\n <span className=\"text-muted-foreground\">\n Showing {page * pageSize + 1}-{Math.min((page + 1) * pageSize, sorted.length)} of {sorted.length}\n </span>\n <div className=\"flex items-center gap-1\">\n <button\n onClick={() => setPage((p) => Math.max(0, p - 1))}\n disabled={page === 0}\n className=\"rounded-md border border-border p-1.5 text-muted-foreground transition-colors hover:text-foreground disabled:cursor-not-allowed disabled:opacity-40\"\n >\n <ChevronLeft className=\"h-4 w-4\" />\n </button>\n {Array.from({ length: totalPages }).map((_, i) => (\n <button\n key={i}\n onClick={() => setPage(i)}\n className={cn(\n 'h-8 w-8 rounded-md text-xs font-medium transition-colors',\n i === page ? 'bg-foreground text-background' : 'text-muted-foreground hover:bg-muted'\n )}\n >\n {i + 1}\n </button>\n ))}\n <button\n onClick={() => setPage((p) => Math.min(totalPages - 1, p + 1))}\n disabled={page >= totalPages - 1}\n className=\"rounded-md border border-border p-1.5 text-muted-foreground transition-colors hover:text-foreground disabled:cursor-not-allowed disabled:opacity-40\"\n >\n <ChevronRight className=\"h-4 w-4\" />\n </button>\n </div>\n </div>\n )}\n </div>\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"DataTable.js","names":[],"sources":["../../../src/housingvista/components/DataTable.tsx"],"sourcesContent":["import { useState, useMemo, useCallback, type ReactNode } from 'react';\nimport { ChevronUp, ChevronDown, ChevronsUpDown, ChevronLeft, ChevronRight } from 'lucide-react';\nimport { cn } from '../utils/helpers';\n\nexport interface Column<T> {\n key: string;\n header: string;\n render?: (item: T) => ReactNode;\n className?: string;\n sortable?: boolean;\n}\n\ntype SortDirection = 'asc' | 'desc' | null;\n\ninterface DataTableProps<T> {\n columns: Column<T>[];\n data: T[];\n keyField: string;\n onRowClick?: (item: T) => void;\n emptyMessage?: string;\n className?: string;\n pageSize?: number;\n selectable?: boolean;\n selectedKeys?: Set<string>;\n onSelectionChange?: (keys: Set<string>) => void;\n serverPagination?: {\n page: number;\n pageSize: number;\n hasNextPage?: boolean;\n loading?: boolean;\n onPageChange: (page: number) => void;\n onPageSizeChange?: (pageSize: number) => void;\n };\n}\n\nexport function DataTable<T extends object>({\n columns,\n data,\n keyField,\n onRowClick,\n emptyMessage = 'No data available',\n className,\n pageSize = 10,\n selectable = false,\n selectedKeys,\n onSelectionChange,\n serverPagination,\n}: DataTableProps<T>) {\n const [sortKey, setSortKey] = useState<string | null>(null);\n const [sortDir, setSortDir] = useState<SortDirection>(null);\n const [page, setPage] = useState(0);\n\n const handleSort = useCallback(\n (key: string) => {\n if (sortKey === key) {\n if (sortDir === 'asc') setSortDir('desc');\n else if (sortDir === 'desc') {\n setSortKey(null);\n setSortDir(null);\n } else setSortDir('asc');\n } else {\n setSortKey(key);\n setSortDir('asc');\n }\n setPage(0);\n },\n [sortKey, sortDir]\n );\n\n const sorted = useMemo(() => {\n if (!sortKey || !sortDir) return data;\n return [...data].sort((a, b) => {\n const av = (a as Record<string, unknown>)[sortKey];\n const bv = (b as Record<string, unknown>)[sortKey];\n if (av == null && bv == null) return 0;\n if (av == null) return 1;\n if (bv == null) return -1;\n const cmp = typeof av === 'number' && typeof bv === 'number' ? av - bv : String(av).localeCompare(String(bv));\n return sortDir === 'asc' ? cmp : -cmp;\n });\n }, [data, sortKey, sortDir]);\n\n const effectivePageSize = serverPagination?.pageSize ?? pageSize;\n const totalPages = Math.max(1, Math.ceil(sorted.length / effectivePageSize));\n const paged = serverPagination ? sorted : sorted.slice(page * effectivePageSize, (page + 1) * effectivePageSize);\n\n const allPageKeysSelected =\n selectable && selectedKeys\n ? paged.every((item) => selectedKeys.has(String((item as Record<string, unknown>)[keyField])))\n : false;\n\n const handleSelectAll = () => {\n if (!onSelectionChange || !selectedKeys) return;\n const keys = new Set(selectedKeys);\n if (allPageKeysSelected) {\n paged.forEach((item) => keys.delete(String((item as Record<string, unknown>)[keyField])));\n } else {\n paged.forEach((item) => keys.add(String((item as Record<string, unknown>)[keyField])));\n }\n onSelectionChange(keys);\n };\n\n const handleSelectRow = (item: T) => {\n if (!onSelectionChange || !selectedKeys) return;\n const key = String((item as Record<string, unknown>)[keyField]);\n const keys = new Set(selectedKeys);\n if (keys.has(key)) keys.delete(key);\n else keys.add(key);\n onSelectionChange(keys);\n };\n\n if (data.length === 0) {\n return (\n <div className=\"flex items-center justify-center rounded-lg border border-border bg-card p-12\">\n <p className=\"text-sm text-muted-foreground\">{emptyMessage}</p>\n </div>\n );\n }\n\n return (\n <div className={cn('space-y-3', className)}>\n <div className=\"overflow-x-auto rounded-lg border border-border\">\n <table className=\"w-full\">\n <thead>\n <tr className=\"border-b border-border bg-muted/50\">\n {selectable && (\n <th className=\"w-10 px-3 py-3\">\n <input\n type=\"checkbox\"\n checked={allPageKeysSelected && paged.length > 0}\n onChange={handleSelectAll}\n className=\"h-4 w-4 rounded border-border\"\n />\n </th>\n )}\n {columns.map((col) => {\n const isSortable = col.sortable !== false;\n const isActive = sortKey === col.key;\n return (\n <th\n key={col.key}\n className={cn(\n 'px-4 py-3 text-left text-xs font-medium uppercase tracking-wider text-muted-foreground',\n isSortable && 'cursor-pointer select-none hover:text-foreground',\n col.className\n )}\n onClick={isSortable ? () => handleSort(col.key) : undefined}\n >\n <span className=\"inline-flex items-center gap-1\">\n {col.header}\n {isSortable &&\n (isActive ? (\n sortDir === 'asc' ? (\n <ChevronUp className=\"h-3 w-3\" />\n ) : (\n <ChevronDown className=\"h-3 w-3\" />\n )\n ) : (\n <ChevronsUpDown className=\"h-3 w-3 opacity-30\" />\n ))}\n </span>\n </th>\n );\n })}\n </tr>\n </thead>\n <tbody className=\"divide-y divide-border bg-card\">\n {paged.map((item) => {\n const rowKey = String((item as Record<string, unknown>)[keyField]);\n const isSelected = selectable && selectedKeys?.has(rowKey);\n return (\n <tr\n key={rowKey}\n className={cn(\n 'transition-colors',\n onRowClick && 'cursor-pointer hover:bg-muted/50',\n isSelected && 'bg-primary/5'\n )}\n onClick={() => onRowClick?.(item)}\n >\n {selectable && (\n <td className=\"w-10 px-3 py-3\" onClick={(e) => e.stopPropagation()}>\n <input\n type=\"checkbox\"\n checked={isSelected ?? false}\n onChange={() => handleSelectRow(item)}\n className=\"h-4 w-4 rounded border-border\"\n />\n </td>\n )}\n {columns.map((col) => (\n <td key={col.key} className={cn('px-4 py-3 text-sm text-foreground', col.className)}>\n {col.render ? col.render(item) : String((item as Record<string, unknown>)[col.key] ?? '')}\n </td>\n ))}\n </tr>\n );\n })}\n </tbody>\n </table>\n </div>\n\n {serverPagination ? (\n <div className=\"flex flex-col gap-3 rounded-lg border border-border bg-card p-3 text-sm sm:flex-row sm:items-center sm:justify-between\">\n <span className=\"text-muted-foreground\">Page {serverPagination.page}</span>\n <div className=\"flex flex-wrap items-center gap-2\">\n {serverPagination.onPageSizeChange ? (\n <select\n value={serverPagination.pageSize}\n onChange={(event) => serverPagination.onPageSizeChange?.(Number(event.target.value))}\n disabled={serverPagination.loading}\n className=\"h-8 rounded-md border border-border bg-card px-2 text-sm text-foreground disabled:opacity-50\"\n aria-label=\"Rows per page\"\n >\n {[10, 25, 50, 100].map((option) => (\n <option key={option} value={option}>\n {option} / page\n </option>\n ))}\n </select>\n ) : null}\n <button\n type=\"button\"\n onClick={() => serverPagination.onPageChange(serverPagination.page - 1)}\n disabled={serverPagination.loading || serverPagination.page <= 1}\n className=\"inline-flex items-center gap-1 rounded-md border border-border px-3 py-1.5 text-muted-foreground transition-colors hover:text-foreground disabled:cursor-not-allowed disabled:opacity-40\"\n >\n <ChevronLeft className=\"h-4 w-4\" />\n Previous\n </button>\n <button\n type=\"button\"\n onClick={() => serverPagination.onPageChange(serverPagination.page + 1)}\n disabled={\n serverPagination.loading ||\n !(serverPagination.hasNextPage ?? sorted.length >= serverPagination.pageSize)\n }\n className=\"inline-flex items-center gap-1 rounded-md border border-border px-3 py-1.5 text-muted-foreground transition-colors hover:text-foreground disabled:cursor-not-allowed disabled:opacity-40\"\n >\n Next\n <ChevronRight className=\"h-4 w-4\" />\n </button>\n </div>\n </div>\n ) : sorted.length > pageSize ? (\n <div className=\"flex items-center justify-between text-sm\">\n <span className=\"text-muted-foreground\">\n Showing {page * pageSize + 1}-{Math.min((page + 1) * pageSize, sorted.length)} of {sorted.length}\n </span>\n <div className=\"flex items-center gap-1\">\n <button\n onClick={() => setPage((p) => Math.max(0, p - 1))}\n disabled={page === 0}\n className=\"rounded-md border border-border p-1.5 text-muted-foreground transition-colors hover:text-foreground disabled:cursor-not-allowed disabled:opacity-40\"\n >\n <ChevronLeft className=\"h-4 w-4\" />\n </button>\n {Array.from({ length: totalPages }).map((_, i) => (\n <button\n key={i}\n onClick={() => setPage(i)}\n className={cn(\n 'h-8 w-8 rounded-md text-xs font-medium transition-colors',\n i === page ? 'bg-foreground text-background' : 'text-muted-foreground hover:bg-muted'\n )}\n >\n {i + 1}\n </button>\n ))}\n <button\n onClick={() => setPage((p) => Math.min(totalPages - 1, p + 1))}\n disabled={page >= totalPages - 1}\n className=\"rounded-md border border-border p-1.5 text-muted-foreground transition-colors hover:text-foreground disabled:cursor-not-allowed disabled:opacity-40\"\n >\n <ChevronRight className=\"h-4 w-4\" />\n </button>\n </div>\n </div>\n ) : null}\n </div>\n );\n}\n"],"mappings":"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"}
@@ -1,7 +1,13 @@
1
1
  import { gql as e } from "@apollo/client";
2
2
  import { useQuery as t } from "@apollo/client/react";
3
3
  //#region src/housingvista/hooks/index.ts
4
- var n = e`
4
+ var n = {
5
+ limit: 50,
6
+ offset: 0
7
+ }, r = (e = n) => ({ pagination: {
8
+ limit: e.limit ?? n.limit,
9
+ offset: e.offset ?? n.offset
10
+ } }), i = e`
5
11
  query GetDashboardStats {
6
12
  housingvistaDashboardStats {
7
13
  totalProperties
@@ -18,9 +24,9 @@ var n = e`
18
24
  upcomingViewings
19
25
  }
20
26
  }
21
- `, r = e`
22
- query GetProperties {
23
- housingvistaProperties {
27
+ `, a = e`
28
+ query GetProperties($pagination: HousingVistaPaginationInput) {
29
+ housingvistaProperties(pagination: $pagination) {
24
30
  id
25
31
  title
26
32
  description
@@ -81,9 +87,9 @@ var n = e`
81
87
  updatedAt
82
88
  }
83
89
  }
84
- `, i = e`
85
- query GetTransactions {
86
- housingvistaTransactions {
90
+ `, o = e`
91
+ query GetTransactions($pagination: HousingVistaPaginationInput) {
92
+ housingvistaTransactions(pagination: $pagination) {
87
93
  id
88
94
  type
89
95
  status
@@ -94,6 +100,10 @@ var n = e`
94
100
  property {
95
101
  id
96
102
  title
103
+ location {
104
+ city
105
+ state
106
+ }
97
107
  images {
98
108
  id
99
109
  url
@@ -126,9 +136,9 @@ var n = e`
126
136
  }
127
137
  }
128
138
  }
129
- `, a = e`
130
- query GetInvestments {
131
- housingvistaInvestments {
139
+ `, s = e`
140
+ query GetInvestments($pagination: HousingVistaPaginationInput) {
141
+ housingvistaInvestments(pagination: $pagination) {
132
142
  id
133
143
  investmentType
134
144
  totalValue
@@ -146,9 +156,9 @@ var n = e`
146
156
  }
147
157
  }
148
158
  }
149
- `, o = e`
150
- query GetRentalUnits {
151
- housingvistaRentalUnits {
159
+ `, c = e`
160
+ query GetRentalUnits($pagination: HousingVistaPaginationInput) {
161
+ housingvistaRentalUnits(pagination: $pagination) {
152
162
  id
153
163
  propertyId
154
164
  propertyTitle
@@ -165,9 +175,9 @@ var n = e`
165
175
  securityDeposit
166
176
  }
167
177
  }
168
- `, s = e`
169
- query GetAssets {
170
- housingvistaAssets {
178
+ `, l = e`
179
+ query GetAssets($pagination: HousingVistaPaginationInput) {
180
+ housingvistaAssets(pagination: $pagination) {
171
181
  id
172
182
  title
173
183
  type
@@ -183,9 +193,9 @@ var n = e`
183
193
  lastValuationDate
184
194
  }
185
195
  }
186
- `, c = e`
187
- query GetAmcContracts {
188
- housingvistaAmcContracts {
196
+ `, u = e`
197
+ query GetAmcContracts($pagination: HousingVistaPaginationInput) {
198
+ housingvistaAmcContracts(pagination: $pagination) {
189
199
  id
190
200
  propertyId
191
201
  propertyTitle
@@ -199,9 +209,9 @@ var n = e`
199
209
  servicesIncluded
200
210
  }
201
211
  }
202
- `, l = e`
203
- query GetMarketplaceServices {
204
- housingvistaMarketplaceServices {
212
+ `, d = e`
213
+ query GetMarketplaceServices($pagination: HousingVistaPaginationInput) {
214
+ housingvistaMarketplaceServices(pagination: $pagination) {
205
215
  id
206
216
  name
207
217
  providerName
@@ -217,9 +227,9 @@ var n = e`
217
227
  featured
218
228
  }
219
229
  }
220
- `, u = e`
221
- query GetVerifications {
222
- housingvistaVerificationItems {
230
+ `, f = e`
231
+ query GetVerifications($pagination: HousingVistaPaginationInput) {
232
+ housingvistaVerificationItems(pagination: $pagination) {
223
233
  id
224
234
  entityType
225
235
  entityId
@@ -231,9 +241,9 @@ var n = e`
231
241
  notes
232
242
  }
233
243
  }
234
- `, d = e`
235
- query GetLegalServices {
236
- housingvistaLegalServices {
244
+ `, p = e`
245
+ query GetLegalServices($pagination: HousingVistaPaginationInput) {
246
+ housingvistaLegalServices(pagination: $pagination) {
237
247
  id
238
248
  title
239
249
  category
@@ -247,9 +257,9 @@ var n = e`
247
257
  documentsRequired
248
258
  }
249
259
  }
250
- `, f = e`
251
- query GetHomeLoans {
252
- housingvistaHomeLoanOffers {
260
+ `, m = e`
261
+ query GetHomeLoans($pagination: HousingVistaPaginationInput) {
262
+ housingvistaHomeLoanOffers(pagination: $pagination) {
253
263
  id
254
264
  bankName
255
265
  bankLogo
@@ -264,9 +274,9 @@ var n = e`
264
274
  prepaymentCharges
265
275
  }
266
276
  }
267
- `, p = e`
268
- query GetMarketTrends {
269
- housingvistaMarketTrends {
277
+ `, h = e`
278
+ query GetMarketTrends($pagination: HousingVistaPaginationInput) {
279
+ housingvistaMarketTrends(pagination: $pagination) {
270
280
  month
271
281
  avgPrice
272
282
  avgRent
@@ -275,9 +285,9 @@ var n = e`
275
285
  priceChangePercent
276
286
  }
277
287
  }
278
- `, m = e`
279
- query GetAreaInsights {
280
- housingvistaAreaInsights {
288
+ `, g = e`
289
+ query GetAreaInsights($pagination: HousingVistaPaginationInput) {
290
+ housingvistaAreaInsights(pagination: $pagination) {
281
291
  id
282
292
  areaName
283
293
  city
@@ -294,8 +304,8 @@ var n = e`
294
304
  upcomingProjects
295
305
  }
296
306
  }
297
- `, h = () => {
298
- let { data: e, loading: r, error: i } = t(n);
307
+ `, _ = () => {
308
+ let { data: e, loading: n, error: r } = t(i);
299
309
  return {
300
310
  data: e?.housingvistaDashboardStats || {
301
311
  totalProperties: 0,
@@ -311,13 +321,13 @@ var n = e`
311
321
  unreadMessages: 0,
312
322
  upcomingViewings: 0
313
323
  },
314
- loading: r,
315
- error: i
324
+ loading: n,
325
+ error: r
316
326
  };
317
- }, g = () => {
318
- let { data: e, loading: n, error: r } = t(i);
327
+ }, v = (e) => {
328
+ let { data: n, loading: i, error: a } = t(o, { variables: r(e) });
319
329
  return {
320
- data: (e?.housingvistaTransactions || []).map((e) => ({
330
+ data: (n?.housingvistaTransactions || []).map((e) => ({
321
331
  id: `act-${e.id}`,
322
332
  type: "transaction_update",
323
333
  title: `Transaction: ${e.type}`,
@@ -328,107 +338,107 @@ var n = e`
328
338
  actorName: e.buyer ? `${e.buyer.firstName} ${e.buyer.lastName}` : e.tenant ? `${e.tenant.firstName} ${e.tenant.lastName}` : "System",
329
339
  actorAvatar: e.buyer?.avatar || e.tenant?.avatar
330
340
  })),
331
- loading: n,
332
- error: r
341
+ loading: i,
342
+ error: a
333
343
  };
334
- }, _ = () => {
335
- let { data: e, loading: n, error: i } = t(r);
344
+ }, y = (e) => {
345
+ let { data: n, loading: i, error: o } = t(a, { variables: r(e) });
336
346
  return {
337
- data: e?.housingvistaProperties || [],
338
- loading: n,
339
- error: i
347
+ data: n?.housingvistaProperties || [],
348
+ loading: i,
349
+ error: o
340
350
  };
341
- }, v = () => {
342
- let { data: e, loading: n, error: r } = t(i);
351
+ }, b = (e) => {
352
+ let { data: n, loading: i, error: a } = t(o, { variables: r(e) });
343
353
  return {
344
- data: e?.housingvistaTransactions || [],
345
- loading: n,
346
- error: r
354
+ data: n?.housingvistaTransactions || [],
355
+ loading: i,
356
+ error: a
347
357
  };
348
- }, y = () => {
349
- let { data: e, loading: n, error: r } = t(a);
358
+ }, x = (e) => {
359
+ let { data: n, loading: i, error: a } = t(s, { variables: r(e) });
350
360
  return {
351
- data: e?.housingvistaInvestments || [],
352
- loading: n,
353
- error: r
361
+ data: n?.housingvistaInvestments || [],
362
+ loading: i,
363
+ error: a
354
364
  };
355
- }, b = () => {
356
- let { data: e, loading: n, error: r } = t(o);
365
+ }, S = (e) => {
366
+ let { data: n, loading: i, error: a } = t(c, { variables: r(e) });
357
367
  return {
358
- data: e?.housingvistaRentalUnits || [],
359
- loading: n,
360
- error: r
368
+ data: n?.housingvistaRentalUnits || [],
369
+ loading: i,
370
+ error: a
361
371
  };
362
- }, x = () => {
363
- let { data: e, loading: n, error: r } = t(s);
372
+ }, C = (e) => {
373
+ let { data: n, loading: i, error: a } = t(l, { variables: r(e) });
364
374
  return {
365
- data: e?.housingvistaAssets || [],
366
- loading: n,
367
- error: r
375
+ data: n?.housingvistaAssets || [],
376
+ loading: i,
377
+ error: a
368
378
  };
369
- }, S = () => {
370
- let { data: e, loading: n, error: r } = t(c);
379
+ }, w = (e) => {
380
+ let { data: n, loading: i, error: a } = t(u, { variables: r(e) });
371
381
  return {
372
- data: e?.housingvistaAmcContracts || [],
373
- loading: n,
374
- error: r
382
+ data: n?.housingvistaAmcContracts || [],
383
+ loading: i,
384
+ error: a
375
385
  };
376
- }, C = () => {
377
- let { data: e, loading: n, error: r } = t(l);
386
+ }, T = (e) => {
387
+ let { data: n, loading: i, error: a } = t(d, { variables: r(e) });
378
388
  return {
379
- data: e?.housingvistaMarketplaceServices || [],
380
- loading: n,
381
- error: r
389
+ data: n?.housingvistaMarketplaceServices || [],
390
+ loading: i,
391
+ error: a
382
392
  };
383
- }, w = () => ({
393
+ }, E = () => ({
384
394
  data: [],
385
395
  loading: !1,
386
396
  error: null
387
- }), T = () => ({
397
+ }), D = () => ({
388
398
  data: [],
389
399
  loading: !1,
390
400
  error: null
391
- }), E = () => {
392
- let { data: e, loading: n, error: r } = t(u);
401
+ }), O = (e) => {
402
+ let { data: n, loading: i, error: a } = t(f, { variables: r(e) });
393
403
  return {
394
- data: e?.housingvistaVerificationItems || [],
395
- loading: n,
396
- error: r
404
+ data: n?.housingvistaVerificationItems || [],
405
+ loading: i,
406
+ error: a
397
407
  };
398
- }, D = () => {
399
- let { data: e, loading: n, error: r } = t(d);
408
+ }, k = (e) => {
409
+ let { data: n, loading: i, error: a } = t(p, { variables: r(e) });
400
410
  return {
401
- data: e?.housingvistaLegalServices || [],
402
- loading: n,
403
- error: r
411
+ data: n?.housingvistaLegalServices || [],
412
+ loading: i,
413
+ error: a
404
414
  };
405
- }, O = () => {
406
- let { data: e, loading: n, error: r } = t(f);
415
+ }, A = (e) => {
416
+ let { data: n, loading: i, error: a } = t(m, { variables: r(e) });
407
417
  return {
408
- data: e?.housingvistaHomeLoanOffers || [],
409
- loading: n,
410
- error: r
418
+ data: n?.housingvistaHomeLoanOffers || [],
419
+ loading: i,
420
+ error: a
411
421
  };
412
- }, k = () => {
413
- let { data: e, loading: n, error: r } = t(p);
422
+ }, j = (e) => {
423
+ let { data: n, loading: i, error: a } = t(h, { variables: r(e) });
414
424
  return {
415
- data: e?.housingvistaMarketTrends || [],
416
- loading: n,
417
- error: r
425
+ data: n?.housingvistaMarketTrends || [],
426
+ loading: i,
427
+ error: a
418
428
  };
419
- }, A = () => {
420
- let { data: e, loading: n, error: r } = t(m);
429
+ }, M = (e) => {
430
+ let { data: n, loading: i, error: a } = t(g, { variables: r(e) });
421
431
  return {
422
- data: e?.housingvistaAreaInsights || [],
423
- loading: n,
424
- error: r
432
+ data: n?.housingvistaAreaInsights || [],
433
+ loading: i,
434
+ error: a
425
435
  };
426
- }, j = () => ({
436
+ }, N = () => ({
427
437
  data: null,
428
438
  loading: !1,
429
439
  error: null
430
440
  });
431
441
  //#endregion
432
- export { S as useAMCContracts, j as useAnalyticsData, A as useAreaInsights, x as useAssets, w as useConversations, h as useDashboardStats, O as useHomeLoans, y as useInvestments, D as useLegalServices, k as useMarketTrends, C as useMarketplaceServices, T as useNotifications, _ as useProperties, g as useRecentActivities, b as useRentalUnits, v as useTransactions, E as useVerifications };
442
+ export { w as useAMCContracts, N as useAnalyticsData, M as useAreaInsights, C as useAssets, E as useConversations, _ as useDashboardStats, A as useHomeLoans, x as useInvestments, k as useLegalServices, j as useMarketTrends, T as useMarketplaceServices, D as useNotifications, y as useProperties, v as useRecentActivities, S as useRentalUnits, b as useTransactions, O as useVerifications };
433
443
 
434
444
  //# sourceMappingURL=index.js.map