
Product
Introducing Webhook Events for Alert Changes
Add real-time Socket webhook events to your workflows to automatically receive software supply chain alert changes in real time.
dash-dropdown-components
Advanced tools
Custom dropdown components for Plotly Dash similar to dcc.Dropdown, offering advanced functionality such as nested options and improved multi-select behavior.
pip install dash-dropdown-components

A customizable dropdown component that enhances the standard Dash dropdown with additional features.
multi=True, the dropdown stays open after selection (unlike dcc.Dropdown). You can override this with close_on_select=False.multi=True to multi=False dynamically, the first selected item is automatically preserved—no need for callbacks.
– Clearable for multi=True and not clearable for multi=False by default, or control using clearable option.| Property | Type | Description |
|---|---|---|
id | string | Unique component ID |
options | list[dict,str] | List of options with label and value keys, or list with values |
value | string or list | Selected value(s) |
multi | bool | Enable multiple selections |
searchable | bool | Enables search |
clearable | bool | Whether or not the dropdown is "clearable", that is, whether or not a small "x" appears on the right of the dropdown that removes the selected value. |
placeholder | string | Placeholder text when nothing is selected |
disabled | bool | If True, this dropdown is disabled and the selection cannot be changed. |
hide_options_on_select | bool | If True, options are removed when selected |
style | bool | Whether dropdown closes on selection (default True) |
className | string | Optional CSS class for styling |
A hierarchical dropdown component that supports nested options (multilevel structure), allowing for structured category selection.
| Property | Type | Description |
|---|---|---|
id | string | Unique component ID |
options | list[dict,str] | List of dicts of options with label, value and suboptions keys |
value | string or list | Selected value(s) |
multi | bool | Enable multiple selections |
clearable | bool | Whether or not the dropdown is "clearable", that is, whether or not a small "x" appears on the right of the dropdown that removes the selected value. |
placeholder | string | Placeholder text when nothing is selected |
disabled | bool | If True, this dropdown is disabled and the selection cannot be changed. |
hide_options_on_select | bool | If True, options are removed when selected |
submenu_widths | list | Control the width of the submenu for each level. Can be in percentage if the preceding level or fixed widths |
style | bool | Whether dropdown closes on selection (default True) |
className | string | Optional CSS class for styling |
import dash_dropdown_components as ddc
from dash import Dash, callback, html, Input, Output, dcc
app = Dash(__name__)
options = [
{'value': 'banana', 'label': 'Banana'},
{'value': 'apple', 'label': 'Apple'},
{'value': 'strawberry', 'label': 'Strawberry'},
{'value': 'kiwi', 'label': 'Kiwi'},
{'value': 'orange', 'label': 'Orange'},
{'value': 'blueberry', 'label': 'Blueberry'},
{'value': 'lemon', 'label': 'Lemon'},
{'value': 'lime', 'label': 'Lime'},
{'value': 'mandarin', 'label': 'Mandarin'},
]
multi_level_options = [
{
'label': 'Fruits',
'value': 'fruits',
'suboptions': [
{ 'label': 'Apple', 'value': 'apple' },
{ 'label': 'Banana', 'value': 'banana' },
{ 'label': 'Berries',
'value': 'berries',
'suboptions': [
{ 'label': 'Strawberry', 'value': 'strawberry'},
{ 'label': 'Blueberry', 'value': 'blueberry'}
]
}
]},
{
'label': 'Vegetables',
'value': 'vegetables',
'suboptions': [
{
'label': 'Potato',
'value': 'potato'
},
{
'label': 'Carrot',
'value': 'carrot'
},
]}
];
app.layout = html.Div(
[
html.Div([
html.P('ddc.Dropdown'),
dcc.RadioItems(id='ddc-dd-multi',
options=[{'label': 'Multi: True', 'value': True},
{'label': 'Multi: False', 'value': False}],
value=False),
ddc.Dropdown(
id='ddc-dd',
options=options,
value=options[0]['value'],
multi=False,
disabled=False,
searchable=True,
hide_options_on_select=True
),
html.Div(id='ddc-dd-selection')
], style={'width': '25%', 'display': 'inline-block'}),
html.Div([
html.P('ddc.MultiLevelDropdown'),
dcc.RadioItems(id='ddc-mldd-multi',
options=[{'label': 'Multi: True', 'value': True},
{'label': 'Multi: False', 'value': False}],
value=False),
ddc.MultiLevelDropdown(
id='ddc-mldd',
options=multi_level_options,
value=['fruits', 'banana'],
multi=False,
disabled=False,
hide_options_on_select=True,
submenu_widths=['10vw', '20vw']
),
html.Div(id='ddc-mldd-selection')
], style={'width': '25%', 'display': 'inline-block'}),
],
style={'display': 'flex', 'flexDirection': 'row'})
@callback(Output('ddc-dd-selection', 'children'),
Input('ddc-dd', 'value'))
def display_output(value):
return 'You have entered {}'.format(value)
@callback(Output('ddc-mldd-selection', 'children'),
Input('ddc-mldd', 'value'))
def display_output(value):
return 'You have entered {}'.format(value)
@callback(Output('ddc-dd', 'multi'),
Input('ddc-dd-multi', 'value'))
def set_multi(multi):
return multi
@callback(Output('ddc-mldd', 'multi'),
Input('ddc-mldd-multi', 'value'))
def set_multi(multi):
return multi
if __name__ == '__main__':
app.run(debug=True)
This project is licensed under the MIT License. See the LICENSE file for details.
FAQs
Dropdown components for Dash
We found that dash-dropdown-components demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Product
Add real-time Socket webhook events to your workflows to automatically receive software supply chain alert changes in real time.

Security News
ENISA has become a CVE Program Root, giving the EU a central authority for coordinating vulnerability reporting, disclosure, and cross-border response.

Product
Socket now scans OpenVSX extensions, giving teams early detection of risky behaviors, hidden capabilities, and supply chain threats in developer tools.