@snack-uikit/chips 0.8.5-preview-85c5f47b.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.
Files changed (105) hide show
  1. package/CHANGELOG.md +483 -0
  2. package/LICENSE +201 -0
  3. package/README.md +226 -0
  4. package/dist/components/ChipAssist/ChipAssist.d.ts +15 -0
  5. package/dist/components/ChipAssist/ChipAssist.js +31 -0
  6. package/dist/components/ChipAssist/index.d.ts +1 -0
  7. package/dist/components/ChipAssist/index.js +1 -0
  8. package/dist/components/ChipAssist/styles.module.css +159 -0
  9. package/dist/components/ChipChoice/components/ChipChoiceCustom/ChipChoiceCustom.d.ts +23 -0
  10. package/dist/components/ChipChoice/components/ChipChoiceCustom/ChipChoiceCustom.js +75 -0
  11. package/dist/components/ChipChoice/components/ChipChoiceCustom/index.d.ts +1 -0
  12. package/dist/components/ChipChoice/components/ChipChoiceCustom/index.js +1 -0
  13. package/dist/components/ChipChoice/components/ChipChoiceCustom/styles.module.css +402 -0
  14. package/dist/components/ChipChoice/components/ChipChoiceDate.d.ts +12 -0
  15. package/dist/components/ChipChoice/components/ChipChoiceDate.js +29 -0
  16. package/dist/components/ChipChoice/components/ChipChoiceDateRange.d.ts +14 -0
  17. package/dist/components/ChipChoice/components/ChipChoiceDateRange.js +36 -0
  18. package/dist/components/ChipChoice/components/ChipChoiceMulti.d.ts +14 -0
  19. package/dist/components/ChipChoice/components/ChipChoiceMulti.js +42 -0
  20. package/dist/components/ChipChoice/components/ChipChoiceSingle.d.ts +14 -0
  21. package/dist/components/ChipChoice/components/ChipChoiceSingle.js +34 -0
  22. package/dist/components/ChipChoice/components/index.d.ts +5 -0
  23. package/dist/components/ChipChoice/components/index.js +5 -0
  24. package/dist/components/ChipChoice/constants.d.ts +25 -0
  25. package/dist/components/ChipChoice/constants.js +28 -0
  26. package/dist/components/ChipChoice/index.d.ts +17 -0
  27. package/dist/components/ChipChoice/index.js +17 -0
  28. package/dist/components/ChipChoice/styles.module.css +199 -0
  29. package/dist/components/ChipChoice/types.d.ts +27 -0
  30. package/dist/components/ChipChoice/types.js +1 -0
  31. package/dist/components/ChipChoice/utils.d.ts +4 -0
  32. package/dist/components/ChipChoice/utils.js +14 -0
  33. package/dist/components/ChipChoiceRow/ChipChoiceRow.d.ts +26 -0
  34. package/dist/components/ChipChoiceRow/ChipChoiceRow.js +45 -0
  35. package/dist/components/ChipChoiceRow/components/ForwardedChipChoice.d.ts +2 -0
  36. package/dist/components/ChipChoiceRow/components/ForwardedChipChoice.js +6 -0
  37. package/dist/components/ChipChoiceRow/components/constants.d.ts +6 -0
  38. package/dist/components/ChipChoiceRow/components/constants.js +7 -0
  39. package/dist/components/ChipChoiceRow/components/index.d.ts +1 -0
  40. package/dist/components/ChipChoiceRow/components/index.js +1 -0
  41. package/dist/components/ChipChoiceRow/constants.d.ts +15 -0
  42. package/dist/components/ChipChoiceRow/constants.js +18 -0
  43. package/dist/components/ChipChoiceRow/index.d.ts +1 -0
  44. package/dist/components/ChipChoiceRow/index.js +1 -0
  45. package/dist/components/ChipChoiceRow/styles.module.css +6 -0
  46. package/dist/components/ChipChoiceRow/types.d.ts +20 -0
  47. package/dist/components/ChipChoiceRow/types.js +1 -0
  48. package/dist/components/ChipToggle/ChipToggle.d.ts +17 -0
  49. package/dist/components/ChipToggle/ChipToggle.js +31 -0
  50. package/dist/components/ChipToggle/index.d.ts +1 -0
  51. package/dist/components/ChipToggle/index.js +1 -0
  52. package/dist/components/ChipToggle/styles.module.css +219 -0
  53. package/dist/components/index.d.ts +4 -0
  54. package/dist/components/index.js +4 -0
  55. package/dist/constants.d.ts +37 -0
  56. package/dist/constants.js +40 -0
  57. package/dist/helperComponents/ButtonClearValue/ButtonClearValue.d.ts +11 -0
  58. package/dist/helperComponents/ButtonClearValue/ButtonClearValue.js +12 -0
  59. package/dist/helperComponents/ButtonClearValue/index.d.ts +1 -0
  60. package/dist/helperComponents/ButtonClearValue/index.js +1 -0
  61. package/dist/helperComponents/ButtonClearValue/styles.module.css +43 -0
  62. package/dist/helperComponents/index.d.ts +1 -0
  63. package/dist/helperComponents/index.js +1 -0
  64. package/dist/index.d.ts +1 -0
  65. package/dist/index.js +1 -0
  66. package/dist/styles.module.css +0 -0
  67. package/dist/types.d.ts +15 -0
  68. package/dist/types.js +1 -0
  69. package/package.json +45 -0
  70. package/src/components/ChipAssist/ChipAssist.tsx +73 -0
  71. package/src/components/ChipAssist/index.ts +1 -0
  72. package/src/components/ChipAssist/styles.module.scss +60 -0
  73. package/src/components/ChipChoice/components/ChipChoiceCustom/ChipChoiceCustom.tsx +188 -0
  74. package/src/components/ChipChoice/components/ChipChoiceCustom/index.ts +1 -0
  75. package/src/components/ChipChoice/components/ChipChoiceCustom/styles.module.scss +90 -0
  76. package/src/components/ChipChoice/components/ChipChoiceDate.tsx +60 -0
  77. package/src/components/ChipChoice/components/ChipChoiceDateRange.tsx +69 -0
  78. package/src/components/ChipChoice/components/ChipChoiceMulti.tsx +87 -0
  79. package/src/components/ChipChoice/components/ChipChoiceSingle.tsx +77 -0
  80. package/src/components/ChipChoice/components/index.ts +5 -0
  81. package/src/components/ChipChoice/constants.ts +32 -0
  82. package/src/components/ChipChoice/index.ts +39 -0
  83. package/src/components/ChipChoice/styles.module.scss +90 -0
  84. package/src/components/ChipChoice/types.ts +33 -0
  85. package/src/components/ChipChoice/utils.ts +20 -0
  86. package/src/components/ChipChoiceRow/ChipChoiceRow.tsx +100 -0
  87. package/src/components/ChipChoiceRow/components/ForwardedChipChoice.tsx +10 -0
  88. package/src/components/ChipChoiceRow/components/constants.ts +8 -0
  89. package/src/components/ChipChoiceRow/components/index.ts +1 -0
  90. package/src/components/ChipChoiceRow/constants.ts +21 -0
  91. package/src/components/ChipChoiceRow/index.ts +1 -0
  92. package/src/components/ChipChoiceRow/styles.module.scss +8 -0
  93. package/src/components/ChipChoiceRow/types.ts +34 -0
  94. package/src/components/ChipToggle/ChipToggle.tsx +87 -0
  95. package/src/components/ChipToggle/index.ts +1 -0
  96. package/src/components/ChipToggle/styles.module.scss +153 -0
  97. package/src/components/index.ts +4 -0
  98. package/src/constants.ts +44 -0
  99. package/src/helperComponents/ButtonClearValue/ButtonClearValue.tsx +39 -0
  100. package/src/helperComponents/ButtonClearValue/index.ts +1 -0
  101. package/src/helperComponents/ButtonClearValue/styles.module.scss +50 -0
  102. package/src/helperComponents/index.ts +1 -0
  103. package/src/index.ts +1 -0
  104. package/src/styles.module.scss +114 -0
  105. package/src/types.ts +16 -0
@@ -0,0 +1,28 @@
1
+ import { Calendar } from '@snack-uikit/calendar';
2
+ import { Droplist } from '@snack-uikit/droplist';
3
+ import { ButtonSize, Size } from '../../constants';
4
+ export const BUTTON_CLEAR_VALUE_SIZE_MAP = {
5
+ [Size.Xs]: ButtonSize.Xxs,
6
+ [Size.S]: ButtonSize.Xs,
7
+ [Size.M]: ButtonSize.Xs,
8
+ [Size.L]: ButtonSize.Xs,
9
+ };
10
+ export const CALENDAR_SIZE_MAP = {
11
+ [Size.Xs]: Calendar.sizes.S,
12
+ [Size.S]: Calendar.sizes.S,
13
+ [Size.M]: Calendar.sizes.M,
14
+ [Size.L]: Calendar.sizes.M,
15
+ };
16
+ export const DROPLIST_SIZE_MAP = {
17
+ [Size.Xs]: Droplist.sizes.S,
18
+ [Size.S]: Droplist.sizes.S,
19
+ [Size.M]: Droplist.sizes.M,
20
+ [Size.L]: Droplist.sizes.L,
21
+ };
22
+ export var ChipChoiceType;
23
+ (function (ChipChoiceType) {
24
+ ChipChoiceType["Multi"] = "multi";
25
+ ChipChoiceType["Date"] = "date";
26
+ ChipChoiceType["DateRange"] = "date-range";
27
+ ChipChoiceType["Single"] = "single";
28
+ })(ChipChoiceType || (ChipChoiceType = {}));
@@ -0,0 +1,17 @@
1
+ import { Size, Variant } from '../../constants';
2
+ import { ChipChoiceCustom, ChipChoiceCustomProps, ChipChoiceDate, ChipChoiceDateProps, ChipChoiceDateRange, ChipChoiceDateRangeProps, ChipChoiceMulti, ChipChoiceMultiProps, ChipChoiceSingle, ChipChoiceSingleProps } from './components';
3
+ import { ChipChoiceType } from './constants';
4
+ export type { FilterOption } from './types';
5
+ export type { ChipChoiceCustomProps, ChipChoiceMultiProps, ChipChoiceSingleProps, ChipChoiceDateProps, ChipChoiceDateRangeProps, };
6
+ export declare namespace ChipChoice {
7
+ const Custom: typeof ChipChoiceCustom;
8
+ const Single: typeof ChipChoiceSingle;
9
+ const Multi: typeof ChipChoiceMulti;
10
+ const Date: typeof ChipChoiceDate;
11
+ const DateRange: typeof ChipChoiceDateRange;
12
+ const sizes: typeof Size;
13
+ const variants: typeof Variant;
14
+ const placements: typeof import("@snack-uikit/popover-private/dist/constants").Placement;
15
+ const widthStrategies: typeof import("@snack-uikit/popover-private/dist/constants").PopoverWidthStrategy;
16
+ const types: typeof ChipChoiceType;
17
+ }
@@ -0,0 +1,17 @@
1
+ import { Droplist } from '@snack-uikit/droplist';
2
+ import { Size, Variant } from '../../constants';
3
+ import { ChipChoiceCustom, ChipChoiceDate, ChipChoiceDateRange, ChipChoiceMulti, ChipChoiceSingle, } from './components';
4
+ import { ChipChoiceType } from './constants';
5
+ export var ChipChoice;
6
+ (function (ChipChoice) {
7
+ ChipChoice.Custom = ChipChoiceCustom;
8
+ ChipChoice.Single = ChipChoiceSingle;
9
+ ChipChoice.Multi = ChipChoiceMulti;
10
+ ChipChoice.Date = ChipChoiceDate;
11
+ ChipChoice.DateRange = ChipChoiceDateRange;
12
+ ChipChoice.sizes = Size;
13
+ ChipChoice.variants = Variant;
14
+ ChipChoice.placements = Droplist.placements;
15
+ ChipChoice.widthStrategies = Droplist.widthStrategies;
16
+ ChipChoice.types = ChipChoiceType;
17
+ })(ChipChoice || (ChipChoice = {}));
@@ -0,0 +1,199 @@
1
+ .label, .value{
2
+ display:inline-flex;
3
+ align-items:center;
4
+ }
5
+
6
+ .choiceChip{
7
+ cursor:pointer;
8
+ position:relative;
9
+ display:inline-flex;
10
+ align-items:center;
11
+ box-sizing:border-box;
12
+ width:-moz-max-content;
13
+ width:max-content;
14
+ min-width:-moz-max-content;
15
+ min-width:max-content;
16
+ margin:0;
17
+ padding:0;
18
+ text-decoration:none;
19
+ text-transform:none;
20
+ border-style:solid;
21
+ outline:0;
22
+ outline-offset:0;
23
+ background-color:var(--sys-neutral-background1-level, #f9f9f9);
24
+ border-color:var(--sys-neutral-decor-default, #dedede);
25
+ }
26
+ .choiceChip .spinner{
27
+ display:inline-flex;
28
+ }
29
+ .choiceChip .icon{
30
+ display:inline-flex;
31
+ }
32
+ .choiceChip .icon svg{
33
+ width:var(--dimension-3m, 24px) !important;
34
+ height:var(--dimension-3m, 24px) !important;
35
+ }
36
+ .choiceChip .labelLayout{
37
+ display:inline-flex;
38
+ align-items:center;
39
+ }
40
+ .choiceChip[data-size=xs]{
41
+ height:var(--size-chips-xs, 24px);
42
+ padding-left:var(--space-chips-container-padding-xs, 3px);
43
+ padding-right:var(--space-chips-container-padding-xs, 3px);
44
+ border-radius:var(--radius-chips-xs, 12px);
45
+ border-width:var(--border-width-chips-single, 1px);
46
+ }
47
+ .choiceChip[data-size=xs] .label{
48
+ font-family:var(--light-label-s-font-family, SB Sans Interface);
49
+ font-weight:var(--light-label-s-font-weight, Regular);
50
+ line-height:var(--light-label-s-line-height, 14px);
51
+ font-size:var(--light-label-s-font-size, 11px);
52
+ letter-spacing:var(--light-label-s-letter-spacing, -0.1px);
53
+ paragraph-spacing:var(--light-label-s-paragraph-spacing, 6.05px);
54
+ }
55
+ .choiceChip[data-size=xs] .labelLayout{
56
+ padding-left:var(--space-chips-label-layout-padding-xs, 4px);
57
+ padding-right:var(--space-chips-label-layout-padding-xs, 4px);
58
+ gap:var(--space-chips-label-layout-gap, 2px);
59
+ }
60
+ .choiceChip[data-size=s]{
61
+ height:var(--size-chips-s, 32px);
62
+ padding-left:var(--space-chips-container-padding-s, 3px);
63
+ padding-right:var(--space-chips-container-padding-s, 3px);
64
+ border-radius:var(--radius-chips-s, 16px);
65
+ border-width:var(--border-width-chips-single, 1px);
66
+ }
67
+ .choiceChip[data-size=s] .label{
68
+ font-family:var(--light-label-m-font-family, SB Sans Interface);
69
+ font-weight:var(--light-label-m-font-weight, Regular);
70
+ line-height:var(--light-label-m-line-height, 16px);
71
+ font-size:var(--light-label-m-font-size, 12px);
72
+ letter-spacing:var(--light-label-m-letter-spacing, -0.1px);
73
+ paragraph-spacing:var(--light-label-m-paragraph-spacing, 6.6px);
74
+ }
75
+ .choiceChip[data-size=s] .labelLayout{
76
+ padding-left:var(--space-chips-label-layout-padding-s, 4px);
77
+ padding-right:var(--space-chips-label-layout-padding-s, 4px);
78
+ gap:var(--space-chips-label-layout-gap, 2px);
79
+ }
80
+ .choiceChip[data-size=m]{
81
+ height:var(--size-chips-m, 40px);
82
+ padding-left:var(--space-chips-container-padding-m, 7px);
83
+ padding-right:var(--space-chips-container-padding-m, 7px);
84
+ border-radius:var(--radius-chips-m, 20px);
85
+ border-width:var(--border-width-chips-single, 1px);
86
+ }
87
+ .choiceChip[data-size=m] .label{
88
+ font-family:var(--light-label-m-font-family, SB Sans Interface);
89
+ font-weight:var(--light-label-m-font-weight, Regular);
90
+ line-height:var(--light-label-m-line-height, 16px);
91
+ font-size:var(--light-label-m-font-size, 12px);
92
+ letter-spacing:var(--light-label-m-letter-spacing, -0.1px);
93
+ paragraph-spacing:var(--light-label-m-paragraph-spacing, 6.6px);
94
+ }
95
+ .choiceChip[data-size=m] .labelLayout{
96
+ padding-left:var(--space-chips-label-layout-padding-m, 8px);
97
+ padding-right:var(--space-chips-label-layout-padding-m, 8px);
98
+ gap:var(--space-chips-label-layout-gap, 2px);
99
+ }
100
+ .choiceChip[data-size=l]{
101
+ height:var(--size-chips-l, 48px);
102
+ padding-left:var(--space-chips-container-padding-l, 11px);
103
+ padding-right:var(--space-chips-container-padding-l, 11px);
104
+ border-radius:var(--radius-chips-l, 24px);
105
+ border-width:var(--border-width-chips-single, 1px);
106
+ }
107
+ .choiceChip[data-size=l] .label{
108
+ font-family:var(--light-label-l-font-family, SB Sans Interface);
109
+ font-weight:var(--light-label-l-font-weight, Regular);
110
+ line-height:var(--light-label-l-line-height, 20px);
111
+ font-size:var(--light-label-l-font-size, 14px);
112
+ letter-spacing:var(--light-label-l-letter-spacing, -0.1px);
113
+ paragraph-spacing:var(--light-label-l-paragraph-spacing, 7.7px);
114
+ }
115
+ .choiceChip[data-size=l] .labelLayout{
116
+ padding-left:var(--space-chips-label-layout-padding-l, 12px);
117
+ padding-right:var(--space-chips-label-layout-padding-l, 12px);
118
+ gap:var(--space-chips-label-layout-gap, 2px);
119
+ }
120
+ .choiceChip .label, .choiceChip .value{
121
+ color:var(--sys-neutral-text-support, #565656);
122
+ }
123
+ .choiceChip .icon{
124
+ color:var(--sys-neutral-text-light, #898989);
125
+ }
126
+ .choiceChip[data-size=xs] .value{
127
+ font-family:var(--sans-label-s-font-family, SB Sans Interface);
128
+ font-weight:var(--sans-label-s-font-weight, Semibold);
129
+ line-height:var(--sans-label-s-line-height, 14px);
130
+ font-size:var(--sans-label-s-font-size, 11px);
131
+ letter-spacing:var(--sans-label-s-letter-spacing, -0.1px);
132
+ paragraph-spacing:var(--sans-label-s-paragraph-spacing, 6.05px);
133
+ }
134
+ .choiceChip[data-size=s] .value{
135
+ font-family:var(--sans-label-m-font-family, SB Sans Interface);
136
+ font-weight:var(--sans-label-m-font-weight, Semibold);
137
+ line-height:var(--sans-label-m-line-height, 16px);
138
+ font-size:var(--sans-label-m-font-size, 12px);
139
+ letter-spacing:var(--sans-label-m-letter-spacing, -0.1px);
140
+ paragraph-spacing:var(--sans-label-m-paragraph-spacing, 6.6px);
141
+ }
142
+ .choiceChip[data-size=m] .value{
143
+ font-family:var(--sans-label-m-font-family, SB Sans Interface);
144
+ font-weight:var(--sans-label-m-font-weight, Semibold);
145
+ line-height:var(--sans-label-m-line-height, 16px);
146
+ font-size:var(--sans-label-m-font-size, 12px);
147
+ letter-spacing:var(--sans-label-m-letter-spacing, -0.1px);
148
+ paragraph-spacing:var(--sans-label-m-paragraph-spacing, 6.6px);
149
+ }
150
+ .choiceChip[data-size=l] .value{
151
+ font-family:var(--sans-label-l-font-family, SB Sans Interface);
152
+ font-weight:var(--sans-label-l-font-weight, Semibold);
153
+ line-height:var(--sans-label-l-line-height, 20px);
154
+ font-size:var(--sans-label-l-font-size, 14px);
155
+ letter-spacing:var(--sans-label-l-letter-spacing, -0.1px);
156
+ paragraph-spacing:var(--sans-label-l-paragraph-spacing, 7.7px);
157
+ }
158
+ .choiceChip:hover, .choiceChip:active, .choiceChip:focus-visible{
159
+ background-color:var(--sys-neutral-background2-level, #fdfdfd);
160
+ border-color:var(--sys-neutral-decor-hovered, #d2d2d2);
161
+ }
162
+ .choiceChip:hover .label, .choiceChip:active .label, .choiceChip:focus-visible .label{
163
+ color:var(--sys-neutral-text-support, #565656);
164
+ }
165
+ .choiceChip:hover .value, .choiceChip:active .value, .choiceChip:focus-visible .value{
166
+ color:var(--sys-neutral-text-main, #333333);
167
+ }
168
+ .choiceChip:focus-visible{
169
+ outline-width:var(--border-state-focus-s-border-width, 2px);
170
+ outline-style:var(--border-state-focus-s-border-style, solid);
171
+ outline-color:var(--border-state-focus-s-border-color, );
172
+ outline-color:var(--sys-available-complementary, #131313);
173
+ outline-offset:var(--spacing-state-focus-offset, 2px);
174
+ }
175
+ .choiceChip[data-disabled]{
176
+ cursor:not-allowed;
177
+ background-color:var(--sys-neutral-background, #f0f0f0);
178
+ border-color:var(--sys-neutral-decor-disabled, #e7e7e7);
179
+ }
180
+ .choiceChip[data-disabled] .label, .choiceChip[data-disabled] .value{
181
+ color:var(--sys-neutral-text-light, #898989);
182
+ }
183
+ .choiceChip[data-loading]{
184
+ cursor:progress;
185
+ background-color:var(--sys-neutral-background, #f0f0f0);
186
+ border-color:var(--sys-neutral-decor-activated, #b8b8b8);
187
+ }
188
+ .choiceChip[data-loading] true .spinner{
189
+ display:flex;
190
+ align-items:center;
191
+ justify-content:center;
192
+ }
193
+ .choiceChip[data-loading] .label, .choiceChip[data-loading] .value{
194
+ color:var(--sys-neutral-text-support, #565656);
195
+ }
196
+
197
+ .triggerClassName{
198
+ --offset:calc(var(--border-state-focus-s-border-width, 2px) + var(--space-drop-list-drop-offset, 4px));
199
+ }
@@ -0,0 +1,27 @@
1
+ import { MouseEventHandler } from 'react';
2
+ import { DroplistProps, ItemSingleProps } from '@snack-uikit/droplist';
3
+ import { WithSupportProps } from '@snack-uikit/utils';
4
+ import { Size } from '../../constants';
5
+ import { BaseChipProps } from '../../types';
6
+ export type FilterOption = Pick<ItemSingleProps, 'caption' | 'description' | 'tagLabel' | 'icon' | 'avatar'> & {
7
+ label: string;
8
+ value: string;
9
+ };
10
+ export type ChipChoiceCommonProps = WithSupportProps<Partial<BaseChipProps> & {
11
+ /** Размер */
12
+ size?: Size;
13
+ /** Колбек обработки клика */
14
+ onClick?: MouseEventHandler<HTMLButtonElement | HTMLDivElement>;
15
+ /** Отображение кнопки очистки значения @default true*/
16
+ showClearButton?: boolean;
17
+ /** Расположение выпадающего меню */
18
+ placement?: DroplistProps['placement'];
19
+ /**
20
+ * Стратегия управления шириной контейнера поповера
21
+ * <br> - `Auto` - соответствует ширине контента,
22
+ * <br> - `Gte` - Great Than or Equal, равен ширине таргета или больше ее, если контент в поповере шире,
23
+ * <br> - `Eq` - Equal, строго равен ширине таргета.
24
+ * @default Gte
25
+ */
26
+ widthStrategy?: DroplistProps['widthStrategy'];
27
+ }>;
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,4 @@
1
+ import { FilterOption } from './types';
2
+ export declare const normalizeValueForMultiChoice: (options: FilterOption[], value?: string[]) => string[] | undefined;
3
+ export declare const normalizeValueForSingleChoice: (options: FilterOption[], value?: string) => string | undefined;
4
+ export declare const defaultMultiValueLabelFormatter: (value: FilterOption[], total: number) => string;
@@ -0,0 +1,14 @@
1
+ export const normalizeValueForMultiChoice = (options, value) => {
2
+ if (!value) {
3
+ return undefined;
4
+ }
5
+ return value.filter(val => options.some(option => val === option.value));
6
+ };
7
+ export const normalizeValueForSingleChoice = (options, value) => {
8
+ var _a;
9
+ if (!value) {
10
+ return undefined;
11
+ }
12
+ return (_a = options.find(option => value === option.value)) === null || _a === void 0 ? void 0 : _a.value;
13
+ };
14
+ export const defaultMultiValueLabelFormatter = (value, total) => `${value.length.toString()}/${total}`;
@@ -0,0 +1,26 @@
1
+ import { WithSupportProps } from '@snack-uikit/utils';
2
+ import { Size } from './constants';
3
+ import { ChipChoiceProps, OmitBetter } from './types';
4
+ export type FiltersState = Record<string, unknown>;
5
+ export type ChipChoiceRowProps<TState extends FiltersState> = WithSupportProps<{
6
+ /** Состояние фильтров */
7
+ value?: TState;
8
+ /** Начальное состояние фильтров */
9
+ defaultValue?: Partial<TState>;
10
+ /** Колбек изменения состояния фильтров */
11
+ onChange?(filters: TState): void;
12
+ /** Массив чипов */
13
+ filters: OmitBetter<ChipChoiceProps, 'onChange' | 'value' | 'size' | 'defaultValue'>[];
14
+ /** Размер @default Size.S */
15
+ size?: Size;
16
+ /** CSS-класс */
17
+ className?: string;
18
+ /** Скрыть/показать кнопку очиски @default true */
19
+ showClearAllButton?: boolean;
20
+ /** Текст кнопки очистки @default 'Clear all' */
21
+ clearAllButtonLabel?: string;
22
+ }>;
23
+ export declare function ChipChoiceRow<TState extends FiltersState>({ filters, onChange, showClearAllButton, clearAllButtonLabel, className, value, defaultValue, size, ...rest }: ChipChoiceRowProps<TState>): import("react/jsx-runtime").JSX.Element;
24
+ export declare namespace ChipChoiceRow {
25
+ var sizes: typeof Size;
26
+ }
@@ -0,0 +1,45 @@
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 { useUncontrolledProp } from 'uncontrollable';
15
+ import { ButtonFunction } from '@snack-uikit/button';
16
+ import { CrossSVG } from '@snack-uikit/icons';
17
+ import { extractSupportProps } from '@snack-uikit/utils';
18
+ import { CHIP_CHOICE_ROW_IDS } from '../../constants';
19
+ import { ForwardedChipChoice } from './components';
20
+ import { MAP_ROW_SIZE_TO_BUTTON_SIZE, MAP_ROW_SIZE_TO_CHOICE_SIZE, Size } from './constants';
21
+ import styles from './styles.module.css';
22
+ export function ChipChoiceRow(_a) {
23
+ var { filters, onChange, showClearAllButton = true, clearAllButtonLabel = 'Clear all', className, value, defaultValue, size = Size.S } = _a, rest = __rest(_a, ["filters", "onChange", "showClearAllButton", "clearAllButtonLabel", "className", "value", "defaultValue", "size"]);
24
+ const [state, setState] = useUncontrolledProp(value, (defaultValue !== null && defaultValue !== void 0 ? defaultValue : {}), newState => {
25
+ const result = typeof newState === 'function' ? newState(state) : newState;
26
+ onChange === null || onChange === void 0 ? void 0 : onChange(result);
27
+ });
28
+ const handleChange = (fieldId, value) => {
29
+ setState((state) => (Object.assign(Object.assign({}, state), { [fieldId]: value })));
30
+ };
31
+ const handleFiltersClear = () => {
32
+ setState({});
33
+ };
34
+ const hasAnyFilter = Object.values(state).some(filter => {
35
+ if (Array.isArray(filter)) {
36
+ return filter.length > 0 && Object.values(filter).some(Boolean);
37
+ }
38
+ if (filter && typeof filter === 'object') {
39
+ return Object.values(filter).some(Boolean) || filter instanceof Date;
40
+ }
41
+ return Boolean(filter);
42
+ });
43
+ return (_jsxs("div", Object.assign({ className: cn(styles.chipChoiceRow, className) }, extractSupportProps(rest), { children: [filters.map(filter => (_jsx(ForwardedChipChoice, Object.assign({}, filter, { value: state[filter.id], size: MAP_ROW_SIZE_TO_CHOICE_SIZE[size], onChange: (value) => handleChange(filter.id, value) }), filter.id))), showClearAllButton && hasAnyFilter && (_jsx(ButtonFunction, { onClick: handleFiltersClear, label: clearAllButtonLabel, icon: _jsx(CrossSVG, {}), iconPosition: ButtonFunction.iconPositions.Before, size: MAP_ROW_SIZE_TO_BUTTON_SIZE[size], "data-test-id": CHIP_CHOICE_ROW_IDS.clearAllButton }))] })));
44
+ }
45
+ ChipChoiceRow.sizes = Size;
@@ -0,0 +1,2 @@
1
+ import { ChipChoiceProps } from '../types';
2
+ export declare function ForwardedChipChoice(props: ChipChoiceProps): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,6 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { MAP_CHIP_TYPE_TO_COMPONENT } from './constants';
3
+ export function ForwardedChipChoice(props) {
4
+ const Component = MAP_CHIP_TYPE_TO_COMPONENT[props.type];
5
+ return _jsx(Component, Object.assign({}, props));
6
+ }
@@ -0,0 +1,6 @@
1
+ export declare const MAP_CHIP_TYPE_TO_COMPONENT: {
2
+ single: typeof import("../../ChipChoice/components").ChipChoiceSingle;
3
+ multi: typeof import("../../ChipChoice/components").ChipChoiceMulti;
4
+ date: typeof import("../../ChipChoice/components").ChipChoiceDate;
5
+ "date-range": typeof import("../../ChipChoice/components").ChipChoiceDateRange;
6
+ };
@@ -0,0 +1,7 @@
1
+ import { ChipChoice } from '../../ChipChoice';
2
+ export const MAP_CHIP_TYPE_TO_COMPONENT = {
3
+ [ChipChoice.types.Single]: ChipChoice.Single,
4
+ [ChipChoice.types.Multi]: ChipChoice.Multi,
5
+ [ChipChoice.types.Date]: ChipChoice.Date,
6
+ [ChipChoice.types.DateRange]: ChipChoice.DateRange,
7
+ };
@@ -0,0 +1 @@
1
+ export * from './ForwardedChipChoice';
@@ -0,0 +1 @@
1
+ export * from './ForwardedChipChoice';
@@ -0,0 +1,15 @@
1
+ export declare enum Size {
2
+ Xs = "xs",
3
+ S = "s",
4
+ M = "m"
5
+ }
6
+ export declare const MAP_ROW_SIZE_TO_CHOICE_SIZE: {
7
+ xs: import("../../constants").Size;
8
+ s: import("../../constants").Size;
9
+ m: import("../../constants").Size;
10
+ };
11
+ export declare const MAP_ROW_SIZE_TO_BUTTON_SIZE: {
12
+ xs: import("@snack-uikit/button/dist/constants").SizeXsM;
13
+ s: import("@snack-uikit/button/dist/constants").SizeXsM;
14
+ m: import("@snack-uikit/button/dist/constants").SizeXsM;
15
+ };
@@ -0,0 +1,18 @@
1
+ import { ButtonFunction } from '@snack-uikit/button';
2
+ import { ChipChoice } from '../ChipChoice';
3
+ export var Size;
4
+ (function (Size) {
5
+ Size["Xs"] = "xs";
6
+ Size["S"] = "s";
7
+ Size["M"] = "m";
8
+ })(Size || (Size = {}));
9
+ export const MAP_ROW_SIZE_TO_CHOICE_SIZE = {
10
+ [Size.Xs]: ChipChoice.sizes.Xs,
11
+ [Size.S]: ChipChoice.sizes.S,
12
+ [Size.M]: ChipChoice.sizes.M,
13
+ };
14
+ export const MAP_ROW_SIZE_TO_BUTTON_SIZE = {
15
+ [Size.Xs]: ButtonFunction.sizes.Xs,
16
+ [Size.S]: ButtonFunction.sizes.S,
17
+ [Size.M]: ButtonFunction.sizes.M,
18
+ };
@@ -0,0 +1 @@
1
+ export * from './ChipChoiceRow';
@@ -0,0 +1 @@
1
+ export * from './ChipChoiceRow';
@@ -0,0 +1,6 @@
1
+ .chipChoiceRow{
2
+ counter-axis-spacing:var(--space-chips-filter-row-gap, 4px);
3
+ gap:var(--space-chips-filter-row-gap, 4px);
4
+ display:flex;
5
+ flex-wrap:wrap;
6
+ }
@@ -0,0 +1,20 @@
1
+ import { ChipChoiceDateProps, ChipChoiceDateRangeProps, ChipChoiceMultiProps, ChipChoiceSingleProps } from '../ChipChoice/components';
2
+ import { ChipChoiceType } from '../ChipChoice/constants';
3
+ type ChipChoiceMultiType = {
4
+ type: ChipChoiceType.Multi;
5
+ } & ChipChoiceMultiProps;
6
+ type ChipChoiceSingleType = {
7
+ type: ChipChoiceType.Single;
8
+ } & ChipChoiceSingleProps;
9
+ type ChipChoiceDateType = {
10
+ type: ChipChoiceType.Date;
11
+ } & ChipChoiceDateProps;
12
+ type ChipChoiceDateRangeType = {
13
+ type: ChipChoiceType.DateRange;
14
+ } & ChipChoiceDateRangeProps;
15
+ export type ChipChoiceProps = {
16
+ id: string;
17
+ } & (ChipChoiceMultiType | ChipChoiceSingleType | ChipChoiceDateType | ChipChoiceDateRangeType);
18
+ export type OmitBetter<T, K extends keyof any> = T extends any ? Pick<T, Exclude<keyof T, K>> : never;
19
+ export type FilterValue = Parameters<ChipChoiceProps['onChange']>[number];
20
+ export {};
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,17 @@
1
+ import { ChangeEvent } from 'react';
2
+ import { WithSupportProps } from '@snack-uikit/utils';
3
+ import { Size } from '../../constants';
4
+ import { BaseChipProps } from '../../types';
5
+ export type ChipToggleProps = WithSupportProps<BaseChipProps & {
6
+ /** Отмечен ли компонент */
7
+ checked: boolean;
8
+ /** Размер */
9
+ size?: Size;
10
+ /** Колбек смены значения */
11
+ onChange(checked: boolean, e: ChangeEvent<HTMLInputElement>): void;
12
+ }>;
13
+ /** Чип с состоянием выбран/не выбран */
14
+ export declare function ChipToggle({ icon, size, label, checked, disabled, loading, onChange, className, tabIndex, ...rest }: ChipToggleProps): import("react/jsx-runtime").JSX.Element;
15
+ export declare namespace ChipToggle {
16
+ var sizes: typeof Size;
17
+ }
@@ -0,0 +1,31 @@
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 { Sun } from '@snack-uikit/loaders';
15
+ import { extractSupportProps } from '@snack-uikit/utils';
16
+ import { CHIP_TOGGLE_TEST_IDS, Size, Variant } from '../../constants';
17
+ import styles from './styles.module.css';
18
+ /** Чип с состоянием выбран/не выбран */
19
+ export function ChipToggle(_a) {
20
+ var { icon, size = ChipToggle.sizes.S, label, checked, disabled, loading, onChange, className, tabIndex = 0 } = _a, rest = __rest(_a, ["icon", "size", "label", "checked", "disabled", "loading", "onChange", "className", "tabIndex"]);
21
+ const variant = icon && size !== Size.Xs ? Variant.IconBefore : Variant.LabelOnly;
22
+ const spinnerSize = size === Size.Xs ? Sun.sizes.XS : Sun.sizes.S;
23
+ const handleChange = e => {
24
+ if (disabled || loading) {
25
+ return;
26
+ }
27
+ onChange === null || onChange === void 0 ? void 0 : onChange(!checked, e);
28
+ };
29
+ return (_jsxs("label", Object.assign({}, extractSupportProps(rest), { "data-size": size, "data-loading": loading || undefined, "data-disabled": (!loading && disabled) || undefined, "data-variant": variant, "data-checked": checked || undefined, className: cn(styles.toggleChip, className) }, { children: [_jsx("input", { "data-test-id": CHIP_TOGGLE_TEST_IDS.input, type: 'checkbox', checked: checked, onChange: handleChange, disabled: !loading && disabled, tabIndex: disabled ? -1 : tabIndex, className: styles.toggleChipInput }), _jsxs("span", Object.assign({ className: styles.toggleChipContent }, { children: [variant === Variant.IconBefore && !loading && (_jsx("span", Object.assign({ className: styles.icon, "data-test-id": CHIP_TOGGLE_TEST_IDS.icon }, { children: icon }))), loading && (_jsx("span", Object.assign({ className: styles.spinner, "data-test-id": CHIP_TOGGLE_TEST_IDS.spinner }, { children: _jsx(Sun, { size: spinnerSize }) }))), _jsx("span", Object.assign({ className: cn(styles.labelLayout, styles.label), "data-test-id": CHIP_TOGGLE_TEST_IDS.label }, { children: label }))] }))] })));
30
+ }
31
+ ChipToggle.sizes = Size;
@@ -0,0 +1 @@
1
+ export * from './ChipToggle';
@@ -0,0 +1 @@
1
+ export * from './ChipToggle';