@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
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
import _toConsumableArray from "@babel/runtime/helpers/toConsumableArray";
|
|
2
|
+
import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
|
|
3
|
+
import * as React from 'react';
|
|
4
|
+
export var useDraggable = function useDraggable(_ref) {
|
|
5
|
+
var onDragFinish = _ref.onDragFinish;
|
|
6
|
+
|
|
7
|
+
var _React$useState = React.useState(false),
|
|
8
|
+
_React$useState2 = _slicedToArray(_React$useState, 2),
|
|
9
|
+
dragging = _React$useState2[0],
|
|
10
|
+
setDragging = _React$useState2[1];
|
|
11
|
+
|
|
12
|
+
var rootElRef = React.useRef(null);
|
|
13
|
+
|
|
14
|
+
var _React$useState3 = React.useState(undefined),
|
|
15
|
+
_React$useState4 = _slicedToArray(_React$useState3, 2),
|
|
16
|
+
siblings = _React$useState4[0],
|
|
17
|
+
setSiblings = _React$useState4[1];
|
|
18
|
+
|
|
19
|
+
var _React$useState5 = React.useState(undefined),
|
|
20
|
+
_React$useState6 = _slicedToArray(_React$useState5, 2),
|
|
21
|
+
dragStartIndex = _React$useState6[0],
|
|
22
|
+
setDragStartIndex = _React$useState6[1];
|
|
23
|
+
|
|
24
|
+
var _React$useState7 = React.useState(undefined),
|
|
25
|
+
_React$useState8 = _slicedToArray(_React$useState7, 2),
|
|
26
|
+
dragEndIndex = _React$useState8[0],
|
|
27
|
+
setDragEndIndex = _React$useState8[1];
|
|
28
|
+
|
|
29
|
+
var _React$useState9 = React.useState(0),
|
|
30
|
+
_React$useState10 = _slicedToArray(_React$useState9, 2),
|
|
31
|
+
dragShift = _React$useState10[0],
|
|
32
|
+
setDragShift = _React$useState10[1];
|
|
33
|
+
|
|
34
|
+
var _React$useState11 = React.useState(undefined),
|
|
35
|
+
_React$useState12 = _slicedToArray(_React$useState11, 2),
|
|
36
|
+
dragDirection = _React$useState12[0],
|
|
37
|
+
setDragDirection = _React$useState12[1];
|
|
38
|
+
|
|
39
|
+
var onDragStart = function onDragStart() {
|
|
40
|
+
var rootEl = rootElRef.current;
|
|
41
|
+
setDragging(true);
|
|
42
|
+
|
|
43
|
+
var _siblings = _toConsumableArray(rootEl.parentElement.childNodes);
|
|
44
|
+
|
|
45
|
+
var idx = _siblings.indexOf(rootEl);
|
|
46
|
+
|
|
47
|
+
setDragStartIndex(idx);
|
|
48
|
+
setDragEndIndex(idx);
|
|
49
|
+
setSiblings(_siblings);
|
|
50
|
+
setDragShift(0);
|
|
51
|
+
};
|
|
52
|
+
|
|
53
|
+
var onDragMove = function onDragMove(e) {
|
|
54
|
+
e.originalEvent.preventDefault();
|
|
55
|
+
var rootEl = rootElRef.current;
|
|
56
|
+
rootEl.style.transform = "translateY(".concat(e.shiftY, "px)");
|
|
57
|
+
var rootGesture = rootEl.getBoundingClientRect();
|
|
58
|
+
setDragDirection(dragShift - e.shiftY < 0 ? 'down' : 'up');
|
|
59
|
+
setDragShift(e.shiftY);
|
|
60
|
+
setDragEndIndex(dragStartIndex);
|
|
61
|
+
siblings.forEach(function (sibling, siblingIndex) {
|
|
62
|
+
var siblingGesture = sibling.getBoundingClientRect();
|
|
63
|
+
var siblingHalfHeight = siblingGesture.height / 2;
|
|
64
|
+
var rootOverSibling = rootGesture.bottom > siblingGesture.top + siblingHalfHeight;
|
|
65
|
+
var rootUnderSibling = rootGesture.top < siblingGesture.bottom - siblingHalfHeight;
|
|
66
|
+
|
|
67
|
+
if (dragStartIndex < siblingIndex) {
|
|
68
|
+
if (rootOverSibling) {
|
|
69
|
+
if (dragDirection === 'down') {
|
|
70
|
+
sibling.style.transform = 'translateY(-100%)';
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
setDragEndIndex(function (dragEndIndex) {
|
|
74
|
+
return dragEndIndex + 1;
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
if (rootUnderSibling && dragDirection === 'up') {
|
|
79
|
+
sibling.style.transform = 'translateY(0)';
|
|
80
|
+
}
|
|
81
|
+
} else if (dragStartIndex > siblingIndex) {
|
|
82
|
+
if (rootUnderSibling) {
|
|
83
|
+
if (dragDirection === 'up') {
|
|
84
|
+
sibling.style.transform = 'translateY(100%)';
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
setDragEndIndex(function (dragEndIndex) {
|
|
88
|
+
return dragEndIndex - 1;
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
if (rootOverSibling && dragDirection === 'down') {
|
|
93
|
+
sibling.style.transform = 'translateY(0)';
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
});
|
|
97
|
+
};
|
|
98
|
+
|
|
99
|
+
var onDragEnd = function onDragEnd() {
|
|
100
|
+
var from = dragStartIndex,
|
|
101
|
+
to = dragEndIndex;
|
|
102
|
+
siblings.forEach(function (sibling) {
|
|
103
|
+
sibling.style.transform = null;
|
|
104
|
+
});
|
|
105
|
+
setSiblings(undefined);
|
|
106
|
+
setDragEndIndex(undefined);
|
|
107
|
+
setDragStartIndex(undefined);
|
|
108
|
+
setDragDirection(undefined);
|
|
109
|
+
setDragShift(undefined);
|
|
110
|
+
setDragging(false);
|
|
111
|
+
onDragFinish && onDragFinish({
|
|
112
|
+
from: from,
|
|
113
|
+
to: to
|
|
114
|
+
});
|
|
115
|
+
};
|
|
116
|
+
|
|
117
|
+
var useDraggableProps = {
|
|
118
|
+
onDragStart: onDragStart,
|
|
119
|
+
onDragMove: onDragMove,
|
|
120
|
+
onDragEnd: onDragEnd,
|
|
121
|
+
dragging: dragging,
|
|
122
|
+
rootElRef: rootElRef
|
|
123
|
+
};
|
|
124
|
+
return useDraggableProps;
|
|
125
|
+
};
|
|
126
|
+
//# sourceMappingURL=useDraggable.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/components/Cell/useDraggable.tsx"],"names":["React","useDraggable","onDragFinish","useState","dragging","setDragging","rootElRef","useRef","undefined","siblings","setSiblings","dragStartIndex","setDragStartIndex","dragEndIndex","setDragEndIndex","dragShift","setDragShift","dragDirection","setDragDirection","onDragStart","rootEl","current","_siblings","parentElement","childNodes","idx","indexOf","onDragMove","e","originalEvent","preventDefault","style","transform","shiftY","rootGesture","getBoundingClientRect","forEach","sibling","siblingIndex","siblingGesture","siblingHalfHeight","height","rootOverSibling","bottom","top","rootUnderSibling","onDragEnd","from","to","useDraggableProps"],"mappings":"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","sourcesContent":["import * as React from 'react';\nimport { TouchEvent } from '../Touch/Touch';\nimport { CellProps } from './Cell';\n\nexport interface DraggableProps {\n onDragStart: () => void;\n onDragEnd: () => void;\n onDragMove: (e: TouchEvent) => void;\n}\n\ninterface UseDraggableProps extends DraggableProps {\n dragging: boolean;\n rootElRef: any;\n}\n\nexport const useDraggable = ({ onDragFinish }: Pick<CellProps, 'onDragFinish'>) => {\n const [dragging, setDragging] = React.useState<boolean>(false);\n const rootElRef = React.useRef(null);\n\n const [siblings, setSiblings] = React.useState<HTMLElement[]>(undefined);\n const [dragStartIndex, setDragStartIndex] = React.useState<number>(undefined);\n const [dragEndIndex, setDragEndIndex] = React.useState<number>(undefined);\n const [dragShift, setDragShift] = React.useState<number>(0);\n const [dragDirection, setDragDirection] = React.useState<'down' | 'up'>(undefined);\n\n const onDragStart = () => {\n const rootEl = rootElRef.current;\n\n setDragging(true);\n\n const _siblings: HTMLElement[] = [...rootEl.parentElement.childNodes];\n const idx = _siblings.indexOf(rootEl);\n\n setDragStartIndex(idx);\n setDragEndIndex(idx);\n setSiblings(_siblings);\n setDragShift(0);\n };\n\n const onDragMove = (e: TouchEvent) => {\n e.originalEvent.preventDefault();\n\n const rootEl = rootElRef.current;\n\n rootEl.style.transform = `translateY(${e.shiftY}px)`;\n const rootGesture = rootEl.getBoundingClientRect();\n\n setDragDirection(dragShift - e.shiftY < 0 ? 'down' : 'up');\n setDragShift(e.shiftY);\n setDragEndIndex(dragStartIndex);\n\n siblings.forEach((sibling: HTMLElement, siblingIndex: number) => {\n const siblingGesture = sibling.getBoundingClientRect();\n const siblingHalfHeight = siblingGesture.height / 2;\n\n const rootOverSibling = rootGesture.bottom > siblingGesture.top + siblingHalfHeight;\n const rootUnderSibling = rootGesture.top < siblingGesture.bottom - siblingHalfHeight;\n\n if (dragStartIndex < siblingIndex) {\n if (rootOverSibling) {\n if (dragDirection === 'down') {\n sibling.style.transform = 'translateY(-100%)';\n }\n\n setDragEndIndex((dragEndIndex) => dragEndIndex + 1);\n }\n if (rootUnderSibling && dragDirection === 'up') {\n sibling.style.transform = 'translateY(0)';\n }\n } else if (dragStartIndex > siblingIndex) {\n if (rootUnderSibling) {\n if (dragDirection === 'up') {\n sibling.style.transform = 'translateY(100%)';\n }\n\n setDragEndIndex((dragEndIndex) => dragEndIndex - 1);\n }\n if (rootOverSibling && dragDirection === 'down') {\n sibling.style.transform = 'translateY(0)';\n }\n }\n });\n };\n\n const onDragEnd = () => {\n const [from, to] = [dragStartIndex, dragEndIndex];\n\n siblings.forEach((sibling: HTMLElement) => {\n sibling.style.transform = null;\n });\n\n setSiblings(undefined);\n setDragEndIndex(undefined);\n setDragStartIndex(undefined);\n setDragDirection(undefined);\n setDragShift(undefined);\n\n setDragging(false);\n\n onDragFinish && onDragFinish({ from, to });\n };\n\n const useDraggableProps: UseDraggableProps = {\n onDragStart,\n onDragMove,\n onDragEnd,\n dragging,\n rootElRef,\n };\n\n return useDraggableProps;\n};\n"],"file":"useDraggable.js"}
|
|
@@ -7,7 +7,7 @@ var _excluded = ["style", "onFocus", "onKeyDown", "className", "fetching", "rend
|
|
|
7
7
|
_excluded2 = ["option"];
|
|
8
8
|
import { createScopedElement } from "../../lib/jsxRuntime";
|
|
9
9
|
import * as React from 'react';
|
|
10
|
-
import {
|
|
10
|
+
import { DropdownIcon } from "../DropdownIcon/DropdownIcon";
|
|
11
11
|
import { classNames } from "../../lib/classNames";
|
|
12
12
|
import Spinner from "../Spinner/Spinner";
|
|
13
13
|
import CustomScrollView from "../CustomScrollView/CustomScrollView";
|
|
@@ -249,7 +249,7 @@ var ChipsSelect = function ChipsSelect(props) {
|
|
|
249
249
|
getRef: getRef,
|
|
250
250
|
disabled: disabled,
|
|
251
251
|
onInputChange: handleInputChange,
|
|
252
|
-
after: createScopedElement(
|
|
252
|
+
after: createScopedElement(DropdownIcon, null)
|
|
253
253
|
})), opened && createScopedElement("div", {
|
|
254
254
|
vkuiClass: classNames('ChipsSelect__options', _defineProperty({}, 'ChipsSelect__options--popupDirectionTop', popupDirection === 'top')),
|
|
255
255
|
onMouseLeave: function onMouseLeave() {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/components/ChipsSelect/ChipsSelect.tsx"],"names":["React","Icon20Dropdown","classNames","Spinner","CustomScrollView","ChipsInput","chipsInputDefaultProps","CustomSelectOption","useChipsSelect","withAdaptivity","noop","useDOM","Caption","prefixClass","useExternRef","useGlobalEventListener","defaultFilterFn","FOCUS_ACTION_NEXT","FOCUS_ACTION_PREV","ChipsSelect","props","style","onFocus","onKeyDown","className","fetching","renderOption","emptyText","getRef","getRootRef","disabled","placeholder","tabIndex","getOptionValue","getOptionLabel","showSelected","getNewOptionData","renderChip","popupDirection","creatable","filterFn","inputValue","creatableText","sizeY","closeAfterSelect","onChangeStart","after","options","restProps","document","scrollBoxRef","useRef","rootRef","fieldValue","selectedOptions","opened","setOpened","addOptionFromInput","filteredOptions","addOption","handleInputChange","clearInput","focusedOption","setFocusedOption","focusedOptionIndex","setFocusedOptionIndex","showCreatable","Boolean","length","handleFocus","e","handleClickOutside","rootNode","current","target","contains","chipsSelectOptions","scrollToElement","index","center","dropdown","item","dropdownHeight","offsetHeight","scrollTop","itemTop","offsetTop","itemHeight","focusOptionByIndex","oldIndex","focusOption","nextIndex","type","handleKeyDown","key","defaultPrevented","preventDefault","option","includes","useEffect","findIndex","value","renderChipWrapper","renderChipProps","onRemove","onRemoveWrapper","stopPropagation","map","label","hovered","selected","find","selectedOption","children","onMouseDown","onMouseEnter","chipsSelectDefaultProps","defaultProps"],"mappings":"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","sourcesContent":["import * as React from 'react';\nimport { Icon20Dropdown } from '@vkontakte/icons';\nimport { classNames } from '../../lib/classNames';\nimport Spinner from '../Spinner/Spinner';\nimport CustomScrollView from '../CustomScrollView/CustomScrollView';\nimport ChipsInput, { ChipsInputOption, ChipsInputProps, ChipsInputValue, RenderChip, chipsInputDefaultProps } from '../ChipsInput/ChipsInput';\nimport CustomSelectOption, { CustomSelectOptionProps } from '../CustomSelectOption/CustomSelectOption';\nimport { useChipsSelect } from './useChipsSelect';\nimport { withAdaptivity, AdaptivityProps } from '../../hoc/withAdaptivity';\nimport { noop } from '../../lib/utils';\nimport { useDOM } from '../../lib/dom';\nimport Caption from '../Typography/Caption/Caption';\nimport { prefixClass } from '../../lib/prefixClass';\nimport { useExternRef } from '../../hooks/useExternRef';\nimport { useGlobalEventListener } from '../../hooks/useGlobalEventListener';\nimport { defaultFilterFn } from '../../lib/select';\nimport './ChipsSelect.css';\n\nexport interface ChipsSelectProps<Option extends ChipsInputOption> extends ChipsInputProps<Option>, AdaptivityProps {\n popupDirection?: 'top' | 'bottom';\n options?: Option[];\n filterFn?: false | ((value?: string, option?: Option, getOptionLabel?: Pick<ChipsInputProps<ChipsInputOption>, 'getOptionLabel'>['getOptionLabel']) => boolean);\n /**\n * Возможность создавать чипы которых нет в списке (по enter или с помощью пункта в меню, см creatableText)\n */\n creatable?: boolean;\n /**\n * Отрисовка лоадера вместо списка опций в выпадающем списке\n */\n fetching?: boolean;\n renderOption?: (props: CustomSelectOptionProps) => React.ReactNode;\n /**\n * Показывать или скрывать уже выбранные опции\n */\n showSelected?: boolean;\n /**\n * Текст для пункта создающего чипы при клике, так же отвечает за то будет ли показан этот пункт (показывается после того как в списке не отсанется опций)\n */\n creatableText?: string;\n /**\n * Текст который показывается если список опций пуст\n */\n emptyText?: string;\n /**\n * Событие срабатывающее перед onChange\n */\n onChangeStart?: (e: React.MouseEvent | React.KeyboardEvent, option: Option) => void;\n /**\n * Закрытие выпадающиего списка после выбора элемента\n */\n closeAfterSelect?: boolean;\n}\n\ntype focusActionType = 'next' | 'prev';\n\nconst FOCUS_ACTION_NEXT: focusActionType = 'next';\nconst FOCUS_ACTION_PREV: focusActionType = 'prev';\n\nconst ChipsSelect = <Option extends ChipsInputOption>(props: ChipsSelectProps<Option>) => {\n const {\n style, onFocus, onKeyDown, className, fetching, renderOption, emptyText,\n getRef, getRootRef, disabled, placeholder, tabIndex, getOptionValue, getOptionLabel, showSelected,\n getNewOptionData, renderChip, popupDirection, creatable, filterFn, inputValue, creatableText, sizeY,\n closeAfterSelect, onChangeStart, after, options, ...restProps\n } = props;\n\n const { document } = useDOM();\n\n const scrollBoxRef = React.useRef<HTMLDivElement>(null);\n const rootRef = useExternRef(getRef);\n const {\n fieldValue, selectedOptions, opened, setOpened, addOptionFromInput,\n filteredOptions, addOption, handleInputChange, clearInput,\n focusedOption, setFocusedOption, focusedOptionIndex, setFocusedOptionIndex,\n } = useChipsSelect(props);\n\n const showCreatable = Boolean(creatable && creatableText && !filteredOptions.length && fieldValue);\n\n const handleFocus = (e: React.FocusEvent<HTMLInputElement>) => {\n setOpened(true);\n setFocusedOptionIndex(0);\n onFocus(e);\n };\n\n const handleClickOutside = (e: MouseEvent) => {\n const { current: rootNode } = rootRef;\n if (rootNode && e.target !== rootNode && !rootNode.contains(e.target as Node)) {\n setOpened(false);\n }\n };\n\n const chipsSelectOptions = React.useRef<HTMLElement[]>([]).current;\n\n const scrollToElement = (index: number, center = false) => {\n const dropdown = scrollBoxRef.current;\n const item = chipsSelectOptions[index];\n\n if (!item) {\n return;\n }\n\n const dropdownHeight = dropdown.offsetHeight;\n const scrollTop = dropdown.scrollTop;\n const itemTop = item.offsetTop;\n const itemHeight = item.offsetHeight;\n\n if (center) {\n dropdown.scrollTop = itemTop - dropdownHeight / 2 + itemHeight / 2;\n } else if (itemTop + itemHeight > dropdownHeight + scrollTop) {\n dropdown.scrollTop = itemTop - dropdownHeight + itemHeight;\n } else if (itemTop < scrollTop) {\n dropdown.scrollTop = itemTop;\n }\n };\n\n const focusOptionByIndex = (index: number, oldIndex: number) => {\n const { length } = filteredOptions;\n\n if (index < 0) {\n index = length - 1;\n } else if (index >= length) {\n index = 0;\n }\n\n if (index === oldIndex) {\n return;\n }\n\n scrollToElement(index);\n setFocusedOptionIndex(index);\n };\n\n const focusOption = (nextIndex: number|null, type: focusActionType) => {\n let index = typeof nextIndex !== 'number' ? -1 : nextIndex;\n\n if (type === FOCUS_ACTION_NEXT) {\n index = index + 1;\n } else if (type === FOCUS_ACTION_PREV) {\n index = index - 1;\n }\n\n focusOptionByIndex(index, focusedOptionIndex);\n };\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {\n onKeyDown(e);\n\n if (e.key === 'ArrowUp' && !e.defaultPrevented) {\n e.preventDefault();\n\n if (!opened) {\n setOpened(true);\n setFocusedOptionIndex(0);\n } else {\n focusOption(focusedOptionIndex, FOCUS_ACTION_PREV);\n }\n }\n\n if (e.key === 'ArrowDown' && !e.defaultPrevented) {\n e.preventDefault();\n\n if (!opened) {\n setOpened(true);\n setFocusedOptionIndex(0);\n } else {\n focusOption(focusedOptionIndex, FOCUS_ACTION_NEXT);\n }\n }\n\n if (e.key === 'Enter' && !e.defaultPrevented && opened) {\n const option = filteredOptions[focusedOptionIndex];\n\n if (option) {\n onChangeStart(e, option);\n\n if (!e.defaultPrevented) {\n addOption(option);\n setFocusedOptionIndex(null);\n clearInput();\n closeAfterSelect && setOpened(false);\n e.preventDefault();\n }\n } else if (!creatable) {\n e.preventDefault();\n }\n }\n\n if (['Escape', 'Tab'].includes(e.key) && !e.defaultPrevented && opened) {\n setOpened(false);\n }\n };\n\n React.useEffect(() => {\n if (filteredOptions[focusedOptionIndex]) {\n setFocusedOption(filteredOptions[focusedOptionIndex]);\n } else if (focusedOptionIndex === null || focusedOptionIndex === 0) {\n setFocusedOption(null);\n }\n }, [focusedOptionIndex, filteredOptions]);\n\n React.useEffect(() => {\n const index = focusedOption ? filteredOptions.findIndex(({ value }) => value === focusedOption.value) : -1;\n\n if (index === -1 && !!filteredOptions.length && !showCreatable && closeAfterSelect) {\n setFocusedOption(filteredOptions[0]);\n }\n }, [filteredOptions, focusedOption, showCreatable, closeAfterSelect]);\n\n useGlobalEventListener(document, 'click', handleClickOutside);\n\n const renderChipWrapper = (renderChipProps: RenderChip<Option>) => {\n const { onRemove } = renderChipProps;\n\n const onRemoveWrapper = (e: React.MouseEvent, value: ChipsInputValue) => {\n e.preventDefault();\n e.stopPropagation();\n\n onRemove(e, value);\n };\n\n return renderChip({ ...renderChipProps, onRemove: onRemoveWrapper });\n };\n\n return (\n <div\n vkuiClass={classNames('ChipsSelect', `ChipsSelect--sizeY-${sizeY}`)}\n ref={rootRef}\n style={style}\n className={className}\n >\n <ChipsInput\n {...restProps}\n tabIndex={tabIndex}\n value={selectedOptions}\n inputValue={fieldValue}\n getNewOptionData={getNewOptionData}\n getOptionLabel={getOptionLabel}\n getOptionValue={getOptionValue}\n renderChip={renderChipWrapper}\n onFocus={handleFocus}\n onKeyDown={handleKeyDown}\n placeholder={placeholder}\n vkuiClass={classNames({\n ['ChipsSelect__open']: opened,\n ['ChipsSelect__open--popupDirectionTop']: popupDirection === 'top',\n })}\n getRef={getRef}\n disabled={disabled}\n onInputChange={handleInputChange}\n after={<Icon20Dropdown />}\n />\n {opened &&\n <div\n vkuiClass={classNames('ChipsSelect__options', {\n ['ChipsSelect__options--popupDirectionTop']: popupDirection === 'top',\n })}\n onMouseLeave={() => setFocusedOptionIndex(null)}\n >\n <CustomScrollView boxRef={scrollBoxRef}>\n {fetching ? (\n <div vkuiClass=\"ChipsSelect__fetching\">\n <Spinner size=\"small\" />\n </div>\n ) : (\n <React.Fragment>\n {showCreatable && (\n <CustomSelectOption\n hovered={focusedOptionIndex === 0}\n onMouseDown={addOptionFromInput}\n onMouseEnter={() => setFocusedOptionIndex(0)}\n >\n {creatableText}\n </CustomSelectOption>\n )}\n {!filteredOptions?.length && !showCreatable && emptyText ? (\n <Caption level=\"1\" weight=\"regular\" vkuiClass=\"ChipsSelect__empty\">{emptyText}</Caption>\n ) :\n filteredOptions.map((option: Option, index: number) => {\n const label = getOptionLabel(option);\n const hovered = focusedOption && getOptionValue(option) === getOptionValue(focusedOption);\n const selected = selectedOptions.find((selectedOption: Option) => {\n return getOptionValue(selectedOption) === getOptionValue(option);\n });\n const value = getOptionValue(option);\n\n return (\n <React.Fragment key={`${typeof value}-${value}`}>\n {renderOption({\n className: prefixClass('ChipsSelect__option'),\n option,\n hovered,\n children: label,\n selected: !!selected,\n getRootRef: (e) => chipsSelectOptions[index] = e,\n onMouseDown: (e: React.MouseEvent<HTMLDivElement>) => {\n onChangeStart(e, option);\n\n if (!e.defaultPrevented) {\n closeAfterSelect && setOpened(false);\n addOption(option);\n clearInput();\n }\n },\n onMouseEnter: () => setFocusedOptionIndex(index),\n })}\n </React.Fragment>\n );\n })\n }\n </React.Fragment>\n )}\n </CustomScrollView>\n </div>\n }\n </div>\n );\n};\n\nconst chipsSelectDefaultProps: ChipsSelectProps<any> = {\n ...chipsInputDefaultProps,\n emptyText: 'Ничего не найдено',\n creatableText: 'Создать значение',\n onChangeStart: noop,\n creatable: false,\n fetching: false,\n showSelected: true,\n closeAfterSelect: true,\n options: [],\n filterFn: defaultFilterFn,\n renderOption({ option, ...restProps }: CustomSelectOptionProps): React.ReactNode {\n return (\n <CustomSelectOption {...restProps} />\n );\n },\n};\n\nChipsSelect.defaultProps = chipsSelectDefaultProps;\n\nexport default withAdaptivity(ChipsSelect, { sizeY: true });\n"],"file":"ChipsSelect.js"}
|
|
1
|
+
{"version":3,"sources":["../../../src/components/ChipsSelect/ChipsSelect.tsx"],"names":["React","DropdownIcon","classNames","Spinner","CustomScrollView","ChipsInput","chipsInputDefaultProps","CustomSelectOption","useChipsSelect","withAdaptivity","noop","useDOM","Caption","prefixClass","useExternRef","useGlobalEventListener","defaultFilterFn","FOCUS_ACTION_NEXT","FOCUS_ACTION_PREV","ChipsSelect","props","style","onFocus","onKeyDown","className","fetching","renderOption","emptyText","getRef","getRootRef","disabled","placeholder","tabIndex","getOptionValue","getOptionLabel","showSelected","getNewOptionData","renderChip","popupDirection","creatable","filterFn","inputValue","creatableText","sizeY","closeAfterSelect","onChangeStart","after","options","restProps","document","scrollBoxRef","useRef","rootRef","fieldValue","selectedOptions","opened","setOpened","addOptionFromInput","filteredOptions","addOption","handleInputChange","clearInput","focusedOption","setFocusedOption","focusedOptionIndex","setFocusedOptionIndex","showCreatable","Boolean","length","handleFocus","e","handleClickOutside","rootNode","current","target","contains","chipsSelectOptions","scrollToElement","index","center","dropdown","item","dropdownHeight","offsetHeight","scrollTop","itemTop","offsetTop","itemHeight","focusOptionByIndex","oldIndex","focusOption","nextIndex","type","handleKeyDown","key","defaultPrevented","preventDefault","option","includes","useEffect","findIndex","value","renderChipWrapper","renderChipProps","onRemove","onRemoveWrapper","stopPropagation","map","label","hovered","selected","find","selectedOption","children","onMouseDown","onMouseEnter","chipsSelectDefaultProps","defaultProps"],"mappings":"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","sourcesContent":["import * as React from 'react';\nimport { DropdownIcon } from '../DropdownIcon/DropdownIcon';\nimport { classNames } from '../../lib/classNames';\nimport Spinner from '../Spinner/Spinner';\nimport CustomScrollView from '../CustomScrollView/CustomScrollView';\nimport ChipsInput, { ChipsInputOption, ChipsInputProps, ChipsInputValue, RenderChip, chipsInputDefaultProps } from '../ChipsInput/ChipsInput';\nimport CustomSelectOption, { CustomSelectOptionProps } from '../CustomSelectOption/CustomSelectOption';\nimport { useChipsSelect } from './useChipsSelect';\nimport { withAdaptivity, AdaptivityProps } from '../../hoc/withAdaptivity';\nimport { noop } from '../../lib/utils';\nimport { useDOM } from '../../lib/dom';\nimport Caption from '../Typography/Caption/Caption';\nimport { prefixClass } from '../../lib/prefixClass';\nimport { useExternRef } from '../../hooks/useExternRef';\nimport { useGlobalEventListener } from '../../hooks/useGlobalEventListener';\nimport { defaultFilterFn } from '../../lib/select';\nimport './ChipsSelect.css';\n\nexport interface ChipsSelectProps<Option extends ChipsInputOption> extends ChipsInputProps<Option>, AdaptivityProps {\n popupDirection?: 'top' | 'bottom';\n options?: Option[];\n filterFn?: false | ((value?: string, option?: Option, getOptionLabel?: Pick<ChipsInputProps<ChipsInputOption>, 'getOptionLabel'>['getOptionLabel']) => boolean);\n /**\n * Возможность создавать чипы которых нет в списке (по enter или с помощью пункта в меню, см creatableText)\n */\n creatable?: boolean;\n /**\n * Отрисовка лоадера вместо списка опций в выпадающем списке\n */\n fetching?: boolean;\n renderOption?: (props: CustomSelectOptionProps) => React.ReactNode;\n /**\n * Показывать или скрывать уже выбранные опции\n */\n showSelected?: boolean;\n /**\n * Текст для пункта создающего чипы при клике, так же отвечает за то будет ли показан этот пункт (показывается после того как в списке не отсанется опций)\n */\n creatableText?: string;\n /**\n * Текст который показывается если список опций пуст\n */\n emptyText?: string;\n /**\n * Событие срабатывающее перед onChange\n */\n onChangeStart?: (e: React.MouseEvent | React.KeyboardEvent, option: Option) => void;\n /**\n * Закрытие выпадающиего списка после выбора элемента\n */\n closeAfterSelect?: boolean;\n}\n\ntype focusActionType = 'next' | 'prev';\n\nconst FOCUS_ACTION_NEXT: focusActionType = 'next';\nconst FOCUS_ACTION_PREV: focusActionType = 'prev';\n\nconst ChipsSelect = <Option extends ChipsInputOption>(props: ChipsSelectProps<Option>) => {\n const {\n style, onFocus, onKeyDown, className, fetching, renderOption, emptyText,\n getRef, getRootRef, disabled, placeholder, tabIndex, getOptionValue, getOptionLabel, showSelected,\n getNewOptionData, renderChip, popupDirection, creatable, filterFn, inputValue, creatableText, sizeY,\n closeAfterSelect, onChangeStart, after, options, ...restProps\n } = props;\n\n const { document } = useDOM();\n\n const scrollBoxRef = React.useRef<HTMLDivElement>(null);\n const rootRef = useExternRef(getRef);\n const {\n fieldValue, selectedOptions, opened, setOpened, addOptionFromInput,\n filteredOptions, addOption, handleInputChange, clearInput,\n focusedOption, setFocusedOption, focusedOptionIndex, setFocusedOptionIndex,\n } = useChipsSelect(props);\n\n const showCreatable = Boolean(creatable && creatableText && !filteredOptions.length && fieldValue);\n\n const handleFocus = (e: React.FocusEvent<HTMLInputElement>) => {\n setOpened(true);\n setFocusedOptionIndex(0);\n onFocus(e);\n };\n\n const handleClickOutside = (e: MouseEvent) => {\n const { current: rootNode } = rootRef;\n if (rootNode && e.target !== rootNode && !rootNode.contains(e.target as Node)) {\n setOpened(false);\n }\n };\n\n const chipsSelectOptions = React.useRef<HTMLElement[]>([]).current;\n\n const scrollToElement = (index: number, center = false) => {\n const dropdown = scrollBoxRef.current;\n const item = chipsSelectOptions[index];\n\n if (!item) {\n return;\n }\n\n const dropdownHeight = dropdown.offsetHeight;\n const scrollTop = dropdown.scrollTop;\n const itemTop = item.offsetTop;\n const itemHeight = item.offsetHeight;\n\n if (center) {\n dropdown.scrollTop = itemTop - dropdownHeight / 2 + itemHeight / 2;\n } else if (itemTop + itemHeight > dropdownHeight + scrollTop) {\n dropdown.scrollTop = itemTop - dropdownHeight + itemHeight;\n } else if (itemTop < scrollTop) {\n dropdown.scrollTop = itemTop;\n }\n };\n\n const focusOptionByIndex = (index: number, oldIndex: number) => {\n const { length } = filteredOptions;\n\n if (index < 0) {\n index = length - 1;\n } else if (index >= length) {\n index = 0;\n }\n\n if (index === oldIndex) {\n return;\n }\n\n scrollToElement(index);\n setFocusedOptionIndex(index);\n };\n\n const focusOption = (nextIndex: number|null, type: focusActionType) => {\n let index = typeof nextIndex !== 'number' ? -1 : nextIndex;\n\n if (type === FOCUS_ACTION_NEXT) {\n index = index + 1;\n } else if (type === FOCUS_ACTION_PREV) {\n index = index - 1;\n }\n\n focusOptionByIndex(index, focusedOptionIndex);\n };\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {\n onKeyDown(e);\n\n if (e.key === 'ArrowUp' && !e.defaultPrevented) {\n e.preventDefault();\n\n if (!opened) {\n setOpened(true);\n setFocusedOptionIndex(0);\n } else {\n focusOption(focusedOptionIndex, FOCUS_ACTION_PREV);\n }\n }\n\n if (e.key === 'ArrowDown' && !e.defaultPrevented) {\n e.preventDefault();\n\n if (!opened) {\n setOpened(true);\n setFocusedOptionIndex(0);\n } else {\n focusOption(focusedOptionIndex, FOCUS_ACTION_NEXT);\n }\n }\n\n if (e.key === 'Enter' && !e.defaultPrevented && opened) {\n const option = filteredOptions[focusedOptionIndex];\n\n if (option) {\n onChangeStart(e, option);\n\n if (!e.defaultPrevented) {\n addOption(option);\n setFocusedOptionIndex(null);\n clearInput();\n closeAfterSelect && setOpened(false);\n e.preventDefault();\n }\n } else if (!creatable) {\n e.preventDefault();\n }\n }\n\n if (['Escape', 'Tab'].includes(e.key) && !e.defaultPrevented && opened) {\n setOpened(false);\n }\n };\n\n React.useEffect(() => {\n if (filteredOptions[focusedOptionIndex]) {\n setFocusedOption(filteredOptions[focusedOptionIndex]);\n } else if (focusedOptionIndex === null || focusedOptionIndex === 0) {\n setFocusedOption(null);\n }\n }, [focusedOptionIndex, filteredOptions]);\n\n React.useEffect(() => {\n const index = focusedOption ? filteredOptions.findIndex(({ value }) => value === focusedOption.value) : -1;\n\n if (index === -1 && !!filteredOptions.length && !showCreatable && closeAfterSelect) {\n setFocusedOption(filteredOptions[0]);\n }\n }, [filteredOptions, focusedOption, showCreatable, closeAfterSelect]);\n\n useGlobalEventListener(document, 'click', handleClickOutside);\n\n const renderChipWrapper = (renderChipProps: RenderChip<Option>) => {\n const { onRemove } = renderChipProps;\n\n const onRemoveWrapper = (e: React.MouseEvent, value: ChipsInputValue) => {\n e.preventDefault();\n e.stopPropagation();\n\n onRemove(e, value);\n };\n\n return renderChip({ ...renderChipProps, onRemove: onRemoveWrapper });\n };\n\n return (\n <div\n vkuiClass={classNames('ChipsSelect', `ChipsSelect--sizeY-${sizeY}`)}\n ref={rootRef}\n style={style}\n className={className}\n >\n <ChipsInput\n {...restProps}\n tabIndex={tabIndex}\n value={selectedOptions}\n inputValue={fieldValue}\n getNewOptionData={getNewOptionData}\n getOptionLabel={getOptionLabel}\n getOptionValue={getOptionValue}\n renderChip={renderChipWrapper}\n onFocus={handleFocus}\n onKeyDown={handleKeyDown}\n placeholder={placeholder}\n vkuiClass={classNames({\n ['ChipsSelect__open']: opened,\n ['ChipsSelect__open--popupDirectionTop']: popupDirection === 'top',\n })}\n getRef={getRef}\n disabled={disabled}\n onInputChange={handleInputChange}\n after={<DropdownIcon />}\n />\n {opened &&\n <div\n vkuiClass={classNames('ChipsSelect__options', {\n ['ChipsSelect__options--popupDirectionTop']: popupDirection === 'top',\n })}\n onMouseLeave={() => setFocusedOptionIndex(null)}\n >\n <CustomScrollView boxRef={scrollBoxRef}>\n {fetching ? (\n <div vkuiClass=\"ChipsSelect__fetching\">\n <Spinner size=\"small\" />\n </div>\n ) : (\n <React.Fragment>\n {showCreatable && (\n <CustomSelectOption\n hovered={focusedOptionIndex === 0}\n onMouseDown={addOptionFromInput}\n onMouseEnter={() => setFocusedOptionIndex(0)}\n >\n {creatableText}\n </CustomSelectOption>\n )}\n {!filteredOptions?.length && !showCreatable && emptyText ? (\n <Caption level=\"1\" weight=\"regular\" vkuiClass=\"ChipsSelect__empty\">{emptyText}</Caption>\n ) :\n filteredOptions.map((option: Option, index: number) => {\n const label = getOptionLabel(option);\n const hovered = focusedOption && getOptionValue(option) === getOptionValue(focusedOption);\n const selected = selectedOptions.find((selectedOption: Option) => {\n return getOptionValue(selectedOption) === getOptionValue(option);\n });\n const value = getOptionValue(option);\n\n return (\n <React.Fragment key={`${typeof value}-${value}`}>\n {renderOption({\n className: prefixClass('ChipsSelect__option'),\n option,\n hovered,\n children: label,\n selected: !!selected,\n getRootRef: (e) => chipsSelectOptions[index] = e,\n onMouseDown: (e: React.MouseEvent<HTMLDivElement>) => {\n onChangeStart(e, option);\n\n if (!e.defaultPrevented) {\n closeAfterSelect && setOpened(false);\n addOption(option);\n clearInput();\n }\n },\n onMouseEnter: () => setFocusedOptionIndex(index),\n })}\n </React.Fragment>\n );\n })\n }\n </React.Fragment>\n )}\n </CustomScrollView>\n </div>\n }\n </div>\n );\n};\n\nconst chipsSelectDefaultProps: ChipsSelectProps<any> = {\n ...chipsInputDefaultProps,\n emptyText: 'Ничего не найдено',\n creatableText: 'Создать значение',\n onChangeStart: noop,\n creatable: false,\n fetching: false,\n showSelected: true,\n closeAfterSelect: true,\n options: [],\n filterFn: defaultFilterFn,\n renderOption({ option, ...restProps }: CustomSelectOptionProps): React.ReactNode {\n return (\n <CustomSelectOption {...restProps} />\n );\n },\n};\n\nChipsSelect.defaultProps = chipsSelectDefaultProps;\n\nexport default withAdaptivity(ChipsSelect, { sizeY: true });\n"],"file":"ChipsSelect.js"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/components/Counter/Counter.tsx"],"names":["React","classNames","getClassName","usePlatform","Caption","Text","VKCOM","hasReactNode","CounterTypography","size","platform","restProps","Counter","props","mode","children","Children","count","defaultProps","memo"],"mappings":";;;;;AAAA,OAAO,KAAKA,KAAZ,MAAuB,OAAvB;AACA,SAASC,UAAT;AACA,SAASC,YAAT;AACA,SAASC,WAAT;AACA,OAAOC,OAAP;AACA,OAAOC,IAAP;AACA,SAASC,KAAT;AACA,SAASC,YAAT;;AAcA,IAAMC,iBAAmD,GAAG,SAAtDA,iBAAsD,OAAsC;AAAA,MAAnCC,IAAmC,QAAnCA,IAAmC;AAAA,MAA7BC,QAA6B,QAA7BA,QAA6B;AAAA,MAAhBC,SAAgB;;AAChG,SAAOF,IAAI,KAAK,GAAT,GACH,oBAAC,OAAD;AAAS,IAAA,KAAK,EAAC,GAAf;AAAmB,IAAA,MAAM,EAAEC,QAAQ,KAAKJ,KAAb,GAAqB,QAArB,GAAgC;AAA3D,KAA0EK,SAA1E,EADG,GAEH,oBAAC,IAAD;AAAM,IAAA,MAAM,EAAC;AAAb,KAA0BA,SAA1B,EAFJ;AAGD,CAJD;;AAMA,IAAMC,OAA+B,GAAG,SAAlCA,OAAkC,CAACC,KAAD,EAAyB;AAC/D,MAAQC,IAAR,GAA+CD,KAA/C,CAAQC,IAAR;AAAA,MAAcL,IAAd,GAA+CI,KAA/C,CAAcJ,IAAd;AAAA,MAAoBM,QAApB,GAA+CF,KAA/C,CAAoBE,QAApB;AAAA,MAAiCJ,SAAjC,4BAA+CE,KAA/C;;AACA,MAAMH,QAAQ,GAAGP,WAAW,EAA5B;;AAEA,MAAIH,KAAK,CAACgB,QAAN,CAAeC,KAAf,CAAqBF,QAArB,MAAmC,CAAvC,EAA0C;AACxC,WAAO,IAAP;AACD;;AAED,SACE,yCACMJ,SADN;AAEE,IAAA,SAAS,EAAEV,UAAU,CACnBC,YAAY,CAAC,SAAD,EAAYQ,QAAZ,CADO,qBAEPI,IAFO,wBAGLL,IAHK;AAFvB,MAQGF,YAAY,CAACQ,QAAD,CAAZ,IAA0B,oBAAC,iBAAD;AAAmB,IAAA,QAAQ,EAAEL,QAA7B;AAAuC,IAAA,IAAI,EAAED,IAA7C;AAAmD,IAAA,SAAS,EAAC;AAA7D,KAA4EM,QAA5E,CAR7B,CADF;AAYD,CApBD;;AAsBAH,OAAO,CAACM,YAAR,GAAuB;AACrBJ,EAAAA,IAAI,EAAE,WADe;AAErBL,EAAAA,IAAI,EAAE;AAFe,CAAvB;AAKA,4BAAeT,KAAK,CAACmB,IAAN,CAAWP,OAAX,CAAf","sourcesContent":["import * as React from 'react';\nimport { classNames } from '../../lib/classNames';\nimport { getClassName } from '../../helpers/getClassName';\nimport { usePlatform } from '../../hooks/usePlatform';\nimport Caption from '../Typography/Caption/Caption';\nimport Text from '../Typography/Text/Text';\nimport { VKCOM } from '../../lib/platform';\nimport { hasReactNode } from '../../lib/utils';\nimport { HasPlatform } from '../../types';\nimport './Counter.css';\n\nexport interface CounterProps extends React.HTMLAttributes<HTMLSpanElement> {\n /**\n * Тип счетчика. При использовании компонента в качестве значения свойства `after` у `Button` эти значения игнорируются\n */\n mode?: 'secondary' | 'primary' | 'prominent';\n size?: 's' | 'm';\n}\n\ntype CounterTypographyProps = Pick<CounterProps, 'size'> & HasPlatform &
|
|
1
|
+
{"version":3,"sources":["../../../src/components/Counter/Counter.tsx"],"names":["React","classNames","getClassName","usePlatform","Caption","Text","VKCOM","hasReactNode","CounterTypography","size","platform","restProps","Counter","props","mode","children","Children","count","defaultProps","memo"],"mappings":";;;;;AAAA,OAAO,KAAKA,KAAZ,MAAuB,OAAvB;AACA,SAASC,UAAT;AACA,SAASC,YAAT;AACA,SAASC,WAAT;AACA,OAAOC,OAAP;AACA,OAAOC,IAAP;AACA,SAASC,KAAT;AACA,SAASC,YAAT;;AAcA,IAAMC,iBAAmD,GAAG,SAAtDA,iBAAsD,OAAsC;AAAA,MAAnCC,IAAmC,QAAnCA,IAAmC;AAAA,MAA7BC,QAA6B,QAA7BA,QAA6B;AAAA,MAAhBC,SAAgB;;AAChG,SAAOF,IAAI,KAAK,GAAT,GACH,oBAAC,OAAD;AAAS,IAAA,KAAK,EAAC,GAAf;AAAmB,IAAA,MAAM,EAAEC,QAAQ,KAAKJ,KAAb,GAAqB,QAArB,GAAgC;AAA3D,KAA0EK,SAA1E,EADG,GAEH,oBAAC,IAAD;AAAM,IAAA,MAAM,EAAC;AAAb,KAA0BA,SAA1B,EAFJ;AAGD,CAJD;;AAMA,IAAMC,OAA+B,GAAG,SAAlCA,OAAkC,CAACC,KAAD,EAAyB;AAC/D,MAAQC,IAAR,GAA+CD,KAA/C,CAAQC,IAAR;AAAA,MAAcL,IAAd,GAA+CI,KAA/C,CAAcJ,IAAd;AAAA,MAAoBM,QAApB,GAA+CF,KAA/C,CAAoBE,QAApB;AAAA,MAAiCJ,SAAjC,4BAA+CE,KAA/C;;AACA,MAAMH,QAAQ,GAAGP,WAAW,EAA5B;;AAEA,MAAIH,KAAK,CAACgB,QAAN,CAAeC,KAAf,CAAqBF,QAArB,MAAmC,CAAvC,EAA0C;AACxC,WAAO,IAAP;AACD;;AAED,SACE,yCACMJ,SADN;AAEE,IAAA,SAAS,EAAEV,UAAU,CACnBC,YAAY,CAAC,SAAD,EAAYQ,QAAZ,CADO,qBAEPI,IAFO,wBAGLL,IAHK;AAFvB,MAQGF,YAAY,CAACQ,QAAD,CAAZ,IAA0B,oBAAC,iBAAD;AAAmB,IAAA,QAAQ,EAAEL,QAA7B;AAAuC,IAAA,IAAI,EAAED,IAA7C;AAAmD,IAAA,SAAS,EAAC;AAA7D,KAA4EM,QAA5E,CAR7B,CADF;AAYD,CApBD;;AAsBAH,OAAO,CAACM,YAAR,GAAuB;AACrBJ,EAAAA,IAAI,EAAE,WADe;AAErBL,EAAAA,IAAI,EAAE;AAFe,CAAvB;AAKA,4BAAeT,KAAK,CAACmB,IAAN,CAAWP,OAAX,CAAf","sourcesContent":["import * as React from 'react';\nimport { classNames } from '../../lib/classNames';\nimport { getClassName } from '../../helpers/getClassName';\nimport { usePlatform } from '../../hooks/usePlatform';\nimport Caption from '../Typography/Caption/Caption';\nimport Text from '../Typography/Text/Text';\nimport { VKCOM } from '../../lib/platform';\nimport { hasReactNode } from '../../lib/utils';\nimport { HasComponent, HasPlatform } from '../../types';\nimport './Counter.css';\n\nexport interface CounterProps extends React.HTMLAttributes<HTMLSpanElement> {\n /**\n * Тип счетчика. При использовании компонента в качестве значения свойства `after` у `Button` эти значения игнорируются\n */\n mode?: 'secondary' | 'primary' | 'prominent';\n size?: 's' | 'm';\n}\n\ntype CounterTypographyProps = Pick<CounterProps, 'size'> & HasPlatform & HasComponent;\n\nconst CounterTypography: React.FC<CounterTypographyProps> = ({ size, platform, ...restProps }) => {\n return size === 's'\n ? <Caption level=\"2\" weight={platform === VKCOM ? 'medium' : 'regular'} {...restProps} />\n : <Text weight=\"medium\" {...restProps} />;\n};\n\nconst Counter: React.FC<CounterProps> = (props: CounterProps) => {\n const { mode, size, children, ...restProps } = props;\n const platform = usePlatform();\n\n if (React.Children.count(children) === 0) {\n return null;\n }\n\n return (\n <span\n {...restProps}\n vkuiClass={classNames(\n getClassName('Counter', platform),\n `Counter--${mode}`,\n `Counter--s-${size}`,\n )}\n >\n {hasReactNode(children) && <CounterTypography platform={platform} size={size} vkuiClass=\"Counter__in\">{children}</CounterTypography>}\n </span>\n );\n};\n\nCounter.defaultProps = {\n mode: 'secondary',\n size: 'm',\n};\n\nexport default React.memo(Counter);\n"],"file":"Counter.js"}
|
|
@@ -64,7 +64,6 @@ declare type MouseEventHandler = (event: React.MouseEvent<HTMLElement>) => void;
|
|
|
64
64
|
declare class CustomSelect extends React.Component<CustomSelectProps, CustomSelectState> {
|
|
65
65
|
static defaultProps: CustomSelectProps;
|
|
66
66
|
constructor(props: CustomSelectProps);
|
|
67
|
-
state: CustomSelectState;
|
|
68
67
|
private keyboardInput;
|
|
69
68
|
private isControlledOutside;
|
|
70
69
|
private selectEl;
|
|
@@ -15,12 +15,12 @@ import SelectMimicry from "../SelectMimicry/SelectMimicry";
|
|
|
15
15
|
import { debounce, setRef } from "../../lib/utils";
|
|
16
16
|
import { classNames } from "../../lib/classNames";
|
|
17
17
|
import CustomScrollView from "../CustomScrollView/CustomScrollView";
|
|
18
|
-
import {
|
|
18
|
+
import { withAdaptivity } from "../../hoc/withAdaptivity";
|
|
19
19
|
import { withPlatform } from "../../hoc/withPlatform";
|
|
20
20
|
import CustomSelectOption from "../CustomSelectOption/CustomSelectOption";
|
|
21
21
|
import { getClassName } from "../../helpers/getClassName";
|
|
22
22
|
import Input from "../Input/Input";
|
|
23
|
-
import {
|
|
23
|
+
import { DropdownIcon } from "../DropdownIcon/DropdownIcon";
|
|
24
24
|
import Caption from "../Typography/Caption/Caption";
|
|
25
25
|
import { warnOnce } from "../../lib/warnOnce";
|
|
26
26
|
import Spinner from "../Spinner/Spinner";
|
|
@@ -81,8 +81,6 @@ var CustomSelect = /*#__PURE__*/function (_React$Component) {
|
|
|
81
81
|
|
|
82
82
|
_this = _super.call(this, props);
|
|
83
83
|
|
|
84
|
-
_defineProperty(_assertThisInitialized(_this), "state", void 0);
|
|
85
|
-
|
|
86
84
|
_defineProperty(_assertThisInitialized(_this), "keyboardInput", void 0);
|
|
87
85
|
|
|
88
86
|
_defineProperty(_assertThisInitialized(_this), "isControlledOutside", void 0);
|
|
@@ -582,7 +580,7 @@ var CustomSelect = /*#__PURE__*/function (_React$Component) {
|
|
|
582
580
|
// @ts-ignore
|
|
583
581
|
,
|
|
584
582
|
onClick: onClick,
|
|
585
|
-
after:
|
|
583
|
+
after: createScopedElement(DropdownIcon, null),
|
|
586
584
|
placeholder: restProps.placeholder
|
|
587
585
|
})) : createScopedElement(SelectMimicry, _extends({}, restProps, {
|
|
588
586
|
"aria-hidden": true,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/components/CustomSelect/CustomSelect.tsx"],"names":["React","SelectMimicry","debounce","setRef","classNames","CustomScrollView","SizeType","withAdaptivity","withPlatform","CustomSelectOption","getClassName","Input","Icon20Dropdown","Icon24Dropdown","Caption","warnOnce","Spinner","defaultFilterFn","is","findIndexAfter","options","startIndex","length","findIndex","option","i","disabled","findIndexBefore","endIndex","result","warn","checkOptionsValueType","Set","map","item","value","size","CustomSelect","props","createRef","keyboardInput","state","selectedOptionIndex","inputValue","filterFn","filter","setState","opened","focusedOptionIndex","isValidIndex","scrollToElement","onOpen","resetKeyboardInput","onClose","select","index","nativeSelectValue","event","Event","bubbles","selectEl","dispatchEvent","close","open","scrollTo","type","nextIndex","beforeIndex","focusOptionByIndex","e","Array","prototype","indexOf","call","currentTarget","parentNode","children","preventDefault","selectFocused","key","fullInput","optionIndex","label","toLowerCase","includes","scrollBoxRef","current","contains","target","isControlledOutside","findSelectedIndex","onChange","onInputChange","process","env","NODE_ENV","areOptionsShown","focusOption","onKeyboardInput","renderOption","hovered","selected","onClick","handleOptionClick","onMouseDown","handleOptionDown","onMouseEnter","handleOptionHover","element","getRef","defaultValue","initialValue","undefined","Number","center","dropdown","dropdownHeight","offsetHeight","scrollTop","itemTop","offsetTop","itemHeight","prevProps","searchable","name","className","getRootRef","popupDirection","sizeY","platform","style","onBlur","onFocus","emptyText","renderDropdown","fetching","restProps","getSelectedItem","defaultDropdownContent","resolvedContent","onLabelClick","onInputKeyDown","COMPACT","placeholder","handleKeyDownSelect","handleKeyUp","selectRef","onNativeSelectChange","resetFocusedOption","Component"],"mappings":"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","sourcesContent":["import * as React from 'react';\nimport SelectMimicry from '../SelectMimicry/SelectMimicry';\nimport { debounce, setRef } from '../../lib/utils';\nimport { classNames } from '../../lib/classNames';\nimport { NativeSelectProps } from '../NativeSelect/NativeSelect';\nimport CustomScrollView from '../CustomScrollView/CustomScrollView';\nimport { SizeType, withAdaptivity } from '../../hoc/withAdaptivity';\nimport { withPlatform } from '../../hoc/withPlatform';\nimport CustomSelectOption, { CustomSelectOptionProps } from '../CustomSelectOption/CustomSelectOption';\nimport { getClassName } from '../../helpers/getClassName';\nimport { FormFieldProps } from '../FormField/FormField';\nimport { HasPlatform } from '../../types';\nimport Input from '../Input/Input';\nimport { Icon20Dropdown, Icon24Dropdown } from '@vkontakte/icons';\nimport Caption from '../Typography/Caption/Caption';\nimport { warnOnce } from '../../lib/warnOnce';\nimport Spinner from '../Spinner/Spinner';\nimport { defaultFilterFn } from '../../lib/select';\nimport { is } from '../../lib/is';\nimport './CustomSelect.css';\n\nconst findIndexAfter = (options: CustomSelectOptionInterface[], startIndex = -1) => {\n if (startIndex >= options.length - 1) {\n return -1;\n }\n return options.findIndex((option, i) => i > startIndex && !option.disabled);\n};\n\nconst findIndexBefore = (options: CustomSelectOptionInterface[], endIndex: number = options.length) => {\n let result = -1;\n if (endIndex <= 0) {\n return result;\n }\n for (let i = endIndex - 1; i >= 0; i--) {\n let option = options[i];\n\n if (!option.disabled) {\n result = i;\n break;\n }\n }\n return result;\n};\n\nconst warn = warnOnce('CustomSelect');\n\nconst checkOptionsValueType = (options: CustomSelectOptionInterface[]) => {\n if (new Set(options.map((item) => typeof item.value)).size > 1) {\n warn('Some values of your options have different types. CustomSelect onChange always returns a string type.');\n }\n};\n\ntype SelectValue = React.SelectHTMLAttributes<HTMLSelectElement>['value'];\n\nexport interface CustomSelectOptionInterface {\n value: SelectValue;\n label: string;\n disabled?: boolean;\n [index: string]: any;\n}\n\ninterface CustomSelectState {\n inputValue?: string;\n opened?: boolean;\n focusedOptionIndex?: number;\n selectedOptionIndex?: number;\n nativeSelectValue?: SelectValue;\n options?: CustomSelectOptionInterface[];\n}\n\nexport interface CustomSelectProps extends NativeSelectProps, HasPlatform, FormFieldProps {\n /**\n * Если `true`, то при клике на селект в нём появится текстовое поле для поиска по `options`. По умолчанию поиск\n * производится по `option.label`.\n */\n searchable?: boolean;\n /**\n * Текст, который будет отображен, если приходит пустой `options`\n */\n emptyText?: string;\n onInputChange?: (e: React.ChangeEvent, options: CustomSelectOptionInterface[]) => void | CustomSelectOptionInterface[];\n options: Array<{\n value: SelectValue;\n label: string;\n [index: string]: any;\n }>;\n /**\n * Функция для кастомной фильтрации. По-умолчанию поиск производится по option.label.\n */\n filterFn?: false | ((value: string, option: CustomSelectOptionInterface, getOptionLabel?: (option: Partial<CustomSelectOptionInterface>) => string) => boolean);\n popupDirection?: 'top' | 'bottom';\n /**\n * Рендер-проп для кастомного рендера опции.\n * В объекте аргумента приходят [свойства опции](#/CustomSelectOption?id=props)\n */\n renderOption?: (props: CustomSelectOptionProps) => React.ReactNode;\n /**\n * Рендер-проп для кастомного рендера содержимого дропдауна.\n * В defaultDropdownContent содержится список опций в виде скроллящегося блока.\n */\n renderDropdown?: ({ defaultDropdownContent }: { defaultDropdownContent: React.ReactNode }) => React.ReactNode;\n /**\n * Если true, то в дропдауне вместо списка опций рисуется спиннер. При переданных renderDropdown и fetching: true,\n * \"победит\" renderDropdown\n */\n fetching?: boolean;\n onClose?: VoidFunction;\n onOpen?: VoidFunction;\n}\n\ntype MouseEventHandler = (event: React.MouseEvent<HTMLElement>) => void;\n\nclass CustomSelect extends React.Component<CustomSelectProps, CustomSelectState> {\n static defaultProps: CustomSelectProps = {\n searchable: false,\n renderOption({ option, ...props }): React.ReactNode {\n return (\n <CustomSelectOption {...props} />\n );\n },\n options: [],\n emptyText: 'Ничего не найдено',\n filterFn: defaultFilterFn,\n };\n\n public constructor(props: CustomSelectProps) {\n super(props);\n\n const { value, defaultValue } = props;\n\n const initialValue = value !== undefined ? value : defaultValue;\n\n this.keyboardInput = '';\n\n if (process.env.NODE_ENV === 'development') {\n checkOptionsValueType(props.options);\n }\n\n this.state = {\n opened: false,\n focusedOptionIndex: -1,\n selectedOptionIndex: this.findSelectedIndex(props.options, initialValue),\n nativeSelectValue: initialValue,\n options: props.options,\n inputValue: '',\n };\n\n if (props.value !== undefined) {\n this.isControlledOutside = true;\n }\n }\n\n public state: CustomSelectState;\n private keyboardInput: string;\n private isControlledOutside: boolean;\n private selectEl: HTMLSelectElement;\n private readonly scrollBoxRef = React.createRef<HTMLDivElement>();\n\n private readonly resetKeyboardInput = () => {\n this.keyboardInput = '';\n };\n\n private readonly getSelectedItem = () => {\n const { selectedOptionIndex, options } = this.state;\n\n if (!options.length) {\n return null;\n }\n\n return options[selectedOptionIndex];\n };\n\n get areOptionsShown() {\n return this.scrollBoxRef.current !== null;\n }\n\n filter = (options: CustomSelectProps['options'], inputValue: string, filterFn: CustomSelectProps['filterFn']) => {\n return typeof filterFn === 'function' ? options.filter((option) => filterFn(inputValue, option)) : options;\n };\n\n findSelectedIndex(options: CustomSelectOptionInterface[], value: SelectValue) {\n return options.findIndex((item) => {\n value = typeof item.value === 'number' ? Number(value) : value;\n return item.value === value;\n });\n }\n\n open = () => {\n this.setState(({ selectedOptionIndex }) => ({\n opened: true,\n focusedOptionIndex: selectedOptionIndex,\n }), () => {\n const { selectedOptionIndex } = this.state;\n\n if (this.isValidIndex(selectedOptionIndex)) {\n this.scrollToElement(selectedOptionIndex, true);\n }\n });\n typeof this.props.onOpen === 'function' && this.props.onOpen();\n };\n\n close = () => {\n this.resetKeyboardInput();\n\n this.setState(() => ({\n inputValue: '',\n opened: false,\n focusedOptionIndex: -1,\n options: this.props.options,\n }));\n typeof this.props.onClose === 'function' && this.props.onClose();\n };\n\n private isValidIndex(index: number) {\n return index >= 0 && index < this.state.options.length;\n }\n\n selectFocused = () => {\n const { focusedOptionIndex } = this.state;\n\n this.select(focusedOptionIndex);\n };\n\n select = (index: number) => {\n if (!this.isValidIndex(index)) {\n return;\n }\n\n const item = this.state.options[index];\n\n this.setState({\n nativeSelectValue: item.value,\n }, () => {\n const event = new Event('change', { bubbles: true });\n this.selectEl.dispatchEvent(event);\n });\n this.close();\n };\n\n onClick = () => {\n this.state.opened ? this.close() : this.open();\n };\n\n onFocus = () => {\n const event = new Event('focus');\n this.selectEl.dispatchEvent(event);\n };\n\n onBlur = () => {\n this.close();\n const event = new Event('blur');\n this.selectEl.dispatchEvent(event);\n };\n\n private scrollToElement(index: number, center = false) {\n const dropdown = this.scrollBoxRef.current;\n const item = dropdown ? (dropdown.children[index] as HTMLElement) : null;\n\n if (!item) {\n return;\n }\n\n const dropdownHeight = dropdown.offsetHeight;\n const scrollTop = dropdown.scrollTop;\n const itemTop = item.offsetTop;\n const itemHeight = item.offsetHeight;\n\n if (center) {\n dropdown.scrollTop = itemTop - dropdownHeight / 2 + itemHeight / 2;\n } else if (itemTop + itemHeight > dropdownHeight + scrollTop) {\n dropdown.scrollTop = itemTop - dropdownHeight + itemHeight;\n } else if (itemTop < scrollTop) {\n dropdown.scrollTop = itemTop;\n }\n }\n\n focusOptionByIndex = (index: number, scrollTo = true) => {\n if (index < 0 || index > this.state.options.length - 1) {\n return;\n }\n\n const option = this.state.options[index];\n\n if (option.disabled) {\n return;\n }\n\n scrollTo && this.scrollToElement(index);\n\n this.setState(() => ({\n focusedOptionIndex: index,\n }));\n };\n\n focusOption = (type: 'next' | 'prev') => {\n const { focusedOptionIndex } = this.state;\n let index = focusedOptionIndex;\n\n if (type === 'next') {\n const nextIndex = findIndexAfter(this.state.options, index);\n index = nextIndex === -1 ? findIndexAfter(this.state.options) : nextIndex; // Следующий за index или первый валидный до index\n } else if (type === 'prev') {\n const beforeIndex = findIndexBefore(this.state.options, index);\n index = beforeIndex === -1 ? findIndexBefore(this.state.options) : beforeIndex; // Предшествующий index или последний валидный после index\n }\n\n this.focusOptionByIndex(index);\n };\n\n handleOptionHover: MouseEventHandler = (e: React.MouseEvent<HTMLElement>) => {\n this.focusOptionByIndex(Array.prototype.indexOf.call(e.currentTarget.parentNode.children, e.currentTarget), false);\n };\n\n handleOptionDown: MouseEventHandler = (e: React.MouseEvent<HTMLElement>) => {\n e.preventDefault();\n };\n\n handleOptionClick: MouseEventHandler = (e: React.MouseEvent<HTMLElement>) => {\n const index = Array.prototype.indexOf.call(e.currentTarget.parentNode.children, e.currentTarget);\n const option = this.state.options[index];\n\n if (option && !option.disabled) {\n this.selectFocused();\n }\n };\n\n resetFocusedOption = () => {\n this.setState({ focusedOptionIndex: -1 });\n };\n\n onKeyboardInput = (key: string) => {\n const fullInput = this.keyboardInput + key;\n\n const optionIndex = this.state.options.findIndex((option) => {\n return option.label.toLowerCase().includes(fullInput);\n });\n\n if (optionIndex > -1) {\n this.focusOptionByIndex(optionIndex);\n }\n\n this.keyboardInput = fullInput;\n };\n\n /**\n * Нужен для правильного поведения обработчика onClick на select. Фильтрует клики, которые были сделаны по\n * выпадающему списку.\n */\n onLabelClick = (e: React.MouseEvent<HTMLLabelElement>) => {\n if (this.scrollBoxRef.current?.contains(e.target as Node)) {\n e.preventDefault();\n }\n };\n\n onNativeSelectChange: React.ChangeEventHandler<HTMLSelectElement> = (e) => {\n const value = e.currentTarget.value;\n if (!this.isControlledOutside) {\n this.setState({\n selectedOptionIndex: this.findSelectedIndex(this.state.options, value),\n });\n }\n if (this.props.onChange) {\n this.props.onChange(e);\n }\n };\n\n onInputChange: React.ChangeEventHandler<HTMLInputElement> = (e) => {\n if (this.props.onInputChange) {\n const options = this.props.onInputChange(e, this.props.options);\n if (options) {\n if (process.env.NODE_ENV === 'development') {\n warn('This filtration method is deprecated. Return value of onInputChange will' +\n ' be ignored in v5.0.0. For custom filtration please update props.options by yourself or use filterFn property');\n }\n this.setState({\n options,\n selectedOptionIndex: this.findSelectedIndex(options, this.state.nativeSelectValue),\n inputValue: e.target.value,\n });\n } else {\n this.setState({ inputValue: e.target.value });\n }\n } else {\n const options = this.filter(this.props.options, e.target.value, this.props.filterFn);\n this.setState({\n options,\n selectedOptionIndex: this.findSelectedIndex(options, this.state.nativeSelectValue),\n inputValue: e.target.value,\n });\n }\n };\n\n onInputKeyDown: React.KeyboardEventHandler<HTMLInputElement> = (event) => {\n ['ArrowUp', 'ArrowDown', 'Escape', 'Enter'].includes(event.key) && this.areOptionsShown && event.preventDefault();\n\n switch (event.key) {\n case 'ArrowUp':\n this.areOptionsShown && this.focusOption('prev');\n break;\n case 'ArrowDown':\n this.areOptionsShown && this.focusOption('next');\n break;\n case 'Escape':\n this.close();\n break;\n case 'Enter':\n this.areOptionsShown && this.selectFocused();\n break;\n }\n };\n\n handleKeyDownSelect = (event: React.KeyboardEvent) => {\n const { opened } = this.state;\n\n if (event.key.length === 1 && event.key !== ' ') {\n this.onKeyboardInput(event.key);\n return;\n }\n\n ['ArrowUp', 'ArrowDown', 'Escape', 'Enter'].includes(event.key) && this.areOptionsShown && event.preventDefault();\n\n switch (event.key) {\n case 'ArrowUp':\n if (opened) {\n this.areOptionsShown && this.focusOption('prev');\n } else {\n this.open();\n }\n break;\n case 'ArrowDown':\n if (opened) {\n this.areOptionsShown && this.focusOption('next');\n } else {\n this.open();\n }\n break;\n case 'Escape':\n this.close();\n break;\n case 'Enter':\n case 'Spacebar':\n case ' ':\n if (opened) {\n this.areOptionsShown && this.selectFocused();\n } else {\n this.open();\n }\n break;\n }\n };\n\n handleKeyUp = debounce(this.resetKeyboardInput, 1000);\n\n componentDidUpdate(prevProps: CustomSelectProps) {\n // Внутри useEffect и так is, можно убрать\n if (!is(prevProps.value, this.props.value) || prevProps.options !== this.props.options) {\n if (process.env.NODE_ENV === 'development') {\n checkOptionsValueType(this.props.options);\n }\n\n this.isControlledOutside = this.props.value !== undefined;\n const value = this.props.value === undefined ? this.state.nativeSelectValue : this.props.value;\n const options = this.props.searchable ? this.filter(this.props.options, this.state.inputValue, this.props.filterFn) : this.props.options;\n this.setState({\n nativeSelectValue: value,\n selectedOptionIndex: this.findSelectedIndex(options, value),\n options,\n });\n }\n }\n\n renderOption = (option: CustomSelectOptionInterface, index: number) => {\n const { focusedOptionIndex, selectedOptionIndex } = this.state;\n const { renderOption } = this.props;\n const hovered = index === focusedOptionIndex;\n const selected = index === selectedOptionIndex;\n\n return (\n <React.Fragment key={`${option.value}`}>\n {renderOption({\n option,\n hovered,\n children: option.label,\n selected,\n disabled: option.disabled,\n onClick: this.handleOptionClick,\n onMouseDown: this.handleOptionDown,\n onMouseEnter: this.handleOptionHover,\n })}\n </React.Fragment>\n );\n };\n\n selectRef = (element: HTMLSelectElement) => {\n this.selectEl = element;\n setRef(element, this.props.getRef);\n };\n\n render() {\n const { opened, nativeSelectValue } = this.state;\n const {\n searchable,\n name,\n className,\n getRef,\n getRootRef,\n popupDirection,\n options,\n sizeY,\n platform,\n style,\n onChange,\n onBlur,\n onFocus,\n onClick,\n renderOption,\n children,\n emptyText,\n onInputChange,\n filterFn,\n renderDropdown,\n onOpen,\n onClose,\n fetching,\n ...restProps\n } = this.props;\n const selected = this.getSelectedItem();\n const label = selected ? selected.label : undefined;\n\n const defaultDropdownContent = (\n <CustomScrollView boxRef={this.scrollBoxRef}>\n {this.state.options.map(this.renderOption)}\n {this.state.options.length === 0 &&\n <Caption level=\"1\" weight=\"regular\" vkuiClass=\"CustomSelect__empty\">\n {this.props.emptyText}\n </Caption>\n }\n </CustomScrollView>\n );\n\n let resolvedContent;\n\n if (typeof renderDropdown === 'function') {\n resolvedContent = renderDropdown({ defaultDropdownContent });\n } else if (fetching) {\n resolvedContent = (\n <div vkuiClass=\"CustomSelect__fetching\">\n <Spinner size=\"small\" />\n </div>\n );\n } else {\n resolvedContent = defaultDropdownContent;\n }\n\n return (\n <label\n vkuiClass={getClassName('CustomSelect', platform)}\n className={className}\n style={style}\n ref={getRootRef}\n onClick={this.onLabelClick}\n >\n {opened && searchable ?\n <Input\n {...restProps}\n autoFocus\n onBlur={this.onBlur}\n vkuiClass={classNames({\n 'CustomSelect__open': opened,\n 'CustomSelect__open--popupDirectionTop': popupDirection === 'top',\n })}\n value={this.state.inputValue}\n onKeyDown={this.onInputKeyDown}\n onChange={this.onInputChange}\n // TODO Ожидается, что клик поймает нативный select, но его перехвает Input. К сожалению, это приводит конфликтам типизации.\n // TODO Нужно перестать пытаться превратить CustomSelect в select. Тогда эта проблема уйдёт.\n // @ts-ignore\n onClick={onClick}\n after={sizeY === SizeType.COMPACT ? <Icon20Dropdown /> : <Icon24Dropdown />}\n placeholder={restProps.placeholder}\n /> :\n <SelectMimicry\n {...restProps}\n aria-hidden={true}\n onClick={this.onClick}\n onKeyDown={this.handleKeyDownSelect}\n onKeyUp={this.handleKeyUp}\n onFocus={this.onFocus}\n onBlur={this.onBlur}\n vkuiClass={classNames({\n 'CustomSelect__open': opened,\n 'CustomSelect__open--popupDirectionTop': popupDirection === 'top',\n })}\n >\n {label}\n </SelectMimicry>\n }\n <select\n ref={this.selectRef}\n name={name}\n onChange={this.onNativeSelectChange}\n onBlur={onBlur}\n onFocus={onFocus}\n onClick={onClick}\n value={nativeSelectValue}\n aria-hidden={true}\n vkuiClass=\"CustomSelect__control\"\n >\n {options.map((item) => <option key={`${item.value}`} value={item.value} />)}\n </select>\n {opened &&\n <div\n vkuiClass={classNames('CustomSelect__options', `CustomSelect__options--sizeY-${sizeY}`, {\n 'CustomSelect__options--popupDirectionTop': popupDirection === 'top',\n })}\n onMouseLeave={this.resetFocusedOption}\n >\n {resolvedContent}\n </div>\n }\n </label>\n );\n }\n}\n\nexport default withPlatform(withAdaptivity(CustomSelect, {\n sizeY: true,\n}));\n"],"file":"CustomSelect.js"}
|
|
1
|
+
{"version":3,"sources":["../../../src/components/CustomSelect/CustomSelect.tsx"],"names":["React","SelectMimicry","debounce","setRef","classNames","CustomScrollView","withAdaptivity","withPlatform","CustomSelectOption","getClassName","Input","DropdownIcon","Caption","warnOnce","Spinner","defaultFilterFn","is","findIndexAfter","options","startIndex","length","findIndex","option","i","disabled","findIndexBefore","endIndex","result","warn","checkOptionsValueType","Set","map","item","value","size","CustomSelect","props","createRef","keyboardInput","state","selectedOptionIndex","inputValue","filterFn","filter","setState","opened","focusedOptionIndex","isValidIndex","scrollToElement","onOpen","resetKeyboardInput","onClose","select","index","nativeSelectValue","event","Event","bubbles","selectEl","dispatchEvent","close","open","scrollTo","type","nextIndex","beforeIndex","focusOptionByIndex","e","Array","prototype","indexOf","call","currentTarget","parentNode","children","preventDefault","selectFocused","key","fullInput","optionIndex","label","toLowerCase","includes","scrollBoxRef","current","contains","target","isControlledOutside","findSelectedIndex","onChange","onInputChange","process","env","NODE_ENV","areOptionsShown","focusOption","onKeyboardInput","renderOption","hovered","selected","onClick","handleOptionClick","onMouseDown","handleOptionDown","onMouseEnter","handleOptionHover","element","getRef","defaultValue","initialValue","undefined","Number","center","dropdown","dropdownHeight","offsetHeight","scrollTop","itemTop","offsetTop","itemHeight","prevProps","searchable","name","className","getRootRef","popupDirection","sizeY","platform","style","onBlur","onFocus","emptyText","renderDropdown","fetching","restProps","getSelectedItem","defaultDropdownContent","resolvedContent","onLabelClick","onInputKeyDown","placeholder","handleKeyDownSelect","handleKeyUp","selectRef","onNativeSelectChange","resetFocusedOption","Component"],"mappings":"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","sourcesContent":["import * as React from 'react';\nimport SelectMimicry from '../SelectMimicry/SelectMimicry';\nimport { debounce, setRef } from '../../lib/utils';\nimport { classNames } from '../../lib/classNames';\nimport { NativeSelectProps } from '../NativeSelect/NativeSelect';\nimport CustomScrollView from '../CustomScrollView/CustomScrollView';\nimport { withAdaptivity } from '../../hoc/withAdaptivity';\nimport { withPlatform } from '../../hoc/withPlatform';\nimport CustomSelectOption, { CustomSelectOptionProps } from '../CustomSelectOption/CustomSelectOption';\nimport { getClassName } from '../../helpers/getClassName';\nimport { FormFieldProps } from '../FormField/FormField';\nimport { HasPlatform } from '../../types';\nimport Input from '../Input/Input';\nimport { DropdownIcon } from '../DropdownIcon/DropdownIcon';\nimport Caption from '../Typography/Caption/Caption';\nimport { warnOnce } from '../../lib/warnOnce';\nimport Spinner from '../Spinner/Spinner';\nimport { defaultFilterFn } from '../../lib/select';\nimport { is } from '../../lib/is';\nimport './CustomSelect.css';\n\nconst findIndexAfter = (options: CustomSelectOptionInterface[], startIndex = -1) => {\n if (startIndex >= options.length - 1) {\n return -1;\n }\n return options.findIndex((option, i) => i > startIndex && !option.disabled);\n};\n\nconst findIndexBefore = (options: CustomSelectOptionInterface[], endIndex: number = options.length) => {\n let result = -1;\n if (endIndex <= 0) {\n return result;\n }\n for (let i = endIndex - 1; i >= 0; i--) {\n let option = options[i];\n\n if (!option.disabled) {\n result = i;\n break;\n }\n }\n return result;\n};\n\nconst warn = warnOnce('CustomSelect');\n\nconst checkOptionsValueType = (options: CustomSelectOptionInterface[]) => {\n if (new Set(options.map((item) => typeof item.value)).size > 1) {\n warn('Some values of your options have different types. CustomSelect onChange always returns a string type.');\n }\n};\n\ntype SelectValue = React.SelectHTMLAttributes<HTMLSelectElement>['value'];\n\nexport interface CustomSelectOptionInterface {\n value: SelectValue;\n label: string;\n disabled?: boolean;\n [index: string]: any;\n}\n\ninterface CustomSelectState {\n inputValue?: string;\n opened?: boolean;\n focusedOptionIndex?: number;\n selectedOptionIndex?: number;\n nativeSelectValue?: SelectValue;\n options?: CustomSelectOptionInterface[];\n}\n\nexport interface CustomSelectProps extends NativeSelectProps, HasPlatform, FormFieldProps {\n /**\n * Если `true`, то при клике на селект в нём появится текстовое поле для поиска по `options`. По умолчанию поиск\n * производится по `option.label`.\n */\n searchable?: boolean;\n /**\n * Текст, который будет отображен, если приходит пустой `options`\n */\n emptyText?: string;\n onInputChange?: (e: React.ChangeEvent, options: CustomSelectOptionInterface[]) => void | CustomSelectOptionInterface[];\n options: Array<{\n value: SelectValue;\n label: string;\n [index: string]: any;\n }>;\n /**\n * Функция для кастомной фильтрации. По-умолчанию поиск производится по option.label.\n */\n filterFn?: false | ((value: string, option: CustomSelectOptionInterface, getOptionLabel?: (option: Partial<CustomSelectOptionInterface>) => string) => boolean);\n popupDirection?: 'top' | 'bottom';\n /**\n * Рендер-проп для кастомного рендера опции.\n * В объекте аргумента приходят [свойства опции](#/CustomSelectOption?id=props)\n */\n renderOption?: (props: CustomSelectOptionProps) => React.ReactNode;\n /**\n * Рендер-проп для кастомного рендера содержимого дропдауна.\n * В defaultDropdownContent содержится список опций в виде скроллящегося блока.\n */\n renderDropdown?: ({ defaultDropdownContent }: { defaultDropdownContent: React.ReactNode }) => React.ReactNode;\n /**\n * Если true, то в дропдауне вместо списка опций рисуется спиннер. При переданных renderDropdown и fetching: true,\n * \"победит\" renderDropdown\n */\n fetching?: boolean;\n onClose?: VoidFunction;\n onOpen?: VoidFunction;\n}\n\ntype MouseEventHandler = (event: React.MouseEvent<HTMLElement>) => void;\n\nclass CustomSelect extends React.Component<CustomSelectProps, CustomSelectState> {\n static defaultProps: CustomSelectProps = {\n searchable: false,\n renderOption({ option, ...props }): React.ReactNode {\n return (\n <CustomSelectOption {...props} />\n );\n },\n options: [],\n emptyText: 'Ничего не найдено',\n filterFn: defaultFilterFn,\n };\n\n public constructor(props: CustomSelectProps) {\n super(props);\n\n const { value, defaultValue } = props;\n\n const initialValue = value !== undefined ? value : defaultValue;\n\n this.keyboardInput = '';\n\n if (process.env.NODE_ENV === 'development') {\n checkOptionsValueType(props.options);\n }\n\n this.state = {\n opened: false,\n focusedOptionIndex: -1,\n selectedOptionIndex: this.findSelectedIndex(props.options, initialValue),\n nativeSelectValue: initialValue,\n options: props.options,\n inputValue: '',\n };\n\n if (props.value !== undefined) {\n this.isControlledOutside = true;\n }\n }\n\n private keyboardInput: string;\n private isControlledOutside: boolean;\n private selectEl: HTMLSelectElement;\n private readonly scrollBoxRef = React.createRef<HTMLDivElement>();\n\n private readonly resetKeyboardInput = () => {\n this.keyboardInput = '';\n };\n\n private readonly getSelectedItem = () => {\n const { selectedOptionIndex, options } = this.state;\n\n if (!options.length) {\n return null;\n }\n\n return options[selectedOptionIndex];\n };\n\n get areOptionsShown() {\n return this.scrollBoxRef.current !== null;\n }\n\n filter = (options: CustomSelectProps['options'], inputValue: string, filterFn: CustomSelectProps['filterFn']) => {\n return typeof filterFn === 'function' ? options.filter((option) => filterFn(inputValue, option)) : options;\n };\n\n findSelectedIndex(options: CustomSelectOptionInterface[], value: SelectValue) {\n return options.findIndex((item) => {\n value = typeof item.value === 'number' ? Number(value) : value;\n return item.value === value;\n });\n }\n\n open = () => {\n this.setState(({ selectedOptionIndex }) => ({\n opened: true,\n focusedOptionIndex: selectedOptionIndex,\n }), () => {\n const { selectedOptionIndex } = this.state;\n\n if (this.isValidIndex(selectedOptionIndex)) {\n this.scrollToElement(selectedOptionIndex, true);\n }\n });\n typeof this.props.onOpen === 'function' && this.props.onOpen();\n };\n\n close = () => {\n this.resetKeyboardInput();\n\n this.setState(() => ({\n inputValue: '',\n opened: false,\n focusedOptionIndex: -1,\n options: this.props.options,\n }));\n typeof this.props.onClose === 'function' && this.props.onClose();\n };\n\n private isValidIndex(index: number) {\n return index >= 0 && index < this.state.options.length;\n }\n\n selectFocused = () => {\n const { focusedOptionIndex } = this.state;\n\n this.select(focusedOptionIndex);\n };\n\n select = (index: number) => {\n if (!this.isValidIndex(index)) {\n return;\n }\n\n const item = this.state.options[index];\n\n this.setState({\n nativeSelectValue: item.value,\n }, () => {\n const event = new Event('change', { bubbles: true });\n this.selectEl.dispatchEvent(event);\n });\n this.close();\n };\n\n onClick = () => {\n this.state.opened ? this.close() : this.open();\n };\n\n onFocus = () => {\n const event = new Event('focus');\n this.selectEl.dispatchEvent(event);\n };\n\n onBlur = () => {\n this.close();\n const event = new Event('blur');\n this.selectEl.dispatchEvent(event);\n };\n\n private scrollToElement(index: number, center = false) {\n const dropdown = this.scrollBoxRef.current;\n const item = dropdown ? (dropdown.children[index] as HTMLElement) : null;\n\n if (!item) {\n return;\n }\n\n const dropdownHeight = dropdown.offsetHeight;\n const scrollTop = dropdown.scrollTop;\n const itemTop = item.offsetTop;\n const itemHeight = item.offsetHeight;\n\n if (center) {\n dropdown.scrollTop = itemTop - dropdownHeight / 2 + itemHeight / 2;\n } else if (itemTop + itemHeight > dropdownHeight + scrollTop) {\n dropdown.scrollTop = itemTop - dropdownHeight + itemHeight;\n } else if (itemTop < scrollTop) {\n dropdown.scrollTop = itemTop;\n }\n }\n\n focusOptionByIndex = (index: number, scrollTo = true) => {\n if (index < 0 || index > this.state.options.length - 1) {\n return;\n }\n\n const option = this.state.options[index];\n\n if (option.disabled) {\n return;\n }\n\n scrollTo && this.scrollToElement(index);\n\n this.setState(() => ({\n focusedOptionIndex: index,\n }));\n };\n\n focusOption = (type: 'next' | 'prev') => {\n const { focusedOptionIndex } = this.state;\n let index = focusedOptionIndex;\n\n if (type === 'next') {\n const nextIndex = findIndexAfter(this.state.options, index);\n index = nextIndex === -1 ? findIndexAfter(this.state.options) : nextIndex; // Следующий за index или первый валидный до index\n } else if (type === 'prev') {\n const beforeIndex = findIndexBefore(this.state.options, index);\n index = beforeIndex === -1 ? findIndexBefore(this.state.options) : beforeIndex; // Предшествующий index или последний валидный после index\n }\n\n this.focusOptionByIndex(index);\n };\n\n handleOptionHover: MouseEventHandler = (e: React.MouseEvent<HTMLElement>) => {\n this.focusOptionByIndex(Array.prototype.indexOf.call(e.currentTarget.parentNode.children, e.currentTarget), false);\n };\n\n handleOptionDown: MouseEventHandler = (e: React.MouseEvent<HTMLElement>) => {\n e.preventDefault();\n };\n\n handleOptionClick: MouseEventHandler = (e: React.MouseEvent<HTMLElement>) => {\n const index = Array.prototype.indexOf.call(e.currentTarget.parentNode.children, e.currentTarget);\n const option = this.state.options[index];\n\n if (option && !option.disabled) {\n this.selectFocused();\n }\n };\n\n resetFocusedOption = () => {\n this.setState({ focusedOptionIndex: -1 });\n };\n\n onKeyboardInput = (key: string) => {\n const fullInput = this.keyboardInput + key;\n\n const optionIndex = this.state.options.findIndex((option) => {\n return option.label.toLowerCase().includes(fullInput);\n });\n\n if (optionIndex > -1) {\n this.focusOptionByIndex(optionIndex);\n }\n\n this.keyboardInput = fullInput;\n };\n\n /**\n * Нужен для правильного поведения обработчика onClick на select. Фильтрует клики, которые были сделаны по\n * выпадающему списку.\n */\n onLabelClick = (e: React.MouseEvent<HTMLLabelElement>) => {\n if (this.scrollBoxRef.current?.contains(e.target as Node)) {\n e.preventDefault();\n }\n };\n\n onNativeSelectChange: React.ChangeEventHandler<HTMLSelectElement> = (e) => {\n const value = e.currentTarget.value;\n if (!this.isControlledOutside) {\n this.setState({\n selectedOptionIndex: this.findSelectedIndex(this.state.options, value),\n });\n }\n if (this.props.onChange) {\n this.props.onChange(e);\n }\n };\n\n onInputChange: React.ChangeEventHandler<HTMLInputElement> = (e) => {\n if (this.props.onInputChange) {\n const options = this.props.onInputChange(e, this.props.options);\n if (options) {\n if (process.env.NODE_ENV === 'development') {\n warn('This filtration method is deprecated. Return value of onInputChange will' +\n ' be ignored in v5.0.0. For custom filtration please update props.options by yourself or use filterFn property');\n }\n this.setState({\n options,\n selectedOptionIndex: this.findSelectedIndex(options, this.state.nativeSelectValue),\n inputValue: e.target.value,\n });\n } else {\n this.setState({ inputValue: e.target.value });\n }\n } else {\n const options = this.filter(this.props.options, e.target.value, this.props.filterFn);\n this.setState({\n options,\n selectedOptionIndex: this.findSelectedIndex(options, this.state.nativeSelectValue),\n inputValue: e.target.value,\n });\n }\n };\n\n onInputKeyDown: React.KeyboardEventHandler<HTMLInputElement> = (event) => {\n ['ArrowUp', 'ArrowDown', 'Escape', 'Enter'].includes(event.key) && this.areOptionsShown && event.preventDefault();\n\n switch (event.key) {\n case 'ArrowUp':\n this.areOptionsShown && this.focusOption('prev');\n break;\n case 'ArrowDown':\n this.areOptionsShown && this.focusOption('next');\n break;\n case 'Escape':\n this.close();\n break;\n case 'Enter':\n this.areOptionsShown && this.selectFocused();\n break;\n }\n };\n\n handleKeyDownSelect = (event: React.KeyboardEvent) => {\n const { opened } = this.state;\n\n if (event.key.length === 1 && event.key !== ' ') {\n this.onKeyboardInput(event.key);\n return;\n }\n\n ['ArrowUp', 'ArrowDown', 'Escape', 'Enter'].includes(event.key) && this.areOptionsShown && event.preventDefault();\n\n switch (event.key) {\n case 'ArrowUp':\n if (opened) {\n this.areOptionsShown && this.focusOption('prev');\n } else {\n this.open();\n }\n break;\n case 'ArrowDown':\n if (opened) {\n this.areOptionsShown && this.focusOption('next');\n } else {\n this.open();\n }\n break;\n case 'Escape':\n this.close();\n break;\n case 'Enter':\n case 'Spacebar':\n case ' ':\n if (opened) {\n this.areOptionsShown && this.selectFocused();\n } else {\n this.open();\n }\n break;\n }\n };\n\n handleKeyUp = debounce(this.resetKeyboardInput, 1000);\n\n componentDidUpdate(prevProps: CustomSelectProps) {\n // Внутри useEffect и так is, можно убрать\n if (!is(prevProps.value, this.props.value) || prevProps.options !== this.props.options) {\n if (process.env.NODE_ENV === 'development') {\n checkOptionsValueType(this.props.options);\n }\n\n this.isControlledOutside = this.props.value !== undefined;\n const value = this.props.value === undefined ? this.state.nativeSelectValue : this.props.value;\n const options = this.props.searchable ? this.filter(this.props.options, this.state.inputValue, this.props.filterFn) : this.props.options;\n this.setState({\n nativeSelectValue: value,\n selectedOptionIndex: this.findSelectedIndex(options, value),\n options,\n });\n }\n }\n\n renderOption = (option: CustomSelectOptionInterface, index: number) => {\n const { focusedOptionIndex, selectedOptionIndex } = this.state;\n const { renderOption } = this.props;\n const hovered = index === focusedOptionIndex;\n const selected = index === selectedOptionIndex;\n\n return (\n <React.Fragment key={`${option.value}`}>\n {renderOption({\n option,\n hovered,\n children: option.label,\n selected,\n disabled: option.disabled,\n onClick: this.handleOptionClick,\n onMouseDown: this.handleOptionDown,\n onMouseEnter: this.handleOptionHover,\n })}\n </React.Fragment>\n );\n };\n\n selectRef = (element: HTMLSelectElement) => {\n this.selectEl = element;\n setRef(element, this.props.getRef);\n };\n\n render() {\n const { opened, nativeSelectValue } = this.state;\n const {\n searchable,\n name,\n className,\n getRef,\n getRootRef,\n popupDirection,\n options,\n sizeY,\n platform,\n style,\n onChange,\n onBlur,\n onFocus,\n onClick,\n renderOption,\n children,\n emptyText,\n onInputChange,\n filterFn,\n renderDropdown,\n onOpen,\n onClose,\n fetching,\n ...restProps\n } = this.props;\n const selected = this.getSelectedItem();\n const label = selected ? selected.label : undefined;\n\n const defaultDropdownContent = (\n <CustomScrollView boxRef={this.scrollBoxRef}>\n {this.state.options.map(this.renderOption)}\n {this.state.options.length === 0 &&\n <Caption level=\"1\" weight=\"regular\" vkuiClass=\"CustomSelect__empty\">\n {this.props.emptyText}\n </Caption>\n }\n </CustomScrollView>\n );\n\n let resolvedContent;\n\n if (typeof renderDropdown === 'function') {\n resolvedContent = renderDropdown({ defaultDropdownContent });\n } else if (fetching) {\n resolvedContent = (\n <div vkuiClass=\"CustomSelect__fetching\">\n <Spinner size=\"small\" />\n </div>\n );\n } else {\n resolvedContent = defaultDropdownContent;\n }\n\n return (\n <label\n vkuiClass={getClassName('CustomSelect', platform)}\n className={className}\n style={style}\n ref={getRootRef}\n onClick={this.onLabelClick}\n >\n {opened && searchable ?\n <Input\n {...restProps}\n autoFocus\n onBlur={this.onBlur}\n vkuiClass={classNames({\n 'CustomSelect__open': opened,\n 'CustomSelect__open--popupDirectionTop': popupDirection === 'top',\n })}\n value={this.state.inputValue}\n onKeyDown={this.onInputKeyDown}\n onChange={this.onInputChange}\n // TODO Ожидается, что клик поймает нативный select, но его перехвает Input. К сожалению, это приводит конфликтам типизации.\n // TODO Нужно перестать пытаться превратить CustomSelect в select. Тогда эта проблема уйдёт.\n // @ts-ignore\n onClick={onClick}\n after={<DropdownIcon />}\n placeholder={restProps.placeholder}\n /> :\n <SelectMimicry\n {...restProps}\n aria-hidden={true}\n onClick={this.onClick}\n onKeyDown={this.handleKeyDownSelect}\n onKeyUp={this.handleKeyUp}\n onFocus={this.onFocus}\n onBlur={this.onBlur}\n vkuiClass={classNames({\n 'CustomSelect__open': opened,\n 'CustomSelect__open--popupDirectionTop': popupDirection === 'top',\n })}\n >\n {label}\n </SelectMimicry>\n }\n <select\n ref={this.selectRef}\n name={name}\n onChange={this.onNativeSelectChange}\n onBlur={onBlur}\n onFocus={onFocus}\n onClick={onClick}\n value={nativeSelectValue}\n aria-hidden={true}\n vkuiClass=\"CustomSelect__control\"\n >\n {options.map((item) => <option key={`${item.value}`} value={item.value} />)}\n </select>\n {opened &&\n <div\n vkuiClass={classNames('CustomSelect__options', `CustomSelect__options--sizeY-${sizeY}`, {\n 'CustomSelect__options--popupDirectionTop': popupDirection === 'top',\n })}\n onMouseLeave={this.resetFocusedOption}\n >\n {resolvedContent}\n </div>\n }\n </label>\n );\n }\n}\n\nexport default withPlatform(withAdaptivity(CustomSelect, {\n sizeY: true,\n}));\n"],"file":"CustomSelect.js"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import _extends from "@babel/runtime/helpers/extends";
|
|
2
|
+
import { createScopedElement } from "../../lib/jsxRuntime";
|
|
3
|
+
import { Icon20Dropdown, Icon24ChevronDown } from '@vkontakte/icons';
|
|
4
|
+
import { SizeType } from "../AdaptivityProvider/AdaptivityContext";
|
|
5
|
+
import { getClassName } from "../../helpers/getClassName";
|
|
6
|
+
import { useAdaptivity } from "../../hooks/useAdaptivity";
|
|
7
|
+
import { usePlatform } from "../../hooks/usePlatform";
|
|
8
|
+
export var DropdownIcon = function DropdownIcon(props) {
|
|
9
|
+
var platform = usePlatform();
|
|
10
|
+
|
|
11
|
+
var _useAdaptivity = useAdaptivity(),
|
|
12
|
+
sizeY = _useAdaptivity.sizeY;
|
|
13
|
+
|
|
14
|
+
var Icon = sizeY === SizeType.COMPACT ? Icon20Dropdown : Icon24ChevronDown;
|
|
15
|
+
return createScopedElement(Icon, _extends({
|
|
16
|
+
vkuiClass: getClassName('DropdownIcon', platform)
|
|
17
|
+
}, props));
|
|
18
|
+
};
|
|
19
|
+
//# sourceMappingURL=DropdownIcon.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/components/DropdownIcon/DropdownIcon.tsx"],"names":["Icon20Dropdown","Icon24ChevronDown","SizeType","getClassName","useAdaptivity","usePlatform","DropdownIcon","props","platform","sizeY","Icon","COMPACT"],"mappings":";;AACA,SAASA,cAAT,EAAyBC,iBAAzB,QAAkD,kBAAlD;AACA,SAASC,QAAT;AACA,SAASC,YAAT;AACA,SAASC,aAAT;AACA,SAASC,WAAT;AAGA,OAAO,IAAMC,YAAyD,GAAG,SAA5DA,YAA4D,CAACC,KAAD,EAAW;AAClF,MAAMC,QAAQ,GAAGH,WAAW,EAA5B;;AACA,uBAAkBD,aAAa,EAA/B;AAAA,MAAQK,KAAR,kBAAQA,KAAR;;AAEA,MAAMC,IAAI,GAAGD,KAAK,KAAKP,QAAQ,CAACS,OAAnB,GACTX,cADS,GAETC,iBAFJ;AAIA,SACE,oBAAC,IAAD;AAAM,IAAA,SAAS,EAAEE,YAAY,CAAC,cAAD,EAAiBK,QAAjB;AAA7B,KAA6DD,KAA7D,EADF;AAGD,CAXM","sourcesContent":["import * as React from 'react';\nimport { Icon20Dropdown, Icon24ChevronDown } from '@vkontakte/icons';\nimport { SizeType } from '../AdaptivityProvider/AdaptivityContext';\nimport { getClassName } from '../../helpers/getClassName';\nimport { useAdaptivity } from '../../hooks/useAdaptivity';\nimport { usePlatform } from '../../hooks/usePlatform';\nimport './DropdownIcon.css';\n\nexport const DropdownIcon: React.FC<React.HTMLAttributes<HTMLElement>> = (props) => {\n const platform = usePlatform();\n const { sizeY } = useAdaptivity();\n\n const Icon = sizeY === SizeType.COMPACT\n ? Icon20Dropdown\n : Icon24ChevronDown;\n\n return (\n <Icon vkuiClass={getClassName('DropdownIcon', platform)} {...props} />\n );\n};\n"],"file":"DropdownIcon.js"}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
|
-
import { HasRootRef } from '../../types';
|
|
3
|
-
export interface FocusTrapProps extends React.AllHTMLAttributes<HTMLElement>, HasRootRef<HTMLElement
|
|
4
|
-
Component?: React.ElementType;
|
|
2
|
+
import { HasComponent, HasRootRef } from '../../types';
|
|
3
|
+
export interface FocusTrapProps extends React.AllHTMLAttributes<HTMLElement>, HasRootRef<HTMLElement>, HasComponent {
|
|
5
4
|
onClose?: (props?: any) => void;
|
|
6
5
|
restoreFocus?: boolean;
|
|
7
6
|
timeout?: number;
|
|
@@ -60,15 +60,13 @@ export var FocusTrap = function FocusTrap(_ref) {
|
|
|
60
60
|
}, []); // HANDLE FOCUSABLE NODES
|
|
61
61
|
|
|
62
62
|
useIsomorphicLayoutEffect(function () {
|
|
63
|
-
var _ref$current2;
|
|
64
|
-
|
|
65
63
|
if (!ref.current) {
|
|
66
64
|
return noop();
|
|
67
65
|
}
|
|
68
66
|
|
|
69
|
-
var nodes = [];
|
|
70
|
-
|
|
71
|
-
|
|
67
|
+
var nodes = [];
|
|
68
|
+
Array.prototype.forEach.call( // eslint-disable-next-line no-restricted-properties
|
|
69
|
+
ref.current.querySelectorAll(FOCUSABLE_ELEMENTS), function (focusableEl) {
|
|
72
70
|
var _window$getComputedSt = window.getComputedStyle(focusableEl),
|
|
73
71
|
display = _window$getComputedSt.display,
|
|
74
72
|
visibility = _window$getComputedSt.visibility;
|