Releases: VKCOM/VKUI
v7.2.0
Новые компоненты
CellButtonGroup
Компонент для группировки CellButton
(#8325)
DirectionProvider
Добавлен компонент для переопределения direction
(#8236)
Поддержка RTL
- Avatar: Поправлено отображение
AvatarBadge
вrtl
режиме (#8128) - CardScroll: Добавлена поддержка
rtl
(#8110) - Cell: Поправлено отображение компонента в
rtl
(#8116) - Gallery: Добавлена поддержка
rtl
(#8085) - Pagination: Поправлено отображение компонента в
rtl
(#8117) - PanelHeaderButton: Поправлено отображение прессета
PanelHeaderBack
вrtl
режиме (#8129) - HorizontalScroll: Добавлена поддержка
rtl
(#8110) - Search: Добавлена поддержка компонента в
rtl
(#8105) - SegmentedControl: Добавлена корректная поддержка
rtl
(#8092) - Snackbar: Добавлена поддержка
rtl
(#8109) - Slider: Добавлена поддержка
rtl
(#8098) - Switch: Добавлена поддержка компонента в
rtl
(#8104)
Улучшения
- ModalCard:
- Search:
- Tooltip: добавлена возможность установки своего якорного элемента для
Popover
снаружи (#8040) - Cell: Увеличена активная область действия контрола для Drag And Drop (#8288)
- ChipsSelect: Добавлено свойство
sortFn
, которое позволяет сортировать опции на основании значения в поле ввода (#8119) - Image: добавлено свойство
filter
, которое применяет одноименный стиль к изображению (#8171) - Popper:
- Добавлено свойство
strategy
(#8178) - Добавлено свойство
flipMiddlewareFallbackAxisSideDirection
позволяющее контролировать поведение при позиционирование по противоположной оси, если по основной позиционирование не удалось (см. [fallbackAxisSideDirection](https://floating-ui.com/docs/flip#fallbackaxissidedirection) (#8332)
- Добавлено свойство
- Progress:
- Alert:
- DateInput:
- добавлено свойство
renderCustomValue
, которое позволяет отрендерить кастомный текст в зависимости от значения в поле (#8168) - добавлено свойство
defaultValue
, теперь можно использовать как неконтролируемый компонент (#8364) - Добавлено свойство
timezone
для отображения времени в нужной таймзоне (#8331)
- добавлено свойство
- HorizontalScroll: Добавлены свойства
ContentWrapperComponent
,contentWrapperRef
иcontentWrapperClassName
для кастомизации обертки над контентом, прокинутом вchildren
(#8140) - CardScroll: Добавлено свойство
CardsListComponent
, которое позволяет поменять тег используемый для списка карточек (#8140) - ModalPage:
- ModalOutsideButton: добавлен компонент для отображения дополнительных кнопок после кнопки закрытия в
compact
-режиме (#8214) - PopoutWrapper: Добавлено свойство
strategy
для управления способом позиционирования компонентом (#8217) - Для компонентов
Popper
,Popover
иTooltip
добавлено свойствоonReferenceHiddenChanged
колбэк срабатывающий при скрытии/появлении якорного элемента при использованииhideWhenReferenceHidden
(#8126) - SubnavigationButton: добавлено
disabled
состояние (#8243) - Добавлен плагин для сортировки стилей в проекте
stylelint-config-recess-order
(#8235) - Добавлен хук
useScroll
, который позволяет скролитьScrollContext
изAppRoot
вручную. (#8137) - ConfigProvider: Добавлен параметр
direction
, который по умолчанию определяется исходя из атрибутаdir
вbody
страницы (#8236) - Экспортирован хук
useFocusVisible
(#8310) - ModalCardBase: добавлено свойство
titleId
, чтобы можно было задать имя модальному окну, связавtitle
и модальное окно черезaria-labelledby
. (#8309) - Popover: Добавлено свойство
disableFocusTrap
для отключения захвата фокуса (#8322) - OnboardingTooltip: Добавлено свойство
disableFocusTrap
для отключения захвата фокуса (#8322) - Calendar:
- CalendarRange: добавлено свойство
defaultValue
, теперь можно использовать как неконтролируемый компонент (#8364) - DateRangeInput: добавлено свойство
defaultValue
, теперь можно использовать как неконтролируемый компонент (#8364) - Flex: Исправлен баг из #7492 избавлением от наследования gap-ов (#8360)
- ContentCard: Добавлено свойство
imageObjectFit
, для измененияobject-fit
у картинки (#8386)
Исправления
- Tooltip: Теперь в качестве
children
можно прокинуть обычный текст (#8040) - CardScroll:
- Поправлена проблема с доступностью компонента, теперь
li
(карточки) являются прямыми потомкамиul
(списка карточек) (#8140) - Изменено значение по умолчанию для свойства
Component
с"ul"
, на"div"
. Для правильно семантики тегов нужно использовать свойствоCardsListComponent
, которое по умолчанию теперь"ul"
(#8140)
- Поправлена проблема с доступностью компонента, теперь
- WriteBarIcon: Исправили фоновый цвет
count
(#8227) - Textarea: Компонент со свойством
disabled
теперь можно прокручивать (#8297) - ModalCard: По умолчанию
title
является именем модального окна для скринридеров (#8309) - Исправлена доступность для
disabled
ссылок (#8329) - Snackbar: Длинный текст выходил за пределы компонента (#8357)
- Исправление предупреждения vite о циклической зависимости (#8354)
- CustomSelect:
- DateInput: Исправляем постоянную смену позиции календаря при переключении месяца (#8332)
- DateRangeInput: Исправляем постоянную смену позиции календаря при переключении месяца (#8332)
- [...
v7.1.3
Исправления
- Pagination: исправлены лэйблы заголовка и кнопок навигации, создающий избыточную информацию для пользователей скринридеров (#8237)
- TabItem: исправляем необходимость дважды нажимать таб на одном элементе (#8241)
- Исправлена проблема с конфликтом
FocusTrap
-ов при нескольких открытых модалках (#8248) - OnboardingTooltip: улучшена поддержка доступности (#8247)
Фокус пользователя зациклен внутри тултипа.
Подложка (overlay) стала прозрачной кнопкой с лэйблом "Закрыть", который можно поменять c помощью свойстваoverlayLabel
.
title
теперь описывает имя тултипа. Еслиtitle
не задан, то следует задатьaria-label
. - Исправлена проблема с использованием библиотеки в проектах, где у всех элементов установлен стиль
box-sizing: border-box
(#8268) - Alert: улучшена доступность компонента (#8266)
Кнопка закрытия, при наличии, первой получает фокус при открытии алерта
В документацию по доступности компонента добавлен пункт по поводу имен кнопок с одинаковыми действиями - HorizontalScroll: отменён фикс #7774 из-за проблем перерисовок в Firefox при прокрутке через тач-пад, теперь невозможность прокрутить колесом мыши над стрелкой навигации будет считаться ограничением компонента (#8293)
- Gallery: поправлено перелистывание слайдов при быстром изменении
slideIndex
(#8292)
Улучшения
- ModalPage: добавлено свойство
disableFocusTrap
для отключения захвата фокуса (#8248)
Нужно для кейса, когда поверх одной модалки открывается другая, чтобы несколькоFocusTrap
не конфликтовали между собой - ModalCard: добавлено свойство
disableFocusTrap
для отключения захвата фокуса (#8248)
Нужно для кейса, когда поверх одной модалки открывается другая, чтобы несколькоFocusTrap
не конфликтовали между собой
Документация
v7.1.2
Исправления
- HorizontalScroll: поправлена остановка всплытия события
onwheel
при прокидыванииscrollOnAnyWheel
(#8177) - ToolButton:
- ModalPage:
- ModalPageHeader: возвращена адаптация через
AdaptivityProvider
(#8200) - ModalCard: возвращена адаптация через
AdaptivityProvider
(#8200) - FormItem: отступы привязаны к токенам. (#8215)
- RichCell: поправлена логика расчета минимальной ширины у
after
(#8199)
Документация
v7.1.1
Исправления
- AppRoot: исправлено отключение блокировки прокрутки при первом рендере (#8124)
- ImageBase: добавлено свойство
elementTiming
для поддержки elementtiming (#8127) - Avatar: добавлено свойство
elementTiming
для поддержки elementtiming (#8127) - Image: добавлено свойство
elementTiming
для поддержки elementtiming (#8127) - TabsItem: разрешили прокидывать
Component
(#8125) - Alert: добавлены свойства
FocusTrap
в свойстваAlert
, так как они итак прокидывались вFocusTrap
, но ругалсяTS
(#8136) - Поправлена двойная прозрачность у элементов ввода (#8123)
- Gallery: не корректно срабатывал
align="center"
при одном слайде (#8141) - SimpleCell: поправлено отображение иконок после текста при
multiline=true
(#8144) - Header: поправлено отображение иконок после текста при
multiline=true
(#8144)
v7.1.0
Новые компоненты
- Image: добавлен сабкомпонент
Image.FloatElement
для позиционирования компонента относительно картинки (#7166)
Улучшения
-
ChipsInput: добавлено свойство
maxHeight
, которое позволяет ограничить высоту компонента (#7998) -
CustomScrollView: добавлено свойство
scrollBehavior
, которое отвечает за настройку стиляscroll-behavior
(#7976) -
-
добавлено свойство DoneButton для отрисовки кастомной кнопки "Готово" (#7971)
Пример
<Calendar value={value} onChange={setValue} + DoneButton={(doneButtonProps) => ( + <Button {...doneButtonProps} mode="primary" /> + )} />
-
Реализована возможность прямого ввода значений времени (#8002)
-
Доработано отображение компонента в
rtl
режиме (#8068)
-
-
-
добавлено свойство DoneButton для отрисовки кастомной кнопки "Готово" (#7971)
Пример
<DateInput value={value} onChange={setValue} + DoneButton={(doneButtonProps) => ( + <Button {...doneButtonProps} mode="primary" /> + )} />
-
Добавлено свойство
onApply
, которое срабатывается при нажатии на кнопкуDone
, которая отображается при использовании флагаenableTime
(#7929) -
Теперь при использовании флага
enableTime
при выборе в календаре не срабатываетсяonChange
. Теперь он сработает, только при нажатии на кнопку"Готово"
(#7929)
-
-
UsersStack: добавлена поддержка отображения компонента в RTL (#7944)
-
Tooltip: добавлено свойство
strategy
, которое позволяет изменять способ позиционирования элемента (#8017) -
Slider: добавлена возможность прокинуть
data-testid
на ползунки с помощью свойствstartThumbTestId
,endThumbTestId
(#8039) -
Pagination: добавлены новые свойства
pageButtonTestId
,prevButtonTestId
,nextButtonTestId
для передачиdata-testid
в интерактивные элементы (#8038) -
- добавлено свойство
arrowClickableArea
для изменения кликабельной области стрелок (#7907) - добавлены
data-testid
для стрелок переключения слайдов:nextArrowTestId
,prevArrowTestId
(#8015) - добавлена возможность прокинуть
data-testid
для bullet'ов –bulletTestId
(#8015) - добавлена возможность прокинуть
data-testid
для слайдов –slideTestId
(#8015) - добавлено свойство
resizeSource
для возможности выбрать тип источника, на котором нужно отслеживать изменения размеров (#8055)'window'
– пересчет позиции слайдов будет происходить при изменении размеровwindow
'element'
– пересчет позиции слайдов будет происходить при изменении размеров компонента
- добавлено свойство
-
HorizontalScroll: добавлена возможность передать
data-testid
в стрелки навигации с помощью новых свойствprevButtonTestId
иnextButtonTestId
(#8032, #8062) -
CardScroll: добавлена возможность передать
data-testid
в стрелки навигации с помощью новых свойствprevButtonTestId
иnextButtonTestId
(#8032, #8062) -
SegmentedControl: добавлена поддержка использования компонента в качестве табов. Для этого нужно прокинуть
role="tablist"
(#7960) -
CustomSelect: добавлено свойство
onInputKeyDown
для обработки события нажатия клавиши (#8002) -
Image: добавлено свойство
objectPosition
для управления css-свойствомobject-position
(#8016) -
CalendarRange: доработано отображение компонента в
rtl
режиме (#8068) -
AspectRatio: добавлена возможность прокинуть в свойство
ratio
значения в виде строки (#8088) -
Исправлена типизация для React 19 (#8058)
-
экспортирован
AccordionContext
(#8063) -
экспортирован
DOMContext
(#8063) -
экспортирован
unstable_useCSSKeyframesAnimationController
(#8063)
Исправления
- DateInput:
- DateRangeInput: исправлена проблема с доступностью, а именно связь с
label
черезid
(#7953) - UsersStack: счетчик теперь адаптивно меняет свою ширину (#8066)
Документация
- В
docs/CONTRIBUTING.md
добавлен пункт про то, как надо описывать свойства для прокидыванияdata-testid
до внутренних компонентов (#8056)
Зависимости
- @vkontakte/vkui-tokens обновлён с 4.56.1 до 4.56.3 (#8051)
- @vkontakte/vkui-tokens обновлён с 4.56.3 до 4.57.0 (#8081)
- @vkontakte/vkui-tokens обновлён с 4.57.0 до 4.58.0 (#8096)
v7.0.1
Документация
- исправлен
hover
-эффекта в навигации (#8031) - Header: исправлено расположение ссылки с иконкой в теме
vkcom
(#8034) - NativeSelect: исправлено наименование компонента (#8003)
- ModalRoot: добавлен FAQ с информацией как создавать обёртки над
ModalPage
иModalCard
(#8100) - В документе Миграция с v6 на v7 дополнена секция
ModalRoot
информацией касаемой обёртки надModalPage
/ModalCard
(#8100)
Исправления
- ModalCard: в DOM попадал параметр
shouldPreserveSnapPoint
, из-за чего React кидал предупреждение в консоль. (#8033) - ModalPage: не применялся
height
на desktop экране (#8036) - ContentCard: поправлен баг с растягиванием контента карточки на всю высоту карточки (#7945)
- PanelHeader:
- ActionSheet: Добавлена возможность прокидывать свойства
FocusTrap
в компонент (#8057) - Popper: свойство
zIndex
теперь корректно устанавливает свойствоz-index
(#8091) - Tooltip: добавлен перенос на следующую строчку для
title
иtooltip
, если длинное неразрывное слово не помещается в ширину тултипа. (#8101)
v7.0.0
TL;DR
Документация по миграции с v6 на v7
BREAKING CHANGE
Tip
Чтобы упростить переход на новую мажорную версию, можно воспользоваться инструментом по автоматической миграции ваших компонентов
Подробную информацию можно найти на этой странице.
⚙️ Сборка
Глобальные настройки
- Подняты минимальные версии браузеров (#7568)
ChromeAndroid >= 63 iOS >= 12 Chrome >= 63 Firefox >= 55 Edge >= 79 Opera >= 50 Safari >= 12 Samsung >= 8.2
- Импортирование теперь ограничено свойством
"exports"
вpackage.json
. Если вам нужен какой-то внутренний функционал, то следует создать issues на его экспорт, чтобы мы рассмотрели такую возможность. (#7611)
CSS-бандл
-
Если вы завязывались на CSS-классы компонентов, то необходимо пройтись по таким местам и проверить классы на соответствие, т.к. теперь за их формирование отвечает CSS Modules. (#7655)
⚠️ Мы всё ещё не рекомендуем завязываться на CSS-классы компонентов – в любой момент они могут измениться.
JS-бандл
-
Поднята целевая версия
ECMAScript
для компиляции доes2017
(#7568) -
Были добавлены use client директивы (#7702)
-
Удалена CommonJS сборка – теперь библиотека поставляется только как ESM. В зависимости от вашего инструмента для сборки, потребуется настроить трансформацию для пакета
@vkontakte/vkui
. (#7611)Возможные проблемы в Jest <= 29
Jest пока не умеет в поле
"exports"
и ориентируется на поле"main"
, которого уже нет в VKUI.Как Workaround, можно написать свой
jest-resolver.js
(см. jestjs/jest#9771 (comment)).const DEPENDENCIES_WITH_NO_MAIN_FIELD = ['@vkontakte/vkui']; module.exports = (path, options) => options.defaultResolver(path, { ...options, packageFilter: (pkg) => DEPENDENCIES_WITH_NO_MAIN_FIELD.includes(pkg.name) ? { ...pkg, main: pkg.module } : pkg, });
Возможные проблемы в Vitets
Может падать с ошибкой
SyntaxError: Named export 'IconAppearanceProvider' not found. The requested module '@vkontakte/icons' is a CommonJS module, which may not support all module.exports as named exports.
.Чтобы исправить это, нужно добавить
@vkontakte/vkui
в параметрtest.server.deps.inline
в конфигеvitest.config.*
.import { defineConfig } from 'vite'; export default defineConfig(({ mode }) => { return { resolve: {}, test: { server: { deps: { inline: [/@vkontakte\/vkui/] } } }, }; });
🌗 Appearance
→ ColorScheme
Название Appearance
для указания светлой или тёмной темы совпадало с названием параметров некоторых компонентов, что могло путать,
поэтому пришли к названию ColorScheme
, также как свойство в CSS.
Это привело к следующим изменениям:
-
Константа
Appearance
переименована вColorScheme
(#7728)Пример миграции
- export const Appearance = { + export const ColorScheme = { DARK: 'dark', LIGHT: 'light', } as const; - const apperance = Appearance.DARK + const colorScheme = ColorScheme.DARK
-
Тип
AppearanceType
переименован вColorSchemeType
(#7728)Пример миграции
- const appearance: ApperanceType = Appearance.DARK; + const colorScheme: ColorSchemeType = ColorScheme.DARK;
-
AppearanceProvider
переименован вColorSchemeProvider
,AppearanceProviderProps
переименован вColorSchemeProviderProps
(#7728)Пример миграции
- const props: AppearanceProviderProps = { + const props: ColorSchemeProviderProps = { value: 'dark' }
Пример миграции
- <AppearanceProvider value={colorScheme}> + <ColorSchemeProvider value={colorScheme}> <AdaptivityProvider sizeY="regular"> <Div style={{ padding: 10 }}> <Textarea id="textarea" /> </Div> </AdaptivityProvider> - </AppearanceProvider> + </ColorSchemeProvider>
-
Хук
useAppearance
переименован вuseColorScheme
(#7728)Пример миграции
- const appearance = useAppearance(); + const colorScheme = useColorScheme();
-
В
ConfigProvider
иConfigProviderProps
свойствоappearance
переименовано вcolorScheme
(#7728)Пример миграции
<ConfigProvider platform="vkcom" - appearance="light" + colorScheme="light" > <AdaptivityProvider viewWidth={ViewWidth.DESKTOP} hasPointer> <Div>Content</Div> </AdaptivityProvider> </ConfigProvider>
-
В
ConfigProviderContext
свойствоappearance
переименовано вcolorScheme
(#7728)Пример миграции
<ConfigProviderContext.Provider value={{ ...configContext, - appearance: 'light' + colorScheme: 'light' }}> {children} </ConfigProviderContext.Provider>
Пример миграции
const { ...args, - appearance + colorScheme } = useConfigProvider();
🖼️ Layout
-
- переработана логика автоматического добавления классов, необходимых для работы VKUI, на документ. Постарались максимально уменьшить их количество. (#7739)
В режимеmode="full"
на html-элемент добавляется класс.vkui
и класс токенов темы, которая сейчас используется. На точку монтирования приложения добавляется класс.vkui__root
.
В режимеmode="embedded"
на точку монтирования добавляются классы.vkui__root
и.vkui__root--embedded
.
В режимеmode="partial"
дополнительные классы не добавляются.
Добавление классов можно отключить с помощью нового свойстваdisableSettingVKUIClassesInRuntime
. Это отключит добавление всех классов, кроме класса токенов.
SSR. Для того, чтобы минимизировать затраты браузера на рендер страницы нужно на стороне сервера проставить все классы самостоятельно. - по умолчанию все плавающие элементы (модальные окна, попапы) рендеряться в
document.body
. Раньше в VKUI дополнительно создавался контейнер для порталов. Мы его убрали, чтобы при старте приложения дополнительно не создавать контейнер вdocument.body
, который может быть не нужен. Переопределить контейнер для рендера порталов всё также можно с помощьюportalRoot
. (#7739)
- переработана логика автоматического добавления классов, необходимых для работы VKUI, на документ. Постарались максимально уменьшить их количество. (#7739)
-
SplitLayout: свойства
popout
иmodal
помечены как@deprecated
(#7739)Теперь что
ModalRoot
, что элементыAlert
,ScreenSpinner
иActionSheet
больше нет необходимости объявлять на верхнем уровне и передавать вSplitLayout
. Такие элементы будут по умолчанию рендерится вdocument.body
. Если хочется вернуть старое поведение, то нужно точечно отключить
функцию портала, передав, например, вModalRoot
передатьusePortal={false}
.Пример миграции
<SplitLayout - modal={<ModalRoot>...</ModalRoot>} > <SplitCol>...</SplitCol> + <ModalRoot usePortal={false}>...</ModalRoot> </SplitLayout>
-
ModalRoot: удалена реализация контекста через
React.cloneElement
, которая требовала передаватьsettlingHeight
иdynamicContentHeight
в обёртки надModalPage
/ModalCard
.Пример миграции (перенос `settlingHeight` / `dynamicContentHeight`)
const SomeWrapper = ({ id }) => ( <ModalPage id={id} + settlingHeight={100} // или dynamicContentHeight /> ); <ModalRoot activeModal="m"> <SomeWrapper id="m" - settlingHeight={100} // или dynamicContentHeight /> </ModalRoot>
Пример миграции (пробрасывание `settlingHeight` / `dynamicContentHeight`)
- const SomeWrapper = ({ id }) => ( + const SomeWrapper = (props) => ( <ModalPage - id={id} + {...props} /> ); <ModalRoot activeModal="m"> <SomeWrapper id="m" settlingHeight={100} // или dynamicContentHeight /> </ModalRoot>
🎨 Синхронизация параметров с дизайном
Чтобы улучшить разработческий опыт при общении с дизайном, в этом релизе разом сократили расхождения по названиям параметров React с Figma.
-
Пример миграции
<ActionSheet onClose={() => {}} - header="Вы действительно хотите удалить это видео из Ваших видео?" + title="Вы действительно хотите удалить это видео из Ваших видео?" - text="Данное действие реально удалит видео, подумайте!" + description="Данное действие реально удалит видео, подумайте!" > <ActionSheetItem mode="destructive">Удалить видео</ActionSheetItem> </ActionSheet>
-
[Alert](https://vkcom.github.io/VKUI...
v7.0.0-beta.2
BREAKING CHANGE
-
Button: изменен цвет компонента в состоянии
mode="primary"
иappearance="neutral"
, при миграции рекомендуется выставлятьmode="secondary"
приappearance="neutral"
(#7802)
Пример миграции
<Button appearance="neutral" + mode="secondary" />
-
ScreenSpinner: удалён
a11y
-текст по умолчанию, передавайте нужный текст вchildren
илиlabel
свойства. (#7821) -
PanelHeader: теперь не переопределяет цвет компонента
Spinner
, поэтому, если вы использовали компонентSpinner
внутриPanelHeader
, передавайте<Spinner noColor />
(#7820) -
FormItem: удалено свойство
topNode
, вместо него можно использовать свойствоtop
(#7837)Пример миграции
<FormItem - topNode={ + top={ <FormItem.Top> <FormItem.TopLabel htmlFor="about">Дополнительная информация</FormItem.TopLabel> <FormItem.TopAside>0/100</FormItem.TopAside> </FormItem.Top> } > <Textarea id="about" name="about" /> </FormItem>
-
DatePicker: компонент был удален, так как являлся устаревшим. На замену ему можно использовать Input, Select и DateInput. О том что лучше использовать, можно прочитать в обсуждении #7070 (#7840)
-
SimpleCell: свойство
subhead
переименовано вoverTitle
(#7861)Пример миграции
<SimpleCell onClick={() => {}} - subhead={"Subhead"} + overTitle={"Subhead"} indicator="При использовании" > Геолокация </SimpleCell>
-
Cell: свойство
subhead
переименовано вoverTitle
(#7861)Пример миграции
<Cell onClick={() => {}} - subhead={"Subhead"} + overTitle={"Subhead"} indicator="При использовании" > Геолокация </Cell>
-
CellButton: свойство
subhead
переименовано вoverTitle
(#7861)Пример миграции
<CellButton onClick={() => {}} - subhead={"Subhead"} + overTitle={"Subhead"} indicator="При использовании" > Геолокация </CellButton>
-
Header: свойство
mode
было удалено. Логика удаления свойстваmode
: (#7863)
size="l" mode="primary"
заменяется наsize="xl"
size="m" mode="primary"
заменяется наsize="m"
mode="tertiary"
заменяется наsize="m"
mode="secondary"
заменяется наsize="s"
-
Calendar: свойство
onClose
переименовано наonDoneButtonClick
(#7880) -
Select: для указания невыбранного состояния теперь необходимо использовать
null
вместоundefined
или пустой строки. То же самое относится и к CustomSelect и NativeSelect (#7822) -
Counter: изменены значения свойства
mode
(#7919)
Было'secondary' | 'primary' | 'prominent' | 'contrast' | 'inherit'
Стало'primary' | 'contrast' | 'tertiary' | 'inherit'
Логика перехода на новые значения:
Таблица миграции значений:Старое значение Новые свойства inherit mode="inherit" (без изменений) primary mode="primary" appearance="accent" secondary mode="primary" appearance="neutral" prominent mode="primary" appearance="accent-red" contrast mode="contrast" appearance="accent" -
Link: теперь для передачи иконок следует использовать параметры
before
иafter
, CSS свойства, которые через каскад задавались переданным иконкам вchildren
, удалены (#7957)Пример миграции
<Link href="#" + after={<Icon12Example />} > Текст ссылки - <Icon12Example /> </Link>
-
- у пресета
PanelHeaderClose
удалено свойствоchildren
. Теперь для прокидывания текста дляa11y
нужно прокидывать его в свойствоlabel
(#7874) - у пресета
PanelHeaderSubmit
удалено свойствоchildren
. Теперь для прокидывания текста дляa11y
нужно прокидывать его в свойствоlabel
(#7874) - у пресета
PanelHeaderEdit
удалены свойстваchildren
иlabel
. Вместоlabel
можно использовать свойстваdoneLabel
иeditLabel
. Свойствоchildren
не использовалось. (#7874) - у пресета
PanelHeaderBack
удалено свойствоchildren
. Теперь для прокидывания текста дляa11y
нужно прокидывать его в свойствоlabel
. Логика отображенияlabel
осталась как была, в отличие от других пресетов. Также для более точно настройкиlabel
были добавлены свойстваhideLabelOnVKCom
иhideLabelOnIOS
, чтобы можно было скрыватьlabel
на соответствующей платформе.
- у пресета
Улучшения
-
Header: добавлены значения для свойства size:
's'
и'xl'
(#7863) -
Select: в колбэк
onChange
помимо ChangeEvent теперь прокидывается новое значение вторым аргументом. Рекомендуется использовать именно второй аргумент. То же самое относится и к CustomSelect и NativeSelect (#7822)Пример
<Select id="select-type-select-id" value={selectType} placeholder="Не задан" options={selectTypes} - onChange={e => setSelectType(e.target.value)} + onChange={(_, newType) => setSelectType(newType)} />
-
useScrollLock: теперь при
<AppRoot scroll="global" />
в<html>
добавляетсяoverscroll-behavior: none
, чтобы избегать pull-to-refresh. (#7881) -
ChipsInput: импортированы типы
ChipOptionValue
иChipOptionLabel
(#7892) -
CustomScrollView: импортирован тип
CustomScrollViewProps
(#7892) -
CalendarRange: Добавлены свойства для установки
data-testid
у вложенных элементов (#7705) -
Popover: расширен тип свойства
restoreFocus
доboolean | 'anchor-element' | HTMLElement
для указания на какой элемент будет возвращен фокус после закрытияPopover
. Полезно для кейса сPopover
сtrigger="hover"
, при установкеrestoreFocus="anchor-element"
фокус всегда будет возвращаться в якорный элемент (#7806) -
Link: появился параметр
noUnderline
, отключающий подчеркивание при наведении (#7957) -
Spacing: добавлена возможность передать
css
-переменную вsize
(#7955) -
Separator: добавлена возможность передать
css
-переменную вsize
(#7955) -
добавлен экспорт
AppRootPortal
(#7996)
Новые компоненты
- Добавлен экспорт
FloatingArrow
, использующийся компонентамиPopover
,Tooltip
,Popper
(#7977)
Исправления
- [Gallery](https://vk...
v6.7.4
Исправления
- Gallery:
- не работало переключение слайдов в условиях, когда общая ширина слайдов меньше контейнера, но за счёт отступа из-за выравнивания по центру (
align="center"
) слайды немного не помещаются в контейнере. (#7862) - теперь во время
drag
происходит остановка автопереключения слайдов (#7877) - исправлена ошибка при отсутствии слайдов в режиме
looped
(#7686)
- не работало переключение слайдов в условиях, когда общая ширина слайдов меньше контейнера, но за счёт отступа из-за выравнивания по центру (
- HorizontalScroll: исправлена проблема с отсутствием скрола при наведении на стрелки (#7882)
- DateInput: инициализируем секунды и миллисекунды (часы и минуты при вводе без времени) нулевыми значениями при ручном вводе даты (#7872)
- Tappable: вернули работу hasActive свойства, исправили отсутствие activated-состояния при некоторых условиях (#7910)
- Исправлены ошибки в
Content Security Policy (CSP)
связанные с тем, что вCustomResizeObserver
создавалсяiframe
сsrc="javascript:void(0)"
, теперьiframe
создается без явного указанияsrc
, что позволяет браузеру самостоятельно заполнить это поле. Значение по умолчанию для браузеров:src="about:blank"
(#7933)
Улучшения
- DateInput:
- DateRangeInput:
- Calendar:
- CalendarRange: Добавлены свойства для установки
data-testid
у вложенных элементов (#7705) - Popover: расширен тип свойства
restoreFocus
доboolean | 'anchor-element' | HTMLElement
для указания на какой элемент будет возвращен фокус после закрытияPopover
. Полезно для кейса сPopover
сtrigger="hover"
, при установкеrestoreFocus="anchor-element"
фокус всегда будет возвращаться в якорный элемент (#7806)
v6.7.3
Исправления
- Button:
loading
неверно отображался вcssm
-сборке. (#7734) - CustomSelect: для
touch
-устройств исправлен фокус на инпуте при клике наCustomSelect
ближе к правому краю, в районе стрелки. (#7816) - FormLayoutGroup: исправлено возможное переполнение контейнера
FormLayoutGroup
, если внутри используется дваFormField
в горизонтальной ориентации и у первогоFormField
в свойствеtop
находится очень длинный текст. (#7819) - Gallery: исправлена ошибка при отсутствии слайдов в режиме
looped
. (#7686)