@cryptlex/web-components 1.4.1 → 1.6.0

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 (92) hide show
  1. package/README.md +4 -13
  2. package/dist/components/data-table/column-picker.es.js +3 -4
  3. package/dist/components/data-table/column-picker.es.js.map +1 -1
  4. package/dist/components/data-table/data-table.es.js +79 -80
  5. package/dist/components/data-table/data-table.es.js.map +1 -1
  6. package/dist/components/data-table/page-size.es.js +5 -5
  7. package/dist/components/data-table/page-size.es.js.map +1 -1
  8. package/dist/components/data-table/paginator.es.js +25 -31
  9. package/dist/components/data-table/paginator.es.js.map +1 -1
  10. package/dist/components/data-table/table-actions.es.js +26 -27
  11. package/dist/components/data-table/table-actions.es.js.map +1 -1
  12. package/dist/components/data-table/table-content.es.js +37 -31
  13. package/dist/components/data-table/table-content.es.js.map +1 -1
  14. package/dist/components/data-table/table-filter.es.js +42 -45
  15. package/dist/components/data-table/table-filter.es.js.map +1 -1
  16. package/dist/components/key-value-card/key-value-card.es.js +17 -14
  17. package/dist/components/key-value-card/key-value-card.es.js.map +1 -1
  18. package/dist/components/sidebar/app-layout.es.js +11 -15
  19. package/dist/components/sidebar/app-layout.es.js.map +1 -1
  20. package/dist/components/sidebar/breadcrumb.es.js +2 -3
  21. package/dist/components/sidebar/breadcrumb.es.js.map +1 -1
  22. package/dist/components/sidebar/nav-main.es.js +18 -18
  23. package/dist/components/sidebar/nav-main.es.js.map +1 -1
  24. package/dist/components/static-data-table/data-table.es.js +14 -14
  25. package/dist/components/static-data-table/data-table.es.js.map +1 -1
  26. package/dist/components/ui/accordion.es.js +9 -9
  27. package/dist/components/ui/accordion.es.js.map +1 -1
  28. package/dist/components/ui/avatar.es.js +16 -16
  29. package/dist/components/ui/avatar.es.js.map +1 -1
  30. package/dist/components/ui/badge.es.js +5 -24
  31. package/dist/components/ui/badge.es.js.map +1 -1
  32. package/dist/components/ui/breadcrumb.es.js +10 -10
  33. package/dist/components/ui/breadcrumb.es.js.map +1 -1
  34. package/dist/components/ui/button.es.js +17 -17
  35. package/dist/components/ui/button.es.js.map +1 -1
  36. package/dist/components/ui/calendar.es.js +8 -8
  37. package/dist/components/ui/calendar.es.js.map +1 -1
  38. package/dist/components/ui/card.es.js +21 -21
  39. package/dist/components/ui/card.es.js.map +1 -1
  40. package/dist/components/ui/chart.es.js +76 -102
  41. package/dist/components/ui/chart.es.js.map +1 -1
  42. package/dist/components/ui/checkbox.es.js +13 -19
  43. package/dist/components/ui/checkbox.es.js.map +1 -1
  44. package/dist/components/ui/command.es.js +4 -4
  45. package/dist/components/ui/command.es.js.map +1 -1
  46. package/dist/components/ui/copy-button.es.js +20 -34
  47. package/dist/components/ui/copy-button.es.js.map +1 -1
  48. package/dist/components/ui/dialog.es.js +32 -32
  49. package/dist/components/ui/dialog.es.js.map +1 -1
  50. package/dist/components/ui/drawer.es.js +2 -2
  51. package/dist/components/ui/drawer.es.js.map +1 -1
  52. package/dist/components/ui/dropdown-menu.es.js +74 -82
  53. package/dist/components/ui/dropdown-menu.es.js.map +1 -1
  54. package/dist/components/ui/input-otp.es.js +17 -17
  55. package/dist/components/ui/input-otp.es.js.map +1 -1
  56. package/dist/components/ui/input.es.js +7 -7
  57. package/dist/components/ui/input.es.js.map +1 -1
  58. package/dist/components/ui/link-button.es.js +6 -6
  59. package/dist/components/ui/link-button.es.js.map +1 -1
  60. package/dist/components/ui/mutli-select.es.js +52 -52
  61. package/dist/components/ui/mutli-select.es.js.map +1 -1
  62. package/dist/components/ui/navigation-menu.es.js +34 -34
  63. package/dist/components/ui/navigation-menu.es.js.map +1 -1
  64. package/dist/components/ui/pagination.es.js +38 -38
  65. package/dist/components/ui/pagination.es.js.map +1 -1
  66. package/dist/components/ui/password-input.es.js +13 -13
  67. package/dist/components/ui/password-input.es.js.map +1 -1
  68. package/dist/components/ui/radio-group.es.js +11 -11
  69. package/dist/components/ui/radio-group.es.js.map +1 -1
  70. package/dist/components/ui/search-input.es.js +11 -11
  71. package/dist/components/ui/search-input.es.js.map +1 -1
  72. package/dist/components/ui/select.es.js +31 -49
  73. package/dist/components/ui/select.es.js.map +1 -1
  74. package/dist/components/ui/sheet.es.js +17 -17
  75. package/dist/components/ui/sheet.es.js.map +1 -1
  76. package/dist/components/ui/sidebar.es.js +2 -3
  77. package/dist/components/ui/sidebar.es.js.map +1 -1
  78. package/dist/components/ui/table-page-layout.es.js +2 -2
  79. package/dist/components/ui/table-page-layout.es.js.map +1 -1
  80. package/dist/components/ui/table.es.js +33 -33
  81. package/dist/components/ui/table.es.js.map +1 -1
  82. package/dist/components/ui/tabs.es.js +2 -2
  83. package/dist/components/ui/tabs.es.js.map +1 -1
  84. package/dist/components/ui/tooltip.es.js +8 -8
  85. package/dist/components/ui/tooltip.es.js.map +1 -1
  86. package/dist/index.es.d.ts +20 -48
  87. package/dist/index.es.js +253 -257
  88. package/dist/utils/index.es.js.map +1 -1
  89. package/lib/index.css +25 -6
  90. package/lib/tailwind.preset.css +59 -45
  91. package/lib/tokens.css +0 -9
  92. package/package.json +1 -1
@@ -1,10 +1,9 @@
1
- import { jsxs as p, jsx as r } from "react/jsx-runtime";
2
- import { useRouterState as a, Link as n } from "@tanstack/react-router";
3
- import { RotateCw as f, Plus as g, Pencil as u, Trash as v } from "lucide-react";
1
+ import { jsxs as p, jsx as e } from "react/jsx-runtime";
2
+ import { useRouterState as g, Link as d } from "@tanstack/react-router";
3
+ import { RotateCw as f, Plus as a, Pencil as u, Trash as w } from "lucide-react";
4
4
  import { Button as t } from "../ui/button.es.js";
5
5
  import "../ui/accordion.es.js";
6
6
  import "../ui/avatar.es.js";
7
- import "../ui/badge.es.js";
8
7
  import "../ui/breadcrumb.es.js";
9
8
  import "../ui/calendar.es.js";
10
9
  import "../ui/card.es.js";
@@ -12,7 +11,7 @@ import "../ui/chart.es.js";
12
11
  import "../ui/checkbox.es.js";
13
12
  import "@radix-ui/react-collapsible";
14
13
  import "../ui/command.es.js";
15
- import { useState as w } from "react";
14
+ import { useState as v } from "react";
16
15
  import "../ui/dialog.es.js";
17
16
  import "../ui/drawer.es.js";
18
17
  import "../ui/dropdown-menu.es.js";
@@ -35,44 +34,44 @@ import "sonner";
35
34
  import "../ui/table.es.js";
36
35
  import "../ui/tabs.es.js";
37
36
  import "../ui/tooltip.es.js";
38
- function te({
39
- table: o,
40
- tableActions: e,
41
- stateToPass: c,
42
- handleSearching: l,
43
- dataQuery: i
37
+ function or({
38
+ table: i,
39
+ tableActions: r,
40
+ stateToPass: n,
41
+ handleSearching: h,
42
+ dataQuery: o
44
43
  }) {
45
- const { location: { href: m } = {} } = a(), [h, s] = w("");
46
- return /* @__PURE__ */ p("div", { className: "flex justify-between my-0 py-2 gap-4 overflow-auto", children: [
47
- /* @__PURE__ */ p("div", { className: "flex gap-2", children: [
48
- /* @__PURE__ */ r(
44
+ const { location: { href: m } = {} } = g(), [l, s] = v("");
45
+ return /* @__PURE__ */ p("div", { className: "flex bg-card justify-between my-0 p-4 border-t border-x gap-4 overflow-auto", children: [
46
+ /* @__PURE__ */ p("div", { className: "flex gap-4", children: [
47
+ /* @__PURE__ */ e(
49
48
  t,
50
49
  {
51
- loading: i.isFetching,
50
+ loading: o.isFetching,
52
51
  icon: f,
53
- onClick: () => i.refetch(),
52
+ onClick: () => o.refetch(),
54
53
  variant: "outline"
55
54
  }
56
55
  ),
57
- e.create && o.getSelectedRowModel().rows.length === 0 && /* @__PURE__ */ p(n, { to: `${m}/create`, children: [
58
- /* @__PURE__ */ r(t, { disabled: i.isFetching, icon: g, children: "Create" }),
56
+ r.create && i.getSelectedRowModel().rows.length === 0 && /* @__PURE__ */ p(d, { to: `${m}/create`, children: [
57
+ /* @__PURE__ */ e(t, { disabled: o.isFetching, icon: a, children: "Create" }),
59
58
  " "
60
59
  ] }),
61
- o.getSelectedRowModel().rows.length > 0 && e.update && /* @__PURE__ */ r(n, { to: `${m}/edit`, state: c, children: /* @__PURE__ */ r(t, { disabled: i.isFetching, icon: u, children: "Update" }) }),
62
- o.getSelectedRowModel().rows.length > 0 && (e == null ? void 0 : e.delete) && /* @__PURE__ */ r(n, { to: `${m}/delete`, state: c, children: /* @__PURE__ */ r(t, { disabled: i.isFetching, icon: v, variant: "destructive", children: "Delete" }) })
60
+ i.getSelectedRowModel().rows.length > 0 && r.update && /* @__PURE__ */ e(d, { to: `${m}/edit`, state: n, children: /* @__PURE__ */ e(t, { disabled: o.isFetching, icon: u, children: "Update" }) }),
61
+ i.getSelectedRowModel().rows.length > 0 && (r == null ? void 0 : r.delete) && /* @__PURE__ */ e(d, { to: `${m}/delete`, state: n, children: /* @__PURE__ */ e(t, { disabled: o.isFetching, icon: w, variant: "destructive", children: "Delete" }) })
63
62
  ] }),
64
- (e == null ? void 0 : e.search) && /* @__PURE__ */ r("div", { className: "relative flex gap-1 justify-center items-center", children: /* @__PURE__ */ r(
63
+ (r == null ? void 0 : r.search) && /* @__PURE__ */ e(
65
64
  S,
66
65
  {
67
- value: h,
68
- onChange: (d) => {
69
- s(d), l(d);
66
+ value: l,
67
+ onChange: (c) => {
68
+ s(c), h(c);
70
69
  }
71
70
  }
72
- ) })
71
+ )
73
72
  ] });
74
73
  }
75
74
  export {
76
- te as default
75
+ or as default
77
76
  };
78
77
  //# sourceMappingURL=table-actions.es.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"table-actions.es.js","sources":["../../../lib/components/data-table/table-actions.tsx"],"sourcesContent":["import { Link, useRouterState } from '@tanstack/react-router';\n\nimport { Pencil, Plus, RotateCw, Trash } from 'lucide-react';\n\nimport type { TableActions } from '@/components/data-table/table-utils/index';\nimport { Button } from '@/components/ui/button';\nimport { SearchInput } from '@/index';\nimport type { UseQueryResult } from '@tanstack/react-query';\nimport { Table } from '@tanstack/react-table';\nimport { useState } from 'react';\n\nexport default function Actions<TData>({\n table,\n tableActions,\n stateToPass,\n handleSearching,\n dataQuery,\n}: {\n table: Table<TData>;\n tableActions: TableActions;\n handleSearching: (value: string) => void;\n // TODO:Improve ts\n stateToPass: any;\n dataQuery: UseQueryResult<any, unknown>;\n}) {\n const { location: { href } = {} } = useRouterState();\n const [search, setSearch] = useState<string>('');\n return (\n <div className=\"flex justify-between my-0 py-2 gap-4 overflow-auto\">\n <div className=\"flex gap-2\">\n <Button\n loading={dataQuery.isFetching}\n icon={RotateCw}\n onClick={() => dataQuery.refetch()}\n variant={'outline'}\n />\n {/* //TODO: we can show the create, delete button based on permsission */}\n {/* All the creating routes will be with url /create in host app */}\n {tableActions.create && table.getSelectedRowModel().rows.length === 0 && (\n <Link to={`${href}/create`}>\n <Button disabled={dataQuery.isFetching} icon={Plus}>\n Create\n </Button>{' '}\n </Link>\n )}\n {/* All the updating routes will be with url /edit in host app */}\n {table.getSelectedRowModel().rows.length > 0 && tableActions.update && (\n <Link to={`${href}/edit`} state={stateToPass}>\n <Button disabled={dataQuery.isFetching} icon={Pencil}>\n Update\n </Button>\n </Link>\n )}\n {table.getSelectedRowModel().rows.length > 0 && tableActions?.delete && (\n <Link to={`${href}/delete`} state={stateToPass}>\n <Button disabled={dataQuery.isFetching} icon={Trash} variant={'destructive'}>\n Delete\n </Button>\n </Link>\n )}\n </div>\n {tableActions?.search && (\n <div className=\"relative flex gap-1 justify-center items-center\">\n <SearchInput\n value={search}\n onChange={(e) => {\n setSearch(e);\n handleSearching(e);\n }}\n />\n </div>\n )}\n </div>\n );\n}\n"],"names":["Actions","table","tableActions","stateToPass","handleSearching","dataQuery","href","useRouterState","search","setSearch","useState","jsxs","jsx","Button","RotateCw","Link","Plus","Pencil","Trash","SearchInput","e"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAWA,SAAwBA,GAAe;AAAA,EACrC,OAAAC;AAAA,EACA,cAAAC;AAAA,EACA,aAAAC;AAAA,EACA,iBAAAC;AAAA,EACA,WAAAC;AACF,GAOG;AACK,QAAA,EAAE,UAAU,EAAE,MAAAC,MAAS,CAAC,EAAA,IAAMC,EAAe,GAC7C,CAACC,GAAQC,CAAS,IAAIC,EAAiB,EAAE;AAE7C,SAAA,gBAAAC,EAAC,OAAI,EAAA,WAAU,uDACb,UAAA;AAAA,IAAC,gBAAAA,EAAA,OAAA,EAAI,WAAU,cACb,UAAA;AAAA,MAAA,gBAAAC;AAAA,QAACC;AAAA,QAAA;AAAA,UACC,SAASR,EAAU;AAAA,UACnB,MAAMS;AAAA,UACN,SAAS,MAAMT,EAAU,QAAQ;AAAA,UACjC,SAAS;AAAA,QAAA;AAAA,MACX;AAAA,MAGCH,EAAa,UAAUD,EAAM,oBAAA,EAAsB,KAAK,WAAW,KACjE,gBAAAU,EAAAI,GAAA,EAAK,IAAI,GAAGT,CAAI,WACf,UAAA;AAAA,QAAA,gBAAAM,EAACC,KAAO,UAAUR,EAAU,YAAY,MAAMW,GAAM,UAEpD,UAAA;AAAA,QAAU;AAAA,MAAA,GACZ;AAAA,MAGDf,EAAM,oBAAoB,EAAE,KAAK,SAAS,KAAKC,EAAa,UAC1D,gBAAAU,EAAAG,GAAA,EAAK,IAAI,GAAGT,CAAI,SAAS,OAAOH,GAC/B,UAAA,gBAAAS,EAACC,GAAO,EAAA,UAAUR,EAAU,YAAY,MAAMY,GAAQ,UAAA,SAAA,CAEtD,EACF,CAAA;AAAA,MAEDhB,EAAM,oBAAoB,EAAE,KAAK,SAAS,MAAKC,KAAA,gBAAAA,EAAc,WAC5D,gBAAAU,EAACG,GAAK,EAAA,IAAI,GAAGT,CAAI,WAAW,OAAOH,GACjC,UAAC,gBAAAS,EAAAC,GAAA,EAAO,UAAUR,EAAU,YAAY,MAAMa,GAAO,SAAS,eAAe,UAAA,SAE7E,CAAA,EACF,CAAA;AAAA,IAAA,GAEJ;AAAA,KACChB,KAAA,gBAAAA,EAAc,WACZ,gBAAAU,EAAA,OAAA,EAAI,WAAU,mDACb,UAAA,gBAAAA;AAAA,MAACO;AAAA,MAAA;AAAA,QACC,OAAOX;AAAA,QACP,UAAU,CAACY,MAAM;AACf,UAAAX,EAAUW,CAAC,GACXhB,EAAgBgB,CAAC;AAAA,QAAA;AAAA,MACnB;AAAA,IAAA,EAEJ,CAAA;AAAA,EAAA,GAEJ;AAEJ;"}
1
+ {"version":3,"file":"table-actions.es.js","sources":["../../../lib/components/data-table/table-actions.tsx"],"sourcesContent":["import { Link, useRouterState } from '@tanstack/react-router';\n\nimport { Pencil, Plus, RotateCw, Trash } from 'lucide-react';\n\nimport type { TableActions } from '@/components/data-table/table-utils/index';\nimport { Button } from '@/components/ui/button';\nimport { SearchInput } from '@/index';\nimport type { UseQueryResult } from '@tanstack/react-query';\nimport { Table } from '@tanstack/react-table';\nimport { useState } from 'react';\n\nexport default function Actions<TData>({\n table,\n tableActions,\n stateToPass,\n handleSearching,\n dataQuery,\n}: {\n table: Table<TData>;\n tableActions: TableActions;\n handleSearching: (value: string) => void;\n // TODO:Improve ts\n stateToPass: any;\n dataQuery: UseQueryResult<any, unknown>;\n}) {\n const { location: { href } = {} } = useRouterState();\n const [search, setSearch] = useState<string>('');\n return (\n <div className=\"flex bg-card justify-between my-0 p-4 border-t border-x gap-4 overflow-auto\">\n <div className=\"flex gap-4\">\n <Button\n loading={dataQuery.isFetching}\n icon={RotateCw}\n onClick={() => dataQuery.refetch()}\n variant={'outline'}\n />\n {/* //TODO: we can show the create, delete button based on permsission */}\n {/* All the creating routes will be with url /create in host app */}\n {tableActions.create && table.getSelectedRowModel().rows.length === 0 && (\n <Link to={`${href}/create`}>\n <Button disabled={dataQuery.isFetching} icon={Plus}>\n Create\n </Button>{' '}\n </Link>\n )}\n {/* All the updating routes will be with url /edit in host app */}\n {table.getSelectedRowModel().rows.length > 0 && tableActions.update && (\n <Link to={`${href}/edit`} state={stateToPass}>\n <Button disabled={dataQuery.isFetching} icon={Pencil}>\n Update\n </Button>\n </Link>\n )}\n {table.getSelectedRowModel().rows.length > 0 && tableActions?.delete && (\n <Link to={`${href}/delete`} state={stateToPass}>\n <Button disabled={dataQuery.isFetching} icon={Trash} variant={'destructive'}>\n Delete\n </Button>\n </Link>\n )}\n </div>\n {tableActions?.search && (\n <SearchInput\n value={search}\n onChange={(e) => {\n setSearch(e);\n handleSearching(e);\n }}\n />\n )}\n </div>\n );\n}\n"],"names":["Actions","table","tableActions","stateToPass","handleSearching","dataQuery","href","useRouterState","search","setSearch","useState","jsxs","jsx","Button","RotateCw","Link","Plus","Pencil","Trash","SearchInput","e"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAWA,SAAwBA,GAAe;AAAA,EACrC,OAAAC;AAAA,EACA,cAAAC;AAAA,EACA,aAAAC;AAAA,EACA,iBAAAC;AAAA,EACA,WAAAC;AACF,GAOG;AACK,QAAA,EAAE,UAAU,EAAE,MAAAC,MAAS,CAAC,EAAA,IAAMC,EAAe,GAC7C,CAACC,GAAQC,CAAS,IAAIC,EAAiB,EAAE;AAE7C,SAAA,gBAAAC,EAAC,OAAI,EAAA,WAAU,+EACb,UAAA;AAAA,IAAC,gBAAAA,EAAA,OAAA,EAAI,WAAU,cACb,UAAA;AAAA,MAAA,gBAAAC;AAAA,QAACC;AAAA,QAAA;AAAA,UACC,SAASR,EAAU;AAAA,UACnB,MAAMS;AAAA,UACN,SAAS,MAAMT,EAAU,QAAQ;AAAA,UACjC,SAAS;AAAA,QAAA;AAAA,MACX;AAAA,MAGCH,EAAa,UAAUD,EAAM,oBAAA,EAAsB,KAAK,WAAW,KACjE,gBAAAU,EAAAI,GAAA,EAAK,IAAI,GAAGT,CAAI,WACf,UAAA;AAAA,QAAA,gBAAAM,EAACC,KAAO,UAAUR,EAAU,YAAY,MAAMW,GAAM,UAEpD,UAAA;AAAA,QAAU;AAAA,MAAA,GACZ;AAAA,MAGDf,EAAM,oBAAoB,EAAE,KAAK,SAAS,KAAKC,EAAa,UAC1D,gBAAAU,EAAAG,GAAA,EAAK,IAAI,GAAGT,CAAI,SAAS,OAAOH,GAC/B,UAAA,gBAAAS,EAACC,GAAO,EAAA,UAAUR,EAAU,YAAY,MAAMY,GAAQ,UAAA,SAAA,CAEtD,EACF,CAAA;AAAA,MAEDhB,EAAM,oBAAoB,EAAE,KAAK,SAAS,MAAKC,KAAA,gBAAAA,EAAc,WAC5D,gBAAAU,EAACG,GAAK,EAAA,IAAI,GAAGT,CAAI,WAAW,OAAOH,GACjC,UAAC,gBAAAS,EAAAC,GAAA,EAAO,UAAUR,EAAU,YAAY,MAAMa,GAAO,SAAS,eAAe,UAAA,SAE7E,CAAA,EACF,CAAA;AAAA,IAAA,GAEJ;AAAA,KACChB,KAAA,gBAAAA,EAAc,WACb,gBAAAU;AAAA,MAACO;AAAA,MAAA;AAAA,QACC,OAAOX;AAAA,QACP,UAAU,CAACY,MAAM;AACf,UAAAX,EAAUW,CAAC,GACXhB,EAAgBgB,CAAC;AAAA,QAAA;AAAA,MACnB;AAAA,IAAA;AAAA,EACF,GAEJ;AAEJ;"}
@@ -1,48 +1,54 @@
1
1
  import { jsxs as r, jsx as e, Fragment as m } from "react/jsx-runtime";
2
2
  import { ACTIONS_COLUMN_ID as d } from "./data-table.es.js";
3
- import { Table as h, TableHeader as f, TableRow as c, TableCell as i, TableBody as g, TableFooter as x } from "../ui/table.es.js";
4
- import { flexRender as p } from "@tanstack/react-table";
5
- import { Info as N } from "lucide-react";
6
- function v({
3
+ import { Button as u } from "../ui/button.es.js";
4
+ import { Table as f, TableHeader as h, TableRow as a, TableCell as i, TableBody as x, TableFooter as N } from "../ui/table.es.js";
5
+ import { flexRender as g } from "@tanstack/react-table";
6
+ import { Info as b } from "lucide-react";
7
+ function I({
7
8
  table: s,
8
- columns: u,
9
- dataQuery: n
9
+ columns: p,
10
+ dataQuery: o
10
11
  }) {
11
- var a;
12
- return /* @__PURE__ */ r(h, { className: "relative h-full w-full", children: [
13
- /* @__PURE__ */ e(f, { className: "sticky top-0 z-10", children: s.getHeaderGroups().map((o, l) => /* @__PURE__ */ e(c, { className: "border-b", children: o.headers.map((t) => /* @__PURE__ */ r(
12
+ var c;
13
+ return /* @__PURE__ */ r(f, { className: "size-full", children: [
14
+ /* @__PURE__ */ e(h, { className: "sticky top-0 z-10", children: s.getHeaderGroups().map((n, l) => /* @__PURE__ */ e(a, { children: n.headers.map((t) => /* @__PURE__ */ e(
14
15
  i,
15
16
  {
16
- className: `px-4 py-2 cursor-pointer text-left text-sm font-medium whitespace-nowrap ${t.id === d ? "sticky right-0 z-50" : ""}`,
17
- onClick: t.column.getToggleSortingHandler(),
18
- children: [
19
- t.isPlaceholder ? null : p(t.column.columnDef.header, t.getContext()),
20
- {
17
+ className: `px-4 py-2 text-left text-sm font-medium bg-card whitespace-nowrap ${t.id === d ? "sticky right-0 z-50 text-center" : ""}`,
18
+ children: /* @__PURE__ */ r("span", { className: "inline-flex items-center gap-1", children: [
19
+ t.column.getCanSort() && /* @__PURE__ */ e(u, { size: "xs", variant: "outline", className: "font-mono", onClick: t.column.getToggleSortingHandler(), children: {
21
20
  asc: "↑",
22
21
  desc: "↓"
23
- }[t.column.getIsSorted()] ?? null
24
- ]
22
+ }[t.column.getIsSorted()] ?? "a" }),
23
+ /* @__PURE__ */ e("span", { children: t.isPlaceholder ? null : g(t.column.columnDef.header, t.getContext()) })
24
+ ] })
25
25
  },
26
26
  t.id
27
27
  )) }, l)) }),
28
- /* @__PURE__ */ e(g, { className: "flex-1 overflow-y-auto", children: s.getRowModel().rows.length ? s.getRowModel().rows.map((o) => /* @__PURE__ */ e(c, { "data-state": o.getIsSelected() && "selected", children: o.getVisibleCells().map((l) => /* @__PURE__ */ e(
29
- i,
30
- {
31
- className: `
32
- px-4 py-2 text-left text-sm whitespace-nowrap
33
- ${l.column.id === d ? "sticky right-0 text-center" : ""}
28
+ /* @__PURE__ */ e(x, { className: "flex-1 overflow-y-auto", children: s.getRowModel().rows.length ? (
29
+ // Render table data
30
+ s.getRowModel().rows.map((n) => /* @__PURE__ */ e(a, { className: "transition-colors data-[state=selected]:bg-muted-foreground/30 hover:bg-muted-foreground/20", "data-state": n.getIsSelected() && "selected", children: n.getVisibleCells().map((l) => /* @__PURE__ */ e(
31
+ i,
32
+ {
33
+ className: `
34
+ px-4 py-2 text-left text-sm whitespace-nowrap
35
+ ${l.column.id === d ? "sticky right-0 w-20 bg-card" : ""}
34
36
  `,
35
- children: p(l.column.columnDef.cell, l.getContext())
36
- },
37
- l.id
38
- )) }, o.id)) : /* @__PURE__ */ e(c, { className: "h-[55vh] hover:bg-transparent cursor-not-allowed", children: /* @__PURE__ */ e(i, { colSpan: u.length, className: "border-none", children: /* @__PURE__ */ e("span", { className: "flex gap-3 justify-center items-center", children: !n.isFetching && (n.isError ? /* @__PURE__ */ r(m, { children: [
39
- /* @__PURE__ */ e(N, {}),
40
- " You don't have the required permissions. Please contact your admin."
41
- ] }) : (a = n.data) != null && a.data ? null : /* @__PURE__ */ e(m, { children: "No result found." })) }) }) }) }),
42
- n.isFetching && /* @__PURE__ */ e(x, { className: "absolute inset-0 z-20 flex justify-center items-center bg-card/80" })
37
+ children: g(l.column.columnDef.cell, l.getContext())
38
+ },
39
+ l.id
40
+ )) }, n.id))
41
+ ) : (
42
+ // Empty table
43
+ /* @__PURE__ */ e(a, { className: "cursor-not-allowed", children: /* @__PURE__ */ e(i, { colSpan: p.length, className: "border-none", children: /* @__PURE__ */ e("span", { className: "flex gap-3 justify-center items-center", children: !o.isFetching && (o.isError ? /* @__PURE__ */ r(m, { children: [
44
+ /* @__PURE__ */ e(b, {}),
45
+ " You don't have the required permissions. Please contact your admin."
46
+ ] }) : (c = o.data) != null && c.data ? null : /* @__PURE__ */ e(m, { children: "No result found." })) }) }) })
47
+ ) }),
48
+ o.isFetching && /* @__PURE__ */ e(N, { className: "absolute inset-0 z-20 flex justify-center items-center bg-card/80" })
43
49
  ] });
44
50
  }
45
51
  export {
46
- v as TableContent
52
+ I as TableContent
47
53
  };
48
54
  //# sourceMappingURL=table-content.es.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"table-content.es.js","sources":["../../../lib/components/data-table/table-content.tsx"],"sourcesContent":["import { ACTIONS_COLUMN_ID } from '@/components/data-table/data-table';\nimport {\n Table as CxTable,\n TableBody,\n TableCell,\n TableFooter,\n TableHeader,\n TableRow,\n} from '@/components/ui/table';\nimport type { UseQueryResult } from '@tanstack/react-query';\nimport { ColumnDef, Table, flexRender } from '@tanstack/react-table';\nimport { Info } from 'lucide-react';\n\nexport function TableContent<TData, TValue>({\n table,\n columns,\n dataQuery,\n}: {\n table: Table<TData>;\n columns: ColumnDef<TData, TValue>[];\n dataQuery: UseQueryResult<any, unknown>;\n}) {\n return (\n <CxTable className=\"relative h-full w-full\">\n <TableHeader className=\"sticky top-0 z-10\">\n {table.getHeaderGroups().map((headerGroup, index) => (\n <TableRow key={index} className=\"border-b\">\n {headerGroup.headers.map((header) => (\n <TableCell\n key={header.id}\n className={`px-4 py-2 cursor-pointer text-left text-sm font-medium whitespace-nowrap ${header.id === ACTIONS_COLUMN_ID ? 'sticky right-0 z-50' : ''}`}\n onClick={header.column.getToggleSortingHandler()}\n >\n {header.isPlaceholder\n ? null\n : flexRender(header.column.columnDef.header, header.getContext())}\n {{\n asc: '↑',\n desc: '↓',\n }[header.column.getIsSorted() as string] ?? null}\n </TableCell>\n ))}\n </TableRow>\n ))}\n </TableHeader>\n <TableBody className=\"flex-1 overflow-y-auto\">\n {table.getRowModel().rows.length ? (\n table.getRowModel().rows.map((row) => (\n <TableRow key={row.id} data-state={row.getIsSelected() && 'selected'}>\n {row.getVisibleCells().map((cell) => (\n <TableCell\n key={cell.id}\n className={`\n px-4 py-2 text-left text-sm whitespace-nowrap \n ${cell.column.id === ACTIONS_COLUMN_ID\n ? 'sticky right-0 text-center'\n : ''\n }\n `}\n >\n {flexRender(cell.column.columnDef.cell, cell.getContext())}\n </TableCell>\n ))}\n </TableRow>\n ))\n ) : (\n <TableRow className=\"h-[55vh] hover:bg-transparent cursor-not-allowed\">\n <TableCell colSpan={columns.length} className=\"border-none\">\n <span className=\"flex gap-3 justify-center items-center\">\n {!dataQuery.isFetching && (\n dataQuery.isError ? (\n <>\n <Info /> You don't have the required permissions. Please contact your admin.\n </>\n ) : !dataQuery.data?.data ? (\n <>No result found.</>\n ) : null\n )}\n </span>\n </TableCell>\n </TableRow>\n\n )}\n </TableBody>\n {/* Loader positioned to cover entire table viewport */}\n {dataQuery.isFetching && (\n <TableFooter className=\"absolute inset-0 z-20 flex justify-center items-center bg-card/80\" />\n )}\n </CxTable>\n );\n}\n"],"names":["TableContent","table","columns","dataQuery","jsxs","CxTable","jsx","TableHeader","headerGroup","index","TableRow","header","TableCell","ACTIONS_COLUMN_ID","flexRender","TableBody","row","cell","Fragment","Info","_a","TableFooter"],"mappings":";;;;;AAaO,SAASA,EAA4B;AAAA,EAC1C,OAAAC;AAAA,EACA,SAAAC;AAAA,EACA,WAAAC;AACF,GAIG;;AAEC,SAAA,gBAAAC,EAACC,GAAQ,EAAA,WAAU,0BACjB,UAAA;AAAA,IAAA,gBAAAC,EAACC,KAAY,WAAU,qBACpB,YAAM,gBAAgB,EAAE,IAAI,CAACC,GAAaC,MACzC,gBAAAH,EAACI,KAAqB,WAAU,YAC7B,YAAY,QAAQ,IAAI,CAACC,MACxB,gBAAAP;AAAA,MAACQ;AAAA,MAAA;AAAA,QAEC,WAAW,4EAA4ED,EAAO,OAAOE,IAAoB,wBAAwB,EAAE;AAAA,QACnJ,SAASF,EAAO,OAAO,wBAAwB;AAAA,QAE9C,UAAA;AAAA,UAAOA,EAAA,gBACJ,OACAG,EAAWH,EAAO,OAAO,UAAU,QAAQA,EAAO,YAAY;AAAA,UACjE;AAAA,YACC,KAAK;AAAA,YACL,MAAM;AAAA,UACN,EAAAA,EAAO,OAAO,YAAA,CAAuB,KAAK;AAAA,QAAA;AAAA,MAAA;AAAA,MAVvCA,EAAO;AAAA,IAAA,CAYf,EAAA,GAfYF,CAgBf,CACD,GACH;AAAA,IACC,gBAAAH,EAAAS,GAAA,EAAU,WAAU,0BAClB,UAAMd,EAAA,YAAA,EAAc,KAAK,SACxBA,EAAM,YAAY,EAAE,KAAK,IAAI,CAACe,MAC3B,gBAAAV,EAAAI,GAAA,EAAsB,cAAYM,EAAI,cAAc,KAAK,YACvD,UAAAA,EAAI,gBAAgB,EAAE,IAAI,CAACC,MAC1B,gBAAAX;AAAA,MAACM;AAAA,MAAA;AAAA,QAEC,WAAW;AAAA;AAAA,sBAEPK,EAAK,OAAO,OAAOJ,IACjB,+BACA,EACJ;AAAA;AAAA,QAGD,YAAWI,EAAK,OAAO,UAAU,MAAMA,EAAK,WAAY,CAAA;AAAA,MAAA;AAAA,MATpDA,EAAK;AAAA,IAAA,CAWb,EAdY,GAAAD,EAAI,EAenB,CACD,IAED,gBAAAV,EAACI,GAAS,EAAA,WAAU,oDAClB,UAAA,gBAAAJ,EAACM,GAAU,EAAA,SAASV,EAAQ,QAAQ,WAAU,eAC5C,UAAA,gBAAAI,EAAC,QAAK,EAAA,WAAU,0CACb,UAAA,CAACH,EAAU,eACVA,EAAU,UAEN,gBAAAC,EAAAc,GAAA,EAAA,UAAA;AAAA,MAAA,gBAAAZ,EAACa,GAAK,EAAA;AAAA,MAAE;AAAA,IAAA,EACV,CAAA,KACGC,IAAAjB,EAAU,SAAV,QAAAiB,EAAgB,OAEjB,OADA,gBAAAd,EAAAY,GAAA,EAAA,UAAA,mBAAA,CAAgB,GAGxB,CAAA,EACF,CAAA,EACF,CAAA,GAGJ;AAAA,IAECf,EAAU,cACR,gBAAAG,EAAAe,GAAA,EAAY,WAAU,oEAAoE,CAAA;AAAA,EAAA,GAE/F;AAEJ;"}
1
+ {"version":3,"file":"table-content.es.js","sources":["../../../lib/components/data-table/table-content.tsx"],"sourcesContent":["import { ACTIONS_COLUMN_ID } from '@/components/data-table/data-table';\nimport { Button } from '@/components/ui/button';\nimport {\n TableBody,\n TableCell,\n Table as TableComponent,\n TableFooter,\n TableHeader,\n TableRow,\n} from '@/components/ui/table';\nimport type { UseQueryResult } from '@tanstack/react-query';\nimport { ColumnDef, Table, flexRender } from '@tanstack/react-table';\nimport { Info } from 'lucide-react';\n\nexport function TableContent<TData, TValue>({\n table,\n columns,\n dataQuery,\n}: {\n table: Table<TData>;\n columns: ColumnDef<TData, TValue>[];\n dataQuery: UseQueryResult<any, unknown>;\n}) {\n return (\n <TableComponent className=\"size-full\">\n <TableHeader className=\"sticky top-0 z-10\">\n {table.getHeaderGroups().map((headerGroup, index) => (\n <TableRow key={index}>\n {headerGroup.headers.map((header) => (\n <TableCell\n key={header.id}\n className={`px-4 py-2 text-left text-sm font-medium bg-card whitespace-nowrap ${header.id === ACTIONS_COLUMN_ID ? 'sticky right-0 z-50 text-center' : ''}`}\n >\n <span className='inline-flex items-center gap-1'>\n {/* Sorting button / Indicator */}\n {header.column.getCanSort() &&\n <Button size=\"xs\" variant='outline' className='font-mono' onClick={header.column.getToggleSortingHandler()}>{{\n asc: '↑',\n desc: '↓',\n }[header.column.getIsSorted() as string] ?? \"a\"}</Button>\n }\n {/* Header text */}\n <span>\n {header.isPlaceholder\n ? null\n : flexRender(header.column.columnDef.header, header.getContext())}\n </span>\n </span>\n </TableCell>\n ))}\n </TableRow>\n ))}\n </TableHeader>\n <TableBody className=\"flex-1 overflow-y-auto\">\n {table.getRowModel().rows.length ?\n // Render table data\n (\n table.getRowModel().rows.map((row) => (\n <TableRow className='transition-colors data-[state=selected]:bg-muted-foreground/30 hover:bg-muted-foreground/20' key={row.id} data-state={row.getIsSelected() && 'selected'}>\n {row.getVisibleCells().map((cell) => (\n <TableCell\n key={cell.id}\n className={`\n px-4 py-2 text-left text-sm whitespace-nowrap\n ${cell.column.id === ACTIONS_COLUMN_ID\n ? 'sticky right-0 w-20 bg-card'\n : ''\n }\n `}\n >\n {flexRender(cell.column.columnDef.cell, cell.getContext())}\n </TableCell>\n ))}\n </TableRow>\n ))\n )\n :\n // Empty table\n (\n <TableRow className=\"cursor-not-allowed\">\n <TableCell colSpan={columns.length} className=\"border-none\">\n <span className=\"flex gap-3 justify-center items-center\">\n {!dataQuery.isFetching && (\n dataQuery.isError ? (\n <>\n <Info /> You don't have the required permissions. Please contact your admin.\n </>\n ) : !dataQuery.data?.data ? (\n <>No result found.</>\n ) : null\n )}\n </span>\n </TableCell>\n </TableRow>\n )}\n </TableBody>\n {/* Loader positioned to cover entire table viewport */}\n {dataQuery.isFetching && (\n <TableFooter className=\"absolute inset-0 z-20 flex justify-center items-center bg-card/80\" />\n )}\n </TableComponent>\n );\n}\n"],"names":["TableContent","table","columns","dataQuery","jsxs","TableComponent","jsx","TableHeader","headerGroup","index","TableRow","header","TableCell","ACTIONS_COLUMN_ID","Button","flexRender","TableBody","row","cell","Fragment","Info","_a","TableFooter"],"mappings":";;;;;;AAcO,SAASA,EAA4B;AAAA,EAC1C,OAAAC;AAAA,EACA,SAAAC;AAAA,EACA,WAAAC;AACF,GAIG;;AAEC,SAAA,gBAAAC,EAACC,GAAe,EAAA,WAAU,aACxB,UAAA;AAAA,IAAA,gBAAAC,EAACC,KAAY,WAAU,qBACpB,UAAMN,EAAA,kBAAkB,IAAI,CAACO,GAAaC,wBACxCC,GACE,EAAA,UAAAF,EAAY,QAAQ,IAAI,CAACG,MACxB,gBAAAL;AAAA,MAACM;AAAA,MAAA;AAAA,QAEC,WAAW,qEAAqED,EAAO,OAAOE,IAAoB,oCAAoC,EAAE;AAAA,QAExJ,UAAA,gBAAAT,EAAC,QAAK,EAAA,WAAU,kCAEb,UAAA;AAAA,UAAAO,EAAO,OAAO,WACb,KAAA,gBAAAL,EAACQ,KAAO,MAAK,MAAK,SAAQ,WAAU,WAAU,aAAY,SAASH,EAAO,OAAO,wBAA4B,GAAA,UAAA;AAAA,YAC3G,KAAK;AAAA,YACL,MAAM;AAAA,YACNA,EAAO,OAAO,YAAY,CAAW,KAAK,IAAI,CAAA;AAAA,UAGjD,gBAAAL,EAAA,QAAA,EACE,UAAOK,EAAA,gBACJ,OACAI,EAAWJ,EAAO,OAAO,UAAU,QAAQA,EAAO,WAAY,CAAA,EACpE,CAAA;AAAA,QAAA,EACF,CAAA;AAAA,MAAA;AAAA,MAjBKA,EAAO;AAAA,IAAA,CAmBf,EAAA,GAtBYF,CAuBf,CACD,GACH;AAAA,sBACCO,GAAU,EAAA,WAAU,0BAClB,UAAMf,EAAA,cAAc,KAAK;AAAA;AAAA,MAGtBA,EAAM,cAAc,KAAK,IAAI,CAACgB,wBAC3BP,GAAS,EAAA,WAAU,+FAA2G,cAAYO,EAAI,mBAAmB,YAC/J,YAAI,kBAAkB,IAAI,CAACC,MAC1B,gBAAAZ;AAAA,QAACM;AAAA,QAAA;AAAA,UAEC,WAAW;AAAA;AAAA,sBAETM,EAAK,OAAO,OAAOL,IACf,gCACA,EACJ;AAAA;AAAA,UAGD,YAAWK,EAAK,OAAO,UAAU,MAAMA,EAAK,WAAY,CAAA;AAAA,QAAA;AAAA,QATpDA,EAAK;AAAA,MAAA,CAWb,EAAA,GAdoHD,EAAI,EAe3H,CACD;AAAA;AAAA;AAAA,MAKD,gBAAAX,EAACI,KAAS,WAAU,sBAClB,4BAACE,GAAU,EAAA,SAASV,EAAQ,QAAQ,WAAU,eAC5C,UAAC,gBAAAI,EAAA,QAAA,EAAK,WAAU,0CACb,UAAA,CAACH,EAAU,eACVA,EAAU,UAEN,gBAAAC,EAAAe,GAAA,EAAA,UAAA;AAAA,QAAA,gBAAAb,EAACc,GAAK,EAAA;AAAA,QAAE;AAAA,MACV,EAAA,CAAA,KACGC,IAAAlB,EAAU,SAAV,QAAAkB,EAAgB,OAEjB,8BADA,UAAgB,mBAAA,CAAA,GAGxB,CAAA,EACF,CAAA,EACF,CAAA;AAAA,OAEN;AAAA,IAEClB,EAAU,cACR,gBAAAG,EAAAgB,GAAA,EAAY,WAAU,oEAAoE,CAAA;AAAA,EAAA,GAE/F;AAEJ;"}
@@ -2,27 +2,27 @@ import { jsxs as n, jsx as e, Fragment as M } from "react/jsx-runtime";
2
2
  import { Badge as $ } from "../ui/badge.es.js";
3
3
  import { Button as F } from "../ui/button.es.js";
4
4
  import { Calendar as q } from "../ui/calendar.es.js";
5
- import { Form as B, FormField as s, FormItem as m, FormLabel as u, FormControl as h, FormMessage as p } from "../ui/form.es.js";
5
+ import { Form as B, FormField as m, FormItem as s, FormLabel as u, FormControl as h, FormMessage as p } from "../ui/form.es.js";
6
6
  import { Input as P } from "../ui/input.es.js";
7
- import { Popover as f, PopoverTrigger as R, PopoverContent as b } from "../ui/popover.es.js";
8
- import { Select as N, SelectTrigger as S, SelectValue as y, SelectContent as w, SelectItem as v } from "../ui/select.es.js";
7
+ import { Popover as R, PopoverTrigger as b, PopoverContent as f } from "../ui/popover.es.js";
8
+ import { Select as N, SelectTrigger as S, SelectValue as y, SelectContent as w, SelectItem as g } from "../ui/select.es.js";
9
9
  import { cn as k } from "../../utils/index.es.js";
10
10
  import { zodResolver as U } from "@hookform/resolvers/zod";
11
11
  import { format as X } from "date-fns";
12
12
  import { X as Y, FilterIcon as G } from "lucide-react";
13
13
  import { useState as T } from "react";
14
14
  import { useForm as H } from "react-hook-form";
15
- import g from "zod";
15
+ import v from "zod";
16
16
  import { getResourceDisplayName as E, COMPARISON_OPERATOR_LABELS as j, OPERATORS_FOR_FILTER_TYPE as J, FILTER_COMPARISON_OPERATORS as K } from "./table-utils/constants.es.js";
17
- const Q = g.object({
17
+ const Q = v.object({
18
18
  // For identifing a filter for updation and deletion
19
- id: g.string().min(1, "Field is required"),
20
- property: g.string().min(1, "Field is required."),
21
- operator: g.enum(K, {
19
+ id: v.string().min(1, "Field is required"),
20
+ property: v.string().min(1, "Field is required."),
21
+ operator: v.enum(K, {
22
22
  errorMap: () => ({ message: "Invalid comparison operator" })
23
23
  }),
24
- value: g.string().min(1, "Field is required.")
25
- }), ve = ({
24
+ value: v.string().min(1, "Field is required.")
25
+ }), ge = ({
26
26
  filterableProperties: t,
27
27
  filters: c,
28
28
  onFiltersChange: a
@@ -54,11 +54,11 @@ const Q = g.object({
54
54
  };
55
55
  return /* @__PURE__ */ e(B, { ...l, children: /* @__PURE__ */ n("form", { onSubmit: l.handleSubmit(V), className: "flex flex-col gap-2 min-w-60", children: [
56
56
  /* @__PURE__ */ e(
57
- s,
57
+ m,
58
58
  {
59
59
  control: l.control,
60
60
  name: "property",
61
- render: ({ field: d }) => /* @__PURE__ */ n(m, { children: [
61
+ render: ({ field: d }) => /* @__PURE__ */ n(s, { children: [
62
62
  /* @__PURE__ */ e(u, { children: "Property" }),
63
63
  /* @__PURE__ */ n(
64
64
  N,
@@ -68,7 +68,7 @@ const Q = g.object({
68
68
  disabled: !!r,
69
69
  children: [
70
70
  /* @__PURE__ */ e(h, { children: /* @__PURE__ */ e(S, { children: /* @__PURE__ */ e(y, {}) }) }),
71
- /* @__PURE__ */ e(w, { autoFocus: !0, children: Object.entries(t).map(([o]) => /* @__PURE__ */ e(v, { value: o, children: E(o, "admin-portal") }, o)) })
71
+ /* @__PURE__ */ e(w, { autoFocus: !0, children: Object.entries(t).map(([o]) => /* @__PURE__ */ e(g, { value: o, children: E(o, "admin-portal") }, o)) })
72
72
  ]
73
73
  }
74
74
  ),
@@ -78,16 +78,16 @@ const Q = g.object({
78
78
  ),
79
79
  i && /* @__PURE__ */ n(M, { children: [
80
80
  /* @__PURE__ */ e(
81
- s,
81
+ m,
82
82
  {
83
83
  control: l.control,
84
84
  name: "operator",
85
- render: ({ field: d }) => /* @__PURE__ */ n(m, { children: [
85
+ render: ({ field: d }) => /* @__PURE__ */ n(s, { children: [
86
86
  /* @__PURE__ */ e(u, { children: "Comparison" }),
87
87
  /* @__PURE__ */ n(N, { onValueChange: d.onChange, defaultValue: d.value, children: [
88
88
  /* @__PURE__ */ e(h, { children: /* @__PURE__ */ e(S, { children: /* @__PURE__ */ e(y, {}) }) }),
89
89
  /* @__PURE__ */ e(w, { children: t[i] && J[t[i]].map(
90
- (o) => /* @__PURE__ */ e(v, { value: o, children: j[o] }, o)
90
+ (o) => /* @__PURE__ */ e(g, { value: o, children: j[o] }, o)
91
91
  ) })
92
92
  ] }),
93
93
  /* @__PURE__ */ e(p, {})
@@ -114,23 +114,21 @@ const Q = g.object({
114
114
  /* @__PURE__ */ e("div", { className: "flex flex-wrap gap-2 items-center", children: c.map((r, l) => /* @__PURE__ */ n("div", { className: "flex items-center gap-2", children: [
115
115
  /* @__PURE__ */ n("div", { className: "flex items-center", children: [
116
116
  /* @__PURE__ */ n(
117
- f,
117
+ R,
118
118
  {
119
119
  open: x === r.id,
120
120
  onOpenChange: (i) => {
121
121
  i || C(null);
122
122
  },
123
123
  children: [
124
- /* @__PURE__ */ e(R, { children: /* @__PURE__ */ e(
124
+ /* @__PURE__ */ e(b, { children: /* @__PURE__ */ e(
125
125
  $,
126
126
  {
127
127
  onClick: () => C(r.id),
128
- variant: "default",
129
- className: "cursor-pointer h-7",
130
128
  children: L(r)
131
129
  }
132
130
  ) }),
133
- /* @__PURE__ */ e(b, { className: "w-auto", align: "start", children: /* @__PURE__ */ e(A, { filter: r }) })
131
+ /* @__PURE__ */ e(f, { className: "w-auto", align: "start", children: /* @__PURE__ */ e(A, { filter: r }) })
134
132
  ]
135
133
  }
136
134
  ),
@@ -139,8 +137,7 @@ const Q = g.object({
139
137
  {
140
138
  icon: Y,
141
139
  variant: "destructive",
142
- className: "h-7 -ml-0.5",
143
- size: "icon",
140
+ size: "sm",
144
141
  onClick: () => _(r.id)
145
142
  }
146
143
  )
@@ -148,26 +145,26 @@ const Q = g.object({
148
145
  l < c.length - 1 && /* @__PURE__ */ e("span", { className: "text-sm text-muted-foreground", children: "and" })
149
146
  ] }, r.id)) })
150
147
  ] }) }),
151
- /* @__PURE__ */ n(f, { open: z, onOpenChange: O, children: [
152
- /* @__PURE__ */ e(R, { asChild: !0, children: /* @__PURE__ */ e(F, { icon: G, variant: "outline" }) }),
153
- /* @__PURE__ */ e(b, { className: "w-auto p-4", align: "start", children: /* @__PURE__ */ e(A, {}) })
148
+ /* @__PURE__ */ n(R, { open: z, onOpenChange: O, children: [
149
+ /* @__PURE__ */ e(b, { asChild: !0, children: /* @__PURE__ */ e(F, { icon: G, variant: "outline" }) }),
150
+ /* @__PURE__ */ e(f, { className: "w-auto p-4", align: "start", children: /* @__PURE__ */ e(A, {}) })
154
151
  ] })
155
152
  ] });
156
153
  }, W = ({ control: t, propertyType: c }) => {
157
154
  switch (c) {
158
155
  case "boolean":
159
156
  return /* @__PURE__ */ e(
160
- s,
157
+ m,
161
158
  {
162
159
  control: t,
163
160
  name: "value",
164
- render: ({ field: a }) => /* @__PURE__ */ n(m, { children: [
161
+ render: ({ field: a }) => /* @__PURE__ */ n(s, { children: [
165
162
  /* @__PURE__ */ e(u, { children: "Value" }),
166
163
  /* @__PURE__ */ n(N, { onValueChange: a.onChange, defaultValue: a.value, children: [
167
164
  /* @__PURE__ */ e(h, { children: /* @__PURE__ */ e(S, { children: /* @__PURE__ */ e(y, {}) }) }),
168
165
  /* @__PURE__ */ n(w, { children: [
169
- /* @__PURE__ */ e(v, { value: "true", children: "True" }),
170
- /* @__PURE__ */ e(v, { value: "false", children: "False" })
166
+ /* @__PURE__ */ e(g, { value: "true", children: "True" }),
167
+ /* @__PURE__ */ e(g, { value: "false", children: "False" })
171
168
  ] })
172
169
  ] }),
173
170
  /* @__PURE__ */ e(p, {})
@@ -176,14 +173,14 @@ const Q = g.object({
176
173
  );
177
174
  case "objectDate":
178
175
  return /* @__PURE__ */ e(
179
- s,
176
+ m,
180
177
  {
181
178
  control: t,
182
179
  name: "value",
183
- render: ({ field: a }) => /* @__PURE__ */ n(m, { className: "flex flex-col", children: [
180
+ render: ({ field: a }) => /* @__PURE__ */ n(s, { className: "flex flex-col", children: [
184
181
  /* @__PURE__ */ e(u, { children: "Value" }),
185
- /* @__PURE__ */ n(f, { children: [
186
- /* @__PURE__ */ e(R, { asChild: !0, children: /* @__PURE__ */ e(h, { children: /* @__PURE__ */ e(
182
+ /* @__PURE__ */ n(R, { children: [
183
+ /* @__PURE__ */ e(b, { asChild: !0, children: /* @__PURE__ */ e(h, { children: /* @__PURE__ */ e(
187
184
  F,
188
185
  {
189
186
  variant: "outline",
@@ -194,7 +191,7 @@ const Q = g.object({
194
191
  children: a.value ? X(new Date(a.value), "PPP") : /* @__PURE__ */ e("span", { children: "Pick a date" })
195
192
  }
196
193
  ) }) }),
197
- /* @__PURE__ */ e(b, { className: "w-auto p-0", align: "start", children: /* @__PURE__ */ e(
194
+ /* @__PURE__ */ e(f, { className: "w-auto p-0", align: "start", children: /* @__PURE__ */ e(
198
195
  q,
199
196
  {
200
197
  mode: "single",
@@ -212,18 +209,18 @@ const Q = g.object({
212
209
  );
213
210
  case "role":
214
211
  return /* @__PURE__ */ e(
215
- s,
212
+ m,
216
213
  {
217
214
  control: t,
218
215
  name: "value",
219
- render: ({ field: a }) => /* @__PURE__ */ n(m, { children: [
216
+ render: ({ field: a }) => /* @__PURE__ */ n(s, { children: [
220
217
  /* @__PURE__ */ e(u, { children: "Value" }),
221
218
  /* @__PURE__ */ n(N, { onValueChange: a.onChange, defaultValue: a.value, children: [
222
219
  /* @__PURE__ */ e(h, { children: /* @__PURE__ */ e(S, { children: /* @__PURE__ */ e(y, {}) }) }),
223
220
  /* @__PURE__ */ n(w, { children: [
224
- /* @__PURE__ */ e(v, { value: "user", children: "User" }),
225
- /* @__PURE__ */ e(v, { value: "organization-admin", children: "Organization Admin" }),
226
- /* @__PURE__ */ e(v, { value: "reseller-admin", children: "Reseller Admin" })
221
+ /* @__PURE__ */ e(g, { value: "user", children: "User" }),
222
+ /* @__PURE__ */ e(g, { value: "organization-admin", children: "Organization Admin" }),
223
+ /* @__PURE__ */ e(g, { value: "reseller-admin", children: "Reseller Admin" })
227
224
  ] })
228
225
  ] }),
229
226
  /* @__PURE__ */ e(p, {})
@@ -232,11 +229,11 @@ const Q = g.object({
232
229
  );
233
230
  case "number":
234
231
  return /* @__PURE__ */ e(
235
- s,
232
+ m,
236
233
  {
237
234
  control: t,
238
235
  name: "value",
239
- render: ({ field: a }) => /* @__PURE__ */ n(m, { children: [
236
+ render: ({ field: a }) => /* @__PURE__ */ n(s, { children: [
240
237
  /* @__PURE__ */ e(u, { children: "Value" }),
241
238
  /* @__PURE__ */ e(h, { children: /* @__PURE__ */ e(P, { ...a, type: "number" }) }),
242
239
  /* @__PURE__ */ e(p, {})
@@ -245,11 +242,11 @@ const Q = g.object({
245
242
  );
246
243
  default:
247
244
  return /* @__PURE__ */ e(
248
- s,
245
+ m,
249
246
  {
250
247
  control: t,
251
248
  name: "value",
252
- render: ({ field: a }) => /* @__PURE__ */ n(m, { children: [
249
+ render: ({ field: a }) => /* @__PURE__ */ n(s, { children: [
253
250
  /* @__PURE__ */ e(u, { children: "Value" }),
254
251
  /* @__PURE__ */ e(h, { children: /* @__PURE__ */ e(P, { ...a, type: "text" }) }),
255
252
  /* @__PURE__ */ e(p, {})
@@ -259,6 +256,6 @@ const Q = g.object({
259
256
  }
260
257
  };
261
258
  export {
262
- ve as TableFilter
259
+ ge as TableFilter
263
260
  };
264
261
  //# sourceMappingURL=table-filter.es.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"table-filter.es.js","sources":["../../../lib/components/data-table/table-filter.tsx"],"sourcesContent":["import {\n COMPARISON_OPERATOR_LABELS,\n FILTER_COMPARISON_OPERATORS,\n getResourceDisplayName,\n OPERATORS_FOR_FILTER_TYPE,\n type FilterableProperties,\n type FilterablePropertyType,\n} from '@/components/data-table/table-utils';\nimport { Badge } from '@/components/ui/badge';\nimport { Button } from '@/components/ui/button';\nimport { Calendar } from '@/components/ui/calendar';\nimport {\n Form,\n FormControl,\n FormField,\n FormItem,\n FormLabel,\n FormMessage,\n} from '@/components/ui/form';\nimport { Input } from '@/components/ui/input';\nimport { Popover, PopoverContent, PopoverTrigger } from '@/components/ui/popover';\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from '@/components/ui/select';\nimport { cn } from '@/utils';\nimport { zodResolver } from '@hookform/resolvers/zod';\nimport { format } from 'date-fns';\nimport { FilterIcon, X } from 'lucide-react';\nimport { useState } from 'react';\nimport { useForm } from 'react-hook-form';\nimport z from 'zod';\nconst filterSchema = z.object({\n // For identifing a filter for updation and deletion\n id: z.string().min(1, 'Field is required'),\n property: z.string().min(1, 'Field is required.'),\n operator: z.enum(FILTER_COMPARISON_OPERATORS, {\n errorMap: () => ({ message: 'Invalid comparison operator' }),\n }),\n value: z.string().min(1, 'Field is required.'),\n});\nexport type FilterFormType = z.infer<typeof filterSchema>;\n\ninterface TableFilterProps {\n filterableProperties: FilterableProperties<any>;\n filters: FilterFormType[];\n onFiltersChange: (filters: FilterFormType[]) => void;\n}\n\nexport const TableFilter = ({\n filterableProperties,\n filters,\n onFiltersChange,\n}: TableFilterProps) => {\n const [editingFilter, setEditingFilter] = useState<string | null>(null);\n const [isAddingFilter, setIsAddingFilter] = useState(false);\n const getFilterLabel = (filter: FilterFormType): string => {\n const property = getResourceDisplayName(filter.property, 'admin-portal');\n const operatorLabel = COMPARISON_OPERATOR_LABELS[filter.operator];\n const value = filter.value;\n return `${property} ${operatorLabel} ${value}`;\n };\n\n const removeFilter = (id: string) => {\n onFiltersChange(filters.filter((filter) => filter.id !== id));\n };\n\n interface FilterFormProps {\n filter?: FilterFormType;\n }\n const FilterForm = ({ filter }: FilterFormProps) => {\n const form = useForm<FilterFormType>({\n resolver: zodResolver(filterSchema),\n defaultValues: {\n property: filter?.property || '',\n // TODO: Add dynamic default operator as per property type\n operator: filter?.operator || 'eq',\n value: filter?.value || '',\n id: filter?.id || `filter-${Date.now()}-${Math.random().toString(36)}`,\n },\n mode: 'all',\n });\n\n const watchProperty = form.watch('property');\n const handleSubmit = (values: FilterFormType) => {\n const newFilter: FilterFormType = {\n ...values,\n operator: values.operator,\n };\n\n if (filter) {\n // Update existing filter\n onFiltersChange(filters.map((f) => (f.id === filter.id ? newFilter : f)));\n setEditingFilter(null);\n } else {\n // Add new filter\n onFiltersChange([...filters, newFilter]);\n setIsAddingFilter(false);\n }\n };\n\n const handleClose = () => {\n if (filter) {\n setEditingFilter(null);\n } else {\n setIsAddingFilter(false);\n }\n };\n\n return (\n <Form {...form}>\n <form onSubmit={form.handleSubmit(handleSubmit)} className=\"flex flex-col gap-2 min-w-60\">\n <FormField\n control={form.control}\n name=\"property\"\n render={({ field }) => (\n <FormItem>\n <FormLabel>Property</FormLabel>\n <Select\n onValueChange={field.onChange}\n defaultValue={field.value}\n disabled={!!filter}\n >\n <FormControl>\n <SelectTrigger>\n <SelectValue />\n </SelectTrigger>\n </FormControl>\n <SelectContent autoFocus>\n {Object.entries(filterableProperties).map(([key]) => (\n <SelectItem key={key} value={key}>\n {getResourceDisplayName(key, 'admin-portal')}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n <FormMessage />\n </FormItem>\n )}\n />\n\n {watchProperty && (\n <>\n <FormField\n control={form.control}\n name=\"operator\"\n render={({ field }) => (\n <FormItem>\n <FormLabel>Comparison</FormLabel>\n <Select onValueChange={field.onChange} defaultValue={field.value}>\n <FormControl>\n <SelectTrigger>\n <SelectValue />\n </SelectTrigger>\n </FormControl>\n <SelectContent>\n {filterableProperties[watchProperty] &&\n OPERATORS_FOR_FILTER_TYPE[filterableProperties[watchProperty]].map(\n (op) => (\n <SelectItem key={op} value={op}>\n {COMPARISON_OPERATOR_LABELS[op]}\n </SelectItem>\n ),\n )}\n </SelectContent>\n </Select>\n <FormMessage />\n </FormItem>\n )}\n />\n {filterableProperties[watchProperty] && (\n <ValueField\n control={form.control}\n propertyType={filterableProperties[watchProperty]}\n />\n )}\n </>\n )}\n\n <div className=\"flex justify-end gap-2\">\n <Button type=\"button\" variant=\"outline\" size=\"sm\" onClick={handleClose}>\n Cancel\n </Button>\n <Button type=\"submit\" size=\"sm\">\n Apply Filter\n </Button>\n </div>\n </form>\n </Form>\n );\n };\n\n return (\n <div className=\"flex items-center py-2 justify-between gap-4\">\n <div className=\"flex flex-wrap gap-2 items-center\">\n {filters.length === 0 ? (\n <p className=\"text-sm text-muted-foreground\">\n No filters active. Add a filter to refine the results.\n </p>\n ) : (\n <div className=\"flex flex-wrap gap-2 items-center\">\n <p className=\"text-sm text-muted-foreground\">Active Filters:</p>\n <div className=\"flex flex-wrap gap-2 items-center\">\n {filters.map((filter, index) => {\n return (\n <div key={filter.id} className=\"flex items-center gap-2\">\n <div className=\"flex items-center\">\n <Popover\n open={editingFilter === filter.id}\n onOpenChange={(open) => {\n if (!open) setEditingFilter(null);\n }}\n >\n <PopoverTrigger>\n <Badge\n onClick={() => setEditingFilter(filter.id)}\n variant=\"default\"\n className=\"cursor-pointer h-7\"\n >\n {getFilterLabel(filter)}\n </Badge>\n </PopoverTrigger>\n <PopoverContent className=\"w-auto\" align=\"start\">\n <FilterForm filter={filter} />\n </PopoverContent>\n </Popover>\n <Button\n icon={X}\n variant=\"destructive\"\n className=\"h-7 -ml-0.5\"\n size=\"icon\"\n onClick={() => removeFilter(filter.id)}\n />\n </div>\n {index < filters.length - 1 && (\n <span className=\"text-sm text-muted-foreground\">and</span>\n )}\n </div>\n );\n })}\n </div>\n </div>\n )}\n </div>\n <Popover open={isAddingFilter} onOpenChange={setIsAddingFilter}>\n <PopoverTrigger asChild>\n <Button icon={FilterIcon} variant=\"outline\" />\n </PopoverTrigger>\n <PopoverContent className=\"w-auto p-4\" align=\"start\">\n <FilterForm />\n </PopoverContent>\n </Popover>\n </div>\n );\n};\ninterface ValueFieldProps {\n control: any;\n propertyType: FilterablePropertyType;\n}\nconst ValueField = ({ control, propertyType }: ValueFieldProps) => {\n switch (propertyType) {\n case 'boolean':\n return (\n <FormField\n control={control}\n name=\"value\"\n render={({ field }) => (\n <FormItem>\n <FormLabel>Value</FormLabel>\n <Select onValueChange={field.onChange} defaultValue={field.value}>\n <FormControl>\n <SelectTrigger>\n <SelectValue />\n </SelectTrigger>\n </FormControl>\n <SelectContent>\n <SelectItem value=\"true\">True</SelectItem>\n <SelectItem value=\"false\">False</SelectItem>\n </SelectContent>\n </Select>\n <FormMessage />\n </FormItem>\n )}\n />\n );\n\n case 'objectDate':\n return (\n <FormField\n control={control}\n name=\"value\"\n render={({ field }) => (\n <FormItem className=\"flex flex-col\">\n <FormLabel>Value</FormLabel>\n <Popover>\n <PopoverTrigger asChild>\n <FormControl>\n <Button\n variant=\"outline\"\n className={cn(\n 'w-full pl-3 text-left font-normal',\n !field.value && 'text-muted-foreground',\n )}\n >\n {field.value ? (\n format(new Date(field.value), 'PPP')\n ) : (\n <span>Pick a date</span>\n )}\n </Button>\n </FormControl>\n </PopoverTrigger>\n <PopoverContent className=\"w-auto p-0\" align=\"start\">\n <Calendar\n mode=\"single\"\n selected={field.value ? new Date(field.value) : undefined}\n onSelect={(date) => {\n if (date) {\n field.onChange(date.toISOString()); // Convert date to ISO\n }\n }}\n initialFocus\n />\n </PopoverContent>\n </Popover>\n <FormMessage />\n </FormItem>\n )}\n />\n );\n\n case 'role':\n return (\n <FormField\n control={control}\n name=\"value\"\n render={({ field }) => (\n <FormItem>\n <FormLabel>Value</FormLabel>\n <Select onValueChange={field.onChange} defaultValue={field.value}>\n <FormControl>\n <SelectTrigger>\n <SelectValue />\n </SelectTrigger>\n </FormControl>\n <SelectContent>\n <SelectItem value=\"user\">User</SelectItem>\n <SelectItem value=\"organization-admin\">Organization Admin</SelectItem>\n <SelectItem value=\"reseller-admin\">Reseller Admin</SelectItem>\n </SelectContent>\n </Select>\n <FormMessage />\n </FormItem>\n )}\n />\n );\n case 'number':\n return (\n <FormField\n control={control}\n name=\"value\"\n render={({ field }) => (\n <FormItem>\n <FormLabel>Value</FormLabel>\n <FormControl>\n <Input {...field} type=\"number\" />\n </FormControl>\n <FormMessage />\n </FormItem>\n )}\n />\n );\n\n default:\n return (\n <FormField\n control={control}\n name=\"value\"\n render={({ field }) => (\n <FormItem>\n <FormLabel>Value</FormLabel>\n <FormControl>\n <Input {...field} type=\"text\" />\n </FormControl>\n <FormMessage />\n </FormItem>\n )}\n />\n );\n }\n};\n"],"names":["filterSchema","z","FILTER_COMPARISON_OPERATORS","TableFilter","filterableProperties","filters","onFiltersChange","editingFilter","setEditingFilter","useState","isAddingFilter","setIsAddingFilter","getFilterLabel","filter","property","getResourceDisplayName","operatorLabel","COMPARISON_OPERATOR_LABELS","value","removeFilter","id","FilterForm","form","useForm","zodResolver","watchProperty","handleSubmit","values","newFilter","f","handleClose","jsx","Form","jsxs","FormField","field","FormItem","FormLabel","Select","FormControl","SelectTrigger","SelectValue","SelectContent","key","SelectItem","FormMessage","Fragment","OPERATORS_FOR_FILTER_TYPE","op","ValueField","Button","index","Popover","open","PopoverTrigger","Badge","PopoverContent","X","FilterIcon","control","propertyType","cn","format","Calendar","date","Input"],"mappings":"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"}
1
+ {"version":3,"file":"table-filter.es.js","sources":["../../../lib/components/data-table/table-filter.tsx"],"sourcesContent":["import {\n COMPARISON_OPERATOR_LABELS,\n FILTER_COMPARISON_OPERATORS,\n getResourceDisplayName,\n OPERATORS_FOR_FILTER_TYPE,\n type FilterableProperties,\n type FilterablePropertyType,\n} from '@/components/data-table/table-utils';\nimport { Badge } from '@/components/ui/badge';\nimport { Button } from '@/components/ui/button';\nimport { Calendar } from '@/components/ui/calendar';\nimport {\n Form,\n FormControl,\n FormField,\n FormItem,\n FormLabel,\n FormMessage,\n} from '@/components/ui/form';\nimport { Input } from '@/components/ui/input';\nimport { Popover, PopoverContent, PopoverTrigger } from '@/components/ui/popover';\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from '@/components/ui/select';\nimport { cn } from '@/utils';\nimport { zodResolver } from '@hookform/resolvers/zod';\nimport { format } from 'date-fns';\nimport { FilterIcon, X } from 'lucide-react';\nimport { useState } from 'react';\nimport { useForm } from 'react-hook-form';\nimport z from 'zod';\nconst filterSchema = z.object({\n // For identifing a filter for updation and deletion\n id: z.string().min(1, 'Field is required'),\n property: z.string().min(1, 'Field is required.'),\n operator: z.enum(FILTER_COMPARISON_OPERATORS, {\n errorMap: () => ({ message: 'Invalid comparison operator' }),\n }),\n value: z.string().min(1, 'Field is required.'),\n});\nexport type FilterFormType = z.infer<typeof filterSchema>;\n\ninterface TableFilterProps {\n filterableProperties: FilterableProperties<any>;\n filters: FilterFormType[];\n onFiltersChange: (filters: FilterFormType[]) => void;\n}\n\nexport const TableFilter = ({\n filterableProperties,\n filters,\n onFiltersChange,\n}: TableFilterProps) => {\n const [editingFilter, setEditingFilter] = useState<string | null>(null);\n const [isAddingFilter, setIsAddingFilter] = useState(false);\n const getFilterLabel = (filter: FilterFormType): string => {\n const property = getResourceDisplayName(filter.property, 'admin-portal');\n const operatorLabel = COMPARISON_OPERATOR_LABELS[filter.operator];\n const value = filter.value;\n return `${property} ${operatorLabel} ${value}`;\n };\n\n const removeFilter = (id: string) => {\n onFiltersChange(filters.filter((filter) => filter.id !== id));\n };\n\n interface FilterFormProps {\n filter?: FilterFormType;\n }\n const FilterForm = ({ filter }: FilterFormProps) => {\n const form = useForm<FilterFormType>({\n resolver: zodResolver(filterSchema),\n defaultValues: {\n property: filter?.property || '',\n // TODO: Add dynamic default operator as per property type\n operator: filter?.operator || 'eq',\n value: filter?.value || '',\n id: filter?.id || `filter-${Date.now()}-${Math.random().toString(36)}`,\n },\n mode: 'all',\n });\n\n const watchProperty = form.watch('property');\n const handleSubmit = (values: FilterFormType) => {\n const newFilter: FilterFormType = {\n ...values,\n operator: values.operator,\n };\n\n if (filter) {\n // Update existing filter\n onFiltersChange(filters.map((f) => (f.id === filter.id ? newFilter : f)));\n setEditingFilter(null);\n } else {\n // Add new filter\n onFiltersChange([...filters, newFilter]);\n setIsAddingFilter(false);\n }\n };\n\n const handleClose = () => {\n if (filter) {\n setEditingFilter(null);\n } else {\n setIsAddingFilter(false);\n }\n };\n\n return (\n <Form {...form}>\n <form onSubmit={form.handleSubmit(handleSubmit)} className=\"flex flex-col gap-2 min-w-60\">\n <FormField\n control={form.control}\n name=\"property\"\n render={({ field }) => (\n <FormItem>\n <FormLabel>Property</FormLabel>\n <Select\n onValueChange={field.onChange}\n defaultValue={field.value}\n disabled={!!filter}\n >\n <FormControl>\n <SelectTrigger>\n <SelectValue />\n </SelectTrigger>\n </FormControl>\n <SelectContent autoFocus>\n {Object.entries(filterableProperties).map(([key]) => (\n <SelectItem key={key} value={key}>\n {getResourceDisplayName(key, 'admin-portal')}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n <FormMessage />\n </FormItem>\n )}\n />\n\n {watchProperty && (\n <>\n <FormField\n control={form.control}\n name=\"operator\"\n render={({ field }) => (\n <FormItem>\n <FormLabel>Comparison</FormLabel>\n <Select onValueChange={field.onChange} defaultValue={field.value}>\n <FormControl>\n <SelectTrigger>\n <SelectValue />\n </SelectTrigger>\n </FormControl>\n <SelectContent>\n {filterableProperties[watchProperty] &&\n OPERATORS_FOR_FILTER_TYPE[filterableProperties[watchProperty]].map(\n (op) => (\n <SelectItem key={op} value={op}>\n {COMPARISON_OPERATOR_LABELS[op]}\n </SelectItem>\n ),\n )}\n </SelectContent>\n </Select>\n <FormMessage />\n </FormItem>\n )}\n />\n {filterableProperties[watchProperty] && (\n <ValueField\n control={form.control}\n propertyType={filterableProperties[watchProperty]}\n />\n )}\n </>\n )}\n\n <div className=\"flex justify-end gap-2\">\n <Button type=\"button\" variant=\"outline\" size=\"sm\" onClick={handleClose}>\n Cancel\n </Button>\n <Button type=\"submit\" size=\"sm\">\n Apply Filter\n </Button>\n </div>\n </form>\n </Form>\n );\n };\n\n return (\n <div className=\"flex items-center py-2 justify-between gap-4\">\n <div className=\"flex flex-wrap gap-2 items-center\">\n {filters.length === 0 ? (\n <p className=\"text-sm text-muted-foreground\">\n No filters active. Add a filter to refine the results.\n </p>\n ) : (\n <div className=\"flex flex-wrap gap-2 items-center\">\n <p className=\"text-sm text-muted-foreground\">Active Filters:</p>\n <div className=\"flex flex-wrap gap-2 items-center\">\n {filters.map((filter, index) => {\n return (\n <div key={filter.id} className=\"flex items-center gap-2\">\n <div className=\"flex items-center\">\n <Popover\n open={editingFilter === filter.id}\n onOpenChange={(open) => {\n if (!open) setEditingFilter(null);\n }}\n >\n <PopoverTrigger>\n <Badge\n onClick={() => setEditingFilter(filter.id)}\n >\n {getFilterLabel(filter)}\n </Badge>\n </PopoverTrigger>\n <PopoverContent className=\"w-auto\" align=\"start\">\n <FilterForm filter={filter} />\n </PopoverContent>\n </Popover>\n <Button\n icon={X}\n variant=\"destructive\"\n size=\"sm\"\n onClick={() => removeFilter(filter.id)}\n />\n </div>\n {index < filters.length - 1 && (\n <span className=\"text-sm text-muted-foreground\">and</span>\n )}\n </div>\n );\n })}\n </div>\n </div>\n )}\n </div>\n <Popover open={isAddingFilter} onOpenChange={setIsAddingFilter}>\n <PopoverTrigger asChild>\n <Button icon={FilterIcon} variant=\"outline\" />\n </PopoverTrigger>\n <PopoverContent className=\"w-auto p-4\" align=\"start\">\n <FilterForm />\n </PopoverContent>\n </Popover>\n </div>\n );\n};\ninterface ValueFieldProps {\n control: any;\n propertyType: FilterablePropertyType;\n}\nconst ValueField = ({ control, propertyType }: ValueFieldProps) => {\n switch (propertyType) {\n case 'boolean':\n return (\n <FormField\n control={control}\n name=\"value\"\n render={({ field }) => (\n <FormItem>\n <FormLabel>Value</FormLabel>\n <Select onValueChange={field.onChange} defaultValue={field.value}>\n <FormControl>\n <SelectTrigger>\n <SelectValue />\n </SelectTrigger>\n </FormControl>\n <SelectContent>\n <SelectItem value=\"true\">True</SelectItem>\n <SelectItem value=\"false\">False</SelectItem>\n </SelectContent>\n </Select>\n <FormMessage />\n </FormItem>\n )}\n />\n );\n\n case 'objectDate':\n return (\n <FormField\n control={control}\n name=\"value\"\n render={({ field }) => (\n <FormItem className=\"flex flex-col\">\n <FormLabel>Value</FormLabel>\n <Popover>\n <PopoverTrigger asChild>\n <FormControl>\n <Button\n variant=\"outline\"\n className={cn(\n 'w-full pl-3 text-left font-normal',\n !field.value && 'text-muted-foreground',\n )}\n >\n {field.value ? (\n format(new Date(field.value), 'PPP')\n ) : (\n <span>Pick a date</span>\n )}\n </Button>\n </FormControl>\n </PopoverTrigger>\n <PopoverContent className=\"w-auto p-0\" align=\"start\">\n <Calendar\n mode=\"single\"\n selected={field.value ? new Date(field.value) : undefined}\n onSelect={(date) => {\n if (date) {\n field.onChange(date.toISOString()); // Convert date to ISO\n }\n }}\n initialFocus\n />\n </PopoverContent>\n </Popover>\n <FormMessage />\n </FormItem>\n )}\n />\n );\n\n case 'role':\n return (\n <FormField\n control={control}\n name=\"value\"\n render={({ field }) => (\n <FormItem>\n <FormLabel>Value</FormLabel>\n <Select onValueChange={field.onChange} defaultValue={field.value}>\n <FormControl>\n <SelectTrigger>\n <SelectValue />\n </SelectTrigger>\n </FormControl>\n <SelectContent>\n <SelectItem value=\"user\">User</SelectItem>\n <SelectItem value=\"organization-admin\">Organization Admin</SelectItem>\n <SelectItem value=\"reseller-admin\">Reseller Admin</SelectItem>\n </SelectContent>\n </Select>\n <FormMessage />\n </FormItem>\n )}\n />\n );\n case 'number':\n return (\n <FormField\n control={control}\n name=\"value\"\n render={({ field }) => (\n <FormItem>\n <FormLabel>Value</FormLabel>\n <FormControl>\n <Input {...field} type=\"number\" />\n </FormControl>\n <FormMessage />\n </FormItem>\n )}\n />\n );\n\n default:\n return (\n <FormField\n control={control}\n name=\"value\"\n render={({ field }) => (\n <FormItem>\n <FormLabel>Value</FormLabel>\n <FormControl>\n <Input {...field} type=\"text\" />\n </FormControl>\n <FormMessage />\n </FormItem>\n )}\n />\n );\n }\n};\n"],"names":["filterSchema","z","FILTER_COMPARISON_OPERATORS","TableFilter","filterableProperties","filters","onFiltersChange","editingFilter","setEditingFilter","useState","isAddingFilter","setIsAddingFilter","getFilterLabel","filter","property","getResourceDisplayName","operatorLabel","COMPARISON_OPERATOR_LABELS","value","removeFilter","id","FilterForm","form","useForm","zodResolver","watchProperty","handleSubmit","values","newFilter","f","handleClose","jsx","Form","jsxs","FormField","field","FormItem","FormLabel","Select","FormControl","SelectTrigger","SelectValue","SelectContent","key","SelectItem","FormMessage","Fragment","OPERATORS_FOR_FILTER_TYPE","op","ValueField","Button","index","Popover","open","PopoverTrigger","Badge","PopoverContent","X","FilterIcon","control","propertyType","cn","format","Calendar","date","Input"],"mappings":"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"}