Sorting Selected Items
Frontend Lib Picker (default sorting)
selected = []
svelte<script lang="ts">
import { MultiSelect } from 'svelte-widgets'
import type { ObjectOption } from 'svelte-widgets'
type FrontendLib = { label: string; lang: string; repo: string }
const frontend_libs: FrontendLib[] = [
[`Svelte`, `JavaScript`, `sveltejs/svelte`],
[`React`, `JavaScript`, `facebook/react`],
[`Vue`, `JavaScript`, `vuejs/vue`],
[`Angular`, `JavaScript`, `angular/angular`],
[`Polymer`, `JavaScript`, `polymer/polymer`],
[`Ruby on Rails`, `Ruby`, `rails/rails`],
[`ASP.net`, `C#`, `dotnet/aspnetcore`],
[`Laravel`, `PHP`, `laravel/laravel`],
[`Django`, `Python`, `django/django`],
[`Express`, `JavaScript`, `expressjs/express`],
[`Spring`, `Java`, `spring-projects/spring-framework`],
[`jQuery`, `JavaScript`, `jquery/jquery`],
[`Flask`, `Python`, `pallets/flask`],
[`Flutter`, `Dart`, `flutter/flutter`],
[`Bootstrap`, `JavaScript`, `twbs/bootstrap`],
[`Sinatra`, `Ruby`, `sinatra/sinatra`],
[`Solid`, `JavaScript`, `solidjs/solid`],
[`Ember JS`, `JavaScript`, `emberjs/ember.js`],
[`Backbone`, `JavaScript`, `jashkenas/backbone`],
[`Preact`, `JavaScript`, `preactjs/preact`],
].map(([label, lang, github_slug]) => ({
label,
lang,
repo: `https://github.com/${github_slug}`,
}))
let selected: ObjectOption[] = $state([])
</script>
selected = {selected.map((itm, idx) => `${idx + 1}. ${itm.label}`).join(`, `) || `[]`}
<MultiSelect
options={frontend_libs}
placeholder="Pick your favorite frontend libs"
sort_selected
bind:value={selected}
/>Frontend Lib Picker (custom sorting by programming language)
svelte<script lang="ts">
import { MultiSelect } from 'svelte-widgets'
type FrontendLib = { label: string; lang: string; repo: string }
const frontend_libs: FrontendLib[] = [
[`Svelte`, `JavaScript`, `sveltejs/svelte`],
[`React`, `JavaScript`, `facebook/react`],
[`Vue`, `JavaScript`, `vuejs/vue`],
[`Angular`, `JavaScript`, `angular/angular`],
[`Polymer`, `JavaScript`, `polymer/polymer`],
[`Ruby on Rails`, `Ruby`, `rails/rails`],
[`ASP.net`, `C#`, `dotnet/aspnetcore`],
[`Laravel`, `PHP`, `laravel/laravel`],
[`Django`, `Python`, `django/django`],
[`Express`, `JavaScript`, `expressjs/express`],
[`Spring`, `Java`, `spring-projects/spring-framework`],
[`jQuery`, `JavaScript`, `jquery/jquery`],
[`Flask`, `Python`, `pallets/flask`],
[`Flutter`, `Dart`, `flutter/flutter`],
[`Bootstrap`, `JavaScript`, `twbs/bootstrap`],
[`Sinatra`, `Ruby`, `sinatra/sinatra`],
[`Solid`, `JavaScript`, `solidjs/solid`],
[`Ember JS`, `JavaScript`, `emberjs/ember.js`],
[`Backbone`, `JavaScript`, `jashkenas/backbone`],
[`Preact`, `JavaScript`, `preactjs/preact`],
].map(([label, lang, github_slug]) => ({
label,
lang,
repo: `https://github.com/${github_slug}`,
}))
const sort_selected = (op1: FrontendLib, op2: FrontendLib): number => {
if (op1.lang !== op2.lang) return op1.lang.localeCompare(op2.lang)
return String(op1.label).localeCompare(String(op2.label))
}
</script>
<MultiSelect
options={frontend_libs}
placeholder="Pick your favorite frontend libs"
{sort_selected}
/>MultiSelect by default renders selected items in the order they were chosen. Enabling sort_selected implicitly disables drag reordering because selected_options_draggable defaults to !sort_selected. Explicitly combining sorting with selected_options_draggable={true} throws because the two ordering contracts conflict. The prop
sort_selected: boolean | ((op1: Option, op2: Option) => number) = false
can be set to true to sort selected options by label with localeCompare. Provide
your own comparator function to define a custom sort order.