@vkontakte/vkui 4.20.0 → 4.22.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.cache/.eslintcache +1 -1
- package/.cache/.stylelintcache +1 -1
- package/.cache/.tsbuildinfo +414 -116
- package/.cache/ts/src/components/Avatar/Avatar.d.ts +2 -0
- package/.cache/ts/src/components/Cell/Cell.d.ts +11 -0
- package/.cache/ts/src/components/Cell/CellCheckbox/CellCheckbox.d.ts +5 -0
- package/.cache/ts/src/components/Cell/CellDragger/CellDragger.d.ts +6 -0
- package/.cache/ts/src/components/Cell/useDraggable.d.ts +13 -0
- package/.cache/ts/src/components/CustomSelect/CustomSelect.d.ts +0 -1
- package/.cache/ts/src/components/DropdownIcon/DropdownIcon.d.ts +3 -0
- package/.cache/ts/src/components/FocusTrap/FocusTrap.d.ts +2 -3
- package/.cache/ts/src/components/FormField/FormField.d.ts +2 -3
- package/.cache/ts/src/components/FormItem/FormItem.d.ts +2 -3
- package/.cache/ts/src/components/FormLayout/FormLayout.d.ts +2 -4
- package/.cache/ts/src/components/GridAvatar/GridAvatar.d.ts +9 -0
- package/.cache/ts/src/components/HorizontalCell/HorizontalCell.d.ts +2 -3
- package/.cache/ts/src/components/HorizontalScroll/HorizontalScroll.d.ts +3 -2
- package/.cache/ts/src/components/InitialsAvatar/InitialsAvatar.d.ts +33 -0
- package/.cache/ts/src/components/Link/Link.d.ts +1 -2
- package/.cache/ts/src/components/ModalRoot/types.d.ts +0 -1
- package/.cache/ts/src/components/ModalRoot/useModalManager.d.ts +37 -0
- package/.cache/ts/src/components/Removable/Removable.d.ts +2 -1
- package/.cache/ts/src/components/SimpleCell/SimpleCell.d.ts +2 -2
- package/.cache/ts/src/components/SplitCol/SplitCol.d.ts +3 -3
- package/.cache/ts/src/components/SubnavigationBar/SubnavigationBar.d.ts +2 -1
- package/.cache/ts/src/components/Switch/Switch.d.ts +2 -3
- package/.cache/ts/src/components/TabbarItem/TabbarItem.d.ts +3 -1
- package/.cache/ts/src/components/Tappable/Tappable.d.ts +2 -3
- package/.cache/ts/src/components/Touch/Touch.d.ts +16 -17
- package/.cache/ts/src/components/Typography/Caption/Caption.d.ts +2 -2
- package/.cache/ts/src/components/Typography/Headline/Headline.d.ts +2 -2
- package/.cache/ts/src/components/Typography/Subhead/Subhead.d.ts +2 -2
- package/.cache/ts/src/components/Typography/Text/Text.d.ts +2 -3
- package/.cache/ts/src/components/Typography/Title/Title.d.ts +2 -2
- package/.cache/ts/src/components/View/utils.d.ts +2 -0
- package/.cache/ts/src/index.d.ts +4 -0
- package/.cache/ts/src/lib/accessibility.d.ts +1 -1
- package/.cache/ts/src/lib/supportEvents.d.ts +3 -1
- package/.cache/ts/src/types.d.ts +3 -0
- package/dist/cjs/components/ActionSheet/ActionSheet.js +7 -9
- package/dist/cjs/components/ActionSheet/ActionSheet.js.map +1 -1
- package/dist/cjs/components/Avatar/Avatar.d.ts +2 -0
- package/dist/cjs/components/Avatar/Avatar.js +7 -3
- package/dist/cjs/components/Avatar/Avatar.js.map +1 -1
- package/dist/cjs/components/Banner/Banner.js.map +1 -1
- package/dist/cjs/components/Button/Button.js.map +1 -1
- package/dist/cjs/components/CardScroll/CardScroll.js +1 -1
- package/dist/cjs/components/CardScroll/CardScroll.js.map +1 -1
- package/dist/cjs/components/Cell/Cell.d.ts +11 -0
- package/dist/cjs/components/Cell/Cell.js +109 -182
- package/dist/cjs/components/Cell/Cell.js.map +1 -1
- package/dist/cjs/components/Cell/CellCheckbox/CellCheckbox.d.ts +5 -0
- package/dist/cjs/components/Cell/CellCheckbox/CellCheckbox.js +50 -0
- package/dist/cjs/components/Cell/CellCheckbox/CellCheckbox.js.map +1 -0
- package/dist/cjs/components/Cell/CellDragger/CellDragger.d.ts +6 -0
- package/dist/cjs/components/Cell/CellDragger/CellDragger.js +53 -0
- package/dist/cjs/components/Cell/CellDragger/CellDragger.js.map +1 -0
- package/dist/cjs/components/Cell/useDraggable.d.ts +13 -0
- package/dist/cjs/components/Cell/useDraggable.js +142 -0
- package/dist/cjs/components/Cell/useDraggable.js.map +1 -0
- package/dist/cjs/components/ChipsSelect/ChipsSelect.js +2 -2
- package/dist/cjs/components/ChipsSelect/ChipsSelect.js.map +1 -1
- package/dist/cjs/components/Counter/Counter.js.map +1 -1
- package/dist/cjs/components/CustomSelect/CustomSelect.d.ts +0 -1
- package/dist/cjs/components/CustomSelect/CustomSelect.js +2 -3
- package/dist/cjs/components/CustomSelect/CustomSelect.js.map +1 -1
- package/dist/cjs/components/DropdownIcon/DropdownIcon.d.ts +3 -0
- package/dist/cjs/components/DropdownIcon/DropdownIcon.js +37 -0
- package/dist/cjs/components/DropdownIcon/DropdownIcon.js.map +1 -0
- package/dist/cjs/components/FocusTrap/FocusTrap.d.ts +2 -3
- package/dist/cjs/components/FocusTrap/FocusTrap.js +3 -5
- package/dist/cjs/components/FocusTrap/FocusTrap.js.map +1 -1
- package/dist/cjs/components/FormField/FormField.d.ts +2 -3
- package/dist/cjs/components/FormField/FormField.js.map +1 -1
- package/dist/cjs/components/FormItem/FormItem.d.ts +2 -3
- package/dist/cjs/components/FormItem/FormItem.js.map +1 -1
- package/dist/cjs/components/FormLayout/FormLayout.d.ts +2 -4
- package/dist/cjs/components/FormLayout/FormLayout.js.map +1 -1
- package/dist/cjs/components/FormLayoutGroup/FormLayoutGroup.js +1 -0
- package/dist/cjs/components/FormLayoutGroup/FormLayoutGroup.js.map +1 -1
- package/dist/cjs/components/GridAvatar/GridAvatar.d.ts +9 -0
- package/dist/cjs/components/GridAvatar/GridAvatar.js +61 -0
- package/dist/cjs/components/GridAvatar/GridAvatar.js.map +1 -0
- package/dist/cjs/components/Header/Header.js.map +1 -1
- package/dist/cjs/components/HorizontalCell/HorizontalCell.d.ts +2 -3
- package/dist/cjs/components/HorizontalCell/HorizontalCell.js.map +1 -1
- package/dist/cjs/components/HorizontalScroll/HorizontalScroll.d.ts +3 -2
- package/dist/cjs/components/HorizontalScroll/HorizontalScroll.js +10 -13
- package/dist/cjs/components/HorizontalScroll/HorizontalScroll.js.map +1 -1
- package/dist/cjs/components/InitialsAvatar/InitialsAvatar.d.ts +33 -0
- package/dist/cjs/components/InitialsAvatar/InitialsAvatar.js +64 -0
- package/dist/cjs/components/InitialsAvatar/InitialsAvatar.js.map +1 -0
- package/dist/cjs/components/Link/Link.d.ts +1 -2
- package/dist/cjs/components/Link/Link.js.map +1 -1
- package/dist/cjs/components/ModalRoot/ModalRoot.js +170 -373
- package/dist/cjs/components/ModalRoot/ModalRoot.js.map +1 -1
- package/dist/cjs/components/ModalRoot/ModalRootContext.js +0 -3
- package/dist/cjs/components/ModalRoot/ModalRootContext.js.map +1 -1
- package/dist/cjs/components/ModalRoot/ModalRootDesktop.js +59 -241
- package/dist/cjs/components/ModalRoot/ModalRootDesktop.js.map +1 -1
- package/dist/cjs/components/ModalRoot/types.d.ts +0 -1
- package/dist/cjs/components/ModalRoot/types.js.map +1 -1
- package/dist/cjs/components/ModalRoot/useModalManager.d.ts +37 -0
- package/dist/cjs/components/ModalRoot/useModalManager.js +213 -0
- package/dist/cjs/components/ModalRoot/useModalManager.js.map +1 -0
- package/dist/cjs/components/NativeSelect/NativeSelect.js +2 -2
- package/dist/cjs/components/NativeSelect/NativeSelect.js.map +1 -1
- package/dist/cjs/components/Removable/Removable.d.ts +2 -1
- package/dist/cjs/components/Removable/Removable.js +75 -66
- package/dist/cjs/components/Removable/Removable.js.map +1 -1
- package/dist/cjs/components/SelectMimicry/SelectMimicry.js +2 -2
- package/dist/cjs/components/SelectMimicry/SelectMimicry.js.map +1 -1
- package/dist/cjs/components/SimpleCell/SimpleCell.d.ts +2 -2
- package/dist/cjs/components/SimpleCell/SimpleCell.js.map +1 -1
- package/dist/cjs/components/SplitCol/SplitCol.d.ts +3 -3
- package/dist/cjs/components/SplitCol/SplitCol.js +2 -4
- package/dist/cjs/components/SplitCol/SplitCol.js.map +1 -1
- package/dist/cjs/components/SubnavigationBar/SubnavigationBar.d.ts +2 -1
- package/dist/cjs/components/SubnavigationBar/SubnavigationBar.js +38 -11
- package/dist/cjs/components/SubnavigationBar/SubnavigationBar.js.map +1 -1
- package/dist/cjs/components/SubnavigationButton/SubnavigationButton.js.map +1 -1
- package/dist/cjs/components/Switch/Switch.d.ts +2 -3
- package/dist/cjs/components/Switch/Switch.js +18 -8
- package/dist/cjs/components/Switch/Switch.js.map +1 -1
- package/dist/cjs/components/Tabbar/Tabbar.js +3 -1
- package/dist/cjs/components/Tabbar/Tabbar.js.map +1 -1
- package/dist/cjs/components/TabbarItem/TabbarItem.d.ts +3 -1
- package/dist/cjs/components/TabbarItem/TabbarItem.js +29 -11
- package/dist/cjs/components/TabbarItem/TabbarItem.js.map +1 -1
- package/dist/cjs/components/Tappable/Tappable.d.ts +2 -3
- package/dist/cjs/components/Tappable/Tappable.js.map +1 -1
- package/dist/cjs/components/Textarea/Textarea.js +9 -7
- package/dist/cjs/components/Textarea/Textarea.js.map +1 -1
- package/dist/cjs/components/Touch/Touch.d.ts +16 -17
- package/dist/cjs/components/Touch/Touch.js +21 -7
- package/dist/cjs/components/Touch/Touch.js.map +1 -1
- package/dist/cjs/components/Typography/Caption/Caption.d.ts +2 -2
- package/dist/cjs/components/Typography/Caption/Caption.js +4 -2
- package/dist/cjs/components/Typography/Caption/Caption.js.map +1 -1
- package/dist/cjs/components/Typography/Headline/Headline.d.ts +2 -2
- package/dist/cjs/components/Typography/Headline/Headline.js +2 -1
- package/dist/cjs/components/Typography/Headline/Headline.js.map +1 -1
- package/dist/cjs/components/Typography/Subhead/Subhead.d.ts +2 -2
- package/dist/cjs/components/Typography/Subhead/Subhead.js +2 -1
- package/dist/cjs/components/Typography/Subhead/Subhead.js.map +1 -1
- package/dist/cjs/components/Typography/Text/Text.d.ts +2 -3
- package/dist/cjs/components/Typography/Text/Text.js +2 -1
- package/dist/cjs/components/Typography/Text/Text.js.map +1 -1
- package/dist/cjs/components/Typography/Title/Title.d.ts +2 -2
- package/dist/cjs/components/Typography/Title/Title.js +9 -4
- package/dist/cjs/components/Typography/Title/Title.js.map +1 -1
- package/dist/cjs/components/View/View.js +68 -75
- package/dist/cjs/components/View/View.js.map +1 -1
- package/dist/cjs/components/View/ViewInfinite.js +78 -85
- package/dist/cjs/components/View/ViewInfinite.js.map +1 -1
- package/dist/cjs/components/View/utils.d.ts +2 -0
- package/dist/cjs/components/View/utils.js +13 -0
- package/dist/cjs/components/View/utils.js.map +1 -0
- package/dist/cjs/index.d.ts +4 -0
- package/dist/cjs/index.js +16 -0
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/lib/accessibility.d.ts +1 -1
- package/dist/cjs/lib/accessibility.js.map +1 -1
- package/dist/cjs/lib/prefixClass.js +7 -6
- package/dist/cjs/lib/prefixClass.js.map +1 -1
- package/dist/cjs/lib/supportEvents.d.ts +3 -1
- package/dist/cjs/lib/supportEvents.js +1 -4
- package/dist/cjs/lib/supportEvents.js.map +1 -1
- package/dist/cjs/types.d.ts +3 -0
- package/dist/components/ActionSheet/ActionSheet.js +6 -9
- package/dist/components/ActionSheet/ActionSheet.js.map +1 -1
- package/dist/components/Avatar/Avatar.d.ts +2 -0
- package/dist/components/Avatar/Avatar.js +4 -2
- package/dist/components/Avatar/Avatar.js.map +1 -1
- package/dist/components/Banner/Banner.js.map +1 -1
- package/dist/components/Button/Button.js.map +1 -1
- package/dist/components/CardScroll/CardScroll.js +1 -1
- package/dist/components/CardScroll/CardScroll.js.map +1 -1
- package/dist/components/Cell/Cell.d.ts +11 -0
- package/dist/components/Cell/Cell.js +103 -177
- package/dist/components/Cell/Cell.js.map +1 -1
- package/dist/components/Cell/CellCheckbox/CellCheckbox.d.ts +5 -0
- package/dist/components/Cell/CellCheckbox/CellCheckbox.js +31 -0
- package/dist/components/Cell/CellCheckbox/CellCheckbox.js.map +1 -0
- package/dist/components/Cell/CellDragger/CellDragger.d.ts +6 -0
- package/dist/components/Cell/CellDragger/CellDragger.js +30 -0
- package/dist/components/Cell/CellDragger/CellDragger.js.map +1 -0
- package/dist/components/Cell/useDraggable.d.ts +13 -0
- package/dist/components/Cell/useDraggable.js +126 -0
- package/dist/components/Cell/useDraggable.js.map +1 -0
- package/dist/components/ChipsSelect/ChipsSelect.js +2 -2
- package/dist/components/ChipsSelect/ChipsSelect.js.map +1 -1
- package/dist/components/Counter/Counter.js.map +1 -1
- package/dist/components/CustomSelect/CustomSelect.d.ts +0 -1
- package/dist/components/CustomSelect/CustomSelect.js +3 -5
- package/dist/components/CustomSelect/CustomSelect.js.map +1 -1
- package/dist/components/DropdownIcon/DropdownIcon.d.ts +3 -0
- package/dist/components/DropdownIcon/DropdownIcon.js +19 -0
- package/dist/components/DropdownIcon/DropdownIcon.js.map +1 -0
- package/dist/components/FocusTrap/FocusTrap.d.ts +2 -3
- package/dist/components/FocusTrap/FocusTrap.js +3 -5
- package/dist/components/FocusTrap/FocusTrap.js.map +1 -1
- package/dist/components/FormField/FormField.d.ts +2 -3
- package/dist/components/FormField/FormField.js.map +1 -1
- package/dist/components/FormItem/FormItem.d.ts +2 -3
- package/dist/components/FormItem/FormItem.js.map +1 -1
- package/dist/components/FormLayout/FormLayout.d.ts +2 -4
- package/dist/components/FormLayout/FormLayout.js.map +1 -1
- package/dist/components/FormLayoutGroup/FormLayoutGroup.js +1 -0
- package/dist/components/FormLayoutGroup/FormLayoutGroup.js.map +1 -1
- package/dist/components/GridAvatar/GridAvatar.d.ts +9 -0
- package/dist/components/GridAvatar/GridAvatar.js +41 -0
- package/dist/components/GridAvatar/GridAvatar.js.map +1 -0
- package/dist/components/Header/Header.js.map +1 -1
- package/dist/components/HorizontalCell/HorizontalCell.d.ts +2 -3
- package/dist/components/HorizontalCell/HorizontalCell.js.map +1 -1
- package/dist/components/HorizontalScroll/HorizontalScroll.d.ts +3 -2
- package/dist/components/HorizontalScroll/HorizontalScroll.js +10 -12
- package/dist/components/HorizontalScroll/HorizontalScroll.js.map +1 -1
- package/dist/components/InitialsAvatar/InitialsAvatar.d.ts +33 -0
- package/dist/components/InitialsAvatar/InitialsAvatar.js +46 -0
- package/dist/components/InitialsAvatar/InitialsAvatar.js.map +1 -0
- package/dist/components/Link/Link.d.ts +1 -2
- package/dist/components/Link/Link.js.map +1 -1
- package/dist/components/ModalRoot/ModalRoot.js +167 -376
- package/dist/components/ModalRoot/ModalRoot.js.map +1 -1
- package/dist/components/ModalRoot/ModalRootContext.js +0 -3
- package/dist/components/ModalRoot/ModalRootContext.js.map +1 -1
- package/dist/components/ModalRoot/ModalRootDesktop.js +58 -244
- package/dist/components/ModalRoot/ModalRootDesktop.js.map +1 -1
- package/dist/components/ModalRoot/types.d.ts +0 -1
- package/dist/components/ModalRoot/types.js.map +1 -1
- package/dist/components/ModalRoot/useModalManager.d.ts +37 -0
- package/dist/components/ModalRoot/useModalManager.js +189 -0
- package/dist/components/ModalRoot/useModalManager.js.map +1 -0
- package/dist/components/NativeSelect/NativeSelect.js +2 -2
- package/dist/components/NativeSelect/NativeSelect.js.map +1 -1
- package/dist/components/Removable/Removable.d.ts +2 -1
- package/dist/components/Removable/Removable.js +73 -64
- package/dist/components/Removable/Removable.js.map +1 -1
- package/dist/components/SelectMimicry/SelectMimicry.js +2 -2
- package/dist/components/SelectMimicry/SelectMimicry.js.map +1 -1
- package/dist/components/SimpleCell/SimpleCell.d.ts +2 -2
- package/dist/components/SimpleCell/SimpleCell.js.map +1 -1
- package/dist/components/SplitCol/SplitCol.d.ts +3 -3
- package/dist/components/SplitCol/SplitCol.js +2 -4
- package/dist/components/SplitCol/SplitCol.js.map +1 -1
- package/dist/components/SubnavigationBar/SubnavigationBar.d.ts +2 -1
- package/dist/components/SubnavigationBar/SubnavigationBar.js +38 -11
- package/dist/components/SubnavigationBar/SubnavigationBar.js.map +1 -1
- package/dist/components/SubnavigationButton/SubnavigationButton.js.map +1 -1
- package/dist/components/Switch/Switch.d.ts +2 -3
- package/dist/components/Switch/Switch.js +15 -8
- package/dist/components/Switch/Switch.js.map +1 -1
- package/dist/components/Tabbar/Tabbar.js +3 -1
- package/dist/components/Tabbar/Tabbar.js.map +1 -1
- package/dist/components/TabbarItem/TabbarItem.d.ts +3 -1
- package/dist/components/TabbarItem/TabbarItem.js +26 -10
- package/dist/components/TabbarItem/TabbarItem.js.map +1 -1
- package/dist/components/Tappable/Tappable.d.ts +2 -3
- package/dist/components/Tappable/Tappable.js.map +1 -1
- package/dist/components/Textarea/Textarea.js +9 -6
- package/dist/components/Textarea/Textarea.js.map +1 -1
- package/dist/components/Touch/Touch.d.ts +16 -17
- package/dist/components/Touch/Touch.js +21 -7
- package/dist/components/Touch/Touch.js.map +1 -1
- package/dist/components/Typography/Caption/Caption.d.ts +2 -2
- package/dist/components/Typography/Caption/Caption.js +4 -2
- package/dist/components/Typography/Caption/Caption.js.map +1 -1
- package/dist/components/Typography/Headline/Headline.d.ts +2 -2
- package/dist/components/Typography/Headline/Headline.js +2 -1
- package/dist/components/Typography/Headline/Headline.js.map +1 -1
- package/dist/components/Typography/Subhead/Subhead.d.ts +2 -2
- package/dist/components/Typography/Subhead/Subhead.js +2 -1
- package/dist/components/Typography/Subhead/Subhead.js.map +1 -1
- package/dist/components/Typography/Text/Text.d.ts +2 -3
- package/dist/components/Typography/Text/Text.js +2 -1
- package/dist/components/Typography/Text/Text.js.map +1 -1
- package/dist/components/Typography/Title/Title.d.ts +2 -2
- package/dist/components/Typography/Title/Title.js +9 -4
- package/dist/components/Typography/Title/Title.js.map +1 -1
- package/dist/components/View/View.js +67 -75
- package/dist/components/View/View.js.map +1 -1
- package/dist/components/View/ViewInfinite.js +79 -87
- package/dist/components/View/ViewInfinite.js.map +1 -1
- package/dist/components/View/utils.d.ts +2 -0
- package/dist/components/View/utils.js +6 -0
- package/dist/components/View/utils.js.map +1 -0
- package/dist/components.css +1 -1
- package/dist/components.css.map +1 -1
- package/dist/cssm/components/ActionSheet/ActionSheet.js +6 -9
- package/dist/cssm/components/ActionSheet/ActionSheet.js.map +1 -1
- package/dist/cssm/components/Avatar/Avatar.js +4 -2
- package/dist/cssm/components/Avatar/Avatar.js.map +1 -1
- package/dist/cssm/components/Banner/Banner.js.map +1 -1
- package/dist/cssm/components/Button/Button.css +1 -1
- package/dist/cssm/components/Button/Button.js.map +1 -1
- package/dist/cssm/components/CardScroll/CardScroll.js +1 -1
- package/dist/cssm/components/CardScroll/CardScroll.js.map +1 -1
- package/dist/cssm/components/Cell/Cell.css +1 -1
- package/dist/cssm/components/Cell/Cell.js +103 -177
- package/dist/cssm/components/Cell/Cell.js.map +1 -1
- package/dist/cssm/components/Cell/CellCheckbox/CellCheckbox.css +1 -0
- package/dist/cssm/components/Cell/CellCheckbox/CellCheckbox.js +32 -0
- package/dist/cssm/components/Cell/CellCheckbox/CellCheckbox.js.map +1 -0
- package/dist/cssm/components/Cell/CellDragger/CellDragger.css +1 -0
- package/dist/cssm/components/Cell/CellDragger/CellDragger.js +31 -0
- package/dist/cssm/components/Cell/CellDragger/CellDragger.js.map +1 -0
- package/dist/cssm/components/Cell/useDraggable.js +126 -0
- package/dist/cssm/components/Cell/useDraggable.js.map +1 -0
- package/dist/cssm/components/ChipsSelect/ChipsSelect.js +2 -2
- package/dist/cssm/components/ChipsSelect/ChipsSelect.js.map +1 -1
- package/dist/cssm/components/Counter/Counter.js.map +1 -1
- package/dist/cssm/components/CustomSelect/CustomSelect.js +3 -5
- package/dist/cssm/components/CustomSelect/CustomSelect.js.map +1 -1
- package/dist/cssm/components/DropdownIcon/DropdownIcon.css +1 -0
- package/dist/cssm/components/DropdownIcon/DropdownIcon.js +20 -0
- package/dist/cssm/components/DropdownIcon/DropdownIcon.js.map +1 -0
- package/dist/cssm/components/FocusTrap/FocusTrap.js +3 -5
- package/dist/cssm/components/FocusTrap/FocusTrap.js.map +1 -1
- package/dist/cssm/components/FocusVisible/FocusVisible.css +1 -1
- package/dist/cssm/components/FormField/FormField.css +1 -1
- package/dist/cssm/components/FormField/FormField.js.map +1 -1
- package/dist/cssm/components/FormItem/FormItem.css +1 -1
- package/dist/cssm/components/FormItem/FormItem.js.map +1 -1
- package/dist/cssm/components/FormLayout/FormLayout.js.map +1 -1
- package/dist/cssm/components/FormLayoutGroup/FormLayoutGroup.css +1 -1
- package/dist/cssm/components/FormLayoutGroup/FormLayoutGroup.js +1 -0
- package/dist/cssm/components/FormLayoutGroup/FormLayoutGroup.js.map +1 -1
- package/dist/cssm/components/Gallery/Gallery.css +1 -1
- package/dist/cssm/components/GridAvatar/GridAvatar.css +1 -0
- package/dist/cssm/components/GridAvatar/GridAvatar.js +42 -0
- package/dist/cssm/components/GridAvatar/GridAvatar.js.map +1 -0
- package/dist/cssm/components/Header/Header.js.map +1 -1
- package/dist/cssm/components/HorizontalCell/HorizontalCell.js.map +1 -1
- package/dist/cssm/components/HorizontalScroll/HorizontalScroll.js +10 -12
- package/dist/cssm/components/HorizontalScroll/HorizontalScroll.js.map +1 -1
- package/dist/cssm/components/HorizontalScroll/HorizontalScrollArrow.css +1 -1
- package/dist/cssm/components/IconButton/IconButton.css +1 -1
- package/dist/cssm/components/InitialsAvatar/InitialsAvatar.css +1 -0
- package/dist/cssm/components/InitialsAvatar/InitialsAvatar.js +52 -0
- package/dist/cssm/components/InitialsAvatar/InitialsAvatar.js.map +1 -0
- package/dist/cssm/components/Link/Link.js.map +1 -1
- package/dist/cssm/components/ModalRoot/ModalRoot.js +167 -376
- package/dist/cssm/components/ModalRoot/ModalRoot.js.map +1 -1
- package/dist/cssm/components/ModalRoot/ModalRootContext.js +0 -3
- package/dist/cssm/components/ModalRoot/ModalRootContext.js.map +1 -1
- package/dist/cssm/components/ModalRoot/ModalRootDesktop.js +58 -244
- package/dist/cssm/components/ModalRoot/ModalRootDesktop.js.map +1 -1
- package/dist/cssm/components/ModalRoot/types.js.map +1 -1
- package/dist/cssm/components/ModalRoot/useModalManager.js +189 -0
- package/dist/cssm/components/ModalRoot/useModalManager.js.map +1 -0
- package/dist/cssm/components/NativeSelect/NativeSelect.js +2 -2
- package/dist/cssm/components/NativeSelect/NativeSelect.js.map +1 -1
- package/dist/cssm/components/Removable/Removable.css +1 -1
- package/dist/cssm/components/Removable/Removable.js +73 -64
- package/dist/cssm/components/Removable/Removable.js.map +1 -1
- package/dist/cssm/components/Search/Search.css +1 -1
- package/dist/cssm/components/Select/Select.css +1 -1
- package/dist/cssm/components/SelectMimicry/SelectMimicry.js +2 -2
- package/dist/cssm/components/SelectMimicry/SelectMimicry.js.map +1 -1
- package/dist/cssm/components/SimpleCell/SimpleCell.css +1 -1
- package/dist/cssm/components/SimpleCell/SimpleCell.js.map +1 -1
- package/dist/cssm/components/SplitCol/SplitCol.js +2 -4
- package/dist/cssm/components/SplitCol/SplitCol.js.map +1 -1
- package/dist/cssm/components/SubnavigationBar/SubnavigationBar.js +38 -11
- package/dist/cssm/components/SubnavigationBar/SubnavigationBar.js.map +1 -1
- package/dist/cssm/components/SubnavigationButton/SubnavigationButton.js.map +1 -1
- package/dist/cssm/components/Switch/Switch.css +1 -1
- package/dist/cssm/components/Switch/Switch.js +15 -8
- package/dist/cssm/components/Switch/Switch.js.map +1 -1
- package/dist/cssm/components/Tabbar/Tabbar.css +1 -1
- package/dist/cssm/components/Tabbar/Tabbar.js +3 -1
- package/dist/cssm/components/Tabbar/Tabbar.js.map +1 -1
- package/dist/cssm/components/TabbarItem/TabbarItem.css +1 -1
- package/dist/cssm/components/TabbarItem/TabbarItem.js +26 -10
- package/dist/cssm/components/TabbarItem/TabbarItem.js.map +1 -1
- package/dist/cssm/components/Tappable/Tappable.js.map +1 -1
- package/dist/cssm/components/Textarea/Textarea.js +9 -6
- package/dist/cssm/components/Textarea/Textarea.js.map +1 -1
- package/dist/cssm/components/Touch/Touch.js +21 -7
- package/dist/cssm/components/Touch/Touch.js.map +1 -1
- package/dist/cssm/components/Typography/Caption/Caption.js +4 -2
- package/dist/cssm/components/Typography/Caption/Caption.js.map +1 -1
- package/dist/cssm/components/Typography/Headline/Headline.js +2 -1
- package/dist/cssm/components/Typography/Headline/Headline.js.map +1 -1
- package/dist/cssm/components/Typography/Subhead/Subhead.js +2 -1
- package/dist/cssm/components/Typography/Subhead/Subhead.js.map +1 -1
- package/dist/cssm/components/Typography/Text/Text.js +2 -1
- package/dist/cssm/components/Typography/Text/Text.js.map +1 -1
- package/dist/cssm/components/Typography/Title/Title.js +9 -4
- package/dist/cssm/components/Typography/Title/Title.js.map +1 -1
- package/dist/cssm/components/View/View.js +67 -75
- package/dist/cssm/components/View/View.js.map +1 -1
- package/dist/cssm/components/View/ViewInfinite.js +79 -87
- package/dist/cssm/components/View/ViewInfinite.js.map +1 -1
- package/dist/cssm/components/View/utils.js +6 -0
- package/dist/cssm/components/View/utils.js.map +1 -0
- package/dist/cssm/index.js +2 -0
- package/dist/cssm/index.js.map +1 -1
- package/dist/cssm/lib/accessibility.js.map +1 -1
- package/dist/cssm/lib/prefixClass.js +7 -6
- package/dist/cssm/lib/prefixClass.js.map +1 -1
- package/dist/cssm/lib/supportEvents.js +1 -4
- package/dist/cssm/lib/supportEvents.js.map +1 -1
- package/dist/cssm/styles/components.css +1 -1
- package/dist/cssm/styles/themes.css +1 -1
- package/dist/cssm/styles/vkcom_light.css +1 -1
- package/dist/index.d.ts +4 -0
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/lib/accessibility.d.ts +1 -1
- package/dist/lib/accessibility.js.map +1 -1
- package/dist/lib/prefixClass.js +7 -6
- package/dist/lib/prefixClass.js.map +1 -1
- package/dist/lib/supportEvents.d.ts +3 -1
- package/dist/lib/supportEvents.js +1 -4
- package/dist/lib/supportEvents.js.map +1 -1
- package/dist/types.d.ts +3 -0
- package/dist/vkui.css +2 -2
- package/dist/vkui.css.map +1 -1
- package/package.json +8 -4
- package/src/components/ActionSheet/ActionSheet.tsx +4 -5
- package/src/components/ActionSheet/Readme.md +18 -14
- package/src/components/Alert/Readme.md +15 -11
- package/src/components/Avatar/Avatar.tsx +5 -2
- package/src/components/Banner/Banner.tsx +4 -5
- package/src/components/Button/Button.css +26 -53
- package/src/components/Button/Button.tsx +2 -3
- package/src/components/Card/Readme.md +6 -6
- package/src/components/CardScroll/CardScroll.tsx +4 -1
- package/src/components/Cell/Cell.css +21 -58
- package/src/components/Cell/Cell.tsx +101 -162
- package/src/components/Cell/CellCheckbox/CellCheckbox.css +17 -0
- package/src/components/Cell/CellCheckbox/CellCheckbox.tsx +42 -0
- package/src/components/Cell/CellDragger/CellDragger.css +4 -0
- package/src/components/Cell/CellDragger/CellDragger.tsx +40 -0
- package/src/components/Cell/Readme.md +89 -51
- package/src/components/Cell/useDraggable.tsx +112 -0
- package/src/components/ChipsSelect/ChipsSelect.tsx +2 -2
- package/src/components/Counter/Counter.tsx +2 -2
- package/src/components/CustomSelect/CustomSelect.tsx +3 -4
- package/src/components/DropdownIcon/DropdownIcon.css +3 -0
- package/src/components/DropdownIcon/DropdownIcon.tsx +20 -0
- package/src/components/Epic/Readme.md +2 -1
- package/src/components/FocusTrap/FocusTrap.tsx +13 -11
- package/src/components/FocusVisible/FocusVisible.css +12 -4
- package/src/components/FormField/FormField.css +0 -1
- package/src/components/FormField/FormField.tsx +2 -2
- package/src/components/FormItem/FormItem.css +13 -14
- package/src/components/FormItem/FormItem.tsx +2 -3
- package/src/components/FormLayout/FormLayout.tsx +2 -4
- package/src/components/FormLayoutGroup/FormLayoutGroup.css +11 -7
- package/src/components/FormLayoutGroup/FormLayoutGroup.tsx +10 -1
- package/src/components/Gallery/Gallery.css +2 -3
- package/src/components/Gallery/Readme.md +89 -109
- package/src/components/GridAvatar/GridAvatar.css +37 -0
- package/src/components/GridAvatar/GridAvatar.tsx +55 -0
- package/src/components/GridAvatar/Readme.md +12 -0
- package/src/components/Group/Readme.md +18 -14
- package/src/components/Header/Header.tsx +4 -4
- package/src/components/HorizontalCell/HorizontalCell.tsx +3 -3
- package/src/components/HorizontalScroll/HorizontalScroll.tsx +14 -18
- package/src/components/HorizontalScroll/HorizontalScrollArrow.css +2 -2
- package/src/components/IconButton/IconButton.css +7 -0
- package/src/components/InitialsAvatar/InitialsAvatar.css +53 -0
- package/src/components/InitialsAvatar/InitialsAvatar.tsx +90 -0
- package/src/components/InitialsAvatar/Readme.md +14 -0
- package/src/components/Link/Link.tsx +1 -1
- package/src/components/MiniInfoCell/Readme.md +66 -62
- package/src/components/ModalDismissButton/Readme.md +13 -10
- package/src/components/ModalRoot/ModalRoot.tsx +159 -349
- package/src/components/ModalRoot/ModalRootContext.tsx +0 -1
- package/src/components/ModalRoot/ModalRootDesktop.tsx +54 -240
- package/src/components/ModalRoot/Readme.md +35 -27
- package/src/components/ModalRoot/types.ts +0 -1
- package/src/components/ModalRoot/useModalManager.tsx +174 -0
- package/src/components/NativeSelect/NativeSelect.tsx +2 -2
- package/src/components/Removable/Removable.css +16 -63
- package/src/components/Removable/Removable.tsx +84 -64
- package/src/components/ScreenSpinner/Readme.md +13 -9
- package/src/components/Search/Search.css +1 -1
- package/src/components/Select/Select.css +1 -1
- package/src/components/SelectMimicry/SelectMimicry.tsx +2 -2
- package/src/components/SimpleCell/SimpleCell.css +10 -18
- package/src/components/SimpleCell/SimpleCell.tsx +3 -5
- package/src/components/SplitCol/SplitCol.tsx +4 -8
- package/src/components/SplitLayout/Readme.md +2 -2
- package/src/components/SubnavigationBar/Readme.md +90 -86
- package/src/components/SubnavigationBar/SubnavigationBar.tsx +32 -14
- package/src/components/SubnavigationButton/SubnavigationButton.tsx +2 -3
- package/src/components/Switch/Readme.md +6 -6
- package/src/components/Switch/Switch.css +46 -15
- package/src/components/Switch/Switch.tsx +16 -8
- package/src/components/Tabbar/Tabbar.css +15 -4
- package/src/components/Tabbar/Tabbar.tsx +3 -1
- package/src/components/TabbarItem/Readme.md +72 -0
- package/src/components/TabbarItem/TabbarItem.css +65 -14
- package/src/components/TabbarItem/TabbarItem.tsx +46 -22
- package/src/components/Tappable/Tappable.tsx +2 -3
- package/src/components/Textarea/Readme.md +3 -0
- package/src/components/Textarea/Textarea.tsx +10 -6
- package/src/components/Touch/Touch.tsx +38 -25
- package/src/components/Typography/Caption/Caption.tsx +4 -4
- package/src/components/Typography/Headline/Headline.tsx +3 -3
- package/src/components/Typography/Subhead/Subhead.tsx +3 -3
- package/src/components/Typography/Text/Text.tsx +3 -4
- package/src/components/Typography/Title/Title.tsx +9 -5
- package/src/components/View/Readme.md +42 -56
- package/src/components/View/View.tsx +46 -61
- package/src/components/View/ViewInfinite.tsx +52 -67
- package/src/components/View/utils.ts +8 -0
- package/src/index.ts +4 -0
- package/src/lib/accessibility.ts +2 -2
- package/src/lib/prefixClass.ts +9 -6
- package/src/lib/supportEvents.ts +1 -4
- package/src/styles/components.css +4 -0
- package/src/styles/vkcom_light.css +3 -3
- package/src/testing/utils.tsx +34 -1
- package/src/types.ts +4 -0
|
@@ -15,6 +15,7 @@ import { ScrollContext, ScrollContextInterface } from '../AppRoot/ScrollContext'
|
|
|
15
15
|
import { NavTransitionProvider } from '../NavTransitionContext/NavTransitionContext';
|
|
16
16
|
import { getNavId, NavIdProps } from '../../lib/getNavId';
|
|
17
17
|
import { warnOnce } from '../../lib/warnOnce';
|
|
18
|
+
import { swipeBackExcluded } from './utils';
|
|
18
19
|
import './View.css';
|
|
19
20
|
|
|
20
21
|
const warn = warnOnce('View');
|
|
@@ -29,14 +30,10 @@ interface ViewsScrolls {
|
|
|
29
30
|
[index: string]: Scrolls;
|
|
30
31
|
}
|
|
31
32
|
|
|
32
|
-
type AnimationEventHandler = (e?: AnimationEvent) => void;
|
|
33
|
-
|
|
34
33
|
type TransitionEventHandler = (e?: TransitionEvent) => void;
|
|
35
34
|
|
|
36
35
|
export let scrollsCache: ViewsScrolls = {};
|
|
37
36
|
|
|
38
|
-
const swipeBackExcludedTags = ['input', 'textarea'];
|
|
39
|
-
|
|
40
37
|
export interface ViewProps extends React.HTMLAttributes<HTMLElement>, HasPlatform, NavIdProps {
|
|
41
38
|
activePanel: string;
|
|
42
39
|
/**
|
|
@@ -162,18 +159,28 @@ class View extends React.Component<ViewProps & DOMProps, ViewState> {
|
|
|
162
159
|
.find((id) => id === prevProps.activePanel || id === this.props.activePanel);
|
|
163
160
|
|
|
164
161
|
const isBack = firstLayerId === this.props.activePanel;
|
|
162
|
+
this.scrolls[prevProps.activePanel] = this.props.scroll.getScroll().y;
|
|
165
163
|
|
|
166
|
-
this.
|
|
164
|
+
if (this.shouldDisableTransitionMotion()) {
|
|
165
|
+
this.flushTransition(prevProps.activePanel, isBack);
|
|
166
|
+
} else {
|
|
167
|
+
this.blurActiveElement();
|
|
167
168
|
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
169
|
+
this.setState({
|
|
170
|
+
visiblePanels: [prevProps.activePanel, this.props.activePanel],
|
|
171
|
+
prevPanel: prevProps.activePanel,
|
|
172
|
+
nextPanel: this.props.activePanel,
|
|
173
|
+
activePanel: null,
|
|
174
|
+
animated: true,
|
|
175
|
+
isBack,
|
|
176
|
+
});
|
|
177
|
+
|
|
178
|
+
// Фолбек анимации перехода
|
|
179
|
+
if (!animationEvent.supported) {
|
|
180
|
+
clearTimeout(this.animationFinishTimeout);
|
|
181
|
+
this.animationFinishTimeout = setTimeout(this.transitionEndHandler, this.props.platform === ANDROID || this.props.platform === VKCOM ? 300 : 600);
|
|
182
|
+
}
|
|
183
|
+
}
|
|
177
184
|
}
|
|
178
185
|
|
|
179
186
|
// Закончилась анимация свайпа назад
|
|
@@ -196,12 +203,6 @@ class View extends React.Component<ViewProps & DOMProps, ViewState> {
|
|
|
196
203
|
});
|
|
197
204
|
}
|
|
198
205
|
|
|
199
|
-
// Начался переход
|
|
200
|
-
if (!prevState.animated && this.state.animated) {
|
|
201
|
-
const { prevPanel, nextPanel, isBack } = this.state;
|
|
202
|
-
this.waitAnimationFinish(this.pickPanel(isBack ? prevPanel : nextPanel), this.transitionEndHandler);
|
|
203
|
-
}
|
|
204
|
-
|
|
205
206
|
// Начался свайп назад
|
|
206
207
|
if (!prevState.swipingBack && this.state.swipingBack) {
|
|
207
208
|
this.props.onSwipeBackStart && this.props.onSwipeBackStart();
|
|
@@ -245,21 +246,6 @@ class View extends React.Component<ViewProps & DOMProps, ViewState> {
|
|
|
245
246
|
}
|
|
246
247
|
}
|
|
247
248
|
|
|
248
|
-
waitAnimationFinish(elem: HTMLElement, eventHandler: AnimationEventHandler): void {
|
|
249
|
-
if (this.shouldDisableTransitionMotion()) {
|
|
250
|
-
eventHandler();
|
|
251
|
-
return;
|
|
252
|
-
}
|
|
253
|
-
|
|
254
|
-
if (animationEvent.supported) {
|
|
255
|
-
elem.removeEventListener(animationEvent.name, eventHandler);
|
|
256
|
-
elem.addEventListener(animationEvent.name, eventHandler);
|
|
257
|
-
} else {
|
|
258
|
-
clearTimeout(this.animationFinishTimeout);
|
|
259
|
-
this.animationFinishTimeout = setTimeout(eventHandler, this.props.platform === ANDROID || this.props.platform === VKCOM ? 300 : 600);
|
|
260
|
-
}
|
|
261
|
-
}
|
|
262
|
-
|
|
263
249
|
blurActiveElement(): void {
|
|
264
250
|
if (typeof this.window !== 'undefined' && this.document.activeElement) {
|
|
265
251
|
(this.document.activeElement as HTMLElement).blur();
|
|
@@ -270,30 +256,32 @@ class View extends React.Component<ViewProps & DOMProps, ViewState> {
|
|
|
270
256
|
return this.panelNodes[id];
|
|
271
257
|
}
|
|
272
258
|
|
|
273
|
-
|
|
259
|
+
flushTransition(prevPanel: string, isBack: boolean) {
|
|
260
|
+
const activePanel = this.props.activePanel;
|
|
261
|
+
if (isBack) {
|
|
262
|
+
this.scrolls[prevPanel] = 0;
|
|
263
|
+
}
|
|
264
|
+
this.setState({
|
|
265
|
+
prevPanel: null,
|
|
266
|
+
nextPanel: null,
|
|
267
|
+
visiblePanels: [activePanel],
|
|
268
|
+
activePanel,
|
|
269
|
+
animated: false,
|
|
270
|
+
isBack: undefined,
|
|
271
|
+
}, () => {
|
|
272
|
+
this.props.scroll.scrollTo(0, isBack ? this.scrolls[activePanel] : 0);
|
|
273
|
+
this.props.onTransition && this.props.onTransition({ isBack, from: prevPanel, to: activePanel });
|
|
274
|
+
});
|
|
275
|
+
}
|
|
276
|
+
|
|
277
|
+
transitionEndHandler = (e?: React.AnimationEvent): void => {
|
|
274
278
|
if (!e || [
|
|
275
279
|
'vkui-animation-ios-next-forward',
|
|
276
280
|
'vkui-animation-ios-prev-back',
|
|
277
281
|
'vkui-animation-view-next-forward',
|
|
278
282
|
'vkui-animation-view-prev-back',
|
|
279
283
|
].includes(e.animationName)) {
|
|
280
|
-
|
|
281
|
-
const isBack = this.state.isBack;
|
|
282
|
-
const prevPanel = this.state.prevPanel;
|
|
283
|
-
if (isBack) {
|
|
284
|
-
this.scrolls[prevPanel] = 0;
|
|
285
|
-
}
|
|
286
|
-
this.setState({
|
|
287
|
-
prevPanel: null,
|
|
288
|
-
nextPanel: null,
|
|
289
|
-
visiblePanels: [activePanel],
|
|
290
|
-
activePanel: activePanel,
|
|
291
|
-
animated: false,
|
|
292
|
-
isBack: undefined,
|
|
293
|
-
}, () => {
|
|
294
|
-
isBack && this.props.scroll.scrollTo(0, this.scrolls[activePanel]);
|
|
295
|
-
this.props.onTransition && this.props.onTransition({ isBack, from: prevPanel, to: activePanel });
|
|
296
|
-
});
|
|
284
|
+
this.flushTransition(this.state.prevPanel, this.state.isBack);
|
|
297
285
|
}
|
|
298
286
|
};
|
|
299
287
|
|
|
@@ -327,12 +315,7 @@ class View extends React.Component<ViewProps & DOMProps, ViewState> {
|
|
|
327
315
|
}
|
|
328
316
|
|
|
329
317
|
onMoveX = (e: TouchEvent): void => {
|
|
330
|
-
|
|
331
|
-
if (
|
|
332
|
-
target &&
|
|
333
|
-
typeof target.tagName === 'string' &&
|
|
334
|
-
swipeBackExcludedTags.includes(target.tagName.toLowerCase())
|
|
335
|
-
) {
|
|
318
|
+
if (swipeBackExcluded(e)) {
|
|
336
319
|
return;
|
|
337
320
|
}
|
|
338
321
|
|
|
@@ -432,7 +415,7 @@ class View extends React.Component<ViewProps & DOMProps, ViewState> {
|
|
|
432
415
|
} = this.props;
|
|
433
416
|
const {
|
|
434
417
|
prevPanel, nextPanel, activePanel, swipeBackPrevPanel, swipeBackNextPanel,
|
|
435
|
-
swipeBackResult, isBack,
|
|
418
|
+
swipeBackResult, isBack, animated,
|
|
436
419
|
} = this.state;
|
|
437
420
|
|
|
438
421
|
const hasPopout = !!popout;
|
|
@@ -449,7 +432,7 @@ class View extends React.Component<ViewProps & DOMProps, ViewState> {
|
|
|
449
432
|
const disableAnimation = this.shouldDisableTransitionMotion();
|
|
450
433
|
|
|
451
434
|
const modifiers = {
|
|
452
|
-
'View--animated': !disableAnimation &&
|
|
435
|
+
'View--animated': !disableAnimation && animated,
|
|
453
436
|
'View--swiping-back': !disableAnimation && this.state.swipingBack,
|
|
454
437
|
'View--no-motion': disableAnimation,
|
|
455
438
|
};
|
|
@@ -466,6 +449,7 @@ class View extends React.Component<ViewProps & DOMProps, ViewState> {
|
|
|
466
449
|
{panels.map((panel: React.ReactElement) => {
|
|
467
450
|
const panelId = getNavId(panel.props, warn);
|
|
468
451
|
const isPrev = panelId === prevPanel || panelId === swipeBackPrevPanel;
|
|
452
|
+
const isTransitionTarget = animated && panelId === (isBack ? prevPanel : nextPanel);
|
|
469
453
|
const compensateScroll = isPrev || panelId === swipeBackNextPanel || panelId === nextPanel && isBack;
|
|
470
454
|
|
|
471
455
|
return (
|
|
@@ -479,6 +463,7 @@ class View extends React.Component<ViewProps & DOMProps, ViewState> {
|
|
|
479
463
|
'View__panel--swipe-back-success': swipeBackResult === SwipeBackResults.success,
|
|
480
464
|
'View__panel--swipe-back-failed': swipeBackResult === SwipeBackResults.fail,
|
|
481
465
|
})}
|
|
466
|
+
onAnimationEnd={isTransitionTarget ? this.transitionEndHandler : null}
|
|
482
467
|
ref={(el) => this.panelNodes[panelId] = el}
|
|
483
468
|
style={this.calcPanelSwipeStyles(panelId)}
|
|
484
469
|
key={panelId}
|
|
@@ -15,6 +15,7 @@ import { ScrollContext, ScrollContextInterface } from '../AppRoot/ScrollContext'
|
|
|
15
15
|
import { NavTransitionProvider } from '../NavTransitionContext/NavTransitionContext';
|
|
16
16
|
import { getNavId, NavIdProps } from '../../lib/getNavId';
|
|
17
17
|
import { warnOnce } from '../../lib/warnOnce';
|
|
18
|
+
import { swipeBackExcluded } from './utils';
|
|
18
19
|
import './View.css';
|
|
19
20
|
|
|
20
21
|
const warn = warnOnce('ViewInfinite');
|
|
@@ -29,14 +30,10 @@ interface ViewsScrolls {
|
|
|
29
30
|
[index: string]: Scrolls;
|
|
30
31
|
}
|
|
31
32
|
|
|
32
|
-
type AnimationEventHandler = (e?: AnimationEvent) => void;
|
|
33
|
-
|
|
34
33
|
type TransitionEventHandler = (e?: TransitionEvent) => void;
|
|
35
34
|
|
|
36
35
|
let scrollsCache: ViewsScrolls = {};
|
|
37
36
|
|
|
38
|
-
const swipeBackExcludedTags = ['input', 'textarea'];
|
|
39
|
-
|
|
40
37
|
export type TransitionParams = { from: string; to: string };
|
|
41
38
|
|
|
42
39
|
export interface ViewInfiniteProps extends React.HTMLAttributes<HTMLElement>, HasPlatform, NavIdProps {
|
|
@@ -170,14 +167,24 @@ class ViewInfinite extends React.Component<ViewInfiniteProps & DOMProps, ViewInf
|
|
|
170
167
|
};
|
|
171
168
|
this.scrolls = scrolls;
|
|
172
169
|
|
|
173
|
-
this.
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
170
|
+
if (this.shouldDisableTransitionMotion()) {
|
|
171
|
+
this.flushTransition(prevProps.activePanel, isBack);
|
|
172
|
+
} else {
|
|
173
|
+
this.setState({
|
|
174
|
+
visiblePanels: [prevProps.activePanel, this.props.activePanel],
|
|
175
|
+
prevPanel: prevProps.activePanel,
|
|
176
|
+
nextPanel: this.props.activePanel,
|
|
177
|
+
activePanel: null,
|
|
178
|
+
animated: true,
|
|
179
|
+
isBack,
|
|
180
|
+
});
|
|
181
|
+
|
|
182
|
+
// Фолбек анимации перехода
|
|
183
|
+
if (!animationEvent.supported) {
|
|
184
|
+
clearTimeout(this.animationFinishTimeout);
|
|
185
|
+
this.animationFinishTimeout = setTimeout(this.transitionEndHandler, this.props.platform === ANDROID || this.props.platform === VKCOM ? 300 : 600);
|
|
186
|
+
}
|
|
187
|
+
}
|
|
181
188
|
}
|
|
182
189
|
|
|
183
190
|
// Закончилась анимация свайпа назад
|
|
@@ -209,12 +216,6 @@ class ViewInfinite extends React.Component<ViewInfiniteProps & DOMProps, ViewInf
|
|
|
209
216
|
});
|
|
210
217
|
}
|
|
211
218
|
|
|
212
|
-
// Начался переход
|
|
213
|
-
if (!prevState.animated && this.state.animated) {
|
|
214
|
-
const { prevPanel, nextPanel, isBack } = this.state;
|
|
215
|
-
this.waitAnimationFinish(this.pickPanel(isBack ? prevPanel : nextPanel), this.transitionEndHandler);
|
|
216
|
-
}
|
|
217
|
-
|
|
218
219
|
// Начался свайп назад
|
|
219
220
|
if (!prevState.swipingBack && this.state.swipingBack) {
|
|
220
221
|
this.props.onSwipeBackStart && this.props.onSwipeBackStart();
|
|
@@ -265,21 +266,6 @@ class ViewInfinite extends React.Component<ViewInfiniteProps & DOMProps, ViewInf
|
|
|
265
266
|
}
|
|
266
267
|
}
|
|
267
268
|
|
|
268
|
-
waitAnimationFinish(elem: HTMLElement, eventHandler: AnimationEventHandler): void {
|
|
269
|
-
if (this.shouldDisableTransitionMotion()) {
|
|
270
|
-
eventHandler();
|
|
271
|
-
return;
|
|
272
|
-
}
|
|
273
|
-
|
|
274
|
-
if (animationEvent.supported) {
|
|
275
|
-
elem.removeEventListener(animationEvent.name, eventHandler);
|
|
276
|
-
elem.addEventListener(animationEvent.name, eventHandler);
|
|
277
|
-
} else {
|
|
278
|
-
clearTimeout(this.animationFinishTimeout);
|
|
279
|
-
this.animationFinishTimeout = setTimeout(eventHandler, this.props.platform === ANDROID || this.props.platform === VKCOM ? 300 : 600);
|
|
280
|
-
}
|
|
281
|
-
}
|
|
282
|
-
|
|
283
269
|
blurActiveElement(): void {
|
|
284
270
|
if (typeof this.window !== 'undefined' && this.document.activeElement) {
|
|
285
271
|
(this.document.activeElement as HTMLElement).blur();
|
|
@@ -290,39 +276,41 @@ class ViewInfinite extends React.Component<ViewInfiniteProps & DOMProps, ViewInf
|
|
|
290
276
|
return this.panelNodes[id];
|
|
291
277
|
}
|
|
292
278
|
|
|
293
|
-
|
|
279
|
+
flushTransition(prevPanel: string, isBack: boolean) {
|
|
280
|
+
const activePanel = this.props.activePanel;
|
|
281
|
+
|
|
282
|
+
const prevPanelScrolls = [...this.scrolls[prevPanel] || []].slice(0, -1);
|
|
283
|
+
const newPanelScrolls = [...this.scrolls[activePanel] || []];
|
|
284
|
+
const scrollPosition = isBack ? newPanelScrolls.pop() : 0;
|
|
285
|
+
if (isBack) {
|
|
286
|
+
this.scrolls = {
|
|
287
|
+
...this.scrolls,
|
|
288
|
+
[prevPanel]: prevPanelScrolls,
|
|
289
|
+
[activePanel]: newPanelScrolls,
|
|
290
|
+
};
|
|
291
|
+
}
|
|
292
|
+
|
|
293
|
+
this.setState({
|
|
294
|
+
prevPanel: null,
|
|
295
|
+
nextPanel: null,
|
|
296
|
+
visiblePanels: [activePanel],
|
|
297
|
+
activePanel: activePanel,
|
|
298
|
+
animated: false,
|
|
299
|
+
isBack: undefined,
|
|
300
|
+
}, () => {
|
|
301
|
+
this.props.scroll.scrollTo(0, isBack ? scrollPosition : 0);
|
|
302
|
+
this.props.onTransition && this.props.onTransition({ isBack, from: prevPanel, to: activePanel });
|
|
303
|
+
});
|
|
304
|
+
}
|
|
305
|
+
|
|
306
|
+
transitionEndHandler = (e?: React.AnimationEvent): void => {
|
|
294
307
|
if (!e || [
|
|
295
308
|
'vkui-animation-ios-next-forward',
|
|
296
309
|
'vkui-animation-ios-prev-back',
|
|
297
310
|
'vkui-animation-view-next-forward',
|
|
298
311
|
'vkui-animation-view-prev-back',
|
|
299
312
|
].includes(e.animationName)) {
|
|
300
|
-
|
|
301
|
-
const prevPanel = this.state.prevPanel;
|
|
302
|
-
const isBack = this.state.isBack;
|
|
303
|
-
|
|
304
|
-
const prevPanelScrolls = [...this.scrolls[prevPanel] || []].slice(0, -1);
|
|
305
|
-
const newPanelScrolls = [...this.scrolls[activePanel] || []];
|
|
306
|
-
const scrollPosition = isBack ? newPanelScrolls.pop() : 0;
|
|
307
|
-
if (isBack) {
|
|
308
|
-
this.scrolls = {
|
|
309
|
-
...this.scrolls,
|
|
310
|
-
[prevPanel]: prevPanelScrolls,
|
|
311
|
-
[activePanel]: newPanelScrolls,
|
|
312
|
-
};
|
|
313
|
-
}
|
|
314
|
-
|
|
315
|
-
this.setState({
|
|
316
|
-
prevPanel: null,
|
|
317
|
-
nextPanel: null,
|
|
318
|
-
visiblePanels: [activePanel],
|
|
319
|
-
activePanel: activePanel,
|
|
320
|
-
animated: false,
|
|
321
|
-
isBack: undefined,
|
|
322
|
-
}, () => {
|
|
323
|
-
isBack && this.props.scroll.scrollTo(0, scrollPosition);
|
|
324
|
-
this.props.onTransition && this.props.onTransition({ isBack, from: prevPanel, to: activePanel });
|
|
325
|
-
});
|
|
313
|
+
this.flushTransition(this.state.prevPanel, this.state.isBack);
|
|
326
314
|
}
|
|
327
315
|
};
|
|
328
316
|
|
|
@@ -356,12 +344,7 @@ class ViewInfinite extends React.Component<ViewInfiniteProps & DOMProps, ViewInf
|
|
|
356
344
|
}
|
|
357
345
|
|
|
358
346
|
onMoveX = (e: TouchEvent): void => {
|
|
359
|
-
|
|
360
|
-
if (
|
|
361
|
-
target &&
|
|
362
|
-
typeof target.tagName === 'string' &&
|
|
363
|
-
swipeBackExcludedTags.includes(target.tagName.toLowerCase())
|
|
364
|
-
) {
|
|
347
|
+
if (swipeBackExcluded(e)) {
|
|
365
348
|
return;
|
|
366
349
|
}
|
|
367
350
|
|
|
@@ -465,7 +448,7 @@ class ViewInfinite extends React.Component<ViewInfiniteProps & DOMProps, ViewInf
|
|
|
465
448
|
...restProps
|
|
466
449
|
} = this.props;
|
|
467
450
|
const {
|
|
468
|
-
prevPanel, nextPanel, activePanel, isBack,
|
|
451
|
+
prevPanel, nextPanel, activePanel, isBack, animated,
|
|
469
452
|
swipeBackPrevPanel, swipeBackNextPanel, swipeBackResult, swipingBack,
|
|
470
453
|
} = this.state;
|
|
471
454
|
|
|
@@ -517,6 +500,7 @@ class ViewInfinite extends React.Component<ViewInfiniteProps & DOMProps, ViewInf
|
|
|
517
500
|
const panelId = getNavId(panel.props, warn);
|
|
518
501
|
const isPrev = panelId === prevPanel || panelId === swipeBackPrevPanel;
|
|
519
502
|
const compensateScroll = isPrev || panelId === swipeBackNextPanel || panelId === nextPanel && isBack;
|
|
503
|
+
const isTransitionTarget = animated && panelId === (isBack ? prevPanel : nextPanel);
|
|
520
504
|
const scrollList = this.scrolls[panelId] || [];
|
|
521
505
|
const scroll = scrollList[scrollList.length - 1] || 0;
|
|
522
506
|
|
|
@@ -531,6 +515,7 @@ class ViewInfinite extends React.Component<ViewInfiniteProps & DOMProps, ViewInf
|
|
|
531
515
|
'View__panel--swipe-back-success': swipeBackResult === SwipeBackResults.success,
|
|
532
516
|
'View__panel--swipe-back-failed': swipeBackResult === SwipeBackResults.fail,
|
|
533
517
|
})}
|
|
518
|
+
onAnimationEnd={isTransitionTarget ? this.transitionEndHandler : null}
|
|
534
519
|
ref={(el) => this.panelNodes[panelId] = el}
|
|
535
520
|
style={this.calcPanelSwipeStyles(panelId)}
|
|
536
521
|
key={panelId}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { TouchEvent } from '../Touch/Touch';
|
|
2
|
+
|
|
3
|
+
const swipeBackExcludedSelector = 'input, textarea, [data-vkui-swipe-back=false]';
|
|
4
|
+
|
|
5
|
+
export function swipeBackExcluded(e: TouchEvent) {
|
|
6
|
+
const target = e.originalEvent.target as HTMLElement;
|
|
7
|
+
return Boolean(target?.closest(swipeBackExcludedSelector));
|
|
8
|
+
}
|
package/src/index.ts
CHANGED
|
@@ -109,6 +109,10 @@ export { default as Gallery } from './components/Gallery/Gallery';
|
|
|
109
109
|
export type { GalleryProps } from './components/Gallery/Gallery';
|
|
110
110
|
export { default as Avatar } from './components/Avatar/Avatar';
|
|
111
111
|
export type { AvatarProps } from './components/Avatar/Avatar';
|
|
112
|
+
export { GridAvatar } from './components/GridAvatar/GridAvatar';
|
|
113
|
+
export type { GridAvatarProps } from './components/GridAvatar/GridAvatar';
|
|
114
|
+
export { InitialsAvatar } from './components/InitialsAvatar/InitialsAvatar';
|
|
115
|
+
export type { InitialsAvatarProps } from './components/InitialsAvatar/InitialsAvatar';
|
|
112
116
|
export { default as Progress } from './components/Progress/Progress';
|
|
113
117
|
export type { ProgressProps } from './components/Progress/Progress';
|
|
114
118
|
export { default as Search } from './components/Search/Search';
|
package/src/lib/accessibility.ts
CHANGED
|
@@ -50,7 +50,7 @@ const ACCESSIBLE_KEYS: AccessibleKey[] = [
|
|
|
50
50
|
},
|
|
51
51
|
];
|
|
52
52
|
|
|
53
|
-
export function pressedKey(e: KeyboardEvent): Keys {
|
|
53
|
+
export function pressedKey(e: KeyboardEvent | React.KeyboardEvent<HTMLElement>): Keys {
|
|
54
54
|
return ACCESSIBLE_KEYS.find(({ key, keyCode }) => key.includes(e.key) || keyCode === e.keyCode)?.code || null;
|
|
55
55
|
}
|
|
56
56
|
|
|
@@ -66,7 +66,7 @@ export function shouldTriggerClickOnEnterOrSpace(e: KeyboardEvent | React.Keyboa
|
|
|
66
66
|
&& (role === 'button' || role === 'link');
|
|
67
67
|
|
|
68
68
|
const isNativeAnchorEl = tagName === 'A' && el.hasAttribute('href');
|
|
69
|
-
const keyPressed = pressedKey(e
|
|
69
|
+
const keyPressed = pressedKey(e);
|
|
70
70
|
|
|
71
71
|
return isValidKeyboardEventTarget && (
|
|
72
72
|
// trigger buttons on Space
|
package/src/lib/prefixClass.ts
CHANGED
|
@@ -16,13 +16,16 @@ function prefixSingle(scopedStyle: string): string {
|
|
|
16
16
|
}
|
|
17
17
|
|
|
18
18
|
export function prefixClass(scopedStyle?: string | string[]) {
|
|
19
|
-
let resolved = '';
|
|
20
19
|
if (typeof scopedStyle === 'string') {
|
|
21
|
-
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
20
|
+
return prefixSingle(scopedStyle);
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
let resolved = '';
|
|
24
|
+
for (let i = 0; i < scopedStyle.length; i++) {
|
|
25
|
+
const separator = resolved ? ' ' : '';
|
|
26
|
+
|
|
27
|
+
resolved += separator + prefixSingle(scopedStyle[i]);
|
|
26
28
|
}
|
|
29
|
+
|
|
27
30
|
return resolved;
|
|
28
31
|
}
|
package/src/lib/supportEvents.ts
CHANGED
|
@@ -10,9 +10,8 @@ export type VKUISupportEvents = {
|
|
|
10
10
|
declare const WebKitAnimationEvent: AnimationEvent;
|
|
11
11
|
declare const WebKitTransitionEvent: TransitionEvent;
|
|
12
12
|
|
|
13
|
-
const animationEvent
|
|
13
|
+
const animationEvent = {
|
|
14
14
|
supported: false,
|
|
15
|
-
name: null,
|
|
16
15
|
};
|
|
17
16
|
|
|
18
17
|
const transitionEvent: VKUISupportEvents = {
|
|
@@ -23,10 +22,8 @@ const transitionEvent: VKUISupportEvents = {
|
|
|
23
22
|
if (canUseDOM && !isTesting) {
|
|
24
23
|
if (typeof AnimationEvent !== 'undefined') {
|
|
25
24
|
animationEvent.supported = true;
|
|
26
|
-
animationEvent.name = 'animationend';
|
|
27
25
|
} else if (typeof WebKitAnimationEvent !== 'undefined') {
|
|
28
26
|
animationEvent.supported = true;
|
|
29
|
-
animationEvent.name = 'webkitAnimationEnd';
|
|
30
27
|
}
|
|
31
28
|
|
|
32
29
|
if (typeof TransitionEvent !== 'undefined') {
|
|
@@ -71,6 +71,8 @@
|
|
|
71
71
|
@import '../components/Gradient/Gradient.css';
|
|
72
72
|
@import '../components/SimpleCell/SimpleCell.css';
|
|
73
73
|
@import '../components/Cell/Cell.css';
|
|
74
|
+
@import '../components/Cell/CellCheckbox/CellCheckbox.css';
|
|
75
|
+
@import '../components/Cell/CellDragger/CellDragger.css';
|
|
74
76
|
@import '../components/CellButton/CellButton.css';
|
|
75
77
|
@import '../components/RichCell/RichCell.css';
|
|
76
78
|
@import '../components/HorizontalCell/HorizontalCell.css';
|
|
@@ -80,6 +82,8 @@
|
|
|
80
82
|
@import '../components/Switch/Switch.css';
|
|
81
83
|
@import '../components/InfoRow/InfoRow.css';
|
|
82
84
|
@import '../components/Avatar/Avatar.css';
|
|
85
|
+
@import '../components/InitialsAvatar/InitialsAvatar.css';
|
|
86
|
+
@import '../components/GridAvatar/GridAvatar.css';
|
|
83
87
|
@import '../components/Gallery/Gallery.css';
|
|
84
88
|
@import '../components/Progress/Progress.css';
|
|
85
89
|
@import '../components/Search/Search.css';
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
*/
|
|
5
5
|
body[scheme="vkcom_light"], [scheme="vkcom_light"] {
|
|
6
6
|
--accent: #5181b8;
|
|
7
|
-
--accent_alternate: #
|
|
7
|
+
--accent_alternate: #0077ff;
|
|
8
8
|
--action_sheet_action_foreground: #5181b8;
|
|
9
9
|
--action_sheet_separator: rgba(0, 0, 0, 0.12);
|
|
10
10
|
--activity_indicator_tint: #aeb7c2;
|
|
@@ -71,7 +71,7 @@ body[scheme="vkcom_light"], [scheme="vkcom_light"] {
|
|
|
71
71
|
--feed_recommended_friend_promo_background: #5181b8;
|
|
72
72
|
--field_background: #f7f8fa;
|
|
73
73
|
--field_border: #dce1e6;
|
|
74
|
-
--field_error_background: #
|
|
74
|
+
--field_error_background: #faebeb;
|
|
75
75
|
--field_error_border: #e64646;
|
|
76
76
|
--field_text_placeholder: #818c99;
|
|
77
77
|
--field_valid_border: #4bb34b;
|
|
@@ -96,7 +96,7 @@ body[scheme="vkcom_light"], [scheme="vkcom_light"] {
|
|
|
96
96
|
--header_text_alternate: #000000;
|
|
97
97
|
--header_text_secondary: #818c99;
|
|
98
98
|
--header_tint: #aeb7c2;
|
|
99
|
-
--header_tint_alternate: #
|
|
99
|
+
--header_tint_alternate: #0077ff;
|
|
100
100
|
--icon_alpha_placeholder: #ffffff;
|
|
101
101
|
--icon_medium: #6f7985;
|
|
102
102
|
--icon_medium_alpha: rgba(0, 0, 0, 0.48);
|
package/src/testing/utils.tsx
CHANGED
|
@@ -10,7 +10,9 @@ export function fakeTimers() {
|
|
|
10
10
|
afterEach(() => jest.useRealTimers());
|
|
11
11
|
}
|
|
12
12
|
|
|
13
|
-
export const runAllTimers = () => act(() =>
|
|
13
|
+
export const runAllTimers = () => act(() => {
|
|
14
|
+
jest.runAllTimers();
|
|
15
|
+
});
|
|
14
16
|
|
|
15
17
|
export const imgOnlyAttributes: ImgOnlyAttributes = {
|
|
16
18
|
alt: 'test',
|
|
@@ -123,3 +125,34 @@ export const mockScrollContext = (getY: () => number): [React.FC, jest.Mock] =>
|
|
|
123
125
|
scrollTo,
|
|
124
126
|
];
|
|
125
127
|
};
|
|
128
|
+
|
|
129
|
+
const isNullOrUndefined = (val: any) => val === null || val === undefined;
|
|
130
|
+
|
|
131
|
+
// Согласно спеке, offsetParent в ряде случаев будет null
|
|
132
|
+
Object.defineProperty(HTMLElement.prototype, 'offsetParent', {
|
|
133
|
+
get() {
|
|
134
|
+
// eslint-disable-next-line @typescript-eslint/no-this-alias
|
|
135
|
+
let element: HTMLElement = this;
|
|
136
|
+
while (!isNullOrUndefined(element) &&
|
|
137
|
+
(isNullOrUndefined(element.style) ||
|
|
138
|
+
isNullOrUndefined(element.style.display) ||
|
|
139
|
+
element.style.display.toLowerCase() !== 'none')) {
|
|
140
|
+
// @ts-ignore
|
|
141
|
+
element = element.parentNode;
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
if (!isNullOrUndefined(element)) {
|
|
145
|
+
return null;
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
if (!isNullOrUndefined(this.style) && !isNullOrUndefined(this.style.position) && this.style.position.toLowerCase() === 'fixed') {
|
|
149
|
+
return null;
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
if (this.tagName.toLowerCase() === 'html' || this.tagName.toLowerCase() === 'body') {
|
|
153
|
+
return null;
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
return this.parentNode;
|
|
157
|
+
},
|
|
158
|
+
});
|