| Title: | Microsoft Fluent UI for Shiny Apps | 
| Version: | 0.4.0 | 
| Description: | A rich set of UI components for building Shiny applications, including inputs, containers, overlays, menus, and various utilities. All components from Fluent UI (the underlying JavaScript library) are available and have usage examples in R. | 
| URL: | https://appsilon.github.io/shiny.fluent/, https://github.com/appsilon/shiny.fluent | 
| License: | LGPL-3 | 
| Encoding: | UTF-8 | 
| LazyData: | true | 
| RoxygenNote: | 7.3.1 | 
| Depends: | R (≥ 2.10) | 
| Imports: | htmltools, jsonlite, purrr, shiny, shiny.react (≥ 0.4.0) | 
| Suggests: | chromote, covr, dplyr, DT, ggplot2, glue, imola, knitr, leaflet, mockery, plotly, rcmdcheck, RColorBrewer, rmarkdown, sass, shiny.i18n (≥ 0.3.0), shiny.router (≥ 0.3.1), shinyjs, shinytest2, sortable, stringi, testthat (≥ 3.0.0), tibble, withr | 
| Config/testthat/edition: | 3 | 
| NeedsCompilation: | no | 
| Packaged: | 2024-05-21 07:47:32 UTC; jakub | 
| Author: | Jakub Sobolewski [aut, cre], Kamil Żyła [aut], Marek Rogala [aut], Appsilon Sp. z o.o. [cph] | 
| Maintainer: | Jakub Sobolewski <opensource+jakub.sobolewski@appsilon.com> | 
| Repository: | CRAN | 
| Date/Publication: | 2024-05-21 10:40:02 UTC | 
Button
Description
Buttons give people a way to trigger an action. They’re typically found in forms, dialog panels, and dialogs. Some buttons are specialized for particular tasks, such as navigation, repeated actions, or presenting menus.
For more details and examples visit the official docs. The R package cannot handle each and every case, so for advanced use cases you need to work using the original docs to achieve the desired result.
Usage
ActionButton(...)
CommandBarButton(...)
CommandButton(...)
CompoundButton(...)
DefaultButton(...)
IconButton(...)
PrimaryButton(...)
ActionButton.shinyInput(inputId, ...)
updateActionButton.shinyInput(
  session = shiny::getDefaultReactiveDomain(),
  inputId,
  ...
)
CommandBarButton.shinyInput(inputId, ...)
updateCommandBarButton.shinyInput(
  session = shiny::getDefaultReactiveDomain(),
  inputId,
  ...
)
CommandButton.shinyInput(inputId, ...)
updateCommandButton.shinyInput(
  session = shiny::getDefaultReactiveDomain(),
  inputId,
  ...
)
CompoundButton.shinyInput(inputId, ...)
updateCompoundButton.shinyInput(
  session = shiny::getDefaultReactiveDomain(),
  inputId,
  ...
)
DefaultButton.shinyInput(inputId, ...)
updateDefaultButton.shinyInput(
  session = shiny::getDefaultReactiveDomain(),
  inputId,
  ...
)
IconButton.shinyInput(inputId, ...)
updateIconButton.shinyInput(
  session = shiny::getDefaultReactiveDomain(),
  inputId,
  ...
)
PrimaryButton.shinyInput(inputId, ...)
updatePrimaryButton.shinyInput(
  session = shiny::getDefaultReactiveDomain(),
  inputId,
  ...
)
Arguments
| ... | Props to pass to the component. The allowed props are listed below in the Details section. | 
| inputId | ID of the component. | 
| session | Object passed as the  | 
Details
-  baseClassName string
 
-  variantClassName string
 
-  allowDisabledFocus boolean
 Whether the button can have focus in disabled mode
-  ariaDescription string
 Detailed description of the button for the benefit of screen readers.
Besides the compound button, other button types will need more information provided to screen reader.
-  ariaHidden boolean
 If provided and is true it adds an 'aria-hidden' attribute instructing screen readers to ignore the element.
-  ariaLabel string
 The aria label of the button for the benefit of screen readers.
-  buttonType ButtonType
 Deprecated at v1.2.3, to be removed at \>= v2.0.0. Use specific button component instead.
-  checked boolean
 Whether the button is checked
-  className string
 If provided, additional class name to provide on the root element.
-  componentRef IRefObject<IButton>
 Optional callback to access the IButton interface. Use this instead of ref for accessing the public methods and properties of the component.
-  data any
 Any custom data the developer wishes to associate with the menu item.
-  defaultRender any
 yet unknown docs
-  description IStyle
 Style for the description text if applicable (for compound buttons.) Deprecated, usesecondaryTextinstead.
-  disabled boolean
 Whether the button is disabled
-  getClassNames (theme: ITheme, className: string, variantClassName: string, iconClassName: string | undefined, menuIconClassName: string | undefined, disabled: boolean, checked: boolean, expanded: boolean, hasMenu: boolean, isSplit: boolean | undefined, allowDisabledFocus: boolean) => IButtonClassNames
 Method to provide the classnames to style a button. The default value for this prop is the getClassnames func defined in BaseButton.classnames.
-  getSplitButtonClassNames (disabled: boolean, expanded: boolean, checked: boolean, allowDisabledFocus: boolean) => ISplitButtonClassNames
 Method to provide the classnames to style a button. The default value for this prop is the getClassnames func defined in BaseButton.classnames.
-  href string
 If provided, this component will be rendered as an anchor.
-  iconProps IIconProps
 The props for the icon shown in the button.
-  keytipProps IKeytipProps
 Optional keytip for this button
-  menuAs IComponentAs<IContextualMenuProps>
 Render a custom menu in place of the normal one.
-  menuIconProps IIconProps
 The props for the icon shown when providing a menu dropdown.
-  menuProps IContextualMenuProps
 Props for button menu. Providing this will default to showing the menu icon. See menuIconProps for overriding how the default icon looks. Providing this in addition of onClick and setting the split property to true will render a SplitButton.
-  menuTriggerKeyCode KeyCodes | null
 Provides a custom KeyCode that can be used to open the button menu. The default KeyCode is the down arrow. A value of null can be provided to disable the key codes for opening the button menu.
-  onAfterMenuDismiss () => void
 Callback that runs after Button's contextualmenu was closed (removed from the DOM)
-  onMenuClick (ev?: React.MouseEvent<HTMLElement> | React.KeyboardEvent<HTMLElement>, button?: IButtonProps) => void
 Optional callback when menu is clicked.
-  onRenderAriaDescription IRenderFunction<IButtonProps>
 Custom render function for the aria description element.
-  onRenderChildren IRenderFunction<IButtonProps>
 Custom render function for rendering the button children.
-  onRenderDescription IRenderFunction<IButtonProps>
 Custom render function for the desciption text.
-  onRenderIcon IRenderFunction<IButtonProps>
 Custom render function for the icon
-  onRenderMenu IRenderFunction<IContextualMenuProps>
 Deprecated at v6.3.2, to be removed at \>= v7.0.0. UsemenuAsinstead.
-  onRenderMenuIcon IRenderFunction<IButtonProps>
 Custom render function for button menu icon
-  onRenderText IRenderFunction<IButtonProps>
 Custom render function for the label text.
-  persistMenu boolean
 Menu will not be created or destroyed when opened or closed, instead it will be hidden. This will improve perf of the menu opening but could potentially impact overall perf by having more elements in the dom. Should only be used when perf is important. Note: This may increase the amount of time it takes for the button itself to mount.
-  primary boolean
 Changes the visual presentation of the button to be emphasized (if defined)
-  primaryActionButtonProps IButtonProps
 Optional props to be applied only to the primary action button of SplitButton and not to the overall SplitButton container
-  primaryDisabled boolean
 If set to true and if this is a splitButton (split == true) then the primary action of a split button is disabled.
-  renderPersistedMenuHiddenOnMount boolean
 If true, the persisted menu is rendered hidden when the button initially mounts. Non-persisted menus will not be in the component tree unless they are being shown
Note: This increases the time the button will take to mount, but can improve perceived menu open perf. when the user opens the menu.
-  rootProps React.ButtonHTMLAttributes<HTMLButtonElement> | React.AnchorHTMLAttributes<HTMLAnchorElement>
 Deprecated at v0.56.2, to be removed at \>= v1.0.0. Just pass in button props instead. they will be mixed into the button/anchor element rendered by the component.
-  secondaryText string
 Description of the action this button takes. Only used for compound buttons
-  split boolean
 If set to true, and if menuProps and onClick are provided, the button will render as a SplitButton.
-  splitButtonAriaLabel string
 Accessible label for the dropdown chevron button if this button is split.
-  splitButtonMenuProps IButtonProps
 Experimental prop that get passed into the menuButton that's rendered as part of split button. Anything passed in will likely need to have accompanying style changes.
-  styles IButtonStyles
 Custom styling for individual elements within the button DOM.
-  text string
 Text to render button label. If text is supplied, it will override any string in button children. Other children components will be passed through after the text.
-  theme ITheme
 Theme provided by HOC.
-  toggle boolean
 Whether button is a toggle button with distinct on and off states. This should be true for buttons that permanently change state when a press event finishes, such as a volume mute button.
-  toggled boolean
 Any custom data the developer wishes to associate with the menu item. Deprecated, usecheckedif setting state.
-  uniqueId string | number
 Unique id to identify the item. Typically a duplicate of key value.
Value
Object with shiny.tag class suitable for use in the UI of a Shiny app.
The update functions return nothing (called for side effects).
Best practices
Layout
- For dialog boxes and panels, where people are moving through a sequence of screens, right-align buttons with the container. 
- For single-page forms and focused tasks, left-align buttons with the container. 
- Always place the primary button on the left, the secondary button just to the right of it. 
- Show only one primary button that inherits theme color at rest state. If there are more than two buttons with equal priority, all buttons should have neutral backgrounds. 
- Don't use a button to navigate to another place; use a link instead. The exception is in a wizard where "Back" and "Next" buttons may be used. 
- Don't place the default focus on a button that destroys data. Instead, place the default focus on the button that performs the "safe act" and retains the content (such as "Save") or cancels the action (such as "Cancel"). 
Content
- Use sentence-style capitalization—only capitalize the first word. For more info, see Capitalization in the Microsoft Writing Style Guide. 
- Make sure it's clear what will happen when people interact with the button. Be concise; usually a single verb is best. Include a noun if there is any room for interpretation about what the verb means. For example, "Delete folder" or "Create account". 
Examples
# Example 1
library(shiny)
library(shiny.fluent)
tokens <- list(childrenGap = 20)
ui <- function(id) {
  ns <- NS(id)
  tags$div(
    Stack(
      DefaultButton.shinyInput(
        ns("button1"),
        text = "Default Button",
        styles = list("background: green")
      ),
      PrimaryButton.shinyInput(
        ns("button2"),
        text = "Primary Button"
      ),
      CompoundButton.shinyInput(
        ns("button3"),
        secondaryText = "Compound Button has additional text",
        text = "Compound Button"
      ),
      ActionButton.shinyInput(
        ns("button4"),
        iconProps = list("iconName" = "AddFriend"),
        text = "Action Button"
      ),
      horizontal = TRUE,
      tokens = tokens
    ),
    textOutput(ns("text"))
  )
}
server <- function(id) {
  moduleServer(id, function(input, output, session) {
    clicks <- reactiveVal(0)
    addClick <- function() { clicks(isolate(clicks() + 1)) }
    observeEvent(input$button0, addClick())
    observeEvent(input$button1, addClick())
    observeEvent(input$button2, addClick())
    observeEvent(input$button3, addClick())
    observeEvent(input$button4, addClick())
    output$text <- renderText({
      paste0("Clicks:", clicks())
    })
  })
}
if (interactive()) {
  shinyApp(ui("app"), function(input, output) server("app"))
}
# Example 2
library(shiny)
library(shiny.fluent)
# Split button with menu
menuProps <- list(
  items = list(
    list(
      key = "emailMessage",
      text = "Email message",
      onClick = JS("() => alert('Email message clicked')"),
      iconProps = list(
        iconName = "Mail"
      )
    ),
    list(
      key = "calendarEvent",
      text = "Calendar event",
      onClick = JS("() => alert('Calendar event clicked')"),
      iconProps = list(
        iconName = "Calendar"
      )
    )
  )
)
ui <- function(id) {
  ns <- NS(id)
  fluentPage(
    Stack(
      horizontal = TRUE,
      wrap = TRUE,
      tokens = list(
        childrenGap = 40
      ),
      DefaultButton.shinyInput(
        inputId = ns("button_1"),
        text = "Standard",
        primary = FALSE,
        split = TRUE,
        splitButtonAriaLabel = "See 2 options",
        `aria-roledescription` = "split button",
        menuProps = menuProps,
        disabled = FALSE,
        checked = FALSE
      ),
      DefaultButton.shinyInput(
        inputId = ns("button_2"),
        text = "Primary",
        primary = TRUE,
        split = TRUE,
        splitButtonAriaLabel = "See 2 options",
        `aria-roledescription` = "split button",
        menuProps = menuProps,
        disabled = FALSE,
        checked = FALSE
      ),
      DefaultButton.shinyInput(
        inputId = ns("button_3"),
        text = "Main action disabled",
        primaryDisabled = NA,
        split = TRUE,
        splitButtonAriaLabel = "See 2 options",
        `aria-roledescription` = "split button",
        menuProps = menuProps,
        checked = FALSE
      ),
      DefaultButton.shinyInput(
        inputId = ns("button_4"),
        text = "Disabled",
        disabled = TRUE,
        split = TRUE,
        splitButtonAriaLabel = "See 2 options",
        `aria-roledescription` = "split button",
        menuProps = menuProps,
        checked = FALSE
      )
    ),
    uiOutput(ns("text"))
  )
}
server <- function(id) {
  moduleServer(id, function(input, output, session) {
    output$text <- renderUI({
      lapply(seq_len(4), function(i) {
        paste0("button_", i, ": ", input[[paste0("button_", i)]])
      })
    })
  })
}
if (interactive()) {
  shinyApp(ui("app"), function(input, output) server("app"))
}
# Example 3
library(shiny)
library(shiny.fluent)
library(shinyjs)
# This example app shows how to use a Fluent UI Button to trigger a file upload.
# File upload is not natively supported by shiny.fluent so shinyjs is used
# to trigger the file upload input.
ui <- function(id) {
  ns <- NS(id)
  fluentPage(
    useShinyjs(),
    Stack(
      tokens = list(
        childrenGap = 10L
      ),
      horizontal = TRUE,
      DefaultButton.shinyInput(
        inputId = ns("uploadFileButton"),
        text = "Upload File",
        iconProps = list(iconName = "Upload")
      ),
      div(
        style = "
          visibility: hidden;
          height: 0;
          width: 0;
        ",
        fileInput(
          inputId = ns("uploadFile"),
          label = NULL
        )
      )
    ),
    textOutput(ns("file_path"))
  )
}
server <- function(id) {
  moduleServer(id, function(input, output, session) {
    observeEvent(input$uploadFileButton, {
      click("uploadFile")
    })
    output$file_path <- renderText({
      input$uploadFile$name
    })
  })
}
if (interactive()) {
  shinyApp(ui("app"), function(input, output) server("app"))
}
# Example 4
library(shiny)
library(shiny.fluent)
library(shinyjs)
# This example app shows how to use a Fluent UI Button to trigger a file download.
# File download is not natively supported by shiny.fluent so shinyjs is used
# to trigger the file download.
ui <- function(id) {
  ns <- NS(id)
  fluentPage(
    useShinyjs(),
    DefaultButton.shinyInput(
      inputId = ns("downloadButton"),
      text = "Download",
      iconProps = list(iconName = "Download")
    ),
    div(
      style = "visibility: hidden;",
      downloadButton(ns("download"), label = "")
    )
  )
}
server <- function(id) {
  moduleServer(id, function(input, output, session) {
    observeEvent(input$downloadButton, {
      click("download")
    })
    output$download <- downloadHandler(
      filename = function() {
        paste("data-", Sys.Date(), ".csv", sep="")
      },
      content = function(file) {
        write.csv(iris, file)
      }
    )
  })
}
if (interactive()) {
  shinyApp(ui("app"), function(input, output) server("app"))
}
ActivityItem
Description
An activity item (ActivityItem) represents a person's actions, such as making a comment, mentioning someone with an @mention, editing a document, or moving a file.
For more details and examples visit the official docs. The R package cannot handle each and every case, so for advanced use cases you need to work using the original docs to achieve the desired result.
Usage
ActivityItem(...)
Arguments
| ... | Props to pass to the component. The allowed props are listed below in the Details section. | 
Details
-  activityDescription React.ReactNode[] | React.ReactNode
 An element describing the activity that took place. If no activityDescription, activityDescriptionText, or onRenderActivityDescription are included, no description of the activity is shown.
-  activityDescriptionText string
 Text describing the activity that occurred and naming the people involved in it. Deprecated, useactivityDescriptioninstead.
-  activityIcon React.ReactNode
 An element containing an icon shown next to the activity item.
-  activityPersonas Array<IPersonaSharedProps>
 If activityIcon is not set, then the persona props in this array will be used as the icon for this activity item.
-  animateBeaconSignal boolean
 Enables/Disables the beacon that radiates from the center of the center of the activity icon. Signals an activity has started.
-  beaconColorOne string
 Beacon color one
-  beaconColorTwo string
 Beacon color two
-  comments React.ReactNode[] | React.ReactNode
 An element containing the text of comments or \@mention messages. If no comments, commentText, or onRenderComments are included, no comments are shown.
-  commentText string
 Text of comments or \@mention messages. Deprecated, usecommentsinstead.
-  isCompact boolean
 Indicated if the compact styling should be used.
-  onRenderActivityDescription IRenderFunction<IActivityItemProps>
 A renderer for the description of the current activity.
-  onRenderComments IRenderFunction<IActivityItemProps>
 A renderer that adds the text of a comment below the activity description.
-  onRenderIcon IRenderFunction<IActivityItemProps>
 A renderer to create the icon next to the activity item.
-  onRenderTimeStamp IRenderFunction<IActivityItemProps>
 A renderer adds a time stamp. If not included, timeStamp is shown as plain text below the activity.
-  styles IActivityItemStyles
 Optional styling for the elements within the Activity Item.
-  timeStamp string | React.ReactNode[] | React.ReactNode
 Element shown as a timestamp on this activity. If not included, no timestamp is shown.
Value
Object with shiny.tag class suitable for use in the UI of a Shiny app.
Best practices
Layout
- Use a list of multiple activity items to indicate a history of events relating to a single file, folder, person, or other entity. Alternatively, use a single activity item to indicate the most recent event on an entity. 
- Group multiple similar events occurring near the same time into a single activity item. 
Examples
library(shiny)
library(shiny.fluent)
ui <- function(id) {
  ActivityItem(
    activityDescription = tagList(
      Link(key = 1, "Philippe Lampros"),
      tags$span(key = 2, " commented")
    ),
    activityIcon = Icon(iconName = "Message"),
    comments = tagList(
      tags$span(key = 1, "Hello! I am making a comment.")
    ),
    timeStamp = "Just now"
  )
}
server <- function(id) {
  moduleServer(id, function(input, output, session) {})
}
if (interactive()) {
  shinyApp(ui("app"), function(input, output) server("app"))
}
Announced
Description
The Announced component aims to fill several of the accessibility gaps that exist in various web application experiences. It provides text for the screen reader in certain scenarios that are lacking comprehensive updates, particularly those showing the completion status or progress of operation(s).
Some real-world applications of the component include copying, uploading, or moving many files; deleting or renaming a single file; "lazy loading" of page sections that do not appear all at once; and appearance of search results.
The Announced component currently has the following documented use cases:
-  Quick Actions: Operations such as editing text or deletion that are short enough that they do not require a status during progress. 
-  Search Results: Appearance of search results such as in contact fields or search boxes. 
-  Lazy Loading: "Lazy loading" of page sections that do not appear all at once. 
-  Bulk Operations: Operations that require multiple sub operations, such as the moving of several files. 
For more details and examples visit the official docs. The R package cannot handle each and every case, so for advanced use cases you need to work using the original docs to achieve the desired result.
Usage
Announced(...)
Arguments
| ... | Props to pass to the component. The allowed props are listed below in the Details section. | 
Details
-  "aria-live" 'off' | 'polite' | 'assertive'
 Priority with which the screen reader should treat updates to this region @default 'polite'
-  as React.ElementType
 Optionally render the root of this component as another component type or primitive. The custom type must preserve any children or native props passed in. @default 'div'
-  message string
 The status message provided as screen reader output
-  styles IStyleFunctionOrObject<{}, IAnnouncedStyles>
 Call to provide customized styling that will layer on top of the variant rules.
Value
Object with shiny.tag class suitable for use in the UI of a Shiny app.
Examples
library(shiny)
library(shiny.fluent)
ui <- function(id) {
  Announced(message = "Screen reader message")
}
server <- function(id) {
  moduleServer(id, function(input, output, session) {})
}
if (interactive()) {
  shinyApp(ui("app"), function(input, output) server("app"))
}
Pickers
Description
For more details and examples visit the official docs. The R package cannot handle each and every case, so for advanced use cases you need to work using the original docs to achieve the desired result.
Pickers are used to select one or more items, such as tags or files, from a large list.
For more details and examples visit the official docs. The R package cannot handle each and every case, so for advanced use cases you need to work using the original docs to achieve the desired result.
Usage
BasePickerListBelow(...)
TagPicker(...)
Arguments
| ... | Props to pass to the component. The allowed props are listed below in the Details section. | 
Details
-  className string
 ClassName for the picker.
-  componentRef IRefObject<IBasePicker<T>>
 Optional callback to access the IBasePicker interface. Use this instead of ref for accessing the public methods and properties of the component.
-  createGenericItem (input: string, ValidationState: ValidationState) => ISuggestionModel<T> | T
 Function that specifies how arbitrary text entered into the well is handled.
-  defaultSelectedItems T[]
 Initial items that have already been selected and should appear in the people picker.
-  disabled boolean
 Flag for disabling the picker.
-  enableSelectedSuggestionAlert boolean
 Adds an additional alert for the currently selected suggestion. This prop should be set to true for IE11 and below, as it enables proper screen reader behavior for each suggestion (since aria-activedescendant does not work with IE11). It should not be set for modern browsers (Edge, Chrome).
-  getTextFromItem (item: T, currentValue?: string) => string
 A callback to get text from an item. Used to autofill text in the pickers.
-  inputProps IInputProps
 AutoFill input native props
-  itemLimit number
 Restrict the amount of selectable items.
-  onBlur React.FocusEventHandler<HTMLInputElement | Autofill>
 A callback for when the user moves the focus away from the picker
-  onChange (items?: T[]) => void
 A callback for when the selected list of items changes.
-  onDismiss (ev?: any, selectedItem?: T) => boolean | void
 A callback to override the default behavior of adding the selected suggestion on dismiss. If it returns true or nothing, the selected item will be added on dismiss. If false, the selected item will not be added on dismiss.
-  onEmptyInputFocus (selectedItems?: T[]) => T[] | PromiseLike<T[]>
 A callback for what should happen when a user clicks within the input area.
-  onEmptyResolveSuggestions (selectedItems?: T[]) => T[] | PromiseLike<T[]>
 A callback for what should happen when suggestions are shown without input provided. Returns the already selected items so the resolver can filter them out. If used in conjunction with resolveDelay this will only kick off after the delay throttle.
-  onFocus React.FocusEventHandler<HTMLInputElement | Autofill>
 A callback for when the user put focus on the picker
-  onGetMoreResults (filter: string, selectedItems?: T[]) => T[] | PromiseLike<T[]>
 A callback that gets the rest of the results when a user clicks get more results.
-  onInputChange (input: string) => string
 A callback used to modify the input string.
-  onItemSelected (selectedItem?: T) => T | PromiseLike<T> | null
 A callback to process a selection after the user selects something from the picker. If the callback returns null, the item will not be added to the picker.
-  onRemoveSuggestion (item: T) => void
 A callback for when an item is removed from the suggestion list
-  onRenderItem (props: IPickerItemProps<T>) => JSX.Element
 Function that specifies how the selected item will appear.
-  onRenderSuggestionsItem (props: T, itemProps: ISuggestionItemProps<T>) => JSX.Element
 Function that specifies how an individual suggestion item will appear.
-  onResolveSuggestions (filter: string, selectedItems?: T[]) => T[] | PromiseLike<T[]>
 A callback for what should happen when a person types text into the input. Returns the already selected items so the resolver can filter them out. If used in conjunction with resolveDelay this will only kick off after the delay throttle.
-  onValidateInput (input: string) => ValidationState
 A function used to validate if raw text entered into the well can be added into the selected items list
-  pickerCalloutProps ICalloutProps
 The properties that will get passed to the Callout component.
-  pickerSuggestionsProps IBasePickerSuggestionsProps
 The properties that will get passed to the Suggestions component.
-  removeButtonAriaLabel string
 Aria label for the "X" button in the selected item component.
-  resolveDelay number
 The delay time in ms before resolving suggestions, which is kicked off when input has been changed. e.g. If a second input change happens within the resolveDelay time, the timer will start over. Only until after the timer completes will onResolveSuggestions be called.
-  searchingText ((props: { input: string; }) => string) | string
 The text to display while searching for more results in a limited suggestions list
-  selectedItems T[]
 The items that the base picker should currently display as selected. If this is provided then the picker will act as a controlled component.
-  styles IStyleFunctionOrObject<IBasePickerStyleProps, IBasePickerStyles>
 Call to provide customized styling that will layer on top of the variant rules.
-  theme ITheme
 Theme provided by styled() function.
-  "aria-label" string
 Screen reader label to apply to an input element.
-  defaultVisibleValue string
 The default value to be visible when the autofill first created. This is different than placeholder text because the placeholder text will disappear and re-appear. This text persists until deleted or changed.
-  componentRef IRefObject<IPickerItem>
 Optional callback to access the IPickerItem interface. Use this instead of ref for accessing the public methods and properties of the component.
-  index number
 Index number of the item in the array of picked items.
-  item T
 The item of Type T (Persona, Tag, or any other custom item provided).
-  key string | number
 Unique key for each picked item.
-  onItemChange (item: T, index: number) => void
 Internal Use only, gives a callback to the renderer to call when an item has changed. This allows the base picker to keep track of changes in the items.
-  onRemoveItem () => void
 Callback issued when the item is removed from the array of picked items.
-  removeButtonAriaLabel string
 Aria-label for the picked item remove button.
-  selected boolean
 Whether the picked item is selected or not.
-  className string
 Optional className for the root element of the suggestion item.
-  componentRef IRefObject<ISuggestionsItem>
 Optional callback to access the ISuggestionItem interface. Use this instead of ref for accessing the public methods and properties of the component.
-  id string
 Unique id of the suggested item.
-  isSelectedOverride boolean
 An override for the 'selected' property of the SuggestionModel.
-  onClick (ev: React.MouseEvent<HTMLButtonElement>) => void
 Callback for when the user clicks on the suggestion.
-  onRemoveItem (ev: React.MouseEvent<HTMLButtonElement>) => void
 Callback for when the item is removed from the array of suggested items.
-  removeButtonAriaLabel string
 The ARIA label for the button to remove the suggestion from the list.
-  RenderSuggestion (item: T, suggestionItemProps: ISuggestionItemProps<T>) => JSX.Element
 Optional renderer to override the default one for each type of picker.
-  showRemoveButton boolean
 Whether the remove button should be rendered or not.
-  styles IStyleFunctionOrObject<ISuggestionsItemStyleProps, ISuggestionsItemStyles>
 Call to provide customized styling that will layer on top of the variant rules.
-  suggestionModel ISuggestionModel<T>
 Individual suggestion object containing its properties.
-  theme ITheme
 Theme provided by High-Order Component.
-  className string
 The CSS className of the suggestions root.
-  componentRef IRefObject<ISuggestions<T>>
 Optional callback to access the ISuggestions interface. Use this instead of ref for accessing the public methods and properties of the component.
-  createGenericItem () => void
 The callback that should be called when the user attempts to use the input text as as item
-  forceResolveText string
 The text that appears indicating to the use to force resolve the input
-  isLoading boolean
 Used to indicate whether or not the suggestions are loading.
-  isMostRecentlyUsedVisible boolean
 Indicates if a short list of recent suggestions should be shown.
-  isResultsFooterVisible boolean
 Indicates if the text in resultsFooter or resultsFooterFull should be shown at the end of the suggestion list.
-  isSearching boolean
 Used to indicate whether or not the component is searching for more results.
-  loadingText string
 The text to display while the results are loading.
-  moreSuggestionsAvailable boolean
 Used to indicate whether or not the user can request more suggestions. Dictates whether or not the searchForMore button is displayed.
-  mostRecentlyUsedHeaderText string
 The text that should appear at the top of the most recently used box.
-  noResultsFoundText string
 The text that should appear if no results are found when searching.
-  onGetMoreResults () => void
 The callback that should be called when the user attempts to get more results
-  onRenderNoResultFound IRenderFunction<void>
 How the "no result found" should look in the suggestion list.
-  onRenderSuggestion (props: T, suggestionItemProps: ISuggestionItemProps<T>) => JSX.Element
 How the suggestion should look in the suggestion list.
-  onSuggestionClick (ev?: React.MouseEvent<HTMLElement>, item?: any, index?: number) => void
 What should occur when a suggestion is clicked
-  onSuggestionRemove (ev?: React.MouseEvent<HTMLElement>, item?: T | IPersonaProps, index?: number) => void
 Function to fire when one of the optional remove buttons on a suggestion is clicked.
TODO (adjective-object) remove IPersonaprops before the next major version bump
-  refocusSuggestions (keyCode: KeyCodes) => void
 A function that resets focus to the expected item in the suggestion list
-  removeSuggestionAriaLabel string
 An ARIA label to use for the buttons to remove individual suggestions.
-  resultsFooter (props: ISuggestionsProps<T>) => JSX.Element
 A renderer that adds an element at the end of the suggestions list it has fewer items than resultsMaximumNumber.
-  resultsFooterFull (props: ISuggestionsProps<T>) => JSX.Element
 A renderer that adds an element at the end of the suggestions list it has more items than resultsMaximumNumber.
-  resultsMaximumNumber number
 Maximum number of suggestions to show in the full suggestion list.
-  searchErrorText string
 The text that should appear if there is a search error.
-  searchForMoreText string
 The text that appears indicating to the user that they can search for more results.
-  searchingText string
 The text to display while searching for more results in a limited suggestions list.
-  showForceResolve () => boolean
 The callback that should be called to see if the force resolve command should be shown
-  showRemoveButtons boolean
 Indicates whether to show a button with each suggestion to remove that suggestion.
-  styles IStyleFunctionOrObject<any, any>
 Call to provide customized styling that will layer on top of the variant rules.
-  suggestions ISuggestionModel<T>[]
 The list of Suggestions that will be displayed
-  suggestionsAvailableAlertText string
 Screen reader message to read when there are suggestions available.
-  suggestionsClassName string
 The CSS className of the suggestions list
-  suggestionsContainerAriaLabel string
 An ARIA label for the container that is the parent of the suggestions.
-  suggestionsHeaderText string
 The text that appears at the top of the suggestions list.
-  suggestionsItemClassName string
 The className of the suggestion item.
-  suggestionsListId string
 The string that will be used as the suggestionsListId. Will be used by the BasePicker to keep track of the list for aria.
-  theme ITheme
 Theme provided by High-Order Component.
Value
Object with shiny.tag class suitable for use in the UI of a Shiny app.
Best practices
Layout
- Use a picker to quickly search for a few tags or files. 
- Use a picker to manage a group of tags or files. 
Examples
library(shiny)
library(shiny.fluent)
makeScript <- function(js) {
  htmltools::htmlDependency(
    name = "TagPickerExample",
    version = "0", # Not used.
    src = c(href = ""), # Not used.
    head = paste0("<script>", js, "</script>")
  )
}
ui <- function(id) {
  ns <- NS(id)
  tagList(
    makeScript("
      testTags = [
        'black',
        'blue',
        'brown',
        'cyan',
        'green',
        'magenta',
        'mauve',
        'orange',
        'pink',
        'purple',
        'red',
        'rose',
        'violet',
        'white',
        'yellow',
      ].map(item => ({ key: item, name: item }));
      function listContainsTagList(tag, tagList) {
        if (!tagList || !tagList.length || tagList.length === 0) {
          return false;
        }
        return tagList.some(compareTag => compareTag.key === tag.key);
      };
      function filterSuggestedTags(filterText, tagList) {
        return filterText
          ? testTags.filter(
              tag => tag.name.toLowerCase().indexOf(filterText.toLowerCase()) === 0 &&
               !listContainsTagList(tag, tagList),
            )
          : [];
      };
    "),
    textOutput(ns("selectedTags")),
    TagPicker(
      onResolveSuggestions = JS("filterSuggestedTags"),
      onEmptyInputFocus = JS(
        "function(tagList) { return testTags.filter(tag => !listContainsTagList(tag, tagList)); }"
      ),
      getTextFromItem = JS("function(item) { return item.text }"),
      pickerSuggestionsProps = list(
        suggestionsHeaderText = 'Suggested tags',
        noResultsFoundText = 'No color tags found'
      ),
      itemLimit = 2,
      onChange = JS(paste0(
        "function(selection) {",
        "  Shiny.setInputValue('", ns("selectedTags") ,"', JSON.stringify(selection));",
        "}"
      ))
    )
  )
}
server <- function(id) {
  moduleServer(id, function(input, output, session) {
    output$selectedTags <- renderText({
      if (is.null(input$selectedTags)) {
        "Select up to 2 colors below:"
      } else {
        paste(
          "You have selected:",
          paste(jsonlite::fromJSON(input$selectedTags)$name, collapse = ", ")
        )
      }
    })
  })
}
if (interactive()) {
  shinyApp(ui("app"), function(input, output) server("app"))
}
Breadcrumb
Description
Breadcrumbs should be used as a navigational aid in your app or site. They indicate the current page’s location within a hierarchy and help the user understand where they are in relation to the rest of that hierarchy. They also afford one-click access to higher levels of that hierarchy.
Breadcrumbs are typically placed, in horizontal form, under the masthead or navigation of an experience, above the primary content area.
For more details and examples visit the official docs. The R package cannot handle each and every case, so for advanced use cases you need to work using the original docs to achieve the desired result.
Usage
Breadcrumb(...)
Arguments
| ... | Props to pass to the component. The allowed props are listed below in the Details section. | 
Details
-  ariaLabel string
 Aria label for the root element of the breadcrumb (which is a navigation landmark).
-  className string
 Optional class for the root breadcrumb element.
-  componentRef IRefObject<IBreadcrumb>
 Optional callback to access the IBreadcrumb interface. Use this instead of ref for accessing the public methods and properties of the component.
-  dividerAs IComponentAs<IDividerAsProps>
 Render a custom divider in place of the default chevron>
-  focusZoneProps IFocusZoneProps
 Extra props for the root FocusZone.
-  items IBreadcrumbItem[]
 Collection of breadcrumbs to render
-  maxDisplayedItems number
 The maximum number of breadcrumbs to display before coalescing. If not specified, all breadcrumbs will be rendered.
-  onGrowData (data: IBreadcrumbData) => IBreadcrumbData | undefined
 Method that determines how to group the length of the breadcrumb. Return undefined to never increase breadcrumb length.
-  onReduceData (data: IBreadcrumbData) => IBreadcrumbData | undefined
 Method that determines how to reduce the length of the breadcrumb. Return undefined to never reduce breadcrumb length.
-  onRenderItem IRenderFunction<IBreadcrumbItem>
 Custom render function for each breadcrumb item.
-  onRenderOverflowIcon IRenderFunction<IButtonProps>
 Render a custom overflow icon in place of the default icon...
-  overflowAriaLabel string
 Aria label for the overflow button.
-  overflowIndex number
 Optional index where overflow items will be collapsed. Defaults to 0.
-  styles IStyleFunctionOrObject<IBreadcrumbStyleProps, IBreadcrumbStyles>
 
-  theme ITheme
 
-  tooltipHostProps ITooltipHostProps
 Extra props for the TooltipHost which wraps each breadcrumb item.
-  item IBreadcrumbItem
 Breadcrumb item to left of the divider to be passed for custom rendering. For overflowed items, it will be last item in the list.
Value
Object with shiny.tag class suitable for use in the UI of a Shiny app.
Examples
library(shiny)
library(shiny.fluent)
items <- list(
  list(text = "Files", key = "Files", href = "#/page"),
  list(text = "Folder 1", key = "f1", href = "#/page"),
  list(text = "Folder 2", key = "f2", href = "#/page"),
  list(text = "Folder 3", key = "f3", href = "#/page"),
  list(text = "Folder 4 (non-clickable)", key = "f4"),
  list(text = "Folder 5", key = "f5", href = "#/page", isCurrentItem = TRUE)
)
ui <- function(id) {
  Breadcrumb(
    items = items,
    maxDisplayedItems = 3,
    ariaLabel = "Breadcrumb with items rendered as links",
    overflowAriaLabel = "More links"
  )
}
server <- function(id) {
  moduleServer(id, function(input, output, session) { })
}
if (interactive()) {
  shinyApp(ui("app"), function(input, output) server("app"))
}
Calendar
Description
The calendar control lets people select and view a single date or a range of dates in their calendar. It’s made up of 3 separate views: the month view, year view, and decade view.
For more details and examples visit the official docs. The R package cannot handle each and every case, so for advanced use cases you need to work using the original docs to achieve the desired result.
Usage
Calendar(...)
Calendar.shinyInput(inputId, ..., value = shiny.react::JS("new Date()"))
updateCalendar.shinyInput(
  session = shiny::getDefaultReactiveDomain(),
  inputId,
  ...
)
Arguments
| ... | Props to pass to the component. The allowed props are listed below in the Details section. | 
| inputId | ID of the component. | 
| value | Starting value. | 
| session | Object passed as the  | 
Details
-  allFocusable boolean
 Allows all dates and buttons to be focused, including disabled ones
-  autoNavigateOnSelection boolean
 Whether the month view should automatically navigate to the next or previous date range depending on the selected date. If this property is set to true and the currently displayed month is March 2017, if the user clicks on a day outside the month, i.e., April 1st, the picker will automatically navigate to the month of April.
-  className string
 Optional class name to add to the root element.
-  componentRef IRefObject<ICalendar>
 Optional callback to access the ICalendar interface. Use this instead of ref for accessing the public methods and properties of the component.
-  dateRangeType DateRangeType
 The date range type indicating how many days should be selected as the user selects days
-  dateTimeFormatter ICalendarFormatDateCallbacks
 Apply additional formating to dates, for example localized date formatting.
-  firstDayOfWeek DayOfWeek
 The first day of the week for your locale.
-  firstWeekOfYear FirstWeekOfYear
 Defines when the first week of the year should start, FirstWeekOfYear.FirstDay, FirstWeekOfYear.FirstFullWeek or FirstWeekOfYear.FirstFourDayWeek are the possible values
-  highlightCurrentMonth boolean
 Whether the month picker should highlight the current month
-  highlightSelectedMonth boolean
 Whether the month picker should highlight the selected month
-  isDayPickerVisible boolean
 Whether the day picker is shown beside the month picker or hidden.
-  isMonthPickerVisible boolean
 Whether the month picker is shown beside the day picker or hidden.
-  maxDate Date
 If set the Calendar will not allow navigation to or selection of a date later than this value.
-  minDate Date
 If set the Calendar will not allow navigation to or selection of a date earlier than this value.
-  navigationIcons ICalendarIconStrings
 Customize navigation icons using ICalendarIconStrings
-  onDismiss () => void
 Callback issued when calendar is closed
-  onSelectDate (date: Date, selectedDateRangeArray?: Date[]) => void
 Callback issued when a date is selected
-  restrictedDates Date[]
 If set the Calendar will not allow selection of dates in this array.
-  selectDateOnClick boolean
 When clicking on "Today", select the date and close the calendar.
-  shouldFocusOnMount boolean
 This property has been removed at 0.80.0 in place of thefocusmethod, to be removed \@ 1.0.0.
-  showCloseButton boolean
 Whether the close button should be shown or not
-  showGoToToday boolean
 Whether the "Go to today" link should be shown or not
-  showMonthPickerAsOverlay boolean
 Show month picker on top of date picker when visible.
-  showSixWeeksByDefault boolean
 Whether the calendar should show 6 weeks by default.
-  showWeekNumbers boolean
 Whether the calendar should show the week number (weeks 1 to 53) before each week row
-  strings ICalendarStrings | null
 Localized strings to use in the Calendar
-  today Date
 Value of today. If null, current time in client machine will be used.
-  value Date
 Default value of the Calendar, if any
-  workWeekDays DayOfWeek[]
 The days that are selectable when dateRangeType is WorkWeek. If dateRangeType is not WorkWeek this property does nothing.
-  yearPickerHidden boolean
 Whether the year picker is enabled
Value
Object with shiny.tag class suitable for use in the UI of a Shiny app.
The update functions return nothing (called for side effects).
Best practices
Layout
- Don’t break the control apart. 
- Include an up and down arrow for navigating between time ranges and a chevron to make the calendar collapsible. 
Content
- Use the following format for dates: month, day, year, as in July 31, 2016. When space is limited, use numbers and slashes for dates if the code supports that format and automatically displays the appropriate date format for different locales. For example, 2/16/19. 
- Don't use ordinal numbers (such as 1st, 12th, or 23rd) to indicate a date. 
Examples
library(shiny)
library(shiny.fluent)
ui <- function(id) {
  ns <- NS(id)
  div(
    Calendar.shinyInput(ns("calendar"), value = "2020-06-25T22:00:00.000Z"),
    textOutput(ns("calendarValue")),
    h3("If `value` is missing, default to system date"),
    Calendar.shinyInput(ns("calendar2")),
    textOutput(ns("calendarDefault")),
    h3("If `value` is NULL, also default to system date"),
    Calendar.shinyInput(ns("calendar3"), value = NULL),
    textOutput(ns("calendarNull"))
  )
}
server <- function(id) {
  moduleServer(id, function(input, output, session) {
    output$calendarValue <- renderText({
      sprintf("Value: %s", input$calendar)
    })
    output$calendarDefault <- renderText({
      sprintf("Value: %s", input$calendar2)
    })
    output$calendarNull <- renderText({
      sprintf("Value: %s", input$calendar3)
    })
  })
}
if (interactive()) {
  shinyApp(ui("app"), function(input, output) server("app"))
}
Callout
Description
A callout is an anchored tip that can be used to teach people or guide them through the app without blocking them.
For more details and examples visit the official docs. The R package cannot handle each and every case, so for advanced use cases you need to work using the original docs to achieve the desired result.
Usage
Callout(...)
Arguments
| ... | Props to pass to the component. The allowed props are listed below in the Details section. | 
Details
-  alignTargetEdge boolean
 If true the positioning logic will prefer to flip edges rather than to nudge the rectangle to fit within bounds, thus making sure the element aligns perfectly with target's alignment edge
-  ariaDescribedBy string
 Defines the element id referencing the element containing the description for the callout.
-  ariaLabel string
 Accessible label text for callout.
-  ariaLabelledBy string
 Defines the element id referencing the element containing label text for callout.
-  backgroundColor string
 The background color of the Callout in hex format ie. #ffffff.
-  beakWidth number
 The width of the beak.
-  bounds IRectangle | ((target?: Target, targetWindow?: Window) => IRectangle | undefined)
 The bounding rectangle (or callback that returns a rectangle) for which the contextual menu can appear in.
-  calloutMaxHeight number
 Set max height of callout When not set the callout will expand with contents up to the bottom of the screen
-  calloutMaxWidth number
 Custom width for callout including borders. If value is 0, no width is applied.
-  calloutWidth number
 Custom width for callout including borders. If value is 0, no width is applied.
-  className string
 CSS class to apply to the callout.
-  coverTarget boolean
 If true the position returned will have the menu element cover the target. If false then it will position next to the target;
-  directionalHint DirectionalHint
 How the element should be positioned
-  directionalHintFixed boolean
 If true the position will not change sides in an attempt to fit the callout within bounds. It will still attempt to align it to whatever bounds are given.
-  directionalHintForRTL DirectionalHint
 How the element should be positioned in RTL layouts. If not specified, a mirror of thedirectionalHintalignment edge will be used instead. This means thatDirectionalHint.BottomLeftwill change toDirectionalHint.BottomRightbutDirectionalHint.LeftAutowill not change.
-  doNotLayer boolean
 If true do not render on a new layer. If false render on a new layer.
-  finalHeight number
 Specify the final height of the content. To be used when expanding the content dynamically so that callout can adjust its position.
-  gapSpace number
 The gap between the Callout and the target
-  hidden boolean
 If specified, renders the Callout in a hidden state. Use this flag, rather than rendering a callout conditionally based on visibility, to improve rendering performance when it becomes visible. Note: When callout is hidden its content will not be rendered. It will only render once the callout is visible.
-  hideOverflow boolean
 Manually set OverflowYHidden style prop to true on calloutMain element A variety of callout load animations will need this to hide the scollbar that can appear
-  isBeakVisible boolean
 If true then the beak is visible. If false it will not be shown.
-  layerProps ILayerProps
 Optional props to pass to the Layer component hosting the panel.
-  minPagePadding number
 The minimum distance the callout will be away from the edge of the screen.
-  onDismiss (ev?: any) => void
 Callback when the Callout tries to close.
-  onLayerMounted () => void
 Optional callback when the layer content has mounted.
-  onPositioned (positions?: ICalloutPositionedInfo) => void
 Optional callback that is called once the callout has been correctly positioned.
-  onRestoreFocus (options: { originalElement?: HTMLElement | Window; containsFocus: boolean; }) => void
 Called when the component is unmounting, and focus needs to be restored. Argument passed down contains two variables, the element that the underlying popup believes focus should go to * and whether or not the popup currently contains focus. If this is provided, focus will not be restored automatically, you'll need to call originalElement.focus()
-  onScroll () => void
 Callback when the Callout body is scrolled.
-  preventDismissOnLostFocus boolean
 If true then the callout will not dismiss when it loses focus
-  preventDismissOnResize boolean
 If true then the callout will not dismiss on resize
-  preventDismissOnScroll boolean
 If true then the callout will not dismiss on scroll
-  role string
 Aria role assigned to the callout (Eg. dialog, alertdialog).
-  setInitialFocus boolean
 If true then the callout will attempt to focus the first focusable element that it contains. If it doesn't find an element, no focus will be set and the method will return false. This means that it's the contents responsibility to either set focus or have focusable items.
-  shouldRestoreFocus boolean
 If true, when this component is unmounted, focus will be restored to the element that had focus when the component first mounted.
-  shouldUpdateWhenHidden boolean
 If true, the component will be updated even when hidden=true. Note that this would consume resources to update even though nothing is being shown to the user. This might be helpful though if your updates are small and you want the callout to be revealed fast to the user when hidden is set to false.
-  style React.CSSProperties
 CSS style to apply to the callout.
If you set overflowY in this object, it provides a performance optimization by preventing Popup (underlying component of Callout) from calculating whether it needs a scroll bar.
-  styles IStyleFunctionOrObject<ICalloutContentStyleProps, ICalloutContentStyles>
 Optional styles for the component.
-  target Target
 The target that the Callout should try to position itself based on. It can be either an Element a querySelector string of a valid Element or a MouseEvent. If MouseEvent is given then the origin point of the event will be used.
-  theme ITheme
 Optional theme for component
Value
Object with shiny.tag class suitable for use in the UI of a Shiny app.
Best practices
Layout
- Don’t use a callout to ask for action confirmation; use a dialog instead. 
- Place a callout near the object being described. At the pointer’s tail or head, if possible. 
- Don't use large, unformatted blocks of text in your callout. They're difficult to read and overwhelming. 
- Don’t block important UI with the placement of your callout. It's a poor user experience that will lead to frustration. 
- Don’t open a callout from within another callout. 
- Don’t show callouts on hidden elements. 
- Don’t overuse callouts. Too many callouts opening automatically can be perceived as interrupting someone's workflow. 
- For a particularly complex concept that needs explanation, place an info icon ( - iconClassNames.info) next to the concept to indicate there's more helpful information available. When someone hovers over or selects the icon, the callout should appear.
Content
- Because the content inside of a callout isn't always visible, don't put required information in a callout. 
- Short sentences or sentence fragments are best. 
- Don't use obvious tip text or text that simply repeats what is already on the screen. Limit the information inside of a callout to supplemental information. 
- When additional context or a more advanced description is necessary, consider placing a link to "Learn more" at the bottom of the callout. When clicked, open the additional content in a new window or panel. 
Examples
library(shiny)
library(shiny.fluent)
ui <- function(id) {
  ns <- NS(id)
  div(
    DefaultButton.shinyInput(ns("toggleCallout"), text = "Toggle Callout"),
    reactOutput(ns("callout"))
  )
}
server <- function(id) {
  moduleServer(id, function(input, output, session) {
    show <- reactiveVal(FALSE)
    observeEvent(input$toggleCallout, show(!show()))
    output$callout <- renderReact({
      if (show()) {
        Callout(
          tags$div(
            style = "margin: 10px",
            "Callout contents"
          )
        )
      }
    })
  })
}
if (interactive()) {
  shinyApp(ui("app"), function(input, output) server("app"))
}
Checkbox
Description
Check boxes (Checkbox) give people a way to select one or more items from a group, or switch between two mutually exclusive options (checked or unchecked, on or off).
For more details and examples visit the official docs. The R package cannot handle each and every case, so for advanced use cases you need to work using the original docs to achieve the desired result.
Usage
Checkbox(...)
Checkbox.shinyInput(inputId, ..., value = defaultValue)
updateCheckbox.shinyInput(
  session = shiny::getDefaultReactiveDomain(),
  inputId,
  ...
)
Arguments
| ... | Props to pass to the component. The allowed props are listed below in the Details section. | 
| inputId | ID of the component. | 
| value | Starting value. | 
| session | Object passed as the  | 
Details
-  ariaDescribedBy string
 ID for element that provides extended information for the checkbox.
-  ariaLabel string
 Accessible label for the checkbox.
-  ariaLabelledBy string
 ID for element that contains label information for the checkbox.
-  ariaPositionInSet number
 The position in the parent set (if in a set) for aria-posinset.
-  ariaSetSize number
 The total size of the parent set (if in a set) for aria-setsize.
-  boxSide 'start' | 'end'
 Allows you to set the checkbox to be at the before (start) or after (end) the label.
-  checked boolean
 Checked state. Mutually exclusive to "defaultChecked". Use this if you control the checked state at a higher level and plan to pass in the correct value based on handling onChange events and re-rendering.
-  checkmarkIconProps IIconProps
 Custom icon props for the check mark rendered by the checkbox
-  className string
 Additional class name to provide on the root element, in addition to the ms-Checkbox class.
-  componentRef IRefObject<ICheckbox>
 Optional callback to access the ICheckbox interface. Use this instead of ref for accessing the public methods and properties of the component.
-  defaultChecked boolean
 Default checked state. Mutually exclusive to "checked". Use this if you want an uncontrolled component, and want the Checkbox instance to maintain its own state.
-  defaultIndeterminate boolean
 Optional uncontrolled indeterminate visual state for checkbox. Setting indeterminate state takes visual precedence over checked or defaultChecked props given but does not affect checked state. This is not a toggleable state. On load the checkbox will receive indeterminate visual state and after the user's first click it will be removed exposing the true state of the checkbox.
-  disabled boolean
 Disabled state of the checkbox.
-  indeterminate boolean
 Optional controlled indeterminate visual state for checkbox. Setting indeterminate state takes visual precedence over checked or defaultChecked props given but does not affect checked state. This should not be a toggleable state. On load the checkbox will receive indeterminate visual state and after the first user click it should be removed by your supplied onChange callback function exposing the true state of the checkbox.
-  inputProps React.ButtonHTMLAttributes<HTMLElement | HTMLButtonElement>
 Optional input props that will be mixed into the input element, before other props are applied. This allows you to extend the input element with additional attributes, such as data-automation-id needed for automation. Note that if you provide, for example, "disabled" as well as "inputProps.disabled", the former will take precedence over the later.
-  keytipProps IKeytipProps
 Optional keytip for this checkbox
-  label string
 Label to display next to the checkbox.
-  onChange (ev?: React.FormEvent<HTMLElement | HTMLInputElement>, checked?: boolean) => void
 Callback that is called when the checked value has changed.
-  onRenderLabel IRenderFunction<ICheckboxProps>
 Custom render function for the label.
-  styles IStyleFunctionOrObject<ICheckboxStyleProps, ICheckboxStyles>
 Call to provide customized styling that will layer on top of the variant rules.
-  theme ITheme
 Theme provided by HOC.
Value
Object with shiny.tag class suitable for use in the UI of a Shiny app.
The update functions return nothing (called for side effects).
Best practices
Layout
- Use a single check box when there's only one selection to make or choice to confirm. Selecting a blank check box selects it. Selecting it again clears the check box. 
- Use multiple check boxes when one or more options can be selected from a group. Unlike radio buttons, selecting one check box will not clear another check box. 
Content
- Separate two groups of check boxes with headings rather than positioning them one after the other. 
- Use sentence-style capitalization—only capitalize the first word. For more info, see Capitalization in the Microsoft Writing Style Guide. 
- Don't use end punctuation (unless the check box label absolutely requires multiple sentences). 
- Use a sentence fragment for the label, rather than a full sentence. 
- Make it easy for people to understand what will happen if they select or clear a check box. 
Examples
library(shiny)
library(shiny.fluent)
ui <- function(id) {
  ns <- NS(id)
  div(
    Checkbox.shinyInput(ns("checkbox"), value = FALSE),
    textOutput(ns("checkboxValue"))
  )
}
server <- function(id) {
  moduleServer(id, function(input, output, session) {
    output$checkboxValue <- renderText({
      sprintf("Value: %s", input$checkbox)
    })
  })
}
if (interactive()) {
  shinyApp(ui("app"), function(input, output) server("app"))
}
ChoiceGroup
Description
Radio buttons (ChoiceGroup) let people select a single option from two or more choices.
For more details and examples visit the official docs. The R package cannot handle each and every case, so for advanced use cases you need to work using the original docs to achieve the desired result.
Usage
ChoiceGroup(...)
ChoiceGroup.shinyInput(inputId, ..., value = defaultValue)
updateChoiceGroup.shinyInput(
  session = shiny::getDefaultReactiveDomain(),
  inputId,
  ...
)
Arguments
| ... | Props to pass to the component. The allowed props are listed below in the Details section. | 
| inputId | ID of the component. | 
| value | Starting value. | 
| session | Object passed as the  | 
Details
-  componentRef IRefObject<IChoiceGroupOption>
 Optional callback to access the IChoiceGroup interface. Use this instead of ref for accessing the public methods and properties of the component.
-  focused boolean
 Indicates if the ChoiceGroupOption should appear focused, visually
-  name string
 This value is used to group each ChoiceGroupOption into the same logical ChoiceGroup
-  onBlur (ev: React.FocusEvent<HTMLElement>, props?: IChoiceGroupOption) => void
 A callback for receiving a notification when the choice has lost focus.
-  onChange (evt?: React.FormEvent<HTMLElement | HTMLInputElement>, props?: IChoiceGroupOption) => void
 A callback for receiving a notification when the choice has been changed.
-  onFocus (ev?: React.FocusEvent<HTMLElement | HTMLInputElement>, props?: IChoiceGroupOption) => void | undefined
 A callback for receiving a notification when the choice has received focus.
-  required boolean
 If true, it specifies that an option must be selected in the ChoiceGroup before submitting the form
-  theme ITheme
 Theme (provided through customization.)
-  ariaLabelledBy string
 ID of an element to use as the aria label for this ChoiceGroup.
-  componentRef IRefObject<IChoiceGroup>
 Optional callback to access the IChoiceGroup interface. Use this instead of ref for accessing the public methods and properties of the component.
-  defaultSelectedKey string | number
 The key of the option that will be initially checked.
-  label string
 Descriptive label for the choice group.
-  onChange (ev?: React.FormEvent<HTMLElement | HTMLInputElement>, option?: IChoiceGroupOption) => void
 A callback for receiving a notification when the choice has been changed.
-  onChanged (option: IChoiceGroupOption, evt?: React.FormEvent<HTMLElement | HTMLInputElement>) => void
 Deprecated and will be removed by 07/17/2017. UseonChangeinstead.
-  options IChoiceGroupOption[]
 The options for the choice group.
-  selectedKey string | number
 The key of the selected option. If you provide this, you must maintain selection state by observing onChange events and passing a new value in when changed.
-  styles IStyleFunctionOrObject<IChoiceGroupStyleProps, IChoiceGroupStyles>
 Call to provide customized styling that will layer on top of the variant rules.
-  theme ITheme
 Theme (provided through customization).
Value
Object with shiny.tag class suitable for use in the UI of a Shiny app.
The update functions return nothing (called for side effects).
Best practices
Layout
- Use radio buttons when there are two to seven options, you have enough screen space, and the options are important enough to be a good use of that screen space. 
- If there are more than seven options, use a drop-down menu instead. 
- To give people a way to select more than one option, use check boxes instead. 
- If a default option is recommended for most people in most situations, use a drop-down menu instead. 
- Align radio buttons vertically instead of horizontally, if possible. Horizontal alignment is harder to read and localize. If there are only two mutually exclusive options, combine them into a single check box or toggle. For example, use a check box for "I agree" statements instead of radio buttons for "I agree" and "I disagree". 
Content
- List the options in a logical order, such as most likely to be selected to least, simplest operation to most complex, or least risk to most. Listing options in alphabetical order isn't recommended because the order will change when the text is localized. 
- Select the safest (to prevent loss of data or system access), most secure, and most private option as the default. If safety and security aren't factors, select the most likely or convenient option. 
- Use a phrase for the label, rather than a full sentence. 
- Make sure to give people the option to not make a choice. For example, include a "None" option. 
Examples
library(shiny)
library(shiny.fluent)
options <- list(
  list(key = "A", text = "Option A"),
  list(key = "B", text = "Option B"),
  list(key = "C", text = "Option C")
)
ui <- function(id) {
  ns <- NS(id)
  div(
    ChoiceGroup.shinyInput(ns("choice"), value = "B", options = options),
    textOutput(ns("groupValue"))
  )
}
server <- function(id) {
  moduleServer(id, function(input, output, session) {
    output$groupValue <- renderText({
      sprintf("Value: %s", input$choice)
    })
  })
}
if (interactive()) {
  shinyApp(ui("app"), function(input, output) server("app"))
}
Coachmark
Description
Coach marks (Coachmark) are used to draw a person’s attention to parts of the UI and increase engagement with those elements. A teaching bubble appears on hover or selection of the coach mark.
For more details and examples visit the official docs. The R package cannot handle each and every case, so for advanced use cases you need to work using the original docs to achieve the desired result.
Usage
Coachmark(...)
Arguments
| ... | Props to pass to the component. The allowed props are listed below in the Details section. | 
Details
-  ariaAlertText string
 Text to announce to screen reader / narrator when Coachmark is displayed
-  ariaDescribedBy string
 Defines the element id referencing the element containing the description for the Coachmark.
-  ariaDescribedByText string
 Defines the text content for the ariaDescribedBy element
-  ariaLabelledBy string
 Defines the element id referencing the element containing label text for Coachmark.
-  ariaLabelledByText string
 Defines the text content for the ariaLabelledBy element
-  beaconColorOne string
 Beacon color one.
-  beaconColorTwo string
 Beacon color two.
-  beakHeight number
 The height of the Beak component.
-  beakWidth number
 The width of the Beak component.
-  className string
 If provided, additional class name to provide on the root element.
-  collapsed boolean
 The starting collapsed state for the Coachmark. UseisCollapsedinstead.
-  color string
 Color of the Coachmark/TeachingBubble.
-  componentRef IRefObject<ICoachmark>
 Optional callback to access the ICoachmark interface. Use this instead of ref for accessing the public methods and properties of the component.
-  delayBeforeCoachmarkAnimation number
 Delay in milliseconds before Coachmark animation appears.
-  delayBeforeMouseOpen number
 Delay before allowing mouse movements to open the Coachmark.
-  height number
 The height of the Coachmark.
-  isCollapsed boolean
 The starting collapsed state for the Coachmark.
-  isPositionForced boolean
 Whether or not to force the Coachmark/TeachingBubble content to fit within the window bounds.
-  mouseProximityOffset number
 The distance in pixels the mouse is located before opening up the Coachmark.
-  onAnimationOpenEnd () => void
 Callback when the opening animation completes.
-  onAnimationOpenStart () => void
 Callback when the opening animation begins.
-  onDismiss (ev?: any) => void
 Callback when the Coachmark tries to close.
-  onMouseMove (e: MouseEvent) => void
 Callback to run when the mouse moves.
-  persistentBeak boolean
 If true then the Coachmark beak (arrow pointing towards target) will always be visible as long as Coachmark is visible
-  positioningContainerProps IPositioningContainerProps
 Props to pass to the PositioningContainer component. Specify thedirectionalHintto indicate on which edge the Coachmark/TeachingBubble should be positioned.
-  preventDismissOnLostFocus boolean
 If true then the Coachmark will not dismiss when it loses focus
-  preventFocusOnMount boolean
 If true then focus will not be set to the Coachmark when it mounts. Useful in cases where focus on coachmark is causing other components in page to dismiss upon losing focus.
-  styles IStyleFunctionOrObject<ICoachmarkStyleProps, ICoachmarkStyles>
 Call to provide customized styling that will layer on top of the variant rules
-  target HTMLElement | string | null
 The target that the Coachmark should try to position itself based on.
-  teachingBubbleRef ITeachingBubble
 Ref for TeachingBubble
-  theme ITheme
 Theme provided by higher order component.
-  width number
 The width of the Coachmark.
-  ariaDescribedBy string
 Defines the element id referencing the element containing the description for the positioningContainer.
-  ariaLabel string
 Accessible label text for positioningContainer.
-  ariaLabelledBy string
 Defines the element id referencing the element containing label text for positioningContainer.
-  backgroundColor string
 The background color of the positioningContainer in hex format ie. #ffffff.
-  bounds IRectangle
 The bounding rectangle for which the contextual menu can appear in.
-  className string
 CSS class to apply to the positioningContainer.
-  componentRef IRefObject<IPositioningContainer>
 All props for your component are to be defined here.
-  coverTarget boolean
 If true the position returned will have the menu element cover the target. If false then it will position next to the target;
-  directionalHint DirectionalHint
 How the element should be positioned
-  directionalHintFixed boolean
 If true the position will not change sides in an attempt to fit the positioningContainer within bounds. It will still attempt to align it to whatever bounds are given.
-  directionalHintForRTL DirectionalHint
 How the element should be positioned in RTL layouts. If not specified, a mirror ofdirectionalHintwill be used instead
-  doNotLayer boolean
 If true do not render on a new layer. If false render on a new layer.
-  finalHeight number
 Specify the final height of the content. To be used when expanding the content dynamically so that positioningContainer can adjust its position.
-  minPagePadding number
 The minimum distance the positioningContainer will be away from the edge of the screen.
-  offsetFromTarget number
 The gap between the positioningContainer and the target
-  onDismiss (ev?: any) => void
 Callback when the positioningContainer tries to close.
-  onLayerMounted () => void
 Optional callback when the layer content has mounted.
-  onPositioned (positions?: IPositionedData) => void
 Optional callback that is called once the positioningContainer has been correctly positioned.
-  positioningContainerMaxHeight number
 Set max height of positioningContainer When not set the positioningContainer will expand with contents up to the bottom of the screen
-  positioningContainerWidth number
 Custom width for positioningContainer including borders. If value is 0, no width is applied.
-  preventDismissOnScroll boolean
 If true then the onClose will not not dismiss on scroll
-  role string
 Aria role assigned to the positioningContainer (Eg. dialog, alertdialog).
-  setInitialFocus boolean
 If true then the positioningContainer will attempt to focus the first focusable element that it contains. If it doesn't find an element, no focus will be set and the method will return false. This means that it's the contents responsibility to either set focus or have focusable items.
-  target HTMLElement | string | MouseEvent | Point | null
 The target that the positioningContainer should try to position itself based on. It can be either an HTMLElement a querySelector string of a valid HTMLElement or a MouseEvent. If MouseEvent is given then the origin point of the event will be used.
-  targetPoint Point
 Point used to position the positioningContainer. Deprecated, usetargetinstead.
-  useTargetPoint boolean
 If true use a point rather than rectangle to position the positioningContainer. For example it can be used to position based on a click.
Value
Object with shiny.tag class suitable for use in the UI of a Shiny app.
Best practices
Layout
- Only one coach mark and teaching bubble combo should be displayed at a time. 
- Coach marks can be standalone or sequential. Sequential coach marks should be used sparingly to walk through complex multistep interactions. It’s recommended that a sequence of coach marks doesn’t exceed three steps. 
- Coach marks are designed to only hold teaching bubbles. 
- Coach mark size, color, and animation shouldn’t be altered. 
Examples
library(shiny)
library(shiny.fluent)
ui <- function(id) {
  ns <- NS(id)
  tagList(
    uiOutput(ns("coachmark")),
    DefaultButton.shinyInput(ns("toggleCoachmark"),
      id = "target", text = "Toggle coachmark"
    )
  )
}
server <- function(id) {
  moduleServer(id, function(input, output, session) {
    ns <- session$ns
    coachmarkVisible <- reactiveVal(FALSE)
    observeEvent(input$toggleCoachmark, coachmarkVisible(!coachmarkVisible()))
    observeEvent(input$hideCoachmark, coachmarkVisible(FALSE))
    output$coachmark <- renderUI({
      if (coachmarkVisible()) Coachmark(
        target = "#target",
        TeachingBubbleContent(
          hasCloseButton = TRUE,
          onDismiss = triggerEvent(ns("hideCoachmark")),
          headline = "Example title",
          primaryButtonProps = list(text = "Try it"),
          secondaryButtonProps = list(text = "Try it again"),
          "Welcome to the land of coachmarks!"
        )
      )
    })
  })
}
if (interactive()) {
  shinyApp(ui("app"), function(input, output) server("app"))
}
ColorPicker
Description
The color picker (ColorPicker) is used to browse through and select colors. By default, it lets people navigate through colors on a color spectrum; or specify a color in either Red-Green-Blue (RGB); or alpha color code; or Hexadecimal textboxes.
For more details and examples visit the official docs. The R package cannot handle each and every case, so for advanced use cases you need to work using the original docs to achieve the desired result.
Usage
ColorPicker(...)
ColorPicker.shinyInput(inputId, ..., value = defaultValue)
updateColorPicker.shinyInput(
  session = shiny::getDefaultReactiveDomain(),
  inputId,
  ...
)
Arguments
| ... | Props to pass to the component. The allowed props are listed below in the Details section. | 
| inputId | ID of the component. | 
| value | Starting value. | 
| session | Object passed as the  | 
Details
-  alphaLabel string
 Label for the alpha textfield.
-  alphaSliderHidden boolean
 Whether to hide the alpha (or transparency) slider and text field.
-  alphaType 'alpha' | 'transparency' | 'none'
 alpha(the default) means display a slider and text field for editing alpha values.transparencyalso displays a slider and text field but for editing transparency values.nonehides these controls.
Alpha represents the opacity of the color, whereas transparency represents the transparentness of the color: i.e. a 30% transparent color has 70% opaqueness.
-  blueLabel string
 Label for the blue text field.
-  className string
 Additional CSS class(es) to apply to the ColorPicker.
-  color IColor | string
 Object or CSS-compatible string to describe the color.
-  componentRef IRefObject<IColorPicker>
 Gets the component ref.
-  greenLabel string
 Label for the green text field.
-  hexLabel string
 Label for the hex text field.
-  onChange (ev: React.SyntheticEvent<HTMLElement>, color: IColor) => void
 Callback for when the user changes the color. (Not called when the color is changed via props.)
-  redLabel string
 Label for the red text field.
-  showPreview boolean
 Whether to show color preview box.
-  strings IColorPickerStrings
 Labels for elements within the ColorPicker. Defaults are provided in English only.
-  styles IStyleFunctionOrObject<IColorPickerStyleProps, IColorPickerStyles>
 Call to provide customized styling that will layer on top of the variant rules.
-  theme ITheme
 Theme (provided through customization).
-  ariaDescription string
 Detailed description for how to use the color rectangle. Moving the thumb horizontally adjusts saturation and moving it vertically adjusts value (essentially, brightness).
-  ariaLabel string
 Label of the ColorRectangle for the benefit of screen reader users.
-  ariaValueFormat string
 Format string for the color rectangle's current value as read by screen readers. The string must include descriptions and two placeholders for the current values:{0}for saturation and{1}for value/brightness.
-  className string
 Additional CSS class(es) to apply to the ColorRectangle.
-  color IColor
 Current color of the rectangle.
-  componentRef IRefObject<IColorRectangle>
 Gets the component ref.
-  minSize number
 Minimum width and height.
-  onChange (ev: React.MouseEvent | React.KeyboardEvent, color: IColor) => void
 Callback for when the color changes.
-  styles IStyleFunctionOrObject<IColorRectangleStyleProps, IColorRectangleStyles>
 Call to provide customized styling that will layer on top of the variant rules.
-  theme ITheme
 Theme (provided through customization).
-  ariaLabel string
 Label of the ColorSlider for the benefit of screen reader users.
-  className string
 Additional CSS class(es) to apply to the ColorSlider.
-  componentRef IRefObject<IColorSlider>
 Gets the component ref.
-  isAlpha boolean
 If true, the slider represents an alpha slider and will display a gray checkered pattern in the background. Otherwise, the slider represents a hue slider.
-  maxValue number
 Maximum value of the slider.
-  minValue number
 Minimum value of the slider.
-  onChange (event: React.MouseEvent | React.KeyboardEvent, newValue?: number) => void
 Callback issued when the value changes.
-  overlayColor string
 Hex color to use when rendering an alpha or transparency slider's overlay, without the#.
-  overlayStyle React.CSSProperties
 Custom style for the overlay element.
-  styles IStyleFunctionOrObject<IColorSliderStyleProps, IColorSliderStyles>
 Call to provide customized styling that will layer on top of the variant rules.
-  theme ITheme
 Theme (provided through customization).
-  thumbColor string
 CSS-compatible string for the color of the thumb element.
-  type 'hue' | 'alpha' | 'transparency'
 Type of slider to display.
-  value number
 Current value of the slider.
Value
Object with shiny.tag class suitable for use in the UI of a Shiny app.
The update functions return nothing (called for side effects).
Examples
library(shiny)
library(shiny.fluent)
ui <- function(id) {
  ns <- NS(id)
  div(
    ColorPicker.shinyInput(ns("color"), value = "#00FF01"),
    textOutput(ns("colorValue"))
  )
}
server <- function(id) {
  moduleServer(id, function(input, output, session) {
    output$colorValue <- renderText({
      sprintf("Value: %s", input$color)
    })
  })
}
if (interactive()) {
  shinyApp(ui("app"), function(input, output) server("app"))
}
ComboBox
Description
A combo box (ComboBox) combines a text field and a drop-down menu, giving people a way to select an option from a list or enter their own choice.
For more details and examples visit the official docs. The R package cannot handle each and every case, so for advanced use cases you need to work using the original docs to achieve the desired result.
Usage
ComboBox(...)
VirtualizedComboBox(...)
ComboBox.shinyInput(inputId, ..., value = defaultValue)
updateComboBox.shinyInput(
  session = shiny::getDefaultReactiveDomain(),
  inputId,
  ...
)
Arguments
| ... | Props to pass to the component. The allowed props are listed below in the Details section. | 
| inputId | ID of the component. | 
| value | Starting value. | 
| session | Object passed as the  | 
Details
-  allowFreeform boolean
 Whether the ComboBox is free form, meaning that the user input is not bound to provided options. Defaults to false.
-  ariaDescribedBy string
 Optional prop to add a string id that can be referenced inside the aria-describedby attribute
-  autoComplete 'on' | 'off'
 Whether the ComboBox auto completes. As the user is inputing text, it will be suggested potential matches from the list of options. If the combo box is expanded, this will also scroll to the suggested option, and give it a selected style.
-  autofill IAutofillProps
 The AutofillProps to be passed into the Autofill component inside combobox
-  buttonIconProps IIconProps
 The IconProps to use for the button aspect of the combobox
-  caretDownButtonStyles Partial<IButtonStyles>
 Styles for the caret down button.
-  comboBoxOptionStyles Partial<IComboBoxOptionStyles>
 Default styles that should be applied to ComboBox options, in case an option does not come with user-defined custom styles
-  componentRef IRefObject<IComboBox>
 Optional callback to access the IComboBox interface. Use this instead of ref for accessing the public methods and properties of the component.
-  dropdownMaxWidth number
 Custom max width for dropdown
-  dropdownWidth number
 Custom width for dropdown (unless useComboBoxAsMenuWidth is undefined or false)
-  getClassNames (theme: ITheme, isOpen: boolean, disabled: boolean, required: boolean, focused: boolean, allowFreeForm: boolean, hasErrorMessage: boolean, className?: string) => IComboBoxClassNames
 Custom function for providing the classNames for the ComboBox. Can be used to provide all styles for the component instead of applying them on top of the default styles.
-  iconButtonProps IButtonProps
 Optional iconButton props on combo box
-  isButtonAriaHidden boolean
 Sets the 'aria-hidden' attribute on the ComboBox's button element instructing screen readers how to handle the element. This element is hidden by default because all functionality is handled by the input element and the arrow button is only meant to be decorative.
-  keytipProps IKeytipProps
 Optional keytip for this combo box
-  multiSelectDelimiter string
 When multiple items are selected, this will be used to separate values in the combobox input.
-  onChange (event: React.FormEvent<IComboBox>, option?: IComboBoxOption, index?: number, value?: string) => void
 Callback issued when either: 1) the selected option changes 2) a manually edited value is submitted. In this case there may not be a matched option if allowFreeform is also true (and hence only value would be true, the other parameter would be null in this case)
-  onItemClick (event: React.FormEvent<IComboBox>, option?: IComboBoxOption, index?: number) => void
 Callback issued when a ComboBox item is clicked.
-  onMenuDismiss () => void
 Function that gets invoked before the menu gets dismissed
-  onMenuDismissed () => void
 Function that gets invoked when the ComboBox menu is dismissed
-  onMenuOpen () => void
 Function that gets invoked when the ComboBox menu is launched
-  onPendingValueChanged (option?: IComboBoxOption, index?: number, value?: string) => void
 Callback issued when the user changes the pending value in ComboBox. This will be called any time the component is updated and there is a current pending value. Option, index, and value will all be undefined if no change has taken place and the previously entered pending value is still valid.
-  onRenderLabel IRenderFunction<IOnRenderComboBoxLabelProps>
 Custom render function for the label text.
-  onRenderLowerContent IRenderFunction<IComboBoxProps>
 Add additional content below the callout list.
-  onRenderUpperContent IRenderFunction<IComboBoxProps>
 Add additional content above the callout list.
-  onResolveOptions (options: IComboBoxOption[]) => IComboBoxOption[] | PromiseLike<IComboBoxOption[]>
 Callback issued when the options should be resolved, if they have been updated or if they need to be passed in the first time
-  onScrollToItem (itemIndex: number) => void
 Callback issued when the ComboBox requests the list to scroll to a specific element
-  options IComboBoxOption[]
 Collection of options for this ComboBox
-  persistMenu boolean
 Menu will not be created or destroyed when opened or closed, instead it will be hidden. This will improve perf of the menu opening but could potentially impact overall perf by having more elements in the dom. Should only be used when perf is important. Note: This may increase the amount of time it takes for the comboBox itself to mount.
-  scrollSelectedToTop boolean
 When options are scrollable the selected option is positioned at the top of the callout when it is opened (unless it has reached the end of the scrollbar).
-  shouldRestoreFocus boolean
 When specified, determines whether the callout (the menu which drops down) should restore the focus after being dismissed or not. If false, then the menu will not try to set focus to whichever element had focus before the menu was opened.
-  styles Partial<IComboBoxStyles>
 Custom styles for this component
-  text string
 Value to show in the input, does not have to map to a combobox option
-  theme ITheme
 Theme provided by HOC.
-  useComboBoxAsMenuWidth boolean
 Whether to use the ComboBoxes width as the menu's width
-  multiselectAccessibleText string
 Accessible text for label when combobox is multiselected.
-  props IComboBoxProps
 Props to render the combobox.
Value
Object with shiny.tag class suitable for use in the UI of a Shiny app.
The update functions return nothing (called for side effects).
Best practices
Layout
- Use a combo box when there are multiple choices that can be collapsed under one title, when the list of items is long, or when space is constrained. 
Content
- Use single words or shortened statements as options. 
- Don't use punctuation at the end of options. 
Examples
library(shiny)
library(shiny.fluent)
options <- list(
  list(key = "A", text = "Option A"),
  list(key = "B", text = "Option B"),
  list(key = "C", text = "Option C")
)
ui <- function(id) {
  ns <- NS(id)
  div(
    ComboBox.shinyInput(ns("combo"), value = list(text = "some text"),
      options = options, allowFreeform = TRUE
    ),
    textOutput(ns("comboValue"))
  )
}
server <- function(id) {
  moduleServer(id, function(input, output, session) {
    output$comboValue <- renderText({
      sprintf("Value: %s", input$combo$text)
    })
  })
}
if (interactive()) {
  shinyApp(ui("app"), function(input, output) server("app"))
}
CommandBar
Description
CommandBar is a surface that houses commands that operate on the content of the window, panel, or parent region it resides above. CommandBars are one of the most visible and recognizable ways to surface commands, and can be an intuitive method for interacting with content on the page; however, if overloaded or poorly organized, they can be difficult to use and hide valuable commands from your user. CommandBars can also display a search box for finding content, hold simple commands as well as menus, or display the status of ongoing actions.
Commands should be sorted in order of importance, from left-to-right or right-to-left depending on the culture. Secondarily, organize commands in logical groupings for easier recall. CommandBars work best when they display no more than 5-7 commands. This helps users quickly find your most valuable features. If you need to show more commands, consider using the overflow menu. If you need to render status or viewing controls, these go on the right side of the CommandBar (or left side if in a left-to-right experience). Do not display more than 2-3 items on the right side as it will make the overall CommandBar difficult to parse.
All command items should have an icon and a label. Commands can render as labels only as well. In smaller widths, commands can just use icon only, but only for the most recognizable and frequently used commands. All other commands should go into an overflow where text labels can be shown.
For more details and examples visit the official docs. The R package cannot handle each and every case, so for advanced use cases you need to work using the original docs to achieve the desired result.
Usage
CommandBar(...)
CommandBar.shinyInput(inputId, ..., itemValueGetter = function(el) el$key)
Arguments
| ... | Props to pass to the component. The allowed props are listed below in the Details section. | 
| inputId | ID of the component. Value of the clicked CommandBarItem will be sent to this ID. | 
| itemValueGetter | A function that takes a CommandBarItem and returns a value to be sent to Shiny. By default it returns  | 
Details
-  buttonStyles IButtonStyles
 Custom styles for individual button
-  cacheKey string
 A custom cache key to be used for this item. IfcacheKeyis changed, the cache will invalidate. Defaults tokeyvalue.
-  commandBarButtonAs IComponentAs<ICommandBarItemProps>
 Method to override the render of the individual command bar button. Not used when item is rendered in overflow.
-  iconOnly boolean
 Show only an icon for this item, not text. Does not apply if item is in the overflow.
-  renderedInOverflow boolean
 Context under which the item is being rendered. This value is mutated by the CommandBar and is useful for adjusting theonRenderfunction.
-  tooltipHostProps ITooltipHostProps
 Props for the tooltip when iniconOnlymode.
-  ariaLabel string
 Accessibility text to be read by the screen reader when the user's focus enters the command bar. The screen reader will read this text after reading information about the first focusable item in the command bar.
-  buttonAs IComponentAs<IButtonProps>
 Custom component for the near and far item buttons. Not used for overflow menu items.
-  className string
 Additional css class to apply to the command bar
-  componentRef IRefObject<ICommandBar>
 Optional callback to access the ICommandBar interface. Use this instead of ref for accessing the public methods and properties of the component.
-  dataDidRender (renderedData: any) => void
 Function to be called every time data is rendered. It provides the data that was actually rendered. A use case would be adding telemetry when a particular control is shown in an overflow or dropped as a result ofonReduceData, or to count the number of renders that an implementation ofonReduceDatatriggers.
-  farItems ICommandBarItemProps[]
 Items to render on the right side (or left, in RTL). ICommandBarItemProps extends IContextualMenuItem.
-  items ICommandBarItemProps[]
 Items to render. ICommandBarItemProps extends IContextualMenuItem.
-  onDataGrown (movedItem: ICommandBarItemProps) => void
 Callback invoked when data has been grown.
-  onDataReduced (movedItem: ICommandBarItemProps) => void
 Callback invoked when data has been reduced.
-  onGrowData (data: ICommandBarData) => ICommandBarData | undefined
 Custom function to grow data if items are too small for the given space. Returnundefinedif no more steps can be taken to avoid infinate loop.
-  onReduceData (data: ICommandBarData) => ICommandBarData | undefined
 Custom function to reduce data if items do not fit in given space. Returnundefinedif no more steps can be taken to avoid infinate loop.
-  overflowButtonAs IComponentAs<IButtonProps>
 Custom component for the overflow button.
-  overflowButtonProps IButtonProps
 Props to be passed to overflow button. IfmenuPropsare passed through this prop, any items provided will be prepended to any computed overflow items.
-  overflowItems ICommandBarItemProps[]
 Default items to have in the overflow menu. ICommandBarItemProps extends IContextualMenuItem.
-  shiftOnReduce boolean
 When true, items will be 'shifted' off the front of the array when reduced, and unshifted during grow.
-  styles IStyleFunctionOrObject<ICommandBarStyleProps, ICommandBarStyles>
 Customized styling that will layer on top of the variant rules.
-  theme ITheme
 Theme provided by HOC.
Value
Object with shiny.tag class suitable for use in the UI of a Shiny app.
Examples
library(shiny)
library(shiny.fluent)
items <- function(ns) {
  list(
    CommandBarItem(
      key = ns("newItem"),
      text = "New",
      cacheKey = "myCacheKey",
      split = TRUE,
      iconProps = list(iconName = "Add"),
      subMenuProps = list(
        items = list(
          CommandBarItem(
            key = ns("emailMessage"),
            text = "Email message",
            iconProps = list(iconName = "Mail")
          ),
          CommandBarItem(
            key = ns("calendarEvent"),
            text = "Calendar event",
            iconProps = list(iconName = "Calendar")
          )
        )
      )
    ),
    CommandBarItem(
      key = ns("upload"),
      text = "Upload",
      iconProps = list(iconName = "Upload")
    ),
    CommandBarItem(
      key = ns("share"),
      text = "Share",
      iconProps = list(iconName = "Share")
    ),
    CommandBarItem(
      key = ns("download"),
      text = "Download",
      iconProps = list(iconName = "Download")
    )
  )
}
farItems <- function(ns) {
  list(
    CommandBarItem(
      key = ns("tile"),
      text = "Grid view",
      ariaLabel = "Grid view",
      iconOnly = TRUE,
      iconProps = list(iconName = "Tiles")
    ),
    CommandBarItem(
      key = ns("info"),
      text = "Info",
      ariaLabel = "Info",
      iconOnly = TRUE,
      iconProps = list(iconName = "Info")
    )
  )
}
ui <- function(id) {
  ns <- NS(id)
  tagList(
    CommandBar(
      items = items(ns),
      farItems = farItems(ns)
    ),
    textOutput(ns("commandBarItems")),
    CommandBar.shinyInput(
      inputId = ns("commandBar"),
      items = items(identity),
      farItems = farItems(identity)
    ),
    textOutput(ns("commandBar"))
  )
}
server <- function(id) {
  moduleServer(id, function(input, output, session) {
    commandBarItemClicked <- reactiveVal()
    observeEvent(input$newItem, commandBarItemClicked("newItem clicked (explicitly observed)"))
    observeEvent(input$upload, commandBarItemClicked("upload clicked (explicitly observed)"))
    output$commandBarItems <- renderText(commandBarItemClicked())
    output$commandBar <- renderText(input$commandBar)
  })
}
if (interactive()) {
  shinyApp(ui("app"), function(input, output) server("app"))
}
Command bar item
Description
Helper function for constructing items for CommandBar and CommandBar.shinyInput.
Usage
CommandBarItem(
  key,
  text,
  onClick = setInputValue(inputId = key, value = 0, event = TRUE),
  ...
)
Arguments
| key | Key of the item. | 
| text | Text to be displayed on the menu. | 
| onClick | A JS function that runs on item click. By default it sends input value to  | 
| ... | Additional props to pass to CommandBarItem. | 
Value
Item suitable for use in the CommandBar and CommandBar.shinyInput.
See Also
CommandBar
PeoplePicker
Description
The people picker (PeoplePicker) is used to select one or more entities, such as people or groups, from a list. It makes composing an email to someone, or adding them to a group, easy if you don’t know their full name or email address.
For more details and examples visit the official docs. The R package cannot handle each and every case, so for advanced use cases you need to work using the original docs to achieve the desired result.
Usage
CompactPeoplePicker(...)
NormalPeoplePicker(...)
NormalPeoplePicker.shinyInput(inputId, ..., value = defaultValue)
updateNormalPeoplePicker.shinyInput(
  session = shiny::getDefaultReactiveDomain(),
  inputId,
  ...
)
Arguments
| ... | Props to pass to the component. The allowed props are listed below in the Details section. | 
| inputId | ID of the component. | 
| value | Starting value. | 
| session | Object passed as the  | 
Details
-  styles IStyleFunctionOrObject<IPeoplePickerItemSelectedStyleProps, IPeoplePickerItemSelectedStyles>
 Call to provide customized styling that will layer on top of the variant rules.
-  ValidationState ValidationState
 
-  className string
 Additional CSS class(es) to apply to the PeoplePickerItem root element.
-  theme ITheme
 Theme provided by High-Order Component.
-  compact boolean
 Flag that controls whether each suggested PeoplePicker item (Persona) is rendered with or without secondary text for compact look.
-  personaProps IPersonaProps
 Persona props for each suggested for picking PeoplePicker item.
-  styles IStyleFunctionOrObject<IPeoplePickerItemSuggestionStyleProps, IPeoplePickerItemSuggestionStyles>
 Call to provide customized styling that will layer on top of the variant rules.
-  suggestionsProps IBasePickerSuggestionsProps
 General common props for all PeoplePicker items suggestions.
Value
Object with shiny.tag class suitable for use in the UI of a Shiny app.
The update functions return nothing (called for side effects).
Best practices
Layout
- Use the people picker to add someone to the To line of an email, or to add someone to a list. 
- Use the - MemberList PeoplePickerto display selections below the input field.
Examples
library(shiny)
library(shiny.fluent)
assetsUrl <- "https://static2.sharepointonline.com/files/fabric/office-ui-fabric-react-assets/"
malePersonaUrl <- paste0(assetsUrl, "persona-male.png")
femalePersonaUrl <- paste0(assetsUrl, "persona-female.png")
people <- tibble::tibble(
  key = c(1, 2, 3, 4, 5, 6, 7),
  imageUrl = c(
    femalePersonaUrl,
    malePersonaUrl,
    malePersonaUrl,
    malePersonaUrl,
    malePersonaUrl,
    femalePersonaUrl,
    malePersonaUrl
  ),
  imageInitials = c("PV", "AR", "AL", "RK", "CB", "VL", "MS"),
  text = c(
    "Annie Lindqvist",
    "Aaron Reid",
    "Alex Lundberg",
    "Roko Kolar",
    "Christian Bergqvist",
    "Valentina Lovric",
    "Maor Sharett"
  ),
  secondaryText = c(
    "Designer",
    "Designer",
    "Software Developer",
    "Financial Analyst",
    "Sr. Designer",
    "Design Developer",
    "UX Designer"
  ),
  tertiaryText = c(
    "In a meeting",
    "In a meeting",
    "In a meeting",
    "In a meeting",
    "In a meeting",
    "In a meeting",
    "In a meeting"
  ),
  optionalText = c(
    "Available at 4:00pm",
    "Available at 4:00pm",
    "Available at 4:00pm",
    "Available at 4:00pm",
    "Available at 4:00pm",
    "Available at 4:00pm",
    "Available at 4:00pm"
  ),
  isValid = c(TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE),
  presence = c(2, 6, 4, 1, 2, 2, 3),
  canExpand = c(NA, NA, NA, NA, NA, NA, NA)
)
ui <- function(id) {
  ns <- NS(id)
  tagList(
    textOutput(ns("selectedPeople")),
    NormalPeoplePicker.shinyInput(
      ns("selectedPeople"),
      options = people,
      pickerSuggestionsProps = list(
        suggestionsHeaderText = 'Matching people',
        mostRecentlyUsedHeaderText = 'Sales reps',
        noResultsFoundText = 'No results found',
        showRemoveButtons = TRUE
      )
    )
  )
}
server <- function(id) {
  moduleServer(id, function(input, output, session) {
    output$selectedPeople <- renderText({
      if (length(input$selectedPeople) == 0) {
        "Select recipients below:"
      } else {
        selectedPeople <- dplyr::filter(people, key %in% input$selectedPeople)
        paste("You have selected:", paste(selectedPeople$text, collapse=", "))
      }
    })
  })
}
if (interactive()) {
  shinyApp(ui("app"), function(input, output) server("app"))
}
ContextualMenu
Description
ContextualMenus are lists of commands that are based on the context of selection, mouse hover or keyboard focus. They are one of the most effective and highly used command surfaces, and can be used in a variety of places.
There are variants that originate from a command bar, or from cursor or focus. Those that come from CommandBars use a beak that is horizontally centered on the button. Ones that come from right click and menu button do not have a beak, but appear to the right and below the cursor. ContextualMenus can have submenus from commands, show selection checks, and icons.
Organize commands in groups divided by rules. This helps users remember command locations, or find less used commands based on proximity to others. One should also group sets of mutually exclusive or multiple selectable options. Use icons sparingly, for high value commands, and don’t mix icons with selection checks, as it makes parsing commands difficult. Avoid submenus of submenus as they can be difficult to invoke or remember.
For more details and examples visit the official docs. The R package cannot handle each and every case, so for advanced use cases you need to work using the original docs to achieve the desired result.
Usage
ContextualMenu(...)
Arguments
| ... | Props to pass to the component. The allowed props are listed below in the Details section. | 
Details
-  className string
 Additional css class to apply to the ContextualMenuItem
-  classNames IMenuItemClassNames
 Classnames for different aspects of a menu item
-  componentRef IRefObject<IContextualMenuRenderItem>
 Optional callback to access the IContextualMenuRenderItem interface. Use this instead of ref for accessing the public methods and properties of the component.
-  dismissMenu (ev?: any, dismissAll?: boolean) => void
 This prop will get set by ContextualMenu and can be called to close the menu this item belongs to. If dismissAll is true, all menus will be closed.
-  dismissSubMenu () => void
 This prop will get set by ContextualMenu and can be called to close this item's subMenu, if present.
-  getSubmenuTarget () => HTMLElement | undefined
 This prop will get set by the wrapping component and will return the element that wraps this ContextualMenuItem. Used for openSubMenu.
-  hasIcons boolean | undefined
 If this item has icons
-  index number
 Index of the item
-  item IContextualMenuItem
 The item to display
-  onCheckmarkClick (item: IContextualMenuItem, ev: React.MouseEvent<HTMLElement>) => void
 Click handler for the checkmark
-  openSubMenu (item: any, target: HTMLElement) => void
 This prop will get set by ContextualMenu and can be called to open this item's subMenu, if present.
-  styles IStyleFunctionOrObject<IContextualMenuItemStyleProps, IContextualMenuItemStyles>
 Call to provide customized styling that will layer on top of the variant rules.
-  theme ITheme
 Theme provided by High-Order Component.
-  focusableElementIndex number
 
-  hasCheckmarks boolean
 
-  hasIcons boolean
 
-  index number
 
-  totalItemCount number
 
-  defaultMenuItemRenderer (item: IContextualMenuItemRenderProps) => React.ReactNode
 
-  hasCheckmarks boolean
 
-  hasIcons boolean
 
-  items IContextualMenuItem[]
 
-  role string
 
-  totalItemCount number
 
-  alignTargetEdge boolean
 If true the positioning logic will prefer to flip edges rather than to nudge the rectangle to fit within bounds, thus making sure the element aligns perfectly with target's alignment edge
-  ariaLabel string
 Accessible label for the ContextualMenu's root element (inside the callout).
-  beakWidth number
 The width of the beak.
-  bounds IRectangle | ((target?: Target, targetWindow?: Window) => IRectangle | undefined)
 The bounding rectangle (or callback that returns a rectangle) which the contextual menu can appear in.
-  calloutProps ICalloutProps
 Additional custom props for the Callout.
-  className string
 Additional CSS class to apply to the ContextualMenu.
-  componentRef IRefObject<IContextualMenu>
 Optional callback to access the IContextualMenu interface. Use this instead of ref for accessing the public methods and properties of the component.
-  contextualMenuItemAs React.ComponentClass<IContextualMenuItemProps> | React.FunctionComponent<IContextualMenuItemProps>
 Custom component to use for rendering individual menu items.
-  coverTarget boolean
 If true, the menu will be positioned to cover the target. If false, it will be positioned next to the target.
-  delayUpdateFocusOnHover boolean
 If true, the contextual menu will not be updated until focus enters the menu via other means. This will only result in different behavior whenshouldFocusOnMount = false.
-  directionalHint DirectionalHint
 How the menu should be positioned
-  directionalHintFixed boolean
 If true the position will not change sides in an attempt to fit the ContextualMenu within bounds. It will still attempt to align it to whatever bounds are given.
-  directionalHintForRTL DirectionalHint
 How the menu should be positioned in RTL layouts. If not specified, a mirror ofdirectionalHintwill be used.
-  doNotLayer boolean
 If true do not render on a new layer. If false render on a new layer.
-  focusZoneProps IFocusZoneProps
 Props to pass down to the FocusZone. NOTE: the default FocusZoneDirection will be used unless a direction is specified in the focusZoneProps (even if other focusZoneProps are defined)
-  gapSpace number
 The gap between the ContextualMenu and the target
-  getMenuClassNames (theme: ITheme, className?: string) => IContextualMenuClassNames
 Method to provide the classnames to style the contextual menu.
-  hidden boolean
 If true, renders the ContextualMenu in a hidden state. Use this flag, rather than rendering a ContextualMenu conditionally based on visibility, to improve rendering performance when it becomes visible. Note: When ContextualMenu is hidden its content will not be rendered. It will only render once the ContextualMenu is visible.
-  id string
 ID for the ContextualMenu's root element (inside the callout). Should be used foraria-ownsand other such uses, rather than direct reference for programmatic purposes.
-  isBeakVisible boolean
 If true then the beak is visible. If false it will not be shown.
-  isSubMenu boolean
 Whether this menu is a submenu of another menu.
-  items IContextualMenuItem[]
 Menu items to display.
-  labelElementId string
 Used asaria-labelledbyfor the menu element inside the callout.
-  onDismiss (ev?: React.MouseEvent | React.KeyboardEvent, dismissAll?: boolean) => void
 Callback when the ContextualMenu tries to close. IfdismissAllis true then all submenus will be dismissed.
-  onItemClick (ev?: React.MouseEvent<HTMLElement> | React.KeyboardEvent<HTMLElement>, item?: IContextualMenuItem) => boolean | void
 Click handler which is invoked ifonClickis not passed for individual contextual menu item. Returning true will dismiss the menu even ifev.preventDefault()was called.
-  onMenuDismissed (contextualMenu?: IContextualMenuProps) => void
 Callback for when the menu is being closed (removing from the DOM).
-  onMenuOpened (contextualMenu?: IContextualMenuProps) => void
 Callback for when the menu has been opened.
-  onRenderMenuList IRenderFunction<IContextualMenuListProps>
 Method to override the render of the list of menu items.
-  onRenderSubMenu IRenderFunction<IContextualMenuProps>
 Custom render function for a submenu.
-  onRestoreFocus (options: { originalElement?: HTMLElement | Window; containsFocus: boolean; }) => void
 Called when the component is unmounting, and focus needs to be restored. Argument passed down contains two variables, the element that the underlying popup believes focus should go to and whether or not the popup currently contains focus. If this prop is provided, focus will not be restored automatically, you'll need to call originalElement.focus()
-  shouldFocusOnContainer boolean
 Whether to focus on the contextual menu container (as opposed to the first menu item).
-  shouldFocusOnMount boolean
 Whether to focus on the menu when mounted.
-  shouldUpdateWhenHidden boolean
 If true, the menu will be updated even whenhidden=true. Note that this will consume resources to update even when nothing is being shown to the user. This might be helpful if your updates are small and you want the menu to display quickly whenhiddenis set to false.
-  styles IStyleFunctionOrObject<IContextualMenuStyleProps, IContextualMenuStyles>
 Call to provide customized styling that will layer on top of the variant rules.
-  subMenuHoverDelay number
 Delay (in milliseconds) to wait before expanding / dismissing a submenu on mouseEnter or mouseLeave
-  target Target
 The target that the ContextualMenu should try to position itself based on. It can be either an element, a query selector string resolving to a valid element, or a MouseEvent. If a MouseEvent is given, the origin point of the event will be used.
-  theme ITheme
 Theme provided by higher-order component.
-  title string
 Title to be displayed at the top of the menu, above the items.
-  useTargetAsMinWidth boolean
 If true the context menu will have a minimum width equal to the width of the target element
-  useTargetWidth boolean
 If true the context menu will render as the same width as the target element
Value
Object with shiny.tag class suitable for use in the UI of a Shiny app.
Examples
library(shiny)
library(shiny.fluent)
ui <- function(id) {
  ns <- NS(id)
  div(
    DefaultButton.shinyInput(
      ns("toggleContextualMenu"),
      id = "target",
      text = "Toggle menu"
    ),
    reactOutput(ns("contextualMenu"))
  )
}
server <- function(id) {
  moduleServer(id, function(input, output, session) {
    ns <- session$ns
    showContextualMenu <- reactiveVal(FALSE)
    observeEvent(input$toggleContextualMenu, {
      showContextualMenu(!showContextualMenu())
    })
    output$contextualMenu <- renderReact({
      menuItems <- JS("[
        {
          key: 'newItem',
          text: 'New',
          onClick: () => console.log('New clicked'),
        },
        {
          key: 'divider_1',
          itemType: 1,
        },
        {
          key: 'rename',
          text: 'Rename',
          onClick: () => console.log('Rename clicked'),
        },
        {
          key: 'edit',
          text: 'Edit',
          onClick: () => console.log('Edit clicked'),
        },
        {
          key: 'properties',
          text: 'Properties',
          onClick: () => console.log('Properties clicked'),
        },
        {
          key: 'linkNoTarget',
          text: 'Link same window',
          href: 'http://bing.com',
        },
        {
          key: 'linkWithTarget',
          text: 'Link new window',
          href: 'http://bing.com',
          target: '_blank',
        },
        {
          key: 'linkWithOnClick',
          name: 'Link click',
          href: 'http://bing.com',
          onClick: function(){
            alert('Link clicked');
            ev.preventDefault();
          },
          target: '_blank',
        },
        {
          key: 'disabled',
          text: 'Disabled item',
          disabled: true,
          onClick: () => console.error('Disabled item should not be clickable.'),
        },
      ]")
      ContextualMenu(
        items = menuItems,
        hidden = !showContextualMenu(),
        target = "#target",
        onItemClick = JS(paste0(
          "function() {",
          "  Shiny.setInputValue('", ns("toggleContextualMenu"), "', Math.random());",
          "}"
        )),
        onDismiss = JS(paste0(
          "function() {",
          "  Shiny.setInputValue('", ns("toggleContextualMenu"), "', Math.random());",
          "}"
        ))
      )
    })
  })
}
if (interactive()) {
  shinyApp(ui("app"), function(input, output) server("app"))
}
DatePicker
Description
Picking a date can be tough without context. A date picker (DatePicker) offers a drop-down control that’s optimized for picking a single date from a calendar view where contextual information like the day of the week or fullness of the calendar is important. You can modify the calendar to provide additional context or to limit available dates.
For more details and examples visit the official docs. The R package cannot handle each and every case, so for advanced use cases you need to work using the original docs to achieve the desired result.
Usage
DatePicker(...)
DatePicker.shinyInput(inputId, ..., value = defaultValue)
updateDatePicker.shinyInput(
  session = shiny::getDefaultReactiveDomain(),
  inputId,
  ...
)
Arguments
| ... | Props to pass to the component. The allowed props are listed below in the Details section. | 
| inputId | ID of the component. | 
| value | Starting value. | 
| session | Object passed as the  | 
Details
-  allFocusable boolean
 Allows all elements to be focused, including disabled ones
-  allowTextInput boolean
 Whether the DatePicker allows input a date string directly or not
-  ariaLabel string
 Aria Label for TextField of the DatePicker for screen reader users.
-  borderless boolean
 Determines if DatePicker has a border.
-  calendarAs IComponentAs<ICalendarProps>
 Custom Calendar to be used for date picking
-  calendarProps ICalendarProps
 Pass calendar props to calendar component
-  calloutProps ICalloutProps
 Pass callout props to callout component
-  className string
 Optional Classname for datepicker root element .
-  componentRef IRefObject<IDatePicker>
 Optional callback to access the IDatePicker interface. Use this instead of ref for accessing the public methods and properties of the component.
-  dateTimeFormatter ICalendarFormatDateCallbacks
 Apply additional formating to dates, for example localized date formatting.
-  disableAutoFocus boolean
 Whether the DatePicker should open automatically when the control is focused
-  disabled boolean
 Disabled state of the DatePicker.
-  firstDayOfWeek DayOfWeek
 The first day of the week for your locale.
-  firstWeekOfYear FirstWeekOfYear
 Defines when the first week of the year should start, FirstWeekOfYear.FirstDay, FirstWeekOfYear.FirstFullWeek or FirstWeekOfYear.FirstFourDayWeek are the possible values
-  formatDate (date?: Date) => string
 Optional method to format the chosen date to a string to display in the DatePicker
-  highlightCurrentMonth boolean
 Whether the month picker should highlight the current month
-  highlightSelectedMonth boolean
 Whether the month picker should highlight the selected month
-  initialPickerDate Date
 The initially highlighted date in the calendar picker
-  isMonthPickerVisible boolean
 Whether the month picker is shown beside the day picker or hidden.
-  isRequired boolean
 Whether the DatePicker is a required field or not
-  label string
 Label for the DatePicker
-  maxDate Date
 The maximum allowable date.
-  minDate Date
 The minimum allowable date.
-  onAfterMenuDismiss () => void
 Callback that runs after DatePicker's menu (Calendar) is closed
-  onSelectDate (date: Date | null | undefined) => void
 Callback issued when a date is selected
-  parseDateFromString (dateStr: string) => Date | null
 Optional method to parse the text input value to date, it is only useful when allowTextInput is set to true
-  pickerAriaLabel string
 Aria label for date picker popup for screen reader users.
-  placeholder string
 Placeholder text for the DatePicker
-  showCloseButton boolean
 Whether the CalendarDay close button should be shown or not.
-  showGoToToday boolean
 Whether the "Go to today" link should be shown or not
-  showMonthPickerAsOverlay boolean
 Show month picker on top of date picker when visible.
-  showWeekNumbers boolean
 Whether the calendar should show the week number (weeks 1 to 53) before each week row
-  strings IDatePickerStrings
 Localized strings to use in the DatePicker
-  styles IStyleFunctionOrObject<IDatePickerStyleProps, IDatePickerStyles>
 Call to provide customized styling that will layer on top of the variant rules.
-  tabIndex number
 The tabIndex of the TextField
-  textField ITextFieldProps
 Pass textField props to textField component. Prop name is "textField" for compatiblity with upcoming slots work.
-  theme ITheme
 Theme provided by High-Order Component.
-  today Date
 Value of today. If null, current time in client machine will be used.
-  underlined boolean
 Whether or not the Textfield of the DatePicker is underlined.
-  value Date
 Default value of the DatePicker, if any
Value
Object with shiny.tag class suitable for use in the UI of a Shiny app.
The update functions return nothing (called for side effects).
Best practices
Layout
- Use the control the way it’s designed and built. Don’t break it apart. 
Content
- The control provides the date in a specific format. If the date can be entered in an input field, provide helper text in the appropriate format. 
Examples
# Example 1
library(shiny)
library(shiny.fluent)
ui <- function(id) {
  ns <- NS(id)
  div(
    DatePicker.shinyInput(ns("date"), value = "2020-06-25T22:00:00.000Z"),
    textOutput(ns("dateValue")),
    h3("If `value` is missing, default to system date"),
    DatePicker.shinyInput(ns("date2")),
    textOutput(ns("dateDefault")),
    h3("If `value` is NULL, return NULL"),
    DatePicker.shinyInput(ns("date3"), value = NULL, placeholder = "I am placeholder!"),
    textOutput(ns("dateNull"))
  )
}
server <- function(id) {
  moduleServer(id, function(input, output, session) {
    output$dateValue <- renderText({
      sprintf("Value: %s", input$date)
    })
    output$dateDefault <- renderText({
      sprintf("Value: %s", input$date2)
    })
    output$dateNull <- renderText({
      sprintf("Value: %s", deparse(input$date3))
    })
  })
}
if (interactive()) {
  shinyApp(ui("app"), function(input, output) server("app"))
}
# Example 2
library(shiny)
library(shiny.fluent)
# Supplying custom strings for DatePicker
ui <- function(id) {
  fluentPage(
    DatePicker.shinyInput(
      "date",
      value = Sys.Date(),
      strings = list(
        months = list(
          "January", "February", "March", "April",
          "May", "June", "July", "August",
          "September", "October", "November", "December"
        ),
        shortMonths = list(
          "Jan", "Feb", "Mar", "Apr", "May", "Jun",
          "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"
        ),
        days = list(
          "Sunday", "Monday", "Tuesday", "Wednesday",
          "Thursday", "Friday", "Saturday"
        ),
        shortDays = list("S", "M", "T", "W", "T", "F", "S"),
        goToToday = "Go to today",
        prevMonthAriaLabel = "Go to previous month",
        nextMonthAriaLabel = "Go to next month",
        prevYearAriaLabel = "Go to previous year",
        nextYearAriaLabel = "Go to next year"
      )
    )
  )
}
server <- function(id) {
  moduleServer(id, function(input, output, session) {})
}
if (interactive()) {
  shinyApp(ui("app"), function(input, output) server("app"))
}
DetailsList
Description
A details list (DetailsList) is a robust way to display an information-rich collection of items, and allow people to sort, group, and filter the content. Use a details list when information density is critical.
For more details and examples visit the official docs. The R package cannot handle each and every case, so for advanced use cases you need to work using the original docs to achieve the desired result.
Usage
DetailsList(...)
Arguments
| ... | Props to pass to the component. The allowed props are listed below in the Details section. | 
Details
-  onColumnDragEnd (props: { dropLocation?: ColumnDragEndLocation; }, event: MouseEvent) => void
 Callback to notify the column dragEnd event to List Need this to check whether the dragEnd has happened on corresponding list or outside of the list
-  cellStyleProps ICellStyleProps
 Custom styles for cell rendering.
-  column IColumn
 The column definition for the component instance.
-  columnIndex number
 The column index for the component instance.
-  componentRef () => void
 A reference to the component instance.
-  dragDropHelper IDragDropHelper | null
 The drag and drop helper for the component instance.
-  isDraggable boolean
 Whether or not the column can be re-ordered via drag and drop.
-  isDropped boolean
 Whether or not the column has been dropped via drag and drop.
-  onColumnClick (ev: React.MouseEvent<HTMLElement>, column: IColumn) => void
 Callback fired when click event occurs.
-  onColumnContextMenu (column: IColumn, ev: React.MouseEvent<HTMLElement>) => void
 Callback fired on contextual menu event to provide contextual menu UI.
-  onRenderColumnHeaderTooltip IRenderFunction<IDetailsColumnRenderTooltipProps>
 Render function for providing a column header tooltip.
-  parentId string
 Parent ID used for accessibility label(s).
-  setDraggedItemIndex (itemIndex: number) => void
 
-  styles IStyleFunctionOrObject<IDetailsColumnStyleProps, IDetailsColumnStyles>
 The component styles to respect during render.
-  theme ITheme
 The theme object to respect during render.
-  updateDragInfo (props: { itemIndex: number; }, event?: MouseEvent) => void
 Callback on drag and drop event.
-  useFastIcons boolean
 Whether to use fast icon and check components. The icons can't be targeted by customization but are still customizable via class names.
-  columns IColumn[]
 Column metadata
-  selection ISelection
 Selection from utilities
-  selectionMode SelectionMode
 Selection mode
-  onRenderFooter IRenderFunction<IDetailsGroupDividerProps>
 
-  onRenderHeader IRenderFunction<IDetailsGroupDividerProps>
 
-  ariaLabel string
 ariaLabel for the entire header
-  ariaLabelForSelectAllCheckbox string
 ariaLabel for the header checkbox that selects or deselects everything
-  ariaLabelForSelectionColumn string
 ariaLabel for the selection column
-  ariaLabelForToggleAllGroupsButton string
 ariaLabel for expand/collapse group button
-  className string
 Overriding class name
-  collapseAllVisibility CollapseAllVisibility
 Whether to collapse for all visibility
-  columnReorderOptions IColumnReorderOptions
 Column reordering options
-  columnReorderProps IColumnReorderHeaderProps
 Column reordering options
-  componentRef IRefObject<IDetailsHeader>
 Ref to the component itself
-  isAllCollapsed boolean
 Whether or not all is collapsed
-  layoutMode DetailsListLayoutMode
 Layout mode - fixedColumns or justified
-  minimumPixelsForDrag number
 Minimum pixels to be moved before dragging is registered
-  onColumnAutoResized (column: IColumn, columnIndex: number) => void
 Callback for when column is automatically resized
-  onColumnClick (ev: React.MouseEvent<HTMLElement>, column: IColumn) => void
 Callback for when the column is clicked
-  onColumnContextMenu (column: IColumn, ev: React.MouseEvent<HTMLElement>) => void
 Callback for when the column needs to show a context menu
-  onColumnIsSizingChanged (column: IColumn, isSizing: boolean) => void
 Callback for when column sizing has changed
-  onColumnResized (column: IColumn, newWidth: number, columnIndex: number) => void
 Callback for when column is resized
-  onRenderColumnHeaderTooltip IRenderFunction<IDetailsColumnRenderTooltipProps>
 Callback to render a tooltip for the column header
-  onRenderDetailsCheckbox IRenderFunction<IDetailsCheckboxProps>
 If provided, can be used to render a custom checkbox
-  onToggleCollapseAll (isAllCollapsed: boolean) => void
 Callback for when collapse all is toggled
-  selectAllVisibility SelectAllVisibility
 Select all button visibility
-  styles IStyleFunctionOrObject<IDetailsHeaderStyleProps, IDetailsHeaderStyles>
 Call to provide customized styling that will layer on top of the variant rules.
-  theme ITheme
 Theme from the Higher Order Component
-  useFastIcons boolean
 Whether to use fast icon and check components. The icons can't be targeted by customization but are still customizable via class names.
-  columns IColumn[]
 Column metadata
-  selection ISelection
 Selection from utilities
-  selectionMode SelectionMode
 Selection mode
-  cellStyleProps ICellStyleProps
 Rules for rendering column cells.
-  checkboxVisibility CheckboxVisibility | undefined
 Checkbox visibility
-  columns IColumn[]
 Column metadata
-  groupNestingDepth number
 Nesting depth of a grouping
-  indentWidth number | undefined
 How much to indent
-  rowWidth number
 Minimum width of the row.
-  selection ISelection | undefined
 Selection from utilities
-  selectionMode SelectionMode | undefined
 Selection mode
-  viewport IViewport | undefined
 View port of the virtualized list
-  ariaLabel string
 Accessible label describing or summarizing the list.
-  ariaLabelForGrid string
 Accessible label for the grid within the list.
-  ariaLabelForListHeader string
 Accessible label for the list header.
-  ariaLabelForSelectAllCheckbox string
 Accessible label for the select all checkbox.
-  ariaLabelForSelectionColumn string
 Accessible label for the name of the selection column.
-  cellStyleProps ICellStyleProps
 Props impacting the render style of cells. Since these have an impact on calculated column widths, they are handled separately from normal theme styling, but they are passed to the styling system.
-  checkboxCellClassName string
 Class name to add to the cell of a checkbox.
-  checkboxVisibility CheckboxVisibility
 Controls the visibility of selection check box.
-  checkButtonAriaLabel string
 Accessible label for the check button.
-  className string
 Class name to add to the root element.
-  columnReorderOptions IColumnReorderOptions
 Options for column reordering using drag and drop.
-  columns IColumn[]
 column defitions. If none are provided, default columns will be created based on the items' properties.
-  compact boolean
 Whether to render in compact mode.
-  componentRef IRefObject<IDetailsList>
 Callback to access the IDetailsList interface. Use this instead of ref for accessing the public methods and properties of the component.
-  constrainMode ConstrainMode
 Controls how the list contrains overflow.
-  disableSelectionZone boolean
 Whether to disable the built-in SelectionZone, so the host component can provide its own.
-  dragDropEvents IDragDropEvents
 Map of callback functions related to row drag and drop functionality.
-  enableUpdateAnimations boolean
 Whether to animate updates
-  enterModalSelectionOnTouch boolean
 Whether the selection zone should enter modal state on touch.
-  getCellValueKey (item?: any, index?: number, column?: IColumn) => string
 If provided, will be the "default" item column cell value return. A column'sgetValueKeycan overridegetCellValueKey.
-  getGroupHeight IGroupedListProps['getGroupHeight']
 Callback to override default group height calculation used by list virtualization.
-  getKey (item: any, index?: number) => string
 Callback to get the item key, to be used in the selection and on render. Must be provided if sorting or filtering is enabled.
-  getRowAriaDescribedBy (item: any) => string
 Callback to get the aria-describedby IDs (space-separated strings) of elements that describe the item.
-  getRowAriaLabel (item: any) => string
 Callback to get the aria-label string for a given item.
-  groupProps IDetailsGroupRenderProps
 Override properties to render groups.
-  groups IGroup[]
 Grouping instructions.
-  indentWidth number
 Override for the indent width used for group nesting.
-  initialFocusedIndex number
 Default index to set focus to once the items have rendered and the index exists.
-  isHeaderVisible boolean
 Controls the visibility of the header.
-  isPlaceholderData boolean
 Set this to true to indicate that the items being displayed are placeholder data.
-  items any[]
 The items to render.
-  layoutMode DetailsListLayoutMode
 Controls how the columns are adjusted.
-  listProps IListProps
 Properties to pass through to the List components being rendered.
-  minimumPixelsForDrag number
 The minimum mouse move distance to interpret the action as drag event.
-  onActiveItemChanged (item?: any, index?: number, ev?: React.FocusEvent<HTMLElement>) => void
 Callback for when an item in the list becomes active by clicking anywhere inside the row or navigating to it with the keyboard.
-  onColumnHeaderClick (ev?: React.MouseEvent<HTMLElement>, column?: IColumn) => void
 Callback for when the user clicks on the column header.
-  onColumnHeaderContextMenu (column?: IColumn, ev?: React.MouseEvent<HTMLElement>) => void
 Callback for when the user asks for a contextual menu (usually via right click) from a column header.
-  onColumnResize (column?: IColumn, newWidth?: number, columnIndex?: number) => void
 Callback fired on column resize
-  onDidUpdate (detailsList?: DetailsListBase) => void
 Callback for when the list has been updated. Useful for telemetry tracking externally.
-  onItemContextMenu (item?: any, index?: number, ev?: Event) => void | boolean
 Callback for when the context menu of an item has been accessed. If undefined or false is returned,ev.preventDefault()will be called.
-  onItemInvoked (item?: any, index?: number, ev?: Event) => void
 Callback for when a given row has been invoked (by pressing enter while it is selected.)
-  onRenderCheckbox IRenderFunction<IDetailsListCheckboxProps>
 If provided, can be used to render a custom checkbox.
-  onRenderDetailsFooter IRenderFunction<IDetailsFooterProps>
 An override to render the details footer.
-  onRenderDetailsHeader IRenderFunction<IDetailsHeaderProps>
 An override to render the details header.
-  onRenderItemColumn (item?: any, index?: number, column?: IColumn) => React.ReactNode
 If provided, will be the "default" item column renderer method. This affects cells within the rows, not the rows themselves. If a column definition provides its ownonRendermethod, that will be used instead of this.
-  onRenderMissingItem (index?: number, rowProps?: IDetailsRowProps) => React.ReactNode
 Callback for what to render when the item is missing.
-  onRenderRow IRenderFunction<IDetailsRowProps>
 Callback to override the default row rendering.
-  onRowDidMount (item?: any, index?: number) => void
 Callback for when a given row has been mounted. Useful for identifying when a row has been rendered on the page.
-  onRowWillUnmount (item?: any, index?: number) => void
 Callback for when a given row has been unmounted. Useful for identifying when a row has been removed from the page.
-  onShouldVirtualize (props: IListProps) => boolean
 Callback to determine whether the list should be rendered in full, or virtualized.
Virtualization will add and remove pages of items as the user scrolls them into the visible range. This benefits larger list scenarios by reducing the DOM on the screen, but can negatively affect performance for smaller lists.
The default implementation will virtualize when this callback is not provided.
-  rowElementEventMap { eventName: string; callback: (context: IDragDropContext, event?: any) => void; }[]
 Event names and corresponding callbacks that will be registered to rendered row elements.
-  selection ISelection
 Selection model to track selection state.
-  selectionMode SelectionMode
 Controls how/if the details list manages selection. Options include none, single, multiple
-  selectionPreservedOnEmptyClick boolean
 By default, selection is cleared when clicking on an empty (non-focusable) section of the screen. Setting this value to true overrides that behavior and maintains selection.
-  selectionZoneProps ISelectionZoneProps
 Additional props to pass through to the SelectionZone created by default.
-  setKey string
 A key that uniquely identifies the given items. If provided, the selection will be reset when the key changes.
-  shouldApplyApplicationRole boolean
 Whether the roleapplicationshould be applied to the list.
-  styles IStyleFunctionOrObject<IDetailsListStyleProps, IDetailsListStyles>
 Custom overrides to the themed or default styles.
-  theme ITheme
 Theme provided by a higher-order component.
-  useFastIcons boolean
 Whether to use fast icon and check components. The icons can't be targeted by customization but are still customizable via class names.
-  usePageCache boolean
 Whether to enable render page caching. This is an experimental performance optimization that is off by default.
-  useReducedRowRenderer boolean
 Whether to re-render a row only when props changed. Might cause regression when depending on external updates.
-  viewport IViewport
 Viewport info, provided by thewithViewportdecorator.
-  cellsByColumn { [columnKey: string]: React.ReactNode; }
 Optional pre-rendered content per column. Preferred over onRender or onRenderItemColumn if provided.
-  checkboxCellClassName string
 Class name for the checkbox cell
-  checkButtonAriaLabel string
 Check button's aria label
-  className string
 Overriding class name
-  collapseAllVisibility CollapseAllVisibility
 Collapse all visibility
-  compact boolean
 Whether to render in compact mode
-  componentRef IRefObject<IDetailsRow>
 Ref of the component
-  dragDropEvents IDragDropEvents
 Handling drag and drop events
-  dragDropHelper IDragDropHelper
 Helper for the drag and drop
-  enableUpdateAnimations boolean
 Whether to animate updates
-  eventsToRegister { eventName: string; callback: (item?: any, index?: number, event?: any) => void; }[]
 A list of events to register
-  getRowAriaDescribedBy (item: any) => string
 Callback for getting the row aria-describedby
-  getRowAriaLabel (item: any) => string
 Callback for getting the row aria label
-  item any
 Data source for this component
-  itemIndex number
 Index of the collection of items of the DetailsList
-  onDidMount (row?: DetailsRowBase) => void
 Callback for did mount for parent
-  onRenderCheck (props: IDetailsRowCheckProps) => JSX.Element
 Callback for rendering a checkbox
-  onRenderDetailsCheckbox IRenderFunction<IDetailsCheckboxProps>
 If provided, can be used to render a custom checkbox
-  onWillUnmount (row?: DetailsRowBase) => void
 Callback for will mount for parent
-  rowFieldsAs React.ComponentType<IDetailsRowFieldsProps>
 DOM element into which to render row field
-  styles IStyleFunctionOrObject<IDetailsRowStyleProps, IDetailsRowStyles>
 Overriding styles to this row
-  theme ITheme
 Theme provided by styled() function
-  useFastIcons boolean
 Whether to use fast icon and check components. The icons can't be targeted by customization but are still customizable via class names.
-  useReducedRowRenderer boolean
 Rerender DetailsRow only when props changed. Might cause regression when depending on external updates.
-  anySelected boolean
 Is any selected - also true for isSelectionModal
-  canSelect boolean
 Can this checkbox be selectable
-  checkClassName string
 The classname to be passed down to Check component
-  className string
 Optional className to attach to the slider root element.
-  compact boolean
 Is this in compact mode?
-  isHeader boolean
 Is the check part of the header in a DetailsList
-  isVisible boolean
 Whether or not this checkbox is visible
-  onRenderDetailsCheckbox IRenderFunction<IDetailsCheckboxProps>
 If provided, can be used to render a custom checkbox
-  selected boolean
 Whether or not this check is selected
-  styles IStyleFunctionOrObject<IDetailsRowCheckStyleProps, IDetailsRowCheckStyles>
 Style override
-  theme ITheme
 Theme provided by High-Order Component.
-  useFastIcons boolean
 Whether to use fast icon and check components. The icons can't be targeted by customization but are still customizable via class names.
-  cellStyleProps ICellStyleProps
 Style properties to customize cell render output.
-  columns IColumn[]
 Columns metadata
-  columnStartIndex number
 Index to start for the column
-  compact boolean
 whether to render as a compact field
-  enableUpdateAnimations boolean
 
-  item any
 Data source for this component
-  itemIndex number
 The item index of the collection for the DetailsList
-  rowClassNames { [k in keyof Pick<IDetailsRowStyles, 'isMultiline' | 'isRowHeader' | 'cell' | 'cellAnimation' | 'cellPadded' | 'cellUnpadded' | 'fields'>]: string; }
 Subset of classnames currently generated in DetailsRow that are used within DetailsRowFields.
-  columns IColumn[]
 Column metadata
-  selection ISelection
 Selection from utilities
-  selectionMode SelectionMode
 Selection mode
-  ariaLabelForShimmer string
 Aria label for shimmer. Set on grid while shimmer is enabled.
-  detailsListStyles IDetailsListProps['styles']
 DetailsList styles to pass through.
-  enableShimmer boolean
 Boolean flag to control when to render placeholders vs real items. It's up to the consumer app to know when fetching of the data is done to toggle this prop.
-  onRenderCustomPlaceholder (rowProps: IDetailsRowProps, index?: number, defaultRender?: (props: IDetailsRowProps) => React.ReactNode) => React.ReactNode
 Custom placeholder renderer to be used when in need to override the default placeholder of a DetailsRow.rowPropsargument is passed to leverage the calculated column measurements done by DetailsList or you can use the optional arguments of itemindexanddefaultRenderto execute additional logic before rendering the default placeholder.
-  removeFadingOverlay boolean
 Determines whether to remove a fading out to bottom overlay over the shimmering items used to further emphasize the unknown number of items that will be fetched.
-  shimmerLines number
 Number of shimmer placeholder lines to render.
-  shimmerOverlayStyles IStyleFunctionOrObject<IShimmeredDetailsListStyleProps, IShimmeredDetailsListStyles>
 Custom styles to override the styles specific to the ShimmeredDetailsList root area.
-  styles IStyleFunctionOrObject<IShimmeredDetailsListStyleProps, IShimmeredDetailsListStyles>
 Custom styles to override the styles specific to the ShimmeredDetailsList root area.
-  skipViewportMeasures boolean
 Whether or not to use ResizeObserver (if available) to detect and measure viewport on 'resize' events.
Falls back to window 'resize' event.
Value
Object with shiny.tag class suitable for use in the UI of a Shiny app.
Best practices
Layout
- List items are composed of selection, icon, and name columns at minimum. You can include other columns, such as date modified, or any other metadata field associated with the collection. 
- Avoid using file type icon overlays to denote status of a file as it can make the entire icon unclear. 
- If there are multiple lines of text in a column, consider the variable row height variant. 
- Give columns ample default width to display information. 
Content
- Use sentence-style capitalization for column headers—only capitalize the first word. For more info, see - [Capitalization]in the Microsoft Writing Style Guide.
[capitalization]: https://docs.microsoft.com/style-guide/capitalization
FAQ
My scrollable content isn't updating on scroll. What should I do?
Add the data-is-scrollable="true" attribute to your scrollable element containing the DetailsList.
By default, the List used within DetailsList will use the body element as the scrollable element. If you contain the List within a scrollable div using overflow: auto or scroll, the List needs to listen for scroll events on that element instead. On initialization, the List will traverse up the DOM looking for the first element with the data-is-scrollable attribute to know which element to listen to for knowing when to re-evaulate the visible window.
My List is not re-rendering when I mutate its items. What should I do?
To determine if the List within DetailsList should re-render its contents, the component performs a referential equality check within its shouldComponentUpdate method. This is done to minimize the performance overhead associated with re-rendering the virtualized List pages, as recommended by the React documentation.
As a result of this implementation, the inner List will not determine it should re-render if the array values are mutated.
To avoid this problem, we recommend re-creating the items array backing the DetailsList by using a method such as Array.prototype.concat or ES6 spread syntax shown below:
public appendItems(): void {
  const { items } = this.state;
  this.setState({
    items: [...items, ...['Foo', 'Bar']]
  })
}
public render(): JSX.Element {
  const { items } = this.state;
  return <DetailsList items={items} />;
}
By re-creating the items array without mutating the values, the inner List will correctly determine its contents have changed and it should then re-render with the new values.
Examples
# Example 1
library(shiny)
library(shiny.fluent)
items <- list(
  list(key = "1", name = "Mark", surname = "Swanson"),
  list(key = "2", name = "Josh", surname = "Johnson")
)
columns <- list(
  list(key = "name", fieldName = "name", name = "Name"),
  list(key = "surname", fieldName = "surname", name = "Surname")
)
ui <- function(id) {
  ns <- NS(id)
  DetailsList(items = items, columns = columns)
}
server <- function(id) {
  moduleServer(id, function(input, output, session) {})
}
if (interactive()) {
  shinyApp(ui("app"), function(input, output) server("app"))
}
# Example 2
library(shiny)
library(shiny.fluent)
# Custom columns text alignment and formatting
items <- list(
  list(
    key = "1",
    name = "Mark",
    number = "2"
  ),
  list(
    key = "2",
    name = "Josh",
    number = "1"
  )
)
columns <- list(
  list(
    key = "name",
    fieldName = "name",
    name = "Name"
  ),
  list(
    key = "number",
    fieldName = "number",
    name = "Number"
  )
)
ui <- function(id) {
  DetailsList(
    items = items,
    columns = columns,
    onRenderItemColumn = JS("(item, index, column) => {
      const fieldContent = item[column.fieldName]
      switch (column.key) {
        case 'name':
          return React.createElement(
            'span',
            {
              style: { textAlign: 'right', width: '100%', display: 'block' }
            },
            fieldContent
          );
        case 'number':
          return React.createElement(
            'span',
            {
              style: { textAlign: 'left', width: '100%', display: 'block' }
            },
            `%${fieldContent}`
          );
        default:
          return React.createElement('span', null, fieldContent);
      }
    }")
  )
}
server <- function(id) {
  moduleServer(id, function(input, output, session) {})
}
if (interactive()) {
  shinyApp(ui("app"), function(input, output) server("app"))
}
# Example 3
library(shiny)
library(shiny.fluent)
# Selecting rows in DetailsList
CustomComponents <- tags$script(HTML("(function() {
  const React = jsmodule['react'];
  const Fluent = jsmodule['@fluentui/react'];
  const Shiny = jsmodule['@/shiny'];
  const CustomComponents = jsmodule['CustomComponents'] ??= {};
  function useSelection(inputId) {
    const selection = React.useRef(new Fluent.Selection({
      onSelectionChanged() {
        const value = this.getSelectedIndices().map(i => i + 1); // R uses 1-based indexing.
        Shiny.setInputValue(inputId, value);
      }
    }));
    return selection.current;
  }
  CustomComponents.DetailsList = function DetailsList({ inputId, ...rest }) {
    const selection = useSelection(inputId);
    return React.createElement(Fluent.DetailsList, { selection, ...rest });
  }
})()"))
DetailsList.shinyInput <- function(inputId, ...) {
  shiny.react::reactElement(
    module = "CustomComponents",
    name = "DetailsList",
    props = shiny.react::asProps(inputId = inputId, ...),
    deps = shinyFluentDependency()
  )
}
items <- list(
  list(name = "Apple"),
  list(name = "Banana"),
  list(name = "Cherry")
)
ui <- function(id) {
  ns <- NS(id)
  tagList(
    CustomComponents,
    DetailsList.shinyInput(ns("selection"), items = items),
    textOutput(ns("text"))
  )
}
server <- function(id) {
  moduleServer(id, function(input, output, session) {
    output$text <- renderText(paste(input$selection, collapse = ", "))
  })
}
if (interactive()) {
  shinyApp(ui("app"), function(input, output) server("app"))
}
Dialog
Description
A dialog box (Dialog) is a temporary pop-up that takes focus from the page or app and requires people to interact with it. It’s primarily used for confirming actions, such as deleting a file, or asking people to make a choice.
For more details and examples visit the official docs. The R package cannot handle each and every case, so for advanced use cases you need to work using the original docs to achieve the desired result.
Usage
Dialog(...)
DialogFooter(...)
Arguments
| ... | Props to pass to the component. The allowed props are listed below in the Details section. | 
Details
-  className string
 Optional override class name
-  closeButtonAriaLabel string
 Label to be passed to to aria-label of close button
-  componentRef IRefObject<IDialogContent>
 Optional callback to access the IDialogContent interface. Use this instead of ref for accessing the public methods and properties of the component.
-  draggableHeaderClassName string
 The classname for when the header is draggable
-  isMultiline boolean
 Is inside a multiline wrapper
-  onDismiss (ev?: React.MouseEvent<HTMLButtonElement>) => any
 Callback for when the Dialog is dismissed from the close button or light dismiss, before the animation completes.
-  responsiveMode ResponsiveMode
 Responsive mode passed in from decorator.
-  showCloseButton boolean
 Show an 'x' close button in the upper-right corner
-  styles IStyleFunctionOrObject<IDialogContentStyleProps, IDialogContentStyles>
 Call to provide customized styling that will layer on top of the variant rules
-  subText string
 The subtext to display in the dialog
-  subTextId string
 The Id for subText container
-  theme ITheme
 Theme provided by HOC.
-  title string | JSX.Element
 The title text to display at the top of the dialog.
-  titleId string
 The Id for title container
-  titleProps React.HTMLAttributes<HTMLDivElement>
 The props for title container.
-  topButtonsProps IButtonProps[]
 Other top buttons that will show up next to the close button
-  type DialogType
 The type of Dialog to display.
-  className string
 Optional override class name
-  componentRef IRefObject<IDialogFooter>
 Gets the component ref.
-  styles IStyleFunctionOrObject<IDialogFooterStyleProps, IDialogFooterStyles>
 Call to provide customized styling that will layer on top of the variant rules
-  theme ITheme
 Theme provided by HOC.
-  ariaDescribedById string
 Optional id for aria-DescribedBy
-  ariaLabelledById string
 Optional id for aria-LabelledBy
-  className string
 Optional class name to be added to the root class
-  componentRef IRefObject<IDialog>
 Optional callback to access the IDialog interface. Use this instead of ref for accessing the public methods and properties of the component.
-  containerClassName string
 Optional override for container class
-  contentClassName string
 Optional override content class
-  dialogContentProps IDialogContentProps
 Props to be passed through to Dialog Content
-  hidden boolean
 Whether the dialog is hidden.
-  isBlocking boolean
 Whether the dialog can be light dismissed by clicking outside the dialog (on the overlay).
-  isDarkOverlay boolean
 Whether the overlay is dark themed.
-  isOpen boolean
 Whether the dialog is displayed. Deprecated, usehiddeninstead.
-  maxWidth ICSSRule | ICSSPixelUnitRule
 Sets the maximum width for the dialog. It limits the width property to be larger than the value specified in max-width.
-  minWidth ICSSRule | ICSSPixelUnitRule
 Sets the minimum width of the dialog. It limits the width property to be not smaller than the value specified in min-width.
-  modalProps IModalProps
 Props to be passed through to Modal
-  onDismiss (ev?: React.MouseEvent<HTMLButtonElement>) => any
 A callback function for when the Dialog is dismissed from the close button or light dismiss. Can also be specified separately in content and modal.
-  onDismissed () => any
 A callback function which is called after the Dialog is dismissed and the animation is complete.
-  onLayerDidMount () => void
 A callback function for when the Dialog content is mounted on the overlay layer
-  onLayerMounted () => void
 Deprecated at 0.81.2, useonLayerDidMountinstead.
-  styles IStyleFunctionOrObject<IDialogStyleProps, IDialogStyles>
 Call to provide customized styling that will layer on top of the variant rules
-  subText string
 The subtext to display in the dialog.
-  theme ITheme
 Theme provided by HOC.
-  title string | JSX.Element
 The title text to display at the top of the dialog.
-  topButtonsProps IButtonProps[]
 Other top buttons that will show up next to the close button
-  type DialogType
 The type of Dialog to display.
Value
Object with shiny.tag class suitable for use in the UI of a Shiny app.
Best practices
Layout
- Don't use more than three buttons. 
- Dialog boxes consist of a header, body, and footer. 
- Validate that people’s entries are acceptable before closing the dialog box. Show an inline validation error near the field they must correct. 
- Blocking dialogs should be used very sparingly, only when it is critical that people make a choice or provide information before they can proceed. Blocking dialogs are generally used for irreversible or potentially destructive tasks. They’re typically paired with an overlay without a light dismiss. 
Header
- Locks to the top of the dialog. 
- May include an icon to the left of the title. 
- Includes a Close button in the top-right corner. 
Footer
- Lock buttons to the bottom of the dialog. 
- Includes one primary button. A secondary button is optional. 
Width
- Maximum is 340 pixels. 
- Minimum is 288 pixels. 
Height
- Maximum is 340 pixels. 
- Minimum is 172 pixels. 
Content
Title
- Keep the title as concise as possible. 
- Don’t use periods at the end of titles. 
- This mandatory content should explain the main information in a clear, concise, and specific statement or question. For example, “Delete this file?” instead of “Are you sure?” 
- The title shouldn’t be a description of the body content. For example, don’t use “Error” as a title. Instead, use an informative statement like “Your session ended.” 
- Use sentence-style capitalization—only capitalize the first word. For more info, see Capitalization in the Microsoft Writing Style Guide. 
Body copy (Optional)
- Don't restate the title in the body. 
- Use ending punctuation on sentences. 
- Use actionable language, with the most important information at the beginning. 
- Use the optional body content area for additional info or instructions, if needed. Only include information needed to help people make a decision. 
Button labels
- Write button labels that are specific responses to the main information in the title. The title “Delete this file?” could have buttons labeled “Delete” and “Cancel”. 
- Be concise. Limit labels to one or two words. Usually a single verb is best. Include a noun if there is any room for interpretation about what the verb means. For example, “Delete” or “Delete file”. 
Examples
library(shiny)
library(shiny.fluent)
ui <- function(id) {
  ns <- NS(id)
  div(
    DefaultButton.shinyInput(ns("showDialog"), text = "Open dialog"),
    reactOutput(ns("reactDialog"))
  )
}
server <- function(id) {
  moduleServer(id, function(input, output, session) {
    ns <- session$ns
    isDialogOpen <- reactiveVal(FALSE)
    output$reactDialog <- renderReact({
      dialogContentProps <- list(
        type = 0,
        title = "Missing Subject",
        closeButtonAriaLabel = "Close",
        subText = "Do you want to send this message without a subject?"
      )
      Dialog(
        hidden = !isDialogOpen(),
        onDismiss = JS(paste0(
          "function() {",
          "  Shiny.setInputValue('", ns("hideDialog"),"', Math.random());",
          "}"
        )),
        dialogContentProps = dialogContentProps,
        modalProps = list(),
        DialogFooter(
          PrimaryButton.shinyInput(ns("dialogSend"), text = "Send"),
          DefaultButton.shinyInput(ns("dialogDontSend"), text = "Don't send")
        )
      )
    })
    observeEvent(input$showDialog, isDialogOpen(TRUE))
    observeEvent(input$hideDialog, isDialogOpen(FALSE))
    observeEvent(input$dialogSend, isDialogOpen(FALSE))
    observeEvent(input$dialogDontSend, isDialogOpen(FALSE))
  })
}
if (interactive()) {
  shinyApp(ui("app"), function(input, output) server("app"))
}
DocumentCard
Description
A document card (DocumentCard) represents a file, and contains additional metadata or actions. This offers people a richer view into a file than the typical grid view.
For more details and examples visit the official docs. The R package cannot handle each and every case, so for advanced use cases you need to work using the original docs to achieve the desired result.
Usage
DocumentCard(...)
DocumentCardActions(...)
DocumentCardActivity(...)
DocumentCardDetails(...)
DocumentCardImage(...)
DocumentCardLocation(...)
DocumentCardLogo(...)
DocumentCardPreview(...)
DocumentCardStatus(...)
DocumentCardTitle(...)
Arguments
| ... | Props to pass to the component. The allowed props are listed below in the Details section. | 
Details
-  actions IButtonProps[]
 The actions available for this document.
-  className string
 Optional override class name
-  componentRef IRefObject<IDocumentCardActions>
 Gets the component ref.
-  styles IStyleFunctionOrObject<IDocumentCardActionsStyleProps, IDocumentCardActionsStyles>
 Call to provide customized styling that will layer on top of the variant rules
-  theme ITheme
 Theme provided by HOC.
-  views Number
 The number of views this document has received.
-  activity string
 Describes the activity that has taken place, such as "Created Feb 23, 2016".
-  className string
 Optional override class name
-  componentRef IRefObject<IDocumentCardActivity>
 Gets the component ref.
-  people IDocumentCardActivityPerson[]
 One or more people who are involved in this activity.
-  styles IStyleFunctionOrObject<IDocumentCardActivityStyleProps, IDocumentCardActivityStyles>
 Call to provide customized styling that will layer on top of the variant rules
-  theme ITheme
 Theme provided by HOC.
-  className string
 Optional override class name
-  componentRef IRefObject<IDocumentCardDetails>
 Gets the component ref.
-  styles IStyleFunctionOrObject<IDocumentCardDetailsStyleProps, IDocumentCardDetailsStyles>
 Call to provide customized styling that will layer on top of the variant rules
-  theme ITheme
 Theme provided by HOC.
-  className string
 Optional override class name
-  componentRef IRefObject<IDocumentCardImage>
 Gets the component ref.
-  height number
 If provided, forces the preview image to be this height.
-  iconProps IIconProps
 The props for the icon associated with this document type.
-  imageFit ImageFit
 Used to determine how to size the image to fit the dimensions of the component. If both dimensions are provided, then the image is fit using ImageFit.scale, otherwise ImageFit.none is used.
-  imageSrc string
 Path to the preview image.
-  styles IStyleFunctionOrObject<IDocumentCardImageStyleProps, IDocumentCardImageStyles>
 Call to provide customized styling that will layer on top of the variant rules
-  theme ITheme
 Theme provided by HOC.
-  width number
 If provided, forces the preview image to be this width.
-  ariaLabel string
 Aria label for the link to the document location.
-  className string
 Optional override class name
-  componentRef IRefObject<IDocumentCardLocation>
 Gets the component ref.
-  location string
 Text for the location of the document.
-  locationHref string
 URL to navigate to for this location.
-  onClick (ev?: React.MouseEvent<HTMLElement>) => void
 Function to call when the location is clicked.
-  styles IStyleFunctionOrObject<IDocumentCardLocationStyleProps, IDocumentCardLocationStyles>
 Call to provide customized styling that will layer on top of the variant rules
-  theme ITheme
 Theme provided by HOC.
-  className string
 Optional override class name
-  componentRef IRefObject<IDocumentCardLogo>
 Gets the component ref.
-  logoIcon string
 Describes DocumentCard Logo badge.
-  logoName string
 Describe Logo name, optional.
-  styles IStyleFunctionOrObject<IDocumentCardLogoStyleProps, IDocumentCardLogoStyles>
 Call to provide customized styling that will layer on top of the variant rules
-  theme ITheme
 Theme provided by HOC.
-  className string
 Optional override class name
-  componentRef IRefObject<IDocumentCardPreview>
 Gets the component ref.
-  getOverflowDocumentCountText (overflowCount: number) => string
 The function return string that will describe the number of overflow documents. such as (overflowCount: number) =\>+${ overflowCount } more,
-  previewImages IDocumentCardPreviewImage[]
 One or more preview images to display.
-  styles IStyleFunctionOrObject<IDocumentCardPreviewStyleProps, IDocumentCardPreviewStyles>
 Call to provide customized styling that will layer on top of the variant rules
-  theme ITheme
 Theme provided by HOC.
-  accentColor string
 Hex color value of the line below the card, which should correspond to the document type. This should only be supplied when using the 'compact' card layout.
Deprecated at v4.17.1, to be removed at \>= v5.0.0.
-  children React.ReactNode
 Child components to render within the card.
-  className string
 Optional override class name
-  componentRef IRefObject<IDocumentCard>
 Optional callback to access the IDocumentCard interface. Use this instead of ref for accessing the public methods and properties of the component.
-  onClick (ev?: React.SyntheticEvent<HTMLElement>) => void
 Function to call when the card is clicked or keyboard Enter/Space is pushed.
-  onClickHref string
 A URL to navigate to when the card is clicked. If a function has also been provided, it will be used instead of the URL.
-  onClickTarget string
 A target browser context for opening the link. If not specified, will open in the same tab/window.
-  role string
 Aria role assigned to the documentCard (Eg. button, link). Use this to override the default assignment.
-  styles IStyleFunctionOrObject<IDocumentCardStyleProps, IDocumentCardStyles>
 Call to provide customized styling that will layer on top of the variant rules
-  theme ITheme
 Theme provided by HOC.
-  type DocumentCardType
 The type of DocumentCard to display.
-  className string
 Optional override class name
-  componentRef IRefObject<IDocumentCardStatus>
 Gets the component ref.
-  status string
 Describe status information. Required field.
-  statusIcon string
 Describes DocumentCard status icon.
-  styles IStyleFunctionOrObject<IDocumentCardStatusStyleProps, IDocumentCardStatusStyles>
 Call to provide customized styling that will layer on top of the variant rules
-  theme ITheme
 Theme provided by HOC.
-  className string
 Optional override class name
-  componentRef IRefObject<IDocumentCardTitle>
 Gets the component ref.
-  shouldTruncate boolean
 Whether we truncate the title to fit within the box. May have a performance impact.
-  showAsSecondaryTitle boolean
 Whether show as title as secondary title style such as smaller font and lighter color.
-  styles IStyleFunctionOrObject<IDocumentCardTitleStyleProps, IDocumentCardTitleStyles>
 Call to provide customized styling that will layer on top of the variant rules
-  theme ITheme
 Theme provided by HOC.
-  title string
 Title text. If the card represents more than one document, this should be the title of one document and a "+X" string. For example, a collection of four documents would have a string of "Document.docx +3".
Value
Object with shiny.tag class suitable for use in the UI of a Shiny app.
Best practices
Layout
- Use this control to represent Office documents or other files in aggregate views, such as when you're showing someone’s most trending document. 
- Incorporate metadata that is relevant and useful in this particular view. A card can be specialized to be about the document’s latest changes, or about the document’s popularity, as you see fit. 
- Use a document card when you're illustrating an event that encompasses multiple files. For example, a card can be configured to represent a single upload action when adding more than one file. 
- Don’t use a document card in views where someone is likely to be performing bulk operations in files, or when the list may get very long. Specifically, if you’re showing all the items inside an actual folder, a card may be overkill because the majority of the items in the folder may not have interesting metadata. 
- Don’t use a document card if space is at a premium or you can’t show relevant and timely commands or metadata. Cards are useful because they can expose on-item interactions like “Share” buttons or view counts. If your app does not need this, show a simple grid or list of items instead, which are easier to scan. 
Examples
# Example 1
library(shiny)
library(shiny.fluent)
title <- "Long_file_name_with_underscores_used_to_separate_all_of_the_words"
previewImages <- list(
  list(
    previewImageSrc = "https://picsum.photos/318/196",
    width = 318,
    height = 196
  )
)
ui <- function(id) {
  ns <- NS(id)
  DocumentCard(
    DocumentCardPreview(previewImages = previewImages),
    DocumentCardTitle(
      title = title,
      shouldTruncate = TRUE
    ),
    DocumentCardActivity(
      activity = "Created a few minutes ago",
      people = list(list(name = "Annie Lindqvist"))
    )
  )
}
server <- function(id) {
  moduleServer(id, function(input, output, session) {})
}
if (interactive()) {
  shinyApp(ui("app"), function(input, output) server("app"))
}
# Example 2
library(shiny)
library(shiny.fluent)
# Using icons in DocumentCardActions
ui <- function(id) {
  previewImages <- list(
    list(
      previewImageSrc = "https://picsum.photos/318/196",
      width = 318,
      height = 200
    )
  )
  fluidPage(
    DocumentCard(
      DocumentCardPreview(previewImages = previewImages),
      DocumentCardTitle(
        title = "Card",
        shouldTruncate = TRUE
      ),
      DocumentCardActivity(
        activity = "2022-03-23",
        people = list(list(name = "Annie Lindqvist"))
      ),
      DocumentCardActions(
        actions = list(
          list(
            iconProps = list(iconName = "Share"),
            onClick = JS("function() { alert('share icon clicked') }")
          ),
          list(
            iconProps = list(iconName = "Pin"),
            onClick = JS("function() { alert('pin icon clicked') }")
          ),
          list(
            iconProps = list(iconName = "Ringer"),
            onClick = JS("function() { alert('ringer icon clicked') }")
          )
        )
      )
    )
  )
}
server <- function(id) {
  moduleServer(id, function(input, output, session) {})
}
if (interactive()) {
  shinyApp(ui("app"), function(input, output) server("app"))
}
Dropdown
Description
A dropdown menu is a list in which the selected item is always visible while other items are visible on demand by clicking a dropdown button.
For more details and examples visit the official docs. The R package cannot handle each and every case, so for advanced use cases you need to work using the original docs to achieve the desired result.
Usage
Dropdown(...)
Dropdown.shinyInput(inputId, ..., value = defaultValue)
updateDropdown.shinyInput(
  session = shiny::getDefaultReactiveDomain(),
  inputId,
  ...
)
Arguments
| ... | Props to pass to the component. The allowed props are listed below in the Details section. | 
| inputId | ID of the component. | 
| value | Starting value. | 
| session | Object passed as the  | 
Details
-  defaultSelectedKeys string[] | number[]
 Keys that will be initially used to set selected items. This prop is only used whenmultiSelectis true (usedefaultSelectedKeyfor single select). Mutually exclusive withselectedKeys.
-  dropdownWidth number
 Custom width for dropdown. If value is 0, width of the input field is used.
-  isDisabled boolean
 Deprecated at v0.52.0, usedisabledinstead.
-  keytipProps IKeytipProps
 Optional keytip for this dropdown
-  multiSelectDelimiter string
 When multiple items are selected, this will be used to separate values in the dropdown input.
-  notifyOnReselect boolean
 If true,onChangewill still be called when an already-selected item is clicked again in single select mode. (Normally it would not be called in this case.)
-  onChange (event: React.FormEvent<HTMLDivElement>, option?: IDropdownOption, index?: number) => void
 Callback for when the selected option changes.
-  onChanged (option: IDropdownOption, index?: number) => void
 
-  onRenderCaretDown IRenderFunction<IDropdownProps>
 Custom renderer for chevron icon
-  onRenderLabel IRenderFunction<IDropdownProps>
 Custom renderer for the label.
-  onRenderPlaceholder IRenderFunction<IDropdownProps>
 Custom renderer for placeholder text
-  onRenderPlaceHolder IRenderFunction<IDropdownProps>
 Custom renderer for placeholder text
-  onRenderTitle IRenderFunction<IDropdownOption[]>
 Custom renderer for selected option displayed in input
-  options IDropdownOption[]
 Options for the dropdown. If usingdefaultSelectedKeyordefaultSelectedKeys, options must be pure for correct behavior.
-  placeHolder string
 Input placeholder text. Displayed until an option is selected.
-  responsiveMode ResponsiveMode
 By default, the dropdown will render the standard way for screen sizeslargeand above, or in a panel onsmallandmediumscreens. Manually set this prop to override this behavior.
-  selectedKeys string[] | number[] | null
 Keys of the selected items, only used whenmultiSelectis true (useselectedKeyfor single select). If you provide this, you must maintain selection state by observing onChange events and passing a new prop value in when changed. Passing null will clear the selection. Mutually exclusive withdefaultSelectedKeys.
-  styles IStyleFunctionOrObject<IDropdownStyleProps, IDropdownStyles>
 Call to provide customized styling that will layer on top of the variant rules.
-  theme ITheme
 Theme provided by higher order component.
Value
Object with shiny.tag class suitable for use in the UI of a Shiny app.
The update functions return nothing (called for side effects).
Best practices
Layout
- Use a dropdown list when there are multiple choices that can be collapsed under one title, if the list of items is too long, or when space is constrained. 
- Use a dropdown list when the selected option is more important than the alternatives (in contrast to radio buttons where all the choices are visible, putting equal emphasis on all options). 
Content
- Use sentence-style capitalization—only capitalize the first word. For more info, see Capitalization in the Microsoft Writing Style Guide. 
- The dropdown list label should describe what can be found in the menu. 
- Use shortened statements or single words as list options. 
- If there isn't a default option, use "Select an option" as placeholder text. 
- If "None" is an option, include it. 
- Write the choices using parallel construction. For example, start with the same part of speech or verb tense. 
Examples
# Example 1
library(shiny)
library(shiny.fluent)
options <- list(
  list(key = "A", text = "Option A"),
  list(key = "B", text = "Option B"),
  list(key = "C", text = "Option C")
)
ui <- function(id) {
  ns <- NS(id)
  div(
    Dropdown.shinyInput(ns("dropdown"), value = "A", options = options),
    textOutput(ns("dropdownValue"))
  )
}
server <- function(id) {
  moduleServer(id, function(input, output, session) {
    output$dropdownValue <- renderText({
      sprintf("Value: %s", input$dropdown)
    })
  })
}
if (interactive()) {
  shinyApp(ui("app"), function(input, output) server("app"))
}
# Example 2
library(shiny)
library(shiny.fluent)
# Rendering headers and dividers inside dropdown
DropdownMenuItemType <- function(type) {
  JS(paste0("jsmodule['@fluentui/react'].DropdownMenuItemType."), type)
}
ui <- function(id) {
  fluentPage(
    Dropdown(
      "fruit",
      label = "Fruit",
      multiSelect = TRUE,
      options = list(
        list(
          key = "fruitsHeader",
          text = "Fruit",
          itemType = DropdownMenuItemType("Header")
        ),
        list(key = "apple", text = "Apple"),
        list(key = "banana", text = "Banana"),
        list(key = "orange", text = "Orange", disabled = TRUE),
        list(key = "grape", text = "Grape"),
        list(
          key = "divider_1",
          text = "-",
          itemType = DropdownMenuItemType("Divider")
        ),
        list(
          key = "vegetablesHeader",
          text = "Vegetables",
          itemType = DropdownMenuItemType("Header"
          )
        ),
        list(key = "broccoli", text = "Broccoli"),
        list(key = "carrot", text = "Carrot"),
        list(key = "lettuce", text = "Lettuce")
      )
    )
  )
}
server <- function(id) {
  moduleServer(id, function(input, output, session) {})
}
if (interactive()) {
  shinyApp(ui("app"), function(input, output) server("app"))
}
Facepile
Description
A face pile (Facepile) displays a list of personas. Each circle represents a person and contains their image or initials. Often this control is used when sharing who has access to a specific view or file, or when assigning someone a task within a workflow.
For more details and examples visit the official docs. The R package cannot handle each and every case, so for advanced use cases you need to work using the original docs to achieve the desired result.
Usage
Facepile(...)
Arguments
| ... | Props to pass to the component. The allowed props are listed below in the Details section. | 
Details
-  addButtonProps IButtonProps
 Button properties for the add face button
-  ariaDescription string
 ARIA label for persona list
-  ariaLabel string
 Defines the aria label that the screen readers use when focus goes on a list of personas.
-  chevronButtonProps IButtonProps
 Deprecated at v0.70, useoverflowButtonPropsinstead.
-  className string
 Additional css class to apply to the Facepile
-  componentRef IRefObject<IFacepile>
 Optional callback to access the IFacepile interface. Use this instead of ref for accessing the public methods and properties of the component.
-  getPersonaProps (persona: IFacepilePersona) => IPersonaSharedProps
 Method to access properties on the underlying Persona control
-  maxDisplayablePersonas number
 Maximum number of personas to show
-  onRenderPersona IRenderFunction<IFacepilePersona>
 Optional custom renderer for the persona, gets called when there is one persona in personas array
-  onRenderPersonaCoin IRenderFunction<IFacepilePersona>
 Optional custom renderer for the persona coins, gets called when there are multiple persona in personas array
-  overflowButtonProps IButtonProps
 Properties for the overflow icon
-  overflowButtonType OverflowButtonType
 Type of overflow icon to use
-  overflowPersonas IFacepilePersona[]
 Personas to place in the overflow
-  personas IFacepilePersona[]
 Array of IPersonaProps that define each Persona.
-  personaSize PersonaSize
 Size to display the personas
-  showAddButton boolean
 Show add person button
-  styles IStyleFunctionOrObject<IFacepileStyleProps, IFacepileStyles>
 Call to provide customized styling that will layer on top of the variant rules.
-  theme ITheme
 Theme provided by High-Order Component.
Value
Object with shiny.tag class suitable for use in the UI of a Shiny app.
Best practices
Layout
- The face pile empty state should only include an "Add" button. Another variant is to use an input field with placeholder text instructing people to add a person. See the people picker component for the menu used to add people to the face pile list. 
- When there is only one person in the face pile, consider using their name next to the face or initials. 
- When there is a need to show the face pile expanded into a vertical list, include a downward chevron button. Selecting the chevron opens a standard list view of people. 
- When the face pile exceeds a max number of 5 people, show a button at the end of the list indicating how many are not being shown. Clicking or tapping on the overflow would open a standard list view of people. 
- The component can include an "Add" button which can be used for quickly adding a person to the list. 
- When hovering over a person in the face pile, include a tooltip or people card that offers more information about that person. 
Examples
library(shiny)
library(shiny.fluent)
personas <- list(
  list(personaName = "Adams Baker"),
  list(personaName = "Clark Davis"),
  list(personaName = "Evans Frank")
)
ui <- function(id) {
  ns <- NS(id)
  Facepile(personas = personas)
}
server <- function(id) {
  moduleServer(id, function(input, output, session) {})
}
if (interactive()) {
  shinyApp(ui("app"), function(input, output) server("app"))
}
FocusTrapZone
Description
FocusTrapZone is used to trap the focus in any html element. Pressing tab will circle focus within the inner focusable elements of the FocusTrapZone.
Note: Trapping focus will restrict interaction with other elements in the website such as the side nav. Turn off the "Use trap zone" toggle control to allow this interaction to happen again.
For more details and examples visit the official docs. The R package cannot handle each and every case, so for advanced use cases you need to work using the original docs to achieve the desired result.
Usage
FocusTrapCallout(...)
FocusTrapZone(...)
Arguments
| ... | Props to pass to the component. The allowed props are listed below in the Details section. | 
Details
-  ariaLabelledBy string
 Sets the aria-labelledby attribute.
-  componentRef IRefObject<IFocusTrapZone>
 Optional callback to access the IFocusTrapZone interface. Use this instead of ref for accessing the public methods and properties of the component.
-  disabled boolean
 Whether to disable the FocusTrapZone's focus trapping behavior.
-  disableFirstFocus boolean
 Do not put focus onto the first element inside the focus trap zone.
-  elementToFocusOnDismiss HTMLElement
 Sets the element to focus on when exiting the FocusTrapZone.
-  enableAriaHiddenSiblings boolean
 Puts aria-hidden=true on all non-ancestors of the current element, for screen readers. This is an experimental feature that will be graduated to default behavior after testing. This flag will be removed with the next major release.
-  firstFocusableSelector string | (() => string)
 Class name (not actual selector) for first focusable item. Do not append a dot. Only applies iffocusPreviouslyFocusedInnerElementis false.
-  focusPreviouslyFocusedInnerElement boolean
 Specifies which descendant element to focus whenfocus()is called. If false, use the first focusable descendant, filtered by thefirstFocusableSelectorproperty if present. If true, use the element that was focused when the trap zone last had a focused descendant (or fall back to the first focusable descendant if the trap zone has never been focused).
-  forceFocusInsideTrap boolean
 Whether the focus trap zone should force focus to stay inside of it.
-  ignoreExternalFocusing boolean
 If false (the default), the trap zone will restore focus to the element which activated it once the trap zone is unmounted or disabled. Set to true to disable this behavior.
-  isClickableOutsideFocusTrap boolean
 Whether clicks are allowed outside this FocusTrapZone.
Value
Object with shiny.tag class suitable for use in the UI of a Shiny app.
Examples
library(shiny)
library(shiny.fluent)
ui <- function(id) {
  ns <- NS(id)
  reactOutput(ns("focusTrapZone"))
}
server <- function(id) {
  moduleServer(id, function(input, output, session) {
    ns <- session$ns
    output$focusTrapZone <- renderReact({
      useTrapZone <- isTRUE(input$useTrapZone)
      stackStyles <- list(root = list(
        border = if (useTrapZone) '2px solid #ababab' else 'transparent',
        padding = 10
      ))
      textFieldStyles <- list(root = list(width = 300));
      stackTokens = list(childrenGap = 8);
      div(
        FocusTrapZone(
          disabled = !useTrapZone,
          Stack(
            horizontalAlign = "start",
            tokens = stackTokens,
            styles = stackStyles,
            Toggle.shinyInput(ns("useTrapZone"),
              value = FALSE,
              label = "Use trap zone",
              onText = "On (toggle to exit)",
              offText = "Off (toggle to trap focus)"
            ),
            TextField.shinyInput(
              ns("textInput"),
              label = "Input inside trap zone",
              styles = textFieldStyles
            ),
            Link(
              href = "https://bing.com",
              target = "_blank",
              "Hyperlink inside trap zone"
            )
          )
        ),
        Link(
          href = "https://bing.com",
          target = "_blank",
          "Hyperlink outside trap zone"
        )
      )
    })
  })
}
if (interactive()) {
  shinyApp(ui("app"), function(input, output) server("app"))
}
FocusZone
Description
FocusZones abstract arrow key navigation behaviors. Tabbable elements (buttons, anchors, and elements with data-is-focusable='true' attributes) are considered when pressing directional arrow keys and focus is moved appropriately. Tabbing to a zone sets focus only to the current "active" element, making it simple to use the tab key to transition from one zone to the next, rather than through every focusable element.
Using a FocusZone is simple. Just wrap a bunch of content inside of a FocusZone, and arrows and tabbling will be handled for you! See examples below.
For more details and examples visit the official docs. The R package cannot handle each and every case, so for advanced use cases you need to work using the original docs to achieve the desired result.
Usage
FocusZone(...)
Arguments
| ... | Props to pass to the component. The allowed props are listed below in the Details section. | 
Details
-  allowFocusRoot boolean
 Allows focus to park on root when focus is in theFocusZoneat render time.
-  allowTabKey boolean
 Allows tab key to be handled to tab through a list of items in the focus zone, an unfortunate side effect is that users will not be able to tab out of the focus zone and have to hit escape or some other key.
-  ariaDescribedBy string
 Sets the aria-describedby attribute.
-  ariaLabelledBy string
 Sets the aria-labelledby attribute.
-  as React.ElementType
 A component that should be used as the root element of the FocusZone component.
-  checkForNoWrap boolean
 Determines whether to check for data-no-horizontal-wrap or data-no-vertical-wrap attributes when determining how to move focus
-  className string
 Additional class name to provide on the root element, in addition to the ms-FocusZone class.
-  componentRef IRefObject<IFocusZone>
 Optional callback to access the IFocusZone interface. Use this instead of ref for accessing the public methods and properties of the component.
-  defaultActiveElement string
 Optionally provide a selector for identifying the initial active element.
-  defaultTabbableElement string | ((root: HTMLElement) => HTMLElement)
 Optionally defines the initial tabbable element inside the FocusZone. If a string is passed then it is treated as a selector for identifying the initial tabbable element. If a function is passed then it uses the root element as a parameter to return the initial tabbable element.
-  direction FocusZoneDirection
 Defines which arrows to react to.
-  disabled boolean
 If set, the FocusZone will not be tabbable and keyboard navigation will be disabled. This does not affect disabled attribute of any child.
-  doNotAllowFocusEventToPropagate boolean
 Whether the FocusZone should allow focus events to propagate past the FocusZone.
-  elementType any
 Element type the root element will use. Default is "div".
-  handleTabKey FocusZoneTabbableElements
 Allows tab key to be handled to tab through a list of items in the focus zone, an unfortunate side effect is that users will not be able to tab out of the focus zone and have to hit escape or some other key.
-  isCircularNavigation boolean
 If set, will cycle to the beginning of the targets once the user navigates to the next target while at the end, and to the end when navigate to the previous at the beginning.
-  isInnerZoneKeystroke (ev: React.KeyboardEvent<HTMLElement>) => boolean
 If provided, this callback will be executed on keypresses to determine if the user intends to navigate into the inner zone. Returning true will ask the first inner zone to set focus.
-  onActiveElementChanged (element?: HTMLElement, ev?: React.FocusEvent<HTMLElement>) => void
 Callback for when one of immediate children elements gets active by getting focused or by having one of its respective children elements focused.
-  onBeforeFocus (childElement?: HTMLElement) => boolean
 Callback method for determining if focus should indeed be set on the given element.
-  onFocus (event: React.FocusEvent<HTMLElement | FocusZone>) => void
 Callback called when "focus" event triggered in FocusZone.
-  onFocusNotification () => void
 Callback to notify creators that focus has been set on the FocusZone
-  pagingSupportDisabled boolean
 Determines whether to disable the paging support for Page Up and Page Down keyboard scenarios.
-  preventDefaultWhenHandled boolean
 If true, FocusZone prevents the default behavior of Keyboard events when changing focus between elements.
-  preventFocusRestoration boolean
 If true, prevents the FocusZone from attempting to restore the focus to the inner element when the focus is on the root element after componentDidUpdate.
-  rootProps React.HTMLAttributes<HTMLDivElement>
 Deprecated at v1.12.1. DIV props provided to the FocusZone will be mixed into the root element.
-  shouldEnterInnerZone (ev: React.KeyboardEvent<HTMLElement>) => boolean
 Callback function that will be executed on keypresses to determine if the user intends to navigate into the inner (nested) zone. Returning true will ask the first inner zone to set focus.
-  shouldFocusInnerElementWhenReceivedFocus boolean
 If true and FocusZone's root element (container) receives focus, the focus will land either on the defaultTabbableElement (if set) or on the first tabbable element of this FocusZone. Usually a case for nested focus zones, when the nested focus zone's container is a focusable element.
-  shouldFocusOnMount boolean
 Determines if a default tabbable element should be force focused on FocusZone mount. @default false
-  shouldInputLoseFocusOnArrowKey (inputElement: HTMLInputElement) => boolean
 A callback method to determine if the input element should lose focus on arrow keys
-  shouldRaiseClicks boolean
 Determines whether the FocusZone will walk up the DOM trying to invoke click callbacks on focusable elements on Enter and Space keydowns to ensure accessibility for tags that don't guarantee this behavior.
-  shouldReceiveFocus (childElement?: HTMLElement) => boolean
 Callback method for determining if focus should indeed be set on the given element.
-  shouldResetActiveElementWhenTabFromZone boolean
 If true and TAB key is not handled by FocusZone, resets current active element to null value. For example, when roving index is not desirable and focus should always reset to the default tabbable element.
-  stopFocusPropagation boolean
 Whether the FocusZone should allow focus events to propagate past the FocusZone.
Value
Object with shiny.tag class suitable for use in the UI of a Shiny app.
Examples
library(shiny)
library(shiny.fluent)
tokens <- list(childrenGap = 20)
ui <- function(id) {
  ns <- NS(id)
  Stack(
    tokens = tokens,
    horizontalAlign = "start",
    FocusZone(
      Stack(
        tokens = tokens,
        horizontal = TRUE,
        verticalAlign = "center",
        tags$span("Enabled FocusZone:"),
        DefaultButton(text = "Button 1"),
        DefaultButton(text = "Button 2"),
        TextField(placeholder = "FocusZone TextField"),
        DefaultButton(text = "Button 3")
      )
    ),
    DefaultButton(text = "Tabbable Element 1"),
    FocusZone(
      disabled = TRUE,
      Stack(
        tokens = tokens,
        horizontal = TRUE,
        verticalAlign = "center",
        tags$span("Disabled FocusZone:"),
        DefaultButton(text = "Button 1"),
        DefaultButton(text = "Button 2")
      )
    ),
    TextField(placeholder = "Tabbable Element 2")
  )
}
server <- function(id) {
  moduleServer(id, function(input, output, session) {})
}
if (interactive()) {
  shinyApp(ui("app"), function(input, output) server("app"))
}
Icon
Description
In a user interface, an icon is an image that represents an application, a capability, or some other concept or specific entity with meaning for the user. An icon is usually selectable but can also be a nonselectable image, such as a company's logo.
For a list of icons, visit our icon documentation.
Note that icons are not bundled by default and typically must be loaded by calling initializeIcons from the @uifabric/icons package at the root of your application. See the icon documentation for more details.
For more details and examples visit the official docs. The R package cannot handle each and every case, so for advanced use cases you need to work using the original docs to achieve the desired result.
Usage
FontIcon(...)
Icon(...)
ImageIcon(...)
Arguments
| ... | Props to pass to the component. The allowed props are listed below in the Details section. | 
Details
-  className string
 Custom class to style the icon.
-  iconName string
 The name of the icon to use from the icon font. If string is empty, a placeholder icon will be rendered the same width as an icon.
-  ariaLabel string
 The aria label of the icon for the benefit of screen readers.
-  iconName string
 The name of the icon to use from the icon font. If string is empty, a placeholder icon will be rendered the same width as an icon.
-  iconType IconType
 The type of icon to render (image or icon font).
-  imageErrorAs React.ComponentType<IImageProps>
 If rendering an image icon, this component will be rendered in the event that loading the image fails.
-  imageProps IImageProps
 If rendering an image icon, these props will be passed to the Image component.
-  styles IStyleFunctionOrObject<IIconStyleProps, IIconStyles>
 Gets the styles for an Icon.
-  theme ITheme
 
-  className string
 Custom class to style the icon.
-  imageProps IImageProps
 Props passed to the Image component.
Value
Object with shiny.tag class suitable for use in the UI of a Shiny app.
Examples
library(shiny)
library(shiny.fluent)
style <- list(fontSize = 50, margin = 10)
ui <- function(id) {
  ns <- NS(id)
  tags$div(
    FontIcon(iconName = "CompassNW", style = style),
    FontIcon(iconName = "Dictionary", style = style),
    FontIcon(iconName = "TrainSolid", style = style)
  )
}
server <- function(id) {
  moduleServer(id, function(input, output, session) {})
}
if (interactive()) {
  shinyApp(ui("app"), function(input, output) server("app"))
}
GroupedList
Description
A grouped list (GroupedList) allows you to render a set of items as multiple lists with various grouping properties.
For more details and examples visit the official docs. The R package cannot handle each and every case, so for advanced use cases you need to work using the original docs to achieve the desired result.
Usage
GroupedList(...)
GroupHeader(...)
Arguments
| ... | Props to pass to the component. The allowed props are listed below in the Details section. | 
Details
-  className string
 Custom className
-  compact boolean
 Boolean value to indicate if the component should render in compact mode. Set to false by default
-  componentRef IRefObject<{}>
 
-  expandButtonProps React.HTMLAttributes<HTMLButtonElement>
 Props for expand/collapse button
-  footerText string
 Text to display for the group footer.
-  group IGroup
 The group to be rendered by the header.
-  groupIndex number
 The index of the group.
-  groupLevel number
 The indent level of the group.
-  groups IGroup[]
 Stores parent group's children.
-  indentWidth number
 Width corresponding to a single level. This is multiplied by the groupLevel to get the full spacer width for the group.
-  isCollapsedGroupSelectVisible boolean
 Determines if the group selection check box is shown for collapsed groups.
-  isGroupLoading (group: IGroup) => boolean
 Callback to determine if a group has missing items and needs to load them from the server.
-  isSelected boolean
 Deprecated at v.65.1 and will be removed by v 1.0. Useselectedinstead.
-  loadingText string
 Text shown on group headers to indicate the group is being loaded.
-  onGroupHeaderClick (group: IGroup) => void
 Callback for when the group header is clicked.
-  onRenderTitle IRenderFunction<IGroupHeaderProps>
 Override which allows the caller to provider a custom renderer for the GroupHeader title.
-  onToggleCollapse (group: IGroup) => void
 Callback for when the group is expanded or collapsed.
-  onToggleSelectGroup (group: IGroup) => void
 Callback for when the group is selected.
-  onToggleSummarize (group: IGroup) => void
 Callback for when the group "Show All" link is clicked
-  selected boolean
 If all items in the group are selected.
-  selectionMode SelectionMode
 The selection mode of the list the group lives within.
-  showAllLinkText string
 Text to display for the group "Show All" link.
-  theme ITheme
 Theme provided by the Higher Order Component
-  viewport IViewport
 A reference to the viewport in which the header is rendered.
-  className string
 Optional class name to add to the root element.
-  compact boolean
 Boolean value to indicate if the component should render in compact mode. Set to false by default
-  componentRef IRefObject<IGroupedList>
 Optional callback to access the IGroupedList interface. Use this instead of ref for accessing the public methods and properties of the component.
-  dragDropEvents IDragDropEvents
 Map of callback functions related to drag and drop functionality.
-  dragDropHelper IDragDropHelper
 helper to manage drag/drop across item and groups
-  eventsToRegister { eventName: string; callback: (context: IDragDropContext, event?: any) => void; }[]
 Event names and corresponding callbacks that will be registered to groups and rendered elements
-  focusZoneProps IFocusZoneProps
 Optional properties to pass through to the FocusZone.
-  getGroupHeight (group: IGroup, groupIndex: number) => number
 Optional function to override default group height calculation used by list virtualization.
-  groupProps IGroupRenderProps
 Optional override properties to render groups.
-  groups IGroup[]
 Optional grouping instructions.
-  items any[]
 List of items to render.
-  listProps IListProps
 Optional properties to pass through to the list components being rendered.
-  onGroupExpandStateChanged (isSomeGroupExpanded: boolean) => void
 Optional callback when the group expand state changes between all collapsed and at least one group is expanded.
-  onRenderCell (nestingDepth?: number, item?: any, index?: number) => React.ReactNode
 Rendering callback to render the group items.
-  onShouldVirtualize (props: IListProps) => boolean
 Optional callback to determine whether the list should be rendered in full, or virtualized. Virtualization will add and remove pages of items as the user scrolls them into the visible range. This benefits larger list scenarios by reducing the DOM on the screen, but can negatively affect performance for smaller lists. The default implementation will virtualize when this callback is not provided.
-  selection ISelection
 Optional selection model to track selection state.
-  selectionMode SelectionMode
 Controls how/if the list manages selection.
-  styles IStyleFunctionOrObject<IGroupedListStyleProps, IGroupedListStyles>
 Style function to be passed in to override the themed or default styles
-  theme ITheme
 Theme that is passed in from Higher Order Component
-  usePageCache boolean
 boolean to control if pages containing unchanged items should be cached, this is a perf optimization The same property in List.Props
-  viewport IViewport
 Optional Viewport, provided by the parent component.
-  styles IStyleFunctionOrObject<IGroupFooterStyleProps, IGroupFooterStyles>
 Style function to be passed in to override the themed or default styles
-  checked boolean
 
-  theme ITheme
 
-  ariaPosInSet number
 Defines an element's number or position in the current set of listitems or treeitems
-  ariaSetSize number
 Defines the number of items in the current set of listitems or treeitems
-  expandButtonIcon string
 Defines the name of a custom icon to be used for group headers. If not set, the default icon will be used
-  expandButtonProps React.HTMLAttributes<HTMLButtonElement>
 Native props for the GroupHeader expand and collapse button
-  groupedListId string
 GroupedList id for aria-controls
-  onRenderGroupHeaderCheckbox IRenderFunction<IGroupHeaderCheckboxProps>
 If provided, can be used to render a custom checkbox
-  selectAllButtonProps React.HTMLAttributes<HTMLButtonElement>
 Native props for the GroupHeader select all button
-  styles IStyleFunctionOrObject<IGroupHeaderStyleProps, IGroupHeaderStyles>
 Style function to be passed in to override the themed or default styles
-  useFastIcons boolean
 Whether to use fast icon and check components. The icons can't be targeted by customization but are still customizable via class names.
-  collapseAllVisibility CollapseAllVisibility
 Flag to indicate whether to ignore the collapsing icon on header.
-  footerProps IGroupFooterProps
 Information to pass in to the group footer.
-  getGroupItemLimit (group: IGroup) => number
 Grouping item limit.
-  headerProps IGroupHeaderProps
 Information to pass in to the group header.
-  isAllGroupsCollapsed boolean
 Boolean indicating if all groups are in collapsed state.
-  onRenderFooter IRenderFunction<IGroupFooterProps>
 Override which allows the caller to provide a custom footer.
-  onRenderHeader IRenderFunction<IGroupHeaderProps>
 Override which allows the caller to provide a custom header.
-  onRenderShowAll IRenderFunction<IGroupShowAllProps>
 Override which allows the caller to provide a custom Show All link.
-  onToggleCollapseAll (isAllCollapsed: boolean) => void
 Callback for when all groups are expanded or collapsed.
-  role string
 Override which allows the caller to provide a custom aria role
-  showAllProps IGroupShowAllProps
 Information to pass in to the group Show all footer.
-  showEmptyGroups boolean
 Boolean indicating if empty groups are shown
-  showAllLinkText string
 The Show All link text.
-  styles IStyleFunctionOrObject<IGroupShowAllStyleProps, IGroupShowAllStyles>
 Style function to be passed in to override the themed or default styles
-  count number
 Count of spacer(s)
-  indentWidth number
 How much to indent
-  styles IStyleFunctionOrObject<IGroupSpacerStyleProps, IGroupSpacerStyles>
 Style function to be passed in to override the themed or default styles
-  theme ITheme
 Theme from Higher Order Component
Value
Object with shiny.tag class suitable for use in the UI of a Shiny app.
Best practices
FAQ
My List is not re-rendering when I mutate its items. What should I do?
To determine if the list within the grouped list should re-render its contents, the component performs a referential equality check within its shouldComponentUpdate method.
This is done to minimize the performance overhead associating with re-rendering the virtualized List pages, as recommended by the React documentation.
As a result of this implementation, the inner list will not determine it should re-render if the array values are mutated.
To avoid this problem, we recommend re-creating the items array backing the grouped list by using a method such as Array.prototype.concat or ES6 spread syntax shown below:
public appendItems(): void {
  const { items } = this.state;
  this.setState({
    items: [...items, ...['Foo', 'Bar']]
  })
}
public render(): JSX.Element {
  const { items } = this.state;
  return <GroupedList items={items} />;
}
By re-creating the items array without mutating the values, the inner List will correctly determine its contents have changed and then it should re-render with the new values.
Examples
# Example 1
library(shiny)
library(shiny.fluent)
ui <- function(id) {
  ns <- NS(id)
  GroupedList(
    items = list("Item A", "Item B", "Item C", "Item D", "Item E"),
    groups = list(
      list(key = "g1", name = "Some items", startIndex = 0, count = 2),
      list(key = "g2", name = "More items", startIndex = 2, count = 3)
    ),
    selectionMode = 0,
    onRenderCell = JS("(depth, item) => (
      jsmodule['react'].createElement('span', { style: { paddingLeft: 49 } }, item)
    )")
  )
}
server <- function(id) {
  moduleServer(id, function(input, output, session) {})
}
if (interactive()) {
  shinyApp(ui("app"), function(input, output) server("app"))
}
# Example 2
library(shiny)
library(shiny.fluent)
ui <- function(id) {
  fluentPage(
    GroupedList(
      items = list("Item A", "Item B", "Item C", "Item D", "Item E"),
      groups = list(
        list(key = "g1", name = "Some items", startIndex = 0, count = 2),
        list(key = "g2", name = "More items", startIndex = 2, count = 3)
      ),
      selectionMode = 0,
      onRenderCell = JS(
        "(depth, item) => (
          jsmodule['react'].createElement('span', { style: { paddingLeft: 50 } }, item)
        )"
      ),
      groupProps = list(
        onRenderHeader = JS(
          "(props) => (
            jsmodule['react'].createElement(
              jsmodule['@fluentui/react'].GroupHeader,
              { ...props, styles: { headerCount: { display: 'none' } } },
              props
            )
          )"
        )
      )
    )
  )
}
server <- function(id) {
  moduleServer(id, function(input, output, session) {})
}
if (interactive()) {
  shinyApp(ui("app"), function(input, output) server("app"))
}
HoverCard
Description
Hover cards (HoverCard) show commands and information, such as metadata and activity, when someone hovers over an item.
- Tabbing with a keyboard to the element triggering the HoverCard to open on focus (see first example). In this case no further navigation within the card is available and navigating to the next element will close the card. 
- Tabbing with a keyboard to the element triggering the HoverCard and opening when the hotKey is pressed (see second example). When the card is opened it will automatically focus the first focusable element of the card content. 
For more details and examples visit the official docs. The R package cannot handle each and every case, so for advanced use cases you need to work using the original docs to achieve the desired result.
Usage
HoverCard(...)
Arguments
| ... | Props to pass to the component. The allowed props are listed below in the Details section. | 
Details
-  compactCardHeight number
 Height of compact card
-  expandedCardHeight number
 Height of expanded card
-  mode ExpandingCardMode
 Use to open the card in expanded format and not wait for the delay
-  onRenderCompactCard IRenderFunction<any>
 Render function to populate compact content area
-  onRenderExpandedCard IRenderFunction<any>
 Render function to populate expanded content area
-  cardDismissDelay number
 Length of card dismiss delay. A min number is necessary for pointer to hop between target and card
-  cardOpenDelay number
 Length of compact card delay
-  className string
 Additional CSS class(es) to apply to the HoverCard root element.
-  componentRef IRefObject<IHoverCard>
 Optional callback to access the IHoverCardHost interface. Use this instead of ref for accessing the public methods and properties of the component.
-  eventListenerTarget HTMLElement | string | null
 This prop is to separate the target to anchor hover card from the target to attach event listener. If set, this prop separates the target to anchor the hover card from the target to attach the event listener. When noeventListenerTargetgiven, HoverCard will usetargetprop or its root to set event listener.
-  expandedCardOpenDelay number
 Time in ms when expanded card should open after compact card
-  expandingCardProps IExpandingCardProps
 Additional ExpandingCard props to pass through HoverCard like renderers, target. gapSpace etc. Used along with 'type' prop set to HoverCardType.expanding. Reference detail properties in ICardProps and IExpandingCardProps.
-  instantOpenOnClick boolean
 Enables instant open of the full card upon click
-  onCardExpand () => void
 Callback when visible card is expanded.
-  onCardHide () => void
 Callback when card hides
-  onCardVisible () => void
 Callback when card becomes visible
-  openHotKey KeyCodes
 HotKey used for opening the HoverCard when tabbed to target.
-  plainCardProps IPlainCardProps
 Additional PlainCard props to pass through HoverCard like renderers, target, gapSpace etc. Used along with 'type' prop set to HoverCardType.plain. See for more details ICardProps and IPlainCardProps interfaces.
-  setAriaDescribedBy boolean
 Whether or not to mark the container as described by the hover card. If not specified, the caller should mark as element as described by the hover card id.
-  setInitialFocus boolean
 Set to true to set focus on the first focusable element in the card. Works in pair with the 'trapFocus' prop.
-  shouldBlockHoverCard () => void
 Should block hover card or not
-  sticky boolean
 If true disables Card dismiss upon mouse leave, so that card sticks around.
-  styles IStyleFunctionOrObject<IHoverCardStyleProps, IHoverCardStyles>
 Custom styles for this component
-  target HTMLElement | string | null
 Optional target element to tag hover card on. If not provided and using HoverCard as a wrapper, don't set the 'data-is-focusable=true' attribute to the root of the wrapped child. If no target is given, HoverCard will use its root as a target and become the focusable element with a focus listener attached to it.
-  theme ITheme
 Theme provided by higher order component.
-  trapFocus boolean
 Set to true if you want to render the content of the HoverCard in a FocusTrapZone for accessibility reasons. Optionally 'setInitialFocus' prop can be set to true to move focus inside the FocusTrapZone.
-  type HoverCardType
 Type of the hover card to render.
-  onRenderPlainCard IRenderFunction<any>
 Render function to populate compact content area
Value
Object with shiny.tag class suitable for use in the UI of a Shiny app.
Best practices
Layout
- Hover cards contain both compact and expanded states, with the compact state appearing after 500 milliseconds and the expanded state appearing as the user continues to hover after 1500 milliseconds. 
- The hover card positions itself automatically, depending upon where the target is on the viewport. Position the target so the card doesn’t obstruct inline commanding on the item. 
Examples
library(shiny)
library(shiny.fluent)
ui <- function(id) {
  ns <- NS(id)
  HoverCard(
    type = "PlainCard",
    plainCardProps = JS("{
      onRenderPlainCard: (a, b, c) => 'HoverCard contents',
      style: { margin: 10 }
    }"),
    "Hover over me"
  )
}
server <- function(id) {
  moduleServer(id, function(input, output, session) {})
}
if (interactive()) {
  shinyApp(ui("app"), function(input, output) server("app"))
}
Image
Description
An image is a graphic representation of something (e.g photo or illustration). The borders have been added to these examples in order to help visualize empty space in the image frame.
For more details and examples visit the official docs. The R package cannot handle each and every case, so for advanced use cases you need to work using the original docs to achieve the desired result.
Usage
Image(...)
Arguments
| ... | Props to pass to the component. The allowed props are listed below in the Details section. | 
Details
-  className string
 Additional css class to apply to the Component
-  coverStyle ImageCoverStyle
 Specifies the cover style to be used for this image. If not specified, this will be dynamically calculated based on the aspect ratio for the image.
-  errorSrc string
 Deprecated at v1.3.6, to replace the src in case of errors, useonLoadingStateChangeinstead and rerender the Image with a difference src.
-  imageFit ImageFit
 Used to determine how the image is scaled and cropped to fit the frame.
-  maximizeFrame boolean
 If true, the image frame will expand to fill its parent container.
-  onLoadingStateChange (loadState: ImageLoadState) => void
 Optional callback method for when the image load state has changed. The 'loadState' parameter indicates the current state of the Image.
-  shouldFadeIn boolean
 If true, fades the image in when loaded.
-  shouldStartVisible boolean
 If true, the image starts as visible and is hidden on error. Otherwise, the image is hidden until it is successfully loaded. This disables shouldFadeIn.
-  styles IStyleFunctionOrObject<IImageStyleProps, IImageStyles>
 Call to provide customized styling that will layer on top of the variant rules
-  theme ITheme
 Theme provided by HOC.
Value
Object with shiny.tag class suitable for use in the UI of a Shiny app.
Examples
library(shiny)
library(shiny.fluent)
ui <- function(id) {
  ns <- NS(id)
  Image(src = "https://via.placeholder.com/350x150")
}
server <- function(id) {
  moduleServer(id, function(input, output, session) {})
}
if (interactive()) {
  shinyApp(ui("app"), function(input, output) server("app"))
}
Keytip
Description
A Keytip is a small popup near a component that indicates a key sequence that will trigger that component. These are not to be confused with keyboard shortcuts; they are instead key sequences to traverse through levels of UI components. Technically, a Keytip is a wrapper around a Callout where the target element is discovered through a 'data-ktp-target' attribute on that element.
To enable Keytips on your page, a developer will add the KeytipLayer component somewhere in their document. It can be added anywhere in your document, but must only be added once. Use the registerKeytip utility helper to add a Keytip. A user will enter and exit keytip mode with a IKeytipTransitionSequence, which is a key with any amount of modifiers (Alt, Shift, etc).
By default, the entry and exit sequence is 'Alt-Windows' (Meta) on Windows and 'Option-Control' on macOS. There is also a sequence to 'return' up a level of keytips while traversing. This is by default 'Esc'.
Fluent UI React components that have keytips enabled have an optional 'keytipProps' prop which handles registering, unregistering, and rendering of the keytip. The keySequences of the Keytip should be the full sequence to get to that keytip. There is a 'buildKeytipConfigMap' helper which will build a map of ID -> IKeytipProps to assist in defining your keytips.
For more details and examples visit the official docs. The R package cannot handle each and every case, so for advanced use cases you need to work using the original docs to achieve the desired result.
Keytips
Description
For more details and examples visit the official docs. The R package cannot handle each and every case, so for advanced use cases you need to work using the original docs to achieve the desired result.
Usage
KeytipLayer(...)
Arguments
| ... | Props to pass to the component. The allowed props are listed below in the Details section. | 
Details
-  componentRef IRefObject<IKeytipLayer>
 Optional callback to access the KeytipLayer component. Use this instead of ref for accessing the public methods and properties of the component.
-  content string
 String to put inside the layer to be used for the aria-describedby for the component with the keytip Should be one of the starting sequences
-  keytipExitSequences IKeytipTransitionKey[]
 List of key sequences that will exit keytips mode
-  keytipReturnSequences IKeytipTransitionKey[]
 List of key sequences that execute the return functionality in keytips (going back to the previous level of keytips)
-  keytipStartSequences IKeytipTransitionKey[]
 List of key sequences that will start keytips mode
-  onEnterKeytipMode () => void
 Callback function triggered when keytip mode is entered
-  onExitKeytipMode (ev?: React.KeyboardEvent<HTMLElement> | React.MouseEvent<HTMLElement>) => void
 Callback function triggered when keytip mode is exited. ev is the Mouse or Keyboard Event that triggered the exit, if any.
-  styles IStyleFunctionOrObject<IKeytipLayerStyleProps, IKeytipLayerStyles>
 (Optional) Call to provide customized styling.
-  calloutProps ICalloutProps
 ICalloutProps to pass to the callout element
-  content string
 Content to put inside the keytip
-  disabled boolean
 T/F if the corresponding control for this keytip is disabled
-  hasDynamicChildren boolean
 Whether or not this keytip will have children keytips that are dynamically created (DOM is generated on keytip activation). Common cases are a Pivot or Modal.
-  hasMenu boolean
 Whether or not this keytip belongs to a component that has a menu Keytip mode will stay on when a menu is opened, even if the items in that menu have no keytips
-  keySequences string[]
 Array of KeySequences which is the full key sequence to trigger this keytip Should not include initial 'start' key sequence
-  offset Point
 Offset x and y for the keytip, added from the top-left corner By default the keytip will be anchored to the bottom-center of the element
-  onExecute (executeTarget: HTMLElement | null, target: HTMLElement | null) => void
 Function to call when this keytip is activated. 'executeTarget' is the DOM element marked with 'data-ktp-execute-target'. 'target' is the DOM element marked with 'data-ktp-target'.
-  onReturn (executeTarget: HTMLElement | null, target: HTMLElement | null) => void
 Function to call when the keytip is the currentKeytip and a return sequence is pressed. 'executeTarget' is the DOM element marked with 'data-ktp-execute-target'. 'target' is the DOM element marked with 'data-ktp-target'.
-  overflowSetSequence string[]
 Full KeySequence of the overflow set button, will be set automatically if this keytip is inside an overflow
-  styles IStyleFunctionOrObject<IKeytipStyleProps, IKeytipStyles>
 Optional styles for the component.
-  theme ITheme
 Theme for the component
-  visible boolean
 T/F if the keytip is visible
Value
Object with shiny.tag class suitable for use in the UI of a Shiny app.
Examples
library(shiny)
library(shiny.fluent)
makeScript <- function(js) {
  tagList(
    shiny.react::reactDependency(),
    htmltools::htmlDependency(
      name = "KeytipsExample",
      version = "0", # Not used.
      src = c(href = ""), # Not used.
      head = paste0("<script>", js, "</script>")
    )
  )
}
ui <- function(id) {
  ns <- NS(id)
  tagList(
    makeScript(paste0("setTimeout(() => {
      const btnExecute = (el) => {
        el.click();
      };
      const keytipConfig = {
        keytips: [
          // Button example
          {
            id: 'Button',
            content: '1A',
            optionalProps: {
              onExecute: btnExecute,
            },
          },
          {
            id: 'CompoundButton',
            content: '1B',
            optionalProps: {
              onExecute: btnExecute,
            },
          },
          {
            id: 'ButtonWithMenu',
            content: '2A',
            optionalProps: {
              onExecute: btnExecute,
            },
            children: [
              {
                id: 'ButtonMenuItem1',
                content: 'E',
                optionalProps: {
                  onExecute: btnExecute,
                },
              },
              {
                id: 'ButtonMenuItem2',
                content: '8',
                optionalProps: {
                  onExecute: btnExecute,
                },
              },
            ],
          }
        ],
      };
      keytipMap = jsmodule['@fluentui/react'].buildKeytipConfigMap(keytipConfig);
      window.buttonProps = {
        items: [
          {
            key: 'buttonMenuItem1',
            text: 'Menu Item 1',
            keytipProps: keytipMap.ButtonMenuItem1,
            onClick: () => Shiny.setInputValue('", ns("button3"), "', Math.random())
          },
          {
            key: 'buttonMenuItem2',
            text: 'Menu Item 2',
            keytipProps: keytipMap.ButtonMenuItem2,
            onClick: () => Shiny.setInputValue('", ns("button3"), "', Math.random())
          },
        ],
      };
    })")),
    textOutput(ns("keytipsResult")),
    div(
      Label(
        paste0(
          "To open keytips, hit 'Alt-Windows' on Windows/Linux and 'Option-Control' on macOS.",
          "Keytips will appear. Type what you see, e.g. 1 and then A to 'click' the first button."
        )
      ),
      Label(
        paste0(
          "When multiple Keytips start with the same character,",
          "typing that character will filter the visible keytips."
        )
      ),
      KeytipLayer(),
      Stack(horizontal = TRUE, tokens = list(childrenGap = 20),
        DefaultButton.shinyInput(
          ns("button1"),
          keytipProps = JS("keytipMap.Button"),
          text = "Button"
        ),
        CompoundButton.shinyInput(
          ns("button2"),
          style = list(marginBottom = 28),
          keytipProps = JS("keytipMap.CompoundButton"),
          text = "Compound Button",
          secondaryText = 'With a Keytip'
        ),
        DefaultButton.shinyInput(
          ns("button3"),
          keytipProps = JS("keytipMap.ButtonWithMenu"),
          text = "Button with Menu",
          menuProps = JS("buttonProps")
        )
      )
    )
  )
}
server <- function(id) {
  moduleServer(id, function(input, output, session) {
    clicks <- reactiveVal(0)
    addClick <- function() clicks(clicks() + 1)
    output$keytipsResult <- renderText(paste("Buttons clicked: ", clicks()))
    observeEvent(input$button1, addClick())
    observeEvent(input$button2, addClick())
    observeEvent(input$button3, addClick())
  })
}
if (interactive()) {
  shinyApp(ui("app"), function(input, output) server("app"))
}
Label
Description
Labels give a name or title to a control or group of controls, including text fields, check boxes, combo boxes, radio buttons, and drop-down menus.
For more details and examples visit the official docs. The R package cannot handle each and every case, so for advanced use cases you need to work using the original docs to achieve the desired result.
Usage
Label(...)
Arguments
| ... | Props to pass to the component. The allowed props are listed below in the Details section. | 
Details
-  as IComponentAs<React.AllHTMLAttributes<HTMLElement>>
 Render the root element as another type.
-  componentRef IRefObject<ILabel>
 Optional callback to access the ILabel interface. Use this instead of ref for accessing the public methods and properties of the component.
-  disabled boolean
 Renders the label as disabled.
-  required boolean
 Whether the associated form field is required or not
-  styles IStyleFunctionOrObject<ILabelStyleProps, ILabelStyles>
 Styles for the label.
-  theme ITheme
 Theme provided by HOC.
Value
Object with shiny.tag class suitable for use in the UI of a Shiny app.
Best practices
Layout
- Labels should be close to the control they're paired with. 
Content
- Labels should describe the purpose of the control. 
- Use sentence-style capitalization—only capitalize the first word. For more info, see Capitalization in the Microsoft Writing Style Guide. 
- Be short and concise. 
- Use nouns or short noun phrases. 
- Don't use labels as instructional text. For example, "Click to get started". 
Examples
library(shiny)
library(shiny.fluent)
ui <- function(id) {
  ns <- NS(id)
  Label("Required label", required = TRUE)
}
server <- function(id) {
  moduleServer(id, function(input, output, session) {})
}
if (interactive()) {
  shinyApp(ui("app"), function(input, output) server("app"))
}
Layer
Description
A Layer is a technical component that does not have specific Design guidance.
Layers are used to render content outside of a DOM tree, at the end of the document. This allows content to escape traditional boundaries caused by "overflow: hidden" css rules and keeps it on the top without using z-index rules. This is useful for example in ContextualMenu and Tooltip scenarios, where the content should always overlay everything else.
There are some special considerations. Due to the nature of rendering content elsewhere asynchronously, React refs within content will not be resolvable synchronously at the time the Layer is mounted. Therefore, to use refs correctly, use functional refs ref={ (el) => { this._root = el; } rather than string refs ref='root'. Additionally measuring the physical Layer element will not include any of the children, since it won't render it. Events that propgate from within the content will not go through the Layer element as well.
For more details and examples visit the official docs. The R package cannot handle each and every case, so for advanced use cases you need to work using the original docs to achieve the desired result.
Usage
Layer(...)
LayerHost(...)
Arguments
| ... | Props to pass to the component. The allowed props are listed below in the Details section. | 
Details
-  className string
 Additional css class to apply to the Layer
-  componentRef IRefObject<ILayer>
 Optional callback to access the ILayer interface. Use this instead of ref for accessing the public methods and properties of the component.
-  eventBubblingEnabled boolean
 When enabled, Layer allows events to bubble up from Layer content. Traditionally Layer has not had this behavior. This prop preserves backwards compatibility by default while allowing users to opt in to the new event bubbling functionality.
-  hostId string
 The optional id property provided on a LayerHost that this Layer should render within. The LayerHost does not need to be immediately available but once has been rendered, and if missing, we'll avoid trying to render the Layer content until the host is available. If an id is not provided, we will render the Layer content in a fixed position element rendered at the end of the document.
-  insertFirst boolean
 Whether the layer should be added as the first child of the host. If true, the layer will be inserted as the first child of the host By default, the layer will be appended at the end to the host
-  onLayerDidMount () => void
 Callback for when the layer is mounted.
-  onLayerMounted () => void
 Callback for when the layer is mounted.
-  onLayerWillUnmount () => void
 Callback for when the layer is unmounted.
-  styles IStyleFunctionOrObject<ILayerStyleProps, ILayerStyles>
 Call to provide customized styling that will layer on top of the variant rules
-  theme ITheme
 Theme provided by HOC.
Value
Object with shiny.tag class suitable for use in the UI of a Shiny app.
Examples
library(shiny)
library(shiny.fluent)
ui <- function(id) {
  ns <- NS(id)
  div(
    style = "margin-top: 60px; border: 1px solid navy; padding: 10px; background: #eee;",
    Checkbox.shinyInput(ns("useLayer"), value = FALSE, label = "Display a message in a layer"),
    reactOutput(ns("layer"))
  )
}
server <- function(id) {
  moduleServer(id, function(input, output, session) {
    output$layer <- renderReact({
      box <- div(
        style = "background-color: #60C7FF; margin: 10px; padding: 10px",
        "Hello!"
      )
      if (isTRUE(input$useLayer)) Layer(box)
    })
  })
}
if (interactive()) {
  shinyApp(ui("app"), function(input, output) server("app"))
}
library(shiny)
library(shiny.fluent)
ui <- function(id) {
  ns <- NS(id)
  div(
    LayerHost(id = "host", style = list(border = "1px dashed", padding = 10)),
    "Layer children are rendered in the LayerHost",
    Layer(hostId = "host", "Content")
  )
}
server <- function(id) {
  moduleServer(id, function(input, output, session) {})
}
if (interactive()) {
  shinyApp(ui("app"), function(input, output) server("app"))
}
Link
Description
Links lead to another part of an app, other pages, or help articles. They can also be used to initiate commands.
For more details and examples visit the official docs. The R package cannot handle each and every case, so for advanced use cases you need to work using the original docs to achieve the desired result.
Usage
Link(...)
Arguments
| ... | Props to pass to the component. The allowed props are listed below in the Details section. | 
Details
-  as string | React.ComponentClass | React.FunctionComponent
 A component that should be used as the root element of the link returned from the Link component.
-  componentRef IRefObject<ILink>
 Optional callback to access the ILink interface. Use this instead of ref for accessing the public methods and properties of the component.
-  disabled boolean
 Whether the link is disabled
-  keytipProps IKeytipProps
 Optional keytip for this Link
-  styles IStyleFunctionOrObject<ILinkStyleProps, ILinkStyles>
 Call to provide customized styling that will layer on top of the variant rules.
-  theme ITheme
 Theme (provided through customization.)
Value
Object with shiny.tag class suitable for use in the UI of a Shiny app.
Best practices
Layout
- Links visually indicate that they can be clicked, typically by being displayed using the visited or unvisited link system colors. Traditionally, links are underlined as well, but that approach is often reserved for body copy links within an article. 
Content
- People should be able to accurately predict the result of selecting a link based on its link text and optional tooltip. 
- Use descriptive, actionable link text when possible. Avoid using URLs as link text. 
- Don't use if the action is destructive or irreversible. Links aren't appropriate for commands with significant consequences. 
- Keep discrete links far enough apart that people can differentiate between them and easily select each one. 
- Use sentence-style capitalization—only capitalize the first word. For more info, see Capitalization in the Microsoft Writing Style Guide. 
Examples
library(shiny)
library(shiny.fluent)
ui <- function(id) {
  ns <- NS(id)
  Link(href = "https://appsilon.com", "Appsilon")
}
server <- function(id) {
  moduleServer(id, function(input, output, session) {})
}
if (interactive()) {
  shinyApp(ui("app"), function(input, output) server("app"))
}
List
Description
A list provides a base component for rendering large sets of items. It’s agnostic of layout, the tile component used, and selection management.
For more details and examples visit the official docs. The R package cannot handle each and every case, so for advanced use cases you need to work using the original docs to achieve the desired result.
Usage
List(...)
Arguments
| ... | Props to pass to the component. The allowed props are listed below in the Details section. | 
Details
-  divProps React.HTMLAttributes<HTMLDivElement>
 Props to apply to the list root element.
-  pages IPage<T>[]
 The active pages to be rendered into the list. These will have been rendered usingonRenderPage.
-  rootRef React.Ref<HTMLDivElement>
 The ref to be applied to the list root. TheListuses this element to track scroll position and sizing.
-  surfaceElement JSX.Element | null
 The content to be rendered as the list surface element. This will have been rendered usingonRenderSurface.
-  divProps React.HTMLAttributes<HTMLDivElement>
 Props to apply to the list surface element.
-  pageElements JSX.Element[]
 The content to be rendered representing all active pages.
-  pages IPage<T>[]
 The active pages to be rendered into the list. These will have been rendered usingonRenderPage.
-  surfaceRef React.Ref<HTMLDivElement>
 A ref to be applied to the surface element. TheListuses this element to track content size and focus.
-  className string
 Optional classname to append to root list.
-  componentRef IRefObject<IList>
 Optional callback to access the IList interface. Use this instead of ref for accessing the public methods and properties of the component.
-  getItemCountForPage (itemIndex?: number, visibleRect?: IRectangle) => number
 Method called by the list to get how many items to render per page from specified index. In general, usegetPageSpecificationinstead.
-  getKey (item: T, index?: number) => string
 Optional callback to get the item key, to be used on render.
-  getPageHeight (itemIndex?: number, visibleRect?: IRectangle, itemCount?: number) => number
 Method called by the list to get the pixel height for a given page. By default, we measure the first page's height and default all other pages to that height when calculating the surface space. It is ideal to be able to adequately predict page heights in order to keep the surface space from jumping in pixels, which has been seen to cause browser performance issues. In general, usegetPageSpecificationinstead.
-  getPageSpecification (itemIndex?: number, visibleRect?: IRectangle) => IPageSpecification
 Called by the list to get the specification for a page. Use this method to provide an allocation of items per page, as well as an estimated rendered height for the page. The list will use this to optimize virtualization.
-  getPageStyle (page: IPage<T>) => any
 Method called by the list to derive the page style object. For spacer pages, the list will derive the height and passed in heights will be ignored.
-  ignoreScrollingState boolean
 Whether to disable scroll state updates. This causes the isScrolling arg in onRenderCell to always be undefined. This is a performance optimization to let List skip a render cycle by not updating its scrolling state.
-  items T[]
 Items to render.
-  onPageAdded (page: IPage<T>) => void
 Optional callback for monitoring when a page is added.
-  onPageRemoved (page: IPage<T>) => void
 Optional callback for monitoring when a page is removed.
-  onPagesUpdated (pages: IPage<T>[]) => void
 Optional callback invoked when List rendering completed. This can be on initial mount or on re-render due to scrolling. This method will be called as a result of changes in List pages (added or removed), and after ALL the changes complete. To track individual page Add / Remove use onPageAdded / onPageRemoved instead.
-  onRenderCell (item?: T, index?: number, isScrolling?: boolean) => React.ReactNode
 Method to call when trying to render an item.
-  onRenderPage IRenderFunction<IPageProps<T>>
 Called when the List will render a page. Override this to control how cells are rendered within a page.
-  onRenderRoot IRenderFunction<IListOnRenderRootProps<T>>
 Render override for the element at the root of theList. Use this to apply some final attributes or structure to the content each time the list is updated with new active pages or items.
-  onRenderSurface IRenderFunction<IListOnRenderSurfaceProps<T>>
 Render override for the element representing the surface of theList. Use this to alter the structure of the rendered content if necessary on each update.
-  onShouldVirtualize (props: IListProps<T>) => boolean
 Optional callback to determine whether the list should be rendered in full, or virtualized. Virtualization will add and remove pages of items as the user scrolls them into the visible range. This benefits larger list scenarios by reducing the DOM on the screen, but can negatively affect performance for smaller lists. The default implementation will virtualize when this callback is not provided.
-  renderCount number
 Number of items to render. Defaults to items.length.
-  renderedWindowsAhead number
 In addition to the visible window, how many windowHeights should we render ahead.
-  renderedWindowsBehind number
 In addition to the visible window, how many windowHeights should we render behind.
-  role string
 The role to assign to the list root element. Use this to override the default assignment of 'list' to the root and 'listitem' to the cells.
-  startIndex number
 Index in items array to start rendering from. Defaults to 0.
-  usePageCache boolean
 Boolean value to enable render page caching. This is an experimental performance optimization that is off by default.
-  version {}
 An object which can be passed in as a fresh instance to 'force update' the list.
-  page IPage<T>
 The allocation data for the page.
-  role string
 The role being assigned to the rendered page element by the list.
Value
Object with shiny.tag class suitable for use in the UI of a Shiny app.
Best practices
Layout
- List items are composed of selection, icon, and name columns at minimum. You can include other columns, such as date modified, or any other metadata field associated with the collection. 
- Avoid using file type icon overlays to denote status of a file as it can make the entire icon unclear. 
- If there are multiple lines of text in a column, consider the variable row height variant. 
- Give columns ample default width to display information. 
Content
- Use sentence-style capitalization—only capitalize the first word. For more info, see Capitalization in the Microsoft Writing Style Guide. 
FAQ
My scrollable content isn't updating on scroll, what should I do?
Add the data-is-scrollable="true" attribute to your scrollable element containing the List.
By default, the List will use the <body> element as the scrollable element. If you contain List within a scrollable <div> using overflow: auto or scroll, List needs to listen for scroll events on that element instead. On initialization, List will traverse up the DOM looking for the first element with the data-is-scrollable attribute to know which element to listen to for knowing when to re-evaulate the visible window.
My list isn't re-rendering when I mutate its items, what should I do?
To determine if List should re-render its contents, the component performs a referential equality check on the items array in its shouldComponentUpdate method. This is done to minimize the performance overhead associating with re-rendering the virtualized list pages, as recommended by the React documentation. As a result of this implementation, List will not determine it should re-render if values within the array are mutated. To avoid this problem, we recommend re-creating the items array using a method such as Array.prototype.concat or ES6 spread syntax shown below:
public appendItems(): void {
  const { items } = this.state;
  this.setState({
    items: [...items, ...[{ name: 'Foo' }, { name: 'Bar' }]]
  })
}
public render(): JSX.Element {
  const { items } = this.state;
  return <List items={items} />;
}
Since the items array has been re-created, the list will conclude that its contents have changed and it should re-render the new values.
How do I limit rendering to improve performance?
Performance is important, and DOM content is expensive. Therefore, limit what you render. The list component applies this principle by using UI virtualization. Unlike a simple for loop that renders all items in a set, a list only renders a subset of items, and as you scroll around, the subset of rendered content is shifted. This gives a much better experience for large sets, especially when the per-item components are complex/render-intensive/network-intensive.
A list breaks down the set of items passed in into pages. Only pages within a "materialized window" are actually rendered. As that window changes due to scroll events, pages that fall outside that window are removed, and their layout space is remembered and pushed into spacer elements. This gives the user the experience of browsing massive amounts of content but only using a small number of actual elements. This gives the browser much less layout to resolve, and gives React DOM diffing much less content to worry about.
Note: If onRenderCell is not provided in IListProps, the list will attempt to render the name property for each object in the items array.
Examples
library(shiny)
library(shiny.fluent)
items <- do.call(paste0, replicate(20, sample(LETTERS, 200, TRUE), FALSE))
ui <- function(id) {
  ns <- NS(id)
  div(
    style = "overflow: auto; max-height: 400px",
    List(
      items = items,
      onRenderCell = JS("(item, index) => `${index} ${item}`")
    )
  )
}
server <- function(id) {
  moduleServer(id, function(input, output, session) {})
}
if (interactive()) {
  shinyApp(ui("app"), function(input, output) server("app"))
}
MarqueeSelection
Description
The MarqueeSelection component provides a service which allows the user to drag a rectangle to be drawn around items to select them. This works in conjunction with a selection object, which can be used to generically store selection state, separate from a component that consumes the state.
MarqueeSelection also works in conjunction with the AutoScroll utility to automatically scroll the container when we drag a rectangle within the vicinity of the edges.
When a selection rectangle is dragged, we look for elements with the data-selection-index attribute populated. We get these elements' boundingClientRects and compare them with the root's rect to determine selection state. We update the selection state appropriately.
In virtualization cases where items that were once selected are dematerialized, we will keep the item in its previous state until we know definitively if it's on/off. (In other words, this works with List.)
For more details and examples visit the official docs. The R package cannot handle each and every case, so for advanced use cases you need to work using the original docs to achieve the desired result.
Usage
MarqueeSelection(...)
Arguments
| ... | Props to pass to the component. The allowed props are listed below in the Details section. | 
Details
-  className string
 Additional CSS class(es) to apply to the MarqueeSelection.
-  componentRef IRefObject<IMarqueeSelection>
 Optional callback to access the IMarqueeSelection interface. Use this instead of ref for accessing the public methods and properties of the component.
-  isDraggingConstrainedToRoot boolean
 Optional flag to restrict the drag rect to the root element, instead of allowing the drag rect to start outside of the root element boundaries.
-  isEnabled boolean
 Optional flag to control the enabled state of marquee selection. This allows you to render it and have events all ready to go, but conditionally disable it. That way transitioning between enabled/disabled generate no difference in the DOM.
-  onShouldStartSelection (ev: MouseEvent) => boolean
 Optional callback that is called, when the mouse down event occurs, in order to determine if we should start a marquee selection. If true is returned, we will cancel the mousedown event to prevent upstream mousedown handlers from executing.
-  rootProps React.HTMLAttributes<HTMLDivElement>
 Optional props to mix into the root DIV element.
-  selection ISelection
 The selection object to interact with when updating selection changes.
-  styles IStyleFunction<IMarqueeSelectionStyleProps, IMarqueeSelectionStyles>
 Call to provide customized styling that will layer on top of the variant rules.
-  theme ITheme
 Theme (provided through customization.)
Value
Object with shiny.tag class suitable for use in the UI of a Shiny app.
Examples
library(shiny)
library(shiny.fluent)
# This is an advanced demo showing how you can use virtually all features of Fluent UI
# by creating custom components in JS and rendering them with shiny.react.
# This example is a translation of the example in
# https://developer.microsoft.com/en-us/fluentui#/controls/web/marqueeselection.
# Script showing how to:
# 1. Use mergeStyles and themes from Fluent
# 2. Define custom components
# 3. Send results back to Shiny.
customComponent <- function(name, js) {
  dependency <- htmltools::htmlDependency(
    name = name,
    version = "0", # Not used.
    src = c(href = ""), # Not used.
    head = paste0("
      <script>
        (jsmodule.CustomComponents ??= {}).", name, " = (() => {", js, "})();
      </script>
    ")
  )
  function(...) shiny.react::reactElement(
    module = "CustomComponents",
    name = name,
    props = shiny.react::asProps(...),
    deps = dependency
  )
}
MarqueeSelectionExample <- customComponent("MarqueeSelectionExample", "
  const React = jsmodule['react'];
  const Fluent = jsmodule['@fluentui/react'];
  const theme = Fluent.getTheme();
  const styles = Fluent.mergeStyleSets({
    photoList: {
      display: 'inline-block',
      border: '1px solid ' + theme.palette.neutralTertiary,
      margin: 0,
      padding: 10,
      overflow: 'hidden',
      userSelect: 'none',
    },
    photoCell: {
      position: 'relative',
      display: 'inline-block',
      margin: 2,
      boxSizing: 'border-box',
      background: theme.palette.neutralLighter,
      lineHeight: 100,
      verticalAlign: 'middle',
      textAlign: 'center',
      selectors: {
        '&.is-selected': {
          background: theme.palette.themeLighter,
          border: '1px solid ' + theme.palette.themePrimary,
        },
      },
    },
    checkbox: {
      margin: '10px 0',
    },
  });
  const useForceUpdate = () => {
    const [, setIt] = React.useState(false);
    return () => setIt(it => !it);
  };
  return function(params) {
    const forceUpdate = useForceUpdate();
    const inputId = params['inputId'];
    const photos = params['photos'];
    if (window.selection === undefined) {
      window.selection = new Fluent.Selection({
        items: photos,
        onSelectionChanged: function() {
          Shiny.setInputValue(inputId, window.selection.getSelectedIndices());
          forceUpdate();
        }
      });
    }
    const items = photos.map((photo, index) => {
      return React.createElement(
        'div',
        {
          key: index,
          'data-is-focusable': true,
          className: Fluent.css(
            styles.photoCell,
            window.selection.isIndexSelected(index) && 'is-selected'
          ),
          'data-selection-index': index,
          style: { width: photo.width, height: photo.height }
        },
        index
      );
    });
    return React.createElement(
      Fluent.MarqueeSelection,
      { selection: window.selection, isEnabled: true },
      React.createElement('ul', { className: styles.photoList }, items)
    );
  };
")
ui <- function(id) {
  ns <- NS(id)
  tagList(
    textOutput(ns("marqueeResult")),
    Label("Drag a rectangle around the items below to select them"),
    reactOutput(ns("marqueeSelection"))
  )
}
server <- function(id) {
  moduleServer(id, function(input, output, session) {
    ns <- session$ns
    photos <- lapply(1:50, function(index) {
      randomWidth <- 50 + sample.int(150, 1)
      list(
        key = index,
        url = paste0('http://placehold.it/', randomWidth, 'x100'),
        width = randomWidth,
        height = 100
      )
    })
    output$marqueeResult <- renderText({
      paste("You have selected: ", paste(input$selectedIndices, collapse = ", "))
    })
    output$marqueeSelection <- renderReact({
      MarqueeSelectionExample(
        inputId = ns("selectedIndices"),
        photos = photos
      )
    })
  }
)
}
if (interactive()) {
  shinyApp(ui("app"), function(input, output) server("app"))
}
TextField
Description
Text fields (TextField) give people a way to enter and edit text. They’re used in forms, modal dialogs, tables, and other surfaces where text input is required.
For more details and examples visit the official docs. The R package cannot handle each and every case, so for advanced use cases you need to work using the original docs to achieve the desired result.
Usage
MaskedTextField(...)
TextField(...)
TextField.shinyInput(inputId, ..., value = defaultValue)
updateTextField.shinyInput(
  session = shiny::getDefaultReactiveDomain(),
  inputId,
  ...
)
Arguments
| ... | Props to pass to the component. The allowed props are listed below in the Details section. | 
| inputId | ID of the component. | 
| value | Starting value. | 
| session | Object passed as the  | 
Details
-  ariaLabel string
 Aria label for the text field.
-  autoAdjustHeight boolean
 For multiline text fields, whether or not to auto adjust text field height.
-  autoComplete string
 Whether the input field should have autocomplete enabled. This tells the browser to display options based on earlier typed values. Common values are 'on' and 'off' but for all possible values see the following links: https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/autocomplete#Values https://html.spec.whatwg.org/multipage/form-control-infrastructure.html#autofill
-  borderless boolean
 Whether or not the text field is borderless.
-  className string
 Optional class name that is added to the container of the component.
-  componentRef IRefObject<ITextField>
 Optional callback to access the ITextField component. Use this instead of ref for accessing the public methods and properties of the component.
-  defaultValue string
 Default value of the text field. Only provide this if the text field is an uncontrolled component; otherwise, use thevalueproperty.
-  deferredValidationTime number
 Text field will start to validate after users stop typing fordeferredValidationTimemilliseconds. Updates to this prop will not be respected.
-  description string
 Description displayed below the text field to provide additional details about what text to enter.
-  disabled boolean
 Disabled state of the text field.
-  errorMessage string | JSX.Element
 Static error message displayed below the text field. UseonGetErrorMessageto dynamically change the error message displayed (if any) based on the current value.errorMessageandonGetErrorMessageare mutually exclusive (errorMessagetakes precedence).
-  iconProps IIconProps
 Props for an optional icon, displayed in the far right end of the text field.
-  inputClassName string
 Optional class name that is added specifically to the input/textarea element.
-  label string
 Label displayed above the text field (and read by screen readers).
-  mask string
 Only used by MaskedTextField: The masking string that defines the mask's behavior. A backslash will escape any character. Special format characters are: '9':[0-9]'a':[a-zA-Z]'*':[a-zA-Z0-9]
-  maskChar string
 Only used by MaskedTextField: The character to show in place of unfilled characters of the mask.
-  maskFormat { [key: string]: RegExp; }
 Only used by MaskedTextField: An object defining the format characters and corresponding regexp values. Default format characters: { '9': /[0-9]/, 'a': /[a-zA-Z]/, '*': /[a-zA-Z0-9]/ }
-  multiline boolean
 Whether or not the text field is a multiline text field.
-  onChange (event: React.FormEvent<HTMLInputElement | HTMLTextAreaElement>, newValue?: string) => void
 Callback for when the input value changes. This is called on bothinputandchangeevents. (In a later version, this will probably only be called for thechangeevent.)
-  onGetErrorMessage (value: string) => string | JSX.Element | PromiseLike<string | JSX.Element> | undefined
 Function used to determine whether the input value is valid and get an error message if not. Mutually exclusive with the static stringerrorMessage(it will take precedence over this).
When it returns string | JSX.Element: - If valid, it returns empty string. - If invalid, it returns the error message and the text field will show a red border and show an error message below the text field.
When it returns Promise<string | JSX.Element>: - The resolved value is displayed as the error message. - If rejected, the value is thrown away.
-  onNotifyValidationResult (errorMessage: string | JSX.Element, value: string | undefined) => void
 Function called after validation completes.
-  onRenderDescription IRenderFunction<ITextFieldProps>
 Custom renderer for the description.
-  onRenderLabel IRenderFunction<ITextFieldProps>
 Custom renderer for the label. If you don't call defaultRender, ensure that you give your custom-rendered label an id and that you set the textfield's aria-labelledby prop to that id.
-  onRenderPrefix IRenderFunction<ITextFieldProps>
 Custom render function for prefix.
-  onRenderSuffix IRenderFunction<ITextFieldProps>
 Custom render function for suffix.
-  prefix string
 Prefix displayed before the text field contents. This is not included in the value. Ensure a descriptive label is present to assist screen readers, as the value does not include the prefix.
-  readOnly boolean
 If true, the text field is readonly.
-  resizable boolean
 For multiline text fields, whether or not the field is resizable.
-  styles IStyleFunctionOrObject<ITextFieldStyleProps, ITextFieldStyles>
 Call to provide customized styling that will layer on top of the variant rules.
-  suffix string
 Suffix displayed after the text field contents. This is not included in the value. Ensure a descriptive label is present to assist screen readers, as the value does not include the suffix.
-  theme ITheme
 Theme (provided through customization).
-  underlined boolean
 Whether or not the text field is underlined.
-  validateOnFocusIn boolean
 Run validation when focus moves into the input, and do not validate on change.
(Unless this prop and/or validateOnFocusOut is set to true, validation will run on every change.)
-  validateOnFocusOut boolean
 Run validation when focus moves out of the input, and do not validate on change.
(Unless this prop and/or validateOnFocusIn is set to true, validation will run on every change.)
-  validateOnLoad boolean
 Whether validation should run when the input is initially rendered.
-  value string
 Current value of the text field. Only provide this if the text field is a controlled component where you are maintaining its current state; otherwise, use thedefaultValueproperty.
Value
Object with shiny.tag class suitable for use in the UI of a Shiny app.
The update functions return nothing (called for side effects).
Best practices
Layout
- Use a multiline text field when long entries are expected. 
- Don't place a text field in the middle of a sentence, because the sentence structure might not make sense in all languages. For example, "Remind me in - [textfield]weeks" should instead read, "Remind me in this many weeks:- [textfield]".
- Format the text field for the expected entry. For example, when someone needs to enter a phone number, use an input mask to indicate that three sets of digits should be entered. 
Content
- Include a short label above the text field to communicate what information should be entered. Don't use placeholder text instead of a label. Placeholder text poses a variety of accessibility issues (including possible problems with color/contrast, and people thinking the form input is already filled out). 
- When part of a form, make it clear which fields are required vs. optional. If the input is required, add "(required)" to the label. Don't exclusively use "\*" to indicate required inputs as it is often not read by screen readers. For example, "First name (required)". 
- Use sentence-style capitalization—only capitalize the first word. For more info, see Capitalization in the Microsoft Writing Style Guide. 
Examples
# Example 1
library(shiny)
library(shiny.fluent)
ui <- function(id) {
  ns <- NS(id)
  div(
    TextField.shinyInput(ns("text")),
    textOutput(ns("textValue"))
  )
}
server <- function(id) {
  moduleServer(id, function(input, output, session) {
    output$textValue <- renderText({
      sprintf("Value: %s", input$text)
    })
  })
}
if (interactive()) {
  shinyApp(ui("app"), function(input, output) server("app"))
}
# Example 2
library(shiny)
library(shiny.fluent)
# Using custom handler to convert input to uppercase
CustomComponents <- tags$script(HTML("(function() {
  const { InputAdapter } = jsmodule['@/shiny.react'];
  const { TextField } = jsmodule['@fluentui/react'];
  const CustomComponents = jsmodule['CustomComponents'] ??= {};
  CustomComponents.UpperCaseTextField = InputAdapter(TextField, (value, setValue) => ({
    value: value.toUpperCase(),
    onChange: (e, v) => setValue(v.toUpperCase()),
  }));
})();"))
UpperCaseTextField <- function(inputId, ..., value = "") {
  shiny.react::reactElement(
    module = "CustomComponents",
    name = "UpperCaseTextField",
    props = shiny.react::asProps(inputId = inputId, ..., value = value),
    deps = shinyFluentDependency()
  )
}
ui <- function(id) {
  ns <- NS(id)
  tagList(
    CustomComponents,
    UpperCaseTextField(ns("uppercase_text")),
    textOutput(ns("text"))
  )
}
server <- function(id) {
  moduleServer(id, function(input, output, session) {
    output$text <- renderText(input$uppercase_text)
  })
}
if (interactive()) {
  shinyApp(ui("app"), function(input, output) server("app"))
}
MessageBar
Description
A banner (MessageBar) displays errors, warnings, or important information about an open app or file. For example, if a file failed to upload an error message bar should appear.
For more details and examples visit the official docs. The R package cannot handle each and every case, so for advanced use cases you need to work using the original docs to achieve the desired result.
Usage
MessageBar(...)
MessageBarButton(...)
Arguments
| ... | Props to pass to the component. The allowed props are listed below in the Details section. | 
Details
-  actions JSX.Element
 The actions you want to show on the other side.
-  ariaLabel string
 A description of the message bar for the benefit of screen readers.
-  className string
 Additional CSS class(es) to apply to the MessageBar.
-  componentRef IRefObject<IMessageBar>
 Optional callback to access the IMessageBar interface. Use this instead of ref for accessing the public methods and properties of the component.
-  dismissButtonAriaLabel string
 Aria label on dismiss button if onDismiss is defined.
-  dismissIconProps IIconProps
 Custom icon prop to replace the dismiss icon. If unset, default will be the Fabric Clear icon.
-  isMultiline boolean
 Determines if the message bar is multi lined. If false, and the text overflows over buttons or to another line, it is clipped.
-  messageBarIconProps IIconProps
 Custom icon prop to replace the message bar icon. If unset, default will be the icon set by messageBarType.
-  messageBarType MessageBarType
 The type of MessageBar to render.
-  onDismiss (ev?: React.MouseEvent<HTMLElement | BaseButton | Button>) => any
 Whether the message bar has a dismiss button and its callback. If null, we don't show a dismiss button.
-  overflowButtonAriaLabel string
 Aria label on overflow button if truncated is defined.
-  styles IStyleFunctionOrObject<IMessageBarStyleProps, IMessageBarStyles>
 Call to provide customized styling that will layer on top of the variant rules.
-  theme ITheme
 Theme (provided through customization.)
-  truncated boolean
 Determines if the message bar text is truncated. If true, a button will render to toggle between a single line view and multiline view. This prop is for single line message bars with no buttons only in a limited space scenario.
Value
Object with shiny.tag class suitable for use in the UI of a Shiny app.
Best practices
Layout
- A message bar is most commonly found near the top of an app, underneath the app's main command bar. For example, the Microsoft Office message bar is positioned beneath the Ribbon, but above the document canvas. 
- Multiple message bars can appear at a time, but a given scenario or related set of scenarios should aim to only show one message bar at a time. Message bars are rarely shown in direct response to an action; rather, they should be shown when there’s something a person should know about the overall app or document. 
- Use the icons options to indicate the message type: the Info icon for information messages; ShieldAlert icon for security-related messages; the Warning icon for non-blocking errors; ErrorBadge icon for critical errors; the Blocked icon for blocking messages; and the Completed icon for success messages. 
Content
Message bars should include:
Title
Limit titles to 50 characters (including spaces) to leave room for text expansion when translated. People should be able to scan the title to determine the purpose of the message. Capitalize only the first word of the title and any proper nouns.
Body text
Describe the information or error state concisely, ideally in a single sentence. Limit the message to fewer than 512 characters (including spaces) to leave room for text expansion when translated. Include end punctuation for complete sentences.
Action buttons (Optional)
Offer one to two action buttons to help people solve any errors they're receiving. Limit button text to fewer than 50 charactesr (including spaces) to leave room for translation. Action buttons can have any callback attached to them and should provide people with options to address the notification and dismiss the message bar.
Link (Optional)
Don’t use buttons when a subtler link will suffice. Reserve the use of a button for when the MessageBar has a single ”hero” action that is useful at that particular moment. Avoid using more than one button.
Close button
Always offer a quick way for people to close a message bar, unless there is an issue that must be resolved immediately, such as an expired subscription.
Examples
library(shiny)
library(shiny.fluent)
ui <- function(id) {
  ns <- NS(id)
  MessageBar("Message")
}
server <- function(id) {
  moduleServer(id, function(input, output, session) {})
}
if (interactive()) {
  shinyApp(ui("app"), function(input, output) server("app"))
}
Modal
Description
Modals are temporary pop-ups that take focus from the page or app and require people to interact with them. Unlike a dialog box (Dialog), a modal should be used for hosting lengthy content, such as privacy statements or license agreements, or for asking people to perform complex or multiple actions, such as changing settings.
For more details and examples visit the official docs. The R package cannot handle each and every case, so for advanced use cases you need to work using the original docs to achieve the desired result.
Usage
Modal(...)
Arguments
| ... | Props to pass to the component. The allowed props are listed below in the Details section. | 
Details
-  allowTouchBodyScroll boolean
 Allow body scroll on content and overlay on touch devices. Changing after mounting has no effect.
-  className string
 Optional class name to be added to the root class
-  componentRef IRefObject<IModal>
 Optional callback to access the IDialog interface. Use this instead of ref for accessing the public methods and properties of the component.
-  containerClassName string
 Optional override for container class
-  dragOptions IDragOptions
 The options to make the modal draggable
-  enableAriaHiddenSiblings boolean
 Puts aria-hidden=true on all non-ancestors of the current modal, for screen readers. This is an experimental feature that will be graduated to default behavior after testing. This flag will be removed with the next major release.
-  isBlocking boolean
 Whether the dialog can be light dismissed by clicking outside the dialog (on the overlay).
-  isDarkOverlay boolean
 Whether the overlay is dark themed.
-  isModeless boolean
 Whether the dialog should be modeless (e.g. not dismiss when focusing/clicking outside of the dialog). if true: isBlocking is ignored, there will be no overlay (isDarkOverlay is ignored), isClickableOutsideFocusTrap is true, and forceFocusInsideTrap is false
-  isOpen boolean
 Whether the dialog is displayed.
-  layerProps ILayerProps
 Defines an optional set of props to be passed through to Layer
-  onDismiss (ev?: React.MouseEvent<HTMLButtonElement>) => any
 A callback function for when the Modal is dismissed light dismiss, before the animation completes.
-  onDismissed () => any
 A callback function which is called after the Modal is dismissed and the animation is complete.
-  onLayerDidMount () => void
 A callback function for when the Modal content is mounted on the overlay layer
-  overlay IOverlayProps
 Defines an optional set of props to be passed through to Overlay
-  scrollableContentClassName string
 Optional override for scrollable content class
-  styles IStyleFunctionOrObject<IModalStyleProps, IModalStyles>
 Call to provide customized styling that will layer on top of the variant rules.
-  subtitleAriaId string
 ARIA id for the subtitle of the Modal, if any
-  theme ITheme
 Theme provided by High-Order Component.
-  titleAriaId string
 ARIA id for the title of the Modal, if any
-  topOffsetFixed boolean
 Whether the modal should have top offset fixed once opened and expand from the bottom only when the content changes dynamically.
Value
Object with shiny.tag class suitable for use in the UI of a Shiny app.
Best practices
Layout
- Use a variable width with a minimum width of 288 pixels. 
- Use a variable height with a minimum height of 172 pixels. 
- Center vertically and horizontally in the available space. 
- Always have at least one focusable element inside a modal. 
- Blocking modals ( - Modeless Modal) should be used very sparingly, only when it's critical for people to make a choice or provide information before they can proceed.
- Provide a clear way for people to dismiss the control, such as a Close button, which should always go in the upper right corner. 
Content
- Use sentence-style capitalization—only capitalize the first word. For more info, see Capitalization in the Microsoft Writing Style Guide. 
Examples
library(shiny)
library(shiny.fluent)
ui <- function(id) {
  ns <- NS(id)
  tagList(
    reactOutput(ns("modal")),
    PrimaryButton.shinyInput(ns("showModal"), text = "Show modal"),
  )
}
server <- function(id) {
  moduleServer(id, function(input, output, session) {
    ns <- session$ns
    modalVisible <- reactiveVal(FALSE)
    observeEvent(input$showModal, modalVisible(TRUE))
    observeEvent(input$hideModal, modalVisible(FALSE))
    output$modal <- renderReact({
      Modal(isOpen = modalVisible(),
        Stack(tokens = list(padding = "15px", childrenGap = "10px"),
          div(style = list(display = "flex"),
            Text("Title", variant = "large"),
            div(style = list(flexGrow = 1)),
            IconButton.shinyInput(
              ns("hideModal"),
              iconProps = list(iconName = "Cancel")
            ),
          ),
          div(
            p("A paragraph of text."),
            p("Another paragraph.")
          )
        )
      )
    })
  })
}
if (interactive()) {
  shinyApp(ui("app"), function(input, output) server("app"))
}
Nav
Description
Navs (also called "left nav" or "navigation pane") provide links to the main areas of an app or a site. In larger configurations, the Nav is always on-screen, usually on the left of the view. In smaller configurations, the Nav may collapse into a skinnier version or be completely hidden until the user taps an icon.
For more details and examples visit the official docs. The R package cannot handle each and every case, so for advanced use cases you need to work using the original docs to achieve the desired result.
Usage
Nav(...)
Arguments
| ... | Props to pass to the component. The allowed props are listed below in the Details section. | 
Details
-  link INavLink
 (Optional) Link to be rendered.
-  ariaLabel string
 (Optional) The nav container aria label.
-  className string
 Additional css class to apply to the Nav
-  componentRef IRefObject<INav>
 Optional callback to access the INav interface. Use this instead of ref for accessing the public methods and properties of the component.
-  expandButtonAriaLabel string
 (Optional) The nav container aria label. The link name is prepended to this label. If not provided, the aria label will default to the link name.
-  groups INavLinkGroup[] | null
 A collection of link groups to display in the navigation bar
-  initialSelectedKey string
 (Optional) The key of the nav item initially selected.
-  isOnTop boolean
 Indicates whether the navigation component renders on top of other content in the UI
-  linkAs IComponentAs<INavButtonProps>
 Render a custom link in place of the normal one. This replaces the entire button rather than simply button content
-  onLinkClick (ev?: React.MouseEvent<HTMLElement>, item?: INavLink) => void
 Function callback invoked when a link in the navigation is clicked
-  onLinkExpandClick (ev?: React.MouseEvent<HTMLElement>, item?: INavLink) => void
 Function callback invoked when the chevron on a link is clicked
-  onRenderGroupHeader IRenderFunction<IRenderGroupHeaderProps>
 Used to customize how content inside the group header is rendered
-  onRenderLink IRenderFunction<INavLink>
 Used to customize how content inside the link tag is rendered
-  selectedAriaLabel string
 (Deprecated) Use ariaCurrent on links instead
-  selectedKey string
 (Optional) The key of the nav item selected by caller.
-  styles IStyleFunctionOrObject<INavStyleProps, INavStyles>
 Call to provide customized styling that will layer on top of the variant rules
-  theme ITheme
 Theme provided by HOC.
Value
Object with shiny.tag class suitable for use in the UI of a Shiny app.
Examples
# Example 1
library(shiny)
library(shiny.fluent)
navigation_styles <- list(
  root = list(
    height = "100%",
    boxSizing = "border-box",
    border = "1px solid #eee",
    overflowY = "auto"
  )
)
link_groups <- list(
  list(
    links = list(
      list(
        name = "Home",
        expandAriaLabel = "Expand Home section",
        collapseAriaLabel = "Collapse Home section",
        links = list(
          list(
            name = "Activity",
            url = "http://msn.com",
            key = "key1",
            target = "_blank"
          ),
          list(
            name = "MSN",
            url = "http://msn.com",
            disabled = TRUE,
            key = "key2",
            target = "_blank"
          )
        ),
        isExpanded = TRUE
      ),
      list(
        name = "Documents",
        url = "http://example.com",
        key = "key3",
        isExpanded = TRUE
      ),
      list(
        name = "Pages",
        url = "http://msn.com",
        key = "key4"
      ),
      list(
        name = "Notebook",
        url = "http://msn.com",
        key = "key5",
        disabled = TRUE
      ),
      list(
        name = "Communication and Media",
        url = "http://msn.com",
        key = "key6"
      ),
      list(
        name = "News",
        url = "http://cnn.com",
        icon = "News",
        key = "key7",
        target = "_blank",
        iconProps = list(
          iconName = "News",
          styles = list(
            root = list(
              fontSize = 20,
              color = "#106ebe"
            )
          )
        )
      )
    )
  )
)
ui <- function(id) {
  ns <- NS(id)
  Nav(
    groups = link_groups,
    selectedKey = "key1",
    styles = navigation_styles
  )
}
server <- function(id) {
  moduleServer(id, function(input, output, session) {})
}
if (interactive()) {
  shinyApp(ui("app"), function(input, output) server("app"))
}
# Example 2
library(shiny)
library(shiny.fluent)
# Custom rendering of group headers
navigation_styles <- list(
  root = list(
    height = "100%",
    width = "30%",
    boxSizing = "border-box",
    border = "1px solid #eee",
    overflowY = "auto"
  )
)
link_groups <- list(
  list(
    name = "Pages",
    links = list(
      list(name = "Activity"),
      list(name = "News")
    )
  ),
  list(
    name = "More Pages",
    links = list(
      list(name = "Settings"),
      list(name = "Notes")
    )
  )
)
ui <- function(id) {
  fluidPage(
    Nav(
      groups = link_groups,
      selectedKey = "key1",
      styles = navigation_styles,
      onRenderGroupHeader = JS("group => React.createElement('h3', null, group.name)")
    )
  )
}
server <- function(id) {
  moduleServer(id, function(input, output, session) {})
}
if (interactive()) {
  shinyApp(ui("app"), function(input, output) server("app"))
}
OverflowSet
Description
The OverflowSet is a flexible container component that is useful for displaying a primary set of content with additional content in an overflow callout. Note that the example below is only an example of how to render the component, not a specific use case.
Accessibility
By default, the OverflowSet is simply role=group. If you used as a menu, you will need to add role="menubar" and add proper aria roles to each rendered item (menuitem, menuitemcheckbox, menuitemradio)
For more details and examples visit the official docs. The R package cannot handle each and every case, so for advanced use cases you need to work using the original docs to achieve the desired result.
Usage
OverflowSet(...)
Arguments
| ... | Props to pass to the component. The allowed props are listed below in the Details section. | 
Details
-  key string
 Unique id to identify the item.
-  keytipProps IKeytipProps
 Optional keytip for the overflowSetItem.
-  className string
 Class name
-  componentRef IRefObject<IOverflowSet>
 Gets the component ref.
-  doNotContainWithinFocusZone boolean
 If true do not contain the OverflowSet inside of a FocusZone, otherwise the OverflowSet will contain a FocusZone. If this is set to true focusZoneProps will be ignored. Use one or the other.
-  focusZoneProps IFocusZoneProps
 Custom properties for OverflowSet's FocusZone. If doNotContainWithinFocusZone is set to true focusZoneProps will be ignored. Use one or the other.
-  items IOverflowSetItemProps[]
 An array of items to be rendered by your onRenderItem function in the primary content area
-  itemSubMenuProvider (item: IOverflowSetItemProps) => any[] | undefined
 Function that will take in an IOverflowSetItemProps and return the subMenu for that item. If not provided, will use 'item.subMenuProps.items' by default. This is only used if your overflow set has keytips.
-  keytipSequences string[]
 Optional full keytip sequence for the overflow button, if it will have a keytip.
-  onRenderItem (item: IOverflowSetItemProps) => any
 Method to call when trying to render an item.
-  onRenderOverflowButton IRenderFunction<any[]>
 Rendering method for overflow button and contextual menu. The argument to the function is the overflowItems passed in as props to this function.
-  overflowItems IOverflowSetItemProps[]
 An array of items to be passed to overflow contextual menu
-  overflowSide 'start' | 'end'
 Controls wether or not the overflow button is placed at the start or end of the items. This gives a reveresed visual behavior but maintains correct keyboard navigation.
-  role string
 The role for the OverflowSet.
-  styles IStyleFunctionOrObject<IOverflowSetProps, IOverflowSetStyles>
 Call to provide customized styling that will layer on top of the variant rules.
-  vertical boolean
 Change item layout direction to vertical/stacked. If role is set tomenubar,vertical={true}will also add properaria-orientation.
Value
Object with shiny.tag class suitable for use in the UI of a Shiny app.
Examples
library(shiny)
library(shiny.fluent)
items <- list(
  list(key = "item1", icon = "Add", name = "Link 1"),
  list(key = "item2", icon = "Upload", name = "Link 2"),
  list(key = "item3", icon = "Share", name = "Link 3")
)
overflowItems <- list(
  list(key = "item4", icon = "Mail", name = "Overflow Link 1"),
  list(key = "item5", icon = "Calendar", name = "Overflow Link 2")
)
onRenderItem <- JS("item =>
  jsmodule['react'].createElement(jsmodule['@fluentui/react'].CommandBarButton, {
    role: 'menuitem',
    iconProps: { iconName: item.icon },
    styles: {
      root: { padding: '10px' }
    }
  })
")
onRenderOverflowButton <- JS("overflowItems =>
  jsmodule['react'].createElement(jsmodule['@fluentui/react'].CommandBarButton, {
    role: 'menuitem',
    title: 'More items',
    styles: {
      root: { padding: '10px' }
    },
    menuIconProps: { iconName: 'More' },
    menuProps: { items: overflowItems }
  })
")
ui <- function(id) {
  ns <- NS(id)
  OverflowSet(
    vertical = TRUE,
    items = items,
    overflowItems = overflowItems,
    onRenderItem = onRenderItem,
    onRenderOverflowButton = onRenderOverflowButton
  )
}
server <- function(id) {
  moduleServer(id, function(input, output, session) {})
}
if (interactive()) {
  shinyApp(ui("app"), function(input, output) server("app"))
}
Overlay
Description
Overlays are used to render a semi-transparent layer on top of existing UI. Overlays help focus the user on the content that sits above the added layer and are often used to help designate a modal or blocking experience. Overlays can be seen used in conjunction with Panels and Dialogs.
For more details and examples visit the official docs. The R package cannot handle each and every case, so for advanced use cases you need to work using the original docs to achieve the desired result.
Usage
Overlay(...)
Arguments
| ... | Props to pass to the component. The allowed props are listed below in the Details section. | 
Details
-  allowTouchBodyScroll boolean
 Allow body scroll on touch devices. Changing after mounting has no effect.
-  className string
 Additional css class to apply to the Overlay
-  componentRef IRefObject<IOverlay>
 Gets the component ref.
-  isDarkThemed boolean
 Whether to use the dark-themed overlay.
-  onClick () => void
 
-  styles IStyleFunctionOrObject<IOverlayStyleProps, IOverlayStyles>
 Call to provide customized styling that will layer on top of the variant rules
-  theme ITheme
 Theme provided by HOC.
Value
Object with shiny.tag class suitable for use in the UI of a Shiny app.
Examples
library(shiny)
library(shiny.fluent)
ui <- function(id) {
  ns <- NS(id)
  div(
    DefaultButton.shinyInput(ns("toggleOverlay"), text = "Open Overlay"),
    reactOutput(ns("overlay"))
  )
}
server <- function(id) {
  moduleServer(id, function(input, output, session) {
    ns <- session$ns
    show <- reactiveVal(FALSE)
    observeEvent(input$toggleOverlay, show(!show()))
    output$overlay <- renderReact({
      if (show()) {
        Overlay(
          onClick = JS(paste0(
            "function() {",
            "  Shiny.setInputValue('", ns("toggleOverlay"), "', Math.random());",
            "}"
          )),
          isDarkThemed = TRUE,
          div(
            style = "background: white; width: 50vw; height: 20rem; margin: auto;",
            div(
              style = "padding: 2rem;",
              h1("Inside Overlay"),
              p("Click anywhere to hide.")
            )
          )
        )
      }
    })
  })
}
if (interactive()) {
  shinyApp(ui("app"), function(input, output) server("app"))
}
Panel
Description
Panels are overlays that contain supplementary content and are used for complex creation, edit, or management experiences. For example, viewing details about an item in a list or editing settings.
For more details and examples visit the official docs. The R package cannot handle each and every case, so for advanced use cases you need to work using the original docs to achieve the desired result.
Usage
Panel(...)
Arguments
| ... | Props to pass to the component. The allowed props are listed below in the Details section. | 
Details
-  allowTouchBodyScroll boolean
 Allow body scroll on content and overlay on touch devices. Changing after mounting has no effect.
-  className string
 Additional css class to apply to the Panel
-  closeButtonAriaLabel string
 Aria label on close button
-  componentId string
 Deprecated property. Serves no function.
-  componentRef IRefObject<IPanel>
 Optional callback to access the IPanel interface. Use this instead of ref for accessing the public methods and properties of the component.
-  customWidth string
 Custom panel width, used only whentypeis set toPanelType.custom.
-  elementToFocusOnDismiss HTMLElement
 Sets the HTMLElement to focus on when exiting the FocusTrapZone.
-  firstFocusableSelector string
 Indicates the selector for first focusable item. Deprecated, usefocusTrapZoneProps.
-  focusTrapZoneProps IFocusTrapZoneProps
 Optional props to pass to the FocusTrapZone component to manage focus in the panel.
-  forceFocusInsideTrap boolean
 Indicates whether Panel should force focus inside the focus trap zone. If not explicitly specified, behavior aligns with FocusTrapZone's default behavior. Deprecated, usefocusTrapZoneProps.
-  hasCloseButton boolean
 Has the close button visible.
-  headerClassName string
 Optional parameter to provider the class name for header text
-  headerText string
 Header text for the Panel.
-  headerTextProps React.HTMLAttributes<HTMLDivElement>
 The props for header text container.
-  ignoreExternalFocusing boolean
 Indicates if this Panel will ignore keeping track of HTMLElement that activated the Zone. Deprecated, usefocusTrapZoneProps.
-  isBlocking boolean
 Whether the panel uses a modal overlay or not
-  isFooterAtBottom boolean
 Determines if content should stretch to fill available space putting footer at the bottom of the page
-  isHiddenOnDismiss boolean
 Whether the panel is hidden on dismiss, instead of destroyed in the DOM. Protects the contents from being destroyed when the panel is dismissed.
-  isLightDismiss boolean
 Whether the panel can be light dismissed.
-  isOpen boolean
 Whether the panel is displayed. If true, will cause panel to stay open even if dismissed. If false, will cause panel to stay hidden. If undefined, will allow the panel to control its own visility through open/dismiss methods.
-  layerProps ILayerProps
 Optional props to pass to the Layer component hosting the panel.
-  onDismiss (ev?: React.SyntheticEvent<HTMLElement>) => void
 A callback function for when the panel is closed, before the animation completes. If the panel should NOT be dismissed based on some keyboard event, then simply call ev.preventDefault() on it
-  onDismissed () => void
 A callback function which is called after the Panel is dismissed and the animation is complete. (If you need to update the Panel'sisOpenprop in response to a dismiss event, useonDismissinstead.)
-  onLightDismissClick () => void
 Optional custom function to handle clicks outside the panel in lightdismiss mode
-  onOpen () => void
 A callback function for when the Panel is opened, before the animation completes.
-  onOpened () => void
 A callback function for when the Panel is opened, after the animation completes.
-  onOuterClick () => void
 Optional custom function to handle clicks outside this component
-  onRenderBody IRenderFunction<IPanelProps>
 Optional custom renderer for body region. Replaces any children passed into the component.
-  onRenderFooter IRenderFunction<IPanelProps>
 Optional custom renderer for footer region. Replaces sticky footer.
-  onRenderFooterContent IRenderFunction<IPanelProps>
 Custom renderer for content in the sticky footer
-  onRenderHeader IPanelHeaderRenderer
 Optional custom renderer for header region. Replaces current title
-  onRenderNavigation IRenderFunction<IPanelProps>
 Optional custom renderer navigation region. Replaces the region that contains the close button.
-  onRenderNavigationContent IRenderFunction<IPanelProps>
 Optional custom renderer for content in the navigation region. Replaces current close button.
-  overlayProps IOverlayProps
 Optional props to pass to the Overlay component that the panel uses.
-  styles IStyleFunctionOrObject<IPanelStyleProps, IPanelStyles>
 Call to provide customized styling that will layer on top of the variant rules.
-  theme ITheme
 Theme provided by High-Order Component.
-  type PanelType
 Type of the panel.
Value
Object with shiny.tag class suitable for use in the UI of a Shiny app.
Best practices
Layout
- Use for self-contained experiences where someone doesn’t need to interact with the app view to complete the task. 
- Consider how the panel and its contained contents will scale across responsive web breakpoints. 
Header
- Include a close button in the top-right corner. 
- Lock the title to the top of the panel. 
- The header can contain a variety of components. Components are stacked under the main title, locked to the top, and push content down. 
Body
- The body is a flexible container that can house a wide variety of components, content, and formatting. 
- Content can scroll. 
Footer
- Standard footers include primary and secondary buttons to confirm or cancel the changes or task. 
- Read-only panels may contain a single Close button. 
- Lock the footer to the bottom of the panel. 
Content
Title
- Titles should explain the panel content in clear, concise, and specific terms. 
- Keep the length of the title to one line, if possible. 
- Use sentence-style capitalization—only capitalize the first word. For more info, see - [Capitalization]in the Microsoft Writing Style Guide.
- Don’t put a period at the end of the title. 
[capitalization]: https://docs.microsoft.com/style-guide/capitalization
Button labels
- Be concise. Limit labels to one or two words. Usually a single verb is best. Include a noun if there’s any room for interpretation about what the verb means. For example, “Save” or “Save settings.” 
Examples
library(shiny)
library(shiny.fluent)
ui <- function(id) {
  ns <- NS(id)
  div(
    DefaultButton.shinyInput(ns("showPanel"), text = "Open panel"),
    reactOutput(ns("reactPanel"))
  )
}
server <- function(id) {
  moduleServer(id, function(input, output, session) {
    ns <- session$ns
    isPanelOpen <- reactiveVal(FALSE)
    output$reactPanel <- renderReact({
      Panel(
        headerText = "Sample panel",
        isOpen = isPanelOpen(),
        "Content goes here.",
        onDismiss = JS(paste0(
          "function() {",
          "  Shiny.setInputValue('", ns("hidePanel"), "', Math.random());",
          "}"
        ))
      )
    })
    observeEvent(input$showPanel, isPanelOpen(TRUE))
    observeEvent(input$hidePanel, isPanelOpen(FALSE))
  })
}
if (interactive()) {
  shinyApp(ui("app"), function(input, output) server("app"))
}
Persona
Description
A persona is a visual representation of a person across products, typically showcasing the image that person has chosen to upload themselves. The control can also be used to show that person's online status.
The complete control inclues an individual's avatar (an uploaded image or a composition of the person’s initials on a background color), their name or identification, and online status.
The persona control is used in the PeoplePicker and Facepile controls.
For more details and examples visit the official docs. The R package cannot handle each and every case, so for advanced use cases you need to work using the original docs to achieve the desired result.
Usage
Persona(...)
Arguments
| ... | Props to pass to the component. The allowed props are listed below in the Details section. | 
Details
-  className string
 Additional css class to apply to the PersonaCoin
-  componentRef IRefObject<{}>
 Gets the component ref.
-  styles IStyleFunctionOrObject<IPersonaCoinStyleProps, IPersonaCoinStyles>
 Call to provide customized styling that will layer on top of the variant rules
-  componentRef IRefObject<{}>
 Gets the component ref.
-  styles IStyleFunctionOrObject<IPersonaPresenceStyleProps, IPersonaPresenceStyles>
 Call to provide customized styling that will layer on top of the variant rules
-  className string
 Additional CSS class(es) to apply to the Persona
-  componentRef IRefObject<IPersona>
 Optional callback to access the IPersona interface. Use this instead of ref for accessing the public methods and properties of the component.
-  onRenderOptionalText IRenderFunction<IPersonaProps>
 Optional custom renderer for the optional text.
-  onRenderPrimaryText IRenderFunction<IPersonaProps>
 Optional custom renderer for the primary text.
-  onRenderSecondaryText IRenderFunction<IPersonaProps>
 Optional custom renderer for the secondary text.
-  onRenderTertiaryText IRenderFunction<IPersonaProps>
 Optional custom renderer for the tertiary text.
-  styles IStyleFunctionOrObject<IPersonaStyleProps, IPersonaStyles>
 Call to provide customized styling that will layer on top of variant rules
-  allowPhoneInitials boolean
 Whether initials are calculated for phone numbers and number sequences. Example: Set property to true to get initials for project names consisting of numbers only.
-  coinProps IPersonaCoinProps
 Optional HTML element props for Persona coin.
-  coinSize number
 Optional custom persona coin size in pixel.
-  hidePersonaDetails boolean
 Whether to not render persona details, and just render the persona image/initials.
-  imageAlt string
 Alt text for the image to use. Defaults to an empty string.
-  imageInitials string
 The user's initials to display in the image area when there is no image.
-  imageShouldFadeIn boolean
 If true, adds the css class 'is-fadeIn' to the image.
-  imageShouldStartVisible boolean
 If true, the image starts as visible and is hidden on error. Otherwise, the image is hidden until it is successfully loaded. This disables imageShouldFadeIn.
-  imageUrl string
 Url to the image to use, should be a square aspect ratio and big enough to fit in the image area.
-  initialsColor PersonaInitialsColor | string
 The background color when the user's initials are displayed.
-  isOutOfOffice boolean
 This flag can be used to signal the persona is out of office. This will change the way the presence icon looks for statuses that support dual-presence.
-  onPhotoLoadingStateChange (newImageLoadState: ImageLoadState) => void
 Optional callback for when loading state of the photo changes
-  onRenderCoin IRenderFunction<IPersonaSharedProps>
 Optional custom renderer for the coin
-  onRenderInitials IRenderFunction<IPersonaSharedProps>
 Optional custom renderer for the initials
-  onRenderPersonaCoin IRenderFunction<IPersonaSharedProps>
 Optional custom renderer for the coin
-  optionalText string
 Optional text to display, usually a custom message set. The optional text will only be shown when using size100.
-  presence PersonaPresence
 Presence of the person to display - will not display presence if undefined.
-  presenceColors { available: string; away: string; busy: string; dnd: string; offline: string; oof: string; background: string; }
 The colors to be used for the presence-icon and it's background
-  presenceTitle string
 Presence title to be shown as a tooltip on hover over the presence icon.
-  primaryText string
 Primary text to display, usually the name of the person.
-  secondaryText string
 Secondary text to display, usually the role of the user.
-  showInitialsUntilImageLoads boolean
 If true renders the initials while the image is loading. This only applies when an imageUrl is provided.
-  showSecondaryText boolean
 
-  showUnknownPersonaCoin boolean
 If true, show the special coin for unknown persona. It has '?' in place of initials, with static font and background colors
-  size PersonaSize
 Decides the size of the control.
-  tertiaryText string
 Tertiary text to display, usually the status of the user. The tertiary text will only be shown when using size72 or size100.
-  text string
 Primary text to display, usually the name of the person.
-  theme ITheme
 Theme provided by High-Order Component.
Value
Object with shiny.tag class suitable for use in the UI of a Shiny app.
Best practices
Layout
- Use the 24-pixel persona in text fields in read-only mode or in experiences like multicolumn lists which need compact persona representations. 
- Use the 32-pixel persona in text fields in edit mode. 
- Use the 32-pixel, 40-pixel, and 48-pixel persona in menus and list views. 
- Use the 72-pixel and 100-pixel persona in profile cards and views. 
Content
- Change the values of the color swatches in high contrast mode. 
Examples
library(shiny)
library(shiny.fluent)
ui <- function(id) {
  ns <- NS(id)
  Persona(
    imageInitials = "AL",
    text = "Annie Lindqvist",
    secondaryText = "Software Engineer",
    presence = 4
  )
}
server <- function(id) {
  moduleServer(id, function(input, output, session) {})
}
if (interactive()) {
  shinyApp(ui("app"), function(input, output) server("app"))
}
Pivot
Description
The Pivot control and related tabs pattern are used for navigating frequently accessed, distinct content categories. Pivots allow for navigation between two or more content views and relies on text headers to articulate the different sections of content.
- Tapping on a pivot item header navigates to that header's section content. 
Tabs are a visual variant of Pivot that use a combination of icons and text or just icons to articulate section content.
For more details and examples visit the official docs. The R package cannot handle each and every case, so for advanced use cases you need to work using the original docs to achieve the desired result.
Usage
Pivot(...)
PivotItem(...)
Arguments
| ... | Props to pass to the component. The allowed props are listed below in the Details section. | 
Details
-  alwaysRender boolean
 Defines whether to always render the pivot item (regardless of whether it is selected or not). Useful if you're rendering content that is expensive to mount.
-  ariaLabel string
 The aria label of each pivot link which will read by screen reader instead of linkText.
Note that unless you have compelling requirements you should not override aria-label.
-  componentRef IRefObject<{}>
 Gets the component ref.
-  headerButtonProps IButtonProps | { [key: string]: string | number | boolean; }
 Props for the header command button. This provides a way to pass in native props, such as data-* and aria-*, for each pivot header/link element.
-  headerText string
 The text displayed of each pivot link.
-  itemCount number | string
 Defines an optional item count displayed in parentheses just after thelinkText.
Examples: completed (4), Unread (99+)
-  itemIcon string
 An optional icon to show next to the pivot link.
-  itemKey string
 An required key to uniquely identify a pivot item.
Note: The 'key' from react props cannot be used inside component.
-  keytipProps IKeytipProps
 Optional keytip for this PivotItem.
-  linkText string
 The text displayed of each pivot link - renaming toheaderText.
-  onRenderItemLink IRenderFunction<IPivotItemProps>
 Optional custom renderer for the pivot item link.
-  className string
 Additional css class to apply to the Pivot
-  componentRef IRefObject<IPivot>
 Optional callback to access the IPivot interface. Use this instead of ref for accessing the public methods and properties of the component.
-  defaultSelectedIndex number
 Default selected index for the pivot. Only provide this if the pivot is an uncontrolled component; otherwise, use theselectedKeyproperty.
This property is also mutually exclusive with defaultSelectedKey.
-  defaultSelectedKey string
 Default selected key for the pivot. Only provide this if the pivot is an uncontrolled component; otherwise, use theselectedKeyproperty.
This property is also mutually exclusive with defaultSelectedIndex.
-  getTabId (itemKey: string, index: number) => string
 Callback to customize how IDs are generated for each tab header. Useful if you're rendering content outside and need to connect aria-labelledby.
-  headersOnly boolean
 Whether to skip rendering the tabpanel with the content of the selected tab. Use this prop if you plan to separately render the tab content and don't want to leave an empty tabpanel in the page that may confuse Screen Readers.
-  initialSelectedIndex number
 Index of the pivot item initially selected. Mutually exclusive withinitialSelectedKey. Only provide this if the pivot is an uncontrolled component; otherwise, useselectedKey.
-  initialSelectedKey string
 Key of the pivot item initially selected. Mutually exclusive withinitialSelectedIndex. Only provide this if the pivot is an uncontrolled component; otherwise, useselectedKey.
-  linkFormat PivotLinkFormat
 PivotLinkFormat to use (links, tabs)
-  linkSize PivotLinkSize
 PivotLinkSize to use (normal, large)
-  onLinkClick (item?: PivotItem, ev?: React.MouseEvent<HTMLElement>) => void
 Callback for when the selected pivot item is changed.
-  selectedKey string | null
 Key of the selected pivot item. Updating this will override the Pivot's selected item state. Only provide this if the pivot is a controlled component where you are maintaining the current state; otherwise, usedefaultSelectedKey.
-  styles IStyleFunctionOrObject<IPivotStyleProps, IPivotStyles>
 Call to provide customized styling that will layer on top of the variant rules.
-  theme ITheme
 Theme provided by High-Order Component.
Value
Object with shiny.tag class suitable for use in the UI of a Shiny app.
Examples
library(shiny)
library(shiny.fluent)
ui <- function(id) {
  ns <- NS(id)
  Pivot(
    PivotItem(headerText = "Tab 1", Label("Hello 1")),
    PivotItem(headerText = "Tab 2", Label("Hello 2"))
  )
}
server <- function(id) {
  moduleServer(id, function(input, output, session) {})
}
if (interactive()) {
  shinyApp(ui("app"), function(input, output) server("app"))
}
ProgressIndicator
Description
ProgressIndicators are used to show the completion status of an operation lasting more than 2 seconds. If the state of progress cannot be determined, use a Spinner instead. ProgressIndicators can appear in a new panel, a flyout, under the UI initiating the operation, or even replacing the initiating UI, as long as the UI can return if the operation is canceled or is stopped.
ProgressIndicators feature a bar showing total units to completion, and total units finished. The description of the operation appears above the bar, and the status in text appears below. The description should tell someone exactly what the operation is doing. Examples of formatting include:
-  [Object]is being[operation name], or
-  [Object]is being[operation name]to[destination name]or
-  [Object]is being[operation name]from[source name]to[destination name]
Status text is generally in units elapsed and total units. If the operation can be canceled, an “X” icon is used and should be placed in the upper right, aligned with the baseline of the operation name. When an error occurs, replace the status text with the error description using ms-fontColor-redDark.
Real-world examples include copying files to a storage location, saving edits to a file, and more. Use units that are informative and relevant to give the best idea to users of how long the operation will take to complete. Avoid time units as they are rarely accurate enough to be trustworthy. Also, combine steps of a complex operation into one total bar to avoid “rewinding” the bar. Instead change the operation description to reflect the change if necessary. Bars moving backwards reduce confidence in the service.
For more details and examples visit the official docs. The R package cannot handle each and every case, so for advanced use cases you need to work using the original docs to achieve the desired result.
Usage
ProgressIndicator(...)
Arguments
| ... | Props to pass to the component. The allowed props are listed below in the Details section. | 
Details
-  ariaValueText string
 Text alternative of the progress status, used by screen readers for reading the value of the progress.
-  barHeight number
 Height of the ProgressIndicator
-  className string
 Additional css class to apply to the ProgressIndicator
-  description React.ReactNode
 Text describing or supplementing the operation. May be a string or React virtual elements.
-  label React.ReactNode
 Label to display above the control. May be a string or React virtual elements.
-  onRenderProgress IRenderFunction<IProgressIndicatorProps>
 A render override for the progress track.
-  percentComplete number
 Percentage of the operation's completeness, numerically between 0 and 1. If this is not set, the indeterminate progress animation will be shown instead.
-  progressHidden boolean
 Whether or not to hide the progress state.
-  styles IStyleFunctionOrObject<IProgressIndicatorStyleProps, IProgressIndicatorStyles>
 Call to provide customized styling that will layer on top of the variant rules.
-  theme ITheme
 Theme provided by High-Order Component.
-  title string
 Deprecated at v0.43.0, to be removed at \>= v0.53.0. Uselabelinstead.
Value
Object with shiny.tag class suitable for use in the UI of a Shiny app.
Examples
library(shiny)
library(shiny.fluent)
ui <- function(id) {
  ns <- NS(id)
  ProgressIndicator(
    label = "Example title",
    description = "Example description"
  )
}
server <- function(id) {
  moduleServer(id, function(input, output, session) {})
}
if (interactive()) {
  shinyApp(ui("app"), function(input, output) server("app"))
}
Rating
Description
Ratings show people’s opinions of a product, helping others make more informed purchasing decisions. People can also rate products they’ve purchased.
For more details and examples visit the official docs. The R package cannot handle each and every case, so for advanced use cases you need to work using the original docs to achieve the desired result.
Usage
Rating(...)
Rating.shinyInput(inputId, ..., value = defaultValue)
updateRating.shinyInput(
  session = shiny::getDefaultReactiveDomain(),
  inputId,
  ...
)
Arguments
| ... | Props to pass to the component. The allowed props are listed below in the Details section. | 
| inputId | ID of the component. | 
| value | Starting value. | 
| session | Object passed as the  | 
Details
-  allowZeroStars boolean
 Allow the rating value to be set to 0 instead of a minimum of 1.
-  ariaLabelFormat string
 Optional label format for a rating star that will be read by screen readers. Can be used like "{0} of {1} stars selected", where {0} will be substituted by the current rating and {1} will be substituted by the max rating.
-  ariaLabelId string
 Deprecated: Optional id of label describing this instance of Rating.
-  componentRef IRefObject<IRating>
 Optional callback to access the IRating interface. Use this instead of ref for accessing the public methods and properties of the component.
-  getAriaLabel (rating: number, max: number) => string
 
-  icon string
 Custom icon
-  max number
 Maximum rating, defaults to 5, has to be \>= min
-  min number
 Minimum rating, defaults to 1, has to be \>= 0
-  onChange (event: React.FocusEvent<HTMLElement>, rating?: number) => void
 Callback issued when the rating changes.
-  onChanged (rating: number) => void
 
-  rating number
 Selected rating, has to be an integer between min and max
-  readOnly boolean
 Optional flag to mark rating control as readOnly
-  size RatingSize
 Size of rating, defaults to small
-  styles IStyleFunctionOrObject<IRatingStyleProps, IRatingStyles>
 Call to provide customized styling that will layer on top of the variant rules.
-  theme ITheme
 Theme (provided through customization.)
-  unselectedIcon string
 Custom icon for unselected rating elements.
Value
Object with shiny.tag class suitable for use in the UI of a Shiny app.
The update functions return nothing (called for side effects).
Best practices
Layout
- Make it clear which item the rating pertains to by making sure the layout and grouping are clear when several items are on the page. 
- Don't use the rating component for data that has a continuous range, such as the brightness of a photo. Instead, use a slider. 
Content
- Use a five-star rating system. 
- Use sentence-style capitalization—only capitalize the first word. For more info, see Capitalization in the Microsoft Writing Style Guide. 
Examples
library(shiny)
library(shiny.fluent)
ui <- function(id) {
  ns <- NS(id)
  div(
    Rating.shinyInput(ns("rating"), value = 2),
    textOutput(ns("ratingValue"))
  )
}
server <- function(id) {
  moduleServer(id, function(input, output, session) {
    output$ratingValue <- renderText({
      sprintf("Value: %s", input$rating)
    })
  })
}
if (interactive()) {
  shinyApp(ui("app"), function(input, output) server("app"))
}
ResizeGroup
Description
ResizeGroup is a React component that can be used to help fit the right amount of content within a container. The consumer of the ResizeGroup provides some initial data, a reduce function, and a render function. The render function is responsible for populating the contents of a the container when given some data. The initial data should represent the data that should be rendered when the ResizeGroup has infinite width. If the contents returned by the render function do not fit within the ResizeGroup, the reduce function is called to get a version of the data whose rendered width should be smaller than the data that was just rendered.
An example scenario is shown below, where controls that do not fit on screen are rendered in an overflow menu. The data in this situation is a list of 'primary' controls that are rendered on the top level and a set of overflow controls rendered in the overflow menu. The initial data in this case has all the controls in the primary set. The implementation of onReduceData moves a control from the overflow well into the primary control set.
This component queries the DOM for the dimensions of elements. Too many of these dimension queries will negatively affect the performance of the component and could cause poor interactive performance on websites. One way to reduce the number of measurements performed by the component is to provide a cacheKey in the initial data and in the return value of onReduceData. Two data objects with the same cacheKey are assumed to have the same width, resulting in measurements being skipped for that data object. In the controls with an overflow example, the cacheKey is simply the concatenation of the keys of the controls that appear in the top level.
There is a boolean context property (isMeasured) added to let child components know if they are only being used for measurement purposes. When isMeasured is true, it will signify that the component is not the instance visible to the user. This will not be needed for most scenarios. It is intended to be used to to skip unwanted side effects of mounting a child component more than once. This includes cases where the component makes API requests, requests focus to one of its elements, expensive computations, and/or renders markup unrelated to its size. Be careful not to use this property to change the components rendered output in a way that effects it size in any way.
For more details and examples visit the official docs. The R package cannot handle each and every case, so for advanced use cases you need to work using the original docs to achieve the desired result.
Usage
ResizeGroup(...)
Arguments
| ... | Props to pass to the component. The allowed props are listed below in the Details section. | 
Details
-  className string
 Additional css class to apply to the Component
-  componentRef IRefObject<IResizeGroup>
 Optional callback to access the IResizeGroup interface. Use this instead of ref for accessing the public methods and properties of the component.
-  data any
 Initial data to be passed to theonRenderDatafunction. When there is noonGrowDataprovided, this data should represent what should be passed to the render function when the parent container of the ResizeGroup is at its maximum supported width. AcacheKeyproperty may optionally be included as part of the data. Two data objects with the samecacheKeywill be assumed to take up the same width and will prevent measurements. The type ofcacheKeyis a string.
-  dataDidRender (renderedData: any) => void
 Function to be called every time data is rendered. It provides the data that was actually rendered. A use case would be adding telemetry when a particular control is shown in an overflow well or dropped as a result of onReduceData or to count the number of renders that an implementation of onReduceData triggers.
-  direction ResizeGroupDirection
 Direction of this resize group, vertical or horizontal
-  onGrowData (prevData: any) => any
 Function to be performed on the data in order to increase its width. It is called in scenarios where the container has more room than the previous render and we may be able to fit more content. If there are no more scaling operations to perform on teh data, it should return undefined to prevent an infinite render loop.
-  onReduceData (prevData: any) => any
 Function to be performed on the data in order to reduce its width and make it fit into the given space. If there are no more scaling steps to apply, it should return undefined to prevent an infinite render loop.
-  onRenderData (data: any) => JSX.Element
 Function to render the data. Called when rendering the contents to the screen and when rendering in a hidden div to measure the size of the contents.
-  styles IStyleFunctionOrObject<IResizeGroupStyleProps, IResizeGroupStyles>
 Call to provide customized styling that will layer on top of the variant rules
-  theme ITheme
 Theme provided by HOC.
Value
Object with shiny.tag class suitable for use in the UI of a Shiny app.
Examples
library(shiny)
library(shiny.fluent)
data <- list(
  items = list(
    "many", "strings", "with", "varying", "length", "sometimes", "very", "short",
    "other", "times", "extraordinarily", "long"
  )
)
onRenderData <- JS("data =>
  data.items.map(item =>
    jsmodule['react'].createElement('div',
      {
        style: {
          display: 'inline-block',
          backgroundColor: 'orange',
          padding: '10px',
          margin: '10px',
          fontSize: '20px',
        }
      },
      item
    )
  )
")
onReduceData <- JS("data => ({ items: data.items.slice(0, -1) })")
ui <- function(id) {
  ns <- NS(id)
  div(
    p("Resize the browser to see how the elements are hidden when they do not fit:"),
    ResizeGroup(
      data = data,
      onRenderData = onRenderData,
      onReduceData = onReduceData
    )
  )
}
server <- function(id) {
  moduleServer(id, function(input, output, session) {})
}
if (interactive()) {
  shinyApp(ui("app"), function(input, output) server("app"))
}
ScrollablePane
Description
A scrollable pane (ScrollablePane) is a helper component that's used with the Sticky component. It will "stick" to the top or bottom of the scrollable region and remain visible.
For more details and examples visit the official docs. The R package cannot handle each and every case, so for advanced use cases you need to work using the original docs to achieve the desired result.
Usage
ScrollablePane(...)
Sticky(...)
Arguments
| ... | Props to pass to the component. The allowed props are listed below in the Details section. | 
Details
-  className string
 Additional css class to apply to the ScrollablePane
-  componentRef IRefObject<IScrollablePane>
 Optional callback to access the IScrollablePane interface. Use this instead of ref for accessing the public methods and properties of the component.
-  initialScrollPosition number
 Sets the initial scroll position of the ScrollablePane
-  scrollbarVisibility ScrollbarVisibility
 
-  styles IStyleFunctionOrObject<IScrollablePaneStyleProps, IScrollablePaneStyles>
 Call to provide customized styling that will layer on top of the variant rules
-  theme ITheme
 Theme provided by HOC.
Value
Object with shiny.tag class suitable for use in the UI of a Shiny app.
Best practices
Layout
- Use the sticky component on block-level elements. 
- Sticky components should ideally be section headers and/or footers. 
- Use - position: absolute. Ensure that the parent element has an explicit- heightand- position: relative, or has space already allocated for the scrollable pane.
- Ensure that the total height of - Stickycomponents does not exceed the height of the- ScrollablePane.
Examples
library(shiny)
library(shiny.fluent)
pane <- function(header, paragraphs) (
  div(
    Sticky(
      div(
        style = "background-color: #80CAF1; border-top: 1px solid; border-bottom: 1px solid",
        header
      )
    ),
    stringi::stri_rand_lipsum(paragraphs)
  )
)
ui <- function(id) {
  ns <- NS(id)
  ScrollablePane(
    styles = list(
      root = list(position = "relative", height = "500px", width = "400px")
    ),
    pane("Some text", 3),
    pane("A lot of text", 5),
    pane("Just a short ending", 1)
  )
}
server <- function(id) {
  moduleServer(id, function(input, output, session) {})
}
if (interactive()) {
  shinyApp(ui("app"), function(input, output) server("app"))
}
SearchBox
Description
A search box (SearchBox) provides an input field for searching content within a site or app to find specific items.
For more details and examples visit the official docs. The R package cannot handle each and every case, so for advanced use cases you need to work using the original docs to achieve the desired result.
Usage
SearchBox(...)
SearchBox.shinyInput(inputId, ..., value = defaultValue)
updateSearchBox.shinyInput(
  session = shiny::getDefaultReactiveDomain(),
  inputId,
  ...
)
Arguments
| ... | Props to pass to the component. The allowed props are listed below in the Details section. | 
| inputId | ID of the component. | 
| value | Starting value. | 
| session | Object passed as the  | 
Details
-  ariaLabel string
 The aria label of the SearchBox for the benefit of screen readers.
-  className string
 CSS class to apply to the SearchBox.
-  clearButtonProps IButtonProps
 The props for the clear button.
-  componentRef IRefObject<ISearchBox>
 Optional callback to access the ISearchBox interface. Use this instead of ref for accessing the public methods and properties of the component.
-  defaultValue string
 The default value of the text in the SearchBox, in the case of an uncontrolled component. This prop is being deprecated since so far, uncontrolled behavior has not been implemented.
-  disableAnimation boolean
 Whether or not to animate the SearchBox icon on focus.
-  iconProps Pick<IIconProps, Exclude<keyof IIconProps, 'className'>>
 The props for the icon.
-  labelText string
 Deprecated. Useplaceholderinstead.
-  onChange (event?: React.ChangeEvent<HTMLInputElement>, newValue?: string) => void
 Callback function for when the typed input for the SearchBox has changed.
-  onChanged (newValue: any) => void
 Deprecated at v0.52.2, useonChangeinstead.
-  onClear (ev?: any) => void
 Callback executed when the user clears the search box by either clicking 'X' or hitting escape.
-  onEscape (ev?: any) => void
 Callback executed when the user presses escape in the search box.
-  onSearch (newValue: any) => void
 Callback executed when the user presses enter in the search box.
-  placeholder string
 Placeholder for the search box.
-  styles IStyleFunctionOrObject<ISearchBoxStyleProps, ISearchBoxStyles>
 Call to provide customized styling that will layer on top of the variant rules.
-  theme ITheme
 Theme (provided through customization).
-  underlined boolean
 Whether or not the SearchBox is underlined.
-  value string
 The value of the text in the SearchBox.
Value
Object with shiny.tag class suitable for use in the UI of a Shiny app.
The update functions return nothing (called for side effects).
Best practices
Layout
- Don't build a custom search control based on the default text box or any other control. 
- Use a search box without a parent container when it's not restricted to a certain width to accommodate other content. This search box will span the entire width of the space it's in. 
Content
- Use placeholder text in the search box to describe what people can search for. For example, "Search", "Search files", or "Search contacts list". 
- Although search entry points tend to be similarly visualized, they can provide access to results that range from broad to narrow. By effectively communicating the scope of a search, you can ensure that people's expectations are met by the capabilities of the search you're performing, which will reduce the possibility of frustration. The search entry point should be placed near the content being searched. 
 Some common search scopes include:-  Global: Search across multiple sources of cloud and local content. Varied results include URLs, documents, media, actions, apps, and more. 
-  Web: Search a web index. Results include pages, entities, and answers. 
-  My stuff: Search across devices, cloud, social graphs, and more. Results are varied but are constrained by the connection to user accounts. 
 
-  
Examples
library(shiny)
library(shiny.fluent)
ui <- function(id) {
  ns <- NS(id)
  div(
    SearchBox.shinyInput(ns("search"), placeholder = "Search"),
    textOutput(ns("searchValue"))
  )
}
server <- function(id) {
  moduleServer(id, function(input, output, session) {
    output$searchValue <- renderText({
      sprintf("Value: %s", input$search)
    })
  })
}
if (interactive()) {
  shinyApp(ui("app"), function(input, output) server("app"))
}
Separator
Description
A separator visually separates content into groups.
You can render content in the separator by specifying the component's children. The component's children can be plain text or a component like Icon. The content is center-aligned by default.
For more details and examples visit the official docs. The R package cannot handle each and every case, so for advanced use cases you need to work using the original docs to achieve the desired result.
Usage
Separator(...)
Arguments
| ... | Props to pass to the component. The allowed props are listed below in the Details section. | 
Details
-  alignContent 'start' | 'center' | 'end'
 Where the content should be aligned in the separator.
-  styles IStyleFunctionOrObject<ISeparatorStyleProps, ISeparatorStyles>
 Call to provide customized styling that will layer on top of the variant rules.
-  theme ITheme
 Theme (provided through customization.)
-  vertical boolean
 Whether the element is a vertical separator.
Value
Object with shiny.tag class suitable for use in the UI of a Shiny app.
Examples
library(shiny)
library(shiny.fluent)
ui <- function(id) {
  ns <- NS(id)
  Separator("Text")
}
server <- function(id) {
  moduleServer(id, function(input, output, session) {})
}
if (interactive()) {
  shinyApp(ui("app"), function(input, output) server("app"))
}
Shimmer
Description
Shimmer is a temporary animation placeholder for when a service call takes time to return data and we don't want to block rendering the rest of the UI.
If a smooth transition from Shimmer to content is desired, wrap the content node with a Shimmer element and use the isDataLoaded prop to trigger the transition. In cases where the content node is not wrapped in a Shimmer, use the shimmerElements or customElementsGroup props, and once data arrives, manually replace the Shimmer UI with the intended content. See the examples below for reference.
For more details and examples visit the official docs. The R package cannot handle each and every case, so for advanced use cases you need to work using the original docs to achieve the desired result.
Usage
Shimmer(...)
ShimmerElementsGroup(...)
ShimmeredDetailsList(...)
Arguments
| ... | Props to pass to the component. The allowed props are listed below in the Details section. | 
Details
-  borderStyle IRawStyle
 Use to set custom styling of the shimmerCircle borders.
-  componentRef IRefObject<IShimmerCircle>
 Optional callback to access the IShimmerCircle interface. Use this instead of ref for accessing the public methods and properties of the component.
-  height number
 Sets the height of the circle.
-  styles IStyleFunctionOrObject<IShimmerCircleStyleProps, IShimmerCircleStyles>
 Call to provide customized styling that will layer on top of the variant rules.
-  theme ITheme
 Theme provided by High-Order Component.
-  backgroundColor string
 Defines the background color of the space in between and around shimmer elements.
-  componentRef IRefObject<IShimmerElementsGroup>
 Optional callback to access the IShimmerElementsGroup interface. Use this instead of ref for accessing the public methods and properties of the component.
-  flexWrap boolean
 Optional boolean for enabling flexWrap of the container containing the shimmerElements.
-  rowHeight number
 Optional maximum row height of the shimmerElements container.
-  shimmerElements IShimmerElement[]
 Elements to render in one group of the Shimmer.
-  styles IStyleFunctionOrObject<IShimmerElementsGroupStyleProps, IShimmerElementsGroupStyles>
 Call to provide customized styling that will layer on top of the variant rules.
-  theme ITheme
 Theme provided by High-Order Component.
-  width string
 Optional width for ShimmerElements container.
-  borderStyle IRawStyle
 Use to set custom styling of the shimmerGap borders.
-  componentRef IRefObject<IShimmerGap>
 Optional callback to access the IShimmerGap interface. Use this instead of ref for accessing the public methods and properties of the component.
-  height number
 Sets the height of the gap.
-  styles IStyleFunctionOrObject<IShimmerGapStyleProps, IShimmerGapStyles>
 Call to provide customized styling that will layer on top of the variant rules.
-  theme ITheme
 Theme provided by High-Order Component.
-  width number | string
 Sets width value of the gap.
-  borderStyle IRawStyle
 Use to set custom styling of the shimmerLine borders.
-  componentRef IRefObject<IShimmerLine>
 Optional callback to access the IShimmerLine interface. Use this instead of ref for accessing the public methods and properties of the component.
-  height number
 Sets the height of the rectangle.
-  styles IStyleFunctionOrObject<IShimmerLineStyleProps, IShimmerLineStyles>
 Call to provide customized styling that will layer on top of the variant rules.
-  theme ITheme
 Theme provided by High-Order Component.
-  width number | string
 Sets width value of the line.
-  ariaLabel string
 Localized string of the status label for screen reader
-  className string
 Additional CSS class(es) to apply to the Shimmer container.
-  componentRef IRefObject<IShimmer>
 Optional callback to access the IShimmer interface. Use this instead of ref for accessing the public methods and properties of the component.
-  customElementsGroup React.ReactNode
 Custom elements when necessary to build complex placeholder skeletons.
-  isDataLoaded boolean
 Controls when the shimmer is swapped with actual data through an animated transition.
-  shimmerColors IShimmerColors
 Defines an object with possible colors to pass for Shimmer customization used on different backgrounds.
-  shimmerElements IShimmerElement[]
 Elements to render in one line of the Shimmer.
-  styles IStyleFunctionOrObject<IShimmerStyleProps, IShimmerStyles>
 Call to provide customized styling that will layer on top of the variant rules.
-  theme ITheme
 Theme provided by High-Order Component.
-  width number | string
 Sets the width value of the shimmer wave wrapper.
Value
Object with shiny.tag class suitable for use in the UI of a Shiny app.
Examples
library(shiny)
library(shiny.fluent)
ui <- function(id) {
  ns <- NS(id)
  tagList(
    div(
      p("Basic Shimmer with no elements provided. It defaults to a line of 16px height."),
      Shimmer(),
      Shimmer(width = "75%"),
      Shimmer(width = "50%")
    ),
    tags$head(tags$style(
      ".ms-Shimmer-container { margin: 10px 0 }"
    ))
  )
}
server <- function(id) {
  moduleServer(id, function(input, output, session) {})
}
if (interactive()) {
  shinyApp(ui("app"), function(input, output) server("app"))
}
Slider
Description
A slider provides a visual indication of adjustable content, as well as the current setting in the total range of content. Use a slider when you want people to set defined values (such as volume or brightness), or when people would benefit from instant feedback on the effect of setting changes.
For more details and examples visit the official docs. The R package cannot handle each and every case, so for advanced use cases you need to work using the original docs to achieve the desired result.
Usage
Slider(...)
Slider.shinyInput(inputId, ..., value = defaultValue)
updateSlider.shinyInput(
  session = shiny::getDefaultReactiveDomain(),
  inputId,
  ...
)
Arguments
| ... | Props to pass to the component. The allowed props are listed below in the Details section. | 
| inputId | ID of the component. | 
| value | Starting value. | 
| session | Object passed as the  | 
Details
-  ariaLabel string
 A description of the Slider for the benefit of screen readers.
-  ariaValueText (value: number) => string
 A text description of the Slider number value for the benefit of screen readers. This should be used when the Slider number value is not accurately represented by a number.
-  buttonProps React.HTMLAttributes<HTMLButtonElement>
 Optional mixin for additional props on the thumb button within the slider.
-  className string
 Optional className to attach to the slider root element.
-  componentRef IRefObject<ISlider>
 Optional callback to access the ISlider interface. Use this instead of ref for accessing the public methods and properties of the component.
-  defaultValue number
 The initial value of the Slider. Use this if you intend for the Slider to be an uncontrolled component. This value is mutually exclusive to value. Use one or the other.
-  disabled boolean
 Optional flag to render the Slider as disabled.
-  label string
 Description label of the Slider
-  max number
 The max value of the Slider
-  min number
 The min value of the Slider
-  onChange (value: number) => void
 Callback when the value has been changed
-  onChanged (event: MouseEvent | TouchEvent | KeyboardEvent, value: number) => void
 Callback on mouse up or touch end
-  originFromZero boolean
 Optional flag to attach the origin of slider to zero. Helpful when the range include negatives.
-  showValue boolean
 Whether to show the value on the right of the Slider.
-  snapToStep boolean
 Optional flag to decide that thumb will snap to closest value while moving the slider
-  step number
 The difference between the two adjacent values of the Slider
-  styles IStyleFunctionOrObject<ISliderStyleProps, ISliderStyles>
 Call to provide customized styling that will layer on top of the variant rules.
-  theme ITheme
 Theme provided by High-Order Component.
-  value number
 The initial value of the Slider. Use this if you intend to pass in a new value as a result of onChange events. This value is mutually exclusive to defaultValue. Use one or the other.
-  valueFormat (value: number) => string
 Optional function to format the slider value.
-  vertical boolean
 Optional flag to render the slider vertically. Defaults to rendering horizontal.
Value
Object with shiny.tag class suitable for use in the UI of a Shiny app.
The update functions return nothing (called for side effects).
Best practices
Layout
- Don't use a slider for binary settings. 
- Don't use a continuous slider if the range of values is large. 
- Don't use for a range with fewer than three values. 
- Sliders are typically horizontal but can be vertical, when needed. 
Content
- Include a label indicating what value the slider changes. 
- Use step points if you don't want the slider to allow arbitrary values between minimum and maximum. 
Examples
library(shiny)
library(shiny.fluent)
ui <- function(id) {
  ns <- NS(id)
  div(
    Slider.shinyInput(ns("slider"), value = 0, min = -100, max = 100),
    textOutput(ns("sliderValue"))
  )
}
server <- function(id) {
  moduleServer(id, function(input, output, session) {
    output$sliderValue <- renderText({
      sprintf("Value: %s", input$slider)
    })
  })
}
if (interactive()) {
  shinyApp(ui("app"), function(input, output) server("app"))
}
SpinButton
Description
A spin button (SpinButton) allows someone to incrementally adjust a value in small steps. It’s mainly used for numeric values, but other values are supported too.
For more details and examples visit the official docs. The R package cannot handle each and every case, so for advanced use cases you need to work using the original docs to achieve the desired result.
Usage
SpinButton(...)
SpinButton.shinyInput(inputId, ..., value = defaultValue)
updateSpinButton.shinyInput(
  session = shiny::getDefaultReactiveDomain(),
  inputId,
  ...
)
Arguments
| ... | Props to pass to the component. The allowed props are listed below in the Details section. | 
| inputId | ID of the component. | 
| value | Starting value. | 
| session | Object passed as the  | 
Details
-  ariaDescribedBy string
 ID of a label which describes the control, if not using the default label.
-  ariaLabel string
 A description of the control for the benefit of screen reader users.
-  ariaPositionInSet number
 The position in the parent set (if in a set).
-  ariaSetSize number
 The total size of the parent set (if in a set).
-  ariaValueNow number
 Sets the control's aria-valuenow. This is the numeric form ofvalue. Providing this only makes sense when using as a controlled component.
-  ariaValueText string
 
-  className string
 Custom className for the control.
-  componentRef IRefObject<ISpinButton>
 Gets the component ref.
-  decrementButtonAriaLabel string
 Accessible label text for the decrement button (for screen reader users).
-  decrementButtonIcon IIconProps
 Custom props for the decrement button.
-  defaultValue string
 Initial value of the control. Updates to this prop will not be respected.
Use this if you intend for the SpinButton to be an uncontrolled component which maintains its own value. Mutually exclusive with value.
-  disabled boolean
 Whether or not the control is disabled.
-  downArrowButtonStyles Partial<IButtonStyles>
 Custom styles for the down arrow button.
Note: The buttons are in a checked state when arrow keys are used to incremenent/decrement the SpinButton. Use rootChecked instead of rootPressed for styling when that is the case.
-  getClassNames (theme: ITheme, disabled: boolean, isFocused: boolean, keyboardSpinDirection: KeyboardSpinDirection, labelPosition?: Position, className?: string) => ISpinButtonClassNames
 Custom function for providing the classNames for the control. Can be used to provide all styles for the component instead of applying them on top of the default styles.
-  iconButtonProps IButtonProps
 Additional props for the up and down arrow buttons.
-  iconProps IIconProps
 Props for an icon to display alongside the control's label.
-  incrementButtonAriaLabel string
 Accessible label text for the increment button (for screen reader users).
-  incrementButtonIcon IIconProps
 Custom props for the increment button.
-  inputProps React.InputHTMLAttributes<HTMLElement | HTMLInputElement>
 Additional props for the input field.
-  keytipProps IKeytipProps
 Keytip for the control.
-  label string
 Descriptive label for the control.
-  labelPosition Position
 Where to position the control's label.
-  max number
 Max value of the control.
-  min number
 Min value of the control.
-  onBlur React.FocusEventHandler<HTMLInputElement>
 Callback for when the control loses focus.
-  onDecrement (value: string, event?: React.MouseEvent<HTMLElement> | React.KeyboardEvent<HTMLElement>) => string | void
 Callback for when the decrement button or down arrow key is pressed.
-  onFocus React.FocusEventHandler<HTMLInputElement>
 Callback for when the user focuses the control.
-  onIncrement (value: string, event?: React.MouseEvent<HTMLElement> | React.KeyboardEvent<HTMLElement>) => string | void
 Callback for when the increment button or up arrow key is pressed.
-  onValidate (value: string, event?: React.SyntheticEvent<HTMLElement>) => string | void
 Callback for when the entered value should be validated.
-  precision number
 How many decimal places the value should be rounded to.
The default is calculated based on the precision of step: i.e. if step = 1, precision = 0. step = 0.0089, precision = 4. step = 300, precision = 2. step = 23.00, precision = 2.
-  step number
 Difference between two adjacent values of the control. This value is used to calculate the precision of the input if noprecisionis given. The precision calculated this way will always be \>= 0.
-  styles Partial<ISpinButtonStyles>
 Custom styling for individual elements within the control.
-  theme ITheme
 Theme provided by HOC.
-  title string
 A more descriptive title for the control, visible on its tooltip.
-  upArrowButtonStyles Partial<IButtonStyles>
 Custom styles for the up arrow button.
Note: The buttons are in a checked state when arrow keys are used to incremenent/decrement the SpinButton. Use rootChecked instead of rootPressed for styling when that is the case.
-  value string
 Current value of the control.
Use this if you intend to pass in a new value as a result of change events. Mutually exclusive with defaultValue.
Value
Object with shiny.tag class suitable for use in the UI of a Shiny app.
The update functions return nothing (called for side effects).
Best practices
Layout
- Use a spin button when you need to incrementally change a value. 
- Use a spin button when values are tied to a unit of measure. 
- Don't use a spin button for binary settings. 
- Don't use a spin button for a range of three values or less. 
- Place labels to the left of the spin button control. For example, "Length of ruler (cm)". 
- Spin button width should adjust to fit the number values. 
Content
- Include a label indicating what value the spin button changes. 
Examples
library(shiny)
library(shiny.fluent)
ui <- function(id) {
  ns <- NS(id)
  div(
    SpinButton.shinyInput(ns("spin"), value = 15, min = 0, max = 50, step = 5),
    textOutput(ns("spinValue"))
  )
}
server <- function(id) {
  moduleServer(id, function(input, output, session) {
    output$spinValue <- renderText({
      sprintf("Value: %s", input$spin)
    })
  })
}
if (interactive()) {
  shinyApp(ui("app"), function(input, output) server("app"))
}
Spinner
Description
A Spinner is an outline of a circle which animates around itself indicating to the user that things are processing. A Spinner is shown when it's unsure how long a task will take making it the indeterminate version of a ProgressIndicator. They can be various sizes, located inline with content or centered. They generally appear after an action is being processed or committed. They are subtle and generally do not take up much space, but are transitions from the completed task.
For more details and examples visit the official docs. The R package cannot handle each and every case, so for advanced use cases you need to work using the original docs to achieve the desired result.
Usage
Spinner(...)
Arguments
| ... | Props to pass to the component. The allowed props are listed below in the Details section. | 
Details
-  ariaLabel string
 Alternative status label for screen reader
-  ariaLive 'assertive' | 'polite' | 'off'
 Politeness setting for label update announcement.
-  className string
 Additional CSS class(es) to apply to the Spinner.
-  componentRef IRefObject<ISpinner>
 Optional callback to access the ISpinner interface. Use this instead of ref for accessing the public methods and properties of the component.
-  label string
 The label to show next to the Spinner. Label updates will be announced to the screen readers. Use ariaLive to control politeness level.
-  labelPosition SpinnerLabelPosition
 The position of the label in regards of the spinner animation.
-  size SpinnerSize
 The size of Spinner to render. { extraSmall, small, medium, large }
-  styles IStyleFunctionOrObject<ISpinnerStyleProps, ISpinnerStyles>
 Call to provide customized styling that will layer on top of the variant rules.
-  theme ITheme
 Theme (provided through customization.)
-  type SpinnerType
 Deprecated and will be removed at \>= 2.0.0. UseSpinnerSizeinstead.
Value
Object with shiny.tag class suitable for use in the UI of a Shiny app.
Examples
library(shiny)
library(shiny.fluent)
ui <- function(id) {
  ns <- NS(id)
  Spinner(size = 3, label = "Loading, please wait...")
}
server <- function(id) {
  moduleServer(id, function(input, output, session) {})
}
if (interactive()) {
  shinyApp(ui("app"), function(input, output) server("app"))
}
Stack
Description
A Stack is a container-type component that abstracts the implementation of a flexbox in order to define the layout of its children components.
Stack Properties
Although the Stack component has a number of different properties, there are three in particular that define the overall layout that the component has:
- Direction: Refers to whether the stacking of children components is horizontal or vertical. By default the - Stackcomponent is vertical, but can be turned horizontal by adding the- horizontalproperty when using the component.
- Alignment: Refers to how the children components are aligned inside the container. This is controlled via the - verticalAlignand- horizontalAlignproperties. One thing to notice here is that while flexbox containers align always across the cross axis,- Stackaims to remove the mental strain involved in this process by making the- verticalAlignand- horizontalAlignproperties always follow the vertical and horizontal axes, respectively, regardless of the direction of the- Stack.
- Spacing: Refers to the space that exists between children components inside the - Stack. This is controlled via the- gapand- verticalGapproperties.
Stack Items
The Stack component provides an abstraction of a flexbox container but there are some flexbox related properties that are applied on specific children of the flexbox instead of being applied on the container. This is where Stack Items comes into play.
A Stack Item abstracts those properties that are or can be specifically applied on flexbox's children, like grow and shrink.
To use a Stack Item in an application, the Stack component should be imported and Stack.Item should be used inside of a Stack. This is done so that the existence of the Stack Item is inherently linked to the Stack component.
Stack Wrapping
Aside from the previously mentioned properties, there is another property called wrap that determines if items overflow the Stack container or wrap around it. The wrap property only works in the direction of the Stack, which means that the children components can still overflow in the perpendicular direction (i.e. in a Vertical Stack, items might overflow horizontally and vice versa).
Stack Nesting
Stacks can be nested inside one another in order to be able to configure the layout of the application as desired.
For more details and examples visit the official docs. The R package cannot handle each and every case, so for advanced use cases you need to work using the original docs to achieve the desired result.
Usage
Stack(...)
Arguments
| ... | Props to pass to the component. The allowed props are listed below in the Details section. | 
Details
-  align 'auto' | 'stretch' | 'baseline' | 'start' | 'center' | 'end'
 Defines how to align the StackItem along the x-axis (for vertical Stacks) or the y-axis (for horizontal Stacks).
-  className string
 Defines a CSS class name used to style the StackItem.
-  disableShrink boolean
 Defines whether the StackItem should be prevented from shrinking. This can be used to prevent a StackItem from shrinking when it is inside of a Stack that has shrinking items.
-  grow boolean | number | 'inherit' | 'initial' | 'unset'
 Defines how much to grow the StackItem in proportion to its siblings.
-  order number | string
 Defines order of the StackItem.
-  shrink boolean | number | 'inherit' | 'initial' | 'unset'
 Defines at what ratio should the StackItem shrink to fit the available space.
-  verticalFill boolean
 Defines whether the StackItem should take up 100% of the height of its parent.
-  as React.ElementType<React.HTMLAttributes<HTMLElement>>
 Defines how to render the Stack.
-  disableShrink boolean
 Defines whether Stack children should not shrink to fit the available space.
-  gap number | string
 Defines the spacing between Stack children. The property is specified as a value for 'row gap', followed optionally by a value for 'column gap'. If 'column gap' is omitted, it's set to the same value as 'row gap'.
-  grow boolean | number | 'inherit' | 'initial' | 'unset'
 Defines how much to grow the Stack in proportion to its siblings.
-  horizontal boolean
 Defines whether to render Stack children horizontally.
-  horizontalAlign Alignment
 Defines how to align Stack children horizontally (along the x-axis).
-  maxHeight number | string
 Defines the maximum height that the Stack can take.
-  maxWidth number | string
 Defines the maximum width that the Stack can take.
-  padding number | string
 Defines the inner padding of the Stack.
-  reversed boolean
 Defines whether to render Stack children in the opposite direction (bottom-to-top if it's a vertical Stack and right-to-left if it's a horizontal Stack).
-  verticalAlign Alignment
 Defines how to align Stack children vertically (along the y-axis).
-  verticalFill boolean
 Defines whether the Stack should take up 100% of the height of its parent. This property is required to be set to true when using thegrowflag on children in vertical oriented Stacks. Stacks are rendered as block elements and grow horizontally to the container already.
-  wrap boolean
 Defines whether Stack children should wrap onto multiple rows or columns when they are about to overflow the size of the Stack.
Value
Object with shiny.tag class suitable for use in the UI of a Shiny app.
Examples
library(shiny)
library(shiny.fluent)
ui <- function(id) {
  ns <- NS(id)
  Stack(
    tokens = list(childrenGap = 10),
    reversed = TRUE,
    span("Item One"),
    span("Item Two"),
    span("Item Three")
  )
}
server <- function(id) {
  moduleServer(id, function(input, output, session) {})
}
if (interactive()) {
  shinyApp(ui("app"), function(input, output) server("app"))
}
SwatchColorPicker
Description
A swatch color picker (SwatchColorPicker) displays color options as a grid. It can be shown by itself, with a header and dividers, or as a button that expands to show the swatch color picker.
For more details and examples visit the official docs. The R package cannot handle each and every case, so for advanced use cases you need to work using the original docs to achieve the desired result.
Usage
SwatchColorPicker(...)
SwatchColorPicker.shinyInput(inputId, ..., value = defaultValue)
updateSwatchColorPicker.shinyInput(
  session = shiny::getDefaultReactiveDomain(),
  inputId,
  ...
)
Arguments
| ... | Props to pass to the component. The allowed props are listed below in the Details section. | 
| inputId | ID of the component. | 
| value | Starting value. | 
| session | Object passed as the  | 
Details
-  color string
 The CSS-compatible string to describe the color
-  id string
 Arbitrary unique string associated with this option
-  index number
 Index for this option
-  label string
 Tooltip and aria label for this item
-  borderWidth number
 Width of the border that indicates a selected/hovered cell, in pixels.
-  circle boolean
 True if this cell should be rendered as a circle, false if it should be a square. @defaulttrue(render as circle)
-  color string
 The CSS-compatible string to describe the color
-  disabled boolean
 Whether this cell should be disabled @default false
-  height number
 Height of the cell, in pixels
-  id string
 Used as a PREFIX for the cell's ID (the cell will not have this literal string as its ID).
-  idPrefix string
 Prefix for this cell's ID. Will be required in a future version onceidis removed.
-  index number
 Index for this option
-  item IColorCellProps
 Item to render
-  label string
 Tooltip and aria label for this item
-  onClick (item: IColorCellProps) => void
 Handler for when a color cell is clicked.
-  onFocus (item: IColorCellProps) => void
 
-  onHover (item?: IColorCellProps) => void
 
-  onKeyDown (ev: React.KeyboardEvent<HTMLButtonElement>) => void
 
-  onMouseEnter (ev: React.MouseEvent<HTMLButtonElement>) => boolean
 Mouse enter handler. Returns true if the event should be processed, false otherwise.
-  onMouseLeave (ev: React.MouseEvent<HTMLButtonElement>) => void
 
-  onMouseMove (ev: React.MouseEvent<HTMLButtonElement>) => boolean
 Mouse move handler. Returns true if the event should be processed, false otherwise.
-  onWheel (ev: React.MouseEvent<HTMLButtonElement>) => void
 
-  selected boolean
 Whether this cell is currently selected
-  styles IStyleFunctionOrObject<IColorPickerGridCellStyleProps, IColorPickerGridCellStyles>
 Custom styles for the component.
-  theme ITheme
 The theme object to use for styling.
-  width number
 Width of the cell, in pixels
-  ariaPosInSet number
 Position this grid is in the parent set (index in a parent menu, for example)
-  ariaSetSize number
 Size of the parent set (size of parent menu, for example)
-  cellBorderWidth number
 Width of the border indicating a hovered/selected cell, in pixels
-  cellHeight number
 Height of an individual cell, in pixels
-  cellMargin number
 The distance between cells, in pixels
-  cellShape 'circle' | 'square'
 The shape of the color cells. @default 'circle'
-  cellWidth number
 Width of an individual cell, in pixels
-  className string
 Additional class name to provide on the root element
-  colorCells IColorCellProps[]
 The color cells that will be made available to the user.
Note: When the reference to this prop changes, regardless of how many color cells change, all of the color cells will be re-rendered (potentially bad perf) because we memoize based on this prop's reference.
-  columnCount number
 Number of columns for the swatch color picker
-  disabled boolean
 Whether the control is disabled.
-  doNotContainWithinFocusZone boolean
 If false (the default), the grid is contained inside a FocusZone. If true, a FocusZone is not used. @default false
-  focusOnHover boolean
 Whether to update focus when a cell is hovered.
-  getColorGridCellStyles IStyleFunctionOrObject<IColorPickerGridCellStyleProps, IColorPickerGridCellStyles>
 Styles for the grid cells.
-  id string
 ID for the swatch color picker's root element. Also used as a prefix for the IDs of color cells.
-  isControlled boolean
 Indicates whether the SwatchColorPicker is fully controlled. When true, the component will not set its internal state to track the selected color. Instead, the parent component will be responsible for handling state in the callbacks likeonColorChanged.
NOTE: This property is a temporary workaround to force the component to be fully controllable without breaking existing behavior
-  mouseLeaveParentSelector string | undefined
 Selector to focus on mouse leave. Should only be used in conjunction withfocusOnHover.
-  onCellFocused (id?: string, color?: string) => void
 Callback for when the user focuses a color cell. Ifidandcolorare unspecified, cells are no longer being focused.
-  onCellHovered (id?: string, color?: string) => void
 Callback for when the user hovers over a color cell. Ifidandcolorare unspecified, cells are no longer being hovered.
-  onColorChanged (id?: string, color?: string) => void
 Callback for when the user changes the color. Ifidandcolorare unspecified, there is no selected cell. (e.g. the user executed the currently selected cell to unselect it)
-  positionInSet number
 
-  selectedId string
 The ID of color cell that is currently selected
-  setSize number
 
-  shouldFocusCircularNavigate boolean
 Whether focus should cycle back to the beginning once the user navigates past the end (and vice versa). Only relevant ifdoNotContainWithinFocusZoneis not true.
-  styles IStyleFunctionOrObject<ISwatchColorPickerStyleProps, ISwatchColorPickerStyles>
 Styles for the component.
-  theme ITheme
 Theme to apply to the component.
Value
Object with shiny.tag class suitable for use in the UI of a Shiny app.
The update functions return nothing (called for side effects).
Best practices
Layout
- Use a swatch color picker when there are multiple color options that can be grouped or collapsed under one title. 
- Don’t use a swatch color picker when there’s a large number of color options. The best component for that is a color picker. 
Examples
library(shiny)
library(shiny.fluent)
colorCells <- list(
  list(id = "orange", color = "#ca5010"),
  list(id = "cyan", color = "#038387"),
  list(id = "blueMagenta", color = "#8764b8"),
  list(id = "magenta", color = "#881798"),
  list(id = "white", color = "#ffffff")
)
ui <- function(id) {
  ns <- NS(id)
  div(
    SwatchColorPicker.shinyInput(ns("color"), value = "orange",
      colorCells = colorCells, columnCount = length(colorCells)
    ),
    textOutput(ns("swatchValue"))
  )
}
server <- function(id) {
  moduleServer(id, function(input, output, session) {
    output$swatchValue <- renderText({
      sprintf("Value: %s", input$color)
    })
  })
}
if (interactive()) {
  shinyApp(ui("app"), function(input, output) server("app"))
}
TeachingBubble
Description
A teaching bubble (TeachingBubble) brings attention to a new or important feature, with the goal of increasing engagement with the feature. A teaching bubble typically follows a coach mark.
Use teaching bubbles sparingly. Consider how frequently people will see it, and how many they’ll see across their entire experience.
For more details and examples visit the official docs. The R package cannot handle each and every case, so for advanced use cases you need to work using the original docs to achieve the desired result.
Usage
TeachingBubble(...)
TeachingBubbleContent(...)
Arguments
| ... | Props to pass to the component. The allowed props are listed below in the Details section. | 
Details
-  ariaDescribedBy string
 Defines the element id referencing the element containing the description for the TeachingBubble.
-  ariaLabelledBy string
 Defines the element id referencing the element containing label text for TeachingBubble.
-  calloutProps ICalloutProps
 Properties to pass through for Callout, reference detail properties in ICalloutProps
-  componentRef IRefObject<ITeachingBubble>
 Optional callback to access the ITeachingBubble interface. Use this instead of ref for accessing the public methods and properties of the component.
-  focusTrapZoneProps IFocusTrapZoneProps
 Properties to pass through for FocusTrapZone, reference detail properties in IFocusTrapZoneProps
-  footerContent string | JSX.Element
 Text that will be rendered in the footer of the TeachingBubble. May be rendered alongside primary and secondary buttons.
-  hasCloseButton boolean
 Whether the TeachingBubble renders close button in the top right corner.
-  hasCloseIcon boolean
 
-  hasCondensedHeadline boolean
 A variation with smaller bold headline and no margins.
-  hasSmallHeadline boolean
 A variation with smaller bold headline and margins to the body. (hasCondensedHeadlinetakes precedence if it is also set to true.)
-  headline string
 A headline for the Teaching Bubble.
-  illustrationImage IImageProps
 An Image for the TeachingBubble.
-  isWide boolean
 Whether or not the TeachingBubble is wide, with image on the left side.
-  onDismiss (ev?: any) => void
 Callback when the TeachingBubble tries to close.
-  primaryButtonProps IButtonProps
 The Primary interaction button
-  secondaryButtonProps IButtonProps
 The Secondary interaction button
-  styles IStyleFunctionOrObject<ITeachingBubbleStyleProps, ITeachingBubbleStyles>
 Call to provide customized styling that will layer on top of the variant rules.
-  target Target
 Element, MouseEvent, Point, or querySelector string that the TeachingBubble should anchor to.
-  targetElement HTMLElement
 
-  theme ITheme
 Theme provided by High-Order Component.
Value
Object with shiny.tag class suitable for use in the UI of a Shiny app.
Best practices
Layout
- Teaching bubbles can be used in sequence to walk people through complex, multistep interactions only. And only show one teaching bubble at a time. 
- A maximum of no more than 3 sequenced teaching bubbles should be used in a single experience. 
- Sequenced teaching bubbles should have “x of y” text to indicate progress through the sequence. For example, the first teaching bubble in a sequence might be “1 of 3”.) 
- Always place the primary button on the left, the secondary button just to the right of it. 
- Show only one primary button that inherits theme color at rest state. In the event there are more than two buttons with equal priority, all buttons should have neutral backgrounds. 
Content
A teaching bubble should include:
Title
You have 25 characters (including spaces) to draw people in and get them interested. Limit to one line of text, and use sentence casing (capitalize only the first word and any proper nouns) with no punctuation.
Body copy
Lead with why the feature is useful rather than describe what it is. What does it make possible? Keep it within 120 characters (including spaces).
Action buttons
Limit button labels to 15 characters (including spaces). Provide people with an explicit action to dismiss the teaching bubble, such as “Got it”. Include a secondary button to give people the option to take action, such as “Show me” or “Edit settings”. When two buttons are needed, make the call-to-action button the primary button and the dismissal button (such as “No thanks”) the secondary button. Use sentence casing (capitalize only the first word and any proper nouns) with no punctuation. On a sequenced teaching bubble, use "Next" for the action button label and "Got it" for the final sequenced teaching bubble action button with text that closes the experience.
Link (Optional)
If there are additional steps people need to know about, or helpful information they may want to read, consider linking to a help article. Typically, these links are labeled “Learn more” with no punctuation at the end.
Examples
library(shiny)
library(shiny.fluent)
ui <- function(id) {
  ns <- NS(id)
  div(
    DefaultButton.shinyInput(
      ns("toggleTeachingBubble"),
      id = "target",
      text = "Toggle TeachingBubble"
    ),
    reactOutput(ns("teachingBubble"))
  )
}
server <- function(id) {
  moduleServer(id, function(input, output, session) {
    showBubble <- reactiveVal(FALSE)
    observeEvent(input$toggleTeachingBubble, showBubble(!showBubble()))
    output$teachingBubble <- renderReact({
      if (showBubble()) {
        TeachingBubble(
          target = "#target",
          headline = "Very useful!"
        )
      }
    })
  })
}
if (interactive()) {
  shinyApp(ui("app"), function(input, output) server("app"))
}
Text
Description
Text is a component for displaying text. You can use Text to standardize text across your web app.
You can specify the variant prop to apply font styles to Text. This variant pulls from the Fluent UI React theme loaded on the page. If you do not specify the variant prop, by default, Text applies the styling from specifying the variant value to medium.
The Text control is inline wrap by default. You can specify block to enable block and nowrap to enable nowrap. For ellipsis on overflow to work properly, block and nowrap should be manually set to true.
For more details and examples visit the official docs. The R package cannot handle each and every case, so for advanced use cases you need to work using the original docs to achieve the desired result.
Usage
Text(...)
Arguments
| ... | Props to pass to the component. The allowed props are listed below in the Details section. | 
Details
-  as React.ElementType<React.HTMLAttributes<HTMLElement>>
 Optionally render the component as another component type or primitive.
-  block boolean
 Whether the text is displayed as a block element.
Note that in order for ellipsis on overflow to work properly, block and nowrap should be set to true.
-  nowrap boolean
 Whether the text is not wrapped.
Note that in order for ellipsis on overflow to work properly, block and nowrap should be set to true.
-  variant keyof IFontStyles
 Optional font type for Text.
Value
Object with shiny.tag class suitable for use in the UI of a Shiny app.
Examples
library(shiny)
library(shiny.fluent)
ui <- function(id) {
  ns <- NS(id)
  Text(variant = "xLarge", "Some text with a nice Fluent UI font")
}
server <- function(id) {
  moduleServer(id, function(input, output, session) {})
}
if (interactive()) {
  shinyApp(ui("app"), function(input, output) server("app"))
}
Theme
Description
For more details and examples visit the official docs. The R package cannot handle each and every case, so for advanced use cases you need to work using the original docs to achieve the desired result.
ThemeProvider is a utility that applies contextual theming to its child components.
See the official docs
for details.
Usage
ThemeProvider(...)
Arguments
| ... | Props to pass to the component. The allowed props are listed below in the Details section. | 
Value
Object with shiny.tag class suitable for use in the UI of a Shiny app.
Examples
# Example 1
library(shiny)
library(shiny.fluent)
options <- list(
  list(key = "A", text = "Option A"),
  list(key = "B", text = "Option B")
)
theme <- list(
  palette = list(
    themePrimary = "#8dd400",
    themeLighterAlt = "#060800",
    themeLighter = "#172200",
    themeLight = "#2a3f00",
    themeTertiary = "#557f00",
    themeSecondary = "#7cba00",
    themeDarkAlt = "#97d816",
    themeDark = "#a6de35",
    themeDarker = "#bce766",
    neutralLighterAlt = "#323130",
    neutralLighter = "#31302f",
    neutralLight = "#2f2e2d",
    neutralQuaternaryAlt = "#2c2b2a",
    neutralQuaternary = "#2a2928",
    neutralTertiaryAlt = "#282726",
    neutralTertiary = "#c8c8c8",
    neutralSecondary = "#d0d0d0",
    neutralPrimaryAlt = "#dadada",
    neutralPrimary = "#ffffff",
    neutralDark = "#f4f4f4",
    black = "#f8f8f8",
    white = "#323130"
  )
)
ui <- function(id) {
  ns <- NS(id)
  ThemeProvider(
    theme = theme,
    Stack(
      tokens = list(childrenGap = "10px"),
      style = list(width = 250),
      PrimaryButton(text = "PrimaryButton"),
      Checkbox(label = "Checkbox"),
      ChoiceGroup(label = "ChoiceGroup", options = options)
    )
  )
}
server <- function(id) {
  moduleServer(id, function(input, output, session) {})
}
if (interactive()) {
  shinyApp(ui("app"), function(input, output) server("app"))
}
# Example 2
library(shiny)
library(shiny.fluent)
options <- list(
  list(key = "A", text = "Option A"),
  list(key = "B", text = "Option B")
)
# Use JSON created in Theme Designer
# https://fabricweb.z5.web.core.windows.net/pr-deploy-site/refs/heads/master/theming-designer/
theme <- '{
  "themePrimary": "#324f09",
  "themeLighterAlt": "#dfead1",
  "themeLighter": "#c4d7ab",
  "themeLight": "#abc388",
  "themeTertiary": "#92b069",
  "themeSecondary": "#7c9c4e",
  "themeDarkAlt": "#678937",
  "themeDark": "#547624",
  "themeDarker": "#426214",
  "neutralLighterAlt": "#f8ebce",
  "neutralLighter": "#f4e8cb",
  "neutralLight": "#eadec2",
  "neutralQuaternaryAlt": "#dacfb5",
  "neutralQuaternary": "#d0c5ad",
  "neutralTertiaryAlt": "#c8bea6",
  "neutralTertiary": "#595858",
  "neutralSecondary": "#373636",
  "neutralPrimaryAlt": "#2f2e2e",
  "neutralPrimary": "#000000",
  "neutralDark": "#151515",
  "black": "#0b0b0b",
  "white": "#fff2d4"
}'
ui <- function(id) {
  ns <- NS(id)
  ThemeProvider(
    theme = parseTheme(json = theme),
    Stack(
      tokens = list(childrenGap = "10px"),
      style = list(width = 250),
      PrimaryButton(text = "PrimaryButton"),
      Checkbox(label = "Checkbox"),
      ChoiceGroup(label = "ChoiceGroup", options = options)
    )
  )
}
server <- function(id) {
  moduleServer(id, function(input, output, session) {})
}
if (interactive()) {
  shinyApp(ui("app"), function(input, output) server("app"))
}
Toggle
Description
A toggle represents a physical switch that allows someone to choose between two mutually exclusive options. For example, “On/Off”, “Show/Hide”. Choosing an option should produce an immediate result.
For more details and examples visit the official docs. The R package cannot handle each and every case, so for advanced use cases you need to work using the original docs to achieve the desired result.
Usage
Toggle(...)
Toggle.shinyInput(inputId, ..., value = defaultValue)
updateToggle.shinyInput(
  session = shiny::getDefaultReactiveDomain(),
  inputId,
  ...
)
Arguments
| ... | Props to pass to the component. The allowed props are listed below in the Details section. | 
| inputId | ID of the component. | 
| value | Starting value. | 
| session | Object passed as the  | 
Details
-  ariaLabel string
 Text for screen-reader to announce as the name of the toggle.
-  as IComponentAs<React.HTMLAttributes<HTMLElement>>
 Render the root element as another type.
-  checked boolean
 Checked state of the toggle. If you are maintaining state yourself, use this property. Otherwise usedefaultChecked.
-  componentRef IRefObject<IToggle>
 Optional callback to access the IToggle interface. Use this instead of ref for accessing the public methods and properties of the component.
-  defaultChecked boolean
 Initial state of the toggle. If you want the toggle to maintain its own state, use this. Otherwise usechecked.
-  disabled boolean
 Optional disabled flag.
-  inlineLabel boolean
 Whether the label (not the onText/offText) should be positioned inline with the toggle control. Left (right in RTL) side when on/off text provided VS right (left in RTL) side when no on/off text. Caution: when not providing on/off text user may get confused in differentiating the on/off states of the toggle.
-  keytipProps IKeytipProps
 Optional keytip for this toggle
-  label string | JSX.Element
 A label for the toggle.
-  offAriaLabel string
 
-  offText string
 Text to display when toggle is OFF. Caution: when not providing on/off text user may get confused in differentiating the on/off states of the toggle.
-  onAriaLabel string
 
-  onChange (event: React.MouseEvent<HTMLElement>, checked?: boolean) => void
 Callback issued when the value changes.
-  onChanged (checked: boolean) => void
 
-  onText string
 Text to display when toggle is ON. Caution: when not providing on/off text user may get confused in differentiating the on/off states of the toggle.
-  role 'checkbox' | 'switch' | 'menuitemcheckbox'
 (Optional) Specify whether to use the "switch" role (ARIA 1.1) or the checkbox role (ARIA 1.0). If unspecified, defaults to "switch".
-  styles IStyleFunctionOrObject<IToggleStyleProps, IToggleStyles>
 Optional styles for the component.
-  theme ITheme
 Theme provided by HOC.
Value
Object with shiny.tag class suitable for use in the UI of a Shiny app.
The update functions return nothing (called for side effects).
Best practices
Layout
- When people need to perform extra steps for changes to take effect, use a check box instead. For example, if they must click a "Submit", "Next", or "OK" button to apply changes, use a check box. 
Content
- Only replace the On/Off labels if there are more specific labels for the setting. For example, you might use Show/Hide if the setting is "Show images". 
- Keep descriptive text short and concise—two to four words; preferably nouns. For example, "Focused inbox" or "WiFi". 
Examples
library(shiny)
library(shiny.fluent)
ui <- function(id) {
  ns <- NS(id)
  div(
    Toggle.shinyInput(ns("toggle"), value = TRUE),
    textOutput(ns("toggleValue"))
  )
}
server <- function(id) {
  moduleServer(id, function(input, output, session) {
    output$toggleValue <- renderText({
      sprintf("Value: %s", input$toggle)
    })
  })
}
if (interactive()) {
  shinyApp(ui("app"), function(input, output) server("app"))
}
Tooltip
Description
A good tooltip briefly describes unlabeled controls or provides a bit of additional information about labeled controls, when this is useful. It can also help customers navigate the UI by offering additional—not redundant—information about control labels, icons, and links. A tooltip should always add valuable information; use sparingly.
There are two components you can use to display a tooltip:
-  Tooltip: A styled tooltip that you can display on a chosen target. 
-  TooltipHost: A wrapper that automatically shows a tooltip when the wrapped element is hovered or focused. 
For more details and examples visit the official docs. The R package cannot handle each and every case, so for advanced use cases you need to work using the original docs to achieve the desired result.
Usage
TooltipHost(...)
Arguments
| ... | Props to pass to the component. The allowed props are listed below in the Details section. | 
Details
-  calloutProps ICalloutProps
 Additional properties to pass through for Callout.
-  className string
 Class name to apply to the tooltip itself, not the host. To apply a class to the host, usehostClassNameorstyles.root.
-  closeDelay number
 Number of milliseconds to delay closing the tooltip, so that the user has time to hover over the tooltip and interact with it. Hovering over the tooltip will count as hovering over the host, so that the tooltip will stay open if the user is actively interacting with it.
-  componentRef IRefObject<ITooltipHost>
 Optional callback to access the ITooltipHost interface. Use this instead of ref for accessing the public methods and properties of the component.
-  content string | JSX.Element | JSX.Element[]
 Content to display in the Tooltip.
-  delay TooltipDelay
 Length of delay before showing the tooltip on hover.
-  directionalHint DirectionalHint
 How the tooltip should be anchored to itstargetElement.
-  directionalHintForRTL DirectionalHint
 How the element should be positioned in RTL layouts. If not specified, a mirror ofdirectionalHintwill be used.
-  hostClassName string
 Class name to apply to tooltip host.
-  id string
 Optional ID to pass through to the tooltip (not used on the host itself). Auto-generated if not provided.
-  onTooltipToggle onTooltipToggle?(isTooltipVisible: boolean): void;
 Notifies when tooltip becomes visible or hidden, whatever the trigger was.
-  overflowMode TooltipOverflowMode
 If this is unset (the default), the tooltip is always shown even if there's no overflow.
If set, only show the tooltip if the specified element (Self or Parent) has overflow. When set to Parent, the parent element is also used as the tooltip's target element.
Note that even with Self mode, the TooltipHost does not check whether any children have overflow.
-  setAriaDescribedBy boolean
 Whether or not to mark the TooltipHost root element as described by the tooltip. If not specified, the caller should pass anidto the TooltipHost (to be passed through to the Tooltip) and mark the appropriate element asaria-describedbytheid.
-  styles IStyleFunctionOrObject<ITooltipHostStyleProps, ITooltipHostStyles>
 Call to provide customized styling that will layer on top of the variant rules.
-  theme ITheme
 Theme provided by higher-order component.
-  tooltipProps ITooltipProps
 Additional properties to pass through for Tooltip.
-  calloutProps ICalloutProps
 Properties to pass through for Callout.
-  componentRef IRefObject<ITooltip>
 Optional callback to access the ITooltip interface. Use this instead of ref for accessing the public methods and properties of the component.
-  content string | JSX.Element | JSX.Element[]
 Content to be passed to the tooltip
-  delay TooltipDelay
 Length of delay. Set toTooltipDelay.zeroif you do not want a delay.
-  directionalHint DirectionalHint
 How the tooltip should be anchored to itstargetElement.
-  directionalHintForRTL DirectionalHint
 How the element should be positioned in RTL layouts. If not specified, a mirror ofdirectionalHintwill be used instead
-  maxWidth string | null
 Max width of tooltip
-  onRenderContent IRenderFunction<ITooltipProps>
 Render function to populate tooltip content.
-  styles IStyleFunctionOrObject<ITooltipStyleProps, ITooltipStyles>
 Call to provide customized styling that will layer on top of the variant rules.
-  targetElement HTMLElement
 Element to anchor the Tooltip to.
-  theme ITheme
 Theme provided by higher-order component.
Value
Object with shiny.tag class suitable for use in the UI of a Shiny app.
Best practices
Content
- Don’t use a tooltip to restate a button name that’s already shown in the UI. 
- When a control or UI element is unlabeled, use a simple, descriptive noun phrase. For example: “Highlighting pen”. Only capitalize the first word (unless a subsequent word is a proper noun), and don’t use a period. 
- For a disabled control that could use an explanation, provide a brief description of the state in which the control will be enabled. For example: “This feature is available for line charts.” 
- Only use periods for complete sentences. 
For a UI label that needs some explanation:
- Briefly describe what you can do with the UI element. 
- Use the imperative verb form. For example, "Find text in this file" (not "Finds text in this file"). 
- Don't include end punctuation unless there is at least one complete sentence. 
For a truncated label or a label that’s likely to truncate in some languages:
- Provide the untruncated label in the tooltip. 
- Don't provide a tooltip if the untruncated info is provided elsewhere on the page or flow. 
- Optional: On another line, provide a clarifying description, but only if needed. 
Examples
library(shiny)
library(shiny.fluent)
ui <- function(id) {
  ns <- NS(id)
  TooltipHost(
    content = "This is the tooltip content",
    delay = 0,
    Text("Hover over me")
  )
}
server <- function(id) {
  moduleServer(id, function(input, output, session) {})
}
if (interactive()) {
  shinyApp(ui("app"), function(input, output) server("app"))
}
Divider
Description
A Divider is a line that is used to visually differentiate different parts of a UI. They are commonly used in headers and command bars. This divider automatically center algins itself within the parent container and can be customized to be shown in different heights and colors.
For more details and examples visit the official docs. The R package cannot handle each and every case, so for advanced use cases you need to work using the original docs to achieve the desired result.
Usage
VerticalDivider(...)
Arguments
| ... | Props to pass to the component. The allowed props are listed below in the Details section. | 
Value
Object with shiny.tag class suitable for use in the UI of a Shiny app.
Best practices
Use a divider component to show a sectional or continuity change in the content between two blocks of information. The spacing around the divider is generally determined by the content surrounding it.
There are two recommended divider color combinations:
- #C8C8C8/neutralTertiaryAlt divider when used within an #F4F4F4/neutralLighter layout 
- #EAEAEA/neutralLight divider when used within an #FFFFFF/white layout 
Documentation template for remaining components
Description
Documentation template for remaining components
Arguments
| ... | Props to pass to the component. The allowed props are listed below in the Details section. | 
Value
Object with shiny.tag class suitable for use in the UI of a Shiny app.
Basic Fluent UI page
Description
Creates a Fluent UI page with sensible defaults (included Fabric CSS classes, proper class given to the body tag, suppressed Bootstrap).
Usage
fluentPage(..., suppressBootstrap = TRUE)
Arguments
| ... | The contents of the document body. | 
| suppressBootstrap | Whether to suppress Bootstrap. | 
Details
The Bootstrap library is suppressed by default, as it doesn't work well with Fluent UI in general.
Value
Object which can be passed as the UI of a Shiny app.
A dataset of sample people based on Fluent UI examples
Description
A dataset of sample people based on Fluent UI examples
Usage
fluentPeople
Format
An object of class tbl_df (inherits from tbl, data.frame) with 7 rows and 11 columns.
Source
https://developer.microsoft.com/en-us/fluentui#/controls/web/peoplepicker
A randomly generated dataset of imaginary sales deals
Description
Sales deals to Top 10 companies from the Fortune 500 dataset (located at
https://hifld-geoplatform.opendata.arcgis.com/datasets/fortune-500-corporate-headquarters)
are randomly generated for each person in fluentPeople.
Usage
fluentSalesDeals
Format
An object of class tbl_df (inherits from tbl, data.frame) with 100 rows and 30 columns.
parseTheme
Description
Reads a theme JSON generated by Theme Designer: https://fabricweb.z5.web.core.windows.net/pr-deploy-site/refs/heads/master/theming-designer/
and parses it to an object digestable by ThemeProvider
Usage
parseTheme(path = NULL, json = NULL)
Arguments
| path | A path to JSON file containing the theme created in Theme Designer | 
| json | A JSON string containing the theme created in Theme Designer | 
Value
A list with Fluent theme that can be used in ThemeProvider
See Also
ThemeProvider() for usage of this function
Objects exported from other packages
Description
These objects are imported from other packages. Follow the links below to see their documentation.
- shiny.react
Run example shiny.fluent apps.
Description
Based on shiny::runExample, and takes the same arguments.
Usage
runExample(
  example = NA,
  port = getOption("shiny.port"),
  launch.browser = getOption("shiny.launch.browser", interactive()),
  host = getOption("shiny.host", "127.0.0.1"),
  display.mode = c("auto", "normal", "showcase")
)
Arguments
| example | Example to run.  | 
| port | The TCP port that the application should listen on | 
| launch.browser | Whether to open the app in a browser | 
| host | The IPv4 address to listen on. | 
| display.mode | Display mode for the app. | 
Value
This function normally does not return; interrupt R to stop the application (usually by pressing Ctrl+C or Esc).
Shiny Fluent JS dependency
Description
Shiny Fluent JS dependency
Usage
shinyFluentDependency()
Value
HTML dependency object.
Documentation template for components with .shinyInput wrappers
Description
Documentation template for components with .shinyInput wrappers
Arguments
| inputId | ID of the component. | 
| value | Starting value. | 
| session | Object passed as the  | 
| ... | Props to pass to the component. The allowed props are listed below in the Details section. | 
Value
Object with shiny.tag class suitable for use in the UI of a Shiny app.
The update functions return nothing (called for side effects).