@transferwise/components 0.0.0-experimental-4af964d → 0.0.0-experimental-04f7ce3
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/build/chips/Chips.js.map +1 -1
- package/build/chips/Chips.mjs.map +1 -1
- package/build/types/chips/Chips.d.ts +1 -1
- package/build/types/chips/Chips.d.ts.map +1 -1
- package/build/types/common/commonProps.d.ts +0 -6
- package/build/types/common/commonProps.d.ts.map +1 -1
- package/package.json +2 -2
- package/src/button/_stories/Button.story.tsx +24 -2
- package/src/checkboxButton/CheckboxButton.story.tsx +125 -44
- package/src/checkboxButton/CheckboxButton.test.story.tsx +236 -0
- package/src/chips/Chips.story.tsx +188 -88
- package/src/chips/Chips.test.story.tsx +177 -0
- package/src/chips/Chips.tsx +1 -1
- package/src/circularButton/CircularButton.story.tsx +275 -49
- package/src/circularButton/CircularButton.test.story.tsx +192 -2
- package/src/common/commonProps.ts +0 -6
- package/src/iconButton/IconButton.story.tsx +339 -110
- package/src/iconButton/IconButton.test.story.tsx +217 -44
- package/src/switch/Switch.story.tsx +63 -39
- package/src/switch/Switch.test.story.tsx +123 -0
|
@@ -1,112 +1,212 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import type { Meta, StoryObj } from '@storybook/react-webpack5';
|
|
2
|
+
import { fn } from 'storybook/test';
|
|
2
3
|
import { useState } from 'react';
|
|
3
4
|
|
|
4
|
-
import Chips, {
|
|
5
|
+
import Chips, { type ChipValue, type ChipsProps } from './Chips';
|
|
5
6
|
|
|
6
|
-
|
|
7
|
-
|
|
7
|
+
/**
|
|
8
|
+
* Can be used for making a <a href="?path=/story/actions-chips--choice">choice</a>, or as a <a href="?path=/story/actions-chips--filter">filter</a> with multiple options.
|
|
9
|
+
*
|
|
10
|
+
* **Design guidance**: <a href="https://wise.design/components/chip" target="_blank">wise.design/components/chip</a>
|
|
11
|
+
*/
|
|
12
|
+
export default {
|
|
8
13
|
component: Chips,
|
|
14
|
+
title: 'Actions/Chips',
|
|
15
|
+
args: {
|
|
16
|
+
multiple: false,
|
|
17
|
+
onChange: fn(),
|
|
18
|
+
},
|
|
19
|
+
argTypes: {
|
|
20
|
+
'aria-label': {
|
|
21
|
+
description: 'Provides the accessible name for the chip group.',
|
|
22
|
+
},
|
|
23
|
+
chips: {
|
|
24
|
+
description: 'Array of chip objects, each with a label (string) and value (string or number)',
|
|
25
|
+
},
|
|
26
|
+
multiple: {
|
|
27
|
+
description:
|
|
28
|
+
'Switch between filter/multi-select (true) and choice/single-select (false) modes',
|
|
29
|
+
},
|
|
30
|
+
className: { description: '', table: { category: 'Common' } },
|
|
31
|
+
selected: { table: { disable: true } },
|
|
32
|
+
},
|
|
33
|
+
parameters: {
|
|
34
|
+
docs: { toc: true },
|
|
35
|
+
},
|
|
36
|
+
} satisfies Meta<typeof Chips>;
|
|
37
|
+
|
|
38
|
+
type Story = StoryObj<typeof Chips>;
|
|
39
|
+
|
|
40
|
+
const categoryChips = [
|
|
41
|
+
{ value: 'all', label: 'All' },
|
|
42
|
+
{ value: 'accounting', label: 'Accounting' },
|
|
43
|
+
{ value: 'payroll', label: 'Payroll' },
|
|
44
|
+
{ value: 'reporting', label: 'Reporting' },
|
|
45
|
+
{ value: 'payments', label: 'Payments' },
|
|
46
|
+
];
|
|
47
|
+
|
|
48
|
+
const amountChips = [
|
|
49
|
+
{ value: 100, label: '100 GBP' },
|
|
50
|
+
{ value: 200, label: '200 GBP' },
|
|
51
|
+
{ value: 300, label: '300 GBP' },
|
|
52
|
+
{ value: 500, label: '500 GBP+' },
|
|
53
|
+
];
|
|
54
|
+
|
|
55
|
+
/**
|
|
56
|
+
* Toggle `multiple` in the controls panel to switch between filter (multi-select)
|
|
57
|
+
* and choice (single-select) modes.
|
|
58
|
+
*/
|
|
59
|
+
export const Playground: Story = {
|
|
60
|
+
render: function Render({
|
|
61
|
+
onChange,
|
|
62
|
+
chips,
|
|
63
|
+
multiple,
|
|
64
|
+
}: Pick<ChipsProps, 'onChange' | 'chips' | 'multiple'>) {
|
|
65
|
+
const [selectedMulti, setSelectedMulti] = useState<readonly ChipValue[]>(['accounting']);
|
|
66
|
+
const [selectedSingle, setSelectedSingle] = useState<ChipValue>('accounting');
|
|
67
|
+
|
|
68
|
+
if (multiple) {
|
|
69
|
+
return (
|
|
70
|
+
<Chips
|
|
71
|
+
chips={chips}
|
|
72
|
+
multiple
|
|
73
|
+
selected={selectedMulti}
|
|
74
|
+
aria-label="Category filter"
|
|
75
|
+
onChange={({ selectedValue, isEnabled }) => {
|
|
76
|
+
setSelectedMulti((prev) =>
|
|
77
|
+
isEnabled ? [...prev, selectedValue] : prev.filter((v) => v !== selectedValue),
|
|
78
|
+
);
|
|
79
|
+
onChange({ selectedValue, isEnabled });
|
|
80
|
+
}}
|
|
81
|
+
/>
|
|
82
|
+
);
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
return (
|
|
86
|
+
<Chips
|
|
87
|
+
chips={chips}
|
|
88
|
+
selected={selectedSingle}
|
|
89
|
+
aria-label="Category choice"
|
|
90
|
+
onChange={({ selectedValue, isEnabled }) => {
|
|
91
|
+
setSelectedSingle(selectedValue);
|
|
92
|
+
onChange({ selectedValue, isEnabled });
|
|
93
|
+
}}
|
|
94
|
+
/>
|
|
95
|
+
);
|
|
96
|
+
},
|
|
97
|
+
args: {
|
|
98
|
+
chips: categoryChips,
|
|
99
|
+
multiple: true,
|
|
100
|
+
},
|
|
9
101
|
};
|
|
10
|
-
export default meta;
|
|
11
102
|
|
|
12
|
-
|
|
103
|
+
/**
|
|
104
|
+
* The user can select any number of chips with the selected prop as an array (`multiple` prop set to `true`). <br />
|
|
105
|
+
* <a href="https://wise.design/components/chip#filter-chips" target="_blank">Design documentation</a>
|
|
106
|
+
*/
|
|
107
|
+
export const Filter: Story = {
|
|
108
|
+
render: function Render({ onChange, chips }: Pick<ChipsProps, 'onChange' | 'chips'>) {
|
|
109
|
+
const [selected, setSelected] = useState<readonly ChipValue[]>(['accounting', 'payments']);
|
|
110
|
+
|
|
111
|
+
return (
|
|
112
|
+
<Chips
|
|
113
|
+
chips={chips}
|
|
114
|
+
selected={selected}
|
|
115
|
+
multiple
|
|
116
|
+
aria-label="Category filter"
|
|
117
|
+
onChange={({ selectedValue, isEnabled }) => {
|
|
118
|
+
setSelected((prev) =>
|
|
119
|
+
isEnabled ? [...prev, selectedValue] : prev.filter((v) => v !== selectedValue),
|
|
120
|
+
);
|
|
121
|
+
onChange({ selectedValue, isEnabled });
|
|
122
|
+
}}
|
|
123
|
+
/>
|
|
124
|
+
);
|
|
125
|
+
},
|
|
126
|
+
args: {
|
|
127
|
+
chips: categoryChips,
|
|
128
|
+
},
|
|
129
|
+
argTypes: {
|
|
130
|
+
multiple: { table: { disable: true } },
|
|
131
|
+
},
|
|
132
|
+
parameters: {
|
|
133
|
+
docs: {
|
|
134
|
+
source: {
|
|
135
|
+
code: `function FilterChips() {
|
|
136
|
+
const [selected, setSelected] = useState(['accounting', 'payments']);
|
|
13
137
|
|
|
14
|
-
const FilterTemplate: Story = (args: ChipsProps) => {
|
|
15
|
-
const [selected, setSelected] = useState<readonly ChipValue[]>(
|
|
16
|
-
args.selected == null || Array.isArray(args.selected) ? args.selected : [args.selected],
|
|
17
|
-
);
|
|
18
138
|
return (
|
|
19
139
|
<Chips
|
|
20
|
-
{
|
|
21
|
-
|
|
140
|
+
chips={[
|
|
141
|
+
{ value: 'all', label: 'All' },
|
|
142
|
+
{ value: 'accounting', label: 'Accounting' },
|
|
143
|
+
{ value: 'payroll', label: 'Payroll' },
|
|
144
|
+
{ value: 'reporting', label: 'Reporting' },
|
|
145
|
+
{ value: 'payments', label: 'Payments' },
|
|
146
|
+
]}
|
|
22
147
|
multiple
|
|
148
|
+
selected={selected}
|
|
149
|
+
aria-label="Category filter"
|
|
23
150
|
onChange={({ selectedValue, isEnabled }) => {
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
const updatedSelected = selected.filter((value) => selectedValue !== value);
|
|
28
|
-
setSelected(updatedSelected);
|
|
29
|
-
}
|
|
151
|
+
setSelected((prev) =>
|
|
152
|
+
isEnabled ? [...prev, selectedValue] : prev.filter((v) => v !== selectedValue)
|
|
153
|
+
);
|
|
30
154
|
}}
|
|
31
155
|
/>
|
|
32
156
|
);
|
|
157
|
+
}`,
|
|
158
|
+
},
|
|
159
|
+
},
|
|
160
|
+
},
|
|
33
161
|
};
|
|
34
162
|
|
|
35
|
-
|
|
36
|
-
|
|
163
|
+
/**
|
|
164
|
+
* The user can only select one chip with the selected prop as a single value (`multiple` prop set to `false`). <br />
|
|
165
|
+
* <a href="https://wise.design/components/chip#choice-chips" target="_blank">Design documentation</a>
|
|
166
|
+
*/
|
|
167
|
+
export const Choice: Story = {
|
|
168
|
+
render: function Render({ onChange, chips }: Pick<ChipsProps, 'onChange' | 'chips'>) {
|
|
169
|
+
const [selected, setSelected] = useState<ChipValue>(300);
|
|
170
|
+
|
|
171
|
+
return (
|
|
172
|
+
<Chips
|
|
173
|
+
chips={chips}
|
|
174
|
+
selected={selected}
|
|
175
|
+
aria-label="Transfer amount"
|
|
176
|
+
onChange={({ selectedValue, isEnabled }) => {
|
|
177
|
+
setSelected(selectedValue);
|
|
178
|
+
onChange({ selectedValue, isEnabled });
|
|
179
|
+
}}
|
|
180
|
+
/>
|
|
181
|
+
);
|
|
182
|
+
},
|
|
183
|
+
args: {
|
|
184
|
+
chips: amountChips,
|
|
185
|
+
},
|
|
186
|
+
argTypes: {
|
|
187
|
+
multiple: { table: { disable: true } },
|
|
188
|
+
},
|
|
189
|
+
parameters: {
|
|
190
|
+
docs: {
|
|
191
|
+
source: {
|
|
192
|
+
code: `function ChoiceChips() {
|
|
193
|
+
const [selected, setSelected] = useState(300);
|
|
194
|
+
|
|
37
195
|
return (
|
|
38
196
|
<Chips
|
|
39
|
-
{
|
|
197
|
+
chips={[
|
|
198
|
+
{ value: 100, label: '100 GBP' },
|
|
199
|
+
{ value: 200, label: '200 GBP' },
|
|
200
|
+
{ value: 300, label: '300 GBP' },
|
|
201
|
+
{ value: 500, label: '500 GBP+' },
|
|
202
|
+
]}
|
|
40
203
|
selected={selected}
|
|
204
|
+
aria-label="Transfer amount"
|
|
41
205
|
onChange={({ selectedValue }) => setSelected(selectedValue)}
|
|
42
206
|
/>
|
|
43
207
|
);
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
export const FilterChips: typeof FilterTemplate = FilterTemplate.bind({});
|
|
47
|
-
FilterChips.args = {
|
|
48
|
-
chips: [
|
|
49
|
-
{
|
|
50
|
-
value: 'accounting',
|
|
51
|
-
label: 'Accounting',
|
|
52
|
-
},
|
|
53
|
-
{
|
|
54
|
-
value: 'payroll',
|
|
55
|
-
label: 'Payroll',
|
|
56
|
-
},
|
|
57
|
-
{
|
|
58
|
-
value: 'reporting',
|
|
59
|
-
label: 'Reporting',
|
|
60
|
-
},
|
|
61
|
-
{
|
|
62
|
-
value: 'payments',
|
|
63
|
-
label: 'Payments',
|
|
64
|
-
},
|
|
65
|
-
],
|
|
66
|
-
};
|
|
67
|
-
|
|
68
|
-
export const PreSelectedFilterChips: typeof FilterTemplate = FilterTemplate.bind({});
|
|
69
|
-
PreSelectedFilterChips.args = {
|
|
70
|
-
chips: [
|
|
71
|
-
{
|
|
72
|
-
value: 'accounting',
|
|
73
|
-
label: 'Accounting',
|
|
74
|
-
},
|
|
75
|
-
{
|
|
76
|
-
value: 'payroll',
|
|
77
|
-
label: 'Payroll',
|
|
78
|
-
},
|
|
79
|
-
{
|
|
80
|
-
value: 'reporting',
|
|
81
|
-
label: 'Reporting',
|
|
82
|
-
},
|
|
83
|
-
{
|
|
84
|
-
value: 'payments',
|
|
85
|
-
label: 'Payments',
|
|
86
|
-
},
|
|
87
|
-
],
|
|
88
|
-
selected: ['accounting', 'payments'],
|
|
89
|
-
};
|
|
90
|
-
|
|
91
|
-
export const ChoiceChips: typeof ChoiceTemplate = ChoiceTemplate.bind({});
|
|
92
|
-
ChoiceChips.args = {
|
|
93
|
-
chips: [
|
|
94
|
-
{
|
|
95
|
-
value: 1,
|
|
96
|
-
label: '100 GBP',
|
|
97
|
-
},
|
|
98
|
-
{
|
|
99
|
-
value: 2,
|
|
100
|
-
label: '200 GBP',
|
|
101
|
-
},
|
|
102
|
-
{
|
|
103
|
-
value: 3,
|
|
104
|
-
label: '300 GBP',
|
|
105
|
-
},
|
|
106
|
-
{
|
|
107
|
-
value: 4,
|
|
108
|
-
label: '400 GBP+',
|
|
208
|
+
}`,
|
|
209
|
+
},
|
|
109
210
|
},
|
|
110
|
-
|
|
111
|
-
selected: 3,
|
|
211
|
+
},
|
|
112
212
|
};
|
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
import type { Meta, StoryObj } from '@storybook/react-webpack5';
|
|
2
|
+
import { userEvent } from 'storybook/test';
|
|
3
|
+
import { useState } from 'react';
|
|
4
|
+
|
|
5
|
+
import { withVariantConfig } from '../../.storybook/helpers';
|
|
6
|
+
import Chips, { type ChipValue } from './Chips';
|
|
7
|
+
|
|
8
|
+
export default {
|
|
9
|
+
component: Chips,
|
|
10
|
+
title: 'Actions/Chips/Tests',
|
|
11
|
+
tags: ['!autodocs', '!manifest'],
|
|
12
|
+
} satisfies Meta<typeof Chips>;
|
|
13
|
+
|
|
14
|
+
type Story = StoryObj<typeof Chips>;
|
|
15
|
+
|
|
16
|
+
const wait = async (ms: number) =>
|
|
17
|
+
new Promise<void>((resolve) => {
|
|
18
|
+
setTimeout(resolve, ms);
|
|
19
|
+
});
|
|
20
|
+
|
|
21
|
+
const filterChips = [
|
|
22
|
+
{ value: 'all', label: 'All' },
|
|
23
|
+
{ value: 'accounting', label: 'Accounting' },
|
|
24
|
+
{ value: 'payroll', label: 'Payroll' },
|
|
25
|
+
{ value: 'payments', label: 'Payments' },
|
|
26
|
+
];
|
|
27
|
+
|
|
28
|
+
const choiceChips = [
|
|
29
|
+
{ value: 100, label: '100 GBP' },
|
|
30
|
+
{ value: 200, label: '200 GBP' },
|
|
31
|
+
{ value: 300, label: '300 GBP' },
|
|
32
|
+
{ value: 500, label: '500 GBP+' },
|
|
33
|
+
];
|
|
34
|
+
|
|
35
|
+
/** Filter and choice chips across all themes. */
|
|
36
|
+
export const Variants: Story = {
|
|
37
|
+
render: function Render() {
|
|
38
|
+
const [filterSelected, setFilterSelected] = useState<readonly ChipValue[]>([
|
|
39
|
+
'accounting',
|
|
40
|
+
'payments',
|
|
41
|
+
]);
|
|
42
|
+
const [choiceSelected, setChoiceSelected] = useState<ChipValue>(300);
|
|
43
|
+
|
|
44
|
+
return (
|
|
45
|
+
<div style={{ display: 'flex', flexDirection: 'column', gap: '16px' }}>
|
|
46
|
+
<Chips
|
|
47
|
+
chips={filterChips}
|
|
48
|
+
multiple
|
|
49
|
+
selected={filterSelected}
|
|
50
|
+
aria-label="Category filter"
|
|
51
|
+
onChange={({ selectedValue, isEnabled }) => {
|
|
52
|
+
setFilterSelected((prev) =>
|
|
53
|
+
isEnabled ? [...prev, selectedValue] : prev.filter((v) => v !== selectedValue),
|
|
54
|
+
);
|
|
55
|
+
}}
|
|
56
|
+
/>
|
|
57
|
+
<Chips
|
|
58
|
+
chips={choiceChips}
|
|
59
|
+
selected={choiceSelected}
|
|
60
|
+
aria-label="Transfer amount"
|
|
61
|
+
onChange={({ selectedValue }) => setChoiceSelected(selectedValue)}
|
|
62
|
+
/>
|
|
63
|
+
</div>
|
|
64
|
+
);
|
|
65
|
+
},
|
|
66
|
+
...withVariantConfig(['default', 'dark', 'bright-green', 'forest-green']),
|
|
67
|
+
};
|
|
68
|
+
|
|
69
|
+
/**
|
|
70
|
+
* Tab moves between chips. Enter or Space toggles selection.
|
|
71
|
+
*/
|
|
72
|
+
export const ChoiceKeyboardInteraction: Story = {
|
|
73
|
+
render: function Render() {
|
|
74
|
+
const [selected, setSelected] = useState<ChipValue>(300);
|
|
75
|
+
return (
|
|
76
|
+
<Chips
|
|
77
|
+
chips={choiceChips}
|
|
78
|
+
selected={selected}
|
|
79
|
+
aria-label="Transfer amount"
|
|
80
|
+
onChange={({ selectedValue }) => setSelected(selectedValue)}
|
|
81
|
+
/>
|
|
82
|
+
);
|
|
83
|
+
},
|
|
84
|
+
play: async () => {
|
|
85
|
+
await userEvent.tab();
|
|
86
|
+
await wait(400);
|
|
87
|
+
await userEvent.tab();
|
|
88
|
+
await wait(400);
|
|
89
|
+
await userEvent.keyboard('{Enter}');
|
|
90
|
+
},
|
|
91
|
+
};
|
|
92
|
+
|
|
93
|
+
/**
|
|
94
|
+
* Tab moves between chips. Enter or Space toggles selection.
|
|
95
|
+
*/
|
|
96
|
+
export const FilterKeyboardInteraction: Story = {
|
|
97
|
+
render: function Render() {
|
|
98
|
+
const [selected, setSelected] = useState<readonly ChipValue[]>(['accounting']);
|
|
99
|
+
return (
|
|
100
|
+
<Chips
|
|
101
|
+
chips={filterChips}
|
|
102
|
+
multiple
|
|
103
|
+
selected={selected}
|
|
104
|
+
aria-label="Category filter"
|
|
105
|
+
onChange={({ selectedValue, isEnabled }) => {
|
|
106
|
+
setSelected((prev) =>
|
|
107
|
+
isEnabled ? [...prev, selectedValue] : prev.filter((v) => v !== selectedValue),
|
|
108
|
+
);
|
|
109
|
+
}}
|
|
110
|
+
/>
|
|
111
|
+
);
|
|
112
|
+
},
|
|
113
|
+
play: async () => {
|
|
114
|
+
await userEvent.tab();
|
|
115
|
+
await wait(400);
|
|
116
|
+
await userEvent.tab();
|
|
117
|
+
await wait(400);
|
|
118
|
+
await userEvent.tab();
|
|
119
|
+
await wait(400);
|
|
120
|
+
await userEvent.keyboard('{Enter}');
|
|
121
|
+
},
|
|
122
|
+
};
|
|
123
|
+
|
|
124
|
+
/** Filter and choice chips in right-to-left layout. */
|
|
125
|
+
export const RTL: Story = {
|
|
126
|
+
render: function Render() {
|
|
127
|
+
const [filterSelected, setFilterSelected] = useState<readonly ChipValue[]>([
|
|
128
|
+
'accounting',
|
|
129
|
+
'payments',
|
|
130
|
+
]);
|
|
131
|
+
const [choiceSelected, setChoiceSelected] = useState<ChipValue>(300);
|
|
132
|
+
|
|
133
|
+
return (
|
|
134
|
+
<div style={{ display: 'flex', flexDirection: 'column', gap: '16px' }}>
|
|
135
|
+
<Chips
|
|
136
|
+
chips={filterChips}
|
|
137
|
+
multiple
|
|
138
|
+
selected={filterSelected}
|
|
139
|
+
aria-label="Category filter"
|
|
140
|
+
onChange={({ selectedValue, isEnabled }) => {
|
|
141
|
+
setFilterSelected((prev) =>
|
|
142
|
+
isEnabled ? [...prev, selectedValue] : prev.filter((v) => v !== selectedValue),
|
|
143
|
+
);
|
|
144
|
+
}}
|
|
145
|
+
/>
|
|
146
|
+
<Chips
|
|
147
|
+
chips={choiceChips}
|
|
148
|
+
selected={choiceSelected}
|
|
149
|
+
aria-label="Transfer amount"
|
|
150
|
+
onChange={({ selectedValue }) => setChoiceSelected(selectedValue)}
|
|
151
|
+
/>
|
|
152
|
+
</div>
|
|
153
|
+
);
|
|
154
|
+
},
|
|
155
|
+
...withVariantConfig(['rtl']),
|
|
156
|
+
};
|
|
157
|
+
|
|
158
|
+
/** Filter chips at 400% zoom for accessibility testing. */
|
|
159
|
+
export const Zoom400: Story = {
|
|
160
|
+
render: function Render() {
|
|
161
|
+
const [selected, setSelected] = useState<readonly ChipValue[]>(['accounting']);
|
|
162
|
+
return (
|
|
163
|
+
<Chips
|
|
164
|
+
chips={filterChips}
|
|
165
|
+
multiple
|
|
166
|
+
selected={selected}
|
|
167
|
+
aria-label="Category filter"
|
|
168
|
+
onChange={({ selectedValue, isEnabled }) => {
|
|
169
|
+
setSelected((prev) =>
|
|
170
|
+
isEnabled ? [...prev, selectedValue] : prev.filter((v) => v !== selectedValue),
|
|
171
|
+
);
|
|
172
|
+
}}
|
|
173
|
+
/>
|
|
174
|
+
);
|
|
175
|
+
},
|
|
176
|
+
...withVariantConfig(['400%']),
|
|
177
|
+
};
|
package/src/chips/Chips.tsx
CHANGED
|
@@ -27,7 +27,7 @@ export type ChipsProps = CommonProps &
|
|
|
27
27
|
}) => void;
|
|
28
28
|
/** Used to manage which chips are selected */
|
|
29
29
|
selected: ChipValue | readonly ChipValue[];
|
|
30
|
-
/**
|
|
30
|
+
/** True turns on Filter-mode, False is Choice */
|
|
31
31
|
multiple?: boolean;
|
|
32
32
|
};
|
|
33
33
|
|