admins-components 9.0.66 → 9.0.68

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 (250) hide show
  1. package/dist/admins-components.js +39 -39
  2. package/dist/admins-components100.js +75 -249
  3. package/dist/admins-components100.js.map +1 -1
  4. package/dist/admins-components102.js +2 -2
  5. package/dist/admins-components102.js.map +1 -1
  6. package/dist/admins-components103.js +256 -3
  7. package/dist/admins-components103.js.map +1 -1
  8. package/dist/admins-components105.js +6 -52
  9. package/dist/admins-components105.js.map +1 -1
  10. package/dist/admins-components106.js +3 -82
  11. package/dist/admins-components106.js.map +1 -1
  12. package/dist/admins-components107.js +3 -113
  13. package/dist/admins-components107.js.map +1 -1
  14. package/dist/admins-components108.js +49 -44
  15. package/dist/admins-components108.js.map +1 -1
  16. package/dist/admins-components109.js +80 -104
  17. package/dist/admins-components109.js.map +1 -1
  18. package/dist/admins-components110.js +109 -16
  19. package/dist/admins-components110.js.map +1 -1
  20. package/dist/admins-components111.js +46 -6
  21. package/dist/admins-components111.js.map +1 -1
  22. package/dist/admins-components112.js +100 -246
  23. package/dist/admins-components112.js.map +1 -1
  24. package/dist/admins-components113.js +19 -26
  25. package/dist/admins-components113.js.map +1 -1
  26. package/dist/admins-components114.js +6 -27
  27. package/dist/admins-components114.js.map +1 -1
  28. package/dist/admins-components115.js +239 -159
  29. package/dist/admins-components115.js.map +1 -1
  30. package/dist/admins-components116.js +26 -67
  31. package/dist/admins-components116.js.map +1 -1
  32. package/dist/admins-components117.js +25 -64
  33. package/dist/admins-components117.js.map +1 -1
  34. package/dist/admins-components118.js +169 -27
  35. package/dist/admins-components118.js.map +1 -1
  36. package/dist/admins-components119.js +65 -13
  37. package/dist/admins-components119.js.map +1 -1
  38. package/dist/admins-components120.js +64 -24
  39. package/dist/admins-components120.js.map +1 -1
  40. package/dist/admins-components121.js +29 -8
  41. package/dist/admins-components121.js.map +1 -1
  42. package/dist/admins-components122.js +16 -4
  43. package/dist/admins-components122.js.map +1 -1
  44. package/dist/admins-components123.js +27 -3
  45. package/dist/admins-components123.js.map +1 -1
  46. package/dist/admins-components124.js +8 -2
  47. package/dist/admins-components124.js.map +1 -1
  48. package/dist/admins-components125.js +4 -21
  49. package/dist/admins-components125.js.map +1 -1
  50. package/dist/admins-components126.js +3 -14
  51. package/dist/admins-components126.js.map +1 -1
  52. package/dist/admins-components127.js +3 -8
  53. package/dist/admins-components127.js.map +1 -1
  54. package/dist/admins-components128.js +19 -11
  55. package/dist/admins-components128.js.map +1 -1
  56. package/dist/admins-components129.js +14 -26
  57. package/dist/admins-components129.js.map +1 -1
  58. package/dist/admins-components130.js +7 -82
  59. package/dist/admins-components130.js.map +1 -1
  60. package/dist/admins-components131.js +9 -7
  61. package/dist/admins-components131.js.map +1 -1
  62. package/dist/admins-components132.js +25 -4
  63. package/dist/admins-components132.js.map +1 -1
  64. package/dist/admins-components133.js +81 -6
  65. package/dist/admins-components133.js.map +1 -1
  66. package/dist/admins-components134.js +10 -6
  67. package/dist/admins-components134.js.map +1 -1
  68. package/dist/admins-components135.js +2 -3
  69. package/dist/admins-components135.js.map +1 -1
  70. package/dist/admins-components136.js +8 -15
  71. package/dist/admins-components136.js.map +1 -1
  72. package/dist/admins-components137.js +6 -12
  73. package/dist/admins-components137.js.map +1 -1
  74. package/dist/admins-components138.js +6 -30
  75. package/dist/admins-components138.js.map +1 -1
  76. package/dist/admins-components139.js +15 -4
  77. package/dist/admins-components139.js.map +1 -1
  78. package/dist/admins-components140.js +13 -29
  79. package/dist/admins-components140.js.map +1 -1
  80. package/dist/admins-components141.js +30 -5
  81. package/dist/admins-components141.js.map +1 -1
  82. package/dist/admins-components142.js +4 -5
  83. package/dist/admins-components142.js.map +1 -1
  84. package/dist/admins-components143.js +28 -7
  85. package/dist/admins-components143.js.map +1 -1
  86. package/dist/admins-components144.js +4 -73
  87. package/dist/admins-components144.js.map +1 -1
  88. package/dist/admins-components145.js +4 -28
  89. package/dist/admins-components145.js.map +1 -1
  90. package/dist/admins-components146.js +8 -59
  91. package/dist/admins-components146.js.map +1 -1
  92. package/dist/admins-components147.js +72 -22
  93. package/dist/admins-components147.js.map +1 -1
  94. package/dist/admins-components148.js +26 -47
  95. package/dist/admins-components148.js.map +1 -1
  96. package/dist/admins-components149.js +58 -30
  97. package/dist/admins-components149.js.map +1 -1
  98. package/dist/admins-components150.js +24 -3
  99. package/dist/admins-components150.js.map +1 -1
  100. package/dist/admins-components151.js +44 -173
  101. package/dist/admins-components151.js.map +1 -1
  102. package/dist/admins-components152.js +28 -43
  103. package/dist/admins-components152.js.map +1 -1
  104. package/dist/admins-components153.js +3 -37
  105. package/dist/admins-components153.js.map +1 -1
  106. package/dist/admins-components154.js +176 -43
  107. package/dist/admins-components154.js.map +1 -1
  108. package/dist/admins-components155.js +41 -136
  109. package/dist/admins-components155.js.map +1 -1
  110. package/dist/admins-components156.js +36 -57
  111. package/dist/admins-components156.js.map +1 -1
  112. package/dist/admins-components157.js +44 -5
  113. package/dist/admins-components157.js.map +1 -1
  114. package/dist/admins-components158.js +141 -6
  115. package/dist/admins-components158.js.map +1 -1
  116. package/dist/admins-components159.js +57 -75
  117. package/dist/admins-components159.js.map +1 -1
  118. package/dist/admins-components160.js +6 -28
  119. package/dist/admins-components160.js.map +1 -1
  120. package/dist/admins-components161.js +5 -1930
  121. package/dist/admins-components161.js.map +1 -1
  122. package/dist/admins-components162.js +75 -24810
  123. package/dist/admins-components162.js.map +1 -1
  124. package/dist/admins-components163.js +28 -8
  125. package/dist/admins-components163.js.map +1 -1
  126. package/dist/admins-components164.js +1929 -5
  127. package/dist/admins-components164.js.map +1 -0
  128. package/dist/admins-components165.js +24809 -140
  129. package/dist/admins-components165.js.map +1 -1
  130. package/dist/admins-components166.js +3 -3
  131. package/dist/admins-components166.js.map +1 -1
  132. package/dist/admins-components167.js +7 -9
  133. package/dist/admins-components168.js +143 -0
  134. package/dist/admins-components168.js.map +1 -0
  135. package/dist/admins-components169.js +8 -167
  136. package/dist/admins-components169.js.map +1 -1
  137. package/dist/admins-components170.js +8 -52
  138. package/dist/admins-components170.js.map +1 -1
  139. package/dist/admins-components172.js +161 -43
  140. package/dist/admins-components172.js.map +1 -1
  141. package/dist/admins-components173.js +53 -6
  142. package/dist/admins-components173.js.map +1 -1
  143. package/dist/admins-components174.js +8 -79
  144. package/dist/admins-components174.js.map +1 -1
  145. package/dist/admins-components175.js +35 -43
  146. package/dist/admins-components175.js.map +1 -1
  147. package/dist/admins-components176.js +6 -63
  148. package/dist/admins-components176.js.map +1 -1
  149. package/dist/admins-components177.js +79 -8
  150. package/dist/admins-components177.js.map +1 -1
  151. package/dist/admins-components178.js +43 -37
  152. package/dist/admins-components178.js.map +1 -1
  153. package/dist/admins-components179.js +62 -8
  154. package/dist/admins-components179.js.map +1 -1
  155. package/dist/admins-components180.js +10 -0
  156. package/dist/admins-components180.js.map +1 -0
  157. package/dist/admins-components181.js +44 -50
  158. package/dist/admins-components181.js.map +1 -1
  159. package/dist/admins-components182.js +10 -0
  160. package/dist/admins-components182.js.map +1 -0
  161. package/dist/admins-components184.js +59 -0
  162. package/dist/admins-components184.js.map +1 -0
  163. package/dist/admins-components29.js.map +1 -1
  164. package/dist/admins-components30.js.map +1 -1
  165. package/dist/admins-components5.js.map +1 -1
  166. package/dist/admins-components6.js.map +1 -1
  167. package/dist/admins-components60.js +31 -73
  168. package/dist/admins-components60.js.map +1 -1
  169. package/dist/admins-components62.js +4 -2
  170. package/dist/admins-components62.js.map +1 -1
  171. package/dist/admins-components63.js +95 -88
  172. package/dist/admins-components63.js.map +1 -1
  173. package/dist/admins-components64.js +70 -4
  174. package/dist/admins-components64.js.map +1 -1
  175. package/dist/admins-components65.js +4 -157
  176. package/dist/admins-components65.js.map +1 -1
  177. package/dist/admins-components66.js +90 -0
  178. package/dist/admins-components66.js.map +1 -0
  179. package/dist/admins-components67.js +2 -5
  180. package/dist/admins-components67.js.map +1 -1
  181. package/dist/admins-components68.js +130 -136
  182. package/dist/admins-components68.js.map +1 -1
  183. package/dist/admins-components70.js +2 -2
  184. package/dist/admins-components70.js.map +1 -1
  185. package/dist/admins-components71.js +163 -7
  186. package/dist/admins-components71.js.map +1 -1
  187. package/dist/admins-components73.js +8 -0
  188. package/dist/admins-components73.js.map +1 -0
  189. package/dist/admins-components74.js +7 -6
  190. package/dist/admins-components74.js.map +1 -1
  191. package/dist/admins-components75.js +289 -8
  192. package/dist/admins-components75.js.map +1 -1
  193. package/dist/admins-components77.js +6 -145
  194. package/dist/admins-components77.js.map +1 -1
  195. package/dist/admins-components78.js +10 -0
  196. package/dist/admins-components78.js.map +1 -0
  197. package/dist/admins-components79.js +43 -6
  198. package/dist/admins-components79.js.map +1 -1
  199. package/dist/admins-components80.js +130 -121
  200. package/dist/admins-components80.js.map +1 -1
  201. package/dist/admins-components82.js +2 -2
  202. package/dist/admins-components82.js.map +1 -1
  203. package/dist/admins-components83.js +133 -56
  204. package/dist/admins-components83.js.map +1 -1
  205. package/dist/admins-components85.js +6 -238
  206. package/dist/admins-components85.js.map +1 -1
  207. package/dist/admins-components86.js +60 -0
  208. package/dist/admins-components86.js.map +1 -0
  209. package/dist/admins-components87.js +67 -6
  210. package/dist/admins-components87.js.map +1 -1
  211. package/dist/admins-components88.js +216 -208
  212. package/dist/admins-components88.js.map +1 -1
  213. package/dist/admins-components90.js +2 -2
  214. package/dist/admins-components90.js.map +1 -1
  215. package/dist/admins-components91.js +218 -58
  216. package/dist/admins-components91.js.map +1 -1
  217. package/dist/admins-components93.js +2 -2
  218. package/dist/admins-components93.js.map +1 -1
  219. package/dist/admins-components94.js +65 -194
  220. package/dist/admins-components94.js.map +1 -1
  221. package/dist/admins-components96.js +2 -2
  222. package/dist/admins-components96.js.map +1 -1
  223. package/dist/admins-components97.js +188 -71
  224. package/dist/admins-components97.js.map +1 -1
  225. package/dist/admins-components99.js +2 -2
  226. package/dist/admins-components99.js.map +1 -1
  227. package/dist/src/components/Button.vue.d.ts +0 -4
  228. package/dist/src/components/DropdownMenu.vue.d.ts +0 -4
  229. package/dist/src/components/data-table/DataList.vue.d.ts +0 -5
  230. package/dist/src/components/data-table/DataSearch.vue.d.ts +0 -4
  231. package/dist/src/components/data-table/DataSort.vue.d.ts +0 -5
  232. package/dist/src/components/data-table/FilterTags.vue.d.ts +0 -6
  233. package/dist/src/components/data-table/TagList.vue.d.ts +18 -0
  234. package/dist/src/index.d.ts +1 -1
  235. package/dist/src/styles/components/data-table/tag-list.scss_vue_type_style_index_0_src_true_lang.css +1 -0
  236. package/dist/src/utils/dataListConverters.d.ts +16 -1
  237. package/package.json +1 -1
  238. package/dist/admins-components104.js +0 -4
  239. package/dist/admins-components104.js.map +0 -1
  240. package/dist/admins-components167.js.map +0 -1
  241. package/dist/admins-components171.js +0 -10
  242. package/dist/admins-components171.js.map +0 -1
  243. package/dist/admins-components61.js +0 -71
  244. package/dist/admins-components61.js.map +0 -1
  245. package/dist/admins-components72.js +0 -289
  246. package/dist/admins-components72.js.map +0 -1
  247. package/dist/admins-components76.js +0 -44
  248. package/dist/admins-components76.js.map +0 -1
  249. package/dist/admins-components84.js +0 -68
  250. package/dist/admins-components84.js.map +0 -1
@@ -1,71 +1,231 @@
1
- import { formatDate as e } from "./admins-components3.js";
2
- import { displayFilterValue as t } from "./admins-components83.js";
3
- import { Fragment as n, computed as r, createCommentVNode as i, createElementBlock as a, createElementVNode as o, defineComponent as s, normalizeClass as c, openBlock as l, renderList as u, toDisplayString as d, unref as f } from "vue";
4
- //#region src/components/data-table/FilterTags.vue?vue&type=script&setup=true&lang.ts
5
- var p = { class: "filter-tags ac-component gap-1" }, m = ["onClick"], h = { class: "filter-tags__key" }, g = ["title"], _ = { class: "filter-tags__value-row" }, v = { class: "filter-tags__value-row" }, y = ["title"], b = ["title"], x = ["onClick"], S = /* @__PURE__ */ s({
6
- __name: "FilterTags",
1
+ import e from "./admins-components6.js";
2
+ import t from "./admins-components14.js";
3
+ import n from "./admins-components17.js";
4
+ import r from "./admins-components19.js";
5
+ import i from "./admins-components22.js";
6
+ import a from "./admins-components28.js";
7
+ import o from "./admins-components34.js";
8
+ import { filterEmptyValues as s, getDefaultFilters as c, writeFilterParams as l } from "./admins-components87.js";
9
+ import u from "./admins-components90.js";
10
+ import { Fragment as d, computed as f, createBlock as p, createCommentVNode as m, createElementBlock as h, createElementVNode as g, createVNode as _, defineComponent as v, mergeProps as y, normalizeClass as b, openBlock as x, ref as S, renderList as C, toDisplayString as w, withCtx as T } from "vue";
11
+ //#region src/components/data-table/DataFilters.vue?vue&type=script&setup=true&lang.ts
12
+ var E = {
13
+ key: 0,
14
+ class: "data-filters__separator"
15
+ }, D = ["for"], O = { class: "c-label" }, k = { class: "c-label" }, A = { class: "data-filters__footer" }, j = /* @__PURE__ */ v({
16
+ __name: "DataFilters",
7
17
  props: {
8
- filters: {},
9
18
  items: {},
10
- itemClass: {},
11
- compact: { type: Boolean }
19
+ open: {
20
+ type: Boolean,
21
+ default: !1
22
+ },
23
+ position: { default: "left" },
24
+ lazy: {
25
+ type: Boolean,
26
+ default: !0
27
+ },
28
+ handleUrl: {
29
+ type: Boolean,
30
+ default: !1
31
+ },
32
+ historyEnabled: {
33
+ type: Boolean,
34
+ default: !0
35
+ },
36
+ storageKey: {}
12
37
  },
13
- emits: ["remove", "openFilter"],
14
- setup(s, { emit: S }) {
15
- let C = s, w = S;
16
- function T(e) {
17
- let t = E(e);
18
- return t?.type === "daterange" || t?.type === "datetimerange";
38
+ emits: ["close", "change"],
39
+ setup(v, { expose: j, emit: M }) {
40
+ let N = v, P = M, F = S(c(N.items, N.storageKey, !1)), I = S({});
41
+ function L(e, t) {
42
+ t ? I.value[e] = t : delete I.value[e];
19
43
  }
20
- function E(e) {
21
- return C.items.find((t) => t.key === e);
44
+ function R(e) {
45
+ return {
46
+ ...e.config ?? {},
47
+ showTime: e.type === "datetime",
48
+ placeholder: e.placeholder ?? (e.type === "datetime" ? "Időpont" : "Dátum")
49
+ };
50
+ }
51
+ function z(e) {
52
+ return {
53
+ ...e.config ?? {},
54
+ ...e.fullWidth ? {} : { compact: !0 },
55
+ showTime: e.type === "datetimerange"
56
+ };
22
57
  }
23
- function D(e) {
24
- return E(e)?.label ?? e;
58
+ function B(e, t) {
59
+ let n = typeof t == "string" ? t.trim() : t;
60
+ F.value = {
61
+ ...F.value,
62
+ [e.key]: n
63
+ }, e.onChange && e.onChange(n), N.lazy || U();
25
64
  }
26
- function O(t, n) {
27
- let r = E(t);
28
- if (!r || r.type !== "daterange" && r.type !== "datetimerange" || !n || typeof n != "object") return null;
29
- let i = r.type === "datetimerange" ? "YYYY-MM-DD HH:mm" : "YYYY-MM-DD", a = n.fromUtc ? e(new Date(n.fromUtc), i) : "…", o = n.toUtc ? e(new Date(n.toUtc), i) : "…";
65
+ let V = f(() => Object.values(F.value).some((e) => e !== null && e !== "" && e !== void 0));
66
+ function H() {
67
+ let e = {};
68
+ for (let t of N.items) {
69
+ if (t.type === "separator") continue;
70
+ let n = F.value[t.key];
71
+ t.transformer ? Object.assign(e, t.transformer(n) ?? {}) : t.type === "date" || t.type === "datetime" ? e[t.key] = n?.utc ?? n : e[t.key] = n;
72
+ }
30
73
  return {
31
- from: a,
32
- to: o,
33
- title: `${a} - ${o}`
74
+ values: s(F.value),
75
+ transformed: s(e)
34
76
  };
35
77
  }
36
- function k(e) {
37
- return O(e, C.filters[e]);
78
+ function U() {
79
+ N.handleUrl && l(N.items, F.value), P("change", H());
80
+ }
81
+ function W() {
82
+ U(), P("close");
83
+ }
84
+ function G() {
85
+ F.value = {}, U();
86
+ }
87
+ function K(e) {
88
+ F.value = {
89
+ ...F.value,
90
+ [e]: null
91
+ }, U();
92
+ }
93
+ function q(e) {
94
+ let t = I.value[e];
95
+ t && (typeof t.focusAndOpen == "function" ? t.focusAndOpen() : typeof t.focus == "function" && t.focus());
96
+ }
97
+ function J(e) {
98
+ let t = { ...F.value };
99
+ for (let n of N.items) n.type !== "separator" && n.key in e && (t[n.key] = e[n.key] ?? null);
100
+ F.value = t, U();
101
+ }
102
+ j({
103
+ clearFilter: K,
104
+ focusFilter: q
105
+ });
106
+ function Y(e) {
107
+ e.key === "Enter" && e.target?.tagName !== "TEXTAREA" && (e.preventDefault(), W());
108
+ }
109
+ function X(e, t) {
110
+ e.onInnerSearch && e.onInnerSearch(t);
38
111
  }
39
- let A = r(() => Object.entries(C.filters).filter(([, e]) => e != null && e !== ""));
40
- return (e, r) => (l(), a("div", p, [(l(!0), a(n, null, u(A.value, ([e, u]) => (l(), a(n, { key: e }, [u != null && u !== "" ? (l(), a("span", {
41
- key: 0,
42
- class: c(["filter-tags__tag c-chip", [
43
- s.itemClass,
44
- E(e)?.displayClass,
45
- { "filter-tags__tag--daterange": s.compact && (E(e)?.type === "daterange" || E(e)?.type === "datetimerange") }
46
- ]])
47
- }, [o("span", {
48
- class: "filter-tags__content align-center-fix",
49
- onClick: (t) => w("openFilter", String(e))
50
- }, [o("span", h, d(D(e)) + ":", 1), s.compact && T(e) && k(e) ? (l(), a("span", {
51
- key: 0,
52
- class: "filter-tags__value",
53
- title: k(e).title
54
- }, [o("span", _, d(k(e).from), 1), o("span", v, d(k(e).to), 1)], 8, g)) : T(e) && k(e) ? (l(), a("span", {
55
- key: 1,
56
- class: "filter-tags__value",
57
- title: k(e).title
58
- }, d(k(e).from) + " - " + d(k(e).to), 9, y)) : (l(), a("span", {
59
- key: 2,
60
- class: "filter-tags__value",
61
- title: f(t)(s.items, e, u)
62
- }, d(f(t)(s.items, e, u)), 9, b))], 8, m), o("button", {
63
- type: "button",
64
- class: "filter-tags__remove",
65
- onClick: (t) => w("remove", String(e)),
66
- "aria-label": "Remove filter"
67
- }, [...r[0] ||= [o("i", { class: "fa-solid fa-fw fa-xmark" }, null, -1)]], 8, x)], 2)) : i("", !0)], 64))), 128))]));
112
+ return (s, c) => (x(), p(o, {
113
+ open: v.open,
114
+ title: "Szűrők",
115
+ position: v.position,
116
+ onClose: c[0] ||= (e) => P("close")
117
+ }, {
118
+ default: T(() => [
119
+ g("div", {
120
+ class: "data-filters",
121
+ onKeydown: Y
122
+ }, [(x(!0), h(d, null, C(v.items, (e) => (x(), h("div", {
123
+ key: e.key,
124
+ class: b(["data-filters__field", { "data-filters__field--full": e.fullWidth || e.type === "separator" }])
125
+ }, [e.type === "separator" ? (x(), h("hr", E)) : e.type === "checkbox" ? (x(), p(r, y({
126
+ key: 1,
127
+ ref_for: !0,
128
+ ref: (t) => L(e.key, t),
129
+ "model-value": F.value[e.key] ?? !1,
130
+ label: e.label ?? e.key,
131
+ "onUpdate:modelValue": (t) => B(e, t)
132
+ }, { ref_for: !0 }, e.config), null, 16, [
133
+ "model-value",
134
+ "label",
135
+ "onUpdate:modelValue"
136
+ ])) : [
137
+ "text",
138
+ "number",
139
+ "textarea"
140
+ ].includes(e.type) ? (x(), p(n, y({
141
+ key: 2,
142
+ type: e.type,
143
+ ref_for: !0,
144
+ ref: (t) => L(e.key, t),
145
+ id: `df-${e.key}`,
146
+ "model-value": F.value[e.key] ?? "",
147
+ label: e.label ?? e.key,
148
+ placeholder: e.placeholder,
149
+ "onUpdate:modelValue": (t) => B(e, t || null)
150
+ }, { ref_for: !0 }, e.config), null, 16, [
151
+ "type",
152
+ "id",
153
+ "model-value",
154
+ "label",
155
+ "placeholder",
156
+ "onUpdate:modelValue"
157
+ ])) : e.type === "date" || e.type === "datetime" ? (x(), h(d, { key: 3 }, [g("label", {
158
+ class: "c-label",
159
+ for: `df-${e.key}`
160
+ }, w(e.label ?? e.key), 9, D), _(t, {
161
+ ref_for: !0,
162
+ ref: (t) => L(e.key, t),
163
+ id: `df-${e.key}`,
164
+ "model-value": F.value[e.key] ?? null,
165
+ config: R(e),
166
+ "onUpdate:modelValue": (t) => B(e, t)
167
+ }, null, 8, [
168
+ "id",
169
+ "model-value",
170
+ "config",
171
+ "onUpdate:modelValue"
172
+ ])], 64)) : e.type === "daterange" || e.type === "datetimerange" ? (x(), h(d, { key: 4 }, [g("span", O, w(e.label ?? e.key), 1), _(i, {
173
+ ref_for: !0,
174
+ ref: (t) => L(e.key, t),
175
+ "model-value": F.value[e.key] ?? null,
176
+ config: z(e),
177
+ "onUpdate:modelValue": (t) => B(e, t)
178
+ }, null, 8, [
179
+ "model-value",
180
+ "config",
181
+ "onUpdate:modelValue"
182
+ ])], 64)) : e.type === "dropdown" ? (x(), h(d, { key: 5 }, [g("span", k, w(e.label ?? e.key), 1), _(a, {
183
+ ref_for: !0,
184
+ ref: (t) => L(e.key, t),
185
+ "model-value": F.value[e.key] ?? null,
186
+ options: e.options ?? [],
187
+ config: {
188
+ ...e.config ?? {},
189
+ placeholder: e.placeholder ?? "Válassz...",
190
+ clearable: !0,
191
+ filterable: !0
192
+ },
193
+ onFilterInput: (t) => X(e, t),
194
+ "onUpdate:modelValue": (t) => B(e, t)
195
+ }, null, 8, [
196
+ "model-value",
197
+ "options",
198
+ "config",
199
+ "onFilterInput",
200
+ "onUpdate:modelValue"
201
+ ])], 64)) : m("", !0)], 2))), 128))], 32),
202
+ g("div", A, [_(e, {
203
+ icon: "fa-solid fa-trash-can",
204
+ disabled: !V.value,
205
+ label: "Szűrők törlése",
206
+ "aria-label": "Szűrők törlése",
207
+ size: "small",
208
+ onClick: G
209
+ }, null, 8, ["disabled"]), _(e, {
210
+ label: "Szűrés",
211
+ "aria-label": "Szűrés",
212
+ type: "success",
213
+ onClick: W
214
+ })]),
215
+ v.historyEnabled ? (x(), h(d, { key: 0 }, [c[1] ||= g("hr", { class: "separator my-3" }, null, -1), _(u, {
216
+ items: v.items,
217
+ values: F.value,
218
+ "storage-key": v.storageKey,
219
+ onLoad: J
220
+ }, null, 8, [
221
+ "items",
222
+ "values",
223
+ "storage-key"
224
+ ])], 64)) : m("", !0)
225
+ ]),
226
+ _: 1
227
+ }, 8, ["open", "position"]));
68
228
  }
69
229
  });
70
230
  //#endregion
71
- export { S as default };
231
+ export { j as default };
@@ -1 +1 @@
1
- {"version":3,"file":"admins-components91.js","names":[],"sources":["../src/components/data-table/FilterTags.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed } from 'vue'\nimport type { FilterItem } from '@/components/data-table/DataFilters.vue'\nimport { displayFilterValue } from '@/utils/filterDisplay'\nimport { formatDate } from '@/utils/date'\n\nconst props = defineProps<{\n filters: Record<string, any>\n items: FilterItem[]\n itemClass?: string\n /**\n * When `true`, daterange/datetimerange tags are rendered in compact mode:\n * the two dates stack under the key on separate lines, with a smaller\n * font and tighter line-height. When `false` (the default), daterange\n * tags render inline as a single line, identical to the legacy behavior.\n */\n compact?: boolean\n}>()\nconst emit = defineEmits<{\n remove: [key: string]\n openFilter: [key: string]\n}>()\n\nfunction isRange(key: string): boolean {\n const item = getFilterItem(key)\n return item?.type === 'daterange' || item?.type === 'datetimerange'\n}\n\nfunction getFilterItem(key: string): FilterItem | undefined {\n return props.items.find((i) => i.key === key)\n}\n\nfunction getLabel(key: string): string {\n return getFilterItem(key)?.label ?? key\n}\n\ninterface DateRangeParts {\n from: string\n to: string\n title: string\n}\n\nfunction getDateRangeParts(key: string, value: any): DateRangeParts | null {\n const item = getFilterItem(key)\n if (!item || (item.type !== 'daterange' && item.type !== 'datetimerange')) return null\n if (!value || typeof value !== 'object') return null\n const showTime = item.type === 'datetimerange'\n const fmt = showTime ? 'YYYY-MM-DD HH:mm' : 'YYYY-MM-DD'\n const from = value.fromUtc ? formatDate(new Date(value.fromUtc), fmt) : '…'\n const to = value.toUtc ? formatDate(new Date(value.toUtc), fmt) : '…'\n return { from, to, title: `${from} - ${to}` }\n}\n\nfunction getParts(key: string): DateRangeParts | null {\n return getDateRangeParts(key, props.filters[key])\n}\n\nconst entries = computed(() =>\n Object.entries(props.filters).filter(\n ([, value]) => value != null && value !== '',\n ),\n)\n</script>\n\n<template>\n <div class=\"filter-tags ac-component gap-1\">\n <template v-for=\"([key, value]) in entries\" :key=\"key\">\n <span\n v-if=\"value != null && value !== ''\"\n class=\"filter-tags__tag c-chip\"\n :class=\"[\n itemClass,\n getFilterItem(key)?.displayClass,\n {\n 'filter-tags__tag--daterange':\n compact &&\n (getFilterItem(key)?.type === 'daterange' ||\n getFilterItem(key)?.type === 'datetimerange'),\n },\n ]\"\n >\n <span\n class=\"filter-tags__content align-center-fix\"\n @click=\"emit('openFilter', String(key))\"\n >\n <span class=\"filter-tags__key\">{{ getLabel(key) }}:</span>\n\n <span\n v-if=\"compact && isRange(key) && getParts(key)\"\n class=\"filter-tags__value\"\n :title=\"getParts(key)!.title\"\n >\n <span class=\"filter-tags__value-row\">{{ getParts(key)!.from }}</span>\n <span class=\"filter-tags__value-row\">{{ getParts(key)!.to }}</span>\n </span>\n\n <span\n v-else-if=\"isRange(key) && getParts(key)\"\n class=\"filter-tags__value\"\n :title=\"getParts(key)!.title\"\n >{{ getParts(key)!.from }} - {{ getParts(key)!.to }}</span>\n\n <span\n v-else\n class=\"filter-tags__value\"\n :title=\"displayFilterValue(items, key, value)\"\n >{{ displayFilterValue(items, key, value) }}</span>\n </span>\n\n <button\n type=\"button\"\n class=\"filter-tags__remove\"\n @click=\"emit('remove', String(key))\"\n aria-label=\"Remove filter\"\n >\n <i class=\"fa-solid fa-fw fa-xmark\"></i>\n </button>\n </span>\n </template>\n </div>\n</template>\n\n<style lang=\"scss\" src=\"@/styles/components/data-table/filter-tags.scss\"></style>\n"],"mappings":";;;;;;;;;;;;;;EAMA,IAAM,IAAQ,GAYR,IAAO;EAKb,SAAS,EAAQ,GAAsB;GACrC,IAAM,IAAO,EAAc,CAAG;GAC9B,OAAO,GAAM,SAAS,eAAe,GAAM,SAAS;EACtD;EAEA,SAAS,EAAc,GAAqC;GAC1D,OAAO,EAAM,MAAM,MAAM,MAAM,EAAE,QAAQ,CAAG;EAC9C;EAEA,SAAS,EAAS,GAAqB;GACrC,OAAO,EAAc,CAAG,GAAG,SAAS;EACtC;EAQA,SAAS,EAAkB,GAAa,GAAmC;GACzE,IAAM,IAAO,EAAc,CAAG;GAE9B,IADI,CAAC,KAAS,EAAK,SAAS,eAAe,EAAK,SAAS,mBACrD,CAAC,KAAS,OAAO,KAAU,UAAU,OAAO;GAEhD,IAAM,IADW,EAAK,SAAS,kBACR,qBAAqB,cACtC,IAAO,EAAM,UAAU,EAAW,IAAI,KAAK,EAAM,OAAO,GAAG,CAAG,IAAI,KAClE,IAAK,EAAM,QAAQ,EAAW,IAAI,KAAK,EAAM,KAAK,GAAG,CAAG,IAAI;GAClE,OAAO;IAAE;IAAM;IAAI,OAAO,GAAG,EAAK,KAAK;GAAK;EAC9C;EAEA,SAAS,EAAS,GAAoC;GACpD,OAAO,EAAkB,GAAK,EAAM,QAAQ,EAAI;EAClD;EAEA,IAAM,IAAU,QACd,OAAO,QAAQ,EAAM,OAAO,EAAE,QAC3B,GAAG,OAAW,KAAS,QAAQ,MAAU,EAC5C,CACF;yBAIE,EAsDM,OAtDN,GAsDM,EAAA,EAAA,EAAA,GArDJ,EAoDW,GAAA,MAAA,EApDwB,EAAA,QAAO,CAAvB,GAAK,oBAA0B,OAAG,GAAA,CAE3C,KAAK,QAAY,MAAK,MAAA,EAAA,GAD9B,EAkDO,QAAA;;GAhDL,OAAK,EAAA,CAAC,2BAAyB;IACX,EAAA;IAAqB,EAAc,CAAG,GAAG;qCAAmF,EAAA,YAA0B,EAAc,CAAG,GAAG,SAAI,eAAoC,EAAc,CAAG,GAAG,SAAI,iBAAA;;MAW9P,EA0BO,QAAA;GAzBL,OAAM;GACL,UAAK,MAAE,EAAI,cAAe,OAAO,CAAG,CAAA;MAErC,EAA0D,QAA1D,GAA0D,EAAxB,EAAS,CAAG,CAAA,IAAI,KAAC,CAAA,GAG3C,EAAA,WAAW,EAAQ,CAAG,KAAK,EAAS,CAAG,KAAA,EAAA,GAD/C,EAOO,QAAA;;GALL,OAAM;GACL,OAAO,EAAS,CAAG,EAAG;MAEvB,EAAqE,QAArE,GAAqE,EAA7B,EAAS,CAAG,EAAG,IAAI,GAAA,CAAA,GAC3D,EAAmE,QAAnE,GAAmE,EAA3B,EAAS,CAAG,EAAG,EAAE,GAAA,CAAA,CAAA,GAAA,GAAA,CAAA,KAI9C,EAAQ,CAAG,KAAK,EAAS,CAAG,KAAA,EAAA,GADzC,EAI2D,QAAA;;GAFzD,OAAM;GACL,OAAO,EAAS,CAAG,EAAG;OACrB,EAAS,CAAG,EAAG,IAAI,IAAG,QAAG,EAAG,EAAS,CAAG,EAAG,EAAE,GAAA,GAAA,CAAA,MAAA,EAAA,GAEjD,EAImD,QAAA;;GAFjD,OAAM;GACL,OAAO,EAAA,CAAA,EAAmB,EAAA,OAAO,GAAK,CAAK;OAC1C,EAAA,CAAA,EAAmB,EAAA,OAAO,GAAK,CAAK,CAAA,GAAA,GAAA,CAAA,EAAA,GAAA,GAAA,CAAA,GAG1C,EAOS,UAAA;GANP,MAAK;GACL,OAAM;GACL,UAAK,MAAE,EAAI,UAAW,OAAO,CAAG,CAAA;GACjC,cAAW;mBAEX,EAAuC,KAAA,EAApC,OAAM,0BAAyB,GAAA,MAAA,EAAA,CAAA,CAAA,GAAA,GAAA,CAAA,CAAA,GAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,GAAA,EAAA"}
1
+ {"version":3,"file":"admins-components91.js","names":[],"sources":["../src/components/data-table/DataFilters.vue"],"sourcesContent":["<script lang=\"ts\">\nimport type { DropdownOption } from '@/components/DropdownSelect.vue'\n\nexport interface FilterItem {\n type: FilterItemType\n key: string\n label?: string\n placeholder?: string\n value?: any\n options?: DropdownOption[]\n fullWidth?: boolean\n config?: Record<string, any>\n displayClass?: string\n transformer?: (value: any) => Record<string, any> | null | undefined\n onInnerSearch?: (value: string) => void\n onChange?: (value: any) => void\n}\n\nexport interface FilterResponse {\n values: Record<string, any>\n transformed: Record<string, any>\n}\n\nexport interface DataFiltersProps {\n items: FilterItem[]\n open?: boolean\n position?: SidebarPosition\n lazy?: boolean\n handleUrl?: boolean\n historyEnabled?: boolean\n storageKey?: string\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { computed, ref } from 'vue'\nimport Sidebar, { type SidebarPosition } from '@/components/Sidebar.vue'\nimport DatePicker from '@/components/DatePicker.vue'\nimport DateRangePicker from '@/components/DateRangePicker.vue'\nimport DropdownSelect from '@/components/DropdownSelect.vue'\nimport TextInput, { type TextInputType } from '@/components/TextInput.vue'\nimport Button from '@/components/Button.vue'\nimport Checkbox from '@/components/Checkbox.vue'\nimport FiltersHistory from '@/components/data-table/FiltersHistory.vue'\nimport type { DatePickerConfig, DateRangePickerConfig } from '@/types/datepickers'\nimport type { FilterItemType, PickedDate, PickedUtcRange } from '@/types/types'\nimport { filterEmptyValues, getDefaultFilters, writeFilterParams } from '@/utils/dataFilters'\n\nconst props = withDefaults(defineProps<DataFiltersProps>(), {\n open: false,\n position: 'left',\n lazy: true,\n handleUrl: false,\n historyEnabled: true,\n})\n\nconst emit = defineEmits<{\n close: []\n change: [response: FilterResponse]\n}>()\n\nconst values = ref<Record<string, any>>(getDefaultFilters(props.items, props.storageKey, false))\nconst filterRefs = ref<Record<string, any>>({})\n\nfunction setFilterRef(key: string, el: any) {\n if (el) filterRefs.value[key] = el\n else delete filterRefs.value[key]\n}\n\nfunction buildDatePickerConfig(item: FilterItem): DatePickerConfig {\n return {\n ...(item.config ?? {}),\n showTime: item.type === 'datetime',\n placeholder: item.placeholder ?? (item.type === 'datetime' ? 'Időpont' : 'Dátum'),\n }\n}\n\nfunction buildDateRangePickerConfig(item: FilterItem): DateRangePickerConfig {\n return {\n ...(item.config ?? {}),\n ...(!item.fullWidth ? { compact: true } : {}),\n showTime: item.type === 'datetimerange',\n }\n}\n\nfunction update(item: FilterItem, value: any) {\n const stored = typeof value === 'string' ? value.trim() : value\n values.value = { ...values.value, [item.key]: stored }\n if (item.onChange) item.onChange(stored)\n if (!props.lazy) emitChange()\n}\n\nconst hasActiveFilters = computed(() =>\n Object.values(values.value).some((v) => v !== null && v !== '' && v !== undefined),\n)\n\nfunction buildResponse(): FilterResponse {\n const transformed: Record<string, any> = {}\n for (const item of props.items) {\n if (item.type === 'separator') continue\n const val = values.value[item.key]\n if (item.transformer) {\n Object.assign(transformed, item.transformer(val) ?? {})\n } else if (item.type === 'date' || item.type === 'datetime') {\n transformed[item.key] = val?.utc ?? val\n } else {\n transformed[item.key] = val\n }\n }\n return { values: filterEmptyValues(values.value), transformed: filterEmptyValues(transformed) }\n}\n\nfunction emitChange() {\n if (props.handleUrl) writeFilterParams(props.items, values.value)\n emit('change', buildResponse())\n}\n\nfunction confirm() {\n emitChange()\n emit('close')\n}\n\nfunction clearAll() {\n values.value = {}\n emitChange()\n}\n\nfunction clearFilter(key: string) {\n values.value = { ...values.value, [key]: null }\n emitChange()\n}\n\nfunction focusFilter(key: string) {\n const el = (filterRefs.value as Record<string, any>)[key]\n if (!el) return\n\n if (typeof el.focusAndOpen === 'function') el.focusAndOpen()\n else if (typeof el.focus === 'function') el.focus()\n}\n\nfunction onHistoryLoad(loaded: Record<string, any>) {\n const next: Record<string, any> = { ...values.value }\n for (const item of props.items) {\n if (item.type === 'separator') continue\n if (item.key in loaded) next[item.key] = loaded[item.key] ?? null\n }\n values.value = next\n emitChange()\n}\n\ndefineExpose({ clearFilter, focusFilter })\n\nfunction handleFilterKeydown(event: KeyboardEvent) {\n if (event.key !== 'Enter') return\n\n // Allow Enter in textarea for line breaks\n const target = event.target as HTMLElement\n if (target?.tagName === 'TEXTAREA') return\n\n event.preventDefault()\n confirm()\n}\n\nfunction handleDropdownFilterInput(item: FilterItem, text: string) {\n if (item.onInnerSearch) item.onInnerSearch(text)\n}\n</script>\n\n<template>\n <Sidebar :open=\"open\" title=\"Szűrők\" :position=\"position\" @close=\"emit('close')\">\n <div class=\"data-filters\" @keydown=\"handleFilterKeydown\">\n <div\n v-for=\"item in items\"\n :key=\"item.key\"\n class=\"data-filters__field\"\n :class=\"{ 'data-filters__field--full': item.fullWidth || item.type === 'separator' }\"\n >\n <hr v-if=\"item.type === 'separator'\" class=\"data-filters__separator\" />\n <template v-else-if=\"item.type === 'checkbox'\">\n <Checkbox\n :ref=\"(el: any) => setFilterRef(item.key, el)\"\n :model-value=\"(values[item.key] as boolean) ?? false\"\n :label=\"item.label ?? item.key\"\n @update:model-value=\"(val) => update(item, val)\"\n v-bind=\"item.config\"\n />\n </template>\n <template v-else-if=\"['text', 'number', 'textarea'].includes(item.type)\">\n <TextInput\n :type=\"item.type as TextInputType\"\n :ref=\"(el: any) => setFilterRef(item.key, el)\"\n :id=\"`df-${item.key}`\"\n :model-value=\"(values[item.key] as string) ?? ''\"\n :label=\"item.label ?? item.key\"\n :placeholder=\"item.placeholder\"\n @update:model-value=\"(val) => update(item, val || null)\"\n v-bind=\"item.config\"\n />\n </template>\n <template v-else-if=\"item.type === 'date' || item.type === 'datetime'\">\n <label class=\"c-label\" :for=\"`df-${item.key}`\">{{ item.label ?? item.key }}</label>\n <DatePicker\n :ref=\"(el: any) => setFilterRef(item.key, el)\"\n :id=\"`df-${item.key}`\"\n :model-value=\"(values[item.key] as PickedDate) ?? null\"\n :config=\"buildDatePickerConfig(item)\"\n @update:model-value=\"(val) => update(item, val)\"\n />\n </template>\n <template v-else-if=\"item.type === 'daterange' || item.type === 'datetimerange'\">\n <span class=\"c-label\">{{ item.label ?? item.key }}</span>\n <DateRangePicker\n :ref=\"(el: any) => setFilterRef(item.key, el)\"\n :model-value=\"(values[item.key] as PickedUtcRange) ?? null\"\n :config=\"buildDateRangePickerConfig(item)\"\n @update:model-value=\"(val) => update(item, val)\"\n />\n </template>\n <template v-else-if=\"item.type === 'dropdown'\">\n <span class=\"c-label\">{{ item.label ?? item.key }}</span>\n <DropdownSelect\n :ref=\"(el: any) => setFilterRef(item.key, el)\"\n :model-value=\"(values[item.key] as string) ?? null\"\n :options=\"item.options ?? []\"\n :config=\"{\n ...(item.config ?? {}),\n placeholder: item.placeholder ?? 'Válassz...',\n clearable: true,\n filterable: true,\n }\"\n @filter-input=\"handleDropdownFilterInput(item, $event)\"\n @update:model-value=\"(val) => update(item, val)\"\n />\n </template>\n </div>\n </div>\n <div class=\"data-filters__footer\">\n <Button\n icon=\"fa-solid fa-trash-can\"\n :disabled=\"!hasActiveFilters\"\n label=\"Szűrők törlése\"\n aria-label=\"Szűrők törlése\"\n size=\"small\"\n @click=\"clearAll\"\n />\n <Button label=\"Szűrés\" aria-label=\"Szűrés\" type=\"success\" @click=\"confirm\" />\n </div>\n <template v-if=\"historyEnabled\">\n <hr class=\"separator my-3\" />\n <FiltersHistory\n :items=\"items\"\n :values=\"values\"\n :storage-key=\"storageKey\"\n @load=\"onHistoryLoad\"\n />\n </template>\n </Sidebar>\n</template>\n\n<style lang=\"scss\" src=\"@/styles/components/data-table/data-filters.scss\"></style>\n"],"mappings":"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"}
@@ -1,7 +1,7 @@
1
- import './src/styles/components/data-table/filter-tags.scss_vue_type_style_index_0_src_true_lang.css';
1
+ import './src/styles/components/data-table/data-filters.scss_vue_type_style_index_0_src_true_lang.css';
2
2
  import e from "./admins-components91.js";
3
3
  /* empty css */
4
- //#region src/components/data-table/FilterTags.vue
4
+ //#region src/components/data-table/DataFilters.vue
5
5
  var t = e;
6
6
  //#endregion
7
7
  export { t as default };
@@ -1 +1 @@
1
- {"version":3,"file":"admins-components93.js","names":[],"sources":["../src/components/data-table/FilterTags.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed } from 'vue'\nimport type { FilterItem } from '@/components/data-table/DataFilters.vue'\nimport { displayFilterValue } from '@/utils/filterDisplay'\nimport { formatDate } from '@/utils/date'\n\nconst props = defineProps<{\n filters: Record<string, any>\n items: FilterItem[]\n itemClass?: string\n /**\n * When `true`, daterange/datetimerange tags are rendered in compact mode:\n * the two dates stack under the key on separate lines, with a smaller\n * font and tighter line-height. When `false` (the default), daterange\n * tags render inline as a single line, identical to the legacy behavior.\n */\n compact?: boolean\n}>()\nconst emit = defineEmits<{\n remove: [key: string]\n openFilter: [key: string]\n}>()\n\nfunction isRange(key: string): boolean {\n const item = getFilterItem(key)\n return item?.type === 'daterange' || item?.type === 'datetimerange'\n}\n\nfunction getFilterItem(key: string): FilterItem | undefined {\n return props.items.find((i) => i.key === key)\n}\n\nfunction getLabel(key: string): string {\n return getFilterItem(key)?.label ?? key\n}\n\ninterface DateRangeParts {\n from: string\n to: string\n title: string\n}\n\nfunction getDateRangeParts(key: string, value: any): DateRangeParts | null {\n const item = getFilterItem(key)\n if (!item || (item.type !== 'daterange' && item.type !== 'datetimerange')) return null\n if (!value || typeof value !== 'object') return null\n const showTime = item.type === 'datetimerange'\n const fmt = showTime ? 'YYYY-MM-DD HH:mm' : 'YYYY-MM-DD'\n const from = value.fromUtc ? formatDate(new Date(value.fromUtc), fmt) : '…'\n const to = value.toUtc ? formatDate(new Date(value.toUtc), fmt) : ''\n return { from, to, title: `${from} - ${to}` }\n}\n\nfunction getParts(key: string): DateRangeParts | null {\n return getDateRangeParts(key, props.filters[key])\n}\n\nconst entries = computed(() =>\n Object.entries(props.filters).filter(\n ([, value]) => value != null && value !== '',\n ),\n)\n</script>\n\n<template>\n <div class=\"filter-tags ac-component gap-1\">\n <template v-for=\"([key, value]) in entries\" :key=\"key\">\n <span\n v-if=\"value != null && value !== ''\"\n class=\"filter-tags__tag c-chip\"\n :class=\"[\n itemClass,\n getFilterItem(key)?.displayClass,\n {\n 'filter-tags__tag--daterange':\n compact &&\n (getFilterItem(key)?.type === 'daterange' ||\n getFilterItem(key)?.type === 'datetimerange'),\n },\n ]\"\n >\n <span\n class=\"filter-tags__content align-center-fix\"\n @click=\"emit('openFilter', String(key))\"\n >\n <span class=\"filter-tags__key\">{{ getLabel(key) }}:</span>\n\n <span\n v-if=\"compact && isRange(key) && getParts(key)\"\n class=\"filter-tags__value\"\n :title=\"getParts(key)!.title\"\n >\n <span class=\"filter-tags__value-row\">{{ getParts(key)!.from }}</span>\n <span class=\"filter-tags__value-row\">{{ getParts(key)!.to }}</span>\n </span>\n\n <span\n v-else-if=\"isRange(key) && getParts(key)\"\n class=\"filter-tags__value\"\n :title=\"getParts(key)!.title\"\n >{{ getParts(key)!.from }} - {{ getParts(key)!.to }}</span>\n\n <span\n v-else\n class=\"filter-tags__value\"\n :title=\"displayFilterValue(items, key, value)\"\n >{{ displayFilterValue(items, key, value) }}</span>\n </span>\n\n <button\n type=\"button\"\n class=\"filter-tags__remove\"\n @click=\"emit('remove', String(key))\"\n aria-label=\"Remove filter\"\n >\n <i class=\"fa-solid fa-fw fa-xmark\"></i>\n </button>\n </span>\n </template>\n </div>\n</template>\n\n<style lang=\"scss\" src=\"@/styles/components/data-table/filter-tags.scss\"></style>\n"],"mappings":""}
1
+ {"version":3,"file":"admins-components93.js","names":[],"sources":["../src/components/data-table/DataFilters.vue"],"sourcesContent":["<script lang=\"ts\">\nimport type { DropdownOption } from '@/components/DropdownSelect.vue'\n\nexport interface FilterItem {\n type: FilterItemType\n key: string\n label?: string\n placeholder?: string\n value?: any\n options?: DropdownOption[]\n fullWidth?: boolean\n config?: Record<string, any>\n displayClass?: string\n transformer?: (value: any) => Record<string, any> | null | undefined\n onInnerSearch?: (value: string) => void\n onChange?: (value: any) => void\n}\n\nexport interface FilterResponse {\n values: Record<string, any>\n transformed: Record<string, any>\n}\n\nexport interface DataFiltersProps {\n items: FilterItem[]\n open?: boolean\n position?: SidebarPosition\n lazy?: boolean\n handleUrl?: boolean\n historyEnabled?: boolean\n storageKey?: string\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { computed, ref } from 'vue'\nimport Sidebar, { type SidebarPosition } from '@/components/Sidebar.vue'\nimport DatePicker from '@/components/DatePicker.vue'\nimport DateRangePicker from '@/components/DateRangePicker.vue'\nimport DropdownSelect from '@/components/DropdownSelect.vue'\nimport TextInput, { type TextInputType } from '@/components/TextInput.vue'\nimport Button from '@/components/Button.vue'\nimport Checkbox from '@/components/Checkbox.vue'\nimport FiltersHistory from '@/components/data-table/FiltersHistory.vue'\nimport type { DatePickerConfig, DateRangePickerConfig } from '@/types/datepickers'\nimport type { FilterItemType, PickedDate, PickedUtcRange } from '@/types/types'\nimport { filterEmptyValues, getDefaultFilters, writeFilterParams } from '@/utils/dataFilters'\n\nconst props = withDefaults(defineProps<DataFiltersProps>(), {\n open: false,\n position: 'left',\n lazy: true,\n handleUrl: false,\n historyEnabled: true,\n})\n\nconst emit = defineEmits<{\n close: []\n change: [response: FilterResponse]\n}>()\n\nconst values = ref<Record<string, any>>(getDefaultFilters(props.items, props.storageKey, false))\nconst filterRefs = ref<Record<string, any>>({})\n\nfunction setFilterRef(key: string, el: any) {\n if (el) filterRefs.value[key] = el\n else delete filterRefs.value[key]\n}\n\nfunction buildDatePickerConfig(item: FilterItem): DatePickerConfig {\n return {\n ...(item.config ?? {}),\n showTime: item.type === 'datetime',\n placeholder: item.placeholder ?? (item.type === 'datetime' ? 'Időpont' : 'Dátum'),\n }\n}\n\nfunction buildDateRangePickerConfig(item: FilterItem): DateRangePickerConfig {\n return {\n ...(item.config ?? {}),\n ...(!item.fullWidth ? { compact: true } : {}),\n showTime: item.type === 'datetimerange',\n }\n}\n\nfunction update(item: FilterItem, value: any) {\n const stored = typeof value === 'string' ? value.trim() : value\n values.value = { ...values.value, [item.key]: stored }\n if (item.onChange) item.onChange(stored)\n if (!props.lazy) emitChange()\n}\n\nconst hasActiveFilters = computed(() =>\n Object.values(values.value).some((v) => v !== null && v !== '' && v !== undefined),\n)\n\nfunction buildResponse(): FilterResponse {\n const transformed: Record<string, any> = {}\n for (const item of props.items) {\n if (item.type === 'separator') continue\n const val = values.value[item.key]\n if (item.transformer) {\n Object.assign(transformed, item.transformer(val) ?? {})\n } else if (item.type === 'date' || item.type === 'datetime') {\n transformed[item.key] = val?.utc ?? val\n } else {\n transformed[item.key] = val\n }\n }\n return { values: filterEmptyValues(values.value), transformed: filterEmptyValues(transformed) }\n}\n\nfunction emitChange() {\n if (props.handleUrl) writeFilterParams(props.items, values.value)\n emit('change', buildResponse())\n}\n\nfunction confirm() {\n emitChange()\n emit('close')\n}\n\nfunction clearAll() {\n values.value = {}\n emitChange()\n}\n\nfunction clearFilter(key: string) {\n values.value = { ...values.value, [key]: null }\n emitChange()\n}\n\nfunction focusFilter(key: string) {\n const el = (filterRefs.value as Record<string, any>)[key]\n if (!el) return\n\n if (typeof el.focusAndOpen === 'function') el.focusAndOpen()\n else if (typeof el.focus === 'function') el.focus()\n}\n\nfunction onHistoryLoad(loaded: Record<string, any>) {\n const next: Record<string, any> = { ...values.value }\n for (const item of props.items) {\n if (item.type === 'separator') continue\n if (item.key in loaded) next[item.key] = loaded[item.key] ?? null\n }\n values.value = next\n emitChange()\n}\n\ndefineExpose({ clearFilter, focusFilter })\n\nfunction handleFilterKeydown(event: KeyboardEvent) {\n if (event.key !== 'Enter') return\n\n // Allow Enter in textarea for line breaks\n const target = event.target as HTMLElement\n if (target?.tagName === 'TEXTAREA') return\n\n event.preventDefault()\n confirm()\n}\n\nfunction handleDropdownFilterInput(item: FilterItem, text: string) {\n if (item.onInnerSearch) item.onInnerSearch(text)\n}\n</script>\n\n<template>\n <Sidebar :open=\"open\" title=\"Szűrők\" :position=\"position\" @close=\"emit('close')\">\n <div class=\"data-filters\" @keydown=\"handleFilterKeydown\">\n <div\n v-for=\"item in items\"\n :key=\"item.key\"\n class=\"data-filters__field\"\n :class=\"{ 'data-filters__field--full': item.fullWidth || item.type === 'separator' }\"\n >\n <hr v-if=\"item.type === 'separator'\" class=\"data-filters__separator\" />\n <template v-else-if=\"item.type === 'checkbox'\">\n <Checkbox\n :ref=\"(el: any) => setFilterRef(item.key, el)\"\n :model-value=\"(values[item.key] as boolean) ?? false\"\n :label=\"item.label ?? item.key\"\n @update:model-value=\"(val) => update(item, val)\"\n v-bind=\"item.config\"\n />\n </template>\n <template v-else-if=\"['text', 'number', 'textarea'].includes(item.type)\">\n <TextInput\n :type=\"item.type as TextInputType\"\n :ref=\"(el: any) => setFilterRef(item.key, el)\"\n :id=\"`df-${item.key}`\"\n :model-value=\"(values[item.key] as string) ?? ''\"\n :label=\"item.label ?? item.key\"\n :placeholder=\"item.placeholder\"\n @update:model-value=\"(val) => update(item, val || null)\"\n v-bind=\"item.config\"\n />\n </template>\n <template v-else-if=\"item.type === 'date' || item.type === 'datetime'\">\n <label class=\"c-label\" :for=\"`df-${item.key}`\">{{ item.label ?? item.key }}</label>\n <DatePicker\n :ref=\"(el: any) => setFilterRef(item.key, el)\"\n :id=\"`df-${item.key}`\"\n :model-value=\"(values[item.key] as PickedDate) ?? null\"\n :config=\"buildDatePickerConfig(item)\"\n @update:model-value=\"(val) => update(item, val)\"\n />\n </template>\n <template v-else-if=\"item.type === 'daterange' || item.type === 'datetimerange'\">\n <span class=\"c-label\">{{ item.label ?? item.key }}</span>\n <DateRangePicker\n :ref=\"(el: any) => setFilterRef(item.key, el)\"\n :model-value=\"(values[item.key] as PickedUtcRange) ?? null\"\n :config=\"buildDateRangePickerConfig(item)\"\n @update:model-value=\"(val) => update(item, val)\"\n />\n </template>\n <template v-else-if=\"item.type === 'dropdown'\">\n <span class=\"c-label\">{{ item.label ?? item.key }}</span>\n <DropdownSelect\n :ref=\"(el: any) => setFilterRef(item.key, el)\"\n :model-value=\"(values[item.key] as string) ?? null\"\n :options=\"item.options ?? []\"\n :config=\"{\n ...(item.config ?? {}),\n placeholder: item.placeholder ?? 'Válassz...',\n clearable: true,\n filterable: true,\n }\"\n @filter-input=\"handleDropdownFilterInput(item, $event)\"\n @update:model-value=\"(val) => update(item, val)\"\n />\n </template>\n </div>\n </div>\n <div class=\"data-filters__footer\">\n <Button\n icon=\"fa-solid fa-trash-can\"\n :disabled=\"!hasActiveFilters\"\n label=\"Szűrők törlése\"\n aria-label=\"Szűrők törlése\"\n size=\"small\"\n @click=\"clearAll\"\n />\n <Button label=\"Szűrés\" aria-label=\"Szűrés\" type=\"success\" @click=\"confirm\" />\n </div>\n <template v-if=\"historyEnabled\">\n <hr class=\"separator my-3\" />\n <FiltersHistory\n :items=\"items\"\n :values=\"values\"\n :storage-key=\"storageKey\"\n @load=\"onHistoryLoad\"\n />\n </template>\n </Sidebar>\n</template>\n\n<style lang=\"scss\" src=\"@/styles/components/data-table/data-filters.scss\"></style>\n"],"mappings":""}