Skip to content

Commit 033fbe3

Browse files
committed
Change slide toggle to have a simple variant (slide_toggle) and an advanced variant (content_slide_toggle)
This makes the API consistent with button and checkbox.
1 parent 2c2fb6e commit 033fbe3

File tree

5 files changed

+61
-5
lines changed

5 files changed

+61
-5
lines changed

docs/components/slide_toggle.md

+1
Original file line numberDiff line numberDiff line change
@@ -11,4 +11,5 @@ Slide Toggle allows the user to toggle on and off and is based on the [Angular M
1111
## API
1212

1313
::: mesop.components.slide_toggle.slide_toggle.slide_toggle
14+
::: mesop.components.slide_toggle.slide_toggle.content_slide_toggle
1415
::: mesop.components.slide_toggle.slide_toggle.SlideToggleChangeEvent

mesop/__init__.py

+3
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,9 @@
8686
from mesop.components.slide_toggle.slide_toggle import (
8787
SlideToggleChangeEvent as SlideToggleChangeEvent,
8888
)
89+
from mesop.components.slide_toggle.slide_toggle import (
90+
content_slide_toggle as content_slide_toggle,
91+
)
8992
from mesop.components.slide_toggle.slide_toggle import (
9093
slide_toggle as slide_toggle,
9194
)

mesop/components/slide_toggle/e2e/slide_toggle_app.py

+3-1
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@ def on_change(event: me.SlideToggleChangeEvent):
1313

1414
@me.page(path="/components/slide_toggle/e2e/slide_toggle_app")
1515
def app():
16-
me.slide_toggle(on_change=on_change)
16+
me.slide_toggle(label="hi", on_change=on_change)
17+
with me.content_slide_toggle(on_change=on_change):
18+
me.text("content_slide_toggle")
1719
s = me.state(State)
1820
me.text(text=f"Toggled: {s.toggled}")

mesop/components/slide_toggle/slide_toggle.py

+53-3
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,13 @@
33

44
import mesop.components.slide_toggle.slide_toggle_pb2 as slide_toggle_pb
55
from mesop.component_helpers import (
6+
component,
67
insert_composite_component,
78
register_event_handler,
89
register_event_mapper,
910
register_native_component,
1011
)
12+
from mesop.components.text.text import text
1113
from mesop.events import MesopEvent
1214

1315

@@ -30,8 +32,53 @@ class SlideToggleChangeEvent(MesopEvent):
3032
)
3133

3234

33-
@register_native_component
35+
@component()
3436
def slide_toggle(
37+
label: str | None = None,
38+
*,
39+
key: str | None = None,
40+
label_position: Literal["before", "after"] = "after",
41+
required: bool = False,
42+
color: Literal["primary", "accent", "warn"] | None = None,
43+
disabled: bool = False,
44+
disable_ripple: bool = False,
45+
tab_index: int = 0,
46+
checked: bool = False,
47+
hide_icon: bool = False,
48+
on_change: Callable[[SlideToggleChangeEvent], Any] | None = None,
49+
):
50+
"""Creates a simple Slide toggle component with a text label.
51+
52+
Args:
53+
label: Text label for slide toggle
54+
on_change: An event will be dispatched each time the slide-toggle changes its value.
55+
label_position: Whether the label should appear after or before the slide-toggle. Defaults to 'after'.
56+
required: Whether the slide-toggle is required.
57+
color: Palette color of slide toggle.
58+
disabled: Whether the slide toggle is disabled.
59+
disable_ripple: Whether the slide toggle has a ripple.
60+
tab_index: Tabindex of slide toggle.
61+
checked: Whether the slide-toggle element is checked or not.
62+
hide_icon: Whether to hide the icon inside of the slide toggle.
63+
key: Unique identifier for this component instance.
64+
"""
65+
with content_slide_toggle(
66+
key=key,
67+
label_position=label_position,
68+
required=required,
69+
color=color,
70+
disabled=disabled,
71+
disable_ripple=disable_ripple,
72+
tab_index=tab_index,
73+
checked=checked,
74+
hide_icon=hide_icon,
75+
on_change=on_change,
76+
):
77+
text(label)
78+
79+
80+
@register_native_component
81+
def content_slide_toggle(
3582
*,
3683
key: str | None = None,
3784
label_position: Literal["before", "after"] = "after",
@@ -44,7 +91,10 @@ def slide_toggle(
4491
hide_icon: bool = False,
4592
on_change: Callable[[SlideToggleChangeEvent], Any] | None = None,
4693
):
47-
"""Creates a Slide toggle component.
94+
"""Creates a Slide toggle component which is a composite component. Typically, you would use a text or icon component as a child.
95+
96+
Intended for advanced use cases.
97+
4898
4999
Args:
50100
on_change: An event will be dispatched each time the slide-toggle changes its value.
@@ -60,7 +110,7 @@ def slide_toggle(
60110
"""
61111
return insert_composite_component(
62112
key=key,
63-
type_name="slide_toggle",
113+
type_name="content_slide_toggle",
64114
proto=slide_toggle_pb.SlideToggleType(
65115
label_position=label_position,
66116
required=required,

mesop/web/src/component_renderer/type_to_component.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ export const typeToComponent = {
5757
'slider': SliderComponent,
5858
'select': SelectComponent,
5959
'radio': RadioComponent,
60-
'slide_toggle': SlideToggleComponent,
60+
'content_slide_toggle': SlideToggleComponent,
6161
'progress_spinner': ProgressSpinnerComponent,
6262
'progress_bar': ProgressBarComponent,
6363
'icon': IconComponent,

0 commit comments

Comments
 (0)