|
61 | 61 | </div>
|
62 | 62 | </teleport>
|
63 | 63 |
|
64 |
| - <div v-if="!teleportToBody && showDropdown" ref="dropdownEl" :style="dropdownStyle" :class="{'shadow-none': isTop}" |
| 64 | + <teleport to="body" v-if="teleportToTop && showDropdown"> |
| 65 | + <div ref="dropdownEl" :style="getDropdownPosition" :class="{'shadow-none': isTop}" |
| 66 | + class="fixed z-[50] w-full bg-white shadow-lg dark:shadow-black dark:bg-gray-700 |
| 67 | + dark:border-gray-600 rounded-md py-1 text-base ring-1 ring-black ring-opacity-5 overflow-auto focus:outline-none sm:text-sm max-h-48" |
| 68 | + @scroll="handleDropdownScroll"> |
| 69 | + <div |
| 70 | + v-for="item in filteredItems" |
| 71 | + :key="item.value" |
| 72 | + class="px-4 py-2 cursor-pointer hover:bg-lightDropdownOptionsHoverBackground dark:hover:bg-darkDropdownOptionsHoverBackground text-lightDropdownOptionsText dark:text-darkDropdownOptionsText" |
| 73 | + :class="{ 'bg-lightDropdownPicked dark:bg-darkDropdownPicked': selectedItems.includes(item) }" |
| 74 | + @click="toogleItem(item)" |
| 75 | + > |
| 76 | + <slot name="item" :option="item"></slot> |
| 77 | + <label v-if="!$slots.item" :for="item.value">{{ item.label }}</label> |
| 78 | + </div> |
| 79 | + <div v-if="!filteredItems.length" class="px-4 py-2 cursor-pointer text-lightDropdownOptionsText dark:text-darkDropdownOptionsText"> |
| 80 | + {{ options.length ? $t('No results found') : $t('No items here') }} |
| 81 | + </div> |
| 82 | + |
| 83 | + <div v-if="$slots['extra-item']" class="px-4 py-2 dark:text-gray-400"> |
| 84 | + <slot name="extra-item"></slot> |
| 85 | + </div> |
| 86 | + </div> |
| 87 | + </teleport> |
| 88 | + |
| 89 | + <div v-if="!teleportToBody && !teleportToTop && showDropdown" ref="dropdownEl" :style="dropdownStyle" :class="{'shadow-none': isTop}" |
65 | 90 | class="absolute z-10 mt-1 w-full bg-lightDropdownOptionsBackground shadow-lg text-lightDropdownButtonsText dark:shadow-black dark:bg-darkDropdownOptionsBackground
|
66 | 91 | dark:border-gray-600 rounded-md py-1 text-base ring-1 ring-black ring-opacity-5 overflow-auto focus:outline-none sm:text-sm max-h-48"
|
67 | 92 | @scroll="handleDropdownScroll">
|
@@ -143,6 +168,10 @@ const props = defineProps({
|
143 | 168 | type: Boolean,
|
144 | 169 | default: false,
|
145 | 170 | },
|
| 171 | + teleportToTop: { |
| 172 | + type: Boolean, |
| 173 | + default: false, |
| 174 | + }, |
146 | 175 | });
|
147 | 176 |
|
148 | 177 | const emit = defineEmits(['update:modelValue', 'scroll-near-end', 'search']);
|
|
0 commit comments