Skip to content

@zag-js/menu@2.0.0-next.1

Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 01 Aug 12:03
b7f2221

Minor Changes

  • #3167
    9d7159a Thanks
    @github-actions! - Add the new @zag-js/menubar machine for building
    WAI-ARIA menubars.

    Each top-level item is a standalone menu machine. Pass menubarApi.getMenuContext() to each menu's menubar prop
    so its trigger behaves as a menubar item.

    The menubar coordinates:

    • Roving focus across menu triggers
    • Open/close state and sibling menu switching
    • Nested submenu keyboard behavior
    • Horizontal and vertical orientation
    • Looping focus and disabled state
    import * as menu from "@zag-js/menu"
    import * as menubar from "@zag-js/menubar"
    
    const menubarApi = menubar.connect(menubarService, normalizeProps)
    const menuService = useMachine(menu.machine, { id: "file", menubar: menubarApi.getMenuContext() })
  • #3167
    d2b9972 Thanks
    @github-actions! - Add get<Part>State() getters (e.g. getTriggerState,
    getContentState, getRootState), extending the existing getItemState convention to every part with derived state.

    const triggerState = dialog.getTriggerState({ value: "confirm" })
    // { value: "confirm", current: true, open: true }

Patch Changes

  • #3167
    037af89 Thanks
    @github-actions! - Move layer stack styles and attributes into machine
    connect props so framework renders cannot overwrite them.

    Breaking: trackDismissableElement now requires onLayerChange. Apply the emitted snapshot's layer index,
    nesting metadata, and pointer blocking state to the registered element through your framework's render output.

  • #3167
    8148d4d Thanks
    @github-actions! - Fix positioner appearing in the top-left corner on first
    open (most visible in the Svelte adapter). The positioner now stays hidden off-screen via a CSS variable fallback in
    transform instead of a positioned-gated opacity. This keeps the framework-managed style static, so reactive
    re-renders no longer clobber the --x/--y variables popper sets.

    As a result, the internal positioned context flag is removed from positioned machines (popover, menu, select, etc.).

    Also fixes cascade-select positioning: it now sets the initial placement before measuring and defers the first
    placement computation (matching the other components), so it positions correctly on open — including defaultOpen.

  • Updated dependencies [037af89,
    8148d4d]:

    • @zag-js/dismissable@2.0.0-next.1
    • @zag-js/popper@2.0.0-next.1
    • @zag-js/anatomy@2.0.0-next.1
    • @zag-js/core@2.0.0-next.1
    • @zag-js/types@2.0.0-next.1
    • @zag-js/utils@2.0.0-next.1
    • @zag-js/dom-query@2.0.0-next.1
    • @zag-js/focus-visible@2.0.0-next.1
    • @zag-js/rect-utils@2.0.0-next.1