<template> <DocSectionText v-bind="$attrs"> <p> VirtualScroller is used to render a long list of options efficiently like 100K records in this demo. The configuration is done with <i>virtualScrollerOptions</i> property, refer to the <NuxtLink to="/virtualscroller">VirtualScroller</NuxtLink> for more information about the available options as it is used internally by Listbox. </p> </DocSectionText> <div class="card flex justify-content-center"> <Listbox v-model="selectedItem" :options="items" optionLabel="label" optionValue="value" :virtualScrollerOptions="{ itemSize: 38 }" class="w-full md:w-14rem" listStyle="height:250px" /> </div> <DocSectionCode :code="code" /> </template> <script> export default { data() { return { selectedItem: null, items: Array.from({ length: 100000 }, (_, i) => ({ label: `Item #${i}`, value: i })), code: { basic: ` <Listbox v-model="selectedItem" :options="items" optionLabel="label" optionValue="value" :virtualScrollerOptions="{ itemSize: 38 }" class="w-full md:w-14rem" listStyle="height:250px" />`, options: ` <template> <div class="card flex justify-content-center"> <Listbox v-model="selectedItem" :options="items" optionLabel="label" optionValue="value" :virtualScrollerOptions="{ itemSize: 38 }" class="w-full md:w-14rem" listStyle="height:250px" /> </div> </template> <script> export default { data() { return { selectedItem: null, items: Array.from({ length: 100000 }, (_, i) => ({ label: \`Item #\${i}\`, value: i })) }; } }; <\/script>`, composition: ` <template> <div class="card flex justify-content-center"> <Listbox v-model="selectedItem" :options="items" optionLabel="label" optionValue="value" :virtualScrollerOptions="{ itemSize: 38 }" class="w-full md:w-14rem" listStyle="height:250px" /> </div> </template> <script setup> import { ref } from "vue"; const selectedItem = ref(); const items = ref(Array.from({ length: 100000 }, (_, i) => ({ label: \`Item #\${i}\`, value: i }))); <\/script>` } }; } }; </script>