@vkontakte/vkui 7.5.4 → 7.6.0
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/dist/components/Calendar/Calendar.js +6 -6
- package/dist/components/Calendar/Calendar.js.map +1 -1
- package/dist/components/CalendarDays/CalendarDays.js +3 -3
- package/dist/components/CalendarDays/CalendarDays.js.map +1 -1
- package/dist/components/CalendarRange/CalendarRange.d.ts.map +1 -1
- package/dist/components/CalendarRange/CalendarRange.js +16 -14
- package/dist/components/CalendarRange/CalendarRange.js.map +1 -1
- package/dist/components/CalendarRange/utils.d.ts.map +1 -1
- package/dist/components/CalendarRange/utils.js +6 -5
- package/dist/components/CalendarRange/utils.js.map +1 -1
- package/dist/components/Cell/Cell.d.ts.map +1 -1
- package/dist/components/Cell/Cell.js +6 -3
- package/dist/components/Cell/Cell.js.map +1 -1
- package/dist/components/CellButtonGroup/CellButtonGroup.d.ts +5 -3
- package/dist/components/CellButtonGroup/CellButtonGroup.d.ts.map +1 -1
- package/dist/components/Checkbox/Checkbox.d.ts +4 -0
- package/dist/components/Checkbox/Checkbox.d.ts.map +1 -1
- package/dist/components/Checkbox/Checkbox.js +4 -2
- package/dist/components/Checkbox/Checkbox.js.map +1 -1
- package/dist/components/Checkbox/CheckboxSimple/CheckboxSimple.d.ts +1 -1
- package/dist/components/Checkbox/CheckboxSimple/CheckboxSimple.d.ts.map +1 -1
- package/dist/components/Checkbox/CheckboxSimple/CheckboxSimple.js +6 -3
- package/dist/components/Checkbox/CheckboxSimple/CheckboxSimple.js.map +1 -1
- package/dist/components/ChipsInputBase/Chip/Chip.d.ts +41 -2
- package/dist/components/ChipsInputBase/Chip/Chip.d.ts.map +1 -1
- package/dist/components/ChipsInputBase/Chip/Chip.js +7 -2
- package/dist/components/ChipsInputBase/Chip/Chip.js.map +1 -1
- package/dist/components/ChipsInputBase/types.d.ts +2 -35
- package/dist/components/ChipsInputBase/types.d.ts.map +1 -1
- package/dist/components/ChipsInputBase/types.js.map +1 -1
- package/dist/components/ContentBadge/ContentBadge.d.ts +1 -1
- package/dist/components/ContentBadge/ContentBadge.d.ts.map +1 -1
- package/dist/components/ContentBadge/ContentBadge.js +15 -9
- package/dist/components/ContentBadge/ContentBadge.js.map +1 -1
- package/dist/components/ContentCard/ContentCard.d.ts +1 -1
- package/dist/components/ContentCard/ContentCard.d.ts.map +1 -1
- package/dist/components/ContentCard/ContentCard.js.map +1 -1
- package/dist/components/CustomSelect/CustomSelect.d.ts +16 -27
- package/dist/components/CustomSelect/CustomSelect.d.ts.map +1 -1
- package/dist/components/CustomSelect/CustomSelect.js +161 -428
- package/dist/components/CustomSelect/CustomSelect.js.map +1 -1
- package/dist/components/CustomSelect/CustomSelectInput/CustomSelectInput.d.ts +3 -1
- package/dist/components/CustomSelect/CustomSelectInput/CustomSelectInput.d.ts.map +1 -1
- package/dist/components/CustomSelect/CustomSelectInput/CustomSelectInput.js +25 -5
- package/dist/components/CustomSelect/CustomSelectInput/CustomSelectInput.js.map +1 -1
- package/dist/components/CustomSelect/helpers.d.ts +12 -0
- package/dist/components/CustomSelect/helpers.d.ts.map +1 -0
- package/dist/components/CustomSelect/helpers.js +63 -0
- package/dist/components/CustomSelect/helpers.js.map +1 -0
- package/dist/components/CustomSelect/hooks/useAfterItems.d.ts +11 -0
- package/dist/components/CustomSelect/hooks/useAfterItems.d.ts.map +1 -0
- package/dist/components/CustomSelect/hooks/useAfterItems.js +57 -0
- package/dist/components/CustomSelect/hooks/useAfterItems.js.map +1 -0
- package/dist/components/CustomSelect/hooks/useDropdownOpenedController.d.ts +13 -0
- package/dist/components/CustomSelect/hooks/useDropdownOpenedController.d.ts.map +1 -0
- package/dist/components/CustomSelect/hooks/useDropdownOpenedController.js +60 -0
- package/dist/components/CustomSelect/hooks/useDropdownOpenedController.js.map +1 -0
- package/dist/components/CustomSelect/hooks/useFocusedOptionController.d.ts +20 -0
- package/dist/components/CustomSelect/hooks/useFocusedOptionController.d.ts.map +1 -0
- package/dist/components/CustomSelect/hooks/useFocusedOptionController.js +52 -0
- package/dist/components/CustomSelect/hooks/useFocusedOptionController.js.map +1 -0
- package/dist/components/CustomSelect/hooks/useInputKeyboardController.d.ts +13 -0
- package/dist/components/CustomSelect/hooks/useInputKeyboardController.d.ts.map +1 -0
- package/dist/components/CustomSelect/hooks/useInputKeyboardController.js +78 -0
- package/dist/components/CustomSelect/hooks/useInputKeyboardController.js.map +1 -0
- package/dist/components/CustomSelect/hooks/useInputValueController.d.ts +15 -0
- package/dist/components/CustomSelect/hooks/useInputValueController.d.ts.map +1 -0
- package/dist/components/CustomSelect/hooks/useInputValueController.js +43 -0
- package/dist/components/CustomSelect/hooks/useInputValueController.js.map +1 -0
- package/dist/components/CustomSelect/hooks/useScrollListController.d.ts +9 -0
- package/dist/components/CustomSelect/hooks/useScrollListController.d.ts.map +1 -0
- package/dist/components/CustomSelect/hooks/useScrollListController.js +37 -0
- package/dist/components/CustomSelect/hooks/useScrollListController.js.map +1 -0
- package/dist/components/CustomSelect/hooks/useSelectedOptionController.d.ts +18 -0
- package/dist/components/CustomSelect/hooks/useSelectedOptionController.d.ts.map +1 -0
- package/dist/components/CustomSelect/hooks/useSelectedOptionController.js +81 -0
- package/dist/components/CustomSelect/hooks/useSelectedOptionController.js.map +1 -0
- package/dist/components/CustomSelect/types.d.ts +33 -0
- package/dist/components/CustomSelect/types.d.ts.map +1 -0
- package/dist/components/CustomSelect/types.js +3 -0
- package/dist/components/CustomSelect/types.js.map +1 -0
- package/dist/components/CustomSelectDropdown/CustomSelectDropdown.d.ts.map +1 -1
- package/dist/components/CustomSelectDropdown/CustomSelectDropdown.js +1 -0
- package/dist/components/CustomSelectDropdown/CustomSelectDropdown.js.map +1 -1
- package/dist/components/DateInput/DateInput.d.ts.map +1 -1
- package/dist/components/DateInput/DateInput.js +3 -2
- package/dist/components/DateInput/DateInput.js.map +1 -1
- package/dist/components/DateRangeInput/DateRangeInput.d.ts.map +1 -1
- package/dist/components/DateRangeInput/DateRangeInput.js +4 -4
- package/dist/components/DateRangeInput/DateRangeInput.js.map +1 -1
- package/dist/components/ModalCard/ModalCard.d.ts +1 -1
- package/dist/components/ModalCard/ModalCard.d.ts.map +1 -1
- package/dist/components/ModalCard/ModalCard.js +4 -2
- package/dist/components/ModalCard/ModalCard.js.map +1 -1
- package/dist/components/ModalCard/ModalCardInternal.d.ts +1 -1
- package/dist/components/ModalCard/ModalCardInternal.d.ts.map +1 -1
- package/dist/components/ModalCard/ModalCardInternal.js +5 -3
- package/dist/components/ModalCard/ModalCardInternal.js.map +1 -1
- package/dist/components/ModalCard/types.d.ts +6 -0
- package/dist/components/ModalCard/types.d.ts.map +1 -1
- package/dist/components/ModalCard/types.js.map +1 -1
- package/dist/components/ModalOutlet/ModalOutlet.d.ts +2 -1
- package/dist/components/ModalOutlet/ModalOutlet.d.ts.map +1 -1
- package/dist/components/ModalOutlet/ModalOutlet.js +4 -3
- package/dist/components/ModalOutlet/ModalOutlet.js.map +1 -1
- package/dist/components/ModalPage/ModalPage.d.ts +1 -1
- package/dist/components/ModalPage/ModalPage.d.ts.map +1 -1
- package/dist/components/ModalPage/ModalPage.js +3 -1
- package/dist/components/ModalPage/ModalPage.js.map +1 -1
- package/dist/components/ModalPage/ModalPageInternal.d.ts +1 -1
- package/dist/components/ModalPage/ModalPageInternal.d.ts.map +1 -1
- package/dist/components/ModalPage/ModalPageInternal.js +5 -3
- package/dist/components/ModalPage/ModalPageInternal.js.map +1 -1
- package/dist/components/ModalPage/types.d.ts +6 -0
- package/dist/components/ModalPage/types.d.ts.map +1 -1
- package/dist/components/ModalPage/types.js.map +1 -1
- package/dist/components/ModalRoot/ModalRoot.d.ts +1 -1
- package/dist/components/ModalRoot/ModalRoot.d.ts.map +1 -1
- package/dist/components/ModalRoot/ModalRoot.js +4 -2
- package/dist/components/ModalRoot/ModalRoot.js.map +1 -1
- package/dist/components/ModalRoot/types.d.ts +4 -0
- package/dist/components/ModalRoot/types.d.ts.map +1 -1
- package/dist/components/ModalRoot/types.js.map +1 -1
- package/dist/components/ModalRoot/useModalManager.d.ts +3 -1
- package/dist/components/ModalRoot/useModalManager.d.ts.map +1 -1
- package/dist/components/ModalRoot/useModalManager.js +2 -1
- package/dist/components/ModalRoot/useModalManager.js.map +1 -1
- package/dist/components/OnboardingTooltip/OnboardingTooltip.d.ts +2 -2
- package/dist/components/OnboardingTooltip/OnboardingTooltip.d.ts.map +1 -1
- package/dist/components/OnboardingTooltip/OnboardingTooltip.js +4 -2
- package/dist/components/OnboardingTooltip/OnboardingTooltip.js.map +1 -1
- package/dist/components/Popover/Popover.d.ts +1 -1
- package/dist/components/Popover/Popover.d.ts.map +1 -1
- package/dist/components/Popover/Popover.js.map +1 -1
- package/dist/components/Popover/usePopover.d.ts +1 -1
- package/dist/components/Popover/usePopover.d.ts.map +1 -1
- package/dist/components/Popover/usePopover.js +3 -1
- package/dist/components/Popover/usePopover.js.map +1 -1
- package/dist/components/Popper/Popper.d.ts +2 -2
- package/dist/components/Popper/Popper.d.ts.map +1 -1
- package/dist/components/Popper/Popper.js +3 -1
- package/dist/components/Popper/Popper.js.map +1 -1
- package/dist/components/Select/Select.d.ts +2 -1
- package/dist/components/Select/Select.d.ts.map +1 -1
- package/dist/components/Select/Select.js +5 -2
- package/dist/components/Select/Select.js.map +1 -1
- package/dist/components/SelectionControl/SelectionControl.d.ts +5 -1
- package/dist/components/SelectionControl/SelectionControl.d.ts.map +1 -1
- package/dist/components/SelectionControl/SelectionControl.js +22 -6
- package/dist/components/SelectionControl/SelectionControl.js.map +1 -1
- package/dist/components/SelectionControl/SelectionControlContext.d.ts +7 -0
- package/dist/components/SelectionControl/SelectionControlContext.d.ts.map +1 -0
- package/dist/components/SelectionControl/SelectionControlContext.js +7 -0
- package/dist/components/SelectionControl/SelectionControlContext.js.map +1 -0
- package/dist/components/SelectionControl/SelectionControlLabel/SelectionControlLabel.d.ts.map +1 -1
- package/dist/components/SelectionControl/SelectionControlLabel/SelectionControlLabel.js +3 -1
- package/dist/components/SelectionControl/SelectionControlLabel/SelectionControlLabel.js.map +1 -1
- package/dist/components/SimpleCell/SimpleCell.d.ts.map +1 -1
- package/dist/components/SimpleCell/SimpleCell.js +29 -8
- package/dist/components/SimpleCell/SimpleCell.js.map +1 -1
- package/dist/components/Skeleton/Skeleton.js +1 -1
- package/dist/components/Skeleton/Skeleton.js.map +1 -1
- package/dist/components/Tabs/Tabs.d.ts.map +1 -1
- package/dist/components/Tabs/Tabs.js +19 -9
- package/dist/components/Tabs/Tabs.js.map +1 -1
- package/dist/components/Tabs/TabsController.d.ts +2 -2
- package/dist/components/Tabs/TabsController.d.ts.map +1 -1
- package/dist/components/Tabs/TabsController.js.map +1 -1
- package/dist/components/Tabs/TabsControllerContext.d.ts +5 -0
- package/dist/components/Tabs/TabsControllerContext.d.ts.map +1 -0
- package/dist/components/Tabs/TabsControllerContext.js +4 -0
- package/dist/components/Tabs/TabsControllerContext.js.map +1 -0
- package/dist/components/Tabs/TabsModeContext.d.ts +0 -2
- package/dist/components/Tabs/TabsModeContext.d.ts.map +1 -1
- package/dist/components/Tabs/TabsModeContext.js +1 -2
- package/dist/components/Tabs/TabsModeContext.js.map +1 -1
- package/dist/components/TabsItem/TabsItem.d.ts.map +1 -1
- package/dist/components/TabsItem/TabsItem.js +3 -1
- package/dist/components/TabsItem/TabsItem.js.map +1 -1
- package/dist/components/Tooltip/Tooltip.d.ts +1 -1
- package/dist/components/Tooltip/Tooltip.d.ts.map +1 -1
- package/dist/components/Tooltip/Tooltip.js.map +1 -1
- package/dist/components/Tooltip/useTooltip.d.ts +1 -1
- package/dist/components/Tooltip/useTooltip.d.ts.map +1 -1
- package/dist/components/Tooltip/useTooltip.js +3 -1
- package/dist/components/Tooltip/useTooltip.js.map +1 -1
- package/dist/components/Typography/Caption/Caption.d.ts +2 -0
- package/dist/components/Typography/Caption/Caption.d.ts.map +1 -1
- package/dist/components/Typography/Caption/Caption.js +4 -1
- package/dist/components/Typography/Caption/Caption.js.map +1 -1
- package/dist/components/Typography/Footnote/Footnote.d.ts +2 -0
- package/dist/components/Typography/Footnote/Footnote.d.ts.map +1 -1
- package/dist/components/Typography/Footnote/Footnote.js +4 -1
- package/dist/components/Typography/Footnote/Footnote.js.map +1 -1
- package/dist/components/Typography/Typography.d.ts +1 -0
- package/dist/components/Typography/Typography.d.ts.map +1 -1
- package/dist/components/Typography/Typography.js +7 -1
- package/dist/components/Typography/Typography.js.map +1 -1
- package/dist/components/View/View.d.ts.map +1 -1
- package/dist/components/View/View.js +2 -1
- package/dist/components/View/View.js.map +1 -1
- package/dist/components/View/ViewInfinite.d.ts.map +1 -1
- package/dist/components/View/ViewInfinite.js +2 -1
- package/dist/components/View/ViewInfinite.js.map +1 -1
- package/dist/components.css +1 -1
- package/dist/components.css.map +1 -1
- package/dist/cssm/components/Banner/Banner.module.css +1 -6
- package/dist/cssm/components/Calendar/Calendar.js +6 -6
- package/dist/cssm/components/Calendar/Calendar.js.map +1 -1
- package/dist/cssm/components/CalendarDays/CalendarDays.js +3 -3
- package/dist/cssm/components/CalendarDays/CalendarDays.js.map +1 -1
- package/dist/cssm/components/CalendarRange/CalendarRange.js +16 -14
- package/dist/cssm/components/CalendarRange/CalendarRange.js.map +1 -1
- package/dist/cssm/components/CalendarRange/utils.js +6 -5
- package/dist/cssm/components/CalendarRange/utils.js.map +1 -1
- package/dist/cssm/components/Cell/Cell.js +3 -1
- package/dist/cssm/components/Cell/Cell.js.map +1 -1
- package/dist/cssm/components/Checkbox/Checkbox.js +2 -1
- package/dist/cssm/components/Checkbox/Checkbox.js.map +1 -1
- package/dist/cssm/components/Checkbox/CheckboxSimple/CheckboxSimple.js +4 -2
- package/dist/cssm/components/Checkbox/CheckboxSimple/CheckboxSimple.js.map +1 -1
- package/dist/cssm/components/Checkbox/CheckboxSimple/CheckboxSimple.module.css +11 -2
- package/dist/cssm/components/ChipsInputBase/Chip/Chip.js +6 -2
- package/dist/cssm/components/ChipsInputBase/Chip/Chip.js.map +1 -1
- package/dist/cssm/components/ChipsInputBase/Chip/Chip.module.css +8 -1
- package/dist/cssm/components/ChipsInputBase/types.js.map +1 -1
- package/dist/cssm/components/ContentBadge/ContentBadge.js +14 -8
- package/dist/cssm/components/ContentBadge/ContentBadge.js.map +1 -1
- package/dist/cssm/components/ContentCard/ContentCard.js.map +1 -1
- package/dist/cssm/components/CustomSelect/CustomSelect.js +154 -421
- package/dist/cssm/components/CustomSelect/CustomSelect.js.map +1 -1
- package/dist/cssm/components/CustomSelect/CustomSelectInput/CustomSelectInput.js +22 -4
- package/dist/cssm/components/CustomSelect/CustomSelectInput/CustomSelectInput.js.map +1 -1
- package/dist/cssm/components/CustomSelect/CustomSelectInput/CustomSelectInput.module.css +12 -0
- package/dist/cssm/components/CustomSelect/helpers.js +62 -0
- package/dist/cssm/components/CustomSelect/helpers.js.map +1 -0
- package/dist/cssm/components/CustomSelect/hooks/useAfterItems.js +58 -0
- package/dist/cssm/components/CustomSelect/hooks/useAfterItems.js.map +1 -0
- package/dist/cssm/components/CustomSelect/hooks/useDropdownOpenedController.js +60 -0
- package/dist/cssm/components/CustomSelect/hooks/useDropdownOpenedController.js.map +1 -0
- package/dist/cssm/components/CustomSelect/hooks/useFocusedOptionController.js +52 -0
- package/dist/cssm/components/CustomSelect/hooks/useFocusedOptionController.js.map +1 -0
- package/dist/cssm/components/CustomSelect/hooks/useInputKeyboardController.js +78 -0
- package/dist/cssm/components/CustomSelect/hooks/useInputKeyboardController.js.map +1 -0
- package/dist/cssm/components/CustomSelect/hooks/useInputValueController.js +43 -0
- package/dist/cssm/components/CustomSelect/hooks/useInputValueController.js.map +1 -0
- package/dist/cssm/components/CustomSelect/hooks/useScrollListController.js +37 -0
- package/dist/cssm/components/CustomSelect/hooks/useScrollListController.js.map +1 -0
- package/dist/cssm/components/CustomSelect/hooks/useSelectedOptionController.js +81 -0
- package/dist/cssm/components/CustomSelect/hooks/useSelectedOptionController.js.map +1 -0
- package/dist/cssm/components/CustomSelect/types.js +3 -0
- package/dist/cssm/components/CustomSelect/types.js.map +1 -0
- package/dist/cssm/components/CustomSelectDropdown/CustomSelectDropdown.js +1 -0
- package/dist/cssm/components/CustomSelectDropdown/CustomSelectDropdown.js.map +1 -1
- package/dist/cssm/components/DateInput/DateInput.js +3 -2
- package/dist/cssm/components/DateInput/DateInput.js.map +1 -1
- package/dist/cssm/components/DateRangeInput/DateRangeInput.js +4 -4
- package/dist/cssm/components/DateRangeInput/DateRangeInput.js.map +1 -1
- package/dist/cssm/components/ModalCard/ModalCard.js +2 -1
- package/dist/cssm/components/ModalCard/ModalCard.js.map +1 -1
- package/dist/cssm/components/ModalCard/ModalCardInternal.js +3 -2
- package/dist/cssm/components/ModalCard/ModalCardInternal.js.map +1 -1
- package/dist/cssm/components/ModalCard/types.js.map +1 -1
- package/dist/cssm/components/ModalOutlet/ModalOutlet.js +2 -2
- package/dist/cssm/components/ModalOutlet/ModalOutlet.js.map +1 -1
- package/dist/cssm/components/ModalOutlet/ModalOutlet.module.css +4 -0
- package/dist/cssm/components/ModalOverlay/ModalOverlay.module.css +1 -1
- package/dist/cssm/components/ModalPage/ModalPage.js +2 -1
- package/dist/cssm/components/ModalPage/ModalPage.js.map +1 -1
- package/dist/cssm/components/ModalPage/ModalPage.module.css +1 -0
- package/dist/cssm/components/ModalPage/ModalPageInternal.js +3 -2
- package/dist/cssm/components/ModalPage/ModalPageInternal.js.map +1 -1
- package/dist/cssm/components/ModalPage/types.js.map +1 -1
- package/dist/cssm/components/ModalRoot/ModalRoot.js +4 -2
- package/dist/cssm/components/ModalRoot/ModalRoot.js.map +1 -1
- package/dist/cssm/components/ModalRoot/types.js.map +1 -1
- package/dist/cssm/components/ModalRoot/useModalManager.js +2 -1
- package/dist/cssm/components/ModalRoot/useModalManager.js.map +1 -1
- package/dist/cssm/components/OnboardingTooltip/OnboardingTooltip.js +3 -2
- package/dist/cssm/components/OnboardingTooltip/OnboardingTooltip.js.map +1 -1
- package/dist/cssm/components/Popover/Popover.js.map +1 -1
- package/dist/cssm/components/Popover/usePopover.js +2 -1
- package/dist/cssm/components/Popover/usePopover.js.map +1 -1
- package/dist/cssm/components/Popper/Popper.js +2 -1
- package/dist/cssm/components/Popper/Popper.js.map +1 -1
- package/dist/cssm/components/Select/Select.js +1 -1
- package/dist/cssm/components/Select/Select.js.map +1 -1
- package/dist/cssm/components/SelectionControl/SelectionControl.js +16 -6
- package/dist/cssm/components/SelectionControl/SelectionControl.js.map +1 -1
- package/dist/cssm/components/SelectionControl/SelectionControl.module.css +6 -3
- package/dist/cssm/components/SelectionControl/SelectionControlContext.js +7 -0
- package/dist/cssm/components/SelectionControl/SelectionControlContext.js.map +1 -0
- package/dist/cssm/components/SelectionControl/SelectionControlLabel/SelectionControlLabel.js +3 -1
- package/dist/cssm/components/SelectionControl/SelectionControlLabel/SelectionControlLabel.js.map +1 -1
- package/dist/cssm/components/SelectionControl/SelectionControlLabel/SelectionControlLabel.module.css +6 -3
- package/dist/cssm/components/SimpleCell/SimpleCell.js +29 -8
- package/dist/cssm/components/SimpleCell/SimpleCell.js.map +1 -1
- package/dist/cssm/components/Skeleton/Skeleton.js +1 -1
- package/dist/cssm/components/Skeleton/Skeleton.js.map +1 -1
- package/dist/cssm/components/Slider/SliderThumb/SliderThumb.module.css +2 -1
- package/dist/cssm/components/Tabs/Tabs.js +19 -9
- package/dist/cssm/components/Tabs/Tabs.js.map +1 -1
- package/dist/cssm/components/Tabs/TabsController.js.map +1 -1
- package/dist/cssm/components/Tabs/TabsControllerContext.js +4 -0
- package/dist/cssm/components/Tabs/TabsControllerContext.js.map +1 -0
- package/dist/cssm/components/Tabs/TabsModeContext.js +1 -2
- package/dist/cssm/components/Tabs/TabsModeContext.js.map +1 -1
- package/dist/cssm/components/TabsItem/TabsItem.js +3 -1
- package/dist/cssm/components/TabsItem/TabsItem.js.map +1 -1
- package/dist/cssm/components/Tooltip/Tooltip.js.map +1 -1
- package/dist/cssm/components/Tooltip/useTooltip.js +2 -1
- package/dist/cssm/components/Tooltip/useTooltip.js.map +1 -1
- package/dist/cssm/components/Typography/Caption/Caption.js +4 -1
- package/dist/cssm/components/Typography/Caption/Caption.js.map +1 -1
- package/dist/cssm/components/Typography/Footnote/Footnote.js +4 -1
- package/dist/cssm/components/Typography/Footnote/Footnote.js.map +1 -1
- package/dist/cssm/components/Typography/Typography.js +7 -1
- package/dist/cssm/components/Typography/Typography.js.map +1 -1
- package/dist/cssm/components/View/View.js +2 -1
- package/dist/cssm/components/View/View.js.map +1 -1
- package/dist/cssm/components/View/View.module.css +1 -1
- package/dist/cssm/components/View/ViewInfinite.js +2 -1
- package/dist/cssm/components/View/ViewInfinite.js.map +1 -1
- package/dist/cssm/components/VisuallyHidden/VisuallyHidden.module.css +0 -2
- package/dist/cssm/hooks/useCalendar.js +6 -4
- package/dist/cssm/hooks/useCalendar.js.map +1 -1
- package/dist/cssm/hooks/useFloatingElement.js +3 -2
- package/dist/cssm/hooks/useFloatingElement.js.map +1 -1
- package/dist/cssm/hooks/useTodayDate.js +3 -2
- package/dist/cssm/hooks/useTodayDate.js.map +1 -1
- package/dist/cssm/index.js.map +1 -1
- package/dist/cssm/lib/accessibility.js +8 -0
- package/dist/cssm/lib/accessibility.js.map +1 -1
- package/dist/cssm/lib/calendar.js +9 -7
- package/dist/cssm/lib/calendar.js.map +1 -1
- package/dist/cssm/lib/date.js +66 -3
- package/dist/cssm/lib/date.js.map +1 -1
- package/dist/cssm/lib/floating/useFloatingMiddlewaresBootstrap/index.js +18 -8
- package/dist/cssm/lib/floating/useFloatingMiddlewaresBootstrap/index.js.map +1 -1
- package/dist/cssm/lib/floating/useFloatingWithInteractions/types.js.map +1 -1
- package/dist/cssm/lib/touch/UIPanGestureRecognizer.js +2 -2
- package/dist/cssm/lib/touch/UIPanGestureRecognizer.js.map +1 -1
- package/dist/cssm/lib/utils.js +1 -0
- package/dist/cssm/lib/utils.js.map +1 -1
- package/dist/cssm/styles/themes.css +1 -1
- package/dist/hooks/useCalendar.d.ts.map +1 -1
- package/dist/hooks/useCalendar.js +6 -4
- package/dist/hooks/useCalendar.js.map +1 -1
- package/dist/hooks/useFloatingElement.d.ts +1 -1
- package/dist/hooks/useFloatingElement.d.ts.map +1 -1
- package/dist/hooks/useFloatingElement.js +3 -2
- package/dist/hooks/useFloatingElement.js.map +1 -1
- package/dist/hooks/useTodayDate.d.ts.map +1 -1
- package/dist/hooks/useTodayDate.js +3 -2
- package/dist/hooks/useTodayDate.js.map +1 -1
- package/dist/index.d.ts +4 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/lib/accessibility.d.ts +1 -1
- package/dist/lib/accessibility.d.ts.map +1 -1
- package/dist/lib/accessibility.js +8 -0
- package/dist/lib/accessibility.js.map +1 -1
- package/dist/lib/calendar.d.ts.map +1 -1
- package/dist/lib/calendar.js +9 -7
- package/dist/lib/calendar.js.map +1 -1
- package/dist/lib/date.d.ts +31 -1
- package/dist/lib/date.d.ts.map +1 -1
- package/dist/lib/date.js +67 -3
- package/dist/lib/date.js.map +1 -1
- package/dist/lib/floating/useFloatingMiddlewaresBootstrap/index.d.ts +6 -1
- package/dist/lib/floating/useFloatingMiddlewaresBootstrap/index.d.ts.map +1 -1
- package/dist/lib/floating/useFloatingMiddlewaresBootstrap/index.js +18 -8
- package/dist/lib/floating/useFloatingMiddlewaresBootstrap/index.js.map +1 -1
- package/dist/lib/floating/useFloatingWithInteractions/types.d.ts +2 -0
- package/dist/lib/floating/useFloatingWithInteractions/types.d.ts.map +1 -1
- package/dist/lib/floating/useFloatingWithInteractions/types.js.map +1 -1
- package/dist/lib/touch/UIPanGestureRecognizer.d.ts.map +1 -1
- package/dist/lib/touch/UIPanGestureRecognizer.js +2 -2
- package/dist/lib/touch/UIPanGestureRecognizer.js.map +1 -1
- package/dist/lib/utils.d.ts +1 -0
- package/dist/lib/utils.d.ts.map +1 -1
- package/dist/lib/utils.js +1 -0
- package/dist/lib/utils.js.map +1 -1
- package/dist/vkui.css +1 -1
- package/dist/vkui.css.map +1 -1
- package/package.json +6 -7
- package/src/components/Banner/Banner.module.css +1 -6
- package/src/components/Banner/Banner.module.css.d.ts.map +1 -1
- package/src/components/Calendar/Calendar.tsx +6 -6
- package/src/components/CalendarDays/CalendarDays.tsx +3 -3
- package/src/components/CalendarRange/CalendarRange.tsx +15 -20
- package/src/components/CalendarRange/utils.ts +7 -6
- package/src/components/Cell/Cell.tsx +3 -0
- package/src/components/Checkbox/Checkbox.tsx +6 -0
- package/src/components/Checkbox/CheckboxSimple/CheckboxSimple.module.css +7 -2
- package/src/components/Checkbox/CheckboxSimple/CheckboxSimple.module.css.d.ts.map +1 -1
- package/src/components/Checkbox/CheckboxSimple/CheckboxSimple.tsx +12 -3
- package/src/components/ChipsInputBase/Chip/Chip.module.css +8 -1
- package/src/components/ChipsInputBase/Chip/Chip.module.css.d.ts.map +1 -1
- package/src/components/ChipsInputBase/Chip/Chip.tsx +55 -1
- package/src/components/ChipsInputBase/types.ts +2 -45
- package/src/components/ContentBadge/ContentBadge.tsx +18 -12
- package/src/components/ContentCard/ContentCard.tsx +1 -1
- package/src/components/CustomSelect/CustomSelect.tsx +216 -562
- package/src/components/CustomSelect/CustomSelectInput/CustomSelectInput.module.css +12 -0
- package/src/components/CustomSelect/CustomSelectInput/CustomSelectInput.module.css.d.ts.map +1 -1
- package/src/components/CustomSelect/CustomSelectInput/CustomSelectInput.tsx +25 -2
- package/src/components/CustomSelect/helpers.ts +103 -0
- package/src/components/CustomSelect/hooks/useAfterItems.tsx +89 -0
- package/src/components/CustomSelect/hooks/useDropdownOpenedController.ts +61 -0
- package/src/components/CustomSelect/hooks/useFocusedOptionController.ts +86 -0
- package/src/components/CustomSelect/hooks/useInputKeyboardController.ts +96 -0
- package/src/components/CustomSelect/hooks/useInputValueController.ts +58 -0
- package/src/components/CustomSelect/hooks/useScrollListController.ts +46 -0
- package/src/components/CustomSelect/hooks/useSelectedOptionController.ts +132 -0
- package/src/components/CustomSelect/types.ts +38 -0
- package/src/components/CustomSelectDropdown/CustomSelectDropdown.tsx +1 -0
- package/src/components/DateInput/DateInput.tsx +9 -3
- package/src/components/DateRangeInput/DateRangeInput.tsx +9 -6
- package/src/components/ModalCard/ModalCard.tsx +2 -0
- package/src/components/ModalCard/ModalCardInternal.tsx +8 -2
- package/src/components/ModalCard/types.ts +6 -0
- package/src/components/ModalOutlet/ModalOutlet.module.css +4 -0
- package/src/components/ModalOutlet/ModalOutlet.module.css.d.ts.map +1 -1
- package/src/components/ModalOutlet/ModalOutlet.tsx +8 -1
- package/src/components/ModalOverlay/ModalOverlay.module.css +1 -1
- package/src/components/ModalPage/ModalPage.module.css +1 -0
- package/src/components/ModalPage/ModalPage.module.css.d.ts.map +1 -1
- package/src/components/ModalPage/ModalPage.tsx +2 -0
- package/src/components/ModalPage/ModalPageInternal.tsx +8 -2
- package/src/components/ModalPage/types.ts +6 -0
- package/src/components/ModalRoot/ModalRoot.tsx +19 -6
- package/src/components/ModalRoot/types.ts +5 -0
- package/src/components/ModalRoot/useModalManager.tsx +4 -0
- package/src/components/OnboardingTooltip/OnboardingTooltip.tsx +3 -0
- package/src/components/Popover/Popover.tsx +1 -0
- package/src/components/Popover/usePopover.tsx +2 -0
- package/src/components/Popper/Popper.tsx +3 -0
- package/src/components/Select/Select.tsx +5 -5
- package/src/components/SelectionControl/SelectionControl.module.css +6 -3
- package/src/components/SelectionControl/SelectionControl.module.css.d.ts.map +1 -1
- package/src/components/SelectionControl/SelectionControl.tsx +30 -8
- package/src/components/SelectionControl/SelectionControlContext.ts +7 -0
- package/src/components/SelectionControl/SelectionControlLabel/SelectionControlLabel.module.css +6 -3
- package/src/components/SelectionControl/SelectionControlLabel/SelectionControlLabel.module.css.d.ts.map +1 -1
- package/src/components/SelectionControl/SelectionControlLabel/SelectionControlLabel.tsx +7 -1
- package/src/components/SimpleCell/SimpleCell.tsx +5 -0
- package/src/components/Skeleton/Skeleton.tsx +1 -1
- package/src/components/Slider/SliderThumb/SliderThumb.module.css +1 -1
- package/src/components/Tabs/Tabs.tsx +16 -12
- package/src/components/Tabs/TabsController.ts +2 -2
- package/src/components/Tabs/TabsControllerContext.ts +7 -0
- package/src/components/Tabs/TabsModeContext.ts +0 -3
- package/src/components/TabsItem/TabsItem.tsx +5 -9
- package/src/components/Tooltip/Tooltip.tsx +1 -0
- package/src/components/Tooltip/useTooltip.tsx +2 -0
- package/src/components/Typography/Caption/Caption.tsx +14 -6
- package/src/components/Typography/Footnote/Footnote.tsx +10 -6
- package/src/components/Typography/Typography.tsx +9 -2
- package/src/components/View/View.module.css +1 -1
- package/src/components/View/View.tsx +2 -1
- package/src/components/View/ViewInfinite.tsx +2 -1
- package/src/components/VisuallyHidden/VisuallyHidden.module.css +0 -2
- package/src/components/VisuallyHidden/VisuallyHidden.module.css.d.ts.map +1 -1
- package/src/hooks/useCalendar.ts +6 -4
- package/src/hooks/useFloatingElement.tsx +2 -0
- package/src/hooks/useTodayDate.ts +3 -2
- package/src/index.ts +5 -3
- package/src/lib/accessibility.ts +4 -0
- package/src/lib/calendar.ts +8 -12
- package/src/lib/date.ts +82 -3
- package/src/lib/floating/useFloatingMiddlewaresBootstrap/index.ts +23 -10
- package/src/lib/floating/useFloatingWithInteractions/types.ts +2 -0
- package/src/lib/touch/UIPanGestureRecognizer.ts +2 -2
- package/src/lib/utils.ts +3 -0
|
@@ -44,6 +44,14 @@
|
|
|
44
44
|
padding-inline-end: 0;
|
|
45
45
|
}
|
|
46
46
|
|
|
47
|
+
.inputHidden .el {
|
|
48
|
+
opacity: 0;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
.labelHidden .container {
|
|
52
|
+
opacity: 0;
|
|
53
|
+
}
|
|
54
|
+
|
|
47
55
|
.container {
|
|
48
56
|
z-index: var(--vkui_internal--z_index_form_field_element);
|
|
49
57
|
box-sizing: border-box;
|
|
@@ -55,6 +63,10 @@
|
|
|
55
63
|
pointer-events: none;
|
|
56
64
|
}
|
|
57
65
|
|
|
66
|
+
.accessible:not(.hasInputValue):focus-within .container {
|
|
67
|
+
color: var(--vkui--color_text_tertiary);
|
|
68
|
+
}
|
|
69
|
+
|
|
58
70
|
.hasBefore .container {
|
|
59
71
|
padding-inline-start: 0;
|
|
60
72
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["./CustomSelectInput.module.css"],"names":["host","el","elCursorPointer","sizeYCompact","sizeYNone","hasBefore","hasAfter","container","multiline","inputGroup","title","empty","alignRight","alignCenter"],"mappings":"AAAA;AAAA,E,aAAAA,M,WAAA;AAAA,E,aAIAC,I,WAJA;AAAA,E,aAwBAC,iB,WAxBA;AAAA,E,aA4BAC,c,WA5BA;AAAA,E,aA4BcF,I,WA5Bd;AAAA,E,aAiCEG,W,WAjCF;AAAA,E,aAiCaH,I,WAjCb;AAAA,E,aAsCAI,W,WAtCA;AAAA,E,aAsCWJ,I,WAtCX;AAAA,E,aA0CAK,U,WA1CA;AAAA,E,aA0CUL,I,WA1CV;AAAA,E,aA8CAM,
|
|
1
|
+
{"version":3,"sources":["./CustomSelectInput.module.css"],"names":["host","el","elCursorPointer","sizeYCompact","sizeYNone","hasBefore","hasAfter","inputHidden","labelHidden","container","accessible","hasInputValue","multiline","inputGroup","title","empty","alignRight","alignCenter"],"mappings":"AAAA;AAAA,E,aAAAA,M,WAAA;AAAA,E,aAIAC,I,WAJA;AAAA,E,aAwBAC,iB,WAxBA;AAAA,E,aA4BAC,c,WA5BA;AAAA,E,aA4BcF,I,WA5Bd;AAAA,E,aAiCEG,W,WAjCF;AAAA,E,aAiCaH,I,WAjCb;AAAA,E,aAsCAI,W,WAtCA;AAAA,E,aAsCWJ,I,WAtCX;AAAA,E,aA0CAK,U,WA1CA;AAAA,E,aA0CUL,I,WA1CV;AAAA,E,aA8CAM,a,WA9CA;AAAA,E,aA8CaN,I,WA9Cb;AAAA,E,aAkDAO,a,WAlDA;AAAA,E,aAkDaC,W,WAlDb;AAAA,E,aAsDAA,W,WAtDA;AAAA,E,aAiEAC,Y,WAjEA;AAAA,E,aAiEgBC,e,WAjEhB;AAAA,E,aAiE6CF,W,WAjE7C;AAAA,E,aAqEAJ,W,WArEA;AAAA,E,aAqEWI,W,WArEX;AAAA,E,aAyEAG,W,WAzEA;AAAA,E,aAyEWH,W,WAzEX;AAAA,E,aA6EAN,c,WA7EA;AAAA,E,aA6EaS,W,WA7Eb;AAAA,E,aA6EwBH,W,WA7ExB;AAAA,E,aAkFEL,W,WAlFF;AAAA,E,aAkFYQ,W,WAlFZ;AAAA,E,aAkFuBH,W,WAlFvB;AAAA,E,aAuFAI,Y,WAvFA;AAAA,E,aAgGAR,W,WAhGA;AAAA,E,aAgGWQ,Y,WAhGX;AAAA,E,aAoGAC,O,WApGA;AAAA,E,aAwGAd,M,WAxGA;AAAA,E,aAwGUY,W,WAxGV;AAAA,E,aAwGsBE,O,WAxGtB;AAAA,E,aA8GAC,O,WA9GA;AAAA,E,aA8GOD,O,WA9GP;AAAA,E,aAqHAb,I,WArHA;AAAA,E,aAyHAe,Y,WAzHA;AAAA,E,aAyHYF,O,WAzHZ;AAAA,E,aA0HAE,Y,WA1HA;AAAA,E,aA0HYf,I,WA1HZ;AAAA,E,aA8HAgB,a,WA9HA;AAAA,E,aA8HaH,O,WA9Hb;AAAA,E,aA+HAG,a,WA/HA;AAAA,E,aA+HahB,I,WA/Hb;AAAA,E,aAwI6CQ,W,WAxI7C;AAAA;AAAA","file":"CustomSelectInput.module.css.d.ts","sourceRoot":""}
|
|
@@ -31,6 +31,8 @@ export interface CustomSelectInputProps
|
|
|
31
31
|
multiline?: boolean;
|
|
32
32
|
labelTextTestId?: string;
|
|
33
33
|
fetching?: boolean;
|
|
34
|
+
searchable?: boolean;
|
|
35
|
+
accessible?: boolean;
|
|
34
36
|
}
|
|
35
37
|
|
|
36
38
|
/**
|
|
@@ -53,6 +55,8 @@ export const CustomSelectInput = ({
|
|
|
53
55
|
disabled,
|
|
54
56
|
fetching,
|
|
55
57
|
labelTextTestId,
|
|
58
|
+
searchable,
|
|
59
|
+
accessible,
|
|
56
60
|
...restProps
|
|
57
61
|
}: CustomSelectInputProps): React.ReactNode => {
|
|
58
62
|
const { sizeY = 'none' } = useAdaptivity();
|
|
@@ -63,12 +67,14 @@ export const CustomSelectInput = ({
|
|
|
63
67
|
const handleRootRef = useExternRef(getRootRef);
|
|
64
68
|
const focusWithin = useFocusWithin(handleRootRef);
|
|
65
69
|
|
|
70
|
+
const inputReadonly = restProps.readOnly || (disabled && fetching);
|
|
71
|
+
|
|
66
72
|
const input = (
|
|
67
73
|
<Text
|
|
68
74
|
type="text"
|
|
69
75
|
{...restProps}
|
|
70
76
|
disabled={disabled && !fetching}
|
|
71
|
-
readOnly={
|
|
77
|
+
readOnly={inputReadonly}
|
|
72
78
|
Component="input"
|
|
73
79
|
normalize={false}
|
|
74
80
|
className={classNames(
|
|
@@ -80,6 +86,19 @@ export const CustomSelectInput = ({
|
|
|
80
86
|
/>
|
|
81
87
|
);
|
|
82
88
|
|
|
89
|
+
const inputHidden = React.useMemo(() => {
|
|
90
|
+
if (accessible) {
|
|
91
|
+
if (!searchable) {
|
|
92
|
+
return true;
|
|
93
|
+
}
|
|
94
|
+
return !focusWithin || (inputReadonly && !fetching);
|
|
95
|
+
} else {
|
|
96
|
+
return false;
|
|
97
|
+
}
|
|
98
|
+
}, [accessible, fetching, focusWithin, inputReadonly, searchable]);
|
|
99
|
+
|
|
100
|
+
const labelHidden = showLabelOrPlaceholder ? false : !inputHidden;
|
|
101
|
+
|
|
83
102
|
const platform = usePlatform();
|
|
84
103
|
return (
|
|
85
104
|
<FormField
|
|
@@ -94,6 +113,10 @@ export const CustomSelectInput = ({
|
|
|
94
113
|
sizeY !== 'regular' && sizeYClassNames[sizeY],
|
|
95
114
|
before && styles.hasBefore,
|
|
96
115
|
after && styles.hasAfter,
|
|
116
|
+
inputHidden && styles.inputHidden,
|
|
117
|
+
labelHidden && styles.labelHidden,
|
|
118
|
+
accessible && styles.accessible,
|
|
119
|
+
restProps.value && styles.hasInputValue,
|
|
97
120
|
className,
|
|
98
121
|
)}
|
|
99
122
|
getRootRef={handleRootRef}
|
|
@@ -111,7 +134,7 @@ export const CustomSelectInput = ({
|
|
|
111
134
|
data-testid={labelTextTestId}
|
|
112
135
|
>
|
|
113
136
|
<SelectTypography selectType={selectType} className={styles.title}>
|
|
114
|
-
{
|
|
137
|
+
{title}
|
|
115
138
|
</SelectTypography>
|
|
116
139
|
</div>
|
|
117
140
|
{/* Чтобы отключить autosuggestion в iOS, тултипы которого начинают всплывать даже когда input
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
import { getTextFromChildren } from '../../lib/children';
|
|
2
|
+
import { warnOnce } from '../../lib/warnOnce';
|
|
3
|
+
import { NOT_SELECTED, type SelectValue } from '../NativeSelect/NativeSelect';
|
|
4
|
+
import { type SelectProps } from './CustomSelect';
|
|
5
|
+
import { type CustomSelectOptionInterface } from './types';
|
|
6
|
+
|
|
7
|
+
export const findIndexAfter = (options: CustomSelectOptionInterface[] = [], startIndex = -1) => {
|
|
8
|
+
if (startIndex >= options.length - 1) {
|
|
9
|
+
return -1;
|
|
10
|
+
}
|
|
11
|
+
return options.findIndex((option, i) => i > startIndex && !option.disabled);
|
|
12
|
+
};
|
|
13
|
+
|
|
14
|
+
export const findIndexBefore = (
|
|
15
|
+
options: CustomSelectOptionInterface[] = [],
|
|
16
|
+
endIndex: number = options.length,
|
|
17
|
+
) => {
|
|
18
|
+
let result = -1;
|
|
19
|
+
if (endIndex <= 0) {
|
|
20
|
+
return result;
|
|
21
|
+
}
|
|
22
|
+
for (let i = endIndex - 1; i >= 0; i--) {
|
|
23
|
+
let option = options[i];
|
|
24
|
+
|
|
25
|
+
if (!option.disabled) {
|
|
26
|
+
result = i;
|
|
27
|
+
break;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
return result;
|
|
31
|
+
};
|
|
32
|
+
const warn = warnOnce('CustomSelect');
|
|
33
|
+
|
|
34
|
+
export const checkOptionsValueType = <T extends CustomSelectOptionInterface>(options: T[]) => {
|
|
35
|
+
if (new Set(options.map((item) => typeof item.value)).size > 1) {
|
|
36
|
+
warn(
|
|
37
|
+
'Некоторые значения ваших опций имеют разные типы. onChange всегда возвращает строковый тип.',
|
|
38
|
+
'error',
|
|
39
|
+
);
|
|
40
|
+
}
|
|
41
|
+
};
|
|
42
|
+
|
|
43
|
+
export const checkMixControlledAndUncontrolledState = (
|
|
44
|
+
oldIsControlled: boolean,
|
|
45
|
+
newIsControlled: boolean,
|
|
46
|
+
) => {
|
|
47
|
+
if (!oldIsControlled && newIsControlled) {
|
|
48
|
+
warn(
|
|
49
|
+
`Похоже, что компонент был переведен из состояния Uncontrolled в Controlled. Пожалуйста, не делайте так. Если вам нужно отобразить невыбранное состояние компонента, используйте value=null вместо undefined`,
|
|
50
|
+
'error',
|
|
51
|
+
);
|
|
52
|
+
}
|
|
53
|
+
if (oldIsControlled && !newIsControlled) {
|
|
54
|
+
warn(
|
|
55
|
+
`Похоже, что компонент был переведен из состояния Controlled в Uncontrolled. Пожалуйста, не делайте так. Если вам нужно отобразить невыбранное состояние компонента, используйте value=null вместо undefined`,
|
|
56
|
+
'error',
|
|
57
|
+
);
|
|
58
|
+
}
|
|
59
|
+
};
|
|
60
|
+
|
|
61
|
+
export function findSelectedIndex<T extends CustomSelectOptionInterface>(
|
|
62
|
+
options: T[] = [],
|
|
63
|
+
value: SelectValue,
|
|
64
|
+
) {
|
|
65
|
+
if (value === NOT_SELECTED.CUSTOM) {
|
|
66
|
+
return -1;
|
|
67
|
+
}
|
|
68
|
+
return (
|
|
69
|
+
options.findIndex((item) => {
|
|
70
|
+
value = typeof item.value === 'number' ? Number(value) : value;
|
|
71
|
+
return item.value === value;
|
|
72
|
+
}) ?? -1
|
|
73
|
+
);
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
export function getOptionByValue<T extends CustomSelectOptionInterface>(
|
|
77
|
+
options: T[] = [],
|
|
78
|
+
value: SelectValue,
|
|
79
|
+
): T | null {
|
|
80
|
+
const index = findSelectedIndex(options, value);
|
|
81
|
+
if (index === -1) {
|
|
82
|
+
return null;
|
|
83
|
+
}
|
|
84
|
+
return options[index];
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
export const filter = <T extends CustomSelectOptionInterface>(
|
|
88
|
+
options: SelectProps<T>['options'],
|
|
89
|
+
inputValue: string,
|
|
90
|
+
filterFn: SelectProps<T>['filterFn'],
|
|
91
|
+
) => {
|
|
92
|
+
return typeof filterFn === 'function'
|
|
93
|
+
? options.filter((option) => filterFn(inputValue, option))
|
|
94
|
+
: options;
|
|
95
|
+
};
|
|
96
|
+
|
|
97
|
+
export function calculateInputValueFromOptions<T extends CustomSelectOptionInterface>(
|
|
98
|
+
options: T[] = [],
|
|
99
|
+
selectValue: SelectValue,
|
|
100
|
+
) {
|
|
101
|
+
const selectedOption = getOptionByValue(options, selectValue);
|
|
102
|
+
return selectedOption ? getTextFromChildren(selectedOption.label) : '';
|
|
103
|
+
}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
|
|
3
|
+
import * as React from 'react';
|
|
4
|
+
import { useStableCallback } from '../../../hooks/useStableCallback';
|
|
5
|
+
import { DropdownIcon } from '../../DropdownIcon/DropdownIcon';
|
|
6
|
+
import { type NativeSelectValue, NOT_SELECTED } from '../../NativeSelect/NativeSelect';
|
|
7
|
+
import { type SelectProps } from '../CustomSelect';
|
|
8
|
+
import { CustomSelectClearButton } from '../CustomSelectClearButton';
|
|
9
|
+
import styles from '../CustomSelect.module.css';
|
|
10
|
+
|
|
11
|
+
/* eslint-disable jsdoc/require-jsdoc */
|
|
12
|
+
interface UseAfterItemsProps
|
|
13
|
+
extends Pick<
|
|
14
|
+
SelectProps,
|
|
15
|
+
| 'value'
|
|
16
|
+
| 'allowClearButton'
|
|
17
|
+
| 'icon'
|
|
18
|
+
| 'readOnly'
|
|
19
|
+
| 'disabled'
|
|
20
|
+
| 'ClearButton'
|
|
21
|
+
| 'clearButtonTestId'
|
|
22
|
+
> {
|
|
23
|
+
isControlledOutside: boolean;
|
|
24
|
+
nativeSelectValue: NativeSelectValue;
|
|
25
|
+
opened: boolean;
|
|
26
|
+
onClearButtonClick: () => void;
|
|
27
|
+
}
|
|
28
|
+
/* eslint-enable jsdoc/require-jsdoc */
|
|
29
|
+
|
|
30
|
+
export function useAfterItems({
|
|
31
|
+
value,
|
|
32
|
+
nativeSelectValue,
|
|
33
|
+
isControlledOutside,
|
|
34
|
+
opened,
|
|
35
|
+
allowClearButton,
|
|
36
|
+
ClearButton = CustomSelectClearButton,
|
|
37
|
+
onClearButtonClick,
|
|
38
|
+
clearButtonTestId,
|
|
39
|
+
disabled,
|
|
40
|
+
readOnly,
|
|
41
|
+
icon: iconProp,
|
|
42
|
+
}: UseAfterItemsProps) {
|
|
43
|
+
const onClearButtonClickCb = useStableCallback(onClearButtonClick);
|
|
44
|
+
|
|
45
|
+
const controlledValueSet = isControlledOutside && value !== NOT_SELECTED.CUSTOM;
|
|
46
|
+
const uncontrolledValueSet = !isControlledOutside && nativeSelectValue !== NOT_SELECTED.NATIVE;
|
|
47
|
+
const clearButtonShown =
|
|
48
|
+
allowClearButton && !opened && (controlledValueSet || uncontrolledValueSet);
|
|
49
|
+
|
|
50
|
+
const clearButton = React.useMemo(() => {
|
|
51
|
+
if (!clearButtonShown) {
|
|
52
|
+
return null;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
return (
|
|
56
|
+
<ClearButton
|
|
57
|
+
className={iconProp === undefined ? styles.clearIcon : undefined}
|
|
58
|
+
onClick={onClearButtonClickCb}
|
|
59
|
+
disabled={disabled}
|
|
60
|
+
data-testid={clearButtonTestId}
|
|
61
|
+
/>
|
|
62
|
+
);
|
|
63
|
+
}, [clearButtonShown, ClearButton, iconProp, onClearButtonClickCb, disabled, clearButtonTestId]);
|
|
64
|
+
|
|
65
|
+
const icon = React.useMemo(() => {
|
|
66
|
+
if (iconProp !== undefined) {
|
|
67
|
+
return iconProp;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
return (
|
|
71
|
+
<DropdownIcon
|
|
72
|
+
className={clearButtonShown ? styles.dropdownIcon : undefined}
|
|
73
|
+
opened={opened}
|
|
74
|
+
/>
|
|
75
|
+
);
|
|
76
|
+
}, [clearButtonShown, iconProp, opened]);
|
|
77
|
+
|
|
78
|
+
return React.useMemo(
|
|
79
|
+
() =>
|
|
80
|
+
!readOnly &&
|
|
81
|
+
(icon || clearButtonShown) && (
|
|
82
|
+
<React.Fragment>
|
|
83
|
+
{clearButton}
|
|
84
|
+
{icon}
|
|
85
|
+
</React.Fragment>
|
|
86
|
+
),
|
|
87
|
+
[clearButton, clearButtonShown, icon, readOnly],
|
|
88
|
+
);
|
|
89
|
+
}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
import { noop } from '@vkontakte/vkjs';
|
|
3
|
+
import { useStableCallback } from '../../../hooks/useStableCallback';
|
|
4
|
+
import { type SelectProps } from '../CustomSelect';
|
|
5
|
+
/* eslint-disable jsdoc/require-jsdoc */
|
|
6
|
+
type UseDropdownOpenedControllerProps = Pick<SelectProps, 'onOpen' | 'onClose'> & {
|
|
7
|
+
onOpened?: () => void;
|
|
8
|
+
onClosed?: () => void;
|
|
9
|
+
};
|
|
10
|
+
/* eslint-enable jsdoc/require-jsdoc */
|
|
11
|
+
export function useDropdownOpenedController({
|
|
12
|
+
onClose,
|
|
13
|
+
onOpen,
|
|
14
|
+
onOpened,
|
|
15
|
+
onClosed,
|
|
16
|
+
}: UseDropdownOpenedControllerProps) {
|
|
17
|
+
const [opened, setOpened] = React.useState(false);
|
|
18
|
+
const onCloseCb = useStableCallback(onClose || noop);
|
|
19
|
+
const onOpenCb = useStableCallback(onOpen || noop);
|
|
20
|
+
const onOpenedCb = useStableCallback(onOpened || noop);
|
|
21
|
+
const onClosedCb = useStableCallback(onClosed || noop);
|
|
22
|
+
|
|
23
|
+
const close = React.useCallback(() => {
|
|
24
|
+
if (!opened) {
|
|
25
|
+
return;
|
|
26
|
+
}
|
|
27
|
+
setOpened(false);
|
|
28
|
+
onCloseCb?.();
|
|
29
|
+
}, [onCloseCb, opened]);
|
|
30
|
+
|
|
31
|
+
const open = React.useCallback(() => {
|
|
32
|
+
if (opened) {
|
|
33
|
+
return;
|
|
34
|
+
}
|
|
35
|
+
setOpened(true);
|
|
36
|
+
onOpenCb?.();
|
|
37
|
+
}, [onOpenCb, opened]);
|
|
38
|
+
|
|
39
|
+
const toggleOpened = React.useCallback(() => {
|
|
40
|
+
if (opened) {
|
|
41
|
+
close();
|
|
42
|
+
} else {
|
|
43
|
+
open();
|
|
44
|
+
}
|
|
45
|
+
}, [close, open, opened]);
|
|
46
|
+
|
|
47
|
+
React.useEffect(() => {
|
|
48
|
+
if (opened) {
|
|
49
|
+
onOpenedCb();
|
|
50
|
+
} else {
|
|
51
|
+
onClosedCb();
|
|
52
|
+
}
|
|
53
|
+
}, [onClosedCb, onOpenedCb, opened]);
|
|
54
|
+
|
|
55
|
+
return {
|
|
56
|
+
opened,
|
|
57
|
+
open,
|
|
58
|
+
close,
|
|
59
|
+
toggleOpened,
|
|
60
|
+
};
|
|
61
|
+
}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import { type Dispatch, type SetStateAction } from 'react';
|
|
2
|
+
import * as React from 'react';
|
|
3
|
+
import { type SelectValue } from '../../NativeSelect/NativeSelect';
|
|
4
|
+
import { type SelectProps } from '../CustomSelect';
|
|
5
|
+
import { findIndexAfter, findIndexBefore, findSelectedIndex } from '../helpers';
|
|
6
|
+
import { type CustomSelectOptionInterface } from '../types';
|
|
7
|
+
|
|
8
|
+
/* eslint-disable jsdoc/require-jsdoc */
|
|
9
|
+
interface UseFocusedOptionControllerProps<OptionInterfaceT extends CustomSelectOptionInterface> {
|
|
10
|
+
filteredOptions: SelectProps<OptionInterfaceT>['options'];
|
|
11
|
+
scrollToElement: (index: number, center?: boolean) => void;
|
|
12
|
+
selectedOptionValue: SelectValue;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
export interface UseFocusedOptionControllerReturn {
|
|
16
|
+
focusedOptionValue: SelectValue;
|
|
17
|
+
setFocusedOptionValue: Dispatch<SetStateAction<SelectValue>>;
|
|
18
|
+
focusOptionByIndex: (index: number | undefined, scrollTo: boolean) => void;
|
|
19
|
+
resetFocusedOption: () => void;
|
|
20
|
+
focusOption: (type: 'next' | 'prev') => void;
|
|
21
|
+
selectFocusedValue: () => void;
|
|
22
|
+
}
|
|
23
|
+
/* eslint-enable jsdoc/require-jsdoc */
|
|
24
|
+
|
|
25
|
+
export function useFocusedOptionController<OptionInterfaceT extends CustomSelectOptionInterface>({
|
|
26
|
+
selectedOptionValue,
|
|
27
|
+
filteredOptions,
|
|
28
|
+
scrollToElement,
|
|
29
|
+
}: UseFocusedOptionControllerProps<OptionInterfaceT>): UseFocusedOptionControllerReturn {
|
|
30
|
+
const [focusedOptionValue, setFocusedOptionValue] = React.useState<SelectValue>(null);
|
|
31
|
+
|
|
32
|
+
const focusOptionByIndex = React.useCallback(
|
|
33
|
+
(index: number | undefined, scrollTo = true) => {
|
|
34
|
+
if (index === undefined || index < 0 || index > filteredOptions.length - 1) {
|
|
35
|
+
return;
|
|
36
|
+
}
|
|
37
|
+
const option = filteredOptions[index];
|
|
38
|
+
|
|
39
|
+
if (!option || option.disabled) {
|
|
40
|
+
return;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
if (scrollTo) {
|
|
44
|
+
scrollToElement(index);
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
setFocusedOptionValue(option.value);
|
|
48
|
+
},
|
|
49
|
+
[filteredOptions, scrollToElement],
|
|
50
|
+
);
|
|
51
|
+
|
|
52
|
+
const resetFocusedOption = React.useCallback(() => {
|
|
53
|
+
setFocusedOptionValue(null);
|
|
54
|
+
}, []);
|
|
55
|
+
|
|
56
|
+
const focusOption = React.useCallback(
|
|
57
|
+
(type: 'next' | 'prev') => {
|
|
58
|
+
let index = findSelectedIndex(filteredOptions, focusedOptionValue);
|
|
59
|
+
|
|
60
|
+
if (type === 'next') {
|
|
61
|
+
const nextIndex = findIndexAfter(filteredOptions, index);
|
|
62
|
+
index = nextIndex === -1 ? findIndexAfter(filteredOptions) : nextIndex; // Следующий за index или первый валидный до index
|
|
63
|
+
} else if (type === 'prev') {
|
|
64
|
+
const beforeIndex = findIndexBefore(filteredOptions, index);
|
|
65
|
+
index = beforeIndex === -1 ? findIndexBefore(filteredOptions) : beforeIndex; // Предшествующий index или последний валидный после index
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
focusOptionByIndex(index);
|
|
69
|
+
},
|
|
70
|
+
[filteredOptions, focusedOptionValue, focusOptionByIndex],
|
|
71
|
+
);
|
|
72
|
+
|
|
73
|
+
const selectFocusedValue = React.useCallback(
|
|
74
|
+
() => setFocusedOptionValue(selectedOptionValue),
|
|
75
|
+
[selectedOptionValue],
|
|
76
|
+
);
|
|
77
|
+
|
|
78
|
+
return {
|
|
79
|
+
focusedOptionValue,
|
|
80
|
+
setFocusedOptionValue,
|
|
81
|
+
focusOptionByIndex,
|
|
82
|
+
resetFocusedOption,
|
|
83
|
+
focusOption,
|
|
84
|
+
selectFocusedValue,
|
|
85
|
+
};
|
|
86
|
+
}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
import { Keys, pressedKey } from '../../../lib/accessibility';
|
|
3
|
+
import { callMultiple } from '../../../lib/callMultiple';
|
|
4
|
+
import { type SelectProps } from '../CustomSelect';
|
|
5
|
+
import { type UseFocusedOptionControllerReturn } from './useFocusedOptionController';
|
|
6
|
+
|
|
7
|
+
const KEYS_TO_PREVENT_DEFAULT: string[] = [Keys.ARROW_UP, Keys.ARROW_DOWN, Keys.ESCAPE, Keys.ENTER];
|
|
8
|
+
|
|
9
|
+
/* eslint-disable jsdoc/require-jsdoc */
|
|
10
|
+
interface UseInputKeyboardController
|
|
11
|
+
extends Pick<UseFocusedOptionControllerReturn, 'resetFocusedOption' | 'focusOption'>,
|
|
12
|
+
Pick<SelectProps, 'onInputKeyDown'> {
|
|
13
|
+
opened: boolean;
|
|
14
|
+
scrollBoxRef: React.RefObject<HTMLDivElement | null>;
|
|
15
|
+
selectFocused: () => void;
|
|
16
|
+
open: () => void;
|
|
17
|
+
close: () => void;
|
|
18
|
+
}
|
|
19
|
+
/* eslint-enable jsdoc/require-jsdoc */
|
|
20
|
+
|
|
21
|
+
export function useInputKeyboardController({
|
|
22
|
+
opened,
|
|
23
|
+
resetFocusedOption,
|
|
24
|
+
focusOption,
|
|
25
|
+
scrollBoxRef,
|
|
26
|
+
selectFocused,
|
|
27
|
+
onInputKeyDown,
|
|
28
|
+
open,
|
|
29
|
+
close,
|
|
30
|
+
}: UseInputKeyboardController) {
|
|
31
|
+
const handleKeyDownSelect = React.useCallback(
|
|
32
|
+
(event: React.KeyboardEvent) => {
|
|
33
|
+
const key = pressedKey(event);
|
|
34
|
+
if (event.key.length === 1 && key !== Keys.SPACE) {
|
|
35
|
+
open();
|
|
36
|
+
resetFocusedOption();
|
|
37
|
+
return;
|
|
38
|
+
}
|
|
39
|
+
if (!key) {
|
|
40
|
+
return;
|
|
41
|
+
}
|
|
42
|
+
const areOptionsShown = () => scrollBoxRef.current !== null;
|
|
43
|
+
|
|
44
|
+
if (KEYS_TO_PREVENT_DEFAULT.includes(key)) {
|
|
45
|
+
event.preventDefault();
|
|
46
|
+
}
|
|
47
|
+
switch (key) {
|
|
48
|
+
case Keys.ARROW_UP:
|
|
49
|
+
if (opened) {
|
|
50
|
+
areOptionsShown() && focusOption('prev');
|
|
51
|
+
} else {
|
|
52
|
+
open();
|
|
53
|
+
}
|
|
54
|
+
break;
|
|
55
|
+
case Keys.ARROW_DOWN:
|
|
56
|
+
if (opened) {
|
|
57
|
+
areOptionsShown() && focusOption('next');
|
|
58
|
+
} else {
|
|
59
|
+
open();
|
|
60
|
+
}
|
|
61
|
+
break;
|
|
62
|
+
case Keys.ESCAPE:
|
|
63
|
+
close();
|
|
64
|
+
break;
|
|
65
|
+
case Keys.BACKSPACE:
|
|
66
|
+
case Keys.DELETE: {
|
|
67
|
+
open();
|
|
68
|
+
resetFocusedOption();
|
|
69
|
+
break;
|
|
70
|
+
}
|
|
71
|
+
case Keys.ENTER:
|
|
72
|
+
case Keys.SPACE:
|
|
73
|
+
if (opened) {
|
|
74
|
+
areOptionsShown() && selectFocused();
|
|
75
|
+
} else {
|
|
76
|
+
open();
|
|
77
|
+
}
|
|
78
|
+
break;
|
|
79
|
+
}
|
|
80
|
+
},
|
|
81
|
+
[scrollBoxRef, opened, close, focusOption, open, resetFocusedOption, selectFocused],
|
|
82
|
+
);
|
|
83
|
+
|
|
84
|
+
const handleInputKeydown = React.useCallback(
|
|
85
|
+
(event: React.KeyboardEvent) => {
|
|
86
|
+
onInputKeyDown?.(event, opened);
|
|
87
|
+
},
|
|
88
|
+
[opened, onInputKeyDown],
|
|
89
|
+
);
|
|
90
|
+
const _onInputKeyDown: (e: React.KeyboardEvent<HTMLInputElement>) => void = callMultiple(
|
|
91
|
+
handleKeyDownSelect,
|
|
92
|
+
handleInputKeydown,
|
|
93
|
+
);
|
|
94
|
+
|
|
95
|
+
return _onInputKeyDown;
|
|
96
|
+
}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
import { useIsomorphicLayoutEffect } from '../../../lib/useIsomorphicLayoutEffect';
|
|
3
|
+
import { type SelectValue } from '../../NativeSelect/NativeSelect';
|
|
4
|
+
import { type SelectProps } from '../CustomSelect';
|
|
5
|
+
import { calculateInputValueFromOptions } from '../helpers';
|
|
6
|
+
import { type CustomSelectOptionInterface } from '../types';
|
|
7
|
+
|
|
8
|
+
/* eslint-disable jsdoc/require-jsdoc */
|
|
9
|
+
type UseInputValueControllerProps<OptionInterfaceT extends CustomSelectOptionInterface> = Pick<
|
|
10
|
+
SelectProps<OptionInterfaceT>,
|
|
11
|
+
'options' | 'onInputChange' | 'accessible'
|
|
12
|
+
> & {
|
|
13
|
+
selectedValue: SelectValue;
|
|
14
|
+
};
|
|
15
|
+
/* eslint-enable jsdoc/require-jsdoc */
|
|
16
|
+
|
|
17
|
+
export function useInputValueController<OptionInterfaceT extends CustomSelectOptionInterface>({
|
|
18
|
+
options,
|
|
19
|
+
accessible,
|
|
20
|
+
selectedValue,
|
|
21
|
+
onInputChange: onInputChangeProp,
|
|
22
|
+
}: UseInputValueControllerProps<OptionInterfaceT>) {
|
|
23
|
+
const [inputValue, setInputValue] = React.useState('');
|
|
24
|
+
const optionsRef = React.useRef(options);
|
|
25
|
+
|
|
26
|
+
useIsomorphicLayoutEffect(() => {
|
|
27
|
+
optionsRef.current = options;
|
|
28
|
+
}, [options]);
|
|
29
|
+
|
|
30
|
+
const resetInputValueBySelectedOption = React.useCallback(() => {
|
|
31
|
+
setInputValue(calculateInputValueFromOptions(optionsRef.current, selectedValue));
|
|
32
|
+
}, [selectedValue]);
|
|
33
|
+
|
|
34
|
+
useIsomorphicLayoutEffect(() => {
|
|
35
|
+
if (accessible) {
|
|
36
|
+
resetInputValueBySelectedOption();
|
|
37
|
+
}
|
|
38
|
+
}, [accessible, resetInputValueBySelectedOption]);
|
|
39
|
+
|
|
40
|
+
const resetInputValue = React.useCallback(() => {
|
|
41
|
+
setInputValue('');
|
|
42
|
+
}, []);
|
|
43
|
+
|
|
44
|
+
const onInputChange: React.ChangeEventHandler<HTMLInputElement> = React.useCallback(
|
|
45
|
+
(e) => {
|
|
46
|
+
onInputChangeProp && onInputChangeProp(e);
|
|
47
|
+
setInputValue(e.target.value);
|
|
48
|
+
},
|
|
49
|
+
[onInputChangeProp, setInputValue],
|
|
50
|
+
);
|
|
51
|
+
|
|
52
|
+
return {
|
|
53
|
+
inputValue,
|
|
54
|
+
resetInputValue,
|
|
55
|
+
resetInputValueBySelectedOption,
|
|
56
|
+
onInputChange,
|
|
57
|
+
};
|
|
58
|
+
}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
|
|
3
|
+
/* eslint-disable jsdoc/require-jsdoc */
|
|
4
|
+
interface UseScrollListControllerReturn {
|
|
5
|
+
scrollBoxRef: React.RefObject<HTMLDivElement | null>;
|
|
6
|
+
optionsWrapperRef: React.RefObject<HTMLDivElement | null>;
|
|
7
|
+
scrollToElement: (index: number, center?: boolean) => void;
|
|
8
|
+
}
|
|
9
|
+
/* eslint-enable jsdoc/require-jsdoc */
|
|
10
|
+
|
|
11
|
+
export function useScrollListController(): UseScrollListControllerReturn {
|
|
12
|
+
const scrollBoxRef = React.useRef<HTMLDivElement | null>(null);
|
|
13
|
+
const optionsWrapperRef = React.useRef<HTMLDivElement>(null);
|
|
14
|
+
|
|
15
|
+
const scrollToElement = React.useCallback(
|
|
16
|
+
(index: number, center = false) => {
|
|
17
|
+
const dropdown = scrollBoxRef.current;
|
|
18
|
+
const optionsWrapper = optionsWrapperRef.current;
|
|
19
|
+
|
|
20
|
+
if (!dropdown || !optionsWrapper || index < 0 || index > optionsWrapper.children.length) {
|
|
21
|
+
return;
|
|
22
|
+
}
|
|
23
|
+
const item = optionsWrapper.children[index] as HTMLElement | null;
|
|
24
|
+
/* istanbul ignore if: проверка для TS (ситуация, когда среди children нет элемента с index, маловероятна) */
|
|
25
|
+
if (!item) {
|
|
26
|
+
return;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
const dropdownHeight = dropdown.offsetHeight;
|
|
30
|
+
const scrollTop = dropdown.scrollTop;
|
|
31
|
+
const itemTop = item.offsetTop;
|
|
32
|
+
const itemHeight = item.offsetHeight;
|
|
33
|
+
|
|
34
|
+
if (center) {
|
|
35
|
+
dropdown.scrollTop = itemTop - dropdownHeight / 2 + itemHeight / 2;
|
|
36
|
+
} else if (itemTop + itemHeight > dropdownHeight + scrollTop) {
|
|
37
|
+
dropdown.scrollTop = itemTop - dropdownHeight + itemHeight;
|
|
38
|
+
} else if (itemTop < scrollTop) {
|
|
39
|
+
dropdown.scrollTop = itemTop;
|
|
40
|
+
}
|
|
41
|
+
},
|
|
42
|
+
[optionsWrapperRef, scrollBoxRef],
|
|
43
|
+
);
|
|
44
|
+
|
|
45
|
+
return { scrollToElement, scrollBoxRef, optionsWrapperRef };
|
|
46
|
+
}
|