[REF-2574] Default width for Stack (+children) and default padding for container (#3104)
This commit is contained in:
parent
8bb736111a
commit
b7e85ecec4
@ -35,5 +35,11 @@ class Html(Div):
|
|||||||
else:
|
else:
|
||||||
props["dangerouslySetInnerHTML"] = {"__html": children[0]}
|
props["dangerouslySetInnerHTML"] = {"__html": children[0]}
|
||||||
|
|
||||||
|
# Apply the default classname
|
||||||
|
given_class_name = props.pop("class_name", [])
|
||||||
|
if isinstance(given_class_name, str):
|
||||||
|
given_class_name = [given_class_name]
|
||||||
|
props["class_name"] = ["rx-Html", *given_class_name]
|
||||||
|
|
||||||
# Create the component.
|
# Create the component.
|
||||||
return super().create(**props)
|
return super().create(**props)
|
||||||
|
@ -219,6 +219,12 @@ class Upload(MemoizationLeaf):
|
|||||||
# Mark the Upload component as used in the app.
|
# Mark the Upload component as used in the app.
|
||||||
cls.is_used = True
|
cls.is_used = True
|
||||||
|
|
||||||
|
# Apply the default classname
|
||||||
|
given_class_name = props.pop("class_name", [])
|
||||||
|
if isinstance(given_class_name, str):
|
||||||
|
given_class_name = [given_class_name]
|
||||||
|
props["class_name"] = ["rx-Upload", *given_class_name]
|
||||||
|
|
||||||
# get only upload component props
|
# get only upload component props
|
||||||
supported_props = cls.get_props().union({"on_drop"})
|
supported_props = cls.get_props().union({"on_drop"})
|
||||||
upload_props = {
|
upload_props = {
|
||||||
|
@ -4,6 +4,7 @@ from __future__ import annotations
|
|||||||
from typing import Literal
|
from typing import Literal
|
||||||
|
|
||||||
from reflex import el
|
from reflex import el
|
||||||
|
from reflex.style import STACK_CHILDREN_FULL_WIDTH
|
||||||
from reflex.vars import Var
|
from reflex.vars import Var
|
||||||
|
|
||||||
from ..base import RadixThemesComponent
|
from ..base import RadixThemesComponent
|
||||||
@ -19,5 +20,32 @@ class Container(el.Div, RadixThemesComponent):
|
|||||||
|
|
||||||
tag = "Container"
|
tag = "Container"
|
||||||
|
|
||||||
# The size of the container: "1" - "4" (default "4")
|
# The size of the container: "1" - "4" (default "3")
|
||||||
size: Var[LiteralContainerSize]
|
size: Var[LiteralContainerSize] = Var.create_safe("3")
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def create(
|
||||||
|
cls,
|
||||||
|
*children,
|
||||||
|
padding: str = "16px",
|
||||||
|
stack_children_full_width: bool = False,
|
||||||
|
**props,
|
||||||
|
):
|
||||||
|
"""Create the container component.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
children: The children components.
|
||||||
|
padding: The padding of the container.
|
||||||
|
stack_children_full_width: If True, any vstack/hstack children will have 100% width.
|
||||||
|
props: The properties of the container.
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
The container component.
|
||||||
|
"""
|
||||||
|
if stack_children_full_width:
|
||||||
|
props["style"] = {**STACK_CHILDREN_FULL_WIDTH, **props.pop("style", {})}
|
||||||
|
return super().create(
|
||||||
|
*children,
|
||||||
|
padding=padding,
|
||||||
|
**props,
|
||||||
|
)
|
||||||
|
@ -9,6 +9,7 @@ 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 import el
|
from reflex import el
|
||||||
|
from reflex.style import STACK_CHILDREN_FULL_WIDTH
|
||||||
from reflex.vars import Var
|
from reflex.vars import Var
|
||||||
from ..base import RadixThemesComponent
|
from ..base import RadixThemesComponent
|
||||||
|
|
||||||
@ -20,6 +21,8 @@ class Container(el.Div, RadixThemesComponent):
|
|||||||
def create( # type: ignore
|
def create( # type: ignore
|
||||||
cls,
|
cls,
|
||||||
*children,
|
*children,
|
||||||
|
padding: Optional[str] = "16px",
|
||||||
|
stack_children_full_width: Optional[bool] = False,
|
||||||
size: Optional[
|
size: Optional[
|
||||||
Union[Var[Literal["1", "2", "3", "4"]], Literal["1", "2", "3", "4"]]
|
Union[Var[Literal["1", "2", "3", "4"]], Literal["1", "2", "3", "4"]]
|
||||||
] = None,
|
] = None,
|
||||||
@ -116,39 +119,15 @@ class Container(el.Div, RadixThemesComponent):
|
|||||||
] = None,
|
] = None,
|
||||||
**props
|
**props
|
||||||
) -> "Container":
|
) -> "Container":
|
||||||
"""Create a new component instance.
|
"""Create the container 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 components.
|
||||||
size: The size of the container: "1" - "4" (default "4")
|
padding: The padding of the container.
|
||||||
access_key: Provides a hint for generating a keyboard shortcut for the current element.
|
stack_children_full_width: If True, any vstack/hstack children will have 100% width.
|
||||||
auto_capitalize: Controls whether and how text input is automatically capitalized as it is entered/edited by the user.
|
props: The properties of the container.
|
||||||
content_editable: Indicates whether the element's content is editable.
|
|
||||||
context_menu: Defines the ID of a <menu> element which will serve as the element's context menu.
|
|
||||||
dir: Defines the text direction. Allowed values are ltr (Left-To-Right) or rtl (Right-To-Left)
|
|
||||||
draggable: Defines whether the element can be dragged.
|
|
||||||
enter_key_hint: Hints what media types the media element is able to play.
|
|
||||||
hidden: Defines whether the element is hidden.
|
|
||||||
input_mode: Defines the type of the element.
|
|
||||||
item_prop: Defines the name of the element for metadata purposes.
|
|
||||||
lang: Defines the language used in the element.
|
|
||||||
role: Defines the role of the element.
|
|
||||||
slot: Assigns a slot in a shadow DOM shadow tree to an element.
|
|
||||||
spell_check: Defines whether the element may be checked for spelling errors.
|
|
||||||
tab_index: Defines the position of the current element in the tabbing order.
|
|
||||||
title: Defines a tooltip for the element.
|
|
||||||
style: The style of the component.
|
|
||||||
key: A unique key for the component.
|
|
||||||
id: The id for the component.
|
|
||||||
class_name: The class name for the component.
|
|
||||||
autofocus: Whether the component should take the focus once the page is loaded
|
|
||||||
custom_attrs: custom attribute
|
|
||||||
**props: Component properties.
|
|
||||||
|
|
||||||
Returns:
|
Returns:
|
||||||
A new component instance.
|
The container component.
|
||||||
"""
|
"""
|
||||||
...
|
...
|
||||||
|
@ -16,7 +16,7 @@ class Stack(Flex):
|
|||||||
def create(
|
def create(
|
||||||
cls,
|
cls,
|
||||||
*children,
|
*children,
|
||||||
spacing: LiteralSpacing = "2",
|
spacing: LiteralSpacing = "3",
|
||||||
align: LiteralAlign = "start",
|
align: LiteralAlign = "start",
|
||||||
**props,
|
**props,
|
||||||
) -> Component:
|
) -> Component:
|
||||||
@ -31,6 +31,12 @@ class Stack(Flex):
|
|||||||
Returns:
|
Returns:
|
||||||
The stack component.
|
The stack component.
|
||||||
"""
|
"""
|
||||||
|
# Apply the default classname
|
||||||
|
given_class_name = props.pop("class_name", [])
|
||||||
|
if isinstance(given_class_name, str):
|
||||||
|
given_class_name = [given_class_name]
|
||||||
|
props["class_name"] = ["rx-Stack", *given_class_name]
|
||||||
|
|
||||||
return super().create(
|
return super().create(
|
||||||
*children,
|
*children,
|
||||||
spacing=spacing,
|
spacing=spacing,
|
||||||
|
@ -18,7 +18,7 @@ class Stack(Flex):
|
|||||||
def create( # type: ignore
|
def create( # type: ignore
|
||||||
cls,
|
cls,
|
||||||
*children,
|
*children,
|
||||||
spacing: Optional[LiteralSpacing] = "2",
|
spacing: Optional[LiteralSpacing] = "3",
|
||||||
align: Optional[LiteralAlign] = "start",
|
align: Optional[LiteralAlign] = "start",
|
||||||
as_child: Optional[Union[Var[bool], bool]] = None,
|
as_child: Optional[Union[Var[bool], bool]] = None,
|
||||||
direction: Optional[
|
direction: Optional[
|
||||||
@ -177,7 +177,7 @@ class VStack(Stack):
|
|||||||
def create( # type: ignore
|
def create( # type: ignore
|
||||||
cls,
|
cls,
|
||||||
*children,
|
*children,
|
||||||
spacing: Optional[LiteralSpacing] = "2",
|
spacing: Optional[LiteralSpacing] = "3",
|
||||||
align: Optional[LiteralAlign] = "start",
|
align: Optional[LiteralAlign] = "start",
|
||||||
direction: Optional[
|
direction: Optional[
|
||||||
Union[
|
Union[
|
||||||
@ -336,7 +336,7 @@ class HStack(Stack):
|
|||||||
def create( # type: ignore
|
def create( # type: ignore
|
||||||
cls,
|
cls,
|
||||||
*children,
|
*children,
|
||||||
spacing: Optional[LiteralSpacing] = "2",
|
spacing: Optional[LiteralSpacing] = "3",
|
||||||
align: Optional[LiteralAlign] = "start",
|
align: Optional[LiteralAlign] = "start",
|
||||||
direction: Optional[
|
direction: Optional[
|
||||||
Union[
|
Union[
|
||||||
|
@ -274,3 +274,17 @@ def convert_dict_to_style_and_format_emotion(
|
|||||||
|
|
||||||
"""
|
"""
|
||||||
return format_as_emotion(Style(raw_dict))
|
return format_as_emotion(Style(raw_dict))
|
||||||
|
|
||||||
|
|
||||||
|
STACK_CHILDREN_FULL_WIDTH = {
|
||||||
|
"& :where(.rx-Stack)": {
|
||||||
|
"width": "100%",
|
||||||
|
},
|
||||||
|
"& :where(.rx-Stack) > :where( "
|
||||||
|
"div:not(.rt-Box, .rx-Upload, .rx-Html),"
|
||||||
|
"input, select, textarea, table"
|
||||||
|
")": {
|
||||||
|
"width": "100%",
|
||||||
|
"flex_shrink": "1",
|
||||||
|
},
|
||||||
|
}
|
||||||
|
@ -16,4 +16,7 @@ def test_html_many_children():
|
|||||||
def test_html_create():
|
def test_html_create():
|
||||||
html = Html.create("<p>Hello !</p>")
|
html = Html.create("<p>Hello !</p>")
|
||||||
assert str(html.dangerouslySetInnerHTML) == '{"__html": "<p>Hello !</p>"}' # type: ignore
|
assert str(html.dangerouslySetInnerHTML) == '{"__html": "<p>Hello !</p>"}' # type: ignore
|
||||||
assert str(html) == '<div dangerouslySetInnerHTML={{"__html": "<p>Hello !</p>"}}/>'
|
assert (
|
||||||
|
str(html)
|
||||||
|
== '<div className={`rx-Html`} dangerouslySetInnerHTML={{"__html": "<p>Hello !</p>"}}/>'
|
||||||
|
)
|
||||||
|
@ -81,6 +81,7 @@ def test_upload_root_component_render(upload_root_component):
|
|||||||
[box] = upload["children"]
|
[box] = upload["children"]
|
||||||
assert box["name"] == "Box"
|
assert box["name"] == "Box"
|
||||||
assert box["props"] == [
|
assert box["props"] == [
|
||||||
|
"className={`rx-Upload`}",
|
||||||
'sx={{"border": "1px dotted black"}}',
|
'sx={{"border": "1px dotted black"}}',
|
||||||
"{...getRootProps()}",
|
"{...getRootProps()}",
|
||||||
]
|
]
|
||||||
@ -122,6 +123,7 @@ def test_upload_component_render(upload_component):
|
|||||||
[box] = upload["children"]
|
[box] = upload["children"]
|
||||||
assert box["name"] == "Box"
|
assert box["name"] == "Box"
|
||||||
assert box["props"] == [
|
assert box["props"] == [
|
||||||
|
"className={`rx-Upload`}",
|
||||||
'sx={{"border": "1px dotted black", "padding": "5em", "textAlign": "center"}}',
|
'sx={{"border": "1px dotted black", "padding": "5em", "textAlign": "center"}}',
|
||||||
"{...getRootProps()}",
|
"{...getRootProps()}",
|
||||||
]
|
]
|
||||||
|
Loading…
Reference in New Issue
Block a user