33from typing import Literal
44
55from reflex .components .component import Component , ComponentNamespace
6- from reflex .components .core .foreach import foreach
76from reflex .event import EventHandler , passthrough_event_spec
87from reflex .utils .imports import ImportVar
98from reflex .vars .base import Var
109
11- from reflex_ui .components .base .button import button
1210from reflex_ui .components .base_ui import PACKAGE_NAME , BaseUIComponent
13- from reflex_ui .utils .twmerge import cn
1411
1512LiteralNavigationMenuOrientation = Literal ["horizontal" , "vertical" ]
1613LiteralSide = Literal ["top" , "right" , "bottom" , "left" ]
@@ -305,90 +302,6 @@ def create(cls, *children, **props) -> BaseUIComponent:
305302 return super ().create (* children , ** props )
306303
307304
308- class HighLevelNavigationMenu (NavigationMenuRoot ):
309- """High level wrapper for the NavigationMenu component."""
310-
311- # The list of items to display in the navigation menu - can be strings or tuples of (label, on_click_handler)
312- items : Var [list [str | tuple [str , EventHandler ]]]
313-
314- # Props for different component parts
315- _item_props = {"value" }
316- _trigger_props = {"disabled" }
317- _content_props = {}
318- _link_props = {"active" }
319- _positioner_props = {
320- "align" ,
321- "align_offset" ,
322- "side" ,
323- "arrow_padding" ,
324- "collision_padding" ,
325- "sticky" ,
326- "position_method" ,
327- "track_anchor" ,
328- "side_offset" ,
329- "collision_avoidance" ,
330- }
331- _portal_props = {"container" }
332-
333- @classmethod
334- def create (cls , * children , ** props ) -> BaseUIComponent :
335- """Create a navigation menu component.
336-
337- Args:
338- *children: Additional children to include in the navigation menu.
339- **props: Additional properties to apply to the navigation menu component.
340-
341- Returns:
342- The navigation menu component.
343- """
344- # Extract props for different parts
345- item_props = {k : props .pop (k ) for k in cls ._item_props & props .keys ()}
346- trigger_props = {k : props .pop (k ) for k in cls ._trigger_props & props .keys ()}
347- content_props = {k : props .pop (k ) for k in cls ._content_props & props .keys ()}
348- link_props = {k : props .pop (k ) for k in cls ._link_props & props .keys ()}
349- positioner_props = {
350- k : props .pop (k ) for k in cls ._positioner_props & props .keys ()
351- }
352- portal_props = {k : props .pop (k ) for k in cls ._portal_props & props .keys ()}
353-
354- items = props .pop ("items" , [])
355-
356- def create_navigation_menu_item (item : str | tuple [str , EventHandler ], index : int = 0 ) -> BaseUIComponent :
357- if isinstance (item , tuple ):
358- label , on_click_handler = item
359- return button (
360- label ,
361- variant = "ghost" ,
362- class_name = ClassNames .TRIGGER ,
363- disabled = props .get ("disabled" , False ),
364- on_click = on_click_handler ,
365- key = f"nav-item-{ index } " ,
366- )
367- return button (
368- item ,
369- variant = "ghost" ,
370- class_name = ClassNames .TRIGGER ,
371- disabled = props .get ("disabled" , False ),
372- key = f"nav-item-{ index } " ,
373- )
374-
375- if isinstance (items , Var ):
376- items_children = foreach (items , lambda item , index : create_navigation_menu_item (item , index ))
377- else :
378- items_children = [create_navigation_menu_item (item , i ) for i , item in enumerate (items )]
379-
380- from reflex .components .tags import nav , div
381-
382- return nav (
383- div (
384- * items_children ,
385- class_name = ClassNames .LIST ,
386- ),
387- class_name = ClassNames .ROOT ,
388- ** props ,
389- )
390-
391-
392305class NavigationMenu (ComponentNamespace ):
393306 """Namespace for NavigationMenu components."""
394307
@@ -405,7 +318,6 @@ class NavigationMenu(ComponentNamespace):
405318 viewport = staticmethod (NavigationMenuViewport .create )
406319 arrow = staticmethod (NavigationMenuArrow .create )
407320 backdrop = staticmethod (NavigationMenuBackdrop .create )
408- __call__ = staticmethod (HighLevelNavigationMenu .create )
409321
410322
411323navigation_menu = NavigationMenu ()
0 commit comments