@cryptlex/web-components 5.1.1 → 5.3.0-alpha

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 (209) hide show
  1. package/dist/components/data-table/data-table-filter.d.ts +27 -0
  2. package/dist/components/data-table/data-table-filter.js +2 -0
  3. package/dist/components/data-table/data-table-filter.js.map +1 -0
  4. package/dist/components/data-table/data-table.d.ts +72 -0
  5. package/dist/components/data-table/data-table.js +2 -0
  6. package/dist/components/data-table/data-table.js.map +1 -0
  7. package/dist/components/data-table/table-commons.d.ts +56 -0
  8. package/dist/components/data-table/table-commons.js +2 -0
  9. package/dist/components/data-table/table-commons.js.map +1 -0
  10. package/dist/components/inputs/checkbox.d.ts +8 -0
  11. package/dist/components/inputs/checkbox.js +2 -0
  12. package/dist/components/inputs/checkbox.js.map +1 -0
  13. package/dist/components/inputs/date-picker.d.ts +11 -0
  14. package/dist/components/inputs/date-picker.js +2 -0
  15. package/dist/components/inputs/date-picker.js.map +1 -0
  16. package/dist/components/inputs/datefield.d.ts +14 -0
  17. package/dist/components/inputs/datefield.js +2 -0
  18. package/dist/components/inputs/datefield.js.map +1 -0
  19. package/dist/components/inputs/field.d.ts +20 -0
  20. package/dist/components/inputs/field.js +2 -0
  21. package/dist/components/inputs/field.js.map +1 -0
  22. package/dist/components/inputs/id-search.d.ts +20 -0
  23. package/dist/components/inputs/id-search.js +2 -0
  24. package/dist/components/inputs/id-search.js.map +1 -0
  25. package/dist/components/inputs/input-otp.d.ts +7 -0
  26. package/dist/components/inputs/input-otp.js +2 -0
  27. package/dist/components/inputs/input-otp.js.map +1 -0
  28. package/dist/components/inputs/multi-select.d.ts +16 -0
  29. package/dist/components/inputs/multi-select.js +2 -0
  30. package/dist/components/inputs/multi-select.js.map +1 -0
  31. package/dist/components/inputs/numberfield.d.ts +6 -0
  32. package/dist/components/inputs/numberfield.js +2 -0
  33. package/dist/components/inputs/numberfield.js.map +1 -0
  34. package/dist/components/inputs/searchfield.d.ts +5 -0
  35. package/dist/components/inputs/searchfield.js +2 -0
  36. package/dist/components/inputs/searchfield.js.map +1 -0
  37. package/dist/components/inputs/select-options.d.ts +8 -0
  38. package/dist/components/inputs/select-options.js +2 -0
  39. package/dist/components/inputs/select-options.js.map +1 -0
  40. package/dist/components/inputs/select.d.ts +17 -0
  41. package/dist/components/inputs/select.js +2 -0
  42. package/dist/components/inputs/select.js.map +1 -0
  43. package/dist/components/inputs/textfield.d.ts +7 -0
  44. package/dist/components/inputs/textfield.js +2 -0
  45. package/dist/components/inputs/textfield.js.map +1 -0
  46. package/dist/components/key-value-card/key-value-card.d.ts +17 -0
  47. package/dist/components/key-value-card/key-value-card.js +2 -0
  48. package/dist/components/key-value-card/key-value-card.js.map +1 -0
  49. package/dist/components/ui/alert.d.ts +8 -0
  50. package/dist/components/ui/alert.js +2 -0
  51. package/dist/components/ui/alert.js.map +1 -0
  52. package/dist/components/ui/avatar.d.ts +7 -0
  53. package/dist/components/ui/avatar.js +2 -0
  54. package/dist/components/ui/avatar.js.map +1 -0
  55. package/dist/components/ui/badge.d.ts +1 -0
  56. package/dist/components/ui/badge.js +2 -0
  57. package/dist/components/ui/badge.js.map +1 -0
  58. package/dist/components/ui/breadcrumbs.d.ts +10 -0
  59. package/dist/components/ui/breadcrumbs.js +2 -0
  60. package/dist/components/ui/breadcrumbs.js.map +1 -0
  61. package/dist/components/ui/button.d.ts +11 -0
  62. package/dist/components/ui/button.js +2 -0
  63. package/dist/components/ui/button.js.map +1 -0
  64. package/dist/components/ui/calendar.d.ts +16 -0
  65. package/dist/components/ui/calendar.js +2 -0
  66. package/dist/components/ui/calendar.js.map +1 -0
  67. package/dist/components/ui/card.d.ts +7 -0
  68. package/dist/components/ui/card.js +2 -0
  69. package/dist/components/ui/card.js.map +1 -0
  70. package/dist/components/ui/dialog.d.ts +18 -0
  71. package/dist/components/ui/dialog.js +2 -0
  72. package/dist/components/ui/dialog.js.map +1 -0
  73. package/dist/components/ui/disclosure.d.ts +18 -0
  74. package/dist/components/ui/disclosure.js +2 -0
  75. package/dist/components/ui/disclosure.js.map +1 -0
  76. package/dist/components/ui/list-box.d.ts +5 -0
  77. package/dist/components/ui/list-box.js +2 -0
  78. package/dist/components/ui/list-box.js.map +1 -0
  79. package/dist/components/ui/loader.d.ts +5 -0
  80. package/dist/components/ui/loader.js +2 -0
  81. package/dist/components/ui/loader.js.map +1 -0
  82. package/dist/components/ui/menu.d.ts +24 -0
  83. package/dist/components/ui/menu.js +2 -0
  84. package/dist/components/ui/menu.js.map +1 -0
  85. package/dist/components/ui/popover.d.ts +4 -0
  86. package/dist/components/ui/popover.js +2 -0
  87. package/dist/components/ui/popover.js.map +1 -0
  88. package/dist/components/ui/sidebar.d.ts +52 -0
  89. package/dist/components/ui/sidebar.js +2 -0
  90. package/dist/components/ui/sidebar.js.map +1 -0
  91. package/dist/components/ui/skeleton.d.ts +1 -0
  92. package/dist/components/ui/skeleton.js +2 -0
  93. package/dist/components/ui/skeleton.js.map +1 -0
  94. package/dist/components/ui/sonner.d.ts +4 -0
  95. package/dist/components/ui/sonner.js +2 -0
  96. package/dist/components/ui/sonner.js.map +1 -0
  97. package/dist/components/ui/table.d.ts +8 -0
  98. package/dist/components/ui/table.js +2 -0
  99. package/dist/components/ui/table.js.map +1 -0
  100. package/dist/components/ui/tabs.d.ts +5 -0
  101. package/dist/components/ui/tabs.js +2 -0
  102. package/dist/components/ui/tabs.js.map +1 -0
  103. package/dist/components/ui/timeline.d.ts +15 -0
  104. package/dist/components/ui/timeline.js +2 -0
  105. package/dist/components/ui/timeline.js.map +1 -0
  106. package/dist/components/ui/tooltip.d.ts +4 -0
  107. package/dist/components/ui/tooltip.js +2 -0
  108. package/dist/components/ui/tooltip.js.map +1 -0
  109. package/dist/utils/form-context.d.ts +4 -0
  110. package/dist/utils/form-context.js +2 -0
  111. package/dist/utils/form-context.js.map +1 -0
  112. package/dist/utils/form-hook.d.ts +23 -0
  113. package/dist/utils/form-hook.js +2 -0
  114. package/dist/utils/form-hook.js.map +1 -0
  115. package/dist/utils/primitives.d.ts +44 -0
  116. package/dist/utils/primitives.js +2 -0
  117. package/dist/utils/primitives.js.map +1 -0
  118. package/dist/utils/resource-names.d.ts +11 -0
  119. package/dist/utils/resource-names.js +2 -0
  120. package/dist/utils/resource-names.js.map +1 -0
  121. package/dist/utils/use-mobile.d.ts +1 -0
  122. package/dist/utils/use-mobile.js +2 -0
  123. package/dist/utils/use-mobile.js.map +1 -0
  124. package/package.json +33 -35
  125. package/dist/components/data-table/data-table-filter.es.js +0 -132
  126. package/dist/components/data-table/data-table-filter.es.js.map +0 -1
  127. package/dist/components/data-table/data-table.es.js +0 -412
  128. package/dist/components/data-table/data-table.es.js.map +0 -1
  129. package/dist/components/data-table/table-commons.es.js +0 -136
  130. package/dist/components/data-table/table-commons.es.js.map +0 -1
  131. package/dist/components/inputs/checkbox.es.js +0 -61
  132. package/dist/components/inputs/checkbox.es.js.map +0 -1
  133. package/dist/components/inputs/date-picker.es.js +0 -124
  134. package/dist/components/inputs/date-picker.es.js.map +0 -1
  135. package/dist/components/inputs/datefield.es.js +0 -90
  136. package/dist/components/inputs/datefield.es.js.map +0 -1
  137. package/dist/components/inputs/field.es.js +0 -91
  138. package/dist/components/inputs/field.es.js.map +0 -1
  139. package/dist/components/inputs/id-search.es.js +0 -61
  140. package/dist/components/inputs/id-search.es.js.map +0 -1
  141. package/dist/components/inputs/input-otp.es.js +0 -60
  142. package/dist/components/inputs/input-otp.es.js.map +0 -1
  143. package/dist/components/inputs/multi-select.es.js +0 -47
  144. package/dist/components/inputs/multi-select.es.js.map +0 -1
  145. package/dist/components/inputs/numberfield.es.js +0 -101
  146. package/dist/components/inputs/numberfield.es.js.map +0 -1
  147. package/dist/components/inputs/searchfield.es.js +0 -80
  148. package/dist/components/inputs/searchfield.es.js.map +0 -1
  149. package/dist/components/inputs/select-options.es.js +0 -286
  150. package/dist/components/inputs/select-options.es.js.map +0 -1
  151. package/dist/components/inputs/select.es.js +0 -113
  152. package/dist/components/inputs/select.es.js.map +0 -1
  153. package/dist/components/inputs/textfield.es.js +0 -86
  154. package/dist/components/inputs/textfield.es.js.map +0 -1
  155. package/dist/components/key-value-card/key-value-card.es.js +0 -53
  156. package/dist/components/key-value-card/key-value-card.es.js.map +0 -1
  157. package/dist/components/ui/alert.es.js +0 -29
  158. package/dist/components/ui/alert.es.js.map +0 -1
  159. package/dist/components/ui/avatar.es.js +0 -19
  160. package/dist/components/ui/avatar.es.js.map +0 -1
  161. package/dist/components/ui/badge.es.js +0 -19
  162. package/dist/components/ui/badge.es.js.map +0 -1
  163. package/dist/components/ui/breadcrumbs.es.js +0 -104
  164. package/dist/components/ui/breadcrumbs.es.js.map +0 -1
  165. package/dist/components/ui/button.es.js +0 -58
  166. package/dist/components/ui/button.es.js.map +0 -1
  167. package/dist/components/ui/calendar.es.js +0 -163
  168. package/dist/components/ui/calendar.es.js.map +0 -1
  169. package/dist/components/ui/card.es.js +0 -53
  170. package/dist/components/ui/card.es.js.map +0 -1
  171. package/dist/components/ui/dialog.es.js +0 -156
  172. package/dist/components/ui/dialog.es.js.map +0 -1
  173. package/dist/components/ui/disclosure.es.js +0 -90
  174. package/dist/components/ui/disclosure.es.js.map +0 -1
  175. package/dist/components/ui/list-box.es.js +0 -76
  176. package/dist/components/ui/list-box.es.js.map +0 -1
  177. package/dist/components/ui/loader.es.js +0 -10
  178. package/dist/components/ui/loader.es.js.map +0 -1
  179. package/dist/components/ui/menu.es.js +0 -129
  180. package/dist/components/ui/menu.es.js.map +0 -1
  181. package/dist/components/ui/popover.es.js +0 -32
  182. package/dist/components/ui/popover.es.js.map +0 -1
  183. package/dist/components/ui/sidebar.es.js +0 -456
  184. package/dist/components/ui/sidebar.es.js.map +0 -1
  185. package/dist/components/ui/skeleton.es.js +0 -9
  186. package/dist/components/ui/skeleton.es.js.map +0 -1
  187. package/dist/components/ui/sonner.es.js +0 -24
  188. package/dist/components/ui/sonner.es.js.map +0 -1
  189. package/dist/components/ui/table.es.js +0 -88
  190. package/dist/components/ui/table.es.js.map +0 -1
  191. package/dist/components/ui/tabs.es.js +0 -83
  192. package/dist/components/ui/tabs.es.js.map +0 -1
  193. package/dist/components/ui/timeline.es.js +0 -46
  194. package/dist/components/ui/timeline.es.js.map +0 -1
  195. package/dist/components/ui/tooltip.es.js +0 -28
  196. package/dist/components/ui/tooltip.es.js.map +0 -1
  197. package/dist/index.es.d.ts +0 -861
  198. package/dist/index.es.js +0 -218
  199. package/dist/index.es.js.map +0 -1
  200. package/dist/utils/form-context.es.js +0 -8
  201. package/dist/utils/form-context.es.js.map +0 -1
  202. package/dist/utils/form-hook.es.js +0 -30
  203. package/dist/utils/form-hook.es.js.map +0 -1
  204. package/dist/utils/primitives.es.js +0 -31
  205. package/dist/utils/primitives.es.js.map +0 -1
  206. package/dist/utils/resource-names.es.js +0 -182
  207. package/dist/utils/resource-names.es.js.map +0 -1
  208. package/dist/utils/use-mobile.es.js +0 -17
  209. package/dist/utils/use-mobile.es.js.map +0 -1
@@ -1,412 +0,0 @@
1
- "use client";
2
- import { jsx as e, Fragment as N, jsxs as s } from "react/jsx-runtime";
3
- import { useQuery as re, keepPreviousData as oe } from "@tanstack/react-query";
4
- import { createColumnHelper as ie, useReactTable as le, getCoreRowModel as se, flexRender as F } from "@tanstack/react-table";
5
- import { Info as ce, RotateCw as de, Columns3 as ue, GripVertical as me, ChevronFirst as ge, ChevronLeft as fe, ChevronRight as pe, ChevronLast as he, ArrowDownNarrowWide as be, ArrowDownWideNarrow as Se, ArrowUpDown as Ce } from "lucide-react";
6
- import { createContext as ye, useId as ve, useState as x, useMemo as O, useEffect as Q, useContext as xe } from "react";
7
- import { sortableKeyboardCoordinates as we, SortableContext as Ne, verticalListSortingStrategy as Te, arrayMove as De, useSortable as Pe } from "@dnd-kit/sortable";
8
- import { DataTableFilter as Ae } from "./data-table-filter.es.js";
9
- import { EasyMenu as X, MenuItem as L } from "../ui/menu.es.js";
10
- import { Table as Ie, TableHeader as ze, TableRow as $, TableHead as Me, TableBody as Fe, TableCell as Oe } from "../ui/table.es.js";
11
- import { useResourceFormatter as Le } from "../../utils/resource-names.es.js";
12
- import { useSensors as Re, useSensor as W, PointerSensor as ke, KeyboardSensor as Ee, DndContext as _e, closestCenter as Ve, DragOverlay as He } from "@dnd-kit/core";
13
- import { CSS as Ue } from "@dnd-kit/utilities";
14
- import { merge as je } from "lodash-es";
15
- import { TABLE_CHECK_BOX_COLUMN as qe, TABLE_ID_COLUMN as Be, TABLE_DEFAULT_DATE_COLUMNS as Ke } from "./table-commons.es.js";
16
- import { SearchField as Qe } from "../inputs/searchfield.es.js";
17
- import { cn as w } from "../../utils/primitives.es.js";
18
- import { Loader as $e } from "../ui/loader.es.js";
19
- import { Button as S } from "../ui/button.es.js";
20
- const R = "tableActions";
21
- function St({ columns: t, fetchFn: o, columnsToHideByDefault: i = {}, allowSelection: r = !1, filterConfig: a }) {
22
- var H, U, j;
23
- const d = ve(), [C, l] = x({
24
- /** TODO Reflect in URL */
25
- pagination: { pageIndex: 0, pageSize: 20 },
26
- // Pagination state
27
- sorting: [],
28
- // Sorting state
29
- /** Ephemeral */
30
- rowSelection: {}
31
- // Row selection state
32
- }), [c, m] = x(""), [f, y] = x([]), [b, z] = x({
33
- id: !1,
34
- updatedAt: !1,
35
- ...i
36
- }), [M, J] = x([]), k = O(() => M.reduce((n, p) => je(n, p), {}), [M]), P = (n) => {
37
- l((p) => ({ ...p, ...n }));
38
- }, {
39
- sorting: A,
40
- rowSelection: E,
41
- pagination: I
42
- } = C, v = re({
43
- queryKey: [d, I, A, c],
44
- queryFn: () => o(I, A, c, k),
45
- placeholderData: oe,
46
- // Keep previous data while loading new data
47
- retry: 0,
48
- refetchOnWindowFocus: !1
49
- });
50
- Q(() => {
51
- }, [b]);
52
- const ee = O(() => ie(), []), _ = O(() => {
53
- var B;
54
- const n = (B = v.data) == null ? void 0 : B.data;
55
- if (!(n != null && n.length)) return [];
56
- const p = (u) => u != null && typeof u == "object" && "metadata" in u && Array.isArray(u.metadata), q = n.filter(
57
- p
58
- );
59
- return q.length === 0 ? [] : Array.from(new Set(q.flatMap((u) => {
60
- var g;
61
- return ((g = u.metadata) == null ? void 0 : g.map((h) => h.key)) ?? [];
62
- }))).map((u) => ee.accessor(
63
- (g) => {
64
- var h, K;
65
- return p(g) ? ((K = (h = g == null ? void 0 : g.metadata) == null ? void 0 : h.find((ae) => ae.key === u)) == null ? void 0 : K.value) ?? "" : "";
66
- },
67
- {
68
- id: u,
69
- header: u,
70
- // tooltip header
71
- enableSorting: !1,
72
- cell: (g) => {
73
- const h = g.getValue();
74
- return h == null ? "" : String(h);
75
- }
76
- }
77
- ));
78
- }, [(H = v.data) == null ? void 0 : H.data]), te = [
79
- ...r ? qe : [],
80
- ...Be,
81
- ...t.filter((n) => n.id !== R),
82
- ..._.length ? _ : [],
83
- ...Ke,
84
- // Actions column
85
- ...t.filter((n) => n.id === R)
86
- ];
87
- function ne(n) {
88
- return typeof n == "function";
89
- }
90
- function D(n, p) {
91
- return ne(n) ? n(p) : n;
92
- }
93
- const V = le({
94
- data: ((U = v.data) == null ? void 0 : U.data) ?? [],
95
- columns: te,
96
- getCoreRowModel: se(),
97
- rowCount: (j = v.data) == null ? void 0 : j.total,
98
- manualPagination: !0,
99
- // Handle pagination manually since pagination is done server side for data tables
100
- onPaginationChange: (n) => {
101
- P({ pagination: D(n, I) });
102
- },
103
- manualSorting: !0,
104
- // Handle sorting manually since sorting is done server side for data tables
105
- onSortingChange: (n) => {
106
- P({ sorting: [...D(n, A)], rowSelection: {} });
107
- },
108
- manualFiltering: !0,
109
- // Handle filtering manually since filtering is done server side for data tables
110
- onColumnVisibilityChange: (n) => {
111
- z(D(n, b));
112
- },
113
- onRowSelectionChange: (n) => {
114
- P({ rowSelection: D(n, E) });
115
- },
116
- onColumnOrderChange: (n) => {
117
- y(D(n, f));
118
- },
119
- state: {
120
- sorting: A,
121
- columnVisibility: b,
122
- pagination: I,
123
- rowSelection: E,
124
- columnOrder: f
125
- },
126
- meta: {
127
- refetch: v.refetch
128
- }
129
- });
130
- return Q(() => {
131
- y([...V.getAllLeafColumns().map((n) => n.id)]);
132
- }, []), { tableState: C, updateTableState: P, query: v, setSearchQuery: m, searchQuery: c, tanTable: V, mergedFilters: k, filters: M, setFilters: J, filterConfig: a };
133
- }
134
- const Y = ye(null), T = () => {
135
- const t = xe(Y);
136
- if (!t)
137
- throw Error("DataTable should be used within DataTableProvider.");
138
- return t;
139
- };
140
- function Ct({ children: t, ...o }) {
141
- return /* @__PURE__ */ e(Y.Provider, { value: o, children: t });
142
- }
143
- function yt({
144
- tableActions: t,
145
- className: o,
146
- ...i
147
- // filterableFields,
148
- }) {
149
- var d;
150
- const { query: r, tanTable: a } = T();
151
- return /* @__PURE__ */ e(N, { children: /* @__PURE__ */ s("section", { ...i, className: w("flex flex-col bg-card", o), children: [
152
- /* @__PURE__ */ e(Ye, { tableActions: t }),
153
- /* @__PURE__ */ s("div", { className: "w-full overflow-auto border-x grow min-h-table relative", tabIndex: 0, children: [
154
- r.isLoading && /* @__PURE__ */ e(G, { className: "cursor-wait", children: /* @__PURE__ */ e($e, {}) }),
155
- !r.isLoading && a.getRowModel().rows.length === 0 && // Empty table
156
- /* @__PURE__ */ e(G, { className: "cursor-not-allowed", children: !r.isFetching && (r.isError ? /* @__PURE__ */ s("span", { className: "flex gap-3 justify-center items-center", children: [
157
- /* @__PURE__ */ e(ce, {}),
158
- /* @__PURE__ */ e("span", { children: "You don't have the required permissions. Please contact your admin." })
159
- ] }) : (d = r.data) != null && d.data ? /* @__PURE__ */ e(N, { children: "Unknown error. Please contact customer support." }) : /* @__PURE__ */ e(N, { children: "No results found." })) }),
160
- !r.isLoading && a.getRowModel().rows.length !== 0 && /* @__PURE__ */ e(Ze, { className: "size-full" })
161
- ] }),
162
- /* @__PURE__ */ s("div", { className: "flex w-full justify-between border gap-icon p-icon overflow-x-auto", children: [
163
- /* @__PURE__ */ s("div", { className: "flex gap-icon", children: [
164
- /* @__PURE__ */ e(We, {}),
165
- /* @__PURE__ */ e(Xe, {})
166
- ] }),
167
- /* @__PURE__ */ e(Ge, {})
168
- ] })
169
- ] }) });
170
- }
171
- function G({
172
- children: t,
173
- className: o
174
- }) {
175
- return /* @__PURE__ */ s(N, { children: [
176
- /* @__PURE__ */ e(
177
- "span",
178
- {
179
- className: w(
180
- o,
181
- "absolute top-0 bg-card z-20 size-full text-sm flex items-center justify-center"
182
- ),
183
- children: t
184
- }
185
- ),
186
- /* @__PURE__ */ e("span", { className: "relative h-full w-0 block" })
187
- ] });
188
- }
189
- function We() {
190
- const { tanTable: t, tableState: o } = T(), [i, r] = x(null), a = Le(), d = Re(
191
- W(ke),
192
- W(Ee, {
193
- coordinateGetter: we
194
- })
195
- );
196
- return /* @__PURE__ */ e(
197
- _e,
198
- {
199
- sensors: d,
200
- collisionDetection: Ve,
201
- onDragStart: (l) => {
202
- const { active: c } = l;
203
- r(c.id.toString());
204
- },
205
- onDragEnd: (l) => {
206
- const { active: c, over: m } = l;
207
- if (m && c.id !== m.id) {
208
- const f = t.getState().columnOrder, y = f.indexOf(c.id.toString()), b = f.indexOf(m.id.toString());
209
- t.setColumnOrder([...De(f, y, b)]);
210
- }
211
- r(null);
212
- },
213
- children: /* @__PURE__ */ s(
214
- Ne,
215
- {
216
- items: t.getState().columnOrder,
217
- strategy: Te,
218
- children: [
219
- /* @__PURE__ */ s(X, { label: /* @__PURE__ */ s(N, { children: [
220
- /* @__PURE__ */ e(ue, {}),
221
- "Columns"
222
- ] }), selectionMode: "multiple", items: t.getAllFlatColumns(), selectedKeys: t.getIsAllColumnsVisible() ? "all" : t.getVisibleFlatColumns().map((l) => l.id), children: [
223
- /* @__PURE__ */ e(L, { onAction: () => t.toggleAllColumnsVisible(), className: "italic", children: "(select all)" }),
224
- t.getState().columnOrder.map((l) => {
225
- const c = t.getAllFlatColumns().find((m) => m.id === l);
226
- return c ? /* @__PURE__ */ e(C, { column: c }, c.id) : null;
227
- })
228
- ] }),
229
- /* @__PURE__ */ e(He, { children: i ? /* @__PURE__ */ e("div", { className: "dropdown-item opacity-70 border-2 border-primary", children: a(i) }) : null })
230
- ]
231
- }
232
- )
233
- }
234
- );
235
- function C({ column: l }) {
236
- const {
237
- attributes: c,
238
- listeners: m,
239
- setNodeRef: f,
240
- transform: y,
241
- transition: b
242
- } = Pe({ id: l.id }), z = {
243
- transform: Ue.Transform.toString(y),
244
- transition: b,
245
- zIndex: "999"
246
- };
247
- return /* @__PURE__ */ s(
248
- L,
249
- {
250
- ref: f,
251
- style: z,
252
- ...c,
253
- id: l.id,
254
- onAction: () => l.toggleVisibility(),
255
- isDisabled: !l.getCanHide(),
256
- className: "flex items-center",
257
- children: [
258
- /* @__PURE__ */ e(me, { ...m, className: "size-icon cursor-grab" }),
259
- a(l.id),
260
- l.getIsSorted() && /* @__PURE__ */ e(Z, { className: "size-icon", direction: l.getIsSorted() })
261
- ]
262
- }
263
- );
264
- }
265
- }
266
- function Ge() {
267
- var r;
268
- const { tanTable: t, query: o } = T(), i = ((r = o.data) == null ? void 0 : r.total) ?? 0;
269
- return /* @__PURE__ */ s("div", { className: "flex items-center gap-2", children: [
270
- /* @__PURE__ */ e("span", { className: "whitespace-nowrap caption text-muted", children: `${t.getState().pagination.pageIndex * t.getState().pagination.pageSize + 1} - ${Math.min(
271
- (t.getState().pagination.pageIndex + 1) * t.getState().pagination.pageSize,
272
- i
273
- )} of ${i == null ? void 0 : i.toLocaleString()}` }),
274
- /* @__PURE__ */ e(
275
- S,
276
- {
277
- onPress: () => t.firstPage(),
278
- isDisabled: !t.getCanPreviousPage(),
279
- variant: "neutral",
280
- size: "icon",
281
- children: /* @__PURE__ */ e(ge, {})
282
- }
283
- ),
284
- /* @__PURE__ */ e(
285
- S,
286
- {
287
- onPress: () => t.previousPage(),
288
- isDisabled: !t.getCanPreviousPage(),
289
- variant: "neutral",
290
- size: "icon",
291
- children: /* @__PURE__ */ e(fe, {})
292
- }
293
- ),
294
- /* @__PURE__ */ e(
295
- S,
296
- {
297
- onPress: () => t.nextPage(),
298
- isDisabled: !t.getCanNextPage(),
299
- variant: "neutral",
300
- size: "icon",
301
- children: /* @__PURE__ */ e(pe, {})
302
- }
303
- ),
304
- /* @__PURE__ */ e(
305
- S,
306
- {
307
- onClick: () => t.lastPage(),
308
- isDisabled: !t.getCanNextPage(),
309
- variant: "neutral",
310
- size: "icon",
311
- children: /* @__PURE__ */ e(he, {})
312
- }
313
- )
314
- ] });
315
- }
316
- function Xe() {
317
- const { tanTable: t } = T(), o = [10, 20, 30, 40, 50];
318
- return /* @__PURE__ */ e(X, { label: t.getState().pagination.pageSize.toString(), selectionMode: "single", selectedKeys: [t.getState().pagination.pageSize.toString()], items: o.map((i) => ({ id: i.toString(), value: i })), children: (i) => /* @__PURE__ */ e(L, { onAction: () => t.setPageSize(i.value), children: i.value }) });
319
- }
320
- function Ye({ tableActions: t }) {
321
- const { query: o, tanTable: i, searchQuery: r, setSearchQuery: a } = T();
322
- return /* @__PURE__ */ s("section", { className: "flex bg-card justify-between my-0 p-icon border gap-icon overflow-auto", children: [
323
- /* @__PURE__ */ s("div", { className: "flex gap-icon", children: [
324
- /* @__PURE__ */ e(
325
- S,
326
- {
327
- isPending: o.isFetching,
328
- onClick: () => o.refetch(),
329
- variant: "neutral",
330
- size: "icon",
331
- children: /* @__PURE__ */ e(de, {})
332
- }
333
- ),
334
- t.filter((d) => d.bulk === i.getSelectedRowModel().rows.length > 0).map(
335
- (d, C) => {
336
- const l = d.icon;
337
- return /* @__PURE__ */ e(S, { type: "button", isDisabled: o.isFetching, className: "animate-in fade-in slide-in-from-left-15 duration-300 transition-transform", onPress: (c) => {
338
- d.onClick(c, i);
339
- }, size: "icon", children: /* @__PURE__ */ e(l, {}) }, `${C}-${d.bulk}`);
340
- }
341
- )
342
- ] }),
343
- /* @__PURE__ */ s("div", { className: "flex gap-icon", children: [
344
- /* @__PURE__ */ e(Ae, {}),
345
- /* @__PURE__ */ e(Qe, { value: r, onChange: a })
346
- ] })
347
- ] });
348
- }
349
- function Z({ direction: t, ...o }) {
350
- return t === "asc" ? /* @__PURE__ */ e(be, { ...o }) : t === "desc" ? /* @__PURE__ */ e(Se, { ...o }) : /* @__PURE__ */ e(Ce, { ...o });
351
- }
352
- function Ze({ className: t }) {
353
- const { tanTable: o } = T(), i = (r, a) => w("animate-in fade-in slide-in-from-top-10", "px-icon py-2 text-left text-sm font-medium whitespace-nowrap", r && "bg-card sticky right-0 z-50 text-center", a);
354
- return /* @__PURE__ */ s(Ie, { className: w(t), children: [
355
- /* @__PURE__ */ e(ze, { className: "sticky top-0 z-10", children: o.getHeaderGroups().map((r) => /* @__PURE__ */ e($, { className: w("h-input"), children: r.headers.map((a) => /* @__PURE__ */ s(
356
- Me,
357
- {
358
- className: i(!1, "bg-card"),
359
- children: [
360
- !a.column.getCanSort() && !a.isPlaceholder && /* @__PURE__ */ e(N, { children: F(
361
- a.column.columnDef.header,
362
- a.getContext()
363
- ) }),
364
- a.column.getCanSort() && /* @__PURE__ */ s(
365
- S,
366
- {
367
- variant: "ghost",
368
- className: "w-full !justify-start !px-1.5",
369
- onPress: a.column.getToggleSortingHandler(),
370
- children: [
371
- F(
372
- a.column.columnDef.header,
373
- a.getContext()
374
- ),
375
- /* @__PURE__ */ e(Z, { direction: a.column.getIsSorted() })
376
- ]
377
- }
378
- )
379
- ]
380
- },
381
- a.id
382
- )) }, r.id)) }),
383
- /* @__PURE__ */ e(Fe, { className: "flex-1 overflow-y-auto relative", children: o.getRowModel().rows.map((r) => /* @__PURE__ */ e(
384
- $,
385
- {
386
- className: w("h-input transition-colors data-[selected=true]:bg-primary/10 hover:bg-muted-foreground/20"),
387
- "data-selected": r.getIsSelected(),
388
- children: r.getVisibleCells().map((a) => /* @__PURE__ */ e(
389
- Oe,
390
- {
391
- className: i(a.column.id === R),
392
- children: F(
393
- a.column.columnDef.cell,
394
- a.getContext()
395
- )
396
- },
397
- a.id
398
- ))
399
- },
400
- r.id
401
- )) })
402
- ] });
403
- }
404
- export {
405
- R as ACTIONS_COLUMN_ID,
406
- yt as DataTable,
407
- Y as DataTableContext,
408
- Ct as DataTableProvider,
409
- T as useDataTable,
410
- St as useDataTableState
411
- };
412
- //# sourceMappingURL=data-table.es.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"data-table.es.js","sources":["../../../lib/components/data-table/data-table.tsx"],"sourcesContent":["\"use client\";\nimport {\n\ttype ApiFilters,\n\ttype ApiSchema,\n\tcn,\n\tLoader,\n\tSearchField,\n\tTABLE_CHECK_BOX_COLUMN,\n\tTABLE_DEFAULT_DATE_COLUMNS,\n\tTABLE_ID_COLUMN,\n\ttype TableActions,\n\ttype TableFetchFn\n} from \"@/index\";\nimport type { components, operations } from \"@cryptlex/web-api-types\";\nimport { keepPreviousData, useQuery } from \"@tanstack/react-query\";\nimport {\n\ttype AccessorFnColumnDef,\n\ttype Column,\n\ttype ColumnDef,\n\ttype ColumnOrderState,\n\tcreateColumnHelper,\n\tgetCoreRowModel,\n\ttype TableState,\n\ttype Updater,\n\tuseReactTable,\n\ttype VisibilityState\n} from \"@tanstack/react-table\";\nimport { ArrowDownNarrowWide, ArrowDownWideNarrow, ArrowUpDown, Columns3, GripVertical, Info } from \"lucide-react\";\nimport React, { createContext, useContext, useEffect, useId, useMemo, useState } from \"react\";\n\n/** Reserved name for actions column */\nexport const ACTIONS_COLUMN_ID = \"tableActions\";\n\nexport type Schemas = ApiSchema<keyof components['schemas']>;\nexport type OperationKeys = keyof operations;\n\ntype DataTableFactory<TData extends Schemas> = {\n\tfetchFn: TableFetchFn<TData, OperationKeys>;\n\tcolumns: ColumnDef<TData, any>[]\n\tallowSelection?: boolean;\n\tcolumnsToHideByDefault?: VisibilityState; // Columns that are hidden by default\n\tfilterConfig: FiltersConfig<OperationKeys>\n}\n\n\ntype DataTableState = Pick<TableState, 'sorting' | 'rowSelection' | 'pagination'> & {};\n/**\n * Hook for handling all data-table state. Used in DataTableContext\n */\nexport function useDataTableState<TData extends Schemas>({ columns, fetchFn, columnsToHideByDefault = {}, allowSelection = false, filterConfig }: DataTableFactory<TData>) {\n\tconst id = useId();\n\n\t// TODO: Would it be better for this state to be more granular?\n\tconst [tableState, _setTableState] = useState<DataTableState>({\n\t\t/** TODO Reflect in URL */\n\t\tpagination: { pageIndex: 0, pageSize: 20 }, // Pagination state\n\t\tsorting: [], // Sorting state\n\n\t\t/** Ephemeral */\n\t\trowSelection: {}, // Row selection state\n\t});\n\n\t/** TODO Reflect in URL */\n\tconst [searchQuery, setSearchQuery] = useState('');\n\n\t/** TODO Store on browser as preference */\n\tconst [columnOrder, setColumnOrder] = useState<ColumnOrderState>([])\n\t// TODO Store on browser\n\tconst [columnVisibility, setColumnVisibility] = useState<VisibilityState>({\n\t\tid: false,\n\t\tupdatedAt: false,\n\t\t...columnsToHideByDefault,\n\t});\n\n\tconst [filters, setFilters] = useState<ApiFilters<OperationKeys>[]>([]);\n\n\tconst mergedFilters = useMemo(() => {\n\t\treturn filters.reduce((acc, current) => {\n\t\t\treturn merge(acc, current);\n\t\t}, {});\n\t}, [filters])\n\n\t// Update table state with new values\n\tconst updateTableState = (updates: Partial<DataTableState>) => {\n\t\t_setTableState((prev) => ({ ...prev, ...updates }));\n\t};\n\n\tconst {\n\t\tsorting,\n\t\trowSelection,\n\t\tpagination,\n\t} = tableState;\n\n\tconst query = useQuery({\n\t\tqueryKey: [id, pagination, sorting, searchQuery],\n\t\tqueryFn: () => fetchFn(pagination, sorting, searchQuery, mergedFilters),\n\t\tplaceholderData: keepPreviousData, // Keep previous data while loading new data\n\t\tretry: 0,\n\t\trefetchOnWindowFocus: false,\n\t});\n\n\tuseEffect(() => {\n\t\t// TODO, store in localStorage\n\t}, [columnVisibility])\n\n\tconst columnHelper = useMemo(() => createColumnHelper<TData>(), []);\n\n\tconst metadataColumns = useMemo<AccessorFnColumnDef<TData, string>[]>(() => {\n\t\tconst data = query.data?.data;\n\t\tif (!data?.length) return [];\n\n\t\ttype WithMeta = TData & { metadata: ApiSchema<'MetadataDto'>[] };\n\t\tconst rowHasMetadata = (row: TData): row is WithMeta => row != null &&\n\t\t\ttypeof row === 'object' &&\n\t\t\t'metadata' in row &&\n\t\t\tArray.isArray((row).metadata);\n\n\t\tconst rowsWithMeta = data.filter(\n\t\t\trowHasMetadata\n\t\t);\n\t\tif (rowsWithMeta.length === 0) return [];\n\t\tconst keys = Array.from(new Set(rowsWithMeta.flatMap(r => r.metadata?.map(m => m.key) ?? [])));\n\n\t\treturn keys.map(key =>\n\t\t\tcolumnHelper.accessor(\n\t\t\t\t(row) => {\n\t\t\t\t\tif (rowHasMetadata(row)) {\n\t\t\t\t\t\treturn row?.metadata?.find(m => m.key === key)?.value ?? '';\n\t\t\t\t\t}\n\t\t\t\t\treturn '';\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tid: key,\n\t\t\t\t\theader: key, // tooltip header\n\t\t\t\t\tenableSorting: false,\n\t\t\t\t\tcell: (info) => {\n\t\t\t\t\t\tconst value = info.getValue();\n\t\t\t\t\t\t// Handle null/undefined values\n\t\t\t\t\t\tif (value === null || value === undefined) return \"\";\n\t\t\t\t\t\t// For primitive types, return the string representation\n\t\t\t\t\t\treturn String(value);\n\t\t\t\t\t},\n\t\t\t\t}\n\t\t\t));\n\t}, [query.data?.data]);\n\n\t/**\n\t * ID,createdAt and updatedAt will be added by default for all tables\n\t * If selection is allowed, checkbox will be added\n\t * If the dto has metadata, dynamics columns for all the metadata key-value will be added(particular for a view)\n\t * If there are actions for the table, they will be placed fixed at the right side of table.\n\t */\n\tconst cols: ColumnDef<any, any>[] = [\n\t\t...(allowSelection ? TABLE_CHECK_BOX_COLUMN : []),\n\t\t...TABLE_ID_COLUMN,\n\t\t...columns.filter((col) => col.id !== ACTIONS_COLUMN_ID),\n\t\t...(metadataColumns.length ? metadataColumns : []),\n\t\t...TABLE_DEFAULT_DATE_COLUMNS,\n\t\t// Actions column\n\t\t...columns.filter((col) => col.id === ACTIONS_COLUMN_ID),\n\t];\n\n\t// Type-guard for updater\n\tfunction isUpdaterFunction<T>(updater: Updater<T>): updater is (old: T) => T {\n\t\treturn typeof updater === \"function\";\n\t}\n\t// Utility function to resolve updater\n\tfunction resolveUpdater<T>(updater: Updater<T>, currentValue: T) {\n\t\tif (isUpdaterFunction(updater)) {\n\t\t\treturn updater(currentValue);\n\t\t}\n\t\treturn updater;\n\t}\n\n\t// Use react-table's hook to create the table instance\n\tconst tanTable = useReactTable({\n\t\tdata: query.data?.data ?? [],\n\t\tcolumns: cols,\n\t\tgetCoreRowModel: getCoreRowModel(),\n\t\trowCount: query.data?.total,\n\t\tmanualPagination: true, // Handle pagination manually since pagination is done server side for data tables\n\t\tonPaginationChange: (updater) => {\n\t\t\tupdateTableState({ pagination: resolveUpdater(updater, pagination) });\n\t\t},\n\t\tmanualSorting: true, // Handle sorting manually since sorting is done server side for data tables\n\t\tonSortingChange: (updater) => {\n\t\t\tupdateTableState({ sorting: [...resolveUpdater(updater, sorting)], rowSelection: {} }); // Reset selection when sorting.\n\t\t},\n\t\tmanualFiltering: true, // Handle filtering manually since filtering is done server side for data tables\n\t\tonColumnVisibilityChange: (updater) => {\n\t\t\tsetColumnVisibility(resolveUpdater(updater, columnVisibility));\n\t\t},\n\t\tonRowSelectionChange: (updater) => {\n\t\t\tupdateTableState({ rowSelection: resolveUpdater(updater, rowSelection) });\n\t\t},\n\t\tonColumnOrderChange: (updater) => {\n\t\t\tsetColumnOrder(resolveUpdater(updater, columnOrder));\n\t\t},\n\t\tstate: {\n\t\t\tsorting: sorting,\n\t\t\tcolumnVisibility: columnVisibility,\n\t\t\tpagination: pagination,\n\t\t\trowSelection: rowSelection,\n\t\t\tcolumnOrder: columnOrder\n\t\t},\n\t\tmeta: {\n\t\t\trefetch: query.refetch,\n\t\t},\n\t});\n\n\t// By default, ColumnDef does not give guarantees of column.id existing. Once useReactTable is called, all columns are assigned IDs.\n\t// This populates the columnIds in the columnOrder state\n\t// TODO, add localStorage access layer for this. \n\tuseEffect(() => {\n\t\tsetColumnOrder([...tanTable.getAllLeafColumns().map(c => c.id)]);\n\t}, [])\n\n\treturn { tableState, updateTableState, query, setSearchQuery, searchQuery, tanTable, mergedFilters, filters, setFilters, filterConfig }\n}\n\nexport const DataTableContext = createContext<ReturnType<typeof useDataTableState> | null>(null);\n\nexport const useDataTable = () => {\n\tconst ctx = useContext(DataTableContext);\n\tif (!ctx) {\n\t\tthrow Error(\"DataTable should be used within DataTableProvider.\")\n\t}\n\treturn ctx;\n}\n\nexport function DataTableProvider({ children, ...props }: { children: React.ReactNode; } & ReturnType<typeof useDataTableState>) {\n\treturn (\n\t\t<DataTableContext.Provider value={props}>\n\t\t\t{children}\n\t\t</DataTableContext.Provider>\n\t)\n}\n\n\nexport type DataTableProps = React.ComponentProps<'section'> & {\n\ttableActions: TableActions;\n\n\t// filterConfig: {\n\t// \tfilters: Record<keyof ApiFilters<TOperation>, 'date' | 'string' | 'known-string' | 'number'>,\n\t// }\n}\nexport function DataTable({\n\ttableActions,\n\tclassName,\n\t...props\n\t// filterableFields,\n}: DataTableProps) {\n\t// State for managing table data and filters\n\tconst { query, tanTable } = useDataTable();\n\n\treturn (\n\t\t<>\n\t\t\t{/* Table Actions Section */}\n\t\t\t<section {...props} className={cn(\"flex flex-col bg-card\", className)}>\n\t\t\t\t<Actions tableActions={tableActions} />\n\t\t\t\t{/* The div here is necessary because TableContent is internally a <table> tag and does not respect width, height CSS */}\n\t\t\t\t<div className=\"w-full overflow-auto border-x grow min-h-table relative\" tabIndex={0}>\n\t\t\t\t\t{/* Table overlay with loader */}\n\t\t\t\t\t{query.isLoading && (\n\t\t\t\t\t\t<TableOverlay className=\"cursor-wait\">\n\t\t\t\t\t\t\t<Loader />\n\t\t\t\t\t\t</TableOverlay>\n\t\t\t\t\t)}\n\t\t\t\t\t{/* Table overlay for empty table */}\n\t\t\t\t\t{!query.isLoading && tanTable.getRowModel().rows.length === 0 && (\n\t\t\t\t\t\t// Empty table\n\t\t\t\t\t\t<TableOverlay className=\"cursor-not-allowed\">\n\t\t\t\t\t\t\t{!query.isFetching &&\n\t\t\t\t\t\t\t\t(query.isError ? (\n\t\t\t\t\t\t\t\t\t<span className=\"flex gap-3 justify-center items-center\">\n\t\t\t\t\t\t\t\t\t\t{/* TODO (mudasir-pandith) Check for 403 explicitly!! */}\n\t\t\t\t\t\t\t\t\t\t{/* <span>{query.error}</span> */}\n\t\t\t\t\t\t\t\t\t\t<Info />\n\t\t\t\t\t\t\t\t\t\t<span>\n\t\t\t\t\t\t\t\t\t\t\tYou don't have the required permissions. Please contact your\n\t\t\t\t\t\t\t\t\t\t\tadmin.\n\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t) : !query.data?.data ? (\n\t\t\t\t\t\t\t\t\t<>No results found.</>\n\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t<>Unknown error. Please contact customer support.</>\n\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t</TableOverlay>\n\t\t\t\t\t)}\n\t\t\t\t\t{!query.isLoading && tanTable.getRowModel().rows.length !== 0 &&\n\t\t\t\t\t\t<TableContent className=\"size-full\" />}\n\t\t\t\t</div>\n\n\t\t\t\t{/* Table Footer Section with Pagination and Column Picker */}\n\t\t\t\t<div className=\"flex w-full justify-between border gap-icon p-icon overflow-x-auto\">\n\t\t\t\t\t<div className=\"flex gap-icon\">\n\t\t\t\t\t\t<ColumnPicker />\n\t\t\t\t\t\t<PageSize />\n\t\t\t\t\t</div>\n\t\t\t\t\t<Paginator />\n\t\t\t\t</div>\n\t\t\t</section>\n\t\t</>\n\t);\n}\n/** Table overlay to be shown for loaders or other messages */\nfunction TableOverlay({\n\tchildren,\n\tclassName,\n}: { children: React.ReactNode; className?: string }) {\n\treturn (\n\t\t<>\n\t\t\t<span\n\t\t\t\tclassName={cn(\n\t\t\t\t\tclassName,\n\t\t\t\t\t\"absolute top-0 bg-card z-20 size-full text-sm flex items-center justify-center\",\n\t\t\t\t)}\n\t\t\t>\n\t\t\t\t{children}\n\t\t\t</span>\n\t\t\t{/* Keep something in document flow with the correct height */}\n\t\t\t<span className=\"relative h-full w-0 block\" />\n\t\t</>\n\t);\n}\n\nimport {\n\tButton,\n} from \"@/index\";\nimport {\n\tarrayMove,\n\tSortableContext,\n\tsortableKeyboardCoordinates,\n\tuseSortable,\n\tverticalListSortingStrategy\n} from '@dnd-kit/sortable';\n\nfunction ColumnPicker() {\n\tconst { tanTable, tableState } = useDataTable();\n\tconst [activeId, setActiveId] = useState<string | null>(null);\n\n\tconst resourceFormatter = useResourceFormatter();\n\n\tconst sensors = useSensors(\n\t\tuseSensor(PointerSensor),\n\t\tuseSensor(KeyboardSensor, {\n\t\t\tcoordinateGetter: sortableKeyboardCoordinates,\n\t\t})\n\t);\n\treturn (\n\t\t<DndContext\n\t\t\tsensors={sensors}\n\t\t\tcollisionDetection={closestCenter}\n\t\t\tonDragStart={(event) => {\n\t\t\t\tconst { active } = event;\n\t\t\t\tsetActiveId(active.id.toString());\n\t\t\t}}\n\t\t\tonDragEnd={(event) => {\n\t\t\t\tconst { active, over } = event;\n\n\t\t\t\tif (over && active.id !== over.id) {\n\t\t\t\t\tconst columnOrder = tanTable.getState().columnOrder;\n\t\t\t\t\tconst oldIndex = columnOrder.indexOf(active.id.toString());\n\t\t\t\t\tconst newIndex = columnOrder.indexOf(over.id.toString());\n\t\t\t\t\ttanTable.setColumnOrder([...arrayMove(columnOrder, oldIndex, newIndex)]);\n\t\t\t\t}\n\n\t\t\t\tsetActiveId(null);\n\t\t\t}}\n\t\t>\n\t\t\t<SortableContext\n\t\t\t\titems={tanTable.getState().columnOrder}\n\t\t\t\tstrategy={verticalListSortingStrategy}\n\t\t\t>\n\t\t\t\t<EasyMenu label={<><Columns3 />Columns</>} selectionMode=\"multiple\" items={tanTable.getAllFlatColumns()} selectedKeys={tanTable.getIsAllColumnsVisible() ? 'all' : tanTable.getVisibleFlatColumns().map(c => c.id)}>\n\t\t\t\t\t<MenuItem onAction={() => tanTable.toggleAllColumnsVisible()} className={'italic'}>(select all)</MenuItem>\n\t\t\t\t\t{tanTable.getState().columnOrder.map(colId => {\n\t\t\t\t\t\tconst col = tanTable.getAllFlatColumns().find(c => c.id === colId);\n\t\t\t\t\t\tif (!col) return null;\n\t\t\t\t\t\treturn <SortableItem key={col.id} column={col} />\n\t\t\t\t\t})}\n\t\t\t\t</EasyMenu>\n\t\t\t\t<DragOverlay>\n\t\t\t\t\t{activeId ? <div className=\"dropdown-item opacity-70 border-2 border-primary\">{resourceFormatter(activeId)}</div> : null}\n\t\t\t\t</DragOverlay>\n\t\t\t</SortableContext>\n\t\t</DndContext>\n\t);\n\n\n\tfunction SortableItem({ column }: { column: Column<any, unknown> }) {\n\t\tconst {\n\t\t\tattributes,\n\t\t\tlisteners,\n\t\t\tsetNodeRef,\n\t\t\ttransform,\n\t\t\ttransition,\n\t\t} = useSortable({ id: column.id });\n\t\tconst style = {\n\t\t\ttransform: CSS.Transform.toString(transform),\n\t\t\ttransition,\n\t\t\tzIndex: '999'\n\t\t};\n\t\treturn <MenuItem\n\t\t\tref={setNodeRef}\n\t\t\tstyle={style}\n\t\t\t{...attributes}\n\t\t\tid={column.id}\n\t\t\tonAction={() => column.toggleVisibility()}\n\t\t\tisDisabled={!column.getCanHide()} className=\"flex items-center\">\n\t\t\t<GripVertical {...listeners} className=\"size-icon cursor-grab\" />\n\t\t\t{resourceFormatter(column.id)}\n\t\t\t{column.getIsSorted() && <SortIcon className=\"size-icon\" direction={column.getIsSorted()} />}\n\t\t</MenuItem>;\n\t}\n}\n\n\n\nimport {\n\tChevronFirst,\n\tChevronLast,\n\tChevronLeft,\n\tChevronRight,\n} from \"lucide-react\";\n\nfunction Paginator() {\n\tconst { tanTable, query } = useDataTable();\n\tconst rowCount = query.data?.total ?? 0\n\treturn (\n\t\t<div className=\"flex items-center gap-2\">\n\t\t\t<span className=\"whitespace-nowrap caption text-muted\">\n\t\t\t\t{`${tanTable.getState().pagination.pageIndex * tanTable.getState().pagination.pageSize + 1} - ${Math.min(\n\t\t\t\t\t(tanTable.getState().pagination.pageIndex + 1) *\n\t\t\t\t\ttanTable.getState().pagination.pageSize,\n\t\t\t\t\trowCount,\n\t\t\t\t)} of ${rowCount?.toLocaleString()}`}\n\t\t\t</span>\n\n\t\t\t<Button\n\t\t\t\tonPress={() => tanTable.firstPage()}\n\t\t\t\tisDisabled={!tanTable.getCanPreviousPage()}\n\t\t\t\tvariant=\"neutral\"\n\t\t\t\tsize={\"icon\"}\n\t\t\t><ChevronFirst /></Button>\n\t\t\t<Button\n\t\t\t\tonPress={() => tanTable.previousPage()}\n\t\t\t\tisDisabled={!tanTable.getCanPreviousPage()}\n\t\t\t\tvariant=\"neutral\"\n\t\t\t\tsize={\"icon\"}\n\t\t\t><ChevronLeft /></Button>\n\t\t\t<Button\n\t\t\t\tonPress={() => tanTable.nextPage()}\n\t\t\t\tisDisabled={!tanTable.getCanNextPage()}\n\t\t\t\tvariant=\"neutral\"\n\t\t\t\tsize={\"icon\"}\n\t\t\t><ChevronRight /></Button>\n\t\t\t<Button\n\t\t\t\tonClick={() => tanTable.lastPage()}\n\t\t\t\tisDisabled={!tanTable.getCanNextPage()}\n\t\t\t\tvariant=\"neutral\"\n\t\t\t\tsize={\"icon\"}\n\t\t\t><ChevronLast /></Button>\n\t\t</div>\n\t);\n}\n\n\nfunction PageSize() {\n\tconst { tanTable } = useDataTable();\n\tconst PAGE_SIZES = [10, 20, 30, 40, 50];\n\n\treturn (\n\t\t<EasyMenu label={tanTable.getState().pagination.pageSize.toString()} selectionMode=\"single\" selectedKeys={[tanTable.getState().pagination.pageSize.toString()]} items={PAGE_SIZES.map(s => ({ id: s.toString(), value: s }))}>\n\t\t\t{\n\t\t\t\t(items) => <MenuItem onAction={() => tanTable.setPageSize(items.value)}>{items.value}</MenuItem>\n\t\t\t}\n\t\t</EasyMenu>\n\t);\n}\n\n\nimport { RotateCw } from \"lucide-react\";\n\nfunction Actions({ tableActions }: { tableActions: TableActions }) {\n\tconst { query, tanTable, searchQuery, setSearchQuery } = useDataTable();\n\n\treturn (\n\t\t<section className=\"flex bg-card justify-between my-0 p-icon border gap-icon overflow-auto\">\n\t\t\t<div className=\"flex gap-icon\">\n\t\t\t\t<Button\n\t\t\t\t\tisPending={query.isFetching}\n\t\t\t\t\tonClick={() => query.refetch()}\n\t\t\t\t\tvariant={\"neutral\"}\n\t\t\t\t\tsize={\"icon\"}\n\t\t\t\t><RotateCw /></Button>\n\n\t\t\t\t{tableActions\n\t\t\t\t\t.filter(ta => ta.bulk === tanTable.getSelectedRowModel().rows.length > 0)\n\t\t\t\t\t.map((ta, i) => {\n\t\t\t\t\t\tconst Icon = ta.icon;\n\t\t\t\t\t\treturn (<Button key={`${i}-${ta.bulk}`} type=\"button\" isDisabled={query.isFetching} className=\"animate-in fade-in slide-in-from-left-15 duration-300 transition-transform\" onPress={(e) => { ta.onClick(e, tanTable) }} size={'icon'}><Icon /></Button>)\n\t\t\t\t\t}\n\t\t\t\t\t)}\n\t\t\t</div>\n\t\t\t<div className=\"flex gap-icon\">\n\t\t\t\t<DataTableFilter />\n\t\t\t\t{(\n\t\t\t\t\t<SearchField value={searchQuery} onChange={setSearchQuery} />\n\t\t\t\t)}\n\t\t\t</div>\n\t\t</section>\n\t);\n}\n\n\nimport { DataTableFilter, type FiltersConfig } from \"@/components/data-table/data-table-filter\";\nimport { EasyMenu, MenuItem } from \"@/components/ui/menu\";\nimport {\n\tTableBody,\n\tTableCell,\n\tTable as TableComponent,\n\tTableHead,\n\tTableHeader,\n\tTableRow,\n} from \"@/components/ui/table\";\nimport { useResourceFormatter } from \"@/utils/resource-names\";\nimport { closestCenter, DndContext, DragOverlay, KeyboardSensor, PointerSensor, useSensor, useSensors } from \"@dnd-kit/core\";\nimport { CSS } from \"@dnd-kit/utilities\";\nimport {\n\tflexRender\n} from \"@tanstack/react-table\";\nimport { merge } from \"lodash-es\";\n\nfunction SortIcon({ direction, ...props }: { direction: 'asc' | 'desc' | false } & Omit<React.ComponentProps<'svg'>, 'direction'>) {\n\tif (direction === 'asc') return <ArrowDownNarrowWide {...props} />\n\telse if (direction === 'desc') return <ArrowDownWideNarrow {...props} />\n\telse return <ArrowUpDown {...props} />\n}\n\n// TODO, automate checking valid HTML\nfunction TableContent({ className }: React.ComponentProps<typeof TableComponent>) {\n\tconst { tanTable } = useDataTable();\n\tconst tableCellStyle = (isSticky: boolean, className?: string) => cn(\"animate-in fade-in slide-in-from-top-10\", \"px-icon py-2 text-left text-sm font-medium whitespace-nowrap\", isSticky && \"bg-card sticky right-0 z-50 text-center\", className)\n\treturn (\n\t\t<TableComponent className={cn(className)}>\n\t\t\t<TableHeader className=\"sticky top-0 z-10\">\n\t\t\t\t{tanTable.getHeaderGroups().map((headerGroup) => (\n\t\t\t\t\t<TableRow className={cn(\"h-input\")} key={headerGroup.id}>\n\t\t\t\t\t\t{headerGroup.headers.map((header) => (\n\t\t\t\t\t\t\t<TableHead\n\t\t\t\t\t\t\t\tkey={header.id}\n\t\t\t\t\t\t\t\tclassName={tableCellStyle(false, \"bg-card\")}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{!header.column.getCanSort() && !header.isPlaceholder\n\t\t\t\t\t\t\t\t\t&& <>{flexRender(\n\t\t\t\t\t\t\t\t\t\theader.column.columnDef.header,\n\t\t\t\t\t\t\t\t\t\theader.getContext(),\n\t\t\t\t\t\t\t\t\t)}</>}\n\t\t\t\t\t\t\t\t{/* TODO Align header text with table text */}\n\t\t\t\t\t\t\t\t{header.column.getCanSort() && (\n\t\t\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\t\t\tvariant=\"ghost\"\n\t\t\t\t\t\t\t\t\t\tclassName=\"w-full !justify-start !px-1.5\"\n\t\t\t\t\t\t\t\t\t\tonPress={header.column.getToggleSortingHandler()}\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t{flexRender(\n\t\t\t\t\t\t\t\t\t\t\theader.column.columnDef.header,\n\t\t\t\t\t\t\t\t\t\t\theader.getContext(),\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t<SortIcon direction={header.column.getIsSorted()} />\n\t\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t</TableHead>\n\t\t\t\t\t\t))}\n\t\t\t\t\t</TableRow>\n\t\t\t\t))}\n\t\t\t</TableHeader>\n\t\t\t<TableBody className=\"flex-1 overflow-y-auto relative\">\n\t\t\t\t{tanTable.getRowModel().rows.map((row) => (\n\t\t\t\t\t<TableRow\n\t\t\t\t\t\tclassName={cn(\"h-input transition-colors data-[selected=true]:bg-primary/10 hover:bg-muted-foreground/20\")}\n\t\t\t\t\t\tkey={row.id}\n\t\t\t\t\t\tdata-selected={row.getIsSelected()}\n\t\t\t\t\t>\n\t\t\t\t\t\t{row.getVisibleCells().map((cell) => (\n\t\t\t\t\t\t\t<TableCell\n\t\t\t\t\t\t\t\tkey={cell.id}\n\t\t\t\t\t\t\t\tclassName={tableCellStyle(cell.column.id === ACTIONS_COLUMN_ID)}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{flexRender(\n\t\t\t\t\t\t\t\t\tcell.column.columnDef.cell,\n\t\t\t\t\t\t\t\t\tcell.getContext(),\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t</TableCell>\n\t\t\t\t\t\t))}\n\t\t\t\t\t</TableRow>\n\t\t\t\t))}\n\t\t\t</TableBody>\n\t\t</TableComponent>\n\t);\n}\n"],"names":["ACTIONS_COLUMN_ID","useDataTableState","columns","fetchFn","columnsToHideByDefault","allowSelection","filterConfig","id","useId","tableState","_setTableState","useState","searchQuery","setSearchQuery","columnOrder","setColumnOrder","columnVisibility","setColumnVisibility","filters","setFilters","mergedFilters","useMemo","acc","current","merge","updateTableState","updates","prev","sorting","rowSelection","pagination","query","useQuery","keepPreviousData","useEffect","columnHelper","createColumnHelper","metadataColumns","data","_a","rowHasMetadata","row","rowsWithMeta","r","m","key","_b","info","value","cols","TABLE_CHECK_BOX_COLUMN","TABLE_ID_COLUMN","col","TABLE_DEFAULT_DATE_COLUMNS","isUpdaterFunction","updater","resolveUpdater","currentValue","tanTable","useReactTable","getCoreRowModel","_c","c","DataTableContext","createContext","useDataTable","ctx","useContext","DataTableProvider","children","props","DataTable","tableActions","className","jsx","Fragment","cn","Actions","jsxs","TableOverlay","Loader","Info","TableContent","ColumnPicker","PageSize","Paginator","activeId","setActiveId","resourceFormatter","useResourceFormatter","sensors","useSensors","useSensor","PointerSensor","KeyboardSensor","sortableKeyboardCoordinates","DndContext","closestCenter","event","active","over","oldIndex","newIndex","arrayMove","SortableContext","verticalListSortingStrategy","EasyMenu","Columns3","MenuItem","colId","SortableItem","DragOverlay","column","attributes","listeners","setNodeRef","transform","transition","useSortable","style","CSS","GripVertical","SortIcon","rowCount","Button","ChevronFirst","ChevronLeft","ChevronRight","ChevronLast","PAGE_SIZES","s","items","RotateCw","ta","i","Icon","e","DataTableFilter","SearchField","direction","ArrowDownNarrowWide","ArrowDownWideNarrow","ArrowUpDown","tableCellStyle","isSticky","TableComponent","TableHeader","headerGroup","TableRow","header","TableHead","flexRender","TableBody","cell","TableCell"],"mappings":";;;;;;;;;;;;;;;;;;;AA+BO,MAAMA,IAAoB;AAkB1B,SAASC,GAAyC,EAAE,SAAAC,GAAS,SAAAC,GAAS,wBAAAC,IAAyB,CAAA,GAAI,gBAAAC,IAAiB,IAAO,cAAAC,KAAyC;;AAC1K,QAAMC,IAAKC,GAAA,GAGL,CAACC,GAAYC,CAAc,IAAIC,EAAyB;AAAA;AAAA,IAE7D,YAAY,EAAE,WAAW,GAAG,UAAU,GAAA;AAAA;AAAA,IACtC,SAAS,CAAA;AAAA;AAAA;AAAA,IAGT,cAAc,CAAA;AAAA;AAAA,EAAC,CACf,GAGK,CAACC,GAAaC,CAAc,IAAIF,EAAS,EAAE,GAG3C,CAACG,GAAaC,CAAc,IAAIJ,EAA2B,CAAA,CAAE,GAE7D,CAACK,GAAkBC,CAAmB,IAAIN,EAA0B;AAAA,IACzE,IAAI;AAAA,IACJ,WAAW;AAAA,IACX,GAAGP;AAAA,EAAA,CACH,GAEK,CAACc,GAASC,CAAU,IAAIR,EAAsC,CAAA,CAAE,GAEhES,IAAgBC,EAAQ,MACtBH,EAAQ,OAAO,CAACI,GAAKC,MACpBC,GAAMF,GAAKC,CAAO,GACvB,CAAA,CAAE,GACH,CAACL,CAAO,CAAC,GAGNO,IAAmB,CAACC,MAAqC;AAC9D,IAAAhB,EAAe,CAACiB,OAAU,EAAE,GAAGA,GAAM,GAAGD,IAAU;AAAA,EACnD,GAEM;AAAA,IACL,SAAAE;AAAA,IACA,cAAAC;AAAA,IACA,YAAAC;AAAA,EAAA,IACGrB,GAEEsB,IAAQC,GAAS;AAAA,IACtB,UAAU,CAACzB,GAAIuB,GAAYF,GAAShB,CAAW;AAAA,IAC/C,SAAS,MAAMT,EAAQ2B,GAAYF,GAAShB,GAAaQ,CAAa;AAAA,IACtE,iBAAiBa;AAAA;AAAA,IACjB,OAAO;AAAA,IACP,sBAAsB;AAAA,EAAA,CACtB;AAED,EAAAC,EAAU,MAAM;AAAA,EAEhB,GAAG,CAAClB,CAAgB,CAAC;AAErB,QAAMmB,KAAed,EAAQ,MAAMe,GAAA,GAA6B,CAAA,CAAE,GAE5DC,IAAkBhB,EAA8C,MAAM;;AAC3E,UAAMiB,KAAOC,IAAAR,EAAM,SAAN,gBAAAQ,EAAY;AACzB,QAAI,EAACD,KAAA,QAAAA,EAAM,QAAQ,QAAO,CAAA;AAG1B,UAAME,IAAiB,CAACC,MAAgCA,KAAO,QAC9D,OAAOA,KAAQ,YACf,cAAcA,KACd,MAAM,QAASA,EAAK,QAAQ,GAEvBC,IAAeJ,EAAK;AAAA,MACzBE;AAAA,IAAA;AAED,WAAIE,EAAa,WAAW,IAAU,CAAA,IACzB,MAAM,KAAK,IAAI,IAAIA,EAAa,QAAQ,CAAAC,MAAA;;AAAK,eAAAJ,IAAAI,EAAE,aAAF,gBAAAJ,EAAY,IAAI,OAAKK,EAAE,SAAQ,CAAA;AAAA,KAAE,CAAC,CAAC,EAEjF,IAAI,CAAAC,MACfV,GAAa;AAAA,MACZ,CAACM,MAAQ;;AACR,eAAID,EAAeC,CAAG,MACdK,KAAAP,IAAAE,KAAA,gBAAAA,EAAK,aAAL,gBAAAF,EAAe,KAAK,CAAAK,OAAKA,GAAE,QAAQC,OAAnC,gBAAAC,EAAyC,UAAS,KAEnD;AAAA,MACR;AAAA,MACA;AAAA,QACC,IAAID;AAAA,QACJ,QAAQA;AAAA;AAAA,QACR,eAAe;AAAA,QACf,MAAM,CAACE,MAAS;AACf,gBAAMC,IAAQD,EAAK,SAAA;AAEnB,iBAAIC,KAAU,OAAoC,KAE3C,OAAOA,CAAK;AAAA,QACpB;AAAA,MAAA;AAAA,IACD,CACA;AAAA,EACH,GAAG,EAACT,IAAAR,EAAM,SAAN,gBAAAQ,EAAY,IAAI,CAAC,GAQfU,KAA8B;AAAA,IACnC,GAAI5C,IAAiB6C,KAAyB,CAAA;AAAA,IAC9C,GAAGC;AAAA,IACH,GAAGjD,EAAQ,OAAO,CAACkD,MAAQA,EAAI,OAAOpD,CAAiB;AAAA,IACvD,GAAIqC,EAAgB,SAASA,IAAkB,CAAA;AAAA,IAC/C,GAAGgB;AAAA;AAAA,IAEH,GAAGnD,EAAQ,OAAO,CAACkD,MAAQA,EAAI,OAAOpD,CAAiB;AAAA,EAAA;AAIxD,WAASsD,GAAqBC,GAA+C;AAC5E,WAAO,OAAOA,KAAY;AAAA,EAC3B;AAEA,WAASC,EAAkBD,GAAqBE,GAAiB;AAChE,WAAIH,GAAkBC,CAAO,IACrBA,EAAQE,CAAY,IAErBF;AAAA,EACR;AAGA,QAAMG,IAAWC,GAAc;AAAA,IAC9B,QAAMb,IAAAf,EAAM,SAAN,gBAAAe,EAAY,SAAQ,CAAA;AAAA,IAC1B,SAASG;AAAA,IACT,iBAAiBW,GAAA;AAAA,IACjB,WAAUC,IAAA9B,EAAM,SAAN,gBAAA8B,EAAY;AAAA,IACtB,kBAAkB;AAAA;AAAA,IAClB,oBAAoB,CAACN,MAAY;AAChC,MAAA9B,EAAiB,EAAE,YAAY+B,EAAeD,GAASzB,CAAU,GAAG;AAAA,IACrE;AAAA,IACA,eAAe;AAAA;AAAA,IACf,iBAAiB,CAACyB,MAAY;AAC7B,MAAA9B,EAAiB,EAAE,SAAS,CAAC,GAAG+B,EAAeD,GAAS3B,CAAO,CAAC,GAAG,cAAc,CAAA,GAAI;AAAA,IACtF;AAAA,IACA,iBAAiB;AAAA;AAAA,IACjB,0BAA0B,CAAC2B,MAAY;AACtC,MAAAtC,EAAoBuC,EAAeD,GAASvC,CAAgB,CAAC;AAAA,IAC9D;AAAA,IACA,sBAAsB,CAACuC,MAAY;AAClC,MAAA9B,EAAiB,EAAE,cAAc+B,EAAeD,GAAS1B,CAAY,GAAG;AAAA,IACzE;AAAA,IACA,qBAAqB,CAAC0B,MAAY;AACjC,MAAAxC,EAAeyC,EAAeD,GAASzC,CAAW,CAAC;AAAA,IACpD;AAAA,IACA,OAAO;AAAA,MACN,SAAAc;AAAA,MACA,kBAAAZ;AAAA,MACA,YAAAc;AAAA,MACA,cAAAD;AAAA,MACA,aAAAf;AAAA,IAAA;AAAA,IAED,MAAM;AAAA,MACL,SAASiB,EAAM;AAAA,IAAA;AAAA,EAChB,CACA;AAKD,SAAAG,EAAU,MAAM;AACf,IAAAnB,EAAe,CAAC,GAAG2C,EAAS,kBAAA,EAAoB,IAAI,CAAAI,MAAKA,EAAE,EAAE,CAAC,CAAC;AAAA,EAChE,GAAG,CAAA,CAAE,GAEE,EAAE,YAAArD,GAAY,kBAAAgB,GAAkB,OAAAM,GAAO,gBAAAlB,GAAgB,aAAAD,GAAa,UAAA8C,GAAU,eAAAtC,GAAe,SAAAF,GAAS,YAAAC,GAAY,cAAAb,EAAA;AAC1H;AAEO,MAAMyD,IAAmBC,GAA2D,IAAI,GAElFC,IAAe,MAAM;AACjC,QAAMC,IAAMC,GAAWJ,CAAgB;AACvC,MAAI,CAACG;AACJ,UAAM,MAAM,oDAAoD;AAEjE,SAAOA;AACR;AAEO,SAASE,GAAkB,EAAE,UAAAC,GAAU,GAAGC,KAAgF;AAChI,2BACEP,EAAiB,UAAjB,EAA0B,OAAOO,GAChC,UAAAD,GACF;AAEF;AAUO,SAASE,GAAU;AAAA,EACzB,cAAAC;AAAA,EACA,WAAAC;AAAA,EACA,GAAGH;AAAA;AAEJ,GAAmB;;AAElB,QAAM,EAAE,OAAAvC,GAAO,UAAA2B,EAAA,IAAaO,EAAA;AAE5B,SACC,gBAAAS,EAAAC,GAAA,EAEC,4BAAC,WAAA,EAAS,GAAGL,GAAO,WAAWM,EAAG,yBAAyBH,CAAS,GACnE,UAAA;AAAA,IAAA,gBAAAC,EAACG,MAAQ,cAAAL,GAA4B;AAAA,IAErC,gBAAAM,EAAC,OAAA,EAAI,WAAU,2DAA0D,UAAU,GAEjF,UAAA;AAAA,MAAA/C,EAAM,aACN,gBAAA2C,EAACK,GAAA,EAAa,WAAU,eACvB,UAAA,gBAAAL,EAACM,MAAO,EAAA,CACT;AAAA,MAGA,CAACjD,EAAM,aAAa2B,EAAS,YAAA,EAAc,KAAK,WAAW;AAAA,MAE3D,gBAAAgB,EAACK,GAAA,EAAa,WAAU,sBACtB,UAAA,CAAChD,EAAM,eACNA,EAAM,UACN,gBAAA+C,EAAC,QAAA,EAAK,WAAU,0CAGf,UAAA;AAAA,QAAA,gBAAAJ,EAACO,IAAA,EAAK;AAAA,QACN,gBAAAP,EAAC,UAAK,UAAA,sEAAA,CAGN;AAAA,MAAA,EAAA,CACD,KACInC,IAAAR,EAAM,SAAN,QAAAQ,EAAY,OAGhB,gBAAAmC,EAAAC,GAAA,EAAE,UAAA,kDAAA,CAA+C,2BAF/C,UAAA,oBAAA,CAAiB,IAItB;AAAA,MAEA,CAAC5C,EAAM,aAAa2B,EAAS,YAAA,EAAc,KAAK,WAAW,KAC3D,gBAAAgB,EAACQ,IAAA,EAAa,WAAU,YAAA,CAAY;AAAA,IAAA,GACtC;AAAA,IAGA,gBAAAJ,EAAC,OAAA,EAAI,WAAU,sEACd,UAAA;AAAA,MAAA,gBAAAA,EAAC,OAAA,EAAI,WAAU,iBACd,UAAA;AAAA,QAAA,gBAAAJ,EAACS,IAAA,EAAa;AAAA,0BACbC,IAAA,CAAA,CAAS;AAAA,MAAA,GACX;AAAA,wBACCC,IAAA,CAAA,CAAU;AAAA,IAAA,EAAA,CACZ;AAAA,EAAA,EAAA,CACD,EAAA,CACD;AAEF;AAEA,SAASN,EAAa;AAAA,EACrB,UAAAV;AAAA,EACA,WAAAI;AACD,GAAsD;AACrD,SACC,gBAAAK,EAAAH,GAAA,EACC,UAAA;AAAA,IAAA,gBAAAD;AAAA,MAAC;AAAA,MAAA;AAAA,QACA,WAAWE;AAAA,UACVH;AAAA,UACA;AAAA,QAAA;AAAA,QAGA,UAAAJ;AAAA,MAAA;AAAA,IAAA;AAAA,IAGF,gBAAAK,EAAC,QAAA,EAAK,WAAU,4BAAA,CAA4B;AAAA,EAAA,GAC7C;AAEF;AAaA,SAASS,KAAe;AACvB,QAAM,EAAE,UAAAzB,GAAU,YAAAjD,EAAA,IAAewD,EAAA,GAC3B,CAACqB,GAAUC,CAAW,IAAI5E,EAAwB,IAAI,GAEtD6E,IAAoBC,GAAA,GAEpBC,IAAUC;AAAA,IACfC,EAAUC,EAAa;AAAA,IACvBD,EAAUE,IAAgB;AAAA,MACzB,kBAAkBC;AAAA,IAAA,CAClB;AAAA,EAAA;AAEF,SACC,gBAAArB;AAAA,IAACsB;AAAA,IAAA;AAAA,MACA,SAAAN;AAAA,MACA,oBAAoBO;AAAA,MACpB,aAAa,CAACC,MAAU;AACvB,cAAM,EAAE,QAAAC,MAAWD;AACnB,QAAAX,EAAYY,EAAO,GAAG,UAAU;AAAA,MACjC;AAAA,MACA,WAAW,CAACD,MAAU;AACrB,cAAM,EAAE,QAAAC,GAAQ,MAAAC,EAAA,IAASF;AAEzB,YAAIE,KAAQD,EAAO,OAAOC,EAAK,IAAI;AAClC,gBAAMtF,IAAc4C,EAAS,SAAA,EAAW,aAClC2C,IAAWvF,EAAY,QAAQqF,EAAO,GAAG,UAAU,GACnDG,IAAWxF,EAAY,QAAQsF,EAAK,GAAG,UAAU;AACvD,UAAA1C,EAAS,eAAe,CAAC,GAAG6C,GAAUzF,GAAauF,GAAUC,CAAQ,CAAC,CAAC;AAAA,QACxE;AAEA,QAAAf,EAAY,IAAI;AAAA,MACjB;AAAA,MAEA,UAAA,gBAAAT;AAAA,QAAC0B;AAAA,QAAA;AAAA,UACA,OAAO9C,EAAS,SAAA,EAAW;AAAA,UAC3B,UAAU+C;AAAA,UAEV,UAAA;AAAA,YAAA,gBAAA3B,EAAC4B,GAAA,EAAS,OAAO,gBAAA5B,EAAAH,GAAA,EAAE,UAAA;AAAA,cAAA,gBAAAD,EAACiC,IAAA,EAAS;AAAA,cAAE;AAAA,YAAA,GAAO,GAAK,eAAc,YAAW,OAAOjD,EAAS,kBAAA,GAAqB,cAAcA,EAAS,2BAA2B,QAAQA,EAAS,sBAAA,EAAwB,IAAI,CAAAI,MAAKA,EAAE,EAAE,GAChN,UAAA;AAAA,cAAA,gBAAAY,EAACkC,GAAA,EAAS,UAAU,MAAMlD,EAAS,2BAA2B,WAAW,UAAU,UAAA,eAAA,CAAY;AAAA,cAC9FA,EAAS,SAAA,EAAW,YAAY,IAAI,CAAAmD,MAAS;AAC7C,sBAAMzD,IAAMM,EAAS,oBAAoB,KAAK,CAAAI,MAAKA,EAAE,OAAO+C,CAAK;AACjE,uBAAKzD,IACE,gBAAAsB,EAACoC,GAAA,EAA0B,QAAQ1D,EAAA,GAAhBA,EAAI,EAAiB,IAD9B;AAAA,cAElB,CAAC;AAAA,YAAA,GACF;AAAA,YACA,gBAAAsB,EAACqC,IAAA,EACC,UAAAzB,IAAW,gBAAAZ,EAAC,OAAA,EAAI,WAAU,oDAAoD,UAAAc,EAAkBF,CAAQ,EAAA,CAAE,IAAS,KAAA,CACrH;AAAA,UAAA;AAAA,QAAA;AAAA,MAAA;AAAA,IACD;AAAA,EAAA;AAKF,WAASwB,EAAa,EAAE,QAAAE,KAA4C;AACnE,UAAM;AAAA,MACL,YAAAC;AAAA,MACA,WAAAC;AAAA,MACA,YAAAC;AAAA,MACA,WAAAC;AAAA,MACA,YAAAC;AAAA,IAAA,IACGC,GAAY,EAAE,IAAIN,EAAO,IAAI,GAC3BO,IAAQ;AAAA,MACb,WAAWC,GAAI,UAAU,SAASJ,CAAS;AAAA,MAC3C,YAAAC;AAAA,MACA,QAAQ;AAAA,IAAA;AAET,WAAO,gBAAAvC;AAAA,MAAC8B;AAAA,MAAA;AAAA,QACP,KAAKO;AAAA,QACL,OAAAI;AAAA,QACC,GAAGN;AAAA,QACJ,IAAID,EAAO;AAAA,QACX,UAAU,MAAMA,EAAO,iBAAA;AAAA,QACvB,YAAY,CAACA,EAAO,WAAA;AAAA,QAAc,WAAU;AAAA,QAC5C,UAAA;AAAA,UAAA,gBAAAtC,EAAC+C,IAAA,EAAc,GAAGP,GAAW,WAAU,wBAAA,CAAwB;AAAA,UAC9D1B,EAAkBwB,EAAO,EAAE;AAAA,UAC3BA,EAAO,YAAA,KAAiB,gBAAAtC,EAACgD,GAAA,EAAS,WAAU,aAAY,WAAWV,EAAO,cAAY,CAAG;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA;AAAA,EAE5F;AACD;AAWA,SAAS3B,KAAY;;AACpB,QAAM,EAAE,UAAA3B,GAAU,OAAA3B,EAAA,IAAUkC,EAAA,GACtB0D,MAAWpF,IAAAR,EAAM,SAAN,gBAAAQ,EAAY,UAAS;AACtC,SACC,gBAAAuC,EAAC,OAAA,EAAI,WAAU,2BACd,UAAA;AAAA,IAAA,gBAAAJ,EAAC,UAAK,WAAU,wCACd,UAAA,GAAGhB,EAAS,WAAW,WAAW,YAAYA,EAAS,WAAW,WAAW,WAAW,CAAC,MAAM,KAAK;AAAA,OACnGA,EAAS,WAAW,WAAW,YAAY,KAC5CA,EAAS,WAAW,WAAW;AAAA,MAC/BiE;AAAA,IAAA,CACA,OAAOA,KAAA,gBAAAA,EAAU,gBAAgB,GAAA,CACnC;AAAA,IAEA,gBAAAjD;AAAA,MAACkD;AAAA,MAAA;AAAA,QACA,SAAS,MAAMlE,EAAS,UAAA;AAAA,QACxB,YAAY,CAACA,EAAS,mBAAA;AAAA,QACtB,SAAQ;AAAA,QACR,MAAM;AAAA,QACN,4BAACmE,IAAA,CAAA,CAAa;AAAA,MAAA;AAAA,IAAA;AAAA,IACf,gBAAAnD;AAAA,MAACkD;AAAA,MAAA;AAAA,QACA,SAAS,MAAMlE,EAAS,aAAA;AAAA,QACxB,YAAY,CAACA,EAAS,mBAAA;AAAA,QACtB,SAAQ;AAAA,QACR,MAAM;AAAA,QACN,4BAACoE,IAAA,CAAA,CAAY;AAAA,MAAA;AAAA,IAAA;AAAA,IACd,gBAAApD;AAAA,MAACkD;AAAA,MAAA;AAAA,QACA,SAAS,MAAMlE,EAAS,SAAA;AAAA,QACxB,YAAY,CAACA,EAAS,eAAA;AAAA,QACtB,SAAQ;AAAA,QACR,MAAM;AAAA,QACN,4BAACqE,IAAA,CAAA,CAAa;AAAA,MAAA;AAAA,IAAA;AAAA,IACf,gBAAArD;AAAA,MAACkD;AAAA,MAAA;AAAA,QACA,SAAS,MAAMlE,EAAS,SAAA;AAAA,QACxB,YAAY,CAACA,EAAS,eAAA;AAAA,QACtB,SAAQ;AAAA,QACR,MAAM;AAAA,QACN,4BAACsE,IAAA,CAAA,CAAY;AAAA,MAAA;AAAA,IAAA;AAAA,EAAE,GACjB;AAEF;AAGA,SAAS5C,KAAW;AACnB,QAAM,EAAE,UAAA1B,EAAA,IAAaO,EAAA,GACfgE,IAAa,CAAC,IAAI,IAAI,IAAI,IAAI,EAAE;AAEtC,SACC,gBAAAvD,EAACgC,KAAS,OAAOhD,EAAS,WAAW,WAAW,SAAS,SAAA,GAAY,eAAc,UAAS,cAAc,CAACA,EAAS,SAAA,EAAW,WAAW,SAAS,UAAU,GAAG,OAAOuE,EAAW,IAAI,CAAAC,OAAM,EAAE,IAAIA,EAAE,SAAA,GAAY,OAAOA,EAAA,EAAI,GAEzN,UAAA,CAACC,wBAAWvB,GAAA,EAAS,UAAU,MAAMlD,EAAS,YAAYyE,EAAM,KAAK,GAAI,UAAAA,EAAM,MAAA,CAAM,EAAA,CAEvF;AAEF;AAKA,SAAStD,GAAQ,EAAE,cAAAL,KAAgD;AAClE,QAAM,EAAE,OAAAzC,GAAO,UAAA2B,GAAU,aAAA9C,GAAa,gBAAAC,EAAA,IAAmBoD,EAAA;AAEzD,SACC,gBAAAa,EAAC,WAAA,EAAQ,WAAU,0EAClB,UAAA;AAAA,IAAA,gBAAAA,EAAC,OAAA,EAAI,WAAU,iBACd,UAAA;AAAA,MAAA,gBAAAJ;AAAA,QAACkD;AAAA,QAAA;AAAA,UACA,WAAW7F,EAAM;AAAA,UACjB,SAAS,MAAMA,EAAM,QAAA;AAAA,UACrB,SAAS;AAAA,UACT,MAAM;AAAA,UACN,4BAACqG,IAAA,CAAA,CAAS;AAAA,QAAA;AAAA,MAAA;AAAA,MAEV5D,EACC,OAAO,CAAA6D,MAAMA,EAAG,SAAS3E,EAAS,oBAAA,EAAsB,KAAK,SAAS,CAAC,EACvE;AAAA,QAAI,CAAC2E,GAAIC,MAAM;AACf,gBAAMC,IAAOF,EAAG;AAChB,iBAAQ,gBAAA3D,EAACkD,GAAA,EAA+B,MAAK,UAAS,YAAY7F,EAAM,YAAY,WAAU,8EAA6E,SAAS,CAACyG,MAAM;AAAE,YAAAH,EAAG,QAAQG,GAAG9E,CAAQ;AAAA,UAAE,GAAG,MAAM,QAAQ,UAAA,gBAAAgB,EAAC6D,GAAA,CAAA,CAAK,EAAA,GAAvN,GAAGD,CAAC,IAAID,EAAG,IAAI,EAA0M;AAAA,QAC/O;AAAA,MAAA;AAAA,IACA,GACF;AAAA,IACA,gBAAAvD,EAAC,OAAA,EAAI,WAAU,iBACd,UAAA;AAAA,MAAA,gBAAAJ,EAAC+D,IAAA,EAAgB;AAAA,MAEhB,gBAAA/D,EAACgE,IAAA,EAAY,OAAO9H,GAAa,UAAUC,EAAA,CAAgB;AAAA,IAAA,EAAA,CAE7D;AAAA,EAAA,GACD;AAEF;AAqBA,SAAS6G,EAAS,EAAE,WAAAiB,GAAW,GAAGrE,KAAiG;AAClI,SAAIqE,MAAc,QAAc,gBAAAjE,EAACkE,IAAA,EAAqB,GAAGtE,GAAO,IACvDqE,MAAc,SAAe,gBAAAjE,EAACmE,IAAA,EAAqB,GAAGvE,GAAO,IAC1D,gBAAAI,EAACoE,IAAA,EAAa,GAAGxE,EAAA,CAAO;AACrC;AAGA,SAASY,GAAa,EAAE,WAAAT,KAA0D;AACjF,QAAM,EAAE,UAAAf,EAAA,IAAaO,EAAA,GACf8E,IAAiB,CAACC,GAAmBvE,MAAuBG,EAAG,2CAA2C,gEAAgEoE,KAAY,2CAA2CvE,CAAS;AAChP,SACC,gBAAAK,EAACmE,IAAA,EAAe,WAAWrE,EAAGH,CAAS,GACtC,UAAA;AAAA,IAAA,gBAAAC,EAACwE,MAAY,WAAU,qBACrB,YAAS,gBAAA,EAAkB,IAAI,CAACC,wBAC/BC,GAAA,EAAS,WAAWxE,EAAG,SAAS,GAC/B,YAAY,QAAQ,IAAI,CAACyE,MACzB,gBAAAvE;AAAA,MAACwE;AAAA,MAAA;AAAA,QAEA,WAAWP,EAAe,IAAO,SAAS;AAAA,QAEzC,UAAA;AAAA,UAAA,CAACM,EAAO,OAAO,WAAA,KAAgB,CAACA,EAAO,iBACpC,gBAAA3E,EAAAC,GAAA,EAAG,UAAA4E;AAAA,YACLF,EAAO,OAAO,UAAU;AAAA,YACxBA,EAAO,WAAA;AAAA,UAAW,GACjB;AAAA,UAEFA,EAAO,OAAO,WAAA,KACd,gBAAAvE;AAAA,YAAC8C;AAAA,YAAA;AAAA,cACA,SAAQ;AAAA,cACR,WAAU;AAAA,cACV,SAASyB,EAAO,OAAO,wBAAA;AAAA,cAEtB,UAAA;AAAA,gBAAAE;AAAA,kBACAF,EAAO,OAAO,UAAU;AAAA,kBACxBA,EAAO,WAAA;AAAA,gBAAW;AAAA,kCAElB3B,GAAA,EAAS,WAAW2B,EAAO,OAAO,cAAY,CAAG;AAAA,cAAA;AAAA,YAAA;AAAA,UAAA;AAAA,QACnD;AAAA,MAAA;AAAA,MApBIA,EAAO;AAAA,IAAA,CAuBb,KA1BuCF,EAAY,EA2BrD,CACA,EAAA,CACF;AAAA,IACA,gBAAAzE,EAAC8E,IAAA,EAAU,WAAU,mCACnB,UAAA9F,EAAS,cAAc,KAAK,IAAI,CAACjB,MACjC,gBAAAiC;AAAA,MAAC0E;AAAA,MAAA;AAAA,QACA,WAAWxE,EAAG,2FAA2F;AAAA,QAEzG,iBAAenC,EAAI,cAAA;AAAA,QAElB,UAAAA,EAAI,gBAAA,EAAkB,IAAI,CAACgH,MAC3B,gBAAA/E;AAAA,UAACgF;AAAA,UAAA;AAAA,YAEA,WAAWX,EAAeU,EAAK,OAAO,OAAOzJ,CAAiB;AAAA,YAE7D,UAAAuJ;AAAA,cACAE,EAAK,OAAO,UAAU;AAAA,cACtBA,EAAK,WAAA;AAAA,YAAW;AAAA,UACjB;AAAA,UANKA,EAAK;AAAA,QAAA,CAQX;AAAA,MAAA;AAAA,MAbIhH,EAAI;AAAA,IAAA,CAeV,EAAA,CACF;AAAA,EAAA,GACD;AAEF;"}
@@ -1,136 +0,0 @@
1
- import { jsx as d } from "react/jsx-runtime";
2
- import { Checkbox as c } from "../inputs/checkbox.es.js";
3
- import { createColumnHelper as p } from "@tanstack/react-table";
4
- import { intervalToDuration as g } from "date-fns";
5
- const o = p(), D = [
6
- o.accessor("checkbox", {
7
- header: ({ table: e }) => /* @__PURE__ */ d(
8
- c,
9
- {
10
- isIndeterminate: e.getIsSomeRowsSelected() && !e.getIsAllPageRowsSelected(),
11
- isSelected: e.getIsAllPageRowsSelected() || e.getIsSomePageRowsSelected(),
12
- onChange: () => e.toggleAllPageRowsSelected(),
13
- "aria-label": "Select all"
14
- }
15
- ),
16
- cell: ({ row: e }) => /* @__PURE__ */ d(
17
- c,
18
- {
19
- isSelected: e.getIsSelected(),
20
- onChange: () => e.toggleSelected(),
21
- "aria-label": "Select row"
22
- }
23
- ),
24
- enableSorting: !1,
25
- enableHiding: !1
26
- })
27
- ], C = [
28
- o.accessor("id", {
29
- header: () => "ID"
30
- })
31
- ], L = [
32
- o.accessor("createdAt", {
33
- header: () => "Creation Date",
34
- cell: ({ row: e }) => {
35
- const t = e.getValue("createdAt");
36
- return i(t);
37
- },
38
- enableHiding: !1
39
- }),
40
- o.accessor("updatedAt", {
41
- header: () => "Last Updated",
42
- cell: ({ row: e }) => {
43
- const t = e.getValue("updatedAt");
44
- return i(t);
45
- },
46
- enableHiding: !1
47
- })
48
- ];
49
- function i(e) {
50
- if (!e) return null;
51
- const t = new Date(e);
52
- return new Intl.DateTimeFormat(void 0, {
53
- dateStyle: "medium",
54
- timeStyle: "short"
55
- }).format(t);
56
- }
57
- function E(e) {
58
- const t = e.expiresAt && new Date(e.expiresAt) < /* @__PURE__ */ new Date();
59
- switch (!0) {
60
- case (e.revoked && e.suspended && t):
61
- return "Revoked, Suspended, Expired";
62
- case (e.revoked && e.suspended):
63
- return "Revoked, Suspended";
64
- case (e.revoked && t):
65
- return "Revoked, Expired";
66
- case (e.suspended && t):
67
- return "Suspended, Expired";
68
- case e.suspended:
69
- return "Suspended";
70
- case e.revoked:
71
- return "Revoked";
72
- case t:
73
- return "Expired";
74
- default:
75
- return "Active";
76
- }
77
- }
78
- function I(e) {
79
- return e === 0 || !e ? "Lifetime" : m(e);
80
- }
81
- function m(e) {
82
- const t = g({
83
- start: 0,
84
- end: e * 1e3
85
- });
86
- return [
87
- t.years && `${t.years}y`,
88
- t.months && `${t.months}m`,
89
- t.days && `${t.days}d`,
90
- t.hours && `${t.hours}h`
91
- ].filter(Boolean).join(" ").trim();
92
- }
93
- function k(e, t) {
94
- const n = t.toString().split(".");
95
- let r = e;
96
- for (const a of n)
97
- r = r == null ? void 0 : r[a];
98
- return r;
99
- }
100
- const T = {
101
- windows: "Windows",
102
- macos: "macOS",
103
- linux: "Linux",
104
- ios: "iOS",
105
- android: "Android"
106
- };
107
- function _(e, t) {
108
- return async (n, r, a, u) => {
109
- const l = {
110
- ...u,
111
- page: n.pageIndex + 1,
112
- limit: n.pageSize,
113
- sort: S(r[0]),
114
- search: a
115
- };
116
- return e.GET(t, { query: l }).then((s) => ({ total: Number.parseInt(
117
- s.response.headers.get("Pagination-Count") || "0"
118
- ), data: s.data }));
119
- };
120
- }
121
- function S(e) {
122
- return e ? e.desc ? `-${e.id}` : `+${e.id}` : "-createdAt";
123
- }
124
- export {
125
- T as ALL_OS,
126
- D as TABLE_CHECK_BOX_COLUMN,
127
- L as TABLE_DEFAULT_DATE_COLUMNS,
128
- C as TABLE_ID_COLUMN,
129
- _ as createTableFetchFn,
130
- i as formatDate,
131
- E as getLicenseStatus,
132
- I as getValidityDisplay,
133
- k as getValueFromData,
134
- m as secondsToDuration
135
- };
136
- //# sourceMappingURL=table-commons.es.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"table-commons.es.js","sources":["../../../lib/components/data-table/table-commons.tsx"],"sourcesContent":["\nimport { Checkbox } from \"@/components/inputs/checkbox\";\nimport type { components, operations, paths } from \"@cryptlex/web-api-types\";\nimport type { PaginationState, SortingState, Table } from \"@tanstack/react-table\";\nimport { createColumnHelper } from \"@tanstack/react-table\";\nimport { intervalToDuration } from \"date-fns\";\nimport type { LucideIcon } from \"lucide-react\";\nimport type createClient from \"openapi-fetch\";\nimport type { PressEvent } from \"react-aria-components\";\n\nconst cH = createColumnHelper<any>();\nexport const TABLE_CHECK_BOX_COLUMN = [\n\tcH.accessor(\"checkbox\", {\n\t\theader: ({ table }) => (\n\t\t\t<Checkbox\n\t\t\t\tisIndeterminate={table.getIsSomeRowsSelected() && !table.getIsAllPageRowsSelected()}\n\t\t\t\tisSelected={\n\t\t\t\t\ttable.getIsAllPageRowsSelected() || table.getIsSomePageRowsSelected()\n\t\t\t\t}\n\t\t\t\tonChange={() => table.toggleAllPageRowsSelected()}\n\t\t\t\taria-label=\"Select all\"\n\t\t\t/>\n\t\t),\n\n\t\tcell: ({ row }) => (\n\t\t\t<Checkbox\n\t\t\t\tisSelected={row.getIsSelected()}\n\t\t\t\tonChange={() => row.toggleSelected()}\n\t\t\t\taria-label=\"Select row\"\n\t\t\t/>\n\t\t),\n\t\tenableSorting: false,\n\t\tenableHiding: false,\n\t}),\n];\n\nexport const TABLE_ID_COLUMN = [\n\tcH.accessor(\"id\", {\n\t\theader: () => \"ID\",\n\t}),\n];\nexport const TABLE_DEFAULT_DATE_COLUMNS = [\n\tcH.accessor(\"createdAt\", {\n\t\theader: () => \"Creation Date\",\n\t\tcell: ({ row }) => {\n\t\t\tconst date = row.getValue(\"createdAt\") satisfies\n\t\t\t\t| string\n\t\t\t\t| null\n\t\t\t\t| undefined;\n\t\t\treturn formatDate(date);\n\t\t},\n\t\tenableHiding: false,\n\t}),\n\tcH.accessor(\"updatedAt\", {\n\t\theader: () => \"Last Updated\",\n\t\tcell: ({ row }) => {\n\t\t\tconst date = row.getValue(\"updatedAt\") satisfies\n\t\t\t\t| string\n\t\t\t\t| null\n\t\t\t\t| undefined;\n\t\t\treturn formatDate(date);\n\t\t},\n\t\tenableHiding: false,\n\t}),\n];\n\n// TODO, i18n\nexport function formatDate(date: string | null | undefined) {\n\tif (!date) return null;\n\tconst _date = new Date(date);\n\treturn new Intl.DateTimeFormat(undefined, {\n\t\tdateStyle: \"medium\",\n\t\ttimeStyle: \"short\",\n\t}).format(_date);\n}\n/**\n * Format multiple license parameters (expired, suspended, revoked) into a single status\n */\nexport function getLicenseStatus(license: any): string {\n\tconst licenseExpired =\n\t\tlicense.expiresAt && new Date(license.expiresAt) < new Date();\n\t// Status Column\n\tswitch (true) {\n\t\tcase license.revoked && license.suspended && licenseExpired:\n\t\t\treturn \"Revoked, Suspended, Expired\";\n\t\tcase license.revoked && license.suspended:\n\t\t\treturn \"Revoked, Suspended\";\n\t\tcase license.revoked && licenseExpired:\n\t\t\treturn \"Revoked, Expired\";\n\t\tcase license.suspended && licenseExpired:\n\t\t\treturn \"Suspended, Expired\";\n\t\tcase license.suspended:\n\t\t\treturn \"Suspended\";\n\t\tcase license.revoked:\n\t\t\treturn \"Revoked\";\n\t\tcase licenseExpired:\n\t\t\treturn \"Expired\";\n\t\tdefault:\n\t\t\treturn \"Active\";\n\t}\n}\n\nexport function getValidityDisplay(validity: number | undefined) {\n\tif (validity === 0 || !validity) {\n\t\treturn \"Lifetime\";\n\t} else {\n\t\treturn secondsToDuration(validity);\n\t}\n}\nexport function secondsToDuration(seconds: number): string {\n\tconst duration = intervalToDuration({\n\t\tstart: 0,\n\t\tend: seconds * 1000,\n\t});\n\n\tconst parts = [\n\t\tduration.years && `${duration.years}y`,\n\t\tduration.months && `${duration.months}m`,\n\t\tduration.days && `${duration.days}d`,\n\t\tduration.hours && `${duration.hours}h`,\n\t];\n\n\t// Filter out undefined values and join\n\treturn parts.filter(Boolean).join(\" \").trim();\n}\n\nexport function getValueFromData(\n\tdata: any,\n\taccessor: string | number | symbol,\n) {\n\tconst accessors = accessor.toString().split(\".\");\n\tlet value = data;\n\tfor (const acc of accessors) {\n\t\tvalue = value?.[acc];\n\t}\n\treturn value;\n}\nexport const ALL_OS: { [key: string]: string } = {\n\twindows: \"Windows\",\n\tmacos: \"macOS\",\n\tlinux: \"Linux\",\n\tios: \"iOS\",\n\tandroid: \"Android\",\n};\n\nexport type VisibilityState<T> = {\n\t[K in keyof T]?: boolean;\n};\n\nexport type TableActions = ({\n\tonClick: (e: PressEvent, t: Table<any>) => void\n\tbulk: boolean;\n\ticon: LucideIcon\n\ttooltip?: string;\n})[]\n\nexport type TableFetchFn<TData, TOperation extends keyof operations> = (\n\tp: PaginationState,\n\ts: SortingState,\n\tq: string,\n\tf: ApiFilters<TOperation>\n) => Promise<{\n\ttotal: number;\n\tdata: TData[] | undefined;\n}>;\n/*** Type for hide some of the columns based on the dto of the particular page\n ** `id`, `updatedAt` are by default hidden\n */\nexport type DefaultVisibilityState<T> = {\n\t[K in keyof T]?: boolean;\n};\n\n\ntype Client = ReturnType<typeof createClient<paths>>;\n\n// Helper type to extract valid GET paths\ntype GetPaths = {\n\t[P in keyof paths]: paths[P] extends { get: any } ? P : never;\n}[keyof paths];\n\nexport type ApiSchema<T extends keyof components['schemas']> = components['schemas'][T];\nexport type ApiQuery<T extends keyof operations> = NonNullable<operations[T]['parameters']['query']>;\nexport type ApiGetAllParameters = {\n\tpage: number;\n\tlimit: number;\n\tsearch?: string;\n\tsort?: string;\n}\n\n\nexport type ApiFilter<T extends keyof operations> = Omit<ApiQuery<T>, 'page' | 'limit' | 'sort' | 'search'>\nexport type ApiFilters<T extends keyof operations> = NonNullable<Omit<ApiQuery<T>, 'page' | 'limit' | 'sort' | 'search'>>\n\nexport function createTableFetchFn<Return, Operation extends keyof operations>(\n\tctxclient: Client,\n\tpath: GetPaths,\n): TableFetchFn<Return, Operation> {\n\treturn async (pagination, sorting, searching, filters) => {\n\t\tconst query: ApiQuery<Operation> = {\n\t\t\t...filters,\n\t\t\tpage: pagination.pageIndex + 1,\n\t\t\tlimit: pagination.pageSize,\n\t\t\tsort: generateSortParam(sorting[0]),\n\t\t\tsearch: searching,\n\t\t};\n\n\t\t// const pathParams = merge(_baseQueryObject, params);\n\n\t\treturn ctxclient.GET(path, { query }).then((value) => {\n\t\t\tconst rowCount = Number.parseInt(\n\t\t\t\tvalue.response.headers.get(\"Pagination-Count\") || \"0\",\n\t\t\t);\n\t\t\treturn { total: rowCount, data: value.data };\n\t\t});\n\t};\n}\n\nfunction generateSortParam(\n\tsort: { id: string; desc: boolean } | undefined,\n): string {\n\tif (sort) {\n\t\tif (sort.desc) {\n\t\t\treturn `-${sort.id}`;\n\t\t} else {\n\t\t\treturn `+${sort.id}`;\n\t\t}\n\t} else {\n\t\treturn \"-createdAt\";\n\t}\n}\n\n\n"],"names":["cH","createColumnHelper","TABLE_CHECK_BOX_COLUMN","table","jsx","Checkbox","row","TABLE_ID_COLUMN","TABLE_DEFAULT_DATE_COLUMNS","date","formatDate","_date","getLicenseStatus","license","licenseExpired","getValidityDisplay","validity","secondsToDuration","seconds","duration","intervalToDuration","getValueFromData","data","accessor","accessors","value","acc","ALL_OS","createTableFetchFn","ctxclient","path","pagination","sorting","searching","filters","query","generateSortParam","sort"],"mappings":";;;;AAUA,MAAMA,IAAKC,EAAA,GACEC,IAAyB;AAAA,EACrCF,EAAG,SAAS,YAAY;AAAA,IACvB,QAAQ,CAAC,EAAE,OAAAG,EAAA,MACV,gBAAAC;AAAA,MAACC;AAAA,MAAA;AAAA,QACA,iBAAiBF,EAAM,sBAAA,KAA2B,CAACA,EAAM,yBAAA;AAAA,QACzD,YACCA,EAAM,8BAA8BA,EAAM,0BAAA;AAAA,QAE3C,UAAU,MAAMA,EAAM,0BAAA;AAAA,QACtB,cAAW;AAAA,MAAA;AAAA,IAAA;AAAA,IAIb,MAAM,CAAC,EAAE,KAAAG,EAAA,MACR,gBAAAF;AAAA,MAACC;AAAA,MAAA;AAAA,QACA,YAAYC,EAAI,cAAA;AAAA,QAChB,UAAU,MAAMA,EAAI,eAAA;AAAA,QACpB,cAAW;AAAA,MAAA;AAAA,IAAA;AAAA,IAGb,eAAe;AAAA,IACf,cAAc;AAAA,EAAA,CACd;AACF,GAEaC,IAAkB;AAAA,EAC9BP,EAAG,SAAS,MAAM;AAAA,IACjB,QAAQ,MAAM;AAAA,EAAA,CACd;AACF,GACaQ,IAA6B;AAAA,EACzCR,EAAG,SAAS,aAAa;AAAA,IACxB,QAAQ,MAAM;AAAA,IACd,MAAM,CAAC,EAAE,KAAAM,QAAU;AAClB,YAAMG,IAAOH,EAAI,SAAS,WAAW;AAIrC,aAAOI,EAAWD,CAAI;AAAA,IACvB;AAAA,IACA,cAAc;AAAA,EAAA,CACd;AAAA,EACDT,EAAG,SAAS,aAAa;AAAA,IACxB,QAAQ,MAAM;AAAA,IACd,MAAM,CAAC,EAAE,KAAAM,QAAU;AAClB,YAAMG,IAAOH,EAAI,SAAS,WAAW;AAIrC,aAAOI,EAAWD,CAAI;AAAA,IACvB;AAAA,IACA,cAAc;AAAA,EAAA,CACd;AACF;AAGO,SAASC,EAAWD,GAAiC;AAC3D,MAAI,CAACA,EAAM,QAAO;AAClB,QAAME,IAAQ,IAAI,KAAKF,CAAI;AAC3B,SAAO,IAAI,KAAK,eAAe,QAAW;AAAA,IACzC,WAAW;AAAA,IACX,WAAW;AAAA,EAAA,CACX,EAAE,OAAOE,CAAK;AAChB;AAIO,SAASC,EAAiBC,GAAsB;AACtD,QAAMC,IACLD,EAAQ,aAAa,IAAI,KAAKA,EAAQ,SAAS,IAAI,oBAAI,KAAA;AAExD,UAAQ,IAAA;AAAA,IACP,MAAKA,EAAQ,WAAWA,EAAQ,aAAaC;AAC5C,aAAO;AAAA,IACR,MAAKD,EAAQ,WAAWA,EAAQ;AAC/B,aAAO;AAAA,IACR,MAAKA,EAAQ,WAAWC;AACvB,aAAO;AAAA,IACR,MAAKD,EAAQ,aAAaC;AACzB,aAAO;AAAA,IACR,KAAKD,EAAQ;AACZ,aAAO;AAAA,IACR,KAAKA,EAAQ;AACZ,aAAO;AAAA,IACR,KAAKC;AACJ,aAAO;AAAA,IACR;AACC,aAAO;AAAA,EAAA;AAEV;AAEO,SAASC,EAAmBC,GAA8B;AAChE,SAAIA,MAAa,KAAK,CAACA,IACf,aAEAC,EAAkBD,CAAQ;AAEnC;AACO,SAASC,EAAkBC,GAAyB;AAC1D,QAAMC,IAAWC,EAAmB;AAAA,IACnC,OAAO;AAAA,IACP,KAAKF,IAAU;AAAA,EAAA,CACf;AAUD,SARc;AAAA,IACbC,EAAS,SAAS,GAAGA,EAAS,KAAK;AAAA,IACnCA,EAAS,UAAU,GAAGA,EAAS,MAAM;AAAA,IACrCA,EAAS,QAAQ,GAAGA,EAAS,IAAI;AAAA,IACjCA,EAAS,SAAS,GAAGA,EAAS,KAAK;AAAA,EAAA,EAIvB,OAAO,OAAO,EAAE,KAAK,GAAG,EAAE,KAAA;AACxC;AAEO,SAASE,EACfC,GACAC,GACC;AACD,QAAMC,IAAYD,EAAS,SAAA,EAAW,MAAM,GAAG;AAC/C,MAAIE,IAAQH;AACZ,aAAWI,KAAOF;AACjB,IAAAC,IAAQA,KAAA,gBAAAA,EAAQC;AAEjB,SAAOD;AACR;AACO,MAAME,IAAoC;AAAA,EAChD,SAAS;AAAA,EACT,OAAO;AAAA,EACP,OAAO;AAAA,EACP,KAAK;AAAA,EACL,SAAS;AACV;AAkDO,SAASC,EACfC,GACAC,GACkC;AAClC,SAAO,OAAOC,GAAYC,GAASC,GAAWC,MAAY;AACzD,UAAMC,IAA6B;AAAA,MAClC,GAAGD;AAAA,MACH,MAAMH,EAAW,YAAY;AAAA,MAC7B,OAAOA,EAAW;AAAA,MAClB,MAAMK,EAAkBJ,EAAQ,CAAC,CAAC;AAAA,MAClC,QAAQC;AAAA,IAAA;AAKT,WAAOJ,EAAU,IAAIC,GAAM,EAAE,OAAAK,GAAO,EAAE,KAAK,CAACV,OAIpC,EAAE,OAHQ,OAAO;AAAA,MACvBA,EAAM,SAAS,QAAQ,IAAI,kBAAkB,KAAK;AAAA,IAAA,GAEzB,MAAMA,EAAM,KAAA,EACtC;AAAA,EACF;AACD;AAEA,SAASW,EACRC,GACS;AACT,SAAIA,IACCA,EAAK,OACD,IAAIA,EAAK,EAAE,KAEX,IAAIA,EAAK,EAAE,KAGZ;AAET;"}