44from textual .app import ComposeResult
55from textual .binding import Binding
66from textual .containers import Container
7+ from textual .content import Content , ContentText
78from textual .css .query import NoMatches
89from textual .message import Message
910from textual .reactive import reactive
@@ -47,23 +48,21 @@ class CollapsibleTitle(Static, can_focus=True):
4748 """
4849
4950 collapsed = reactive (True )
50- label = reactive ("Toggle" )
51+ label : reactive [ ContentText ] = reactive (Content ( "Toggle" ) )
5152
5253 def __init__ (
5354 self ,
5455 * ,
55- label : str ,
56+ label : ContentText ,
5657 collapsed_symbol : str ,
5758 expanded_symbol : str ,
5859 collapsed : bool ,
5960 ) -> None :
6061 super ().__init__ ()
6162 self .collapsed_symbol = collapsed_symbol
6263 self .expanded_symbol = expanded_symbol
63- self .label = label
64+ self .label = Content . from_text ( label )
6465 self .collapsed = collapsed
65- self ._collapsed_label = f"{ collapsed_symbol } { label } "
66- self ._expanded_label = f"{ expanded_symbol } { label } "
6766
6867 class Toggle (Message ):
6968 """Request toggle."""
@@ -77,19 +76,21 @@ def action_toggle_collapsible(self) -> None:
7776 """Toggle the state of the parent collapsible."""
7877 self .post_message (self .Toggle ())
7978
80- def _watch_label (self , label : str ) -> None :
81- self ._collapsed_label = f"{ self .collapsed_symbol } { label } "
82- self ._expanded_label = f"{ self .expanded_symbol } { label } "
79+ def validate_label (self , label : ContentText ) -> Content :
80+ return Content .from_text (label )
81+
82+ def _update_label (self ) -> None :
83+ assert isinstance (self .label , Content )
8384 if self .collapsed :
84- self .update (self ._collapsed_label )
85+ self .update (Content . assemble ( self .collapsed_symbol , " " , self . label ) )
8586 else :
86- self .update (self ._expanded_label )
87+ self .update (Content .assemble (self .expanded_symbol , " " , self .label ))
88+
89+ def _watch_label (self ) -> None :
90+ self ._update_label ()
8791
8892 def _watch_collapsed (self , collapsed : bool ) -> None :
89- if collapsed :
90- self .update (self ._collapsed_label )
91- else :
92- self .update (self ._expanded_label )
93+ self ._update_label ()
9394
9495
9596class Collapsible (Widget ):
0 commit comments