admins-components 9.0.39 → 9.0.41
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.
- package/dist/admins-components.js +38 -38
- package/dist/admins-components100.js +3 -52
- package/dist/admins-components100.js.map +1 -1
- package/dist/admins-components101.js +3 -82
- package/dist/admins-components101.js.map +1 -1
- package/dist/admins-components102.js +49 -110
- package/dist/admins-components102.js.map +1 -1
- package/dist/admins-components103.js +80 -45
- package/dist/admins-components103.js.map +1 -1
- package/dist/admins-components104.js +108 -101
- package/dist/admins-components104.js.map +1 -1
- package/dist/admins-components105.js +41 -14
- package/dist/admins-components105.js.map +1 -1
- package/dist/admins-components106.js +105 -6
- package/dist/admins-components106.js.map +1 -1
- package/dist/admins-components107.js +16 -248
- package/dist/admins-components107.js.map +1 -1
- package/dist/admins-components108.js +7 -27
- package/dist/admins-components108.js.map +1 -1
- package/dist/admins-components109.js +247 -23
- package/dist/admins-components109.js.map +1 -1
- package/dist/admins-components110.js +26 -171
- package/dist/admins-components110.js.map +1 -1
- package/dist/admins-components111.js +25 -65
- package/dist/admins-components111.js.map +1 -1
- package/dist/admins-components112.js +163 -58
- package/dist/admins-components112.js.map +1 -1
- package/dist/admins-components113.js +65 -27
- package/dist/admins-components113.js.map +1 -1
- package/dist/admins-components114.js +63 -12
- package/dist/admins-components114.js.map +1 -1
- package/dist/admins-components115.js +29 -26
- package/dist/admins-components115.js.map +1 -1
- package/dist/admins-components116.js +16 -9
- package/dist/admins-components116.js.map +1 -1
- package/dist/admins-components117.js +26 -3
- package/dist/admins-components117.js.map +1 -1
- package/dist/admins-components118.js +8 -2
- package/dist/admins-components118.js.map +1 -1
- package/dist/admins-components119.js +4 -3
- package/dist/admins-components119.js.map +1 -1
- package/dist/admins-components120.js +3 -21
- package/dist/admins-components120.js.map +1 -1
- package/dist/admins-components121.js +3 -14
- package/dist/admins-components121.js.map +1 -1
- package/dist/admins-components122.js +20 -7
- package/dist/admins-components122.js.map +1 -1
- package/dist/admins-components123.js +14 -13
- package/dist/admins-components123.js.map +1 -1
- package/dist/admins-components124.js +8 -26
- package/dist/admins-components124.js.map +1 -1
- package/dist/admins-components125.js +12 -82
- package/dist/admins-components125.js.map +1 -1
- package/dist/admins-components126.js +24 -9
- package/dist/admins-components126.js.map +1 -1
- package/dist/admins-components127.js +82 -4
- package/dist/admins-components127.js.map +1 -1
- package/dist/admins-components128.js +11 -8
- package/dist/admins-components128.js.map +1 -1
- package/dist/admins-components129.js +4 -6
- package/dist/admins-components129.js.map +1 -1
- package/dist/admins-components130.js +8 -6
- package/dist/admins-components130.js.map +1 -1
- package/dist/admins-components131.js +6 -14
- package/dist/admins-components131.js.map +1 -1
- package/dist/admins-components132.js +4 -11
- package/dist/admins-components132.js.map +1 -1
- package/dist/admins-components133.js +15 -30
- package/dist/admins-components133.js.map +1 -1
- package/dist/admins-components134.js +13 -4
- package/dist/admins-components134.js.map +1 -1
- package/dist/admins-components135.js +30 -29
- package/dist/admins-components135.js.map +1 -1
- package/dist/admins-components136.js +4 -5
- package/dist/admins-components136.js.map +1 -1
- package/dist/admins-components137.js +29 -5
- package/dist/admins-components137.js.map +1 -1
- package/dist/admins-components138.js +4 -7
- package/dist/admins-components138.js.map +1 -1
- package/dist/admins-components139.js +4 -73
- package/dist/admins-components139.js.map +1 -1
- package/dist/admins-components140.js +7 -28
- package/dist/admins-components140.js.map +1 -1
- package/dist/admins-components141.js +73 -58
- package/dist/admins-components141.js.map +1 -1
- package/dist/admins-components142.js +29 -24
- package/dist/admins-components142.js.map +1 -1
- package/dist/admins-components143.js +56 -47
- package/dist/admins-components143.js.map +1 -1
- package/dist/admins-components144.js +23 -30
- package/dist/admins-components144.js.map +1 -1
- package/dist/admins-components145.js +50 -3
- package/dist/admins-components145.js.map +1 -1
- package/dist/admins-components146.js +29 -177
- package/dist/admins-components146.js.map +1 -1
- package/dist/admins-components147.js +3 -46
- package/dist/admins-components147.js.map +1 -1
- package/dist/admins-components148.js +177 -35
- package/dist/admins-components148.js.map +1 -1
- package/dist/admins-components149.js +41 -41
- package/dist/admins-components149.js.map +1 -1
- package/dist/admins-components150.js +32 -136
- package/dist/admins-components150.js.map +1 -1
- package/dist/admins-components151.js +42 -54
- package/dist/admins-components151.js.map +1 -1
- package/dist/admins-components152.js +140 -6
- package/dist/admins-components152.js.map +1 -1
- package/dist/admins-components153.js +57 -5
- package/dist/admins-components153.js.map +1 -1
- package/dist/admins-components154.js +6 -75
- package/dist/admins-components154.js.map +1 -1
- package/dist/admins-components155.js +5 -28
- package/dist/admins-components155.js.map +1 -1
- package/dist/admins-components156.js +74 -1929
- package/dist/admins-components156.js.map +1 -1
- package/dist/admins-components157.js +29 -24811
- package/dist/admins-components157.js.map +1 -1
- package/dist/admins-components158.js +1930 -8
- package/dist/admins-components158.js.map +1 -1
- package/dist/admins-components159.js +24809 -5
- package/dist/admins-components159.js.map +1 -0
- package/dist/admins-components160.js +8 -141
- package/dist/admins-components160.js.map +1 -1
- package/dist/admins-components161.js +7 -9
- package/dist/admins-components162.js +141 -8
- package/dist/admins-components162.js.map +1 -1
- package/dist/admins-components163.js +10 -0
- package/dist/{admins-components161.js.map → admins-components163.js.map} +1 -1
- package/dist/admins-components164.js +8 -167
- package/dist/admins-components164.js.map +1 -1
- package/dist/admins-components166.js +167 -8
- package/dist/admins-components166.js.map +1 -1
- package/dist/admins-components167.js +39 -38
- package/dist/admins-components167.js.map +1 -1
- package/dist/admins-components168.js +9 -6
- package/dist/admins-components168.js.map +1 -1
- package/dist/admins-components169.js +42 -72
- package/dist/admins-components169.js.map +1 -1
- package/dist/admins-components170.js +6 -58
- package/dist/admins-components170.js.map +1 -1
- package/dist/admins-components171.js +72 -51
- package/dist/admins-components171.js.map +1 -1
- package/dist/admins-components172.js +57 -8
- package/dist/admins-components172.js.map +1 -1
- package/dist/admins-components173.js +40 -33
- package/dist/admins-components173.js.map +1 -1
- package/dist/admins-components174.js +3 -3
- package/dist/admins-components174.js.map +1 -1
- package/dist/admins-components175.js +53 -0
- package/dist/admins-components175.js.map +1 -0
- package/dist/admins-components176.js +8 -57
- package/dist/admins-components176.js.map +1 -1
- package/dist/admins-components178.js +59 -0
- package/dist/admins-components178.js.map +1 -0
- package/dist/admins-components38.js +2 -2
- package/dist/admins-components38.js.map +1 -1
- package/dist/admins-components39.js.map +1 -1
- package/dist/admins-components58.js.map +1 -1
- package/dist/admins-components59.js +1 -13
- package/dist/admins-components59.js.map +1 -1
- package/dist/admins-components61.js +22 -22
- package/dist/admins-components61.js.map +1 -1
- package/dist/admins-components62.js.map +1 -1
- package/dist/admins-components63.js +69 -133
- package/dist/admins-components63.js.map +1 -1
- package/dist/admins-components64.js +5 -0
- package/dist/admins-components64.js.map +1 -0
- package/dist/admins-components65.js +118 -7
- package/dist/admins-components65.js.map +1 -1
- package/dist/admins-components67.js +8 -0
- package/dist/admins-components67.js.map +1 -0
- package/dist/admins-components68.js +144 -7
- package/dist/admins-components68.js.map +1 -1
- package/dist/admins-components70.js +7 -279
- package/dist/admins-components70.js.map +1 -1
- package/dist/{admins-components69.js.map → admins-components71.js.map} +1 -1
- package/dist/admins-components72.js +279 -6
- package/dist/admins-components72.js.map +1 -1
- package/dist/admins-components74.js +6 -126
- package/dist/admins-components74.js.map +1 -1
- package/dist/{admins-components73.js.map → admins-components75.js.map} +1 -1
- package/dist/admins-components76.js +126 -6
- package/dist/admins-components76.js.map +1 -1
- package/dist/admins-components78.js +6 -69
- package/dist/admins-components78.js.map +1 -1
- package/dist/admins-components79.js +55 -234
- package/dist/admins-components79.js.map +1 -1
- package/dist/admins-components80.js +70 -0
- package/dist/admins-components80.js.map +1 -0
- package/dist/admins-components81.js +238 -6
- package/dist/admins-components81.js.map +1 -1
- package/dist/admins-components83.js +7 -0
- package/dist/admins-components83.js.map +1 -0
- package/dist/admins-components84.js +229 -6
- package/dist/admins-components84.js.map +1 -1
- package/dist/admins-components86.js +7 -0
- package/dist/{admins-components82.js.map → admins-components86.js.map} +1 -1
- package/dist/admins-components87.js +37 -6
- package/dist/admins-components87.js.map +1 -1
- package/dist/admins-components89.js +7 -0
- package/dist/{admins-components85.js.map → admins-components89.js.map} +1 -1
- package/dist/admins-components90.js +199 -6
- package/dist/admins-components90.js.map +1 -1
- package/dist/admins-components92.js +6 -75
- package/dist/admins-components92.js.map +1 -1
- package/dist/{admins-components91.js.map → admins-components93.js.map} +1 -1
- package/dist/admins-components94.js +75 -6
- package/dist/admins-components94.js.map +1 -1
- package/dist/admins-components96.js +7 -0
- package/dist/admins-components96.js.map +1 -0
- package/dist/admins-components97.js +204 -6
- package/dist/admins-components97.js.map +1 -1
- package/dist/admins-components99.js +6 -3
- package/dist/admins-components99.js.map +1 -1
- package/dist/src/components/ConfirmModal.vue.d.ts +1 -1
- package/dist/src/components/data-table/DataListActions.vue.d.ts +8 -0
- package/dist/src/styles/components/modal.scss_vue_type_style_index_0_src_true_lang.css +1 -1
- package/dist/src/types/data-list.d.ts +5 -1
- package/package.json +1 -1
- package/dist/admins-components165.js +0 -52
- package/dist/admins-components165.js.map +0 -1
- package/dist/admins-components66.js +0 -171
- package/dist/admins-components66.js.map +0 -1
- package/dist/admins-components77.js +0 -60
- package/dist/admins-components77.js.map +0 -1
- package/dist/admins-components82.js +0 -230
- package/dist/admins-components85.js +0 -38
- package/dist/admins-components88.js +0 -200
- package/dist/admins-components88.js.map +0 -1
- package/dist/admins-components95.js +0 -205
- package/dist/admins-components95.js.map +0 -1
- package/dist/admins-components98.js +0 -4
- package/dist/admins-components98.js.map +0 -1
- /package/dist/{admins-components69.js → admins-components71.js} +0 -0
- /package/dist/{admins-components73.js → admins-components75.js} +0 -0
- /package/dist/{admins-components91.js → admins-components93.js} +0 -0
|
@@ -1,7 +1,205 @@
|
|
|
1
|
-
import
|
|
2
|
-
import
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
1
|
+
import e from "./admins-components6.js";
|
|
2
|
+
import t from "./admins-components67.js";
|
|
3
|
+
import n from "./admins-components70.js";
|
|
4
|
+
import r from "./admins-components74.js";
|
|
5
|
+
import i from "./admins-components78.js";
|
|
6
|
+
import { getDefaultFilters as a } from "./admins-components80.js";
|
|
7
|
+
import o from "./admins-components86.js";
|
|
8
|
+
import s from "./admins-components89.js";
|
|
9
|
+
import c from "./admins-components92.js";
|
|
10
|
+
import l from "./admins-components96.js";
|
|
11
|
+
import { computed as u, createBlock as d, createCommentVNode as f, createElementBlock as p, createElementVNode as m, createVNode as h, defineComponent as g, mergeDefaults as _, mergeProps as v, onBeforeUnmount as y, onMounted as b, openBlock as x, ref as S } from "vue";
|
|
12
|
+
//#region src/components/data-table/DataList.vue?vue&type=script&setup=true&lang.ts
|
|
13
|
+
var C = { class: "ac-component" }, w = { class: "c-data-list__toolbar" }, T = {
|
|
14
|
+
key: 2,
|
|
15
|
+
class: "flex-center gap-1"
|
|
16
|
+
}, E = { class: "flex-center ml-auto nowrap" }, D = {
|
|
17
|
+
layoutBreakpoint: 768,
|
|
18
|
+
orderable: !0,
|
|
19
|
+
loading: !1,
|
|
20
|
+
useSearch: !0,
|
|
21
|
+
useFilters: !0,
|
|
22
|
+
handleUrl: !1
|
|
23
|
+
}, O = /* @__PURE__ */ g({
|
|
24
|
+
__name: "DataList",
|
|
25
|
+
props: /* @__PURE__ */ _({
|
|
26
|
+
config: {},
|
|
27
|
+
items: {},
|
|
28
|
+
settings: {},
|
|
29
|
+
id: {},
|
|
30
|
+
layoutBreakpoint: {},
|
|
31
|
+
orderable: { type: Boolean },
|
|
32
|
+
pagination: {},
|
|
33
|
+
loading: { type: Boolean },
|
|
34
|
+
handleUrl: { type: Boolean },
|
|
35
|
+
useSearch: { type: Boolean },
|
|
36
|
+
useFilters: { type: Boolean },
|
|
37
|
+
searchConfig: {},
|
|
38
|
+
filterConfig: {}
|
|
39
|
+
}, {
|
|
40
|
+
...D,
|
|
41
|
+
searchConfig: void 0,
|
|
42
|
+
filterConfig: void 0
|
|
43
|
+
}),
|
|
44
|
+
emits: [
|
|
45
|
+
"filter-change",
|
|
46
|
+
"selection-change",
|
|
47
|
+
"settings-change",
|
|
48
|
+
"pagination-change",
|
|
49
|
+
"sort-change",
|
|
50
|
+
"search-change"
|
|
51
|
+
],
|
|
52
|
+
setup(g, { expose: _, emit: D }) {
|
|
53
|
+
let O = S(null), k = g;
|
|
54
|
+
function A(e) {
|
|
55
|
+
let t = k[e];
|
|
56
|
+
return t && Object.hasOwn(t, "handleUrl") ? t.handleUrl : k.handleUrl;
|
|
57
|
+
}
|
|
58
|
+
let j = u(() => ({
|
|
59
|
+
...k.searchConfig,
|
|
60
|
+
handleUrl: A("searchConfig")
|
|
61
|
+
})), M = u(() => ({
|
|
62
|
+
...k.filterConfig,
|
|
63
|
+
handleUrl: A("filterConfig")
|
|
64
|
+
})), N = D, P = S(!1), F = S(!1), I = S(null), L = S(!1), R = S(null), z = S(!1), B = S(k.filterConfig?.items ? a(k.filterConfig.items, k.id, !1) : {}), V = null;
|
|
65
|
+
b(() => {
|
|
66
|
+
V = new ResizeObserver((e) => {
|
|
67
|
+
L.value = (e[0]?.contentRect.width ?? 0) < k.layoutBreakpoint;
|
|
68
|
+
}), R.value && V.observe(R.value);
|
|
69
|
+
}), y(() => V?.disconnect());
|
|
70
|
+
let H = u(() => {
|
|
71
|
+
let e = I.value?.layout;
|
|
72
|
+
return e === "table" || e === "cards" ? e : L.value ? "cards" : "table";
|
|
73
|
+
}), U = u(() => {
|
|
74
|
+
if (!I.value) return k.config;
|
|
75
|
+
let e = I.value.columnOrder, t = k.config.columns.map((e) => ({
|
|
76
|
+
...e,
|
|
77
|
+
visible: I.value.columns[e.property] ?? e.visible !== !1
|
|
78
|
+
}));
|
|
79
|
+
return e?.length && t.sort((t, n) => {
|
|
80
|
+
let r = e.indexOf(t.property), i = e.indexOf(n.property);
|
|
81
|
+
return (r === -1 ? 999 : r) - (i === -1 ? 999 : i);
|
|
82
|
+
}), {
|
|
83
|
+
...k.config,
|
|
84
|
+
columns: t
|
|
85
|
+
};
|
|
86
|
+
});
|
|
87
|
+
function W(e) {
|
|
88
|
+
I.value = e, N("settings-change", e);
|
|
89
|
+
}
|
|
90
|
+
_({
|
|
91
|
+
openOptions: () => P.value = !0,
|
|
92
|
+
closeOptions: () => P.value = !1,
|
|
93
|
+
openFilters: () => z.value = !0,
|
|
94
|
+
closeFilters: () => z.value = !1
|
|
95
|
+
});
|
|
96
|
+
async function G(e) {
|
|
97
|
+
z.value = !0, setTimeout(() => {
|
|
98
|
+
O.value?.focusFilter(e);
|
|
99
|
+
}, 300);
|
|
100
|
+
}
|
|
101
|
+
function K(e) {
|
|
102
|
+
B.value = e.values, N("filter-change", e.transformed);
|
|
103
|
+
}
|
|
104
|
+
let q = u(() => Object.values(B.value).filter((e) => e != null && e !== "").length), J = u(() => !!k.pagination && (k.items.length > 0 || !k.loading)), Y = (e) => {
|
|
105
|
+
N("search-change", e);
|
|
106
|
+
};
|
|
107
|
+
return (a, u) => (x(), p("div", C, [m("div", {
|
|
108
|
+
ref_key: "root",
|
|
109
|
+
ref: R,
|
|
110
|
+
class: "c-data-list"
|
|
111
|
+
}, [
|
|
112
|
+
m("div", w, [
|
|
113
|
+
g.useSearch ? (x(), d(l, v({ key: 0 }, j.value, { onSearchChange: Y }), null, 16)) : f("", !0),
|
|
114
|
+
g.useFilters && g.filterConfig?.items && g.filterConfig.items.length > 0 ? (x(), d(e, {
|
|
115
|
+
key: 1,
|
|
116
|
+
label: "Szűrők",
|
|
117
|
+
icon: "fa-solid fa-filter",
|
|
118
|
+
onClick: u[0] ||= (e) => z.value = !0,
|
|
119
|
+
style: { "flex-shrink": "0" },
|
|
120
|
+
type: q.value > 0 ? "info" : "normal",
|
|
121
|
+
indicator: q.value > 0 ? q.value : void 0
|
|
122
|
+
}, null, 8, ["type", "indicator"])) : f("", !0),
|
|
123
|
+
g.useFilters && g.filterConfig?.items && g.filterConfig.items.length > 0 ? (x(), p("div", T, [h(s, {
|
|
124
|
+
filters: B.value,
|
|
125
|
+
items: g.filterConfig.items,
|
|
126
|
+
onRemove: u[1] ||= (e) => O.value?.clearFilter(e),
|
|
127
|
+
onOpenFilter: G
|
|
128
|
+
}, null, 8, ["filters", "items"])])) : f("", !0),
|
|
129
|
+
m("div", E, [h(e, {
|
|
130
|
+
icon: "fa-solid fa-gear",
|
|
131
|
+
class: "lh-normal",
|
|
132
|
+
onClick: u[2] ||= (e) => P.value = !0
|
|
133
|
+
}), h(e, {
|
|
134
|
+
icon: "fa-solid fa-question",
|
|
135
|
+
class: "lh-normal",
|
|
136
|
+
onClick: u[3] ||= (e) => F.value = !0
|
|
137
|
+
})])
|
|
138
|
+
]),
|
|
139
|
+
g.useFilters && g.filterConfig?.items && g.filterConfig.items.length > 0 ? (x(), d(o, v({
|
|
140
|
+
key: 0,
|
|
141
|
+
ref_key: "dataFiltersRef",
|
|
142
|
+
ref: O
|
|
143
|
+
}, M.value, {
|
|
144
|
+
"storage-key": g.id,
|
|
145
|
+
open: z.value,
|
|
146
|
+
onClose: u[4] ||= (e) => z.value = !1,
|
|
147
|
+
onChange: K
|
|
148
|
+
}), null, 16, ["storage-key", "open"])) : f("", !0),
|
|
149
|
+
h(c, {
|
|
150
|
+
open: F.value,
|
|
151
|
+
onClose: u[5] ||= (e) => F.value = !1
|
|
152
|
+
}, null, 8, ["open"]),
|
|
153
|
+
H.value === "table" ? (x(), d(t, {
|
|
154
|
+
key: 1,
|
|
155
|
+
config: U.value,
|
|
156
|
+
loading: g.loading,
|
|
157
|
+
items: g.items,
|
|
158
|
+
settings: I.value ?? void 0,
|
|
159
|
+
onFilterChange: u[6] ||= (e) => N("filter-change", e),
|
|
160
|
+
onSelectionChange: u[7] ||= (e) => N("selection-change", e),
|
|
161
|
+
onSortChange: u[8] ||= (e) => N("sort-change", e)
|
|
162
|
+
}, null, 8, [
|
|
163
|
+
"config",
|
|
164
|
+
"loading",
|
|
165
|
+
"items",
|
|
166
|
+
"settings"
|
|
167
|
+
])) : (x(), d(n, {
|
|
168
|
+
key: 2,
|
|
169
|
+
config: U.value,
|
|
170
|
+
loading: g.loading,
|
|
171
|
+
items: g.items,
|
|
172
|
+
settings: I.value ?? void 0,
|
|
173
|
+
onSelectionChange: u[9] ||= (e) => N("selection-change", e)
|
|
174
|
+
}, null, 8, [
|
|
175
|
+
"config",
|
|
176
|
+
"loading",
|
|
177
|
+
"items",
|
|
178
|
+
"settings"
|
|
179
|
+
])),
|
|
180
|
+
g.pagination && J.value ? (x(), d(i, {
|
|
181
|
+
key: 3,
|
|
182
|
+
settings: g.pagination,
|
|
183
|
+
"storage-key": g.id,
|
|
184
|
+
"onUpdate:pagination": u[10] ||= (e) => N("pagination-change", e)
|
|
185
|
+
}, null, 8, ["settings", "storage-key"])) : f("", !0),
|
|
186
|
+
h(r, {
|
|
187
|
+
open: P.value,
|
|
188
|
+
columns: g.config.columns,
|
|
189
|
+
settings: g.settings ?? {},
|
|
190
|
+
"storage-key": g.id,
|
|
191
|
+
orderable: g.orderable,
|
|
192
|
+
onClose: u[11] ||= (e) => P.value = !1,
|
|
193
|
+
onChange: W
|
|
194
|
+
}, null, 8, [
|
|
195
|
+
"open",
|
|
196
|
+
"columns",
|
|
197
|
+
"settings",
|
|
198
|
+
"storage-key",
|
|
199
|
+
"orderable"
|
|
200
|
+
])
|
|
201
|
+
], 512)]));
|
|
202
|
+
}
|
|
203
|
+
});
|
|
6
204
|
//#endregion
|
|
7
|
-
export {
|
|
205
|
+
export { D as dataListDefaults, O as default };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"admins-components97.js","names":[],"sources":["../src/components/data-table/DataList.vue"],"sourcesContent":["<script lang=\"ts\">\nexport type { PaginatorSettings } from '@/types/data-list'\nexport type { DataSearchProps } from './DataSearch.vue'\nexport type { DataFiltersProps } from './DataFilters.vue'\n\nexport interface DataListProps {\n config: DataListConfig\n items: Record<string, unknown>[]\n settings?: Partial<DataListSettings>\n id: string\n layoutBreakpoint?: number\n orderable?: boolean\n pagination?: PaginatorSettings\n loading?: boolean\n handleUrl?: boolean\n useSearch?: boolean\n useFilters?: boolean\n searchConfig?: DataSearchProps\n filterConfig?: DataFiltersProps\n}\n\nexport const dataListDefaults = {\n layoutBreakpoint: 768,\n orderable: true,\n loading: false,\n useSearch: true,\n useFilters: true,\n handleUrl: false\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { ref, computed, onMounted, onBeforeUnmount } from 'vue'\nimport DataTable from '@/components/data-table/DataTable.vue'\nimport DataCards from '@/components/data-table/DataCards.vue'\nimport DataListOptions from '@/components/data-table/DataListOptions.vue'\nimport DataPaginator from '@/components/data-table/DataPaginator.vue'\nimport Button from '@/components/Button.vue'\nimport type {\n DataListConfig,\n DataListSettings,\n PageSettings,\n PaginatorSettings,\n} from '@/types/data-list'\nimport type { FilterValue } from '@/types/data-list'\nimport DataFilters, {\n type FilterResponse,\n type DataFiltersProps,\n} from '@/components/data-table/DataFilters.vue'\nimport FilterTags from '@/components/data-table/FilterTags.vue'\nimport DataListGuide from '@/components/data-table/DataListGuide.vue'\nimport DataSearch, { type DataSearchProps } from './DataSearch.vue'\nimport { getDefaultFilters } from '@/utils/dataFilters.ts'\n\nconst dataFiltersRef = ref<InstanceType<typeof DataFilters> | null>(null)\n\nconst props = withDefaults(defineProps<DataListProps>(), {\n ...dataListDefaults,\n searchConfig: undefined,\n filterConfig: undefined,\n})\n\nfunction resolvedHandleUrl(side: 'searchConfig' | 'filterConfig'): boolean | undefined {\n const sideConfig = props[side]\n if (sideConfig && Object.hasOwn(sideConfig as object, 'handleUrl')) {\n return (sideConfig as { handleUrl?: boolean }).handleUrl\n }\n return props.handleUrl\n}\n\nconst mergedSearchConfig = computed<DataSearchProps>(() => ({\n ...props.searchConfig,\n handleUrl: resolvedHandleUrl('searchConfig'),\n}))\n\nconst mergedFilterConfig = computed<DataFiltersProps>(() => ({\n ...(props.filterConfig as DataFiltersProps),\n handleUrl: resolvedHandleUrl('filterConfig'),\n}))\n\nconst emit = defineEmits<{\n 'filter-change': [filters: Record<string, FilterValue>]\n 'selection-change': [selected: unknown[]]\n 'settings-change': [settings: DataListSettings]\n 'pagination-change': [pagination: PageSettings]\n 'sort-change': [sort: { key: string; direction: 'asc' | 'desc' }]\n 'search-change': [filters: Record<string, string | boolean>]\n}>()\n\nconst showOptions = ref(false)\nconst showGuide = ref(false)\nconst resolvedSettings = ref<DataListSettings | null>(null)\nconst isMobile = ref(false)\nconst root = ref<HTMLElement | null>(null)\nconst showFilters = ref(false)\n\nconst activeFilters = ref<Record<string, unknown>>(\n props.filterConfig?.items ? getDefaultFilters(props.filterConfig.items, props.id, false) : {},\n)\nlet resizeObserver: ResizeObserver | null = null\n\nonMounted(() => {\n resizeObserver = new ResizeObserver((entries) => {\n isMobile.value = (entries[0]?.contentRect.width ?? 0) < props.layoutBreakpoint\n })\n if (root.value) resizeObserver.observe(root.value)\n})\n\nonBeforeUnmount(() => resizeObserver?.disconnect())\n\nconst effectiveLayout = computed<'table' | 'cards'>(() => {\n const layout = resolvedSettings.value?.layout\n if (layout === 'table' || layout === 'cards') return layout\n return isMobile.value ? 'cards' : 'table'\n})\n\nconst internalConfig = computed<DataListConfig>(() => {\n if (!resolvedSettings.value) return props.config\n const order = resolvedSettings.value.columnOrder\n const mapped = props.config.columns.map((c) => ({\n ...c,\n visible: resolvedSettings.value!.columns[c.property] ?? c.visible !== false,\n }))\n if (order?.length) {\n mapped.sort((a, b) => {\n const ai = order.indexOf(a.property)\n const bi = order.indexOf(b.property)\n return (ai === -1 ? 999 : ai) - (bi === -1 ? 999 : bi)\n })\n }\n return { ...props.config, columns: mapped }\n})\n\nfunction onSettingsChange(s: DataListSettings) {\n resolvedSettings.value = s\n emit('settings-change', s)\n}\n\ndefineExpose({\n openOptions: () => (showOptions.value = true),\n closeOptions: () => (showOptions.value = false),\n openFilters: () => (showFilters.value = true),\n closeFilters: () => (showFilters.value = false),\n})\n\nasync function openFilter(key: string) {\n showFilters.value = true\n setTimeout(() => {\n dataFiltersRef.value?.focusFilter(key)\n }, 300)\n}\n\nfunction onFilterChange(response: FilterResponse) {\n activeFilters.value = response.values\n emit('filter-change', response.transformed)\n}\n\nconst activeFiltersCount = computed(\n () => Object.values(activeFilters.value).filter((v) => v != null && v !== '').length,\n)\n\nconst showPaginator = computed(\n () => !!props.pagination && (props.items.length > 0 || !props.loading),\n)\n\nconst searchChange = (value: Record<string, string | boolean>) => {\n emit('search-change', value)\n}\n\n</script>\n\n<template>\n <div class=\"ac-component\">\n <div ref=\"root\" class=\"c-data-list\">\n <div class=\"c-data-list__toolbar\">\n <DataSearch v-if=\"useSearch\" v-bind=\"mergedSearchConfig\" @search-change=\"searchChange\" />\n <Button\n v-if=\"useFilters && filterConfig?.items && filterConfig.items.length > 0\"\n label=\"Szűrők\"\n icon=\"fa-solid fa-filter\"\n @click=\"showFilters = true\"\n style=\"flex-shrink: 0\"\n :type=\"activeFiltersCount > 0 ? 'info' : 'normal'\"\n :indicator=\"activeFiltersCount > 0 ? activeFiltersCount : undefined\"\n />\n <div\n class=\"flex-center gap-1\"\n v-if=\"useFilters && filterConfig?.items && filterConfig.items.length > 0\"\n >\n <FilterTags\n :filters=\"activeFilters\"\n :items=\"filterConfig.items\"\n @remove=\"(key: string) => dataFiltersRef?.clearFilter(key)\"\n @openFilter=\"openFilter\"\n />\n </div>\n <div class=\"flex-center ml-auto nowrap\">\n <Button icon=\"fa-solid fa-gear\" class=\"lh-normal\" @click=\"showOptions = true\" />\n <Button icon=\"fa-solid fa-question\" class=\"lh-normal\" @click=\"showGuide = true\" />\n </div>\n </div>\n <DataFilters\n ref=\"dataFiltersRef\"\n v-if=\"useFilters && filterConfig?.items && filterConfig.items.length > 0\"\n v-bind=\"mergedFilterConfig\"\n :storage-key=\"id\"\n :open=\"showFilters\"\n @close=\"showFilters = false\"\n @change=\"onFilterChange\"\n />\n <DataListGuide :open=\"showGuide\" @close=\"showGuide = false\" />\n <DataTable\n v-if=\"effectiveLayout === 'table'\"\n :config=\"internalConfig\"\n :loading=\"loading\"\n :items=\"items\"\n :settings=\"resolvedSettings ?? undefined\"\n @filter-change=\"emit('filter-change', $event)\"\n @selection-change=\"emit('selection-change', $event)\"\n @sort-change=\"emit('sort-change', $event)\"\n />\n\n <DataCards\n v-else\n :config=\"internalConfig\"\n :loading=\"loading\"\n :items=\"items\"\n :settings=\"resolvedSettings ?? undefined\"\n @selection-change=\"emit('selection-change', $event)\"\n />\n\n <DataPaginator\n v-if=\"pagination && showPaginator\"\n :settings=\"pagination\"\n :storage-key=\"id\"\n @update:pagination=\"emit('pagination-change', $event)\"\n />\n\n <DataListOptions\n :open=\"showOptions\"\n :columns=\"config.columns\"\n :settings=\"settings ?? {}\"\n :storage-key=\"id\"\n :orderable=\"orderable\"\n @close=\"showOptions = false\"\n @change=\"onSettingsChange\"\n />\n </div>\n </div>\n</template>\n\n<style lang=\"scss\" src=\"@/styles/components/data-table/data-list.scss\"></style>\n"],"mappings":""}
|
|
1
|
+
{"version":3,"file":"admins-components97.js","names":[],"sources":["../src/components/data-table/DataList.vue"],"sourcesContent":["<script lang=\"ts\">\nexport type { PaginatorSettings } from '@/types/data-list'\nexport type { DataSearchProps } from './DataSearch.vue'\nexport type { DataFiltersProps } from './DataFilters.vue'\n\nexport interface DataListProps {\n config: DataListConfig\n items: Record<string, unknown>[]\n settings?: Partial<DataListSettings>\n id: string\n layoutBreakpoint?: number\n orderable?: boolean\n pagination?: PaginatorSettings\n loading?: boolean\n handleUrl?: boolean\n useSearch?: boolean\n useFilters?: boolean\n searchConfig?: DataSearchProps\n filterConfig?: DataFiltersProps\n}\n\nexport const dataListDefaults = {\n layoutBreakpoint: 768,\n orderable: true,\n loading: false,\n useSearch: true,\n useFilters: true,\n handleUrl: false\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { ref, computed, onMounted, onBeforeUnmount } from 'vue'\nimport DataTable from '@/components/data-table/DataTable.vue'\nimport DataCards from '@/components/data-table/DataCards.vue'\nimport DataListOptions from '@/components/data-table/DataListOptions.vue'\nimport DataPaginator from '@/components/data-table/DataPaginator.vue'\nimport Button from '@/components/Button.vue'\nimport type {\n DataListConfig,\n DataListSettings,\n PageSettings,\n PaginatorSettings,\n} from '@/types/data-list'\nimport type { FilterValue } from '@/types/data-list'\nimport DataFilters, {\n type FilterResponse,\n type DataFiltersProps,\n} from '@/components/data-table/DataFilters.vue'\nimport FilterTags from '@/components/data-table/FilterTags.vue'\nimport DataListGuide from '@/components/data-table/DataListGuide.vue'\nimport DataSearch, { type DataSearchProps } from './DataSearch.vue'\nimport { getDefaultFilters } from '@/utils/dataFilters.ts'\n\nconst dataFiltersRef = ref<InstanceType<typeof DataFilters> | null>(null)\n\nconst props = withDefaults(defineProps<DataListProps>(), {\n ...dataListDefaults,\n searchConfig: undefined,\n filterConfig: undefined,\n})\n\nfunction resolvedHandleUrl(side: 'searchConfig' | 'filterConfig'): boolean | undefined {\n const sideConfig = props[side]\n if (sideConfig && Object.hasOwn(sideConfig as object, 'handleUrl')) {\n return (sideConfig as { handleUrl?: boolean }).handleUrl\n }\n return props.handleUrl\n}\n\nconst mergedSearchConfig = computed<DataSearchProps>(() => ({\n ...props.searchConfig,\n handleUrl: resolvedHandleUrl('searchConfig'),\n}))\n\nconst mergedFilterConfig = computed<DataFiltersProps>(() => ({\n ...(props.filterConfig as DataFiltersProps),\n handleUrl: resolvedHandleUrl('filterConfig'),\n}))\n\nconst emit = defineEmits<{\n 'filter-change': [filters: Record<string, FilterValue>]\n 'selection-change': [selected: unknown[]]\n 'settings-change': [settings: DataListSettings]\n 'pagination-change': [pagination: PageSettings]\n 'sort-change': [sort: { key: string; direction: 'asc' | 'desc' }]\n 'search-change': [filters: Record<string, string | boolean>]\n}>()\n\nconst showOptions = ref(false)\nconst showGuide = ref(false)\nconst resolvedSettings = ref<DataListSettings | null>(null)\nconst isMobile = ref(false)\nconst root = ref<HTMLElement | null>(null)\nconst showFilters = ref(false)\n\nconst activeFilters = ref<Record<string, unknown>>(\n props.filterConfig?.items ? getDefaultFilters(props.filterConfig.items, props.id, false) : {},\n)\nlet resizeObserver: ResizeObserver | null = null\n\nonMounted(() => {\n resizeObserver = new ResizeObserver((entries) => {\n isMobile.value = (entries[0]?.contentRect.width ?? 0) < props.layoutBreakpoint\n })\n if (root.value) resizeObserver.observe(root.value)\n})\n\nonBeforeUnmount(() => resizeObserver?.disconnect())\n\nconst effectiveLayout = computed<'table' | 'cards'>(() => {\n const layout = resolvedSettings.value?.layout\n if (layout === 'table' || layout === 'cards') return layout\n return isMobile.value ? 'cards' : 'table'\n})\n\nconst internalConfig = computed<DataListConfig>(() => {\n if (!resolvedSettings.value) return props.config\n const order = resolvedSettings.value.columnOrder\n const mapped = props.config.columns.map((c) => ({\n ...c,\n visible: resolvedSettings.value!.columns[c.property] ?? c.visible !== false,\n }))\n if (order?.length) {\n mapped.sort((a, b) => {\n const ai = order.indexOf(a.property)\n const bi = order.indexOf(b.property)\n return (ai === -1 ? 999 : ai) - (bi === -1 ? 999 : bi)\n })\n }\n return { ...props.config, columns: mapped }\n})\n\nfunction onSettingsChange(s: DataListSettings) {\n resolvedSettings.value = s\n emit('settings-change', s)\n}\n\ndefineExpose({\n openOptions: () => (showOptions.value = true),\n closeOptions: () => (showOptions.value = false),\n openFilters: () => (showFilters.value = true),\n closeFilters: () => (showFilters.value = false),\n})\n\nasync function openFilter(key: string) {\n showFilters.value = true\n setTimeout(() => {\n dataFiltersRef.value?.focusFilter(key)\n }, 300)\n}\n\nfunction onFilterChange(response: FilterResponse) {\n activeFilters.value = response.values\n emit('filter-change', response.transformed)\n}\n\nconst activeFiltersCount = computed(\n () => Object.values(activeFilters.value).filter((v) => v != null && v !== '').length,\n)\n\nconst showPaginator = computed(\n () => !!props.pagination && (props.items.length > 0 || !props.loading),\n)\n\nconst searchChange = (value: Record<string, string | boolean>) => {\n emit('search-change', value)\n}\n\n</script>\n\n<template>\n <div class=\"ac-component\">\n <div ref=\"root\" class=\"c-data-list\">\n <div class=\"c-data-list__toolbar\">\n <DataSearch v-if=\"useSearch\" v-bind=\"mergedSearchConfig\" @search-change=\"searchChange\" />\n <Button\n v-if=\"useFilters && filterConfig?.items && filterConfig.items.length > 0\"\n label=\"Szűrők\"\n icon=\"fa-solid fa-filter\"\n @click=\"showFilters = true\"\n style=\"flex-shrink: 0\"\n :type=\"activeFiltersCount > 0 ? 'info' : 'normal'\"\n :indicator=\"activeFiltersCount > 0 ? activeFiltersCount : undefined\"\n />\n <div\n class=\"flex-center gap-1\"\n v-if=\"useFilters && filterConfig?.items && filterConfig.items.length > 0\"\n >\n <FilterTags\n :filters=\"activeFilters\"\n :items=\"filterConfig.items\"\n @remove=\"(key: string) => dataFiltersRef?.clearFilter(key)\"\n @openFilter=\"openFilter\"\n />\n </div>\n <div class=\"flex-center ml-auto nowrap\">\n <Button icon=\"fa-solid fa-gear\" class=\"lh-normal\" @click=\"showOptions = true\" />\n <Button icon=\"fa-solid fa-question\" class=\"lh-normal\" @click=\"showGuide = true\" />\n </div>\n </div>\n <DataFilters\n ref=\"dataFiltersRef\"\n v-if=\"useFilters && filterConfig?.items && filterConfig.items.length > 0\"\n v-bind=\"mergedFilterConfig\"\n :storage-key=\"id\"\n :open=\"showFilters\"\n @close=\"showFilters = false\"\n @change=\"onFilterChange\"\n />\n <DataListGuide :open=\"showGuide\" @close=\"showGuide = false\" />\n <DataTable\n v-if=\"effectiveLayout === 'table'\"\n :config=\"internalConfig\"\n :loading=\"loading\"\n :items=\"items\"\n :settings=\"resolvedSettings ?? undefined\"\n @filter-change=\"emit('filter-change', $event)\"\n @selection-change=\"emit('selection-change', $event)\"\n @sort-change=\"emit('sort-change', $event)\"\n />\n\n <DataCards\n v-else\n :config=\"internalConfig\"\n :loading=\"loading\"\n :items=\"items\"\n :settings=\"resolvedSettings ?? undefined\"\n @selection-change=\"emit('selection-change', $event)\"\n />\n\n <DataPaginator\n v-if=\"pagination && showPaginator\"\n :settings=\"pagination\"\n :storage-key=\"id\"\n @update:pagination=\"emit('pagination-change', $event)\"\n />\n\n <DataListOptions\n :open=\"showOptions\"\n :columns=\"config.columns\"\n :settings=\"settings ?? {}\"\n :storage-key=\"id\"\n :orderable=\"orderable\"\n @close=\"showOptions = false\"\n @change=\"onSettingsChange\"\n />\n </div>\n </div>\n</template>\n\n<style lang=\"scss\" src=\"@/styles/components/data-table/data-list.scss\"></style>\n"],"mappings":"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"}
|
|
@@ -1,4 +1,7 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
import './src/styles/components/data-table/data-list.scss_vue_type_style_index_0_src_true_lang.css';
|
|
2
|
+
import e from "./admins-components97.js";
|
|
3
|
+
/* empty css */
|
|
4
|
+
//#region src/components/data-table/DataList.vue
|
|
5
|
+
var t = e;
|
|
3
6
|
//#endregion
|
|
4
|
-
export {
|
|
7
|
+
export { t as default };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"admins-components99.js","names":[],"sources":["../src/
|
|
1
|
+
{"version":3,"file":"admins-components99.js","names":[],"sources":["../src/components/data-table/DataList.vue"],"sourcesContent":["<script lang=\"ts\">\nexport type { PaginatorSettings } from '@/types/data-list'\nexport type { DataSearchProps } from './DataSearch.vue'\nexport type { DataFiltersProps } from './DataFilters.vue'\n\nexport interface DataListProps {\n config: DataListConfig\n items: Record<string, unknown>[]\n settings?: Partial<DataListSettings>\n id: string\n layoutBreakpoint?: number\n orderable?: boolean\n pagination?: PaginatorSettings\n loading?: boolean\n handleUrl?: boolean\n useSearch?: boolean\n useFilters?: boolean\n searchConfig?: DataSearchProps\n filterConfig?: DataFiltersProps\n}\n\nexport const dataListDefaults = {\n layoutBreakpoint: 768,\n orderable: true,\n loading: false,\n useSearch: true,\n useFilters: true,\n handleUrl: false\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { ref, computed, onMounted, onBeforeUnmount } from 'vue'\nimport DataTable from '@/components/data-table/DataTable.vue'\nimport DataCards from '@/components/data-table/DataCards.vue'\nimport DataListOptions from '@/components/data-table/DataListOptions.vue'\nimport DataPaginator from '@/components/data-table/DataPaginator.vue'\nimport Button from '@/components/Button.vue'\nimport type {\n DataListConfig,\n DataListSettings,\n PageSettings,\n PaginatorSettings,\n} from '@/types/data-list'\nimport type { FilterValue } from '@/types/data-list'\nimport DataFilters, {\n type FilterResponse,\n type DataFiltersProps,\n} from '@/components/data-table/DataFilters.vue'\nimport FilterTags from '@/components/data-table/FilterTags.vue'\nimport DataListGuide from '@/components/data-table/DataListGuide.vue'\nimport DataSearch, { type DataSearchProps } from './DataSearch.vue'\nimport { getDefaultFilters } from '@/utils/dataFilters.ts'\n\nconst dataFiltersRef = ref<InstanceType<typeof DataFilters> | null>(null)\n\nconst props = withDefaults(defineProps<DataListProps>(), {\n ...dataListDefaults,\n searchConfig: undefined,\n filterConfig: undefined,\n})\n\nfunction resolvedHandleUrl(side: 'searchConfig' | 'filterConfig'): boolean | undefined {\n const sideConfig = props[side]\n if (sideConfig && Object.hasOwn(sideConfig as object, 'handleUrl')) {\n return (sideConfig as { handleUrl?: boolean }).handleUrl\n }\n return props.handleUrl\n}\n\nconst mergedSearchConfig = computed<DataSearchProps>(() => ({\n ...props.searchConfig,\n handleUrl: resolvedHandleUrl('searchConfig'),\n}))\n\nconst mergedFilterConfig = computed<DataFiltersProps>(() => ({\n ...(props.filterConfig as DataFiltersProps),\n handleUrl: resolvedHandleUrl('filterConfig'),\n}))\n\nconst emit = defineEmits<{\n 'filter-change': [filters: Record<string, FilterValue>]\n 'selection-change': [selected: unknown[]]\n 'settings-change': [settings: DataListSettings]\n 'pagination-change': [pagination: PageSettings]\n 'sort-change': [sort: { key: string; direction: 'asc' | 'desc' }]\n 'search-change': [filters: Record<string, string | boolean>]\n}>()\n\nconst showOptions = ref(false)\nconst showGuide = ref(false)\nconst resolvedSettings = ref<DataListSettings | null>(null)\nconst isMobile = ref(false)\nconst root = ref<HTMLElement | null>(null)\nconst showFilters = ref(false)\n\nconst activeFilters = ref<Record<string, unknown>>(\n props.filterConfig?.items ? getDefaultFilters(props.filterConfig.items, props.id, false) : {},\n)\nlet resizeObserver: ResizeObserver | null = null\n\nonMounted(() => {\n resizeObserver = new ResizeObserver((entries) => {\n isMobile.value = (entries[0]?.contentRect.width ?? 0) < props.layoutBreakpoint\n })\n if (root.value) resizeObserver.observe(root.value)\n})\n\nonBeforeUnmount(() => resizeObserver?.disconnect())\n\nconst effectiveLayout = computed<'table' | 'cards'>(() => {\n const layout = resolvedSettings.value?.layout\n if (layout === 'table' || layout === 'cards') return layout\n return isMobile.value ? 'cards' : 'table'\n})\n\nconst internalConfig = computed<DataListConfig>(() => {\n if (!resolvedSettings.value) return props.config\n const order = resolvedSettings.value.columnOrder\n const mapped = props.config.columns.map((c) => ({\n ...c,\n visible: resolvedSettings.value!.columns[c.property] ?? c.visible !== false,\n }))\n if (order?.length) {\n mapped.sort((a, b) => {\n const ai = order.indexOf(a.property)\n const bi = order.indexOf(b.property)\n return (ai === -1 ? 999 : ai) - (bi === -1 ? 999 : bi)\n })\n }\n return { ...props.config, columns: mapped }\n})\n\nfunction onSettingsChange(s: DataListSettings) {\n resolvedSettings.value = s\n emit('settings-change', s)\n}\n\ndefineExpose({\n openOptions: () => (showOptions.value = true),\n closeOptions: () => (showOptions.value = false),\n openFilters: () => (showFilters.value = true),\n closeFilters: () => (showFilters.value = false),\n})\n\nasync function openFilter(key: string) {\n showFilters.value = true\n setTimeout(() => {\n dataFiltersRef.value?.focusFilter(key)\n }, 300)\n}\n\nfunction onFilterChange(response: FilterResponse) {\n activeFilters.value = response.values\n emit('filter-change', response.transformed)\n}\n\nconst activeFiltersCount = computed(\n () => Object.values(activeFilters.value).filter((v) => v != null && v !== '').length,\n)\n\nconst showPaginator = computed(\n () => !!props.pagination && (props.items.length > 0 || !props.loading),\n)\n\nconst searchChange = (value: Record<string, string | boolean>) => {\n emit('search-change', value)\n}\n\n</script>\n\n<template>\n <div class=\"ac-component\">\n <div ref=\"root\" class=\"c-data-list\">\n <div class=\"c-data-list__toolbar\">\n <DataSearch v-if=\"useSearch\" v-bind=\"mergedSearchConfig\" @search-change=\"searchChange\" />\n <Button\n v-if=\"useFilters && filterConfig?.items && filterConfig.items.length > 0\"\n label=\"Szűrők\"\n icon=\"fa-solid fa-filter\"\n @click=\"showFilters = true\"\n style=\"flex-shrink: 0\"\n :type=\"activeFiltersCount > 0 ? 'info' : 'normal'\"\n :indicator=\"activeFiltersCount > 0 ? activeFiltersCount : undefined\"\n />\n <div\n class=\"flex-center gap-1\"\n v-if=\"useFilters && filterConfig?.items && filterConfig.items.length > 0\"\n >\n <FilterTags\n :filters=\"activeFilters\"\n :items=\"filterConfig.items\"\n @remove=\"(key: string) => dataFiltersRef?.clearFilter(key)\"\n @openFilter=\"openFilter\"\n />\n </div>\n <div class=\"flex-center ml-auto nowrap\">\n <Button icon=\"fa-solid fa-gear\" class=\"lh-normal\" @click=\"showOptions = true\" />\n <Button icon=\"fa-solid fa-question\" class=\"lh-normal\" @click=\"showGuide = true\" />\n </div>\n </div>\n <DataFilters\n ref=\"dataFiltersRef\"\n v-if=\"useFilters && filterConfig?.items && filterConfig.items.length > 0\"\n v-bind=\"mergedFilterConfig\"\n :storage-key=\"id\"\n :open=\"showFilters\"\n @close=\"showFilters = false\"\n @change=\"onFilterChange\"\n />\n <DataListGuide :open=\"showGuide\" @close=\"showGuide = false\" />\n <DataTable\n v-if=\"effectiveLayout === 'table'\"\n :config=\"internalConfig\"\n :loading=\"loading\"\n :items=\"items\"\n :settings=\"resolvedSettings ?? undefined\"\n @filter-change=\"emit('filter-change', $event)\"\n @selection-change=\"emit('selection-change', $event)\"\n @sort-change=\"emit('sort-change', $event)\"\n />\n\n <DataCards\n v-else\n :config=\"internalConfig\"\n :loading=\"loading\"\n :items=\"items\"\n :settings=\"resolvedSettings ?? undefined\"\n @selection-change=\"emit('selection-change', $event)\"\n />\n\n <DataPaginator\n v-if=\"pagination && showPaginator\"\n :settings=\"pagination\"\n :storage-key=\"id\"\n @update:pagination=\"emit('pagination-change', $event)\"\n />\n\n <DataListOptions\n :open=\"showOptions\"\n :columns=\"config.columns\"\n :settings=\"settings ?? {}\"\n :storage-key=\"id\"\n :orderable=\"orderable\"\n @close=\"showOptions = false\"\n @change=\"onSettingsChange\"\n />\n </div>\n </div>\n</template>\n\n<style lang=\"scss\" src=\"@/styles/components/data-table/data-list.scss\"></style>\n"],"mappings":""}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { Action, ActionGroup } from '../../types/data-list';
|
|
2
|
+
type __VLS_Props = {
|
|
3
|
+
actions: Array<Action | ActionGroup>;
|
|
4
|
+
item?: Record<string, unknown>;
|
|
5
|
+
};
|
|
6
|
+
declare const __VLS_export: import('vue').DefineComponent<__VLS_Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, any>;
|
|
7
|
+
declare const _default: typeof __VLS_export;
|
|
8
|
+
export default _default;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
.ac-component .c-modal-backdrop{z-index:11000;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px);background:#0006;justify-content:center;align-items:center;display:flex;position:fixed;inset:0}.ac-component .c-modal{background:var(--neutral-0);border-radius:.75rem;flex-direction:column;min-width:20rem;max-width:calc(100dvw - 2rem);max-height:calc(100dvh - 4rem);animation:.15s ease-out c-modal-enter;display:flex;overflow:hidden;box-shadow:0 8px 32px #0000001f}.ac-component .c-modal-header{border-bottom:1px solid var(--neutral-100);justify-content:space-between;align-items:center;padding
|
|
1
|
+
.ac-component .c-modal-backdrop{z-index:11000;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px);background:#0006;justify-content:center;align-items:center;display:flex;position:fixed;inset:0}.ac-component .c-modal{background:var(--neutral-0);border-radius:.75rem;flex-direction:column;min-width:20rem;max-width:calc(100dvw - 2rem);max-height:calc(100dvh - 4rem);animation:.15s ease-out c-modal-enter;display:flex;overflow:hidden;box-shadow:0 8px 32px #0000001f}.ac-component .c-modal-header{border-bottom:1px solid var(--neutral-100);justify-content:space-between;align-items:center;padding:.5rem;display:flex}.ac-component .c-modal-title{color:var(--neutral-900);padding-left:.5rem;font-size:1rem;font-weight:600}.ac-component .c-modal-close{color:var(--neutral-600);cursor:pointer;background:0 0;border:none;border-radius:999px;justify-content:center;align-items:center;padding:.5rem .625rem;font-size:1rem;transition:background-color .15s,color .15s;display:inline-flex}.ac-component .c-modal-close i{transform:translate(.5px)}.ac-component .c-modal-close:hover{background:var(--neutral-100);color:var(--neutral-900)}.ac-component .c-modal-close:focus-visible{outline:none;box-shadow:0 0 0 2px #f265221f}.ac-component .c-modal-body{flex:1;padding:1rem;display:flex;overflow-y:auto}.ac-component .c-modal-footer{border-top:1px solid var(--neutral-100);justify-content:flex-end;align-items:center;gap:.5rem;padding:.75rem 1.25rem;display:flex}.ac-component .c-confirm-modal-message{color:var(--neutral-700);margin:0;font-size:.875rem;line-height:1.5}@keyframes c-modal-enter{0%{opacity:0;transform:scale(.95)translateY(-.5rem)}to{opacity:1;transform:scale(1)translateY(0)}}
|
|
@@ -2,6 +2,7 @@ import { Ref } from 'vue';
|
|
|
2
2
|
import { DropdownOption } from '../components/DropdownSelect.vue';
|
|
3
3
|
import { PickedDate, PickedUtcRange } from './types';
|
|
4
4
|
import { ButtonType } from '../components/Button.vue';
|
|
5
|
+
import { ConfirmModalProps } from '../components/ConfirmModal.vue';
|
|
5
6
|
export type FilterValue = string | PickedDate | PickedUtcRange | string[] | null | undefined;
|
|
6
7
|
export interface FilterConfig {
|
|
7
8
|
type: 'text' | 'date' | 'date-range' | 'select' | 'multi-select';
|
|
@@ -44,10 +45,11 @@ export interface Column {
|
|
|
44
45
|
label: string;
|
|
45
46
|
property: string;
|
|
46
47
|
sort?: undefined | Sort;
|
|
47
|
-
converter?: undefined | ((v: any, item: any) => any);
|
|
48
48
|
type?: ColumnType;
|
|
49
49
|
class?: string | undefined;
|
|
50
50
|
headerClass?: string | undefined;
|
|
51
|
+
hideCopyToClipboard?: boolean | undefined;
|
|
52
|
+
converter?: undefined | ((v: any, item: any) => any);
|
|
51
53
|
loading?: (() => boolean) | undefined;
|
|
52
54
|
}
|
|
53
55
|
export type SortDirection = 'asc' | 'desc' | null;
|
|
@@ -66,6 +68,8 @@ export interface Action {
|
|
|
66
68
|
config?: Record<string, any> | undefined;
|
|
67
69
|
disabled?: (item: any) => boolean;
|
|
68
70
|
callback: (item: any) => any;
|
|
71
|
+
withConfirm?: boolean;
|
|
72
|
+
withConfirmConfig?: ConfirmModalProps;
|
|
69
73
|
}
|
|
70
74
|
export interface ActionGroup {
|
|
71
75
|
isGroup: true;
|
package/package.json
CHANGED
|
@@ -1,52 +0,0 @@
|
|
|
1
|
-
import e from "./admins-components14.js";
|
|
2
|
-
import { defineElement as t } from "./admins-components157.js";
|
|
3
|
-
import n from "./admins-components159.js";
|
|
4
|
-
import { createBlock as r, createCommentVNode as i, createSlots as a, openBlock as o, ref as s, renderList as c, renderSlot as l, resolveComponent as u, resolveDynamicComponent as d, watch as f, withCtx as p } from "vue";
|
|
5
|
-
//#region src/vueformelements/DateTimePickerElement.vue
|
|
6
|
-
var m = t({
|
|
7
|
-
name: "DateTimePickerElement",
|
|
8
|
-
components: { DatePicker: e },
|
|
9
|
-
setup(e, t) {
|
|
10
|
-
let { value: n } = t.element;
|
|
11
|
-
n.value = /* @__PURE__ */ new Date();
|
|
12
|
-
let r = t.attrs.placeholder, i = s(null), a = s(!1);
|
|
13
|
-
return f(n, () => {
|
|
14
|
-
i.value = {
|
|
15
|
-
local: n.value ? new Date(n.value) : null,
|
|
16
|
-
utc: n.value
|
|
17
|
-
}, a.value = !0;
|
|
18
|
-
}, {
|
|
19
|
-
deep: !0,
|
|
20
|
-
immediate: !0
|
|
21
|
-
}), {
|
|
22
|
-
display: a,
|
|
23
|
-
placeholder: r,
|
|
24
|
-
initial: i,
|
|
25
|
-
value: n,
|
|
26
|
-
setValue: (e) => {
|
|
27
|
-
e && e.utc && (n.value = e.utc);
|
|
28
|
-
}
|
|
29
|
-
};
|
|
30
|
-
}
|
|
31
|
-
});
|
|
32
|
-
function h(e, t, n, s, f, m) {
|
|
33
|
-
let h = u("DatePicker"), g = u("ElementLayout");
|
|
34
|
-
return o(), r(g, null, a({
|
|
35
|
-
element: p(() => [e.display ? (o(), r(h, {
|
|
36
|
-
key: 0,
|
|
37
|
-
"model-value": e.initial,
|
|
38
|
-
config: {
|
|
39
|
-
showTime: !0,
|
|
40
|
-
placeholder: e.placeholder
|
|
41
|
-
},
|
|
42
|
-
"onUpdate:modelValue": t[0] ||= (t) => e.setValue(t)
|
|
43
|
-
}, null, 8, ["model-value", "config"])) : i("", !0)]),
|
|
44
|
-
_: 2
|
|
45
|
-
}, [c(e.elementSlots, (t, n) => ({
|
|
46
|
-
name: n,
|
|
47
|
-
fn: p(() => [l(e.$slots, n, { el$: e.el$ }, () => [(o(), r(d(t), { el$: e.el$ }, null, 8, ["el$"]))])])
|
|
48
|
-
}))]), 1024);
|
|
49
|
-
}
|
|
50
|
-
var g = /* @__PURE__ */ n(m, [["render", h]]);
|
|
51
|
-
//#endregion
|
|
52
|
-
export { g as default };
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"admins-components165.js","names":[],"sources":["../src/vueformelements/DateTimePickerElement.vue"],"sourcesContent":["<!-- eslint-disable-next-line vue/block-lang -->\n<script>\nimport { defineElement } from '@vueform/vueform'\nimport { ref, watch } from 'vue'\nimport DatePicker from '@/components/DatePicker.vue'\n\nexport default defineElement({\n name: 'DateTimePickerElement',\n components: {\n DatePicker,\n },\n setup(props, context) {\n const { value } = context.element\n value.value = new Date()\n\n const placeholder = context.attrs.placeholder\n const initial = ref(null)\n const display = ref(false)\n\n const setValue = (v) => {\n if (v && v.utc) {\n value.value = v.utc\n }\n }\n\n watch(\n value,\n () => {\n initial.value = {\n local: value.value ? new Date(value.value) : null,\n utc: value.value,\n }\n display.value = true\n },\n { deep: true, immediate: true }\n )\n\n return {\n display,\n placeholder,\n initial,\n value,\n setValue,\n }\n },\n})\n</script>\n\n<template>\n <ElementLayout>\n <template #element>\n <DatePicker\n v-if=\"display\"\n :model-value=\"initial\"\n :config=\"{ showTime: true, placeholder: placeholder }\"\n @update:model-value=\"setValue($event)\"\n />\n </template>\n\n <template v-for=\"(component, slot) in elementSlots\" #[slot]>\n <!-- eslint-disable-next-line vue/valid-attribute-name -->\n <slot :name=\"slot\" :el$=\"el$\">\n <component :is=\"component\" :el$=\"el$\" />\n </slot>\n </template>\n </ElementLayout>\n</template>\n"],"mappings":";;;;;AAMA,IAAK,IAAa,EAAW;CAC3B,MAAM;CACN,YAAY,EACV,YAAA,EACF;CACA,MAAM,GAAO,GAAS;EACpB,IAAM,EAAE,aAAU,EAAQ;EAC1B,EAAM,wBAAQ,IAAI,KAAK;EAEvB,IAAM,IAAc,EAAQ,MAAM,aAC5B,IAAU,EAAI,IAAI,GAClB,IAAU,EAAI,EAAK;EAoBzB,OAZA,EACE,SACM;GAKJ,AAJA,EAAQ,QAAQ;IACd,OAAO,EAAM,QAAQ,IAAI,KAAK,EAAM,KAAK,IAAI;IAC7C,KAAK,EAAM;GACb,GACA,EAAQ,QAAQ;EAClB,GACA;GAAE,MAAM;GAAM,WAAW;EAAK,CAChC,GAEO;GACL;GACA;GACA;GACA;GACA,WAvBgB,MAAM;IACtB,AAAI,KAAK,EAAE,QACT,EAAM,QAAQ,EAAE;GAEpB;EAoBA;CACF;AACF,CAAC;;;aAIC,EAgBgB,GAAA,MAAA,EAAA;EAfH,SAAO,QAMd,CAJM,EAAA,WAAA,EAAA,GADR,EAKE,GAAA;;GAHC,eAAa,EAAA;GACb,QAAM;IAAA,UAAA;IAAA,aAAiC,EAAA;GAAW;GAClD,uBAAkB,AAAA,EAAA,QAAA,MAAE,EAAA,SAAS,CAAM;;;OAIF,EAAA,eAApB,GAAW;QAAwB;cAI5C,CAFP,EAEO,EAAA,QAFM,GAAI,EAAG,KAAK,EAAA,IAAG,SAErB,EAAA,EAAA,GADL,EAAwC,EAAxB,CAAS,GAAA,EAAG,KAAK,EAAA,IAAG,GAAA,MAAA,GAAA,CAAA,KAAA,CAAA,EAAA,CAAA,CAAA,CAAA"}
|
|
@@ -1,171 +0,0 @@
|
|
|
1
|
-
import e from "./admins-components6.js";
|
|
2
|
-
import t from "./admins-components19.js";
|
|
3
|
-
import n from "./admins-components27.js";
|
|
4
|
-
import r from "./admins-components42.js";
|
|
5
|
-
import i from "./admins-components52.js";
|
|
6
|
-
import { useSelection as a } from "./admins-components57.js";
|
|
7
|
-
import { dataCardsSettingsDefaults as o } from "./admins-components58.js";
|
|
8
|
-
import { buildActionGroupMenuItems as s, getColumnValue as c, isActionGroup as l } from "./admins-components59.js";
|
|
9
|
-
import u from "./admins-components62.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, unref as T, vShow as E, watch as D, withDirectives as O, withModifiers as k } from "vue";
|
|
11
|
-
//#region src/components/data-table/DataCards.vue?vue&type=script&setup=true&lang.ts
|
|
12
|
-
var A = { class: "ac-component" }, j = ["onClick", "onPointerdown"], M = ["onClick"], N = { class: "c-card__heading" }, P = { class: "c-card__label" }, F = ["innerHTML"], I = { class: "c-card__body" }, L = { class: "c-card__field-label" }, R = {
|
|
13
|
-
key: 1,
|
|
14
|
-
class: "c-cards__loading-wrap"
|
|
15
|
-
}, z = {
|
|
16
|
-
key: 2,
|
|
17
|
-
class: "c-cards__backdrop",
|
|
18
|
-
"aria-hidden": "true"
|
|
19
|
-
}, B = /* @__PURE__ */ v({
|
|
20
|
-
__name: "DataCards",
|
|
21
|
-
props: {
|
|
22
|
-
config: {},
|
|
23
|
-
items: {},
|
|
24
|
-
settings: { default: () => ({ ...o }) },
|
|
25
|
-
loading: {
|
|
26
|
-
type: Boolean,
|
|
27
|
-
default: !1
|
|
28
|
-
}
|
|
29
|
-
},
|
|
30
|
-
emits: ["selection-change"],
|
|
31
|
-
setup(o, { emit: v }) {
|
|
32
|
-
let B = o, V = v, { selectedKeys: H, toggle: U } = a(() => B.items, () => B.config.selectableAttr, (e) => V("selection-change", e)), W = S(/* @__PURE__ */ new Set());
|
|
33
|
-
D(() => B.items, () => {
|
|
34
|
-
W.value = /* @__PURE__ */ new Set();
|
|
35
|
-
});
|
|
36
|
-
let G = f(() => B.config.columns.filter((e) => e.visible !== !1)), K = f(() => {
|
|
37
|
-
let e = B.settings;
|
|
38
|
-
if (e?.cardHeaderColumns) {
|
|
39
|
-
let t = G.value.filter((t) => e.cardHeaderColumns[t.property]);
|
|
40
|
-
if (t.length > 0) {
|
|
41
|
-
if (e.cardHeaderOrder) {
|
|
42
|
-
let n = e.cardHeaderOrder;
|
|
43
|
-
return [...t].sort((e, t) => {
|
|
44
|
-
let r = n.indexOf(e.property), i = n.indexOf(t.property);
|
|
45
|
-
return (r === -1 ? 999 : r) - (i === -1 ? 999 : i);
|
|
46
|
-
});
|
|
47
|
-
}
|
|
48
|
-
return t;
|
|
49
|
-
}
|
|
50
|
-
}
|
|
51
|
-
let t = G.value.filter((e) => e.primary);
|
|
52
|
-
return t.length > 0 ? t : G.value.slice(0, 1);
|
|
53
|
-
}), q = null, J = !1;
|
|
54
|
-
function Y(e, t) {
|
|
55
|
-
B.config.selectableAttr && e.button === 0 && (J = !1, q = setTimeout(() => {
|
|
56
|
-
J = !0, U(t);
|
|
57
|
-
}, 500));
|
|
58
|
-
}
|
|
59
|
-
function X() {
|
|
60
|
-
q &&= (clearTimeout(q), null);
|
|
61
|
-
}
|
|
62
|
-
function Z(e) {
|
|
63
|
-
J && e.preventDefault();
|
|
64
|
-
}
|
|
65
|
-
function Q(e) {
|
|
66
|
-
if (J) {
|
|
67
|
-
J = !1;
|
|
68
|
-
return;
|
|
69
|
-
}
|
|
70
|
-
$(e);
|
|
71
|
-
}
|
|
72
|
-
function $(e) {
|
|
73
|
-
W.value.has(e) ? W.value.delete(e) : W.value.add(e), W.value = new Set(W.value);
|
|
74
|
-
}
|
|
75
|
-
return (a, f) => (x(), h("div", A, [g("div", { class: b(["c-cards-wrapper", { "is-loading": o.loading }]) }, [!o.loading || o.items.length > 0 ? (x(), h("div", {
|
|
76
|
-
key: 0,
|
|
77
|
-
class: b(["c-cards", { "is-compact": o.settings.compact }])
|
|
78
|
-
}, [(x(!0), h(d, null, C(o.items, (i, a) => (x(), h("div", {
|
|
79
|
-
key: a,
|
|
80
|
-
class: b(["c-card", {
|
|
81
|
-
"is-open": W.value.has(a),
|
|
82
|
-
"is-selected": o.config.selectableAttr && T(H).has(i[o.config.selectableAttr])
|
|
83
|
-
}])
|
|
84
|
-
}, [g("button", {
|
|
85
|
-
type: "button",
|
|
86
|
-
class: "c-card__header",
|
|
87
|
-
onClick: (e) => Q(a),
|
|
88
|
-
onPointerdown: (e) => Y(e, i),
|
|
89
|
-
onPointerup: f[1] ||= (e) => X(),
|
|
90
|
-
onPointerleave: f[2] ||= (e) => X(),
|
|
91
|
-
onContextmenu: Z
|
|
92
|
-
}, [
|
|
93
|
-
o.config.selectableAttr ? (x(), h("span", {
|
|
94
|
-
key: 0,
|
|
95
|
-
class: "c-card__check-zone",
|
|
96
|
-
onClick: k((e) => T(U)(i), ["stop"])
|
|
97
|
-
}, [_(t, {
|
|
98
|
-
"model-value": !!T(H).has(i[o.config.selectableAttr]),
|
|
99
|
-
"onUpdate:modelValue": (e) => T(U)(i),
|
|
100
|
-
onClick: f[0] ||= k(() => {}, ["stop"])
|
|
101
|
-
}, null, 8, ["model-value", "onUpdate:modelValue"])], 8, M)) : m("", !0),
|
|
102
|
-
g("span", N, [(x(!0), h(d, null, C(K.value, (e, t) => (x(), h("span", {
|
|
103
|
-
key: e.property,
|
|
104
|
-
class: "c-card__heading-item"
|
|
105
|
-
}, [g("span", P, w(e.label), 1), g("span", {
|
|
106
|
-
class: b(["c-card__title", { "c-truncate": o.settings.compact && t === 0 }]),
|
|
107
|
-
innerHTML: T(c)(i, e)
|
|
108
|
-
}, null, 10, F)]))), 128))]),
|
|
109
|
-
f[4] ||= g("span", {
|
|
110
|
-
class: "c-card__icon",
|
|
111
|
-
"aria-hidden": "true"
|
|
112
|
-
}, [g("i", { class: "fa-solid fa-chevron-down" })], -1)
|
|
113
|
-
], 40, j), O(g("div", I, [(x(!0), h(d, null, C(G.value, (e) => (x(), h("div", {
|
|
114
|
-
key: e.property,
|
|
115
|
-
class: "c-card__field",
|
|
116
|
-
tabindex: "0"
|
|
117
|
-
}, [
|
|
118
|
-
g("span", L, w(e.label), 1),
|
|
119
|
-
_(u, {
|
|
120
|
-
item: i,
|
|
121
|
-
col: e,
|
|
122
|
-
class: "c-card__field-value",
|
|
123
|
-
copy: !1
|
|
124
|
-
}, null, 8, ["item", "col"]),
|
|
125
|
-
T(c)(i, e) ? (x(), p(r, {
|
|
126
|
-
key: 0,
|
|
127
|
-
class: "c-card__field-copy click-expand",
|
|
128
|
-
value: T(c)(i, e)
|
|
129
|
-
}, null, 8, ["value"])) : m("", !0)
|
|
130
|
-
]))), 128)), o.config.actions ? (x(), h("div", {
|
|
131
|
-
key: 0,
|
|
132
|
-
class: "c-card__actions",
|
|
133
|
-
onClick: f[3] ||= k(() => {}, ["stop"])
|
|
134
|
-
}, [(x(!0), h(d, null, C(o.config.actions, (t, r) => (x(), h(d, { key: r }, [T(l)(t) ? (x(), p(n, y({
|
|
135
|
-
key: 0,
|
|
136
|
-
icon: t.icon,
|
|
137
|
-
label: t.label,
|
|
138
|
-
ariaLabel: t.ariaLabel,
|
|
139
|
-
items: T(s)(t, i)
|
|
140
|
-
}, { ref_for: !0 }, t.config), null, 16, [
|
|
141
|
-
"icon",
|
|
142
|
-
"label",
|
|
143
|
-
"ariaLabel",
|
|
144
|
-
"items"
|
|
145
|
-
])) : (x(), p(e, y({
|
|
146
|
-
key: 1,
|
|
147
|
-
type: t.type,
|
|
148
|
-
icon: t.icon,
|
|
149
|
-
label: t.cardLabel ?? t.label,
|
|
150
|
-
ariaLabel: t.ariaLabel,
|
|
151
|
-
outline: "",
|
|
152
|
-
disabled: t.disabled ? t.disabled(i) : !1,
|
|
153
|
-
callback: () => t.callback(i)
|
|
154
|
-
}, { ref_for: !0 }, t.config), null, 16, [
|
|
155
|
-
"type",
|
|
156
|
-
"icon",
|
|
157
|
-
"label",
|
|
158
|
-
"ariaLabel",
|
|
159
|
-
"disabled",
|
|
160
|
-
"callback"
|
|
161
|
-
]))], 64))), 128))])) : m("", !0)], 512), [[E, W.value.has(a)]])], 2))), 128))], 2)) : (x(), h("div", R, [_(i, {
|
|
162
|
-
loading: !0,
|
|
163
|
-
size: "2.5rem"
|
|
164
|
-
})])), o.loading && o.items.length > 0 ? (x(), h("div", z, [_(i, {
|
|
165
|
-
loading: !0,
|
|
166
|
-
size: "2.5rem"
|
|
167
|
-
})])) : m("", !0)], 2)]));
|
|
168
|
-
}
|
|
169
|
-
});
|
|
170
|
-
//#endregion
|
|
171
|
-
export { B as default };
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"admins-components66.js","names":[],"sources":["../src/components/data-table/DataCards.vue"],"sourcesContent":["<script lang=\"ts\">\nimport type { DataListConfig, DataCardsSettings, DataListSettings } from '@/types/data-list'\nimport DataCell from './DataCell.vue'\nexport { dataCardsSettingsDefaults } from '@/types/data-list'\n</script>\n\n<script setup lang=\"ts\">\nimport { computed, ref, watch } from 'vue'\nimport Button from '@/components/Button.vue'\nimport Checkbox from '@/components/Checkbox.vue'\nimport CopyToClipboard from '@/components/CopyToClipboard.vue'\nimport Loader from '@/components/Loader.vue'\nimport { useSelection } from '@/composables/useSelection'\nimport { dataCardsSettingsDefaults } from '@/types/data-list'\nimport DropdownMenu from '@/components/DropdownMenu.vue'\nimport { getColumnValue } from '@/utils/dataList'\nimport { buildActionGroupMenuItems, isActionGroup } from '@/utils/dataList'\n\nconst props = withDefaults(\n defineProps<{\n config: DataListConfig\n items: Record<string, unknown>[]\n settings?: DataCardsSettings | DataListSettings\n loading?: boolean\n }>(),\n {\n settings: () => ({ ...dataCardsSettingsDefaults }),\n loading: false,\n },\n)\n\nconst emit = defineEmits<{\n 'selection-change': [selected: unknown[]]\n}>()\n\nconst { selectedKeys, toggle: toggleRow } = useSelection(\n () => props.items,\n () => props.config.selectableAttr,\n (s) => emit('selection-change', s),\n)\n\nconst openRowIndexes = ref<Set<number>>(new Set())\n\nwatch(\n () => props.items,\n () => {\n openRowIndexes.value = new Set()\n },\n)\n\nconst visibleColumns = computed(() => props.config.columns.filter((c) => c.visible !== false))\n\nconst cardHeaderColumns = computed(() => {\n const s = props.settings as any\n if (s?.cardHeaderColumns) {\n const cols = visibleColumns.value.filter((c) => s.cardHeaderColumns[c.property])\n if (cols.length > 0) {\n if (s.cardHeaderOrder) {\n const order = s.cardHeaderOrder as string[]\n return [...cols].sort((a, b) => {\n const ai = order.indexOf(a.property)\n const bi = order.indexOf(b.property)\n return (ai === -1 ? 999 : ai) - (bi === -1 ? 999 : bi)\n })\n }\n return cols\n }\n }\n const primary = visibleColumns.value.filter((c) => c.primary)\n if (primary.length > 0) return primary\n\n return visibleColumns.value.slice(0, 1)\n})\n\nlet longPressTimer: ReturnType<typeof setTimeout> | null = null\nlet longPressTriggered = false\n\nfunction onPointerDown(e: PointerEvent, item: Record<string, unknown>) {\n if (!props.config.selectableAttr) return\n if (e.button !== 0) return\n longPressTriggered = false\n longPressTimer = setTimeout(() => {\n longPressTriggered = true\n toggleRow(item)\n }, 500)\n}\n\nfunction onPointerUp() {\n if (longPressTimer) {\n clearTimeout(longPressTimer)\n longPressTimer = null\n }\n}\n\nfunction onContextMenu(e: MouseEvent) {\n if (longPressTriggered) {\n e.preventDefault()\n }\n}\n\nfunction onHeaderClick(index: number) {\n if (longPressTriggered) {\n longPressTriggered = false\n return\n }\n toggleAccordion(index)\n}\n\nfunction toggleAccordion(index: number) {\n if (openRowIndexes.value.has(index)) {\n openRowIndexes.value.delete(index)\n } else {\n openRowIndexes.value.add(index)\n }\n openRowIndexes.value = new Set(openRowIndexes.value)\n}\n</script>\n\n<template>\n <div class=\"ac-component\">\n <div class=\"c-cards-wrapper\" :class=\"{ 'is-loading': loading }\">\n <div\n v-if=\"!loading || items.length > 0\"\n class=\"c-cards\"\n :class=\"{ 'is-compact': settings.compact }\"\n >\n <div\n v-for=\"(item, index) in items\"\n :key=\"index\"\n class=\"c-card\"\n :class=\"{\n 'is-open': openRowIndexes.has(index),\n 'is-selected': config.selectableAttr && selectedKeys.has(item[config.selectableAttr]),\n }\"\n >\n <button\n type=\"button\"\n class=\"c-card__header\"\n @click=\"onHeaderClick(index)\"\n @pointerdown=\"onPointerDown($event, item)\"\n @pointerup=\"onPointerUp()\"\n @pointerleave=\"onPointerUp()\"\n @contextmenu=\"onContextMenu\"\n >\n <span\n v-if=\"config.selectableAttr\"\n class=\"c-card__check-zone\"\n @click.stop=\"toggleRow(item)\"\n >\n <Checkbox\n :model-value=\"!!selectedKeys.has(item[config.selectableAttr])\"\n @update:model-value=\"toggleRow(item)\"\n @click.stop\n />\n </span>\n <span class=\"c-card__heading\">\n <span\n v-for=\"(col, i) in cardHeaderColumns\"\n :key=\"col.property\"\n class=\"c-card__heading-item\"\n >\n <span class=\"c-card__label\">{{ col.label }}</span>\n <span\n class=\"c-card__title\"\n :class=\"{ 'c-truncate': settings.compact && i === 0 }\"\n v-html=\"getColumnValue(item, col)\"\n ></span>\n </span>\n </span>\n <span class=\"c-card__icon\" aria-hidden=\"true\"\n ><i class=\"fa-solid fa-chevron-down\"></i\n ></span>\n </button>\n\n <div v-show=\"openRowIndexes.has(index)\" class=\"c-card__body\">\n <div\n v-for=\"col in visibleColumns\"\n :key=\"col.property\"\n class=\"c-card__field\"\n tabindex=\"0\"\n >\n <span class=\"c-card__field-label\">{{ col.label }}</span>\n <DataCell :item=\"item\" :col=\"col\" class=\"c-card__field-value\" :copy=\"false\" />\n\n <CopyToClipboard\n v-if=\"getColumnValue(item, col)\"\n class=\"c-card__field-copy click-expand\"\n :value=\"getColumnValue(item, col)\"\n />\n </div>\n\n <div v-if=\"config.actions\" class=\"c-card__actions\" @click.stop>\n <template v-for=\"(action, ai) in config.actions\" :key=\"ai\">\n <DropdownMenu\n v-if=\"isActionGroup(action)\"\n :icon=\"action.icon\"\n :label=\"action.label\"\n :ariaLabel=\"action.ariaLabel\"\n :items=\"buildActionGroupMenuItems(action, item)\"\n v-bind=\"action.config\"\n />\n\n <Button\n v-else\n :type=\"action.type\"\n :icon=\"action.icon\"\n :label=\"action.cardLabel ?? action.label\"\n :ariaLabel=\"action.ariaLabel\"\n outline\n :disabled=\"action.disabled ? action.disabled(item) : false\"\n :callback=\"() => action.callback(item)\"\n v-bind=\"action.config\"\n />\n </template>\n </div>\n </div>\n </div>\n </div>\n <div v-else class=\"c-cards__loading-wrap\">\n <Loader :loading=\"true\" size=\"2.5rem\" />\n </div>\n <div v-if=\"loading && items.length > 0\" class=\"c-cards__backdrop\" aria-hidden=\"true\">\n <Loader :loading=\"true\" size=\"2.5rem\" />\n </div>\n </div>\n </div>\n</template>\n\n<style lang=\"scss\" src=\"@/styles/components/data-table/data-cards.scss\"></style>\n"],"mappings":"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"}
|