2020 "nav" ,
2121)
2222
23+ import collections .abc
2324import copy
2425import re
2526from typing import Any , Literal , Optional , Sequence , cast
@@ -363,7 +364,7 @@ def nav_menu(
363364
364365
365366class NavSet :
366- args : tuple [NavSetArg | MetadataNode , ...]
367+ args : tuple [NavSetArg | MetadataNode | Sequence [ MetadataNode ] , ...]
367368 ul_class : str
368369 id : Optional [str ]
369370 selected : Optional [str ]
@@ -372,7 +373,7 @@ class NavSet:
372373
373374 def __init__ (
374375 self ,
375- * args : NavSetArg | MetadataNode ,
376+ * args : NavSetArg | MetadataNode | Sequence [ MetadataNode ] ,
376377 ul_class : str ,
377378 id : Optional [str ],
378379 selected : Optional [str ],
@@ -406,7 +407,7 @@ def layout(self, nav: Tag, content: Tag) -> TagList | Tag:
406407# -----------------------------------------------------------------------------
407408@no_example ()
408409def navset_tab (
409- * args : NavSetArg ,
410+ * args : NavSetArg | MetadataNode | Sequence [ MetadataNode ] ,
410411 id : Optional [str ] = None ,
411412 selected : Optional [str ] = None ,
412413 header : TagChild = None ,
@@ -463,7 +464,7 @@ def navset_tab(
463464
464465@no_example ()
465466def navset_pill (
466- * args : NavSetArg ,
467+ * args : NavSetArg | MetadataNode | Sequence [ MetadataNode ] ,
467468 id : Optional [str ] = None ,
468469 selected : Optional [str ] = None ,
469470 header : TagChild = None ,
@@ -519,7 +520,7 @@ def navset_pill(
519520
520521@no_example ()
521522def navset_underline (
522- * args : NavSetArg ,
523+ * args : NavSetArg | MetadataNode | Sequence [ MetadataNode ] ,
523524 id : Optional [str ] = None ,
524525 selected : Optional [str ] = None ,
525526 header : TagChild = None ,
@@ -574,7 +575,7 @@ def navset_underline(
574575
575576@add_example ()
576577def navset_hidden (
577- * args : NavSetArg ,
578+ * args : NavSetArg | MetadataNode | Sequence [ MetadataNode ] ,
578579 id : Optional [str ] = None ,
579580 selected : Optional [str ] = None ,
580581 header : TagChild = None ,
@@ -631,7 +632,7 @@ class NavSetCard(NavSet):
631632
632633 def __init__ (
633634 self ,
634- * args : NavSetArg ,
635+ * args : NavSetArg | MetadataNode | Sequence [ MetadataNode ] ,
635636 ul_class : str ,
636637 id : Optional [str ],
637638 selected : Optional [str ],
@@ -686,7 +687,7 @@ def layout(self, nav: Tag, content: Tag) -> Tag:
686687
687688@no_example ()
688689def navset_card_tab (
689- * args : NavSetArg ,
690+ * args : NavSetArg | MetadataNode | Sequence [ MetadataNode ] ,
690691 id : Optional [str ] = None ,
691692 selected : Optional [str ] = None ,
692693 title : Optional [TagChild ] = None ,
@@ -749,7 +750,7 @@ def navset_card_tab(
749750
750751@no_example ()
751752def navset_card_pill (
752- * args : NavSetArg ,
753+ * args : NavSetArg | MetadataNode | Sequence [ MetadataNode ] ,
753754 id : Optional [str ] = None ,
754755 selected : Optional [str ] = None ,
755756 title : Optional [TagChild ] = None ,
@@ -815,7 +816,7 @@ def navset_card_pill(
815816
816817@no_example ()
817818def navset_card_underline (
818- * args : NavSetArg ,
819+ * args : NavSetArg | MetadataNode | Sequence [ MetadataNode ] ,
819820 id : Optional [str ] = None ,
820821 selected : Optional [str ] = None ,
821822 title : Optional [TagChild ] = None ,
@@ -884,7 +885,7 @@ class NavSetPillList(NavSet):
884885
885886 def __init__ (
886887 self ,
887- * args : NavSetArg | MetadataNode ,
888+ * args : NavSetArg | MetadataNode | Sequence [ MetadataNode ] ,
888889 ul_class : str ,
889890 id : Optional [str ],
890891 selected : Optional [str ],
@@ -914,7 +915,7 @@ def layout(self, nav: TagChild, content: TagChild) -> Tag:
914915
915916@no_example ()
916917def navset_pill_list (
917- * args : NavSetArg | MetadataNode ,
918+ * args : NavSetArg | MetadataNode | Sequence [ MetadataNode ] ,
918919 id : Optional [str ] = None ,
919920 selected : Optional [str ] = None ,
920921 header : TagChild = None ,
@@ -991,7 +992,7 @@ class NavSetBar(NavSet):
991992
992993 def __init__ (
993994 self ,
994- * args : NavSetArg | MetadataNode ,
995+ * args : NavSetArg | MetadataNode | Sequence [ MetadataNode ] ,
995996 ul_class : str ,
996997 title : TagChild ,
997998 id : Optional [str ],
@@ -1281,7 +1282,7 @@ def navset_bar(
12811282# Utilities for rendering navs
12821283# -----------------------------------------------------------------------------\
12831284def render_navset (
1284- * items : NavSetArg | MetadataNode ,
1285+ * items : NavSetArg | MetadataNode | Sequence [ MetadataNode ] ,
12851286 ul_class : str ,
12861287 id : Optional [str ],
12871288 selected : Optional [str ],
@@ -1290,8 +1291,21 @@ def render_navset(
12901291 tabsetid = private_random_int (1000 , 10000 )
12911292
12921293 # Separate MetadataNodes from NavSetArgs.
1293- metadata_args = [x for x in items if isinstance (x , MetadataNode )]
1294- navset_args = [x for x in items if not isinstance (x , MetadataNode )]
1294+ metadata_args : list [MetadataNode ] = []
1295+ navset_args : list [NavSetArg ] = []
1296+
1297+ for item in items :
1298+ if isinstance (item , MetadataNode ):
1299+ metadata_args .append (item )
1300+ elif isinstance (item , collections .abc .Sequence ) and all (
1301+ isinstance (x , MetadataNode ) for x in item
1302+ ):
1303+ # Above we needed to use collections.abc.Sequence for runtime checks, as
1304+ # typing.Sequence does not work for runtime checks.
1305+ metadata_args .extend (item )
1306+ else :
1307+ # pyright needs a little help with type inference here.
1308+ navset_args .append (cast (NavSetArg , item ))
12951309
12961310 # If the user hasn't provided a selected value, use the first one
12971311 if selected is None :
0 commit comments