@vkontakte/vkui 7.5.4 → 7.6.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/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/ImageBase/ImageBaseBadge/ImageBaseBadge.d.ts +1 -1
- package/dist/components/ImageBase/ImageBaseBadge/ImageBaseBadge.js.map +1 -1
- package/dist/components/MiniInfoCell/MiniInfoCell.d.ts +3 -2
- package/dist/components/MiniInfoCell/MiniInfoCell.d.ts.map +1 -1
- package/dist/components/MiniInfoCell/MiniInfoCell.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 +8 -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 +8 -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 +6 -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/ImageBase/ImageBaseBadge/ImageBaseBadge.js.map +1 -1
- package/dist/cssm/components/MiniInfoCell/MiniInfoCell.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/RichCell/RichCell.module.css +4 -2
- 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/dynamicTokens.css +14 -2
- 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/ImageBase/ImageBaseBadge/ImageBaseBadge.tsx +1 -1
- package/src/components/MiniInfoCell/MiniInfoCell.tsx +8 -3
- package/src/components/ModalCard/ModalCard.tsx +2 -0
- package/src/components/ModalCard/ModalCardInternal.tsx +8 -2
- package/src/components/ModalCard/types.ts +8 -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 +8 -0
- package/src/components/ModalRoot/ModalRoot.tsx +19 -6
- package/src/components/ModalRoot/types.ts +7 -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/RichCell/RichCell.module.css +4 -2
- package/src/components/RichCell/RichCell.module.css.d.ts.map +1 -1
- 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
- package/src/styles/dynamicTokens.css +13 -2
|
@@ -4,92 +4,69 @@ import { _ as _object_spread_props } from "@swc/helpers/_/_object_spread_props";
|
|
|
4
4
|
import { _ as _object_without_properties } from "@swc/helpers/_/_object_without_properties";
|
|
5
5
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
6
6
|
import * as React from "react";
|
|
7
|
-
import { classNames
|
|
7
|
+
import { classNames } from "@vkontakte/vkjs";
|
|
8
|
+
import { getRequiredValueByKey } from "../../helpers/getValueByKey.js";
|
|
8
9
|
import { useAdaptivity } from "../../hooks/useAdaptivity.js";
|
|
9
10
|
import { useExternRef } from "../../hooks/useExternRef.js";
|
|
10
|
-
import { useFocusWithin } from "../../hooks/useFocusWithin.js";
|
|
11
|
-
import { useStateWithPrev } from "../../hooks/useStateWithPrev.js";
|
|
12
11
|
import { callMultiple } from "../../lib/callMultiple.js";
|
|
13
12
|
import { useDOM } from "../../lib/dom.js";
|
|
14
13
|
import { defaultFilterFn } from "../../lib/select.js";
|
|
15
14
|
import { useIsomorphicLayoutEffect } from "../../lib/useIsomorphicLayoutEffect.js";
|
|
16
|
-
import {
|
|
15
|
+
import { preventDefault } from "../../lib/utils.js";
|
|
17
16
|
import { CustomSelectDropdown } from "../CustomSelectDropdown/CustomSelectDropdown.js";
|
|
18
17
|
import { CustomSelectOption } from "../CustomSelectOption/CustomSelectOption.js";
|
|
19
|
-
import {
|
|
20
|
-
import { NOT_SELECTED, remapFromNativeValueToSelectValue, remapFromSelectValueToNativeValue } from "../NativeSelect/NativeSelect.js";
|
|
18
|
+
import { NOT_SELECTED, remapFromNativeValueToSelectValue } from "../NativeSelect/NativeSelect.js";
|
|
21
19
|
import { Footnote } from "../Typography/Footnote/Footnote.js";
|
|
22
20
|
import { VisuallyHidden } from "../VisuallyHidden/VisuallyHidden.js";
|
|
23
|
-
import { CustomSelectClearButton } from "./CustomSelectClearButton.js";
|
|
24
21
|
import { CustomSelectInput } from "./CustomSelectInput/CustomSelectInput.js";
|
|
22
|
+
import { checkMixControlledAndUncontrolledState, checkOptionsValueType, filter, findSelectedIndex, getOptionByValue } from "./helpers.js";
|
|
23
|
+
import { useAfterItems } from "./hooks/useAfterItems.js";
|
|
24
|
+
import { useDropdownOpenedController } from "./hooks/useDropdownOpenedController.js";
|
|
25
|
+
import { useFocusedOptionController } from "./hooks/useFocusedOptionController.js";
|
|
26
|
+
import { useInputKeyboardController } from "./hooks/useInputKeyboardController.js";
|
|
27
|
+
import { useInputValueController } from "./hooks/useInputValueController.js";
|
|
28
|
+
import { useScrollListController } from "./hooks/useScrollListController.js";
|
|
29
|
+
import { useSelectedOptionController } from "./hooks/useSelectedOptionController.js";
|
|
25
30
|
const sizeYClassNames = {
|
|
26
31
|
none: "vkuiCustomSelect__sizeYNone",
|
|
27
32
|
compact: "vkuiCustomSelect__sizeYCompact"
|
|
28
33
|
};
|
|
29
|
-
const findIndexAfter = (options = [], startIndex = -1)=>{
|
|
30
|
-
if (startIndex >= options.length - 1) {
|
|
31
|
-
return -1;
|
|
32
|
-
}
|
|
33
|
-
return options.findIndex((option, i)=>i > startIndex && !option.disabled);
|
|
34
|
-
};
|
|
35
|
-
const findIndexBefore = (options = [], endIndex = options.length)=>{
|
|
36
|
-
let result = -1;
|
|
37
|
-
if (endIndex <= 0) {
|
|
38
|
-
return result;
|
|
39
|
-
}
|
|
40
|
-
for(let i = endIndex - 1; i >= 0; i--){
|
|
41
|
-
let option = options[i];
|
|
42
|
-
if (!option.disabled) {
|
|
43
|
-
result = i;
|
|
44
|
-
break;
|
|
45
|
-
}
|
|
46
|
-
}
|
|
47
|
-
return result;
|
|
48
|
-
};
|
|
49
|
-
const warn = warnOnce('CustomSelect');
|
|
50
|
-
const checkOptionsValueType = (options)=>{
|
|
51
|
-
if (new Set(options.map((item)=>typeof item.value)).size > 1) {
|
|
52
|
-
warn('Некоторые значения ваших опций имеют разные типы. onChange всегда возвращает строковый тип.', 'error');
|
|
53
|
-
}
|
|
54
|
-
};
|
|
55
|
-
const checkMixControlledAndUncontrolledState = (oldIsControlled, newIsControlled)=>{
|
|
56
|
-
if (!oldIsControlled && newIsControlled) {
|
|
57
|
-
warn(`Похоже, что компонент был переведен из состояния Uncontrolled в Controlled. Пожалуйста, не делайте так. Если вам нужно отобразить невыбранное состояние компонента, используйте value=null вместо undefined`, 'error');
|
|
58
|
-
}
|
|
59
|
-
if (oldIsControlled && !newIsControlled) {
|
|
60
|
-
warn(`Похоже, что компонент был переведен из состояния Controlled в Uncontrolled. Пожалуйста, не делайте так. Если вам нужно отобразить невыбранное состояние компонента, используйте value=null вместо undefined`, 'error');
|
|
61
|
-
}
|
|
62
|
-
};
|
|
63
34
|
function defaultRenderOptionFn(_param) {
|
|
64
35
|
var { option } = _param, props = _object_without_properties(_param, [
|
|
65
36
|
"option"
|
|
66
37
|
]);
|
|
67
38
|
return /*#__PURE__*/ _jsx(CustomSelectOption, _object_spread({}, props));
|
|
68
39
|
}
|
|
69
|
-
|
|
70
|
-
e.preventDefault();
|
|
71
|
-
};
|
|
72
|
-
function findSelectedIndex(options = [], value) {
|
|
73
|
-
if (value === NOT_SELECTED.CUSTOM) {
|
|
74
|
-
return -1;
|
|
75
|
-
}
|
|
76
|
-
var _options_findIndex;
|
|
77
|
-
return (_options_findIndex = options.findIndex((item)=>{
|
|
78
|
-
value = typeof item.value === 'number' ? Number(value) : value;
|
|
79
|
-
return item.value === value;
|
|
80
|
-
})) !== null && _options_findIndex !== void 0 ? _options_findIndex : -1;
|
|
81
|
-
}
|
|
82
|
-
const filter = (options, inputValue, filterFn)=>{
|
|
83
|
-
return typeof filterFn === 'function' ? options.filter((option)=>filterFn(inputValue, option)) : options;
|
|
84
|
-
};
|
|
85
|
-
/* eslint-enable jsdoc/require-jsdoc */ function isMousePositionChanged(event, prevPosition) {
|
|
40
|
+
function isMousePositionChanged(event, prevPosition) {
|
|
86
41
|
return Math.abs(prevPosition.x - event.clientX) >= 1 || Math.abs(prevPosition.y - event.clientY) >= 1;
|
|
87
42
|
}
|
|
43
|
+
const FETCH_STATUS_RESET_DELAY = 2000;
|
|
44
|
+
const FetchingStatus = ({ fetching = false, options, fetchingInProgressLabel = 'Список опций загружается...', fetchingCompletedLabel = `Загружено опций: ${options.length}` })=>{
|
|
45
|
+
const [status, setStatus] = React.useState('none');
|
|
46
|
+
const content = getRequiredValueByKey(status, {
|
|
47
|
+
fetching: fetchingInProgressLabel,
|
|
48
|
+
loaded: typeof fetchingCompletedLabel === 'function' ? fetchingCompletedLabel(options.length) : fetchingCompletedLabel,
|
|
49
|
+
none: ''
|
|
50
|
+
});
|
|
51
|
+
useIsomorphicLayoutEffect(function updateStatus() {
|
|
52
|
+
if (fetching) {
|
|
53
|
+
setStatus('fetching');
|
|
54
|
+
} else {
|
|
55
|
+
setStatus('loaded');
|
|
56
|
+
setTimeout(()=>setStatus('none'), FETCH_STATUS_RESET_DELAY);
|
|
57
|
+
}
|
|
58
|
+
}, [
|
|
59
|
+
fetching
|
|
60
|
+
]);
|
|
61
|
+
return /*#__PURE__*/ _jsx(VisuallyHidden, {
|
|
62
|
+
"aria-live": "polite",
|
|
63
|
+
children: content
|
|
64
|
+
});
|
|
65
|
+
};
|
|
88
66
|
/**
|
|
89
67
|
* @see https://vkui.io/components/custom-select
|
|
90
68
|
*/ export function CustomSelect(props) {
|
|
91
|
-
const
|
|
92
|
-
const { before, name, className, getRef, getRootRef, popupDirection = 'bottom', style, onChange, children, 'onInputChange': onInputChangeProp, renderDropdown, onOpen, onClose, fetching, forceDropdownPortal, selectType = 'default', searchable = false, 'renderOption': renderOptionProp = defaultRenderOptionFn, 'options': optionsProp, emptyText = 'Ничего не найдено', filterFn = defaultFilterFn, 'icon': iconProp, ClearButton = CustomSelectClearButton, allowClearButton = false, dropdownOffsetDistance = 0, dropdownAutoWidth = false, noMaxHeight = false, 'aria-labelledby': ariaLabelledBy, clearButtonTestId, nativeSelectTestId, defaultValue, required, getSelectInputRef, overscrollBehavior, onInputKeyDown, readOnly } = props, restProps = _object_without_properties(props, [
|
|
69
|
+
const { before, name, className, getRef, getRootRef, popupDirection = 'bottom', style, onChange, children, 'onInputChange': onInputChangeProp, renderDropdown, onOpen, onClose, fetching, forceDropdownPortal, selectType = 'default', searchable = false, 'renderOption': renderOptionProp = defaultRenderOptionFn, 'options': options, emptyText = 'Ничего не найдено', filterFn = defaultFilterFn, 'icon': iconProp, ClearButton, allowClearButton = false, dropdownOffsetDistance = 0, dropdownAutoWidth = false, noMaxHeight = false, 'aria-labelledby': ariaLabelledBy, clearButtonTestId, nativeSelectTestId, defaultValue, required, getSelectInputRef, overscrollBehavior, 'onInputKeyDown': onInputKeyDownProp, readOnly, accessible = false, fetchingInProgressLabel, fetchingCompletedLabel } = props, restProps = _object_without_properties(props, [
|
|
93
70
|
"before",
|
|
94
71
|
"name",
|
|
95
72
|
"className",
|
|
@@ -124,71 +101,92 @@ const filter = (options, inputValue, filterFn)=>{
|
|
|
124
101
|
"required",
|
|
125
102
|
"getSelectInputRef",
|
|
126
103
|
"overscrollBehavior",
|
|
127
|
-
|
|
128
|
-
"readOnly"
|
|
104
|
+
'onInputKeyDown',
|
|
105
|
+
"readOnly",
|
|
106
|
+
"accessible",
|
|
107
|
+
"fetchingInProgressLabel",
|
|
108
|
+
"fetchingCompletedLabel"
|
|
129
109
|
]);
|
|
130
110
|
if (process.env.NODE_ENV === 'development') {
|
|
131
|
-
checkOptionsValueType(
|
|
111
|
+
checkOptionsValueType(options);
|
|
132
112
|
}
|
|
133
113
|
const { sizeY = 'none' } = useAdaptivity();
|
|
134
114
|
const containerRef = React.useRef(null);
|
|
135
115
|
const handleRootRef = useExternRef(containerRef, getRootRef);
|
|
136
|
-
const scrollBoxRef = React.useRef(null);
|
|
137
116
|
const selectElRef = useExternRef(getRef);
|
|
138
|
-
const
|
|
139
|
-
const
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
const [[nativeSelectValue, prevNativeSelectValue], setNativeSelectValue] = useStateWithPrev(()=>{
|
|
144
|
-
if (props.value !== undefined) {
|
|
145
|
-
return remapFromSelectValueToNativeValue(props.value);
|
|
146
|
-
}
|
|
147
|
-
if (defaultValue !== undefined) {
|
|
148
|
-
return remapFromSelectValueToNativeValue(defaultValue);
|
|
117
|
+
const selectInputRef = useExternRef(getSelectInputRef);
|
|
118
|
+
const propsValue = React.useMemo(()=>{
|
|
119
|
+
var _getOptionByValue;
|
|
120
|
+
if (props.value === undefined) {
|
|
121
|
+
return undefined;
|
|
149
122
|
}
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
const [popperPlacement, setPopperPlacement] = React.useState(popupDirection);
|
|
153
|
-
const options = React.useMemo(()=>{
|
|
154
|
-
return filter(optionsProp, inputValue, filterFn);
|
|
123
|
+
var _getOptionByValue_value;
|
|
124
|
+
return (_getOptionByValue_value = (_getOptionByValue = getOptionByValue(options, props.value)) === null || _getOptionByValue === void 0 ? void 0 : _getOptionByValue.value) !== null && _getOptionByValue_value !== void 0 ? _getOptionByValue_value : null;
|
|
155
125
|
}, [
|
|
126
|
+
options,
|
|
127
|
+
props.value
|
|
128
|
+
]);
|
|
129
|
+
const [isControlledOutside, setIsControlledOutside] = React.useState(props.value !== undefined);
|
|
130
|
+
const [popperPlacement, setPopperPlacement] = React.useState(popupDirection);
|
|
131
|
+
const { nativeSelectValue, setNativeSelectValue, selectedOptionValue, setSelectedOptionValue, onNativeSelectChange } = useSelectedOptionController({
|
|
132
|
+
value: propsValue,
|
|
133
|
+
defaultValue,
|
|
134
|
+
isControlledOutside,
|
|
135
|
+
allowClearButton,
|
|
136
|
+
onChange
|
|
137
|
+
});
|
|
138
|
+
const selected = React.useMemo(()=>options.find((option)=>option.value === selectedOptionValue), [
|
|
139
|
+
options,
|
|
140
|
+
selectedOptionValue
|
|
141
|
+
]);
|
|
142
|
+
const { inputValue, onInputChange, resetInputValue, resetInputValueBySelectedOption } = useInputValueController({
|
|
143
|
+
options,
|
|
144
|
+
accessible,
|
|
145
|
+
selectedValue: selectedOptionValue,
|
|
146
|
+
onInputChange: onInputChangeProp
|
|
147
|
+
});
|
|
148
|
+
const filteredOptions = React.useMemo(()=>filter(options, searchable ? inputValue : '', filterFn), [
|
|
156
149
|
filterFn,
|
|
157
150
|
inputValue,
|
|
158
|
-
|
|
151
|
+
options,
|
|
152
|
+
searchable
|
|
159
153
|
]);
|
|
160
|
-
|
|
161
|
-
const
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
154
|
+
const { scrollToElement, optionsWrapperRef, scrollBoxRef } = useScrollListController();
|
|
155
|
+
const { focusedOptionValue, setFocusedOptionValue, resetFocusedOption, focusOptionByIndex, focusOption, selectFocusedValue } = useFocusedOptionController({
|
|
156
|
+
selectedOptionValue,
|
|
157
|
+
filteredOptions,
|
|
158
|
+
scrollToElement
|
|
159
|
+
});
|
|
160
|
+
const scrollToSelectedOption = ()=>{
|
|
161
|
+
scrollToElement(findSelectedIndex(filteredOptions, selectedOptionValue), true);
|
|
162
|
+
};
|
|
163
|
+
const { opened, open, close, toggleOpened } = useDropdownOpenedController({
|
|
164
|
+
onOpen: callMultiple(selectFocusedValue, onOpen),
|
|
165
|
+
onOpened: scrollToSelectedOption,
|
|
166
|
+
onClose,
|
|
167
|
+
onClosed: accessible ? resetInputValueBySelectedOption : resetInputValue
|
|
168
|
+
});
|
|
169
|
+
React.useEffect(function updateOptionsValue() {
|
|
170
|
+
const value = propsValue !== undefined ? propsValue : remapFromNativeValueToSelectValue(nativeSelectValue);
|
|
171
|
+
setSelectedOptionValue(value);
|
|
172
|
+
setFocusedOptionValue(value);
|
|
167
173
|
}, [
|
|
168
|
-
|
|
174
|
+
propsValue,
|
|
169
175
|
nativeSelectValue,
|
|
170
|
-
|
|
171
|
-
|
|
176
|
+
setFocusedOptionValue,
|
|
177
|
+
setSelectedOptionValue
|
|
172
178
|
]);
|
|
173
179
|
React.useEffect(function syncIsControlledState() {
|
|
174
180
|
setIsControlledOutside((oldIsControlled)=>{
|
|
175
|
-
const newIsControlled =
|
|
181
|
+
const newIsControlled = propsValue !== undefined;
|
|
176
182
|
checkMixControlledAndUncontrolledState(oldIsControlled, newIsControlled);
|
|
177
183
|
return newIsControlled;
|
|
178
184
|
});
|
|
179
185
|
}, [
|
|
180
|
-
|
|
181
|
-
]);
|
|
182
|
-
React.useEffect(function syncNativeSelectValueWithPropValue() {
|
|
183
|
-
if (props.value !== undefined) {
|
|
184
|
-
setNativeSelectValue(remapFromSelectValueToNativeValue(props.value));
|
|
185
|
-
}
|
|
186
|
-
}, [
|
|
187
|
-
props.value,
|
|
188
|
-
setNativeSelectValue
|
|
186
|
+
propsValue
|
|
189
187
|
]);
|
|
190
188
|
useIsomorphicLayoutEffect(()=>{
|
|
191
|
-
if (
|
|
189
|
+
if (filteredOptions.some(({ value })=>nativeSelectValue === value) || allowClearButton && nativeSelectValue === NOT_SELECTED.NATIVE) {
|
|
192
190
|
var _selectElRef_current;
|
|
193
191
|
const event = new Event('change', {
|
|
194
192
|
bubbles: true
|
|
@@ -198,117 +196,15 @@ const filter = (options, inputValue, filterFn)=>{
|
|
|
198
196
|
}, [
|
|
199
197
|
nativeSelectValue
|
|
200
198
|
]);
|
|
201
|
-
const selected = React.useMemo(()=>{
|
|
202
|
-
if (!options.length) {
|
|
203
|
-
return null;
|
|
204
|
-
}
|
|
205
|
-
return selectedOptionIndex !== undefined ? options[selectedOptionIndex] : undefined;
|
|
206
|
-
}, [
|
|
207
|
-
options,
|
|
208
|
-
selectedOptionIndex
|
|
209
|
-
]);
|
|
210
199
|
const openedClassNames = React.useMemo(()=>opened && dropdownOffsetDistance === 0 && (popperPlacement.includes('top') ? "vkuiCustomSelect__popUp" : "vkuiCustomSelect__popDown") || undefined, [
|
|
211
200
|
dropdownOffsetDistance,
|
|
212
201
|
opened,
|
|
213
202
|
popperPlacement
|
|
214
203
|
]);
|
|
215
|
-
const
|
|
216
|
-
|
|
217
|
-
const optionsWrapper = optionsWrapperRef.current;
|
|
218
|
-
const item = dropdown && optionsWrapper ? optionsWrapper.children[index] : null;
|
|
219
|
-
if (!item || !dropdown) {
|
|
220
|
-
return;
|
|
221
|
-
}
|
|
222
|
-
const dropdownHeight = dropdown.offsetHeight;
|
|
223
|
-
const scrollTop = dropdown.scrollTop;
|
|
224
|
-
const itemTop = item.offsetTop;
|
|
225
|
-
const itemHeight = item.offsetHeight;
|
|
226
|
-
if (center) {
|
|
227
|
-
dropdown.scrollTop = itemTop - dropdownHeight / 2 + itemHeight / 2;
|
|
228
|
-
} else if (itemTop + itemHeight > dropdownHeight + scrollTop) {
|
|
229
|
-
dropdown.scrollTop = itemTop - dropdownHeight + itemHeight;
|
|
230
|
-
} else if (itemTop < scrollTop) {
|
|
231
|
-
dropdown.scrollTop = itemTop;
|
|
232
|
-
}
|
|
233
|
-
}, []);
|
|
234
|
-
const focusOptionByIndex = React.useCallback((index, scrollTo = true)=>{
|
|
235
|
-
var _options_length;
|
|
236
|
-
if (index === undefined || index < 0 || index > ((_options_length = options.length) !== null && _options_length !== void 0 ? _options_length : 0) - 1) {
|
|
237
|
-
return;
|
|
238
|
-
}
|
|
239
|
-
const option = options[index];
|
|
240
|
-
if (option === null || option === void 0 ? void 0 : option.disabled) {
|
|
241
|
-
return;
|
|
242
|
-
}
|
|
243
|
-
if (scrollTo) {
|
|
244
|
-
scrollToElement(index);
|
|
245
|
-
}
|
|
246
|
-
setFocusedOptionIndex(index);
|
|
247
|
-
}, [
|
|
248
|
-
options,
|
|
249
|
-
scrollToElement
|
|
250
|
-
]);
|
|
251
|
-
const isValidIndex = React.useCallback((index)=>{
|
|
252
|
-
var _options_length;
|
|
253
|
-
return index >= 0 && index < ((_options_length = options.length) !== null && _options_length !== void 0 ? _options_length : 0);
|
|
254
|
-
}, [
|
|
255
|
-
options.length
|
|
256
|
-
]);
|
|
257
|
-
useIsomorphicLayoutEffect(()=>{
|
|
258
|
-
if (!opened) {
|
|
259
|
-
scrollPerformedRef.current = false;
|
|
260
|
-
return;
|
|
261
|
-
}
|
|
262
|
-
if (scrollPerformedRef.current) {
|
|
263
|
-
return;
|
|
264
|
-
}
|
|
265
|
-
const isIndexValid = selectedOptionIndex !== undefined && isValidIndex(selectedOptionIndex);
|
|
266
|
-
if (scrollBoxRef.current && isIndexValid) {
|
|
267
|
-
scrollPerformedRef.current = true;
|
|
268
|
-
scrollToElement(selectedOptionIndex, true);
|
|
269
|
-
}
|
|
270
|
-
}, [
|
|
271
|
-
opened,
|
|
272
|
-
selectedOptionIndex,
|
|
273
|
-
scrollToElement,
|
|
274
|
-
isValidIndex
|
|
275
|
-
]);
|
|
276
|
-
const [keyboardInput, setKeyboardInput] = React.useState('');
|
|
277
|
-
const resetKeyboardInput = React.useCallback(()=>{
|
|
278
|
-
setKeyboardInput('');
|
|
279
|
-
}, []);
|
|
280
|
-
const resetFocusedOption = React.useCallback(()=>{
|
|
281
|
-
setFocusedOptionIndex(-1);
|
|
282
|
-
}, []);
|
|
283
|
-
const onKeyboardInput = React.useCallback((key)=>{
|
|
284
|
-
if (!opened) {
|
|
285
|
-
setOpened(true);
|
|
286
|
-
}
|
|
287
|
-
resetFocusedOption();
|
|
288
|
-
const fullInput = keyboardInput + key;
|
|
289
|
-
setKeyboardInput(fullInput);
|
|
290
|
-
}, [
|
|
291
|
-
keyboardInput,
|
|
292
|
-
opened,
|
|
293
|
-
resetFocusedOption
|
|
294
|
-
]);
|
|
295
|
-
const close = React.useCallback(()=>{
|
|
296
|
-
resetKeyboardInput();
|
|
297
|
-
setInputValue('');
|
|
298
|
-
setOpened(false);
|
|
299
|
-
resetFocusedOption();
|
|
300
|
-
onClose === null || onClose === void 0 ? void 0 : onClose();
|
|
301
|
-
}, [
|
|
302
|
-
onClose,
|
|
303
|
-
resetKeyboardInput,
|
|
304
|
-
resetFocusedOption
|
|
305
|
-
]);
|
|
306
|
-
const selectOption = React.useCallback((index)=>{
|
|
307
|
-
const item = options[index];
|
|
308
|
-
var _item_value;
|
|
309
|
-
setNativeSelectValue((_item_value = item === null || item === void 0 ? void 0 : item.value) !== null && _item_value !== void 0 ? _item_value : NOT_SELECTED.NATIVE);
|
|
204
|
+
const selectOption = React.useCallback((value)=>{
|
|
205
|
+
setNativeSelectValue(value !== null && value !== void 0 ? value : NOT_SELECTED.NATIVE);
|
|
310
206
|
close();
|
|
311
|
-
const shouldTriggerOnChangeWhenControlledAndInnerValueIsOutOfSync = isControlledOutside &&
|
|
207
|
+
const shouldTriggerOnChangeWhenControlledAndInnerValueIsOutOfSync = isControlledOutside && propsValue !== nativeSelectValue && nativeSelectValue === value;
|
|
312
208
|
if (shouldTriggerOnChangeWhenControlledAndInnerValueIsOutOfSync) {
|
|
313
209
|
var _selectElRef_current;
|
|
314
210
|
const event = new Event('change', {
|
|
@@ -318,33 +214,31 @@ const filter = (options, inputValue, filterFn)=>{
|
|
|
318
214
|
}
|
|
319
215
|
}, [
|
|
320
216
|
close,
|
|
321
|
-
|
|
322
|
-
selectElRef,
|
|
217
|
+
setNativeSelectValue,
|
|
323
218
|
isControlledOutside,
|
|
324
|
-
|
|
219
|
+
propsValue,
|
|
325
220
|
nativeSelectValue,
|
|
326
|
-
|
|
221
|
+
selectElRef
|
|
327
222
|
]);
|
|
328
223
|
const selectFocused = React.useCallback(()=>{
|
|
329
|
-
if (
|
|
224
|
+
if (focusedOptionValue === null) {
|
|
330
225
|
return;
|
|
331
226
|
}
|
|
332
|
-
selectOption(
|
|
227
|
+
selectOption(focusedOptionValue);
|
|
333
228
|
}, [
|
|
334
|
-
|
|
335
|
-
isValidIndex,
|
|
229
|
+
focusedOptionValue,
|
|
336
230
|
selectOption
|
|
337
231
|
]);
|
|
338
|
-
const
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
232
|
+
const onInputKeyDown = useInputKeyboardController({
|
|
233
|
+
opened,
|
|
234
|
+
open,
|
|
235
|
+
close,
|
|
236
|
+
resetFocusedOption,
|
|
237
|
+
selectFocused,
|
|
238
|
+
focusOption,
|
|
239
|
+
scrollBoxRef,
|
|
240
|
+
onInputKeyDown: onInputKeyDownProp
|
|
241
|
+
});
|
|
348
242
|
const onBlur = React.useCallback(()=>{
|
|
349
243
|
var _selectElRef_current;
|
|
350
244
|
close();
|
|
@@ -365,148 +259,15 @@ const filter = (options, inputValue, filterFn)=>{
|
|
|
365
259
|
}, [
|
|
366
260
|
selectElRef
|
|
367
261
|
]);
|
|
368
|
-
const onClick = React.useCallback(()=>{
|
|
369
|
-
if (opened) {
|
|
370
|
-
close();
|
|
371
|
-
} else {
|
|
372
|
-
open();
|
|
373
|
-
}
|
|
374
|
-
}, [
|
|
375
|
-
close,
|
|
376
|
-
open,
|
|
377
|
-
opened
|
|
378
|
-
]);
|
|
379
|
-
const handleKeyUp = React.useMemo(()=>debounce(resetKeyboardInput, 1000), [
|
|
380
|
-
resetKeyboardInput
|
|
381
|
-
]);
|
|
382
|
-
const focusOption = React.useCallback((type)=>{
|
|
383
|
-
let index = focusedOptionIndex;
|
|
384
|
-
if (type === 'next') {
|
|
385
|
-
const nextIndex = findIndexAfter(options, index);
|
|
386
|
-
index = nextIndex === -1 ? findIndexAfter(options) : nextIndex; // Следующий за index или первый валидный до index
|
|
387
|
-
} else if (type === 'prev') {
|
|
388
|
-
const beforeIndex = findIndexBefore(options, index);
|
|
389
|
-
index = beforeIndex === -1 ? findIndexBefore(options) : beforeIndex; // Предшествующий index или последний валидный после index
|
|
390
|
-
}
|
|
391
|
-
focusOptionByIndex(index);
|
|
392
|
-
}, [
|
|
393
|
-
focusOptionByIndex,
|
|
394
|
-
focusedOptionIndex,
|
|
395
|
-
options
|
|
396
|
-
]);
|
|
397
|
-
const onNativeSelectChange = (e)=>{
|
|
398
|
-
// для ситуаций, когда в опциях value это string а value/defaultValue это number
|
|
399
|
-
// и наоборот, приводим значение nativeSelectValue из стейта к строке.
|
|
400
|
-
// ведь nativeSelect всегда возвращает string в onChange, а пользователь
|
|
401
|
-
// может использовать number для опций
|
|
402
|
-
//
|
|
403
|
-
// native select всегда возвращает string в качестве value в onChange
|
|
404
|
-
// Когда селект контролируемый, то пользователь, в onChange может сохранить в свой стейт строку (например '3'), хотя
|
|
405
|
-
// в качестве value опции может использовать число (3),
|
|
406
|
-
// тогда строчное значение value ('3') из стейта пользователя
|
|
407
|
-
// будет передано в CustomSelect, и после синхронизации nativeSelectValue (3) и props.value ('3') и после клика на уже выбранную опцию (3),
|
|
408
|
-
// когда nativeSelectValue обновится на значение опции (число 3),
|
|
409
|
-
// сравнение nativeSelectValue (3) и prevNativeSelectValue ('3') может не сработать лишь из-за того, что они в разных типах.
|
|
410
|
-
const convertedNativeSelectValue = typeof nativeSelectValue === 'number' && (typeof props.value === 'string' || typeof prevNativeSelectValue === 'string') ? String(nativeSelectValue) : nativeSelectValue;
|
|
411
|
-
const isCalledWithSameControlledOptionValue = isControlledOutside && props.value === remapFromNativeValueToSelectValue(convertedNativeSelectValue);
|
|
412
|
-
const isNativeValueChanged = convertedNativeSelectValue !== prevNativeSelectValue && prevNativeSelectValue !== undefined;
|
|
413
|
-
const isTriggeredByClearButton = allowClearButton && nativeSelectValue === NOT_SELECTED.NATIVE;
|
|
414
|
-
const shouldCallOnChange = !isCalledWithSameControlledOptionValue && (isNativeValueChanged || isTriggeredByClearButton);
|
|
415
|
-
if (!shouldCallOnChange) {
|
|
416
|
-
return;
|
|
417
|
-
}
|
|
418
|
-
const remappedNativeValue = remapFromNativeValueToSelectValue(e.currentTarget.value);
|
|
419
|
-
if (e.target.value === NOT_SELECTED.NATIVE) {
|
|
420
|
-
e.target.value = '';
|
|
421
|
-
}
|
|
422
|
-
if (e.currentTarget.value === NOT_SELECTED.NATIVE) {
|
|
423
|
-
e.currentTarget.value = '';
|
|
424
|
-
}
|
|
425
|
-
onChange === null || onChange === void 0 ? void 0 : onChange(e, remappedNativeValue);
|
|
426
|
-
};
|
|
427
|
-
const onInputChange = React.useCallback((e)=>{
|
|
428
|
-
onInputChangeProp && onInputChangeProp(e);
|
|
429
|
-
setInputValue(e.target.value);
|
|
430
|
-
}, [
|
|
431
|
-
onInputChangeProp
|
|
432
|
-
]);
|
|
433
|
-
const areOptionsShown = React.useCallback(()=>{
|
|
434
|
-
return scrollBoxRef.current !== null;
|
|
435
|
-
}, []);
|
|
436
|
-
const handleKeyDownSelect = React.useCallback((event)=>{
|
|
437
|
-
if (event.key.length === 1 && event.key !== ' ') {
|
|
438
|
-
onKeyboardInput(event.key);
|
|
439
|
-
return;
|
|
440
|
-
}
|
|
441
|
-
[
|
|
442
|
-
'ArrowUp',
|
|
443
|
-
'ArrowDown',
|
|
444
|
-
'Escape',
|
|
445
|
-
'Enter'
|
|
446
|
-
].includes(event.key) && areOptionsShown() && event.preventDefault();
|
|
447
|
-
switch(event.key){
|
|
448
|
-
case 'ArrowUp':
|
|
449
|
-
if (opened) {
|
|
450
|
-
areOptionsShown() && focusOption('prev');
|
|
451
|
-
} else {
|
|
452
|
-
open();
|
|
453
|
-
}
|
|
454
|
-
break;
|
|
455
|
-
case 'ArrowDown':
|
|
456
|
-
if (opened) {
|
|
457
|
-
areOptionsShown() && focusOption('next');
|
|
458
|
-
} else {
|
|
459
|
-
open();
|
|
460
|
-
}
|
|
461
|
-
break;
|
|
462
|
-
case 'Escape':
|
|
463
|
-
close();
|
|
464
|
-
break;
|
|
465
|
-
case 'Backspace':
|
|
466
|
-
case 'Delete':
|
|
467
|
-
{
|
|
468
|
-
if (!opened) {
|
|
469
|
-
setOpened(true);
|
|
470
|
-
}
|
|
471
|
-
resetFocusedOption();
|
|
472
|
-
break;
|
|
473
|
-
}
|
|
474
|
-
case 'Enter':
|
|
475
|
-
case 'Spacebar':
|
|
476
|
-
case ' ':
|
|
477
|
-
if (opened) {
|
|
478
|
-
areOptionsShown() && selectFocused();
|
|
479
|
-
} else {
|
|
480
|
-
open();
|
|
481
|
-
}
|
|
482
|
-
break;
|
|
483
|
-
}
|
|
484
|
-
}, [
|
|
485
|
-
areOptionsShown,
|
|
486
|
-
close,
|
|
487
|
-
focusOption,
|
|
488
|
-
onKeyboardInput,
|
|
489
|
-
open,
|
|
490
|
-
opened,
|
|
491
|
-
selectFocused,
|
|
492
|
-
resetFocusedOption
|
|
493
|
-
]);
|
|
494
|
-
const handleInputKeydown = React.useCallback((event)=>{
|
|
495
|
-
onInputKeyDown === null || onInputKeyDown === void 0 ? void 0 : onInputKeyDown(event, opened);
|
|
496
|
-
}, [
|
|
497
|
-
opened,
|
|
498
|
-
onInputKeyDown
|
|
499
|
-
]);
|
|
500
|
-
const _onInputKeyDown = callMultiple(handleKeyDownSelect, handleInputKeydown);
|
|
501
262
|
const handleOptionClick = React.useCallback((e)=>{
|
|
502
263
|
var _e_currentTarget_parentNode;
|
|
503
264
|
const index = Array.prototype.indexOf.call((_e_currentTarget_parentNode = e.currentTarget.parentNode) === null || _e_currentTarget_parentNode === void 0 ? void 0 : _e_currentTarget_parentNode.children, e.currentTarget);
|
|
504
|
-
const option =
|
|
265
|
+
const option = filteredOptions[index];
|
|
505
266
|
if (option && !option.disabled) {
|
|
506
|
-
selectOption(
|
|
267
|
+
selectOption(option.value);
|
|
507
268
|
}
|
|
508
269
|
}, [
|
|
509
|
-
|
|
270
|
+
filteredOptions,
|
|
510
271
|
selectOption
|
|
511
272
|
]);
|
|
512
273
|
const lastMousePositionRef = React.useRef({
|
|
@@ -522,8 +283,8 @@ const filter = (options, inputValue, filterFn)=>{
|
|
|
522
283
|
]);
|
|
523
284
|
const popupAriaId = React.useId();
|
|
524
285
|
const renderOption = React.useCallback((option, index)=>{
|
|
525
|
-
const hovered =
|
|
526
|
-
const selected =
|
|
286
|
+
const hovered = option.value === focusedOptionValue;
|
|
287
|
+
const selected = option.value === selectedOptionValue;
|
|
527
288
|
return /*#__PURE__*/ _jsx(React.Fragment, {
|
|
528
289
|
children: renderOptionProp(_object_spread({
|
|
529
290
|
option,
|
|
@@ -532,7 +293,7 @@ const filter = (options, inputValue, filterFn)=>{
|
|
|
532
293
|
selected,
|
|
533
294
|
disabled: option.disabled,
|
|
534
295
|
onClick: handleOptionClick,
|
|
535
|
-
onMouseDown:
|
|
296
|
+
onMouseDown: preventDefault,
|
|
536
297
|
// Используем `onMouseMove` вместо `onMouseEnter/onMouseOver`.
|
|
537
298
|
// Потому что если при навигации с клавиатуры курсор наведён на
|
|
538
299
|
// список, то при первом автоматическом скролле списка вызывается событие MouseOver/MouseEnter
|
|
@@ -545,17 +306,17 @@ const filter = (options, inputValue, filterFn)=>{
|
|
|
545
306
|
}, option))
|
|
546
307
|
}, `${typeof option.value}-${option.value}`);
|
|
547
308
|
}, [
|
|
548
|
-
|
|
549
|
-
|
|
550
|
-
focusOptionOnMouseMove,
|
|
309
|
+
focusedOptionValue,
|
|
310
|
+
selectedOptionValue,
|
|
551
311
|
renderOptionProp,
|
|
552
|
-
|
|
553
|
-
popupAriaId
|
|
312
|
+
handleOptionClick,
|
|
313
|
+
popupAriaId,
|
|
314
|
+
focusOptionOnMouseMove
|
|
554
315
|
]);
|
|
555
316
|
const resolvedContent = React.useMemo(()=>{
|
|
556
|
-
const defaultDropdownContent =
|
|
317
|
+
const defaultDropdownContent = filteredOptions.length > 0 ? /*#__PURE__*/ _jsx("div", {
|
|
557
318
|
ref: optionsWrapperRef,
|
|
558
|
-
children:
|
|
319
|
+
children: filteredOptions.map(renderOption)
|
|
559
320
|
}) : /*#__PURE__*/ _jsx(Footnote, {
|
|
560
321
|
className: "vkuiCustomSelect__empty",
|
|
561
322
|
children: emptyText
|
|
@@ -569,55 +330,27 @@ const filter = (options, inputValue, filterFn)=>{
|
|
|
569
330
|
}
|
|
570
331
|
}, [
|
|
571
332
|
emptyText,
|
|
572
|
-
|
|
333
|
+
filteredOptions,
|
|
334
|
+
optionsWrapperRef,
|
|
573
335
|
renderDropdown,
|
|
574
336
|
renderOption
|
|
575
337
|
]);
|
|
576
|
-
const
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
return null;
|
|
583
|
-
}
|
|
584
|
-
return /*#__PURE__*/ _jsx(ClearButton, {
|
|
585
|
-
className: iconProp === undefined ? "vkuiCustomSelect__clearIcon" : undefined,
|
|
586
|
-
onClick: function clearSelectState() {
|
|
587
|
-
setNativeSelectValue(NOT_SELECTED.NATIVE);
|
|
588
|
-
setInputValue('');
|
|
589
|
-
selectInputRef.current && selectInputRef.current.focus();
|
|
590
|
-
},
|
|
591
|
-
disabled: restProps.disabled,
|
|
592
|
-
"data-testid": clearButtonTestId
|
|
593
|
-
});
|
|
594
|
-
}, [
|
|
595
|
-
clearButtonShown,
|
|
338
|
+
const afterItems = useAfterItems({
|
|
339
|
+
value: propsValue,
|
|
340
|
+
nativeSelectValue,
|
|
341
|
+
isControlledOutside,
|
|
342
|
+
opened,
|
|
343
|
+
allowClearButton,
|
|
596
344
|
ClearButton,
|
|
597
|
-
|
|
598
|
-
|
|
345
|
+
onClearButtonClick: ()=>{
|
|
346
|
+
setNativeSelectValue(NOT_SELECTED.NATIVE);
|
|
347
|
+
resetInputValue();
|
|
348
|
+
selectInputRef.current && selectInputRef.current.focus();
|
|
349
|
+
},
|
|
599
350
|
clearButtonTestId,
|
|
600
|
-
|
|
601
|
-
|
|
602
|
-
|
|
603
|
-
const icon = React.useMemo(()=>{
|
|
604
|
-
if (iconProp !== undefined) {
|
|
605
|
-
return iconProp;
|
|
606
|
-
}
|
|
607
|
-
return /*#__PURE__*/ _jsx(DropdownIcon, {
|
|
608
|
-
className: clearButtonShown ? "vkuiCustomSelect__dropdownIcon" : undefined,
|
|
609
|
-
opened: opened
|
|
610
|
-
});
|
|
611
|
-
}, [
|
|
612
|
-
clearButtonShown,
|
|
613
|
-
iconProp,
|
|
614
|
-
opened
|
|
615
|
-
]);
|
|
616
|
-
const afterIcons = !readOnly && (icon || clearButtonShown) && /*#__PURE__*/ _jsxs(React.Fragment, {
|
|
617
|
-
children: [
|
|
618
|
-
clearButton,
|
|
619
|
-
icon
|
|
620
|
-
]
|
|
351
|
+
disabled: restProps.disabled,
|
|
352
|
+
readOnly,
|
|
353
|
+
icon: iconProp
|
|
621
354
|
});
|
|
622
355
|
const { document } = useDOM();
|
|
623
356
|
const passClickAndFocusToInputOnClick = React.useCallback((e)=>{
|
|
@@ -653,19 +386,16 @@ const filter = (options, inputValue, filterFn)=>{
|
|
|
653
386
|
e.preventDefault();
|
|
654
387
|
}
|
|
655
388
|
};
|
|
656
|
-
const
|
|
657
|
-
const ariaActiveDescendantId = ariaActiveDescendantOptionIndex !== undefined ? options[ariaActiveDescendantOptionIndex] && options[ariaActiveDescendantOptionIndex].value : null;
|
|
389
|
+
const ariaActiveDescendantId = focusedOptionValue !== null ? focusedOptionValue : undefined;
|
|
658
390
|
const selectInputAriaProps = {
|
|
659
391
|
'role': 'combobox',
|
|
660
392
|
'aria-controls': popupAriaId,
|
|
661
|
-
'aria-owns': popupAriaId,
|
|
662
393
|
'aria-expanded': opened,
|
|
663
394
|
'aria-activedescendant': ariaActiveDescendantId && opened ? `${popupAriaId}-${ariaActiveDescendantId}` : undefined,
|
|
664
395
|
'aria-labelledby': ariaLabelledBy,
|
|
665
396
|
'aria-haspopup': 'listbox',
|
|
666
397
|
'aria-autocomplete': 'none'
|
|
667
398
|
};
|
|
668
|
-
const focusWithin = useFocusWithin(handleRootRef);
|
|
669
399
|
const resetOptionFocusOnMouseLeave = React.useCallback((event)=>{
|
|
670
400
|
// В Хроме eсли мышка пользователя находится над инпутом селекта,
|
|
671
401
|
// и он с клавиатуры открывает опции, причём одна из опций
|
|
@@ -693,10 +423,6 @@ const filter = (options, inputValue, filterFn)=>{
|
|
|
693
423
|
};
|
|
694
424
|
},
|
|
695
425
|
children: [
|
|
696
|
-
focusWithin && selected && !opened && /*#__PURE__*/ _jsx(VisuallyHidden, {
|
|
697
|
-
"aria-live": "polite",
|
|
698
|
-
children: selected.label
|
|
699
|
-
}),
|
|
700
426
|
/*#__PURE__*/ _jsx(CustomSelectInput, _object_spread_props(_object_spread({
|
|
701
427
|
autoComplete: "off",
|
|
702
428
|
autoCapitalize: "none",
|
|
@@ -709,16 +435,23 @@ const filter = (options, inputValue, filterFn)=>{
|
|
|
709
435
|
className: openedClassNames,
|
|
710
436
|
readOnly: readOnly || !searchable,
|
|
711
437
|
fetching: fetching,
|
|
438
|
+
searchable: searchable,
|
|
439
|
+
accessible: accessible,
|
|
712
440
|
value: inputValue,
|
|
713
|
-
|
|
714
|
-
onKeyDown: !readOnly ? _onInputKeyDown : undefined,
|
|
441
|
+
onKeyDown: !readOnly ? onInputKeyDown : undefined,
|
|
715
442
|
onChange: onInputChange,
|
|
716
|
-
onClick: !readOnly ?
|
|
443
|
+
onClick: !readOnly ? toggleOpened : undefined,
|
|
717
444
|
before: before,
|
|
718
|
-
after:
|
|
445
|
+
after: afterItems,
|
|
719
446
|
selectType: selectType,
|
|
720
447
|
children: selected === null || selected === void 0 ? void 0 : selected.label
|
|
721
448
|
})),
|
|
449
|
+
/*#__PURE__*/ _jsx(FetchingStatus, {
|
|
450
|
+
fetching: fetching,
|
|
451
|
+
options: filteredOptions,
|
|
452
|
+
fetchingInProgressLabel: fetchingInProgressLabel,
|
|
453
|
+
fetchingCompletedLabel: fetchingCompletedLabel
|
|
454
|
+
}),
|
|
722
455
|
/*#__PURE__*/ _jsxs("select", {
|
|
723
456
|
tabIndex: -1,
|
|
724
457
|
ref: selectElRef,
|
|
@@ -736,7 +469,7 @@ const filter = (options, inputValue, filterFn)=>{
|
|
|
736
469
|
(allowClearButton || nativeSelectValue === NOT_SELECTED.NATIVE) && /*#__PURE__*/ _jsx("option", {
|
|
737
470
|
value: NOT_SELECTED.NATIVE
|
|
738
471
|
}, NOT_SELECTED.NATIVE),
|
|
739
|
-
|
|
472
|
+
options.map((item)=>/*#__PURE__*/ _jsx("option", {
|
|
740
473
|
value: item.value
|
|
741
474
|
}, `${item.value}`))
|
|
742
475
|
]
|