Summary

A container for secondary content/controls to be displayed on user request. Consider this component as displayed in context to the triggering control with the dialog overlaying the page content.

An inline dialog should be preferred over a modal dialog when a connection between the action has a clear benefit versus having a lower user focus.

Status

API status: general
Web resource key: com.atlassian.auiplugin:aui-inline-dialog2
AMD Module key: require('aui/inline-dialog2')
Experimental API: 5.7
General API: 5.9
Web Component API: 5.9

Behaviour

Triggering

An inline dialog can be opened by a Trigger element. Any interactive element can be made in to a trigger — the typical elements to use are either <button> or <a>

Associate a trigger (data-aui-trigger) to an inline dialog by setting the trigger element's aria-controls attribute to the id of the inline dialog:

Opening

An inline dialog will, by default, open when a user clicks its trigger, but can be made to open:

Programmatically opening

To programmatically open an inline dialog, set its open property or add the open boolean attribute:

Opening at page load

To make an inline dialog open at page load, simply specify the open boolean attribute:

Boolean attributes

As per the boolean attribute spec, a boolean attribute such as open="false" is interpreted as true.

Opening by hovering over the trigger deprecated

Make an inline dialog show when hovering over the trigger by setting the inline dialog's responds-to attribute:

Or by setting the respondsTo JavaScript property:

Hovering includes having keyboard focus

As an accessibility enhancement, giving an inline dialog's trigger focus will also enable hovering behaviour.

Closing

Inline dialogs will automatically close when the user clicks outside the inline dialog or presses ESC. Inline dialogs that open on hover close when the user stops hovering over either the trigger or the inline dialog itself.

An inline dialog that is set to not automatically close can only be closed programmatically, e.g., via an event handler bound to a close button.

Programmatically closing

To programmatically close an inline dialog, set its open property or remove its open attribute:

Prevent automatic closing

Inline dialogs can be forced to remain open via the persistent boolean attribute:

Or by setting the persistent JavaScript property:

Accessibility

Label

Make sure you set aria-label on aui-inline-dialog element to give screen reader friendly description of the the dialog's content. When aria-label is missing the AT will read whole content of the dialog.

Appearance

Alignment

An inline dialog can be aligned, relative to its trigger, along twelve different points, via the alignment attribute:

The alignment attribute takes two positional arguments (deprecated - arrows will be removed in AUI 10) in the format alignment="edge edge-position", where

  • edge specifies what edge to align the inline dialog's arrow to, and
  • edge-position specifies where on that edge the arrow should appear.

See the alignment API reference for all valid combinations, or test the combinations below:

Alignment is rendered once

An inline dialog's alignment cannot be changed once the inline dialog has been opened. However, it will continue to be responsive to space constraints.

Space-constrained alignment

If there is not enough room to display an inline dialog with the desired alignment the inline dialog will flip alignment.

API Reference

Attributes and properties

Name Attribute Property Type Description
id is an attribute is a property String

Required when using a trigger to interact with an inline dialog but not required for the inline dialog to function.

Defaults to null.

alignment is an attribute is not a property String

Specifies an inline dialog's alignment with respect to its trigger. The inline dialog is not positioned if this is not specified.

Defaults to "right middle".

Show all values

open is an attribute is a property Boolean

When set it either hides or shows the element based on whether the incoming value is falsy or truthy. When accessed it will return whether or not the inline dialog is open.

Defaults to false.

persistent is an attribute is a property Boolean

Specifies that an inline dialog is persistent. Persistent inline dialogs cannot be closed by outside click or escape.

Defaults to false.

responds-to is an attribute is a property String

Determines the type of interaction a trigger will have with its inline dialog.

Values:

  • toggle default - will respond to click event on the trigger.
  • hover deprecated - will respond to mouseover, mouseout, focus, blur events on the trigger.

Events

Events are triggered when inline dialogs are shown and hidden. These events are triggered natively on the component. You can bind to the the inline dialog element for instance specific events, or rely on event bubbling and bind to the document to receive events for every show and hide.

Event Description Preventable Bubbles
aui-show Triggered before an inline dialog instance is shown. Yes. Prevents it from showing. Yes
aui-hide Triggered before an inline dialog instance is hidden. Yes. Prevents it from hiding. Yes

A11Y guidelines

Side note: whether you'd follow these guidelines or not, it's always advised to at least test your markup with a screen reader software.

Default a11y attributes

The next two attributes aria-expanded="false" and aria-haspopup="true" will be added to the trigger element by default along with role="group" which will be added to the aui-inline-dialog element.

  • aria-haspopup="true" indicates that the trigger is an interactive element which opens popup element.
  • aria-expanded="false" indicates the current state of the trigger. By default, the popup is collapsed.
  • role="group" indicates the element contains the list of the elements that are related to certain functionality/collection.

Change role of the popup element

In case there is a need to change role/type of the popup element it is possible by adding the role="..." attribute manually to the aui-inline-dialog element. It will not change the functionality of the Inline Dialog and the trigger, the only role="dialog" disables/removes the next attribute from the trigger aria-haspopup and aria-expanded

Dialog name

Dialog with role="dialog" attribute.

aria-labelledby & aria-describedby attributes

It is recommended to use aria-labelledby and aria-describedby attributes to reference other elements to provide accessible name and description for the inline dialog.

Dialog name

Dialog with aria-labelledby and aria-describedby attributes

aria-label attribute

As an alternative of aria-labelledby you can use aria-label attribute to provide accessible name for the inline dialog. Especially it is useful when:

  • you are implementing a custom control component;
  • there is no a header element inside;
  • the name of the inline dialog does not match with an inner header;
  • there are nested controls.

aui-focus-trap attribute

In case you need to create a custom component based on the Inline Dialog that should trap the focus inside you can use aui-focus-trap="true" attribute.

The focus trap on the popup element.

Recommendation

Please use the Web Accessibility Initiative (WAI) patterns as a reference for implementing accessible components.