Minor Changes
-
#3167
9d7159aThanks
@github-actions! - Add the new@zag-js/menubarmachine for building
WAI-ARIA menubars.Each top-level item is a standalone
menumachine. PassmenubarApi.getMenuContext()to each menu'smenubarprop
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
d2b9972Thanks
@github-actions! - Addget<Part>State()getters (e.g.getTriggerState,
getContentState,getRootState), extending the existinggetItemStateconvention to every part with derived state.const triggerState = dialog.getTriggerState({ value: "confirm" }) // { value: "confirm", current: true, open: true }
Patch Changes
-
#3167
037af89Thanks
@github-actions! - Move layer stack styles and attributes into machine
connect props so framework renders cannot overwrite them.Breaking:
trackDismissableElementnow requiresonLayerChange. Apply the emitted snapshot's layer index,
nesting metadata, and pointer blocking state to the registered element through your framework's render output. -
#3167
8148d4dThanks
@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
transforminstead of apositioned-gatedopacity. This keeps the framework-managed style static, so reactive
re-renders no longer clobber the--x/--yvariables popper sets.As a result, the internal
positionedcontext flag is removed from positioned machines (popover, menu, select, etc.).Also fixes
cascade-selectpositioning: it now sets the initial placement before measuring and defers the first
placement computation (matching the other components), so it positions correctly on open — includingdefaultOpen. -
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