Skip to main content

A Streamlit custom component for selecting and reordering multiple string values.

Project description

streamlit-sortable-multiselect

A Streamlit custom component for searching, selecting, and reordering multiple string values.

Install

python -m pip install streamlit-sortable-multiselect

For local development:

python -m pip install -e ".[dev]"

For frontend development:

cd streamlit_sortable_multiselect/frontend
npm install
npm run dev

Usage

import streamlit as st
from streamlit_sortable_multiselect import sortable_multiselect

selected = sortable_multiselect(
    "Favorite frameworks",
    options=[
        {"label": "Streamlit", "value": "streamlit", "icon_url": "https://streamlit.io/images/brand/streamlit-mark-color.png"},
        {"label": "FastAPI", "value": "fastapi", "icon_url": "https://fastapi.tiangolo.com/img/favicon.png"},
        {"label": "Django", "value": "django"},
        {"label": "Flask", "value": "flask"},
    ],
    default=["streamlit"],
    placeholder="Search frameworks...",
    show_move_buttons=True,
    show_numbers=True,
    base_color="#eef2ff",
    order_colors={1: "#fee2e2", 2: "#dcfce7"},
    max_selections=3,
    max_selections_placeholder="Choose up to 3 frameworks",
    empty_message="No frameworks selected",
    no_options_placeholder="All frameworks selected",
    selected_position="top",
    icon_size=24,
    options_max_height=260,
)

st.write(selected)

Settings

sortable_multiselect returns the selected option values as a list[str] in the current display order.

Argument Type Default Description
label str required Label displayed above the component.
options Sequence[str | Mapping[str, Any]] required Available options. Each option can be a plain string, or a dictionary with label, value, and optional icon_url. Option values must be unique.
default Sequence[str] | None None Initially selected values, in the initial order. Values must exist in options and must not contain duplicates.
placeholder str "Select..." Placeholder shown in the search/add input when options are available.
disabled bool False Disables searching, selecting, removing, dragging, and move buttons.
show_move_buttons bool True Shows up/down buttons on selected items. Drag sorting remains available unless disabled=True.
show_numbers bool False Shows 1-based position numbers before selected item labels.
base_color str | None None Background color applied to all selected items. Accepts CSS color values such as "#eef2ff" or "lightblue".
order_colors Mapping[int, str] | None None Per-position selected item background colors. Keys are 1-based positions, for example {1: "#fee2e2", 2: "#dcfce7"}. These override base_color for matching positions.
max_selections int | None None Maximum number of selected items. None means no limit. Use 0 to prevent any selections.
max_selections_placeholder str "Selection limit reached" Placeholder shown when max_selections has been reached. This takes precedence over placeholder and no_options_placeholder.
empty_message str "No items selected" Message shown where the selected list appears when no items are selected.
no_options_placeholder str "No more options" Placeholder shown when every option is already selected and there are no more options to add.
selected_position str "bottom" Position of the selected item list relative to the search/add input. Use "bottom" or "top".
icon_size int 20 Icon display size in pixels for icon_url images. Images are displayed inside a square area while preserving their aspect ratio.
options_max_height int 190 Maximum height in pixels for the available options dropdown.
key str | None None Optional Streamlit component key. Use this when rendering multiple sortable multiselects.

Option dictionaries use this shape:

{"label": "Python", "value": "python", "icon_url": "https://www.python.org/static/favicon.ico"}

icon_url may be omitted. The returned value is always the value, not the display label.

Build the frontend before packaging or using release mode:

cd streamlit_sortable_multiselect/frontend
npm run build

Run the example app:

streamlit run examples/basic.py

Release

Build and check the distribution files:

cd streamlit_sortable_multiselect/frontend
npm install
npm run build
cd ../..
python -m pip install -e ".[dev]"
python -m build
python -m twine check dist/*

Upload to PyPI with an API token:

python -m twine upload dist/*

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

streamlit_sortable_multiselect-0.7.3.tar.gz (117.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

streamlit_sortable_multiselect-0.7.3-py3-none-any.whl (115.8 kB view details)

Uploaded Python 3

File details

Details for the file streamlit_sortable_multiselect-0.7.3.tar.gz.

File metadata

File hashes

Hashes for streamlit_sortable_multiselect-0.7.3.tar.gz
Algorithm Hash digest
SHA256 1d6770b22b177c2317860025cc1ce3ed4b60c866ce335f63bb8449c84d5576f1
MD5 94580e1bfe598cb0aba0ffb85abdef9c
BLAKE2b-256 a6fcc643d23e70dcf2d187ed0d04bfbce1884aad0829932b8e9835d4eb46de94

See more details on using hashes here.

File details

Details for the file streamlit_sortable_multiselect-0.7.3-py3-none-any.whl.

File metadata

File hashes

Hashes for streamlit_sortable_multiselect-0.7.3-py3-none-any.whl
Algorithm Hash digest
SHA256 daf7ea8c2619a44282105225a1bded3c08141a9d5c64b52855c339bee613d9c3
MD5 d2dd11f0e1ffa88dc2ad4dba67ea075e
BLAKE2b-256 d578759de6091f2b92e9042823658b1b78e18c471f5a5852a5e4fa0e79fd184f

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page