[WIP] rx.color (#2443)
* Color module intial commit * Improvments * Update reflex/constants/colors.py Co-authored-by: Masen Furer <m_github@0x26.net> * Comments+tests * Fix import --------- Co-authored-by: Alek Petuskey <alekpetuskey@aleks-mbp.lan> Co-authored-by: Masen Furer <m_github@0x26.net> Co-authored-by: Alek Petuskey <alekpetuskey@Aleks-MacBook-Pro.local>
This commit is contained in:
parent
8203b888fe
commit
670faf291a
@ -9,6 +9,7 @@ from __future__ import annotations
|
|||||||
import importlib
|
import importlib
|
||||||
from typing import Type
|
from typing import Type
|
||||||
|
|
||||||
|
from reflex.constants.colors import Color as color
|
||||||
from reflex.page import page as page
|
from reflex.page import page as page
|
||||||
from reflex.utils import console
|
from reflex.utils import console
|
||||||
from reflex.utils.format import to_snake_case
|
from reflex.utils.format import to_snake_case
|
||||||
|
54
reflex/constants/colors.py
Normal file
54
reflex/constants/colors.py
Normal file
@ -0,0 +1,54 @@
|
|||||||
|
"""The colors used in Reflex are a wrapper around https://www.radix-ui.com/colors."""
|
||||||
|
from dataclasses import dataclass
|
||||||
|
from typing import Literal
|
||||||
|
|
||||||
|
ColorType = Literal[
|
||||||
|
"gray",
|
||||||
|
"mauve",
|
||||||
|
"slate",
|
||||||
|
"sage",
|
||||||
|
"olive",
|
||||||
|
"sand",
|
||||||
|
"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",
|
||||||
|
]
|
||||||
|
|
||||||
|
ShadeType = Literal[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
|
||||||
|
|
||||||
|
|
||||||
|
@dataclass
|
||||||
|
class Color:
|
||||||
|
"""A color in the Reflex color palette."""
|
||||||
|
|
||||||
|
# The color palette to use
|
||||||
|
color: ColorType
|
||||||
|
|
||||||
|
# The shade of the color to use
|
||||||
|
shade: ShadeType = 7
|
||||||
|
|
||||||
|
# Whether to use the alpha variant of the color
|
||||||
|
alpha: bool = False
|
@ -8,6 +8,7 @@ from datetime import date, datetime, time, timedelta
|
|||||||
from typing import Any, Callable, Dict, List, Set, Tuple, Type, Union, get_type_hints
|
from typing import Any, Callable, Dict, List, Set, Tuple, Type, Union, get_type_hints
|
||||||
|
|
||||||
from reflex.base import Base
|
from reflex.base import Base
|
||||||
|
from reflex.constants.colors import Color
|
||||||
from reflex.utils import exceptions, format, types
|
from reflex.utils import exceptions, format, types
|
||||||
|
|
||||||
# Mapping from type to a serializer.
|
# Mapping from type to a serializer.
|
||||||
@ -230,6 +231,22 @@ def serialize_datetime(dt: Union[date, datetime, time, timedelta]) -> str:
|
|||||||
return str(dt)
|
return str(dt)
|
||||||
|
|
||||||
|
|
||||||
|
@serializer
|
||||||
|
def serialize_color(color: Color) -> SerializedType:
|
||||||
|
"""Serialize a color.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
color: The color to serialize.
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
The serialized color.
|
||||||
|
"""
|
||||||
|
if color.alpha:
|
||||||
|
return f"var(--{color.color}-a{color.shade})"
|
||||||
|
else:
|
||||||
|
return f"var(--{color.color}-{color.shade})"
|
||||||
|
|
||||||
|
|
||||||
try:
|
try:
|
||||||
from pandas import DataFrame
|
from pandas import DataFrame
|
||||||
|
|
||||||
|
@ -5,6 +5,7 @@ from typing import Any, Dict, List, Type
|
|||||||
import pytest
|
import pytest
|
||||||
|
|
||||||
from reflex.base import Base
|
from reflex.base import Base
|
||||||
|
from reflex.constants.colors import Color as color
|
||||||
from reflex.utils import serializers
|
from reflex.utils import serializers
|
||||||
from reflex.vars import Var
|
from reflex.vars import Var
|
||||||
|
|
||||||
@ -169,6 +170,8 @@ class BaseSubclass(Base):
|
|||||||
[datetime.timedelta(1, 1, 1), datetime.timedelta(1, 1, 2)],
|
[datetime.timedelta(1, 1, 1), datetime.timedelta(1, 1, 2)],
|
||||||
'["1 day, 0:00:01.000001", "1 day, 0:00:01.000002"]',
|
'["1 day, 0:00:01.000001", "1 day, 0:00:01.000002"]',
|
||||||
),
|
),
|
||||||
|
(color("slate", shade=1), "var(--slate-1)"),
|
||||||
|
(color("orange", shade=1, alpha=True), "var(--orange-a1)"),
|
||||||
],
|
],
|
||||||
)
|
)
|
||||||
def test_serialize(value: Any, expected: str):
|
def test_serialize(value: Any, expected: str):
|
||||||
|
Loading…
Reference in New Issue
Block a user