design-system-next 2.7.44 → 2.8.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/dist/design-system-next.js +6416 -5577
- 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/assets/styles/tailwind.css +3 -1
- package/src/components/date-picker/use-date-picker.ts +3 -10
- package/src/components/dropdown/__tests__/dropdown-fixes.spec.ts +106 -0
- package/src/components/dropdown/__tests__/dropdown-value-types.spec.ts +213 -0
- package/src/components/list/ladderized-list/ladderized-list.ts +12 -0
- package/src/components/list/ladderized-list/ladderized-list.vue +6 -0
- package/src/components/list/list.ts +15 -3
- package/src/components/list/list.vue +37 -9
- package/src/components/list/use-list.ts +116 -47
- package/src/components/select/select-ladderized/select-ladderized.ts +108 -0
- package/src/components/select/select-ladderized/select-ladderized.vue +111 -0
- package/src/components/select/select-ladderized/use-select-ladderized.ts +165 -0
- package/src/components/select/select-multiple/select-multiple.ts +128 -115
- package/src/components/select/select-multiple/select-multiple.vue +149 -88
- package/src/components/select/select-multiple/use-select-multiple.ts +367 -499
- package/src/components/select/select.ts +34 -4
- package/src/components/select/select.vue +137 -59
- package/src/components/select/use-select.ts +166 -249
- package/src/components/select/select-laderrized/select-laderrized.ts +0 -122
- package/src/components/select/select-laderrized/select-laderrized.vue +0 -110
- package/src/components/select/select-laderrized/use-select-laderrized.ts +0 -499
- package/src/examples/select-number-multi-select.vue +0 -71
|
@@ -1,110 +1,171 @@
|
|
|
1
1
|
<template>
|
|
2
|
-
<div
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
:shown="selectPopperState"
|
|
7
|
-
aria-id="select-wrapper"
|
|
8
|
-
distance="4"
|
|
9
|
-
:placement="props.placement"
|
|
10
|
-
:triggers="[]"
|
|
11
|
-
:popper-hide-triggers="[]"
|
|
12
|
-
:auto-hide="false"
|
|
13
|
-
:disabled="isSelectPopperDisabled"
|
|
14
|
-
:container="`#${props.id}`"
|
|
15
|
-
:strategy="
|
|
16
|
-
props.popperStrategy === 'fixed' || props.popperStrategy === 'absolute' ? props.popperStrategy : 'absolute'
|
|
17
|
-
"
|
|
18
|
-
:delay="0"
|
|
19
|
-
:style="{
|
|
20
|
-
position: props.wrapperPosition,
|
|
21
|
-
width: props.width,
|
|
22
|
-
}"
|
|
23
|
-
>
|
|
24
|
-
<div @click="selectPopperState = true">
|
|
25
|
-
{{ selectedListItems }}
|
|
26
|
-
|
|
27
|
-
<spr-input
|
|
28
|
-
v-model="inputText"
|
|
29
|
-
label="Select Numbers"
|
|
30
|
-
:placeholder="props.placeholder"
|
|
31
|
-
:readonly="props.readonly"
|
|
32
|
-
:disabled="props.disabled"
|
|
33
|
-
autocomplete="off"
|
|
34
|
-
/>
|
|
35
|
-
</div>
|
|
2
|
+
<div :class="multiSelectClasses.baseClasses">
|
|
3
|
+
<label v-if="props.label" :for="id" :class="multiSelectClasses.labelClasses">
|
|
4
|
+
{{ props.label }}
|
|
5
|
+
</label>
|
|
36
6
|
|
|
37
|
-
<
|
|
38
|
-
:
|
|
7
|
+
<Menu
|
|
8
|
+
:shown="multiSelectPopperState"
|
|
9
|
+
aria-id="multi-select-wrapper"
|
|
10
|
+
distance="4"
|
|
11
|
+
:placement="props.placement"
|
|
12
|
+
:triggers="[]"
|
|
13
|
+
:popper-hide-triggers="[]"
|
|
14
|
+
:auto-hide="false"
|
|
15
|
+
:disabled="isMultiSelectPopperDisabled"
|
|
16
|
+
:container="`#${props.id}`"
|
|
17
|
+
:strategy="
|
|
18
|
+
props.popperStrategy === 'fixed' || props.popperStrategy === 'absolute' ? props.popperStrategy : 'absolute'
|
|
19
|
+
"
|
|
20
|
+
:delay="0"
|
|
39
21
|
:style="{
|
|
40
|
-
|
|
22
|
+
position: props.wrapperPosition,
|
|
23
|
+
width: props.width,
|
|
41
24
|
}"
|
|
42
|
-
|
|
25
|
+
>
|
|
26
|
+
<div @click="handleMenuToggle">
|
|
27
|
+
<spr-input
|
|
28
|
+
v-model="inputText"
|
|
29
|
+
:class="{
|
|
30
|
+
'spr-cursor-pointer': !props.searchable,
|
|
31
|
+
}"
|
|
32
|
+
:placeholder="props.placeholder"
|
|
33
|
+
:readonly="!props.searchable"
|
|
34
|
+
:disabled="props.disabled"
|
|
35
|
+
autocomplete="off"
|
|
36
|
+
:helper-text="props.helperText"
|
|
37
|
+
:helper-icon="props.helperIcon"
|
|
38
|
+
:display-helper="props.displayHelper"
|
|
39
|
+
@keyup="handleSearch"
|
|
40
|
+
>
|
|
41
|
+
<template #icon>
|
|
42
|
+
<div class="spr-flex spr-items-center spr-gap-1">
|
|
43
|
+
<Icon
|
|
44
|
+
v-if="props.clearable && inputText"
|
|
45
|
+
class="spr-cursor-pointer"
|
|
46
|
+
icon="ph:x"
|
|
47
|
+
@click.stop="handleClear"
|
|
48
|
+
/>
|
|
49
|
+
<Icon icon="ph:caret-down" />
|
|
50
|
+
</div>
|
|
51
|
+
</template>
|
|
52
|
+
</spr-input>
|
|
53
|
+
</div>
|
|
43
54
|
|
|
44
|
-
<template #popper>
|
|
45
55
|
<div
|
|
46
|
-
|
|
47
|
-
:
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
56
|
+
:id="props.id"
|
|
57
|
+
:style="{
|
|
58
|
+
width: props.popperWidth,
|
|
59
|
+
}"
|
|
60
|
+
></div>
|
|
61
|
+
|
|
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
|
|
51
69
|
>
|
|
52
|
-
<
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
<
|
|
63
|
-
v-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
70
|
+
<option v-for="item in multiSelectedListItems" :key="item.value" :value="item.value" selected>
|
|
71
|
+
{{ item.text }}
|
|
72
|
+
</option>
|
|
73
|
+
</select>
|
|
74
|
+
|
|
75
|
+
<template #popper>
|
|
76
|
+
<div
|
|
77
|
+
ref="multiSelectRef"
|
|
78
|
+
class="spr-grid spr-max-h-[300px] spr-gap-0.5 spr-overflow-y-auto spr-overflow-x-hidden spr-p-2"
|
|
79
|
+
>
|
|
80
|
+
<template v-if="isSearching">
|
|
81
|
+
<template v-if="!props.disabledLocalSearch">
|
|
82
|
+
<template v-if="filteredMultiSelectMenuList.length > 0">
|
|
83
|
+
<spr-list
|
|
84
|
+
v-model="multiSelectedListItems"
|
|
85
|
+
:menu-list="filteredMultiSelectMenuList"
|
|
86
|
+
:group-items-by="props.groupItemsBy"
|
|
87
|
+
:pre-selected-items="Array.isArray(multiSelectModel) ? multiSelectModel.flat() : [multiSelectModel]"
|
|
88
|
+
multi-select
|
|
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>
|
|
115
|
+
</template>
|
|
116
|
+
<template v-else>
|
|
117
|
+
<template v-if="multiSelectMenuList.length > 0">
|
|
118
|
+
<spr-list
|
|
119
|
+
v-model="multiSelectedListItems"
|
|
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>
|
|
132
|
+
</template>
|
|
133
|
+
</div>
|
|
134
|
+
</template>
|
|
135
|
+
</Menu>
|
|
136
|
+
</div>
|
|
79
137
|
</template>
|
|
80
138
|
|
|
81
139
|
<script lang="ts" setup>
|
|
82
140
|
import { Menu } from 'floating-vue';
|
|
141
|
+
import { Icon } from '@iconify/vue';
|
|
83
142
|
|
|
84
143
|
import 'floating-vue/dist/style.css';
|
|
85
144
|
|
|
86
145
|
import SprInput from '../../input/input.vue';
|
|
87
146
|
import SprList from '../../list/list.vue';
|
|
88
|
-
import SprLadderizedList from '../../list/ladderized-list/ladderized-list.vue';
|
|
89
147
|
|
|
90
|
-
import {
|
|
148
|
+
import { multiSelectPropTypes, multiSelectEmitTypes } from './select-multiple';
|
|
91
149
|
|
|
92
|
-
import {
|
|
150
|
+
import { useMultiSelect } from './use-select-multiple';
|
|
93
151
|
|
|
94
|
-
const props = defineProps(
|
|
95
|
-
const emit = defineEmits(
|
|
152
|
+
const props = defineProps(multiSelectPropTypes);
|
|
153
|
+
const emit = defineEmits(multiSelectEmitTypes);
|
|
96
154
|
|
|
97
155
|
const {
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
selectValue,
|
|
106
|
-
removeCurrentLevelInBackLabel,
|
|
107
|
-
isLadderizedSearch,
|
|
156
|
+
multiSelectClasses,
|
|
157
|
+
multiSelectPopperState,
|
|
158
|
+
multiSelectRef,
|
|
159
|
+
multiSelectModel,
|
|
160
|
+
multiSelectMenuList,
|
|
161
|
+
filteredMultiSelectMenuList,
|
|
162
|
+
multiSelectedListItems,
|
|
108
163
|
inputText,
|
|
109
|
-
|
|
110
|
-
|
|
164
|
+
isMultiSelectPopperDisabled,
|
|
165
|
+
isSearching,
|
|
166
|
+
handleMultiSelectedItem,
|
|
167
|
+
handleSearch,
|
|
168
|
+
handleClear,
|
|
169
|
+
handleMenuToggle,
|
|
170
|
+
} = useMultiSelect(props, emit);
|
|
171
|
+
</script>
|