design-system-next 2.8.0 → 2.8.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/design-system-next.js +4900 -4996
- package/dist/design-system-next.js.gz +0 -0
- package/dist/main.css +1 -1
- package/dist/main.css.gz +0 -0
- package/dist/package.json.d.ts +1 -1
- package/package.json +1 -1
- package/src/components/list/ladderized-list/use-ladderized-list.ts +11 -1
- package/src/components/select/select-ladderized/select-ladderized.ts +3 -3
- package/src/components/select/select-ladderized/select-ladderized.vue +7 -7
- package/src/components/select/select-ladderized/use-select-ladderized.ts +13 -14
- package/src/components/select/select-multiple/select-multiple.ts +1 -15
- package/src/components/select/select-multiple/select-multiple.vue +17 -72
- package/src/components/select/select-multiple/use-select-multiple.ts +112 -215
- package/src/components/select/select.ts +2 -2
- package/src/components/select/select.vue +12 -12
- package/src/components/select/use-select.ts +26 -25
- package/src/components/snackbar/snack/snack.vue +6 -1
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { ref, computed, watch } from 'vue';
|
|
2
|
-
import { useDebounceFn, onClickOutside } from '@vueuse/core';
|
|
1
|
+
import { ref, toRefs, computed, watch } from 'vue';
|
|
2
|
+
import { useVModel, useDebounceFn, onClickOutside } from '@vueuse/core';
|
|
3
3
|
|
|
4
4
|
import type { SelectLadderizedPropTypes } from './select-ladderized';
|
|
5
5
|
|
|
@@ -9,6 +9,8 @@ export const useSelectLadderized = (
|
|
|
9
9
|
props: SelectLadderizedPropTypes,
|
|
10
10
|
emit: (event: string, ...args: unknown[]) => void,
|
|
11
11
|
) => {
|
|
12
|
+
const { options, disabled } = toRefs(props);
|
|
13
|
+
|
|
12
14
|
const ladderizedClasses = computed(() => ({
|
|
13
15
|
baseClasses: 'spr-flex spr-flex-col spr-gap-size-spacing-4xs',
|
|
14
16
|
labelClasses: 'spr-body-sm-regular spr-text-color-strong spr-block',
|
|
@@ -17,14 +19,11 @@ export const useSelectLadderized = (
|
|
|
17
19
|
// Popper Variables
|
|
18
20
|
const ladderizedSelectPopperState = ref(false);
|
|
19
21
|
const ladderizedSelectRef = ref(null);
|
|
20
|
-
const isLadderizedSelectPopperDisabled = computed(() =>
|
|
22
|
+
const isLadderizedSelectPopperDisabled = computed(() => disabled.value);
|
|
21
23
|
|
|
22
24
|
// Ladderized Select Model
|
|
23
|
-
const ladderizedSelectModel =
|
|
24
|
-
|
|
25
|
-
set: (val) => emit('update:modelValue', val),
|
|
26
|
-
});
|
|
27
|
-
const ladderizedSelectMenuList = computed(() => props.menuList);
|
|
25
|
+
const ladderizedSelectModel = useVModel(props, 'modelValue', emit);
|
|
26
|
+
const ladderizedSelectOptions = computed(() => options.value);
|
|
28
27
|
|
|
29
28
|
// Input Variables
|
|
30
29
|
const inputText = ref<string>('');
|
|
@@ -76,11 +75,11 @@ export const useSelectLadderized = (
|
|
|
76
75
|
return undefined;
|
|
77
76
|
};
|
|
78
77
|
|
|
79
|
-
itemToCheck = findItemByValue(
|
|
78
|
+
itemToCheck = findItemByValue(ladderizedSelectOptions.value, selectedItems[selectedItems.length - 1]);
|
|
80
79
|
}
|
|
81
80
|
|
|
82
81
|
if (itemToCheck) {
|
|
83
|
-
const path = findPathToValue(
|
|
82
|
+
const path = findPathToValue(ladderizedSelectOptions.value, itemToCheck.value);
|
|
84
83
|
|
|
85
84
|
inputText.value = path ? path.join(' > ') : itemToCheck.text || '';
|
|
86
85
|
|
|
@@ -110,7 +109,7 @@ export const useSelectLadderized = (
|
|
|
110
109
|
emit('update:modelValue', []);
|
|
111
110
|
};
|
|
112
111
|
|
|
113
|
-
const
|
|
112
|
+
const handleOptionsToggle = () => {
|
|
114
113
|
ladderizedSelectPopperState.value = true;
|
|
115
114
|
|
|
116
115
|
isSearching.value = false;
|
|
@@ -128,7 +127,7 @@ export const useSelectLadderized = (
|
|
|
128
127
|
|
|
129
128
|
if (Array.isArray(newVal) && newVal.length > 0) {
|
|
130
129
|
// Treat the array as a single path for ladderized select
|
|
131
|
-
let currentLevel =
|
|
130
|
+
let currentLevel = ladderizedSelectOptions.value;
|
|
132
131
|
|
|
133
132
|
const pathTexts: string[] = [];
|
|
134
133
|
|
|
@@ -153,13 +152,13 @@ export const useSelectLadderized = (
|
|
|
153
152
|
ladderizedClasses,
|
|
154
153
|
ladderizedSelectPopperState,
|
|
155
154
|
ladderizedSelectRef,
|
|
156
|
-
|
|
155
|
+
ladderizedSelectOptions,
|
|
157
156
|
isLadderizedSelectPopperDisabled,
|
|
158
157
|
ladderizedSelectModel,
|
|
159
158
|
inputText,
|
|
160
159
|
handleSelectedLadderizedItem,
|
|
161
160
|
handleSearch,
|
|
162
161
|
handleClear,
|
|
163
|
-
|
|
162
|
+
handleOptionsToggle,
|
|
164
163
|
};
|
|
165
164
|
};
|
|
@@ -36,7 +36,7 @@ export const multiSelectPropTypes = {
|
|
|
36
36
|
>,
|
|
37
37
|
default: () => [],
|
|
38
38
|
},
|
|
39
|
-
|
|
39
|
+
options: {
|
|
40
40
|
type: Array as PropType<MenuListType[] | string[] | Record<string, unknown>[]>,
|
|
41
41
|
required: true,
|
|
42
42
|
default: [],
|
|
@@ -110,25 +110,11 @@ export const multiSelectPropTypes = {
|
|
|
110
110
|
type: Boolean,
|
|
111
111
|
default: false,
|
|
112
112
|
},
|
|
113
|
-
searchable: {
|
|
114
|
-
type: Boolean,
|
|
115
|
-
default: false,
|
|
116
|
-
},
|
|
117
|
-
disabledLocalSearch: {
|
|
118
|
-
type: Boolean,
|
|
119
|
-
default: false,
|
|
120
|
-
},
|
|
121
113
|
};
|
|
122
114
|
|
|
123
115
|
export const multiSelectEmitTypes = {
|
|
124
116
|
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
125
117
|
'update:modelValue': (_value: unknown) => true,
|
|
126
|
-
|
|
127
|
-
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
128
|
-
'infinite-scroll-trigger': (_triggered: boolean) => true,
|
|
129
|
-
|
|
130
|
-
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
131
|
-
'search-string': (_search: string | number) => true,
|
|
132
118
|
};
|
|
133
119
|
|
|
134
120
|
export type MultiSelectPropTypes = ExtractPropTypes<typeof multiSelectPropTypes>;
|
|
@@ -23,20 +23,19 @@
|
|
|
23
23
|
width: props.width,
|
|
24
24
|
}"
|
|
25
25
|
>
|
|
26
|
-
<div @click="
|
|
26
|
+
<div @click="handleOptionsToggle">
|
|
27
27
|
<spr-input
|
|
28
28
|
v-model="inputText"
|
|
29
29
|
:class="{
|
|
30
|
-
'spr-cursor-pointer':
|
|
30
|
+
'spr-cursor-pointer': true,
|
|
31
31
|
}"
|
|
32
32
|
:placeholder="props.placeholder"
|
|
33
|
-
:readonly="
|
|
33
|
+
:readonly="true"
|
|
34
34
|
:disabled="props.disabled"
|
|
35
35
|
autocomplete="off"
|
|
36
36
|
:helper-text="props.helperText"
|
|
37
37
|
:helper-icon="props.helperIcon"
|
|
38
38
|
:display-helper="props.displayHelper"
|
|
39
|
-
@keyup="handleSearch"
|
|
40
39
|
>
|
|
41
40
|
<template #icon>
|
|
42
41
|
<div class="spr-flex spr-items-center spr-gap-1">
|
|
@@ -59,76 +58,25 @@
|
|
|
59
58
|
}"
|
|
60
59
|
></div>
|
|
61
60
|
|
|
62
|
-
<select
|
|
63
|
-
:id="`${props.id}-multiple-select`"
|
|
64
|
-
tabindex="-1"
|
|
65
|
-
aria-hidden="true"
|
|
66
|
-
data-qa="multi-select-hidden"
|
|
67
|
-
multiple
|
|
68
|
-
hidden
|
|
69
|
-
>
|
|
70
|
-
<option v-for="item in multiSelectedListItems" :key="item.value" :value="item.value" selected>
|
|
71
|
-
{{ item.text }}
|
|
72
|
-
</option>
|
|
73
|
-
</select>
|
|
74
|
-
|
|
75
61
|
<template #popper>
|
|
76
62
|
<div
|
|
77
63
|
ref="multiSelectRef"
|
|
78
64
|
class="spr-grid spr-max-h-[300px] spr-gap-0.5 spr-overflow-y-auto spr-overflow-x-hidden spr-p-2"
|
|
79
65
|
>
|
|
80
|
-
<template v-if="
|
|
81
|
-
<
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
@update:model-value="handleMultiSelectedItem"
|
|
90
|
-
/>
|
|
91
|
-
</template>
|
|
92
|
-
<template v-else>
|
|
93
|
-
<div class="spr-flex spr-items-center spr-justify-center spr-p-2 spr-text-center">
|
|
94
|
-
<span class="spr-body-sm-regular spr-m-0">No results found</span>
|
|
95
|
-
</div>
|
|
96
|
-
</template>
|
|
97
|
-
</template>
|
|
98
|
-
<template v-else>
|
|
99
|
-
<template v-if="multiSelectMenuList.length > 0">
|
|
100
|
-
<spr-list
|
|
101
|
-
v-model="multiSelectedListItems"
|
|
102
|
-
:menu-list="multiSelectMenuList"
|
|
103
|
-
:group-items-by="props.groupItemsBy"
|
|
104
|
-
:pre-selected-items="Array.isArray(multiSelectModel) ? multiSelectModel.flat() : [multiSelectModel]"
|
|
105
|
-
multi-select
|
|
106
|
-
@update:model-value="handleMultiSelectedItem"
|
|
107
|
-
/>
|
|
108
|
-
</template>
|
|
109
|
-
<template v-else>
|
|
110
|
-
<div class="spr-flex spr-items-center spr-justify-center spr-p-2 spr-text-center">
|
|
111
|
-
<span class="spr-body-sm-regular spr-m-0">No results found</span>
|
|
112
|
-
</div>
|
|
113
|
-
</template>
|
|
114
|
-
</template>
|
|
66
|
+
<template v-if="multiSelectOptions.length > 0">
|
|
67
|
+
<spr-list
|
|
68
|
+
v-model="multiSelectedListItems"
|
|
69
|
+
:menu-list="multiSelectOptions"
|
|
70
|
+
:group-items-by="props.groupItemsBy"
|
|
71
|
+
:pre-selected-items="Array.isArray(multiSelectModel) ? multiSelectModel.flat() : [multiSelectModel]"
|
|
72
|
+
multi-select
|
|
73
|
+
@update:model-value="handleMultiSelectedItem"
|
|
74
|
+
/>
|
|
115
75
|
</template>
|
|
116
76
|
<template v-else>
|
|
117
|
-
<
|
|
118
|
-
<spr-
|
|
119
|
-
|
|
120
|
-
:menu-list="multiSelectMenuList"
|
|
121
|
-
:group-items-by="props.groupItemsBy"
|
|
122
|
-
:pre-selected-items="Array.isArray(multiSelectModel) ? multiSelectModel.flat() : [multiSelectModel]"
|
|
123
|
-
multi-select
|
|
124
|
-
@update:model-value="handleMultiSelectedItem"
|
|
125
|
-
/>
|
|
126
|
-
</template>
|
|
127
|
-
<template v-else>
|
|
128
|
-
<div class="spr-flex spr-items-center spr-justify-center spr-p-2 spr-text-center">
|
|
129
|
-
<span class="spr-body-sm-regular spr-m-0">No results found</span>
|
|
130
|
-
</div>
|
|
131
|
-
</template>
|
|
77
|
+
<div class="spr-flex spr-items-center spr-justify-center spr-p-2 spr-text-center">
|
|
78
|
+
<span class="spr-body-sm-regular spr-m-0">No results found</span>
|
|
79
|
+
</div>
|
|
132
80
|
</template>
|
|
133
81
|
</div>
|
|
134
82
|
</template>
|
|
@@ -157,15 +105,12 @@ const {
|
|
|
157
105
|
multiSelectPopperState,
|
|
158
106
|
multiSelectRef,
|
|
159
107
|
multiSelectModel,
|
|
160
|
-
|
|
161
|
-
filteredMultiSelectMenuList,
|
|
108
|
+
multiSelectOptions,
|
|
162
109
|
multiSelectedListItems,
|
|
163
110
|
inputText,
|
|
164
111
|
isMultiSelectPopperDisabled,
|
|
165
|
-
isSearching,
|
|
166
112
|
handleMultiSelectedItem,
|
|
167
|
-
handleSearch,
|
|
168
113
|
handleClear,
|
|
169
|
-
|
|
114
|
+
handleOptionsToggle,
|
|
170
115
|
} = useMultiSelect(props, emit);
|
|
171
116
|
</script>
|