@milaboratories/uikit 2.2.94 → 2.2.96
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/.turbo/turbo-build.log +30 -25
- package/.turbo/turbo-type-check.log +1 -1
- package/CHANGELOG.md +15 -0
- package/dist/components/DataTable/TableComponent.vue.js +1 -1
- package/dist/components/PlAccordion/PlAccordionSection.vue2.js +21 -21
- package/dist/components/PlAccordion/PlAccordionSection.vue2.js.map +1 -1
- package/dist/components/PlAutocomplete/PlAutocomplete.vue.js.map +1 -1
- package/dist/components/PlDropdown/OptionList.vue.d.ts +77 -0
- package/dist/components/PlDropdown/OptionList.vue.d.ts.map +1 -0
- package/dist/components/PlDropdown/OptionList.vue.js +88 -0
- package/dist/components/PlDropdown/OptionList.vue.js.map +1 -0
- package/dist/components/PlDropdown/OptionList.vue2.js +5 -0
- package/dist/components/PlDropdown/OptionList.vue2.js.map +1 -0
- package/dist/components/PlDropdown/PlDropdown.vue.d.ts.map +1 -1
- package/dist/components/PlDropdown/PlDropdown.vue.js +110 -122
- package/dist/components/PlDropdown/PlDropdown.vue.js.map +1 -1
- package/dist/components/PlDropdown/types.d.ts +7 -0
- package/dist/components/PlDropdown/types.d.ts.map +1 -0
- package/dist/components/PlDropdown/useGroupBy.d.ts +7 -0
- package/dist/components/PlDropdown/useGroupBy.d.ts.map +1 -0
- package/dist/components/PlDropdown/useGroupBy.js +36 -0
- package/dist/components/PlDropdown/useGroupBy.js.map +1 -0
- package/dist/components/PlDropdownRef/PlDropdownRef.vue.d.ts +1 -1
- package/dist/components/PlDropdownRef/PlDropdownRef.vue.d.ts.map +1 -1
- package/dist/components/PlDropdownRef/PlDropdownRef.vue.js +11 -10
- package/dist/components/PlDropdownRef/PlDropdownRef.vue.js.map +1 -1
- package/dist/components/PlElementList/PlElementList.vue.d.ts +19 -19
- package/dist/components/PlElementList/PlElementList.vue.d.ts.map +1 -1
- package/dist/components/PlElementList/PlElementList.vue2.js +145 -133
- package/dist/components/PlElementList/PlElementList.vue2.js.map +1 -1
- package/dist/components/PlElementList/PlElementListItem.vue2.js.map +1 -1
- package/dist/components/PlElementList/PlElementListItem.vue3.js +33 -33
- package/dist/components/PlSlideModal/PlSlideModal.vue.js +1 -1
- package/dist/helpers/utils.d.ts +1 -0
- package/dist/helpers/utils.d.ts.map +1 -1
- package/dist/helpers/utils.js +2 -1
- package/dist/helpers/utils.js.map +1 -1
- package/dist/sdk/model/dist/index.js +1 -1
- package/dist/sdk/model/dist/index.js.map +1 -1
- package/dist/types.d.ts +4 -14
- package/dist/types.d.ts.map +1 -1
- package/dist/utils/TextLabel.vue.d.ts +18 -0
- package/dist/utils/TextLabel.vue.d.ts.map +1 -0
- package/dist/utils/TextLabel.vue.js +26 -0
- package/dist/utils/TextLabel.vue.js.map +1 -0
- package/dist/utils/TextLabel.vue2.js +13 -0
- package/dist/utils/TextLabel.vue2.js.map +1 -0
- package/package.json +4 -4
- package/src/components/PlAccordion/PlAccordionSection.vue +3 -3
- package/src/components/PlAutocomplete/PlAutocomplete.vue +1 -1
- package/src/components/PlDropdown/OptionList.vue +71 -0
- package/src/components/PlDropdown/PlDropdown.vue +29 -25
- package/src/components/PlDropdown/pl-dropdown.scss +4 -0
- package/src/components/PlDropdown/types.ts +3 -0
- package/src/components/PlDropdown/useGroupBy.ts +63 -0
- package/src/components/PlDropdownRef/PlDropdownRef.vue +1 -0
- package/src/components/PlElementList/PlElementList.vue +81 -70
- package/src/components/PlElementList/PlElementListItem.vue +2 -2
- package/src/helpers/utils.ts +1 -0
- package/src/types.ts +5 -15
- package/src/utils/TextLabel.vue +43 -0
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import type { Ref } from 'vue';
|
|
2
|
+
import { computed } from 'vue';
|
|
3
|
+
|
|
4
|
+
function groupBy<T, K extends keyof T>(
|
|
5
|
+
list: T[],
|
|
6
|
+
groupBy: K,
|
|
7
|
+
): {
|
|
8
|
+
grouped: Map<NonNullable<T[K]>, T[]>;
|
|
9
|
+
rest: T[];
|
|
10
|
+
ordered: T[];
|
|
11
|
+
} {
|
|
12
|
+
const grouped: Map<NonNullable<T[K]>, T[]> = new Map();
|
|
13
|
+
|
|
14
|
+
if (!list) {
|
|
15
|
+
return {
|
|
16
|
+
grouped,
|
|
17
|
+
rest: [],
|
|
18
|
+
ordered: [],
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
// Group items by the specified key
|
|
23
|
+
for (const item of list) {
|
|
24
|
+
const key = item[groupBy];
|
|
25
|
+
if (key === undefined) continue;
|
|
26
|
+
if (key === null) continue;
|
|
27
|
+
if (!grouped.has(key)) grouped.set(key, []);
|
|
28
|
+
grouped.get(key)?.push(item);
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
// Items without a group key
|
|
32
|
+
const rest = list.filter((item: T) => {
|
|
33
|
+
const key = item[groupBy];
|
|
34
|
+
return key === undefined || key === null;
|
|
35
|
+
});
|
|
36
|
+
|
|
37
|
+
const ordered = [...Array.from(grouped.values()).flat(), ...rest];
|
|
38
|
+
|
|
39
|
+
return {
|
|
40
|
+
grouped,
|
|
41
|
+
rest,
|
|
42
|
+
ordered,
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
export function useGroupBy<T, K extends keyof T>(
|
|
47
|
+
list: Ref<T[]>,
|
|
48
|
+
byKey: K,
|
|
49
|
+
) {
|
|
50
|
+
const result = computed(() => groupBy(list.value, byKey));
|
|
51
|
+
|
|
52
|
+
const orderedRef = computed(() => result.value.ordered);
|
|
53
|
+
|
|
54
|
+
const groupsRef = computed(() => result.value.grouped);
|
|
55
|
+
|
|
56
|
+
const restRef = computed(() => result.value.rest);
|
|
57
|
+
|
|
58
|
+
return {
|
|
59
|
+
orderedRef,
|
|
60
|
+
groupsRef,
|
|
61
|
+
restRef,
|
|
62
|
+
};
|
|
63
|
+
}
|
|
@@ -8,25 +8,26 @@ import { moveElements, optionalUpdateRef } from './utils.ts';
|
|
|
8
8
|
import PlElementListItem from './PlElementListItem.vue';
|
|
9
9
|
|
|
10
10
|
const itemsRef = defineModel<T[]>('items', { required: true });
|
|
11
|
-
const draggableSetRef = defineModel<Set<
|
|
12
|
-
const removableSetRef = defineModel<Set<
|
|
11
|
+
const draggableSetRef = defineModel<Set<K>>('draggableItems');
|
|
12
|
+
const removableSetRef = defineModel<Set<K>>('removableItems');
|
|
13
13
|
|
|
14
|
-
const expandableSetRef = defineModel<Set<
|
|
15
|
-
const expandedSetRef = defineModel<Set<
|
|
14
|
+
const expandableSetRef = defineModel<Set<K>>('expandableItems');
|
|
15
|
+
const expandedSetRef = defineModel<Set<K>>('expandedItems');
|
|
16
16
|
|
|
17
|
-
const pinnableSetRef = defineModel<Set<
|
|
18
|
-
const pinnedSetRef = defineModel<Set<
|
|
17
|
+
const pinnableSetRef = defineModel<Set<K>>('pinnableItems');
|
|
18
|
+
const pinnedSetRef = defineModel<Set<K>>('pinnedItems');
|
|
19
19
|
|
|
20
|
-
const toggableSetRef = defineModel<Set<
|
|
21
|
-
const toggledSetRef = defineModel<Set<
|
|
20
|
+
const toggableSetRef = defineModel<Set<K>>('toggableItems');
|
|
21
|
+
const toggledSetRef = defineModel<Set<K>>('toggledItems');
|
|
22
22
|
|
|
23
23
|
const props = withDefaults(
|
|
24
24
|
defineProps<{
|
|
25
|
+
getItemKey: (item: T, index: number) => K;
|
|
26
|
+
|
|
25
27
|
itemClass?: string | string[] | ((item: T, index: number) => string | string[]);
|
|
26
|
-
activeItems?: Set<
|
|
28
|
+
activeItems?: Set<K>;
|
|
27
29
|
|
|
28
30
|
enableDragging?: boolean;
|
|
29
|
-
getItemKey?: (item: T) => K;
|
|
30
31
|
onDragEnd?: (oldIndex: number, newIndex: number) => void | boolean;
|
|
31
32
|
onSort?: (oldIndex: number, newIndex: number) => void | boolean;
|
|
32
33
|
|
|
@@ -51,7 +52,6 @@ const props = withDefaults(
|
|
|
51
52
|
enableToggling: undefined,
|
|
52
53
|
enablePinning: undefined,
|
|
53
54
|
|
|
54
|
-
getItemKey: undefined,
|
|
55
55
|
onDragEnd: undefined,
|
|
56
56
|
onSort: undefined,
|
|
57
57
|
onRemove: undefined,
|
|
@@ -71,13 +71,13 @@ const slots = defineSlots<{
|
|
|
71
71
|
}>();
|
|
72
72
|
|
|
73
73
|
const dndSortingEnabled = computed((): boolean => {
|
|
74
|
-
return props.enableDragging !== false
|
|
74
|
+
return props.enableDragging !== false;
|
|
75
75
|
});
|
|
76
76
|
|
|
77
77
|
const pinnedItemsRef = computed(() => itemsRef.value.filter(isPinned));
|
|
78
78
|
const hasPinnedItems = computed(() => pinnedItemsRef.value.length > 0);
|
|
79
79
|
|
|
80
|
-
const unpinnedItemsRef = computed(() => itemsRef.value.filter((item) => !isPinned(item)));
|
|
80
|
+
const unpinnedItemsRef = computed(() => itemsRef.value.filter((item, index) => !isPinned(item, index)));
|
|
81
81
|
const hasUnpinnedItems = computed(() => unpinnedItemsRef.value.length > 0);
|
|
82
82
|
|
|
83
83
|
const domProjectionItemsRef = shallowRef<undefined | T[]>();
|
|
@@ -86,11 +86,11 @@ const unpinnedContainerRef = shallowRef<HTMLElement>();
|
|
|
86
86
|
|
|
87
87
|
// version fix problem with sync between data and rendered values when items have been changed
|
|
88
88
|
const versionRef = computed<number>((oldVersion) => {
|
|
89
|
-
const currentVersion = shallowHash(...itemsRef.value);
|
|
89
|
+
const currentVersion = shallowHash(...itemsRef.value.map(props.getItemKey));
|
|
90
90
|
|
|
91
91
|
if (domProjectionItemsRef.value === undefined) return oldVersion ?? currentVersion;
|
|
92
92
|
|
|
93
|
-
const lastSortedVersion = shallowHash(...domProjectionItemsRef.value);
|
|
93
|
+
const lastSortedVersion = shallowHash(...domProjectionItemsRef.value.map(props.getItemKey));
|
|
94
94
|
|
|
95
95
|
if (currentVersion === lastSortedVersion) return oldVersion ?? currentVersion;
|
|
96
96
|
|
|
@@ -137,93 +137,105 @@ function moveItems(oldIndex: number, newIndex: number, afterUpdateDom: boolean)
|
|
|
137
137
|
}
|
|
138
138
|
}
|
|
139
139
|
|
|
140
|
-
function isActive(item: T): boolean {
|
|
141
|
-
|
|
140
|
+
function isActive(item: T, index: number): boolean {
|
|
141
|
+
const k = props.getItemKey(item, index);
|
|
142
|
+
return props.activeItems?.has(k) ?? false;
|
|
142
143
|
}
|
|
143
144
|
|
|
144
|
-
function isDraggable(item: T): boolean {
|
|
145
|
+
function isDraggable(item: T, index: number): boolean {
|
|
146
|
+
const k = props.getItemKey(item, index);
|
|
145
147
|
if (props.enableDragging === false) return false;
|
|
146
|
-
return (draggableSetRef.value?.has(
|
|
148
|
+
return (draggableSetRef.value?.has(k) ?? true);
|
|
147
149
|
}
|
|
148
150
|
|
|
149
|
-
function isToggable(item: T): boolean {
|
|
151
|
+
function isToggable(item: T, index: number): boolean {
|
|
152
|
+
const k = props.getItemKey(item, index);
|
|
150
153
|
if (props.enableToggling === false) return false;
|
|
151
|
-
return !isNil(toggledSetRef.value) && (toggableSetRef.value?.has(
|
|
154
|
+
return !isNil(toggledSetRef.value) && (toggableSetRef.value?.has(k) ?? true);
|
|
152
155
|
}
|
|
153
156
|
|
|
154
|
-
function isToggled(item: T): boolean {
|
|
155
|
-
|
|
157
|
+
function isToggled(item: T, index: number): boolean {
|
|
158
|
+
const k = props.getItemKey(item, index);
|
|
159
|
+
return toggledSetRef.value?.has(k) ?? false;
|
|
156
160
|
}
|
|
157
161
|
|
|
158
|
-
function isPinnable(item: T): boolean {
|
|
162
|
+
function isPinnable(item: T, index: number): boolean {
|
|
163
|
+
const k = props.getItemKey(item, index);
|
|
159
164
|
if (props.enablePinning === false) return false;
|
|
160
|
-
return !isNil(pinnedSetRef.value) && (pinnableSetRef.value?.has(
|
|
165
|
+
return !isNil(pinnedSetRef.value) && (pinnableSetRef.value?.has(k) ?? true);
|
|
161
166
|
}
|
|
162
167
|
|
|
163
|
-
function isPinned(item: T): boolean {
|
|
164
|
-
|
|
168
|
+
function isPinned(item: T, index: number): boolean {
|
|
169
|
+
const k = props.getItemKey(item, index);
|
|
170
|
+
return pinnedSetRef.value?.has(k) ?? false;
|
|
165
171
|
}
|
|
166
172
|
|
|
167
|
-
function isExpandable(item: T): boolean {
|
|
173
|
+
function isExpandable(item: T, index: number): boolean {
|
|
174
|
+
const k = props.getItemKey(item, index);
|
|
168
175
|
if (props.enableExpanding === false) return false;
|
|
169
|
-
return !isNil(expandedSetRef.value) && (expandableSetRef.value?.has(
|
|
176
|
+
return !isNil(expandedSetRef.value) && (expandableSetRef.value?.has(k) ?? true);
|
|
170
177
|
}
|
|
171
178
|
|
|
172
|
-
function isExpanded(item: T): boolean {
|
|
173
|
-
|
|
179
|
+
function isExpanded(item: T, index: number): boolean {
|
|
180
|
+
const k = props.getItemKey(item, index);
|
|
181
|
+
return expandedSetRef.value?.has(k) ?? false;
|
|
174
182
|
}
|
|
175
183
|
|
|
176
|
-
function isRemovable(item: T): boolean {
|
|
184
|
+
function isRemovable(item: T, index: number): boolean {
|
|
185
|
+
const k = props.getItemKey(item, index);
|
|
177
186
|
if (props.enableRemoving === false) return false;
|
|
178
|
-
if (removableSetRef.value?.has(
|
|
187
|
+
if (removableSetRef.value?.has(k) === false) return false;
|
|
179
188
|
return props.enableRemoving === true || typeof props.onRemove === 'function';
|
|
180
189
|
}
|
|
181
190
|
|
|
182
191
|
function handleExpand(item: T, index: number) {
|
|
183
192
|
if (props.onExpand?.(item, index) === false || isNil(expandedSetRef.value)) return;
|
|
184
|
-
|
|
193
|
+
const k = props.getItemKey(item, index);
|
|
185
194
|
const expanded = expandedSetRef.value;
|
|
186
|
-
if (expanded.has(
|
|
187
|
-
else expanded.add(
|
|
195
|
+
if (expanded.has(k)) expanded.delete(k);
|
|
196
|
+
else expanded.add(k);
|
|
188
197
|
optionalUpdateRef(expandedSetRef);
|
|
189
198
|
}
|
|
190
199
|
|
|
191
200
|
function handleToggle(item: T, index: number) {
|
|
192
201
|
if (props.onToggle?.(item, index) === false || isNil(toggledSetRef.value)) return;
|
|
193
|
-
|
|
202
|
+
const k = props.getItemKey(item, index);
|
|
194
203
|
const toggled = toggledSetRef.value;
|
|
195
|
-
if (toggled.has(
|
|
196
|
-
else toggled.add(
|
|
204
|
+
if (toggled.has(k)) toggled.delete(k);
|
|
205
|
+
else toggled.add(k);
|
|
197
206
|
optionalUpdateRef(toggledSetRef);
|
|
198
207
|
}
|
|
199
208
|
|
|
200
|
-
function handlePin(item: T,
|
|
201
|
-
if (
|
|
209
|
+
function handlePin(item: T, index: number) {
|
|
210
|
+
if (index === -1) {
|
|
202
211
|
throw new Error('Pinnable item not found');
|
|
203
212
|
}
|
|
204
213
|
|
|
205
|
-
if (props.onPin?.(item,
|
|
214
|
+
if (props.onPin?.(item, index) === false || isNil(pinnedSetRef.value)) return;
|
|
206
215
|
|
|
216
|
+
const k = props.getItemKey(item, index);
|
|
207
217
|
const pinned = pinnedSetRef.value;
|
|
208
|
-
const alreadyPinned = pinned.has(
|
|
209
|
-
if (alreadyPinned) pinned.delete(
|
|
210
|
-
else pinned.add(
|
|
218
|
+
const alreadyPinned = pinned.has(k);
|
|
219
|
+
if (alreadyPinned) pinned.delete(k);
|
|
220
|
+
else pinned.add(k);
|
|
211
221
|
optionalUpdateRef(pinnedSetRef);
|
|
212
|
-
moveItems(
|
|
222
|
+
moveItems(index, pinned.size + (alreadyPinned ? 0 : -1), false);
|
|
213
223
|
}
|
|
214
224
|
|
|
215
225
|
function handleRemove(item: T, index: number) {
|
|
216
226
|
if (props.onRemove?.(item, index) !== false) {
|
|
227
|
+
const k = props.getItemKey(item, index);
|
|
228
|
+
|
|
217
229
|
itemsRef.value.splice(index, 1);
|
|
218
230
|
optionalUpdateRef(itemsRef);
|
|
219
231
|
|
|
220
|
-
if (pinnedSetRef.value?.has(
|
|
221
|
-
pinnedSetRef.value.delete(
|
|
232
|
+
if (pinnedSetRef.value?.has(k)) {
|
|
233
|
+
pinnedSetRef.value.delete(k);
|
|
222
234
|
optionalUpdateRef(pinnedSetRef);
|
|
223
235
|
}
|
|
224
236
|
|
|
225
|
-
if (toggledSetRef.value?.has(
|
|
226
|
-
toggledSetRef.value.delete(
|
|
237
|
+
if (toggledSetRef.value?.has(k)) {
|
|
238
|
+
toggledSetRef.value.delete(k);
|
|
227
239
|
optionalUpdateRef(toggledSetRef);
|
|
228
240
|
}
|
|
229
241
|
}
|
|
@@ -231,8 +243,7 @@ function handleRemove(item: T, index: number) {
|
|
|
231
243
|
|
|
232
244
|
// version fix problem with sync between data and rendered values
|
|
233
245
|
const getKey = (item: T, index: number) => {
|
|
234
|
-
|
|
235
|
-
return `${versionRef.value}-${props.getItemKey(item)}`;
|
|
246
|
+
return `${versionRef.value}-${props.getItemKey(item, index)}`;
|
|
236
247
|
};
|
|
237
248
|
const pinnedKeysRef = computed(() => pinnedItemsRef.value.map(getKey));
|
|
238
249
|
const unpinnedKeysRef = computed(() => unpinnedItemsRef.value.map(getKey));
|
|
@@ -256,15 +267,15 @@ const getItemClass = (item: T, index: number): null | string | string[] => {
|
|
|
256
267
|
:index="pinnedIndex"
|
|
257
268
|
:item="pinnedItem"
|
|
258
269
|
:showDragHandle="dndSortingEnabled"
|
|
259
|
-
:isActive="isActive(pinnedItem)"
|
|
260
|
-
:isDraggable="isDraggable(pinnedItem)"
|
|
261
|
-
:isRemovable="isRemovable(pinnedItem)"
|
|
262
|
-
:isToggable="isToggable(pinnedItem)"
|
|
263
|
-
:isToggled="isToggled(pinnedItem)"
|
|
264
|
-
:isPinnable="isPinnable(pinnedItem)"
|
|
265
|
-
:isPinned="isPinned(pinnedItem)"
|
|
266
|
-
:isExpandable="isExpandable(pinnedItem)"
|
|
267
|
-
:isExpanded="isExpanded(pinnedItem)"
|
|
270
|
+
:isActive="isActive(pinnedItem, pinnedIndex)"
|
|
271
|
+
:isDraggable="isDraggable(pinnedItem, pinnedIndex)"
|
|
272
|
+
:isRemovable="isRemovable(pinnedItem, pinnedIndex)"
|
|
273
|
+
:isToggable="isToggable(pinnedItem, pinnedIndex)"
|
|
274
|
+
:isToggled="isToggled(pinnedItem, pinnedIndex)"
|
|
275
|
+
:isPinnable="isPinnable(pinnedItem, pinnedIndex)"
|
|
276
|
+
:isPinned="isPinned(pinnedItem, pinnedIndex)"
|
|
277
|
+
:isExpandable="isExpandable(pinnedItem, pinnedIndex)"
|
|
278
|
+
:isExpanded="isExpanded(pinnedItem, pinnedIndex)"
|
|
268
279
|
|
|
269
280
|
@click="emits('itemClick', pinnedItem)"
|
|
270
281
|
@remove="handleRemove"
|
|
@@ -288,15 +299,15 @@ const getItemClass = (item: T, index: number): null | string | string[] => {
|
|
|
288
299
|
:index="unpinnedIndex + (pinnedSetRef?.size ?? 0)"
|
|
289
300
|
:item="unpinnedItem"
|
|
290
301
|
:showDragHandle="dndSortingEnabled"
|
|
291
|
-
:isActive="isActive(unpinnedItem)"
|
|
292
|
-
:isDraggable="isDraggable(unpinnedItem)"
|
|
293
|
-
:isRemovable="isRemovable(unpinnedItem)"
|
|
294
|
-
:isToggable="isToggable(unpinnedItem)"
|
|
295
|
-
:isToggled="isToggled(unpinnedItem)"
|
|
296
|
-
:isPinnable="isPinnable(unpinnedItem)"
|
|
297
|
-
:isPinned="isPinned(unpinnedItem)"
|
|
298
|
-
:isExpandable="isExpandable(unpinnedItem)"
|
|
299
|
-
:isExpanded="isExpanded(unpinnedItem)"
|
|
302
|
+
:isActive="isActive(unpinnedItem, unpinnedIndex)"
|
|
303
|
+
:isDraggable="isDraggable(unpinnedItem, unpinnedIndex)"
|
|
304
|
+
:isRemovable="isRemovable(unpinnedItem, unpinnedIndex)"
|
|
305
|
+
:isToggable="isToggable(unpinnedItem, unpinnedIndex)"
|
|
306
|
+
:isToggled="isToggled(unpinnedItem, unpinnedIndex)"
|
|
307
|
+
:isPinnable="isPinnable(unpinnedItem, unpinnedIndex)"
|
|
308
|
+
:isPinned="isPinned(unpinnedItem, unpinnedIndex)"
|
|
309
|
+
:isExpandable="isExpandable(unpinnedItem, unpinnedIndex)"
|
|
310
|
+
:isExpanded="isExpanded(unpinnedItem, unpinnedIndex)"
|
|
300
311
|
|
|
301
312
|
@click="emits('itemClick', unpinnedItem)"
|
|
302
313
|
@remove="handleRemove"
|
|
@@ -168,8 +168,8 @@ const emit = defineEmits<{
|
|
|
168
168
|
.title {
|
|
169
169
|
display: flex;
|
|
170
170
|
flex-direction: row;
|
|
171
|
+
flex: 1 1 0;
|
|
171
172
|
gap: 8px;
|
|
172
|
-
max-width: calc(100% - 50px);
|
|
173
173
|
overflow: hidden;
|
|
174
174
|
text-overflow: ellipsis;
|
|
175
175
|
}
|
|
@@ -177,7 +177,7 @@ const emit = defineEmits<{
|
|
|
177
177
|
.body {
|
|
178
178
|
display: flex;
|
|
179
179
|
flex-direction: column;
|
|
180
|
-
gap:
|
|
180
|
+
gap: 12px;
|
|
181
181
|
padding: 24px;
|
|
182
182
|
border-radius: 0 0 var(--border-radius) var(--border-radius);
|
|
183
183
|
}
|
package/src/helpers/utils.ts
CHANGED
package/src/types.ts
CHANGED
|
@@ -32,31 +32,21 @@ export type SimpleOption<T = unknown> =
|
|
|
32
32
|
value: T;
|
|
33
33
|
};
|
|
34
34
|
|
|
35
|
-
export type
|
|
36
|
-
label: string;
|
|
37
|
-
description?: string;
|
|
38
|
-
value: T;
|
|
39
|
-
};
|
|
35
|
+
export type ListOptionNormalized<T = unknown> = ListOptionBase<T>;
|
|
40
36
|
|
|
37
|
+
// @TODO: remove `text` support
|
|
41
38
|
export type ListOption<T = unknown> =
|
|
42
|
-
| {
|
|
39
|
+
| Omit<ListOptionBase<T>, 'label'> & {
|
|
43
40
|
text: string;
|
|
44
|
-
description?: string;
|
|
45
|
-
value: T;
|
|
46
41
|
}
|
|
47
|
-
|
|
|
48
|
-
label: string;
|
|
49
|
-
description?: string;
|
|
50
|
-
value: T;
|
|
51
|
-
};
|
|
52
|
-
|
|
53
|
-
export type ListOptionNormalized<T = unknown> = ListOptionBase<T>;
|
|
42
|
+
| ListOptionBase<T>;
|
|
54
43
|
|
|
55
44
|
export type { ModelRef };
|
|
56
45
|
|
|
57
46
|
export type RefOption = {
|
|
58
47
|
readonly label: string;
|
|
59
48
|
readonly ref: ModelRef;
|
|
49
|
+
readonly group?: string;
|
|
60
50
|
};
|
|
61
51
|
|
|
62
52
|
export type ListOptionType<Type> = Type extends ListOption<infer X>[] ? X : never;
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<div :class="$style.textLabel">
|
|
3
|
+
<div :class="$style.label">
|
|
4
|
+
<div :class="$style.labelText">
|
|
5
|
+
<slot />
|
|
6
|
+
</div>
|
|
7
|
+
</div>
|
|
8
|
+
</div>
|
|
9
|
+
</template>
|
|
10
|
+
|
|
11
|
+
<style lang="scss" module>
|
|
12
|
+
.textLabel {
|
|
13
|
+
padding: 0px 12px;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
.label {
|
|
17
|
+
display: flex;
|
|
18
|
+
align-items: center;
|
|
19
|
+
gap: 4px;
|
|
20
|
+
color: var(--txt-03);
|
|
21
|
+
font-size: 12px;
|
|
22
|
+
font-weight: 500;
|
|
23
|
+
line-height: 16px;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
.labelText {
|
|
27
|
+
display: inline-block;
|
|
28
|
+
max-width: 100%;
|
|
29
|
+
min-width: 0;
|
|
30
|
+
overflow: hidden;
|
|
31
|
+
text-overflow: ellipsis;
|
|
32
|
+
white-space: nowrap;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
.label::after {
|
|
36
|
+
display: block;
|
|
37
|
+
flex: 1;
|
|
38
|
+
content: '';
|
|
39
|
+
height: 1px;
|
|
40
|
+
background-color: var(--border-color-div-grey);
|
|
41
|
+
width: 100%;
|
|
42
|
+
}
|
|
43
|
+
</style>
|