Skip to content

Releases: epam/UUI

6.4.4 - 01.04.2026

01 Apr 13:59

Choose a tag to compare

What's New

  • [Blocker]: added inset prop (BlockerInset: top, bottom, left, right in px) to control the blocker's coverage area.
  • [Dropdown]: added fallbackPlacements prop to customize alternative placements when preferred placement doesn't fit
  • [DropdownMenu]:
    • IDropdownMenuItemProps now extends IHasRawProps; use rawProps to pass any HTML attributes to the menu item element.
    • Menu arrow-key navigation now includes all roles starting with menuitem (e.g. menuitem, menuitemradio, menuitemcheckbox).
  • [useVirtualList]: Added optional virtualRowInfo prop. When height is provided, skips getBoundingClientRect measurement; when gap is provided, uses it for vertical spacing between rows (flex/grid gap). Improves scroll performance on lists with uniform row sizing.
  • [FiltersPanel]: Added support min/max/step props at numeric filter config (#3034)
  • [Promo]: [IconButton]: add '18' size (#2943)
  • [DataRowOptions]: Added reserveSpace property to checkbox configuration
    • When set and checkbox.isVisible is false, reserves space for the checkbox in the row
    • Automatically calculated for tree-like data structures to maintain consistent alignment

What's Fixed

  • [DataPickerBody]: empty search results are announced via a polite off-screen role="status" region (#1506 Case №9)
  • [VirtualList]: fixed loading Blocker not fully covering the visible area (#3064)
  • [FiltersPanel]: fixed filters being centered instead of left-aligned inside dropdown popups (#3065)
  • [DatePicker]: fixed value disappearing on blur when using formats with day name (e.g. dddd, D MMMM YYYY) (#2560)
  • [TimePicker]: fixed inconsistent time format between input field and dropdown - both now display hours and minutes with leading zeros (e.g., 01:00 AM) (#2910)
  • [uui-core]: fix double decoding in searchToQuery helper (#3058).
  • [Dropdown]: fixed stale closure in onClose and onValueChange callbacks (#3011)
  • [VerticalTabButton]: added aria-selected attribute so screen readers announce the selected tab state (#2742)
  • [DropdownMenuSwitchButton]: prevent calling onValueChange multiple times on Switch click (#3045)
  • [Dropdown]: fixed unexpected placement change from top/bottom to left/right when content doesn't fit the available space. Affects Tooltip, DatePicker, PickerInput, and other components built on Dropdown (#3016)
  • [SortingPanel]: Sort options in the column header dropdown are exposed as role="menuitemradio" with aria-checked, so screen readers announce the selected sort direction (#2992 Case 2).
  • [DataTable]:
    • Table accepts rawProps for additional ARIA/HTML attributes (e.g. aria-label for table name); role, aria-colcount, and aria-rowcount remain controlled by the component. (#2992 Case 3)
    • Fixed Property Explorer by providing values for properties that are not automatically resolved (#2832)
    • Fixed tree table indentation when child rows have no checkbox: child rows now reserve consistent checkbox space for alignment (#2844)
  • [Tooltip]: fixed tooltip not showing on keyboard focus for complex elements with focusable children (e.g. Switch) (#2959)

v6.4.3

04 Feb 08:35

Choose a tag to compare

6.4.3 - 04.02.2026

What's New

  • [TimePicker] improve value applying logic and arrow control behavior (#2953)
  • Uploaded new version of icons pack: icons added: editor-dropdown-outline, editor-radio-fill, navigation-forward-outline

What's Fixed

  • [RangeDatePicker]: clicking on a disabled date clears the input (#3017)
  • [DataTable, FiltersPanel]: fixed issue when not possible to type 0-based value (ie 0, 0.12, 0.8, etc) at empty in-range filter (#2902)
  • [TimePicker]: fixed an unnecessary side effect for onValueChange if the Dropdown was closed with a default state (#3015)
  • [ScrollBars]: added elementEvents property (#2956). The given Event(s) from the elements with the given selector(s) will trigger an update. Useful for cases where OverlayScrollbars' default logic does not detect changes, such as shadow DOM size changes.
  • [SliderRating]: fixed issue where clicking before slider start could set '0' value, bypassing 'n/a' button restriction when withoutNa prop is true (#2768)
  • [SliderRating]: fix tooltip behavior in read-only mode (#2500)
  • [Date Picker]: prevent redundant DatePicker value updates on blur which caused tab order cycling inside dropdowns (#2951)
  • [Burger]: fixed issue when burger content area not being scrollable (#2977, case 1)

v6.4.1

29 Dec 18:30

Choose a tag to compare

6.4.1 - 29.12.2025

What's Fixed

  • [NumericInput]: use 'any' value for step prop by default
  • [useForm]: fixed form revet on value prop change. Before it remained previous isChanged and form history values
  • [PickerInput]: fixed possibility to truncate long text in custom picker row
  • [Slider]: fixed tooltip styles and freezes on change

v6.4.0

15 Dec 14:32

Choose a tag to compare

6.4.0 - 15.12.2025

What's New

  • Added electric dark theme. Add import import '@epam/assets/css/theme/theme_electric_dark.css'; to connect.
    • --uui-surface-sunken variable removed from all themes; use --uui-surface-highest instead.
  • [Inputs/Controls]:Made clickable icons and clear buttons accessible via keyboard (#2845). Now it's possible to focus on them during keyboard navigation.
    • The icon provided by the icon property and the clear button are now button components (ControlIcon) with their own CSS variables, which makes some input-specific variables obsolete.
      • The following CSS variables are no longer available:
        • TextInput (and other inputs that use it):
          • --uui-text_input-icon
          • --uui-text_input-icon-disabled
          • --uui-text_input-icon-clickable
          • --uui-text_input-icon-clickable-hover
          • --uui-text_input-icon-clickable-active
        • PickerInput:
          • --uui-picker_toggler-icon-disabled
          • --uui-picker_toggler-icon-clickable
          • --uui-picker_toggler-icon-clickable-hover
      • The following CSS variables should be used instead:
        • --uui-control_icon
        • --uui-control_icon-clickable
        • --uui-control_icon-clickable-hover
        • --uui-control_icon-clickable-active
    • The icon provided with the icon property in TextInput (and other inputs that use it) is now always displayed in mode="cell", not only on hover.
  • [DataTable]: Improved accessibility: actions in the table header, row checkboxes, and row folding are now reachable from the keyboard.
  • [PickerInput]: Improved accessibility: now it's possible to fold/unfold items using right/left arrows, focus on the items list, and navigate through items with the keyboard (previously possible only when the search was focused).
  • [MainMenu]: Improved accessibility of hidden items in the "More" menu (#2948).
    • Added aria-haspopup="menu" to the "More" button.
    • Added role="menu" to the container wrapping the list of items.
    • Provided an example in the documentation of how to assign role="menuitem" to the items only when they are present in the menu.
  • [DatePicker], [RangeDatePicker]: Added ability to set the initially displayed month and year in the calendar body when the picker opens via the initialViewMonth prop.
  • [Dropdown]: Added fixedBodyPosition prop to control dropdown positioning. Pass true to keep the dropdown list fixed in the position where it was first opened.

What's Fixed

  • [DataTable]: Fixed resizing for right-fixed columns.
  • [TimePicker]: Reworked body open/close behavior. The body now opens on input click or 'Enter' key press (instead of 'focus' on target) and closes on 'Escape' or click outside (instead of target blur). Added focus lock behavior.
  • [uui-core]: Removed isFocusReceiverInsideFocusLock helper function that was causing focus management issues in picker components.
  • [LabeledInput]: Fixed incorrect prop resolution for infoIcon.
  • [PickerInput]: Changed value in aria-haspopup attribute from "true" to "dialog" (#2947).
  • [PickerInput]: Fixed an issue where item count text was truncated in isSingleLine mode.
  • [TextInput]: Removed call to onCancel callback on 'Escape' press.
  • [Pagination]: Fixed an issue where pagination elements were not grouped into a list (#2942).
    • Added "Previous page" and "Next page" aria-labels to the previous and next pages respectively.
  • [DatePickers]: Fixed calendar matrix calculation to use locale-specific firstDayOfWeek from dayjs instead of hardcoded i18n configuration, ensuring correct calendar layout for any locale.
  • [RangeDatePicker]: Display clear icon when at least one date is selected.
  • [PickerInput/PickerModal]: Fixed announcing of a picker item's content in screen readers when the item becomes focused (#2946).
  • [Dropdown]: Added example for fixed body position when toggler changes place.
  • [PresetActionsDropdown]: Fixed unreadable dark text in SuccessNotification after "Copy link" action under Loveship-Dark theme.
  • [TimePicker]: Fixed invalid value reset in case the previous value was empty.
  • [Blocker]: Changed blocker background color and animation.
  • [Error Pages]: Updated error images according to the design.
  • [DataTable]: Fixed 'Not found' block alignment to center.

v6.3.3

14 Oct 16:29

Choose a tag to compare

6.3.3 - 14.10.2025

What's Fixed

  • [ScrollBars]: move 'overlayscrollbars' styles import from TS to CSS, to prevent errors during Next.js build

v6.3.1

14 Oct 16:29

Choose a tag to compare

6.3.1 - 08.10.2025

What's Fixed

  • [DataTable]: fixed virtualization height calculation issues causing excessive empty space in tables

v6.3.0

26 Sep 12:05

Choose a tag to compare

6.3.0 - 26.09.2025

What's New

  • [Tabs]: added new component (#2857)
  • [TabButton]: added activation of tab button by pressing "Space" key (#2857)
  • [FiltersPanel]: added 'disableClear' and 'filter' props for picker filters
  • [ApiContext][Breaking Change]:
    • ApiContext no longer supports auth recovery via the 'message' event; it now uses the 'storage' event instead;
      • To switch to the handling via localStorage replace code of apiReloginPath endpoint to <html><script>window.localStorage.setItem("uui-auth-recovery-success", "true"); window.close();</script></html>
    • The 'opener' is cleared when the auth recovery popup is opened
  • [ScrollBars][Breaking Changes]: migrated from deprecated react-custom-scrollbars-2 to modern overlayscrollbars-react library to fix multiple issues and improve stability. This migration improved scrollbar styling, expanded API capabilities, but introduced some minor breaking changes, that should not affect common use-cases:
    • base component removed from @epam/uui-components, all types moved to @epam/uui;
    • Ref API changed from { container: HTMLDivElement | undefined } to { container: HTMLElement | null, view: HTMLElement | null };
    • autoHide prop changed from boolean to string values ('never' | 'scroll' | 'move' | 'leave'), autoHideTimeout & autoHideDuration replaced with autoHideDelay;
    • removed render callbacks renderView, renderTrackHorizontal, renderTrackVertical, renderThumbHorizontal, renderThumbVertical - now you can customize them via classes and uui css variables;
    • shadows API changed from hasTopShadow, hasBottomShadow to overflowTopEffect, overflowBottomEffect with 'line' | 'shadow' | 'none' values. ScrollBars now handle overflow effects internally - if you had custom shadow/border styling, you can remove it and use the new props instead;
    • overflow management centralized: previously each component (DataTable, VirtualList, Modals) had custom shadow implementations, now all use unified ScrollBars system with CSS classes .-scrolled-top, .-scrolled-bottom, .-scrolled-left, .-scrolled-right. Removed old shadow classes uui-shadow-top-visible, uui-shadow-bottom-visible in favor of unified system;
    • HTML attributes removed from ScrollBars interface - use rawProps instead;
    • on macOS scrollbars now also used UUI styles and always visible by default;
    • improved RTL support and performance;
    • fixed issues #1645, #2548, #2644, #2882, #2893
  • [Dropdown]: dropdown body now closed by Escape key press by default, to ensure proper accessibility compliance. Added closeOnEscape prop (default: true) to change this behavior.
  • [DropdownContainer][Breaking Change]: closeOnEsc prop is removed. Use closeOnEscape prop on Dropdown instead. Replace <DropdownContainer closeOnEsc={false} /> with <Dropdown closeOnEscape={false}><DropdownContainer /></Dropdown> if needed.
  • [Tooltip]: now tooltip body opens by target element focus and disappears on blur or Escape key press to ensure proper accessibility compliance. Added closeOnEscape prop (default: true).
  • [DataTable]: add support of columns configuration modal for table with grouped columns

What's Fixed

  • [useForm]: improved router block removal on discard and custom beforeLeave for close action. Rework useLock to unblock router immediately, rather than on next render
  • [Modals]: fixed incorrect order of abort() calls when pressing ESC with nested modals — now only the topmost modal responds to ESC key (#2873)
  • [Text]: changed fontSize and lineHeight props typings from strict string literal to more common number | string type, to support varied customization cases
  • [RangeDatePicker]: undefined value in preset range now applies like an empty date, not the current one (#2879)
  • [TimePicker]: disabled time editing in time picker body
  • [Dropdown]: fixed zIndex recalculation on dropdown update
  • [DataTable]: fixed preventing row redirect in case of click on -clickable element inside this row

v6.2.0

05 Aug 16:32

Choose a tag to compare

6.2.0 - 05.08.2025

What's New

  • Introduced a UUI docs MCP server for LLM Agents like Cursor IDE and Copilot.
    These MCP tools will respond with comprehensive UUI documentation for each component, including API details, descriptions, and code examples. This will add additional context about UUI usage for LLMs.
    • To connect it to the Cursor IDE, add the following content to .cursor/mcp.json file:
      "mcpServers": {
        "uui": {
          "url": "https://uui.epam.com/api/mcp"
        }
      }
      
    • For Copilot instructions, read this
  • Remove support of deprecated @epam/draft-rte package, this package source code was removed and will no longer receive new updated and release.
  • [MainMenu][Breaking Change]:
    • Removed deprecated children support, use items prop instead

    • removed outdated customer logo(customerLogoUrl, customerLogoLink, customerLogoHref, customerLogoBgColor) and isTransparent props.

    • removed Burger, renderBurger, alwaysShowBurger props, use Burger component in items with collapsedContainer: true option.

    • removed appLogoUrl, logoLink, onLogoClick prop, use MainMenuLogo component instead.

    • see example here

      // Before
        <MainMenu
           cx={ css.menuContainer }
           renderBurger={ renderBurger }
           logoLink={ { pathname: '/' } }
           appLogoUrl="/static/logo.svg"
           onLogoClick={ onLogoClick }
      >
            <MainMenuButton caption="Home" />
        </MainMenu>
      
      // After
        <MainMenu
            cx={ css.menuContainer }
            items={ [
                {
                    id: 'burger',
                    priority: 100,
                    collapsedContainer: true,
                    render: (p) => <Burger key={ p.id } renderBurgerContent={ renderBurger } logoUrl="/static/logo.svg" />,
                },
                {
                    id: 'logo',
                    priority: 99,
                    render: (p) => <MainMenuLogo key={ p.id } link={ { pathname: '/' } } onClick={ onLogoClick } logoUrl="/static/logo.svg"  />,
                },
                {
                    id: 'home',
                    priority: 1,
                    render: (p) => <MainMenuButton key={ p.id } caption="Home" />,
                },
            ] }
        />
  • [VerticalTabButton][Breaking Change]: reworked with improved functionality and styling
    • Updated size variants according to design: '30' | '36' | '48' (was '36' | '48' | '60')
    • Added renderAddons prop for custom addons rendering
    • Deprecated count, onClear, clearIcon props, use renderAddons instead
    • Added indent and isFoldable props
  • [ICanRedirect]:
    • deprecate isLinkActive prop, use new isActive prop instead
    • moved isLinkActive to ICanBeActive interface
    • remove isLinkActive prop from components where it was not used
  • [PresetsPanel]:
    • "Duplicate" action is now only available for unchanged presets
    • "Copy Link" action copies a link to the current (modified) state if the preset is changed, or to the saved preset otherwise
    • Added onCopyLink prop to customize or disable the "Copy Link" action (set to null to hide the action)
  • [Tree]:
    • reworked with improved functionality and styling, moved from @epam/uui-components to @epam/uui package
    • See docs here
  • [DataTable]: added disableVirtualization prop to turn off rows virtualization
  • [RTE]: added possibility to provide your own set of plugins for HTML and MD (de)serializers
  • Uploaded updated icons pack

What's Fixed

  • [DataSources]: fixed handling of selectAll for views with disabled checkboxes
  • [PickerInput]: fixed incorrect selection state in modal for single selection mode
  • [PickerInput]: disabled highlighting search results for row subtitle.
  • [PickerInput]: change color of subtitle text from --uui-text-secondary to --uui-text-tertiary

v6.1.5

28 Jul 16:36

Choose a tag to compare

6.1.5 - 28.07.2025

What's Fixed

  • [DataTable]: fixed DataTableSelectionContext and DataTableFocusContext provider mounting to fix compatibility with React 18

v6.1.4

17 Jun 15:38

Choose a tag to compare

6.1.4 - 17.06.2025

What's Fixed

  • [@epam/uui-test-utils]: fixed various of utils to work with React 18
  • [PickerModal]: fixed disableClear: true behavior for selectionMode: multi, added Clear button functionality to selectionMode: single
  • [PickerInput]: decreased default maxItems prop value from 100 to 20
  • [PickerInput] Stop "Escape" key press event propagation when body is opened (#2839)
  • [useLazyTree]: fixed tree structure update when getParentId function changes. When filter changes trigger tree refetch and affect getParentId logic (e.g., changing groupBy parameter), the tree now correctly clears its structure with updated hierarchy parameters instead of using stale getParentId function.
  • [TreeState]: added optional newParams parameter to clearStructure() method to support updating tree parameters during structure clearing