@cryptlex/web-components 1.3.4 → 1.4.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 (87) hide show
  1. package/README.md +6 -3
  2. package/dist/components/data-table/column-picker.es.js +12 -11
  3. package/dist/components/data-table/column-picker.es.js.map +1 -1
  4. package/dist/components/data-table/data-table.es.js +112 -95
  5. package/dist/components/data-table/data-table.es.js.map +1 -1
  6. package/dist/components/data-table/table-actions.es.js +8 -8
  7. package/dist/components/data-table/table-actions.es.js.map +1 -1
  8. package/dist/components/data-table/table-content.es.js +20 -15
  9. package/dist/components/data-table/table-content.es.js.map +1 -1
  10. package/dist/components/data-table/table-filter.es.js +264 -0
  11. package/dist/components/data-table/table-filter.es.js.map +1 -0
  12. package/dist/components/data-table/table-utils/constants.es.js +20 -6
  13. package/dist/components/data-table/table-utils/constants.es.js.map +1 -1
  14. package/dist/components/data-table/table-utils/link-display.es.js +4 -4
  15. package/dist/components/data-table/table-utils/link-display.es.js.map +1 -1
  16. package/dist/components/key-value-card/key-value-card.es.js +87 -0
  17. package/dist/components/key-value-card/key-value-card.es.js.map +1 -0
  18. package/dist/components/sidebar/app-layout.es.js +41 -47
  19. package/dist/components/sidebar/app-layout.es.js.map +1 -1
  20. package/dist/components/sidebar/breadcrumb.es.js +58 -0
  21. package/dist/components/sidebar/breadcrumb.es.js.map +1 -0
  22. package/dist/components/sidebar/nav-main.es.js +65 -51
  23. package/dist/components/sidebar/nav-main.es.js.map +1 -1
  24. package/dist/components/static-data-table/data-table.es.js +8 -8
  25. package/dist/components/static-data-table/data-table.es.js.map +1 -1
  26. package/dist/components/ui/avatar.es.js +1 -1
  27. package/dist/components/ui/avatar.es.js.map +1 -1
  28. package/dist/components/ui/badge.es.js +1 -1
  29. package/dist/components/ui/badge.es.js.map +1 -1
  30. package/dist/components/ui/button.es.js +15 -14
  31. package/dist/components/ui/button.es.js.map +1 -1
  32. package/dist/components/ui/calendar.es.js +3 -3
  33. package/dist/components/ui/chart.es.js +16 -16
  34. package/dist/components/ui/chart.es.js.map +1 -1
  35. package/dist/components/ui/checkbox.es.js +1 -1
  36. package/dist/components/ui/checkbox.es.js.map +1 -1
  37. package/dist/components/ui/command.es.js +28 -28
  38. package/dist/components/ui/command.es.js.map +1 -1
  39. package/dist/components/ui/copy-button.es.js +76 -0
  40. package/dist/components/ui/copy-button.es.js.map +1 -0
  41. package/dist/components/ui/dialog.es.js +8 -8
  42. package/dist/components/ui/dialog.es.js.map +1 -1
  43. package/dist/components/ui/drawer.es.js +18 -21
  44. package/dist/components/ui/drawer.es.js.map +1 -1
  45. package/dist/components/ui/dropdown-menu.es.js +38 -38
  46. package/dist/components/ui/dropdown-menu.es.js.map +1 -1
  47. package/dist/components/ui/form.es.js +4 -4
  48. package/dist/components/ui/input-otp.es.js +2 -2
  49. package/dist/components/ui/input-otp.es.js.map +1 -1
  50. package/dist/components/ui/input.es.js +7 -7
  51. package/dist/components/ui/input.es.js.map +1 -1
  52. package/dist/components/ui/link-button.es.js +22 -0
  53. package/dist/components/ui/link-button.es.js.map +1 -0
  54. package/dist/components/ui/mutli-select.es.js +17 -15
  55. package/dist/components/ui/mutli-select.es.js.map +1 -1
  56. package/dist/components/ui/navigation-menu.es.js +3 -3
  57. package/dist/components/ui/navigation-menu.es.js.map +1 -1
  58. package/dist/components/ui/password-input.es.js +10 -10
  59. package/dist/components/ui/password-input.es.js.map +1 -1
  60. package/dist/components/ui/popover.es.js +1 -1
  61. package/dist/components/ui/popover.es.js.map +1 -1
  62. package/dist/components/ui/radio-group.es.js +7 -7
  63. package/dist/components/ui/radio-group.es.js.map +1 -1
  64. package/dist/components/ui/select.es.js +20 -20
  65. package/dist/components/ui/select.es.js.map +1 -1
  66. package/dist/components/ui/sheet.es.js +8 -8
  67. package/dist/components/ui/sheet.es.js.map +1 -1
  68. package/dist/components/ui/sidebar.es.js +76 -76
  69. package/dist/components/ui/sidebar.es.js.map +1 -1
  70. package/dist/components/ui/table-page-layout.es.js +8 -8
  71. package/dist/components/ui/table-page-layout.es.js.map +1 -1
  72. package/dist/components/ui/table.es.js +19 -19
  73. package/dist/components/ui/table.es.js.map +1 -1
  74. package/dist/components/ui/tabs.es.js +11 -11
  75. package/dist/components/ui/tabs.es.js.map +1 -1
  76. package/dist/index.es.d.ts +54 -21
  77. package/dist/index.es.js +231 -226
  78. package/dist/index.es.js.map +1 -1
  79. package/dist/utils/index.es.js +19 -14
  80. package/dist/utils/index.es.js.map +1 -1
  81. package/lib/index.css +15 -87
  82. package/lib/tailwind.preset.css +220 -0
  83. package/lib/tokens.css +54 -54
  84. package/package.json +9 -8
  85. package/dist/components/info-card/info-card.es.js +0 -71
  86. package/dist/components/info-card/info-card.es.js.map +0 -1
  87. package/tailwind.preset.ts +0 -183
package/README.md CHANGED
@@ -3,8 +3,10 @@
3
3
  A React component library for Cryptlex.
4
4
 
5
5
  # Usage
6
+
6
7
  In your tailwind.config.ts, add the following code:
7
- ```ts
8
+
9
+ ```ts
8
10
  import CtlxPreset from '@cryptlex/web-components/tailwind-preset';
9
11
 
10
12
  export default {
@@ -14,10 +16,11 @@ export default {
14
16
  ...
15
17
  "./node_modules/@cryptlex/web-components/**/*.{js,ts,jsx,tsx}",
16
18
  ],
17
- }
19
+ }
18
20
  ```
19
21
 
20
22
  In your global index.css, import the following CSS:
23
+
21
24
  ```css
22
25
  @import url('@cryptlex/web-components/index.css');
23
- ```
26
+ ```
@@ -10,6 +10,8 @@ import "../ui/chart.es.js";
10
10
  import { Checkbox as l } from "../ui/checkbox.es.js";
11
11
  import "@radix-ui/react-collapsible";
12
12
  import "../ui/command.es.js";
13
+ import { Columns3 as a } from "lucide-react";
14
+ import { useState as d } from "react";
13
15
  import "../ui/dialog.es.js";
14
16
  import "../ui/drawer.es.js";
15
17
  import "../ui/dropdown-menu.es.js";
@@ -17,14 +19,14 @@ import "../ui/form.es.js";
17
19
  import "../ui/input.es.js";
18
20
  import "../ui/input-otp.es.js";
19
21
  import { Label as s } from "../ui/label.es.js";
20
- import { Columns3 as a } from "lucide-react";
22
+ import "@tanstack/react-router";
21
23
  import "../ui/mutli-select.es.js";
22
24
  import "../ui/navigation-menu.es.js";
23
25
  import "../ui/pagination.es.js";
24
26
  import "../ui/password-input.es.js";
25
- import { Popover as d, PopoverTrigger as h, PopoverContent as f } from "../ui/popover.es.js";
27
+ import { Popover as h, PopoverTrigger as f, PopoverContent as g } from "../ui/popover.es.js";
26
28
  import "../ui/radio-group.es.js";
27
- import { SearchInput as g } from "../ui/search-input.es.js";
29
+ import { SearchInput as u } from "../ui/search-input.es.js";
28
30
  import "../ui/select.es.js";
29
31
  import "../ui/separator.es.js";
30
32
  import "../ui/sheet.es.js";
@@ -33,16 +35,15 @@ import "sonner";
33
35
  import "../ui/table.es.js";
34
36
  import "../ui/tabs.es.js";
35
37
  import "../ui/tooltip.es.js";
36
- import { useState as u } from "react";
37
38
  import { getResourceDisplayName as C } from "./table-utils/constants.es.js";
38
- function oe({ table: r }) {
39
- const [t, p] = u(""), m = r.getAllColumns().filter(
39
+ function ie({ table: r }) {
40
+ const [t, p] = d(""), m = r.getAllColumns().filter(
40
41
  (e) => e.getCanHide() && e.id.toLowerCase().includes(t.toLowerCase())
41
42
  );
42
- return /* @__PURE__ */ i(d, { children: [
43
- /* @__PURE__ */ o(h, { asChild: !0, children: /* @__PURE__ */ o(c, { icon: a, variant: "outline", children: "Columns" }) }),
44
- /* @__PURE__ */ i(f, { className: "flex flex-col gap-4 divide-y-1", children: [
45
- /* @__PURE__ */ o("div", { className: " flex gap-1 justify-center items-center sticky top-0", children: /* @__PURE__ */ o(g, { value: t, onChange: (e) => p(e) }) }),
43
+ return /* @__PURE__ */ i(h, { children: [
44
+ /* @__PURE__ */ o(f, { asChild: !0, children: /* @__PURE__ */ o(c, { icon: a, variant: "outline", children: "Columns" }) }),
45
+ /* @__PURE__ */ i(g, { className: "flex flex-col gap-4 divide-y-1", children: [
46
+ /* @__PURE__ */ o("div", { className: " flex gap-1 justify-center items-center sticky top-0", children: /* @__PURE__ */ o(u, { value: t, onChange: (e) => p(e) }) }),
46
47
  /* @__PURE__ */ i("div", { className: "flex items-center space-x-2", children: [
47
48
  /* @__PURE__ */ o(
48
49
  l,
@@ -73,6 +74,6 @@ function oe({ table: r }) {
73
74
  ] });
74
75
  }
75
76
  export {
76
- oe as ColumnPicker
77
+ ie as ColumnPicker
77
78
  };
78
79
  //# sourceMappingURL=column-picker.es.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"column-picker.es.js","sources":["../../../lib/components/data-table/column-picker.tsx"],"sourcesContent":["import {\n Button,\n Checkbox,\n Label,\n Popover,\n PopoverContent,\n PopoverTrigger,\n SearchInput,\n} from '@/index';\nimport { Table } from '@tanstack/react-table';\nimport { Columns3 } from 'lucide-react';\nimport { useState } from 'react';\nimport { getResourceDisplayName } from './table-utils';\n\nexport function ColumnPicker<TData>({ table }: { table: Table<TData> }) {\n const [columnsSearch, setColumnsSearch] = useState('');\n\n const filteredColumns = table\n .getAllColumns()\n .filter(\n (column) =>\n column.getCanHide() && column.id.toLowerCase().includes(columnsSearch.toLowerCase()),\n );\n\n return (\n <Popover>\n <PopoverTrigger asChild>\n <Button icon={Columns3} variant=\"outline\">\n Columns\n </Button>\n </PopoverTrigger>\n <PopoverContent className=\"flex flex-col gap-4 divide-y-1\">\n <div className=\" flex gap-1 justify-center items-center sticky top-0\">\n <SearchInput value={columnsSearch} onChange={(e) => setColumnsSearch(e)} />\n </div>\n <div className=\"flex items-center space-x-2\">\n <Checkbox\n id=\"selectAll\"\n checked={table.getIsAllColumnsVisible()}\n onCheckedChange={() => table.toggleAllColumnsVisible()}\n />\n <Label className=\"font-normal cursor-pointer\" htmlFor={'selectAll'}>\n Show All Columns\n </Label>\n </div>\n {/* Filtered Columns */}\n <div className=\"flex flex-col gap-3 max-h-96 overflow-auto\">\n {filteredColumns.map((column) => (\n <div key={column.id} className=\"flex items-center space-x-2\">\n <Checkbox\n id={column.id}\n checked={column.getIsVisible()}\n onCheckedChange={(value) => column.toggleVisibility(!!value)}\n />\n <Label className=\"font-normal cursor-pointer\" htmlFor={column.id}>\n {getResourceDisplayName(column.id, 'admin-portal')}\n </Label>\n </div>\n ))}{' '}\n {/* No columns found */}\n {filteredColumns.length === 0 && (\n <p className=\"text-gray-500 text-sm italic\">No matching columns found.</p>\n )}\n </div>\n </PopoverContent>\n </Popover>\n );\n}\n"],"names":["ColumnPicker","table","columnsSearch","setColumnsSearch","useState","filteredColumns","column","Popover","jsx","PopoverTrigger","Button","Columns3","jsxs","PopoverContent","SearchInput","Checkbox","Label","value","getResourceDisplayName"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAcgB,SAAAA,GAAoB,EAAE,OAAAC,KAAkC;AACtE,QAAM,CAACC,GAAeC,CAAgB,IAAIC,EAAS,EAAE,GAE/CC,IAAkBJ,EACrB,cAAA,EACA;AAAA,IACC,CAACK,MACCA,EAAO,WAAA,KAAgBA,EAAO,GAAG,cAAc,SAASJ,EAAc,YAAa,CAAA;AAAA,EACvF;AAEF,2BACGK,GACC,EAAA,UAAA;AAAA,IAAC,gBAAAC,EAAAC,GAAA,EAAe,SAAO,IACrB,UAAC,gBAAAD,EAAAE,GAAA,EAAO,MAAMC,GAAU,SAAQ,WAAU,UAAA,UAE1C,CAAA,GACF;AAAA,IACA,gBAAAC,EAACC,GAAe,EAAA,WAAU,kCACxB,UAAA;AAAA,MAAA,gBAAAL,EAAC,OAAI,EAAA,WAAU,wDACb,UAAA,gBAAAA,EAACM,GAAY,EAAA,OAAOZ,GAAe,UAAU,CAAC,MAAMC,EAAiB,CAAC,EAAG,CAAA,GAC3E;AAAA,MACA,gBAAAS,EAAC,OAAI,EAAA,WAAU,+BACb,UAAA;AAAA,QAAA,gBAAAJ;AAAA,UAACO;AAAA,UAAA;AAAA,YACC,IAAG;AAAA,YACH,SAASd,EAAM,uBAAuB;AAAA,YACtC,iBAAiB,MAAMA,EAAM,wBAAwB;AAAA,UAAA;AAAA,QACvD;AAAA,0BACCe,GAAM,EAAA,WAAU,8BAA6B,SAAS,aAAa,UAEpE,mBAAA,CAAA;AAAA,MAAA,GACF;AAAA,MAEA,gBAAAJ,EAAC,OAAI,EAAA,WAAU,8CACZ,UAAA;AAAA,QAAAP,EAAgB,IAAI,CAACC,MACnB,gBAAAM,EAAA,OAAA,EAAoB,WAAU,+BAC7B,UAAA;AAAA,UAAA,gBAAAJ;AAAA,YAACO;AAAA,YAAA;AAAA,cACC,IAAIT,EAAO;AAAA,cACX,SAASA,EAAO,aAAa;AAAA,cAC7B,iBAAiB,CAACW,MAAUX,EAAO,iBAAiB,CAAC,CAACW,CAAK;AAAA,YAAA;AAAA,UAC7D;AAAA,UACA,gBAAAT,EAACQ,GAAM,EAAA,WAAU,8BAA6B,SAASV,EAAO,IAC3D,UAAuBY,EAAAZ,EAAO,IAAI,cAAc,EACnD,CAAA;AAAA,QAAA,KARQA,EAAO,EASjB,CACD;AAAA,QAAG;AAAA,QAEHD,EAAgB,WAAW,uBACzB,KAAE,EAAA,WAAU,gCAA+B,UAA0B,6BAAA,CAAA;AAAA,MAAA,EAE1E,CAAA;AAAA,IAAA,EACF,CAAA;AAAA,EAAA,GACF;AAEJ;"}
1
+ {"version":3,"file":"column-picker.es.js","sources":["../../../lib/components/data-table/column-picker.tsx"],"sourcesContent":["import {\n Button,\n Checkbox,\n Label,\n Popover,\n PopoverContent,\n PopoverTrigger,\n SearchInput,\n} from '@/index';\nimport { Table } from '@tanstack/react-table';\nimport { Columns3 } from 'lucide-react';\nimport { useState } from 'react';\nimport { getResourceDisplayName } from './table-utils';\n\nexport function ColumnPicker<TData>({ table }: { table: Table<TData> }) {\n const [columnsSearch, setColumnsSearch] = useState('');\n\n const filteredColumns = table\n .getAllColumns()\n .filter(\n (column) =>\n column.getCanHide() && column.id.toLowerCase().includes(columnsSearch.toLowerCase()),\n );\n\n return (\n <Popover>\n <PopoverTrigger asChild>\n <Button icon={Columns3} variant=\"outline\">\n Columns\n </Button>\n </PopoverTrigger>\n <PopoverContent className=\"flex flex-col gap-4 divide-y-1\">\n <div className=\" flex gap-1 justify-center items-center sticky top-0\">\n <SearchInput value={columnsSearch} onChange={(e) => setColumnsSearch(e)} />\n </div>\n <div className=\"flex items-center space-x-2\">\n <Checkbox\n id=\"selectAll\"\n checked={table.getIsAllColumnsVisible()}\n onCheckedChange={() => table.toggleAllColumnsVisible()}\n />\n <Label className=\"font-normal cursor-pointer\" htmlFor={'selectAll'}>\n Show All Columns\n </Label>\n </div>\n {/* Filtered Columns */}\n <div className=\"flex flex-col gap-3 max-h-96 overflow-auto\">\n {filteredColumns.map((column) => (\n <div key={column.id} className=\"flex items-center space-x-2\">\n <Checkbox\n id={column.id}\n checked={column.getIsVisible()}\n onCheckedChange={(value) => column.toggleVisibility(!!value)}\n />\n <Label className=\"font-normal cursor-pointer\" htmlFor={column.id}>\n {getResourceDisplayName(column.id, 'admin-portal')}\n </Label>\n </div>\n ))}{' '}\n {/* No columns found */}\n {filteredColumns.length === 0 && (\n <p className=\"text-gray-500 text-sm italic\">No matching columns found.</p>\n )}\n </div>\n </PopoverContent>\n </Popover>\n );\n}\n"],"names":["ColumnPicker","table","columnsSearch","setColumnsSearch","useState","filteredColumns","column","Popover","jsx","PopoverTrigger","Button","Columns3","jsxs","PopoverContent","SearchInput","Checkbox","Label","value","getResourceDisplayName"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAcgB,SAAAA,GAAoB,EAAE,OAAAC,KAAkC;AACtE,QAAM,CAACC,GAAeC,CAAgB,IAAIC,EAAS,EAAE,GAE/CC,IAAkBJ,EACrB,cAAA,EACA;AAAA,IACC,CAACK,MACCA,EAAO,WAAA,KAAgBA,EAAO,GAAG,cAAc,SAASJ,EAAc,YAAa,CAAA;AAAA,EACvF;AAEF,2BACGK,GACC,EAAA,UAAA;AAAA,IAAC,gBAAAC,EAAAC,GAAA,EAAe,SAAO,IACrB,UAAC,gBAAAD,EAAAE,GAAA,EAAO,MAAMC,GAAU,SAAQ,WAAU,UAAA,UAE1C,CAAA,GACF;AAAA,IACA,gBAAAC,EAACC,GAAe,EAAA,WAAU,kCACxB,UAAA;AAAA,MAAA,gBAAAL,EAAC,OAAI,EAAA,WAAU,wDACb,UAAA,gBAAAA,EAACM,GAAY,EAAA,OAAOZ,GAAe,UAAU,CAAC,MAAMC,EAAiB,CAAC,EAAG,CAAA,GAC3E;AAAA,MACA,gBAAAS,EAAC,OAAI,EAAA,WAAU,+BACb,UAAA;AAAA,QAAA,gBAAAJ;AAAA,UAACO;AAAA,UAAA;AAAA,YACC,IAAG;AAAA,YACH,SAASd,EAAM,uBAAuB;AAAA,YACtC,iBAAiB,MAAMA,EAAM,wBAAwB;AAAA,UAAA;AAAA,QACvD;AAAA,0BACCe,GAAM,EAAA,WAAU,8BAA6B,SAAS,aAAa,UAEpE,mBAAA,CAAA;AAAA,MAAA,GACF;AAAA,MAEA,gBAAAJ,EAAC,OAAI,EAAA,WAAU,8CACZ,UAAA;AAAA,QAAAP,EAAgB,IAAI,CAACC,MACnB,gBAAAM,EAAA,OAAA,EAAoB,WAAU,+BAC7B,UAAA;AAAA,UAAA,gBAAAJ;AAAA,YAACO;AAAA,YAAA;AAAA,cACC,IAAIT,EAAO;AAAA,cACX,SAASA,EAAO,aAAa;AAAA,cAC7B,iBAAiB,CAACW,MAAUX,EAAO,iBAAiB,CAAC,CAACW,CAAK;AAAA,YAAA;AAAA,UAC7D;AAAA,UACA,gBAAAT,EAACQ,GAAM,EAAA,WAAU,8BAA6B,SAASV,EAAO,IAC3D,UAAuBY,EAAAZ,EAAO,IAAI,cAAc,EACnD,CAAA;AAAA,QAAA,KARQA,EAAO,EASjB,CACD;AAAA,QAAG;AAAA,QAEHD,EAAgB,WAAW,uBACzB,KAAE,EAAA,WAAU,gCAA+B,UAA0B,6BAAA,CAAA;AAAA,MAAA,EAE1E,CAAA;AAAA,IAAA,EACF,CAAA;AAAA,EAAA,GACF;AAEJ;"}
@@ -1,5 +1,6 @@
1
1
  "use client";
2
2
  import { jsx as i, jsxs as c } from "react/jsx-runtime";
3
+ import { TableFilter as H } from "./table-filter.es.js";
3
4
  import "../ui/accordion.es.js";
4
5
  import "../ui/avatar.es.js";
5
6
  import "../ui/badge.es.js";
@@ -11,6 +12,8 @@ import "../ui/chart.es.js";
11
12
  import "../ui/checkbox.es.js";
12
13
  import "@radix-ui/react-collapsible";
13
14
  import "../ui/command.es.js";
15
+ import { Info as W } from "lucide-react";
16
+ import { useState as M, useEffect as B, useMemo as u } from "react";
14
17
  import "../ui/dialog.es.js";
15
18
  import "../ui/drawer.es.js";
16
19
  import "../ui/dropdown-menu.es.js";
@@ -18,14 +21,13 @@ import "../ui/form.es.js";
18
21
  import "../ui/input.es.js";
19
22
  import "../ui/input-otp.es.js";
20
23
  import "../ui/label.es.js";
21
- import { Info as R } from "lucide-react";
24
+ import "@tanstack/react-router";
22
25
  import "../ui/mutli-select.es.js";
23
26
  import "../ui/navigation-menu.es.js";
24
27
  import "../ui/pagination.es.js";
25
28
  import "../ui/password-input.es.js";
26
29
  import "../ui/popover.es.js";
27
30
  import "../ui/radio-group.es.js";
28
- import { useState as A, useEffect as I, useMemo as b } from "react";
29
31
  import "../ui/select.es.js";
30
32
  import "../ui/separator.es.js";
31
33
  import "../ui/sheet.es.js";
@@ -33,25 +35,27 @@ import "../ui/sidebar.es.js";
33
35
  import "sonner";
34
36
  import "../ui/table.es.js";
35
37
  import "../ui/tabs.es.js";
36
- import { TooltipProvider as L, Tooltip as U, TooltipTrigger as q, TooltipContent as H } from "../ui/tooltip.es.js";
37
- import { useQuery as G, keepPreviousData as W } from "@tanstack/react-query";
38
- import { createColumnHelper as X, useReactTable as B, getCoreRowModel as J } from "@tanstack/react-table";
39
- import { useDebounce as Y } from "use-debounce";
40
- import { ColumnPicker as Z } from "./column-picker.es.js";
41
- import { PageSize as $ } from "./page-size.es.js";
42
- import { Paginator as Q } from "./paginator.es.js";
43
- import tt from "./table-actions.es.js";
44
- import { CHECK_BOX as et, ID_COLUMN as ot, DEFAULT_DATE_COLUMNS as it } from "./table-commons.es.js";
45
- import { TableContent as nt } from "./table-content.es.js";
46
- function Jt({
47
- columns: u,
38
+ import { TooltipProvider as G, Tooltip as X, TooltipTrigger as J, TooltipContent as Y } from "../ui/tooltip.es.js";
39
+ import { useQuery as Z, keepPreviousData as $ } from "@tanstack/react-query";
40
+ import { createColumnHelper as Q, useReactTable as tt, getCoreRowModel as et } from "@tanstack/react-table";
41
+ import { useDebounce as ot } from "use-debounce";
42
+ import { ColumnPicker as it } from "./column-picker.es.js";
43
+ import { PageSize as rt } from "./page-size.es.js";
44
+ import { Paginator as nt } from "./paginator.es.js";
45
+ import at from "./table-actions.es.js";
46
+ import { CHECK_BOX as lt, ID_COLUMN as st, DEFAULT_DATE_COLUMNS as mt } from "./table-commons.es.js";
47
+ import { TableContent as ct } from "./table-content.es.js";
48
+ import { DEFAULT_FILTERABLE_FIELDS as pt } from "./table-utils/constants.es.js";
49
+ function ne({
50
+ columns: g,
48
51
  fetchFn: V,
49
- tableName: _,
50
- tableActions: g,
51
- columnsToHideByDefault: C
52
+ tableName: j,
53
+ tableActions: h,
54
+ columnsToHideByDefault: w,
55
+ filterableFields: A
52
56
  }) {
53
- var v, T, F, D, P, N;
54
- const [j, E] = A({
57
+ var T, D, P, E, N, _;
58
+ const [I, O] = M({
55
59
  sorting: [],
56
60
  // Sorting state
57
61
  columnFilters: [],
@@ -64,134 +68,147 @@ function Jt({
64
68
  // Row selection state
65
69
  pagination: { pageIndex: 0, pageSize: 20 }
66
70
  // Pagination state
67
- }), n = (t) => {
68
- E((e) => ({ ...e, ...t }));
69
- }, { sorting: p, columnFilters: w, searching: S, columnVisibility: y, rowSelection: d, pagination: f } = j, [k] = Y(S.trim(), 300);
70
- I(() => {
71
- n({
72
- columnVisibility: { id: !1, updatedAt: !1, ...C }
71
+ }), a = (t) => {
72
+ O((e) => ({ ...e, ...t }));
73
+ }, { sorting: p, columnFilters: y, searching: S, columnVisibility: x, rowSelection: f, pagination: d } = I, [R] = ot(S.trim(), 300);
74
+ B(() => {
75
+ a({
76
+ columnVisibility: { id: !1, updatedAt: !1, ...w }
73
77
  });
74
- }, [C]);
75
- const o = G({
76
- queryKey: [_, f, p, k],
77
- queryFn: () => V(f, p, S.trim(), {}),
78
- placeholderData: W
78
+ }, [w]);
79
+ const [b, k] = M([]), v = u(() => b.reduce((t, e) => {
80
+ const { property: r, value: n, operator: l } = e;
81
+ return t[r] || (t[r] = {}), t[r][l] = n, t;
82
+ }, {}), [b]), o = Z({
83
+ queryKey: [j, d, p, R, v],
84
+ queryFn: () => V(d, p, S.trim(), v),
85
+ placeholderData: $,
79
86
  // Keep previous data while loading new data
80
- }), z = X(), h = b(() => {
81
- var m;
82
- const t = (m = o.data) == null ? void 0 : m.data;
87
+ retry: 0,
88
+ refetchOnWindowFocus: !1
89
+ }), z = Q(), C = u(() => {
90
+ var r;
91
+ const t = (r = o.data) == null ? void 0 : r.data;
83
92
  if (!(t != null && t.length)) return [];
84
93
  const e = /* @__PURE__ */ new Set();
85
- return t.forEach((a) => {
86
- a.metadata && a.metadata.forEach((s) => {
87
- e.add(s.key);
94
+ return t.forEach((n) => {
95
+ n.metadata && n.metadata.forEach((l) => {
96
+ e.add(l.key);
88
97
  });
89
98
  }), Array.from(e).map(
90
- (a) => z.accessor(
91
- (s) => {
92
- var M;
93
- const r = (M = s.metadata) == null ? void 0 : M.find((O) => O.key === a);
94
- return r == null ? void 0 : r.value;
99
+ (n) => z.accessor(
100
+ (l) => {
101
+ var L;
102
+ const s = (L = l.metadata) == null ? void 0 : L.find((q) => q.key === n);
103
+ return s == null ? void 0 : s.value;
95
104
  },
96
105
  {
97
- header: () => /* @__PURE__ */ i(L, { delayDuration: 0, children: /* @__PURE__ */ c(U, { children: [
98
- /* @__PURE__ */ i(q, { asChild: !0, children: /* @__PURE__ */ c("span", { className: "flex gap-1 items-center align-middle", children: [
99
- a,
106
+ header: () => /* @__PURE__ */ i(G, { delayDuration: 0, children: /* @__PURE__ */ c(X, { children: [
107
+ /* @__PURE__ */ i(J, { asChild: !0, children: /* @__PURE__ */ c("span", { className: "flex gap-1 items-center align-middle", children: [
108
+ n,
100
109
  " ",
101
- /* @__PURE__ */ i(R, { size: 18, strokeWidth: "1px" })
110
+ /* @__PURE__ */ i(W, { size: 18, strokeWidth: "1px" })
102
111
  ] }) }),
103
- /* @__PURE__ */ i(H, { children: "Metadata Key" })
112
+ /* @__PURE__ */ i(Y, { children: "Metadata Key" })
104
113
  ] }) }),
105
114
  // Use the metadata key as the column header
106
- id: a,
115
+ id: n,
107
116
  enableSorting: !1,
108
- cell: (s) => {
109
- const r = s.getValue();
110
- return r == null ? "" : String(r);
117
+ cell: (l) => {
118
+ const s = l.getValue();
119
+ return s == null ? "" : String(s);
111
120
  }
112
121
  }
113
122
  )
114
123
  );
115
- }, [(v = o.data) == null ? void 0 : v.data]), x = b(() => [
116
- ...g.selection ? et : [],
117
- ...ot,
118
- ...u.filter((e) => e.id !== "actions"),
119
- ...h.length ? h : [],
120
- ...it,
121
- ...u.filter((e) => e.id === "actions")
122
- ], [u, h, (T = o.data) == null ? void 0 : T.data, g.selection]), K = b(
123
- () => Object.entries(d).map((t) => {
124
- var e, m;
125
- return (m = (e = o == null ? void 0 : o.data) == null ? void 0 : e.data) == null ? void 0 : m[t[0]];
124
+ }, [(T = o.data) == null ? void 0 : T.data]), F = u(() => [
125
+ ...h.selection ? lt : [],
126
+ ...st,
127
+ ...g.filter((e) => e.id !== "actions"),
128
+ ...C.length ? C : [],
129
+ ...mt,
130
+ ...g.filter((e) => e.id === "actions")
131
+ ], [g, C, (D = o.data) == null ? void 0 : D.data, h.selection]), K = u(
132
+ () => Object.entries(f).map((t) => {
133
+ var e, r;
134
+ return (r = (e = o == null ? void 0 : o.data) == null ? void 0 : e.data) == null ? void 0 : r[t[0]];
126
135
  }),
127
- [(F = o == null ? void 0 : o.data) == null ? void 0 : F.data, d]
128
- ), l = B({
129
- data: ((D = o.data) == null ? void 0 : D.data) ?? [],
130
- columns: x,
131
- getCoreRowModel: J(),
132
- rowCount: (P = o.data) == null ? void 0 : P.total,
136
+ [(P = o == null ? void 0 : o.data) == null ? void 0 : P.data, f]
137
+ ), m = tt({
138
+ data: ((E = o.data) == null ? void 0 : E.data) ?? [],
139
+ columns: F,
140
+ getCoreRowModel: et(),
141
+ rowCount: (N = o.data) == null ? void 0 : N.total,
133
142
  manualPagination: !0,
134
143
  // Handle pagination manually
135
144
  onPaginationChange: (t) => {
136
- const e = typeof t == "function" ? t(f) : t;
137
- n({ pagination: e });
145
+ const e = typeof t == "function" ? t(d) : t;
146
+ a({ pagination: e });
138
147
  },
139
148
  manualSorting: !0,
140
149
  // Handle sorting manually
141
150
  onSortingChange: (t) => {
142
151
  const e = typeof t == "function" ? t(p) : t;
143
- n({ sorting: e });
152
+ a({ sorting: e });
144
153
  },
145
154
  manualFiltering: !0,
146
155
  // Handle filtering manually
147
156
  onGlobalFilterChange: (t) => {
148
- const e = typeof t == "function" ? t(w) : t;
149
- n({ columnFilters: e });
157
+ const e = typeof t == "function" ? t(y) : t;
158
+ a({ columnFilters: e });
150
159
  },
151
160
  onColumnVisibilityChange: (t) => {
152
- const e = typeof t == "function" ? t(y) : t;
153
- n({ columnVisibility: e });
161
+ const e = typeof t == "function" ? t(x) : t;
162
+ a({ columnVisibility: e });
154
163
  },
155
164
  onRowSelectionChange: (t) => {
156
- const e = typeof t == "function" ? t(d) : t;
157
- n({ rowSelection: e });
165
+ const e = typeof t == "function" ? t(f) : t;
166
+ a({ rowSelection: e });
158
167
  },
159
168
  state: {
160
169
  sorting: p,
161
- columnFilters: w,
162
- columnVisibility: y,
163
- pagination: f,
164
- rowSelection: d
170
+ columnFilters: y,
171
+ columnVisibility: x,
172
+ pagination: d,
173
+ rowSelection: f
165
174
  },
166
175
  meta: {
167
176
  refetch: o.refetch
168
177
  }
169
- });
170
- return /* @__PURE__ */ c("div", { className: "flex flex-col w-full bg-card", children: [
178
+ }), U = {
179
+ key: "",
180
+ stateData: K
181
+ };
182
+ return /* @__PURE__ */ c("div", { className: "flex flex-col gap-1 w-full bg-card", children: [
183
+ /* @__PURE__ */ i("div", { className: " px-1", children: /* @__PURE__ */ i(
184
+ H,
185
+ {
186
+ filterableProperties: { ...A, ...pt },
187
+ filters: b,
188
+ onFiltersChange: k
189
+ }
190
+ ) }),
171
191
  /* @__PURE__ */ i("div", { className: "border px-1", children: /* @__PURE__ */ i(
172
- tt,
192
+ at,
173
193
  {
174
194
  dataQuery: o,
175
- table: l,
176
- tableActions: g,
177
- stateToPass: {
178
- stateData: K,
179
- key: "state"
180
- },
181
- handleSearching: (t) => n({ searching: t })
195
+ table: m,
196
+ tableActions: h,
197
+ stateToPass: U,
198
+ handleSearching: (t) => a({ searching: t })
182
199
  }
183
200
  ) }),
184
- /* @__PURE__ */ i("div", { className: "relative h-[60vh] z-10 overflow-x-auto border-x align-top justify-start", children: /* @__PURE__ */ i(nt, { table: l, isFetching: o.isFetching, columns: x }) }),
201
+ /* @__PURE__ */ i("div", { className: "relative h-[60vh] z-10 overflow-x-auto border-x align-top justify-start", children: /* @__PURE__ */ i(ct, { table: m, columns: F, dataQuery: o }) }),
185
202
  /* @__PURE__ */ c("div", { className: "flex overflow-auto flex-row w-full justify-between border gap-4 px-1 py-2", children: [
186
203
  /* @__PURE__ */ c("div", { className: "flex gap-2", children: [
187
- /* @__PURE__ */ i(Z, { table: l }),
188
- /* @__PURE__ */ i($, { table: l })
204
+ /* @__PURE__ */ i(it, { table: m }),
205
+ /* @__PURE__ */ i(rt, { table: m })
189
206
  ] }),
190
- /* @__PURE__ */ i(Q, { table: l, rowCount: ((N = o.data) == null ? void 0 : N.total) ?? 0 })
207
+ /* @__PURE__ */ i(nt, { table: m, rowCount: ((_ = o.data) == null ? void 0 : _.total) ?? 0 })
191
208
  ] })
192
209
  ] });
193
210
  }
194
211
  export {
195
- Jt as DataTable
212
+ ne as DataTable
196
213
  };
197
214
  //# sourceMappingURL=data-table.es.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"data-table.es.js","sources":["../../../lib/components/data-table/data-table.tsx"],"sourcesContent":["'use client';\nimport { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from '@/index';\nimport { keepPreviousData, useQuery } from '@tanstack/react-query';\nimport {\n ColumnDef,\n ColumnFiltersState,\n createColumnHelper,\n getCoreRowModel,\n PaginationState,\n SortingState,\n useReactTable,\n VisibilityState,\n} from '@tanstack/react-table';\nimport { Info } from 'lucide-react';\nimport { useEffect, useMemo, useState } from 'react';\nimport { useDebounce } from 'use-debounce';\nimport { ColumnPicker } from './column-picker';\nimport { PageSize } from './page-size';\nimport { Paginator } from './paginator';\nimport Actions from './table-actions';\nimport { CHECK_BOX, DEFAULT_DATE_COLUMNS, ID_COLUMN } from './table-commons';\nimport { TableContent } from './table-content';\nimport type { FilterableProperties, MetadataDto, TableActions, TableFetchFn } from './table-utils';\n\n// Props type for the DataTable component\nexport interface DataTableProps<TData, TValue = any> {\n columns: ColumnDef<TData, TValue>[]; // Columns for the table\n tableName: string; // Table name used as query key\n fetchFn: TableFetchFn<TData>; // Function for fetching data from the server\n tableActions: TableActions;\n filterableFields: FilterableProperties; // Fields that can be filtered\n columnsToHideByDefault: VisibilityState; // Columns that are hidden by default\n}\nexport function DataTable<TData extends Record<string, any>, TValue = any>({\n columns,\n fetchFn,\n tableName,\n tableActions,\n columnsToHideByDefault,\n}: DataTableProps<TData, TValue>) {\n // State for managing table data and filters\n //TODO: This is later to be stored in url as params\n const [tableState, setTableState] = useState({\n sorting: [] as SortingState, // Sorting state\n columnFilters: [] as ColumnFiltersState, // Filters for columns\n searching: '', // Search query state\n columnVisibility: {} as VisibilityState, // Visibility of columns\n rowSelection: {}, // Row selection state\n pagination: { pageIndex: 0, pageSize: 20 } as PaginationState, // Pagination state\n });\n\n // Update table state with new values\n const updateTableState = (updates: Partial<typeof tableState>) => {\n setTableState((prev) => ({ ...prev, ...updates }));\n };\n\n // Destructuring the table state for easier access\n const { sorting, columnFilters, searching, columnVisibility, rowSelection, pagination } =\n tableState;\n\n // Debounce the search query to avoid making a request on every keystroke\n const [debouncedQuery] = useDebounce(searching.trim(), 300);\n\n // Update column visibility when columnsToHideByDefault changes\n useEffect(() => {\n updateTableState({\n columnVisibility: { id: false, updatedAt: false, ...columnsToHideByDefault },\n });\n }, [columnsToHideByDefault]);\n\n // Fetch table data using the fetchFn and react-query's useQuery hook\n const dataQuery = useQuery({\n queryKey: [tableName, pagination, sorting, debouncedQuery],\n queryFn: () => fetchFn(pagination, sorting, searching.trim(), {}),\n placeholderData: keepPreviousData, // Keep previous data while loading new data\n });\n\n // Create column helpers for dynamic column generation\n const columnHelper = createColumnHelper<TData>();\n const metadataColumns = useMemo<ColumnDef<TData, TValue>[]>(() => {\n const data = dataQuery.data?.data;\n if (!data?.length) return [];\n // set of all the keys present in a given view\n const allMetadataKeys = new Set<string>();\n\n // Collect all unique metadata keys\n data.forEach((row: TData) => {\n if (row.metadata) {\n row.metadata.forEach((meta: MetadataDto) => {\n allMetadataKeys.add(meta.key);\n });\n }\n });\n\n // Generate columns for all unique metadata keys\n return Array.from(allMetadataKeys).map((key) =>\n columnHelper.accessor(\n (row: TData) => {\n // Find the metadata object with the matching key\n const metadataEntry = row.metadata?.find((meta: MetadataDto) => meta.key === key);\n return metadataEntry?.value; // Return the value for the specific key\n },\n {\n header: () => (\n <TooltipProvider delayDuration={0}>\n <Tooltip>\n <TooltipTrigger asChild>\n <span className=\"flex gap-1 items-center align-middle\">\n {key} <Info size={18} strokeWidth={'1px'} />\n </span>\n </TooltipTrigger>\n <TooltipContent>Metadata Key</TooltipContent>\n </Tooltip>\n </TooltipProvider>\n ), // Use the metadata key as the column header\n id: key,\n enableSorting: false,\n cell: (info) => {\n const value = info.getValue();\n // Handle null/undefined values\n if (value === null || value === undefined) return '';\n // For primitive types, return the string representation\n return String(value);\n },\n },\n ),\n );\n }, [dataQuery.data?.data]);\n\n /**\n * ID,createdAt and updatedAt will be added by default for all tables\n * If selection is allowed, checkbox will be added\n * If the dto has metadata, dynamics columns for all the metadata key-value will be added(particular for a view)\n * If there are actions for the table, they will be placed fixed at the right side of table.\n */\n const extendedColumns = useMemo<ColumnDef<any, any>[]>(() => {\n const _columns = [\n ...(tableActions.selection ? CHECK_BOX : []),\n ...ID_COLUMN,\n ...columns.filter((col) => col.id !== 'actions'),\n ...(metadataColumns.length ? metadataColumns : []),\n ...DEFAULT_DATE_COLUMNS,\n ...columns.filter((col) => col.id === 'actions'),\n ];\n\n return _columns;\n }, [columns, metadataColumns, dataQuery.data?.data, tableActions.selection]);\n\n // Get selected row data\n const rowSelectedData = useMemo(\n () => Object.entries(rowSelection).map((d: any) => dataQuery?.data?.data?.[d[0]]),\n [dataQuery?.data?.data, rowSelection],\n );\n\n // Use react-table's hook to create the table instance\n const table = useReactTable({\n data: dataQuery.data?.data ?? [],\n columns: extendedColumns,\n getCoreRowModel: getCoreRowModel(),\n rowCount: dataQuery.data?.total,\n manualPagination: true, // Handle pagination manually\n onPaginationChange: (updater) => {\n const newPagination = typeof updater === 'function' ? updater(pagination) : updater;\n updateTableState({ pagination: newPagination });\n },\n manualSorting: true, // Handle sorting manually\n onSortingChange: (updater) => {\n const newSorting = typeof updater === 'function' ? updater(sorting) : updater;\n updateTableState({ sorting: newSorting });\n },\n manualFiltering: true, // Handle filtering manually\n onGlobalFilterChange: (updater) => {\n const newFilters = typeof updater === 'function' ? updater(columnFilters) : updater;\n updateTableState({ columnFilters: newFilters });\n },\n onColumnVisibilityChange: (updater) => {\n const newVisibility = typeof updater === 'function' ? updater(columnVisibility) : updater;\n updateTableState({ columnVisibility: newVisibility });\n },\n onRowSelectionChange: (updater) => {\n const newSelection = typeof updater === 'function' ? updater(rowSelection) : updater;\n updateTableState({ rowSelection: newSelection });\n },\n state: {\n sorting,\n columnFilters,\n columnVisibility,\n pagination,\n rowSelection,\n },\n meta: {\n refetch: dataQuery.refetch,\n },\n });\n\n return (\n <div className=\"flex flex-col w-full bg-card\">\n {/* Table Actions Section */}\n <div className=\"border px-1\">\n <Actions\n dataQuery={dataQuery}\n table={table}\n tableActions={tableActions}\n stateToPass={{\n stateData: rowSelectedData,\n key: 'state',\n }}\n handleSearching={(value) => updateTableState({ searching: value })}\n />\n </div>\n\n {/* Table Content Section */}\n <div className=\"relative h-[60vh] z-10 overflow-x-auto border-x align-top justify-start\">\n <TableContent table={table} isFetching={dataQuery.isFetching} columns={extendedColumns} />\n </div>\n\n {/* Table Footer Section with Pagination and Column Picker */}\n <div className=\"flex overflow-auto flex-row w-full justify-between border gap-4 px-1 py-2\">\n <div className=\"flex gap-2\">\n <ColumnPicker table={table} />\n <PageSize table={table} />\n </div>\n <Paginator table={table} rowCount={dataQuery.data?.total ?? 0} />\n </div>\n </div>\n );\n}\n"],"names":["DataTable","columns","fetchFn","tableName","tableActions","columnsToHideByDefault","tableState","setTableState","useState","updateTableState","updates","prev","sorting","columnFilters","searching","columnVisibility","rowSelection","pagination","debouncedQuery","useDebounce","useEffect","dataQuery","useQuery","keepPreviousData","columnHelper","createColumnHelper","metadataColumns","useMemo","data","_a","allMetadataKeys","row","meta","key","metadataEntry","jsx","TooltipProvider","Tooltip","TooltipTrigger","jsxs","Info","TooltipContent","info","value","extendedColumns","CHECK_BOX","ID_COLUMN","col","DEFAULT_DATE_COLUMNS","_b","rowSelectedData","d","_c","table","useReactTable","_d","getCoreRowModel","_e","updater","newPagination","newSorting","newFilters","newVisibility","newSelection","Actions","TableContent","ColumnPicker","PageSize","Paginator","_f"],"mappings":"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"}
1
+ {"version":3,"file":"data-table.es.js","sources":["../../../lib/components/data-table/data-table.tsx"],"sourcesContent":["'use client';\nimport { TableFilter, type FilterFormType } from '@/components/data-table/table-filter';\nimport {\n DEFAULT_FILTERABLE_FIELDS,\n Tooltip,\n TooltipContent,\n TooltipProvider,\n TooltipTrigger,\n} from '@/index';\nimport { keepPreviousData, useQuery } from '@tanstack/react-query';\nimport {\n ColumnDef,\n ColumnFiltersState,\n createColumnHelper,\n getCoreRowModel,\n PaginationState,\n SortingState,\n useReactTable,\n VisibilityState,\n} from '@tanstack/react-table';\nimport { Info } from 'lucide-react';\nimport { useEffect, useMemo, useState } from 'react';\nimport { useDebounce } from 'use-debounce';\nimport { ColumnPicker } from './column-picker';\nimport { PageSize } from './page-size';\nimport { Paginator } from './paginator';\nimport Actions from './table-actions';\nimport { CHECK_BOX, DEFAULT_DATE_COLUMNS, ID_COLUMN } from './table-commons';\nimport { TableContent } from './table-content';\nimport type { FilterableProperties, MetadataDto, TableActions, TableFetchFn } from './table-utils';\n\n// Props type for the DataTable component\nexport interface DataTableProps<TData, TValue = any> {\n columns: ColumnDef<TData, TValue>[]; // Columns for the table\n tableName: string; // Table name used as query key\n fetchFn: TableFetchFn<TData>; // Function for fetching data from the server\n tableActions: TableActions;\n filterableFields: FilterableProperties<TData>; // Fields that can be filtered\n columnsToHideByDefault: VisibilityState; // Columns that are hidden by default\n}\nexport function DataTable<TData extends Record<string, any>, TValue = any>({\n columns,\n fetchFn,\n tableName,\n tableActions,\n columnsToHideByDefault,\n filterableFields,\n}: DataTableProps<TData, TValue>) {\n // State for managing table data and filters\n //TODO: This is later to be stored in url as params\n const [tableState, setTableState] = useState({\n sorting: [] as SortingState, // Sorting state\n columnFilters: [] as ColumnFiltersState, // Filters for columns\n searching: '', // Search query state\n columnVisibility: {} as VisibilityState, // Visibility of columns\n rowSelection: {}, // Row selection state\n pagination: { pageIndex: 0, pageSize: 20 } as PaginationState, // Pagination state\n });\n\n // Update table state with new values\n const updateTableState = (updates: Partial<typeof tableState>) => {\n setTableState((prev) => ({ ...prev, ...updates }));\n };\n\n // Destructuring the table state for easier access\n const { sorting, columnFilters, searching, columnVisibility, rowSelection, pagination } =\n tableState;\n\n // Debounce the search query to avoid making a request on every keystroke\n const [debouncedQuery] = useDebounce(searching.trim(), 300);\n\n // Update column visibility when columnsToHideByDefault changes\n useEffect(() => {\n updateTableState({\n columnVisibility: { id: false, updatedAt: false, ...columnsToHideByDefault },\n });\n }, [columnsToHideByDefault]);\n const [filters, setFilters] = useState<FilterFormType[]>([]);\n\n const formatedFilters = useMemo(() => {\n return filters.reduce((acc, filter) => {\n const { property, value, operator } = filter;\n if (!acc[property]) {\n acc[property] = {};\n }\n acc[property][operator] = value;\n return acc;\n }, {} as Record<string, Record<string, any>>);\n }, [filters]);\n\n // Fetch table data using the fetchFn and react-query's useQuery hook\n const dataQuery = useQuery({\n queryKey: [tableName, pagination, sorting, debouncedQuery, formatedFilters],\n queryFn: () => fetchFn(pagination, sorting, searching.trim(), formatedFilters),\n placeholderData: keepPreviousData, // Keep previous data while loading new data\n retry: 0,\n refetchOnWindowFocus: false,\n });\n\n // Create column helpers for dynamic column generation\n const columnHelper = createColumnHelper<TData>();\n const metadataColumns = useMemo<ColumnDef<TData, TValue>[]>(() => {\n const data = dataQuery.data?.data;\n if (!data?.length) return [];\n // set of all the keys present in a given view\n const allMetadataKeys = new Set<string>();\n\n // Collect all unique metadata keys\n data.forEach((row: TData) => {\n if (row.metadata) {\n row.metadata.forEach((meta: MetadataDto) => {\n allMetadataKeys.add(meta.key);\n });\n }\n });\n\n // Generate columns for all unique metadata keys\n return Array.from(allMetadataKeys).map((key) =>\n columnHelper.accessor(\n (row: TData) => {\n // Find the metadata object with the matching key\n const metadataEntry = row.metadata?.find((meta: MetadataDto) => meta.key === key);\n return metadataEntry?.value; // Return the value for the specific key\n },\n {\n header: () => (\n <TooltipProvider delayDuration={0}>\n <Tooltip>\n <TooltipTrigger asChild>\n <span className=\"flex gap-1 items-center align-middle\">\n {key} <Info size={18} strokeWidth={'1px'} />\n </span>\n </TooltipTrigger>\n <TooltipContent>Metadata Key</TooltipContent>\n </Tooltip>\n </TooltipProvider>\n ), // Use the metadata key as the column header\n id: key,\n enableSorting: false,\n cell: (info) => {\n const value = info.getValue();\n // Handle null/undefined values\n if (value === null || value === undefined) return '';\n // For primitive types, return the string representation\n return String(value);\n },\n },\n ),\n );\n }, [dataQuery.data?.data]);\n\n /**\n * ID,createdAt and updatedAt will be added by default for all tables\n * If selection is allowed, checkbox will be added\n * If the dto has metadata, dynamics columns for all the metadata key-value will be added(particular for a view)\n * If there are actions for the table, they will be placed fixed at the right side of table.\n */\n const extendedColumns = useMemo<ColumnDef<any, any>[]>(() => {\n const _columns = [\n ...(tableActions.selection ? CHECK_BOX : []),\n ...ID_COLUMN,\n ...columns.filter((col) => col.id !== 'actions'),\n ...(metadataColumns.length ? metadataColumns : []),\n ...DEFAULT_DATE_COLUMNS,\n ...columns.filter((col) => col.id === 'actions'),\n ];\n\n return _columns;\n }, [columns, metadataColumns, dataQuery.data?.data, tableActions.selection]);\n\n // Get selected row data\n const rowSelectedData = useMemo(\n () => Object.entries(rowSelection).map((d: any) => dataQuery?.data?.data?.[d[0]]),\n [dataQuery?.data?.data, rowSelection],\n );\n\n // Use react-table's hook to create the table instance\n const table = useReactTable({\n data: dataQuery.data?.data ?? [],\n columns: extendedColumns,\n getCoreRowModel: getCoreRowModel(),\n rowCount: dataQuery.data?.total,\n manualPagination: true, // Handle pagination manually\n onPaginationChange: (updater) => {\n const newPagination = typeof updater === 'function' ? updater(pagination) : updater;\n updateTableState({ pagination: newPagination });\n },\n manualSorting: true, // Handle sorting manually\n onSortingChange: (updater) => {\n const newSorting = typeof updater === 'function' ? updater(sorting) : updater;\n updateTableState({ sorting: newSorting });\n },\n manualFiltering: true, // Handle filtering manually\n onGlobalFilterChange: (updater) => {\n const newFilters = typeof updater === 'function' ? updater(columnFilters) : updater;\n updateTableState({ columnFilters: newFilters });\n },\n onColumnVisibilityChange: (updater) => {\n const newVisibility = typeof updater === 'function' ? updater(columnVisibility) : updater;\n updateTableState({ columnVisibility: newVisibility });\n },\n onRowSelectionChange: (updater) => {\n const newSelection = typeof updater === 'function' ? updater(rowSelection) : updater;\n updateTableState({ rowSelection: newSelection });\n },\n state: {\n sorting,\n columnFilters,\n columnVisibility,\n pagination,\n rowSelection,\n },\n meta: {\n refetch: dataQuery.refetch,\n },\n });\n const stateToPass = {\n key: '',\n stateData: rowSelectedData,\n };\n\n return (\n <div className=\"flex flex-col gap-1 w-full bg-card\">\n <div className=\" px-1\">\n <TableFilter\n filterableProperties={{ ...filterableFields, ...DEFAULT_FILTERABLE_FIELDS }}\n filters={filters}\n onFiltersChange={setFilters}\n />\n </div>\n {/* Table Actions Section */}\n <div className=\"border px-1\">\n <Actions\n dataQuery={dataQuery}\n table={table}\n tableActions={tableActions}\n stateToPass={stateToPass}\n handleSearching={(value) => updateTableState({ searching: value })}\n />\n </div>\n\n {/* Table Content Section */}\n <div className=\"relative h-[60vh] z-10 overflow-x-auto border-x align-top justify-start\">\n <TableContent table={table} columns={extendedColumns} dataQuery={dataQuery} />\n </div>\n\n {/* Table Footer Section with Pagination and Column Picker */}\n <div className=\"flex overflow-auto flex-row w-full justify-between border gap-4 px-1 py-2\">\n <div className=\"flex gap-2\">\n <ColumnPicker table={table} />\n <PageSize table={table} />\n </div>\n <Paginator table={table} rowCount={dataQuery.data?.total ?? 0} />\n </div>\n </div>\n );\n}\n"],"names":["DataTable","columns","fetchFn","tableName","tableActions","columnsToHideByDefault","filterableFields","tableState","setTableState","useState","updateTableState","updates","prev","sorting","columnFilters","searching","columnVisibility","rowSelection","pagination","debouncedQuery","useDebounce","useEffect","filters","setFilters","formatedFilters","useMemo","acc","filter","property","value","operator","dataQuery","useQuery","keepPreviousData","columnHelper","createColumnHelper","metadataColumns","data","_a","allMetadataKeys","row","meta","key","metadataEntry","jsx","TooltipProvider","Tooltip","TooltipTrigger","jsxs","Info","TooltipContent","info","extendedColumns","CHECK_BOX","ID_COLUMN","col","DEFAULT_DATE_COLUMNS","_b","rowSelectedData","d","_c","table","useReactTable","_d","getCoreRowModel","_e","updater","newPagination","newSorting","newFilters","newVisibility","newSelection","stateToPass","TableFilter","DEFAULT_FILTERABLE_FIELDS","Actions","TableContent","ColumnPicker","PageSize","Paginator","_f"],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import { jsxs as p, jsx as r } from "react/jsx-runtime";
2
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 w } from "lucide-react";
3
+ import { RotateCw as f, Plus as g, Pencil as u, Trash as v } 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";
@@ -12,6 +12,7 @@ import "../ui/chart.es.js";
12
12
  import "../ui/checkbox.es.js";
13
13
  import "@radix-ui/react-collapsible";
14
14
  import "../ui/command.es.js";
15
+ import { useState as w } from "react";
15
16
  import "../ui/dialog.es.js";
16
17
  import "../ui/drawer.es.js";
17
18
  import "../ui/dropdown-menu.es.js";
@@ -25,7 +26,7 @@ import "../ui/pagination.es.js";
25
26
  import "../ui/password-input.es.js";
26
27
  import "../ui/popover.es.js";
27
28
  import "../ui/radio-group.es.js";
28
- import { SearchInput as v } from "../ui/search-input.es.js";
29
+ import { SearchInput as S } from "../ui/search-input.es.js";
29
30
  import "../ui/select.es.js";
30
31
  import "../ui/separator.es.js";
31
32
  import "../ui/sheet.es.js";
@@ -34,7 +35,6 @@ import "sonner";
34
35
  import "../ui/table.es.js";
35
36
  import "../ui/tabs.es.js";
36
37
  import "../ui/tooltip.es.js";
37
- import { useState as S } from "react";
38
38
  function te({
39
39
  table: o,
40
40
  tableActions: e,
@@ -42,7 +42,7 @@ function te({
42
42
  handleSearching: l,
43
43
  dataQuery: i
44
44
  }) {
45
- const { location: { href: m } = {} } = a(), [h, s] = S("");
45
+ const { location: { href: m } = {} } = a(), [h, s] = w("");
46
46
  return /* @__PURE__ */ p("div", { className: "flex justify-between my-0 py-2 gap-4 overflow-auto", children: [
47
47
  /* @__PURE__ */ p("div", { className: "flex gap-2", children: [
48
48
  /* @__PURE__ */ r(
@@ -54,15 +54,15 @@ function te({
54
54
  variant: "outline"
55
55
  }
56
56
  ),
57
- e.create && o.getSelectedRowModel().rows.length === 0 && /* @__PURE__ */ p(n, { to: `${m}/new`, children: [
57
+ e.create && o.getSelectedRowModel().rows.length === 0 && /* @__PURE__ */ p(n, { to: `${m}/create`, children: [
58
58
  /* @__PURE__ */ r(t, { disabled: i.isFetching, icon: g, children: "Create" }),
59
59
  " "
60
60
  ] }),
61
- o.getSelectedRowModel().rows.length > 0 && e.update && /* @__PURE__ */ r(n, { to: `${m}/update`, 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: w, variant: "destructive", children: "Delete" }) })
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" }) })
63
63
  ] }),
64
64
  (e == null ? void 0 : e.search) && /* @__PURE__ */ r("div", { className: "relative flex gap-1 justify-center items-center", children: /* @__PURE__ */ r(
65
- v,
65
+ S,
66
66
  {
67
67
  value: h,
68
68
  onChange: (d) => {
@@ -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 stateToPass: {\n key: string;\n stateData: any;\n };\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 /new to make it resuable */}\n {tableActions.create && table.getSelectedRowModel().rows.length === 0 && (\n <Link to={`${href}/new`}>\n <Button disabled={dataQuery.isFetching} icon={Plus}>\n Create\n </Button>{' '}\n </Link>\n )}\n {/* We can show ids in the url also, but then will make no sense if we are not fetching data if user has url with ids. if we add functionality of fetching selected items based on ids, then it will make sense */}\n {table.getSelectedRowModel().rows.length > 0 && tableActions.update && (\n <Link to={`${href}/update`} 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,GASG;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,QACf,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,WAAW,OAAOH,GACjC,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 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;"}