4
4
from textual .app import ComposeResult
5
5
from textual .binding import Binding
6
6
from textual .containers import Container
7
+ from textual .content import Content , ContentText
7
8
from textual .css .query import NoMatches
8
9
from textual .message import Message
9
10
from textual .reactive import reactive
@@ -47,23 +48,21 @@ class CollapsibleTitle(Static, can_focus=True):
47
48
"""
48
49
49
50
collapsed = reactive (True )
50
- label = reactive ("Toggle" )
51
+ label : reactive [ ContentText ] = reactive (Content ( "Toggle" ) )
51
52
52
53
def __init__ (
53
54
self ,
54
55
* ,
55
- label : str ,
56
+ label : ContentText ,
56
57
collapsed_symbol : str ,
57
58
expanded_symbol : str ,
58
59
collapsed : bool ,
59
60
) -> None :
60
61
super ().__init__ ()
61
62
self .collapsed_symbol = collapsed_symbol
62
63
self .expanded_symbol = expanded_symbol
63
- self .label = label
64
+ self .label = Content . from_text ( label )
64
65
self .collapsed = collapsed
65
- self ._collapsed_label = f"{ collapsed_symbol } { label } "
66
- self ._expanded_label = f"{ expanded_symbol } { label } "
67
66
68
67
class Toggle (Message ):
69
68
"""Request toggle."""
@@ -77,19 +76,21 @@ def action_toggle_collapsible(self) -> None:
77
76
"""Toggle the state of the parent collapsible."""
78
77
self .post_message (self .Toggle ())
79
78
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 )
83
84
if self .collapsed :
84
- self .update (self ._collapsed_label )
85
+ self .update (Content . assemble ( self .collapsed_symbol , " " , self . label ) )
85
86
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 ()
87
91
88
92
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 ()
93
94
94
95
95
96
class Collapsible (Widget ):
0 commit comments