@ozen-ui/kit 0.33.0 → 0.34.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/Autocomplete/package.json +5 -0
- package/__inner__/cjs/components/Autocomplete/Autocomplete.css +46 -0
- package/__inner__/cjs/components/Autocomplete/Autocomplete.d.ts +4 -0
- package/__inner__/cjs/components/Autocomplete/Autocomplete.js +202 -0
- package/__inner__/cjs/components/Autocomplete/components/AutocompleteLoading/AutocompleteLoading.d.ts +6 -0
- package/__inner__/cjs/components/Autocomplete/components/AutocompleteLoading/AutocompleteLoading.js +23 -0
- package/__inner__/cjs/components/Autocomplete/components/AutocompleteLoading/index.d.ts +1 -0
- package/__inner__/cjs/components/Autocomplete/components/AutocompleteLoading/index.js +4 -0
- package/__inner__/cjs/components/Autocomplete/components/AutocompleteNoOptions/AutocompleteNoOptions.d.ts +6 -0
- package/__inner__/cjs/components/Autocomplete/components/AutocompleteNoOptions/AutocompleteNoOptions.js +17 -0
- package/__inner__/cjs/components/Autocomplete/components/AutocompleteNoOptions/index.d.ts +1 -0
- package/__inner__/cjs/components/Autocomplete/components/AutocompleteNoOptions/index.js +4 -0
- package/__inner__/cjs/components/Autocomplete/components/AutocompleteRenderRight/AutocompleteRenderRight.d.ts +10 -0
- package/__inner__/cjs/components/Autocomplete/components/AutocompleteRenderRight/AutocompleteRenderRight.js +26 -0
- package/__inner__/cjs/components/Autocomplete/components/AutocompleteRenderRight/index.d.ts +1 -0
- package/__inner__/cjs/components/Autocomplete/components/AutocompleteRenderRight/index.js +4 -0
- package/__inner__/cjs/components/Autocomplete/components/index.d.ts +3 -0
- package/__inner__/cjs/components/Autocomplete/components/index.js +6 -0
- package/__inner__/cjs/components/Autocomplete/constants.d.ts +10 -0
- package/__inner__/cjs/components/Autocomplete/constants.js +13 -0
- package/__inner__/cjs/components/Autocomplete/helper.d.ts +166 -0
- package/__inner__/cjs/components/Autocomplete/helper.js +14 -0
- package/__inner__/cjs/components/Autocomplete/index.d.ts +2 -0
- package/__inner__/cjs/components/Autocomplete/index.js +5 -0
- package/__inner__/cjs/components/Autocomplete/types.d.ts +105 -0
- package/__inner__/cjs/components/Autocomplete/types.js +2 -0
- package/__inner__/cjs/components/DataList/helpers/useDataListNavigation.js +4 -12
- package/__inner__/cjs/components/List/List.css +5 -0
- package/__inner__/cjs/components/List/List.js +2 -2
- package/__inner__/cjs/components/List/constants.d.ts +1 -0
- package/__inner__/cjs/components/List/constants.js +2 -1
- package/__inner__/cjs/components/List/types.d.ts +2 -0
- package/__inner__/cjs/components/ThemeProvider/types.d.ts +2 -0
- package/__inner__/cjs/hooks/useEventListener/useEventListener.js +2 -4
- package/__inner__/cjs/hooks/useMutableRef/index.d.ts +1 -0
- package/__inner__/cjs/hooks/useMutableRef/index.js +4 -0
- package/__inner__/cjs/hooks/useMutableRef/useMutableRef.d.ts +2 -0
- package/__inner__/cjs/hooks/useMutableRef/useMutableRef.js +10 -0
- package/__inner__/cjs/locale/locale.js +21 -0
- package/__inner__/esm/components/Autocomplete/Autocomplete.css +46 -0
- package/__inner__/esm/components/Autocomplete/Autocomplete.d.ts +4 -0
- package/__inner__/esm/components/Autocomplete/Autocomplete.js +199 -0
- package/__inner__/esm/components/Autocomplete/components/AutocompleteLoading/AutocompleteLoading.d.ts +6 -0
- package/__inner__/esm/components/Autocomplete/components/AutocompleteLoading/AutocompleteLoading.js +18 -0
- package/__inner__/esm/components/Autocomplete/components/AutocompleteLoading/index.d.ts +1 -0
- package/__inner__/esm/components/Autocomplete/components/AutocompleteLoading/index.js +1 -0
- package/__inner__/esm/components/Autocomplete/components/AutocompleteNoOptions/AutocompleteNoOptions.d.ts +6 -0
- package/__inner__/esm/components/Autocomplete/components/AutocompleteNoOptions/AutocompleteNoOptions.js +12 -0
- package/__inner__/esm/components/Autocomplete/components/AutocompleteNoOptions/index.d.ts +1 -0
- package/__inner__/esm/components/Autocomplete/components/AutocompleteNoOptions/index.js +1 -0
- package/__inner__/esm/components/Autocomplete/components/AutocompleteRenderRight/AutocompleteRenderRight.d.ts +10 -0
- package/__inner__/esm/components/Autocomplete/components/AutocompleteRenderRight/AutocompleteRenderRight.js +22 -0
- package/__inner__/esm/components/Autocomplete/components/AutocompleteRenderRight/index.d.ts +1 -0
- package/__inner__/esm/components/Autocomplete/components/AutocompleteRenderRight/index.js +1 -0
- package/__inner__/esm/components/Autocomplete/components/index.d.ts +3 -0
- package/__inner__/esm/components/Autocomplete/components/index.js +3 -0
- package/__inner__/esm/components/Autocomplete/constants.d.ts +10 -0
- package/__inner__/esm/components/Autocomplete/constants.js +10 -0
- package/__inner__/esm/components/Autocomplete/helper.d.ts +166 -0
- package/__inner__/esm/components/Autocomplete/helper.js +7 -0
- package/__inner__/esm/components/Autocomplete/index.d.ts +2 -0
- package/__inner__/esm/components/Autocomplete/index.js +2 -0
- package/__inner__/esm/components/Autocomplete/types.d.ts +105 -0
- package/__inner__/esm/components/Autocomplete/types.js +1 -0
- package/__inner__/esm/components/DataList/helpers/useDataListNavigation.js +5 -13
- package/__inner__/esm/components/List/List.css +5 -0
- package/__inner__/esm/components/List/List.js +3 -3
- package/__inner__/esm/components/List/constants.d.ts +1 -0
- package/__inner__/esm/components/List/constants.js +1 -0
- package/__inner__/esm/components/List/types.d.ts +2 -0
- package/__inner__/esm/components/ThemeProvider/types.d.ts +2 -0
- package/__inner__/esm/hooks/useEventListener/useEventListener.js +3 -5
- package/__inner__/esm/hooks/useMutableRef/index.d.ts +1 -0
- package/__inner__/esm/hooks/useMutableRef/index.js +1 -0
- package/__inner__/esm/hooks/useMutableRef/useMutableRef.d.ts +2 -0
- package/__inner__/esm/hooks/useMutableRef/useMutableRef.js +6 -0
- package/__inner__/esm/locale/locale.js +21 -0
- package/package.json +1 -1
- package/useMutableRef/package.json +5 -0
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { __read } from "tslib";
|
|
2
|
+
import React from 'react';
|
|
3
|
+
import { ChevronDownIcon, ChevronUpIcon, CloseIcon } from '@ozen-ui/icons';
|
|
4
|
+
import { useFieldControl } from '../../../FieldControl';
|
|
5
|
+
import { IconButton } from '../../../IconButton';
|
|
6
|
+
import { cnAutocomplete } from '../../index';
|
|
7
|
+
export var AutocompleteRenderRight = function (_a) {
|
|
8
|
+
var disableClearButton = _a.disableClearButton, disableShowChevron = _a.disableShowChevron, clearText = _a.clearText, closeText = _a.closeText, openText = _a.openText, disabled = _a.disabled, hasValue = _a.hasValue, onClear = _a.onClear, onOpen = _a.onOpen, open = _a.open, size = _a.size;
|
|
9
|
+
var _b = __read(useFieldControl(), 1), _c = _b[0], focused = _c.focused, hovered = _c.hovered;
|
|
10
|
+
var isVisibleClearButton = !!(hovered || open || focused) && hasValue;
|
|
11
|
+
return (React.createElement("div", { className: cnAutocomplete('RenderRight') },
|
|
12
|
+
!disableClearButton && (React.createElement(IconButton, { type: "button", variant: "function", tabIndex: -1, onClick: function (e) {
|
|
13
|
+
e.preventDefault();
|
|
14
|
+
onClear === null || onClear === void 0 ? void 0 : onClear(e);
|
|
15
|
+
}, className: cnAutocomplete('ClearButton', {
|
|
16
|
+
visibility: isVisibleClearButton,
|
|
17
|
+
}), title: clearText, "aria-label": clearText, size: size, icon: CloseIcon, compressed: true })),
|
|
18
|
+
!disableShowChevron && (React.createElement(IconButton, { type: "button", variant: "ghost", tabIndex: -1, onClick: function (e) {
|
|
19
|
+
e.preventDefault();
|
|
20
|
+
onOpen();
|
|
21
|
+
}, disabled: disabled, title: open ? closeText : openText, "aria-label": open ? closeText : openText, size: size, icon: open ? ChevronUpIcon : ChevronDownIcon, compressed: true }))));
|
|
22
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './AutocompleteRenderRight';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './AutocompleteRenderRight';
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export declare const AUTOCOMPLETE_DEFAULT_DISABLED = false;
|
|
2
|
+
export declare const AUTOCOMPLETE_DEFAULT_REQUIRED = false;
|
|
3
|
+
export declare const AUTOCOMPLETE_DEFAULT_AUTOFOCUS = false;
|
|
4
|
+
export declare const AUTOCOMPLETE_DEFAULT_FULLWIDTH = false;
|
|
5
|
+
export declare const AUTOCOMPLETE_DEFAULT_ALLOW_CUSTOM_VALUE = false;
|
|
6
|
+
export declare const AUTOCOMPLETE_DEFAULT_DISABLE_SHOW_CHEVRON = false;
|
|
7
|
+
export declare const AUTOCOMPLETE_DEFAULT_DISABLE_SHOW_EMPTY_OPTIONS_LIST = false;
|
|
8
|
+
export declare const AUTOCOMPLETE_DEFAULT_DISABLE_CLOSE_ON_SELECT = false;
|
|
9
|
+
export declare const AUTOCOMPLETE_DEFAULT_DISABLE_CLEAR_BUTTON = false;
|
|
10
|
+
export declare const AUTOCOMPLETE_DEFAULT_SIZE = "m";
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export var AUTOCOMPLETE_DEFAULT_DISABLED = false;
|
|
2
|
+
export var AUTOCOMPLETE_DEFAULT_REQUIRED = false;
|
|
3
|
+
export var AUTOCOMPLETE_DEFAULT_AUTOFOCUS = false;
|
|
4
|
+
export var AUTOCOMPLETE_DEFAULT_FULLWIDTH = false;
|
|
5
|
+
export var AUTOCOMPLETE_DEFAULT_ALLOW_CUSTOM_VALUE = false;
|
|
6
|
+
export var AUTOCOMPLETE_DEFAULT_DISABLE_SHOW_CHEVRON = false;
|
|
7
|
+
export var AUTOCOMPLETE_DEFAULT_DISABLE_SHOW_EMPTY_OPTIONS_LIST = false;
|
|
8
|
+
export var AUTOCOMPLETE_DEFAULT_DISABLE_CLOSE_ON_SELECT = false;
|
|
9
|
+
export var AUTOCOMPLETE_DEFAULT_DISABLE_CLEAR_BUTTON = false;
|
|
10
|
+
export var AUTOCOMPLETE_DEFAULT_SIZE = 'm';
|
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
/// <reference types="react" />
|
|
2
|
+
import type { AutocompleteDefaultOption, AutocompletePropGetOptionDisabled, AutocompletePropGetOptionKey, AutocompletePropGetOptionLabel, AutocompleteProps } from './types';
|
|
3
|
+
export declare const defaultGetOptionKey: AutocompletePropGetOptionKey<AutocompleteDefaultOption>;
|
|
4
|
+
export declare const defaultGetOptionLabel: AutocompletePropGetOptionLabel<AutocompleteDefaultOption>;
|
|
5
|
+
export declare const defaultGetOptionDisabled: AutocompletePropGetOptionDisabled<AutocompleteDefaultOption>;
|
|
6
|
+
export declare function withDefaultGetters<OPTION>(props: AutocompleteProps<OPTION>): ({
|
|
7
|
+
options: OPTION[];
|
|
8
|
+
size?: "s" | "m" | "l" | "2xs" | "xs" | undefined;
|
|
9
|
+
value?: import("./types").AutocompletePropValue<OPTION>;
|
|
10
|
+
defaultValue?: import("./types").AutocompletePropValue<OPTION>;
|
|
11
|
+
onChange?: ((e: KeyboardEvent | import("react").SyntheticEvent<Element, Event>, value: OPTION | null) => void) | undefined;
|
|
12
|
+
inputValue?: string | undefined;
|
|
13
|
+
onInputChange?: ((e: import("react").ChangeEvent<HTMLInputElement> | null, value: string) => void) | undefined;
|
|
14
|
+
renderInput?: import("./types").AutocompleteRenderInput | undefined;
|
|
15
|
+
renderOption?: import("./types").AutocompletePropRenderOption<OPTION> | undefined;
|
|
16
|
+
getOptionLabel?: AutocompletePropGetOptionLabel<OPTION> | undefined;
|
|
17
|
+
getOptionKey?: AutocompletePropGetOptionKey<OPTION> | undefined;
|
|
18
|
+
getOptionDisabled?: AutocompletePropGetOptionDisabled<OPTION> | undefined;
|
|
19
|
+
disableCloseOnSelect?: boolean | undefined;
|
|
20
|
+
allowCustomValue?: boolean | undefined;
|
|
21
|
+
loading?: boolean | undefined;
|
|
22
|
+
noOptionsText?: import("react").ReactNode;
|
|
23
|
+
clearText?: string | undefined;
|
|
24
|
+
openText?: string | undefined;
|
|
25
|
+
closeText?: string | undefined;
|
|
26
|
+
loadingText?: import("react").ReactNode;
|
|
27
|
+
onClose?: (() => void) | undefined;
|
|
28
|
+
onOpen?: (() => void) | undefined;
|
|
29
|
+
disableClearButton?: boolean | undefined;
|
|
30
|
+
searchFunction?: import("./types").AutocompleteSearchFunction<OPTION> | undefined;
|
|
31
|
+
disableShowEmptyOptionsList?: boolean | undefined;
|
|
32
|
+
disableShowChevron?: boolean | undefined;
|
|
33
|
+
dataListProps?: Partial<Omit<import("../DataList").DataListBaseProps, "onSelect" | "open" | "onClose" | "multiple" | "selected" | "anchorRef">> | undefined;
|
|
34
|
+
} & {
|
|
35
|
+
label?: string | undefined;
|
|
36
|
+
style?: import("react").CSSProperties | undefined;
|
|
37
|
+
className?: string | undefined;
|
|
38
|
+
onKeyDown?: import("react").KeyboardEventHandler<HTMLDivElement> | undefined;
|
|
39
|
+
autoFocus?: boolean | undefined;
|
|
40
|
+
placeholder?: string | undefined;
|
|
41
|
+
disabled?: boolean | undefined;
|
|
42
|
+
required?: boolean | undefined;
|
|
43
|
+
error?: boolean | undefined;
|
|
44
|
+
fullWidth?: boolean | undefined;
|
|
45
|
+
hint?: string | null | undefined;
|
|
46
|
+
renderLeft?: string | number | import("react").FC<import("react").SVGProps<SVGSVGElement> & {
|
|
47
|
+
color?: string | undefined;
|
|
48
|
+
ref?: import("react").Ref<SVGSVGElement> | undefined;
|
|
49
|
+
} & {
|
|
50
|
+
size?: import("@ozen-ui/icons").IconSize | undefined;
|
|
51
|
+
}> | import("react").ReactElement<import("react").SVGProps<SVGSVGElement> & {
|
|
52
|
+
color?: string | undefined;
|
|
53
|
+
ref?: import("react").Ref<SVGSVGElement> | undefined;
|
|
54
|
+
} & {
|
|
55
|
+
size?: import("@ozen-ui/icons").IconSize | undefined;
|
|
56
|
+
}, string | import("react").JSXElementConstructor<any>> | (() => import("react").ReactElement<import("react").SVGProps<SVGSVGElement> & {
|
|
57
|
+
color?: string | undefined;
|
|
58
|
+
ref?: import("react").Ref<SVGSVGElement> | undefined;
|
|
59
|
+
} & {
|
|
60
|
+
size?: import("@ozen-ui/icons").IconSize | undefined;
|
|
61
|
+
}, string | import("react").JSXElementConstructor<any>>) | undefined;
|
|
62
|
+
inputProps?: (Omit<import("react").DetailedHTMLProps<import("react").InputHTMLAttributes<HTMLInputElement>, HTMLInputElement>, "ref"> & {
|
|
63
|
+
ref?: ((instance: HTMLInputElement | null) => void) | import("react").RefObject<HTMLInputElement> | null | undefined;
|
|
64
|
+
} & {
|
|
65
|
+
'data-testid'?: string | undefined;
|
|
66
|
+
}) | undefined;
|
|
67
|
+
} & {
|
|
68
|
+
open?: boolean | undefined;
|
|
69
|
+
defaultOpen?: undefined;
|
|
70
|
+
} & (OPTION extends {
|
|
71
|
+
label: string;
|
|
72
|
+
} ? Record<string, unknown> : {
|
|
73
|
+
getOptionLabel?: AutocompletePropGetOptionLabel<OPTION> | undefined;
|
|
74
|
+
}) & (OPTION extends {
|
|
75
|
+
id: string | number;
|
|
76
|
+
} ? Record<string, unknown> : {
|
|
77
|
+
getOptionKey?: AutocompletePropGetOptionKey<OPTION> | undefined;
|
|
78
|
+
}) & (OPTION extends {
|
|
79
|
+
id: boolean | undefined;
|
|
80
|
+
} ? Record<string, unknown> : {
|
|
81
|
+
getOptionDisabled?: AutocompletePropGetOptionKey<OPTION> | undefined;
|
|
82
|
+
}) & {
|
|
83
|
+
getOptionLabel: AutocompletePropGetOptionLabel<AutocompleteDefaultOption> | AutocompletePropGetOptionLabel<OPTION>;
|
|
84
|
+
getOptionKey: AutocompletePropGetOptionKey<AutocompleteDefaultOption> | AutocompletePropGetOptionKey<OPTION>;
|
|
85
|
+
getOptionDisabled: AutocompletePropGetOptionDisabled<AutocompleteDefaultOption> | AutocompletePropGetOptionDisabled<OPTION>;
|
|
86
|
+
}) | ({
|
|
87
|
+
options: OPTION[];
|
|
88
|
+
size?: "s" | "m" | "l" | "2xs" | "xs" | undefined;
|
|
89
|
+
value?: import("./types").AutocompletePropValue<OPTION>;
|
|
90
|
+
defaultValue?: import("./types").AutocompletePropValue<OPTION>;
|
|
91
|
+
onChange?: ((e: KeyboardEvent | import("react").SyntheticEvent<Element, Event>, value: OPTION | null) => void) | undefined;
|
|
92
|
+
inputValue?: string | undefined;
|
|
93
|
+
onInputChange?: ((e: import("react").ChangeEvent<HTMLInputElement> | null, value: string) => void) | undefined;
|
|
94
|
+
renderInput?: import("./types").AutocompleteRenderInput | undefined;
|
|
95
|
+
renderOption?: import("./types").AutocompletePropRenderOption<OPTION> | undefined;
|
|
96
|
+
getOptionLabel?: AutocompletePropGetOptionLabel<OPTION> | undefined;
|
|
97
|
+
getOptionKey?: AutocompletePropGetOptionKey<OPTION> | undefined;
|
|
98
|
+
getOptionDisabled?: AutocompletePropGetOptionDisabled<OPTION> | undefined;
|
|
99
|
+
disableCloseOnSelect?: boolean | undefined;
|
|
100
|
+
allowCustomValue?: boolean | undefined;
|
|
101
|
+
loading?: boolean | undefined;
|
|
102
|
+
noOptionsText?: import("react").ReactNode;
|
|
103
|
+
clearText?: string | undefined;
|
|
104
|
+
openText?: string | undefined;
|
|
105
|
+
closeText?: string | undefined;
|
|
106
|
+
loadingText?: import("react").ReactNode;
|
|
107
|
+
onClose?: (() => void) | undefined;
|
|
108
|
+
onOpen?: (() => void) | undefined;
|
|
109
|
+
disableClearButton?: boolean | undefined;
|
|
110
|
+
searchFunction?: import("./types").AutocompleteSearchFunction<OPTION> | undefined;
|
|
111
|
+
disableShowEmptyOptionsList?: boolean | undefined;
|
|
112
|
+
disableShowChevron?: boolean | undefined;
|
|
113
|
+
dataListProps?: Partial<Omit<import("../DataList").DataListBaseProps, "onSelect" | "open" | "onClose" | "multiple" | "selected" | "anchorRef">> | undefined;
|
|
114
|
+
} & {
|
|
115
|
+
label?: string | undefined;
|
|
116
|
+
style?: import("react").CSSProperties | undefined;
|
|
117
|
+
className?: string | undefined;
|
|
118
|
+
onKeyDown?: import("react").KeyboardEventHandler<HTMLDivElement> | undefined;
|
|
119
|
+
autoFocus?: boolean | undefined;
|
|
120
|
+
placeholder?: string | undefined;
|
|
121
|
+
disabled?: boolean | undefined;
|
|
122
|
+
required?: boolean | undefined;
|
|
123
|
+
error?: boolean | undefined;
|
|
124
|
+
fullWidth?: boolean | undefined;
|
|
125
|
+
hint?: string | null | undefined;
|
|
126
|
+
renderLeft?: string | number | import("react").FC<import("react").SVGProps<SVGSVGElement> & {
|
|
127
|
+
color?: string | undefined;
|
|
128
|
+
ref?: import("react").Ref<SVGSVGElement> | undefined;
|
|
129
|
+
} & {
|
|
130
|
+
size?: import("@ozen-ui/icons").IconSize | undefined;
|
|
131
|
+
}> | import("react").ReactElement<import("react").SVGProps<SVGSVGElement> & {
|
|
132
|
+
color?: string | undefined;
|
|
133
|
+
ref?: import("react").Ref<SVGSVGElement> | undefined;
|
|
134
|
+
} & {
|
|
135
|
+
size?: import("@ozen-ui/icons").IconSize | undefined;
|
|
136
|
+
}, string | import("react").JSXElementConstructor<any>> | (() => import("react").ReactElement<import("react").SVGProps<SVGSVGElement> & {
|
|
137
|
+
color?: string | undefined;
|
|
138
|
+
ref?: import("react").Ref<SVGSVGElement> | undefined;
|
|
139
|
+
} & {
|
|
140
|
+
size?: import("@ozen-ui/icons").IconSize | undefined;
|
|
141
|
+
}, string | import("react").JSXElementConstructor<any>>) | undefined;
|
|
142
|
+
inputProps?: (Omit<import("react").DetailedHTMLProps<import("react").InputHTMLAttributes<HTMLInputElement>, HTMLInputElement>, "ref"> & {
|
|
143
|
+
ref?: ((instance: HTMLInputElement | null) => void) | import("react").RefObject<HTMLInputElement> | null | undefined;
|
|
144
|
+
} & {
|
|
145
|
+
'data-testid'?: string | undefined;
|
|
146
|
+
}) | undefined;
|
|
147
|
+
} & {
|
|
148
|
+
open?: undefined;
|
|
149
|
+
defaultOpen?: boolean | undefined;
|
|
150
|
+
} & (OPTION extends {
|
|
151
|
+
label: string;
|
|
152
|
+
} ? Record<string, unknown> : {
|
|
153
|
+
getOptionLabel?: AutocompletePropGetOptionLabel<OPTION> | undefined;
|
|
154
|
+
}) & (OPTION extends {
|
|
155
|
+
id: string | number;
|
|
156
|
+
} ? Record<string, unknown> : {
|
|
157
|
+
getOptionKey?: AutocompletePropGetOptionKey<OPTION> | undefined;
|
|
158
|
+
}) & (OPTION extends {
|
|
159
|
+
id: boolean | undefined;
|
|
160
|
+
} ? Record<string, unknown> : {
|
|
161
|
+
getOptionDisabled?: AutocompletePropGetOptionKey<OPTION> | undefined;
|
|
162
|
+
}) & {
|
|
163
|
+
getOptionLabel: AutocompletePropGetOptionLabel<AutocompleteDefaultOption> | AutocompletePropGetOptionLabel<OPTION>;
|
|
164
|
+
getOptionKey: AutocompletePropGetOptionKey<AutocompleteDefaultOption> | AutocompletePropGetOptionKey<OPTION>;
|
|
165
|
+
getOptionDisabled: AutocompletePropGetOptionDisabled<AutocompleteDefaultOption> | AutocompletePropGetOptionDisabled<OPTION>;
|
|
166
|
+
});
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { __assign } from "tslib";
|
|
2
|
+
export var defaultGetOptionKey = function (option) { var _a; return (_a = option.id) !== null && _a !== void 0 ? _a : option; };
|
|
3
|
+
export var defaultGetOptionLabel = function (option) { var _a; return (_a = option.label) !== null && _a !== void 0 ? _a : option; };
|
|
4
|
+
export var defaultGetOptionDisabled = function (option) { var _a; return (_a = option.disabled) !== null && _a !== void 0 ? _a : false; };
|
|
5
|
+
export function withDefaultGetters(props) {
|
|
6
|
+
return __assign(__assign({}, props), { getOptionLabel: props.getOptionLabel || defaultGetOptionLabel, getOptionKey: props.getOptionKey || defaultGetOptionKey, getOptionDisabled: props.getOptionDisabled || defaultGetOptionDisabled });
|
|
7
|
+
}
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
import type { SyntheticEvent, ChangeEvent, ReactElement, ReactNode } from 'react';
|
|
2
|
+
import type { FormElementSizeVariant } from '../../types/FormElementSizeVariant';
|
|
3
|
+
import type { DataListBaseProps } from '../DataList';
|
|
4
|
+
import type { InputProps } from '../Input';
|
|
5
|
+
export type AutocompleteRenderOptionProps<OPTION> = {
|
|
6
|
+
option: OPTION;
|
|
7
|
+
selected: boolean;
|
|
8
|
+
};
|
|
9
|
+
export type AutocompletePropValue<OPTION> = OPTION | null | undefined;
|
|
10
|
+
export type AutocompletePropGetOptionLabel<OPTION> = (option: OPTION) => string;
|
|
11
|
+
export type AutocompletePropGetOptionKey<OPTION> = (option: OPTION) => string | number;
|
|
12
|
+
export type AutocompletePropRenderValue<OPTION> = (value: OPTION) => ReactNode | null;
|
|
13
|
+
export type AutocompletePropGetOptionDisabled<OPTION> = (option: OPTION) => boolean | undefined;
|
|
14
|
+
export type AutocompletePropRenderOption<OPTION> = (props: AutocompleteRenderOptionProps<OPTION>) => ReactElement | null;
|
|
15
|
+
export type AutocompleteDefaultOption = {
|
|
16
|
+
id: string | number;
|
|
17
|
+
label: string;
|
|
18
|
+
disabled?: boolean;
|
|
19
|
+
};
|
|
20
|
+
export type AutocompleteSearchFunction<OPTION> = (options: OPTION[], searchValue: string) => OPTION[];
|
|
21
|
+
export type AutocompleteRenderInput = (props: InputProps) => ReactNode;
|
|
22
|
+
type AutocompleteOpenControlledProps = {
|
|
23
|
+
/** Текущее состояние списка. Если `true`, список отображается. */
|
|
24
|
+
open?: boolean;
|
|
25
|
+
/** Состояние открытие по умолчанию (неконтролируемый компонент) */
|
|
26
|
+
defaultOpen?: never;
|
|
27
|
+
};
|
|
28
|
+
type AutocompleteOpenUncontrolledProps = {
|
|
29
|
+
/** Текущее состояние списка. Если `true`, список отображается. */
|
|
30
|
+
open?: never;
|
|
31
|
+
/** Состояние открытие по умолчанию (неконтролируемый компонент) */
|
|
32
|
+
defaultOpen?: boolean;
|
|
33
|
+
};
|
|
34
|
+
type AutocompleteInputProps = Pick<InputProps, 'placeholder' | 'autoFocus' | 'fullWidth' | 'disabled' | 'label' | 'required' | 'style' | 'error' | 'hint' | 'renderLeft' | 'className' | 'inputProps' | 'onKeyDown'>;
|
|
35
|
+
type AutocompleteDataListProps = Partial<Omit<DataListBaseProps, 'onClose' | 'open' | 'anchorRef' | 'multiple' | 'selected' | 'onSelect'>>;
|
|
36
|
+
export type AutocompleteProps<OPTION = AutocompleteDefaultOption> = {
|
|
37
|
+
/** Список вариантов выбора (опции) */
|
|
38
|
+
options: OPTION[];
|
|
39
|
+
/** Размер */
|
|
40
|
+
size?: FormElementSizeVariant;
|
|
41
|
+
/** Выбранное значение опции */
|
|
42
|
+
value?: AutocompletePropValue<OPTION>;
|
|
43
|
+
/** Выбранное значение опции по умолчанию */
|
|
44
|
+
defaultValue?: AutocompletePropValue<OPTION>;
|
|
45
|
+
/** Функция обратного вызова, которая будет вызвана при выборе значения */
|
|
46
|
+
onChange?: (e: SyntheticEvent | KeyboardEvent, value: OPTION | null) => void;
|
|
47
|
+
/** Введённое значение в текстовом поле */
|
|
48
|
+
inputValue?: string;
|
|
49
|
+
/** Функция обратного вызова, которая будет вызвана при вводе значения с клавиатуры */
|
|
50
|
+
onInputChange?: (e: ChangeEvent<HTMLInputElement> | null, value: string) => void;
|
|
51
|
+
/** Функция для кастомизации текстового поля */
|
|
52
|
+
renderInput?: AutocompleteRenderInput;
|
|
53
|
+
/** Функция для кастомизации отображения опции */
|
|
54
|
+
renderOption?: AutocompletePropRenderOption<OPTION>;
|
|
55
|
+
/** Функция для определения названия элемента */
|
|
56
|
+
getOptionLabel?: AutocompletePropGetOptionLabel<OPTION>;
|
|
57
|
+
/** Функция для определения уникального ключа элемента */
|
|
58
|
+
getOptionKey?: AutocompletePropGetOptionKey<OPTION>;
|
|
59
|
+
/** Функция для определения заблокированного элемента */
|
|
60
|
+
getOptionDisabled?: AutocompletePropGetOptionDisabled<OPTION>;
|
|
61
|
+
/** Если {true} не закрывает выпадающий список при выборе опции */
|
|
62
|
+
disableCloseOnSelect?: boolean;
|
|
63
|
+
/** Если {true} позволяет вводить кастомное значение в текстовом поле */
|
|
64
|
+
allowCustomValue?: boolean;
|
|
65
|
+
/** Если {true} отображает статус загрузки (при условии отсутствующих опций) */
|
|
66
|
+
loading?: boolean;
|
|
67
|
+
/** Текст компонента при отсутствующих опций */
|
|
68
|
+
noOptionsText?: ReactNode;
|
|
69
|
+
/** Текст для кнопки очистки поля */
|
|
70
|
+
clearText?: string;
|
|
71
|
+
/** Текст для кнопки открытия выпадающего списка */
|
|
72
|
+
openText?: string;
|
|
73
|
+
/** Текст для кнопки закрытия выпадающего списка */
|
|
74
|
+
closeText?: string;
|
|
75
|
+
/** Текст компонента в состоянии загрузки */
|
|
76
|
+
loadingText?: ReactNode;
|
|
77
|
+
/** Функция обратного вызова, которая будет вызвана когда компонент запрашивает закрытие */
|
|
78
|
+
onClose?: () => void;
|
|
79
|
+
/** Функция обратного вызова, которая будет вызвана когда компонент запрашивает открытие */
|
|
80
|
+
onOpen?: () => void;
|
|
81
|
+
/** Если {true}, то не отображает кнопку закрытия */
|
|
82
|
+
disableClearButton?: boolean;
|
|
83
|
+
/** Функция поиска */
|
|
84
|
+
searchFunction?: AutocompleteSearchFunction<OPTION>;
|
|
85
|
+
/** Если {true} не показывает список с отсутствующими опциями */
|
|
86
|
+
disableShowEmptyOptionsList?: boolean;
|
|
87
|
+
/** Если {true} скрывает кнопку раскрытия/скрытия списка */
|
|
88
|
+
disableShowChevron?: boolean;
|
|
89
|
+
/** Свойства компонента DataList */
|
|
90
|
+
dataListProps?: AutocompleteDataListProps;
|
|
91
|
+
} & AutocompleteInputProps & (AutocompleteOpenControlledProps | AutocompleteOpenUncontrolledProps) & (OPTION extends {
|
|
92
|
+
label: AutocompleteDefaultOption['label'];
|
|
93
|
+
} ? Record<string, unknown> : {
|
|
94
|
+
getOptionLabel?: AutocompletePropGetOptionLabel<OPTION>;
|
|
95
|
+
}) & (OPTION extends {
|
|
96
|
+
id: AutocompleteDefaultOption['id'];
|
|
97
|
+
} ? Record<string, unknown> : {
|
|
98
|
+
getOptionKey?: AutocompletePropGetOptionKey<OPTION>;
|
|
99
|
+
}) & (OPTION extends {
|
|
100
|
+
id: AutocompleteDefaultOption['disabled'];
|
|
101
|
+
} ? Record<string, unknown> : {
|
|
102
|
+
getOptionDisabled?: AutocompletePropGetOptionKey<OPTION>;
|
|
103
|
+
});
|
|
104
|
+
export type AutocompleteComponent = <OPTION = AutocompleteDefaultOption>(props: AutocompleteProps<OPTION>) => ReactElement | null;
|
|
105
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { __assign, __read } from "tslib";
|
|
2
|
-
import { useEffect, useState,
|
|
2
|
+
import { useEffect, useState, useCallback } from 'react';
|
|
3
|
+
import { useMutableRef } from '../../../hooks/useMutableRef';
|
|
3
4
|
import { getNextIndex } from '../../../utils/getNextIndex';
|
|
4
5
|
import { getPrevIndex } from '../../../utils/getPrevIndex';
|
|
5
6
|
import { isKey } from '../../../utils/isKey';
|
|
@@ -7,19 +8,10 @@ import { isKeys } from '../../../utils/isKeys';
|
|
|
7
8
|
/** Навигация по элементам списка без перехвата фокуса с элемента контроля */
|
|
8
9
|
export function useDataListNavigation(_a) {
|
|
9
10
|
var selected = _a.selected, onSelect = _a.onSelect, _b = _a.active, active = _b === void 0 ? false : _b, itemsProps = _a.items;
|
|
10
|
-
var savedItems =
|
|
11
|
-
var savedSelected =
|
|
12
|
-
var savedOnSelect =
|
|
11
|
+
var savedItems = useMutableRef(itemsProps);
|
|
12
|
+
var savedSelected = useMutableRef(selected);
|
|
13
|
+
var savedOnSelect = useMutableRef(onSelect);
|
|
13
14
|
var _c = __read(useState({}), 2), state = _c[0], setState = _c[1];
|
|
14
|
-
useEffect(function () {
|
|
15
|
-
savedItems.current = itemsProps;
|
|
16
|
-
}, [itemsProps]);
|
|
17
|
-
useEffect(function () {
|
|
18
|
-
savedOnSelect.current = onSelect;
|
|
19
|
-
}, [onSelect]);
|
|
20
|
-
useEffect(function () {
|
|
21
|
-
savedSelected.current = selected;
|
|
22
|
-
}, [selected]);
|
|
23
15
|
var findInItems = function (value) { var _a; return (_a = savedItems.current) === null || _a === void 0 ? void 0 : _a.find(function (item) { return item === value; }); };
|
|
24
16
|
useEffect(function () {
|
|
25
17
|
if (!active) {
|
|
@@ -4,13 +4,13 @@ import React from 'react';
|
|
|
4
4
|
import { useThemeProps } from '../../hooks/useThemeProps';
|
|
5
5
|
import { cn } from '../../utils/classname';
|
|
6
6
|
import { polymorphicComponentWithRef } from '../../utils/polymorphicComponentWithRef';
|
|
7
|
-
import { LIST_DEFAULT_SIZE, LIST_DEFAULT_TAG } from './constants';
|
|
7
|
+
import { LIST_DEFAULT_SIZE, LIST_DEFAULT_TAG, LIST_DEFAULT_DISABLE_PADDING, } from './constants';
|
|
8
8
|
import { ListContext } from './ListContext';
|
|
9
9
|
export var cnList = cn('List');
|
|
10
10
|
export var List = polymorphicComponentWithRef(function (inProps, ref) {
|
|
11
11
|
var props = useThemeProps({ props: inProps, name: 'List' });
|
|
12
|
-
var _a = props.as, Tag = _a === void 0 ? LIST_DEFAULT_TAG : _a, _b = props.size, size = _b === void 0 ? LIST_DEFAULT_SIZE : _b, children = props.children, className = props.className, other = __rest(props, ["as", "size", "children", "className"]);
|
|
12
|
+
var _a = props.as, Tag = _a === void 0 ? LIST_DEFAULT_TAG : _a, _b = props.size, size = _b === void 0 ? LIST_DEFAULT_SIZE : _b, _c = props.disablePadding, disablePadding = _c === void 0 ? LIST_DEFAULT_DISABLE_PADDING : _c, children = props.children, className = props.className, other = __rest(props, ["as", "size", "disablePadding", "children", "className"]);
|
|
13
13
|
return (React.createElement(ListContext.Provider, { value: { size: size } },
|
|
14
|
-
React.createElement(Tag, __assign({ className: cnList({ size: size }, [className]) }, other, { ref: ref }), children)));
|
|
14
|
+
React.createElement(Tag, __assign({ className: cnList({ size: size, disablePadding: disablePadding }, [className]) }, other, { ref: ref }), children)));
|
|
15
15
|
});
|
|
16
16
|
List.displayName = 'List';
|
|
@@ -11,6 +11,8 @@ export type ListBaseProps = {
|
|
|
11
11
|
children?: ReactNode;
|
|
12
12
|
/** Размер компонента */
|
|
13
13
|
size?: ListSizeVariant;
|
|
14
|
+
/** Если {true} отключает боковые отступы */
|
|
15
|
+
disablePadding?: boolean;
|
|
14
16
|
/** Идентификатор компонента для тестов */
|
|
15
17
|
'data-testid'?: string;
|
|
16
18
|
};
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { AccordionProps, AccordionSummaryProps } from '../Accordion';
|
|
2
2
|
import type { AlertProps } from '../Alert';
|
|
3
|
+
import type { AutocompleteProps } from '../Autocomplete';
|
|
3
4
|
import type { AvatarProps } from '../Avatar';
|
|
4
5
|
import type { BackdropProps } from '../Backdrop';
|
|
5
6
|
import type { BadgeProps } from '../Badge';
|
|
@@ -64,6 +65,7 @@ export type Theme = {
|
|
|
64
65
|
Accordion?: Partial<AccordionProps>;
|
|
65
66
|
AccordionSummary?: Partial<AccordionSummaryProps>;
|
|
66
67
|
Alert?: Partial<AlertProps>;
|
|
68
|
+
Autocomplete?: Partial<AutocompleteProps>;
|
|
67
69
|
Avatar?: Partial<AvatarProps>;
|
|
68
70
|
Backdrop?: Partial<BackdropProps>;
|
|
69
71
|
Badge?: Partial<BadgeProps>;
|
|
@@ -1,11 +1,9 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { useEffect, useCallback } from 'react';
|
|
2
|
+
import { useMutableRef } from '../../hooks/useMutableRef';
|
|
2
3
|
/** Хук добавляющий обработчики событий и удаляющий их на выходе */
|
|
3
4
|
export function useEventListener(_a) {
|
|
4
5
|
var eventName = _a.eventName, handler = _a.handler, element = _a.element, options = _a.options, _b = _a.active, active = _b === void 0 ? true : _b;
|
|
5
|
-
var savedListener =
|
|
6
|
-
useEffect(function () {
|
|
7
|
-
savedListener.current = handler;
|
|
8
|
-
}, [handler]);
|
|
6
|
+
var savedListener = useMutableRef(handler);
|
|
9
7
|
var handleEventListener = useCallback(function (event) {
|
|
10
8
|
var _a;
|
|
11
9
|
(_a = savedListener.current) === null || _a === void 0 ? void 0 : _a.call(savedListener, event);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './useMutableRef';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './useMutableRef';
|
|
@@ -1,5 +1,12 @@
|
|
|
1
1
|
export var ruRU = {
|
|
2
2
|
defaultProps: {
|
|
3
|
+
Autocomplete: {
|
|
4
|
+
noOptionsText: 'Ничего не найдено',
|
|
5
|
+
closeText: 'Закрыть',
|
|
6
|
+
openText: 'Открыть',
|
|
7
|
+
clearText: 'Очистить',
|
|
8
|
+
loadingText: 'Загрузка…',
|
|
9
|
+
},
|
|
3
10
|
Loader: {
|
|
4
11
|
'aria-label': 'Загрузка',
|
|
5
12
|
},
|
|
@@ -15,6 +22,13 @@ export var ruRU = {
|
|
|
15
22
|
};
|
|
16
23
|
export var kkKZ = {
|
|
17
24
|
defaultProps: {
|
|
25
|
+
Autocomplete: {
|
|
26
|
+
noOptionsText: 'Ештеңе табылған жоқ',
|
|
27
|
+
closeText: 'Жабу',
|
|
28
|
+
openText: 'Ашу',
|
|
29
|
+
clearText: 'Тазалау',
|
|
30
|
+
loadingText: 'Жүктеу…',
|
|
31
|
+
},
|
|
18
32
|
Loader: {
|
|
19
33
|
'aria-label': 'Жүктеу',
|
|
20
34
|
},
|
|
@@ -30,6 +44,13 @@ export var kkKZ = {
|
|
|
30
44
|
};
|
|
31
45
|
export var enUS = {
|
|
32
46
|
defaultProps: {
|
|
47
|
+
Autocomplete: {
|
|
48
|
+
noOptionsText: 'No options',
|
|
49
|
+
closeText: 'Close',
|
|
50
|
+
openText: 'Open',
|
|
51
|
+
clearText: 'Clear',
|
|
52
|
+
loadingText: 'Loading…',
|
|
53
|
+
},
|
|
33
54
|
Loader: {
|
|
34
55
|
'aria-label': 'Loading',
|
|
35
56
|
},
|
package/package.json
CHANGED