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.
Files changed (28) hide show
  1. package/dist/design-system-next.js +6416 -5577
  2. package/dist/design-system-next.js.gz +0 -0
  3. package/dist/main.css +1 -1
  4. package/dist/main.css.gz +0 -0
  5. package/dist/package.json.d.ts +1 -1
  6. package/package.json +1 -1
  7. package/src/assets/styles/tailwind.css +3 -1
  8. package/src/components/date-picker/use-date-picker.ts +3 -10
  9. package/src/components/dropdown/__tests__/dropdown-fixes.spec.ts +106 -0
  10. package/src/components/dropdown/__tests__/dropdown-value-types.spec.ts +213 -0
  11. package/src/components/list/ladderized-list/ladderized-list.ts +12 -0
  12. package/src/components/list/ladderized-list/ladderized-list.vue +6 -0
  13. package/src/components/list/list.ts +15 -3
  14. package/src/components/list/list.vue +37 -9
  15. package/src/components/list/use-list.ts +116 -47
  16. package/src/components/select/select-ladderized/select-ladderized.ts +108 -0
  17. package/src/components/select/select-ladderized/select-ladderized.vue +111 -0
  18. package/src/components/select/select-ladderized/use-select-ladderized.ts +165 -0
  19. package/src/components/select/select-multiple/select-multiple.ts +128 -115
  20. package/src/components/select/select-multiple/select-multiple.vue +149 -88
  21. package/src/components/select/select-multiple/use-select-multiple.ts +367 -499
  22. package/src/components/select/select.ts +34 -4
  23. package/src/components/select/select.vue +137 -59
  24. package/src/components/select/use-select.ts +166 -249
  25. package/src/components/select/select-laderrized/select-laderrized.ts +0 -122
  26. package/src/components/select/select-laderrized/select-laderrized.vue +0 -110
  27. package/src/components/select/select-laderrized/use-select-laderrized.ts +0 -499
  28. package/src/examples/select-number-multi-select.vue +0 -71
@@ -1,110 +1,171 @@
1
1
  <template>
2
- <div></div>
3
- </template>
4
- <!-- <template>
5
- <Menu
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
- <div
38
- :id="props.id"
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
- width: props.popperWidth,
22
+ position: props.wrapperPosition,
23
+ width: props.width,
41
24
  }"
42
- ></div>
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
- ref="selectRef"
47
- :class="[
48
- (!props.ladderized || isLadderizedSearch) && 'spr-p-2',
49
- 'spr-grid spr-max-h-[300px] spr-gap-0.5 spr-overflow-y-auto spr-overflow-x-hidden',
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
- <template v-if="selectMenuList.length > 0">
53
- <spr-list
54
- v-if="!props.ladderized || isLadderizedSearch"
55
- v-model="selectedListItems"
56
- :menu-list="selectMenuList"
57
- :group-items-by="props.groupItemsBy"
58
- :multi-select="props.multiSelect"
59
- :pre-selected-items="selectValue"
60
- @update:model-value="handleSelectedItem"
61
- />
62
- <spr-ladderized-list
63
- v-else
64
- v-model="selectValue"
65
- :ladderized="props.ladderized"
66
- :menu-list="selectMenuList"
67
- :remove-current-level-in-back-label="removeCurrentLevelInBackLabel"
68
- @update:model-value="handleSelectedLadderizedItem"
69
- />
70
- </template>
71
- <template v-else>
72
- <div class="spr-flex spr-items-center spr-justify-center spr-p-2 spr-text-center">
73
- <span class="spr-body-sm-regular spr-m-0">No results found</span>
74
- </div>
75
- </template>
76
- </div>
77
- </template>
78
- </Menu>
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 { selectPropTypes, selectEmitTypes } from './select-multiple';
148
+ import { multiSelectPropTypes, multiSelectEmitTypes } from './select-multiple';
91
149
 
92
- import { useSelect } from './use-select-multiple';
150
+ import { useMultiSelect } from './use-select-multiple';
93
151
 
94
- const props = defineProps(selectPropTypes);
95
- const emit = defineEmits(selectEmitTypes);
152
+ const props = defineProps(multiSelectPropTypes);
153
+ const emit = defineEmits(multiSelectEmitTypes);
96
154
 
97
155
  const {
98
- selectPopperState,
99
- selectRef,
100
- selectMenuList,
101
- isSelectPopperDisabled,
102
- selectedListItems,
103
- handleSelectedItem,
104
- handleSelectedLadderizedItem,
105
- selectValue,
106
- removeCurrentLevelInBackLabel,
107
- isLadderizedSearch,
156
+ multiSelectClasses,
157
+ multiSelectPopperState,
158
+ multiSelectRef,
159
+ multiSelectModel,
160
+ multiSelectMenuList,
161
+ filteredMultiSelectMenuList,
162
+ multiSelectedListItems,
108
163
  inputText,
109
- } = useSelect(props, emit);
110
- </script> -->
164
+ isMultiSelectPopperDisabled,
165
+ isSearching,
166
+ handleMultiSelectedItem,
167
+ handleSearch,
168
+ handleClear,
169
+ handleMenuToggle,
170
+ } = useMultiSelect(props, emit);
171
+ </script>