A floating container for any content, such as navigation menus, help texts, etc.
A PopOver is generated by the factory function popOver.
By clicking on the building block created by popOverButton or Space with focused popOverButton, the
floating container created by popOverPanel is shown as well.
Esc or a click outside the visible container closes the popOverPanel.
data class Solution(val name: String, val description: String, val icon: String)
val solutions = listOf(
    Solution("fritz2", "Cool web framework for building modern SPAs", fritz2),
    Solution("Headless", "Create fully functional and customized components", HeroIcons.academic_cap),
    Solution("Tailwind", "Nice CSS framework for styling your application", HeroIcons.color_swatch)
)
popOver {
    popOverButton {
        span { +"Open Popover" }
    }
    popOverPanel {
        solutions.forEach { item ->
            a {
                div {
                    svg { content(item.icon) }
                }
                div {
                    p { +item.name }
                    p { +item.description }
                }
            }
        }
    }
}Do not forget to include a portalRoot()-call at the end of your initial RenderContext as explained
here!
PopOver is an OpenClose component. There are different Flows and Handler
like opened in its scope available to control the open state of a popover panel on state changes.
The opening state of the PopOver can be bound to an external store via data binding, e.g. to always display the
popover panel.
popOverButton {
    className(opened.map { if (it) "" else "text-opacity-90" })
    opened.map { if (it) "Close Popover" else "Open Popover" }.renderText()
}Showing and hiding the popover panel can be easily animated with the help of transition:
popOverPanel {
    transition(
        opened,
        "transition ease-out duration-200",
        "opacity-0 translate-y-1",
        "opacity-100 translate-y-0",
        "transition ease-in duration-150",
        "opacity-100 translate-y-0",
        "opacity-0 translate-y-1"
    )
    //...    
}popOverPanel is a PopUpPanel and therefore provides in its scope some
configuration options, e.g. to control the position or distance of the list box from the popOverButton
as a reference element:
popOverPanel {
    placement = PlacementValues.bottom
    addMiddleware(offset(20))
    
    //...
}An arrow pointing to the popOverButton can easily be added:
popOverPanel {
    arrow()
    //...
}By default, the arrow is 8 pixels wide and inherits the background-color from the popOverPanel its size and offset can
be adapted:
arrow("h-3 w-3", 8)In order to prevent interaction with the rest of the application via keyboard interaction, the popover uses a so-called focus trap by default. Therefore, the focus will cycle through all the focusable elements using Tab without leaving the modal panel.
For this reason there should always be at least one focusable element in the popover panel.
By default, the first focusable element is always given the focus. In order to focus a specific tag initially,
the setInitialFocus function can be called inside a Tag.
A click on the popOverButton toggles the state of the container. A click outside the opened container closes it.
| Command | Description | 
|---|---|
| Enter Space when popOverButtonis focused | Opens container | 
| Esc when container is open | Closes container | 
popOver {
    // inherited by `OpenClose`
    val openState: DatabindingProperty<Boolean>
    val opened: Flow<Boolean>
    val close: SimpleHandler<Unit>
    val open: SimpleHandler<Unit>
    val toggle: SimpleHandler<Unit>
    popOverButton() { }
    popOverPanel() {
        // inherited by `PopUpPanel`
        var placement: Placement
        var strategy: Strategy
        var flip: Boolean
        var skidding: Int
        var distance: int
    }
}Parameters: classes, id, scope, tag, initialize
Default-Tag: div
| Scope property | Typ | Description | 
|---|---|---|
| openState | DatabindingProperty<Boolean> | Mandatory (two-way) data binding for opening and closing. | 
| opened | Flow<Boolean> | Data stream that provides Boolean values related to the "open" state. Quite useless within a popover, as it is always true | 
| close | SimpleHandler<Unit> | Handler to close the popover panel from inside. | 
| open | SimpleHandler<Unit> | handler to open; does not make sense to use within a popover! | 
| toggle | SimpleHandler<Unit> | handler for switching between open and closed; does not make sense to use within a popover. | 
Available in the scope of: popOver
Parameters: classes, scope, tag, initialize
Default-Tag: button
Available in the scope of: popOver
Parameters: classes, scope, tag, initialize
Default-Tag: div
| Scope property | Typ | Description | 
|---|---|---|
| placement | Placement | Defines the position of the building block, e.g. Placement.top,Placement.bottomRight, etc. Default isPlacement.auto. The presumably best position is determined automatically based on the available visible space. | 
| strategy | Strategy | Determines whether the block should be positioned absolute(default) orfixed. | 
| flip | Boolean | If the block comes too close to the edge of the visible area, the position automatically changes to the other side if more space is available there. | 
| skidding | Int | Defines the shifting of the panel along the reference element in pixels. The default value is 0. | 
| distance | Int | Defines the distance of the panel from the reference element in pixels. The default value is 10. |