v4.0.0
Адаптивность
Этот релиз в первую очередь примечателен тем, что VKUI теперь — это адаптивная библиотека
Режимы подключения VKUI и новый компонент AppRoot
Режимы подключения:
- full - приложение полностью на vkui
- embedded - приложение встроенное в html или React приложение
- partial - используются только отдельные компоненты vkui
AppRoot
Новый корневой компонент, автоматически добавляет необходимые классы при full и embedded встраивании
Обязателен во всех случаях кроме partial
Новые компоненты
- ContentCard (спасибо @gbowsky)
- HorizontalCell (спасибо @gbowsky)
- ChipsSelect
- ChipsInput
- CustomSelect
- SliderSwitch
- DatePicker
- NativeSelect (подробности про
Select
читайте ниже) - FormItem
Фиксы и улучшения
CellButton
- Под капотом теперь использует
SimpleCell
. За счет этого избавились от дублирующих стилей и стали больше
соответствовать дизайну - Появилось свойство
centered
, позволяющее при желании отключать центрирование содержимого
Gallery
- Появились кнопки-стрелки для прокрутки по клику
- Если передан
slideIndex
, но не переданonChange
, то компонент "блокируется" аналогично controlled component - Появилось свойство
isDraggable
, контролирующее возможность свайпать галерею
Touch
- Добавлены свойства
onEnter
иonLeave
для отслеживания hover - Добавлено свойство
noSlideClick
, которое игнорирует клик после слайда по компоненту
Tappable
- Если один
Tappable
вложен в другой, то при ховере на дочернемTappable
, с родительского эффект наведения будет убран. То же касается и эффекта состояния active - Добавлены свойства
hasHover
иhasActive
, позволяющие игнорироватьTappable
состояния hover и active
PanelHeader
- Появилось свойство shadow, отвечающее за наличие/отсутствие тени
Group
- Теперь у
Group
два типа отображения —card
иplain
. Тип выставляется автоматически в зависимости от размера
контейнера. Так же можно жестко указать тип свойствомmode
- Внутрь
Group
можно вложить одну или несколько<Group mode="plain" />
.
Подробнее в примерах
ActionSheetItem
- Добавлены свойства
meta
иsubtitle
для более сложного контента - Добавлено свойство
selectable
для создания выделяемыхActionSheetItem
- Стилизовано состояние
disabled
Прочее
- Для наиболее правильного определения iOS используется
IOSDetections
из @vkontakte/vkjs - Скрипты сборки теперь запускаются на всех платформах благодаря фиксу @eolme
- В
CardGrid
убраны лишние боковые отступы #1026 - В SSRContext добавлена возможность передавать BrowserInfo напрямую, что бы можно было переопределить систему. Может понадобиться для предоставлении информации о том, что iPad это iOS, а не macOS
Separator
: новый режимexpanded
, превращающий сепаратор в толстую линиюLink
: добавлены hover/active состоянияGallery
: пофикшен баг с пустыми слайдами (fixes #1151)Search
: появился параметрbefore
для смены иконки #1186 (спасибо @ilyapishchulin)Epic
: Теперь состояние скролла сохраняется для всех вкладок отдельно #1225 (fixes #148)Typography
: добавили свойствоComponent
всем компонентам типографикиRichCell
: добавлено свойствоComponent
PullToRefresh
: работает даже если мало контента и свайп был за пределами PTRLink
: под капотом теперь испозуетTappable
для реализации hover и active состоянийHorizontalScroll
: появились кнопки-стрелки для прокрутки по кликуHeader
: добавлен новыйmode
tertiary
FormLayoutGroup
: появилось свойствоmode
, отвечающее за расположение дочернихFormItem
ConfigProvider
: появилось свойствоplatform
, позволяющее жестко задать платформу
Обратно несовместимые изменения
PanelHeader
- Удалено свойство
addon
.<PanelHeader left={<PanelHeaderBack />} addon="Назад" />
меняется на<PanelHeader left={<PanelHeaderBack label="Назад" />} />
Modal
ModalCard
: в свойствоactions
теперь нужно передавать обычныеReactNode
, а не массив объектовModalCard
: свойствоcaption
переименовано вsubheader
ModalPageHeader
: удалено свойствоnoShadow
. На его месте теперь свойствоseparator
Alert
- Заголовок и текст теперь нужно передавать в свойствах
header
иtext
Forms
FormLayout
теперь просто оборачиваетchildren
вform
. Никакой итерации по детям внутри него нет- В
Input
,Select
и прочие подобные элементы форм больше не нужно передаватьtop
,bottom
иstatus
.
Компоненты нужно оборачивать вFormItem
, передавая ему эти свойства. FormLayoutGroup
так же лишен свойствtop
,bottom
иstatus
. Он теперь предназначен только для группировкиFormItem
Button
- Размеры
xl
,l
иm
изменены наl
,m
иs
соответственно <Button size="l" />
больше не растягивается автоматически на всё ширину. Чтобы добиться растяжения, нужно передать свойство stretched:
Cell
- Удалено свойство
size
. Теперь чтобы отрисоватьCell size="l"
нужно использоватьRichCell
- Свойство
asideContent
переименовано вafter
- Анимация нажатия теперь по-умолчанию включена. Для отключение необходимо передавать свойство
disabled={true}
ActionSheet
- Добавлены обязательные свойства
toggleRef
(для отображения рядом target) иiosCloseItem
Panel
- Удалено устаревшее свойство
separator
, отвечавшее за отрисовку разделителя после шапки. Свойство перекочевало вPanelHeader
MiniInfoCell
- Удалено свойство
multiline
. Вместо него нужно использоватьtextWrap="short"
.
UsersStack
- Компонент лишился внешних отступов. Теперь их нужно устанавливать в месте использования. Мы стараемся избегать предустановленных внешних отступов, чтобы улучшить компоновку
Card, CardGrid и CardScroll
- У
Card
больше нет свойстваsize
. Теперь его нужно передавать в CardGrid и CardScroll
Select
- Теперь рендерит
CustomSelect
/NativeSelect
в зависимости от наличия/отсутствия мышки соответственно - Вместо коллекции
<option value={value}>{title}</option>
нужно передавать массив объектовoptions
с обязательными полямиvalue
иtitle
Прочее
OS
из platform.ts переименован вPlatform
- Содержимое любой панели должно быть обрамлено хотя бы в один
Group
- Теперь
dist/es6
версия стала единственной и переехала в кореньdist/
- Если в
Banner.actions
использовалась<Button mode="tertiary" />
, то теперь этой кнопке нужно так же передать
hasHover={false}