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: добавлено свойствоComponentPullToRefresh: работает даже если мало контента и свайп был за пределами PTRLink: под капотом теперь испозуетTappableдля реализации hover и active состоянийHorizontalScroll: появились кнопки-стрелки для прокрутки по кликуHeader: добавлен новыйmodetertiaryFormLayoutGroup: появилось свойствоmode, отвечающее за расположение дочернихFormItemConfigProvider: появилось свойствоplatform, позволяющее жестко задать платформу
Обратно несовместимые изменения
PanelHeader
- Удалено свойство
addon.<PanelHeader left={<PanelHeaderBack />} addon="Назад" />меняется на<PanelHeader left={<PanelHeaderBack label="Назад" />} />
Modal
ModalCard: в свойствоactionsтеперь нужно передавать обычныеReactNode, а не массив объектовModalCard: свойствоcaptionпереименовано вsubheaderModalPageHeader: удалено свойство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}