admins-components 9.0.64 → 9.0.66
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 +36 -36
- package/dist/admins-components100.js +104 -99
- package/dist/admins-components100.js.map +1 -1
- package/dist/admins-components102.js.map +1 -1
- package/dist/admins-components21.js +2 -2
- package/dist/admins-components21.js.map +1 -1
- package/dist/admins-components22.js.map +1 -1
- package/dist/admins-components29.js +6 -3
- package/dist/admins-components29.js.map +1 -1
- package/dist/admins-components30.js.map +1 -1
- package/dist/admins-components5.js +4 -2
- package/dist/admins-components5.js.map +1 -1
- package/dist/admins-components58.js.map +1 -1
- package/dist/admins-components6.js.map +1 -1
- package/dist/admins-components63.js +7 -2
- package/dist/admins-components63.js.map +1 -1
- package/dist/admins-components64.js.map +1 -1
- package/dist/admins-components65.js +56 -56
- package/dist/admins-components65.js.map +1 -1
- package/dist/admins-components67.js.map +1 -1
- package/dist/admins-components68.js +11 -11
- package/dist/admins-components68.js.map +1 -1
- package/dist/admins-components70.js.map +1 -1
- package/dist/admins-components76.js +8 -1
- package/dist/admins-components76.js.map +1 -1
- package/dist/admins-components77.js +47 -47
- package/dist/admins-components77.js.map +1 -1
- package/dist/admins-components79.js.map +1 -1
- package/dist/admins-components88.js +1 -1
- package/dist/admins-components88.js.map +1 -1
- package/dist/admins-components90.js.map +1 -1
- package/dist/admins-components91.js +53 -20
- package/dist/admins-components91.js.map +1 -1
- package/dist/admins-components93.js.map +1 -1
- package/dist/main.css +1 -1
- package/dist/main.css.map +1 -1
- package/dist/src/components/Button.vue.d.ts +6 -1
- package/dist/src/components/DropdownMenu.vue.d.ts +6 -0
- package/dist/src/components/data-table/DataList.vue.d.ts +8 -0
- package/dist/src/components/data-table/FilterTags.vue.d.ts +7 -0
- package/dist/src/index.d.ts +1 -1
- package/dist/src/styles/components/data-table/data-cards.scss_vue_type_style_index_0_src_true_lang.css +1 -1
- package/dist/src/styles/components/data-table/data-list.scss_vue_type_style_index_0_src_true_lang.css +1 -1
- package/dist/src/styles/components/data-table/data-paginator.scss_vue_type_style_index_0_src_true_lang.css +1 -1
- package/dist/src/styles/components/data-table/filter-tags.scss_vue_type_style_index_0_src_true_lang.css +1 -1
- package/dist/src/styles/components/datepickers.scss_vue_type_style_index_1_src_true_lang.css +1 -1
- package/dist/src/styles/components/header.scss_vue_type_style_index_0_src_true_lang.css +1 -1
- package/dist/src/styles/components/image-picker.scss_vue_type_style_index_0_src_true_lang.css +1 -1
- package/dist/src/styles/components/sidebar.scss_vue_type_style_index_0_src_true_lang.css +1 -1
- package/dist/src/types/data-list.d.ts +2 -0
- package/dist/src/utils/url.d.ts +1 -0
- package/package.json +1 -1
|
@@ -27,39 +27,39 @@ import J from "./admins-components70.js";
|
|
|
27
27
|
import { deepMerge as Y } from "./admins-components71.js";
|
|
28
28
|
import X from "./admins-components74.js";
|
|
29
29
|
import { getFullStorageKey as Z } from "./admins-components75.js";
|
|
30
|
-
import { getUrlParam as Q, joinUrl as $,
|
|
31
|
-
import { getDefaultPaginator as
|
|
32
|
-
import
|
|
33
|
-
import { getDefaultSort as
|
|
34
|
-
import { filterEmptyValues as
|
|
35
|
-
import
|
|
36
|
-
import
|
|
37
|
-
import
|
|
38
|
-
import { getDefaultSearch as
|
|
39
|
-
import { dataListDefaults as
|
|
40
|
-
import
|
|
41
|
-
import { isIpInUrl as
|
|
42
|
-
import { getCurrentSite as
|
|
43
|
-
import { vTooltip as
|
|
44
|
-
import { createNativeFetch as
|
|
45
|
-
import { FetchDetails as
|
|
46
|
-
import { useArticleEditorService as
|
|
47
|
-
import { useCurrentUser as
|
|
48
|
-
import { BackendService as
|
|
49
|
-
import { aoeConfig as
|
|
50
|
-
import
|
|
51
|
-
import { apeConfig as
|
|
52
|
-
import { configureImagePickerElement as
|
|
53
|
-
import
|
|
54
|
-
import
|
|
55
|
-
import { configureExternalArticleOfferElement as
|
|
56
|
-
import
|
|
57
|
-
import { configureGalleryImageSelectorElement as
|
|
58
|
-
import
|
|
59
|
-
import
|
|
60
|
-
import
|
|
61
|
-
import { configureInternalArticleOfferElement as
|
|
62
|
-
import
|
|
63
|
-
import { configurePartnerPickerElement as
|
|
64
|
-
import
|
|
65
|
-
export {
|
|
30
|
+
import { getUrlParam as Q, joinUrl as $, navigateIframe as ee, removeUrlParam as te, setUrlParam as ne } from "./admins-components76.js";
|
|
31
|
+
import { getDefaultPaginator as re } from "./admins-components77.js";
|
|
32
|
+
import ie from "./admins-components79.js";
|
|
33
|
+
import { getDefaultSort as ae } from "./admins-components80.js";
|
|
34
|
+
import { filterEmptyValues as oe, getDefaultFilters as se, getDefaultSavedFilter as ce, getFilterUrlParams as le, getSavedFilters as ue, writeFilterParams as de } from "./admins-components84.js";
|
|
35
|
+
import fe from "./admins-components87.js";
|
|
36
|
+
import pe from "./admins-components90.js";
|
|
37
|
+
import me from "./admins-components93.js";
|
|
38
|
+
import { getDefaultSearch as he } from "./admins-components97.js";
|
|
39
|
+
import { dataListDefaults as ge, getDefaultFetchData as _e } from "./admins-components100.js";
|
|
40
|
+
import ve from "./admins-components102.js";
|
|
41
|
+
import { isIpInUrl as ye } from "./admins-components103.js";
|
|
42
|
+
import { getCurrentSite as be } from "./admins-components104.js";
|
|
43
|
+
import { vTooltip as xe } from "./admins-components105.js";
|
|
44
|
+
import { createNativeFetch as Se } from "./admins-components106.js";
|
|
45
|
+
import { FetchDetails as Ce, FetchError as we, Methods as Te, initRequest as Ee } from "./admins-components107.js";
|
|
46
|
+
import { useArticleEditorService as De } from "./admins-components108.js";
|
|
47
|
+
import { useCurrentUser as Oe } from "./admins-components109.js";
|
|
48
|
+
import { BackendService as ke, useBackendService as Ae } from "./admins-components110.js";
|
|
49
|
+
import { aoeConfig as je, configureArticleOfferElement as Me } from "./admins-components163.js";
|
|
50
|
+
import Ne from "./admins-components165.js";
|
|
51
|
+
import { apeConfig as Pe, configureArticlePickerElement as Fe } from "./admins-components166.js";
|
|
52
|
+
import { configureImagePickerElement as Ie, ipeConfig as Le } from "./admins-components167.js";
|
|
53
|
+
import Re from "./admins-components169.js";
|
|
54
|
+
import ze from "./admins-components170.js";
|
|
55
|
+
import { configureExternalArticleOfferElement as Be, eaoeConfig as Ve } from "./admins-components171.js";
|
|
56
|
+
import He from "./admins-components172.js";
|
|
57
|
+
import { configureGalleryImageSelectorElement as Ue, gisConfig as We } from "./admins-components173.js";
|
|
58
|
+
import Ge from "./admins-components174.js";
|
|
59
|
+
import Ke from "./admins-components175.js";
|
|
60
|
+
import qe from "./admins-components176.js";
|
|
61
|
+
import { configureInternalArticleOfferElement as Je, iaoeConfig as Ye } from "./admins-components177.js";
|
|
62
|
+
import Xe from "./admins-components178.js";
|
|
63
|
+
import { configurePartnerPickerElement as Ze, ppeconfig as Qe } from "./admins-components179.js";
|
|
64
|
+
import $e from "./admins-components181.js";
|
|
65
|
+
export { Ne as ArticleOfferElement, Re as ArticlePickerElement, ke as BackendService, u as Button, m as Calendar, v as Checkbox, E as ConfirmModal, D as CopyToClipboard, J as DataCards, pe as DataFilters, ve as DataList, X as DataListOptions, ie as DataPaginator, q as DataTable, h as DatePicker, y as DateRangePicker, ze as DateTimePickerElement, S as DropdownMenu, x as DropdownSelect, k as ExternalArticleOffer, He as ExternalArticleOfferElement, Ce as FetchDetails, we as FetchError, me as FilterTags, fe as FiltersHistory, Ge as GalleryImageSelectorElement, w as HeaderComponent, O as ImagePicker, qe as ImagePickerDetailsElement, Ke as ImagePickerElement, A as InternalArticleOffer, Xe as InternalArticleOfferElement, b as Loader, Te as Methods, T as Modal, $e as PartnerPickerElement, C as Sidebar, _ as TextInput, M as ToastNotification, je as aoeConfig, Pe as apeConfig, I as booleanToString, d as calendarConfigDefaults, e as castToDate, Me as configureArticleOfferElement, Fe as configureArticlePickerElement, Be as configureExternalArticleOfferElement, Ue as configureGalleryImageSelectorElement, Ie as configureImagePickerElement, Je as configureInternalArticleOfferElement, Ze as configurePartnerPickerElement, Se as createNativeFetch, N as dataCardsSettingsDefaults, L as dataListConverters, ge as dataListDefaults, P as dataListSettingsDefaults, F as dataTableSettingsDefaults, f as datePickerConfigDefaults, p as dateRangePickerConfigDefaults, g as debounce, Y as deepMerge, Ve as eaoeConfig, t as earlierOf, n as endOfDay, R as enumMap, oe as filterEmptyValues, z as formatCurrency, r as formatDate, B as formatNumber, be as getCurrentSite, _e as getDefaultFetchData, se as getDefaultFilters, re as getDefaultPaginator, ce as getDefaultSavedFilter, he as getDefaultSearch, ae as getDefaultSort, le as getFilterUrlParams, Z as getFullStorageKey, ue as getSavedFilters, Q as getUrlParam, We as gisConfig, Ye as iaoeConfig, V as identity, Ee as initRequest, Le as ipeConfig, ye as isIpInUrl, $ as joinUrl, i as laterOf, H as listToString, U as localToLocalString, a as localToUTCString, ee as navigateIframe, o as parseDate, Qe as ppeconfig, te as removeUrlParam, ne as setUrlParam, W as shortUuid, s as startOfDay, c as startOfWeek, G as textEllipse, j as toast, De as useArticleEditorService, Ae as useBackendService, Oe as useCurrentUser, K as utcToLocalString, l as utcToString, xe as vTooltip, de as writeFilterParams };
|
|
@@ -7,26 +7,27 @@ import a from "./admins-components79.js";
|
|
|
7
7
|
import { getDefaultSort as o } from "./admins-components80.js";
|
|
8
8
|
import s from "./admins-components82.js";
|
|
9
9
|
import { getDefaultFilters as c } from "./admins-components84.js";
|
|
10
|
-
import
|
|
11
|
-
import
|
|
12
|
-
import
|
|
13
|
-
import { getDefaultSearch as
|
|
14
|
-
import
|
|
15
|
-
import { computed as
|
|
10
|
+
import ee from "./admins-components90.js";
|
|
11
|
+
import l from "./admins-components93.js";
|
|
12
|
+
import u from "./admins-components96.js";
|
|
13
|
+
import { getDefaultSearch as d } from "./admins-components97.js";
|
|
14
|
+
import te from "./admins-components99.js";
|
|
15
|
+
import { computed as f, createBlock as p, createCommentVNode as m, createElementBlock as h, createElementVNode as g, createSlots as _, createVNode as v, defineComponent as y, guardReactiveProps as b, mergeDefaults as x, mergeProps as S, normalizeClass as ne, normalizeProps as C, onBeforeUnmount as w, onMounted as re, openBlock as T, ref as E, renderList as D, renderSlot as O, withCtx as k } from "vue";
|
|
16
16
|
//#region src/components/data-table/DataList.vue?vue&type=script&setup=true&lang.ts
|
|
17
|
-
var
|
|
17
|
+
var A = { class: "c-data-list__toolbar" }, j = {
|
|
18
18
|
key: 2,
|
|
19
19
|
class: "flex-center gap-1 flex-center-wrap-on-mobile"
|
|
20
|
-
}, M = { class: "
|
|
20
|
+
}, M = { class: "c-data-list__toolbar__right" }, N = {
|
|
21
21
|
layoutBreakpoint: 768,
|
|
22
22
|
orderable: !0,
|
|
23
23
|
loading: !1,
|
|
24
24
|
useSearch: !0,
|
|
25
25
|
useFilters: !0,
|
|
26
|
-
handleUrl: !1
|
|
26
|
+
handleUrl: !1,
|
|
27
|
+
fillHeight: !1
|
|
27
28
|
};
|
|
28
29
|
function P(e, t) {
|
|
29
|
-
let n = i(t), r = o(), a =
|
|
30
|
+
let n = i(t), r = o(), a = d(), s = c(e, t, !0);
|
|
30
31
|
return {
|
|
31
32
|
...n,
|
|
32
33
|
...r,
|
|
@@ -34,9 +35,9 @@ function P(e, t) {
|
|
|
34
35
|
...s
|
|
35
36
|
};
|
|
36
37
|
}
|
|
37
|
-
var F = /* @__PURE__ */
|
|
38
|
+
var F = /* @__PURE__ */ y({
|
|
38
39
|
__name: "DataList",
|
|
39
|
-
props: /* @__PURE__ */
|
|
40
|
+
props: /* @__PURE__ */ x({
|
|
40
41
|
config: {},
|
|
41
42
|
items: {},
|
|
42
43
|
settings: {},
|
|
@@ -49,7 +50,8 @@ var F = /* @__PURE__ */ v({
|
|
|
49
50
|
useSearch: { type: Boolean },
|
|
50
51
|
useFilters: { type: Boolean },
|
|
51
52
|
searchConfig: {},
|
|
52
|
-
filterConfig: {}
|
|
53
|
+
filterConfig: {},
|
|
54
|
+
fillHeight: { type: Boolean }
|
|
53
55
|
}, {
|
|
54
56
|
...N,
|
|
55
57
|
searchConfig: void 0,
|
|
@@ -63,32 +65,32 @@ var F = /* @__PURE__ */ v({
|
|
|
63
65
|
"sort-change",
|
|
64
66
|
"search-change"
|
|
65
67
|
],
|
|
66
|
-
setup(i, { expose:
|
|
67
|
-
let
|
|
68
|
+
setup(i, { expose: d, emit: y }) {
|
|
69
|
+
let x = E(null), N = i;
|
|
68
70
|
function P(e) {
|
|
69
71
|
let t = N[e];
|
|
70
72
|
return t && Object.hasOwn(t, "handleUrl") ? t.handleUrl : N.handleUrl;
|
|
71
73
|
}
|
|
72
|
-
let F =
|
|
74
|
+
let F = f(() => ({
|
|
73
75
|
...N.searchConfig,
|
|
74
76
|
handleUrl: P("searchConfig")
|
|
75
|
-
})),
|
|
77
|
+
})), I = f(() => ({
|
|
76
78
|
...N.filterConfig,
|
|
77
79
|
handleUrl: P("filterConfig")
|
|
78
|
-
})),
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
}),
|
|
83
|
-
}),
|
|
84
|
-
let
|
|
85
|
-
let e =
|
|
86
|
-
return e === "table" || e === "cards" ? e :
|
|
87
|
-
}),
|
|
88
|
-
if (!
|
|
89
|
-
let e =
|
|
80
|
+
})), L = y, R = E(!1), z = E(!1), B = E(null), V = E(!1), H = E(null), U = E(!1), W = E(N.filterConfig?.items ? c(N.filterConfig.items, N.id, !1) : {}), G = null;
|
|
81
|
+
re(() => {
|
|
82
|
+
G = new ResizeObserver((e) => {
|
|
83
|
+
V.value = (e[0]?.contentRect.width ?? 0) < N.layoutBreakpoint;
|
|
84
|
+
}), H.value && G.observe(H.value);
|
|
85
|
+
}), w(() => G?.disconnect());
|
|
86
|
+
let K = f(() => {
|
|
87
|
+
let e = B.value?.layout;
|
|
88
|
+
return e === "table" || e === "cards" ? e : V.value ? "cards" : "table";
|
|
89
|
+
}), q = f(() => {
|
|
90
|
+
if (!B.value) return N.config;
|
|
91
|
+
let e = B.value.columnOrder, t = N.config.columns.map((e) => ({
|
|
90
92
|
...e,
|
|
91
|
-
visible:
|
|
93
|
+
visible: B.value.columns[e.property] ?? e.visible !== !1
|
|
92
94
|
}));
|
|
93
95
|
return e?.length && t.sort((t, n) => {
|
|
94
96
|
let r = e.indexOf(t.property), i = e.indexOf(n.property);
|
|
@@ -98,55 +100,56 @@ var F = /* @__PURE__ */ v({
|
|
|
98
100
|
columns: t
|
|
99
101
|
};
|
|
100
102
|
});
|
|
101
|
-
function
|
|
102
|
-
|
|
103
|
+
function J(e) {
|
|
104
|
+
B.value = e, L("settings-change", e);
|
|
103
105
|
}
|
|
104
|
-
|
|
105
|
-
openOptions: () =>
|
|
106
|
-
closeOptions: () =>
|
|
107
|
-
openFilters: () =>
|
|
108
|
-
closeFilters: () =>
|
|
106
|
+
d({
|
|
107
|
+
openOptions: () => R.value = !0,
|
|
108
|
+
closeOptions: () => R.value = !1,
|
|
109
|
+
openFilters: () => U.value = !0,
|
|
110
|
+
closeFilters: () => U.value = !1
|
|
109
111
|
});
|
|
110
|
-
async function
|
|
111
|
-
|
|
112
|
-
|
|
112
|
+
async function Y(e) {
|
|
113
|
+
U.value = !0, setTimeout(() => {
|
|
114
|
+
x.value?.focusFilter(e);
|
|
113
115
|
}, 300);
|
|
114
116
|
}
|
|
115
|
-
function
|
|
116
|
-
|
|
117
|
+
function ie(e) {
|
|
118
|
+
W.value = e.values, L("filter-change", e.transformed);
|
|
117
119
|
}
|
|
118
|
-
let
|
|
119
|
-
|
|
120
|
-
}, Z =
|
|
120
|
+
let X = f(() => Object.values(W.value).filter((e) => e != null && e !== "").length), ae = f(() => !!N.pagination && (N.items.length > 0 || !N.loading)), oe = (e) => {
|
|
121
|
+
L("search-change", e);
|
|
122
|
+
}, Z = f(() => N.config.columns.filter((e) => e.sort).map((e) => ({
|
|
121
123
|
value: e.property,
|
|
122
124
|
label: e.label
|
|
123
125
|
}))), Q = E(N.handleUrl ? o() : null), $ = (e) => {
|
|
124
|
-
Q.value = e,
|
|
126
|
+
Q.value = e, L("sort-change", e);
|
|
125
127
|
};
|
|
126
|
-
return (o, c) => (T(),
|
|
128
|
+
return (o, c) => (T(), h("div", {
|
|
127
129
|
ref_key: "root",
|
|
128
|
-
ref:
|
|
129
|
-
class: "c-data-list"
|
|
130
|
+
ref: H,
|
|
131
|
+
class: ne(["ac-component c-data-list", { "c-data-list--fill-height": i.fillHeight }])
|
|
130
132
|
}, [
|
|
131
|
-
|
|
132
|
-
i.useSearch ? (T(),
|
|
133
|
-
i.useFilters && i.filterConfig?.items && i.filterConfig.items.length > 0 ? (T(),
|
|
133
|
+
g("div", A, [
|
|
134
|
+
i.useSearch ? (T(), p(te, S({ key: 0 }, F.value, { onSearchChange: oe }), null, 16)) : m("", !0),
|
|
135
|
+
i.useFilters && i.filterConfig?.items && i.filterConfig.items.length > 0 ? (T(), p(e, {
|
|
134
136
|
key: 1,
|
|
135
137
|
label: "Szűrők",
|
|
136
138
|
icon: "fa-solid fa-filter",
|
|
137
|
-
onClick: c[0] ||= (e) =>
|
|
139
|
+
onClick: c[0] ||= (e) => U.value = !0,
|
|
138
140
|
style: { "flex-shrink": "0" },
|
|
139
|
-
type:
|
|
140
|
-
indicator:
|
|
141
|
-
}, null, 8, ["type", "indicator"])) :
|
|
142
|
-
i.useFilters && i.filterConfig?.items && i.filterConfig.items.length > 0 ? (T(),
|
|
143
|
-
filters:
|
|
141
|
+
type: X.value > 0 ? "primary" : "normal",
|
|
142
|
+
indicator: X.value > 0 ? X.value : void 0
|
|
143
|
+
}, null, 8, ["type", "indicator"])) : m("", !0),
|
|
144
|
+
i.useFilters && i.filterConfig?.items && i.filterConfig.items.length > 0 ? (T(), h("div", j, [v(l, {
|
|
145
|
+
filters: W.value,
|
|
144
146
|
items: i.filterConfig.items,
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
147
|
+
compact: "",
|
|
148
|
+
onRemove: c[1] ||= (e) => x.value?.clearFilter(e),
|
|
149
|
+
onOpenFilter: Y
|
|
150
|
+
}, null, 8, ["filters", "items"])])) : m("", !0),
|
|
151
|
+
g("div", M, [
|
|
152
|
+
Z.value.length > 0 ? (T(), p(s, {
|
|
150
153
|
key: 0,
|
|
151
154
|
modelValue: Q.value,
|
|
152
155
|
"onUpdate:modelValue": c[2] ||= (e) => Q.value = e,
|
|
@@ -157,87 +160,89 @@ var F = /* @__PURE__ */ v({
|
|
|
157
160
|
"modelValue",
|
|
158
161
|
"options",
|
|
159
162
|
"handle-url"
|
|
160
|
-
])) :
|
|
161
|
-
|
|
163
|
+
])) : m("", !0),
|
|
164
|
+
v(e, {
|
|
162
165
|
icon: "fa-solid fa-gear",
|
|
163
166
|
class: "lh-normal settings-btn",
|
|
164
|
-
|
|
167
|
+
ariaLabel: "Beállítások",
|
|
168
|
+
onClick: c[3] ||= (e) => R.value = !0
|
|
165
169
|
}),
|
|
166
|
-
|
|
170
|
+
v(e, {
|
|
167
171
|
icon: "fa-solid fa-question",
|
|
168
172
|
class: "lh-normal",
|
|
169
|
-
onClick: c[4] ||= (e) =>
|
|
173
|
+
onClick: c[4] ||= (e) => z.value = !0,
|
|
174
|
+
ariaLabel: "Súgó"
|
|
170
175
|
})
|
|
171
176
|
])
|
|
172
177
|
]),
|
|
173
|
-
i.useFilters && i.filterConfig?.items && i.filterConfig.items.length > 0 ? (T(),
|
|
178
|
+
i.useFilters && i.filterConfig?.items && i.filterConfig.items.length > 0 ? (T(), p(ee, S({
|
|
174
179
|
key: 0,
|
|
175
180
|
ref_key: "dataFiltersRef",
|
|
176
|
-
ref:
|
|
177
|
-
},
|
|
181
|
+
ref: x
|
|
182
|
+
}, I.value, {
|
|
178
183
|
"storage-key": i.id,
|
|
179
|
-
open:
|
|
180
|
-
onClose: c[5] ||= (e) =>
|
|
181
|
-
onChange:
|
|
182
|
-
}), null, 16, ["storage-key", "open"])) :
|
|
183
|
-
|
|
184
|
-
open:
|
|
185
|
-
onClose: c[6] ||= (e) =>
|
|
184
|
+
open: U.value,
|
|
185
|
+
onClose: c[5] ||= (e) => U.value = !1,
|
|
186
|
+
onChange: ie
|
|
187
|
+
}), null, 16, ["storage-key", "open"])) : m("", !0),
|
|
188
|
+
v(u, {
|
|
189
|
+
open: z.value,
|
|
190
|
+
onClose: c[6] ||= (e) => z.value = !1
|
|
186
191
|
}, null, 8, ["open"]),
|
|
187
|
-
|
|
192
|
+
K.value === "table" ? (T(), p(t, {
|
|
188
193
|
key: 1,
|
|
189
|
-
config:
|
|
194
|
+
config: q.value,
|
|
190
195
|
loading: i.loading,
|
|
191
196
|
items: i.items,
|
|
192
|
-
settings:
|
|
197
|
+
settings: B.value ?? void 0,
|
|
193
198
|
"initial-sort": Q.value,
|
|
194
|
-
onFilterChange: c[7] ||= (e) =>
|
|
195
|
-
onSelectionChange: c[8] ||= (e) =>
|
|
199
|
+
onFilterChange: c[7] ||= (e) => L("filter-change", e),
|
|
200
|
+
onSelectionChange: c[8] ||= (e) => L("selection-change", e),
|
|
196
201
|
onSortChange: $
|
|
197
|
-
},
|
|
202
|
+
}, _({ _: 2 }, [D(q.value.columns, (e) => ({
|
|
198
203
|
name: `cell:${e.property}`,
|
|
199
|
-
fn: k((t) => [O(o.$slots, `cell:${e.property}`,
|
|
204
|
+
fn: k((t) => [O(o.$slots, `cell:${e.property}`, C(b(t)))])
|
|
200
205
|
}))]), 1032, [
|
|
201
206
|
"config",
|
|
202
207
|
"loading",
|
|
203
208
|
"items",
|
|
204
209
|
"settings",
|
|
205
210
|
"initial-sort"
|
|
206
|
-
])) : (T(),
|
|
211
|
+
])) : (T(), p(n, {
|
|
207
212
|
key: 2,
|
|
208
|
-
config:
|
|
213
|
+
config: q.value,
|
|
209
214
|
loading: i.loading,
|
|
210
215
|
items: i.items,
|
|
211
|
-
settings:
|
|
212
|
-
onSelectionChange: c[9] ||= (e) =>
|
|
213
|
-
},
|
|
216
|
+
settings: B.value ?? void 0,
|
|
217
|
+
onSelectionChange: c[9] ||= (e) => L("selection-change", e)
|
|
218
|
+
}, _({ _: 2 }, [D(q.value.columns, (e) => ({
|
|
214
219
|
name: `cell:${e.property}`,
|
|
215
|
-
fn: k((t) => [O(o.$slots, `cell:${e.property}`,
|
|
220
|
+
fn: k((t) => [O(o.$slots, `cell:${e.property}`, C(b(t)))])
|
|
216
221
|
}))]), 1032, [
|
|
217
222
|
"config",
|
|
218
223
|
"loading",
|
|
219
224
|
"items",
|
|
220
225
|
"settings"
|
|
221
226
|
])),
|
|
222
|
-
i.pagination &&
|
|
227
|
+
i.pagination && ae.value ? (T(), p(a, {
|
|
223
228
|
key: 3,
|
|
224
229
|
settings: i.pagination,
|
|
225
230
|
"storage-key": i.id,
|
|
226
231
|
"handle-url": i.handleUrl,
|
|
227
|
-
"onUpdate:pagination": c[10] ||= (e) =>
|
|
232
|
+
"onUpdate:pagination": c[10] ||= (e) => L("pagination-change", e)
|
|
228
233
|
}, null, 8, [
|
|
229
234
|
"settings",
|
|
230
235
|
"storage-key",
|
|
231
236
|
"handle-url"
|
|
232
|
-
])) :
|
|
233
|
-
|
|
234
|
-
open:
|
|
237
|
+
])) : m("", !0),
|
|
238
|
+
v(r, {
|
|
239
|
+
open: R.value,
|
|
235
240
|
columns: i.config.columns,
|
|
236
241
|
settings: i.settings ?? {},
|
|
237
242
|
"storage-key": i.id,
|
|
238
243
|
orderable: i.orderable,
|
|
239
|
-
onClose: c[11] ||= (e) =>
|
|
240
|
-
onChange:
|
|
244
|
+
onClose: c[11] ||= (e) => R.value = !1,
|
|
245
|
+
onChange: J
|
|
241
246
|
}, null, 8, [
|
|
242
247
|
"open",
|
|
243
248
|
"columns",
|
|
@@ -245,7 +250,7 @@ var F = /* @__PURE__ */ v({
|
|
|
245
250
|
"storage-key",
|
|
246
251
|
"orderable"
|
|
247
252
|
])
|
|
248
|
-
],
|
|
253
|
+
], 2));
|
|
249
254
|
}
|
|
250
255
|
});
|
|
251
256
|
//#endregion
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"admins-components100.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\nexport function getDefaultFetchData(filters: FilterItem[], storageKey: string) {\n const defaultPaginator = getDefaultPaginator(storageKey)\n const defaultSort = getDefaultSort()\n const defaultSearch = getDefaultSearch()\n const defaultFilters = getDefaultFilters(filters, storageKey, true)\n\n return {\n ...defaultPaginator,\n ...defaultSort,\n ...defaultSearch,\n ...defaultFilters,\n }\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, { getDefaultPaginator } from '@/components/data-table/DataPaginator.vue'\nimport Button from '@/components/Button.vue'\nimport DataSort, { getDefaultSort, type DataSortOption } from '@/components/data-table/DataSort.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 type FilterItem,\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, { getDefaultSearch, 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' } | null]\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\nconst sortableColumns = computed<DataSortOption[]>(() =>\n props.config.columns.filter((c) => c.sort).map((c) => ({ value: c.property, label: c.label })),\n)\n\nconst currentSort = ref<{ key: string; direction: 'asc' | 'desc' } | null>(\n props.handleUrl ? getDefaultSort() : null,\n)\n\nconst onSortChange = (sort: { key: string; direction: 'asc' | 'desc' } | null) => {\n currentSort.value = sort\n // DataSort already writes the URL when handleUrl: true; we only emit.\n emit('sort-change', sort)\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 flex-center-wrap-on-mobile\"\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 <DataSort\n v-if=\"sortableColumns.length > 0\"\n v-model=\"currentSort\"\n :options=\"sortableColumns\"\n :handle-url=\"handleUrl\"\n @sort-change=\"onSortChange\"\n />\n\n <Button\n icon=\"fa-solid fa-gear\"\n class=\"lh-normal settings-btn\"\n @click=\"showOptions = true\"\n />\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 :initial-sort=\"currentSort\"\n @filter-change=\"emit('filter-change', $event)\"\n @selection-change=\"emit('selection-change', $event)\"\n @sort-change=\"onSortChange\"\n >\n <template\n v-for=\"col in internalConfig.columns\"\n :key=\"col.property\"\n #[`cell:${col.property}`]=\"slotProps\"\n >\n <slot :name=\"`cell:${col.property}`\" v-bind=\"slotProps\" />\n </template>\n </DataTable>\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 <template\n v-for=\"col in internalConfig.columns\"\n :key=\"col.property\"\n #[`cell:${col.property}`]=\"slotProps\"\n >\n <slot :name=\"`cell:${col.property}`\" v-bind=\"slotProps\" />\n </template>\n </DataCards>\n\n <DataPaginator\n v-if=\"pagination && showPaginator\"\n :settings=\"pagination\"\n :storage-key=\"id\"\n :handle-url=\"handleUrl\"\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
|
+
{"version":3,"file":"admins-components100.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 * If true, the table wrapper fills its parent column instead of capping\n * at `--data-list-max-height`. The parent must be a flex column with a\n * definite height for the tbody to scroll inside the wrapper.\n */\n fillHeight?: boolean\n}\n\nexport const dataListDefaults = {\n layoutBreakpoint: 768,\n orderable: true,\n loading: false,\n useSearch: true,\n useFilters: true,\n handleUrl: false,\n fillHeight: false,\n}\n\nexport function getDefaultFetchData(filters: FilterItem[], storageKey: string) {\n const defaultPaginator = getDefaultPaginator(storageKey)\n const defaultSort = getDefaultSort()\n const defaultSearch = getDefaultSearch()\n const defaultFilters = getDefaultFilters(filters, storageKey, true)\n\n return {\n ...defaultPaginator,\n ...defaultSort,\n ...defaultSearch,\n ...defaultFilters,\n }\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, { getDefaultPaginator } from '@/components/data-table/DataPaginator.vue'\nimport Button from '@/components/Button.vue'\nimport DataSort, { getDefaultSort, type DataSortOption } from '@/components/data-table/DataSort.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 type FilterItem,\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, { getDefaultSearch, 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' } | null]\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\nconst sortableColumns = computed<DataSortOption[]>(() =>\n props.config.columns.filter((c) => c.sort).map((c) => ({ value: c.property, label: c.label })),\n)\n\nconst currentSort = ref<{ key: string; direction: 'asc' | 'desc' } | null>(\n props.handleUrl ? getDefaultSort() : null,\n)\n\nconst onSortChange = (sort: { key: string; direction: 'asc' | 'desc' } | null) => {\n currentSort.value = sort\n // DataSort already writes the URL when handleUrl: true; we only emit.\n emit('sort-change', sort)\n}\n</script>\n\n<template>\n <div\n ref=\"root\"\n class=\"ac-component c-data-list\"\n :class=\"{ 'c-data-list--fill-height': fillHeight }\"\n >\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 ? 'primary' : 'normal'\"\n :indicator=\"activeFiltersCount > 0 ? activeFiltersCount : undefined\"\n />\n <div\n class=\"flex-center gap-1 flex-center-wrap-on-mobile\"\n v-if=\"useFilters && filterConfig?.items && filterConfig.items.length > 0\"\n >\n <FilterTags\n :filters=\"activeFilters\"\n :items=\"filterConfig.items\"\n compact\n @remove=\"(key: string) => dataFiltersRef?.clearFilter(key)\"\n @openFilter=\"openFilter\"\n />\n </div>\n <div class=\"c-data-list__toolbar__right\">\n <DataSort\n v-if=\"sortableColumns.length > 0\"\n v-model=\"currentSort\"\n :options=\"sortableColumns\"\n :handle-url=\"handleUrl\"\n @sort-change=\"onSortChange\"\n />\n\n <Button\n icon=\"fa-solid fa-gear\"\n class=\"lh-normal settings-btn\"\n ariaLabel=\"Beállítások\"\n @click=\"showOptions = true\"\n />\n <Button\n icon=\"fa-solid fa-question\"\n class=\"lh-normal\"\n @click=\"showGuide = true\"\n ariaLabel=\"Súgó\"\n />\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 :initial-sort=\"currentSort\"\n @filter-change=\"emit('filter-change', $event)\"\n @selection-change=\"emit('selection-change', $event)\"\n @sort-change=\"onSortChange\"\n >\n <template\n v-for=\"col in internalConfig.columns\"\n :key=\"col.property\"\n #[`cell:${col.property}`]=\"slotProps\"\n >\n <slot :name=\"`cell:${col.property}`\" v-bind=\"slotProps\" />\n </template>\n </DataTable>\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 <template\n v-for=\"col in internalConfig.columns\"\n :key=\"col.property\"\n #[`cell:${col.property}`]=\"slotProps\"\n >\n <slot :name=\"`cell:${col.property}`\" v-bind=\"slotProps\" />\n </template>\n </DataCards>\n\n <DataPaginator\n v-if=\"pagination && showPaginator\"\n :settings=\"pagination\"\n :storage-key=\"id\"\n :handle-url=\"handleUrl\"\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</template>\n\n<style lang=\"scss\" src=\"@/styles/components/data-table/data-list.scss\"></style>\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"admins-components102.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\nexport function getDefaultFetchData(filters: FilterItem[], storageKey: string) {\n const defaultPaginator = getDefaultPaginator(storageKey)\n const defaultSort = getDefaultSort()\n const defaultSearch = getDefaultSearch()\n const defaultFilters = getDefaultFilters(filters, storageKey, true)\n\n return {\n ...defaultPaginator,\n ...defaultSort,\n ...defaultSearch,\n ...defaultFilters,\n }\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, { getDefaultPaginator } from '@/components/data-table/DataPaginator.vue'\nimport Button from '@/components/Button.vue'\nimport DataSort, { getDefaultSort, type DataSortOption } from '@/components/data-table/DataSort.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 type FilterItem,\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, { getDefaultSearch, 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' } | null]\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\nconst sortableColumns = computed<DataSortOption[]>(() =>\n props.config.columns.filter((c) => c.sort).map((c) => ({ value: c.property, label: c.label })),\n)\n\nconst currentSort = ref<{ key: string; direction: 'asc' | 'desc' } | null>(\n props.handleUrl ? getDefaultSort() : null,\n)\n\nconst onSortChange = (sort: { key: string; direction: 'asc' | 'desc' } | null) => {\n currentSort.value = sort\n // DataSort already writes the URL when handleUrl: true; we only emit.\n emit('sort-change', sort)\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 flex-center-wrap-on-mobile\"\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 <DataSort\n v-if=\"sortableColumns.length > 0\"\n v-model=\"currentSort\"\n :options=\"sortableColumns\"\n :handle-url=\"handleUrl\"\n @sort-change=\"onSortChange\"\n />\n\n <Button\n icon=\"fa-solid fa-gear\"\n class=\"lh-normal settings-btn\"\n @click=\"showOptions = true\"\n />\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 :initial-sort=\"currentSort\"\n @filter-change=\"emit('filter-change', $event)\"\n @selection-change=\"emit('selection-change', $event)\"\n @sort-change=\"onSortChange\"\n >\n <template\n v-for=\"col in internalConfig.columns\"\n :key=\"col.property\"\n #[`cell:${col.property}`]=\"slotProps\"\n >\n <slot :name=\"`cell:${col.property}`\" v-bind=\"slotProps\" />\n </template>\n </DataTable>\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 <template\n v-for=\"col in internalConfig.columns\"\n :key=\"col.property\"\n #[`cell:${col.property}`]=\"slotProps\"\n >\n <slot :name=\"`cell:${col.property}`\" v-bind=\"slotProps\" />\n </template>\n </DataCards>\n\n <DataPaginator\n v-if=\"pagination && showPaginator\"\n :settings=\"pagination\"\n :storage-key=\"id\"\n :handle-url=\"handleUrl\"\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-components102.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 * If true, the table wrapper fills its parent column instead of capping\n * at `--data-list-max-height`. The parent must be a flex column with a\n * definite height for the tbody to scroll inside the wrapper.\n */\n fillHeight?: boolean\n}\n\nexport const dataListDefaults = {\n layoutBreakpoint: 768,\n orderable: true,\n loading: false,\n useSearch: true,\n useFilters: true,\n handleUrl: false,\n fillHeight: false,\n}\n\nexport function getDefaultFetchData(filters: FilterItem[], storageKey: string) {\n const defaultPaginator = getDefaultPaginator(storageKey)\n const defaultSort = getDefaultSort()\n const defaultSearch = getDefaultSearch()\n const defaultFilters = getDefaultFilters(filters, storageKey, true)\n\n return {\n ...defaultPaginator,\n ...defaultSort,\n ...defaultSearch,\n ...defaultFilters,\n }\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, { getDefaultPaginator } from '@/components/data-table/DataPaginator.vue'\nimport Button from '@/components/Button.vue'\nimport DataSort, { getDefaultSort, type DataSortOption } from '@/components/data-table/DataSort.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 type FilterItem,\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, { getDefaultSearch, 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' } | null]\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\nconst sortableColumns = computed<DataSortOption[]>(() =>\n props.config.columns.filter((c) => c.sort).map((c) => ({ value: c.property, label: c.label })),\n)\n\nconst currentSort = ref<{ key: string; direction: 'asc' | 'desc' } | null>(\n props.handleUrl ? getDefaultSort() : null,\n)\n\nconst onSortChange = (sort: { key: string; direction: 'asc' | 'desc' } | null) => {\n currentSort.value = sort\n // DataSort already writes the URL when handleUrl: true; we only emit.\n emit('sort-change', sort)\n}\n</script>\n\n<template>\n <div\n ref=\"root\"\n class=\"ac-component c-data-list\"\n :class=\"{ 'c-data-list--fill-height': fillHeight }\"\n >\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 ? 'primary' : 'normal'\"\n :indicator=\"activeFiltersCount > 0 ? activeFiltersCount : undefined\"\n />\n <div\n class=\"flex-center gap-1 flex-center-wrap-on-mobile\"\n v-if=\"useFilters && filterConfig?.items && filterConfig.items.length > 0\"\n >\n <FilterTags\n :filters=\"activeFilters\"\n :items=\"filterConfig.items\"\n compact\n @remove=\"(key: string) => dataFiltersRef?.clearFilter(key)\"\n @openFilter=\"openFilter\"\n />\n </div>\n <div class=\"c-data-list__toolbar__right\">\n <DataSort\n v-if=\"sortableColumns.length > 0\"\n v-model=\"currentSort\"\n :options=\"sortableColumns\"\n :handle-url=\"handleUrl\"\n @sort-change=\"onSortChange\"\n />\n\n <Button\n icon=\"fa-solid fa-gear\"\n class=\"lh-normal settings-btn\"\n ariaLabel=\"Beállítások\"\n @click=\"showOptions = true\"\n />\n <Button\n icon=\"fa-solid fa-question\"\n class=\"lh-normal\"\n @click=\"showGuide = true\"\n ariaLabel=\"Súgó\"\n />\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 :initial-sort=\"currentSort\"\n @filter-change=\"emit('filter-change', $event)\"\n @selection-change=\"emit('selection-change', $event)\"\n @sort-change=\"onSortChange\"\n >\n <template\n v-for=\"col in internalConfig.columns\"\n :key=\"col.property\"\n #[`cell:${col.property}`]=\"slotProps\"\n >\n <slot :name=\"`cell:${col.property}`\" v-bind=\"slotProps\" />\n </template>\n </DataTable>\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 <template\n v-for=\"col in internalConfig.columns\"\n :key=\"col.property\"\n #[`cell:${col.property}`]=\"slotProps\"\n >\n <slot :name=\"`cell:${col.property}`\" v-bind=\"slotProps\" />\n </template>\n </DataCards>\n\n <DataPaginator\n v-if=\"pagination && showPaginator\"\n :settings=\"pagination\"\n :storage-key=\"id\"\n :handle-url=\"handleUrl\"\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</template>\n\n<style lang=\"scss\" src=\"@/styles/components/data-table/data-list.scss\"></style>\n"],"mappings":""}
|
|
@@ -206,7 +206,7 @@ var ce = { class: "ac-component" }, le = { class: "drp-input" }, ue = { class: "
|
|
|
206
206
|
P.value.showPresets ? (b(), h("div", xe, [
|
|
207
207
|
T((b(), h("span", Se, [_(a, {
|
|
208
208
|
icon: "fa-solid fa-chevron-left",
|
|
209
|
-
class: "drp-toolbar__stepper left",
|
|
209
|
+
class: "drp-toolbar__stepper drp-toolbar__stepper--left",
|
|
210
210
|
disabled: !X.value,
|
|
211
211
|
onClick: t[2] ||= (e) => Q(-1)
|
|
212
212
|
}, null, 8, ["disabled"])])), [[n, X.value ? "Intervallum mozgatása visszafelé" : "Nem léphető tovább a minimum dátum miatt"]]),
|
|
@@ -223,7 +223,7 @@ var ce = { class: "ac-component" }, le = { class: "drp-input" }, ue = { class: "
|
|
|
223
223
|
icon: "fa-solid fa-chevron-right",
|
|
224
224
|
disabled: !Z.value,
|
|
225
225
|
onClick: t[3] ||= (e) => Q(1),
|
|
226
|
-
class: "drp-toolbar__stepper right"
|
|
226
|
+
class: "drp-toolbar__stepper drp-toolbar__stepper--right"
|
|
227
227
|
}, null, 8, ["disabled"])])), [[n, Z.value ? "Intervallum mozgatása előre" : "Nem léphető tovább a maximum dátum miatt"]])
|
|
228
228
|
])) : m("", !0),
|
|
229
229
|
P.value.showClearButton || P.value.showOkButton || P.value.lazy ? (b(), h("div", k, [P.value.showClearButton ? (b(), p(a, {
|