radix link renders as next link by default use (#2440)

* radix link renders as next link by default use

* pyi

* rewrite

* pyi didn't seem to overwrite

* color -> color_scheme
This commit is contained in:
Martin Xu 2024-01-24 12:05:44 -08:00 committed by GitHub
parent e94dcf335c
commit ec889c411b
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 70 additions and 36 deletions

View File

@ -6,7 +6,10 @@ from __future__ import annotations
from typing import Literal from typing import Literal
from reflex.components.component import Component
from reflex.components.el.elements.inline import A from reflex.components.el.elements.inline import A
from reflex.components.next.link import NextLink
from reflex.utils import imports
from reflex.vars import Var from reflex.vars import Var
from ..base import ( from ..base import (
@ -22,6 +25,8 @@ from .base import (
LiteralLinkUnderline = Literal["auto", "hover", "always"] LiteralLinkUnderline = Literal["auto", "hover", "always"]
next_link = NextLink.create()
class Link(CommonMarginProps, RadixThemesComponent, A): class Link(CommonMarginProps, RadixThemesComponent, A):
"""A semantic element for navigation between pages.""" """A semantic element for navigation between pages."""
@ -44,7 +49,34 @@ class Link(CommonMarginProps, RadixThemesComponent, A):
underline: Var[LiteralLinkUnderline] underline: Var[LiteralLinkUnderline]
# Overrides the accent color inherited from the Theme. # Overrides the accent color inherited from the Theme.
color: Var[LiteralAccentColor] color_scheme: Var[LiteralAccentColor]
# Whether to render the text with higher contrast color # Whether to render the text with higher contrast color
high_contrast: Var[bool] high_contrast: Var[bool]
def _get_imports(self) -> imports.ImportDict:
return {**super()._get_imports(), **next_link._get_imports()}
@classmethod
def create(cls, *children, **props) -> Component:
"""Create a Link component.
Args:
*children: The children of the component.
**props: The props of the component.
Raises:
ValueError: in case of missing children
Returns:
Component: The link component
"""
if props.get("href") is not None:
if not len(children):
raise ValueError("Link without a child will not display")
if "as_child" not in props:
# If user does not use `as_child`, by default we render using next_link to avoid page refresh during internal navigation
return super().create(
NextLink.create(*children, **props), as_child=True
)
return super().create(*children, **props)

View File

@ -8,12 +8,16 @@ from reflex.vars import Var, BaseVar, ComputedVar
from reflex.event import EventChain, EventHandler, EventSpec from reflex.event import EventChain, EventHandler, EventSpec
from reflex.style import Style from reflex.style import Style
from typing import Literal from typing import Literal
from reflex.components.component import Component
from reflex.components.el.elements.inline import A from reflex.components.el.elements.inline import A
from reflex.components.next.link import NextLink
from reflex.utils import imports
from reflex.vars import Var from reflex.vars import Var
from ..base import CommonMarginProps, LiteralAccentColor, RadixThemesComponent from ..base import CommonMarginProps, LiteralAccentColor, RadixThemesComponent
from .base import LiteralTextSize, LiteralTextTrim, LiteralTextWeight from .base import LiteralTextSize, LiteralTextTrim, LiteralTextWeight
LiteralLinkUnderline = Literal["auto", "hover", "always"] LiteralLinkUnderline = Literal["auto", "hover", "always"]
next_link = NextLink.create()
class Link(CommonMarginProps, RadixThemesComponent, A): class Link(CommonMarginProps, RadixThemesComponent, A):
@overload @overload
@ -21,7 +25,31 @@ class Link(CommonMarginProps, RadixThemesComponent, A):
def create( # type: ignore def create( # type: ignore
cls, cls,
*children, *children,
color: Optional[Union[Var[str], str]] = None, as_child: Optional[Union[Var[bool], bool]] = None,
size: Optional[
Union[
Var[Literal["1", "2", "3", "4", "5", "6", "7", "8", "9"]],
Literal["1", "2", "3", "4", "5", "6", "7", "8", "9"],
]
] = None,
weight: Optional[
Union[
Var[Literal["light", "regular", "medium", "bold"]],
Literal["light", "regular", "medium", "bold"],
]
] = None,
trim: Optional[
Union[
Var[Literal["normal", "start", "end", "both"]],
Literal["normal", "start", "end", "both"],
]
] = None,
underline: Optional[
Union[
Var[Literal["auto", "hover", "always"]],
Literal["auto", "hover", "always"],
]
] = None,
color_scheme: Optional[ color_scheme: Optional[
Union[ Union[
Var[ Var[
@ -84,31 +112,6 @@ class Link(CommonMarginProps, RadixThemesComponent, A):
], ],
] ]
] = None, ] = None,
as_child: Optional[Union[Var[bool], bool]] = None,
size: Optional[
Union[
Var[Literal["1", "2", "3", "4", "5", "6", "7", "8", "9"]],
Literal["1", "2", "3", "4", "5", "6", "7", "8", "9"],
]
] = None,
weight: Optional[
Union[
Var[Literal["light", "regular", "medium", "bold"]],
Literal["light", "regular", "medium", "bold"],
]
] = None,
trim: Optional[
Union[
Var[Literal["normal", "start", "end", "both"]],
Literal["normal", "start", "end", "both"],
]
] = None,
underline: Optional[
Union[
Var[Literal["auto", "hover", "always"]],
Literal["auto", "hover", "always"],
]
] = None,
high_contrast: Optional[Union[Var[bool], bool]] = None, high_contrast: Optional[Union[Var[bool], bool]] = None,
m: Optional[ m: Optional[
Union[ Union[
@ -269,20 +272,16 @@ class Link(CommonMarginProps, RadixThemesComponent, A):
] = None, ] = None,
**props **props
) -> "Link": ) -> "Link":
"""Create a new component instance. """Create a Link component.
Will prepend "RadixThemes" to the component tag to avoid conflicts with
other UI libraries for common names, like Text and Button.
Args: Args:
*children: Child components. *children: The children of the component.
color: map to CSS default color property.
color_scheme: map to radix color property.
as_child: Change the default rendered element for the one passed as a child, merging their props and behavior. as_child: Change the default rendered element for the one passed as a child, merging their props and behavior.
size: Text size: "1" - "9" size: Text size: "1" - "9"
weight: Thickness of text: "light" | "regular" | "medium" | "bold" weight: Thickness of text: "light" | "regular" | "medium" | "bold"
trim: Removes the leading trim space: "normal" | "start" | "end" | "both" trim: Removes the leading trim space: "normal" | "start" | "end" | "both"
underline: Sets the visibility of the underline affordance: "auto" | "hover" | "always" underline: Sets the visibility of the underline affordance: "auto" | "hover" | "always"
color_scheme: Overrides the accent color inherited from the Theme.
high_contrast: Whether to render the text with higher contrast color high_contrast: Whether to render the text with higher contrast color
m: Margin: "0" - "9" m: Margin: "0" - "9"
mx: Margin horizontal: "0" - "9" mx: Margin horizontal: "0" - "9"
@ -323,9 +322,12 @@ class Link(CommonMarginProps, RadixThemesComponent, A):
class_name: The class name for the component. class_name: The class name for the component.
autofocus: Whether the component should take the focus once the page is loaded autofocus: Whether the component should take the focus once the page is loaded
custom_attrs: custom attribute custom_attrs: custom attribute
**props: Component properties. **props: The props of the component.
Raises:
ValueError: in case of missing children
Returns: Returns:
A new component instance. Component: The link component
""" """
... ...