@@ -36,6 +36,7 @@ class OrganizationOptions(BarOptions):
3636 def __init__ (self , ** kwargs ):
3737 self ._hanging_indent = None
3838 self ._hanging_indent_translation = None
39+ self ._hanging_side = None
3940 self ._levels = None
4041 self ._link_color = None
4142 self ._link_line_width = None
@@ -48,6 +49,7 @@ def __init__(self, **kwargs):
4849
4950 self .hanging_indent = kwargs .get ('hanging_indent' , None )
5051 self .hanging_indent_translation = kwargs .get ('hanging_indent_translation' , None )
52+ self .hanging_side = kwargs .get ('hanging_side' , None )
5153 self .levels = kwargs .get ('levels' , None )
5254 self .link_color = kwargs .get ('link_color' , None )
5355 self .link_line_width = kwargs .get ('link_line_width' , None )
@@ -138,6 +140,36 @@ def hanging_indent_translation(self, value):
138140
139141 self ._hanging_indent_translation = value
140142
143+ @property
144+ def hanging_side (self ) -> Optional [str ]:
145+ """Whether links connecting hanging nodes should be drawn on the left or right side.
146+
147+ Accepts ``'left'`` or ``'right'``. Defaults to ``'left'``.
148+
149+ .. tip::
150+
151+ Useful for RTL (Right-to-Left) layouts.
152+
153+ .. note::
154+
155+ Only affects inverted (vertical) charts.
156+
157+ :rtype: :class:`str <python:str>` or :obj:`None <python:None>`
158+ """
159+ return self ._hanging_side
160+
161+ @hanging_side .setter
162+ def hanging_side (self , value ):
163+ if not value :
164+ self ._hanging_side = None
165+ else :
166+ value = validators .string (value , allow_empty = False )
167+ value = value .lower ()
168+ if value not in ['left' , 'right' ]:
169+ raise errors .HighchartsValueError (f'hanging_side expects a value of "left", '
170+ f'or "right". Received: { value } ' )
171+ self ._hanging_side = value
172+
141173 @property
142174 def levels (self ) -> Optional [List [LevelOptions ]]:
143175 """Set options on specific levels. Takes precedence over series options, but not
@@ -380,6 +412,7 @@ def _get_kwargs_from_dict(cls, as_dict):
380412
381413 'hanging_indent' : as_dict .get ('hangingIndent' , None ),
382414 'hanging_indent_translation' : as_dict .get ('hangingIndentTranslation' , None ),
415+ 'hanging_side' : as_dict .get ('hangingSide' , None ),
383416 'levels' : as_dict .get ('levels' , None ),
384417 'link_color' : as_dict .get ('linkColor' , None ),
385418 'link_line_width' : as_dict .get ('linkLineWidth' , None ),
@@ -397,6 +430,7 @@ def _to_untrimmed_dict(self, in_cls = None) -> dict:
397430 untrimmed = {
398431 'hangingIndent' : self .hanging_indent ,
399432 'hangingIndentTranslation' : self .hanging_indent_translation ,
433+ 'hangingSide' : self .hanging_side ,
400434 'levels' : self .levels ,
401435 'linkColor' : self .link_color ,
402436 'linkLineWidth' : self .link_line_width ,
0 commit comments