Progress component to support color_scheme
on component level (#2684)
* Progress component to support `color_scheme` on component level * pyi fix
This commit is contained in:
parent
a3be76fb75
commit
a6fb25e139
@ -2,11 +2,13 @@
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
from typing import Optional
|
||||
from typing import Optional, Union
|
||||
|
||||
from reflex.components.component import Component, ComponentNamespace
|
||||
from reflex.components.core.colors import color
|
||||
from reflex.components.radix.primitives.accordion import DEFAULT_ANIMATION_DURATION
|
||||
from reflex.components.radix.primitives.base import RadixPrimitiveComponentWithClassName
|
||||
from reflex.components.radix.themes.base import LiteralAccentColor
|
||||
from reflex.style import Style
|
||||
from reflex.vars import Var
|
||||
|
||||
@ -57,10 +59,26 @@ class ProgressIndicator(ProgressComponent):
|
||||
# The maximum progress value.
|
||||
max: Var[Optional[int]]
|
||||
|
||||
# The color scheme of the progress indicator.
|
||||
color_scheme: Var[LiteralAccentColor]
|
||||
|
||||
def _apply_theme(self, theme: Component):
|
||||
global_color_scheme = getattr(theme, "accent_color", None)
|
||||
|
||||
if global_color_scheme is None and self.color_scheme is None:
|
||||
raise ValueError(
|
||||
"`color_scheme` cannot be None. Either set the `color_scheme` prop on the progress indicator "
|
||||
"component or set the `accent_color` prop in your global theme."
|
||||
)
|
||||
|
||||
color_scheme = color(
|
||||
self.color_scheme if self.color_scheme is not None else global_color_scheme, # type: ignore
|
||||
9,
|
||||
)
|
||||
|
||||
self.style = Style(
|
||||
{
|
||||
"background-color": "var(--accent-9)",
|
||||
"background-color": color_scheme,
|
||||
"width": "100%",
|
||||
"height": "100%",
|
||||
f"transition": f"transform {DEFAULT_ANIMATION_DURATION}ms linear",
|
||||
@ -72,20 +90,28 @@ class ProgressIndicator(ProgressComponent):
|
||||
}
|
||||
)
|
||||
|
||||
def _exclude_props(self) -> list[str]:
|
||||
return ["color_scheme"]
|
||||
|
||||
|
||||
class Progress(ComponentNamespace):
|
||||
"""High level API for progress bar."""
|
||||
"""High-level API for progress bar."""
|
||||
|
||||
root = staticmethod(ProgressRoot.create)
|
||||
indicator = staticmethod(ProgressIndicator.create)
|
||||
|
||||
@staticmethod
|
||||
def __call__(width: Optional[str] = "100%", **props) -> Component:
|
||||
"""High level API for progress bar.
|
||||
def __call__(
|
||||
width: Optional[str] = "100%",
|
||||
color_scheme: Optional[Union[Var, LiteralAccentColor]] = None,
|
||||
**props,
|
||||
) -> Component:
|
||||
"""High-level API for progress bar.
|
||||
|
||||
Args:
|
||||
width: The width of the progerss bar
|
||||
**props: The props of the progress bar
|
||||
width: The width of the progress bar.
|
||||
**props: The props of the progress bar.
|
||||
color_scheme: The color scheme of the progress indicator.
|
||||
|
||||
Returns:
|
||||
The progress bar.
|
||||
@ -93,9 +119,15 @@ class Progress(ComponentNamespace):
|
||||
style = props.setdefault("style", {})
|
||||
style.update({"width": width})
|
||||
|
||||
progress_indicator_props = (
|
||||
{"color_scheme": color_scheme} if color_scheme is not None else {}
|
||||
)
|
||||
|
||||
return ProgressRoot.create(
|
||||
ProgressIndicator.create(
|
||||
value=props.get("value"), max=props.get("max", 100)
|
||||
value=props.get("value"),
|
||||
max=props.get("max", 100),
|
||||
**progress_indicator_props, # type: ignore
|
||||
),
|
||||
**props,
|
||||
)
|
||||
|
@ -7,10 +7,12 @@ from typing import Any, Dict, Literal, Optional, Union, overload
|
||||
from reflex.vars import Var, BaseVar, ComputedVar
|
||||
from reflex.event import EventChain, EventHandler, EventSpec
|
||||
from reflex.style import Style
|
||||
from typing import Optional
|
||||
from typing import Optional, Union
|
||||
from reflex.components.component import Component, ComponentNamespace
|
||||
from reflex.components.core.colors import color
|
||||
from reflex.components.radix.primitives.accordion import DEFAULT_ANIMATION_DURATION
|
||||
from reflex.components.radix.primitives.base import RadixPrimitiveComponentWithClassName
|
||||
from reflex.components.radix.themes.base import LiteralAccentColor
|
||||
from reflex.style import Style
|
||||
from reflex.vars import Var
|
||||
|
||||
@ -188,6 +190,68 @@ class ProgressIndicator(ProgressComponent):
|
||||
*children,
|
||||
value: Optional[Union[Var[Optional[int]], Optional[int]]] = None,
|
||||
max: Optional[Union[Var[Optional[int]], Optional[int]]] = None,
|
||||
color_scheme: Optional[
|
||||
Union[
|
||||
Var[
|
||||
Literal[
|
||||
"tomato",
|
||||
"red",
|
||||
"ruby",
|
||||
"crimson",
|
||||
"pink",
|
||||
"plum",
|
||||
"purple",
|
||||
"violet",
|
||||
"iris",
|
||||
"indigo",
|
||||
"blue",
|
||||
"cyan",
|
||||
"teal",
|
||||
"jade",
|
||||
"green",
|
||||
"grass",
|
||||
"brown",
|
||||
"orange",
|
||||
"sky",
|
||||
"mint",
|
||||
"lime",
|
||||
"yellow",
|
||||
"amber",
|
||||
"gold",
|
||||
"bronze",
|
||||
"gray",
|
||||
]
|
||||
],
|
||||
Literal[
|
||||
"tomato",
|
||||
"red",
|
||||
"ruby",
|
||||
"crimson",
|
||||
"pink",
|
||||
"plum",
|
||||
"purple",
|
||||
"violet",
|
||||
"iris",
|
||||
"indigo",
|
||||
"blue",
|
||||
"cyan",
|
||||
"teal",
|
||||
"jade",
|
||||
"green",
|
||||
"grass",
|
||||
"brown",
|
||||
"orange",
|
||||
"sky",
|
||||
"mint",
|
||||
"lime",
|
||||
"yellow",
|
||||
"amber",
|
||||
"gold",
|
||||
"bronze",
|
||||
"gray",
|
||||
],
|
||||
]
|
||||
] = None,
|
||||
as_child: Optional[Union[Var[bool], bool]] = None,
|
||||
style: Optional[Style] = None,
|
||||
key: Optional[Any] = None,
|
||||
@ -248,6 +312,7 @@ class ProgressIndicator(ProgressComponent):
|
||||
*children: The children of the component.
|
||||
value: The current progress value.
|
||||
max: The maximum progress value.
|
||||
color_scheme: The color scheme of the progress indicator.
|
||||
as_child: Change the default rendered element for the one passed as a child.
|
||||
style: The style of the component.
|
||||
key: A unique key for the component.
|
||||
@ -270,6 +335,10 @@ class Progress(ComponentNamespace):
|
||||
indicator = staticmethod(ProgressIndicator.create)
|
||||
|
||||
@staticmethod
|
||||
def __call__(width: Optional[str] = "100%", **props) -> Component: ...
|
||||
def __call__(
|
||||
width: Optional[str] = "100%",
|
||||
color_scheme: Optional[Union[Var, LiteralAccentColor]] = None,
|
||||
**props
|
||||
) -> Component: ...
|
||||
|
||||
progress = Progress()
|
||||
|
Loading…
Reference in New Issue
Block a user