@snack-uikit/chips 0.12.9 → 0.13.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (75) hide show
  1. package/CHANGELOG.md +31 -0
  2. package/README.md +71 -20
  3. package/dist/components/ChipAssist/ChipAssist.js +1 -1
  4. package/dist/components/ChipAssist/styles.module.css +1 -1
  5. package/dist/components/ChipChoice/components/ChipChoiceBase/ChipChoiceBase.d.ts +20 -0
  6. package/dist/components/ChipChoice/components/ChipChoiceBase/ChipChoiceBase.js +65 -0
  7. package/dist/components/ChipChoice/components/ChipChoiceBase/index.d.ts +1 -0
  8. package/dist/components/ChipChoice/components/ChipChoiceBase/index.js +1 -0
  9. package/dist/components/ChipChoice/components/{ChipChoiceCustom → ChipChoiceBase}/styles.module.css +18 -10
  10. package/dist/components/ChipChoice/components/ChipChoiceCustom.d.ts +25 -0
  11. package/dist/components/ChipChoice/components/ChipChoiceCustom.js +38 -0
  12. package/dist/components/ChipChoice/components/ChipChoiceDate.d.ts +3 -2
  13. package/dist/components/ChipChoice/components/ChipChoiceDate.js +19 -9
  14. package/dist/components/ChipChoice/components/ChipChoiceDateRange.d.ts +3 -2
  15. package/dist/components/ChipChoice/components/ChipChoiceDateRange.js +18 -8
  16. package/dist/components/ChipChoice/components/ChipChoiceMultiple.d.ts +8 -0
  17. package/dist/components/ChipChoice/components/ChipChoiceMultiple.js +88 -0
  18. package/dist/components/ChipChoice/components/ChipChoiceSingle.d.ts +7 -13
  19. package/dist/components/ChipChoice/components/ChipChoiceSingle.js +64 -22
  20. package/dist/components/ChipChoice/components/index.d.ts +1 -1
  21. package/dist/components/ChipChoice/components/index.js +1 -1
  22. package/dist/components/ChipChoice/constants.d.ts +3 -2
  23. package/dist/components/ChipChoice/constants.js +2 -1
  24. package/dist/components/ChipChoice/hooks.d.ts +11 -0
  25. package/dist/components/ChipChoice/hooks.js +35 -0
  26. package/dist/components/ChipChoice/index.d.ts +5 -4
  27. package/dist/components/ChipChoice/index.js +3 -2
  28. package/dist/components/ChipChoice/styles.module.css +9 -5
  29. package/dist/components/ChipChoice/types.d.ts +55 -7
  30. package/dist/components/ChipChoice/utils/index.d.ts +2 -0
  31. package/dist/components/ChipChoice/utils/index.js +2 -0
  32. package/dist/components/ChipChoice/utils/options.d.ts +9 -0
  33. package/dist/components/ChipChoice/utils/options.js +32 -0
  34. package/dist/components/ChipChoice/utils/typeGuards.d.ts +6 -0
  35. package/dist/components/ChipChoice/utils/typeGuards.js +15 -0
  36. package/dist/components/ChipChoice/utils/utils.d.ts +18 -0
  37. package/dist/components/ChipChoice/utils/utils.js +29 -0
  38. package/dist/components/ChipChoiceRow/components/constants.d.ts +2 -1
  39. package/dist/components/ChipChoiceRow/components/constants.js +2 -1
  40. package/dist/components/ChipChoiceRow/types.d.ts +11 -5
  41. package/dist/components/ChipToggle/styles.module.css +1 -1
  42. package/package.json +13 -7
  43. package/src/components/ChipAssist/ChipAssist.tsx +1 -0
  44. package/src/components/ChipChoice/components/ChipChoiceBase/ChipChoiceBase.tsx +149 -0
  45. package/src/components/ChipChoice/components/ChipChoiceBase/index.ts +1 -0
  46. package/src/components/ChipChoice/components/{ChipChoiceCustom → ChipChoiceBase}/styles.module.scss +11 -5
  47. package/src/components/ChipChoice/components/ChipChoiceCustom.tsx +89 -0
  48. package/src/components/ChipChoice/components/ChipChoiceDate.tsx +42 -18
  49. package/src/components/ChipChoice/components/ChipChoiceDateRange.tsx +43 -18
  50. package/src/components/ChipChoice/components/ChipChoiceMultiple.tsx +157 -0
  51. package/src/components/ChipChoice/components/ChipChoiceSingle.tsx +123 -62
  52. package/src/components/ChipChoice/components/index.ts +1 -1
  53. package/src/components/ChipChoice/constants.ts +3 -2
  54. package/src/components/ChipChoice/hooks.ts +61 -0
  55. package/src/components/ChipChoice/index.ts +7 -13
  56. package/src/components/ChipChoice/styles.module.scss +11 -5
  57. package/src/components/ChipChoice/types.ts +105 -7
  58. package/src/components/ChipChoice/utils/index.ts +3 -0
  59. package/src/components/ChipChoice/utils/options.tsx +58 -0
  60. package/src/components/ChipChoice/utils/typeGuards.ts +35 -0
  61. package/src/components/ChipChoice/utils/utils.ts +60 -0
  62. package/src/components/ChipChoiceRow/components/constants.ts +2 -1
  63. package/src/components/ChipChoiceRow/types.ts +18 -10
  64. package/dist/components/ChipChoice/components/ChipChoiceCustom/ChipChoiceCustom.d.ts +0 -23
  65. package/dist/components/ChipChoice/components/ChipChoiceCustom/ChipChoiceCustom.js +0 -75
  66. package/dist/components/ChipChoice/components/ChipChoiceCustom/index.d.ts +0 -1
  67. package/dist/components/ChipChoice/components/ChipChoiceCustom/index.js +0 -1
  68. package/dist/components/ChipChoice/components/ChipChoiceMulti.d.ts +0 -14
  69. package/dist/components/ChipChoice/components/ChipChoiceMulti.js +0 -44
  70. package/dist/components/ChipChoice/utils.d.ts +0 -14
  71. package/dist/components/ChipChoice/utils.js +0 -26
  72. package/src/components/ChipChoice/components/ChipChoiceCustom/ChipChoiceCustom.tsx +0 -188
  73. package/src/components/ChipChoice/components/ChipChoiceCustom/index.ts +0 -1
  74. package/src/components/ChipChoice/components/ChipChoiceMulti.tsx +0 -90
  75. package/src/components/ChipChoice/utils.ts +0 -48
package/CHANGELOG.md CHANGED
@@ -3,6 +3,37 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
5
 
6
+ ## 0.13.1 (2024-04-25)
7
+
8
+
9
+ ### Bug Fixes
10
+
11
+ * **PDS-0000:** add export type ContentRenderProps ([6ccd417](https://github.com/cloud-ru-tech/snack-uikit/commit/6ccd4179458703ebb03bc58c25300555799c1a8d))
12
+ * **PDS-0000:** fix clear button & label view in ChipMultiple ([064939f](https://github.com/cloud-ru-tech/snack-uikit/commit/064939f2ae0836ea381db8c38fac477d53b9a4ef))
13
+ * **PDS-0000:** set default button type as button ([4ec64de](https://github.com/cloud-ru-tech/snack-uikit/commit/4ec64de508826df4a1e82fd8c75448d9919e563f))
14
+
15
+
16
+
17
+
18
+
19
+ # 0.13.0 (2024-04-23)
20
+
21
+
22
+ ### Bug Fixes
23
+
24
+ * **FF-01:** fix pseudo background ([ee468df](https://github.com/cloud-ru-tech/snack-uikit/commit/ee468df9494a81c7948fb20a647a87bdd0b1e980))
25
+ * **PDS-59:** multi-value formatter ([f606ef2](https://github.com/cloud-ru-tech/snack-uikit/commit/f606ef2d3866dfc0f2630302732825cb9e5fb83c))
26
+ * **PDS-59:** upd tests ([df72712](https://github.com/cloud-ru-tech/snack-uikit/commit/df7271268ac1621316dbb98b274e3d6602515b23))
27
+
28
+
29
+ ### BREAKING CHANGES
30
+
31
+
32
+ * **PDS-59:** change droplist -> list package ([f63f48a](https://github.com/cloud-ru-tech/snack-uikit/commit/f63f48a394470243a7410933d5e97aaa50317154))
33
+
34
+
35
+
36
+
6
37
  ## 0.12.9 (2024-04-22)
7
38
 
8
39
  ### Only dependencies have been changed
package/README.md CHANGED
@@ -1,6 +1,7 @@
1
1
  # Chips
2
2
 
3
3
  ## Installation
4
+
4
5
  `npm i @snack-uikit/chips`
5
6
 
6
7
  [Changelog](./CHANGELOG.md)
@@ -126,18 +127,19 @@ import { PlaceholderSVG } from '@snack-uikit/icons';
126
127
  | showClearButton | `boolean` | true | Отображение кнопки очистки значения |
127
128
  | placement | enum Placement: `"left"`, `"left-start"`, `"left-end"`, `"right"`, `"right-start"`, `"right-end"`, `"top"`, `"top-start"`, `"top-end"`, `"bottom"`, `"bottom-start"`, `"bottom-end"` | - | Расположение выпадающего меню |
128
129
  | widthStrategy | enum PopoverWidthStrategy: `"auto"`, `"gte"`, `"eq"` | gte | Стратегия управления шириной контейнера поповера <br> - `auto` - соответствует ширине контента, <br> - `gte` - Great Than or Equal, равен ширине таргета или больше ее, если контент в поповере шире, <br> - `eq` - Equal, строго равен ширине таргета. |
129
- | valueToRender | `ReactNode` | - | Отображаемое значение |
130
- | value | `string \| Date \| string[] \| [Date, Date]` | - | Фактическое значение. Используется для отображения кнопки очистки, если свойство <strong>showClearButton=true</strong> |
131
- | onClearButtonClick | `MouseEventHandler<HTMLButtonElement>` | - | Колбек для клика по кнопке очистки |
132
- | children | `ReactNode \| ((props: { handleDroplistItemKeyDown: (e: KeyboardEvent<Element>, cb?: KeyboardEventHandler) => void; closeDroplist(): void; }) => ReactNode)` | - | Контент выпадающего меню <br> <br> Принимает <strong>ReactNode</strong> <br> Или функцию с аргументами: <br> <strong>handleDroplistItemKeyDown</strong>: Обработчик нажатия клавиши на элемент выпадающего меню <br> <strong>closeDroplist</strong>: Метод для закрытия выпадающего меню |
130
+ | dropDownClassName | `string` | - | |
131
+ | valueRender | `(value: any) => ReactNode` | - | Отображаемое значение |
132
+ | value | `any` | - | Фактическое значение. Используется для отображения кнопки очистки, если свойство <strong>showClearButton=true</strong> |
133
+ | onChange | `(value: any) => void` | - | |
134
+ | content | `(props: CustomContentRenderProps<any>) => ReactNode` | - | Контент выпадающего меню <br> <br> Принимает <strong>ReactNode</strong> <br> Или функцию с аргументами: <br> <strong>handleDroplistItemKeyDown</strong>: Обработчик нажатия клавиши на элемент выпадающего меню <br> <strong>closeDroplist</strong>: Метод для закрытия выпадающего меню |
133
135
  ## ChipChoice.Single
134
136
  ### Props
135
137
  | name | type | default value | description |
136
138
  |------|------|---------------|-------------|
137
- | options* | `FilterOption[]` | - | Массив опций |
139
+ | options* | `FilterOption<T>[]` | - | Массив опций |
138
140
  | label | `string` | - | Лейбл |
139
141
  | disabled | `boolean` | - | Деактивирован ли компонент |
140
- | loading | `boolean` | - | Состояние загрузки |
142
+ | loading | `boolean` | - | Состояние загрузки Флаг, отвещающий за состояние загрузки списка |
141
143
  | icon | `ReactElement<any, string \| JSXElementConstructor<any>>` | - | Иконка |
142
144
  | className | `string` | - | CSS-класс |
143
145
  | tabIndex | `number` | - | HTML tab index |
@@ -146,18 +148,32 @@ import { PlaceholderSVG } from '@snack-uikit/icons';
146
148
  | showClearButton | `boolean` | true | Отображение кнопки очистки значения |
147
149
  | placement | enum Placement: `"left"`, `"left-start"`, `"left-end"`, `"right"`, `"right-start"`, `"right-end"`, `"top"`, `"top-start"`, `"top-end"`, `"bottom"`, `"bottom-start"`, `"bottom-end"` | - | Расположение выпадающего меню |
148
150
  | widthStrategy | enum PopoverWidthStrategy: `"auto"`, `"gte"`, `"eq"` | gte | Стратегия управления шириной контейнера поповера <br> - `auto` - соответствует ширине контента, <br> - `gte` - Great Than or Equal, равен ширине таргета или больше ее, если контент в поповере шире, <br> - `eq` - Equal, строго равен ширине таргета. |
149
- | value | `string` | - | Значение компонента |
150
- | defaultValue | `string` | - | Значение компонента по умолчанию |
151
- | onChange | `(value: string) => void` | - | Колбек смены значения |
152
- | valueFormatter | `(option?: FilterOption) => string` | - | Колбек формирующий строковое представление выбранного значения. Принимает выбранное значение. По умолчанию для отображения используется FilterOption.label |
153
- ## ChipChoice.Multi
151
+ | dropDownClassName | `string` | - | |
152
+ | contentRender | `(option: { label: ItemId; value?: ItemId; contentRenderProps?: T; }) => ReactNode` | - | |
153
+ | filterFn | `(option: { label: ItemId; value?: ItemId; contentRenderProps?: T; }) => boolean` | - | |
154
+ | searchable | `boolean` | - | |
155
+ | footer | `ReactNode ;` | - | Кастомизируемый элемент в конце списка |
156
+ | footerActiveElementsRefs | `RefObject<HTMLElement>[]` | - | Список ссылок на кастомные элементы, помещенные в специальную секцию внизу списка |
157
+ | selection | `SelectionSingleState \| SelectionMultipleState` | - | |
158
+ | scrollRef | `RefObject<HTMLElement>` | - | Ссылка на элемент, обозначающий самый конец прокручиваемого списка |
159
+ | scrollContainerRef | `RefObject<HTMLElement>` | - | Ссылка на контейнер, который скроллится |
160
+ | dataFiltered | `boolean` | - | |
161
+ | dataError | `boolean` | - | |
162
+ | noDataState | `EmptyStateProps` | - | Экран при отстутствии данных |
163
+ | noResultsState | `EmptyStateProps` | - | Экран при отстутствии результатов поиска или фильтров |
164
+ | errorDataState | `EmptyStateProps` | - | Экран при ошибке запроса |
165
+ | onChange | `OnChangeHandler<any>` | - | Controlled обработчик измения состояния |
166
+ | value | `ItemId` | - | Controlled состояние |
167
+ | defaultValue | `ItemId` | - | Начальное состояние |
168
+ | valueRender | `(option?: BaseOption<T>) => ReactNode` | - | Колбек формирующий отображение выбранного значения. Принимает выбранное значение. По умолчанию для отображения используется FilterOption.label |
169
+ ## ChipChoice.Multiple
154
170
  ### Props
155
171
  | name | type | default value | description |
156
172
  |------|------|---------------|-------------|
157
- | options* | `FilterOption[]` | - | Массив опций |
173
+ | options* | `FilterOption<T>[]` | - | Массив опций |
158
174
  | label | `string` | - | Лейбл |
159
175
  | disabled | `boolean` | - | Деактивирован ли компонент |
160
- | loading | `boolean` | - | Состояние загрузки |
176
+ | loading | `boolean` | - | Состояние загрузки Флаг, отвещающий за состояние загрузки списка |
161
177
  | icon | `ReactElement<any, string \| JSXElementConstructor<any>>` | - | Иконка |
162
178
  | className | `string` | - | CSS-класс |
163
179
  | tabIndex | `number` | - | HTML tab index |
@@ -166,10 +182,24 @@ import { PlaceholderSVG } from '@snack-uikit/icons';
166
182
  | showClearButton | `boolean` | true | Отображение кнопки очистки значения |
167
183
  | placement | enum Placement: `"left"`, `"left-start"`, `"left-end"`, `"right"`, `"right-start"`, `"right-end"`, `"top"`, `"top-start"`, `"top-end"`, `"bottom"`, `"bottom-start"`, `"bottom-end"` | - | Расположение выпадающего меню |
168
184
  | widthStrategy | enum PopoverWidthStrategy: `"auto"`, `"gte"`, `"eq"` | gte | Стратегия управления шириной контейнера поповера <br> - `auto` - соответствует ширине контента, <br> - `gte` - Great Than or Equal, равен ширине таргета или больше ее, если контент в поповере шире, <br> - `eq` - Equal, строго равен ширине таргета. |
169
- | value | `string[]` | - | Значение компонента |
170
- | defaultValue | `string[]` | - | Значение компонента по умолчанию |
171
- | onChange | `(value: string[]) => void` | - | Колбек смены значения |
172
- | valueFormatter | `(options: FilterOption[]) => string` | - | Колбек формирующий строковое представление выбранного значения. Принимает массив выбранных значений. По умолчанию для отображения используется кол-во выбранных значений. |
185
+ | dropDownClassName | `string` | - | |
186
+ | contentRender | `(option: { label: ItemId; value?: ItemId; contentRenderProps?: T; }) => ReactNode` | - | |
187
+ | filterFn | `(option: { label: ItemId; value?: ItemId; contentRenderProps?: T; }) => boolean` | - | |
188
+ | searchable | `boolean` | - | |
189
+ | footer | `ReactNode ;` | - | Кастомизируемый элемент в конце списка |
190
+ | footerActiveElementsRefs | `RefObject<HTMLElement>[]` | - | Список ссылок на кастомные элементы, помещенные в специальную секцию внизу списка |
191
+ | selection | `SelectionSingleState \| SelectionMultipleState` | - | |
192
+ | scrollRef | `RefObject<HTMLElement>` | - | Ссылка на элемент, обозначающий самый конец прокручиваемого списка |
193
+ | scrollContainerRef | `RefObject<HTMLElement>` | - | Ссылка на контейнер, который скроллится |
194
+ | dataFiltered | `boolean` | - | |
195
+ | dataError | `boolean` | - | |
196
+ | noDataState | `EmptyStateProps` | - | Экран при отстутствии данных |
197
+ | noResultsState | `EmptyStateProps` | - | Экран при отстутствии результатов поиска или фильтров |
198
+ | errorDataState | `EmptyStateProps` | - | Экран при ошибке запроса |
199
+ | onChange | `OnChangeHandler<any>` | - | Controlled обработчик измения состояния |
200
+ | value | `ItemId[]` | - | Controlled состояние |
201
+ | defaultValue | `ItemId[]` | - | Начальное состояние |
202
+ | valueRender | `(option?: BaseOption<T>[]) => ReactNode` | - | Колбек формирующий отображение выбранного значения. Принимает выбранное значение. По умолчанию для отображения используется FilterOption.label |
173
203
  ## ChipChoice.Date
174
204
  ### Props
175
205
  | name | type | default value | description |
@@ -185,10 +215,11 @@ import { PlaceholderSVG } from '@snack-uikit/icons';
185
215
  | showClearButton | `boolean` | true | Отображение кнопки очистки значения |
186
216
  | placement | enum Placement: `"left"`, `"left-start"`, `"left-end"`, `"right"`, `"right-start"`, `"right-end"`, `"top"`, `"top-start"`, `"top-end"`, `"bottom"`, `"bottom-start"`, `"bottom-end"` | - | Расположение выпадающего меню |
187
217
  | widthStrategy | enum PopoverWidthStrategy: `"auto"`, `"gte"`, `"eq"` | gte | Стратегия управления шириной контейнера поповера <br> - `auto` - соответствует ширине контента, <br> - `gte` - Great Than or Equal, равен ширине таргета или больше ее, если контент в поповере шире, <br> - `eq` - Equal, строго равен ширине таргета. |
218
+ | dropDownClassName | `string` | - | |
188
219
  | value | `Date` | - | Значение компонента |
189
220
  | defaultValue | `Date` | - | Значение компонента по-умолчанию |
190
221
  | onChange | `(value: Date) => void` | - | Колбек смены значения |
191
- | valueFormatter | `(value?: Date) => string` | - | Колбек формирующий строковое представление выбранного значения. Принимает выбранное значение |
222
+ | valueRender | `(value?: Date) => ReactNode` | - | Колбек формирующий строковое представление выбранного значения. Принимает выбранное значение |
192
223
  ## ChipChoice.DateRange
193
224
  ### Props
194
225
  | name | type | default value | description |
@@ -204,10 +235,31 @@ import { PlaceholderSVG } from '@snack-uikit/icons';
204
235
  | showClearButton | `boolean` | true | Отображение кнопки очистки значения |
205
236
  | placement | enum Placement: `"left"`, `"left-start"`, `"left-end"`, `"right"`, `"right-start"`, `"right-end"`, `"top"`, `"top-start"`, `"top-end"`, `"bottom"`, `"bottom-start"`, `"bottom-end"` | - | Расположение выпадающего меню |
206
237
  | widthStrategy | enum PopoverWidthStrategy: `"auto"`, `"gte"`, `"eq"` | gte | Стратегия управления шириной контейнера поповера <br> - `auto` - соответствует ширине контента, <br> - `gte` - Great Than or Equal, равен ширине таргета или больше ее, если контент в поповере шире, <br> - `eq` - Equal, строго равен ширине таргета. |
238
+ | dropDownClassName | `string` | - | |
207
239
  | value | `Range` | - | Значение компонента |
208
240
  | defaultValue | `Range` | - | Значение компонента по умолчанию |
209
241
  | onChange | `(value: Range) => void` | - | Колбек смены значения |
210
- | valueFormatter | `(value?: Range) => string` | - | Колбек формирующий строковое представление выбранного значения. Принимает массив выбранных значений |
242
+ | valueRender | `(value?: Range) => ReactNode` | - | Колбек формирующий строковое представление выбранного значения. Принимает массив выбранных значений |
243
+ ## isAccordionOption
244
+ ### Props
245
+ | name | type | default value | description |
246
+ |------|------|---------------|-------------|
247
+ ## isBaseOption
248
+ ### Props
249
+ | name | type | default value | description |
250
+ |------|------|---------------|-------------|
251
+ ## isGroupOption
252
+ ### Props
253
+ | name | type | default value | description |
254
+ |------|------|---------------|-------------|
255
+ ## isGroupSelectOption
256
+ ### Props
257
+ | name | type | default value | description |
258
+ |------|------|---------------|-------------|
259
+ ## isNextListOption
260
+ ### Props
261
+ | name | type | default value | description |
262
+ |------|------|---------------|-------------|
211
263
  ## ChipChoiceRow
212
264
  ### Props
213
265
  | name | type | default value | description |
@@ -223,4 +275,3 @@ import { PlaceholderSVG } from '@snack-uikit/icons';
223
275
 
224
276
 
225
277
  [//]: DOCUMENTATION_SECTION_END
226
-
@@ -26,5 +26,5 @@ export function ChipAssist(_a) {
26
26
  }
27
27
  onClick === null || onClick === void 0 ? void 0 : onClick(e);
28
28
  };
29
- return (_jsxs("button", Object.assign({}, extractSupportProps(rest), { tabIndex: tabIndex, "data-size": size, "data-loading": loading || undefined, "data-variant": variant, disabled: !loading && disabled, onClick: handleClick, className: cn(styles.assistChip, className), children: [variant === VARIANT.IconBefore && !loading && (_jsx("span", { className: styles.icon, "data-test-id": CHIP_ASSIST_TEST_IDS.icon, children: icon })), loading && (_jsx("span", { className: styles.spinner, "data-test-id": CHIP_ASSIST_TEST_IDS.spinner, children: _jsx(Sun, { size: spinnerSize }) })), _jsx("span", { className: cn(styles.labelLayout, styles.label), "data-test-id": CHIP_ASSIST_TEST_IDS.label, children: label })] })));
29
+ return (_jsxs("button", Object.assign({ type: 'button' }, extractSupportProps(rest), { tabIndex: tabIndex, "data-size": size, "data-loading": loading || undefined, "data-variant": variant, disabled: !loading && disabled, onClick: handleClick, className: cn(styles.assistChip, className), children: [variant === VARIANT.IconBefore && !loading && (_jsx("span", { className: styles.icon, "data-test-id": CHIP_ASSIST_TEST_IDS.icon, children: icon })), loading && (_jsx("span", { className: styles.spinner, "data-test-id": CHIP_ASSIST_TEST_IDS.spinner, children: _jsx(Sun, { size: spinnerSize }) })), _jsx("span", { className: cn(styles.labelLayout, styles.label), "data-test-id": CHIP_ASSIST_TEST_IDS.label, children: label })] })));
30
30
  }
@@ -16,7 +16,7 @@
16
16
  outline:0;
17
17
  outline-offset:0;
18
18
  color:var(--sys-neutral-text-support, #656771);
19
- background-color:var(--sys-neutral-background1-level, #fafafc);
19
+ background-color:var(--sys-neutral-background1-level, #fdfdff);
20
20
  border-color:var(--sys-neutral-decor-default, #dfe2ec);
21
21
  }
22
22
  .assistChip .spinner{
@@ -0,0 +1,20 @@
1
+ import { KeyboardEvent, MouseEventHandler, ReactNode } from 'react';
2
+ import { ChipChoiceCommonProps } from '../../types';
3
+ export type ChipChoiceBaseProps = Pick<ChipChoiceCommonProps, 'loading' | 'tabIndex' | 'showClearButton' | 'disabled' | 'icon' | 'label' | 'size' | 'onClick' | 'className'> & {
4
+ /** Отображаемое значение */
5
+ valueToRender?: ReactNode;
6
+ /** Фактическое значение. Используется для отображения кнопки очистки, если свойство <strong>showClearButton=true</strong> */
7
+ value?: any;
8
+ /** Колбек для клика по кнопке очистки */
9
+ onClearButtonClick?: MouseEventHandler<HTMLButtonElement>;
10
+ onKeyDown?(e: KeyboardEvent<HTMLDivElement>): void;
11
+ };
12
+ export declare const ChipChoiceBase: import("react").ForwardRefExoticComponent<Pick<ChipChoiceCommonProps, "icon" | "size" | "label" | "disabled" | "loading" | "onClick" | "className" | "tabIndex" | "showClearButton"> & {
13
+ /** Отображаемое значение */
14
+ valueToRender?: ReactNode;
15
+ /** Фактическое значение. Используется для отображения кнопки очистки, если свойство <strong>showClearButton=true</strong> */
16
+ value?: any;
17
+ /** Колбек для клика по кнопке очистки */
18
+ onClearButtonClick?: MouseEventHandler<HTMLButtonElement> | undefined;
19
+ onKeyDown?(e: KeyboardEvent<HTMLDivElement>): void;
20
+ } & import("react").RefAttributes<HTMLDivElement>>;
@@ -0,0 +1,65 @@
1
+ var __rest = (this && this.__rest) || function (s, e) {
2
+ var t = {};
3
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
4
+ t[p] = s[p];
5
+ if (s != null && typeof Object.getOwnPropertySymbols === "function")
6
+ for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
7
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
8
+ t[p[i]] = s[p[i]];
9
+ }
10
+ return t;
11
+ };
12
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
13
+ import cn from 'classnames';
14
+ import mergeRefs from 'merge-refs';
15
+ import { forwardRef, useRef, useState } from 'react';
16
+ import { Sun } from '@snack-uikit/loaders';
17
+ import { extractSupportProps } from '@snack-uikit/utils';
18
+ import { CHIP_CHOICE_TEST_IDS, SIZE, VARIANT } from '../../../../constants';
19
+ import { ButtonClearValue } from '../../../../helperComponents';
20
+ import { BUTTON_CLEAR_VALUE_SIZE_MAP } from '../../constants';
21
+ import styles from './styles.module.css';
22
+ export const ChipChoiceBase = forwardRef((_a, ref) => {
23
+ var { size = SIZE.S, disabled, loading, icon, label, valueToRender, value, onClick, className, tabIndex = 0, onClearButtonClick, onKeyDown, showClearButton: showClearButtonProp = true } = _a, rest = __rest(_a, ["size", "disabled", "loading", "icon", "label", "valueToRender", "value", "onClick", "className", "tabIndex", "onClearButtonClick", "onKeyDown", "showClearButton"]);
24
+ const variant = icon && size !== SIZE.Xs ? VARIANT.IconBefore : VARIANT.LabelOnly;
25
+ const spinnerSize = size === SIZE.Xs ? 'xs' : 's';
26
+ const localRef = useRef(null);
27
+ const clearButtonRef = useRef(null);
28
+ const [isDroplistOpened, setIsDroplistOpened] = useState(false);
29
+ const handleChipClick = e => {
30
+ if (loading || disabled)
31
+ return;
32
+ onClick === null || onClick === void 0 ? void 0 : onClick(e);
33
+ !isDroplistOpened && setIsDroplistOpened(true);
34
+ };
35
+ const handleChipKeyDown = e => {
36
+ var _a;
37
+ onKeyDown === null || onKeyDown === void 0 ? void 0 : onKeyDown(e);
38
+ if (e.key === 'ArrowRight') {
39
+ (_a = clearButtonRef.current) === null || _a === void 0 ? void 0 : _a.focus();
40
+ e.stopPropagation();
41
+ e.preventDefault();
42
+ }
43
+ };
44
+ const handleClearButtonClick = e => {
45
+ onClearButtonClick === null || onClearButtonClick === void 0 ? void 0 : onClearButtonClick(e);
46
+ };
47
+ const handleClearButtonKeyDown = e => {
48
+ var _a;
49
+ switch (e.key) {
50
+ case 'ArrowLeft': {
51
+ (_a = localRef.current) === null || _a === void 0 ? void 0 : _a.focus();
52
+ return;
53
+ }
54
+ case 'Enter':
55
+ case ' ': {
56
+ e.stopPropagation();
57
+ return;
58
+ }
59
+ default:
60
+ break;
61
+ }
62
+ };
63
+ const showClearButton = showClearButtonProp && (value instanceof Date || Boolean(value));
64
+ return (_jsxs("div", Object.assign({}, extractSupportProps(rest), { role: 'button', ref: mergeRefs(localRef, ref), className: cn(styles.choiceChip, className), "data-size": size, "data-variant": variant, "data-loading": loading || undefined, "data-disabled": (!loading && disabled) || undefined, onClick: handleChipClick, onKeyDown: handleChipKeyDown, tabIndex: tabIndex, children: [variant === VARIANT.IconBefore && (_jsx("span", { className: styles.icon, "data-test-id": CHIP_CHOICE_TEST_IDS.icon, children: icon })), _jsxs("span", { className: styles.labelLayout, children: [label && (_jsx("span", { className: styles.label, "data-test-id": CHIP_CHOICE_TEST_IDS.label, children: label + ': ' })), loading ? (_jsx("span", { className: styles.spinner, "data-test-id": CHIP_CHOICE_TEST_IDS.spinner, children: _jsx(Sun, { size: spinnerSize }) })) : (_jsx("span", { className: styles.value, "data-test-id": CHIP_CHOICE_TEST_IDS.value, children: valueToRender !== null && valueToRender !== void 0 ? valueToRender : value }))] }), !disabled && !loading && showClearButton && (_jsx(ButtonClearValue, { size: BUTTON_CLEAR_VALUE_SIZE_MAP[size], onClick: handleClearButtonClick, "data-test-id": CHIP_CHOICE_TEST_IDS.clearButton, onKeyDown: handleClearButtonKeyDown, ref: clearButtonRef }))] })));
65
+ });
@@ -0,0 +1 @@
1
+ export * from './ChipChoiceBase';
@@ -0,0 +1 @@
1
+ export * from './ChipChoiceBase';
@@ -1,4 +1,5 @@
1
- .label, .value{
1
+ .label,
2
+ .value{
2
3
  display:inline-flex;
3
4
  align-items:center;
4
5
  }
@@ -20,7 +21,7 @@
20
21
  border-style:solid;
21
22
  outline:0;
22
23
  outline-offset:0;
23
- background-color:var(--sys-neutral-background1-level, #fafafc);
24
+ background-color:var(--sys-neutral-background1-level, #fdfdff);
24
25
  border-color:var(--sys-neutral-decor-default, #dfe2ec);
25
26
  }
26
27
  .choiceChip .spinner{
@@ -117,7 +118,8 @@
117
118
  padding-right:var(--space-chips-label-layout-padding-l, 12px);
118
119
  gap:var(--space-chips-label-layout-gap, 2px);
119
120
  }
120
- .choiceChip .label, .choiceChip .value{
121
+ .choiceChip .label,
122
+ .choiceChip .value{
121
123
  color:var(--sys-neutral-text-support, #656771);
122
124
  }
123
125
  .choiceChip .icon{
@@ -177,7 +179,8 @@
177
179
  background-color:var(--sys-neutral-background, #f1f2f6);
178
180
  border-color:var(--sys-neutral-decor-disabled, #e8eaf1);
179
181
  }
180
- .choiceChip[data-disabled] .label, .choiceChip[data-disabled] .value{
182
+ .choiceChip[data-disabled] .label,
183
+ .choiceChip[data-disabled] .value{
181
184
  color:var(--sys-neutral-text-light, #868892);
182
185
  }
183
186
  .choiceChip[data-loading]{
@@ -190,7 +193,8 @@
190
193
  align-items:center;
191
194
  justify-content:center;
192
195
  }
193
- .choiceChip[data-loading] .label, .choiceChip[data-loading] .value{
196
+ .choiceChip[data-loading] .label,
197
+ .choiceChip[data-loading] .value{
194
198
  color:var(--sys-neutral-text-support, #656771);
195
199
  }
196
200
 
@@ -198,7 +202,8 @@
198
202
  --offset:var(--space-drop-list-drop-offset, 4px);
199
203
  }
200
204
 
201
- .label, .value{
205
+ .label,
206
+ .value{
202
207
  display:inline-flex;
203
208
  align-items:center;
204
209
  }
@@ -220,7 +225,7 @@
220
225
  border-style:solid;
221
226
  outline:0;
222
227
  outline-offset:0;
223
- background-color:var(--sys-neutral-background1-level, #fafafc);
228
+ background-color:var(--sys-neutral-background1-level, #fdfdff);
224
229
  border-color:var(--sys-neutral-decor-default, #dfe2ec);
225
230
  }
226
231
  .choiceChip .spinner{
@@ -317,7 +322,8 @@
317
322
  padding-right:var(--space-chips-label-layout-padding-l, 12px);
318
323
  gap:var(--space-chips-label-layout-gap, 2px);
319
324
  }
320
- .choiceChip .label, .choiceChip .value{
325
+ .choiceChip .label,
326
+ .choiceChip .value{
321
327
  color:var(--sys-neutral-text-support, #656771);
322
328
  }
323
329
  .choiceChip .icon{
@@ -377,7 +383,8 @@
377
383
  background-color:var(--sys-neutral-background, #f1f2f6);
378
384
  border-color:var(--sys-neutral-decor-disabled, #e8eaf1);
379
385
  }
380
- .choiceChip[data-disabled] .label, .choiceChip[data-disabled] .value{
386
+ .choiceChip[data-disabled] .label,
387
+ .choiceChip[data-disabled] .value{
381
388
  color:var(--sys-neutral-text-light, #868892);
382
389
  }
383
390
  .choiceChip[data-loading]{
@@ -393,7 +400,8 @@
393
400
  align-items:center;
394
401
  justify-content:center;
395
402
  }
396
- .choiceChip[data-loading] .label, .choiceChip[data-loading] .value{
403
+ .choiceChip[data-loading] .label,
404
+ .choiceChip[data-loading] .value{
397
405
  color:var(--sys-neutral-text-support, #656771);
398
406
  }
399
407
 
@@ -0,0 +1,25 @@
1
+ import { ReactNode } from 'react';
2
+ import { ChipChoiceCommonProps } from '../types';
3
+ type AnyType = any;
4
+ export type CustomContentRenderProps<T = AnyType> = {
5
+ closeDroplist(): void;
6
+ value: T;
7
+ onChange?(value: T): void;
8
+ };
9
+ export type ChipChoiceCustomProps = ChipChoiceCommonProps & {
10
+ /** Отображаемое значение */
11
+ valueRender?(value: AnyType): ReactNode;
12
+ /** Фактическое значение. Используется для отображения кнопки очистки, если свойство <strong>showClearButton=true</strong> */
13
+ value?: AnyType;
14
+ onChange?(value: AnyType): void;
15
+ /** Контент выпадающего меню
16
+ <br>
17
+ <br> Принимает <strong>ReactNode</strong>
18
+ <br> Или функцию с аргументами:
19
+ <br> <strong>handleDroplistItemKeyDown</strong>: Обработчик нажатия клавиши на элемент выпадающего меню
20
+ <br> <strong>closeDroplist</strong>: Метод для закрытия выпадающего меню
21
+ */
22
+ content?: (props: CustomContentRenderProps) => ReactNode;
23
+ };
24
+ export declare function ChipChoiceCustom({ size, value: valueProp, onChange: onChangeProp, placement, widthStrategy, content, valueRender, ...rest }: ChipChoiceCustomProps): import("react/jsx-runtime").JSX.Element;
25
+ export {};
@@ -0,0 +1,38 @@
1
+ var __rest = (this && this.__rest) || function (s, e) {
2
+ var t = {};
3
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
4
+ t[p] = s[p];
5
+ if (s != null && typeof Object.getOwnPropertySymbols === "function")
6
+ for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
7
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
8
+ t[p[i]] = s[p[i]];
9
+ }
10
+ return t;
11
+ };
12
+ import { jsx as _jsx } from "react/jsx-runtime";
13
+ import { useCallback, useRef, useState } from 'react';
14
+ import { Dropdown } from '@snack-uikit/dropdown';
15
+ import { useValueControl } from '@snack-uikit/utils';
16
+ import { CHIP_CHOICE_TEST_IDS, SIZE } from '../../../constants';
17
+ import { useHandleOnKeyDown } from '../hooks';
18
+ import { ChipChoiceBase } from './ChipChoiceBase';
19
+ export function ChipChoiceCustom(_a) {
20
+ var _b;
21
+ var { size = SIZE.S, value: valueProp, onChange: onChangeProp, placement = 'bottom-start', widthStrategy = 'gte', content, valueRender } = _a, rest = __rest(_a, ["size", "value", "onChange", "placement", "widthStrategy", "content", "valueRender"]);
22
+ const localRef = useRef(null);
23
+ const [value, setValue] = useValueControl({
24
+ value: valueProp,
25
+ onChange: onChangeProp,
26
+ });
27
+ const [open, setOpen] = useState(false);
28
+ const handleOnKeyDown = useHandleOnKeyDown({ setOpen });
29
+ const closeDroplist = useCallback(() => {
30
+ setOpen(false);
31
+ setTimeout(() => { var _a; return (_a = localRef.current) === null || _a === void 0 ? void 0 : _a.focus(); }, 0);
32
+ }, []);
33
+ const clearValue = () => {
34
+ setValue === null || setValue === void 0 ? void 0 : setValue(undefined);
35
+ closeDroplist();
36
+ };
37
+ return (_jsx(Dropdown, { trigger: 'click', widthStrategy: widthStrategy, placement: placement, outsideClick: true, triggerRef: localRef, open: open, onOpenChange: setOpen, "data-test-id": CHIP_CHOICE_TEST_IDS.droplist, content: typeof content === 'function' ? content({ closeDroplist, value, onChange: setValue }) : content, children: _jsx(ChipChoiceBase, Object.assign({}, rest, { valueToRender: (_b = valueRender === null || valueRender === void 0 ? void 0 : valueRender(value)) !== null && _b !== void 0 ? _b : value, onClearButtonClick: clearValue, ref: localRef, value: value, size: size, onKeyDown: handleOnKeyDown() })) }));
38
+ }
@@ -1,3 +1,4 @@
1
+ import { ReactNode } from 'react';
1
2
  import { ChipChoiceCommonProps } from '../types';
2
3
  export type ChipChoiceDateProps = ChipChoiceCommonProps & {
3
4
  /** Значение компонента */
@@ -7,6 +8,6 @@ export type ChipChoiceDateProps = ChipChoiceCommonProps & {
7
8
  /** Колбек смены значения */
8
9
  onChange?(value: Date): void;
9
10
  /** Колбек формирующий строковое представление выбранного значения. Принимает выбранное значение */
10
- valueFormatter?(value?: Date): string;
11
+ valueRender?(value?: Date): ReactNode;
11
12
  };
12
- export declare function ChipChoiceDate({ size, value, defaultValue, onChange, valueFormatter, ...rest }: ChipChoiceDateProps): import("react/jsx-runtime").JSX.Element;
13
+ export declare function ChipChoiceDate({ size, value, defaultValue, onChange, valueRender, dropDownClassName, ...rest }: ChipChoiceDateProps): import("react/jsx-runtime").JSX.Element;
@@ -10,22 +10,32 @@ var __rest = (this && this.__rest) || function (s, e) {
10
10
  return t;
11
11
  };
12
12
  import { jsx as _jsx } from "react/jsx-runtime";
13
- import { useUncontrolledProp } from 'uncontrollable';
13
+ import { useCallback, useRef, useState } from 'react';
14
14
  import { Calendar } from '@snack-uikit/calendar';
15
+ import { Dropdown } from '@snack-uikit/dropdown';
15
16
  import { useLocale } from '@snack-uikit/locale';
16
- import { SIZE } from '../../../constants';
17
+ import { useValueControl } from '@snack-uikit/utils';
18
+ import { CHIP_CHOICE_TEST_IDS, SIZE } from '../../../constants';
17
19
  import { CALENDAR_SIZE_MAP } from '../constants';
18
- import { ChipChoiceCustom } from './ChipChoiceCustom';
20
+ import { useHandleOnKeyDown } from '../hooks';
21
+ import { ChipChoiceBase } from './ChipChoiceBase';
19
22
  export function ChipChoiceDate(_a) {
20
- var { size = SIZE.S, value, defaultValue, onChange, valueFormatter } = _a, rest = __rest(_a, ["size", "value", "defaultValue", "onChange", "valueFormatter"]);
21
- const [selectedValue, setSelectedValue] = useUncontrolledProp(value, defaultValue, onChange);
23
+ var { size = SIZE.S, value, defaultValue, onChange, valueRender, dropDownClassName } = _a, rest = __rest(_a, ["size", "value", "defaultValue", "onChange", "valueRender", "dropDownClassName"]);
24
+ const [selectedValue, setSelectedValue] = useValueControl({ value, defaultValue, onChange });
25
+ const localRef = useRef(null);
26
+ const [open, setOpen] = useState(false);
27
+ const handleOnKeyDown = useHandleOnKeyDown({ setOpen });
28
+ const closeDroplist = useCallback(() => {
29
+ setOpen(false);
30
+ setTimeout(() => { var _a; return (_a = localRef.current) === null || _a === void 0 ? void 0 : _a.focus(); }, 0);
31
+ }, []);
22
32
  const { t } = useLocale('Chips');
23
- const valueToRender = valueFormatter
24
- ? valueFormatter(selectedValue)
33
+ const valueToRender = valueRender
34
+ ? valueRender(selectedValue)
25
35
  : (selectedValue && new Date(selectedValue).toLocaleDateString()) || t('allLabel');
26
36
  const clearValue = () => setSelectedValue(undefined);
27
- return (_jsx(ChipChoiceCustom, Object.assign({ onClearButtonClick: clearValue, value: selectedValue, valueToRender: valueToRender, size: size }, rest, { children: ({ closeDroplist }) => (_jsx(Calendar, { mode: 'date', size: CALENDAR_SIZE_MAP[size], value: selectedValue, onChangeValue: value => {
37
+ return (_jsx(Dropdown, { content: _jsx(Calendar, { mode: 'date', size: CALENDAR_SIZE_MAP[size], value: selectedValue, onChangeValue: value => {
28
38
  setSelectedValue(value);
29
39
  closeDroplist();
30
- }, navigationStartRef: element => element === null || element === void 0 ? void 0 : element.focus(), onFocusLeave: closeDroplist })) })));
40
+ }, navigationStartRef: element => element === null || element === void 0 ? void 0 : element.focus(), onFocusLeave: closeDroplist }), outsideClick: true, triggerRef: localRef, open: open, onOpenChange: setOpen, className: dropDownClassName, "data-test-id": CHIP_CHOICE_TEST_IDS.droplist, children: _jsx(ChipChoiceBase, Object.assign({}, rest, { ref: localRef, onClearButtonClick: clearValue, value: selectedValue, valueToRender: valueToRender, size: size, onKeyDown: handleOnKeyDown() })) }));
31
41
  }
@@ -1,3 +1,4 @@
1
+ import { ReactNode } from 'react';
1
2
  import { ChipChoiceCommonProps } from '../types';
2
3
  type Range = [Date, Date];
3
4
  export type ChipChoiceDateRangeProps = ChipChoiceCommonProps & {
@@ -8,7 +9,7 @@ export type ChipChoiceDateRangeProps = ChipChoiceCommonProps & {
8
9
  /** Колбек смены значения */
9
10
  onChange?(value: Range): void;
10
11
  /** Колбек формирующий строковое представление выбранного значения. Принимает массив выбранных значений */
11
- valueFormatter?(value?: Range): string;
12
+ valueRender?(value?: Range): ReactNode;
12
13
  };
13
- export declare function ChipChoiceDateRange({ size, value, defaultValue, onChange, valueFormatter, ...rest }: ChipChoiceDateRangeProps): import("react/jsx-runtime").JSX.Element;
14
+ export declare function ChipChoiceDateRange({ size, value, defaultValue, onChange, valueRender, dropDownClassName, ...rest }: ChipChoiceDateRangeProps): import("react/jsx-runtime").JSX.Element;
14
15
  export {};
@@ -10,12 +10,15 @@ var __rest = (this && this.__rest) || function (s, e) {
10
10
  return t;
11
11
  };
12
12
  import { jsx as _jsx } from "react/jsx-runtime";
13
+ import { useCallback, useRef, useState } from 'react';
13
14
  import { useUncontrolledProp } from 'uncontrollable';
14
15
  import { Calendar } from '@snack-uikit/calendar';
16
+ import { Dropdown } from '@snack-uikit/dropdown';
15
17
  import { useLocale } from '@snack-uikit/locale';
16
- import { DEFAULT_EMPTY_VALUE, SIZE } from '../../../constants';
18
+ import { CHIP_CHOICE_TEST_IDS, DEFAULT_EMPTY_VALUE, SIZE } from '../../../constants';
17
19
  import { CALENDAR_SIZE_MAP } from '../constants';
18
- import { ChipChoiceCustom } from './ChipChoiceCustom';
20
+ import { useHandleOnKeyDown } from '../hooks';
21
+ import { ChipChoiceBase } from './ChipChoiceBase';
19
22
  function defaultRangeFormatter({ value, allLabel }) {
20
23
  if (!value || !value.length)
21
24
  return allLabel;
@@ -23,18 +26,25 @@ function defaultRangeFormatter({ value, allLabel }) {
23
26
  return `${from.toLocaleDateString()} ${DEFAULT_EMPTY_VALUE} ${to.toLocaleDateString()}`;
24
27
  }
25
28
  export function ChipChoiceDateRange(_a) {
26
- var { size = SIZE.S, value, defaultValue, onChange, valueFormatter } = _a, rest = __rest(_a, ["size", "value", "defaultValue", "onChange", "valueFormatter"]);
29
+ var { size = SIZE.S, value, defaultValue, onChange, valueRender, dropDownClassName } = _a, rest = __rest(_a, ["size", "value", "defaultValue", "onChange", "valueRender", "dropDownClassName"]);
27
30
  const [selectedValue, setSelectedValue] = useUncontrolledProp(value, defaultValue, onChange);
28
31
  const { t } = useLocale('Chips');
29
- const valueToRender = valueFormatter
30
- ? valueFormatter(selectedValue)
32
+ const valueToRender = valueRender
33
+ ? valueRender(selectedValue)
31
34
  : defaultRangeFormatter({ value: selectedValue, allLabel: t('allLabel') });
32
35
  const clearValue = () => setSelectedValue(undefined);
33
- return (_jsx(ChipChoiceCustom, Object.assign({ value: selectedValue, valueToRender: valueToRender, onClearButtonClick: clearValue, size: size }, rest, { children: ({ closeDroplist }) => (_jsx(Calendar, { mode: 'range', size: CALENDAR_SIZE_MAP[size], value: selectedValue, onChangeValue: range => {
34
- setSelectedValue(range);
36
+ const localRef = useRef(null);
37
+ const [open, setOpen] = useState(false);
38
+ const closeDroplist = useCallback(() => {
39
+ setOpen(false);
40
+ setTimeout(() => { var _a; return (_a = localRef.current) === null || _a === void 0 ? void 0 : _a.focus(); }, 0);
41
+ }, []);
42
+ const handleOnKeyDown = useHandleOnKeyDown({ setOpen });
43
+ return (_jsx(Dropdown, { content: _jsx(Calendar, { mode: 'range', size: CALENDAR_SIZE_MAP[size], value: selectedValue, onChangeValue: value => {
44
+ setSelectedValue(value);
35
45
  closeDroplist();
36
46
  },
37
47
  // bug with focus
38
48
  // navigationStartRef={element => element?.focus()}
39
- onFocusLeave: closeDroplist })) })));
49
+ onFocusLeave: closeDroplist }), outsideClick: true, triggerRef: localRef, open: open, "data-test-id": CHIP_CHOICE_TEST_IDS.droplist, onOpenChange: setOpen, className: dropDownClassName, children: _jsx(ChipChoiceBase, Object.assign({}, rest, { ref: localRef, onClearButtonClick: clearValue, value: selectedValue, valueToRender: valueToRender, size: size, onKeyDown: handleOnKeyDown() })) }));
40
50
  }
@@ -0,0 +1,8 @@
1
+ import { ChipChoiceMultipleProps, ContentRenderProps } from '../types';
2
+ import { FlattenOption } from '../utils';
3
+ export type ChipChoiceMultipleValueFormatterProps<T extends ContentRenderProps = ContentRenderProps> = {
4
+ value: FlattenOption<T>[];
5
+ total: number;
6
+ allLabel: string;
7
+ };
8
+ export declare function ChipChoiceMultiple<T extends ContentRenderProps = ContentRenderProps>({ value: valueProp, defaultValue, options, onChange: onChangeProp, valueRender, size, label, searchable, contentRender, dropDownClassName, showClearButton, ...rest }: ChipChoiceMultipleProps<T>): import("react/jsx-runtime").JSX.Element;