@@ -20,7 +20,7 @@ import { hiddenPropertyView } from "comps/utils/propertyUtils";
2020import { dropdownControl } from "@lowcoder-ee/comps/controls/dropdownControl" ;
2121import { DataOption , DataOptionType , menuItemStyleOptions , mobileNavJsonMenuItems , MobileModeOptions , MobileMode , HamburgerPositionOptions , DrawerPlacementOptions } from "./navLayoutConstants" ;
2222import { styleControl } from "@lowcoder-ee/comps/controls/styleControl" ;
23- import { NavLayoutItemActiveStyle , NavLayoutItemActiveStyleType , NavLayoutItemHoverStyle , NavLayoutItemHoverStyleType , NavLayoutItemStyle , NavLayoutItemStyleType , NavLayoutStyle , NavLayoutStyleType } from "@lowcoder-ee/comps/controls/styleControlConstants" ;
23+ import { HamburgerButtonStyle , DrawerContainerStyle , NavLayoutItemActiveStyle , NavLayoutItemActiveStyleType , NavLayoutItemHoverStyle , NavLayoutItemHoverStyleType , NavLayoutItemStyle , NavLayoutItemStyleType , NavLayoutStyle , NavLayoutStyleType } from "@lowcoder-ee/comps/controls/styleControlConstants" ;
2424import Segmented from "antd/es/segmented" ;
2525import { controlItem } from "components/control" ;
2626import { check } from "@lowcoder-ee/util/convertUtils" ;
@@ -72,15 +72,23 @@ const HamburgerButton = styled.button<{
7272$size :string ;
7373$position :string ; // bottom-right | bottom-left | top-right | top-left
7474$zIndex :number ;
75+ $background ?:string ;
76+ $borderColor ?:string ;
77+ $radius ?:string ;
78+ $margin ?:string ;
79+ $padding ?:string ;
80+ $borderWidth ?:string ;
7581} > `
7682 position: fixed;
7783${ ( props ) => ( props . $position . includes ( 'bottom' ) ?'bottom: 16px;' :'top: 16px;' ) }
7884${ ( props ) => ( props . $position . includes ( 'right' ) ?'right: 16px;' :'left: 16px;' ) }
7985 width:${ ( props ) => props . $size } ;
8086 height:${ ( props ) => props . $size } ;
81- border-radius: 50%;
82- border: 1px solid rgba(0,0,0,0.1);
83- background: white;
87+ border-radius:${ ( props ) => props . $radius || '50%' } ;
88+ border:${ ( props ) => props . $borderWidth || '1px' } solid${ ( props ) => props . $borderColor || 'rgba(0,0,0,0.1)' } ;
89+ background:${ ( props ) => props . $background || 'white' } ;
90+ margin:${ ( props ) => props . $margin || '0px' } ;
91+ padding:${ ( props ) => props . $padding || '0px' } ;
8492 display: flex;
8593 align-items: center;
8694 justify-content: center;
@@ -108,16 +116,34 @@ const BurgerIcon = styled.div<{
108116 &::after { top: 6px; }
109117` ;
110118
119+ const IconWrapper = styled . div < {
120+ $iconColor ?:string ;
121+ } > `
122+ display: inline-flex;
123+ align-items: center;
124+ justify-content: center;
125+ svg {
126+ color:${ ( p ) => p . $iconColor || 'inherit' } ;
127+ fill:${ ( p ) => p . $iconColor || 'currentColor' } ;
128+ }
129+ ` ;
130+
111131const DrawerContent = styled . div < {
112132$background :string ;
133+ $padding ?:string ;
134+ $borderColor ?:string ;
135+ $borderWidth ?:string ;
136+ $margin ?:string ;
113137} > `
114138 background:${ ( p ) => p . $background } ;
115139 width: 100%;
116140 height: 100%;
117141 display: flex;
118142 flex-direction: column;
119- padding: 12px;
143+ padding:${ ( p ) => p . $padding || '12px' } ;
144+ margin:${ ( p ) => p . $margin || '0px' } ;
120145 box-sizing: border-box;
146+ border:${ ( p ) => p . $borderWidth || '1px' } solid${ ( p ) => p . $borderColor || 'transparent' } ;
121147` ;
122148
123149const DrawerHeader = styled . div `
@@ -425,7 +451,7 @@ function renderHamburgerLayoutSection(children: any): any {
425451const drawerPlacement = children . drawerPlacement . getView ( ) ;
426452return (
427453< >
428- { children . hamburgerIcon . propertyView ( { label :"MenuIcon " } ) }
454+ { children . hamburgerIcon . propertyView ( { label :"Menu Icon " } ) }
429455{ children . drawerCloseIcon . propertyView ( { label :"Close Icon" } ) }
430456{ children . hamburgerPosition . propertyView ( { label :"Hamburger Position" } ) }
431457{ children . hamburgerSize . propertyView ( { label :"Hamburger Size" } ) }
@@ -462,6 +488,8 @@ function renderVerticalLayoutSection(children: any): any {
462488) ;
463489}
464490
491+
492+
465493let MobileTabLayoutTmp = ( function ( ) {
466494const childrenMap = {
467495onEvent :eventHandlerControl ( EventOptions ) ,
@@ -492,7 +520,7 @@ let MobileTabLayoutTmp = (function () {
492520drawerCloseIcon :IconControl ,
493521hamburgerPosition :dropdownControl ( HamburgerPositionOptions , "bottom-right" ) ,
494522hamburgerSize :withDefault ( StringControl , "56px" ) ,
495- drawerPlacement :dropdownControl ( DrawerPlacementOptions , "bottom " ) ,
523+ drawerPlacement :dropdownControl ( DrawerPlacementOptions , "right " ) ,
496524drawerHeight :withDefault ( StringControl , "60%" ) ,
497525drawerWidth :withDefault ( StringControl , "250px" ) ,
498526shadowOverlay :withDefault ( BoolCodeControl , true ) ,
@@ -506,6 +534,8 @@ let MobileTabLayoutTmp = (function () {
506534navItemStyle :styleControl ( NavLayoutItemStyle , 'navItemStyle' ) ,
507535navItemHoverStyle :styleControl ( NavLayoutItemHoverStyle , 'navItemHoverStyle' ) ,
508536navItemActiveStyle :styleControl ( NavLayoutItemActiveStyle , 'navItemActiveStyle' ) ,
537+ hamburgerButtonStyle :styleControl ( HamburgerButtonStyle , 'hamburgerButtonStyle' ) ,
538+ drawerContainerStyle :styleControl ( DrawerContainerStyle , 'drawerContainerStyle' ) ,
509539} ;
510540return new MultiCompBuilder ( childrenMap , ( props , dispatch ) => {
511541return null ;
@@ -524,10 +554,18 @@ let MobileTabLayoutTmp = (function () {
524554 ?renderHamburgerLayoutSection ( children )
525555 :renderVerticalLayoutSection ( children ) }
526556</ Section >
527- < Section name = { trans ( "navLayout.navStyle" ) } >
528- { children . navStyle . getPropertyView ( ) }
529- </ Section >
530- < Section name = { trans ( "navLayout.navItemStyle" ) } >
557+ { ! isHamburgerMode && (
558+ < Section name = { trans ( "navLayout.navStyle" ) } >
559+ { children . navStyle . getPropertyView ( ) }
560+ </ Section >
561+ ) }
562+
563+ { isHamburgerMode && (
564+ < Section name = { "Hamburger Button Style" } >
565+ { children . hamburgerButtonStyle . getPropertyView ( ) }
566+ </ Section >
567+ ) }
568+ < Section name = { isHamburgerMode ?"Drawer Item Style" :trans ( "navLayout.navItemStyle" ) } >
531569{ controlItem ( { } , (
532570< Segmented
533571block
@@ -540,6 +578,11 @@ let MobileTabLayoutTmp = (function () {
540578{ styleSegment === 'hover' && children . navItemHoverStyle . getPropertyView ( ) }
541579{ styleSegment === 'active' && children . navItemActiveStyle . getPropertyView ( ) }
542580</ Section >
581+ { isHamburgerMode && (
582+ < Section name = { "Drawer Container Style" } >
583+ { children . drawerContainerStyle . getPropertyView ( ) }
584+ </ Section >
585+ ) }
543586</ >
544587) ;
545588} )
@@ -563,6 +606,7 @@ MobileTabLayoutTmp = withViewFn(MobileTabLayoutTmp, (comp) => {
563606const hamburgerSize = comp . children . hamburgerSize . getView ( ) ;
564607const hamburgerIconComp = comp . children . hamburgerIcon ;
565608const drawerCloseIconComp = comp . children . drawerCloseIcon ;
609+ const hamburgerButtonStyle = comp . children . hamburgerButtonStyle . getView ( ) ;
566610const drawerPlacement = comp . children . drawerPlacement . getView ( ) ;
567611const drawerHeight = comp . children . drawerHeight . getView ( ) ;
568612const drawerWidth = comp . children . drawerWidth . getView ( ) ;
@@ -572,6 +616,7 @@ MobileTabLayoutTmp = withViewFn(MobileTabLayoutTmp, (comp) => {
572616const maxWidth = comp . children . maxWidth . getView ( ) ;
573617const verticalAlignment = comp . children . verticalAlignment . getView ( ) ;
574618const showSeparator = comp . children . showSeparator . getView ( ) ;
619+ const drawerContainerStyle = comp . children . drawerContainerStyle . getView ( ) ;
575620const bgColor = ( useContext ( ThemeContext ) ?. theme || defaultTheme ) . canvas ;
576621const onEvent = comp . children . onEvent . getView ( ) ;
577622
@@ -626,6 +671,21 @@ MobileTabLayoutTmp = withViewFn(MobileTabLayoutTmp, (comp) => {
626671backgroundStyle = `center / cover url('${ backgroundImage } ') no-repeat,${ backgroundStyle } ` ;
627672}
628673
674+ const navigateToApp = ( nextIndex :number ) => {
675+ if ( dataOptionType === DataOption . Manual ) {
676+ const selectedTab = tabViews [ nextIndex ] ;
677+ if ( selectedTab ) {
678+ const url = [
679+ ALL_APPLICATIONS_URL ,
680+ pathParam . applicationId ,
681+ pathParam . viewMode ,
682+ nextIndex ,
683+ ] . join ( "/" ) ;
684+ selectedTab . children . action . act ( url ) ;
685+ }
686+ }
687+ } ;
688+
629689const tabBarView = (
630690< TabBarView
631691onEvent = { onEvent }
@@ -641,18 +701,7 @@ MobileTabLayoutTmp = withViewFn(MobileTabLayoutTmp, (comp) => {
641701const nextIndex = Number ( key ) ;
642702setTabIndex ( nextIndex ) ;
643703// push URL with query/hash params
644- if ( dataOptionType === DataOption . Manual ) {
645- const selectedTab = tabViews [ nextIndex ] ;
646- if ( selectedTab ) {
647- const url = [
648- ALL_APPLICATIONS_URL ,
649- pathParam . applicationId ,
650- pathParam . viewMode ,
651- nextIndex ,
652- ] . join ( "/" ) ;
653- selectedTab . children . action . act ( url ) ;
654- }
655- }
704+ navigateToApp ( nextIndex ) ;
656705} }
657706readOnly = { ! ! readOnly }
658707canvasBg = { bgColor }
@@ -682,11 +731,21 @@ MobileTabLayoutTmp = withViewFn(MobileTabLayoutTmp, (comp) => {
682731$size = { hamburgerSize }
683732$position = { hamburgerPosition }
684733$zIndex = { Layers . tabBar + 1 }
734+ $background = { hamburgerButtonStyle ?. background }
735+ $borderColor = { hamburgerButtonStyle ?. border }
736+ $radius = { hamburgerButtonStyle ?. radius }
737+ $margin = { hamburgerButtonStyle ?. margin }
738+ $padding = { hamburgerButtonStyle ?. padding }
739+ $borderWidth = { hamburgerButtonStyle ?. borderWidth }
685740onClick = { ( ) => setDrawerVisible ( true ) }
686741>
687- { hamburgerIconComp . toJsonValue ( )
688- ?hamburgerIconComp . getView ( )
689- :< BurgerIcon $lineColor = { navStyle . text } /> }
742+ { hamburgerIconComp . toJsonValue ( ) ?(
743+ < IconWrapper $iconColor = { hamburgerButtonStyle ?. iconFill } >
744+ { hamburgerIconComp . getView ( ) }
745+ </ IconWrapper >
746+ ) :(
747+ < BurgerIcon $lineColor = { hamburgerButtonStyle ?. iconFill || navStyle . text } />
748+ ) }
690749</ HamburgerButton >
691750) ;
692751
@@ -707,7 +766,13 @@ MobileTabLayoutTmp = withViewFn(MobileTabLayoutTmp, (comp) => {
707766mask = { shadowOverlay }
708767bodyStyle = { drawerBodyStyle }
709768>
710- < DrawerContent $background = { backgroundStyle } >
769+ < DrawerContent
770+ $background = { drawerContainerStyle ?. background || '#FFFFFF' }
771+ $padding = { drawerContainerStyle ?. padding }
772+ $borderColor = { drawerContainerStyle ?. border }
773+ $borderWidth = { drawerContainerStyle ?. borderWidth }
774+ $margin = { drawerContainerStyle ?. margin }
775+ >
711776< DrawerHeader >
712777< DrawerCloseButton
713778aria-label = "Close"
@@ -732,6 +797,7 @@ MobileTabLayoutTmp = withViewFn(MobileTabLayoutTmp, (comp) => {
732797setTabIndex ( index ) ;
733798setDrawerVisible ( false ) ;
734799onEvent ( 'click' ) ;
800+ navigateToApp ( index ) ;
735801} }
736802>
737803{ tab . children . icon . toJsonValue ( ) ?(