Major Changes
-
#2514
73a2ed3Thanks @dmytro-halimov! - Breaking (v5): Remove theplacementproperty (andplacementattribute) fromix-split-button. It was not wired to the internal dropdown, so it had no effect; removing it only drops a misleading no-op from the public API. SeeBREAKING_CHANGES/v5.md. -
#2524
f2c8b83Thanks @danielleroux! - RequirebreadcrumbKeyonix-breadcrumb-item, changeix-breadcrumbnextItemsentries from strings to{ label, breadcrumbKey }objects, and export the sharedBreadcrumbClickpayload type so breadcrumb click events expose stable item keys.This change was necessary to identify breadcrumb items in a stable way, as their labels may not be unique and can change over time. The
breadcrumbKeyprovides a consistent identifier for each breadcrumb item, allowing for more reliable event handling and state management in applications using the breadcrumb component. -
#2268
c81324bThanks @danielleroux! - Updateix-date-dropdownquick date selection from a list to a picker, with quick date options displayed on the left side.Removed attributes:
ariaLabelDropdownButton: Providedaria-labelwill be passthrough the component shadow-dom to the actual buttoncustomRangeDisabled(also contain removal ofi18nCustomItem): Removed becauseix-date-dropdownwill be a picker with quick selection on the left side.
-
#2516
91f811aThanks @alexkaduk! - ix-chip: Status-filled hover/active colors and padding use design tokens; custom-color chips keep the overlay behavior.
ix-chip: AddariaLabelIcon, forward host ARIA to the main control, optional hostrole="group", a native close button, and tooltip labeling; React, Angular, and Vue exposeariaLabelIcon. -
#2309
3964a2aThanks @GayatriK2002! - Removed the left margin for ix-chip and ix-pill. This margin was also present if there was no leading sibling that is also a chip/pill causing it to waste screen real estate and distort layout alignments. -
#2470
f9e3802Thanks @danielleroux! - Updateix-applicationtheming inputs to use the newcolorSchemaAPI.The
themeSystemAppearanceproperty has been replaced bycolorSchema, and consumers usingthemeor theme-related configuration onix-applicationhave to migrate to the updated theme-switching behavior. -
#2508
cdae15bThanks @alexkaduk! -ix-time-picker: optionalminTimeandmaxTimeconstrain selectable values (same string shape asformat/time). Values outside the inclusive range are disabled in the picker rings.Breaking (v5): the hour column header attribute is renamed from
i18n-column-headertoi18n-hour-column-header. Thei18nHourColumnHeaderproperty is unchanged—update static HTML or attribute-based markup. Migration:BREAKING_CHANGES/v5.md. -
#2545
ba15b50Thanks @alexkaduk! - Select listbox accessibilityix-select: Screen reader output for the dropdown list follows listbox semantics: the focus proxy sets aria-selected from real selection state (and the add row from checked), no longer sets aria-checked on proxy options, and uses value as a fallback accessible name when label is absent.
ix-select-item: With
disableAriaSelectHandlingenabled on the host, keyboard focus visibility is no longer mirrored to aria-selected onix-select-item, so assistive technologies do not treat every focused row as selected.ix-dropdown-item: New
itemRoleprop (menuitem|option, defaultmenuitem) sets the hostrole;ix-select-itempassesoptionfor listbox usage. Documented with@since 5.0.0. Generated React, Angular, and Vue bindings includeitemRole/item-role.ix-select (multiple mode): Passes
ariaLabelCloseIconButtonon eachix-filter-chip(viai18n-remove-selected-item, default prefixRemove) so the close control is announced with the item label (e.g. “Remove Item 1”). Documented with@since 5.0.0. -
#2525
7042a10Thanks @danielleroux! - Update the required @siemens/ix-icons peer dependency to ^3.4.0. This is a breaking change that requires consumers to update their @siemens/ix-icons dependency to version 3.4.0 or higher. -
#2470
b00da1cThanks @danielleroux! - - Thetoastfunction now appends directly to theix-toast-containerhost element instead of using a separate container element.Removed properties
containerClass- Setclasson theix-toast-containerelement itself if needed.containerId- Just useidon theix-toast-containerelement if needed.
-
#2268
c81324bThanks @danielleroux! - Refactor keyboard navigation for dropdown-related componentsRefactors keyboard navigation to align with W3C accessibility patterns for dropdown-related components, significantly improving accessibility and user experience:
Component Changes
Date Picker
- Added comprehensive keyboard navigation support:
Home/End: Navigate to first/last day of weekPageUp/PageDown: Navigate to previous/next monthShift+PageUp/Shift+PageDown: Navigate to previous/next yearArrowLeft/ArrowRight/ArrowUp/ArrowDown: Navigate between daysEnter/Space: Select focused dayEscape: Close picker
- Replaced manual year/month dropdown with accessible
ix-dropdown-buttoncomponents - Implemented visual focus mode with
aria-activedescendantfor embedded pickers - Added infinite scrolling for year selection with IntersectionObserver
- Improved ARIA labels:
ariaLabelMonthSelectionandariaLabelYearSelectionprops - Calendar days now have proper
role="button"and descriptivearia-labelattributes
Date Input
- Implemented
aria-activedescendantpattern for combobox interaction - Added keyboard forwarding to embedded date picker
ArrowDownopens picker and activates keyboard navigationEscapecloses picker and returns focus to input- Focus management improved with
delegatesFocusshadow DOM option
Date Dropdown
- Enhanced focus handling with
onFocusoutto close dropdown when focus leaves - Auto-focus date picker when opened via keyboard
- Added
suppressOverflowBehaviorto prevent unwanted repositioning
Dropdown & Dropdown Button
- New props:
disableFocusHandling,disableFocusTrap - New events:
showChange(preventable),showChanged(post-change) - Improved focus proxy for dropdown items with proper
role="menuitem" - Better keyboard navigation with arrow keys, Home, End, Enter, Escape
Breadcrumb
- Complete refactor using
ix-dropdown-buttonfor previous/next items - Added
role="navigation"androle="listitem"for proper semantics - Improved ARIA labels (default: "Show previous breadcrumb items")
- Each breadcrumb item now has
aria-current="page"for the current page - Keyboard navigation now works consistently across all breadcrumb dropdowns
Avatar
- Implemented focus proxy pattern for dropdown menu items
- Added
aria-activedescendantsupport - Button now has
role="combobox"with properaria-controlsandaria-expanded - Menu items properly labeled with
role="menuitem"
Button
- Added
.ix-focusedclass for programmatic focus indication - Fixed focus-visible styles to work consistently
- Disabled buttons now have
tabindex="-1"
Application Header
- Added
role="banner"for proper landmark semantics - Fixed overflow context menu visibility logic for small viewports
Breaking Changes
ix-breadcrumb-item:ariaLabelButtonprop deprecated in favor of directaria-labelattribute- Date picker month/year selection UI completely redesigned (visual breaking change)
- Internal structure for all
ix-dropdownrelated components are changed
- Added comprehensive keyboard navigation support:
-
#2503
8c7fb12Thanks @danielleroux! - Updateix-menu-aboutandix-menu-settingsfor key-based tabs and slottedix-tabsopt-inix-menu-aboutandix-menu-settingskeep their legacyix-menu-about-item/ix-menu-settings-itemrendering by default. To switch to slottedix-tabs/ix-tab-itemmarkup, set the newsuppressLegacyTabsprop on the parent menu component.ix-menu-about-newsstill usesactiveAboutTabKeyinstead ofaboutItemLabel.Breaking Changes
ix-menu-about / ix-menu-settings
- The slotted
ix-tabsintegration path uses the newsuppressLegacyTabsprop on the parent menu component. ix-menu-aboutrenamedactiveTabLabeltoactiveTabKeyfor legacy item-based integrations.
ix-menu-about-item / ix-menu-settings-item
tabKeyis now required when using legacy item-based integrations.ix-menu-about-itemchanged fromshadow: truetoshadow: false.
ix-menu-about-news
- New
activeAboutTabKeyprop replacesaboutItemLabelas the condition for showing the "Show more" footer button. - The
aboutItemLabelprop no longer controls footer visibility. UseactiveAboutTabKeyinstead.
Migration
Use the existing
ix-tabspattern in your application (ix-menu-about/ix-menu-settings), and show the matching slotted content based on the active tab key. SetsuppressLegacyTabson theix-menu-about/ix-menu-settingsandactive-tab-keyon the nestedix-tabs, not onix-menu-aboutorix-menu-settings.<!-- Slotted ix-tabs path --> <ix-menu-about suppress-legacy-tabs> <ix-tabs active-tab-key="tab-1"> <ix-tab-item tab-key="tab-1">Tab 1</ix-tab-item> <ix-tab-item tab-key="tab-2">Tab 2</ix-tab-item> </ix-tabs> <!-- render the matching content in the slot using the active tab key --> </ix-menu-about>
<!-- Legacy item-based path --> <ix-menu-about active-tab-key="tab-1"> <ix-menu-about-item tab-key="tab-1" label="Tab 1" >Content 1</ix-menu-about-item > <ix-menu-about-item tab-key="tab-2" label="Tab 2" >Content 2</ix-menu-about-item > </ix-menu-about>
<!-- Legacy item-based path --> <ix-menu-settings active-tab-key="tab-1"> <ix-menu-settings-item tab-key="tab-1" label="Tab 1" >Content 1</ix-menu-settings-item > </ix-menu-settings>
- The slotted
-
#2541
130df33Thanks @danielleroux! - Breaking (v5):showModalLoading()now returns aPromise<ModalLoadingContext>. Await the call before usingupdate()orfinish()on the returned loading context. -
#2471
e324caaThanks @alexkaduk! - Add non-blocking dialog mode to ix-modal withisNonBlockingandModalConfig.isNonBlocking: opens withdialog.show()so the page stays interactive (no lightbox or focus trap;aria-modalis false). After open,showModal()schedules initial focus on the first light-DOM match for[autofocus]or[auto-focus](withfocusVisible: true).Breaking (v5): Remove
disableEscapeClose. Escape andcancelalways go throughdismissModal(); usebeforeDismissto veto dismissal (e.g. replacedisableEscapeClosewithbeforeDismiss: () => false).showModalLoadingis updated accordingly;closeModalfromfinish()is unchanged. -
#2465
7406be7Thanks @danielleroux! - Remove legacy accessible-name properties from button components. Set the nativearia-labelattribute on the host element instead; it is applied to the inner interactive surface.- ix-button:
ariaLabelButton(aria-label-button) - ix-icon-button:
a11yLabel(a11y-label) - ix-toggle-button:
ariaLabelButton(aria-label-button) - ix-icon-toggle-button:
ariaLabelIconButton(aria-label-icon-button)
See Breaking changes v5 for migration examples.
- ix-button:
-
#2475
834bbbfThanks @nuke-ellington! -ix-card-listbreaking change: selecting the show-all button or show-more card now reveals all hidden cards by default and toggles back to the hidden-overflow state from the show-less button. To keep the previous event-only behavior, callpreventDefault()on the cancelableshowAllClickorshowMoreCardClickevent. -
#2503
8c7fb12Thanks @danielleroux! - Refactor ix-tabs and ix-tab-item to use key-based tab identificationReplaces the index-based tab selection model with a string key-based approach, improving reliability when tabs are added, removed, or reordered dynamically.
Breaking Changes
ix-tabs
- Removed
selectedprop (number index). UseactiveTabKey(string) instead. - Removed
ariaLabelChevronLeftIconButtonandariaLabelChevronRightIconButtonprops. When the tab list overflows andlayoutis notstretched,ix-tabsnow shows anix-dropdown-buttonwith all tabs instead of scroll arrows; no overflow button is rendered while all tabs fit or whilelayoutisstretched. - Removed
selectedChangeevent. UsetabChangewhich emits the activetabKeystring instead of an index.
ix-tab-item
- New required
tabKeyprop to uniquely identify each tab. - Added
labelprop for setting tab text (preferred over slot content). - Added
iconprop for setting an icon on the tab. - Added
closableprop andtabCloseevent for closable tabs. small,layout,placement, androundedprops are now internal and set automatically by the parentix-tabs.
Migration
<!-- Before --> <ix-tabs selected="1"> <ix-tab-item>Tab 1</ix-tab-item> <ix-tab-item>Tab 2</ix-tab-item> </ix-tabs> <!-- After --> <ix-tabs active-tab-key="tab-2"> <ix-tab-item tab-key="tab-1" label="Tab 1"></ix-tab-item> <ix-tab-item tab-key="tab-2" label="Tab 2"></ix-tab-item> </ix-tabs>
Replace removed
selectedChangeevent listeners withtabChange:// Before tabs.addEventListener('selectedChange', (e) => console.log(e.detail)); // 0, 1, 2... // After tabs.addEventListener('tabChange', (e) => console.log(e.detail)); // 'tab-1', 'tab-2'...
- Removed
-
#2548
3ece658Thanks @alexkaduk! - Remove pre-v5 deprecated components, properties, and theshowModalLoadingstring overload.Removed components:
ix-input-group(useix-input);ix-validation-tooltip(use built-in validation onix-input/ix-select);ix-drawer(useix-pane).Removed properties:
ariaLabelMenuExpandIconButtononix-application-header;a11yLabelonix-avatar;ariaLabelButtononix-breadcrumb-item;ariaLabelChevronDownIconButtononix-select;erroronix-slider(useclass="ix-invalid"andinvalid-textinstead).Removed util overload:
showModalLoading(message: string)— useshowModalLoading({ message: '...' })instead.See
BREAKING_CHANGES/v5.md(section Removed deprecated components and APIs) for migration details. -
#2538
909bb6aThanks @alexkaduk! - Remove no-opModalConfigfieldscontainer,keyboard, andtitlefrom theshowModalAPI. They had no effect in v4; delete them from config objects.See Breaking changes v5 (ModalConfig: removed no-op options) for migration.
-
#2465
7406be7Thanks @danielleroux! - Remove unused i18n-expand-sidebar property from ix-menu -
#2470
f9e3802Thanks @danielleroux! - Update the public theme-switcher API to support explicitsystemcolor schema handling and unified theme change events.Consumers using
themeSwitcher.themeChanged,themeSwitcher.schemaChanged,setTheme(), orThemeVariantmust update to the new event detail payload and consolidated color-schema behavior. Existing listeners expecting a string event payload or relying onschemaChangedwill need to be migrated. -
#2470
b5e7384Thanks @danielleroux! - Migrate the public theming API from legacy theme classes todata-ix-themeanddata-ix-color-schema, including explicitsystemcolor schema handling.Consumers must stop using legacy theme classes such as
theme-classic-darkandtheme-classic-lightand move to attribute-based theming on<html>.
Minor Changes
-
#2359
8378937Thanks @alexkaduk! - Addedix-datetime-inputcomponent based on datetime-picker -
#2279
40cfbe0Thanks @varun-srinivasa! - Add disabled-state support for ix-tree-item, including the exposed disabled property and corresponding tree item state handling.
Improve ix-tree and ix-tree-item accessibility by updating ARIA roles and positional attributes.Fixes #2091
-
#2521
36ce453Thanks @alexkaduk! -ix-datetime-input: AddminTimeandmaxTimeso the combined date-time field can constrain the time portion. -
#2517
653f136Thanks @alexkaduk! - Extend time bounds toix-time-inputandix-datetime-pickerwith optionalminTime/maxTime(same string shape as each component’s time format tokens). Forix-datetime-picker, validation and UI stay aligned: withminDate/maxDate,minTimeapplies on the minimum day,maxTimeon the maximum day, and days in between are not time-clamped by those props; with no date bounds,minTime/maxTimeact as a daily time window.ix-time-picker: constraint checks use the full span of each hour, minute, and second candidate so disabled states match inclusive bounds (for example, an hour remains selectable whenminTimefalls mid-hour). -
#2458
a6a5309Thanks @danielleroux! -ix-dropdownnow observes the visibility of the trigger element in the viewport while the dropdown is open. If the trigger element scrolls outside the visible viewport, the dropdown will automatically close to prevent it from remaining visible in an unexpected screen position. To keep the dropdown open regardless of trigger visibility, setsuppressTriggerVisibilityChecktotrue. -
#2437
4161ab9Thanks @danielleroux! - Add new componentix-range-fieldwhich can currently display range related inputs. Supported components:ix-date-input,ix-time-inputandix-datetime-input. -
#2478
4231d51Thanks @khathija-ahamadi! - Support directory upload in ix-upload.
Patch Changes
-
#2534
8765757Thanks @danielleroux! - Reduce icon size ofix-datetime-inputto 16 -
#2505
ce6cd94Thanks @lakshmi-priya-b! - Fixed a bug that would display ix-avatar's tooltip when hovering dropdown-items. Fixes #2400 -
#2549
d10b03cThanks @dmytro-halimov! - ix-breadcrumb-item: Remove the slide-in (translateX+ opacity) enter animation, and propagatearia-label(and other host-level ARIA attributes) to the inner button -
#2496
c97d897Thanks @GayatriK2002! - Apply the pointer cursor to checkbox labels so clickable checkbox text has the expected interactive affordance. -
#2542
1333ad8Thanks @alexkaduk! - ix-chip: Apply theprimarystyle when novariantis set or the provided value is not one of the supported variants, so chips no longer render unstyled when consumers omitvariantor pass an empty/unknown value. The same fallback applies in combination withoutline, which now renders as outlineprimaryby default. -
#2502
60a9728Thanks @nuke-ellington! - Fix hover and active background colors of filled status chips (alarm, critical, warning, info, neutral, success) to use the correct design tokens (--theme-color-*--hover/--theme-color-*--active) instead of a semi-transparent black overlay, aligning the rendered result with the Figma specification. Custom color chips retain the overlay approach. Chip padding is also corrected to be uniform across icon and non-icon variants. -
#2511
fdb15b2Thanks @danielleroux! - Fix classic theme hover and active states for buttons, chips, links, and invalid switches, and align classic light and dark variable application with the supported data-attribute theme selectors. -
#2544
3e90786Thanks @dmytro-halimov! - ix-dropdown-button: Hide the trigger's focus outline while the dropdown is expanded so focus is shown only on the active dropdown item.ix-breadcrumb: Stop clipping the focus outline of items flush with the host edges (e.g. the first breadcrumb item or the
...previous-items button). -
#2540
cbb0716Thanks @lzeiml! - Set the correct background color for ix-select withix-warning. -
#2268
c81324bThanks @danielleroux! - Hide the overflow context menu inix-application-headerwhen switching from a small to a medium or large viewport. -
#2465
7406be7Thanks @danielleroux! - Set predefinedaria-labelandaria-pressedattributes to theix-menuexpand button -
#2532
2ec2c70Thanks @lzeiml! - ix-date-picker: fix arrow-key navigation in the day grid while NVDA is running by applying w3 ARIA grid pattern.
ix-time-picker: fix arrow-key navigation in the time columns while NVDA is running by applying aria-rolelistbox. -
#2558
4d35515Thanks @alexkaduk! - Fix striped HTML tables (.ix-table-striped) so alternating row backgrounds are visible. -
#2557
64e6cfeThanks @alexkaduk! - ix-input: Align start/end slot spacing with design tiers. -
#2484
4643a65Thanks @dmytro-halimov! - Toast component now supports screen reader announcements -
#2555
5f141c1Thanks @lzeiml! - Improved keyboard navigation and accessibility for ix-menu-items nested inside ix-menu-category. -
#2541
130df33Thanks @danielleroux! - Render modal loading update messages as plain text so text passed toupdate()is not interpreted as HTML. -
#2415
f4f8921Thanks @alexkaduk! - ix-pill:aria-label,aria-labelledby, and other ARIA attributes set on the host are now exposed on the pill for assistive technologies. Icons are treated as decorative by default; usearia-label-iconwhen the icon carries meaning screen readers should hear. -
#2268
c81324bThanks @danielleroux! - Prevent ix-group from crashing during construction -
#2541
130df33Thanks @danielleroux! - Improve React and Vue wrapper tree shaking so bundlers can exclude unused IX components when importing individual framework components. -
#2405
22699faThanks @alexkaduk! - ix-toggle: Exposes correct switch semantics (role,aria-checked,aria-disabled), keyboard interaction (Space / Enter), and a stable accessible name (setaria-labeloraria-labelledbyon the host; name does not change with state; state is conveyed viaaria-checked). Visible on/off copy is not used as the accessible name.