Skip to content

Commit 28b5fa6

Browse files
authored
chore!: replace Popper with Floating UI (#1709)
see `docs/migration.md` for details
1 parent f7c2778 commit 28b5fa6

40 files changed

+476
-1124
lines changed

docs/migration.md

Lines changed: 38 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,19 @@
44

55
### Breaking Changes
66

7+
Garden has transitioned from utilizing [Popper](https://popper.js.org/docs/) to
8+
adopting the enhanced [Floating UI](https://floating-ui.com/) library. In the
9+
past, Popper's [modifiers](https://popper.js.org/docs/v2/modifiers/) were
10+
directly accessible as component props, creating a rigid dependency that
11+
hindered updates to the positioning library. To address this, these properties
12+
have been removed since Floating UI is designed to intuitively handle component
13+
positioning in the majority of scenarios. Should you find yourself in need of
14+
specific functionality provided by the former modifiers, we encourage you to
15+
file an [issue](https://github.com/zendeskgarden/react-components/issues),
16+
making sure to mention the relevant Floating UI
17+
[middleware](https://floating-ui.com/docs/middleware) for clarity. Garden will
18+
consider additional positioning prop support on a case-by-case basis.
19+
720
#### All Packages
821

922
- Garden v9 packages use `styled-components` version range `^5.1.0`.
@@ -21,18 +34,42 @@
2134

2235
#### @zendeskgarden/react-colorpickers
2336

37+
- `ColorPickerDialog`: removed `popperModifiers` prop (see [note](#breaking-changes))
2438
- `ColorSwatch`
2539
- The new `name` prop is required because the refactored component is now
2640
backed by a native radio or checkbox group.
2741
- Removed `rowIndex`, `colIndex`, `defaultRowIndex`, and `defaultColIndex`.
2842
For the sake of accessibility, focus state should not be exposed or controlled.
29-
- `ColorSwatchDialog`: same breaking changes as `ColorSwatch`.
43+
- `ColorSwatchDialog`
44+
- same breaking changes as `ColorSwatch`.
45+
- `popperModifiers` prop (see [note](#breaking-changes))
46+
47+
#### @zendeskgarden/react-datepickers
48+
49+
- Removed `GardenPlacement` type export. Use `IDatePickerProps['placement']` instead.
50+
- `DatePicker`
51+
- removed `eventsEnabled` prop (no longer exposed by Floating UI)
52+
- removed `popperModifiers` prop (see [note](#breaking-changes))
53+
54+
#### @zendeskgarden/react-dropdowns
55+
56+
- `Menu`: value `auto` is no longer valid for the `fallbackPlacements` prop.
57+
58+
#### @zendeskgarden/react-modals
59+
60+
- `TooltipModal`: removed `popperModifiers` prop (see [note](#breaking-changes))
3061

3162
#### @zendeskgarden/react-theming
3263

3364
- Utility function `isRtl` has been removed. Use `props.theme.rtl` instead.
3465
- Utility function `getDocument` has been removed. Use `useDocument` instead.
3566

67+
#### @zendeskgarden/react-tooltips
68+
69+
- `Tooltip`
70+
- removed `eventsEnabled` prop (no longer exposed by Floating UI)
71+
- removed `popperModifiers` prop (see [note](#breaking-changes))
72+
3673
#### @zendeskgarden/react-utilities
3774

3875
- This package has been removed.

package-lock.json

Lines changed: 5 additions & 105 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: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@ import README from '../README.md';
1717
focusInset: { control: 'boolean' },
1818
hasArrow: { control: 'boolean' },
1919
isOpaque: { control: 'boolean' },
20-
popperModifiers: { control: 'array' },
2120
zIndex: { control: 'number' }
2221
}}
2322
parameters={{

packages/colorpickers/demo/colorSwatchDialog.stories.mdx

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@ import README from '../README.md';
1818
argTypes={{
1919
focusInset: { control: 'boolean' },
2020
hasArrow: { control: 'boolean' },
21-
popperModifiers: { control: 'array' },
2221
zIndex: { control: 'number' }
2322
}}
2423
parameters={{

packages/colorpickers/src/elements/ColorSwatchDialog/index.tsx

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,6 @@ export const ColorSwatchDialog = forwardRef<HTMLDivElement, IColorSwatchDialogPr
4646
onSelect,
4747
hasArrow,
4848
isAnimated,
49-
popperModifiers,
5049
zIndex,
5150
isOpen,
5251
focusInset,
@@ -161,7 +160,6 @@ export const ColorSwatchDialog = forwardRef<HTMLDivElement, IColorSwatchDialogPr
161160
focusOnMount={false}
162161
placement={placement}
163162
isAnimated={isAnimated}
164-
popperModifiers={popperModifiers}
165163
referenceElement={referenceElement}
166164
onClose={closeDialog}
167165
aria-label={ariaLabelText}
@@ -192,7 +190,6 @@ ColorSwatchDialog.propTypes = {
192190
onDialogChange: PropTypes.func,
193191
disabled: PropTypes.bool,
194192
buttonProps: PropTypes.object,
195-
popperModifiers: PropTypes.any,
196193
zIndex: PropTypes.number,
197194
hasArrow: PropTypes.bool,
198195
isAnimated: PropTypes.bool,

packages/colorpickers/src/elements/ColorpickerDialog/index.tsx

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,6 @@ export const ColorpickerDialog = forwardRef<HTMLDivElement, IColorpickerDialogPr
4545
isAnimated,
4646
isOpaque,
4747
isOpen,
48-
popperModifiers,
4948
zIndex,
5049
focusInset,
5150
disabled,
@@ -125,7 +124,6 @@ export const ColorpickerDialog = forwardRef<HTMLDivElement, IColorpickerDialogPr
125124
<StyledTooltipModal
126125
ref={ref}
127126
hasArrow={hasArrow}
128-
popperModifiers={popperModifiers}
129127
zIndex={zIndex}
130128
isAnimated={isAnimated}
131129
isOpaque={isOpaque}
@@ -164,7 +162,6 @@ ColorpickerDialog.propTypes = {
164162
disabled: PropTypes.bool,
165163
labels: PropTypes.object,
166164
buttonProps: PropTypes.object,
167-
popperModifiers: PropTypes.any,
168165
zIndex: PropTypes.number,
169166
hasArrow: PropTypes.bool,
170167
isAnimated: PropTypes.bool,

packages/colorpickers/src/types/index.ts

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -78,10 +78,6 @@ export interface IColorpickerDialogProps extends IColorpickerProps {
7878
placement?: ITooltipModalProps['placement'];
7979
/** Disables the color dialog button */
8080
disabled?: boolean;
81-
/**
82-
* Modifies [Popper instance](https://popper.js.org/docs/v2/modifiers/) to customize positioning logic
83-
*/
84-
popperModifiers?: ITooltipModalProps['popperModifiers'];
8581
/**
8682
* Sets the `z-index` of the color dialog
8783
*/
@@ -143,8 +139,6 @@ export interface IColorSwatchDialogProps extends IColorSwatchProps {
143139
placement?: ITooltipModalProps['placement'];
144140
/** Disables the color dialog button */
145141
disabled?: boolean;
146-
/** Modifies [Popper instance](https://popper.js.org/docs/v2/modifiers/) to customize positioning logic */
147-
popperModifiers?: ITooltipModalProps['popperModifiers'];
148142
/** Sets the `z-index` of the color dialog */
149143
zIndex?: ITooltipModalProps['zIndex'];
150144
/** Adds an arrow to the color dialog */

packages/datepickers/demo/datepicker.stories.mdx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ import README from '../README.md';
1616
<Canvas>
1717
<Story
1818
name="Datepicker"
19-
args={{ dateStyle: DATE_STYLE_OPTIONS[1], eventsEnabled: true, isAnimated: true }}
19+
args={{ dateStyle: DATE_STYLE_OPTIONS[1], isAnimated: true }}
2020
argTypes={{
2121
value: { control: 'date' },
2222
minValue: { control: 'date' },

packages/datepickers/package.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,10 +21,11 @@
2121
"sideEffects": false,
2222
"types": "dist/typings/index.d.ts",
2323
"dependencies": {
24+
"@floating-ui/react-dom": "^2.0.0",
2425
"@zendeskgarden/container-utilities": "^2.0.0",
2526
"date-fns": "^3.0.0",
2627
"prop-types": "^15.5.7",
27-
"react-popper": "^1.3.4"
28+
"react-merge-refs": "^2.0.0"
2829
},
2930
"peerDependencies": {
3031
"@zendeskgarden/react-theming": "^8.1.0",

packages/datepickers/src/elements/Datepicker/Datepicker.spec.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ import { IDatepickerProps } from '../../types';
1717

1818
const DEFAULT_DATE = new Date(2019, 1, 5);
1919

20-
const Example = (props: IDatepickerProps) => (
20+
const Example = (props: Omit<IDatepickerProps, 'children'>) => (
2121
<>
2222
<label data-test-id="label" htmlFor="input">
2323
Label
@@ -440,7 +440,7 @@ describe('Datepicker', () => {
440440
});
441441
});
442442

443-
describe('Popper', () => {
443+
describe('Calendar', () => {
444444
it('applies LTR classes by default', async () => {
445445
const { getByTestId } = render(<Example value={DEFAULT_DATE} />);
446446

0 commit comments

Comments
 (0)