What we want to achieve
We want the navigation menu containing the page names to stay in the LEFT sidebar (side-menu behaviour), while the user/profile menu (toolbar: avatar, language, settings) is displayed horizontally in the TOP RIGHT corner, inside the topbar (as it is in the top-menu layout).
What we tried and what we found
- We switched provideSideMenuLayout() -> provideTopMenuLayout() and changed the layout-bundle.css path in angular.json to top-menu. This did more than we wanted: the navigation menu moved into the top bar as well. In the TopMenuLayoutComponent template, the navbar and the toolbar are both passed to the same component: <lpx-header [navbarTemplateRef]="navbarPanel?.template" [toolbarTemplateRef]="toolbar?.template" ...> So separating the two does not appear to be possible in this layout.
- In the SideMenuLayoutComponent template, .lpx-toolbar-container is not inside .lpx-topbar — it is a sibling element under #lpx-wrapper. Its CSS also pins it to the right edge: .lpx-toolbar-container { width: 72px; min-height: 100vh; position: absolute; top: 0; right: 0; bottom: 0; } As a result, whatever we provide through ng-template[lpx-toolbar-panel] is always rendered inside that right-hand strip. In the side-menu shell, the only projection point inside .lpx-topbar is ng-template[lpx-breadcrumb-panel]. There is no side-menu equivalent of the TopNavbarPanelDirective available in the top-menu shell.
- We reviewed the following and found that none of them affect the placement:
- provideSideMenuLayout() / provideTopMenuLayout() take no parameters ((): EnvironmentProviders). The Layouts enum only contains sideMenu | topMenu; there is no intermediate option.
- withThemeLeptonXOptions() / LpxOptions: no placement-related setting.
- withLpxSideMenuOptions(): only accepts containers / styleFactory / settingsMenuEventName. The SideMenuContainerDefaults values are boxed | full | fixed, i.e. content width, not placement.
- ToolbarService: manages the toolbar items (setItems/addItem/...), but does not change where the toolbar is positioned.
- <lpx-topbar-content> (TopbarContentComponent) is not part of the public API; it does not appear in the export list of @volosoft/ngx-lepton-x/layouts.
Our questions
a) Is there a supported way to move the toolbar (the profile menu) into the topbar in the side-menu layout? Is there a provider, option or panel directive we have missed above? b) Is a hybrid arrangement of this kind (navigation on the left, toolbar on top) on your roadmap? Thanks in advance.
3 Answer(s)
-
0
There is no supported (built-in) way in LeptonX Angular SideMenu layout to move the main toolbar/user-profile menu into the topbar while keeping the main navigation in the left sidebar.
In the SideMenu layout, the toolbar is intentionally rendered in the right vertical strip (thelpx-toolbar-containerarea). The theme currently doesn’t expose an option/provider/panel directive to re-place that projection point into the topbar for the SideMenu layout.What you can do instead (supported approach): create your own layout component and replace the default one.
This is the recommended way when you need a “hybrid” layout arrangement that LeptonX doesn’t support out of the box. In ABP Angular, layout/theme pieces are designed to be replaceable at the component level.Practically, this means:
- Create a custom layout component (you can copy/adapt the LeptonX SideMenu layout template).
- Modify its template so your
lpx-toolbar-panelcontent is projected into a container in the topbar (top-right), and keep the navbar/menu projection in the left sidebar. - Register your custom component via ABP Angular component replacement.
Roadmap / future support: According to ABP’s previous support response on the same request, this hybrid layout was not supported at that time, and multiple layout types were planned for the future, but there’s no confirmed/definitive configuration you can enable today for this exact hybrid placement. So: not currently supported; may be considered in future.
Sources (validated)
- https://abp.io/support/questions/3746
- https://docs.abp.io/en/abp/latest/UI/Angular/Component-Replacement
This response was generated by AI. If it didn’t solve your problem, feel free to post a new answer — our support team will jump in to help you soon.
Markdown supported.Copy, paste, or drag & drop images and files (max 100 MB per file, 100 MB total per post) -
0
Hi,
You're right, there is no option or panel directive for this. In the side-menu layout the toolbar always lands in the right-hand strip, and neither
provideSideMenuLayout()norwithLpxSideMenuOptions()can change where it goes.The way to get what you want is to keep the side-menu layout as it is and restyle
.lpx-toolbar-containerso it sits in the topbar instead of the right strip. Add this to your globalstyles.scss:@media only screen and (min-width: 768px) { .lpx-topbar { min-height: 48px; align-items: center; } .lpx-toolbar-container { position: absolute; top: 0; right: 0; bottom: auto; width: auto; min-height: 0; height: 48px; display: flex; align-items: center; gap: 1rem; padding: 0 1.25rem; background-color: transparent; } .lpx-toolbar-container .lpx-toolbar, .lpx-toolbar-container .lpx-settings { position: static; width: auto; min-width: 0; } .lpx-toolbar-container nav.lpx-toolbar > .lpx-nav-menu, .lpx-toolbar-container .lpx-settings { display: flex; flex-direction: row; align-items: center; gap: 1rem; margin: 0; padding: 0; } .lpx-toolbar-container .lpx-user-menu { margin: 0; } .lpx-toolbar-container .lpx-user-menu .lpx-menu-item-link { display: flex; align-items: center; gap: 0.5rem; height: auto; width: auto; padding: 0; } .lpx-toolbar-container .lpx-user-menu .lpx-menu-item-link .lpx-menu-item-text { display: inline; width: auto !important; margin: 0; font-size: 0.875rem; line-height: 1; text-align: left; } .lpx-toolbar-container .lpx-user-menu .lpx-avatar .lpx-avatar-img, .lpx-toolbar-container .lpx-user-menu .lpx-avatar .lpx-avatar-icon { width: 28px; height: 28px; margin: 0; font-size: 15px; border-radius: 28px; } .lpx-toolbar-container .lpx-settings .setting-icon { height: auto; font-size: 1rem; } .lpx-toolbar-container .lpx-context-menu { top: 100%; right: 1.25rem; bottom: auto; margin: 0; } .lpx-content-container { margin-right: 0; } .lpx-footbar-container { right: 0; } }The avatar, the user context menu, the language and settings dropdowns all keep working — they are the same components, just laid out horizontally. A few notes on the rules, since most of them exist to undo something:
- The default topbar is shorter than the toolbar row, so
.lpx-topbargets amin-heightand centers its children. .lpx-user-menucarries amargin-top, a fixedheight: 72pxlink and awidth: 72px !importantlabel, all of it sized for the 72px vertical strip. Leave any of those in and the avatar sits ~10px below the settings icons and pushes the row out of the topbar.- The
.lpx-nav-menurules are scoped withnav.lpx-toolbar >on purpose. Drop that part and they also hit the menus inside the dropdowns, which then render as a full-width row. - The last two rules give the content area back the 72px that was reserved for the strip.
- Everything sits in a
min-width: 768pxquery, so the mobile navbar is untouched.
Tune
height,gapandpaddingto taste. Since this overrides theme CSS, give it a quick look when you upgrade LeptonX.On the hybrid layout as a built-in option — there is no plan for it at the moment.
Thanks
Markdown supported.Copy, paste, or drag & drop images and files (max 100 MB per file, 100 MB total per post) - The default topbar is shorter than the toolbar row, so

