20
20
"nav" ,
21
21
)
22
22
23
+ import collections .abc
23
24
import copy
24
25
import re
25
26
from typing import Any , Literal , Optional , Sequence , cast
@@ -363,7 +364,7 @@ def nav_menu(
363
364
364
365
365
366
class NavSet :
366
- args : tuple [NavSetArg | MetadataNode , ...]
367
+ args : tuple [NavSetArg | MetadataNode | Sequence [ MetadataNode ] , ...]
367
368
ul_class : str
368
369
id : Optional [str ]
369
370
selected : Optional [str ]
@@ -372,7 +373,7 @@ class NavSet:
372
373
373
374
def __init__ (
374
375
self ,
375
- * args : NavSetArg | MetadataNode ,
376
+ * args : NavSetArg | MetadataNode | Sequence [ MetadataNode ] ,
376
377
ul_class : str ,
377
378
id : Optional [str ],
378
379
selected : Optional [str ],
@@ -406,7 +407,7 @@ def layout(self, nav: Tag, content: Tag) -> TagList | Tag:
406
407
# -----------------------------------------------------------------------------
407
408
@no_example ()
408
409
def navset_tab (
409
- * args : NavSetArg | MetadataNode ,
410
+ * args : NavSetArg | MetadataNode | Sequence [ MetadataNode ] ,
410
411
id : Optional [str ] = None ,
411
412
selected : Optional [str ] = None ,
412
413
header : TagChild = None ,
@@ -463,7 +464,7 @@ def navset_tab(
463
464
464
465
@no_example ()
465
466
def navset_pill (
466
- * args : NavSetArg | MetadataNode ,
467
+ * args : NavSetArg | MetadataNode | Sequence [ MetadataNode ] ,
467
468
id : Optional [str ] = None ,
468
469
selected : Optional [str ] = None ,
469
470
header : TagChild = None ,
@@ -519,7 +520,7 @@ def navset_pill(
519
520
520
521
@no_example ()
521
522
def navset_underline (
522
- * args : NavSetArg | MetadataNode ,
523
+ * args : NavSetArg | MetadataNode | Sequence [ MetadataNode ] ,
523
524
id : Optional [str ] = None ,
524
525
selected : Optional [str ] = None ,
525
526
header : TagChild = None ,
@@ -574,7 +575,7 @@ def navset_underline(
574
575
575
576
@add_example ()
576
577
def navset_hidden (
577
- * args : NavSetArg | MetadataNode ,
578
+ * args : NavSetArg | MetadataNode | Sequence [ MetadataNode ] ,
578
579
id : Optional [str ] = None ,
579
580
selected : Optional [str ] = None ,
580
581
header : TagChild = None ,
@@ -631,7 +632,7 @@ class NavSetCard(NavSet):
631
632
632
633
def __init__ (
633
634
self ,
634
- * args : NavSetArg | MetadataNode ,
635
+ * args : NavSetArg | MetadataNode | Sequence [ MetadataNode ] ,
635
636
ul_class : str ,
636
637
id : Optional [str ],
637
638
selected : Optional [str ],
@@ -686,7 +687,7 @@ def layout(self, nav: Tag, content: Tag) -> Tag:
686
687
687
688
@no_example ()
688
689
def navset_card_tab (
689
- * args : NavSetArg | MetadataNode ,
690
+ * args : NavSetArg | MetadataNode | Sequence [ MetadataNode ] ,
690
691
id : Optional [str ] = None ,
691
692
selected : Optional [str ] = None ,
692
693
title : Optional [TagChild ] = None ,
@@ -749,7 +750,7 @@ def navset_card_tab(
749
750
750
751
@no_example ()
751
752
def navset_card_pill (
752
- * args : NavSetArg | MetadataNode ,
753
+ * args : NavSetArg | MetadataNode | Sequence [ MetadataNode ] ,
753
754
id : Optional [str ] = None ,
754
755
selected : Optional [str ] = None ,
755
756
title : Optional [TagChild ] = None ,
@@ -815,7 +816,7 @@ def navset_card_pill(
815
816
816
817
@no_example ()
817
818
def navset_card_underline (
818
- * args : NavSetArg | MetadataNode ,
819
+ * args : NavSetArg | MetadataNode | Sequence [ MetadataNode ] ,
819
820
id : Optional [str ] = None ,
820
821
selected : Optional [str ] = None ,
821
822
title : Optional [TagChild ] = None ,
@@ -884,7 +885,7 @@ class NavSetPillList(NavSet):
884
885
885
886
def __init__ (
886
887
self ,
887
- * args : NavSetArg | MetadataNode ,
888
+ * args : NavSetArg | MetadataNode | Sequence [ MetadataNode ] ,
888
889
ul_class : str ,
889
890
id : Optional [str ],
890
891
selected : Optional [str ],
@@ -914,7 +915,7 @@ def layout(self, nav: TagChild, content: TagChild) -> Tag:
914
915
915
916
@no_example ()
916
917
def navset_pill_list (
917
- * args : NavSetArg | MetadataNode ,
918
+ * args : NavSetArg | MetadataNode | Sequence [ MetadataNode ] ,
918
919
id : Optional [str ] = None ,
919
920
selected : Optional [str ] = None ,
920
921
header : TagChild = None ,
@@ -991,7 +992,7 @@ class NavSetBar(NavSet):
991
992
992
993
def __init__ (
993
994
self ,
994
- * args : NavSetArg | MetadataNode ,
995
+ * args : NavSetArg | MetadataNode | Sequence [ MetadataNode ] ,
995
996
ul_class : str ,
996
997
title : TagChild ,
997
998
id : Optional [str ],
@@ -1281,7 +1282,7 @@ def navset_bar(
1281
1282
# Utilities for rendering navs
1282
1283
# -----------------------------------------------------------------------------\
1283
1284
def render_navset (
1284
- * items : NavSetArg | MetadataNode ,
1285
+ * items : NavSetArg | MetadataNode | Sequence [ MetadataNode ] ,
1285
1286
ul_class : str ,
1286
1287
id : Optional [str ],
1287
1288
selected : Optional [str ],
@@ -1290,8 +1291,21 @@ def render_navset(
1290
1291
tabsetid = private_random_int (1000 , 10000 )
1291
1292
1292
1293
# 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 ))
1295
1309
1296
1310
# If the user hasn't provided a selected value, use the first one
1297
1311
if selected is None :
0 commit comments