@ozen-ui/kit 0.57.0 → 0.58.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/AutocompleteNext/package.json +5 -0
- package/__inner__/cjs/components/Autocomplete/Autocomplete.d.ts +3 -0
- package/__inner__/cjs/components/Autocomplete/Autocomplete.js +7 -0
- package/__inner__/cjs/components/Autocomplete/helper.d.ts +2 -10
- package/__inner__/cjs/components/AutocompleteNext/Autocomplete.css +226 -0
- package/__inner__/cjs/components/AutocompleteNext/Autocomplete.d.ts +4 -0
- package/__inner__/cjs/components/AutocompleteNext/Autocomplete.js +216 -0
- package/__inner__/cjs/components/AutocompleteNext/components/AutocompleteDropdown/AutocompleteDropdown.d.ts +2 -0
- package/__inner__/cjs/components/AutocompleteNext/components/AutocompleteDropdown/AutocompleteDropdown.js +156 -0
- package/__inner__/cjs/components/AutocompleteNext/components/AutocompleteDropdown/components/AutocompleteDropdownCheckIcon/AutocompleteDropdownCheckIcon.css +7 -0
- package/__inner__/cjs/components/AutocompleteNext/components/AutocompleteDropdown/components/AutocompleteDropdownCheckIcon/AutocompleteDropdownCheckIcon.d.ts +6 -0
- package/__inner__/cjs/components/AutocompleteNext/components/AutocompleteDropdown/components/AutocompleteDropdownCheckIcon/AutocompleteDropdownCheckIcon.js +18 -0
- package/__inner__/cjs/components/AutocompleteNext/components/AutocompleteDropdown/components/AutocompleteDropdownCheckIcon/index.d.ts +1 -0
- package/__inner__/cjs/components/AutocompleteNext/components/AutocompleteDropdown/components/AutocompleteDropdownCheckIcon/index.js +4 -0
- package/__inner__/cjs/components/AutocompleteNext/components/AutocompleteDropdown/components/AutocompleteDropdownLoading/AutocompleteDropdownLoading.d.ts +6 -0
- package/__inner__/cjs/components/AutocompleteNext/components/AutocompleteDropdown/components/AutocompleteDropdownLoading/AutocompleteDropdownLoading.js +23 -0
- package/__inner__/cjs/components/AutocompleteNext/components/AutocompleteDropdown/components/AutocompleteDropdownLoading/index.d.ts +1 -0
- package/__inner__/cjs/components/AutocompleteNext/components/AutocompleteDropdown/components/AutocompleteDropdownLoading/index.js +4 -0
- package/__inner__/cjs/components/AutocompleteNext/components/AutocompleteDropdown/components/AutocompleteDropdownNoOptions/AutocompleteDropdownNoOptions.d.ts +6 -0
- package/__inner__/cjs/components/AutocompleteNext/components/AutocompleteDropdown/components/AutocompleteDropdownNoOptions/AutocompleteDropdownNoOptions.js +17 -0
- package/__inner__/cjs/components/AutocompleteNext/components/AutocompleteDropdown/components/AutocompleteDropdownNoOptions/index.d.ts +1 -0
- package/__inner__/cjs/components/AutocompleteNext/components/AutocompleteDropdown/components/AutocompleteDropdownNoOptions/index.js +4 -0
- package/__inner__/cjs/components/AutocompleteNext/components/AutocompleteDropdown/components/index.d.ts +3 -0
- package/__inner__/cjs/components/AutocompleteNext/components/AutocompleteDropdown/components/index.js +6 -0
- package/__inner__/cjs/components/AutocompleteNext/components/AutocompleteDropdown/constants.d.ts +3 -0
- package/__inner__/cjs/components/AutocompleteNext/components/AutocompleteDropdown/constants.js +6 -0
- package/__inner__/cjs/components/AutocompleteNext/components/AutocompleteDropdown/helpers.d.ts +17 -0
- package/__inner__/cjs/components/AutocompleteNext/components/AutocompleteDropdown/helpers.js +36 -0
- package/__inner__/cjs/components/AutocompleteNext/components/AutocompleteDropdown/index.d.ts +3 -0
- package/__inner__/cjs/components/AutocompleteNext/components/AutocompleteDropdown/index.js +6 -0
- package/__inner__/cjs/components/AutocompleteNext/components/AutocompleteDropdown/types.d.ts +45 -0
- package/__inner__/cjs/components/AutocompleteNext/components/AutocompleteDropdown/types.js +2 -0
- package/__inner__/cjs/components/AutocompleteNext/components/AutocompleteDropdown/utils/index.d.ts +2 -0
- package/__inner__/cjs/components/AutocompleteNext/components/AutocompleteDropdown/utils/index.js +5 -0
- package/__inner__/cjs/components/AutocompleteNext/components/AutocompleteDropdown/utils/useDataListNavigation.d.ts +20 -0
- package/__inner__/cjs/components/AutocompleteNext/components/AutocompleteDropdown/utils/useDataListNavigation.js +71 -0
- package/__inner__/cjs/components/AutocompleteNext/components/AutocompleteDropdown/utils/useScrollContainerToElement.d.ts +3 -0
- package/__inner__/cjs/components/AutocompleteNext/components/AutocompleteDropdown/utils/useScrollContainerToElement.js +15 -0
- package/__inner__/cjs/components/AutocompleteNext/components/AutocompleteInput/AutocompleteInput.d.ts +2 -0
- package/__inner__/cjs/components/AutocompleteNext/components/AutocompleteInput/AutocompleteInput.js +38 -0
- package/__inner__/cjs/components/AutocompleteNext/components/AutocompleteInput/components/AutocompleteInputMultiple.d.ts +2 -0
- package/__inner__/cjs/components/AutocompleteNext/components/AutocompleteInput/components/AutocompleteInputMultiple.js +112 -0
- package/__inner__/cjs/components/AutocompleteNext/components/AutocompleteInput/components/helpers.d.ts +5 -0
- package/__inner__/cjs/components/AutocompleteNext/components/AutocompleteInput/components/helpers.js +36 -0
- package/__inner__/cjs/components/AutocompleteNext/components/AutocompleteInput/components/index.d.ts +1 -0
- package/__inner__/cjs/components/AutocompleteNext/components/AutocompleteInput/components/index.js +4 -0
- package/__inner__/cjs/components/AutocompleteNext/components/AutocompleteInput/components/types.d.ts +17 -0
- package/__inner__/cjs/components/AutocompleteNext/components/AutocompleteInput/components/types.js +2 -0
- package/__inner__/cjs/components/AutocompleteNext/components/AutocompleteInput/helpers.d.ts +3 -0
- package/__inner__/cjs/components/AutocompleteNext/components/AutocompleteInput/index.d.ts +2 -0
- package/__inner__/cjs/components/AutocompleteNext/components/AutocompleteInput/index.js +5 -0
- package/__inner__/cjs/components/AutocompleteNext/components/AutocompleteInput/types.d.ts +26 -0
- package/__inner__/cjs/components/AutocompleteNext/components/AutocompleteInput/types.js +2 -0
- package/__inner__/cjs/components/AutocompleteNext/components/AutocompleteRenderRight/AutocompleteRenderRight.d.ts +8 -0
- package/__inner__/cjs/components/AutocompleteNext/components/AutocompleteRenderRight/AutocompleteRenderRight.js +28 -0
- package/__inner__/cjs/components/AutocompleteNext/components/AutocompleteRenderRight/index.d.ts +1 -0
- package/__inner__/cjs/components/AutocompleteNext/components/AutocompleteRenderRight/index.js +4 -0
- package/__inner__/cjs/components/AutocompleteNext/components/index.d.ts +3 -0
- package/__inner__/cjs/components/AutocompleteNext/components/index.js +6 -0
- package/__inner__/cjs/components/AutocompleteNext/constants.d.ts +10 -0
- package/__inner__/cjs/components/AutocompleteNext/constants.js +13 -0
- package/__inner__/cjs/components/AutocompleteNext/helpers.d.ts +152 -0
- package/__inner__/cjs/components/AutocompleteNext/helpers.js +18 -0
- package/__inner__/cjs/components/AutocompleteNext/index.d.ts +2 -0
- package/__inner__/cjs/components/AutocompleteNext/index.js +5 -0
- package/__inner__/cjs/components/AutocompleteNext/types.d.ts +133 -0
- package/__inner__/cjs/components/AutocompleteNext/types.js +2 -0
- package/__inner__/cjs/components/DataList/DataList.js +18 -25
- package/__inner__/cjs/components/DataList/helpers.d.ts +3 -0
- package/__inner__/cjs/components/DataList/helpers.js +7 -0
- package/__inner__/cjs/components/DataList/{helpers → utils}/index.d.ts +0 -1
- package/__inner__/cjs/components/DataList/{helpers → utils}/index.js +0 -1
- package/__inner__/cjs/components/DatePicker/DatePicker.d.ts +2 -2
- package/__inner__/cjs/components/DatePicker/DatePicker.js +1 -1
- package/__inner__/cjs/components/FieldControl/FieldControl.css +4 -0
- package/__inner__/cjs/components/FieldInput/FieldInput.d.ts +1 -9
- package/__inner__/cjs/components/FieldInput/FieldInput.js +9 -4
- package/__inner__/cjs/components/FieldInput/constants.d.ts +1 -0
- package/__inner__/cjs/components/FieldInput/constants.js +4 -0
- package/__inner__/cjs/components/FieldInput/index.d.ts +1 -0
- package/__inner__/cjs/components/FieldInput/index.js +1 -0
- package/__inner__/cjs/components/FieldInput/types.d.ts +11 -0
- package/__inner__/cjs/components/FieldInput/types.js +2 -0
- package/__inner__/cjs/components/FieldLabel/FieldLabel.css +1 -0
- package/__inner__/cjs/components/Grid/Grid.css +4 -0
- package/__inner__/cjs/components/Input/Input.css +6 -9
- package/__inner__/cjs/components/Input/types.d.ts +2 -3
- package/__inner__/cjs/components/InputNumber/InputNumber.css +0 -5
- package/__inner__/cjs/components/Tag/Tag.css +1 -0
- package/__inner__/cjs/components/TagNext/Tag.css +11 -4
- package/__inner__/cjs/components/TagNext/Tag.js +1 -1
- package/__inner__/cjs/components/TagNext/constants.d.ts +1 -1
- package/__inner__/cjs/components/TagNext/constants.js +2 -2
- package/__inner__/cjs/components/TagNext/types.d.ts +6 -3
- package/__inner__/cjs/components/Textarea/Textarea.css +0 -5
- package/__inner__/cjs/components/ThemeProvider/types.d.ts +2 -0
- package/__inner__/cjs/hooks/useElementSize/index.d.ts +1 -0
- package/__inner__/cjs/hooks/useElementSize/index.js +4 -0
- package/__inner__/cjs/hooks/useElementSize/useElementSize.d.ts +6 -0
- package/__inner__/cjs/hooks/useElementSize/useElementSize.js +11 -0
- package/__inner__/cjs/hooks/useResizeObserver/index.d.ts +1 -0
- package/__inner__/cjs/hooks/useResizeObserver/index.js +4 -0
- package/__inner__/cjs/hooks/useResizeObserver/useResizeObserver.d.ts +4 -0
- package/__inner__/cjs/hooks/useResizeObserver/useResizeObserver.js +50 -0
- package/__inner__/cjs/locale/locale.js +21 -0
- package/__inner__/cjs/utils/isNotNil.d.ts +1 -0
- package/__inner__/cjs/utils/isNotNil.js +7 -0
- package/__inner__/esm/components/Autocomplete/Autocomplete.d.ts +3 -0
- package/__inner__/esm/components/Autocomplete/Autocomplete.js +7 -0
- package/__inner__/esm/components/Autocomplete/helper.d.ts +2 -10
- package/__inner__/esm/components/AutocompleteNext/Autocomplete.css +226 -0
- package/__inner__/esm/components/AutocompleteNext/Autocomplete.d.ts +4 -0
- package/__inner__/esm/components/AutocompleteNext/Autocomplete.js +213 -0
- package/__inner__/esm/components/AutocompleteNext/components/AutocompleteDropdown/AutocompleteDropdown.d.ts +2 -0
- package/__inner__/esm/components/AutocompleteNext/components/AutocompleteDropdown/AutocompleteDropdown.js +153 -0
- package/__inner__/esm/components/AutocompleteNext/components/AutocompleteDropdown/components/AutocompleteDropdownCheckIcon/AutocompleteDropdownCheckIcon.css +7 -0
- package/__inner__/esm/components/AutocompleteNext/components/AutocompleteDropdown/components/AutocompleteDropdownCheckIcon/AutocompleteDropdownCheckIcon.d.ts +6 -0
- package/__inner__/esm/components/AutocompleteNext/components/AutocompleteDropdown/components/AutocompleteDropdownCheckIcon/AutocompleteDropdownCheckIcon.js +13 -0
- package/__inner__/esm/components/AutocompleteNext/components/AutocompleteDropdown/components/AutocompleteDropdownCheckIcon/index.d.ts +1 -0
- package/__inner__/esm/components/AutocompleteNext/components/AutocompleteDropdown/components/AutocompleteDropdownCheckIcon/index.js +1 -0
- package/__inner__/esm/components/AutocompleteNext/components/AutocompleteDropdown/components/AutocompleteDropdownLoading/AutocompleteDropdownLoading.d.ts +6 -0
- package/__inner__/esm/components/AutocompleteNext/components/AutocompleteDropdown/components/AutocompleteDropdownLoading/AutocompleteDropdownLoading.js +18 -0
- package/__inner__/esm/components/AutocompleteNext/components/AutocompleteDropdown/components/AutocompleteDropdownLoading/index.d.ts +1 -0
- package/__inner__/esm/components/AutocompleteNext/components/AutocompleteDropdown/components/AutocompleteDropdownLoading/index.js +1 -0
- package/__inner__/esm/components/AutocompleteNext/components/AutocompleteDropdown/components/AutocompleteDropdownNoOptions/AutocompleteDropdownNoOptions.d.ts +6 -0
- package/__inner__/esm/components/AutocompleteNext/components/AutocompleteDropdown/components/AutocompleteDropdownNoOptions/AutocompleteDropdownNoOptions.js +12 -0
- package/__inner__/esm/components/AutocompleteNext/components/AutocompleteDropdown/components/AutocompleteDropdownNoOptions/index.d.ts +1 -0
- package/__inner__/esm/components/AutocompleteNext/components/AutocompleteDropdown/components/AutocompleteDropdownNoOptions/index.js +1 -0
- package/__inner__/esm/components/AutocompleteNext/components/AutocompleteDropdown/components/index.d.ts +3 -0
- package/__inner__/esm/components/AutocompleteNext/components/AutocompleteDropdown/components/index.js +3 -0
- package/__inner__/esm/components/AutocompleteNext/components/AutocompleteDropdown/constants.d.ts +3 -0
- package/__inner__/esm/components/AutocompleteNext/components/AutocompleteDropdown/constants.js +3 -0
- package/__inner__/esm/components/AutocompleteNext/components/AutocompleteDropdown/helpers.d.ts +17 -0
- package/__inner__/esm/components/AutocompleteNext/components/AutocompleteDropdown/helpers.js +30 -0
- package/__inner__/esm/components/AutocompleteNext/components/AutocompleteDropdown/index.d.ts +3 -0
- package/__inner__/esm/components/AutocompleteNext/components/AutocompleteDropdown/index.js +3 -0
- package/__inner__/esm/components/AutocompleteNext/components/AutocompleteDropdown/types.d.ts +45 -0
- package/__inner__/esm/components/AutocompleteNext/components/AutocompleteDropdown/types.js +1 -0
- package/__inner__/esm/components/AutocompleteNext/components/AutocompleteDropdown/utils/index.d.ts +2 -0
- package/__inner__/esm/components/AutocompleteNext/components/AutocompleteDropdown/utils/index.js +2 -0
- package/__inner__/esm/components/AutocompleteNext/components/AutocompleteDropdown/utils/useDataListNavigation.d.ts +20 -0
- package/__inner__/esm/components/AutocompleteNext/components/AutocompleteDropdown/utils/useDataListNavigation.js +67 -0
- package/__inner__/esm/components/AutocompleteNext/components/AutocompleteDropdown/utils/useScrollContainerToElement.d.ts +3 -0
- package/__inner__/esm/components/AutocompleteNext/components/AutocompleteDropdown/utils/useScrollContainerToElement.js +11 -0
- package/__inner__/esm/components/AutocompleteNext/components/AutocompleteInput/AutocompleteInput.d.ts +2 -0
- package/__inner__/esm/components/AutocompleteNext/components/AutocompleteInput/AutocompleteInput.js +35 -0
- package/__inner__/esm/components/AutocompleteNext/components/AutocompleteInput/components/AutocompleteInputMultiple.d.ts +2 -0
- package/__inner__/esm/components/AutocompleteNext/components/AutocompleteInput/components/AutocompleteInputMultiple.js +109 -0
- package/__inner__/esm/components/AutocompleteNext/components/AutocompleteInput/components/helpers.d.ts +5 -0
- package/__inner__/esm/components/AutocompleteNext/components/AutocompleteInput/components/helpers.js +29 -0
- package/__inner__/esm/components/AutocompleteNext/components/AutocompleteInput/components/index.d.ts +1 -0
- package/__inner__/esm/components/AutocompleteNext/components/AutocompleteInput/components/index.js +1 -0
- package/__inner__/esm/components/AutocompleteNext/components/AutocompleteInput/components/types.d.ts +17 -0
- package/__inner__/esm/components/AutocompleteNext/components/AutocompleteInput/components/types.js +1 -0
- package/__inner__/esm/components/AutocompleteNext/components/AutocompleteInput/helpers.d.ts +3 -0
- package/__inner__/esm/components/AutocompleteNext/components/AutocompleteInput/index.d.ts +2 -0
- package/__inner__/esm/components/AutocompleteNext/components/AutocompleteInput/index.js +2 -0
- package/__inner__/esm/components/AutocompleteNext/components/AutocompleteInput/types.d.ts +26 -0
- package/__inner__/esm/components/AutocompleteNext/components/AutocompleteInput/types.js +1 -0
- package/__inner__/esm/components/AutocompleteNext/components/AutocompleteRenderRight/AutocompleteRenderRight.d.ts +8 -0
- package/__inner__/esm/components/AutocompleteNext/components/AutocompleteRenderRight/AutocompleteRenderRight.js +24 -0
- package/__inner__/esm/components/AutocompleteNext/components/AutocompleteRenderRight/index.d.ts +1 -0
- package/__inner__/esm/components/AutocompleteNext/components/AutocompleteRenderRight/index.js +1 -0
- package/__inner__/esm/components/AutocompleteNext/components/index.d.ts +3 -0
- package/__inner__/esm/components/AutocompleteNext/components/index.js +3 -0
- package/__inner__/esm/components/AutocompleteNext/constants.d.ts +10 -0
- package/__inner__/esm/components/AutocompleteNext/constants.js +10 -0
- package/__inner__/esm/components/AutocompleteNext/helpers.d.ts +152 -0
- package/__inner__/esm/components/AutocompleteNext/helpers.js +9 -0
- package/__inner__/esm/components/AutocompleteNext/index.d.ts +2 -0
- package/__inner__/esm/components/AutocompleteNext/index.js +2 -0
- package/__inner__/esm/components/AutocompleteNext/types.d.ts +133 -0
- package/__inner__/esm/components/AutocompleteNext/types.js +1 -0
- package/__inner__/esm/components/DataList/DataList.js +17 -24
- package/__inner__/esm/components/DataList/helpers.d.ts +3 -0
- package/__inner__/esm/components/DataList/helpers.js +2 -0
- package/__inner__/esm/components/DataList/{helpers → utils}/index.d.ts +0 -1
- package/__inner__/esm/components/DataList/{helpers → utils}/index.js +0 -1
- package/__inner__/esm/components/DatePicker/DatePicker.d.ts +2 -2
- package/__inner__/esm/components/DatePicker/DatePicker.js +1 -1
- package/__inner__/esm/components/FieldControl/FieldControl.css +4 -0
- package/__inner__/esm/components/FieldInput/FieldInput.d.ts +1 -9
- package/__inner__/esm/components/FieldInput/FieldInput.js +8 -3
- package/__inner__/esm/components/FieldInput/constants.d.ts +1 -0
- package/__inner__/esm/components/FieldInput/constants.js +1 -0
- package/__inner__/esm/components/FieldInput/index.d.ts +1 -0
- package/__inner__/esm/components/FieldInput/index.js +1 -0
- package/__inner__/esm/components/FieldInput/types.d.ts +11 -0
- package/__inner__/esm/components/FieldInput/types.js +1 -0
- package/__inner__/esm/components/FieldLabel/FieldLabel.css +1 -0
- package/__inner__/esm/components/Grid/Grid.css +4 -0
- package/__inner__/esm/components/Input/Input.css +6 -9
- package/__inner__/esm/components/Input/types.d.ts +2 -3
- package/__inner__/esm/components/InputNumber/InputNumber.css +0 -5
- package/__inner__/esm/components/Tag/Tag.css +1 -0
- package/__inner__/esm/components/TagNext/Tag.css +11 -4
- package/__inner__/esm/components/TagNext/Tag.js +2 -2
- package/__inner__/esm/components/TagNext/constants.d.ts +1 -1
- package/__inner__/esm/components/TagNext/constants.js +1 -1
- package/__inner__/esm/components/TagNext/types.d.ts +6 -3
- package/__inner__/esm/components/Textarea/Textarea.css +0 -5
- package/__inner__/esm/components/ThemeProvider/types.d.ts +2 -0
- package/__inner__/esm/hooks/useElementSize/index.d.ts +1 -0
- package/__inner__/esm/hooks/useElementSize/index.js +1 -0
- package/__inner__/esm/hooks/useElementSize/useElementSize.d.ts +6 -0
- package/__inner__/esm/hooks/useElementSize/useElementSize.js +7 -0
- package/__inner__/esm/hooks/useResizeObserver/index.d.ts +1 -0
- package/__inner__/esm/hooks/useResizeObserver/index.js +1 -0
- package/__inner__/esm/hooks/useResizeObserver/useResizeObserver.d.ts +4 -0
- package/__inner__/esm/hooks/useResizeObserver/useResizeObserver.js +46 -0
- package/__inner__/esm/locale/locale.js +21 -0
- package/__inner__/esm/utils/isNotNil.d.ts +1 -0
- package/__inner__/esm/utils/isNotNil.js +3 -0
- package/package.json +4 -4
- package/useElementSize/package.json +5 -0
- package/useResizeObserver/package.json +5 -0
- package/__inner__/cjs/components/DataList/helpers/types.d.ts +0 -10
- package/__inner__/esm/components/DataList/helpers/types.d.ts +0 -10
- /package/__inner__/cjs/components/{DataList/helpers/types.js → AutocompleteNext/components/AutocompleteInput/helpers.js} +0 -0
- /package/__inner__/cjs/components/DataList/{helpers → utils}/lastSelectedValue.d.ts +0 -0
- /package/__inner__/cjs/components/DataList/{helpers → utils}/lastSelectedValue.js +0 -0
- /package/__inner__/cjs/components/DataList/{helpers → utils}/useDataListNavigation.d.ts +0 -0
- /package/__inner__/cjs/components/DataList/{helpers → utils}/useDataListNavigation.js +0 -0
- /package/__inner__/cjs/components/DataList/{helpers → utils}/useScrollContainerToElement.d.ts +0 -0
- /package/__inner__/cjs/components/DataList/{helpers → utils}/useScrollContainerToElement.js +0 -0
- /package/__inner__/esm/components/{DataList/helpers/types.js → AutocompleteNext/components/AutocompleteInput/helpers.js} +0 -0
- /package/__inner__/esm/components/DataList/{helpers → utils}/lastSelectedValue.d.ts +0 -0
- /package/__inner__/esm/components/DataList/{helpers → utils}/lastSelectedValue.js +0 -0
- /package/__inner__/esm/components/DataList/{helpers → utils}/useDataListNavigation.d.ts +0 -0
- /package/__inner__/esm/components/DataList/{helpers → utils}/useDataListNavigation.js +0 -0
- /package/__inner__/esm/components/DataList/{helpers → utils}/useScrollContainerToElement.d.ts +0 -0
- /package/__inner__/esm/components/DataList/{helpers → utils}/useScrollContainerToElement.js +0 -0
|
@@ -0,0 +1,213 @@
|
|
|
1
|
+
import { __assign, __read, __rest, __spreadArray } from "tslib";
|
|
2
|
+
import './Autocomplete.css';
|
|
3
|
+
import React, { useEffect, forwardRef, useRef, useState } from 'react';
|
|
4
|
+
import { useControlled } from '../../hooks/useControlled';
|
|
5
|
+
import { useElementSize } from '../../hooks/useElementSize';
|
|
6
|
+
import { useMultiRef } from '../../hooks/useMultiRef';
|
|
7
|
+
import { useMutableRef } from '../../hooks/useMutableRef';
|
|
8
|
+
import { useThemeProps } from '../../hooks/useThemeProps';
|
|
9
|
+
import { cn } from '../../utils/classname';
|
|
10
|
+
import { isKeys } from '../../utils/isKeys';
|
|
11
|
+
import { AutocompleteDropdown, AutocompleteInput } from './components';
|
|
12
|
+
import { AUTOCOMPLETE_DEFAULT_SIZE, AUTOCOMPLETE_DEFAULT_DISABLED, AUTOCOMPLETE_DEFAULT_REQUIRED, AUTOCOMPLETE_DEFAULT_AUTOFOCUS, AUTOCOMPLETE_DEFAULT_FULLWIDTH, AUTOCOMPLETE_DEFAULT_ALLOW_CUSTOM_VALUE, AUTOCOMPLETE_DEFAULT_DISABLE_CLEAR_BUTTON, AUTOCOMPLETE_DEFAULT_DISABLE_SHOW_CHEVRON, AUTOCOMPLETE_DEFAULT_DISABLE_CLOSE_ON_SELECT, AUTOCOMPLETE_DEFAULT_DISABLE_SHOW_EMPTY_OPTIONS_LIST, } from './constants';
|
|
13
|
+
import { withDefaultGetters, isMultipleParams, isNotMultipleParams, } from './helpers';
|
|
14
|
+
export var cnAutocomplete = cn('AutocompleteNext');
|
|
15
|
+
function AutocompleteRender(inProps, ref) {
|
|
16
|
+
var props = useThemeProps({
|
|
17
|
+
props: inProps,
|
|
18
|
+
name: 'AutocompleteNext',
|
|
19
|
+
});
|
|
20
|
+
var _a = withDefaultGetters(props), _b = _a.disabled, disabled = _b === void 0 ? AUTOCOMPLETE_DEFAULT_DISABLED : _b, _c = _a.required, required = _c === void 0 ? AUTOCOMPLETE_DEFAULT_REQUIRED : _c, _d = _a.autoFocus, autoFocus = _d === void 0 ? AUTOCOMPLETE_DEFAULT_AUTOFOCUS : _d, _e = _a.fullWidth, fullWidth = _e === void 0 ? AUTOCOMPLETE_DEFAULT_FULLWIDTH : _e, _f = _a.size, size = _f === void 0 ? AUTOCOMPLETE_DEFAULT_SIZE : _f, _g = _a.allowCustomValue, allowCustomValue = _g === void 0 ? AUTOCOMPLETE_DEFAULT_ALLOW_CUSTOM_VALUE : _g, _h = _a.disableShowChevron, disableShowChevron = _h === void 0 ? AUTOCOMPLETE_DEFAULT_DISABLE_SHOW_CHEVRON : _h, _j = _a.disableClearButton, disableClearButton = _j === void 0 ? AUTOCOMPLETE_DEFAULT_DISABLE_CLEAR_BUTTON : _j, _k = _a.disableCloseOnSelect, disableCloseOnSelect = _k === void 0 ? AUTOCOMPLETE_DEFAULT_DISABLE_CLOSE_ON_SELECT : _k, _l = _a.disableShowEmptyOptionsList, disableShowEmptyOptionsList = _l === void 0 ? AUTOCOMPLETE_DEFAULT_DISABLE_SHOW_EMPTY_OPTIONS_LIST : _l, limitTags = _a.limitTags, renderInput = _a.renderInput, multiple = _a.multiple, searchFunctionProp = _a.searchFunction, inputValueProp = _a.inputValue, valueProp = _a.value, options = _a.options, defaultValue = _a.defaultValue, onInputChange = _a.onInputChange, getOptionKey = _a.getOptionKey, getOptionLabel = _a.getOptionLabel, getOptionDisabled = _a.getOptionDisabled, onCloseProp = _a.onClose, onOpenProp = _a.onOpen, openProp = _a.open, defaultOpen = _a.defaultOpen, loading = _a.loading, inputProps = _a.inputProps, bodyProps = _a.bodyProps, onKeyDown = _a.onKeyDown, noOptionsText = _a.noOptionsText, clearText = _a.clearText, openText = _a.openText, renderOption = _a.renderOption, loadingText = _a.loadingText, closeText = _a.closeText, listProps = _a.listProps, popoverProps = _a.popoverProps, onChangeProp = _a.onChange, other = __rest(_a, ["disabled", "required", "autoFocus", "fullWidth", "size", "allowCustomValue", "disableShowChevron", "disableClearButton", "disableCloseOnSelect", "disableShowEmptyOptionsList", "limitTags", "renderInput", "multiple", "searchFunction", "inputValue", "value", "options", "defaultValue", "onInputChange", "getOptionKey", "getOptionLabel", "getOptionDisabled", "onClose", "onOpen", "open", "defaultOpen", "loading", "inputProps", "bodyProps", "onKeyDown", "noOptionsText", "clearText", "openText", "renderOption", "loadingText", "closeText", "listProps", "popoverProps", "onChange"]);
|
|
21
|
+
var _m = useElementSize(), inputRef = _m.ref, height = _m.height;
|
|
22
|
+
var lastInputValue = useRef('');
|
|
23
|
+
var anchorRef = useRef(null);
|
|
24
|
+
var inputBodyRef = useMultiRef([anchorRef, bodyProps === null || bodyProps === void 0 ? void 0 : bodyProps.ref]);
|
|
25
|
+
var rootRef = useMultiRef([ref, inputRef]);
|
|
26
|
+
var _o = __read(useControlled({
|
|
27
|
+
value: inputValueProp,
|
|
28
|
+
defaultValue: '',
|
|
29
|
+
name: 'AutocompleteNext',
|
|
30
|
+
state: 'inputValue',
|
|
31
|
+
}), 2), inputValue = _o[0], setInputValue = _o[1];
|
|
32
|
+
var _p = __read(useControlled({
|
|
33
|
+
value: valueProp,
|
|
34
|
+
defaultValue: defaultValue,
|
|
35
|
+
name: 'AutocompleteNext',
|
|
36
|
+
state: 'value',
|
|
37
|
+
}), 2), valueState = _p[0], setValueState = _p[1];
|
|
38
|
+
var _q = __read(useControlled({
|
|
39
|
+
value: openProp,
|
|
40
|
+
defaultValue: defaultOpen,
|
|
41
|
+
name: 'AutocompleteNext',
|
|
42
|
+
state: 'open',
|
|
43
|
+
}), 2), open = _q[0], setOpen = _q[1];
|
|
44
|
+
var searchFunctionDefault = function (options, searchValue) {
|
|
45
|
+
return options === null || options === void 0 ? void 0 : options.filter(function (option) {
|
|
46
|
+
return getOptionLabel(option).toLowerCase().includes(searchValue.toLowerCase());
|
|
47
|
+
});
|
|
48
|
+
};
|
|
49
|
+
var savedOnInputChange = useMutableRef(onInputChange);
|
|
50
|
+
var savedGetOptionLabel = useMutableRef(getOptionLabel);
|
|
51
|
+
var _r = __read(useState(__spreadArray([], __read(options), false)), 2), filteredOptions = _r[0], setFilteredOptions = _r[1];
|
|
52
|
+
var searchFunction = searchFunctionProp || searchFunctionDefault;
|
|
53
|
+
var hasOptions = !!(filteredOptions === null || filteredOptions === void 0 ? void 0 : filteredOptions.length);
|
|
54
|
+
var _s = __read(useState(undefined), 2), search = _s[0], setSearch = _s[1];
|
|
55
|
+
var changeInputValue = function (e, value) {
|
|
56
|
+
var _a;
|
|
57
|
+
setInputValue(value);
|
|
58
|
+
(_a = savedOnInputChange.current) === null || _a === void 0 ? void 0 : _a.call(savedOnInputChange, e, value);
|
|
59
|
+
};
|
|
60
|
+
var callOnChange = function (e, option) {
|
|
61
|
+
var _a, _b, _c;
|
|
62
|
+
var inputValue = '';
|
|
63
|
+
var onChange = function (e, option) {
|
|
64
|
+
setValueState(option);
|
|
65
|
+
onChangeProp === null || onChangeProp === void 0 ? void 0 : onChangeProp(e, option);
|
|
66
|
+
};
|
|
67
|
+
var params = __assign(__assign({}, inProps), { onChange: onChange, value: valueState });
|
|
68
|
+
if (isNotMultipleParams(params)) {
|
|
69
|
+
inputValue = option ? getOptionLabel(option) : '';
|
|
70
|
+
(_a = params.onChange) === null || _a === void 0 ? void 0 : _a.call(params, e, option);
|
|
71
|
+
}
|
|
72
|
+
if (isMultipleParams(params)) {
|
|
73
|
+
if (option === null) {
|
|
74
|
+
(_b = params.onChange) === null || _b === void 0 ? void 0 : _b.call(params, e, null);
|
|
75
|
+
}
|
|
76
|
+
else {
|
|
77
|
+
var value = params.value || [];
|
|
78
|
+
var optionKey_1 = option && getOptionKey(option);
|
|
79
|
+
var optionIsSelected = value.find(function (item) { return getOptionKey(item) === optionKey_1; });
|
|
80
|
+
// eslint-disable-next-line no-nested-ternary
|
|
81
|
+
var res = optionIsSelected
|
|
82
|
+
? value.filter(function (option) { return getOptionKey(option) !== optionKey_1; })
|
|
83
|
+
: option
|
|
84
|
+
? __spreadArray(__spreadArray([], __read(value), false), [option], false) : value;
|
|
85
|
+
(_c = params.onChange) === null || _c === void 0 ? void 0 : _c.call(params, e, res);
|
|
86
|
+
}
|
|
87
|
+
setSearch(undefined);
|
|
88
|
+
}
|
|
89
|
+
changeInputValue(null, inputValue);
|
|
90
|
+
};
|
|
91
|
+
/** Эффект — фильтрация списка при изменении опций */
|
|
92
|
+
useEffect(function () {
|
|
93
|
+
if (!open)
|
|
94
|
+
return;
|
|
95
|
+
setFilteredOptions(search ? search(options) : __spreadArray([], __read(options), false));
|
|
96
|
+
}, [search, options, open, searchFunctionProp]);
|
|
97
|
+
/** Эффект — синхронизируем значение текстового поля со значением в списке */
|
|
98
|
+
useEffect(function () {
|
|
99
|
+
var _a;
|
|
100
|
+
if (allowCustomValue || multiple)
|
|
101
|
+
return;
|
|
102
|
+
var value = valueState || '';
|
|
103
|
+
var params = __assign(__assign({}, inProps), { value: value });
|
|
104
|
+
if (isNotMultipleParams(params)) {
|
|
105
|
+
lastInputValue.current = (_a = savedGetOptionLabel.current) === null || _a === void 0 ? void 0 : _a.call(savedGetOptionLabel, params.value);
|
|
106
|
+
if (lastInputValue.current !== inputValue)
|
|
107
|
+
changeInputValue(null, lastInputValue.current);
|
|
108
|
+
}
|
|
109
|
+
}, [valueState, allowCustomValue]);
|
|
110
|
+
/** Эффект — автофокусировка в текстовом поле */
|
|
111
|
+
useEffect(function () {
|
|
112
|
+
var _a;
|
|
113
|
+
if (autoFocus)
|
|
114
|
+
(_a = anchorRef.current) === null || _a === void 0 ? void 0 : _a.focus();
|
|
115
|
+
}, [autoFocus]);
|
|
116
|
+
/** Ждём выполнения анимации на закрытие и делаем сброс функции фильтрации */
|
|
117
|
+
var handleExited = function () {
|
|
118
|
+
var _a;
|
|
119
|
+
setSearch(undefined);
|
|
120
|
+
(_a = popoverProps === null || popoverProps === void 0 ? void 0 : popoverProps.onExited) === null || _a === void 0 ? void 0 : _a.call(popoverProps);
|
|
121
|
+
};
|
|
122
|
+
/** Закрытие */
|
|
123
|
+
var handleClose = function () {
|
|
124
|
+
setOpen(false);
|
|
125
|
+
onCloseProp === null || onCloseProp === void 0 ? void 0 : onCloseProp();
|
|
126
|
+
};
|
|
127
|
+
/** Открытие */
|
|
128
|
+
var handleOpen = function () {
|
|
129
|
+
setOpen(true);
|
|
130
|
+
onOpenProp === null || onOpenProp === void 0 ? void 0 : onOpenProp();
|
|
131
|
+
};
|
|
132
|
+
/** Переключатель открытия и закрытия */
|
|
133
|
+
var handleToggle = function () {
|
|
134
|
+
if (disabled)
|
|
135
|
+
return;
|
|
136
|
+
if (open)
|
|
137
|
+
handleClose();
|
|
138
|
+
else
|
|
139
|
+
handleOpen();
|
|
140
|
+
};
|
|
141
|
+
/** Очистка поля */
|
|
142
|
+
var handleClear = function (e) {
|
|
143
|
+
callOnChange(e, null);
|
|
144
|
+
setSearch(undefined);
|
|
145
|
+
};
|
|
146
|
+
/** Актуализация значения текстового поля после его покидания */
|
|
147
|
+
var handleBlur = function (e) {
|
|
148
|
+
var _a;
|
|
149
|
+
(_a = inputProps === null || inputProps === void 0 ? void 0 : inputProps.onBlur) === null || _a === void 0 ? void 0 : _a.call(inputProps, e);
|
|
150
|
+
if (allowCustomValue)
|
|
151
|
+
return;
|
|
152
|
+
if (inputValue !== lastInputValue.current) {
|
|
153
|
+
changeInputValue(null, lastInputValue.current);
|
|
154
|
+
}
|
|
155
|
+
};
|
|
156
|
+
/** Открытие списка по клику на текстовом поле */
|
|
157
|
+
var handleClickOnInput = function (e) {
|
|
158
|
+
var _a;
|
|
159
|
+
handleToggle();
|
|
160
|
+
(_a = inputProps === null || inputProps === void 0 ? void 0 : inputProps.onClick) === null || _a === void 0 ? void 0 : _a.call(inputProps, e);
|
|
161
|
+
};
|
|
162
|
+
/** Управление элементом контроля через клавиатуру */
|
|
163
|
+
var handleKeyDown = function (e) {
|
|
164
|
+
if (isKeys(e, ['ArrowDown', 'ArrowUp']) && !open) {
|
|
165
|
+
e.preventDefault();
|
|
166
|
+
handleToggle();
|
|
167
|
+
}
|
|
168
|
+
var params = __assign(__assign({}, inProps), { value: valueState });
|
|
169
|
+
if (isMultipleParams(params) && isKeys(e, ['Backspace']) && !inputValue) {
|
|
170
|
+
var value = params.value;
|
|
171
|
+
if (value)
|
|
172
|
+
callOnChange(e, value[value.length - 1] || null);
|
|
173
|
+
}
|
|
174
|
+
onKeyDown === null || onKeyDown === void 0 ? void 0 : onKeyDown(e);
|
|
175
|
+
};
|
|
176
|
+
/** Событие ввода значения в текстовом поле */
|
|
177
|
+
var handleChangeInput = function (e) {
|
|
178
|
+
var value = e.target.value;
|
|
179
|
+
// Открываем список при вводе первого символа (при условии, что список еще не открыт)
|
|
180
|
+
if (value.length && !open)
|
|
181
|
+
handleOpen();
|
|
182
|
+
if (multiple)
|
|
183
|
+
changeInputValue(e, value);
|
|
184
|
+
if (value && !multiple)
|
|
185
|
+
changeInputValue(e, value);
|
|
186
|
+
if (!value && !multiple)
|
|
187
|
+
callOnChange(e, null);
|
|
188
|
+
// Задаем функцию фильтрации
|
|
189
|
+
setSearch(function () { return function (options) { return searchFunction(__spreadArray([], __read(options), false), value); }; });
|
|
190
|
+
};
|
|
191
|
+
/** Событие выбора значения из раскрывающегося списка */
|
|
192
|
+
var handleChangeDropdown = function (e, option) {
|
|
193
|
+
callOnChange(e, option);
|
|
194
|
+
// Закрываем список после выбора
|
|
195
|
+
if (!disableCloseOnSelect)
|
|
196
|
+
handleClose();
|
|
197
|
+
};
|
|
198
|
+
var autocompleteInputProps = __assign({ open: open, size: size, limitTags: limitTags, disabled: disabled, multiple: multiple, required: required, fullWidth: fullWidth, clearText: clearText, closeText: closeText, openText: openText, inputProps: __assign(__assign({}, inputProps), { onBlur: handleBlur, onClick: handleClickOnInput }), bodyProps: __assign(__assign({}, bodyProps), { ref: inputBodyRef }), renderInput: renderInput, getOptionKey: getOptionKey, getOptionLabel: getOptionLabel, getOptionDisabled: getOptionDisabled, value: inputValue, disableShowChevron: disableShowChevron, disableClearButton: disableClearButton, onClear: handleClear, onOpen: handleToggle, onRemoveTag: callOnChange, onKeyDown: handleKeyDown, onChange: handleChangeInput, selectedOptions: valueState }, other);
|
|
199
|
+
var update = useRef();
|
|
200
|
+
var setUpdate = function (func) {
|
|
201
|
+
if (func) {
|
|
202
|
+
update.current = func;
|
|
203
|
+
}
|
|
204
|
+
};
|
|
205
|
+
useEffect(function () {
|
|
206
|
+
var _a;
|
|
207
|
+
(_a = update.current) === null || _a === void 0 ? void 0 : _a.call(update);
|
|
208
|
+
}, [height]);
|
|
209
|
+
return (React.createElement(React.Fragment, null,
|
|
210
|
+
React.createElement(AutocompleteInput, __assign({}, autocompleteInputProps, { ref: rootRef })),
|
|
211
|
+
React.createElement(AutocompleteDropdown, { open: open, size: size, loading: loading, setUpdate: setUpdate, value: valueState, multiple: multiple, onClose: handleClose, listProps: listProps, anchorRef: anchorRef, hasOptions: hasOptions, options: filteredOptions, loadingText: loadingText, renderOption: renderOption, getOptionKey: getOptionKey, noOptionsText: noOptionsText, onChange: handleChangeDropdown, getOptionLabel: getOptionLabel, getOptionDisabled: getOptionDisabled, disableShowEmptyOptionsList: disableShowEmptyOptionsList, popoverProps: __assign(__assign({}, popoverProps), { onExited: handleExited }) })));
|
|
212
|
+
}
|
|
213
|
+
export var Autocomplete = forwardRef(AutocompleteRender);
|
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
import { __assign } from "tslib";
|
|
2
|
+
import React, { useEffect, useRef, useMemo, forwardRef } from 'react';
|
|
3
|
+
import { useEventListener } from '../../../../hooks/useEventListener';
|
|
4
|
+
import { useMultiRef } from '../../../../hooks/useMultiRef';
|
|
5
|
+
import { usePrevious } from '../../../../hooks/usePrevious';
|
|
6
|
+
import { getPaperSizeToFormElement } from '../../../../utils/getPaperSizeToFormElement';
|
|
7
|
+
import { isKey } from '../../../../utils/isKey';
|
|
8
|
+
import { isNotNil } from '../../../../utils/isNotNil';
|
|
9
|
+
import { scrollContainerToElement } from '../../../../utils/scrollContainerToElement';
|
|
10
|
+
import { List, ListItem, ListItemText } from '../../../List';
|
|
11
|
+
import { Paper } from '../../../Paper';
|
|
12
|
+
import { Popover } from '../../../Popover';
|
|
13
|
+
import { cnAutocomplete } from '../../index';
|
|
14
|
+
import { AutocompleteDropdownCheckIcon, AutocompleteDropdownLoading, AutocompleteDropdownNoOptions, } from './components';
|
|
15
|
+
import { AUTOCOMPLETE_DROPDOWN_DEFAULT_SIZE } from './constants';
|
|
16
|
+
import { isMultipleParams, isNotMultipleParams, normalizeOptions, } from './helpers';
|
|
17
|
+
import { useDataListNavigation } from './utils';
|
|
18
|
+
var AutocompleteDropdownRender = function (inProps, ref) {
|
|
19
|
+
var _a = inProps.size, size = _a === void 0 ? AUTOCOMPLETE_DROPDOWN_DEFAULT_SIZE : _a, open = inProps.open, loading = inProps.loading, onClose = inProps.onClose, options = inProps.options, onChange = inProps.onChange, anchorRef = inProps.anchorRef, className = inProps.className, listProps = inProps.listProps, hasOptions = inProps.hasOptions, loadingText = inProps.loadingText, popoverProps = inProps.popoverProps, getOptionKey = inProps.getOptionKey, noOptionsText = inProps.noOptionsText, getOptionLabel = inProps.getOptionLabel, getOptionDisabled = inProps.getOptionDisabled, disableShowEmptyOptionsList = inProps.disableShowEmptyOptionsList, setUpdate = inProps.setUpdate, renderOptionProp = inProps.renderOption;
|
|
20
|
+
var radius = getPaperSizeToFormElement(size);
|
|
21
|
+
var showNoOptions = !hasOptions && !loading && !disableShowEmptyOptionsList;
|
|
22
|
+
var showLoading = !hasOptions && !!loading;
|
|
23
|
+
var rootRef = useRef(null);
|
|
24
|
+
var listRef = useRef(null);
|
|
25
|
+
var _b = useMemo(function () { return normalizeOptions(options, getOptionKey, getOptionDisabled); }, [options, getOptionKey, getOptionDisabled]), entities = _b.entities, items = _b.idxs;
|
|
26
|
+
// Определяет последнюю выбранную опцию
|
|
27
|
+
var lastSelected = useMemo(function () {
|
|
28
|
+
var _a, _b;
|
|
29
|
+
if (isNotMultipleParams(inProps)) {
|
|
30
|
+
var value = inProps.value;
|
|
31
|
+
var key = value && getOptionKey(value);
|
|
32
|
+
return key && ((_a = entities.byKey[key]) === null || _a === void 0 ? void 0 : _a.idx);
|
|
33
|
+
}
|
|
34
|
+
if (isMultipleParams(inProps)) {
|
|
35
|
+
var value = inProps.value;
|
|
36
|
+
var lastValue = value === null || value === void 0 ? void 0 : value[value.length - 1];
|
|
37
|
+
var lastKey = lastValue && getOptionKey(lastValue);
|
|
38
|
+
return lastKey && ((_b = entities.byKey[lastKey]) === null || _b === void 0 ? void 0 : _b.idx);
|
|
39
|
+
}
|
|
40
|
+
return undefined;
|
|
41
|
+
}, [inProps, entities]);
|
|
42
|
+
// Навигация по списку
|
|
43
|
+
var _c = useDataListNavigation({
|
|
44
|
+
items: items,
|
|
45
|
+
active: open,
|
|
46
|
+
selected: lastSelected,
|
|
47
|
+
onSelect: function (event, idx) {
|
|
48
|
+
var _a;
|
|
49
|
+
var option = isNotNil(idx) ? (_a = entities.byIdx[idx]) === null || _a === void 0 ? void 0 : _a.option : undefined;
|
|
50
|
+
if (option)
|
|
51
|
+
onChange === null || onChange === void 0 ? void 0 : onChange(event, option);
|
|
52
|
+
},
|
|
53
|
+
}), current = _c.current, focused = _c.focused, onKeyDown = _c.onKeyDown, onClick = _c.onClick;
|
|
54
|
+
var previousCurrent = usePrevious(current);
|
|
55
|
+
useEffect(function () {
|
|
56
|
+
var _a, _b;
|
|
57
|
+
var firstCurrent = !isNotNil(previousCurrent) && isNotNil(current) ? current : undefined;
|
|
58
|
+
var selected = focused !== null && focused !== void 0 ? focused : firstCurrent;
|
|
59
|
+
if (selected !== undefined) {
|
|
60
|
+
// Прокрутка списка
|
|
61
|
+
scrollContainerToElement({
|
|
62
|
+
container: rootRef.current,
|
|
63
|
+
element: (_b = (_a = listRef.current) === null || _a === void 0 ? void 0 : _a.children) === null || _b === void 0 ? void 0 : _b[+selected],
|
|
64
|
+
behavior: isNotNil(focused) ? 'smooth' : 'instant',
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
}, [focused, current]);
|
|
68
|
+
// Назначает элементу контроля событие управления списком с клавиатуры
|
|
69
|
+
useEventListener({
|
|
70
|
+
eventName: 'keydown',
|
|
71
|
+
element: anchorRef,
|
|
72
|
+
handler: function (event) { return onKeyDown === null || onKeyDown === void 0 ? void 0 : onKeyDown(event); },
|
|
73
|
+
});
|
|
74
|
+
// Закрывает список по нажатию на клавишу {Tab}
|
|
75
|
+
useEventListener({
|
|
76
|
+
active: open,
|
|
77
|
+
eventName: 'keydown',
|
|
78
|
+
element: anchorRef,
|
|
79
|
+
handler: function (event) {
|
|
80
|
+
if (isKey(event, 'Tab'))
|
|
81
|
+
onClose === null || onClose === void 0 ? void 0 : onClose();
|
|
82
|
+
},
|
|
83
|
+
});
|
|
84
|
+
var handleOnMouseDownList = function (e) {
|
|
85
|
+
var _a;
|
|
86
|
+
e.preventDefault();
|
|
87
|
+
(_a = listProps === null || listProps === void 0 ? void 0 : listProps.onMouseDown) === null || _a === void 0 ? void 0 : _a.call(listProps, e);
|
|
88
|
+
};
|
|
89
|
+
/** Отображение опций */
|
|
90
|
+
var renderOptionDefault = function (_a) {
|
|
91
|
+
var props = _a.props, option = _a.option, selected = _a.state.selected;
|
|
92
|
+
return (React.createElement(ListItem, __assign({}, props),
|
|
93
|
+
React.createElement(ListItemText, { primary: getOptionLabel(option) }),
|
|
94
|
+
React.createElement(AutocompleteDropdownCheckIcon, { selected: selected })));
|
|
95
|
+
};
|
|
96
|
+
var renderOption = renderOptionProp || renderOptionDefault;
|
|
97
|
+
// Представление раскрывающегося списка
|
|
98
|
+
var renderChildren = useMemo(function () {
|
|
99
|
+
return options.map(function (option, idx) {
|
|
100
|
+
var isSelected;
|
|
101
|
+
var key = getOptionKey === null || getOptionKey === void 0 ? void 0 : getOptionKey(option);
|
|
102
|
+
var isFocused = idx === focused;
|
|
103
|
+
var isDisabled = getOptionDisabled(option);
|
|
104
|
+
if (isNotMultipleParams(inProps)) {
|
|
105
|
+
var value = inProps.value;
|
|
106
|
+
if (value)
|
|
107
|
+
isSelected = getOptionKey(value) === key;
|
|
108
|
+
}
|
|
109
|
+
if (isMultipleParams(inProps) && Array.isArray(inProps.value)) {
|
|
110
|
+
var value = inProps.value;
|
|
111
|
+
isSelected = !!value.find(function (option) { return getOptionKey(option) === key; });
|
|
112
|
+
}
|
|
113
|
+
return renderOption({
|
|
114
|
+
option: option,
|
|
115
|
+
state: {
|
|
116
|
+
key: key,
|
|
117
|
+
focused: isFocused,
|
|
118
|
+
selected: isSelected,
|
|
119
|
+
disabled: isDisabled,
|
|
120
|
+
},
|
|
121
|
+
props: {
|
|
122
|
+
key: "".concat(idx, "_").concat(key),
|
|
123
|
+
role: 'option',
|
|
124
|
+
'aria-selected': isSelected,
|
|
125
|
+
'aria-disabled': isDisabled,
|
|
126
|
+
className: cnAutocomplete('Option', {
|
|
127
|
+
disabled: isDisabled,
|
|
128
|
+
selected: isSelected,
|
|
129
|
+
focused: isFocused,
|
|
130
|
+
}),
|
|
131
|
+
onClick: function (e) {
|
|
132
|
+
if (isDisabled)
|
|
133
|
+
return;
|
|
134
|
+
onClick === null || onClick === void 0 ? void 0 : onClick(e, idx);
|
|
135
|
+
},
|
|
136
|
+
},
|
|
137
|
+
});
|
|
138
|
+
});
|
|
139
|
+
}, [
|
|
140
|
+
options,
|
|
141
|
+
focused,
|
|
142
|
+
renderOption,
|
|
143
|
+
getOptionKey,
|
|
144
|
+
lastSelected,
|
|
145
|
+
getOptionDisabled,
|
|
146
|
+
]);
|
|
147
|
+
return (React.createElement(Popover, __assign({ offset: [0, 4], strategy: "absolute", placement: "bottom-start", setUpdate: setUpdate, as: Paper, transitionProps: { classNames: 'AutocompleteNext-Dropdown-animation' }, className: cnAutocomplete('Dropdown', [className]), equalAnchorWidth: true, disableReturnFocus: true, disableEnforceFocus: true }, popoverProps, { open: open, radius: radius, onClose: onClose, anchorRef: anchorRef, ref: useMultiRef([ref, popoverProps === null || popoverProps === void 0 ? void 0 : popoverProps.ref, rootRef]) }),
|
|
148
|
+
React.createElement(List, __assign({ size: size, role: "listbox" }, listProps, { onMouseDown: handleOnMouseDownList, ref: useMultiRef([listRef, listProps === null || listProps === void 0 ? void 0 : listProps.ref]) }),
|
|
149
|
+
renderChildren,
|
|
150
|
+
React.createElement(AutocompleteDropdownNoOptions, { showNoOptions: showNoOptions, noOptionsText: noOptionsText }),
|
|
151
|
+
React.createElement(AutocompleteDropdownLoading, { showLoading: showLoading, loadingText: loadingText, size: size }))));
|
|
152
|
+
};
|
|
153
|
+
export var AutocompleteDropdown = forwardRef(AutocompleteDropdownRender);
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import './AutocompleteDropdownCheckIcon.css';
|
|
2
|
+
import React from 'react';
|
|
3
|
+
import { CheckIcon } from '@ozen-ui/icons';
|
|
4
|
+
import { cn } from '../../../../../../utils/classname';
|
|
5
|
+
import { getIconSizeToFormElement } from '../../../../../../utils/getIconSizeToFormElement';
|
|
6
|
+
import { ListItemIcon, useListContext } from '../../../../../List';
|
|
7
|
+
var cnAutocompleteDropdownCheckIcon = cn('AutocompleteDropdownCheckIcon');
|
|
8
|
+
export var AutocompleteDropdownCheckIcon = function (_a) {
|
|
9
|
+
var selected = _a.selected;
|
|
10
|
+
var size = useListContext().size;
|
|
11
|
+
return (React.createElement(ListItemIcon, { className: cnAutocompleteDropdownCheckIcon({ selected: selected }) },
|
|
12
|
+
React.createElement(CheckIcon, { size: getIconSizeToFormElement(size) })));
|
|
13
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './AutocompleteDropdownCheckIcon';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './AutocompleteDropdownCheckIcon';
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { FC } from 'react';
|
|
2
|
+
import type { AutocompleteProps } from '../../../../index';
|
|
3
|
+
export type AutocompleteDropdownLoadingProps = Pick<AutocompleteProps, 'loadingText' | 'size'> & {
|
|
4
|
+
showLoading: boolean;
|
|
5
|
+
};
|
|
6
|
+
export declare const AutocompleteDropdownLoading: FC<AutocompleteDropdownLoadingProps>;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { getIconSizeToFormElement } from '../../../../../../utils/getIconSizeToFormElement';
|
|
3
|
+
import { isNumber } from '../../../../../../utils/isNumber';
|
|
4
|
+
import { isString } from '../../../../../../utils/isString';
|
|
5
|
+
import { ListItem, ListItemIcon, ListItemText } from '../../../../../List';
|
|
6
|
+
import { Loader } from '../../../../../Loader';
|
|
7
|
+
import { AUTOCOMPLETE_DEFAULT_SIZE } from '../../../../constants';
|
|
8
|
+
export var AutocompleteDropdownLoading = function (_a) {
|
|
9
|
+
var _b = _a.size, sizeProp = _b === void 0 ? AUTOCOMPLETE_DEFAULT_SIZE : _b, showLoading = _a.showLoading, loadingText = _a.loadingText;
|
|
10
|
+
if (!showLoading) {
|
|
11
|
+
return null;
|
|
12
|
+
}
|
|
13
|
+
var size = getIconSizeToFormElement(sizeProp);
|
|
14
|
+
return isString(loadingText) || isNumber(loadingText) ? (React.createElement(ListItem, null,
|
|
15
|
+
React.createElement(ListItemIcon, null,
|
|
16
|
+
React.createElement(Loader, { size: size })),
|
|
17
|
+
React.createElement(ListItemText, { primary: loadingText }))) : (loadingText);
|
|
18
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './AutocompleteDropdownLoading';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './AutocompleteDropdownLoading';
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { FC } from 'react';
|
|
2
|
+
import type { AutocompleteProps } from '../../../../index';
|
|
3
|
+
export type AutocompleteDropdownNoOptionsProps = Pick<AutocompleteProps, 'noOptionsText'> & {
|
|
4
|
+
showNoOptions: boolean;
|
|
5
|
+
};
|
|
6
|
+
export declare const AutocompleteDropdownNoOptions: FC<AutocompleteDropdownNoOptionsProps>;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { isNumber } from '../../../../../../utils/isNumber';
|
|
3
|
+
import { isString } from '../../../../../../utils/isString';
|
|
4
|
+
import { ListItem, ListItemText } from '../../../../../List';
|
|
5
|
+
export var AutocompleteDropdownNoOptions = function (_a) {
|
|
6
|
+
var showNoOptions = _a.showNoOptions, noOptionsText = _a.noOptionsText;
|
|
7
|
+
if (!showNoOptions) {
|
|
8
|
+
return null;
|
|
9
|
+
}
|
|
10
|
+
return isString(noOptionsText) || isNumber(noOptionsText) ? (React.createElement(ListItem, null,
|
|
11
|
+
React.createElement(ListItemText, { primary: noOptionsText }))) : (noOptionsText);
|
|
12
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './AutocompleteDropdownNoOptions';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './AutocompleteDropdownNoOptions';
|
package/__inner__/esm/components/AutocompleteNext/components/AutocompleteDropdown/helpers.d.ts
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { AutocompleteDropdownProps } from './types';
|
|
2
|
+
export declare const isMultipleParams: <OPTION>(params: AutocompleteDropdownProps<OPTION, boolean>) => params is AutocompleteDropdownProps<OPTION, true>;
|
|
3
|
+
export declare const isNotMultipleParams: <OPTION>(params: AutocompleteDropdownProps<OPTION, boolean>) => params is AutocompleteDropdownProps<OPTION, false>;
|
|
4
|
+
export type NormalizedOptions<OPTION> = {
|
|
5
|
+
entities: {
|
|
6
|
+
byIdx: Record<string | number, {
|
|
7
|
+
option: OPTION;
|
|
8
|
+
key: string | number;
|
|
9
|
+
}>;
|
|
10
|
+
byKey: Record<string | number, {
|
|
11
|
+
option: OPTION;
|
|
12
|
+
idx: string | number;
|
|
13
|
+
}>;
|
|
14
|
+
};
|
|
15
|
+
idxs: (string | number)[];
|
|
16
|
+
};
|
|
17
|
+
export declare function normalizeOptions<OPTION>(options: OPTION[], getOptionKey: (option: OPTION) => string | number, getOptionDisabled: (option: OPTION) => boolean | undefined): NormalizedOptions<OPTION>;
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { __values } from "tslib";
|
|
2
|
+
export var isMultipleParams = function (params) { return !!params.multiple; };
|
|
3
|
+
export var isNotMultipleParams = function (params) { return !params.multiple; };
|
|
4
|
+
export function normalizeOptions(options, getOptionKey, getOptionDisabled) {
|
|
5
|
+
var e_1, _a;
|
|
6
|
+
var idx = 0;
|
|
7
|
+
var res = {
|
|
8
|
+
idxs: [],
|
|
9
|
+
entities: { byIdx: {}, byKey: {} },
|
|
10
|
+
};
|
|
11
|
+
try {
|
|
12
|
+
for (var options_1 = __values(options), options_1_1 = options_1.next(); !options_1_1.done; options_1_1 = options_1.next()) {
|
|
13
|
+
var option = options_1_1.value;
|
|
14
|
+
var key = getOptionKey(option);
|
|
15
|
+
res.entities.byIdx[idx] = { option: option, key: key };
|
|
16
|
+
res.entities.byKey[key] = { option: option, idx: idx };
|
|
17
|
+
if (!getOptionDisabled(option))
|
|
18
|
+
res.idxs.push(idx);
|
|
19
|
+
idx += 1;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
catch (e_1_1) { e_1 = { error: e_1_1 }; }
|
|
23
|
+
finally {
|
|
24
|
+
try {
|
|
25
|
+
if (options_1_1 && !options_1_1.done && (_a = options_1.return)) _a.call(options_1);
|
|
26
|
+
}
|
|
27
|
+
finally { if (e_1) throw e_1.error; }
|
|
28
|
+
}
|
|
29
|
+
return res;
|
|
30
|
+
}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import type { ReactNode, ReactElement, SyntheticEvent } from 'react';
|
|
2
|
+
import type { FormElementSizeVariant } from '../../../../types/FormElementSizeVariant';
|
|
3
|
+
import type { ListProps } from '../../../List';
|
|
4
|
+
import type { PopoverProps, PopoverRef } from '../../../Popover';
|
|
5
|
+
import type { AutocompletePropValue, AutocompletePropRenderOption, AutocompletePropGetOptionKey, AutocompleteDefaultOption, AutocompletePropGetOptionDisabled, AutocompletePropGetOptionLabel } from '../../index';
|
|
6
|
+
export type AutocompleteDropdownRef = PopoverRef;
|
|
7
|
+
export type AutocompleteDropdownOnChange<OPTION> = (e: SyntheticEvent | KeyboardEvent, value: OPTION | null) => void;
|
|
8
|
+
export type AutocompleteDropdownProps<OPTION = AutocompleteDefaultOption, MULTIPLE extends boolean = false> = {
|
|
9
|
+
/** Имя списка */
|
|
10
|
+
name?: string;
|
|
11
|
+
/** Содержимое компонента */
|
|
12
|
+
children?: never;
|
|
13
|
+
/** Если {true} из списка можно выбрать несколько вариантов */
|
|
14
|
+
multiple?: MULTIPLE;
|
|
15
|
+
/** Список вариантов выбора (опции) */
|
|
16
|
+
options: OPTION[];
|
|
17
|
+
/** Размер */
|
|
18
|
+
size?: FormElementSizeVariant;
|
|
19
|
+
/** Выбранное значение опции */
|
|
20
|
+
value?: AutocompletePropValue<OPTION, MULTIPLE>;
|
|
21
|
+
/** Функция обратного вызова, которая будет вызвана при выборе значения */
|
|
22
|
+
onChange?: AutocompleteDropdownOnChange<OPTION>;
|
|
23
|
+
/** Функция для кастомизации отображения опции */
|
|
24
|
+
renderOption?: AutocompletePropRenderOption<OPTION>;
|
|
25
|
+
/** Функция для определения уникального ключа элемента */
|
|
26
|
+
getOptionKey: AutocompletePropGetOptionKey<OPTION>;
|
|
27
|
+
/** Функция для определения названия элемента */
|
|
28
|
+
getOptionLabel: AutocompletePropGetOptionLabel<OPTION>;
|
|
29
|
+
/** Функция для определения заблокированного элемента */
|
|
30
|
+
getOptionDisabled: AutocompletePropGetOptionDisabled<OPTION>;
|
|
31
|
+
/** Если {true} не показывает список с отсутствующими опциями */
|
|
32
|
+
disableShowEmptyOptionsList?: boolean;
|
|
33
|
+
/** Текст компонента в состоянии загрузки */
|
|
34
|
+
loadingText?: ReactNode;
|
|
35
|
+
/** Текст компонента при отсутствующих опций */
|
|
36
|
+
noOptionsText?: ReactNode;
|
|
37
|
+
/** Свойства компонента Popover */
|
|
38
|
+
popoverProps?: Partial<Omit<PopoverProps, 'children' | 'open' | 'anchorRef' | 'onClose' | 'className'>>;
|
|
39
|
+
/** Свойства компонента List */
|
|
40
|
+
listProps?: Partial<Omit<ListProps, 'children'>>;
|
|
41
|
+
loading?: boolean;
|
|
42
|
+
hasOptions?: boolean;
|
|
43
|
+
'data-testid'?: string;
|
|
44
|
+
} & Pick<PopoverProps, 'open' | 'anchorRef' | 'onClose' | 'className' | 'setUpdate'>;
|
|
45
|
+
export type AutocompleteDropdownComponent = <OPTION = AutocompleteDefaultOption, MULTIPLE extends boolean = false>(props: AutocompleteDropdownProps<OPTION, MULTIPLE>) => ReactElement | null;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { MouseEvent } from 'react';
|
|
2
|
+
export type UseListNavigationItem = string | number | null;
|
|
3
|
+
export type UseListNavigationItems = UseListNavigationItem[];
|
|
4
|
+
export type UseListNavigationProps = {
|
|
5
|
+
active?: boolean;
|
|
6
|
+
items?: UseListNavigationItems;
|
|
7
|
+
selected?: UseListNavigationItem;
|
|
8
|
+
onSelect?(event: KeyboardEvent | MouseEvent<HTMLElement>, item?: UseListNavigationItem): void;
|
|
9
|
+
};
|
|
10
|
+
export type UseListNavigationState = {
|
|
11
|
+
focused?: UseListNavigationItem;
|
|
12
|
+
current?: UseListNavigationItem;
|
|
13
|
+
};
|
|
14
|
+
export type UseListNavigationEvents = {
|
|
15
|
+
onKeyDown?(event: KeyboardEvent): void;
|
|
16
|
+
onClick?(event: MouseEvent<HTMLElement>, item: UseListNavigationItem): void;
|
|
17
|
+
};
|
|
18
|
+
export type UseListNavigationReturn = UseListNavigationState & UseListNavigationEvents;
|
|
19
|
+
/** Навигация по элементам списка без перехвата фокуса с элемента контроля */
|
|
20
|
+
export declare function useDataListNavigation({ selected, onSelect, active, items: itemsProps, }: UseListNavigationProps): UseListNavigationReturn;
|