@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.
Files changed (61) hide show
  1. package/.turbo/turbo-build.log +30 -25
  2. package/.turbo/turbo-type-check.log +1 -1
  3. package/CHANGELOG.md +15 -0
  4. package/dist/components/DataTable/TableComponent.vue.js +1 -1
  5. package/dist/components/PlAccordion/PlAccordionSection.vue2.js +21 -21
  6. package/dist/components/PlAccordion/PlAccordionSection.vue2.js.map +1 -1
  7. package/dist/components/PlAutocomplete/PlAutocomplete.vue.js.map +1 -1
  8. package/dist/components/PlDropdown/OptionList.vue.d.ts +77 -0
  9. package/dist/components/PlDropdown/OptionList.vue.d.ts.map +1 -0
  10. package/dist/components/PlDropdown/OptionList.vue.js +88 -0
  11. package/dist/components/PlDropdown/OptionList.vue.js.map +1 -0
  12. package/dist/components/PlDropdown/OptionList.vue2.js +5 -0
  13. package/dist/components/PlDropdown/OptionList.vue2.js.map +1 -0
  14. package/dist/components/PlDropdown/PlDropdown.vue.d.ts.map +1 -1
  15. package/dist/components/PlDropdown/PlDropdown.vue.js +110 -122
  16. package/dist/components/PlDropdown/PlDropdown.vue.js.map +1 -1
  17. package/dist/components/PlDropdown/types.d.ts +7 -0
  18. package/dist/components/PlDropdown/types.d.ts.map +1 -0
  19. package/dist/components/PlDropdown/useGroupBy.d.ts +7 -0
  20. package/dist/components/PlDropdown/useGroupBy.d.ts.map +1 -0
  21. package/dist/components/PlDropdown/useGroupBy.js +36 -0
  22. package/dist/components/PlDropdown/useGroupBy.js.map +1 -0
  23. package/dist/components/PlDropdownRef/PlDropdownRef.vue.d.ts +1 -1
  24. package/dist/components/PlDropdownRef/PlDropdownRef.vue.d.ts.map +1 -1
  25. package/dist/components/PlDropdownRef/PlDropdownRef.vue.js +11 -10
  26. package/dist/components/PlDropdownRef/PlDropdownRef.vue.js.map +1 -1
  27. package/dist/components/PlElementList/PlElementList.vue.d.ts +19 -19
  28. package/dist/components/PlElementList/PlElementList.vue.d.ts.map +1 -1
  29. package/dist/components/PlElementList/PlElementList.vue2.js +145 -133
  30. package/dist/components/PlElementList/PlElementList.vue2.js.map +1 -1
  31. package/dist/components/PlElementList/PlElementListItem.vue2.js.map +1 -1
  32. package/dist/components/PlElementList/PlElementListItem.vue3.js +33 -33
  33. package/dist/components/PlSlideModal/PlSlideModal.vue.js +1 -1
  34. package/dist/helpers/utils.d.ts +1 -0
  35. package/dist/helpers/utils.d.ts.map +1 -1
  36. package/dist/helpers/utils.js +2 -1
  37. package/dist/helpers/utils.js.map +1 -1
  38. package/dist/sdk/model/dist/index.js +1 -1
  39. package/dist/sdk/model/dist/index.js.map +1 -1
  40. package/dist/types.d.ts +4 -14
  41. package/dist/types.d.ts.map +1 -1
  42. package/dist/utils/TextLabel.vue.d.ts +18 -0
  43. package/dist/utils/TextLabel.vue.d.ts.map +1 -0
  44. package/dist/utils/TextLabel.vue.js +26 -0
  45. package/dist/utils/TextLabel.vue.js.map +1 -0
  46. package/dist/utils/TextLabel.vue2.js +13 -0
  47. package/dist/utils/TextLabel.vue2.js.map +1 -0
  48. package/package.json +4 -4
  49. package/src/components/PlAccordion/PlAccordionSection.vue +3 -3
  50. package/src/components/PlAutocomplete/PlAutocomplete.vue +1 -1
  51. package/src/components/PlDropdown/OptionList.vue +71 -0
  52. package/src/components/PlDropdown/PlDropdown.vue +29 -25
  53. package/src/components/PlDropdown/pl-dropdown.scss +4 -0
  54. package/src/components/PlDropdown/types.ts +3 -0
  55. package/src/components/PlDropdown/useGroupBy.ts +63 -0
  56. package/src/components/PlDropdownRef/PlDropdownRef.vue +1 -0
  57. package/src/components/PlElementList/PlElementList.vue +81 -70
  58. package/src/components/PlElementList/PlElementListItem.vue +2 -2
  59. package/src/helpers/utils.ts +1 -0
  60. package/src/types.ts +5 -15
  61. package/src/utils/TextLabel.vue +43 -0
@@ -22,6 +22,10 @@
22
22
  font-style: italic;
23
23
  }
24
24
 
25
+ .group-container {
26
+ padding: 4px 0;
27
+ }
28
+
25
29
  .option {
26
30
  position: relative;
27
31
  padding: 0 30px 0 10px;
@@ -0,0 +1,3 @@
1
+ import type { ListOptionNormalized } from '../../types';
2
+
3
+ export type LOption<M = unknown> = ListOptionNormalized<M> & { isSelected: boolean; isActive: boolean; index: number };
@@ -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
+ }
@@ -88,6 +88,7 @@ const options = computed(() =>
88
88
  props.options?.map((opt) => ({
89
89
  label: opt.label,
90
90
  value: opt.ref,
91
+ group: opt.group,
91
92
  })),
92
93
  );
93
94
 
@@ -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<T>>('draggableItems');
12
- const removableSetRef = defineModel<Set<T>>('removableItems');
11
+ const draggableSetRef = defineModel<Set<K>>('draggableItems');
12
+ const removableSetRef = defineModel<Set<K>>('removableItems');
13
13
 
14
- const expandableSetRef = defineModel<Set<T>>('expandableItems');
15
- const expandedSetRef = defineModel<Set<T>>('expandedItems');
14
+ const expandableSetRef = defineModel<Set<K>>('expandableItems');
15
+ const expandedSetRef = defineModel<Set<K>>('expandedItems');
16
16
 
17
- const pinnableSetRef = defineModel<Set<T>>('pinnableItems');
18
- const pinnedSetRef = defineModel<Set<T>>('pinnedItems');
17
+ const pinnableSetRef = defineModel<Set<K>>('pinnableItems');
18
+ const pinnedSetRef = defineModel<Set<K>>('pinnedItems');
19
19
 
20
- const toggableSetRef = defineModel<Set<T>>('toggableItems');
21
- const toggledSetRef = defineModel<Set<T>>('toggledItems');
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<T>;
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 && !isNil(props.getItemKey);
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
- return props.activeItems?.has(item) ?? false;
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(item) ?? true);
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(item) ?? true);
154
+ return !isNil(toggledSetRef.value) && (toggableSetRef.value?.has(k) ?? true);
152
155
  }
153
156
 
154
- function isToggled(item: T): boolean {
155
- return toggledSetRef.value?.has(item) ?? false;
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(item) ?? true);
165
+ return !isNil(pinnedSetRef.value) && (pinnableSetRef.value?.has(k) ?? true);
161
166
  }
162
167
 
163
- function isPinned(item: T): boolean {
164
- return pinnedSetRef.value?.has(item) ?? false;
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(item) ?? true);
176
+ return !isNil(expandedSetRef.value) && (expandableSetRef.value?.has(k) ?? true);
170
177
  }
171
178
 
172
- function isExpanded(item: T): boolean {
173
- return expandedSetRef.value?.has(item) ?? false;
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(item) === false) return false;
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(item)) expanded.delete(item);
187
- else expanded.add(item);
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(item)) toggled.delete(item);
196
- else toggled.add(item);
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, oldIndex: number) {
201
- if (oldIndex === -1) {
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, oldIndex) === false || isNil(pinnedSetRef.value)) return;
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(item);
209
- if (alreadyPinned) pinned.delete(item);
210
- else pinned.add(item);
218
+ const alreadyPinned = pinned.has(k);
219
+ if (alreadyPinned) pinned.delete(k);
220
+ else pinned.add(k);
211
221
  optionalUpdateRef(pinnedSetRef);
212
- moveItems(oldIndex, pinned.size + (alreadyPinned ? 0 : -1), false);
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(item)) {
221
- pinnedSetRef.value.delete(item);
232
+ if (pinnedSetRef.value?.has(k)) {
233
+ pinnedSetRef.value.delete(k);
222
234
  optionalUpdateRef(pinnedSetRef);
223
235
  }
224
236
 
225
- if (toggledSetRef.value?.has(item)) {
226
- toggledSetRef.value.delete(item);
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
- if (isNil(props.getItemKey)) return `${versionRef.value}-${index}`;
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: 8px;
180
+ gap: 12px;
181
181
  padding: 24px;
182
182
  border-radius: 0 0 var(--border-radius) var(--border-radius);
183
183
  }
@@ -131,5 +131,6 @@ export function normalizeListOptions<V = unknown>(options: Readonly<ListOption<V
131
131
  label: 'label' in it ? it.label : it.text,
132
132
  value: it.value,
133
133
  description: it.description,
134
+ group: it.group,
134
135
  }));
135
136
  }
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 SimpleOptionNormalized<T = unknown> = {
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>