cisse-vue-ui 0.1.10 → 0.2.1
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-BEE4gCBC.cjs} +407 -79
- package/dist/CollapsibleCard.vue_vue_type_script_setup_true_lang-BEE4gCBC.cjs.map +1 -0
- package/dist/{CollapsibleCard.vue_vue_type_script_setup_true_lang-l4KQ8HX8.js → CollapsibleCard.vue_vue_type_script_setup_true_lang-Dehf9Ji3.js} +415 -87
- package/dist/CollapsibleCard.vue_vue_type_script_setup_true_lang-Dehf9Ji3.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/cisse-vue-ui.css +47 -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-CZNg2ZUJ.js +51 -0
- package/dist/index-CZNg2ZUJ.js.map +1 -0
- package/dist/{index-m8Oi-7YC.cjs → index-ChNwGBwZ.cjs} +22 -19
- package/dist/index-ChNwGBwZ.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$9 = { class: "flex flex-col overflow-hidden rounded-lg bg-white shadow-md dark:bg-slate-950" };
|
|
7
|
+
const _hoisted_2$7 = {
|
|
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$9, [
|
|
30
|
+
__props.title || __props.description || _ctx.$slots.title || _ctx.$slots.description || _ctx.$slots.actions ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_2$7, [
|
|
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$8 = { class: "bg-white dark:bg-gray-800 rounded-xl border border-gray-200 dark:border-gray-700 overflow-hidden" };
|
|
53
|
+
const _hoisted_2$6 = { 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,65 +131,361 @@ 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$8, [
|
|
164
|
+
vue.createElementVNode("div", _hoisted_2$6, [
|
|
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, [
|
|
232
|
+
vue.renderSlot(_ctx.$slots, "empty")
|
|
233
|
+
])) : vue.createCommentVNode("", true)
|
|
234
|
+
]);
|
|
235
|
+
};
|
|
236
|
+
}
|
|
237
|
+
});
|
|
238
|
+
const _hoisted_1$7 = { class: "space-y-3" };
|
|
239
|
+
const _hoisted_2$5 = {
|
|
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$7, [
|
|
308
|
+
__props.selectable && selectableItems.value.length > 0 ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_2$5, [
|
|
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, [
|
|
157
343
|
vue.renderSlot(_ctx.$slots, "empty")
|
|
158
344
|
])) : vue.createCommentVNode("", true)
|
|
159
|
-
]
|
|
345
|
+
]);
|
|
346
|
+
};
|
|
347
|
+
}
|
|
348
|
+
});
|
|
349
|
+
const _hoisted_1$6 = { class: "responsive-list__mobile" };
|
|
350
|
+
const _hoisted_2$4 = { class: "responsive-list__desktop" };
|
|
351
|
+
const _sfc_main$8 = /* @__PURE__ */ vue.defineComponent({
|
|
352
|
+
__name: "ResponsiveList",
|
|
353
|
+
props: {
|
|
354
|
+
items: {},
|
|
355
|
+
columns: {},
|
|
356
|
+
keyField: { default: "id" },
|
|
357
|
+
selectable: { type: Boolean, default: false },
|
|
358
|
+
selectedItems: {},
|
|
359
|
+
selectableFilter: {},
|
|
360
|
+
breakpoint: { default: "lg" }
|
|
361
|
+
},
|
|
362
|
+
emits: ["select", "selectAll"],
|
|
363
|
+
setup(__props, { emit: __emit }) {
|
|
364
|
+
const props = __props;
|
|
365
|
+
const emit = __emit;
|
|
366
|
+
const slots = vue.useSlots();
|
|
367
|
+
const getColumnKey = (col) => col.key || col.name || "";
|
|
368
|
+
const tableProperties = vue.computed(
|
|
369
|
+
() => props.columns.map((col) => ({
|
|
370
|
+
name: getColumnKey(col),
|
|
371
|
+
label: col.label,
|
|
372
|
+
type: col.type,
|
|
373
|
+
sortable: col.sortable,
|
|
374
|
+
hidden: col.hidden,
|
|
375
|
+
align: col.align,
|
|
376
|
+
className: col.className,
|
|
377
|
+
main: col.main
|
|
378
|
+
}))
|
|
379
|
+
);
|
|
380
|
+
const breakpointPx = vue.computed(() => {
|
|
381
|
+
const breakpoints = {
|
|
382
|
+
sm: 640,
|
|
383
|
+
md: 768,
|
|
384
|
+
lg: 1024,
|
|
385
|
+
xl: 1280,
|
|
386
|
+
"2xl": 1536
|
|
387
|
+
};
|
|
388
|
+
return breakpoints[props.breakpoint];
|
|
389
|
+
});
|
|
390
|
+
const getCellValue = (item, key) => {
|
|
391
|
+
const keys = key.split(".");
|
|
392
|
+
let value = item;
|
|
393
|
+
for (const k of keys) {
|
|
394
|
+
if (value && typeof value === "object" && k in value) {
|
|
395
|
+
value = value[k];
|
|
396
|
+
} else {
|
|
397
|
+
return void 0;
|
|
398
|
+
}
|
|
399
|
+
}
|
|
400
|
+
return value;
|
|
401
|
+
};
|
|
402
|
+
const hasCellSlot = (key) => {
|
|
403
|
+
return !!slots[`cell-${key}`];
|
|
404
|
+
};
|
|
405
|
+
const hasActionsSlot = vue.computed(() => !!slots.actions);
|
|
406
|
+
return (_ctx, _cache) => {
|
|
407
|
+
return vue.openBlock(), vue.createElementBlock("div", {
|
|
408
|
+
class: "responsive-list",
|
|
409
|
+
style: vue.normalizeStyle({ "--breakpoint": breakpointPx.value + "px" })
|
|
410
|
+
}, [
|
|
411
|
+
vue.createElementVNode("div", _hoisted_1$6, [
|
|
412
|
+
vue.createVNode(_sfc_main$9, {
|
|
413
|
+
items: __props.items,
|
|
414
|
+
"key-field": __props.keyField,
|
|
415
|
+
selectable: __props.selectable,
|
|
416
|
+
"selected-items": __props.selectedItems,
|
|
417
|
+
"selectable-filter": __props.selectableFilter,
|
|
418
|
+
onSelect: _cache[0] || (_cache[0] = ($event) => emit("select", $event)),
|
|
419
|
+
onSelectAll: _cache[1] || (_cache[1] = ($event) => emit("selectAll"))
|
|
420
|
+
}, {
|
|
421
|
+
avatar: vue.withCtx(({ item }) => [
|
|
422
|
+
vue.renderSlot(_ctx.$slots, "avatar", { item }, void 0, true)
|
|
423
|
+
]),
|
|
424
|
+
content: vue.withCtx(({ item }) => [
|
|
425
|
+
vue.renderSlot(_ctx.$slots, "mobileContent", { item }, void 0, true)
|
|
426
|
+
]),
|
|
427
|
+
actions: vue.withCtx(({ item }) => [
|
|
428
|
+
vue.renderSlot(_ctx.$slots, "mobileActions", { item }, () => [
|
|
429
|
+
vue.renderSlot(_ctx.$slots, "actions", { item }, void 0, true)
|
|
430
|
+
], true)
|
|
431
|
+
]),
|
|
432
|
+
empty: vue.withCtx(() => [
|
|
433
|
+
vue.renderSlot(_ctx.$slots, "empty", {}, void 0, true)
|
|
434
|
+
]),
|
|
435
|
+
_: 3
|
|
436
|
+
}, 8, ["items", "key-field", "selectable", "selected-items", "selectable-filter"])
|
|
437
|
+
]),
|
|
438
|
+
vue.createElementVNode("div", _hoisted_2$4, [
|
|
439
|
+
vue.createVNode(_sfc_main$a, {
|
|
440
|
+
items: __props.items,
|
|
441
|
+
properties: tableProperties.value,
|
|
442
|
+
"key-field": __props.keyField,
|
|
443
|
+
selectable: __props.selectable,
|
|
444
|
+
"selected-items": __props.selectedItems,
|
|
445
|
+
"selectable-filter": __props.selectableFilter,
|
|
446
|
+
onSelect: _cache[2] || (_cache[2] = ($event) => emit("select", $event)),
|
|
447
|
+
onSelectAll: _cache[3] || (_cache[3] = ($event) => emit("selectAll"))
|
|
448
|
+
}, vue.createSlots({
|
|
449
|
+
empty: vue.withCtx(() => [
|
|
450
|
+
vue.renderSlot(_ctx.$slots, "empty", {}, void 0, true)
|
|
451
|
+
]),
|
|
452
|
+
_: 2
|
|
453
|
+
}, [
|
|
454
|
+
vue.renderList(__props.columns, (col) => {
|
|
455
|
+
return {
|
|
456
|
+
name: `item-${getColumnKey(col)}`,
|
|
457
|
+
fn: vue.withCtx(({ item, value }) => [
|
|
458
|
+
hasCellSlot(getColumnKey(col)) ? vue.renderSlot(_ctx.$slots, `cell-${getColumnKey(col)}`, {
|
|
459
|
+
key: 0,
|
|
460
|
+
item,
|
|
461
|
+
value: getCellValue(item, getColumnKey(col))
|
|
462
|
+
}, void 0, true) : (vue.openBlock(), vue.createElementBlock(vue.Fragment, { key: 1 }, [
|
|
463
|
+
vue.createTextVNode(vue.toDisplayString(value), 1)
|
|
464
|
+
], 64))
|
|
465
|
+
])
|
|
466
|
+
};
|
|
467
|
+
}),
|
|
468
|
+
hasActionsSlot.value ? {
|
|
469
|
+
name: "action",
|
|
470
|
+
fn: vue.withCtx(({ item }) => [
|
|
471
|
+
vue.renderSlot(_ctx.$slots, "actions", { item }, void 0, true)
|
|
472
|
+
]),
|
|
473
|
+
key: "0"
|
|
474
|
+
} : void 0
|
|
475
|
+
]), 1032, ["items", "properties", "key-field", "selectable", "selected-items", "selectable-filter"])
|
|
476
|
+
])
|
|
477
|
+
], 4);
|
|
160
478
|
};
|
|
161
479
|
}
|
|
162
480
|
});
|
|
481
|
+
const _export_sfc = (sfc, props) => {
|
|
482
|
+
const target = sfc.__vccOpts || sfc;
|
|
483
|
+
for (const [key, val] of props) {
|
|
484
|
+
target[key] = val;
|
|
485
|
+
}
|
|
486
|
+
return target;
|
|
487
|
+
};
|
|
488
|
+
const ResponsiveList = /* @__PURE__ */ _export_sfc(_sfc_main$8, [["__scopeId", "data-v-5563bb86"]]);
|
|
163
489
|
const _hoisted_1$5 = {
|
|
164
490
|
key: 0,
|
|
165
491
|
class: "mb-2 block text-sm font-medium text-gray-700 dark:text-gray-300"
|
|
@@ -907,7 +1233,7 @@ const _sfc_main = /* @__PURE__ */ vue.defineComponent({
|
|
|
907
1233
|
isExpanded.value = !isExpanded.value;
|
|
908
1234
|
};
|
|
909
1235
|
return (_ctx, _cache) => {
|
|
910
|
-
return vue.openBlock(), vue.createBlock(_sfc_main$
|
|
1236
|
+
return vue.openBlock(), vue.createBlock(_sfc_main$b, {
|
|
911
1237
|
title: __props.title,
|
|
912
1238
|
description: __props.description
|
|
913
1239
|
}, {
|
|
@@ -950,14 +1276,16 @@ const _sfc_main = /* @__PURE__ */ vue.defineComponent({
|
|
|
950
1276
|
};
|
|
951
1277
|
}
|
|
952
1278
|
});
|
|
953
|
-
exports.
|
|
954
|
-
exports._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
|
-
|
|
1279
|
+
exports.ResponsiveList = ResponsiveList;
|
|
1280
|
+
exports._sfc_main = _sfc_main$b;
|
|
1281
|
+
exports._sfc_main$1 = _sfc_main$a;
|
|
1282
|
+
exports._sfc_main$10 = _sfc_main;
|
|
1283
|
+
exports._sfc_main$2 = _sfc_main$9;
|
|
1284
|
+
exports._sfc_main$3 = _sfc_main$7;
|
|
1285
|
+
exports._sfc_main$4 = _sfc_main$6;
|
|
1286
|
+
exports._sfc_main$5 = _sfc_main$5;
|
|
1287
|
+
exports._sfc_main$6 = _sfc_main$4;
|
|
1288
|
+
exports._sfc_main$7 = _sfc_main$3;
|
|
1289
|
+
exports._sfc_main$8 = _sfc_main$2;
|
|
1290
|
+
exports._sfc_main$9 = _sfc_main$1;
|
|
1291
|
+
//# sourceMappingURL=CollapsibleCard.vue_vue_type_script_setup_true_lang-BEE4gCBC.cjs.map
|