@hh.ru/magritte-ui-chips-input 2.1.2 → 2.2.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/ChipsInput.js CHANGED
@@ -14,7 +14,7 @@ const ChipsInputComponent = ({ type, state, onChange: onChangeExternal, triggerP
14
14
  const chipsTriggerRef = useRef(null);
15
15
  const chipsTriggerRefCallback = useMultipleRefs(ref, chipsTriggerRef);
16
16
  const { allowArbitraryValues } = triggerProps;
17
- const [selectState, setSelectState] = useState((selectProps?.multiple ? [] : ''));
17
+ const [selectState, setSelectState] = useState((type === 'select' && selectProps?.multiple ? [] : ''));
18
18
  if (type === 'suggest') {
19
19
  return (jsx(Suggest, { ...suggestProps, onChange: (value, isValueFromList) => {
20
20
  if (!isValueFromList) {
@@ -27,18 +27,20 @@ const ChipsInputComponent = ({ type, state, onChange: onChangeExternal, triggerP
27
27
  component: Input,
28
28
  props: {
29
29
  value: state.value,
30
+ 'data-qa': 'chips-input-suggest-search',
30
31
  },
31
- }, onSearchSubmit: (event) => {
32
- if (!allowArbitraryValues) {
32
+ }, onSearchSubmit: (event, onCloseBottomSheet, optionsCount) => {
33
+ if (!allowArbitraryValues || optionsCount > 0) {
33
34
  return;
34
35
  }
35
36
  const value = event.target.value;
36
37
  if (value) {
37
38
  onChangeExternal({ value: '', chips: [...state.chips, { value }] });
39
+ onCloseBottomSheet();
38
40
  }
39
41
  }, renderTrigger: ({ props }) => {
40
42
  const { onChange, wrapperRef, onFocus, onKeyDown } = props;
41
- return (jsx(ChipsTrigger, { ...triggerProps, state: state, ref: chipsTriggerRefCallback, wrapperRef: wrapperRef, onKeyDown: onKeyDown, onFocus: onFocus, onChange: (newState) => {
43
+ return (jsx(ChipsTrigger, { ...triggerProps, state: state, ref: chipsTriggerRefCallback, wrapperRef: wrapperRef, onKeyDown: onKeyDown, onFocus: onFocus, "data-qa": "chips-input-suggest-trigger", onChange: (newState) => {
42
44
  onChangeExternal(newState);
43
45
  onChange?.(newState.value);
44
46
  } }));
@@ -58,16 +60,17 @@ const ChipsInputComponent = ({ type, state, onChange: onChangeExternal, triggerP
58
60
  }),
59
61
  });
60
62
  setSelectState(newValues);
61
- }, onSearchSubmit: (event) => {
62
- if (!allowArbitraryValues) {
63
+ }, onSearchSubmit: (event, onCloseBottomSheet, optionsCount) => {
64
+ if (!allowArbitraryValues || optionsCount > 0) {
63
65
  return;
64
66
  }
65
67
  const value = event.target.value;
66
68
  if (value) {
67
69
  onChangeExternal({ value: '', chips: [...state.chips, { value }] });
70
+ onCloseBottomSheet();
68
71
  }
69
72
  }, onBottomSheetOpen: () => chipsTriggerRef.current?.blur(), triggerProps: { size: 'large' }, renderTrigger: ({ ref, setSearchValue, onKeyDown, onBlur, onFocus }) => {
70
- return (jsx(ChipsTrigger, { ...triggerProps, allowArbitraryValues: allowArbitraryValues, state: state, ref: chipsTriggerRefCallback, wrapperRef: ref, onKeyDown: onKeyDown, onBlur: onBlur, onFocus: onFocus, onChange: (newState) => {
73
+ return (jsx(ChipsTrigger, { ...triggerProps, allowArbitraryValues: allowArbitraryValues, state: state, ref: chipsTriggerRefCallback, wrapperRef: ref, onKeyDown: onKeyDown, onBlur: onBlur, onFocus: onFocus, "data-qa": "chips-input-select-trigger", onChange: (newState) => {
71
74
  onChangeExternal(newState);
72
75
  setSearchValue(newState.value);
73
76
  if (!multiple) {
package/ChipsInput.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"ChipsInput.js","sources":["../src/ChipsInput.tsx"],"sourcesContent":["import { forwardRef, useRef, ForwardedRef, ReactElement, useState } from 'react';\n\nimport { useMultipleRefs } from '@hh.ru/magritte-common-use-multiple-refs';\nimport { ChipsInputProps } from '@hh.ru/magritte-ui-chips-input/types';\nimport { ChipsTrigger } from '@hh.ru/magritte-ui-chips-trigger';\nimport { Input } from '@hh.ru/magritte-ui-input';\nimport { Select } from '@hh.ru/magritte-ui-select';\nimport { Suggest } from '@hh.ru/magritte-ui-suggest';\n\ntype ValueType<MultipleType> = [MultipleType] extends [true] ? string[] : string;\n\n// сhips trigger работает только массивом\nconst getSelectValuesAsArray = (values: string[] | string): string[] => {\n return Array.isArray(values) ? values : [values].filter(Boolean);\n};\n\nconst ChipsInputComponent = <MultipleType extends boolean, DataType>(\n {\n type,\n state,\n onChange: onChangeExternal,\n triggerProps,\n suggestProps,\n selectProps,\n }: ChipsInputProps<MultipleType, DataType>,\n ref: ForwardedRef<HTMLInputElement>\n) => {\n const chipsTriggerRef = useRef<HTMLInputElement>(null);\n const chipsTriggerRefCallback = useMultipleRefs(ref, chipsTriggerRef);\n const { allowArbitraryValues } = triggerProps;\n const [selectState, setSelectState] = useState((selectProps?.multiple ? [] : '') as ValueType<MultipleType>);\n\n if (type === 'suggest') {\n return (\n <Suggest\n {...suggestProps}\n onChange={(value, isValueFromList) => {\n if (!isValueFromList) {\n return;\n }\n if (!state.chips.some((chip) => chip.value === value)) {\n onChangeExternal({ value: '', chips: [...state.chips, { value }] });\n }\n }}\n onBottomSheetOpen={() => chipsTriggerRef.current?.blur()}\n input={{\n component: Input,\n props: {\n value: state.value,\n },\n }}\n onSearchSubmit={(event) => {\n if (!allowArbitraryValues) {\n return;\n }\n const value = (event.target as HTMLInputElement).value;\n if (value) {\n onChangeExternal({ value: '', chips: [...state.chips, { value }] });\n }\n }}\n renderTrigger={({ props }) => {\n const { onChange, wrapperRef, onFocus, onKeyDown } = props;\n return (\n <ChipsTrigger\n {...triggerProps}\n state={state}\n ref={chipsTriggerRefCallback}\n wrapperRef={wrapperRef}\n onKeyDown={onKeyDown}\n onFocus={onFocus}\n onChange={(newState) => {\n onChangeExternal(newState);\n onChange?.(newState.value);\n }}\n />\n );\n }}\n />\n );\n }\n\n const { multiple, options } = selectProps;\n return (\n <Select\n {...selectProps}\n searchable\n multiple={multiple}\n value={selectState}\n onChange={(newValues) => {\n const valuesArr = getSelectValuesAsArray(newValues);\n onChangeExternal({\n value: '',\n chips: valuesArr.map((value) => {\n const item = options.find((option) => option.value === value);\n if (item) {\n return { value: item.value, label: item.label as string };\n }\n return { value };\n }),\n });\n setSelectState(newValues);\n }}\n onSearchSubmit={(event) => {\n if (!allowArbitraryValues) {\n return;\n }\n const value = (event.target as HTMLInputElement).value;\n if (value) {\n onChangeExternal({ value: '', chips: [...state.chips, { value }] });\n }\n }}\n onBottomSheetOpen={() => chipsTriggerRef.current?.blur()}\n triggerProps={{ size: 'large' }}\n renderTrigger={({ ref, setSearchValue, onKeyDown, onBlur, onFocus }) => {\n return (\n <ChipsTrigger\n {...triggerProps}\n allowArbitraryValues={allowArbitraryValues}\n state={state}\n ref={chipsTriggerRefCallback}\n wrapperRef={ref}\n onKeyDown={onKeyDown}\n onBlur={onBlur}\n onFocus={onFocus}\n onChange={(newState) => {\n onChangeExternal(newState);\n setSearchValue(newState.value);\n if (!multiple) {\n const { eventType } = newState;\n if (eventType === 'removeChipByBackspace' || eventType === 'removeChipByCross') {\n setSelectState('' as ValueType<MultipleType>);\n }\n return;\n }\n setSelectState(newState.chips.map(({ value }) => value) as ValueType<MultipleType>);\n }}\n />\n );\n }}\n />\n );\n};\n\nconst ChipsInput = forwardRef(ChipsInputComponent) as (<MultipleType extends boolean, DataType>(\n props: ChipsInputProps<MultipleType, DataType> & { ref?: ForwardedRef<HTMLInputElement> }\n) => ReactElement | null) & { displayName: string };\n\nChipsInput.displayName = 'ChipsInput';\n\nexport { ChipsInput };\n"],"names":["_jsx"],"mappings":"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"}
1
+ {"version":3,"file":"ChipsInput.js","sources":["../src/ChipsInput.tsx"],"sourcesContent":["import { forwardRef, useRef, ForwardedRef, ReactElement, useState } from 'react';\n\nimport { useMultipleRefs } from '@hh.ru/magritte-common-use-multiple-refs';\nimport { ChipsInputProps } from '@hh.ru/magritte-ui-chips-input/types';\nimport { ChipsTrigger } from '@hh.ru/magritte-ui-chips-trigger';\nimport { Input } from '@hh.ru/magritte-ui-input';\nimport { Select } from '@hh.ru/magritte-ui-select';\nimport { Suggest } from '@hh.ru/magritte-ui-suggest';\n\ntype ValueType<MultipleType> = [MultipleType] extends [true] ? string[] : string;\n\n// сhips trigger работает только массивом\nconst getSelectValuesAsArray = (values: string[] | string): string[] => {\n return Array.isArray(values) ? values : [values].filter(Boolean);\n};\n\nconst ChipsInputComponent = <MultipleType extends boolean, DataType>(\n {\n type,\n state,\n onChange: onChangeExternal,\n triggerProps,\n suggestProps,\n selectProps,\n }: ChipsInputProps<MultipleType, DataType>,\n ref: ForwardedRef<HTMLInputElement>\n) => {\n const chipsTriggerRef = useRef<HTMLInputElement>(null);\n const chipsTriggerRefCallback = useMultipleRefs(ref, chipsTriggerRef);\n const { allowArbitraryValues } = triggerProps;\n const [selectState, setSelectState] = useState(\n (type === 'select' && selectProps?.multiple ? [] : '') as ValueType<MultipleType>\n );\n\n if (type === 'suggest') {\n return (\n <Suggest\n {...suggestProps}\n onChange={(value, isValueFromList) => {\n if (!isValueFromList) {\n return;\n }\n if (!state.chips.some((chip) => chip.value === value)) {\n onChangeExternal({ value: '', chips: [...state.chips, { value }] });\n }\n }}\n onBottomSheetOpen={() => chipsTriggerRef.current?.blur()}\n input={{\n component: Input,\n props: {\n value: state.value,\n 'data-qa': 'chips-input-suggest-search',\n },\n }}\n onSearchSubmit={(event, onCloseBottomSheet, optionsCount) => {\n if (!allowArbitraryValues || optionsCount > 0) {\n return;\n }\n const value = (event.target as HTMLInputElement).value;\n if (value) {\n onChangeExternal({ value: '', chips: [...state.chips, { value }] });\n onCloseBottomSheet();\n }\n }}\n renderTrigger={({ props }) => {\n const { onChange, wrapperRef, onFocus, onKeyDown } = props;\n return (\n <ChipsTrigger\n {...triggerProps}\n state={state}\n ref={chipsTriggerRefCallback}\n wrapperRef={wrapperRef}\n onKeyDown={onKeyDown}\n onFocus={onFocus}\n data-qa=\"chips-input-suggest-trigger\"\n onChange={(newState) => {\n onChangeExternal(newState);\n onChange?.(newState.value);\n }}\n />\n );\n }}\n />\n );\n }\n\n const { multiple, options } = selectProps;\n return (\n <Select\n {...selectProps}\n searchable\n multiple={multiple}\n value={selectState}\n onChange={(newValues) => {\n const valuesArr = getSelectValuesAsArray(newValues);\n onChangeExternal({\n value: '',\n chips: valuesArr.map((value) => {\n const item = options.find((option) => option.value === value);\n if (item) {\n return { value: item.value, label: item.label as string };\n }\n return { value };\n }),\n });\n setSelectState(newValues);\n }}\n onSearchSubmit={(event, onCloseBottomSheet, optionsCount) => {\n if (!allowArbitraryValues || optionsCount > 0) {\n return;\n }\n const value = (event.target as HTMLInputElement).value;\n if (value) {\n onChangeExternal({ value: '', chips: [...state.chips, { value }] });\n onCloseBottomSheet();\n }\n }}\n onBottomSheetOpen={() => chipsTriggerRef.current?.blur()}\n triggerProps={{ size: 'large' }}\n renderTrigger={({ ref, setSearchValue, onKeyDown, onBlur, onFocus }) => {\n return (\n <ChipsTrigger\n {...triggerProps}\n allowArbitraryValues={allowArbitraryValues}\n state={state}\n ref={chipsTriggerRefCallback}\n wrapperRef={ref}\n onKeyDown={onKeyDown}\n onBlur={onBlur}\n onFocus={onFocus}\n data-qa=\"chips-input-select-trigger\"\n onChange={(newState) => {\n onChangeExternal(newState);\n setSearchValue(newState.value);\n if (!multiple) {\n const { eventType } = newState;\n if (eventType === 'removeChipByBackspace' || eventType === 'removeChipByCross') {\n setSelectState('' as ValueType<MultipleType>);\n }\n return;\n }\n setSelectState(newState.chips.map(({ value }) => value) as ValueType<MultipleType>);\n }}\n />\n );\n }}\n />\n );\n};\n\nconst ChipsInput = forwardRef(ChipsInputComponent) as (<MultipleType extends boolean, DataType>(\n props: ChipsInputProps<MultipleType, DataType> & { ref?: ForwardedRef<HTMLInputElement> }\n) => ReactElement | null) & { displayName: string };\n\nChipsInput.displayName = 'ChipsInput';\n\nexport { ChipsInput };\n"],"names":["_jsx"],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import { ForwardedRef, ReactElement } from 'react';
2
+ import { UncontrolledChipsInputProps } from '@hh.ru/magritte-ui-chips-input/types';
3
+ declare const UncontrolledChipsInput: (<MultipleType extends boolean, DataType>(props: UncontrolledChipsInputProps<MultipleType, DataType> & {
4
+ ref?: ForwardedRef<HTMLInputElement>;
5
+ }) => ReactElement | null) & {
6
+ displayName: string;
7
+ };
8
+ export { UncontrolledChipsInput };
@@ -0,0 +1,25 @@
1
+ import { jsxs, Fragment, jsx } from 'react/jsx-runtime';
2
+ import { forwardRef, useState } from 'react';
3
+ import { ChipsInput } from './ChipsInput.js';
4
+ import '@hh.ru/magritte-common-use-multiple-refs';
5
+ import '@hh.ru/magritte-ui-chips-trigger';
6
+ import '@hh.ru/magritte-ui-input';
7
+ import '@hh.ru/magritte-ui-select';
8
+ import '@hh.ru/magritte-ui-suggest';
9
+
10
+ const DEFAULT_STATE = {
11
+ value: '',
12
+ chips: [],
13
+ };
14
+ const UncontrolledChipsInputComponent = ({ state: defaultState = DEFAULT_STATE, onChange, name, ...restProps }, ref) => {
15
+ const [state, setState] = useState({ ...defaultState });
16
+ return (jsxs(Fragment, { children: [jsx(ChipsInput, { ...restProps, state: state, onChange: (newState) => {
17
+ setState(newState);
18
+ onChange?.(newState);
19
+ }, ref: ref }), state.chips.map((chip) => (jsx("input", { type: "hidden", name: name, value: chip.value }, chip.value)))] }));
20
+ };
21
+ const UncontrolledChipsInput = forwardRef(UncontrolledChipsInputComponent);
22
+ UncontrolledChipsInput.displayName = 'UncontrolledChipsInput';
23
+
24
+ export { UncontrolledChipsInput };
25
+ //# sourceMappingURL=UncontrolledChipsInput.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"UncontrolledChipsInput.js","sources":["../src/UncontrolledChipsInput.tsx"],"sourcesContent":["import { forwardRef, useState, ForwardedRef, ReactElement } from 'react';\n\nimport { ChipsInput } from '@hh.ru/magritte-ui-chips-input/ChipsInput';\nimport { UncontrolledChipsInputProps } from '@hh.ru/magritte-ui-chips-input/types';\nimport { ChipsTriggerState } from '@hh.ru/magritte-ui-chips-trigger/types';\n\nconst DEFAULT_STATE = {\n value: '',\n chips: [],\n};\n\nconst UncontrolledChipsInputComponent = <MultipleType extends boolean, DataType>(\n {\n state: defaultState = DEFAULT_STATE,\n onChange,\n name,\n ...restProps\n }: UncontrolledChipsInputProps<MultipleType, DataType>,\n ref: ForwardedRef<HTMLInputElement>\n) => {\n const [state, setState] = useState<ChipsTriggerState>({ ...defaultState });\n return (\n <>\n <ChipsInput\n {...restProps}\n state={state}\n onChange={(newState) => {\n setState(newState);\n onChange?.(newState);\n }}\n ref={ref}\n />\n {state.chips.map((chip) => (\n <input type=\"hidden\" name={name} value={chip.value} key={chip.value} />\n ))}\n </>\n );\n};\n\nconst UncontrolledChipsInput = forwardRef(UncontrolledChipsInputComponent) as (<MultipleType extends boolean, DataType>(\n props: UncontrolledChipsInputProps<MultipleType, DataType> & { ref?: ForwardedRef<HTMLInputElement> }\n) => ReactElement | null) & { displayName: string };\n\nUncontrolledChipsInput.displayName = 'UncontrolledChipsInput';\n\nexport { UncontrolledChipsInput };\n"],"names":["_jsxs","_Fragment","_jsx"],"mappings":";;;;;;;;;AAMA,MAAM,aAAa,GAAG;AAClB,IAAA,KAAK,EAAE,EAAE;AACT,IAAA,KAAK,EAAE,EAAE;CACZ,CAAC;AAEF,MAAM,+BAA+B,GAAG,CACpC,EACI,KAAK,EAAE,YAAY,GAAG,aAAa,EACnC,QAAQ,EACR,IAAI,EACJ,GAAG,SAAS,EACsC,EACtD,GAAmC,KACnC;AACA,IAAA,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAoB,EAAE,GAAG,YAAY,EAAE,CAAC,CAAC;AAC3E,IAAA,QACIA,IACI,CAAAC,QAAA,EAAA,EAAA,QAAA,EAAA,CAAAC,GAAA,CAAC,UAAU,EAAA,EAAA,GACH,SAAS,EACb,KAAK,EAAE,KAAK,EACZ,QAAQ,EAAE,CAAC,QAAQ,KAAI;oBACnB,QAAQ,CAAC,QAAQ,CAAC,CAAC;AACnB,oBAAA,QAAQ,GAAG,QAAQ,CAAC,CAAC;AACzB,iBAAC,EACD,GAAG,EAAE,GAAG,EACV,CAAA,EACD,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,MAClBA,GAAO,CAAA,OAAA,EAAA,EAAA,IAAI,EAAC,QAAQ,EAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAO,EAAA,IAAI,CAAC,KAAK,CAAI,CAC1E,CAAC,CAAA,EAAA,CACH,EACL;AACN,CAAC,CAAC;AAEF,MAAM,sBAAsB,GAAG,UAAU,CAAC,+BAA+B,EAErB;AAEpD,sBAAsB,CAAC,WAAW,GAAG,wBAAwB;;;;"}
package/index.d.ts CHANGED
@@ -1,2 +1,3 @@
1
1
  export * from '@hh.ru/magritte-ui-chips-input/ChipsInput';
2
+ export * from '@hh.ru/magritte-ui-chips-input/UncontrolledChipsInput';
2
3
  export * from '@hh.ru/magritte-ui-chips-input/types';
package/index.js CHANGED
@@ -1,4 +1,5 @@
1
1
  export { ChipsInput } from './ChipsInput.js';
2
+ export { UncontrolledChipsInput } from './UncontrolledChipsInput.js';
2
3
  import 'react/jsx-runtime';
3
4
  import 'react';
4
5
  import '@hh.ru/magritte-common-use-multiple-refs';
package/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;"}
1
+ {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hh.ru/magritte-ui-chips-input",
3
- "version": "2.1.2",
3
+ "version": "2.2.0",
4
4
  "main": "index.js",
5
5
  "types": "index.d.ts",
6
6
  "sideEffects": [
@@ -27,10 +27,10 @@
27
27
  },
28
28
  "dependencies": {
29
29
  "@hh.ru/magritte-common-use-multiple-refs": "1.1.4",
30
- "@hh.ru/magritte-ui-chips-trigger": "2.0.7",
30
+ "@hh.ru/magritte-ui-chips-trigger": "2.1.0",
31
31
  "@hh.ru/magritte-ui-input": "7.0.2",
32
- "@hh.ru/magritte-ui-select": "8.2.3",
33
- "@hh.ru/magritte-ui-suggest": "6.2.4"
32
+ "@hh.ru/magritte-ui-select": "8.3.0",
33
+ "@hh.ru/magritte-ui-suggest": "6.3.0"
34
34
  },
35
- "gitHead": "4735b7d8ebc3a5b30340d50fb9be427f2b476efa"
35
+ "gitHead": "5e107905ce940656f632cf6982bedb6a7fcaf0f3"
36
36
  }
package/types.d.ts CHANGED
@@ -1,16 +1,35 @@
1
1
  import { ChipsTriggerProps } from '@hh.ru/magritte-ui-chips-trigger';
2
2
  import { SelectProps } from '@hh.ru/magritte-ui-select/types';
3
3
  import { SuggestProps } from '@hh.ru/magritte-ui-suggest';
4
- type ChipsInputType = 'select' | 'suggest';
5
- type TriggerPropsHelper = Omit<ChipsTriggerProps, 'expanded' | 'toggleExpanded' | 'wrapperRef' | 'ref' | 'state' | 'onChange' | 'onKeyDown' | 'onFocus'>;
4
+ type TriggerPropsHelper = Omit<ChipsTriggerProps, 'expanded' | 'toggleExpanded' | 'wrapperRef' | 'ref' | 'state' | 'onChange' | 'onKeyDown' | 'onFocus' | 'data-qa'>;
6
5
  type SuggestPropsHelper<DataType> = Omit<SuggestProps<DataType>, 'inputValue' | 'onChange' | 'renderTrigger' | 'onSearchSubmit' | 'onBottomSheetOpen' | 'input'>;
7
6
  type SelectPropsHelper<MultipleType extends boolean, DataType> = Omit<SelectProps<MultipleType, DataType>, 'value' | 'onChange' | 'renderTrigger' | 'onSearchSubmit' | 'onBottomSheetOpen' | 'triggerProps' | 'searchable'>;
8
- export interface ChipsInputProps<MultipleType extends boolean, DataType> {
9
- type: ChipsInputType;
7
+ export interface ChipsInputBaseProps {
8
+ /** Свойства chips-trigger */
9
+ triggerProps: TriggerPropsHelper;
10
+ /** Name атрибут chips-inpupt */
11
+ name?: string;
12
+ }
13
+ export interface ChipsInputStateProps {
14
+ /** Состояние для chips-input */
10
15
  state: ChipsTriggerProps['state'];
16
+ /** Событие изменения для состояния */
11
17
  onChange: ChipsTriggerProps['onChange'];
12
- triggerProps: TriggerPropsHelper;
13
- suggestProps: SuggestPropsHelper<DataType>;
18
+ }
19
+ interface ChipsInputSelectProps<MultipleType extends boolean, DataType> {
20
+ /** Тип для chips-input */
21
+ type: 'select';
22
+ /** Свойства select */
14
23
  selectProps: SelectPropsHelper<MultipleType, DataType>;
24
+ suggestProps?: never;
25
+ }
26
+ interface ChipsInputSuggestProps<DataType> {
27
+ /** Тип для chips-input */
28
+ type: 'suggest';
29
+ /** Свойства suggest */
30
+ suggestProps: SuggestPropsHelper<DataType>;
31
+ selectProps?: never;
15
32
  }
33
+ export type ChipsInputProps<MultipleType extends boolean, DataType> = ChipsInputBaseProps & ChipsInputStateProps & (ChipsInputSelectProps<MultipleType, DataType> | ChipsInputSuggestProps<DataType>);
34
+ export type UncontrolledChipsInputProps<MultipleType extends boolean, DataType> = ChipsInputBaseProps & Partial<ChipsInputStateProps> & (ChipsInputSelectProps<MultipleType, DataType> | ChipsInputSuggestProps<DataType>);
16
35
  export {};