cisse-vue-ui 0.1.10 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +162 -8
- package/dist/Checkbox.vue_vue_type_script_setup_true_lang-B-nLCCNY.js +54 -0
- package/dist/Checkbox.vue_vue_type_script_setup_true_lang-B-nLCCNY.js.map +1 -0
- package/dist/Checkbox.vue_vue_type_script_setup_true_lang-DIoHDji4.cjs +53 -0
- package/dist/Checkbox.vue_vue_type_script_setup_true_lang-DIoHDji4.cjs.map +1 -0
- package/dist/{CollapsibleCard.vue_vue_type_script_setup_true_lang-Bd6TPEpH.cjs → CollapsibleCard.vue_vue_type_script_setup_true_lang-Cs6KGC-0.cjs} +398 -79
- package/dist/CollapsibleCard.vue_vue_type_script_setup_true_lang-Cs6KGC-0.cjs.map +1 -0
- package/dist/{CollapsibleCard.vue_vue_type_script_setup_true_lang-l4KQ8HX8.js → CollapsibleCard.vue_vue_type_script_setup_true_lang-DTGAuLCh.js} +406 -87
- package/dist/CollapsibleCard.vue_vue_type_script_setup_true_lang-DTGAuLCh.js.map +1 -0
- package/dist/{Checkbox.vue_vue_type_script_setup_true_lang-CMq22Cg1.js → Switch.vue_vue_type_script_setup_true_lang-C2_5u-HL.js} +44 -94
- package/dist/Switch.vue_vue_type_script_setup_true_lang-C2_5u-HL.js.map +1 -0
- package/dist/{Checkbox.vue_vue_type_script_setup_true_lang-CgLR8V21.cjs → Switch.vue_vue_type_script_setup_true_lang-V-FtNcTd.cjs} +44 -94
- package/dist/Switch.vue_vue_type_script_setup_true_lang-V-FtNcTd.cjs.map +1 -0
- package/dist/components/core/MobileList.vue.d.ts +80 -0
- package/dist/components/core/ResponsiveList.vue.d.ts +115 -0
- package/dist/components/core/TableComponent.vue.d.ts +26 -28
- package/dist/components/core/index.cjs +11 -9
- package/dist/components/core/index.cjs.map +1 -1
- package/dist/components/core/index.d.ts +4 -0
- package/dist/components/core/index.js +11 -9
- package/dist/components/form/index.cjs +10 -9
- package/dist/components/form/index.cjs.map +1 -1
- package/dist/components/form/index.js +3 -2
- package/dist/components/form/index.js.map +1 -1
- package/dist/components/index.cjs +21 -18
- package/dist/components/index.cjs.map +1 -1
- package/dist/components/index.js +18 -15
- package/dist/components/index.js.map +1 -1
- package/dist/index-Ck4eaNes.js +51 -0
- package/dist/index-Ck4eaNes.js.map +1 -0
- package/dist/{index-m8Oi-7YC.cjs → index-c27X2k2e.cjs} +22 -19
- package/dist/index-c27X2k2e.cjs.map +1 -0
- package/dist/index.cjs +22 -19
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +19 -16
- package/dist/index.js.map +1 -1
- package/dist/style.css +1 -1
- package/package.json +1 -1
- package/dist/Checkbox.vue_vue_type_script_setup_true_lang-CMq22Cg1.js.map +0 -1
- package/dist/Checkbox.vue_vue_type_script_setup_true_lang-CgLR8V21.cjs.map +0 -1
- package/dist/CollapsibleCard.vue_vue_type_script_setup_true_lang-Bd6TPEpH.cjs.map +0 -1
- package/dist/CollapsibleCard.vue_vue_type_script_setup_true_lang-l4KQ8HX8.js.map +0 -1
- package/dist/index-DacstXRp.js +0 -48
- package/dist/index-DacstXRp.js.map +0 -1
- package/dist/index-m8Oi-7YC.cjs.map +0 -1
|
@@ -1,23 +1,24 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
const vue = require("vue");
|
|
3
|
+
const Checkbox_vue_vue_type_script_setup_true_lang = require("./Checkbox.vue_vue_type_script_setup_true_lang-DIoHDji4.cjs");
|
|
3
4
|
const BadgeType_vue_vue_type_script_setup_true_lang = require("./BadgeType.vue_vue_type_script_setup_true_lang-CJb63H1I.cjs");
|
|
4
5
|
const vue$1 = require("@iconify/vue");
|
|
5
|
-
const _hoisted_1$
|
|
6
|
-
const _hoisted_2$
|
|
6
|
+
const _hoisted_1$8 = { class: "flex flex-col overflow-hidden rounded-lg bg-white shadow-md dark:bg-slate-950" };
|
|
7
|
+
const _hoisted_2$6 = {
|
|
7
8
|
key: 0,
|
|
8
9
|
class: "flex items-center justify-between border-b border-gray-200 px-5 py-3 dark:border-gray-700"
|
|
9
10
|
};
|
|
10
|
-
const _hoisted_3$
|
|
11
|
-
const _hoisted_4$
|
|
11
|
+
const _hoisted_3$4 = { class: "flex flex-col gap-0.5" };
|
|
12
|
+
const _hoisted_4$3 = {
|
|
12
13
|
key: 0,
|
|
13
14
|
class: "text-md font-semibold text-gray-800 dark:text-gray-200"
|
|
14
15
|
};
|
|
15
|
-
const _hoisted_5$
|
|
16
|
+
const _hoisted_5$3 = {
|
|
16
17
|
key: 1,
|
|
17
18
|
class: "text-sm font-normal text-gray-600 dark:text-gray-400"
|
|
18
19
|
};
|
|
19
|
-
const _hoisted_6$
|
|
20
|
-
const _sfc_main$
|
|
20
|
+
const _hoisted_6$3 = { class: "flex gap-2" };
|
|
21
|
+
const _sfc_main$b = /* @__PURE__ */ vue.defineComponent({
|
|
21
22
|
__name: "CardComponent",
|
|
22
23
|
props: {
|
|
23
24
|
title: {},
|
|
@@ -25,21 +26,21 @@ const _sfc_main$9 = /* @__PURE__ */ vue.defineComponent({
|
|
|
25
26
|
},
|
|
26
27
|
setup(__props) {
|
|
27
28
|
return (_ctx, _cache) => {
|
|
28
|
-
return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$
|
|
29
|
-
__props.title || __props.description || _ctx.$slots.title || _ctx.$slots.description || _ctx.$slots.actions ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_2$
|
|
30
|
-
vue.createElementVNode("div", _hoisted_3$
|
|
31
|
-
__props.title || _ctx.$slots.title ? (vue.openBlock(), vue.createElementBlock("span", _hoisted_4$
|
|
29
|
+
return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$8, [
|
|
30
|
+
__props.title || __props.description || _ctx.$slots.title || _ctx.$slots.description || _ctx.$slots.actions ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_2$6, [
|
|
31
|
+
vue.createElementVNode("div", _hoisted_3$4, [
|
|
32
|
+
__props.title || _ctx.$slots.title ? (vue.openBlock(), vue.createElementBlock("span", _hoisted_4$3, [
|
|
32
33
|
vue.renderSlot(_ctx.$slots, "title", {}, () => [
|
|
33
34
|
vue.createTextVNode(vue.toDisplayString(__props.title), 1)
|
|
34
35
|
])
|
|
35
36
|
])) : vue.createCommentVNode("", true),
|
|
36
|
-
__props.description || _ctx.$slots.description ? (vue.openBlock(), vue.createElementBlock("span", _hoisted_5$
|
|
37
|
+
__props.description || _ctx.$slots.description ? (vue.openBlock(), vue.createElementBlock("span", _hoisted_5$3, [
|
|
37
38
|
vue.renderSlot(_ctx.$slots, "description", {}, () => [
|
|
38
39
|
vue.createTextVNode(vue.toDisplayString(__props.description), 1)
|
|
39
40
|
])
|
|
40
41
|
])) : vue.createCommentVNode("", true)
|
|
41
42
|
]),
|
|
42
|
-
vue.createElementVNode("div", _hoisted_6$
|
|
43
|
+
vue.createElementVNode("div", _hoisted_6$3, [
|
|
43
44
|
vue.renderSlot(_ctx.$slots, "actions")
|
|
44
45
|
])
|
|
45
46
|
])) : vue.createCommentVNode("", true),
|
|
@@ -48,18 +49,43 @@ const _sfc_main$9 = /* @__PURE__ */ vue.defineComponent({
|
|
|
48
49
|
};
|
|
49
50
|
}
|
|
50
51
|
});
|
|
51
|
-
const _hoisted_1$
|
|
52
|
-
const _hoisted_2$
|
|
53
|
-
const _hoisted_3$
|
|
54
|
-
const _hoisted_4$
|
|
55
|
-
const _hoisted_5$
|
|
56
|
-
|
|
52
|
+
const _hoisted_1$7 = { class: "bg-white dark:bg-gray-800 rounded-xl border border-gray-200 dark:border-gray-700 overflow-hidden" };
|
|
53
|
+
const _hoisted_2$5 = { class: "overflow-x-auto" };
|
|
54
|
+
const _hoisted_3$3 = { class: "w-full divide-y divide-black/10 text-left dark:divide-white/10" };
|
|
55
|
+
const _hoisted_4$2 = { class: "bg-black/5 text-sm font-semibold text-gray-600 uppercase dark:bg-white/5 dark:text-gray-400" };
|
|
56
|
+
const _hoisted_5$2 = {
|
|
57
|
+
key: 0,
|
|
58
|
+
class: "w-12 px-3 py-3"
|
|
59
|
+
};
|
|
60
|
+
const _hoisted_6$2 = {
|
|
61
|
+
key: 1,
|
|
62
|
+
class: "px-3 py-3 text-right"
|
|
63
|
+
};
|
|
64
|
+
const _hoisted_7$2 = { class: "divide-y divide-black/10 font-medium dark:divide-white/10" };
|
|
65
|
+
const _hoisted_8$2 = {
|
|
66
|
+
key: 0,
|
|
67
|
+
class: "px-3 py-4"
|
|
68
|
+
};
|
|
69
|
+
const _hoisted_9$2 = {
|
|
70
|
+
key: 1,
|
|
71
|
+
class: "flex items-center justify-end gap-2 px-3 py-4"
|
|
72
|
+
};
|
|
73
|
+
const _hoisted_10$1 = { key: 0 };
|
|
74
|
+
const _sfc_main$a = /* @__PURE__ */ vue.defineComponent({
|
|
57
75
|
__name: "TableComponent",
|
|
58
76
|
props: {
|
|
59
77
|
properties: {},
|
|
60
|
-
items: {}
|
|
78
|
+
items: {},
|
|
79
|
+
selectable: { type: Boolean, default: false },
|
|
80
|
+
selectedItems: {},
|
|
81
|
+
selectableFilter: {},
|
|
82
|
+
keyField: { default: "id" }
|
|
61
83
|
},
|
|
62
|
-
|
|
84
|
+
emits: ["select", "selectAll"],
|
|
85
|
+
setup(__props, { emit: __emit }) {
|
|
86
|
+
const props = __props;
|
|
87
|
+
const emit = __emit;
|
|
88
|
+
const slots = vue.useSlots();
|
|
63
89
|
const typeComponents = {
|
|
64
90
|
text: BadgeType_vue_vue_type_script_setup_true_lang._sfc_main$1,
|
|
65
91
|
number: BadgeType_vue_vue_type_script_setup_true_lang._sfc_main$2,
|
|
@@ -70,7 +96,11 @@ const _sfc_main$8 = /* @__PURE__ */ vue.defineComponent({
|
|
|
70
96
|
const getTypeComponent = (type = "text") => {
|
|
71
97
|
return typeComponents[type] || BadgeType_vue_vue_type_script_setup_true_lang._sfc_main$1;
|
|
72
98
|
};
|
|
73
|
-
const visibleProperties = vue.computed(() =>
|
|
99
|
+
const visibleProperties = vue.computed(() => props.properties.filter((p) => !p.hidden));
|
|
100
|
+
const getKey = (item) => {
|
|
101
|
+
const keyValue = item[props.keyField];
|
|
102
|
+
return String(keyValue ?? Math.random());
|
|
103
|
+
};
|
|
74
104
|
const getItemValue = (item, property) => {
|
|
75
105
|
if (property.name.includes(".")) {
|
|
76
106
|
let value = item;
|
|
@@ -101,62 +131,349 @@ const _sfc_main$8 = /* @__PURE__ */ vue.defineComponent({
|
|
|
101
131
|
}
|
|
102
132
|
return "text-xs font-medium text-gray-600 dark:text-gray-400";
|
|
103
133
|
};
|
|
134
|
+
const selectableItems = vue.computed(() => {
|
|
135
|
+
if (!props.selectableFilter) return props.items;
|
|
136
|
+
return props.items.filter(props.selectableFilter);
|
|
137
|
+
});
|
|
138
|
+
const allSelected = vue.computed(() => {
|
|
139
|
+
if (selectableItems.value.length === 0) return false;
|
|
140
|
+
return selectableItems.value.every((item) => {
|
|
141
|
+
var _a;
|
|
142
|
+
return (_a = props.selectedItems) == null ? void 0 : _a.has(getKey(item));
|
|
143
|
+
});
|
|
144
|
+
});
|
|
145
|
+
const someSelected = vue.computed(() => {
|
|
146
|
+
var _a;
|
|
147
|
+
return (((_a = props.selectedItems) == null ? void 0 : _a.size) || 0) > 0 && !allSelected.value;
|
|
148
|
+
});
|
|
149
|
+
const isSelected = (item) => {
|
|
150
|
+
var _a;
|
|
151
|
+
return ((_a = props.selectedItems) == null ? void 0 : _a.has(getKey(item))) || false;
|
|
152
|
+
};
|
|
153
|
+
const isSelectable = (item) => {
|
|
154
|
+
if (!props.selectable) return false;
|
|
155
|
+
if (!props.selectableFilter) return true;
|
|
156
|
+
return props.selectableFilter(item);
|
|
157
|
+
};
|
|
158
|
+
const handleSelect = (item) => {
|
|
159
|
+
emit("select", getKey(item));
|
|
160
|
+
};
|
|
161
|
+
const hasActionSlot = vue.computed(() => !!slots.action);
|
|
104
162
|
return (_ctx, _cache) => {
|
|
105
|
-
return vue.openBlock(), vue.createElementBlock(
|
|
106
|
-
vue.createElementVNode("
|
|
107
|
-
vue.createElementVNode("
|
|
108
|
-
vue.createElementVNode("
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
])
|
|
117
|
-
],
|
|
118
|
-
}), 128)),
|
|
119
|
-
_cache[0] || (_cache[0] = vue.createElementVNode("th", { class: "px-3 py-3 text-right" }, null, -1))
|
|
120
|
-
])
|
|
121
|
-
]),
|
|
122
|
-
vue.createElementVNode("tbody", _hoisted_3$2, [
|
|
123
|
-
(vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(__props.items, (item) => {
|
|
124
|
-
return vue.openBlock(), vue.createElementBlock("tr", {
|
|
125
|
-
key: item.id,
|
|
126
|
-
class: "hover:bg-black/5 dark:hover:bg-white/5"
|
|
127
|
-
}, [
|
|
163
|
+
return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$7, [
|
|
164
|
+
vue.createElementVNode("div", _hoisted_2$5, [
|
|
165
|
+
vue.createElementVNode("table", _hoisted_3$3, [
|
|
166
|
+
vue.createElementVNode("thead", _hoisted_4$2, [
|
|
167
|
+
vue.createElementVNode("tr", null, [
|
|
168
|
+
__props.selectable ? (vue.openBlock(), vue.createElementBlock("th", _hoisted_5$2, [
|
|
169
|
+
vue.createVNode(Checkbox_vue_vue_type_script_setup_true_lang._sfc_main, {
|
|
170
|
+
"model-value": allSelected.value,
|
|
171
|
+
indeterminate: someSelected.value,
|
|
172
|
+
disabled: selectableItems.value.length === 0,
|
|
173
|
+
"onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => emit("selectAll"))
|
|
174
|
+
}, null, 8, ["model-value", "indeterminate", "disabled"])
|
|
175
|
+
])) : vue.createCommentVNode("", true),
|
|
128
176
|
(vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(visibleProperties.value, (property) => {
|
|
129
|
-
return vue.openBlock(), vue.createElementBlock("
|
|
177
|
+
return vue.openBlock(), vue.createElementBlock("th", {
|
|
130
178
|
key: property.name,
|
|
131
|
-
class: vue.normalizeClass([
|
|
132
|
-
getAlignmentClass(property.align),
|
|
133
|
-
getMainClass(property.main),
|
|
134
|
-
property.className,
|
|
135
|
-
"px-3 py-4"
|
|
136
|
-
])
|
|
179
|
+
class: vue.normalizeClass([getAlignmentClass(property.align), "px-3 py-3"])
|
|
137
180
|
}, [
|
|
138
|
-
vue.renderSlot(_ctx.$slots, "
|
|
139
|
-
|
|
140
|
-
property,
|
|
141
|
-
value: getItemValue(item, property)
|
|
142
|
-
}, () => [
|
|
143
|
-
(vue.openBlock(), vue.createBlock(vue.resolveDynamicComponent(getTypeComponent(property.type || "text")), {
|
|
144
|
-
value: getItemValue(item, property)
|
|
145
|
-
}, null, 8, ["value"]))
|
|
181
|
+
vue.renderSlot(_ctx.$slots, "header-" + property.name, { property }, () => [
|
|
182
|
+
vue.createTextVNode(vue.toDisplayString(property.label ?? property.name), 1)
|
|
146
183
|
])
|
|
147
184
|
], 2);
|
|
148
185
|
}), 128)),
|
|
149
|
-
vue.
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
186
|
+
hasActionSlot.value ? (vue.openBlock(), vue.createElementBlock("th", _hoisted_6$2)) : vue.createCommentVNode("", true)
|
|
187
|
+
])
|
|
188
|
+
]),
|
|
189
|
+
vue.createElementVNode("tbody", _hoisted_7$2, [
|
|
190
|
+
(vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(__props.items, (item) => {
|
|
191
|
+
return vue.openBlock(), vue.createElementBlock("tr", {
|
|
192
|
+
key: getKey(item),
|
|
193
|
+
class: vue.normalizeClass(["hover:bg-black/5 dark:hover:bg-white/5 transition-colors", { "bg-primary/5 dark:bg-primary/10": isSelected(item) }])
|
|
194
|
+
}, [
|
|
195
|
+
__props.selectable ? (vue.openBlock(), vue.createElementBlock("td", _hoisted_8$2, [
|
|
196
|
+
isSelectable(item) ? (vue.openBlock(), vue.createBlock(Checkbox_vue_vue_type_script_setup_true_lang._sfc_main, {
|
|
197
|
+
key: 0,
|
|
198
|
+
"model-value": isSelected(item),
|
|
199
|
+
"onUpdate:modelValue": ($event) => handleSelect(item)
|
|
200
|
+
}, null, 8, ["model-value", "onUpdate:modelValue"])) : vue.createCommentVNode("", true)
|
|
201
|
+
])) : vue.createCommentVNode("", true),
|
|
202
|
+
(vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(visibleProperties.value, (property) => {
|
|
203
|
+
return vue.openBlock(), vue.createElementBlock("td", {
|
|
204
|
+
key: property.name,
|
|
205
|
+
class: vue.normalizeClass([
|
|
206
|
+
getAlignmentClass(property.align),
|
|
207
|
+
getMainClass(property.main),
|
|
208
|
+
property.className,
|
|
209
|
+
"px-3 py-4"
|
|
210
|
+
])
|
|
211
|
+
}, [
|
|
212
|
+
vue.renderSlot(_ctx.$slots, "item-" + property.name, {
|
|
213
|
+
item,
|
|
214
|
+
property,
|
|
215
|
+
value: getItemValue(item, property)
|
|
216
|
+
}, () => [
|
|
217
|
+
(vue.openBlock(), vue.createBlock(vue.resolveDynamicComponent(getTypeComponent(property.type || "text")), {
|
|
218
|
+
value: getItemValue(item, property)
|
|
219
|
+
}, null, 8, ["value"]))
|
|
220
|
+
])
|
|
221
|
+
], 2);
|
|
222
|
+
}), 128)),
|
|
223
|
+
hasActionSlot.value ? (vue.openBlock(), vue.createElementBlock("td", _hoisted_9$2, [
|
|
224
|
+
vue.renderSlot(_ctx.$slots, "action", { item })
|
|
225
|
+
])) : vue.createCommentVNode("", true)
|
|
226
|
+
], 2);
|
|
227
|
+
}), 128))
|
|
228
|
+
])
|
|
154
229
|
])
|
|
155
230
|
]),
|
|
156
|
-
!__props.items || __props.items.length === 0 ? (vue.openBlock(), vue.createElementBlock("div",
|
|
231
|
+
!__props.items || __props.items.length === 0 ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_10$1, [
|
|
157
232
|
vue.renderSlot(_ctx.$slots, "empty")
|
|
158
233
|
])) : vue.createCommentVNode("", true)
|
|
159
|
-
]
|
|
234
|
+
]);
|
|
235
|
+
};
|
|
236
|
+
}
|
|
237
|
+
});
|
|
238
|
+
const _hoisted_1$6 = { class: "space-y-3" };
|
|
239
|
+
const _hoisted_2$4 = {
|
|
240
|
+
key: 0,
|
|
241
|
+
class: "flex items-center gap-3 p-3 bg-gray-50 dark:bg-gray-800/50 rounded-xl"
|
|
242
|
+
};
|
|
243
|
+
const _hoisted_3$2 = { class: "text-sm text-gray-600 dark:text-gray-400" };
|
|
244
|
+
const _hoisted_4$1 = {
|
|
245
|
+
key: 0,
|
|
246
|
+
class: "text-sm text-primary font-medium"
|
|
247
|
+
};
|
|
248
|
+
const _hoisted_5$1 = { class: "p-4 flex items-center gap-4" };
|
|
249
|
+
const _hoisted_6$1 = {
|
|
250
|
+
key: 0,
|
|
251
|
+
class: "flex-shrink-0"
|
|
252
|
+
};
|
|
253
|
+
const _hoisted_7$1 = {
|
|
254
|
+
key: 1,
|
|
255
|
+
class: "w-5 h-5"
|
|
256
|
+
};
|
|
257
|
+
const _hoisted_8$1 = { class: "flex-1 min-w-0" };
|
|
258
|
+
const _hoisted_9$1 = { class: "flex-shrink-0" };
|
|
259
|
+
const _hoisted_10 = { key: 1 };
|
|
260
|
+
const _sfc_main$9 = /* @__PURE__ */ vue.defineComponent({
|
|
261
|
+
__name: "MobileList",
|
|
262
|
+
props: {
|
|
263
|
+
items: {},
|
|
264
|
+
keyField: { default: "id" },
|
|
265
|
+
selectable: { type: Boolean, default: false },
|
|
266
|
+
selectedItems: {},
|
|
267
|
+
selectableFilter: {}
|
|
268
|
+
},
|
|
269
|
+
emits: ["select", "selectAll"],
|
|
270
|
+
setup(__props, { emit: __emit }) {
|
|
271
|
+
const props = __props;
|
|
272
|
+
const emit = __emit;
|
|
273
|
+
const slots = vue.useSlots();
|
|
274
|
+
const getKey = (item) => {
|
|
275
|
+
const keyValue = item[props.keyField];
|
|
276
|
+
return String(keyValue ?? Math.random());
|
|
277
|
+
};
|
|
278
|
+
const selectableItems = vue.computed(() => {
|
|
279
|
+
if (!props.selectableFilter) return props.items;
|
|
280
|
+
return props.items.filter(props.selectableFilter);
|
|
281
|
+
});
|
|
282
|
+
const allSelected = vue.computed(() => {
|
|
283
|
+
if (selectableItems.value.length === 0) return false;
|
|
284
|
+
return selectableItems.value.every((item) => {
|
|
285
|
+
var _a;
|
|
286
|
+
return (_a = props.selectedItems) == null ? void 0 : _a.has(getKey(item));
|
|
287
|
+
});
|
|
288
|
+
});
|
|
289
|
+
const someSelected = vue.computed(() => {
|
|
290
|
+
var _a;
|
|
291
|
+
return (((_a = props.selectedItems) == null ? void 0 : _a.size) || 0) > 0 && !allSelected.value;
|
|
292
|
+
});
|
|
293
|
+
const isSelected = (item) => {
|
|
294
|
+
var _a;
|
|
295
|
+
return ((_a = props.selectedItems) == null ? void 0 : _a.has(getKey(item))) || false;
|
|
296
|
+
};
|
|
297
|
+
const isSelectable = (item) => {
|
|
298
|
+
if (!props.selectable) return false;
|
|
299
|
+
if (!props.selectableFilter) return true;
|
|
300
|
+
return props.selectableFilter(item);
|
|
301
|
+
};
|
|
302
|
+
const handleSelect = (item) => {
|
|
303
|
+
emit("select", getKey(item));
|
|
304
|
+
};
|
|
305
|
+
const hasEmptySlot = vue.computed(() => !!slots.empty);
|
|
306
|
+
return (_ctx, _cache) => {
|
|
307
|
+
return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$6, [
|
|
308
|
+
__props.selectable && selectableItems.value.length > 0 ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_2$4, [
|
|
309
|
+
vue.createVNode(Checkbox_vue_vue_type_script_setup_true_lang._sfc_main, {
|
|
310
|
+
"model-value": allSelected.value,
|
|
311
|
+
indeterminate: someSelected.value,
|
|
312
|
+
"onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => emit("selectAll"))
|
|
313
|
+
}, null, 8, ["model-value", "indeterminate"]),
|
|
314
|
+
vue.createElementVNode("span", _hoisted_3$2, vue.toDisplayString(allSelected.value ? "Tout désélectionner" : "Tout sélectionner"), 1),
|
|
315
|
+
__props.selectedItems && __props.selectedItems.size > 0 ? (vue.openBlock(), vue.createElementBlock("span", _hoisted_4$1, " (" + vue.toDisplayString(__props.selectedItems.size) + " sélectionné" + vue.toDisplayString(__props.selectedItems.size > 1 ? "s" : "") + ") ", 1)) : vue.createCommentVNode("", true)
|
|
316
|
+
])) : vue.createCommentVNode("", true),
|
|
317
|
+
(vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(__props.items, (item) => {
|
|
318
|
+
return vue.openBlock(), vue.createElementBlock("div", {
|
|
319
|
+
key: getKey(item),
|
|
320
|
+
class: vue.normalizeClass(["bg-white dark:bg-gray-800 rounded-xl border border-gray-200 dark:border-gray-700 hover:border-primary/30 dark:hover:border-primary/50 hover:shadow-md transition-all duration-200", {
|
|
321
|
+
"ring-2 ring-primary border-primary": isSelected(item)
|
|
322
|
+
}])
|
|
323
|
+
}, [
|
|
324
|
+
vue.createElementVNode("div", _hoisted_5$1, [
|
|
325
|
+
__props.selectable ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_6$1, [
|
|
326
|
+
isSelectable(item) ? (vue.openBlock(), vue.createBlock(Checkbox_vue_vue_type_script_setup_true_lang._sfc_main, {
|
|
327
|
+
key: 0,
|
|
328
|
+
"model-value": isSelected(item),
|
|
329
|
+
"onUpdate:modelValue": ($event) => handleSelect(item)
|
|
330
|
+
}, null, 8, ["model-value", "onUpdate:modelValue"])) : (vue.openBlock(), vue.createElementBlock("div", _hoisted_7$1))
|
|
331
|
+
])) : vue.createCommentVNode("", true),
|
|
332
|
+
vue.renderSlot(_ctx.$slots, "avatar", { item }),
|
|
333
|
+
vue.createElementVNode("div", _hoisted_8$1, [
|
|
334
|
+
vue.renderSlot(_ctx.$slots, "content", { item })
|
|
335
|
+
]),
|
|
336
|
+
vue.createElementVNode("div", _hoisted_9$1, [
|
|
337
|
+
vue.renderSlot(_ctx.$slots, "actions", { item })
|
|
338
|
+
])
|
|
339
|
+
])
|
|
340
|
+
], 2);
|
|
341
|
+
}), 128)),
|
|
342
|
+
__props.items.length === 0 && hasEmptySlot.value ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_10, [
|
|
343
|
+
vue.renderSlot(_ctx.$slots, "empty")
|
|
344
|
+
])) : vue.createCommentVNode("", true)
|
|
345
|
+
]);
|
|
346
|
+
};
|
|
347
|
+
}
|
|
348
|
+
});
|
|
349
|
+
const _sfc_main$8 = /* @__PURE__ */ vue.defineComponent({
|
|
350
|
+
__name: "ResponsiveList",
|
|
351
|
+
props: {
|
|
352
|
+
items: {},
|
|
353
|
+
columns: {},
|
|
354
|
+
keyField: { default: "id" },
|
|
355
|
+
selectable: { type: Boolean, default: false },
|
|
356
|
+
selectedItems: {},
|
|
357
|
+
selectableFilter: {},
|
|
358
|
+
breakpoint: { default: "lg" }
|
|
359
|
+
},
|
|
360
|
+
emits: ["select", "selectAll"],
|
|
361
|
+
setup(__props, { emit: __emit }) {
|
|
362
|
+
const props = __props;
|
|
363
|
+
const emit = __emit;
|
|
364
|
+
const slots = vue.useSlots();
|
|
365
|
+
const getColumnKey = (col) => col.key || col.name || "";
|
|
366
|
+
const tableProperties = vue.computed(
|
|
367
|
+
() => props.columns.map((col) => ({
|
|
368
|
+
name: getColumnKey(col),
|
|
369
|
+
label: col.label,
|
|
370
|
+
type: col.type,
|
|
371
|
+
sortable: col.sortable,
|
|
372
|
+
hidden: col.hidden,
|
|
373
|
+
align: col.align,
|
|
374
|
+
className: col.className,
|
|
375
|
+
main: col.main
|
|
376
|
+
}))
|
|
377
|
+
);
|
|
378
|
+
const breakpointClass = vue.computed(() => {
|
|
379
|
+
const breakpoints = {
|
|
380
|
+
sm: { mobile: "sm:hidden", desktop: "hidden sm:block" },
|
|
381
|
+
md: { mobile: "md:hidden", desktop: "hidden md:block" },
|
|
382
|
+
lg: { mobile: "lg:hidden", desktop: "hidden lg:block" },
|
|
383
|
+
xl: { mobile: "xl:hidden", desktop: "hidden xl:block" },
|
|
384
|
+
"2xl": { mobile: "2xl:hidden", desktop: "hidden 2xl:block" }
|
|
385
|
+
};
|
|
386
|
+
return breakpoints[props.breakpoint];
|
|
387
|
+
});
|
|
388
|
+
const getCellValue = (item, key) => {
|
|
389
|
+
const keys = key.split(".");
|
|
390
|
+
let value = item;
|
|
391
|
+
for (const k of keys) {
|
|
392
|
+
if (value && typeof value === "object" && k in value) {
|
|
393
|
+
value = value[k];
|
|
394
|
+
} else {
|
|
395
|
+
return void 0;
|
|
396
|
+
}
|
|
397
|
+
}
|
|
398
|
+
return value;
|
|
399
|
+
};
|
|
400
|
+
const hasCellSlot = (key) => {
|
|
401
|
+
return !!slots[`cell-${key}`];
|
|
402
|
+
};
|
|
403
|
+
const hasActionsSlot = vue.computed(() => !!slots.actions);
|
|
404
|
+
return (_ctx, _cache) => {
|
|
405
|
+
return vue.openBlock(), vue.createElementBlock("div", null, [
|
|
406
|
+
vue.createElementVNode("div", {
|
|
407
|
+
class: vue.normalizeClass(breakpointClass.value.mobile)
|
|
408
|
+
}, [
|
|
409
|
+
vue.createVNode(_sfc_main$9, {
|
|
410
|
+
items: __props.items,
|
|
411
|
+
"key-field": __props.keyField,
|
|
412
|
+
selectable: __props.selectable,
|
|
413
|
+
"selected-items": __props.selectedItems,
|
|
414
|
+
"selectable-filter": __props.selectableFilter,
|
|
415
|
+
onSelect: _cache[0] || (_cache[0] = ($event) => emit("select", $event)),
|
|
416
|
+
onSelectAll: _cache[1] || (_cache[1] = ($event) => emit("selectAll"))
|
|
417
|
+
}, {
|
|
418
|
+
avatar: vue.withCtx(({ item }) => [
|
|
419
|
+
vue.renderSlot(_ctx.$slots, "avatar", { item })
|
|
420
|
+
]),
|
|
421
|
+
content: vue.withCtx(({ item }) => [
|
|
422
|
+
vue.renderSlot(_ctx.$slots, "mobileContent", { item })
|
|
423
|
+
]),
|
|
424
|
+
actions: vue.withCtx(({ item }) => [
|
|
425
|
+
vue.renderSlot(_ctx.$slots, "mobileActions", { item }, () => [
|
|
426
|
+
vue.renderSlot(_ctx.$slots, "actions", { item })
|
|
427
|
+
])
|
|
428
|
+
]),
|
|
429
|
+
empty: vue.withCtx(() => [
|
|
430
|
+
vue.renderSlot(_ctx.$slots, "empty")
|
|
431
|
+
]),
|
|
432
|
+
_: 3
|
|
433
|
+
}, 8, ["items", "key-field", "selectable", "selected-items", "selectable-filter"])
|
|
434
|
+
], 2),
|
|
435
|
+
vue.createElementVNode("div", {
|
|
436
|
+
class: vue.normalizeClass(breakpointClass.value.desktop)
|
|
437
|
+
}, [
|
|
438
|
+
vue.createVNode(_sfc_main$a, {
|
|
439
|
+
items: __props.items,
|
|
440
|
+
properties: tableProperties.value,
|
|
441
|
+
"key-field": __props.keyField,
|
|
442
|
+
selectable: __props.selectable,
|
|
443
|
+
"selected-items": __props.selectedItems,
|
|
444
|
+
"selectable-filter": __props.selectableFilter,
|
|
445
|
+
onSelect: _cache[2] || (_cache[2] = ($event) => emit("select", $event)),
|
|
446
|
+
onSelectAll: _cache[3] || (_cache[3] = ($event) => emit("selectAll"))
|
|
447
|
+
}, vue.createSlots({
|
|
448
|
+
empty: vue.withCtx(() => [
|
|
449
|
+
vue.renderSlot(_ctx.$slots, "empty")
|
|
450
|
+
]),
|
|
451
|
+
_: 2
|
|
452
|
+
}, [
|
|
453
|
+
vue.renderList(__props.columns, (col) => {
|
|
454
|
+
return {
|
|
455
|
+
name: `item-${getColumnKey(col)}`,
|
|
456
|
+
fn: vue.withCtx(({ item, value }) => [
|
|
457
|
+
hasCellSlot(getColumnKey(col)) ? vue.renderSlot(_ctx.$slots, `cell-${getColumnKey(col)}`, {
|
|
458
|
+
key: 0,
|
|
459
|
+
item,
|
|
460
|
+
value: getCellValue(item, getColumnKey(col))
|
|
461
|
+
}) : (vue.openBlock(), vue.createElementBlock(vue.Fragment, { key: 1 }, [
|
|
462
|
+
vue.createTextVNode(vue.toDisplayString(value), 1)
|
|
463
|
+
], 64))
|
|
464
|
+
])
|
|
465
|
+
};
|
|
466
|
+
}),
|
|
467
|
+
hasActionsSlot.value ? {
|
|
468
|
+
name: "action",
|
|
469
|
+
fn: vue.withCtx(({ item }) => [
|
|
470
|
+
vue.renderSlot(_ctx.$slots, "actions", { item })
|
|
471
|
+
]),
|
|
472
|
+
key: "0"
|
|
473
|
+
} : void 0
|
|
474
|
+
]), 1032, ["items", "properties", "key-field", "selectable", "selected-items", "selectable-filter"])
|
|
475
|
+
], 2)
|
|
476
|
+
]);
|
|
160
477
|
};
|
|
161
478
|
}
|
|
162
479
|
});
|
|
@@ -907,7 +1224,7 @@ const _sfc_main = /* @__PURE__ */ vue.defineComponent({
|
|
|
907
1224
|
isExpanded.value = !isExpanded.value;
|
|
908
1225
|
};
|
|
909
1226
|
return (_ctx, _cache) => {
|
|
910
|
-
return vue.openBlock(), vue.createBlock(_sfc_main$
|
|
1227
|
+
return vue.openBlock(), vue.createBlock(_sfc_main$b, {
|
|
911
1228
|
title: __props.title,
|
|
912
1229
|
description: __props.description
|
|
913
1230
|
}, {
|
|
@@ -950,14 +1267,16 @@ const _sfc_main = /* @__PURE__ */ vue.defineComponent({
|
|
|
950
1267
|
};
|
|
951
1268
|
}
|
|
952
1269
|
});
|
|
953
|
-
exports._sfc_main = _sfc_main$
|
|
954
|
-
exports._sfc_main$1 = _sfc_main$
|
|
955
|
-
exports._sfc_main$
|
|
956
|
-
exports._sfc_main$
|
|
957
|
-
exports._sfc_main$
|
|
958
|
-
exports._sfc_main$
|
|
959
|
-
exports._sfc_main$
|
|
960
|
-
exports._sfc_main$
|
|
961
|
-
exports._sfc_main$
|
|
962
|
-
exports._sfc_main$
|
|
963
|
-
|
|
1270
|
+
exports._sfc_main = _sfc_main$b;
|
|
1271
|
+
exports._sfc_main$1 = _sfc_main$a;
|
|
1272
|
+
exports._sfc_main$10 = _sfc_main$1;
|
|
1273
|
+
exports._sfc_main$11 = _sfc_main;
|
|
1274
|
+
exports._sfc_main$2 = _sfc_main$9;
|
|
1275
|
+
exports._sfc_main$3 = _sfc_main$8;
|
|
1276
|
+
exports._sfc_main$4 = _sfc_main$7;
|
|
1277
|
+
exports._sfc_main$5 = _sfc_main$6;
|
|
1278
|
+
exports._sfc_main$6 = _sfc_main$5;
|
|
1279
|
+
exports._sfc_main$7 = _sfc_main$4;
|
|
1280
|
+
exports._sfc_main$8 = _sfc_main$3;
|
|
1281
|
+
exports._sfc_main$9 = _sfc_main$2;
|
|
1282
|
+
//# sourceMappingURL=CollapsibleCard.vue_vue_type_script_setup_true_lang-Cs6KGC-0.cjs.map
|