Skip to content

Commit f7c2778

Browse files
authored
feat(colorpickers)!: refactor ColorSwatch with improved accessibility backed by a native input (radio or checkbox) group (#1711)
BREAKING CHANGE: `colorpickers` - `ColorSwatch` - `name` is a required prop - removed `rowIndex`, `colIndex`, `defaultRowIndex`, and `defaultColIndex` - `ColorSwatchDialog` – same breaking changes as `ColorSwatch` #### 🚀 New Feature - new `isCheckboxGroup` prop can be used to convert the color swatch to a `<input type="checkbox">` group – which means selection can now be compeletely cleared, if necessary
1 parent c2aa97d commit f7c2778

18 files changed

+663
-419
lines changed

docs/migration.md

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,27 @@
77
#### All Packages
88

99
- Garden v9 packages use `styled-components` version range `^5.1.0`.
10+
1011
- `react-theming@v9` uses version range `^4.2.0 || ^5.1.0` to support `v8` to `v9` upgrades.
1112

13+
- Garden v9 upgraded from `react-merge-refs` v1 to v2.
14+
- The [breaking
15+
change](https://github.com/gregberge/react-merge-refs/blob/main/CHANGELOG.md#200-2022-06-19)
16+
exports ESM only.
17+
- Build and test pipelines may need to be updated to account for the `.mjs`
18+
extension. See Garden's
19+
[jest.config.js](https://github.com/zendeskgarden/react-components/blob/c2aa97d1edccfa0578ee5655b543ca6635767fb9/utils/test/jest.config.js#L28-L30)
20+
for details.
21+
22+
#### @zendeskgarden/react-colorpickers
23+
24+
- `ColorSwatch`
25+
- The new `name` prop is required because the refactored component is now
26+
backed by a native radio or checkbox group.
27+
- Removed `rowIndex`, `colIndex`, `defaultRowIndex`, and `defaultColIndex`.
28+
For the sake of accessibility, focus state should not be exposed or controlled.
29+
- `ColorSwatchDialog`: same breaking changes as `ColorSwatch`.
30+
1231
#### @zendeskgarden/react-theming
1332

1433
- Utility function `isRtl` has been removed. Use `props.theme.rtl` instead.
@@ -22,4 +41,4 @@
2241

2342
## v8
2443

25-
[Migration Guide](https://github.com/zendeskgarden/react-components/blob/next/docs/migrations/v8.md)
44+
[Migration Guide](https://github.com/zendeskgarden/react-components/blob/main/docs/migrations/v8.md)

package-lock.json

Lines changed: 108 additions & 8 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

packages/colorpickers/demo/colorPickerDialog.stories.mdx

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -48,13 +48,20 @@ import README from '../README.md';
4848
<Canvas>
4949
<Story
5050
name="Controlled"
51-
args={{ color: PALETTE.blue[600] }}
51+
args={{ color: PALETTE.blue[600], isOpen: false }}
5252
argTypes={{ defaultColor: { control: false } }}
5353
>
5454
{args => {
5555
const updateArgs = useArgs()[1];
56+
const handleDialogChange = ({ isOpen }) => updateArgs({ isOpen });
5657
const handleChange = color => updateArgs({ color });
57-
return <ColorpickerDialogStory {...args} onChange={handleChange} />;
58+
return (
59+
<ColorpickerDialogStory
60+
{...args}
61+
onDialogChange={handleDialogChange}
62+
onChange={handleChange}
63+
/>
64+
);
5865
}}
5966
</Story>
6067
</Canvas>

packages/colorpickers/demo/colorSwatch.stories.mdx

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import README from '../README.md';
77
<Meta
88
title="Packages/Colorpickers/ColorSwatch"
99
component={ColorSwatch}
10-
args={{ colors: COLORS }}
10+
args={{ colors: COLORS, name: 'name' }}
1111
parameters={{
1212
design: {
1313
allowFullscreen: true,
@@ -29,8 +29,6 @@ import README from '../README.md';
2929
<Story
3030
name="Uncontrolled"
3131
argTypes={{
32-
colIndex: { control: false },
33-
rowIndex: { control: false },
3432
selectedColIndex: { control: false },
3533
selectedRowIndex: { control: false }
3634
}}
@@ -44,20 +42,19 @@ import README from '../README.md';
4442
<Canvas>
4543
<Story
4644
name="Controlled"
47-
args={{ rowIndex: 0, colIndex: 5, selectedRowIndex: 0, selectedColIndex: 5 }}
45+
args={{ selectedRowIndex: 0, selectedColIndex: 5 }}
4846
argTypes={{
49-
defaultColIndex: { control: false },
50-
defaultRowIndex: { control: false },
5147
defaultSelectedColIndex: { control: false },
52-
defaultSelectedRowIndex: { control: false }
48+
defaultSelectedRowIndex: { control: false },
49+
selectedColIndex: { control: { type: 'number' } },
50+
selectedRowIndex: { control: { type: 'number' } }
5351
}}
5452
>
5553
{args => {
5654
const updateArgs = useArgs()[1];
57-
const handleChange = (rowIndex, colIndex) => updateArgs({ rowIndex, colIndex });
5855
const handleSelect = (selectedRowIndex, selectedColIndex) =>
5956
updateArgs({ selectedRowIndex, selectedColIndex });
60-
return <ColorSwatch {...args} onChange={handleChange} onSelect={handleSelect} />;
57+
return <ColorSwatch {...args} onSelect={handleSelect} />;
6158
}}
6259
</Story>
6360
</Canvas>

packages/colorpickers/demo/colorSwatchDialog.stories.mdx

Lines changed: 10 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,8 @@ import README from '../README.md';
1212
buttonProps: { 'aria-label': 'Label' },
1313
'aria-label': 'Title',
1414
colors: COLORS,
15-
isAnimated: true
15+
isAnimated: true,
16+
name: 'name'
1617
}}
1718
argTypes={{
1819
focusInset: { control: 'boolean' },
@@ -41,12 +42,6 @@ import README from '../README.md';
4142
<Story
4243
name="Uncontrolled"
4344
argTypes={{
44-
defaultColIndex: { control: 'number' },
45-
defaultRowIndex: { control: 'number' },
46-
defaultSelectedColIndex: { control: 'number' },
47-
defaultSelectedRowIndex: { control: 'number' },
48-
colIndex: { control: false },
49-
rowIndex: { control: false },
5045
selectedColIndex: { control: false },
5146
selectedRowIndex: { control: false }
5247
}}
@@ -60,20 +55,22 @@ import README from '../README.md';
6055
<Canvas>
6156
<Story
6257
name="Controlled"
63-
args={{ rowIndex: 0, colIndex: 5, selectedRowIndex: 0, selectedColIndex: 5 }}
58+
args={{ isOpen: false, selectedRowIndex: 0, selectedColIndex: 5 }}
6459
argTypes={{
65-
defaultColIndex: { control: false },
66-
defaultRowIndex: { control: false },
6760
defaultSelectedColIndex: { control: false },
68-
defaultSelectedRowIndex: { control: false }
61+
defaultSelectedRowIndex: { control: false },
62+
selectedColIndex: { control: { type: 'number' } },
63+
selectedRowIndex: { control: { type: 'number' } }
6964
}}
7065
>
7166
{args => {
7267
const updateArgs = useArgs()[1];
73-
const handleChange = (rowIndex, colIndex) => updateArgs({ rowIndex, colIndex });
68+
const handleChange = ({ isOpen }) => updateArgs({ isOpen });
7469
const handleSelect = (selectedRowIndex, selectedColIndex) =>
7570
updateArgs({ selectedRowIndex, selectedColIndex });
76-
return <ColorSwatchDialogStory {...args} onChange={handleChange} onSelect={handleSelect} />;
71+
return (
72+
<ColorSwatchDialogStory {...args} onDialogChange={handleChange} onSelect={handleSelect} />
73+
);
7774
}}
7875
</Story>
7976
</Canvas>

packages/colorpickers/package.json

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121
"sideEffects": false,
2222
"types": "dist/typings/index.d.ts",
2323
"dependencies": {
24-
"@zendeskgarden/container-grid": "^0.1.1",
24+
"@zendeskgarden/container-grid": "^3.0.0",
2525
"@zendeskgarden/container-utilities": "^2.0.0",
2626
"@zendeskgarden/react-buttons": "^9.0.0-next.1",
2727
"@zendeskgarden/react-forms": "^9.0.0-next.1",
@@ -30,7 +30,8 @@
3030
"lodash.isequal": "^4.5.0",
3131
"lodash.throttle": "^4.1.1",
3232
"polished": "^4.0.0",
33-
"prop-types": "^15.7.2"
33+
"prop-types": "^15.7.2",
34+
"react-merge-refs": "^2.0.0"
3435
},
3536
"peerDependencies": {
3637
"@zendeskgarden/react-theming": "^8.67.0",

0 commit comments

Comments
 (0)