Skip to content

Commit 7a287a1

Browse files
authored
feat(ui5-menu): introduce HorizontalAlign property (#11313)
This change introduces a new `horizontalAlign` property to `ui5-menu`, similar to what's available in `ui5-popover`. It allows users to control the menu's horizontal alignment. The default value is `start`, but it can also be set to `end`, `center`, or `stretch`. Usage: Setting the property to end as follows will align the menu to the end of the opener button: ```HTML <ui5-menu horizontal-align="End"> <ui5-menu-item ... </ui5-menu> ``` Fixes: #10765
1 parent 22d7d2f commit 7a287a1

File tree

4 files changed

+39
-4
lines changed

4 files changed

+39
-4
lines changed

Diff for: packages/main/src/Menu.ts

+11-2
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ import type { Timeout } from "@ui5/webcomponents-base/dist/types.js";
2424
import { renderFinished } from "@ui5/webcomponents-base/dist/Render.js";
2525
import DOMReferenceConverter from "@ui5/webcomponents-base/dist/converters/DOMReference.js";
2626
import type ResponsivePopover from "./ResponsivePopover.js";
27+
import type PopoverHorizontalAlign from "./types/PopoverHorizontalAlign.js";
2728
import type MenuItem from "./MenuItem.js";
2829
import "./MenuItem.js";
2930
import "./MenuSeparator.js";
@@ -184,14 +185,22 @@ class Menu extends UI5Element {
184185
headerText?: string;
185186

186187
/**
187-
* Indicates if the menu is open
188+
* Indicates if the menu is open.
188189
* @public
189190
* @default false
190191
* @since 1.10.0
191192
*/
192193
@property({ type: Boolean })
193194
open = false;
194195

196+
/**
197+
* Determines the horizontal alignment of the menu relative to its opener control.
198+
* @default "Start"
199+
* @public
200+
*/
201+
@property()
202+
horizontalAlign: `${PopoverHorizontalAlign}` = "Start";
203+
195204
/**
196205
* Defines if a loading indicator would be displayed inside the corresponding ui5-menu popover.
197206
* @default false
@@ -202,7 +211,7 @@ class Menu extends UI5Element {
202211
loading = false;
203212

204213
/**
205-
* Defines the delay in milliseconds, after which the loading indicator will be displayed inside the corresponding ui5-menu popover..
214+
* Defines the delay in milliseconds, after which the loading indicator will be displayed inside the corresponding ui5-menu popover.
206215
* @default 1000
207216
* @public
208217
* @since 1.13.0

Diff for: packages/main/src/MenuTemplate.tsx

+1
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ export default function MenuTemplate(this: Menu) {
1212
class="ui5-menu-rp"
1313
placement="Bottom"
1414
verticalAlign="Bottom"
15+
horizontalAlign={this.horizontalAlign}
1516
opener={this.opener}
1617
open={this.open}
1718
preventInitialFocus={true}

Diff for: packages/main/test/pages/Menu.html

+26-1
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,14 @@
1212
<link rel="stylesheet" type="text/css" href="./styles/Menu.css">
1313
</head>
1414

15+
<style>
16+
.center-content {
17+
display: flex;
18+
justify-content: center;
19+
align-items: center;
20+
}
21+
</style>
22+
1523
<body class="bg">
1624
<ui5-button id="btnOpen">Open Menu</ui5-button> <br/>
1725
<ui5-menu id="menu" header-text="My ui5-menu">
@@ -116,7 +124,19 @@
116124
</ui5-popover>
117125

118126

119-
<ui5-button id="btnAddOpenerDelay">Delayed</ui5-button>
127+
<ui5-button id="btnAddOpenerDelay">Delayed</ui5-button> <br/><br/>
128+
129+
<ui5-title level="H5" class="header-title">Menu with right alignment</ui5-title>
130+
131+
<div class="center-content">
132+
<ui5-button id="btnOpenRight">Open Menu</ui5-button> <br/>
133+
</div>
134+
135+
<ui5-menu id="menuRight" header-text="Menu" horizontal-align="End">
136+
<ui5-menu-item text="Open" icon="open-folder"></ui5-menu-item>
137+
<ui5-menu-separator></ui5-menu-separator>
138+
<ui5-menu-item text="Close" additional-text="Ctrl+W" ></ui5-menu-item>
139+
</ui5-menu>
120140

121141
<script>
122142
btnOpen.accessibilityAttributes = {
@@ -133,6 +153,11 @@
133153
menuEndContent.open = !menu.open;
134154
});
135155

156+
btnOpenRight.addEventListener ("click", function() {
157+
menuRight.opener = "btnOpenRight";
158+
menuRight.open = !menuRight.open;
159+
});
160+
136161
btnAddOpener.addEventListener("click", function() {
137162
menu.opener="btnToggleOpen";
138163
});

Diff for: packages/website/docs/_samples/patterns/AIQuickPrompt/sample.html

+1-1
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@
3939
<ui5-toast placement="MiddleCenter" id="quickPromptToast" duration="3000">Your message was sent successfully!</ui5-toast>
4040
</ui5-card>
4141

42-
<ui5-menu id="menu1">
42+
<ui5-menu id="menu1" horizontal-align="End">
4343
<ui5-menu-item text="Regenerate"></ui5-menu-item>
4444
<ui5-menu-separator></ui5-menu-separator>
4545
<ui5-menu-item text="Fix Spelling and Grammar"></ui5-menu-item>

0 commit comments

Comments
 (0)