Popup

A popup displays brief content in an overlay.

9.0.2

Patch Changes

9.0.1

Patch Changes

  • edd874d160803, (opens new window) - Updated popup's focus trap fix made behind "platform_dst-popup-trigger-initial-focus-ref" to be behind a second "platform-dst-popup-trigger-focus-fix" feature gate to coordinate rollout to all consumers.

9.0.0

Major Changes

  • d562a51283c05, (opens new window) - Widen Popup and Dropdown Menu trigger aria-haspopup types to include valid popup kinds, including menu. Consumers with explicitly narrow render-prop annotations may need to accept the additional values.

Patch Changes

  • Updated dependencies

8.1.0

Minor Changes

8.0.0

Major Changes

  • ae5c32fe7bfd6, (opens new window) - Record the rollback of the DSP-25935 popup trigger type expansion in PR #487935. This restores compatibility with existing consumers, including Jira Assets audit logs and linked objects.

    Popup's aria-haspopup trigger contract returns to boolean | 'dialog'. The affected public trigger props in Dropdown Menu, Avatar, Lozenge, Universal Create, Rovo Pins, and Navigation System also return to their earlier contracts. Consumers using the newly added role-specific string values must return to values supported by those earlier contracts. Popup no longer exports AriaHasPopup or TriggerAriaProps; use TriggerProps['aria-haspopup'] and Pick<TriggerProps, 'aria-controls' | 'aria-expanded' | 'aria-haspopup'> instead.

    Popup and Dropdown Menu retain their existing top-layer runtime ARIA values through the prior compatibility adapters. Conversation Assistant returns to its previous internal trigger type annotation without changing its public API.

Patch Changes

  • Updated dependencies

7.0.0

Major Changes

  • 5e712839d1e00, (opens new window) - Popup's trigger render props now include the role-specific aria-haspopup values "menu", "listbox", "tree", and "grid", which the top-layer path could already provide at runtime. Popup also exports AriaHasPopup and TriggerAriaProps for consumers to type trigger ARIA attributes. Use booleans instead of the string values "true" and "false".

    Dropdown Menu's custom trigger props now reflect Popup's aria-haspopup values, and Dropdown Item accepts the same roles and booleans. Custom triggers forward Popup's value on the legacy path; the top-layer path provides "menu". Dropdown items already forwarded aria-controls and aria-expanded at runtime.

Patch Changes

  • Updated dependencies

6.3.10

Patch Changes

  • Updated dependencies

6.3.9

Patch Changes

  • Updated dependencies

6.3.8

Patch Changes

  • Updated dependencies

6.3.7

Patch Changes

  • Updated dependencies

6.3.6

Patch Changes

  • Updated dependencies

6.3.5

Patch Changes

  • a7ec100f7d560, (opens new window) - Fixed shouldFitViewport doing nothing on the top-layer code path, and forwarded it to a custom popupComponent as on the legacy path. xcss on <Popup> is now applied on the top-layer path without a custom popupComponent; it was silently dropped there. Behind the platform-dst-top-layer gate; legacy (flag-off) behaviour is unchanged.
  • Updated dependencies

6.3.4

Patch Changes

  • 345efa8128cb2, (opens new window) - Behind platform_dst_popup_media_query_perf_fix Popups with the default appearance no longer cause state changes across the below.sm viewport media query Popups with the UNSAFE_modal-below-sm appearance (modal) still cause the state change This was done to fix popup heavy pages stuttering on resizing, as the state change was causing unnecessary re-renders
  • Updated dependencies

6.3.3

Patch Changes

6.3.2

Patch Changes

6.3.1

Patch Changes

  • 1c9e0caa93d4c, (opens new window) - Behind platform_dst-popup-trigger-initial-focus-ref: when the popup's focus trap deactivates and shouldReturnFocus is true, an animation-frame callback now rescues focus back to the trigger element if the browser silently dropped focus to document.body instead of returning it to the trigger.
  • Updated dependencies

6.3.0

Minor Changes

Patch Changes

  • Updated dependencies

6.2.2

Patch Changes

6.2.1

Patch Changes

  • Use @atlassian/testing-library exclusively in unit tests.
  • Updated dependencies

6.2.0

Minor Changes

  • d82e6f76528ab, (opens new window) - Add direct subpath package exports as part of the linking-platform, search, media, and design-system barrel-removal (de-barrel) migration.

    These packages now expose their individual modules via explicit package.json exports subpaths so that consumers can import directly from the leaf module (e.g. @atlaskit/pkg/thing) instead of the package barrel/index. This adds new public entry points without changing or removing any existing exports, so it is a backwards-compatible additive change.

    No runtime behaviour changes; this is an API-surface (entry-point) addition to support tree-shaking and to unblock removal of the barrel index files.

Patch Changes

  • Updated dependencies

6.1.0

Minor Changes

Patch Changes

  • Updated dependencies

6.0.4

Patch Changes

6.0.3

Patch Changes

6.0.2

Patch Changes

  • Updated dependencies

6.0.1

Patch Changes

6.0.0

Major Changes

  • 48e7d03469b80, (opens new window) - Apply Volt entry-point and barrel-removal standards across these design-system packages. Public exports now resolve directly to ./src/* implementations instead of intermediate ./src/entry-points/* re-exports, root barrels and remaining entry-point shims are marked deprecated in favour of per-export subpaths, and a few new subpaths are added (@atlaskit/badge/badge-new, @atlaskit/tile/tile-skeleton, @atlaskit/popper/main, @atlaskit/section-message/message, @atlaskit/section-message/message-action).

    Why this is breaking

    Subpaths and the package root can now resolve to the same module instance. Consumers that deep-imported entry-points/*, or jest.mock()'d a specific subpath may need updates. @atlaskit/image's root export now points at ./src/ui/image/index.tsx. @atlaskit/checkbox/checkbox now exports a named Checkbox from the implementation module (default export retained for backwards compatibility).

    Migration

    Prefer published subpaths over the package root:

    import { Checkbox } from '@atlaskit/checkbox/checkbox'; import TextField from '@atlaskit/textfield/text-field'; import Popup from '@atlaskit/popup/popup'; import SectionMessage from '@atlaskit/section-message/message'; import EmptyState from '@atlaskit/empty-state/empty-state';

    If you imported through internal entry-point modules, switch to the public subpath:

    -import Checkbox from '@atlaskit/checkbox/entry-points/checkbox'; +import { Checkbox } from '@atlaskit/checkbox/checkbox';

Patch Changes

  • Updated dependencies

5.2.3

Patch Changes

  • Updated dependencies

5.2.2

Patch Changes

5.2.1

Patch Changes

  • Updated dependencies

5.2.0

Minor Changes

Patch Changes

  • Updated dependencies

5.1.6

Patch Changes

  • Updated dependencies

5.1.5

Patch Changes

  • Updated dependencies

5.1.4

Patch Changes

  • Updated dependencies

5.1.3

Patch Changes

  • Updated dependencies

5.1.2

Patch Changes

5.1.1

Patch Changes

  • 662546a79c2bc, (opens new window) - Guard the update() call in RepositionOnUpdate so it is only invoked when the Popper render-prop update is a function. On Safari the Popper instance can be undefined when the layout effect fires, which previously threw TypeError: e.update is not a function and left consumers (such as the Jira status transition popup) stuck with an indefinite spinner.

5.1.0

Minor Changes

  • cd097a2111788, (opens new window) - Republish packages depending on @atlaskit/react-compiler-gating so their published dependency reference is updated to the renamed @atlaskit/react-compiler-gating scope.

    The earlier rename of @atlassian/react-compiler-gating to @atlaskit/react-compiler-gating only bumped the renamed package itself, so dependent packages were never republished and their published versions still referenced the old @atlassian/react-compiler-gating name, which is not available in the public npm registry. This minor bump republishes all affected packages with the corrected dependency.

Patch Changes

  • Updated dependencies

5.0.1

Patch Changes

5.0.0

Major Changes

  • f2dc9097319f0, (opens new window) - ### Dropped support for legacy Typescript 4 types. Typescript 5 is now the new minimum.

    Removes the typesVersions property and dist/types-ts4.5 directory from the dist.

    Types are now exclusively via the "types": "dist/types/index.d.ts" property.

    - "typesVersions": { - ">=4.5 <4.9": { - "*": [ - "dist/types-ts4.5/*", - "dist/types-ts4.5/index.d.ts" - ] - } - },

Minor Changes

Patch Changes

  • Updated dependencies

4.26.0

Minor Changes

  • 032135d12186b, (opens new window) - Top-layer: fix initial focus regressions on the top-layer adapters for @atlaskit/avatar-group and @atlaskit/popup. Behind the platform-dst-top-layer feature gate.

4.25.1

Patch Changes

  • Updated dependencies

4.25.0

Minor Changes

Patch Changes

  • Updated dependencies

4.24.0

Minor Changes

4.23.4

Patch Changes

  • 6d0485dce81c4, (opens new window) - Internal: updated to the new @atlaskit/top-layer Popover/Dialog behaviour where the host element unmounts after the exit animation completes. No consumer action required.
  • Updated dependencies

4.23.3

Patch Changes

4.23.2

Patch Changes

4.23.1

Patch Changes

  • Updated dependencies

4.23.0

Minor Changes

  • f6ef9f1fc7454, (opens new window) - Add an optional close-event ignore predicate to popup and dropdown menu so consumers can treat external overlays as part of popup interactions.

4.22.1

Patch Changes

4.22.0

Minor Changes

  • cc76d2e733b71, (opens new window) - Updates the top layer popup trigger's aria-expanded attribute, so it stays "true" for the duration of the popup's exit animation, only going false after the animation completes.

Patch Changes

  • Updated dependencies

4.21.2

Patch Changes

  • Updated dependencies

4.21.1

Patch Changes

  • Updated dependencies

4.21.0

Minor Changes

  • 8e9ab10567283, (opens new window) - When platform-dst-top-layer is enabled, the open layer observer registration now happens inside the Dialog and Popover primitives directly, so popup, modal-dialog, and tooltip no longer register with the open layer observer separately (avoiding double-counting).
    • Dialog registers as type: 'modal', with a no-op onClose, as there is no current use case for programmatic close of modals via the open layer observer.
    • Popover registers as type: 'popup' for interactive overlay roles (dialog, alertdialog, menu, listbox, tree, grid) and omits type for other roles (e.g. tooltip).
    • A new programmatic value has been added to TPopoverCloseReason to distinguish programmatic closes, such as those from the open layer observer's closeLayers() calls.

Patch Changes

  • Updated dependencies

4.20.2

Patch Changes

  • cc4a66306965d, (opens new window) - Cleanup feature gate platform_dst_nav4_flyout_menu_slots_close_button. Flyout menu slot subcomponents (header, body, footer) and close button are now permanently enabled.

4.20.1

Patch Changes

  • Updated dependencies

4.20.0

Minor Changes

  • 43e486948865a, (opens new window) - When platform-dst-top-layer is enabled, the compositional PopupContent now renders using Popover directly (instead of Popup.Content) so that useAnchorPosition and useWidthFromAnchor hooks can be applied with the correct anchor ref from TriggerRefObjectContext.

    This fixes the popup appearing in the wrong position and having incorrect width/layout relative to its trigger.

    The xcss prop is also now correctly forwarded to the underlying container element.

Patch Changes

  • Updated dependencies

4.19.1

Patch Changes

4.19.0

Minor Changes

  • 7250582895c0b, (opens new window) - Top-layer adoption work behind the platform-dst-top-layer feature flag. Public adopter APIs are intentionally kept narrow while the top-layer API surface settles, with one exception called out below.

    Highlights:

    • Pass the full [along, away] legacy popper offset through to the new top-layer placement.offset API (via fromLegacyPlacement). Previously only the away axis was forwarded, which dropped the along offset for consumers of Popup, PopupSelect, Spotlight, and Tooltip when platform-dst-top-layer is enabled.
    • Fix broken import of dialogHeight and dialogWidth from the removed utils module in @atlaskit/modal-dialog.

    Public API:

    • @atlaskit/tooltip (minor): add an optional testId?: string field to TriggerProps. This is additive (no existing prop changes shape). Required because @atlaskit/button/new (and other Pressable-backed primitives) overwrite data-testid from spread, so the legacy (triggerProps as any)['data-testid'] workaround is silently absorbed by those consumers. A typed testId field flows through their own testId destructure instead, restoring data-testid propagation onto the rendered trigger element.
    • @atlaskit/popup, @atlaskit/dropdown-menu (patch): no public type changes. Wider aria-haspopup unions that the FF-on path produces are bridged at the package boundary into @atlaskit/top-layer with localised FUDGE(top-layer-api) casts, documented in packages/design-system/top-layer/notes/decisions/migration-roadmap.md ("Open API decisions deferred to a follow-up PR"). They will be widened in a follow-up minor PR once the top-layer API is committed.
    • @atlaskit/modal-dialog, @atlaskit/select, @atlaskit/spotlight (patch/minor): no public type changes; bug fixes only.

    Merge-readiness fixes (FF-on test wiring + adopter behavior):

    • @atlaskit/popup (minor): wire the compositional PopupContent to delegate to PopupContentTopLayer when platform-dst-top-layer is enabled. Previously only the legacy Popup component had the FF branch, leaving consumers of the compositional API on the legacy popper path.
    • @atlaskit/select (minor): add an onClick handler to the PopupSelect top-layer trigger so clicks open/close the menu (mirrors the legacy global click handler in popup-select.tsx). Add explicit Escape handling on the menu's onKeyDown so the menu closes and focus returns to the trigger.
    • @atlaskit/top-layer (patch): the <dialog> rendered by the Dialog primitive now sets aria-modal="true" explicitly. Modern browsers infer modal semantics from .showModal() but some assistive tech still keys off the explicit attribute.
    • @atlaskit/top-layer (patch): guard use-anchor-positioning against environments where ResizeObserver is not defined (e.g. jest's node environment, used by the post-office test suite). The observer is used to wait for the popover's first valid layout before measuring; consumers in non-DOM jest environments now get a no-op observer and the scroll/resize listeners still apply if the host environment polyfills showPopover. Real browsers always have ResizeObserver.
    • @atlaskit/modal-dialog (patch): on the FF-on path, drop the tabIndex={-1} (and unused :focus-visible outline) from the modal content wrapper. The native <dialog>.showModal() focus-delegate algorithm picks the first focusable descendant (including tabindex=-1), and the wrapper was hijacking initial focus from the close button. Also honor shouldReturnFocus={ref} on the FF-on path (an unmount-cleanup focuses the ref after dialog.close() so it overrides the browser's automatic return-to-trigger). Boolean shouldReturnFocus={false} is not yet honored on the FF-on path — see top-layer/notes/merge-blockers.md.
    • @atlaskit/datetime-picker (patch): on the FF-on path, set mode="manual" on the Popup.Content rendered by both internal/menu-top-layer.tsx (date-picker calendar) and internal/fixed-layer-menu-top-layer.tsx (time-picker menu). With the default mode="auto", the same click event that opens the menu (which targets the react-select combobox input — outside the popover element) bubbles to the browser's native popover light-dismiss handler and immediately closes the menu. react-select / DateTimePicker already own outside-click and Esc dismissal via their own state, so opting out of the native auto-dismiss is the correct integration. Also extend the existing Esc → trigger-focus restoration in components/date-picker.tsx to the FF-on path (manual mode disables the browser's built-in focus return, and the legacy code path was already handling this for itself behind an FF negation).
    • @atlaskit/popup (no public API change): no source changes — only FF-on Playwright spec/example fixes drove the suite from 21/3/2 to 27/0/0. Notable: the two test.fixme'd nested-popover cases were not browser limitations; popover="auto" chains correctly via DOM ancestry (the original fixmes had the wrong testId selector). Added testId props to two examples (16-popup-with-a11y-props, 18-should-fit-container) so default-shape tests can reach the trigger.
    • Test alignment for FF-on Playwright suites across popup, select, datetime-picker, inline-dialog, inline-message, and modal-dialog: selector updates to match the new top-layer testId convention (${testId}--content, [role="dialog"][aria-label="calendar"]), per-spec skipAxeCheck() for example-level color-contrast violations unrelated to the migration, and focus assertions adjusted to match native <dialog> / Popup.Content auto-focus semantics (focus lands on the first focusable child, not the dialog container itself).
    • @atlassian/capacity-planning-capacity-graph, @atlaskit/color-picker, @atlassian/timeline-table, @atlassian/global-side-navigation (patch): scope fg mocks in unit tests so platform-dst-top-layer returns false. JSDOM does not implement the native Popover API (showPopover/hidePopover/toggle events), so leaving the gate ON in unit tests caused popover content to remain in the DOM after close and broke close-behaviour assertions. Browser coverage for the FF-on path is provided by the Playwright suites listed above.
    • @atlaskit/dropdown-menu (no public API change): test/example-only fixes for the FF-on Playwright suite. Added role="menuitem" to the nested-trigger ButtonItem in examples/93-testing-nested-keyboard-navigation-top-layer.tsx to satisfy axe's aria-required-children rule on the parent menu. Added a test.beforeEach(skipAxeCheck) to dropdown-menu.spec.tsx (FF-on suite) for example-level color-contrast violations on the pre-existing color.text.selected/color.background.selected token pair (3.91:1). Replaced a deadlocking await expect(moveItem).not.toBeFocused() pre-open assertion (Playwright's auto-wait blocks 5s on the absent element) with await expect(moveItem).not.toBeVisible(). Suite result: 22/22 passing.

Patch Changes

  • Updated dependencies

4.18.0

Minor Changes

  • 2bed6255731de, (opens new window) - Top-layer adoption work behind the platform-dst-top-layer feature flag. Public adopter APIs are intentionally kept narrow while the top-layer API surface settles, with one exception called out below.

    Highlights:

    • Pass the full [along, away] legacy popper offset through to the new top-layer placement.offset API (via fromLegacyPlacement). Previously only the away axis was forwarded, which dropped the along offset for consumers of Popup, PopupSelect, Spotlight, and Tooltip when platform-dst-top-layer is enabled.
    • Fix broken import of dialogHeight and dialogWidth from the removed utils module in @atlaskit/modal-dialog.

    Public API:

    • @atlaskit/tooltip (minor): add an optional testId?: string field to TriggerProps. This is additive (no existing prop changes shape). Required because @atlaskit/button/new (and other Pressable-backed primitives) overwrite data-testid from spread, so the legacy (triggerProps as any)['data-testid'] workaround is silently absorbed by those consumers. A typed testId field flows through their own testId destructure instead, restoring data-testid propagation onto the rendered trigger element.
    • @atlaskit/popup, @atlaskit/dropdown-menu (patch): no public type changes. Wider aria-haspopup unions that the FF-on path produces are bridged at the package boundary into @atlaskit/top-layer with localised FUDGE(top-layer-api) casts, documented in packages/design-system/top-layer/notes/decisions/migration-roadmap.md ("Open API decisions deferred to a follow-up PR"). They will be widened in a follow-up minor PR once the top-layer API is committed.
    • @atlaskit/modal-dialog, @atlaskit/select, @atlaskit/spotlight (patch/minor): no public type changes; bug fixes only.

    Merge-readiness fixes (FF-on test wiring + adopter behavior):

    • @atlaskit/popup (minor): wire the compositional PopupContent to delegate to PopupContentTopLayer when platform-dst-top-layer is enabled. Previously only the legacy Popup component had the FF branch, leaving consumers of the compositional API on the legacy popper path.
    • @atlaskit/select (minor): add an onClick handler to the PopupSelect top-layer trigger so clicks open/close the menu (mirrors the legacy global click handler in popup-select.tsx). Add explicit Escape handling on the menu's onKeyDown so the menu closes and focus returns to the trigger.
    • @atlaskit/top-layer (patch): the <dialog> rendered by the Dialog primitive now sets aria-modal="true" explicitly. Modern browsers infer modal semantics from .showModal() but some assistive tech still keys off the explicit attribute.
    • @atlaskit/top-layer (patch): guard use-anchor-positioning against environments where ResizeObserver is not defined (e.g. jest's node environment, used by the post-office test suite). The observer is used to wait for the popover's first valid layout before measuring; consumers in non-DOM jest environments now get a no-op observer and the scroll/resize listeners still apply if the host environment polyfills showPopover. Real browsers always have ResizeObserver.
    • @atlaskit/modal-dialog (patch): on the FF-on path, drop the tabIndex={-1} (and unused :focus-visible outline) from the modal content wrapper. The native <dialog>.showModal() focus-delegate algorithm picks the first focusable descendant (including tabindex=-1), and the wrapper was hijacking initial focus from the close button. Also honor shouldReturnFocus={ref} on the FF-on path (an unmount-cleanup focuses the ref after dialog.close() so it overrides the browser's automatic return-to-trigger). Boolean shouldReturnFocus={false} is not yet honored on the FF-on path — see top-layer/notes/merge-blockers.md.
    • @atlaskit/datetime-picker (patch): on the FF-on path, set mode="manual" on the Popup.Content rendered by both internal/menu-top-layer.tsx (date-picker calendar) and internal/fixed-layer-menu-top-layer.tsx (time-picker menu). With the default mode="auto", the same click event that opens the menu (which targets the react-select combobox input — outside the popover element) bubbles to the browser's native popover light-dismiss handler and immediately closes the menu. react-select / DateTimePicker already own outside-click and Esc dismissal via their own state, so opting out of the native auto-dismiss is the correct integration. Also extend the existing Esc → trigger-focus restoration in components/date-picker.tsx to the FF-on path (manual mode disables the browser's built-in focus return, and the legacy code path was already handling this for itself behind an FF negation).
    • @atlaskit/popup (no public API change): no source changes — only FF-on Playwright spec/example fixes drove the suite from 21/3/2 to 27/0/0. Notable: the two test.fixme'd nested-popover cases were not browser limitations; popover="auto" chains correctly via DOM ancestry (the original fixmes had the wrong testId selector). Added testId props to two examples (16-popup-with-a11y-props, 18-should-fit-container) so default-shape tests can reach the trigger.
    • Test alignment for FF-on Playwright suites across popup, select, datetime-picker, inline-dialog, inline-message, and modal-dialog: selector updates to match the new top-layer testId convention (${testId}--content, [role="dialog"][aria-label="calendar"]), per-spec skipAxeCheck() for example-level color-contrast violations unrelated to the migration, and focus assertions adjusted to match native <dialog> / Popup.Content auto-focus semantics (focus lands on the first focusable child, not the dialog container itself).
    • @atlassian/capacity-planning-capacity-graph, @atlaskit/color-picker, @atlassian/timeline-table, @atlassian/global-side-navigation (patch): scope fg mocks in unit tests so platform-dst-top-layer returns false. JSDOM does not implement the native Popover API (showPopover/hidePopover/toggle events), so leaving the gate ON in unit tests caused popover content to remain in the DOM after close and broke close-behaviour assertions. Browser coverage for the FF-on path is provided by the Playwright suites listed above.
    • @atlaskit/dropdown-menu (no public API change): test/example-only fixes for the FF-on Playwright suite. Added role="menuitem" to the nested-trigger ButtonItem in examples/93-testing-nested-keyboard-navigation-top-layer.tsx to satisfy axe's aria-required-children rule on the parent menu. Added a test.beforeEach(skipAxeCheck) to dropdown-menu.spec.tsx (FF-on suite) for example-level color-contrast violations on the pre-existing color.text.selected/color.background.selected token pair (3.91:1). Replaced a deadlocking await expect(moveItem).not.toBeFocused() pre-open assertion (Playwright's auto-wait blocks 5s on the absent element) with await expect(moveItem).not.toBeVisible(). Suite result: 22/22 passing.

Patch Changes

4.17.0

Minor Changes

4.16.6

Patch Changes

  • Updated dependencies

4.16.5

Patch Changes

  • Updated dependencies

4.16.4

Patch Changes

  • Updated dependencies

4.16.3

Patch Changes

4.16.2

Patch Changes

4.16.1

Patch Changes

4.16.0

Minor Changes

4.15.0

Minor Changes

Patch Changes

  • Updated dependencies

4.14.0

Minor Changes

  • 12424cd3197be, (opens new window) - Cleans up the platform_dst_nav4_flyoutmenuitem_render_to_parent feature gate. Flyout menu item popups now always use shouldRenderToParent and are not rendered in a portal.

4.13.4

Patch Changes

  • Updated dependencies

4.13.3

Patch Changes

4.13.2

Patch Changes

  • Updated dependencies

4.13.1

Patch Changes

  • Updated dependencies

4.13.0

Minor Changes

  • dd02781bfb92f, (opens new window) - Increases the height of the popup on viewports with appearance UNSAFE_modal-below-sm, i.e. viewports below "sm" (mobile) from 50vh to 100vh. This change is behind the platform_dst_nav4_flyout_menu_slots_close_button feature gate.

4.12.0

Minor Changes

  • 2f8e40fb0a94f, (opens new window) - Popups using shouldFitViewport will now be scrollable even if they are rendered to parent using shouldRenderToParent. Previously, only popups rendered in portals would be scrollable.

    This change is behind the feature gate platform_dst_nav4_flyoutmenuitem_render_to_parent.

Patch Changes

  • Updated dependencies

4.11.0

Minor Changes

  • 6f95ec25daa67, (opens new window) - Fixes to accessibility issues for the flyout menu.

    This includes changing the aria-haspopup value from "true" to "dialog", setting the role of the popup container to "dialog", adding an aria-labelledby to the popup container to reference the id of the title in the header slot, and ensuring that escape dismisses the dialog and places focus back on the trigger.

4.10.0

Minor Changes

Patch Changes

  • Updated dependencies

4.9.0

Minor Changes

4.8.3

Patch Changes

4.8.2

Patch Changes

  • Updated dependencies

4.8.1

Patch Changes

4.8.0

Minor Changes

  • 51e544e9024d4, (opens new window) - Fixes a bug with compositional popups where focus was not being returned to the trigger when the popup is closed. This was occurring in React 18 Strict Mode.

    This change was previously behind the feature gate platform-dst-popup-compositional-trigger-ref, which has now been removed.

4.7.1

Patch Changes

  • Updated dependencies

4.7.0

Minor Changes

4.6.5

Patch Changes

4.6.4

Patch Changes

  • Updated dependencies

4.6.3

Patch Changes

  • Updated dependencies

4.6.2

Patch Changes

  • Updated dependencies

4.6.1

Patch Changes

4.6.0

Minor Changes

  • bfdf7891c505f, (opens new window) - Fixes a bug with the compositional popup where focus was not being returned to the trigger when the popup is closed. This was occurring in React 18 Strict Mode.

    The regular popup was already using this fix behind the platform-design-system-popup-ref feature gate.

    This change to compositional popup is behind the feature gate platform-dst-popup-compositional-trigger-ref.

4.5.0

Minor Changes

  • 0e417a8c4a92e, (opens new window) - Popup will now stay open when a click starts inside the popup but then moves outside the popup. The onClose callback will not be called in this case. This aligns it with the behaviour of Modal Dialog.

    This change was previously behind a feature flag, which has now been removed.

Patch Changes

  • Updated dependencies

4.4.5

Patch Changes

  • Updated dependencies

4.4.4

Patch Changes

  • Updated dependencies

4.4.3

Patch Changes

  • Updated dependencies

4.4.2

Patch Changes

4.4.1

Patch Changes

4.4.0

Minor Changes

  • 02c6e19e8ac81, (opens new window) - Popup will now stay open when a click starts inside the popup but then moves outside the popup. The onClose callback will not be called in this case. This aligns it with the behaviour of Modal Dialog.

    This change is behind a feature flag.

4.3.15

Patch Changes

4.3.14

Patch Changes

4.3.13

Patch Changes

  • Updated dependencies

4.3.12

Patch Changes

  • Updated dependencies

4.3.11

Patch Changes

4.3.10

Patch Changes

4.3.9

Patch Changes

4.3.8

Patch Changes

4.3.7

Patch Changes

  • Updated dependencies

4.3.6

Patch Changes

  • Updated dependencies

4.3.5

Patch Changes

4.3.4

Patch Changes

  • Updated dependencies

4.3.3

Patch Changes

  • Updated dependencies

4.3.2

Patch Changes

  • Updated dependencies

4.3.1

Patch Changes

  • Updated dependencies

4.3.0

Minor Changes

4.2.0

Minor Changes

4.1.0

Minor Changes

4.0.0

Major Changes

  • #137034, (opens new window) a832dd489aab3, (opens new window) - - Migrated from @emotion/react to @compiled/react in order to improve performance, align with the rest of the Atlaskit techstack, and support React 18 Streaming SSR.

    • Added a className prop for applying a focus ring to the custom popup container (Currently controlled by the feature flag platform-design-system-apply-popup-wrapper-focus). See usage example here, (opens new window).

    Please note, in order to use this version of @atlaskit/popup, you will need to ensure that your bundler is configured to handle .css imports correctly.

    Most bundlers come with built-in support for .css imports, so you may not need to do anything. If you are using a different bundler, please refer to the documentation for that bundler to understand how to handle .css imports. For more information on the migration, please refer to RFC-73 Migrating our components to Compiled CSS-in-JS, (opens new window).

Patch Changes

  • Updated dependencies

3.0.1

Patch Changes

3.0.0

Major Changes

  • #127309, (opens new window) 42392c8a66f3d, (opens new window) - The onClose prop type has been updated, to make the first argument nullable. This argument is for the corresponding event that led to the callback being called.

    This is to support programatically closing the popup.

    Previously, the type of onClose was:

    onClose?( event: Event | React.MouseEvent | React.KeyboardEvent, currentLevel?: number | any, ): void;

    It is now:

    onClose?( event: Event | React.MouseEvent | React.KeyboardEvent | null, currentLevel?: number | any, ): void;

    When the popup is closed programatically, the event argument will be null.

Patch Changes

  • Updated dependencies

2.0.5

Patch Changes

2.0.4

Patch Changes

2.0.3

Patch Changes

  • Updated dependencies

2.0.2

Patch Changes

2.0.1

Patch Changes

2.0.0

Major Changes

Patch Changes

  • Updated dependencies

1.32.0

Minor Changes

Patch Changes

  • Updated dependencies

1.31.3

Patch Changes

  • Updated dependencies

1.31.2

Patch Changes

  • Updated dependencies

1.31.1

Patch Changes

  • Updated dependencies

1.31.0

Minor Changes

Patch Changes

  • Updated dependencies

1.30.6

Patch Changes

1.30.5

Patch Changes

1.30.4

Patch Changes

  • Updated dependencies

1.30.3

Patch Changes

1.30.2

Patch Changes

1.30.1

Patch Changes

  • Updated dependencies

1.30.0

Minor Changes

  • #171499, (opens new window) 397ca651978da, (opens new window) - Adds shouldDisableGpuAcceleration prop to composable PopupContent API. This prop will configure popper.js to position the popup using only position properties, without any transform usage. This should not be used in most cases, but is needed for some layering issues.

1.29.6

Patch Changes

  • Updated dependencies

1.29.5

Patch Changes

  • Updated dependencies

1.29.4

Patch Changes

1.29.3

Patch Changes

  • Updated dependencies

1.29.2

Patch Changes

1.29.1

Patch Changes

  • Updated dependencies

1.29.0

Minor Changes

Patch Changes

  • Updated dependencies

1.28.5

Patch Changes

  • Updated dependencies

1.28.4

Patch Changes

1.28.3

Patch Changes

  • Updated dependencies

1.28.2

Patch Changes

  • Updated dependencies

1.28.1

Patch Changes

1.28.0

Minor Changes

Patch Changes

  • Updated dependencies

1.27.2

Patch Changes

  • Updated dependencies

1.27.1

Patch Changes

1.27.0

Minor Changes

Patch Changes

  • Updated dependencies

1.26.0

Minor Changes

1.25.0

Minor Changes

Patch Changes

1.24.2

Patch Changes

1.24.1

Patch Changes

1.24.0

Minor Changes

1.23.2

Patch Changes

1.23.1

Patch Changes

1.23.0

Minor Changes

  • #128022, (opens new window) 1495b8f9c9253, (opens new window) - [ux] We are testing new focus behavior in non-dialog popup instances behind a feature flag. With that in place, all popup instances that don't have role="dialog" applied will have focus traps disabled by default. If this fix is successful, it will be available in a later release.

1.22.2

Patch Changes

  • Updated dependencies

1.22.1

Patch Changes

  • 49e0363439f7c, (opens new window) - [ux] Content inside of a Popup will now always have it's text color reset to color.text. Previously, the text color of Popup content would be color.text if rendering into a portal, (opens new window) shouldRenderToParent={true} or shouldFitContainer={true}, but otherwise would inherit the text color of the parent element. We have made this change to improve consistency and avoid surprises when working with Popup.

1.22.0

Minor Changes

  • #127511, (opens new window) db30e29344013, (opens new window) - Widening range of react and react-dom peer dependencies from ^16.8.0 || ^17.0.0 || ~18.2.0 to the wider range of ``^16.8.0 || ^17.0.0 || ^18.0.0` (where applicable).

    This change has been done to enable usage of react@18.3 as well as to have a consistent peer dependency range for react and react-dom for /platform packages.

Patch Changes

  • Updated dependencies

1.21.1

Patch Changes

  • Updated dependencies

1.21.0

Minor Changes

Patch Changes

  • Updated dependencies

1.20.3

Patch Changes

1.20.2

Patch Changes

1.20.1

Patch Changes

  • Updated dependencies

1.20.0

Minor Changes

1.19.4

Patch Changes

  • Updated dependencies

1.19.3

Patch Changes

  • Updated dependencies

1.19.2

Patch Changes

1.19.1

Patch Changes

  • Updated dependencies

1.19.0

Minor Changes

Patch Changes

  • Updated dependencies

1.18.0

Minor Changes

Patch Changes

  • Updated dependencies

1.17.2

Patch Changes

  • Updated dependencies

1.17.1

Patch Changes

1.17.0

Minor Changes

1.16.0

Minor Changes

1.15.1

Patch Changes

  • Updated dependencies

1.15.0

Minor Changes

1.14.1

Patch Changes

1.14.0

Minor Changes

1.13.2

Patch Changes

1.13.1

Patch Changes

1.13.0

Minor Changes

  • #70573, (opens new window) c8fa9cdd08e4, (opens new window) - Accessibility changes. Add a new optional prop shouldDisableFocusLock. We are testing the ability to close the popup by pressing the Tab key when shouldDisableFocusLock is true and shouldRenderToParent is true behind a feature flag. This is necessary for the dropdown menu to work correctly. If this fix is successful it will be available in a later release.

1.12.0

Minor Changes

1.11.6

Patch Changes

1.11.5

Patch Changes

1.11.4

Patch Changes

1.11.3

Patch Changes

1.11.2

Patch Changes

1.11.1

Patch Changes

1.11.0

Minor Changes

1.10.2

Patch Changes

1.10.1

Patch Changes

1.10.0

Minor Changes

Patch Changes

  • Updated dependencies

1.9.3

Patch Changes

1.9.2

Patch Changes

1.9.1

Patch Changes

1.9.0

Minor Changes

1.8.3

Patch Changes

1.8.2

Patch Changes

1.8.1

Patch Changes

1.8.0

Minor Changes

  • ac5a05f5929, (opens new window) - We are testing an upgrade to the focus-trap dependency behind a feature flag. If this fix is successful it will be available in a later release.

1.7.0

Minor Changes

1.6.4

Patch Changes

1.6.3

Patch Changes

1.6.2

Patch Changes

1.6.1

Patch Changes

1.6.0

Minor Changes

Patch Changes

  • Updated dependencies

1.5.5

Patch Changes

  • Updated dependencies

1.5.4

Patch Changes

  • Updated dependencies

1.5.3

Patch Changes

  • Updated dependencies

1.5.2

Patch Changes

  • Updated dependencies

1.5.1

Patch Changes

1.5.0

Minor Changes

1.4.2

Patch Changes

1.4.1

Patch Changes

1.4.0

Minor Changes

Patch Changes

1.3.10

Patch Changes

1.3.9

Patch Changes

1.3.8

Patch Changes

  • Updated dependencies

1.3.7

Patch Changes

1.3.6

Patch Changes

1.3.5

Patch Changes

  • Updated dependencies

1.3.4

Patch Changes

  • Updated dependencies

1.3.3

Patch Changes

  • Updated dependencies

1.3.2

Patch Changes

1.3.1

Patch Changes

  • Updated dependencies

1.3.0

Minor Changes

Patch Changes

  • Updated dependencies

1.2.0

Minor Changes

1.1.6

WRONG RELEASE TYPE - DON'T USE

Minor Changes

Patch Changes

  • f460cc7c411, (opens new window) - Builds for this package now pass through a tokens babel plugin, removing runtime invocations of the tokens() function and improving bundle size.
  • Updated dependencies

1.1.5

Patch Changes

  • Updated dependencies

1.1.4

Patch Changes

  • Updated dependencies

1.1.3

Patch Changes

  • Updated dependencies

1.1.2

Patch Changes

  • Updated dependencies

1.1.1

Patch Changes

  • Updated dependencies

1.1.0

Minor Changes

Patch Changes

  • Updated dependencies

1.0.8

Patch Changes

1.0.7

Patch Changes

1.0.6

Patch Changes

1.0.5

Patch Changes

1.0.4

Patch Changes

1.0.3

Patch Changes

  • Updated dependencies

1.0.2

Patch Changes

1.0.1

Patch Changes

1.0.0

Major Changes

  • #3823, (opens new window) 740e011f8d, (opens new window) - This first major release of popup brings in major changes from @atlaskit/popper. These changes come with performance, maintainability and behavioral improvements.

    As popup wraps popper's functionality, these changes result in a breaking change for popup as well.

    These changes have ⚙️ codemod support:

    • ⚙️ offset is no longer a string, but an array of two integers (i.e. '0px 8px' is now [0, 8])

    • ⚙️ boundariesElement has been replaced with two props: boundary and rootBoundary. The three supported values from the boundariesElement prop have been split between the two as follows:

      • boundariesElement = "scrollParents" has been renamed: use boundary = "clippingParents".
      • boundariesElement = "window" has been renamed: use rootBoundary = "document", and acts in a similar fashion.
      • boundariesElement = "viewport" has been moved: use rootBoundary = "document".
      • ✨new the boundary prop now supports custom elements.
    • Components passed into the content have a change to render props:

      • ⚙️ scheduleUpdate, for async updates, has been renamed to update, and now returns a Promise.
    • For more information on the change, see the popper.js docs, (opens new window)

    Running the codemod cli

    To run the codemod: You first need to have the latest version of popup installed before you can run the codemod

    yarn upgrade @atlaskit/popup@^1.0.0

    Once upgraded, use the Atlaskit codemod-cli;

    npx @atlaskit/codemod-cli --parser [PARSER] --extensions [FILE_EXTENSIONS] [TARGET_PATH]

    Or run npx @atlaskit/codemod-cli -h for more details on usage. For Atlassians, refer to this doc, (opens new window) for more details on the codemod CLI.

Patch Changes

  • Updated dependencies

0.6.1

Patch Changes

0.6.0

Minor Changes

Patch Changes

  • Updated dependencies

0.5.0

Minor Changes

0.4.3

Patch Changes

0.4.2

Patch Changes

0.4.1

Patch Changes

0.4.0

Minor Changes

0.3.5

Patch Changes

0.3.4

Patch Changes

0.3.3

Patch Changes

0.3.2

Patch Changes

  • [patch]6548261c9a, (opens new window):

    Remove namespace imports from React, ReactDom, and PropTypes- Updated dependencies 6548261c9a, (opens new window):

    • @atlaskit/docs@8.3.2
    • @atlaskit/visual-regression@0.1.9
    • @atlaskit/button@13.3.7
    • @atlaskit/icon@20.0.1
    • @atlaskit/menu@0.2.6
    • @atlaskit/popper@3.1.11
    • @atlaskit/portal@3.1.6
    • @atlaskit/radio@3.1.9
    • @atlaskit/spinner@12.1.4
    • @atlaskit/theme@9.5.1

0.3.1

Patch Changes

0.3.0

Minor Changes

  • [minor]0946fdd319, (opens new window):
    • BREAKING - Changes content prop to expect render props instead of a component. This is primarily to stop your components remounting when not having a stable reference.

0.2.7

Patch Changes

0.2.6

Patch Changes

0.2.5

Patch Changes

0.2.4

Patch Changes

0.2.3

Patch Changes

0.2.2

Patch Changes

  • [patch]3cad6b0118, (opens new window):

    Exposed offset prop for popper allowing positioning of popups relative to the trigger. Added example for double pop-up pattern

0.2.1

Patch Changes

0.2.0

Minor Changes

0.1.5

Patch Changes

0.1.4

Patch Changes

0.1.3

Patch Changes

  • [patch]28e9c65acd, (opens new window):
    • Add multiple popups example
    • Add unit tests
    • Add useCloseManager
    • Fix bug that did not call onClose on open popups
    • Move RepositionOnUpdate to a separate file
    • Remove scroll lock and corresponding example
    • Remove requestAnimationFrame usage
    • Replace @emotion/styled with @emotion/core

0.1.2

Patch Changes

0.1.1

Patch Changes

0.1.0

Minor Changes

  • [minor]f1a3548732, (opens new window):

    Introduce new package for the lightweight inline-dialog to be used in @atlaskit/app-navigation. The package will stay internal for now until more hardening is done, but releasing first minor to unblock navigation work.

Was this page helpful?
We use this feedback to improve our documentation.
© 2026 AtlassianTrademark, (opens new window)Privacy, (opens new window)License