diff --git a/reflex/components/datadisplay/shiki_code_block.py b/reflex/components/datadisplay/shiki_code_block.py index 37c75053c..71e603021 100644 --- a/reflex/components/datadisplay/shiki_code_block.py +++ b/reflex/components/datadisplay/shiki_code_block.py @@ -670,10 +670,10 @@ class ShikiHighLevelCodeBlock(ShikiCodeBlock): show_line_numbers: Var[bool] # Whether a copy button should appear. - can_copy: Var[bool] = False + can_copy: Var[bool] = Var.create(False) # copy_button: A custom copy button to override the default one. - copy_button: Var[Optional[Union[Component | bool]]] = None + copy_button: Var[Optional[Union[Component, bool]]] = Var.create(None) @classmethod def create( diff --git a/reflex/components/datadisplay/shiki_code_block.pyi b/reflex/components/datadisplay/shiki_code_block.pyi index 5c6f28abc..bee4906af 100644 --- a/reflex/components/datadisplay/shiki_code_block.pyi +++ b/reflex/components/datadisplay/shiki_code_block.pyi @@ -309,6 +309,7 @@ LiteralCodeTheme = Literal[ "nord", "one-dark-pro", "one-light", + "plain", "plastic", "poimandres", "red", @@ -815,6 +816,7 @@ class ShikiCodeBlock(Component): "nord", "one-dark-pro", "one-light", + "plain", "plastic", "poimandres", "red", @@ -869,6 +871,7 @@ class ShikiCodeBlock(Component): "nord", "one-dark-pro", "one-light", + "plain", "plastic", "poimandres", "red", @@ -981,10 +984,12 @@ class ShikiHighLevelCodeBlock(ShikiCodeBlock): def create( # type: ignore cls, *children, - can_copy: Optional[bool] = False, - copy_button: Optional[Union[Component, bool]] = None, use_transformers: Optional[Union[Var[bool], bool]] = None, show_line_numbers: Optional[Union[Var[bool], bool]] = None, + can_copy: Optional[Union[Var[bool], bool]] = None, + copy_button: Optional[ + Union[Component, Var[Optional[Union[Component, bool]]], bool] + ] = None, language: Optional[ Union[ Literal[ @@ -1456,6 +1461,7 @@ class ShikiHighLevelCodeBlock(ShikiCodeBlock): "nord", "one-dark-pro", "one-light", + "plain", "plastic", "poimandres", "red", @@ -1510,6 +1516,7 @@ class ShikiHighLevelCodeBlock(ShikiCodeBlock): "nord", "one-dark-pro", "one-light", + "plain", "plastic", "poimandres", "red", @@ -1592,10 +1599,10 @@ class ShikiHighLevelCodeBlock(ShikiCodeBlock): Args: *children: The children of the component. - can_copy: Whether a copy button should appear. - copy_button: A custom copy button to override the default one. use_transformers: If this is enabled, the default transformers(shikijs transformer) will be used. show_line_numbers: If this is enabled line numbers will be shown next to the code block. + can_copy: Whether a copy button should appear. + copy_button: copy_button: A custom copy button to override the default one. language: The language to use. theme: The theme to use ("light" or "dark"). themes: The set of themes to use for different modes. @@ -1625,10 +1632,12 @@ class CodeblockNamespace(ComponentNamespace): @staticmethod def __call__( *children, - can_copy: Optional[bool] = False, - copy_button: Optional[Union[Component, bool]] = None, use_transformers: Optional[Union[Var[bool], bool]] = None, show_line_numbers: Optional[Union[Var[bool], bool]] = None, + can_copy: Optional[Union[Var[bool], bool]] = None, + copy_button: Optional[ + Union[Component, Var[Optional[Union[Component, bool]]], bool] + ] = None, language: Optional[ Union[ Literal[ @@ -2100,6 +2109,7 @@ class CodeblockNamespace(ComponentNamespace): "nord", "one-dark-pro", "one-light", + "plain", "plastic", "poimandres", "red", @@ -2154,6 +2164,7 @@ class CodeblockNamespace(ComponentNamespace): "nord", "one-dark-pro", "one-light", + "plain", "plastic", "poimandres", "red", @@ -2236,10 +2247,10 @@ class CodeblockNamespace(ComponentNamespace): Args: *children: The children of the component. - can_copy: Whether a copy button should appear. - copy_button: A custom copy button to override the default one. use_transformers: If this is enabled, the default transformers(shikijs transformer) will be used. show_line_numbers: If this is enabled line numbers will be shown next to the code block. + can_copy: Whether a copy button should appear. + copy_button: copy_button: A custom copy button to override the default one. language: The language to use. theme: The theme to use ("light" or "dark"). themes: The set of themes to use for different modes. diff --git a/reflex/components/markdown/markdown.py b/reflex/components/markdown/markdown.py index 03df804f2..eec71a8f0 100644 --- a/reflex/components/markdown/markdown.py +++ b/reflex/components/markdown/markdown.py @@ -20,9 +20,8 @@ from reflex.components.tags.tag import Tag from reflex.utils import types from reflex.utils.imports import ImportDict, ImportVar from reflex.vars.base import LiteralVar, Var -from reflex.vars.number import ternary_operation from reflex.vars.function import ARRAY_ISARRAY - +from reflex.vars.number import ternary_operation # Special vars used in the component map. _CHILDREN = Var(_js_expr="children", _var_type=str) @@ -202,7 +201,13 @@ class Markdown(Component): raise ValueError(f"No markdown component found for tag: {tag}.") special_props = [_PROPS_IN_TAG] - children = [_CHILDREN if not tag == "codeblock" else ternary_operation(ARRAY_ISARRAY.call(_CHILDREN), _CHILDREN.to(LiteralVar)[0], _CHILDREN).to(str)] + children = [ + _CHILDREN + if tag != "codeblock" + else ternary_operation( + ARRAY_ISARRAY.call(_CHILDREN), _CHILDREN.to(list)[0], _CHILDREN + ).to(str) + ] # For certain tags, the props from the markdown renderer are not actually valid for the component. if tag in NO_PROPS_TAGS: