Package org.patternfly.popper
package org.patternfly.popper
Java wrapper for Popper.js positioning engine used by overlay components.
This package provides a type-safe Java API for Popper.js, the positioning library used by PatternFly components with popups, tooltips, dropdowns, and other floating elements. It handles automatic positioning, collision detection, and dynamic updates.
Key Classes
Popper- Main interface for controlling popper instancesPopperBuilder- Builder for configuring and creating popper instancesPlacement- Enum of placement options (top, bottom, left, right, etc.)Modifier- Configuration for Popper.js modifiersTriggerAction- Enum of trigger events (click, hover, focus, etc.)Options- Configuration options for popper behaviorState- Current state of the popper including position and styles
Basic Usage
Create a popper to position a floating element relative to a trigger element:
HTMLElement trigger = button().element();
HTMLElement popup = div().element();
Popper popper = new PopperBuilder("MyComponent", trigger, popup)
.placement(Placement.bottom)
.zIndex(1000)
.registerHandler(Set.of(TriggerAction.click),
e -> popper.show(() -> console.log("Visible")),
e -> popper.hide(() -> console.log("Hidden")))
.build();
Placement Options
Control where the popper appears relative to the trigger element:
// Automatic placement (Popper chooses the best position)
popper = builder.placement(Placement.auto).build();
// Fixed placement
popper = builder.placement(Placement.top).build();
popper = builder.placement(Placement.bottomStart).build();
popper = builder.placement(Placement.rightEnd).build();
Trigger Actions
Configure how the popper responds to user interactions:
// Show on hover
builder.registerHandler(Set.of(TriggerAction.mouseenter), show, hide);
// Show on click, hide when clicking outside
builder.registerHandler(Set.of(TriggerAction.click), show, hide);
// Show on focus (for keyboard navigation)
builder.registerHandler(Set.of(TriggerAction.focus), show, hide);
// Stay open even when clicking inside (e.g., for menus)
builder.registerHandler(Set.of(TriggerAction.stayOpen), show, hide);
// Manual control only
builder.registerHandler(Set.of(TriggerAction.manual), show, hide);
Animation and Timing
Configure entrance/exit animations and delays:
Popper popper = new PopperBuilder(componentName, trigger, popup)
.animationDuration(300) // Fade in/out over 300ms
.entryDelay(500) // Wait 500ms before showing
.exitDelay(200) // Wait 200ms before hiding
.build();
Modifiers
Customize Popper.js behavior with modifiers:
// Add offset from trigger element
Modifier offset = new Modifier();
offset.name = "offset";
offset.options = new ModifierOptions();
offset.options.offset = new int[]{0, 8}; // [skidding, distance]
Popper popper = new PopperBuilder(componentName, trigger, popup)
.addModifier(offset)
.build();
Controlling Visibility
Programmatically show and hide the popper:
// Show with callback
popper.show(() -> console.log("Popper is now visible"));
// Hide with callback
popper.hide(() -> console.log("Popper is now hidden"));
// Update position (e.g., after content changes)
popper.update().then(state -> console.log("Updated to: " + state.placement));
// Clean up when done
popper.cleanup();
Lifecycle Management
The PopperBuilder provides lifecycle management options:
builder
.removePopperOnTriggerDetach() // Auto-cleanup when trigger is removed from DOM
.stayOpen(event -> { // Custom logic for keeping popper open
return popup.contains((Node) event.target);
});
- See Also:
-
ClassDescriptionWrapper around
PopperJs