@cryptlex/web-components 3.8.2 → 4.1.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 (95) hide show
  1. package/dist/components/data-table/data-table-filter.es.js +178 -0
  2. package/dist/components/data-table/data-table-filter.es.js.map +1 -0
  3. package/dist/components/data-table/data-table.es.js +402 -153
  4. package/dist/components/data-table/data-table.es.js.map +1 -1
  5. package/dist/components/data-table/table-commons.es.js +267 -19
  6. package/dist/components/data-table/table-commons.es.js.map +1 -1
  7. package/dist/components/inputs/calendar.es.js +12 -12
  8. package/dist/components/inputs/calendar.es.js.map +1 -1
  9. package/dist/components/inputs/checkbox.es.js +13 -13
  10. package/dist/components/inputs/checkbox.es.js.map +1 -1
  11. package/dist/components/inputs/country-select.es.js +3 -3
  12. package/dist/components/inputs/form-field.es.js +1 -1
  13. package/dist/components/inputs/input-otp.es.js +2 -2
  14. package/dist/components/inputs/input-otp.es.js.map +1 -1
  15. package/dist/components/inputs/input.es.js +7 -7
  16. package/dist/components/inputs/input.es.js.map +1 -1
  17. package/dist/components/inputs/multi-select.es.js +7 -7
  18. package/dist/components/inputs/radio-group.es.js +1 -1
  19. package/dist/components/inputs/select.es.js +10 -10
  20. package/dist/components/inputs/select.es.js.map +1 -1
  21. package/dist/components/inputs/textarea.es.js +4 -4
  22. package/dist/components/key-value-card/key-value-card.es.js +6 -9
  23. package/dist/components/key-value-card/key-value-card.es.js.map +1 -1
  24. package/dist/components/ui/accordion.es.js +6 -6
  25. package/dist/components/ui/accordion.es.js.map +1 -1
  26. package/dist/components/ui/alert.es.js +4 -4
  27. package/dist/components/ui/avatar.es.js +1 -1
  28. package/dist/components/ui/badge.es.js +1 -1
  29. package/dist/components/ui/breadcrumb.es.js +2 -2
  30. package/dist/components/ui/breadcrumb.es.js.map +1 -1
  31. package/dist/components/ui/button.es.js +27 -25
  32. package/dist/components/ui/button.es.js.map +1 -1
  33. package/dist/components/ui/card.es.js +8 -8
  34. package/dist/components/ui/card.es.js.map +1 -1
  35. package/dist/components/ui/copy-button.es.js +12 -14
  36. package/dist/components/ui/copy-button.es.js.map +1 -1
  37. package/dist/components/ui/dialog.es.js +4 -4
  38. package/dist/components/ui/dialog.es.js.map +1 -1
  39. package/dist/components/ui/drawer.es.js +10 -10
  40. package/dist/components/ui/drawer.es.js.map +1 -1
  41. package/dist/components/ui/dropdown-menu.es.js +13 -13
  42. package/dist/components/ui/dropdown-menu.es.js.map +1 -1
  43. package/dist/components/ui/label.es.js +1 -1
  44. package/dist/components/ui/loader.es.js +3 -3
  45. package/dist/components/ui/pagination.es.js +2 -2
  46. package/dist/components/ui/pagination.es.js.map +1 -1
  47. package/dist/components/ui/popover.es.js +5 -5
  48. package/dist/components/ui/popover.es.js.map +1 -1
  49. package/dist/components/ui/separator.es.js +1 -1
  50. package/dist/components/ui/sheet.es.js +1 -1
  51. package/dist/components/ui/sidebar.es.js +105 -105
  52. package/dist/components/ui/sidebar.es.js.map +1 -1
  53. package/dist/components/ui/skeleton.es.js +1 -1
  54. package/dist/components/ui/static-data-table.es.js +1 -1
  55. package/dist/components/ui/table.es.js +8 -8
  56. package/dist/components/ui/table.es.js.map +1 -1
  57. package/dist/components/ui/tabs.es.js +1 -1
  58. package/dist/components/ui/tabs.es.js.map +1 -1
  59. package/dist/components/ui/timeline.es.js +3 -3
  60. package/dist/components/ui/timeline.es.js.map +1 -1
  61. package/dist/components/ui/tooltip.es.js +1 -1
  62. package/dist/index.es.d.ts +128 -32
  63. package/dist/index.es.js +237 -238
  64. package/dist/index.es.js.map +1 -1
  65. package/dist/node_modules/.pnpm/@radix-ui_react-dropdown-menu@2.1.15_@types_react-dom@19.1.0_@types_react@19.1.0_react-dom@19.1.0_react@19.1.0/node_modules/@radix-ui/react-dropdown-menu/dist/index.es.js +10 -10
  66. package/dist/node_modules/.pnpm/@radix-ui_react-menu@2.1.15_@types_react-dom@19.1.0_@types_react@19.1.0_react-dom@19.1.0_react@19.1.0/node_modules/@radix-ui/react-menu/dist/index.es.js +4 -4
  67. package/dist/utils/{index.es.js → primitives.es.js} +1 -1
  68. package/dist/utils/primitives.es.js.map +1 -0
  69. package/dist/{hooks → utils}/use-mobile.es.js.map +1 -1
  70. package/lib/theme.css +10 -12
  71. package/lib/tokens.css +3 -3
  72. package/lib/utilities.css +8 -8
  73. package/package.json +9 -11
  74. package/dist/components/data-table/column-picker.es.js +0 -50
  75. package/dist/components/data-table/column-picker.es.js.map +0 -1
  76. package/dist/components/data-table/page-size.es.js +0 -25
  77. package/dist/components/data-table/page-size.es.js.map +0 -1
  78. package/dist/components/data-table/paginator.es.js +0 -64
  79. package/dist/components/data-table/paginator.es.js.map +0 -1
  80. package/dist/components/data-table/table-actions.es.js +0 -26
  81. package/dist/components/data-table/table-actions.es.js.map +0 -1
  82. package/dist/components/data-table/table-content.es.js +0 -65
  83. package/dist/components/data-table/table-content.es.js.map +0 -1
  84. package/dist/components/data-table/table-utils/constants.es.js +0 -288
  85. package/dist/components/data-table/table-utils/constants.es.js.map +0 -1
  86. package/dist/components/data-table/table-utils/createTableFetchFn.es.js +0 -25
  87. package/dist/components/data-table/table-utils/createTableFetchFn.es.js.map +0 -1
  88. package/dist/components/data-table/table-utils/date.es.js +0 -12
  89. package/dist/components/data-table/table-utils/date.es.js.map +0 -1
  90. package/dist/components/data-table/table-utils/string.es.js +0 -19
  91. package/dist/components/data-table/table-utils/string.es.js.map +0 -1
  92. package/dist/components/data-table/table-utils/types.es.js +0 -5
  93. package/dist/components/data-table/table-utils/types.es.js.map +0 -1
  94. package/dist/utils/index.es.js.map +0 -1
  95. /package/dist/{hooks → utils}/use-mobile.es.js +0 -0
@@ -0,0 +1,178 @@
1
+ import { jsx as t, jsxs as s } from "react/jsx-runtime";
2
+ import { useDataTable as B } from "./data-table.es.js";
3
+ import { getResourceDisplayName as b } from "./table-commons.es.js";
4
+ import { DropdownMenu as x, DropdownMenuTrigger as F } from "../../node_modules/.pnpm/@radix-ui_react-dropdown-menu@2.1.15_@types_react-dom@19.1.0_@types_react@19.1.0_react-dom@19.1.0_react@19.1.0/node_modules/@radix-ui/react-dropdown-menu/dist/index.es.js";
5
+ import { Popover as D, PopoverTrigger as I } from "../../node_modules/.pnpm/@radix-ui_react-popover@1.1.14_@types_react-dom@19.1.0_@types_react@19.1.0_react-dom@19.1.0_react@19.1.0/node_modules/@radix-ui/react-popover/dist/index.es.js";
6
+ import { Filter as M, Trash as j } from "lucide-react";
7
+ import { useState as O, useRef as R, useCallback as _ } from "react";
8
+ import { PopoverContent as S } from "../ui/popover.es.js";
9
+ import { DropdownMenuContent as N, DropdownMenuItem as q } from "../ui/dropdown-menu.es.js";
10
+ import { Input as g } from "../inputs/input.es.js";
11
+ import { cn as E } from "../../utils/primitives.es.js";
12
+ import { Button as c } from "../ui/button.es.js";
13
+ import { Checkbox as L } from "../inputs/checkbox.es.js";
14
+ const te = [
15
+ "eq",
16
+ "ne",
17
+ "cn",
18
+ "nc",
19
+ "sw",
20
+ "ew",
21
+ "in",
22
+ "nin",
23
+ "gt",
24
+ "gte",
25
+ "lt",
26
+ "lte"
27
+ ], A = {
28
+ eq: "equal to",
29
+ ne: "not equal to",
30
+ cn: "contains",
31
+ nc: "does not contain",
32
+ sw: "starts with",
33
+ ew: "ends with",
34
+ in: "includes",
35
+ nin: "does not include",
36
+ gt: "greater than",
37
+ gte: "greater than or equal to",
38
+ lt: "less than",
39
+ lte: "less than or equal to"
40
+ }, k = {
41
+ bool: ["eq"],
42
+ enum: ["in", "nin"],
43
+ id: ["in", "nin"],
44
+ "id-search": ["in", "nin"],
45
+ string: ["eq", "ne", "cn", "nc", "sw", "ew", "in", "nin"],
46
+ date: ["lt", "gt"]
47
+ };
48
+ function z(d, m, h) {
49
+ return d.map((u, f) => f === m ? h(u) : u);
50
+ }
51
+ function ne({ className: d, ...m }) {
52
+ const { filters: h, query: u, setFilters: f, filterConfig: v } = B(), [p, l] = O([]);
53
+ R([]);
54
+ const y = R(null), w = _(
55
+ (e, i) => {
56
+ l(
57
+ (n) => z(n, e, (r) => ({ ...r, ...i }))
58
+ );
59
+ },
60
+ [l]
61
+ ), P = _(
62
+ (e) => {
63
+ l((i) => i.filter((n, r) => r !== e));
64
+ },
65
+ [l]
66
+ );
67
+ function T({ id: e, filter: i, onChange: n }) {
68
+ const [r, a] = O(i.value);
69
+ switch (i.type) {
70
+ case "bool":
71
+ return /* @__PURE__ */ t(
72
+ L,
73
+ {
74
+ id: e,
75
+ checked: r,
76
+ onChange: (o) => a(o.target.value),
77
+ onBlur: (o) => n({ value: r })
78
+ }
79
+ );
80
+ case "date":
81
+ return /* @__PURE__ */ t(
82
+ g,
83
+ {
84
+ id: e,
85
+ type: "date",
86
+ value: r,
87
+ onChange: (o) => a(o.target.value),
88
+ onBlur: (o) => n({ value: r })
89
+ }
90
+ );
91
+ case "enum":
92
+ break;
93
+ case "id":
94
+ return /* @__PURE__ */ t(
95
+ g,
96
+ {
97
+ id: e,
98
+ type: "text",
99
+ value: r,
100
+ onChange: (o) => a(o.target.value),
101
+ onBlur: (o) => n({ value: r })
102
+ }
103
+ );
104
+ case "id-search":
105
+ break;
106
+ case "string":
107
+ return /* @__PURE__ */ t(
108
+ g,
109
+ {
110
+ id: e,
111
+ type: "text",
112
+ value: r,
113
+ onChange: (o) => a(o.target.value),
114
+ onBlur: (o) => n({ value: r })
115
+ }
116
+ );
117
+ }
118
+ }
119
+ const C = Object.keys(v).sort();
120
+ return /* @__PURE__ */ t("section", { ...m, className: E("flex gap-icon items-center", d), children: /* @__PURE__ */ s(D, { onOpenChange: (e) => {
121
+ var i;
122
+ e ? (i = y.current) == null || i.focus() : f(p.map((n) => ({ [n.property]: { [n.operator]: [n.value] } })));
123
+ }, children: [
124
+ /* @__PURE__ */ t(I, { asChild: !0, children: /* @__PURE__ */ t(c, { active: h.length > 0, disabled: u.isPending || C.length === 0, type: "button", size: "icon", variant: "neutral", icon: () => M }) }),
125
+ /* @__PURE__ */ s(S, { align: "end", className: "min-w-xs w-full p-icon", children: [
126
+ p.length > 0 && /* @__PURE__ */ t("div", { className: "flex flex-col gap-icon max-h-table overflow-auto border-y py-2", children: p.map((e, i) => {
127
+ const n = `${e.property}-${i}`;
128
+ return /* @__PURE__ */ s("div", { className: "flex gap-icon items-center justify-normal", children: [
129
+ /* @__PURE__ */ t("span", { className: "text-sm", children: b(e.property, "admin-portal") }),
130
+ /* @__PURE__ */ s(x, { children: [
131
+ /* @__PURE__ */ t(F, { asChild: !0, children: /* @__PURE__ */ t(c, { children: A[e.operator] }) }),
132
+ /* @__PURE__ */ t(N, { children: k[e.type].map((r) => /* @__PURE__ */ t(q, { onClick: (a) => w(i, { ...e, operator: r }), children: A[r] })) })
133
+ ] }),
134
+ /* @__PURE__ */ t(T, { id: n, filter: e, onChange: (r) => {
135
+ w(i, { ...e, ...r });
136
+ } }, n),
137
+ /* @__PURE__ */ t(c, { type: "button", variant: "destructive", size: "icon", icon: () => j, onClick: () => P(i) })
138
+ ] }, n);
139
+ }) }),
140
+ /* @__PURE__ */ s("div", { className: "flex w-full items-center justify-end gap-2 not-first:mt-icon", children: [
141
+ /* @__PURE__ */ s(x, { children: [
142
+ /* @__PURE__ */ t(F, { asChild: !0, children: /* @__PURE__ */ t(c, { ref: y, variant: "neutral", children: "Add Filter" }) }),
143
+ /* @__PURE__ */ t(N, { children: C.map((e) => /* @__PURE__ */ t(q, { onClick: (i) => {
144
+ const n = v[e].type, r = (o) => {
145
+ if (o === "bool")
146
+ return !0;
147
+ if (o === "string")
148
+ return "";
149
+ }, a = {
150
+ operator: k[n][0],
151
+ value: r(n),
152
+ type: n,
153
+ property: e
154
+ };
155
+ l((o) => [...o, a]);
156
+ }, className: "dropdown-item", role: "menuitem", children: b(e, "admin-portal") }, e)) })
157
+ ] }),
158
+ p.length > 0 ? /* @__PURE__ */ t(
159
+ c,
160
+ {
161
+ variant: "neutral",
162
+ onClick: () => {
163
+ l([]);
164
+ },
165
+ children: "Reset filters"
166
+ }
167
+ ) : null
168
+ ] })
169
+ ] })
170
+ ] }) });
171
+ }
172
+ export {
173
+ A as COMPARISON_OPERATOR_LABELS,
174
+ ne as DataTableFilter,
175
+ te as FILTER_COMPARISON_OPERATORS,
176
+ z as replaceAt
177
+ };
178
+ //# sourceMappingURL=data-table-filter.es.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"data-table-filter.es.js","sources":["../../../lib/components/data-table/data-table-filter.tsx"],"sourcesContent":["import { useDataTable, type OperationKeys } from \"@/components/data-table/data-table\";\nimport { getResourceDisplayName, type ApiFilters } from \"@/components/data-table/table-commons\";\nimport { Checkbox, Input, type MultiSelectProps } from \"@/components/inputs\";\nimport { Button, DropdownMenuContent, DropdownMenuItem, PopoverContent } from \"@/components/ui\";\nimport { cn } from \"@/utils\";\nimport { DropdownMenu, DropdownMenuTrigger } from \"@radix-ui/react-dropdown-menu\";\nimport { Popover, PopoverTrigger } from \"@radix-ui/react-popover\";\nimport { type UseQueryResult } from \"@tanstack/react-query\";\nimport { Filter, Trash } from \"lucide-react\";\nimport { useCallback, useRef, useState } from \"react\";\n\nexport const FILTER_COMPARISON_OPERATORS = [\n 'eq',\n 'ne',\n 'cn',\n 'nc',\n 'sw',\n 'ew',\n 'in',\n 'nin',\n 'gt',\n 'gte',\n 'lt',\n 'lte',\n] as const;\nexport type FilterComparisonOperator =\n (typeof FILTER_COMPARISON_OPERATORS)[number];\n\nexport const COMPARISON_OPERATOR_LABELS: Record<\n FilterComparisonOperator,\n string\n> = {\n eq: 'equal to',\n ne: 'not equal to',\n cn: 'contains',\n nc: 'does not contain',\n sw: 'starts with',\n ew: 'ends with',\n in: 'includes',\n nin: 'does not include',\n gt: 'greater than',\n gte: 'greater than or equal to',\n lt: 'less than',\n lte: 'less than or equal to',\n};\n\ntype BaseLocalFilter<T extends FilterType, V> = {\n type: T;\n property: string;\n operator: FilterComparisonOperator;\n value: V;\n displayValue?: string;\n};\ntype EnumLocalFilter = BaseLocalFilter<'enum', string[]>;\ntype IdLocalFilter = BaseLocalFilter<'id', string>;\ntype BoolLocalFilter = BaseLocalFilter<'bool', boolean>;\ntype StringLocalFilter = BaseLocalFilter<'string', string>;\ntype DateLocalFilter = BaseLocalFilter<'date', string>; // ISO date string\ntype IdSearchLocalFilter = BaseLocalFilter<'id-search', string[]>;\n\ntype LocalFilter = EnumLocalFilter\n | IdLocalFilter\n | BoolLocalFilter\n | StringLocalFilter\n | DateLocalFilter\n | IdSearchLocalFilter;\n\nexport type FilterConfig =\n // TODO, think about string[], and all the possible values we send to the backend\n | { type: 'enum'; component: React.FC<MultiSelectProps> }\n | { type: 'id' }\n | { type: 'bool' }\n | { type: 'string' }\n | { type: 'date' }\n | {\n type: 'id-search'; search: UseQueryResult<{\n id: string;\n name: string;\n }, Error>\n };\n\nexport type FilterType = FilterConfig['type'];\n\nconst FilterOperations: Record<FilterType, FilterComparisonOperator[]> = {\n 'bool': ['eq'],\n 'enum': ['in', 'nin'],\n 'id': ['in', 'nin'],\n 'id-search': ['in', 'nin'],\n 'string': ['eq', 'ne', 'cn', 'nc', 'sw', 'ew', 'in', 'nin'],\n 'date': ['lt', 'gt'],\n}\n\nexport function replaceAt<T>(\n array: readonly T[],\n index: number,\n updater: (item: T) => T\n): T[] {\n return array.map((item, i) => (i === index ? updater(item) : item));\n}\n\nexport type FiltersConfig<TOperation extends OperationKeys> = Required<Record<keyof ApiFilters<TOperation>, FilterConfig>>\ntype TableFilterProps = React.ComponentProps<'section'>;\n\nexport function DataTableFilter({ className, ...props }: TableFilterProps) {\n const { filters, query, setFilters, filterConfig } = useDataTable();\n\n\n\n const [localFilters, setLocalFilters] = useState<LocalFilter[]>([]);\n const localFilterRefs = useRef([]);\n const addFilterButtonRef = useRef<HTMLButtonElement>(null);\n\n const updateFilterAt = useCallback(\n (idx: number, change: Partial<Pick<LocalFilter, 'displayValue' | 'operator' | 'value'>>) => {\n setLocalFilters(prev =>\n replaceAt(prev, idx, f => ({ ...f, ...change }))\n );\n },\n [setLocalFilters]\n );\n\n const removeFilterAt = useCallback(\n (idx: number) => {\n setLocalFilters(prev => prev.filter((_, i) => i !== idx));\n },\n [setLocalFilters]\n );\n\n\n\n function FilterInput({ id, filter, onChange }: { id: string; filter: LocalFilter, onChange: (v: Partial<LocalFilter>) => void }) {\n const [value, setValue] = useState(filter.value);\n\n switch (filter.type) {\n case 'bool':\n return (\n <Checkbox\n id={id}\n checked={value}\n onChange={e => setValue(e.target.value)}\n onBlur={(_) => onChange({ value })}\n />\n );;\n case 'date':\n return (\n <Input\n id={id}\n type=\"date\"\n value={value}\n onChange={e => setValue(e.target.value)}\n onBlur={(_) => onChange({ value })}\n />\n );;\n case 'enum':\n break;\n // return c.component;\n case 'id':\n return (\n <Input\n id={id}\n type=\"text\"\n value={value}\n onChange={e => setValue(e.target.value)}\n onBlur={(_) => onChange({ value })}\n />\n );\n case 'id-search':\n break;\n // return (\n // <IdSearchInput\n // value={value}\n // onChange={(id) => onChange(id)}\n // />\n // );\n case 'string':\n return <Input\n id={id}\n type=\"text\"\n value={value}\n onChange={e => setValue(e.target.value)}\n onBlur={(_) => onChange({ value })}\n />;\n }\n }\n\n // More reason to hate TS https://github.com/Microsoft/TypeScript/issues/12870\n const filterKeys = Object.keys(filterConfig).sort();\n\n return (\n <section {...props} className={cn(\"flex gap-icon items-center\", className)}>\n {/* TODO, popover elevation-2, for being surface above card */}\n {/* Dropdown for properties -> Trigger popover for property specific thingy */}\n <Popover onOpenChange={(o) => {\n // Set filters when the popover closes\n if (!o) {\n // TODO, instead of generic transformation, use type based tranform()\n setFilters(localFilters.map(lf => { return { [lf.property]: { [lf.operator]: [lf.value] } } }))\n } else {\n addFilterButtonRef.current?.focus();\n }\n }}>\n <PopoverTrigger asChild>\n <Button active={filters.length > 0} disabled={query.isPending || filterKeys.length === 0} type=\"button\" size={'icon'} variant={'neutral'} icon={() => Filter} />\n </PopoverTrigger>\n {/* TODO, icon maps with dynamic imports? */}\n {/* TODO open popover with form for property specific filter */}\n {/* TODO, icons here??? */}\n <PopoverContent align=\"end\" className=\"min-w-xs w-full p-icon\">\n {/* const h3Styles = \"body mb-icon text-muted-foreground\"; */}\n {/* <h3 className={h3Styles}>{isFiltersActive ? \"Active filters\" : \"Add filters\"}</h3> */}\n {localFilters.length > 0 && <div className=\"flex flex-col gap-icon max-h-table overflow-auto border-y py-2\">\n {\n localFilters.map((lf, i) => {\n const key = `${lf.property}-${i}`;\n\n // Each of these could be a group of filters\n // For example, License is Perpetual means expiresAt==null and subscriptionStartTrigger == null OR Creation Date is Date could mean createdAt[gt]=START_OF_DAY && createdAt[lt]=END_OF_DAY \n // However, since different filters on the same property could be applied in different groups, this can cause confusion.\n // TODO Find relative, could be primitive or object.[operator].primitive\n return <div key={key} className=\"flex gap-icon items-center justify-normal\">\n <span className=\"text-sm\">{getResourceDisplayName(lf.property, 'admin-portal')}</span>\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button>{COMPARISON_OPERATOR_LABELS[lf.operator]}</Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent>\n {FilterOperations[lf.type].map(op => {\n return <DropdownMenuItem onClick={(_) => updateFilterAt(i, { ...lf, operator: op })}>{COMPARISON_OPERATOR_LABELS[op]}</DropdownMenuItem>\n })}\n </DropdownMenuContent>\n </DropdownMenu>\n {/* TODO className */}\n <FilterInput key={key} id={key} filter={lf} onChange={(v) => { updateFilterAt(i, ({ ...lf, ...v })) }} />\n <Button type=\"button\" variant=\"destructive\" size=\"icon\" icon={() => Trash} onClick={() => removeFilterAt(i)}></Button>\n </div>\n })\n }\n </div>}\n <div className=\"flex w-full items-center justify-end gap-2 not-first:mt-icon\">\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n {/* TODO We ideally want to do a diff between localFilters and filters, and based on that, show a save button here. \n\t\t\t\t\t\t\t\tLook into ways in which the diffing is both complete and accurate. This can act as a debouncing mechanism for users that add more than one filter. (need more data on whether or not users add multiple filters at once) */}\n <Button ref={addFilterButtonRef} variant={'neutral'}>Add Filter</Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent>\n {filterKeys.map(k => <DropdownMenuItem key={k} onClick={(_) => {\n const type = filterConfig[k].type as FilterType;\n\n const defaultValue = (t: FilterType) => {\n if (t === 'bool') {\n return true;\n } else if (t === 'string') {\n return '';\n }\n }\n\n const newFilter: LocalFilter = {\n operator: FilterOperations[type][0],\n value: defaultValue(type),\n type: type,\n property: k,\n };\n\n setLocalFilters(prev => [...prev, newFilter])\n // TODO Focus to ref\n\n }} className=\"dropdown-item\" role=\"menuitem\">{getResourceDisplayName(k, \"admin-portal\")}</DropdownMenuItem>)}\n </DropdownMenuContent>\n </DropdownMenu>\n {localFilters.length > 0 ? (\n <Button\n variant=\"neutral\"\n onClick={() => { setLocalFilters([]) }}\n >\n Reset filters\n </Button>\n ) : null}\n </div>\n {/* </> */}\n </PopoverContent>\n </Popover>\n {/* TODO render default shown filters */}\n </section>\n\n );\n};\n"],"names":["FILTER_COMPARISON_OPERATORS","COMPARISON_OPERATOR_LABELS","FilterOperations","replaceAt","array","index","updater","item","i","DataTableFilter","className","props","filters","query","setFilters","filterConfig","useDataTable","localFilters","setLocalFilters","useState","useRef","addFilterButtonRef","updateFilterAt","useCallback","idx","change","prev","f","removeFilterAt","_","FilterInput","id","filter","onChange","value","setValue","jsx","Checkbox","e","Input","filterKeys","cn","jsxs","Popover","o","_a","lf","PopoverTrigger","Button","Filter","PopoverContent","key","DropdownMenu","DropdownMenuTrigger","DropdownMenuContent","op","DropdownMenuItem","v","Trash","type","k","defaultValue","t","newFilter","getResourceDisplayName"],"mappings":"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"}