expansion.py 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. from typing import Any, Callable, Optional
  2. from .mixins.disableable_element import DisableableElement
  3. from .mixins.text_element import TextElement
  4. from .mixins.value_element import ValueElement
  5. class Expansion(TextElement, ValueElement, DisableableElement):
  6. def __init__(self,
  7. text: str = '', *,
  8. caption: Optional[str] = None,
  9. icon: Optional[str] = None,
  10. group: Optional[str] = None,
  11. value: bool = False,
  12. on_value_change: Optional[Callable[..., Any]] = None
  13. ) -> None:
  14. """Expansion Element
  15. Provides an expandable container based on Quasar's `QExpansionItem <https://quasar.dev/vue-components/expansion-item>`_ component.
  16. :param text: title text
  17. :param caption: optional caption (or sub-label) text
  18. :param icon: optional icon (default: None)
  19. :param group: optional group name for coordinated open/close state within the group a.k.a. "accordion mode"
  20. :param value: whether the expansion should be opened on creation (default: `False`)
  21. :param on_value_change: callback to execute when value changes
  22. """
  23. super().__init__(tag='q-expansion-item', text=text, value=value, on_value_change=on_value_change)
  24. if caption is not None:
  25. self._props['caption'] = caption
  26. if group is not None:
  27. self._props['group'] = group
  28. self._props['icon'] = icon
  29. self._classes.append('nicegui-expansion')
  30. def open(self) -> None:
  31. """Open the expansion."""
  32. self.value = True
  33. def close(self) -> None:
  34. """Close the expansion."""
  35. self.value = False
  36. def _text_to_model_text(self, text: str) -> None:
  37. self._props['label'] = text