Skip to content

Commit 1dfdc7c

Browse files
committed
Merge branch 'main' into select-dropdown-button-height
2 parents 8d9ca5b + 5a4402b commit 1dfdc7c

194 files changed

Lines changed: 7160 additions & 3411 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

CHANGELOG.md

Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,74 @@
33
All notable changes to this project will be documented in this file.
44
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
55

6+
# [2.22.0-rc.4](https://github.com/UI5/webcomponents/compare/v2.22.0-rc.3...v2.22.0-rc.4) (2026-05-07)
7+
8+
9+
### Bug Fixes
10+
11+
* **ui5-calendar:** next and previous header buttons are triggered by Space and Enter ([#13435](https://github.com/UI5/webcomponents/issues/13435)) ([f7468e1](https://github.com/UI5/webcomponents/commit/f7468e1e3d9082fcabfe03629f2cb795a45f736a))
12+
* **ui5-color-palette-item, ui5-segmented-button-item:** provide correct click event details ([#13458](https://github.com/UI5/webcomponents/issues/13458)) ([2286f10](https://github.com/UI5/webcomponents/commit/2286f1002a723d1a5a7fd2795ac52a4e7181ed92))
13+
* **ui5-timeline-header-bar:** remove unused property ([#13451](https://github.com/UI5/webcomponents/issues/13451)) ([18da0e5](https://github.com/UI5/webcomponents/commit/18da0e57c1c50bb75badb3a9cfb49e8faadd8842))
14+
* validate correctly protocol relative urls ([#13447](https://github.com/UI5/webcomponents/issues/13447)) ([c765630](https://github.com/UI5/webcomponents/commit/c7656304d7a3ad74c2c58d6937163262c4f40177))
15+
16+
17+
### Features
18+
19+
* **ui5-avatar-badge:** rename accessibleName to tooltip and simplify tooltip rendering ([#13442](https://github.com/UI5/webcomponents/issues/13442)) ([c8e0c4a](https://github.com/UI5/webcomponents/commit/c8e0c4adec21da1f7a8b107fa4e6fedcae1cd51e))
20+
* **ui5-toolbar:** introduce overflowButtonAccessibleName property ([#13416](https://github.com/UI5/webcomponents/issues/13416)) ([c597536](https://github.com/UI5/webcomponents/commit/c597536079dcd889703c9b4ef9168f3eda0827a2)), closes [#11968](https://github.com/UI5/webcomponents/issues/11968)
21+
22+
23+
24+
25+
26+
# [2.22.0-rc.3](https://github.com/UI5/webcomponents/compare/v2.22.0-rc.2...v2.22.0-rc.3) (2026-04-30)
27+
28+
29+
### Bug Fixes
30+
31+
* **ui5-card:** remove max-height constraint from subtitle to prevent text clipping for tall-character languages ([#13413](https://github.com/UI5/webcomponents/issues/13413)) ([1bfa9ee](https://github.com/UI5/webcomponents/commit/1bfa9ee96057d4e949924ed23986cf267f83309a)), closes [#13379](https://github.com/UI5/webcomponents/issues/13379)
32+
* **ui5-date-range-picker:** remove relative date handling ([#13365](https://github.com/UI5/webcomponents/issues/13365)) ([5694559](https://github.com/UI5/webcomponents/commit/5694559838482defe6d3b66e04b2e97154b54e7e))
33+
* **ui5-date-range-picker:** stabilize tests ([#13432](https://github.com/UI5/webcomponents/issues/13432)) ([6d2f572](https://github.com/UI5/webcomponents/commit/6d2f57218848a3bf24d60eb2b918c1af06216230))
34+
* **ui5-select:** fix active state of select when opened ([#13407](https://github.com/UI5/webcomponents/issues/13407)) ([58f2f58](https://github.com/UI5/webcomponents/commit/58f2f58af8ca22fa557eee00fecda8b2c8882e59))
35+
* **ui5-suggestion-item-custom:** improve accessibility of custom sugg… ([#13436](https://github.com/UI5/webcomponents/issues/13436)) ([a923725](https://github.com/UI5/webcomponents/commit/a92372594c1e4675740477bc7fbfd7b3e5bb2055))
36+
37+
38+
### Features
39+
40+
* **ui5-color-palette-item:** introduce semantic click ([#13409](https://github.com/UI5/webcomponents/issues/13409)) ([6055d6c](https://github.com/UI5/webcomponents/commit/6055d6c1136d5ecc1ad07cfcb34e8923115b18e2))
41+
* **ui5-input:** announce expanded/collapsed state for suggestions ([#13431](https://github.com/UI5/webcomponents/issues/13431)) ([9c0d1c3](https://github.com/UI5/webcomponents/commit/9c0d1c3727cc43c5646e7f62da7a86f5a4da566d))
42+
* **ui5-input:** show associated label as mobile dialog header title ([#13412](https://github.com/UI5/webcomponents/issues/13412)) ([a904c5e](https://github.com/UI5/webcomponents/commit/a904c5e0cd9f61bce5caac3f9c55e9d3c37be893))
43+
* **ui5-segmented-button-item:** introduce semantic click event ([#13396](https://github.com/UI5/webcomponents/issues/13396)) ([f47c28e](https://github.com/UI5/webcomponents/commit/f47c28e6690defce89d115855ab85f0911f473f6))
44+
* **ui5-textarea:** implement composition handling ([#13422](https://github.com/UI5/webcomponents/issues/13422)) ([fec44d7](https://github.com/UI5/webcomponents/commit/fec44d74d724b0dadc513d04701252f3aad23890))
45+
46+
47+
48+
49+
50+
# [2.22.0-rc.2](https://github.com/UI5/webcomponents/compare/v2.22.0-rc.1...v2.22.0-rc.2) (2026-04-23)
51+
52+
53+
### Bug Fixes
54+
55+
* **ui5-avatar-badge:** handle delayed icon collection loading ([#13405](https://github.com/UI5/webcomponents/issues/13405)) ([e4fba6a](https://github.com/UI5/webcomponents/commit/e4fba6a4618104a53728e06bf88d91775d6f4e7c)), closes [#13401](https://github.com/UI5/webcomponents/issues/13401)
56+
* **ui5-combobox:** set selectedValue correctly on change ([#13426](https://github.com/UI5/webcomponents/issues/13426)) ([fe51b7d](https://github.com/UI5/webcomponents/commit/fe51b7dc9255bb5b2e30f1be61374187c2abfbf0))
57+
* **ui5-input:** enhance documentation ([#13424](https://github.com/UI5/webcomponents/issues/13424)) ([eae39b1](https://github.com/UI5/webcomponents/commit/eae39b178716c47bf31325127070b0b0f5198131))
58+
* **ui5-multi-combobox:** clear value state error on item selection ([#13404](https://github.com/UI5/webcomponents/issues/13404)) ([d40fff6](https://github.com/UI5/webcomponents/commit/d40fff65cf637b48a0a2c56fc3e9c1d36e244b18)), closes [#13385](https://github.com/UI5/webcomponents/issues/13385)
59+
* **ui5-select:** correct focus styling for read-only state ([#13400](https://github.com/UI5/webcomponents/issues/13400)) ([4ac0d74](https://github.com/UI5/webcomponents/commit/4ac0d7484206721ee302dbba5ebfdf014341bcc4)), closes [#13309](https://github.com/UI5/webcomponents/issues/13309)
60+
* **ui5-shellbar-search:** fire search on mobile devices on search icon press ([#13410](https://github.com/UI5/webcomponents/issues/13410)) ([4de2083](https://github.com/UI5/webcomponents/commit/4de208302675ab036ba72ee8e6dce3a07c4a02bf))
61+
* **ui5-step-input:** adjust z-index and fix focus issues ([#13391](https://github.com/UI5/webcomponents/issues/13391)) ([df9a5da](https://github.com/UI5/webcomponents/commit/df9a5dac97d561c9c7434d75a94d0411d1845c81)), closes [#7709](https://github.com/UI5/webcomponents/issues/7709)
62+
63+
64+
### Features
65+
66+
* **ui5-avatar-badge:** add accessibleName property for custom tooltip ([#13390](https://github.com/UI5/webcomponents/issues/13390)) ([4f1f6f0](https://github.com/UI5/webcomponents/commit/4f1f6f0bebe5b990edc0a648bf70c3888e040f7c))
67+
* **ui5-switch:** accessibility is enhanced for readonly state. ([#13367](https://github.com/UI5/webcomponents/issues/13367)) ([b43f56e](https://github.com/UI5/webcomponents/commit/b43f56eb4aad113e4672b461d8d8a14c19bfc536))
68+
* **ui5-timeline-item:** introduce iconTooltip property ([#13387](https://github.com/UI5/webcomponents/issues/13387)) ([663fc51](https://github.com/UI5/webcomponents/commit/663fc5121215d4944eb9e86c188c8afd99ff8552)), closes [#12238](https://github.com/UI5/webcomponents/issues/12238)
69+
70+
71+
72+
73+
674
# [2.22.0-rc.1](https://github.com/UI5/webcomponents/compare/v2.22.0-rc.0...v2.22.0-rc.1) (2026-04-16)
775

876

lerna.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
"packages/create-package",
1515
"packages/compat"
1616
],
17-
"version": "2.22.0-rc.1",
17+
"version": "2.22.0-rc.4",
1818
"command": {
1919
"publish": {
2020
"allowBranch": "*",

packages/ai/CHANGELOG.md

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,30 @@
33
All notable changes to this project will be documented in this file.
44
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
55

6+
# [2.22.0-rc.4](https://github.com/UI5/webcomponents/compare/v2.22.0-rc.3...v2.22.0-rc.4) (2026-05-07)
7+
8+
**Note:** Version bump only for package @ui5/webcomponents-ai
9+
10+
11+
12+
13+
14+
# [2.22.0-rc.3](https://github.com/UI5/webcomponents/compare/v2.22.0-rc.2...v2.22.0-rc.3) (2026-04-30)
15+
16+
**Note:** Version bump only for package @ui5/webcomponents-ai
17+
18+
19+
20+
21+
22+
# [2.22.0-rc.2](https://github.com/UI5/webcomponents/compare/v2.22.0-rc.1...v2.22.0-rc.2) (2026-04-23)
23+
24+
**Note:** Version bump only for package @ui5/webcomponents-ai
25+
26+
27+
28+
29+
630
# [2.22.0-rc.1](https://github.com/UI5/webcomponents/compare/v2.22.0-rc.0...v2.22.0-rc.1) (2026-04-16)
731

832
**Note:** Version bump only for package @ui5/webcomponents-ai

packages/ai/package.json

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@ui5/webcomponents-ai",
3-
"version": "2.22.0-rc.1",
3+
"version": "2.22.0-rc.4",
44
"description": "UI5 Web Components: webcomponents.ai",
55
"ui5": {
66
"webComponentsPackage": true
@@ -48,15 +48,15 @@
4848
"directory": "packages/ai"
4949
},
5050
"dependencies": {
51-
"@ui5/webcomponents": "2.22.0-rc.1",
52-
"@ui5/webcomponents-base": "2.22.0-rc.1",
53-
"@ui5/webcomponents-icons": "2.22.0-rc.1",
54-
"@ui5/webcomponents-theming": "2.22.0-rc.1"
51+
"@ui5/webcomponents": "2.22.0-rc.4",
52+
"@ui5/webcomponents-base": "2.22.0-rc.4",
53+
"@ui5/webcomponents-icons": "2.22.0-rc.4",
54+
"@ui5/webcomponents-theming": "2.22.0-rc.4"
5555
},
5656
"devDependencies": {
5757
"@custom-elements-manifest/analyzer": "^0.10.10",
5858
"@ui5/cypress-internal": "0.1.0",
59-
"@ui5/webcomponents-tools": "2.22.0-rc.1",
59+
"@ui5/webcomponents-tools": "2.22.0-rc.4",
6060
"cypress": "15.9.0",
6161
"vite": "5.4.21"
6262
}

packages/base/CHANGELOG.md

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,33 @@
33
All notable changes to this project will be documented in this file.
44
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
55

6+
# [2.22.0-rc.4](https://github.com/UI5/webcomponents/compare/v2.22.0-rc.3...v2.22.0-rc.4) (2026-05-07)
7+
8+
9+
### Bug Fixes
10+
11+
* validate correctly protocol relative urls ([#13447](https://github.com/UI5/webcomponents/issues/13447)) ([c765630](https://github.com/UI5/webcomponents/commit/c7656304d7a3ad74c2c58d6937163262c4f40177))
12+
13+
14+
15+
16+
17+
# [2.22.0-rc.3](https://github.com/UI5/webcomponents/compare/v2.22.0-rc.2...v2.22.0-rc.3) (2026-04-30)
18+
19+
**Note:** Version bump only for package @ui5/webcomponents-base
20+
21+
22+
23+
24+
25+
# [2.22.0-rc.2](https://github.com/UI5/webcomponents/compare/v2.22.0-rc.1...v2.22.0-rc.2) (2026-04-23)
26+
27+
**Note:** Version bump only for package @ui5/webcomponents-base
28+
29+
30+
31+
32+
633
# [2.22.0-rc.1](https://github.com/UI5/webcomponents/compare/v2.22.0-rc.0...v2.22.0-rc.1) (2026-04-16)
734

835
**Note:** Version bump only for package @ui5/webcomponents-base

packages/base/bundle.esm.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ import applyDirection from "./dist/locale/applyDirection.js";
3131
import { getCurrentRuntimeIndex } from "./dist/Runtimes.js";
3232
import { startMultipleDrag } from "./dist/DragAndDrop.js";
3333
import LegacyDateFormats from "./dist/features/LegacyDateFormats.js";
34+
import { boot } from "./dist/Boot.js";
3435

3536
window["sap-ui-webcomponents-bundle"] = {
3637
configuration : {
@@ -54,6 +55,7 @@ window["sap-ui-webcomponents-bundle"] = {
5455
parseProperties,
5556
registerI18nLoader,
5657
getI18nBundle,
58+
boot,
5759
renderFinished,
5860
applyDirection,
5961
EventProvider,
Lines changed: 180 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,180 @@
1+
import { internals } from "../../src/Location.js";
2+
import TestGeneric from "../../test/test-elements/Generic.js";
3+
import { resetConfiguration } from "../../src/InitialConfiguration.js";
4+
import { getTheme } from "../../src/config/Theme.js";
5+
import { getThemeRoot } from "../../src/config/ThemeRoot.js";
6+
import applyTheme from "../../src/theming/applyTheme.js";
7+
8+
const THEME = "sap_horizon";
9+
10+
const addMetaTag = (content: string) => {
11+
cy.window().then($win => {
12+
const metaTag = $win.document.createElement("meta");
13+
metaTag.name = "sap-allowed-theme-origins";
14+
metaTag.content = content;
15+
$win.document.head.append(metaTag);
16+
});
17+
};
18+
19+
const removeMetaTag = () => {
20+
cy.window().then($win => {
21+
$win.document.head.querySelector("[name='sap-allowed-theme-origins']")?.remove();
22+
});
23+
};
24+
25+
const removeThemeLink = () => {
26+
cy.window().then($win => {
27+
$win.document.head.querySelector("link[sap-ui-webcomponents-theme]")?.remove();
28+
});
29+
};
30+
31+
const applyAndCheckLink = (theme: string) => {
32+
cy.wrap({ applyTheme, getTheme })
33+
.invoke("getTheme")
34+
.then(() => {
35+
return cy.wrap({ applyTheme }).invoke("applyTheme", theme);
36+
});
37+
};
38+
39+
// ─── Without meta tag ────────────────────────────────────────────────────────
40+
41+
describe("ThemeRoot via URL param — without meta tag", () => {
42+
afterEach(() => {
43+
removeThemeLink();
44+
});
45+
46+
[
47+
{ label: "absolute URL (different origin)", themeRoot: "http://example2.com/themes/", blocked: true },
48+
{ label: "absolute URL (different protocol)", themeRoot: "https://example.com/themes/", blocked: true },
49+
{ label: "absolute URL (different port)", themeRoot: "http://example:9090.com/themes/", blocked: true },
50+
{ label: "absolute URL (same host, no meta tag)", themeRoot: "http://example.com/themes/", blocked: true },
51+
{ label: "protocol-relative (different origin)", themeRoot: "//example2.com/themes/", blocked: true },
52+
{ label: "protocol-relative (different port)", themeRoot: "//example:9090.com/themes/", blocked: true },
53+
{ label: "protocol-relative (same host, no meta tag)", themeRoot: "//example.com/themes/", blocked: true },
54+
{ label: "root-relative", themeRoot: "/themes/", blocked: false },
55+
{ label: "relative (current dir)", themeRoot: "./themes/", blocked: false },
56+
{ label: "relative (parent dir)", themeRoot: "../themes/", blocked: false },
57+
].forEach(({ label, themeRoot, blocked }) => {
58+
describe(`${label}: ${themeRoot}`, () => {
59+
before(() => {
60+
cy.stub(internals, "search").callsFake(() => {
61+
return `sap-ui-theme=${THEME}@${themeRoot}`;
62+
});
63+
64+
cy.wrap({ resetConfiguration }).invoke("resetConfiguration", true);
65+
cy.mount(<TestGeneric />);
66+
});
67+
68+
it(blocked ? "should not create a link element" : "should create a link element (same-origin, no meta tag needed)", () => {
69+
applyAndCheckLink(THEME);
70+
if (blocked) {
71+
cy.get(`link[sap-ui-webcomponents-theme='${THEME}']`).should("not.exist");
72+
} else {
73+
cy.get(`link[sap-ui-webcomponents-theme='${THEME}']`)
74+
.should("exist")
75+
.and("have.attr", "href")
76+
.and("include", `UI5/Base/baseLib/${THEME}/css_variables.css`);
77+
}
78+
});
79+
});
80+
});
81+
});
82+
83+
// ─── With meta tag ────────────────────────────────────────────────────────────
84+
85+
describe("ThemeRoot via URL param — with meta tag (allowed: http://example.com)", () => {
86+
afterEach(() => {
87+
removeThemeLink();
88+
});
89+
90+
after(() => {
91+
removeMetaTag();
92+
});
93+
94+
before(() => {
95+
addMetaTag("http://example.com");
96+
});
97+
98+
const blocked = [
99+
{ label: "absolute URL (different origin)", themeRoot: "http://example2.com/themes/" },
100+
{ label: "absolute URL (different protocol)", themeRoot: "https://example.com/themes/" },
101+
{ label: "absolute URL (different port)", themeRoot: "http://example:9090.com/themes/" },
102+
{ label: "protocol-relative (different origin)", themeRoot: "//example2.com/themes/" },
103+
{ label: "protocol-relative (different port)", themeRoot: "//example:9090.com/themes/" },
104+
];
105+
106+
const allowed = [
107+
{
108+
label: "absolute URL (matches allowed origin)",
109+
themeRoot: "http://example.com/themes/",
110+
expectedHref: "http://example.com/themes/UI5/Base/baseLib/sap_horizon/css_variables.css",
111+
},
112+
{
113+
label: "protocol-relative (resolves to allowed origin)",
114+
themeRoot: "//example.com/themes/",
115+
expectedHref: "http://example.com/themes/UI5/Base/baseLib/sap_horizon/css_variables.css",
116+
},
117+
];
118+
119+
const sameOriginAllowed = [
120+
{ label: "root-relative", themeRoot: "/themes/" },
121+
{ label: "relative (current dir)", themeRoot: "./themes/" },
122+
{ label: "relative (parent dir)", themeRoot: "../themes/" },
123+
];
124+
125+
blocked.forEach(({ label, themeRoot }) => {
126+
describe(`blocked — ${label}: ${themeRoot}`, () => {
127+
before(() => {
128+
cy.stub(internals, "search").callsFake(() => {
129+
return `sap-ui-theme=${THEME}@${themeRoot}`;
130+
});
131+
cy.wrap({ resetConfiguration }).invoke("resetConfiguration", true);
132+
cy.mount(<TestGeneric />);
133+
});
134+
135+
it("should not create a link element", () => {
136+
applyAndCheckLink(THEME);
137+
cy.get(`link[sap-ui-webcomponents-theme='${THEME}']`).should("not.exist");
138+
});
139+
});
140+
});
141+
142+
allowed.forEach(({ label, themeRoot, expectedHref }) => {
143+
describe(`allowed — ${label}: ${themeRoot}`, () => {
144+
before(() => {
145+
cy.stub(internals, "search").callsFake(() => {
146+
return `sap-ui-theme=${THEME}@${themeRoot}`;
147+
});
148+
cy.wrap({ resetConfiguration }).invoke("resetConfiguration", true);
149+
cy.mount(<TestGeneric />);
150+
});
151+
152+
it("should create a link element with correct href", () => {
153+
applyAndCheckLink(THEME);
154+
cy.get(`link[sap-ui-webcomponents-theme='${THEME}']`)
155+
.should("exist")
156+
.and("have.attr", "href", expectedHref);
157+
});
158+
});
159+
});
160+
161+
sameOriginAllowed.forEach(({ label, themeRoot }) => {
162+
describe(`allowed (same-origin) — ${label}: ${themeRoot}`, () => {
163+
before(() => {
164+
cy.stub(internals, "search").callsFake(() => {
165+
return `sap-ui-theme=${THEME}@${themeRoot}`;
166+
});
167+
cy.wrap({ resetConfiguration }).invoke("resetConfiguration", true);
168+
cy.mount(<TestGeneric />);
169+
});
170+
171+
it("should create a link element", () => {
172+
applyAndCheckLink(THEME);
173+
cy.get(`link[sap-ui-webcomponents-theme='${THEME}']`)
174+
.should("exist")
175+
.and("have.attr", "href")
176+
.and("include", `UI5/Base/baseLib/${THEME}/css_variables.css`);
177+
});
178+
});
179+
});
180+
});

0 commit comments

Comments
 (0)