stack.py 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. """Stack components."""
  2. from __future__ import annotations
  3. from typing import Literal
  4. from reflex.components.component import Component
  5. from ..base import LiteralSize
  6. from .flex import Flex
  7. LiteralJustify = Literal["start", "center", "end"]
  8. LiteralAlign = Literal["start", "center", "end", "stretch"]
  9. class Stack(Flex):
  10. """A stack component."""
  11. @classmethod
  12. def create(
  13. cls,
  14. *children,
  15. spacing: LiteralSize = "2",
  16. **props,
  17. ) -> Component:
  18. """Create a new instance of the component.
  19. Args:
  20. *children: The children of the stack.
  21. spacing: The spacing between each stack item.
  22. **props: The properties of the stack.
  23. Returns:
  24. The stack component.
  25. """
  26. return super().create(
  27. *children,
  28. spacing=spacing,
  29. **props,
  30. )
  31. class VStack(Stack):
  32. """A vertical stack component."""
  33. def _apply_theme(self, theme: Component):
  34. self.style.update({"flex_direction": "column"})
  35. class HStack(Stack):
  36. """A horizontal stack component."""
  37. def _apply_theme(self, theme: Component):
  38. self.style.update({"flex_direction": "row"})