design-system-next 2.15.7 → 2.16.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.es.js +6951 -6512
- package/dist/design-system-next.es.js.gz +0 -0
- package/dist/design-system-next.umd.js +14 -14
- package/dist/design-system-next.umd.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/App.vue +43 -1642
- package/src/assets/styles/tailwind.css +27 -6
- package/src/components/attribute-filter/attribute-filter.ts +134 -0
- package/src/components/attribute-filter/attribute-filter.vue +141 -0
- package/src/components/attribute-filter/use-attribute-filter.ts +125 -0
- package/src/components/card/card.ts +12 -0
- package/src/components/card/card.vue +1 -1
- package/src/components/card/use-card.ts +33 -12
- package/src/components/date-picker/date-picker.ts +13 -5
- package/src/components/date-picker/date-picker.vue +2 -1
- package/src/components/date-picker/date-range-picker/date-range-picker.ts +14 -6
- package/src/components/date-picker/date-range-picker/date-range-picker.vue +2 -1
- package/src/components/dropdown/dropdown.ts +26 -27
- package/src/components/dropdown/dropdown.vue +52 -42
- package/src/components/list/list.ts +0 -4
- package/src/components/select/select-ladderized/select-ladderized.ts +16 -12
- package/src/components/select/select-ladderized/select-ladderized.vue +11 -8
- package/src/components/select/select-ladderized/use-select-ladderized.ts +2 -0
- package/src/components/select/select-multiple/select-multiple.ts +8 -4
- package/src/components/select/select-multiple/select-multiple.vue +21 -11
- package/src/components/select/select-multiple/use-select-multiple.ts +18 -5
- package/src/components/select/select.ts +4 -0
- package/src/components/select/select.vue +11 -8
- package/src/components/select/use-select.ts +4 -2
|
@@ -39,8 +39,7 @@ export const dropdownPropTypes = {
|
|
|
39
39
|
},
|
|
40
40
|
menuList: {
|
|
41
41
|
type: Array as PropType<MenuListType[] | string[] | Record<string, unknown>[]>,
|
|
42
|
-
|
|
43
|
-
default: [],
|
|
42
|
+
default: () => [],
|
|
44
43
|
},
|
|
45
44
|
searchableMenu: {
|
|
46
45
|
type: Boolean,
|
|
@@ -87,6 +86,29 @@ export const dropdownPropTypes = {
|
|
|
87
86
|
type: String,
|
|
88
87
|
default: '100%',
|
|
89
88
|
},
|
|
89
|
+
autoHide: {
|
|
90
|
+
type: Boolean,
|
|
91
|
+
default: true,
|
|
92
|
+
},
|
|
93
|
+
triggers: {
|
|
94
|
+
type: Array as PropType<(typeof TRIGGER_EVENTS)[number][]>,
|
|
95
|
+
validator: (value: (typeof TRIGGER_EVENTS)[number][]) => {
|
|
96
|
+
return value.every((val) => TRIGGER_EVENTS.includes(val));
|
|
97
|
+
},
|
|
98
|
+
default: () => ['click'],
|
|
99
|
+
},
|
|
100
|
+
popperTriggers: {
|
|
101
|
+
type: Array as PropType<(typeof TRIGGER_EVENTS)[number][]>,
|
|
102
|
+
validator: (value: (typeof TRIGGER_EVENTS)[number][]) => {
|
|
103
|
+
return value.every((val) => TRIGGER_EVENTS.includes(val));
|
|
104
|
+
},
|
|
105
|
+
default: () => [],
|
|
106
|
+
},
|
|
107
|
+
popperStrategy: {
|
|
108
|
+
type: String,
|
|
109
|
+
validator: (value: 'fixed' | 'absolute') => POPPER_STRATEGY_TYPES.includes(value),
|
|
110
|
+
default: 'absolute',
|
|
111
|
+
},
|
|
90
112
|
popperWidth: {
|
|
91
113
|
type: String,
|
|
92
114
|
default: '100%',
|
|
@@ -95,10 +117,9 @@ export const dropdownPropTypes = {
|
|
|
95
117
|
type: String,
|
|
96
118
|
default: 'unset',
|
|
97
119
|
},
|
|
98
|
-
|
|
120
|
+
popperContainer: {
|
|
99
121
|
type: String,
|
|
100
|
-
|
|
101
|
-
default: 'absolute',
|
|
122
|
+
default: '',
|
|
102
123
|
},
|
|
103
124
|
disabled: {
|
|
104
125
|
type: Boolean,
|
|
@@ -116,32 +137,10 @@ export const dropdownPropTypes = {
|
|
|
116
137
|
type: Boolean,
|
|
117
138
|
default: false,
|
|
118
139
|
},
|
|
119
|
-
dropdown: {
|
|
120
|
-
type: Boolean,
|
|
121
|
-
default: false,
|
|
122
|
-
},
|
|
123
140
|
lozenge: {
|
|
124
141
|
type: Boolean,
|
|
125
142
|
default: false,
|
|
126
143
|
},
|
|
127
|
-
triggers: {
|
|
128
|
-
type: Array as PropType<(typeof TRIGGER_EVENTS)[number][]>,
|
|
129
|
-
validator: (value: (typeof TRIGGER_EVENTS)[number][]) => {
|
|
130
|
-
return value.every((val) => TRIGGER_EVENTS.includes(val));
|
|
131
|
-
},
|
|
132
|
-
default: () => ['click'],
|
|
133
|
-
},
|
|
134
|
-
popperTriggers: {
|
|
135
|
-
type: Array as PropType<(typeof TRIGGER_EVENTS)[number][]>,
|
|
136
|
-
validator: (value: (typeof TRIGGER_EVENTS)[number][]) => {
|
|
137
|
-
return value.every((val) => TRIGGER_EVENTS.includes(val));
|
|
138
|
-
},
|
|
139
|
-
default: () => [],
|
|
140
|
-
},
|
|
141
|
-
autoHide: {
|
|
142
|
-
type: Boolean,
|
|
143
|
-
default: true,
|
|
144
|
-
},
|
|
145
144
|
};
|
|
146
145
|
|
|
147
146
|
export const dropdownEmitTypes = {
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
:popper-triggers="props.popperTriggers"
|
|
9
9
|
:auto-hide="props.autoHide"
|
|
10
10
|
:disabled="isDropdownPopperDisabled"
|
|
11
|
-
:container="`#${props.id}`"
|
|
11
|
+
:container="props.popperContainer ? props.popperContainer : `#${props.id}`"
|
|
12
12
|
:strategy="
|
|
13
13
|
props.popperStrategy === 'fixed' || props.popperStrategy === 'absolute' ? props.popperStrategy : 'absolute'
|
|
14
14
|
"
|
|
@@ -30,47 +30,57 @@
|
|
|
30
30
|
></div>
|
|
31
31
|
|
|
32
32
|
<template #popper>
|
|
33
|
-
<
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
>
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
:
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
33
|
+
<template v-if="$slots.popper">
|
|
34
|
+
<div
|
|
35
|
+
class="spr-overflow-y-auto spr-overflow-x-hidden spr-p-2"
|
|
36
|
+
:style="{
|
|
37
|
+
width: props.popperInnerWidth,
|
|
38
|
+
}"
|
|
39
|
+
>
|
|
40
|
+
<slot name="popper" />
|
|
41
|
+
</div>
|
|
42
|
+
</template>
|
|
43
|
+
<template v-else>
|
|
44
|
+
<div
|
|
45
|
+
ref="dropdownRef"
|
|
46
|
+
:class="[
|
|
47
|
+
'spr-grid spr-max-h-[300px] spr-gap-0.5 spr-overflow-y-auto spr-overflow-x-hidden',
|
|
48
|
+
!props.ladderized || isLadderizedSearch,
|
|
49
|
+
]"
|
|
50
|
+
:style="{
|
|
51
|
+
width: props.popperInnerWidth,
|
|
52
|
+
}"
|
|
53
|
+
>
|
|
54
|
+
<template v-if="dropdownMenuList.length > 0">
|
|
55
|
+
<spr-list
|
|
56
|
+
v-if="!props.ladderized || isLadderizedSearch"
|
|
57
|
+
v-model="selectedListItems"
|
|
58
|
+
:menu-list="dropdownMenuList"
|
|
59
|
+
:searchable-menu="props.searchableMenu"
|
|
60
|
+
:group-items-by="props.groupItemsBy"
|
|
61
|
+
:multi-select="props.multiSelect"
|
|
62
|
+
:pre-selected-items="dropdownValue"
|
|
63
|
+
:no-check="props.noCheckInList"
|
|
64
|
+
:lozenge="props.lozenge"
|
|
65
|
+
@update:model-value="handleSelectedItem"
|
|
66
|
+
/>
|
|
67
|
+
<spr-ladderized-list
|
|
68
|
+
v-else
|
|
69
|
+
v-model="dropdownValue"
|
|
70
|
+
:ladderized="props.ladderized"
|
|
71
|
+
:menu-list="dropdownMenuList"
|
|
72
|
+
:searchable-menu="props.searchableMenu"
|
|
73
|
+
:remove-current-level-in-back-label="removeCurrentLevelInBackLabel"
|
|
74
|
+
@update:model-value="handleSelectedLadderizedItem"
|
|
75
|
+
/>
|
|
76
|
+
</template>
|
|
77
|
+
<template v-else>
|
|
78
|
+
<div class="spr-flex spr-items-center spr-justify-center spr-p-2 spr-text-center">
|
|
79
|
+
<span class="spr-body-sm-regular spr-m-0">No results found</span>
|
|
80
|
+
</div>
|
|
81
|
+
</template>
|
|
82
|
+
</div>
|
|
83
|
+
</template>
|
|
74
84
|
</template>
|
|
75
85
|
</Menu>
|
|
76
86
|
</template>
|
|
@@ -101,6 +101,10 @@ export const selectLadderizedPropTypes = {
|
|
|
101
101
|
type: Number,
|
|
102
102
|
default: 6,
|
|
103
103
|
},
|
|
104
|
+
autoHide: {
|
|
105
|
+
type: Boolean,
|
|
106
|
+
default: false,
|
|
107
|
+
},
|
|
104
108
|
triggers: {
|
|
105
109
|
type: Array as PropType<(typeof TRIGGER_EVENTS)[number][]>,
|
|
106
110
|
validator: (value: (typeof TRIGGER_EVENTS)[number][]) => {
|
|
@@ -115,26 +119,26 @@ export const selectLadderizedPropTypes = {
|
|
|
115
119
|
},
|
|
116
120
|
default: () => [],
|
|
117
121
|
},
|
|
118
|
-
|
|
119
|
-
type: Boolean,
|
|
120
|
-
default: false,
|
|
121
|
-
},
|
|
122
|
-
wrapperPosition: {
|
|
122
|
+
popperStrategy: {
|
|
123
123
|
type: String,
|
|
124
|
-
|
|
124
|
+
validator: (value: 'fixed' | 'absolute') => POPPER_STRATEGY_TYPES.includes(value),
|
|
125
|
+
default: 'absolute',
|
|
125
126
|
},
|
|
126
|
-
|
|
127
|
+
popperWidth: {
|
|
127
128
|
type: String,
|
|
128
129
|
default: '100%',
|
|
129
130
|
},
|
|
130
|
-
|
|
131
|
+
popperContainer: {
|
|
131
132
|
type: String,
|
|
132
|
-
default: '
|
|
133
|
+
default: '',
|
|
133
134
|
},
|
|
134
|
-
|
|
135
|
+
wrapperPosition: {
|
|
135
136
|
type: String,
|
|
136
|
-
|
|
137
|
-
|
|
137
|
+
default: 'relative',
|
|
138
|
+
},
|
|
139
|
+
width: {
|
|
140
|
+
type: String,
|
|
141
|
+
default: '100%',
|
|
138
142
|
},
|
|
139
143
|
removeCurrentLevelInBackLabel: {
|
|
140
144
|
type: Boolean,
|
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
:popper-triggers="props.popperTriggers"
|
|
17
17
|
:auto-hide="props.autoHide"
|
|
18
18
|
:disabled="isLadderizedSelectPopperDisabled"
|
|
19
|
-
:container="`#ladderized-select-popper-${props.id}`"
|
|
19
|
+
:container="props.popperContainer ? props.popperContainer : `#ladderized-select-popper-${props.id}`"
|
|
20
20
|
:strategy="
|
|
21
21
|
props.popperStrategy === 'fixed' || props.popperStrategy === 'absolute' ? props.popperStrategy : 'absolute'
|
|
22
22
|
"
|
|
@@ -42,13 +42,16 @@
|
|
|
42
42
|
:error="props.error"
|
|
43
43
|
>
|
|
44
44
|
<template #icon>
|
|
45
|
-
<div
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
45
|
+
<div
|
|
46
|
+
:class="[
|
|
47
|
+
'spr-flex spr-items-center spr-gap-1',
|
|
48
|
+
{
|
|
49
|
+
'spr-cursor-pointer': !props.disabled,
|
|
50
|
+
'spr-cursor-not-allowed': props.disabled,
|
|
51
|
+
},
|
|
52
|
+
]"
|
|
53
|
+
>
|
|
54
|
+
<Icon v-if="props.clearable && inputText" icon="ph:x" @click.stop="handleClear" />
|
|
52
55
|
<Icon icon="ph:caret-down" />
|
|
53
56
|
</div>
|
|
54
57
|
</template>
|
|
@@ -87,6 +87,10 @@ export const multiSelectPropTypes = {
|
|
|
87
87
|
},
|
|
88
88
|
default: () => [],
|
|
89
89
|
},
|
|
90
|
+
autoHide: {
|
|
91
|
+
type: Boolean,
|
|
92
|
+
default: false,
|
|
93
|
+
},
|
|
90
94
|
popperTriggers: {
|
|
91
95
|
type: Array as PropType<(typeof TRIGGER_EVENTS)[number][]>,
|
|
92
96
|
validator: (value: (typeof TRIGGER_EVENTS)[number][]) => {
|
|
@@ -94,10 +98,6 @@ export const multiSelectPropTypes = {
|
|
|
94
98
|
},
|
|
95
99
|
default: () => [],
|
|
96
100
|
},
|
|
97
|
-
autoHide: {
|
|
98
|
-
type: Boolean,
|
|
99
|
-
default: false,
|
|
100
|
-
},
|
|
101
101
|
popperStrategy: {
|
|
102
102
|
type: String,
|
|
103
103
|
validator: (value: 'fixed' | 'absolute') => POPPER_STRATEGY_TYPES.includes(value),
|
|
@@ -107,6 +107,10 @@ export const multiSelectPropTypes = {
|
|
|
107
107
|
type: String,
|
|
108
108
|
default: '100%',
|
|
109
109
|
},
|
|
110
|
+
popperContainer: {
|
|
111
|
+
type: String,
|
|
112
|
+
default: '',
|
|
113
|
+
},
|
|
110
114
|
width: {
|
|
111
115
|
type: String,
|
|
112
116
|
default: '100%',
|
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
:popper-triggers="props.popperTriggers"
|
|
17
17
|
:auto-hide="props.autoHide"
|
|
18
18
|
:disabled="isMultiSelectPopperDisabled"
|
|
19
|
-
:container="`#multi-select-${props.id}`"
|
|
19
|
+
:container="props.popperContainer ? props.popperContainer : `#multi-select-${props.id}`"
|
|
20
20
|
:strategy="
|
|
21
21
|
props.popperStrategy === 'fixed' || props.popperStrategy === 'absolute' ? props.popperStrategy : 'absolute'
|
|
22
22
|
"
|
|
@@ -48,12 +48,19 @@
|
|
|
48
48
|
</template>
|
|
49
49
|
</div>
|
|
50
50
|
<div :class="multiSelectClasses.chippedIconClasses">
|
|
51
|
-
<div
|
|
51
|
+
<div
|
|
52
|
+
:class="[
|
|
53
|
+
'spr-flex spr-items-center spr-gap-1',
|
|
54
|
+
{
|
|
55
|
+
'spr-cursor-pointer': !props.disabled,
|
|
56
|
+
'spr-cursor-not-allowed': props.disabled,
|
|
57
|
+
},
|
|
58
|
+
]"
|
|
59
|
+
>
|
|
52
60
|
<Icon
|
|
53
61
|
v-if="props.clearable && inputText"
|
|
54
|
-
class="spr-cursor-pointer"
|
|
55
62
|
icon="ph:x"
|
|
56
|
-
@click.stop="handleClear"
|
|
63
|
+
@click.stop="!props.disabled ? handleClear : null"
|
|
57
64
|
/>
|
|
58
65
|
<Icon icon="ph:caret-down" />
|
|
59
66
|
</div>
|
|
@@ -91,13 +98,16 @@
|
|
|
91
98
|
:error="props.error"
|
|
92
99
|
>
|
|
93
100
|
<template #icon>
|
|
94
|
-
<div
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
+
<div
|
|
102
|
+
:class="[
|
|
103
|
+
'spr-flex spr-items-center spr-gap-1',
|
|
104
|
+
{
|
|
105
|
+
'spr-cursor-pointer': !props.disabled,
|
|
106
|
+
'spr-cursor-not-allowed': props.disabled,
|
|
107
|
+
},
|
|
108
|
+
]"
|
|
109
|
+
>
|
|
110
|
+
<Icon v-if="props.clearable && inputText" icon="ph:x" @click.stop="handleClear" />
|
|
101
111
|
<Icon icon="ph:caret-down" />
|
|
102
112
|
</div>
|
|
103
113
|
</template>
|
|
@@ -316,11 +316,13 @@ export const useMultiSelect = (props: MultiSelectPropTypes, emit: SetupContext<M
|
|
|
316
316
|
* Clears the selection and input text, and closes the multi-select.
|
|
317
317
|
*/
|
|
318
318
|
const handleClear = () => {
|
|
319
|
-
|
|
319
|
+
if (disabled.value) return;
|
|
320
320
|
|
|
321
321
|
multiSelectedListItems.value = [];
|
|
322
322
|
inputText.value = '';
|
|
323
323
|
multiSelectPopperState.value = false;
|
|
324
|
+
|
|
325
|
+
emit('update:modelValue', []);
|
|
324
326
|
};
|
|
325
327
|
|
|
326
328
|
watch(multiSelectModel, () => {
|
|
@@ -356,11 +358,22 @@ export const useMultiSelect = (props: MultiSelectPropTypes, emit: SetupContext<M
|
|
|
356
358
|
/**
|
|
357
359
|
* Handles closing the multi-select when clicking outside.
|
|
358
360
|
*/
|
|
359
|
-
onClickOutside(
|
|
360
|
-
|
|
361
|
+
onClickOutside(
|
|
362
|
+
multiSelectRef,
|
|
363
|
+
(event) => {
|
|
364
|
+
// If click happened inside the floating popper content, don't treat as outside
|
|
365
|
+
if (multipleSelectPopperRef.value && multipleSelectPopperRef.value.contains(event.target as Node)) {
|
|
366
|
+
return;
|
|
367
|
+
}
|
|
361
368
|
|
|
362
|
-
|
|
363
|
-
|
|
369
|
+
multiSelectPopperState.value = false;
|
|
370
|
+
|
|
371
|
+
updateMultiSelectedItemsFromValue();
|
|
372
|
+
},
|
|
373
|
+
{
|
|
374
|
+
ignore: [multipleSelectPopperRef],
|
|
375
|
+
},
|
|
376
|
+
);
|
|
364
377
|
|
|
365
378
|
useInfiniteScroll(
|
|
366
379
|
multipleSelectPopperRef,
|
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
:popper-triggers="props.popperTriggers"
|
|
17
17
|
:auto-hide="props.autoHide"
|
|
18
18
|
:disabled="isSelectPopperDisabled"
|
|
19
|
-
:container="`#select-popper-${props.id}`"
|
|
19
|
+
:container="props.popperContainer ? props.popperContainer : `#select-popper-${props.id}`"
|
|
20
20
|
:strategy="
|
|
21
21
|
props.popperStrategy === 'fixed' || props.popperStrategy === 'absolute' ? props.popperStrategy : 'absolute'
|
|
22
22
|
"
|
|
@@ -47,13 +47,16 @@
|
|
|
47
47
|
@click="props.searchable ? (selectPopperState = true) : null"
|
|
48
48
|
>
|
|
49
49
|
<template #icon>
|
|
50
|
-
<div
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
50
|
+
<div
|
|
51
|
+
:class="[
|
|
52
|
+
'spr-flex spr-items-center spr-gap-1',
|
|
53
|
+
{
|
|
54
|
+
'spr-cursor-pointer': !props.disabled,
|
|
55
|
+
'spr-cursor-not-allowed': props.disabled,
|
|
56
|
+
},
|
|
57
|
+
]"
|
|
58
|
+
>
|
|
59
|
+
<Icon v-if="props.clearable && inputText" icon="ph:x" @click.stop="handleClear" />
|
|
57
60
|
<Icon icon="ph:caret-down" />
|
|
58
61
|
</div>
|
|
59
62
|
</template>
|
|
@@ -301,10 +301,12 @@ export const useSelect = (props: SelectPropTypes, emit: SetupContext<SelectEmitT
|
|
|
301
301
|
};
|
|
302
302
|
|
|
303
303
|
const handleClear = () => {
|
|
304
|
-
|
|
305
|
-
emit('search-string', '');
|
|
304
|
+
if (disabled.value) return;
|
|
306
305
|
|
|
307
306
|
inputText.value = '';
|
|
307
|
+
|
|
308
|
+
emit('update:modelValue', '');
|
|
309
|
+
emit('search-string', '');
|
|
308
310
|
};
|
|
309
311
|
|
|
310
312
|
watch(selectModel, () => {
|