Skip to main content

ยท 8 min read

A Journey of Innovation and Growthโ€‹

Since the release of UI5 Web Components 1.0 in 2021, our journey has been marked by unwavering innovation and a commitment to excellence. Over the past three years, we have listened to our community, refined our technologies, and expanded our capabilities.

UI5 Web Components timeline

Our project has continuously evolved, embracing new web standards, eliminating legacy code, and integrating invaluable user feedback from our community to enhance our APIs. This journey culminated in April with the unveiling of the first Release Candidate for UI5 Web Components 2.0.

Announcing UI5 Web Components 2.0! ๐ŸŽ‰โ€‹

Today, we stand at a pivotal moment in our evolution with the official launch of UI5 Web Components 2.0. This major release marks a new era, enhancing performance and reliability while setting the stage for future innovations. Our commitment to growth and providing cutting-edge tools for web development ensures we continue to meet the evolving needs of our community.

Key Benefits of UI5 Web Components 2.0

UI5 Web Components 2.0 introduces several substantial improvements:

  • Embracing New Standards: Future-proofing UI5 Web Components.

  • Consistent APIs: Streamlined and more intuitive, albeit with some breaking changes.

  • Elimination of Legacy Code: Reducing footprint and enhancing quality by minimizing bugs.

Looking ahead, we will adhere to Semantic Versioning and release major updates more frequently to keep pace with technological advancements.

What's New in UI5 Web Components 2.0?โ€‹

Revolutionary Popover APIโ€‹

Experience a standardized, consistent, and flexible mechanism for displaying popover content across all relevant components.
This API allows popups to display correctly above all other content, eliminating the need for the "static area" used in version 1.x. Previously, popups were placed in a static area within the body to ensure correct positioning despite various CSS rules. In version 2.x, the popover API simplifies the DOM structure by incorporating the popover directly within the component. This results in easier development, maintenance, and enhanced styling capabilities. It also allows components with popups to have physical children, supporting custom content and simplifying testing. The popover API is fully supported by all major browsers. Discover all the practical benefits in our blog post.

Form-Associated Custom Elementsโ€‹

Harness the power of native input behavior within HTML forms. This enhancement makes the features/InputElementsFormSupport.js feature redundant, simplifying form handling and enhancing the developer experience. Refer to the ElementInternals API documentation for more details.

Seamless Time Zone Supportโ€‹

Seamlessly manage time zones within your applications for a more personalized user experience. The date and time components are adapted to the time zone feature, allowing the components to present dates in different time zones. The time zone identifiers format is the one used in the IANA time zone database. See a sample on our website.

New Componentsโ€‹

Expand your UI toolkit with new components such as Dynamic Page, Form, Table, Text, Tokenizer, AI Button, and AI Prompt Input.

  • Dynamic Page: A layout component, representing a web page, consisting of a title, a header with dynamic behavior, a content area, and an optional floating footer. Use the Dynamic Page if you need to have a title, that is always visible and a header, that has configurable Expanding/Snapping functionality.
  • Form: The ui5-form is a layout component that arranges labels and form fields (like input fields) pairs into a specific number of columns. And, there is also "grouping" available to assist the implementation of richer UIs. The Form component reacts and changes its layout on predefined breakpoints.
  • Table: The ui5-table component provides a set of sophisticated features for displaying and dealing with vast amounts of data in a responsive manner. This Table replaces the previous Table web component, that has been part of @ui5/webcomponents version 1.x. For compatibility reasons, we moved the previous Table implementation to the @ui5/webcomponents-compat package and will be maintained until the new Table is experimental.
  • Text: The ui5-text component displays text that can be used in any content area of an application. By default, the text will wrap when the space is not enough. In addition, the component supports truncation via the max-lines property, which defines the number of lines the text should wrap before it starts truncating.
  • Tokenizer: A ui5-tokenizer is an invisible container for ui5-tokens that supports keyboard navigation and token selection.
  • AI Button: The ui5-ai-button component represents a button used in AI-related scenarios. It enables users to trigger actions by clicking or tapping the ui5-ai-button, or by pressing certain keyboard keys, such as Enter.
  • AI Prompt Input: The ui5-ai-prompt-input component allows the user to write custom instructions in natural language so that AI is guided to generate content tailored to user needs.
  • Custom Option: The ui5-option-custom component defines a custom content of an option in the ui5-select. The component accepts arbitrary HTML content to allow full customization.
  • Custom Suggestion Item: The ui5-suggestion-item-custom is a type of suggestion item, that can be used to place suggestion items with custom content in the input.
  • Notification List: The ui5-notification-list web component acts as a container for ui5-li-notification-group and ui5-li-notification, delivering the new SAP Design Notification experience.
  • List Group: The ui5-li-group is a special list item used exclusively for creating groups of list items within a ui5-list.

Preview of UI5 Web Components 2.0 new components

Enhanced Existing Componentsโ€‹

Benefit from improvements in List Drag and Drop, Tree Drag and Drop, Tab Container Drag and Drop, and a revamped Notifications Experience.

Preview of UI5 Web Components 2.0 new features

note

For the full list of changes, please refer to the release change log.

Revamped Documentation Siteโ€‹

Explore our new documentation site featuring a live editor, playground, dark mode, and an intuitive icons view.

UI5 Web Components 2.0 new website

New logo: We are excited to introduce our new symbol and branding, reflecting the modern and dynamic nature of our project. Our new design incorporates defining elements of the feather and the flame. The feather symbolizes being lightweight, while the flame forms a connection to the phoenix, embodying the spirit of rebirth and continuous improvement.

Explore the Full-Screen Playground

Our new full-screen playground offers a range of features designed to enhance your development experience:

  • Live code editing

  • TypeScript support

  • Code completion for components in HTML

  • Sample download

  • Easy sharing

  • Theming options

  • Predefined examples

UI5 Web Components 2.0 full-screen playground

Adoption and Breaking Changesโ€‹

UI5 Web Components 2.0 is a major version and introduces breaking changes that may require updates to your code. Note: The majority of the breaking changes can be achieved with find and replace.

tip

Our comprehensive Migration Guide will assist you in making a smooth transition from UI5 Web Components v1.x to v2.0.

Notable Breaking Changes:

  • The Belize theme has been removed and is no longer available.

  • CSP (Content Security Policy) will be ensured via the adoptedStyleSheets only, which are CSP-compliant by design.

  • The static area has been removed since the browser now ensures the correct positioning of popups thanks to the popover API that is fully adopted by the UI5 Web Components.

  • The Badge component (ui5-badge) has been renamed to Tag (ui5-tag).

  • The old Table (ui5-table) has been moved to @ui5/webcomponents-compat; new Table is available with better API and accessibility.

  • Public methods for opening popovers are replaced with the open property for declarative APIs.

  • Components like Label, Text, Link, and Title now wrap by default (wrappingType="Normal" by default, wrappingType="None" optionally).

  • SelectMenu and SelectMenuOption components have been removed; standard options with the popover API make them obsolete.

  • Renaming of properties, events, and enumeration values.

  • Removed APIs without alternatives:

    • Progress Indicator (ui5-progress-indicator): Disabled property removed.

    • Select Option (ui5-option): Disabled property removed for UX and accessibility alignment.

    • Token (ui5-token): Readonly property removed; logic now within the Tokenizer.

    • The Device#isIE method has been removed and is no longer available - the IE browser is not supported anymore.

    • Notification List Group (ui5-li-notification-group): The properties showClose, showCounter, priority, the event close and the slot actions are removed due to the new better notification list design concept.

Ongoing Support for Version 1.xโ€‹

We will continue to support version 1.x until the end of the year, focusing on bug fixes to ensure continuity for our existing users.

Get Help and Engage with the Communityโ€‹

Encountering issues? Reach out for support or report bugs on our GitHub project: Submit a bug or ask a question here.

Call to Actionโ€‹

UI5 Web Components 2.0 is a testament to our dedication to innovation, quality, and community engagement. We are particularly excited about the groundbreaking features such as the Popover API, Form-Associated Custom Elements, and seamless time zone support.

We invite you to preview the new version and migrate to UI5 Web Components 2.0 to fully leverage these advancements. Together, we are entering a new era of web development, and the possibilities are endless. Thank you for being part of this exciting journey with us! ๐Ÿ™Œ

ยท 5 min read

UI5 Web Components 2.0 will provide greatly improved popups by taking advantage of the native browser popover API.

What is the popover API?โ€‹

The popover API is a browser-native solution to displaying popup-like components (Popovers, Dialogs, etc.). above all other content, regardless of its HTML structure and CSS applied.

Popups in version 1.xโ€‹

There used to be a so-called "static area" (<ui5-static-area>) - a DOM element directly in the <body> where the popups of all components were placed. This guaranteed that even if the HTML document had overflow: hidden, transform, or similar CSS rules applied, or the component was in a stacking context, its popup would still be positioned correctly.

Example of ui5-date-picker's DOM structure in v1.24:

<body>
<ui5-static-area>
<ui5-static-area-item> <!-- A static area item, associated with the DatePicker component -->
#shadow-root
<ui5-responsive-popover></ui5-responsive-popover> <!-- here goes the Popover part of the DatePicker component -->
</ui5-static-area-item>
</ui5-static-area>

.........

<div style="transform: translate(12rem, 12rem)"> <!-- a parent node has CSS that normally breaks popup positioning -->
<ui5-date-picker>
#shadow-root
<ui5-input></ui5-input> <!-- The date Input part of the DatePicker component -->
</ui5-date-picker>
</div>
</body>

As you can see, the component used to be physically divided in two parts:

  • The "main" part (the ui5-date-picker tag itself) containing the date selection input
  • The "popover" part (the ui5-static-area-item tag, associated with the said date picker) containing the picker (calendar with years/months/days).

Popups in version 2.xโ€‹

There is no longer need for a "static area" since the browser now ensures the correct positioning of popups thanks to the popover API.

Example of ui5-date-picker's DOM structure in v2.0:

<body>
<div style="transform: translate(12rem, 12rem)"> <!-- a parent node has CSS that normally breaks popup positioning -->
<ui5-date-picker>
#shadow-root
<ui5-input></ui5-input> <!-- The date Input part of the DatePicker component -->
<ui5-responsive-popover popover="manual"></ui5-responsive-popover> <!-- the Popover part of the DatePicker component -->
</ui5-date-picker>
</div>
</body>

The component is no longer physically divided in two parts:

  • Both the input and the popover are inside the ui5-date-picker itself
  • The popover has the popover="manual" attribute (introduced with the popover API) that ensures it will be displayed above anything else on the HTML page.

It's that simple!

The practical benefitsโ€‹

Simpler and more robust componentsโ€‹

  • Easier to develop and maintain.
  • Everything belonging to a component is now in one place! This includes code logic, HTML and CSS.

Enhanced overstyling capabilities for appsโ€‹

  • We can now provide CSS Shadow Parts also for the "popup part", not just in the "main part" of the component!
  • CSS Custom Properties set on the component will also have effect for its "popup part"!

Consider the following example:

<body>
<style>
#mc::part(root) {
background: blue;
}
#mc::part(list) {
margin: 0.5rem;
}
</style>

<my-component id="mc">
#shadow-root
<div part="root"></div>
<ui5-popover>
<ui5-list part="list"></ui5-list>
</ui5-popover>
</my-component>
</body>

Since the popover is now part of the component, component authors can provide CSS Shadow Parts for elements in the popover, in addition to the existing CSS Shadow Parts.

Components with popups can now have physical childrenโ€‹

Web components with popups had a hard limitation of not being able to slot children to the popup.

Example of ui5-select's (simplified) DOM structure in v1.24:

<body>
<ui5-static-area>
<ui5-static-area-item> <!-- static area item of the ui5-select -->
#shadow-root
<ui5-responsive-popover> <!-- the "dropdown" part of the ui5-select -->
<ui5-list> <!-- the list inside ui5-select's dropdown -->
<ui5-li text="Option 1"></ui5-li> <!-- list item for the 1st ui5-option -->
<ui5-li text="Option 2"></ui5-li> <!-- list item for the 2nd ui5-option -->
<ui5-li text="Option 3"></ui5-li> <!-- list item for the 3rd ui5-option -->
</ui5-list>
</ui5-responsive-popover>
</ui5-static-area-item>
</ui5-static-area>

.........

<ui5-select>
#shadow-root
<div></div> <!-- The "box" part of the select -->

<ui5-option>Option 1</ui5-option>
<ui5-option>Option 2</ui5-option>
<ui5-option>Option 3</ui5-option>
</ui5-select>

</body>

As you can clearly see from the example, there is no way to slot the ui5-option components into the ui5-list as it is in a completely different part of the DOM, due to the need for a static area. Instead, we can only provide logical ui5-option components and just use their text content for the text property of the list items (ui5-li) in the static area.

Example of ui5-select's (simplified) DOM structure in v2.0:

<body>
<ui5-select>
#shadow-root
<div></div> <!-- The "box" part of the select -->
<ui5-responsive-popover> <!-- the "dropdown" part of the ui5-select -->
<ui5-list> <!-- the list inside ui5-select's dropdown -->
<slot></slot>
</ui5-list>
</ui5-responsive-popover>

<ui5-option><strong>Option</strong> 1</ui5-option>
<ui5-option><ui5-icon name="accept"></ui5-icon> Option 2</ui5-option>
<ui5-option><i>Option 3</i></ui5-option>
</ui5-select>

</body>

Now that the popover is part of the ui5-select itself, it's possible to have physical ui5-options and slot their content directly into the popover or its children (ui5-list in this example).

This allows us to provide support for custom user content for components that had strict predefined APIs in the past!

Easier testing for both apps and component package authorsโ€‹

  • Tests no longer need to know how to find the static area item, associated with a given component - everything is directly in the shadow root!
  • Writing tests is much simplified.

Cross-framework popup compatibility for the futureโ€‹

  • Frameworks who use the native browser popover API no longer need to synchronize themselves (negotiate z-index values, etc.).
  • The last popup to be opened will always be on top (guarnateed by the browser)!

When can I start using it?โ€‹

  • The current versions of all supported browsers (Chrome, Safari, Edge, and now also Firefox as of version 125) fully support the popover API. See Can I Use report.
  • By the time v2.0 is officially released (we are at v2.0-r.c.2 as of writing this blog post) we expect that each major browser will have already released at least 3 stable versions since the introduction of the popover API.

Make sure to check our blog for future announcements, including the official release date of UI5 Web Components 2.0!

ยท 5 min read

U5 Web Components project has reached a pivotal stage in its evolution, geared to embrace new standards, eliminate legacy code, and integrate consumer feedback to enhance our APIs, culminating in the highly anticipated major release, version 2.0.

Today we are extremely happy to announce UI5 Web Components 2.0 Release Candidate! ๐Ÿฅณ๏ธ The following 2.0 RC versions have been released:

What's newโ€‹

New featuresโ€‹

  • Integration of popover API: Enjoy standard, consistent and flexible mechanism for displaying popover content on top of other page content with the integration of the popover API across all relevant components: #8192

  • Time zone Support: Date and time components are enhanced to seamlessly adapt to different time zones, ensuring accurate presentation of dates across various regions. The time zone identifiers format aligns with the conventions used in the IANA time zone database. : #8610

  • New Components: Explore new additions to the UI5 Web Components family, expanding your toolkit for building rich UIs:

    • Text: The ui5-text component displays text that can be used in any content area of an application. By default, the text will wrap when the space is not enough. In addition, the component supports truncation via the max-lines property, by defining the number of lines the text should wrap before start truncating. #8299
  • Components enhancements: Benefit from enhancements to existing components such:

    • ui5-message-strip: introduce custom colors #8757
    • ui5-link: introduce tooltip property #8670
    • ui5-avatar-group: update focus handling #8550
    • ui5-barcode-scanner-dialog: add support for close and open events #8753
    • ui5-li: add support for F2 key #8619
    • ui5-button: provide focus support for mobile #8414
    • ui5-tree: enable drag and drop #8477
    • ui5-tabcontainer, ui5-list: add events for reordering items by mouse #8265 #8687
    • ui5-checkbox: update focus handling #8553
    • focus: new focus handling #8590
    • add shadowRootOptions for @customElement decorator #8703
  • New Site for Documentation, Samples, and API Reference: Discover a revamped documentation site with live editor, playground, dark mode, and an intuitive icons view.

UI5 Web Components Playground

Breaking changesโ€‹

UI5 Web Components 2.0 is a new major version, including breaking changes requiring you to adjust your code accordingly.

tip

This documentation will help you to migrate from UI5 Web Components v1.x to UI5 Web Components 2.0 with ease: Migration guide 2.0

Notable breaking changes include:

  • Discontinuing support for Internet Explorer: #8494
  • CSP via adoptedStyleSheets only: #8496
  • The JSDoc plugin has been removed, and the generation of api.json has stopped. If you previously relied on the ui5-package/dist/api.json file, you can now use ui5-package/dist/custom-elements.json: #8518
  • Removed UI5Element#render method in favour of UI5Element#renderer: #8501
  • Removed all Assets-static.js modules in favour of their dynamic counterparts - the Assets.js modules: #8526
note

For the full list of changes, please refer to the release change log.

What's nextโ€‹

Anticipate the official 2.0 release between mid-June to mid-July, featuring: ๐Ÿš€

In-Progress Featuresโ€‹

  • Form Support with Form-Associated Custom Elements: Streamline form handling with support for the Form-Associated Custom Elements standard.
  • New Components: Dynamic Page, Form, and Tokenizer
  • Component Enhancements: Revamped Notifications Experience
  • Reusable component CSS styles Allow creating patterns/layouts or other common styling

In-Progress Breaking changesโ€‹

  • Theming: Removal of Belize (recommendation: migrate to Horizon)

  • Rename of properties, events and enumarion values

  • Several APIs will be replaced with more effective alternatives::

    • Replace all public methods for opening popover, such as openPicker, togglePicker with open property to promote declarative APIs
    • Grouping of Items: Instead of using ui5-li-groupheader as separator in a flat structure, the API will support true nesting of ListItems inside ListItemGroup, to easier bind hierarchical data model to the UI.
    • Menu: property starts-section replaced by ui5-menu-separator component.
    • List: property image, replaced by slot image.
    • TabContainer: show-overflow property, replaced by slot overflowButton.
    • IllustratedMessage: property titleLevel, replaced by slot title (that you can set the level on).
This properties will be removed without alternative:
  • Progress Indicator (ui5-progress-indicator): Remove disabled property
  • Selects's Option (ui5-option): Remove disabled property - UX and ACC standards suggest to not include any disabled items in the dropdown
  • Token (ui5-token): Remove the readonly property

Get helpโ€‹

Encountering issues? Don't hesitate to report them or seek assistance on our GitHub project: Submit a bug or ask a question here.

Maintenance of 1.xโ€‹

While we're excited about the future with UI5 Web Components 2.0, we also understand the importance of continued support for existing users. Therefore, maintenance and support for version 1.x will continue until the end of the year, focusing solely on bug fixes.

Conclusionโ€‹

In conclusion, UI5 Web Components 2.0 represents a significant leap forward in our commitment to delivering cutting-edge web development tools. We're excited to embark on this journey with you and look forward to seeing the amazing experiences you'll create with UI5 Web Components 2.0!

Stay tuned for more updates and announcements as we approach the official release date. Thank you for being part of the UI5 Web Components community! ๐Ÿ™Œ

ยท 3 min read

UI5 Web Components 2.0 version is on the horizon. Here's a summary of everything you need to know (release information, key features and breaking changes) and start preparing for it.

Release Timelinesโ€‹

  • Release 2.0 RC versions in April
  • Release 2.0 between mid June - mid July

Migration Supportโ€‹

Maintenance of 1.xโ€‹

  • Support until the end of the year
  • Downport of bug fixes only

2.0 Featuresโ€‹

Framework Featuresโ€‹

New Componentsโ€‹

  • Dynamic Page
  • Form
  • Text
  • Tokenizer

Components Featuresโ€‹

  • List Drag and Drop (comes with TabContainer)?
  • Tree Drag and Drop
  • TabContainer Drag and Drop
  • New Notifications Experience

Reusable component CSS stylesโ€‹

Styles for creating patterns/layouts or other common styling

New Site for Documentation, Samples and API referenceโ€‹

See the preview.

  • Live editor
  • Playground
  • Dark mode
  • Icons view

2.0 Breaking changesโ€‹

  • 90% is pure API renaming for better consistency
  • several APIs are replaced by alternatives (listed below)
  • few APIs are removed without alternatives (listed below)

Themingโ€‹

  • Removal of Belize (recommendation: migrate to Horizon)

Frameworkโ€‹

  • CSP (Content Security Policy) will be ensured via adoptedStyleSheets only. The adoptedStyleSheets are CSP compliant by design and all components styles will be defined as adoptedStyleSheets.

The CSP.js module is removed and the creation of <style> and <link> tags is no longer required as all browsers now support adoptedStyleSheets.

As a result, hte following APIs are not available any more and should not be used:

import { setUseLinks } from "@ui5/webcomponents-base/dist/CSP.js"
import { setPackageCSSRoot } from "@ui5/webcomponents-base/dist/CSP.js"
import { setPreloadLinks } from "@ui5/webcomponents-base/dist/CSP.js"

Renamed APIsโ€‹

See the full list here.

Replaced APIsโ€‹

  • Methods openPicker will be replaced by open/opener properties to promote declarative API

  • Grouping of Items

Instead of using ui5-li-groupheader as separator in a flat structure:

<ui5-list>
<ui5-li-groupheader>group<ui5-li-groupheader/>
<ui5-li></ui5-li>
<ui5-li></ui5-li>
<ui5-li></ui5-li>
</ui5-list>

true nesting will be provided of ListItems inside ListItemGroup to easier bind hierarchical data model to the UI:

<ui5-list>
<ui5-li-group header-text="group">
<ui5-li></ui5-li>
<ui5-li></ui5-li>
<ui5-li></ui5-li>
<ui5-li-group>
</ui5-list>
  • Menu: the property starts-section will be replaced by ui5-menu-separator component.
  • List: the property image will be replaced by slot image
  • TabContainer: the property show-overflow property is will be replaced by slot overflowButton.
  • IllustratedMessage: the property titleLevel will be replaced by slot title.

Removed APIs without alternativeโ€‹

Progress Indicator (ui5-progress-indicator)โ€‹

  • The disabled property will be removed. Progress indicator isn't an interactive element so disabled property make no sense. Also aria-disabled is deprecated on the progressbar role since ARIA 1.2 .

Selects's Option (ui5-option)โ€‹

  • The disabled property will be removed. The UX and ACC standards suggest to not include any disabled items in the dropdown

Token (ui5-token)โ€‹

  • The readonly property will be removed.