ui.input_bookmark_button

ui.input_bookmark_button(
    label='Bookmark...',
    *,
    icon=MISSING,
    width=None,
    disabled=False,
    id=BOOKMARK_ID,
    title="Bookmark this application's state and get a URL for sharing.",
    **kwargs,
)

Button for bookmarking/sharing.

A bookmarkButton is a [input_action_button()] with a default label that consists of a link icon and the text "Bookmark…". It is meant to be used for bookmarking state.

Parameters

label : TagChild = 'Bookmark…'

The button label.

icon : TagChild | MISSING_TYPE = MISSING

The icon to display on the button.

width : Optional[str] = None

The CSS width, e.g. ‘400px’, or ‘100%’.

disabled : bool = False

Whether the button is disabled.

id : str = BOOKMARK_ID

An ID for the bookmark button. The only time it is necessary to set the ID unless you have more than one bookmark button in your application. If you specify an input ID, it should be excluded from bookmarking with session.bookmark.exclude.append(ID), and you must create a reactive effect that performs the bookmarking (session.bookmark()) when the button is pressed.

title : str = "Bookmark this application's state and get a URL for sharing."

A tooltip that is shown when the mouse cursor hovers over the button.

kwargs : TagAttrValue = {}

Additional attributes for the button.

Returns

: Tag

A UI element.

See Also

Examples

#| standalone: true
#| components: [editor, viewer]
#| layout: vertical
#| viewerHeight: 400

## file: app.py
from starlette.requests import Request

from shiny import App, Inputs, Outputs, Session, ui


# App UI **must** be a function to ensure that each user restores their own UI values.
def app_ui(request: Request):
    return ui.page_fluid(
        ui.markdown(
            "Directions: "
            "\n1. Change the radio button selection below"
            "\n2. Save the bookmark."
            "\n3. Then, refresh your browser page to see the radio button selection has been restored."
        ),
        ui.hr(),
        ui.input_radio_buttons("letter", "Choose a letter", choices=["A", "B", "C"]),
        ui.input_bookmark_button(label="Save bookmark!"),
    )


def server(input: Inputs, output: Outputs, session: Session):

    # @reactive.effect
    # @reactive.event(input.letter, ignore_init=True)
    # async def _():
    #     await session.bookmark()

    @session.bookmark.on_bookmarked
    async def _(url: str):
        await session.bookmark.update_query_string(url)


app = App(app_ui, server, bookmark_store="url")