"""Namespace for experimental features.""" from types import SimpleNamespace from reflex.components.datadisplay.shiki_code_block import code_block as code_block from reflex.components.props import PropsBase from reflex.components.radix.themes.components.progress import progress as progress from reflex.components.sonner.toast import toast as toast from ..utils.console import warn from . import hooks as hooks from .client_state import ClientStateVar as ClientStateVar from .layout import layout as layout from .misc import run_in_thread as run_in_thread warn( "`rx._x` contains experimental features and might be removed at any time in the future .", ) _EMITTED_PROMOTION_WARNINGS = set() class ExperimentalNamespace(SimpleNamespace): """Namespace for experimental features.""" @property def toast(self): """Temporary property returning the toast namespace. Remove this property when toast is fully promoted. Returns: The toast namespace. """ self.register_component_warning("toast") return toast @property def progress(self): """Temporary property returning the toast namespace. Remove this property when toast is fully promoted. Returns: The toast namespace. """ self.register_component_warning("progress") return progress @staticmethod def register_component_warning(component_name: str): """Add component to emitted warnings and throw a warning if it doesn't exist. Args: component_name: name of the component. """ if component_name not in _EMITTED_PROMOTION_WARNINGS: _EMITTED_PROMOTION_WARNINGS.add(component_name) warn(f"`rx._x.{component_name}` was promoted to `rx.{component_name}`.") _x = ExperimentalNamespace( client_state=ClientStateVar.create, hooks=hooks, layout=layout, PropsBase=PropsBase, run_in_thread=run_in_thread, code_block=code_block, )