diff --git a/.changeset/dialog-drawer-pointer-events.md b/.changeset/dialog-drawer-pointer-events.md
new file mode 100644
index 0000000000..584ccfd984
--- /dev/null
+++ b/.changeset/dialog-drawer-pointer-events.md
@@ -0,0 +1,6 @@
+---
+"@zag-js/dialog": patch
+"@zag-js/drawer": patch
+---
+
+Avoid setting inline `pointer-events` when modal, letting the dismissable layer manage it instead.
diff --git a/.changeset/file-upload-duplicate.md b/.changeset/file-upload-duplicate.md
deleted file mode 100644
index ca9d248f57..0000000000
--- a/.changeset/file-upload-duplicate.md
+++ /dev/null
@@ -1,6 +0,0 @@
----
-"@zag-js/file-upload": patch
----
-
-Automatically reject duplicate files with `FILE_EXISTS` error.Previously, uploading the same file twice was silently
-accepted and deleting one duplicate removed all of them.
diff --git a/.changeset/toast-region-role.md b/.changeset/toast-region-role.md
deleted file mode 100644
index 061589e548..0000000000
--- a/.changeset/toast-region-role.md
+++ /dev/null
@@ -1,9 +0,0 @@
----
-"@zag-js/toast": patch
----
-
-Restore `role="region"` on the toast group element.
-
-- The role was previously removed to reduce screen reader landmark noise, but this caused an axe
-  `aria-prohibited-attr` violation since `aria-label` is not permitted on a `div` without a valid role.
-- The region landmark also enables keyboard navigation to the toast area (e.g. via F6).
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 9007cd2718..cf2a4b428f 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -4,6 +4,26 @@ All notable changes to this project will be documented in this file.
 
 > For v0.x changelog, see the [v0 branch](https://github.com/chakra-ui/zag/blob/v0/CHANGELOG.md)
 
+## [1.38.1](./#1.38.1) - 2026-03-25
+
+### Fixed
+
+- **File Upload**: Automatically reject duplicate files with `FILE_EXISTS` error. Previously, uploading the same file
+  twice was silently accepted and deleting one duplicate removed all of them.
+
+- **Toast**: Restore `role="region"` on the toast group element. The role was previously removed to reduce screen reader
+  landmark noise, but this caused an axe `aria-prohibited-attr` violation since `aria-label` is not permitted on a `div`
+  without a valid role.
+
+- **Tour**
+  - Fix step navigation events (`next`, `prev`, `setStep`) firing when the tour is inactive, bypassing the `start` flow
+  - Fix popper styles not being cleaned up when transitioning from a tooltip step to a dialog/non-tooltip step
+
+### Changed
+
+- **Core**: Validate compound states at machine creation — throw if a state has child states but no `initial`, or if
+  `initial` references a nonexistent child.
+
 ## [1.38.0](./#1.38.0) - 2026-03-24
 
 ### Added
diff --git a/examples/next-ts/pages/tour/conditional.tsx b/examples/next-ts/pages/tour/conditional.tsx
new file mode 100644
index 0000000000..998cb45392
--- /dev/null
+++ b/examples/next-ts/pages/tour/conditional.tsx
@@ -0,0 +1,140 @@
+import { Portal, normalizeProps, useMachine } from "@zag-js/react"
+import * as tour from "@zag-js/tour"
+import { X } from "lucide-react"
+import { useId } from "react"
+import { StateVisualizer } from "../../components/state-visualizer"
+import { Toolbar } from "../../components/toolbar"
+
+const steps: tour.StepDetails[] = [
+  {
+    id: "choose",
+    type: "dialog",
+    title: "Choose Your Path",
+    description: "Are you new here or a returning user?",
+    actions: [
+      {
+        label: "I'm new",
+        action: (actionMap) => actionMap.goto("beginner"),
+      },
+      {
+        label: "I know the basics",
+        action: (actionMap) => actionMap.goto("advanced"),
+      },
+    ],
+  },
+  {
+    id: "beginner",
+    type: "tooltip",
+    target: () => document.querySelector<HTMLElement>("#option-beginner"),
+    title: "Welcome!",
+    description: "We'll start with the fundamentals to get you up and running.",
+    actions: [{ label: "Next", action: "next" }],
+  },
+  {
+    id: "basics",
+    type: "tooltip",
+    target: () => document.querySelector<HTMLElement>("#feature-basics"),
+    title: "Getting Started",
+    description: "Create your first project and invite your team.",
+    actions: [
+      { label: "Prev", action: "prev" },
+      { label: "Done", action: "dismiss" },
+    ],
+  },
+  {
+    id: "advanced",
+    type: "tooltip",
+    target: () => document.querySelector<HTMLElement>("#option-advanced"),
+    title: "Welcome Back!",
+    description: "Let's skip the basics and show you what's new.",
+    actions: [{ label: "Next", action: "next" }],
+  },
+  {
+    id: "power",
+    type: "tooltip",
+    target: () => document.querySelector<HTMLElement>("#feature-power"),
+    title: "Power Features",
+    description: "Set up automations, API keys, and custom workflows.",
+    actions: [
+      { label: "Prev", action: "prev" },
+      { label: "Done", action: "dismiss" },
+    ],
+  },
+]
+
+export default function Page() {
+  const service = useMachine(tour.machine, {
+    id: useId(),
+    steps,
+  })
+
+  const api = tour.connect(service, normalizeProps)
+
+  return (
+    <>
+      <main className="tour">
+        <div>
+          <button onClick={() => api.start()}>Start Tour</button>
+          <div className="steps__container">
+            <div id="option-beginner" className="tour-card">
+              <h4>Beginner</h4>
+              <p>New to the platform? Start here.</p>
+            </div>
+            <div id="option-advanced" className="tour-card">
+              <h4>Advanced</h4>
+              <p>Already familiar? Jump to power features.</p>
+            </div>
+            <div style={{ display: "flex", gap: "1rem" }}>
+              <div id="feature-basics" className="tour-card">
+                <h4>Getting Started</h4>
+                <p>Create your first project.</p>
+              </div>
+              <div id="feature-power" className="tour-card">
+                <h4>Power Features</h4>
+                <p>Automations and API access.</p>
+              </div>
+            </div>
+          </div>
+        </div>
+
+        {api.step && api.open && (
+          <Portal>
+            {api.step.backdrop && <div {...api.getBackdropProps()} />}
+            <div {...api.getSpotlightProps()} />
+            <div {...api.getPositionerProps()}>
+              <div {...api.getContentProps()}>
+                {api.step.arrow && (
+                  <div {...api.getArrowProps()}>
+                    <div {...api.getArrowTipProps()} />
+                  </div>
+                )}
+
+                <p {...api.getTitleProps()}>{api.step.title}</p>
+                <div {...api.getDescriptionProps()}>{api.step.description}</div>
+                <div {...api.getProgressTextProps()}>{api.getProgressText()}</div>
+
+                {api.step.actions && (
+                  <div className="tour button__group">
+                    {api.step.actions.map((action) => (
+                      <button key={action.label} {...api.getActionTriggerProps({ action })}>
+                        {action.label}
+                      </button>
+                    ))}
+                  </div>
+                )}
+
+                <button {...api.getCloseTriggerProps()}>
+                  <X />
+                </button>
+              </div>
+            </div>
+          </Portal>
+        )}
+      </main>
+
+      <Toolbar viz>
+        <StateVisualizer state={service} omit={["steps"]} />
+      </Toolbar>
+    </>
+  )
+}
diff --git a/examples/next-ts/pages/tour/step-types.tsx b/examples/next-ts/pages/tour/step-types.tsx
new file mode 100644
index 0000000000..cdd138e16d
--- /dev/null
+++ b/examples/next-ts/pages/tour/step-types.tsx
@@ -0,0 +1,124 @@
+import { Portal, normalizeProps, useMachine } from "@zag-js/react"
+import * as tour from "@zag-js/tour"
+import { X } from "lucide-react"
+import { useId } from "react"
+import { StateVisualizer } from "../../components/state-visualizer"
+import { Toolbar } from "../../components/toolbar"
+
+const steps: tour.StepDetails[] = [
+  {
+    id: "dialog-intro",
+    type: "dialog",
+    title: "Dialog Step",
+    description: "This is a centered dialog step with no target element.",
+    actions: [{ label: "Next", action: "next" }],
+  },
+  {
+    id: "tooltip-feature",
+    type: "tooltip",
+    target: () => document.querySelector<HTMLElement>("#feature-btn"),
+    title: "Tooltip Step",
+    description: "This tooltip points to a specific element on the page.",
+    placement: "bottom",
+    actions: [
+      { label: "Prev", action: "prev" },
+      { label: "Next", action: "next" },
+    ],
+  },
+  {
+    id: "wait-action",
+    type: "wait",
+    effect({ next }) {
+      const btn = document.querySelector<HTMLElement>("#continue-btn")
+      if (!btn) return
+      const handler = () => next()
+      btn.addEventListener("click", handler, { once: true })
+      return () => btn.removeEventListener("click", handler)
+    },
+  },
+  {
+    id: "tooltip-after-wait",
+    type: "tooltip",
+    target: () => document.querySelector<HTMLElement>("#continue-btn"),
+    title: "Back to Tooltip",
+    description: "After the wait step, we're back to a tooltip. Placement styles should be clean.",
+    placement: "top",
+    actions: [{ label: "Next", action: "next" }],
+  },
+  {
+    id: "dialog-after-tooltip",
+    type: "dialog",
+    title: "Dialog After Tooltip",
+    description: "Switching back to dialog. Old tooltip positioning styles should be fully cleaned up.",
+    actions: [{ label: "Next", action: "next" }],
+  },
+  {
+    id: "floating-end",
+    type: "floating",
+    title: "Floating Step",
+    description: "A floating step with no backdrop or arrow.",
+    actions: [{ label: "Done", action: "dismiss" }],
+  },
+]
+
+export default function Page() {
+  const service = useMachine(tour.machine, {
+    id: useId(),
+    steps,
+  })
+
+  const api = tour.connect(service, normalizeProps)
+
+  return (
+    <>
+      <main className="tour">
+        <div>
+          <button onClick={() => api.start()}>Start Tour</button>
+          <div className="steps__container">
+            <button id="feature-btn">Feature Button</button>
+            <button id="continue-btn">Continue</button>
+            {api.step?.type === "wait" && <p>Click "Continue" to proceed...</p>}
+          </div>
+        </div>
+
+        {api.step && api.open && (
+          <Portal>
+            {api.step.backdrop && <div {...api.getBackdropProps()} />}
+            <div {...api.getSpotlightProps()} />
+            <div {...api.getPositionerProps()}>
+              <div {...api.getContentProps()}>
+                {api.step.arrow && (
+                  <div {...api.getArrowProps()}>
+                    <div {...api.getArrowTipProps()} />
+                  </div>
+                )}
+
+                <p {...api.getTitleProps()}>{api.step.title}</p>
+                <div {...api.getDescriptionProps()}>{api.step.description}</div>
+                <div {...api.getProgressTextProps()}>{api.getProgressText()}</div>
+
+                {api.step.actions && (
+                  <div className="tour button__group">
+                    {api.step.actions.map((action) => (
+                      <button key={action.label} {...api.getActionTriggerProps({ action })}>
+                        {action.label}
+                      </button>
+                    ))}
+                  </div>
+                )}
+
+                <button {...api.getCloseTriggerProps()}>
+                  <X />
+                </button>
+              </div>
+            </div>
+          </Portal>
+        )}
+      </main>
+
+      <Toolbar viz>
+        <StateVisualizer state={service} omit={["steps"]} />
+      </Toolbar>
+    </>
+  )
+}
diff --git a/examples/next-ts/pages/tour/with-input-event.tsx b/examples/next-ts/pages/tour/wait-for-input-event.tsx
similarity index 67%
rename from examples/next-ts/pages/tour/with-input-event.tsx
rename to examples/next-ts/pages/tour/wait-for-input-event.tsx
index 88c42a9642..15137bf81e 100644
--- a/examples/next-ts/pages/tour/with-input-event.tsx
+++ b/examples/next-ts/pages/tour/wait-for-input-event.tsx
@@ -19,13 +19,17 @@ export default function Tour(props: TourProps) {
         Start Tour
       </button>
 
-      <div data-id="source" style={{ padding: "20px" }}>
-        <h3>Source</h3>
-        <p>This is the source code for the tour</p>
+      <div data-id="result" style={{ padding: "20px" }}>
+        <h3>Result</h3>
+        <p>Your input will appear here after the tour.</p>
       </div>
 
-      <div data-id="logic" style={{ padding: "20px" }}>
-        <input type="text" style={{ border: "1px solid black", padding: "10px" }} />
+      <div data-id="input" style={{ padding: "20px" }}>
+        <input
+          type="text"
+          placeholder='Type "test" to continue...'
+          style={{ border: "1px solid black", padding: "10px" }}
+        />
       </div>
 
       {api.step && api.open && (
@@ -68,38 +72,39 @@ const steps: tour.StepDetails[] = [
   {
     type: "dialog",
     id: "start",
-    title: "Ready to go for a ride",
-    description: "Let's take the tour component for a ride and have some fun!",
+    title: "Welcome",
+    description: "This tour waits for you to type a value before moving forward.",
     actions: [{ label: "Let's go!", action: "next" }],
   },
   {
-    id: "logic",
-    title: "Statechart",
-    description:
-      "As an engineer, you'll learn about the internal statechart that powers the tour. Don't worry, it's just a flow diagram.",
-    target: () => document.querySelector("[data-id=logic]"),
+    id: "input",
+    title: "Type something",
+    description: 'Type "test" in the input field to continue to the next step.',
+    target: () => document.querySelector("[data-id=input]"),
     placement: "bottom",
     effect({ next, show }) {
       show()
       const [promise, cleanup] = tour.waitForElementValue(
-        () => document.querySelector("[data-id=logic] input"),
+        () => document.querySelector("[data-id=input] input"),
         "test",
         {
           timeout: 10000,
         },
       )
-      promise.then(() => {
-        cleanup()
-        next()
-      })
+      promise
+        .then(() => {
+          cleanup()
+          next()
+        })
+        .catch(() => {})
       return cleanup
     },
   },
   {
-    id: "source",
-    title: "Github Source",
-    description: "Here's the link to the github source of the Tour",
-    target: () => document.querySelector("[data-id=source]"),
+    id: "result",
+    title: "Result",
+    description: "Great! You typed the correct value. Here's where your result would appear.",
+    target: () => document.querySelector("[data-id=result]"),
     placement: "bottom",
     actions: [
       { label: "Prev", action: "prev" },
@@ -109,8 +114,8 @@ const steps: tour.StepDetails[] = [
   {
     type: "dialog",
     id: "end",
-    title: "Amazing! You got to the end",
-    description: "Like what you see? Now go ahead and use it in your project.",
+    title: "All done!",
+    description: "You've completed the input event tour.",
     actions: [{ label: "Finish", action: "dismiss" }],
   },
 ]
diff --git a/examples/nuxt-ts/app/pages/dialog/basic.vue b/examples/nuxt-ts/app/pages/dialog/basic.vue
index ae17550343..e6ae1c5e97 100644
--- a/examples/nuxt-ts/app/pages/dialog/basic.vue
+++ b/examples/nuxt-ts/app/pages/dialog/basic.vue
@@ -9,19 +9,18 @@ const api = computed(() => dialog.connect(service, normalizeProps))
 <template>
   <main>
     <button v-bind="api.getTriggerProps()">Click me</button>
-    <template v-if="api.open">
-      <div v-bind="api.getBackdropProps()"></div>
-      <div v-bind="api.getPositionerProps()">
-        <div v-bind="api.getContentProps()">
-          <h2 v-bind="api.getTitleProps()">Edit profile</h2>
-          <p v-bind="api.getDescriptionProps()">Make changes to your profile here. Click save when you are done.</p>
-          <div>
-            <input placeholder="Enter name..." />
-            <button>Save</button>
-          </div>
-          <button v-bind="api.getCloseTriggerProps()">Close</button>
+
+    <Presence v-bind="api.getBackdropProps()" />
+    <div v-bind="api.getPositionerProps()">
+      <Presence v-bind="api.getContentProps()">
+        <h2 v-bind="api.getTitleProps()">Edit profile</h2>
+        <p v-bind="api.getDescriptionProps()">Make changes to your profile here. Click save when you are done.</p>
+        <div>
+          <input placeholder="Enter name..." />
+          <button>Save</button>
         </div>
-      </div>
-    </template>
+        <button v-bind="api.getCloseTriggerProps()">Close</button>
+      </Presence>
+    </div>
   </main>
 </template>
diff --git a/examples/nuxt-ts/app/pages/drawer/basic.vue b/examples/nuxt-ts/app/pages/drawer/basic.vue
index aafdf99cd2..068cdcc43f 100644
--- a/examples/nuxt-ts/app/pages/drawer/basic.vue
+++ b/examples/nuxt-ts/app/pages/drawer/basic.vue
@@ -9,7 +9,7 @@ const controls = useControls(drawerControls)
 
 const service = useMachine(
   drawer.machine,
-  controls.mergeProps<drawer.Props>({
+  controls.mergeProps({
     id: useId(),
   }),
 )
diff --git a/examples/nuxt-ts/nuxt.config.ts b/examples/nuxt-ts/nuxt.config.ts
index f0801f64fa..5edb29ab61 100644
--- a/examples/nuxt-ts/nuxt.config.ts
+++ b/examples/nuxt-ts/nuxt.config.ts
@@ -2,4 +2,9 @@
 export default defineNuxtConfig({
   devtools: { enabled: true },
   compatibilityDate: "2025-01-07",
+  vite: {
+    optimizeDeps: {
+      include: ["@internationalized/date"],
+    },
+  },
 })
diff --git a/packages/anatomy-icons/CHANGELOG.md b/packages/anatomy-icons/CHANGELOG.md
index e28d9f789b..1abdd757ca 100644
--- a/packages/anatomy-icons/CHANGELOG.md
+++ b/packages/anatomy-icons/CHANGELOG.md
@@ -1,5 +1,7 @@
 # @zag-js/anatomy-icons
 
+## 1.38.1
+
 ## 1.38.0
 
 ## 1.37.0
diff --git a/packages/anatomy-icons/package.json b/packages/anatomy-icons/package.json
index 10b9deb6bb..84a0db96e0 100644
--- a/packages/anatomy-icons/package.json
+++ b/packages/anatomy-icons/package.json
@@ -1,6 +1,6 @@
 {
   "name": "@zag-js/anatomy-icons",
-  "version": "1.38.0",
+  "version": "1.38.1",
   "keywords": [
     "ui-machines",
     "state-machines",
diff --git a/packages/anatomy/CHANGELOG.md b/packages/anatomy/CHANGELOG.md
index bae5a14943..f66604ca72 100644
--- a/packages/anatomy/CHANGELOG.md
+++ b/packages/anatomy/CHANGELOG.md
@@ -1,5 +1,7 @@
 # @zag-js/anatomy
 
+## 1.38.1
+
 ## 1.38.0
 
 ## 1.37.0
diff --git a/packages/anatomy/package.json b/packages/anatomy/package.json
index 176e3de159..2a932d436b 100644
--- a/packages/anatomy/package.json
+++ b/packages/anatomy/package.json
@@ -1,6 +1,6 @@
 {
   "name": "@zag-js/anatomy",
-  "version": "1.38.0",
+  "version": "1.38.1",
   "keywords": [
     "ui-machines",
     "state-machines",
diff --git a/packages/core/CHANGELOG.md b/packages/core/CHANGELOG.md
index 4f6d75e001..7c9f96291c 100644
--- a/packages/core/CHANGELOG.md
+++ b/packages/core/CHANGELOG.md
@@ -1,5 +1,16 @@
 # @zag-js/core
 
+## 1.38.1
+
+### Patch Changes
+
+- [`2b4818c`](https://github.com/chakra-ui/zag/commit/2b4818c3b82ed1ca8ffd2cb44110a4a195ac68d6) Thanks
+  [@segunadebayo](https://github.com/segunadebayo)! - Validate compound states at machine creation: throw if a state has
+  child states but no `initial`, or if `initial` references a nonexistent child.
+- Updated dependencies []:
+  - @zag-js/utils@1.38.1
+  - @zag-js/dom-query@1.38.1
+
 ## 1.38.0
 
 ### Patch Changes
diff --git a/packages/core/package.json b/packages/core/package.json
index 4a3f2a0281..2e013f271e 100644
--- a/packages/core/package.json
+++ b/packages/core/package.json
@@ -1,6 +1,6 @@
 {
   "name": "@zag-js/core",
-  "version": "1.38.0",
+  "version": "1.38.1",
   "description": "A minimal implementation of xstate fsm for UI machines",
   "keywords": [
     "ui-machines",
diff --git a/packages/core/src/state.ts b/packages/core/src/state.ts
index 671fc23cc8..7e8752a18d 100644
--- a/packages/core/src/state.ts
+++ b/packages/core/src/state.ts
@@ -1,3 +1,4 @@
+import { ensure, invariant } from "@zag-js/utils"
 import type { Machine, MachineSchema, MachineState, TransitionMatch, TransitionMap } from "./types"
 
 const STATE_DELIMITER = "."
@@ -38,13 +39,21 @@ function buildStateIndex<T extends MachineSchema>(machine: Machine<T>) {
     const stateId = state.id
     if (stateId) {
       if (idIndex.has(stateId)) {
-        throw new Error(`Duplicate state id: ${stateId}`)
+        invariant(`[zag-js] Duplicate state id: "${stateId}"`)
       }
       idIndex.set(stateId, basePath)
     }
     const childStates = state.states
     if (!childStates) return
 
+    ensure(state.initial, () => `[zag-js] Compound state "${basePath}" has child states but no "initial" property`)
+
+    if (!(state.initial in childStates)) {
+      invariant(
+        `[zag-js] Compound state "${basePath}" has initial "${String(state.initial)}" which is not a child state`,
+      )
+    }
+
     for (const [childKey, childState] of Object.entries(childStates)) {
       if (!childState) continue
       const childPath = appendStatePath(basePath, childKey)
@@ -146,9 +155,7 @@ export function resolveStateValue<T extends MachineSchema>(
   if (isExplicitAbsoluteStatePath(stateValue)) {
     const stateId = stripAbsolutePrefix(stateValue)
     const statePath = getStatePathById(machine, stateId)
-    if (!statePath) {
-      throw new Error(`Unknown state id: ${stateId}`)
-    }
+    ensure(statePath, () => `[zag-js] Unknown state id: "${stateId}"`)
     return resolveAbsoluteStateValue(machine, statePath)
   }
 
diff --git a/packages/core/tests/state.test.ts b/packages/core/tests/state.test.ts
index 751158d0f7..b7eff8a367 100644
--- a/packages/core/tests/state.test.ts
+++ b/packages/core/tests/state.test.ts
@@ -323,7 +323,7 @@ describe("state resolution", () => {
     })
 
     expect(() => resolveStateValue(machine, "#missingStateId", "dialog.open.idle")).toThrowError(
-      "Unknown state id: missingStateId",
+      '[zag-js] Unknown state id: "missingStateId"',
     )
   })
 })
@@ -445,7 +445,44 @@ describe("state utilities", () => {
           },
         },
       }),
-    ).toThrowError("Duplicate state id: duplicate-id")
+    ).toThrowError('[zag-js] Duplicate state id: "duplicate-id"')
+  })
+
+  test("throws when compound state has children but no initial", () => {
+    expect(() =>
+      createMachine<any>({
+        initialState() {
+          return "open.idle"
+        },
+        states: {
+          open: {
+            states: {
+              idle: {},
+              active: {},
+            },
+          },
+        },
+      }),
+    ).toThrowError('[zag-js] Compound state "open" has child states but no "initial" property')
+  })
+
+  test("throws when initial references a nonexistent child state", () => {
+    expect(() =>
+      createMachine<any>({
+        initialState() {
+          return "open.idle"
+        },
+        states: {
+          open: {
+            initial: "nonexistent",
+            states: {
+              idle: {},
+              active: {},
+            },
+          },
+        },
+      }),
+    ).toThrowError('[zag-js] Compound state "open" has initial "nonexistent" which is not a child state')
   })
 
   test("resolveStateValue can transition by #id to a state with initial child", () => {
diff --git a/packages/docs/CHANGELOG.md b/packages/docs/CHANGELOG.md
index c83a548986..cdb1d52002 100644
--- a/packages/docs/CHANGELOG.md
+++ b/packages/docs/CHANGELOG.md
@@ -1,5 +1,7 @@
 # @zag-js/docs
 
+## 1.38.1
+
 ## 1.38.0
 
 ## 1.37.0
diff --git a/packages/docs/package.json b/packages/docs/package.json
index 12d94312d9..73f970bfe2 100644
--- a/packages/docs/package.json
+++ b/packages/docs/package.json
@@ -1,6 +1,6 @@
 {
   "name": "@zag-js/docs",
-  "version": "1.38.0",
+  "version": "1.38.1",
   "description": "Docs for zag.js machines",
   "keywords": [
     "zag",
diff --git a/packages/frameworks/preact/CHANGELOG.md b/packages/frameworks/preact/CHANGELOG.md
index a04df1532f..9f7f79cb12 100644
--- a/packages/frameworks/preact/CHANGELOG.md
+++ b/packages/frameworks/preact/CHANGELOG.md
@@ -1,5 +1,14 @@
 # @zag-js/preact
 
+## 1.38.1
+
+### Patch Changes
+
+- Updated dependencies [[`2b4818c`](https://github.com/chakra-ui/zag/commit/2b4818c3b82ed1ca8ffd2cb44110a4a195ac68d6)]:
+  - @zag-js/core@1.38.1
+  - @zag-js/store@1.38.1
+  - @zag-js/types@1.38.1
+
 ## 1.38.0
 
 ### Patch Changes
diff --git a/packages/frameworks/preact/package.json b/packages/frameworks/preact/package.json
index d6d51b0ebd..938de22fa6 100644
--- a/packages/frameworks/preact/package.json
+++ b/packages/frameworks/preact/package.json
@@ -1,6 +1,6 @@
 {
   "name": "@zag-js/preact",
-  "version": "1.38.0",
+  "version": "1.38.1",
   "description": "The preact wrapper for zag",
   "keywords": [
     "ui-machines",
diff --git a/packages/frameworks/react/CHANGELOG.md b/packages/frameworks/react/CHANGELOG.md
index cd1ef92ba3..044ecc520f 100644
--- a/packages/frameworks/react/CHANGELOG.md
+++ b/packages/frameworks/react/CHANGELOG.md
@@ -1,5 +1,15 @@
 # @zag-js/react
 
+## 1.38.1
+
+### Patch Changes
+
+- Updated dependencies [[`2b4818c`](https://github.com/chakra-ui/zag/commit/2b4818c3b82ed1ca8ffd2cb44110a4a195ac68d6)]:
+  - @zag-js/core@1.38.1
+  - @zag-js/store@1.38.1
+  - @zag-js/types@1.38.1
+  - @zag-js/utils@1.38.1
+
 ## 1.38.0
 
 ### Patch Changes
diff --git a/packages/frameworks/react/package.json b/packages/frameworks/react/package.json
index 19bc9cd242..8da1e731de 100644
--- a/packages/frameworks/react/package.json
+++ b/packages/frameworks/react/package.json
@@ -1,6 +1,6 @@
 {
   "name": "@zag-js/react",
-  "version": "1.38.0",
+  "version": "1.38.1",
   "description": "The react wrapper for zag",
   "keywords": [
     "ui-machines",
diff --git a/packages/frameworks/solid/CHANGELOG.md b/packages/frameworks/solid/CHANGELOG.md
index 213d108b9b..2455300dbc 100644
--- a/packages/frameworks/solid/CHANGELOG.md
+++ b/packages/frameworks/solid/CHANGELOG.md
@@ -1,5 +1,15 @@
 # @zag-js/solid
 
+## 1.38.1
+
+### Patch Changes
+
+- Updated dependencies [[`2b4818c`](https://github.com/chakra-ui/zag/commit/2b4818c3b82ed1ca8ffd2cb44110a4a195ac68d6)]:
+  - @zag-js/core@1.38.1
+  - @zag-js/store@1.38.1
+  - @zag-js/types@1.38.1
+  - @zag-js/utils@1.38.1
+
 ## 1.38.0
 
 ### Patch Changes
diff --git a/packages/frameworks/solid/package.json b/packages/frameworks/solid/package.json
index 1c43dac1d7..41502f9c9e 100644
--- a/packages/frameworks/solid/package.json
+++ b/packages/frameworks/solid/package.json
@@ -1,6 +1,6 @@
 {
   "name": "@zag-js/solid",
-  "version": "1.38.0",
+  "version": "1.38.1",
   "description": "The solid.js wrapper for zag",
   "keywords": [
     "ui-machines",
diff --git a/packages/frameworks/svelte/CHANGELOG.md b/packages/frameworks/svelte/CHANGELOG.md
index 8321ef78b8..a364460a70 100644
--- a/packages/frameworks/svelte/CHANGELOG.md
+++ b/packages/frameworks/svelte/CHANGELOG.md
@@ -1,5 +1,14 @@
 # @zag-js/svelte
 
+## 1.38.1
+
+### Patch Changes
+
+- Updated dependencies [[`2b4818c`](https://github.com/chakra-ui/zag/commit/2b4818c3b82ed1ca8ffd2cb44110a4a195ac68d6)]:
+  - @zag-js/core@1.38.1
+  - @zag-js/types@1.38.1
+  - @zag-js/utils@1.38.1
+
 ## 1.38.0
 
 ### Patch Changes
diff --git a/packages/frameworks/svelte/package.json b/packages/frameworks/svelte/package.json
index 63ecc53897..cfaaf912e4 100644
--- a/packages/frameworks/svelte/package.json
+++ b/packages/frameworks/svelte/package.json
@@ -1,6 +1,6 @@
 {
   "name": "@zag-js/svelte",
-  "version": "1.38.0",
+  "version": "1.38.1",
   "description": "The svelte wrapper for zag",
   "keywords": [
     "ui-machines",
diff --git a/packages/frameworks/vanilla/CHANGELOG.md b/packages/frameworks/vanilla/CHANGELOG.md
index 8d22dd58cd..cb5ffc4843 100644
--- a/packages/frameworks/vanilla/CHANGELOG.md
+++ b/packages/frameworks/vanilla/CHANGELOG.md
@@ -1,5 +1,15 @@
 # @zag-js/vanilla
 
+## 1.38.1
+
+### Patch Changes
+
+- Updated dependencies [[`2b4818c`](https://github.com/chakra-ui/zag/commit/2b4818c3b82ed1ca8ffd2cb44110a4a195ac68d6)]:
+  - @zag-js/core@1.38.1
+  - @zag-js/store@1.38.1
+  - @zag-js/types@1.38.1
+  - @zag-js/utils@1.38.1
+
 ## 1.38.0
 
 ### Patch Changes
diff --git a/packages/frameworks/vanilla/package.json b/packages/frameworks/vanilla/package.json
index a2b5d4fe3b..6ccd8002d9 100644
--- a/packages/frameworks/vanilla/package.json
+++ b/packages/frameworks/vanilla/package.json
@@ -1,6 +1,6 @@
 {
   "name": "@zag-js/vanilla",
-  "version": "1.38.0",
+  "version": "1.38.1",
   "description": "The vanilla wrapper for zag",
   "keywords": [
     "ui-machines",
diff --git a/packages/frameworks/vue/CHANGELOG.md b/packages/frameworks/vue/CHANGELOG.md
index ee322f8afd..4608235822 100644
--- a/packages/frameworks/vue/CHANGELOG.md
+++ b/packages/frameworks/vue/CHANGELOG.md
@@ -1,5 +1,15 @@
 # @zag-js/vue
 
+## 1.38.1
+
+### Patch Changes
+
+- Updated dependencies [[`2b4818c`](https://github.com/chakra-ui/zag/commit/2b4818c3b82ed1ca8ffd2cb44110a4a195ac68d6)]:
+  - @zag-js/core@1.38.1
+  - @zag-js/store@1.38.1
+  - @zag-js/types@1.38.1
+  - @zag-js/utils@1.38.1
+
 ## 1.38.0
 
 ### Patch Changes
diff --git a/packages/frameworks/vue/package.json b/packages/frameworks/vue/package.json
index ed512dfc87..99ee562529 100644
--- a/packages/frameworks/vue/package.json
+++ b/packages/frameworks/vue/package.json
@@ -1,6 +1,6 @@
 {
   "name": "@zag-js/vue",
-  "version": "1.38.0",
+  "version": "1.38.1",
   "description": "The vue wrapper for zag",
   "keywords": [
     "ui-machines",
diff --git a/packages/machines/accordion/CHANGELOG.md b/packages/machines/accordion/CHANGELOG.md
index 1b984de2ea..42f36e3eb9 100644
--- a/packages/machines/accordion/CHANGELOG.md
+++ b/packages/machines/accordion/CHANGELOG.md
@@ -1,5 +1,16 @@
 # @zag-js/accordion
 
+## 1.38.1
+
+### Patch Changes
+
+- Updated dependencies [[`2b4818c`](https://github.com/chakra-ui/zag/commit/2b4818c3b82ed1ca8ffd2cb44110a4a195ac68d6)]:
+  - @zag-js/core@1.38.1
+  - @zag-js/anatomy@1.38.1
+  - @zag-js/types@1.38.1
+  - @zag-js/utils@1.38.1
+  - @zag-js/dom-query@1.38.1
+
 ## 1.38.0
 
 ### Patch Changes
diff --git a/packages/machines/accordion/package.json b/packages/machines/accordion/package.json
index cd81a29e93..0d99fd6188 100644
--- a/packages/machines/accordion/package.json
+++ b/packages/machines/accordion/package.json
@@ -1,6 +1,6 @@
 {
   "name": "@zag-js/accordion",
-  "version": "1.38.0",
+  "version": "1.38.1",
   "description": "Core logic for the accordion widget implemented as a state machine",
   "keywords": [
     "js",
diff --git a/packages/machines/angle-slider/CHANGELOG.md b/packages/machines/angle-slider/CHANGELOG.md
index 4290572c82..e39bffeda1 100644
--- a/packages/machines/angle-slider/CHANGELOG.md
+++ b/packages/machines/angle-slider/CHANGELOG.md
@@ -1,5 +1,17 @@
 # @zag-js/angle-slider
 
+## 1.38.1
+
+### Patch Changes
+
+- Updated dependencies [[`2b4818c`](https://github.com/chakra-ui/zag/commit/2b4818c3b82ed1ca8ffd2cb44110a4a195ac68d6)]:
+  - @zag-js/core@1.38.1
+  - @zag-js/anatomy@1.38.1
+  - @zag-js/types@1.38.1
+  - @zag-js/utils@1.38.1
+  - @zag-js/dom-query@1.38.1
+  - @zag-js/rect-utils@1.38.1
+
 ## 1.38.0
 
 ### Patch Changes
diff --git a/packages/machines/angle-slider/package.json b/packages/machines/angle-slider/package.json
index 06e439cbda..ef5ad80e0b 100644
--- a/packages/machines/angle-slider/package.json
+++ b/packages/machines/angle-slider/package.json
@@ -1,6 +1,6 @@
 {
   "name": "@zag-js/angle-slider",
-  "version": "1.38.0",
+  "version": "1.38.1",
   "description": "Core logic for the angle-slider widget implemented as a state machine",
   "keywords": [
     "js",
diff --git a/packages/machines/async-list/CHANGELOG.md b/packages/machines/async-list/CHANGELOG.md
index b765387307..c9943ae0dc 100644
--- a/packages/machines/async-list/CHANGELOG.md
+++ b/packages/machines/async-list/CHANGELOG.md
@@ -1,5 +1,13 @@
 # @zag-js/async-list
 
+## 1.38.1
+
+### Patch Changes
+
+- Updated dependencies [[`2b4818c`](https://github.com/chakra-ui/zag/commit/2b4818c3b82ed1ca8ffd2cb44110a4a195ac68d6)]:
+  - @zag-js/core@1.38.1
+  - @zag-js/utils@1.38.1
+
 ## 1.38.0
 
 ### Patch Changes
diff --git a/packages/machines/async-list/package.json b/packages/machines/async-list/package.json
index 4bcaf21f08..5e161efa94 100644
--- a/packages/machines/async-list/package.json
+++ b/packages/machines/async-list/package.json
@@ -1,6 +1,6 @@
 {
   "name": "@zag-js/async-list",
-  "version": "1.38.0",
+  "version": "1.38.1",
   "description": "Core logic for the async-list widget implemented as a state machine",
   "keywords": [
     "js",
diff --git a/packages/machines/avatar/CHANGELOG.md b/packages/machines/avatar/CHANGELOG.md
index 5f899e37af..4cf13f8dc0 100644
--- a/packages/machines/avatar/CHANGELOG.md
+++ b/packages/machines/avatar/CHANGELOG.md
@@ -1,5 +1,16 @@
 # @zag-js/avatar
 
+## 1.38.1
+
+### Patch Changes
+
+- Updated dependencies [[`2b4818c`](https://github.com/chakra-ui/zag/commit/2b4818c3b82ed1ca8ffd2cb44110a4a195ac68d6)]:
+  - @zag-js/core@1.38.1
+  - @zag-js/anatomy@1.38.1
+  - @zag-js/types@1.38.1
+  - @zag-js/utils@1.38.1
+  - @zag-js/dom-query@1.38.1
+
 ## 1.38.0
 
 ### Patch Changes
diff --git a/packages/machines/avatar/package.json b/packages/machines/avatar/package.json
index ead158d6a2..1ffaba64a5 100644
--- a/packages/machines/avatar/package.json
+++ b/packages/machines/avatar/package.json
@@ -1,6 +1,6 @@
 {
   "name": "@zag-js/avatar",
-  "version": "1.38.0",
+  "version": "1.38.1",
   "description": "Core logic for the avatar widget implemented as a state machine",
   "keywords": [
     "js",
diff --git a/packages/machines/carousel/CHANGELOG.md b/packages/machines/carousel/CHANGELOG.md
index 83e5218749..4fcf7ed5cf 100644
--- a/packages/machines/carousel/CHANGELOG.md
+++ b/packages/machines/carousel/CHANGELOG.md
@@ -1,5 +1,17 @@
 # @zag-js/carousel
 
+## 1.38.1
+
+### Patch Changes
+
+- Updated dependencies [[`2b4818c`](https://github.com/chakra-ui/zag/commit/2b4818c3b82ed1ca8ffd2cb44110a4a195ac68d6)]:
+  - @zag-js/core@1.38.1
+  - @zag-js/anatomy@1.38.1
+  - @zag-js/types@1.38.1
+  - @zag-js/utils@1.38.1
+  - @zag-js/dom-query@1.38.1
+  - @zag-js/scroll-snap@1.38.1
+
 ## 1.38.0
 
 ### Patch Changes
diff --git a/packages/machines/carousel/package.json b/packages/machines/carousel/package.json
index 56527d9b64..66d17ccb39 100644
--- a/packages/machines/carousel/package.json
+++ b/packages/machines/carousel/package.json
@@ -1,6 +1,6 @@
 {
   "name": "@zag-js/carousel",
-  "version": "1.38.0",
+  "version": "1.38.1",
   "description": "Core logic for the carousel widget implemented as a state machine",
   "keywords": [
     "js",
diff --git a/packages/machines/cascade-select/CHANGELOG.md b/packages/machines/cascade-select/CHANGELOG.md
index 3d58483c67..7042464303 100644
--- a/packages/machines/cascade-select/CHANGELOG.md
+++ b/packages/machines/cascade-select/CHANGELOG.md
@@ -1,5 +1,22 @@
 # @zag-js/cascade-select
 
+## 1.38.1
+
+### Patch Changes
+
+- Updated dependencies [[`2b4818c`](https://github.com/chakra-ui/zag/commit/2b4818c3b82ed1ca8ffd2cb44110a4a195ac68d6),
+  [`2b4818c`](https://github.com/chakra-ui/zag/commit/2b4818c3b82ed1ca8ffd2cb44110a4a195ac68d6)]:
+  - @zag-js/core@1.38.1
+  - @zag-js/popper@1.38.1
+  - @zag-js/anatomy@1.38.1
+  - @zag-js/types@1.38.1
+  - @zag-js/collection@1.38.1
+  - @zag-js/utils@1.38.1
+  - @zag-js/dismissable@1.38.1
+  - @zag-js/dom-query@1.38.1
+  - @zag-js/focus-visible@1.38.1
+  - @zag-js/rect-utils@1.38.1
+
 ## 1.38.0
 
 ### Patch Changes
diff --git a/packages/machines/cascade-select/package.json b/packages/machines/cascade-select/package.json
index 0c8c7067e1..29ce2de5f8 100644
--- a/packages/machines/cascade-select/package.json
+++ b/packages/machines/cascade-select/package.json
@@ -1,6 +1,6 @@
 {
   "name": "@zag-js/cascade-select",
-  "version": "1.38.0",
+  "version": "1.38.1",
   "description": "Core logic for the cascade-select widget implemented as a state machine",
   "keywords": [
     "js",
diff --git a/packages/machines/checkbox/CHANGELOG.md b/packages/machines/checkbox/CHANGELOG.md
index eb7ac64e03..bfb2ad29ef 100644
--- a/packages/machines/checkbox/CHANGELOG.md
+++ b/packages/machines/checkbox/CHANGELOG.md
@@ -1,5 +1,17 @@
 # @zag-js/checkbox
 
+## 1.38.1
+
+### Patch Changes
+
+- Updated dependencies [[`2b4818c`](https://github.com/chakra-ui/zag/commit/2b4818c3b82ed1ca8ffd2cb44110a4a195ac68d6)]:
+  - @zag-js/core@1.38.1
+  - @zag-js/anatomy@1.38.1
+  - @zag-js/types@1.38.1
+  - @zag-js/utils@1.38.1
+  - @zag-js/dom-query@1.38.1
+  - @zag-js/focus-visible@1.38.1
+
 ## 1.38.0
 
 ### Patch Changes
diff --git a/packages/machines/checkbox/package.json b/packages/machines/checkbox/package.json
index a03d397dd2..130cca9989 100644
--- a/packages/machines/checkbox/package.json
+++ b/packages/machines/checkbox/package.json
@@ -1,6 +1,6 @@
 {
   "name": "@zag-js/checkbox",
-  "version": "1.38.0",
+  "version": "1.38.1",
   "description": "Core logic for the checkbox widget implemented as a state machine",
   "keywords": [
     "js",
diff --git a/packages/machines/clipboard/CHANGELOG.md b/packages/machines/clipboard/CHANGELOG.md
index ab58c35a1e..5db6be23f1 100644
--- a/packages/machines/clipboard/CHANGELOG.md
+++ b/packages/machines/clipboard/CHANGELOG.md
@@ -1,5 +1,16 @@
 # @zag-js/clipboard
 
+## 1.38.1
+
+### Patch Changes
+
+- Updated dependencies [[`2b4818c`](https://github.com/chakra-ui/zag/commit/2b4818c3b82ed1ca8ffd2cb44110a4a195ac68d6)]:
+  - @zag-js/core@1.38.1
+  - @zag-js/anatomy@1.38.1
+  - @zag-js/types@1.38.1
+  - @zag-js/utils@1.38.1
+  - @zag-js/dom-query@1.38.1
+
 ## 1.38.0
 
 ### Patch Changes
diff --git a/packages/machines/clipboard/package.json b/packages/machines/clipboard/package.json
index 7c30f45d87..b1c2addac6 100644
--- a/packages/machines/clipboard/package.json
+++ b/packages/machines/clipboard/package.json
@@ -1,6 +1,6 @@
 {
   "name": "@zag-js/clipboard",
-  "version": "1.38.0",
+  "version": "1.38.1",
   "description": "Core logic for the clipboard widget implemented as a state machine",
   "keywords": [
     "js",
diff --git a/packages/machines/collapsible/CHANGELOG.md b/packages/machines/collapsible/CHANGELOG.md
index eef3b99690..29c093357e 100644
--- a/packages/machines/collapsible/CHANGELOG.md
+++ b/packages/machines/collapsible/CHANGELOG.md
@@ -1,5 +1,16 @@
 # @zag-js/collapsible
 
+## 1.38.1
+
+### Patch Changes
+
+- Updated dependencies [[`2b4818c`](https://github.com/chakra-ui/zag/commit/2b4818c3b82ed1ca8ffd2cb44110a4a195ac68d6)]:
+  - @zag-js/core@1.38.1
+  - @zag-js/anatomy@1.38.1
+  - @zag-js/types@1.38.1
+  - @zag-js/utils@1.38.1
+  - @zag-js/dom-query@1.38.1
+
 ## 1.38.0
 
 ### Patch Changes
diff --git a/packages/machines/collapsible/package.json b/packages/machines/collapsible/package.json
index 672cc5266d..c2e636f98d 100644
--- a/packages/machines/collapsible/package.json
+++ b/packages/machines/collapsible/package.json
@@ -1,6 +1,6 @@
 {
   "name": "@zag-js/collapsible",
-  "version": "1.38.0",
+  "version": "1.38.1",
   "description": "Core logic for the collapsible widget implemented as a state machine",
   "keywords": [
     "js",
diff --git a/packages/machines/color-picker/CHANGELOG.md b/packages/machines/color-picker/CHANGELOG.md
index 9ca5308641..c791f2e920 100644
--- a/packages/machines/color-picker/CHANGELOG.md
+++ b/packages/machines/color-picker/CHANGELOG.md
@@ -1,5 +1,20 @@
 # @zag-js/color-picker
 
+## 1.38.1
+
+### Patch Changes
+
+- Updated dependencies [[`2b4818c`](https://github.com/chakra-ui/zag/commit/2b4818c3b82ed1ca8ffd2cb44110a4a195ac68d6),
+  [`2b4818c`](https://github.com/chakra-ui/zag/commit/2b4818c3b82ed1ca8ffd2cb44110a4a195ac68d6)]:
+  - @zag-js/core@1.38.1
+  - @zag-js/popper@1.38.1
+  - @zag-js/anatomy@1.38.1
+  - @zag-js/types@1.38.1
+  - @zag-js/color-utils@1.38.1
+  - @zag-js/utils@1.38.1
+  - @zag-js/dismissable@1.38.1
+  - @zag-js/dom-query@1.38.1
+
 ## 1.38.0
 
 ### Patch Changes
diff --git a/packages/machines/color-picker/package.json b/packages/machines/color-picker/package.json
index 002e99808d..9a99683d12 100644
--- a/packages/machines/color-picker/package.json
+++ b/packages/machines/color-picker/package.json
@@ -1,6 +1,6 @@
 {
   "name": "@zag-js/color-picker",
-  "version": "1.38.0",
+  "version": "1.38.1",
   "description": "Core logic for the color-picker widget implemented as a state machine",
   "keywords": [
     "js",
diff --git a/packages/machines/combobox/CHANGELOG.md b/packages/machines/combobox/CHANGELOG.md
index 5fac04fd06..abf2d1b833 100644
--- a/packages/machines/combobox/CHANGELOG.md
+++ b/packages/machines/combobox/CHANGELOG.md
@@ -1,5 +1,22 @@
 # @zag-js/combobox
 
+## 1.38.1
+
+### Patch Changes
+
+- Updated dependencies [[`2b4818c`](https://github.com/chakra-ui/zag/commit/2b4818c3b82ed1ca8ffd2cb44110a4a195ac68d6),
+  [`2b4818c`](https://github.com/chakra-ui/zag/commit/2b4818c3b82ed1ca8ffd2cb44110a4a195ac68d6)]:
+  - @zag-js/core@1.38.1
+  - @zag-js/popper@1.38.1
+  - @zag-js/anatomy@1.38.1
+  - @zag-js/types@1.38.1
+  - @zag-js/aria-hidden@1.38.1
+  - @zag-js/collection@1.38.1
+  - @zag-js/utils@1.38.1
+  - @zag-js/dismissable@1.38.1
+  - @zag-js/dom-query@1.38.1
+  - @zag-js/focus-visible@1.38.1
+
 ## 1.38.0
 
 ### Patch Changes
diff --git a/packages/machines/combobox/package.json b/packages/machines/combobox/package.json
index 0880810b06..0c92919796 100644
--- a/packages/machines/combobox/package.json
+++ b/packages/machines/combobox/package.json
@@ -1,6 +1,6 @@
 {
   "name": "@zag-js/combobox",
-  "version": "1.38.0",
+  "version": "1.38.1",
   "description": "Core logic for the combobox widget implemented as a state machine",
   "keywords": [
     "js",
diff --git a/packages/machines/date-input/CHANGELOG.md b/packages/machines/date-input/CHANGELOG.md
index 6569380872..a54eec66b3 100644
--- a/packages/machines/date-input/CHANGELOG.md
+++ b/packages/machines/date-input/CHANGELOG.md
@@ -1,5 +1,18 @@
 # @zag-js/date-input
 
+## 1.38.1
+
+### Patch Changes
+
+- Updated dependencies [[`2b4818c`](https://github.com/chakra-ui/zag/commit/2b4818c3b82ed1ca8ffd2cb44110a4a195ac68d6)]:
+  - @zag-js/core@1.38.1
+  - @zag-js/anatomy@1.38.1
+  - @zag-js/types@1.38.1
+  - @zag-js/utils@1.38.1
+  - @zag-js/date-utils@1.38.1
+  - @zag-js/dom-query@1.38.1
+  - @zag-js/live-region@1.38.1
+
 ## 1.38.0
 
 ### Patch Changes
diff --git a/packages/machines/date-input/package.json b/packages/machines/date-input/package.json
index 71858cb10c..80bfda9e89 100644
--- a/packages/machines/date-input/package.json
+++ b/packages/machines/date-input/package.json
@@ -1,6 +1,6 @@
 {
   "name": "@zag-js/date-input",
-  "version": "1.38.0",
+  "version": "1.38.1",
   "description": "Core logic for the date-input widget implemented as a state machine",
   "keywords": [
     "js",
diff --git a/packages/machines/date-picker/CHANGELOG.md b/packages/machines/date-picker/CHANGELOG.md
index cba52051ef..8697311972 100644
--- a/packages/machines/date-picker/CHANGELOG.md
+++ b/packages/machines/date-picker/CHANGELOG.md
@@ -1,5 +1,21 @@
 # @zag-js/date-picker
 
+## 1.38.1
+
+### Patch Changes
+
+- Updated dependencies [[`2b4818c`](https://github.com/chakra-ui/zag/commit/2b4818c3b82ed1ca8ffd2cb44110a4a195ac68d6),
+  [`2b4818c`](https://github.com/chakra-ui/zag/commit/2b4818c3b82ed1ca8ffd2cb44110a4a195ac68d6)]:
+  - @zag-js/core@1.38.1
+  - @zag-js/popper@1.38.1
+  - @zag-js/anatomy@1.38.1
+  - @zag-js/types@1.38.1
+  - @zag-js/utils@1.38.1
+  - @zag-js/date-utils@1.38.1
+  - @zag-js/dismissable@1.38.1
+  - @zag-js/dom-query@1.38.1
+  - @zag-js/live-region@1.38.1
+
 ## 1.38.0
 
 ### Minor Changes
diff --git a/packages/machines/date-picker/package.json b/packages/machines/date-picker/package.json
index 3f9a9292ab..ede3dd1447 100644
--- a/packages/machines/date-picker/package.json
+++ b/packages/machines/date-picker/package.json
@@ -1,6 +1,6 @@
 {
   "name": "@zag-js/date-picker",
-  "version": "1.38.0",
+  "version": "1.38.1",
   "description": "Core logic for the date-picker widget implemented as a state machine",
   "keywords": [
     "js",
diff --git a/packages/machines/dialog/CHANGELOG.md b/packages/machines/dialog/CHANGELOG.md
index b7a95853e5..ae3474520c 100644
--- a/packages/machines/dialog/CHANGELOG.md
+++ b/packages/machines/dialog/CHANGELOG.md
@@ -1,5 +1,20 @@
 # @zag-js/dialog
 
+## 1.38.1
+
+### Patch Changes
+
+- Updated dependencies [[`2b4818c`](https://github.com/chakra-ui/zag/commit/2b4818c3b82ed1ca8ffd2cb44110a4a195ac68d6)]:
+  - @zag-js/core@1.38.1
+  - @zag-js/anatomy@1.38.1
+  - @zag-js/types@1.38.1
+  - @zag-js/aria-hidden@1.38.1
+  - @zag-js/utils@1.38.1
+  - @zag-js/dismissable@1.38.1
+  - @zag-js/dom-query@1.38.1
+  - @zag-js/focus-trap@1.38.1
+  - @zag-js/remove-scroll@1.38.1
+
 ## 1.38.0
 
 ### Patch Changes
diff --git a/packages/machines/dialog/package.json b/packages/machines/dialog/package.json
index fa6c7957b8..d8c34e6a4b 100644
--- a/packages/machines/dialog/package.json
+++ b/packages/machines/dialog/package.json
@@ -1,6 +1,6 @@
 {
   "name": "@zag-js/dialog",
-  "version": "1.38.0",
+  "version": "1.38.1",
   "description": "Core logic for the dialog widget implemented as a state machine",
   "keywords": [
     "js",
diff --git a/packages/machines/dialog/src/dialog.connect.ts b/packages/machines/dialog/src/dialog.connect.ts
index 2f3e8209a6..bdbce6281d 100644
--- a/packages/machines/dialog/src/dialog.connect.ts
+++ b/packages/machines/dialog/src/dialog.connect.ts
@@ -1,8 +1,9 @@
-import type { NormalizeProps, PropTypes } from "@zag-js/types"
 import type { Service } from "@zag-js/core"
+import type { JSX, NormalizeProps, PropTypes } from "@zag-js/types"
+import { compact } from "@zag-js/utils"
 import { parts } from "./dialog.anatomy"
 import * as dom from "./dialog.dom"
-import type { DialogSchema, DialogApi } from "./dialog.types"
+import type { DialogApi, DialogSchema } from "./dialog.types"
 
 export function connect<T extends PropTypes>(
   service: Service<DialogSchema>,
@@ -52,9 +53,9 @@ export function connect<T extends PropTypes>(
         ...parts.positioner.attrs,
         dir: prop("dir"),
         id: dom.getPositionerId(scope),
-        style: {
+        style: compact<JSX.CSSProperties>({
           pointerEvents: !open || !prop("modal") ? "none" : undefined,
-        },
+        }),
       })
     },
 
@@ -72,9 +73,9 @@ export function connect<T extends PropTypes>(
         "aria-label": ariaLabel || undefined,
         "aria-labelledby": ariaLabel || !rendered.title ? undefined : dom.getTitleId(scope),
         "aria-describedby": rendered.description ? dom.getDescriptionId(scope) : undefined,
-        style: {
+        style: compact<JSX.CSSProperties>({
           pointerEvents: prop("modal") ? undefined : "auto",
-        },
+        }),
       })
     },
 
diff --git a/packages/machines/drawer/CHANGELOG.md b/packages/machines/drawer/CHANGELOG.md
index 9dab657762..2a66ed82ba 100644
--- a/packages/machines/drawer/CHANGELOG.md
+++ b/packages/machines/drawer/CHANGELOG.md
@@ -1,5 +1,20 @@
 # @zag-js/drawer
 
+## 1.38.1
+
+### Patch Changes
+
+- Updated dependencies [[`2b4818c`](https://github.com/chakra-ui/zag/commit/2b4818c3b82ed1ca8ffd2cb44110a4a195ac68d6)]:
+  - @zag-js/core@1.38.1
+  - @zag-js/anatomy@1.38.1
+  - @zag-js/types@1.38.1
+  - @zag-js/aria-hidden@1.38.1
+  - @zag-js/utils@1.38.1
+  - @zag-js/dismissable@1.38.1
+  - @zag-js/dom-query@1.38.1
+  - @zag-js/focus-trap@1.38.1
+  - @zag-js/remove-scroll@1.38.1
+
 ## 1.38.0
 
 ### Minor Changes
diff --git a/packages/machines/drawer/package.json b/packages/machines/drawer/package.json
index a24796ae5c..da59122a38 100644
--- a/packages/machines/drawer/package.json
+++ b/packages/machines/drawer/package.json
@@ -1,6 +1,6 @@
 {
   "name": "@zag-js/drawer",
-  "version": "1.38.0",
+  "version": "1.38.1",
   "description": "Core logic for the drawer widget implemented as a state machine",
   "keywords": [
     "js",
diff --git a/packages/machines/drawer/src/drawer.connect.ts b/packages/machines/drawer/src/drawer.connect.ts
index 7174cbcb3b..cbadd5f91e 100644
--- a/packages/machines/drawer/src/drawer.connect.ts
+++ b/packages/machines/drawer/src/drawer.connect.ts
@@ -1,6 +1,6 @@
 import { getEventPoint, isLeftClick } from "@zag-js/dom-query"
 import type { JSX, NormalizeProps, PropTypes } from "@zag-js/types"
-import { clampValue, toPx } from "@zag-js/utils"
+import { clampValue, compact, toPx } from "@zag-js/utils"
 import { parts } from "./drawer.anatomy"
 import * as dom from "./drawer.dom"
 import { oppositeSwipeDirection, resolveSwipeDirection } from "./utils/drawer-session"
@@ -116,9 +116,9 @@ export function connect<T extends PropTypes>(service: DrawerService, normalize:
         hidden: closed,
         "data-state": open ? "open" : "closed",
         "data-swipe-direction": physicalDirection,
-        style: {
+        style: compact<JSX.CSSProperties>({
           pointerEvents: prop("modal") ? undefined : "none",
-        },
+        }),
       })
     },
 
@@ -142,7 +142,7 @@ export function connect<T extends PropTypes>(service: DrawerService, normalize:
         "data-swipe-direction": physicalDirection,
         "data-swiping": dragging || swipingOpen ? "" : undefined,
         "data-dragging": dragging ? "" : undefined,
-        style: {
+        style: compact<JSX.CSSProperties>({
           pointerEvents: prop("modal") ? undefined : "auto",
           visibility: swipingOpen && dragOffset === null ? "hidden" : undefined,
           transform: "translate3d(var(--drawer-translate-x, 0px), var(--drawer-translate-y, 0px), 0)",
@@ -160,7 +160,7 @@ export function connect<T extends PropTypes>(service: DrawerService, normalize:
           "--drawer-swipe-movement-y": toPx(movementY),
           "--drawer-swipe-strength": `${swipeStrength}`,
           willChange: "transform",
-        },
+        }),
         onPointerDown(event) {
           if (!props.draggable) return
           onContentPointerDown(event)
diff --git a/packages/machines/editable/CHANGELOG.md b/packages/machines/editable/CHANGELOG.md
index 66de03bd61..07dc77ca0b 100644
--- a/packages/machines/editable/CHANGELOG.md
+++ b/packages/machines/editable/CHANGELOG.md
@@ -1,5 +1,17 @@
 # @zag-js/editable
 
+## 1.38.1
+
+### Patch Changes
+
+- Updated dependencies [[`2b4818c`](https://github.com/chakra-ui/zag/commit/2b4818c3b82ed1ca8ffd2cb44110a4a195ac68d6)]:
+  - @zag-js/core@1.38.1
+  - @zag-js/anatomy@1.38.1
+  - @zag-js/types@1.38.1
+  - @zag-js/utils@1.38.1
+  - @zag-js/dom-query@1.38.1
+  - @zag-js/interact-outside@1.38.1
+
 ## 1.38.0
 
 ### Patch Changes
diff --git a/packages/machines/editable/package.json b/packages/machines/editable/package.json
index a4a0c3e78d..61684643c9 100644
--- a/packages/machines/editable/package.json
+++ b/packages/machines/editable/package.json
@@ -1,6 +1,6 @@
 {
   "name": "@zag-js/editable",
-  "version": "1.38.0",
+  "version": "1.38.1",
   "description": "Core logic for the editable widget implemented as a state machine",
   "keywords": [
     "js",
diff --git a/packages/machines/file-upload/CHANGELOG.md b/packages/machines/file-upload/CHANGELOG.md
index 4181e6e0da..b0919a2bc1 100644
--- a/packages/machines/file-upload/CHANGELOG.md
+++ b/packages/machines/file-upload/CHANGELOG.md
@@ -1,5 +1,21 @@
 # @zag-js/file-upload
 
+## 1.38.1
+
+### Patch Changes
+
+- [`a9745d2`](https://github.com/chakra-ui/zag/commit/a9745d2f9ee90947ed209741a9652d7fe3672dc7) Thanks
+  [@segunadebayo](https://github.com/segunadebayo)! - Automatically reject duplicate files with `FILE_EXISTS`
+  error.Previously, uploading the same file twice was silently accepted and deleting one duplicate removed all of them.
+- Updated dependencies [[`2b4818c`](https://github.com/chakra-ui/zag/commit/2b4818c3b82ed1ca8ffd2cb44110a4a195ac68d6)]:
+  - @zag-js/core@1.38.1
+  - @zag-js/anatomy@1.38.1
+  - @zag-js/types@1.38.1
+  - @zag-js/utils@1.38.1
+  - @zag-js/dom-query@1.38.1
+  - @zag-js/file-utils@1.38.1
+  - @zag-js/i18n-utils@1.38.1
+
 ## 1.38.0
 
 ### Patch Changes
diff --git a/packages/machines/file-upload/package.json b/packages/machines/file-upload/package.json
index 9cfe75862c..bb65f51bce 100644
--- a/packages/machines/file-upload/package.json
+++ b/packages/machines/file-upload/package.json
@@ -1,6 +1,6 @@
 {
   "name": "@zag-js/file-upload",
-  "version": "1.38.0",
+  "version": "1.38.1",
   "description": "Core logic for the file-upload widget implemented as a state machine",
   "keywords": [
     "js",
diff --git a/packages/machines/floating-panel/CHANGELOG.md b/packages/machines/floating-panel/CHANGELOG.md
index 50ea45d376..e95d003477 100644
--- a/packages/machines/floating-panel/CHANGELOG.md
+++ b/packages/machines/floating-panel/CHANGELOG.md
@@ -1,5 +1,20 @@
 # @zag-js/floating-panel
 
+## 1.38.1
+
+### Patch Changes
+
+- Updated dependencies [[`2b4818c`](https://github.com/chakra-ui/zag/commit/2b4818c3b82ed1ca8ffd2cb44110a4a195ac68d6),
+  [`2b4818c`](https://github.com/chakra-ui/zag/commit/2b4818c3b82ed1ca8ffd2cb44110a4a195ac68d6)]:
+  - @zag-js/core@1.38.1
+  - @zag-js/popper@1.38.1
+  - @zag-js/anatomy@1.38.1
+  - @zag-js/store@1.38.1
+  - @zag-js/types@1.38.1
+  - @zag-js/utils@1.38.1
+  - @zag-js/dom-query@1.38.1
+  - @zag-js/rect-utils@1.38.1
+
 ## 1.38.0
 
 ### Patch Changes
diff --git a/packages/machines/floating-panel/package.json b/packages/machines/floating-panel/package.json
index 752c0011b3..3ab81848fe 100644
--- a/packages/machines/floating-panel/package.json
+++ b/packages/machines/floating-panel/package.json
@@ -1,6 +1,6 @@
 {
   "name": "@zag-js/floating-panel",
-  "version": "1.38.0",
+  "version": "1.38.1",
   "description": "Core logic for the floating-panel widget implemented as a state machine",
   "keywords": [
     "js",
diff --git a/packages/machines/hover-card/CHANGELOG.md b/packages/machines/hover-card/CHANGELOG.md
index d02e05e884..d9550257d2 100644
--- a/packages/machines/hover-card/CHANGELOG.md
+++ b/packages/machines/hover-card/CHANGELOG.md
@@ -1,5 +1,19 @@
 # @zag-js/hover-card
 
+## 1.38.1
+
+### Patch Changes
+
+- Updated dependencies [[`2b4818c`](https://github.com/chakra-ui/zag/commit/2b4818c3b82ed1ca8ffd2cb44110a4a195ac68d6),
+  [`2b4818c`](https://github.com/chakra-ui/zag/commit/2b4818c3b82ed1ca8ffd2cb44110a4a195ac68d6)]:
+  - @zag-js/core@1.38.1
+  - @zag-js/popper@1.38.1
+  - @zag-js/anatomy@1.38.1
+  - @zag-js/types@1.38.1
+  - @zag-js/utils@1.38.1
+  - @zag-js/dismissable@1.38.1
+  - @zag-js/dom-query@1.38.1
+
 ## 1.38.0
 
 ### Patch Changes
diff --git a/packages/machines/hover-card/package.json b/packages/machines/hover-card/package.json
index 2a1bd8eab4..8deab6d6df 100644
--- a/packages/machines/hover-card/package.json
+++ b/packages/machines/hover-card/package.json
@@ -1,6 +1,6 @@
 {
   "name": "@zag-js/hover-card",
-  "version": "1.38.0",
+  "version": "1.38.1",
   "description": "Core logic for the hover-card widget implemented as a state machine",
   "keywords": [
     "js",
diff --git a/packages/machines/image-cropper/CHANGELOG.md b/packages/machines/image-cropper/CHANGELOG.md
index e45f3f28b3..0a2e350bc1 100644
--- a/packages/machines/image-cropper/CHANGELOG.md
+++ b/packages/machines/image-cropper/CHANGELOG.md
@@ -1,5 +1,16 @@
 # @zag-js/image-cropper
 
+## 1.38.1
+
+### Patch Changes
+
+- Updated dependencies [[`2b4818c`](https://github.com/chakra-ui/zag/commit/2b4818c3b82ed1ca8ffd2cb44110a4a195ac68d6)]:
+  - @zag-js/core@1.38.1
+  - @zag-js/anatomy@1.38.1
+  - @zag-js/types@1.38.1
+  - @zag-js/utils@1.38.1
+  - @zag-js/dom-query@1.38.1
+
 ## 1.38.0
 
 ### Patch Changes
diff --git a/packages/machines/image-cropper/package.json b/packages/machines/image-cropper/package.json
index 1237ea6c63..6609e31896 100644
--- a/packages/machines/image-cropper/package.json
+++ b/packages/machines/image-cropper/package.json
@@ -1,6 +1,6 @@
 {
   "name": "@zag-js/image-cropper",
-  "version": "1.38.0",
+  "version": "1.38.1",
   "description": "Core logic for the image-cropper widget implemented as a state machine",
   "keywords": [
     "js",
diff --git a/packages/machines/listbox/CHANGELOG.md b/packages/machines/listbox/CHANGELOG.md
index f8b7cf7174..d0f6ec23d4 100644
--- a/packages/machines/listbox/CHANGELOG.md
+++ b/packages/machines/listbox/CHANGELOG.md
@@ -1,5 +1,18 @@
 # @zag-js/listbox
 
+## 1.38.1
+
+### Patch Changes
+
+- Updated dependencies [[`2b4818c`](https://github.com/chakra-ui/zag/commit/2b4818c3b82ed1ca8ffd2cb44110a4a195ac68d6)]:
+  - @zag-js/core@1.38.1
+  - @zag-js/anatomy@1.38.1
+  - @zag-js/types@1.38.1
+  - @zag-js/collection@1.38.1
+  - @zag-js/utils@1.38.1
+  - @zag-js/dom-query@1.38.1
+  - @zag-js/focus-visible@1.38.1
+
 ## 1.38.0
 
 ### Patch Changes
diff --git a/packages/machines/listbox/package.json b/packages/machines/listbox/package.json
index cbd86b8c5e..5cc9111238 100644
--- a/packages/machines/listbox/package.json
+++ b/packages/machines/listbox/package.json
@@ -1,6 +1,6 @@
 {
   "name": "@zag-js/listbox",
-  "version": "1.38.0",
+  "version": "1.38.1",
   "description": "Core logic for the listbox widget implemented as a state machine",
   "keywords": [
     "js",
diff --git a/packages/machines/marquee/CHANGELOG.md b/packages/machines/marquee/CHANGELOG.md
index 44f2885175..5009521475 100644
--- a/packages/machines/marquee/CHANGELOG.md
+++ b/packages/machines/marquee/CHANGELOG.md
@@ -1,5 +1,16 @@
 # @zag-js/marquee
 
+## 1.38.1
+
+### Patch Changes
+
+- Updated dependencies [[`2b4818c`](https://github.com/chakra-ui/zag/commit/2b4818c3b82ed1ca8ffd2cb44110a4a195ac68d6)]:
+  - @zag-js/core@1.38.1
+  - @zag-js/anatomy@1.38.1
+  - @zag-js/types@1.38.1
+  - @zag-js/utils@1.38.1
+  - @zag-js/dom-query@1.38.1
+
 ## 1.38.0
 
 ### Patch Changes
diff --git a/packages/machines/marquee/package.json b/packages/machines/marquee/package.json
index 87739e90ce..7a8ea08b70 100644
--- a/packages/machines/marquee/package.json
+++ b/packages/machines/marquee/package.json
@@ -1,6 +1,6 @@
 {
   "name": "@zag-js/marquee",
-  "version": "1.38.0",
+  "version": "1.38.1",
   "description": "Core logic for the marquee widget implemented as a state machine",
   "keywords": [
     "js",
diff --git a/packages/machines/menu/CHANGELOG.md b/packages/machines/menu/CHANGELOG.md
index bb264254d1..f76846cd3d 100644
--- a/packages/machines/menu/CHANGELOG.md
+++ b/packages/machines/menu/CHANGELOG.md
@@ -1,5 +1,21 @@
 # @zag-js/menu
 
+## 1.38.1
+
+### Patch Changes
+
+- Updated dependencies [[`2b4818c`](https://github.com/chakra-ui/zag/commit/2b4818c3b82ed1ca8ffd2cb44110a4a195ac68d6),
+  [`2b4818c`](https://github.com/chakra-ui/zag/commit/2b4818c3b82ed1ca8ffd2cb44110a4a195ac68d6)]:
+  - @zag-js/core@1.38.1
+  - @zag-js/popper@1.38.1
+  - @zag-js/anatomy@1.38.1
+  - @zag-js/types@1.38.1
+  - @zag-js/utils@1.38.1
+  - @zag-js/dismissable@1.38.1
+  - @zag-js/dom-query@1.38.1
+  - @zag-js/focus-visible@1.38.1
+  - @zag-js/rect-utils@1.38.1
+
 ## 1.38.0
 
 ### Patch Changes
diff --git a/packages/machines/menu/package.json b/packages/machines/menu/package.json
index 4ab437fd94..a5a5592e14 100644
--- a/packages/machines/menu/package.json
+++ b/packages/machines/menu/package.json
@@ -1,6 +1,6 @@
 {
   "name": "@zag-js/menu",
-  "version": "1.38.0",
+  "version": "1.38.1",
   "description": "Core logic for the menu widget implemented as a state machine",
   "keywords": [
     "js",
diff --git a/packages/machines/navigation-menu/CHANGELOG.md b/packages/machines/navigation-menu/CHANGELOG.md
index b1a1299277..bae30dfea0 100644
--- a/packages/machines/navigation-menu/CHANGELOG.md
+++ b/packages/machines/navigation-menu/CHANGELOG.md
@@ -1,5 +1,17 @@
 # @zag-js/navigation-menu
 
+## 1.38.1
+
+### Patch Changes
+
+- Updated dependencies [[`2b4818c`](https://github.com/chakra-ui/zag/commit/2b4818c3b82ed1ca8ffd2cb44110a4a195ac68d6)]:
+  - @zag-js/core@1.38.1
+  - @zag-js/anatomy@1.38.1
+  - @zag-js/types@1.38.1
+  - @zag-js/utils@1.38.1
+  - @zag-js/dismissable@1.38.1
+  - @zag-js/dom-query@1.38.1
+
 ## 1.38.0
 
 ### Patch Changes
diff --git a/packages/machines/navigation-menu/package.json b/packages/machines/navigation-menu/package.json
index 7b0539cd0e..0ebecd7291 100644
--- a/packages/machines/navigation-menu/package.json
+++ b/packages/machines/navigation-menu/package.json
@@ -1,6 +1,6 @@
 {
   "name": "@zag-js/navigation-menu",
-  "version": "1.38.0",
+  "version": "1.38.1",
   "description": "Core logic for the navigation-menu widget implemented as a state machine",
   "keywords": [
     "js",
diff --git a/packages/machines/number-input/CHANGELOG.md b/packages/machines/number-input/CHANGELOG.md
index 6e952c0a63..23d27dbc68 100644
--- a/packages/machines/number-input/CHANGELOG.md
+++ b/packages/machines/number-input/CHANGELOG.md
@@ -1,5 +1,16 @@
 # @zag-js/number-input
 
+## 1.38.1
+
+### Patch Changes
+
+- Updated dependencies [[`2b4818c`](https://github.com/chakra-ui/zag/commit/2b4818c3b82ed1ca8ffd2cb44110a4a195ac68d6)]:
+  - @zag-js/core@1.38.1
+  - @zag-js/anatomy@1.38.1
+  - @zag-js/types@1.38.1
+  - @zag-js/utils@1.38.1
+  - @zag-js/dom-query@1.38.1
+
 ## 1.38.0
 
 ### Patch Changes
diff --git a/packages/machines/number-input/package.json b/packages/machines/number-input/package.json
index 3fb0c6bedb..4371219c00 100644
--- a/packages/machines/number-input/package.json
+++ b/packages/machines/number-input/package.json
@@ -1,6 +1,6 @@
 {
   "name": "@zag-js/number-input",
-  "version": "1.38.0",
+  "version": "1.38.1",
   "description": "Core logic for the number-input widget implemented as a state machine",
   "keywords": [
     "js",
diff --git a/packages/machines/pagination/CHANGELOG.md b/packages/machines/pagination/CHANGELOG.md
index 8952eae7bb..500867dfe3 100644
--- a/packages/machines/pagination/CHANGELOG.md
+++ b/packages/machines/pagination/CHANGELOG.md
@@ -1,5 +1,16 @@
 # @zag-js/pagination
 
+## 1.38.1
+
+### Patch Changes
+
+- Updated dependencies [[`2b4818c`](https://github.com/chakra-ui/zag/commit/2b4818c3b82ed1ca8ffd2cb44110a4a195ac68d6)]:
+  - @zag-js/core@1.38.1
+  - @zag-js/anatomy@1.38.1
+  - @zag-js/types@1.38.1
+  - @zag-js/utils@1.38.1
+  - @zag-js/dom-query@1.38.1
+
 ## 1.38.0
 
 ### Patch Changes
diff --git a/packages/machines/pagination/package.json b/packages/machines/pagination/package.json
index ab69ab85cf..9701cc811c 100644
--- a/packages/machines/pagination/package.json
+++ b/packages/machines/pagination/package.json
@@ -1,6 +1,6 @@
 {
   "name": "@zag-js/pagination",
-  "version": "1.38.0",
+  "version": "1.38.1",
   "description": "Core logic for the pagination widget implemented as a state machine",
   "keywords": [
     "js",
diff --git a/packages/machines/password-input/CHANGELOG.md b/packages/machines/password-input/CHANGELOG.md
index f63128e9a4..60895fe0a2 100644
--- a/packages/machines/password-input/CHANGELOG.md
+++ b/packages/machines/password-input/CHANGELOG.md
@@ -1,5 +1,16 @@
 # @zag-js/password-input
 
+## 1.38.1
+
+### Patch Changes
+
+- Updated dependencies [[`2b4818c`](https://github.com/chakra-ui/zag/commit/2b4818c3b82ed1ca8ffd2cb44110a4a195ac68d6)]:
+  - @zag-js/core@1.38.1
+  - @zag-js/anatomy@1.38.1
+  - @zag-js/types@1.38.1
+  - @zag-js/utils@1.38.1
+  - @zag-js/dom-query@1.38.1
+
 ## 1.38.0
 
 ### Patch Changes
diff --git a/packages/machines/password-input/package.json b/packages/machines/password-input/package.json
index cb74e08f35..42e8bd9b46 100644
--- a/packages/machines/password-input/package.json
+++ b/packages/machines/password-input/package.json
@@ -1,6 +1,6 @@
 {
   "name": "@zag-js/password-input",
-  "version": "1.38.0",
+  "version": "1.38.1",
   "description": "Core logic for the password-input widget implemented as a state machine",
   "keywords": [
     "js",
diff --git a/packages/machines/pin-input/CHANGELOG.md b/packages/machines/pin-input/CHANGELOG.md
index ec4bafbc34..39d2b99c8e 100644
--- a/packages/machines/pin-input/CHANGELOG.md
+++ b/packages/machines/pin-input/CHANGELOG.md
@@ -1,5 +1,16 @@
 # @zag-js/pin-input
 
+## 1.38.1
+
+### Patch Changes
+
+- Updated dependencies [[`2b4818c`](https://github.com/chakra-ui/zag/commit/2b4818c3b82ed1ca8ffd2cb44110a4a195ac68d6)]:
+  - @zag-js/core@1.38.1
+  - @zag-js/anatomy@1.38.1
+  - @zag-js/types@1.38.1
+  - @zag-js/utils@1.38.1
+  - @zag-js/dom-query@1.38.1
+
 ## 1.38.0
 
 ### Minor Changes
diff --git a/packages/machines/pin-input/package.json b/packages/machines/pin-input/package.json
index b627dffe93..c17d92b92b 100644
--- a/packages/machines/pin-input/package.json
+++ b/packages/machines/pin-input/package.json
@@ -1,6 +1,6 @@
 {
   "name": "@zag-js/pin-input",
-  "version": "1.38.0",
+  "version": "1.38.1",
   "description": "Core logic for the pin-input widget implemented as a state machine",
   "keywords": [
     "js",
diff --git a/packages/machines/popover/CHANGELOG.md b/packages/machines/popover/CHANGELOG.md
index 550b2ade9e..1ba1403a72 100644
--- a/packages/machines/popover/CHANGELOG.md
+++ b/packages/machines/popover/CHANGELOG.md
@@ -1,5 +1,22 @@
 # @zag-js/popover
 
+## 1.38.1
+
+### Patch Changes
+
+- Updated dependencies [[`2b4818c`](https://github.com/chakra-ui/zag/commit/2b4818c3b82ed1ca8ffd2cb44110a4a195ac68d6),
+  [`2b4818c`](https://github.com/chakra-ui/zag/commit/2b4818c3b82ed1ca8ffd2cb44110a4a195ac68d6)]:
+  - @zag-js/core@1.38.1
+  - @zag-js/popper@1.38.1
+  - @zag-js/anatomy@1.38.1
+  - @zag-js/types@1.38.1
+  - @zag-js/aria-hidden@1.38.1
+  - @zag-js/utils@1.38.1
+  - @zag-js/dismissable@1.38.1
+  - @zag-js/dom-query@1.38.1
+  - @zag-js/focus-trap@1.38.1
+  - @zag-js/remove-scroll@1.38.1
+
 ## 1.38.0
 
 ### Patch Changes
diff --git a/packages/machines/popover/package.json b/packages/machines/popover/package.json
index a5b496e201..5003479d43 100644
--- a/packages/machines/popover/package.json
+++ b/packages/machines/popover/package.json
@@ -1,6 +1,6 @@
 {
   "name": "@zag-js/popover",
-  "version": "1.38.0",
+  "version": "1.38.1",
   "description": "Core logic for the popover widget implemented as a state machine",
   "keywords": [
     "js",
diff --git a/packages/machines/presence/CHANGELOG.md b/packages/machines/presence/CHANGELOG.md
index 53e3229f89..3975a48345 100644
--- a/packages/machines/presence/CHANGELOG.md
+++ b/packages/machines/presence/CHANGELOG.md
@@ -1,5 +1,14 @@
 # @zag-js/presence
 
+## 1.38.1
+
+### Patch Changes
+
+- Updated dependencies [[`2b4818c`](https://github.com/chakra-ui/zag/commit/2b4818c3b82ed1ca8ffd2cb44110a4a195ac68d6)]:
+  - @zag-js/core@1.38.1
+  - @zag-js/types@1.38.1
+  - @zag-js/dom-query@1.38.1
+
 ## 1.38.0
 
 ### Patch Changes
diff --git a/packages/machines/presence/package.json b/packages/machines/presence/package.json
index 8bca25fa67..8bb9e55634 100644
--- a/packages/machines/presence/package.json
+++ b/packages/machines/presence/package.json
@@ -1,6 +1,6 @@
 {
   "name": "@zag-js/presence",
-  "version": "1.38.0",
+  "version": "1.38.1",
   "description": "Core logic for the presence widget implemented as a state machine",
   "keywords": [
     "js",
diff --git a/packages/machines/progress/CHANGELOG.md b/packages/machines/progress/CHANGELOG.md
index 5e1e7ff473..922ea69415 100644
--- a/packages/machines/progress/CHANGELOG.md
+++ b/packages/machines/progress/CHANGELOG.md
@@ -1,5 +1,16 @@
 # @zag-js/progress
 
+## 1.38.1
+
+### Patch Changes
+
+- Updated dependencies [[`2b4818c`](https://github.com/chakra-ui/zag/commit/2b4818c3b82ed1ca8ffd2cb44110a4a195ac68d6)]:
+  - @zag-js/core@1.38.1
+  - @zag-js/anatomy@1.38.1
+  - @zag-js/types@1.38.1
+  - @zag-js/utils@1.38.1
+  - @zag-js/dom-query@1.38.1
+
 ## 1.38.0
 
 ### Patch Changes
diff --git a/packages/machines/progress/package.json b/packages/machines/progress/package.json
index c35ae055ae..c4293e0242 100644
--- a/packages/machines/progress/package.json
+++ b/packages/machines/progress/package.json
@@ -1,6 +1,6 @@
 {
   "name": "@zag-js/progress",
-  "version": "1.38.0",
+  "version": "1.38.1",
   "description": "Core logic for the progress widget implemented as a state machine",
   "keywords": [
     "js",
diff --git a/packages/machines/qr-code/CHANGELOG.md b/packages/machines/qr-code/CHANGELOG.md
index f90bae9609..b4b841bc94 100644
--- a/packages/machines/qr-code/CHANGELOG.md
+++ b/packages/machines/qr-code/CHANGELOG.md
@@ -1,5 +1,16 @@
 # @zag-js/qr-code
 
+## 1.38.1
+
+### Patch Changes
+
+- Updated dependencies [[`2b4818c`](https://github.com/chakra-ui/zag/commit/2b4818c3b82ed1ca8ffd2cb44110a4a195ac68d6)]:
+  - @zag-js/core@1.38.1
+  - @zag-js/anatomy@1.38.1
+  - @zag-js/types@1.38.1
+  - @zag-js/utils@1.38.1
+  - @zag-js/dom-query@1.38.1
+
 ## 1.38.0
 
 ### Patch Changes
diff --git a/packages/machines/qr-code/package.json b/packages/machines/qr-code/package.json
index fac97fc841..fa7bf489c3 100644
--- a/packages/machines/qr-code/package.json
+++ b/packages/machines/qr-code/package.json
@@ -1,6 +1,6 @@
 {
   "name": "@zag-js/qr-code",
-  "version": "1.38.0",
+  "version": "1.38.1",
   "description": "Core logic for the qr-code widget implemented as a state machine",
   "keywords": [
     "js",
diff --git a/packages/machines/radio-group/CHANGELOG.md b/packages/machines/radio-group/CHANGELOG.md
index 31670fab4c..98d3388af4 100644
--- a/packages/machines/radio-group/CHANGELOG.md
+++ b/packages/machines/radio-group/CHANGELOG.md
@@ -1,5 +1,17 @@
 # @zag-js/radio-group
 
+## 1.38.1
+
+### Patch Changes
+
+- Updated dependencies [[`2b4818c`](https://github.com/chakra-ui/zag/commit/2b4818c3b82ed1ca8ffd2cb44110a4a195ac68d6)]:
+  - @zag-js/core@1.38.1
+  - @zag-js/anatomy@1.38.1
+  - @zag-js/types@1.38.1
+  - @zag-js/utils@1.38.1
+  - @zag-js/dom-query@1.38.1
+  - @zag-js/focus-visible@1.38.1
+
 ## 1.38.0
 
 ### Patch Changes
diff --git a/packages/machines/radio-group/package.json b/packages/machines/radio-group/package.json
index d86fa8babb..e26d7c30c1 100644
--- a/packages/machines/radio-group/package.json
+++ b/packages/machines/radio-group/package.json
@@ -1,6 +1,6 @@
 {
   "name": "@zag-js/radio-group",
-  "version": "1.38.0",
+  "version": "1.38.1",
   "description": "Core logic for the radio group widget implemented as a state machine",
   "keywords": [
     "js",
diff --git a/packages/machines/rating-group/CHANGELOG.md b/packages/machines/rating-group/CHANGELOG.md
index 3c6754a26d..62975d5d22 100644
--- a/packages/machines/rating-group/CHANGELOG.md
+++ b/packages/machines/rating-group/CHANGELOG.md
@@ -1,5 +1,16 @@
 # @zag-js/rating-group
 
+## 1.38.1
+
+### Patch Changes
+
+- Updated dependencies [[`2b4818c`](https://github.com/chakra-ui/zag/commit/2b4818c3b82ed1ca8ffd2cb44110a4a195ac68d6)]:
+  - @zag-js/core@1.38.1
+  - @zag-js/anatomy@1.38.1
+  - @zag-js/types@1.38.1
+  - @zag-js/utils@1.38.1
+  - @zag-js/dom-query@1.38.1
+
 ## 1.38.0
 
 ### Patch Changes
diff --git a/packages/machines/rating-group/package.json b/packages/machines/rating-group/package.json
index a96a74bb50..42310d117b 100644
--- a/packages/machines/rating-group/package.json
+++ b/packages/machines/rating-group/package.json
@@ -1,6 +1,6 @@
 {
   "name": "@zag-js/rating-group",
-  "version": "1.38.0",
+  "version": "1.38.1",
   "description": "Core logic for the rating-group widget implemented as a state machine",
   "keywords": [
     "js",
diff --git a/packages/machines/scroll-area/CHANGELOG.md b/packages/machines/scroll-area/CHANGELOG.md
index a5f589871a..8c119c64d4 100644
--- a/packages/machines/scroll-area/CHANGELOG.md
+++ b/packages/machines/scroll-area/CHANGELOG.md
@@ -1,5 +1,16 @@
 # @zag-js/scroll-area
 
+## 1.38.1
+
+### Patch Changes
+
+- Updated dependencies [[`2b4818c`](https://github.com/chakra-ui/zag/commit/2b4818c3b82ed1ca8ffd2cb44110a4a195ac68d6)]:
+  - @zag-js/core@1.38.1
+  - @zag-js/anatomy@1.38.1
+  - @zag-js/types@1.38.1
+  - @zag-js/utils@1.38.1
+  - @zag-js/dom-query@1.38.1
+
 ## 1.38.0
 
 ### Patch Changes
diff --git a/packages/machines/scroll-area/package.json b/packages/machines/scroll-area/package.json
index 79bb960e95..72cc4f9828 100644
--- a/packages/machines/scroll-area/package.json
+++ b/packages/machines/scroll-area/package.json
@@ -1,6 +1,6 @@
 {
   "name": "@zag-js/scroll-area",
-  "version": "1.38.0",
+  "version": "1.38.1",
   "description": "Core logic for the scroll-area widget implemented as a state machine",
   "keywords": [
     "js",
diff --git a/packages/machines/select/CHANGELOG.md b/packages/machines/select/CHANGELOG.md
index 124dd80f1c..e240995c28 100644
--- a/packages/machines/select/CHANGELOG.md
+++ b/packages/machines/select/CHANGELOG.md
@@ -1,5 +1,21 @@
 # @zag-js/select
 
+## 1.38.1
+
+### Patch Changes
+
+- Updated dependencies [[`2b4818c`](https://github.com/chakra-ui/zag/commit/2b4818c3b82ed1ca8ffd2cb44110a4a195ac68d6),
+  [`2b4818c`](https://github.com/chakra-ui/zag/commit/2b4818c3b82ed1ca8ffd2cb44110a4a195ac68d6)]:
+  - @zag-js/core@1.38.1
+  - @zag-js/popper@1.38.1
+  - @zag-js/anatomy@1.38.1
+  - @zag-js/types@1.38.1
+  - @zag-js/collection@1.38.1
+  - @zag-js/utils@1.38.1
+  - @zag-js/dismissable@1.38.1
+  - @zag-js/dom-query@1.38.1
+  - @zag-js/focus-visible@1.38.1
+
 ## 1.38.0
 
 ### Patch Changes
diff --git a/packages/machines/select/package.json b/packages/machines/select/package.json
index b8a17eb1f9..532c404796 100644
--- a/packages/machines/select/package.json
+++ b/packages/machines/select/package.json
@@ -1,6 +1,6 @@
 {
   "name": "@zag-js/select",
-  "version": "1.38.0",
+  "version": "1.38.1",
   "description": "Core logic for the select widget implemented as a state machine",
   "keywords": [
     "js",
diff --git a/packages/machines/signature-pad/CHANGELOG.md b/packages/machines/signature-pad/CHANGELOG.md
index 0efc37546f..bde4215a2b 100644
--- a/packages/machines/signature-pad/CHANGELOG.md
+++ b/packages/machines/signature-pad/CHANGELOG.md
@@ -1,5 +1,16 @@
 # @zag-js/signature-pad
 
+## 1.38.1
+
+### Patch Changes
+
+- Updated dependencies [[`2b4818c`](https://github.com/chakra-ui/zag/commit/2b4818c3b82ed1ca8ffd2cb44110a4a195ac68d6)]:
+  - @zag-js/core@1.38.1
+  - @zag-js/anatomy@1.38.1
+  - @zag-js/types@1.38.1
+  - @zag-js/utils@1.38.1
+  - @zag-js/dom-query@1.38.1
+
 ## 1.38.0
 
 ### Patch Changes
diff --git a/packages/machines/signature-pad/package.json b/packages/machines/signature-pad/package.json
index 77ad51a673..18d8273ec2 100644
--- a/packages/machines/signature-pad/package.json
+++ b/packages/machines/signature-pad/package.json
@@ -1,6 +1,6 @@
 {
   "name": "@zag-js/signature-pad",
-  "version": "1.38.0",
+  "version": "1.38.1",
   "description": "Core logic for the signature-pad widget implemented as a state machine",
   "keywords": [
     "js",
diff --git a/packages/machines/slider/CHANGELOG.md b/packages/machines/slider/CHANGELOG.md
index da62421fd3..7936d026db 100644
--- a/packages/machines/slider/CHANGELOG.md
+++ b/packages/machines/slider/CHANGELOG.md
@@ -1,5 +1,16 @@
 # @zag-js/slider
 
+## 1.38.1
+
+### Patch Changes
+
+- Updated dependencies [[`2b4818c`](https://github.com/chakra-ui/zag/commit/2b4818c3b82ed1ca8ffd2cb44110a4a195ac68d6)]:
+  - @zag-js/core@1.38.1
+  - @zag-js/anatomy@1.38.1
+  - @zag-js/types@1.38.1
+  - @zag-js/utils@1.38.1
+  - @zag-js/dom-query@1.38.1
+
 ## 1.38.0
 
 ### Patch Changes
diff --git a/packages/machines/slider/package.json b/packages/machines/slider/package.json
index 653de29915..1deec6b6e5 100644
--- a/packages/machines/slider/package.json
+++ b/packages/machines/slider/package.json
@@ -1,6 +1,6 @@
 {
   "name": "@zag-js/slider",
-  "version": "1.38.0",
+  "version": "1.38.1",
   "description": "Core logic for the slider widget implemented as a state machine",
   "keywords": [
     "js",
diff --git a/packages/machines/splitter/CHANGELOG.md b/packages/machines/splitter/CHANGELOG.md
index 16b60e341c..62ceeabd7e 100644
--- a/packages/machines/splitter/CHANGELOG.md
+++ b/packages/machines/splitter/CHANGELOG.md
@@ -1,5 +1,16 @@
 # @zag-js/splitter
 
+## 1.38.1
+
+### Patch Changes
+
+- Updated dependencies [[`2b4818c`](https://github.com/chakra-ui/zag/commit/2b4818c3b82ed1ca8ffd2cb44110a4a195ac68d6)]:
+  - @zag-js/core@1.38.1
+  - @zag-js/anatomy@1.38.1
+  - @zag-js/types@1.38.1
+  - @zag-js/utils@1.38.1
+  - @zag-js/dom-query@1.38.1
+
 ## 1.38.0
 
 ### Patch Changes
diff --git a/packages/machines/splitter/package.json b/packages/machines/splitter/package.json
index 7ad5e8fe92..eb60ed63cc 100644
--- a/packages/machines/splitter/package.json
+++ b/packages/machines/splitter/package.json
@@ -1,6 +1,6 @@
 {
   "name": "@zag-js/splitter",
-  "version": "1.38.0",
+  "version": "1.38.1",
   "description": "Core logic for the splitter widget implemented as a state machine",
   "keywords": [
     "js",
diff --git a/packages/machines/steps/CHANGELOG.md b/packages/machines/steps/CHANGELOG.md
index e2b6eb222e..63384d4707 100644
--- a/packages/machines/steps/CHANGELOG.md
+++ b/packages/machines/steps/CHANGELOG.md
@@ -1,5 +1,16 @@
 # @zag-js/steps
 
+## 1.38.1
+
+### Patch Changes
+
+- Updated dependencies [[`2b4818c`](https://github.com/chakra-ui/zag/commit/2b4818c3b82ed1ca8ffd2cb44110a4a195ac68d6)]:
+  - @zag-js/core@1.38.1
+  - @zag-js/anatomy@1.38.1
+  - @zag-js/types@1.38.1
+  - @zag-js/utils@1.38.1
+  - @zag-js/dom-query@1.38.1
+
 ## 1.38.0
 
 ### Patch Changes
diff --git a/packages/machines/steps/package.json b/packages/machines/steps/package.json
index 7097f4fb10..0718b101d4 100644
--- a/packages/machines/steps/package.json
+++ b/packages/machines/steps/package.json
@@ -1,6 +1,6 @@
 {
   "name": "@zag-js/steps",
-  "version": "1.38.0",
+  "version": "1.38.1",
   "description": "Core logic for the steps widget implemented as a state machine",
   "keywords": [
     "js",
diff --git a/packages/machines/switch/CHANGELOG.md b/packages/machines/switch/CHANGELOG.md
index bf29506c16..32eb084d80 100644
--- a/packages/machines/switch/CHANGELOG.md
+++ b/packages/machines/switch/CHANGELOG.md
@@ -1,5 +1,17 @@
 # @zag-js/switch
 
+## 1.38.1
+
+### Patch Changes
+
+- Updated dependencies [[`2b4818c`](https://github.com/chakra-ui/zag/commit/2b4818c3b82ed1ca8ffd2cb44110a4a195ac68d6)]:
+  - @zag-js/core@1.38.1
+  - @zag-js/anatomy@1.38.1
+  - @zag-js/types@1.38.1
+  - @zag-js/utils@1.38.1
+  - @zag-js/dom-query@1.38.1
+  - @zag-js/focus-visible@1.38.1
+
 ## 1.38.0
 
 ### Patch Changes
diff --git a/packages/machines/switch/package.json b/packages/machines/switch/package.json
index e33b028846..43e9392238 100644
--- a/packages/machines/switch/package.json
+++ b/packages/machines/switch/package.json
@@ -1,6 +1,6 @@
 {
   "name": "@zag-js/switch",
-  "version": "1.38.0",
+  "version": "1.38.1",
   "description": "Core logic for the switch widget implemented as a state machine",
   "keywords": [
     "js",
diff --git a/packages/machines/tabs/CHANGELOG.md b/packages/machines/tabs/CHANGELOG.md
index 710c8cb509..262ff6959f 100644
--- a/packages/machines/tabs/CHANGELOG.md
+++ b/packages/machines/tabs/CHANGELOG.md
@@ -1,5 +1,16 @@
 # @zag-js/tabs
 
+## 1.38.1
+
+### Patch Changes
+
+- Updated dependencies [[`2b4818c`](https://github.com/chakra-ui/zag/commit/2b4818c3b82ed1ca8ffd2cb44110a4a195ac68d6)]:
+  - @zag-js/core@1.38.1
+  - @zag-js/anatomy@1.38.1
+  - @zag-js/types@1.38.1
+  - @zag-js/utils@1.38.1
+  - @zag-js/dom-query@1.38.1
+
 ## 1.38.0
 
 ### Patch Changes
diff --git a/packages/machines/tabs/package.json b/packages/machines/tabs/package.json
index 322cf07f23..de411782f8 100644
--- a/packages/machines/tabs/package.json
+++ b/packages/machines/tabs/package.json
@@ -1,6 +1,6 @@
 {
   "name": "@zag-js/tabs",
-  "version": "1.38.0",
+  "version": "1.38.1",
   "description": "Core logic for the tabs widget implemented as a state machine",
   "keywords": [
     "js",
diff --git a/packages/machines/tags-input/CHANGELOG.md b/packages/machines/tags-input/CHANGELOG.md
index b3565c0319..867a9311ba 100644
--- a/packages/machines/tags-input/CHANGELOG.md
+++ b/packages/machines/tags-input/CHANGELOG.md
@@ -1,5 +1,19 @@
 # @zag-js/tags-input
 
+## 1.38.1
+
+### Patch Changes
+
+- Updated dependencies [[`2b4818c`](https://github.com/chakra-ui/zag/commit/2b4818c3b82ed1ca8ffd2cb44110a4a195ac68d6)]:
+  - @zag-js/core@1.38.1
+  - @zag-js/anatomy@1.38.1
+  - @zag-js/types@1.38.1
+  - @zag-js/auto-resize@1.38.1
+  - @zag-js/utils@1.38.1
+  - @zag-js/dom-query@1.38.1
+  - @zag-js/interact-outside@1.38.1
+  - @zag-js/live-region@1.38.1
+
 ## 1.38.0
 
 ### Patch Changes
diff --git a/packages/machines/tags-input/package.json b/packages/machines/tags-input/package.json
index 990d628c9a..3f03c92887 100644
--- a/packages/machines/tags-input/package.json
+++ b/packages/machines/tags-input/package.json
@@ -1,6 +1,6 @@
 {
   "name": "@zag-js/tags-input",
-  "version": "1.38.0",
+  "version": "1.38.1",
   "description": "Core logic for the tags-input widget implemented as a state machine",
   "keywords": [
     "js",
diff --git a/packages/machines/timer/CHANGELOG.md b/packages/machines/timer/CHANGELOG.md
index ea18daa8c2..f19d13d2fe 100644
--- a/packages/machines/timer/CHANGELOG.md
+++ b/packages/machines/timer/CHANGELOG.md
@@ -1,5 +1,16 @@
 # @zag-js/checkbox
 
+## 1.38.1
+
+### Patch Changes
+
+- Updated dependencies [[`2b4818c`](https://github.com/chakra-ui/zag/commit/2b4818c3b82ed1ca8ffd2cb44110a4a195ac68d6)]:
+  - @zag-js/core@1.38.1
+  - @zag-js/anatomy@1.38.1
+  - @zag-js/types@1.38.1
+  - @zag-js/utils@1.38.1
+  - @zag-js/dom-query@1.38.1
+
 ## 1.38.0
 
 ### Patch Changes
diff --git a/packages/machines/timer/package.json b/packages/machines/timer/package.json
index 88fa544b62..f3eec34e64 100644
--- a/packages/machines/timer/package.json
+++ b/packages/machines/timer/package.json
@@ -1,6 +1,6 @@
 {
   "name": "@zag-js/timer",
-  "version": "1.38.0",
+  "version": "1.38.1",
   "description": "Core logic for the timer widget implemented as a state machine",
   "keywords": [
     "js",
diff --git a/packages/machines/toast/CHANGELOG.md b/packages/machines/toast/CHANGELOG.md
index 320c53668e..4e58be60d3 100644
--- a/packages/machines/toast/CHANGELOG.md
+++ b/packages/machines/toast/CHANGELOG.md
@@ -1,5 +1,23 @@
 # @zag-js/toast
 
+## 1.38.1
+
+### Patch Changes
+
+- [`2981232`](https://github.com/chakra-ui/zag/commit/29812320badb8066208b2ef5337eec80f71e96b7) Thanks
+  [@segunadebayo](https://github.com/segunadebayo)! - Restore `role="region"` on the toast group element.
+  - The role was previously removed to reduce screen reader landmark noise, but this caused an axe
+    `aria-prohibited-attr` violation since `aria-label` is not permitted on a `div` without a valid role.
+  - The region landmark also enables keyboard navigation to the toast area (e.g. via F6).
+
+- Updated dependencies [[`2b4818c`](https://github.com/chakra-ui/zag/commit/2b4818c3b82ed1ca8ffd2cb44110a4a195ac68d6)]:
+  - @zag-js/core@1.38.1
+  - @zag-js/anatomy@1.38.1
+  - @zag-js/types@1.38.1
+  - @zag-js/utils@1.38.1
+  - @zag-js/dismissable@1.38.1
+  - @zag-js/dom-query@1.38.1
+
 ## 1.38.0
 
 ### Patch Changes
diff --git a/packages/machines/toast/package.json b/packages/machines/toast/package.json
index 34e8ca42f4..382220a948 100644
--- a/packages/machines/toast/package.json
+++ b/packages/machines/toast/package.json
@@ -1,6 +1,6 @@
 {
   "name": "@zag-js/toast",
-  "version": "1.38.0",
+  "version": "1.38.1",
   "description": "Core logic for the toast widget implemented as a state machine",
   "keywords": [
     "js",
diff --git a/packages/machines/toc/CHANGELOG.md b/packages/machines/toc/CHANGELOG.md
index 7e98296562..4284687548 100644
--- a/packages/machines/toc/CHANGELOG.md
+++ b/packages/machines/toc/CHANGELOG.md
@@ -1,5 +1,16 @@
 # @zag-js/toc
 
+## 1.38.1
+
+### Patch Changes
+
+- Updated dependencies [[`2b4818c`](https://github.com/chakra-ui/zag/commit/2b4818c3b82ed1ca8ffd2cb44110a4a195ac68d6)]:
+  - @zag-js/core@1.38.1
+  - @zag-js/anatomy@1.38.1
+  - @zag-js/types@1.38.1
+  - @zag-js/utils@1.38.1
+  - @zag-js/dom-query@1.38.1
+
 ## 1.38.0
 
 ### Patch Changes
diff --git a/packages/machines/toc/package.json b/packages/machines/toc/package.json
index bb9623d09e..c0efa484f3 100644
--- a/packages/machines/toc/package.json
+++ b/packages/machines/toc/package.json
@@ -1,6 +1,6 @@
 {
   "name": "@zag-js/toc",
-  "version": "1.38.0",
+  "version": "1.38.1",
   "description": "Core logic for the table of contents widget implemented as a state machine",
   "keywords": [
     "js",
diff --git a/packages/machines/toggle-group/CHANGELOG.md b/packages/machines/toggle-group/CHANGELOG.md
index 3aa8db48cc..2172079d2b 100644
--- a/packages/machines/toggle-group/CHANGELOG.md
+++ b/packages/machines/toggle-group/CHANGELOG.md
@@ -1,5 +1,16 @@
 # @zag-js/toggle-group
 
+## 1.38.1
+
+### Patch Changes
+
+- Updated dependencies [[`2b4818c`](https://github.com/chakra-ui/zag/commit/2b4818c3b82ed1ca8ffd2cb44110a4a195ac68d6)]:
+  - @zag-js/core@1.38.1
+  - @zag-js/anatomy@1.38.1
+  - @zag-js/types@1.38.1
+  - @zag-js/utils@1.38.1
+  - @zag-js/dom-query@1.38.1
+
 ## 1.38.0
 
 ### Patch Changes
diff --git a/packages/machines/toggle-group/package.json b/packages/machines/toggle-group/package.json
index d66b3c3d9d..fa27a6c545 100644
--- a/packages/machines/toggle-group/package.json
+++ b/packages/machines/toggle-group/package.json
@@ -1,6 +1,6 @@
 {
   "name": "@zag-js/toggle-group",
-  "version": "1.38.0",
+  "version": "1.38.1",
   "description": "Core logic for the toggle widget implemented as a state machine",
   "keywords": [
     "js",
diff --git a/packages/machines/toggle/CHANGELOG.md b/packages/machines/toggle/CHANGELOG.md
index 7bfbf1e6fa..08fd0e60dc 100644
--- a/packages/machines/toggle/CHANGELOG.md
+++ b/packages/machines/toggle/CHANGELOG.md
@@ -1,5 +1,16 @@
 # @zag-js/toggle
 
+## 1.38.1
+
+### Patch Changes
+
+- Updated dependencies [[`2b4818c`](https://github.com/chakra-ui/zag/commit/2b4818c3b82ed1ca8ffd2cb44110a4a195ac68d6)]:
+  - @zag-js/core@1.38.1
+  - @zag-js/anatomy@1.38.1
+  - @zag-js/types@1.38.1
+  - @zag-js/utils@1.38.1
+  - @zag-js/dom-query@1.38.1
+
 ## 1.38.0
 
 ### Patch Changes
diff --git a/packages/machines/toggle/package.json b/packages/machines/toggle/package.json
index abe74a9776..5e7dc6205a 100644
--- a/packages/machines/toggle/package.json
+++ b/packages/machines/toggle/package.json
@@ -1,6 +1,6 @@
 {
   "name": "@zag-js/toggle",
-  "version": "1.38.0",
+  "version": "1.38.1",
   "description": "Core logic for the toggle widget implemented as a state machine",
   "keywords": [
     "js",
diff --git a/packages/machines/tooltip/CHANGELOG.md b/packages/machines/tooltip/CHANGELOG.md
index 04a6c420db..baa51281df 100644
--- a/packages/machines/tooltip/CHANGELOG.md
+++ b/packages/machines/tooltip/CHANGELOG.md
@@ -1,5 +1,19 @@
 # @zag-js/tooltip
 
+## 1.38.1
+
+### Patch Changes
+
+- Updated dependencies [[`2b4818c`](https://github.com/chakra-ui/zag/commit/2b4818c3b82ed1ca8ffd2cb44110a4a195ac68d6),
+  [`2b4818c`](https://github.com/chakra-ui/zag/commit/2b4818c3b82ed1ca8ffd2cb44110a4a195ac68d6)]:
+  - @zag-js/core@1.38.1
+  - @zag-js/popper@1.38.1
+  - @zag-js/anatomy@1.38.1
+  - @zag-js/types@1.38.1
+  - @zag-js/utils@1.38.1
+  - @zag-js/dom-query@1.38.1
+  - @zag-js/focus-visible@1.38.1
+
 ## 1.38.0
 
 ### Patch Changes
diff --git a/packages/machines/tooltip/package.json b/packages/machines/tooltip/package.json
index bbe138d652..5a1396f7c6 100644
--- a/packages/machines/tooltip/package.json
+++ b/packages/machines/tooltip/package.json
@@ -1,6 +1,6 @@
 {
   "name": "@zag-js/tooltip",
-  "version": "1.38.0",
+  "version": "1.38.1",
   "description": "Core logic for the tooltip widget implemented as a state machine",
   "keywords": [
     "js",
diff --git a/packages/machines/tour/CHANGELOG.md b/packages/machines/tour/CHANGELOG.md
index be207a1e57..741816e14a 100644
--- a/packages/machines/tour/CHANGELOG.md
+++ b/packages/machines/tour/CHANGELOG.md
@@ -1,5 +1,26 @@
 # @zag-js/tour
 
+## 1.38.1
+
+### Patch Changes
+
+- [`2b4818c`](https://github.com/chakra-ui/zag/commit/2b4818c3b82ed1ca8ffd2cb44110a4a195ac68d6) Thanks
+  [@segunadebayo](https://github.com/segunadebayo)! - - Fix step navigation events (`next`, `prev`, `setStep`) firing
+  when the tour is inactive, bypassing the `start` flow
+  - Fix popper styles not being cleaned up when transitioning from a tooltip step to a dialog/non-tooltip step
+  - Rename `cleanupStyles` option to `restoreStyles` in the popper package
+- Updated dependencies [[`2b4818c`](https://github.com/chakra-ui/zag/commit/2b4818c3b82ed1ca8ffd2cb44110a4a195ac68d6),
+  [`2b4818c`](https://github.com/chakra-ui/zag/commit/2b4818c3b82ed1ca8ffd2cb44110a4a195ac68d6)]:
+  - @zag-js/core@1.38.1
+  - @zag-js/popper@1.38.1
+  - @zag-js/anatomy@1.38.1
+  - @zag-js/types@1.38.1
+  - @zag-js/utils@1.38.1
+  - @zag-js/dismissable@1.38.1
+  - @zag-js/dom-query@1.38.1
+  - @zag-js/focus-trap@1.38.1
+  - @zag-js/interact-outside@1.38.1
+
 ## 1.38.0
 
 ### Patch Changes
diff --git a/packages/machines/tour/package.json b/packages/machines/tour/package.json
index 8b0572cdf1..b4abfa4a58 100644
--- a/packages/machines/tour/package.json
+++ b/packages/machines/tour/package.json
@@ -1,6 +1,6 @@
 {
   "name": "@zag-js/tour",
-  "version": "1.38.0",
+  "version": "1.38.1",
   "description": "Core logic for the tour widget implemented as a state machine",
   "keywords": [
     "js",
diff --git a/packages/machines/tour/src/tour.connect.ts b/packages/machines/tour/src/tour.connect.ts
index eab48bafc8..5025681a4c 100644
--- a/packages/machines/tour/src/tour.connect.ts
+++ b/packages/machines/tour/src/tour.connect.ts
@@ -2,11 +2,12 @@ import { mergeProps } from "@zag-js/core"
 import { dataAttr } from "@zag-js/dom-query"
 import { getPlacementStyles } from "@zag-js/popper"
 import type { NormalizeProps, PropTypes } from "@zag-js/types"
+import { toPx } from "@zag-js/utils"
 import { parts } from "./tour.anatomy"
 import * as dom from "./tour.dom"
 import type { StepActionMap, TourApi, TourService } from "./tour.types"
 import { getClipPath } from "./utils/clip-path"
-import { getEffectiveStepIndex, getEffectiveSteps, isTooltipPlacement, isTooltipStep } from "./utils/step"
+import { getEffectiveStepIndex, getEffectiveSteps, isDialogStep, isTooltipPlacement, isTooltipStep } from "./utils/step"
 
 export function connect<T extends PropTypes>(service: TourService, normalize: NormalizeProps<T>): TourApi<T> {
   const { state, context, computed, send, prop, scope } = service
@@ -121,9 +122,9 @@ export function connect<T extends PropTypes>(service: TourService, normalize: No
         style: {
           "--tour-layer": 0,
           clipPath: isTooltipStep(step) ? `path("${clipPath}")` : undefined,
-          position: "absolute",
+          position: isDialogStep(step) ? "fixed" : "absolute",
           inset: "0",
-          willChange: "clip-path",
+          willChange: isTooltipStep(step) ? "clip-path" : undefined,
         },
       })
     },
@@ -135,11 +136,11 @@ export function connect<T extends PropTypes>(service: TourService, normalize: No
         style: {
           "--tour-layer": 1,
           position: "absolute",
-          width: `${targetRect.width}px`,
-          height: `${targetRect.height}px`,
-          left: `${targetRect.x}px`,
-          top: `${targetRect.y}px`,
-          borderRadius: `${prop("spotlightRadius")}px`,
+          width: toPx(targetRect.width),
+          height: toPx(targetRect.height),
+          left: toPx(targetRect.x),
+          top: toPx(targetRect.y),
+          borderRadius: toPx(prop("spotlightRadius")),
           pointerEvents: "none",
         },
       })
diff --git a/packages/machines/tour/src/tour.machine.ts b/packages/machines/tour/src/tour.machine.ts
index b8ddae82a0..f2ca1d9235 100644
--- a/packages/machines/tour/src/tour.machine.ts
+++ b/packages/machines/tour/src/tour.machine.ts
@@ -94,10 +94,20 @@ export const machine = createMachine<TourSchema>({
     },
   },
 
-  watch({ track, context, action }) {
+  // Watch for external stepId changes (via sync: true bindable).
+  // Internal changes set _internalChange flag to skip this.
+  watch({ track, context, refs, send }) {
     track([() => context.get("stepId")], () => {
+      if (refs.get("_internalChange")) {
+        refs.set("_internalChange", false)
+        return
+      }
+      // External change: resolve target and route
+      const step = findStep(context.get("steps"), context.get("stepId"))
+      context.set("resolvedTarget", step?.target?.() ?? null)
+      syncTargetAttrsFromContext({ context, refs })
       queueMicrotask(() => {
-        action(["setResolvedTarget", "raiseStepChange", "syncTargetAttrs"])
+        send({ type: "STEP.CHANGED" })
       })
     })
   },
@@ -110,52 +120,57 @@ export const machine = createMachine<TourSchema>({
     "STEPS.SET": {
       actions: ["setSteps", "validateSteps"],
     },
-    "STEP.SET": {
-      actions: ["setStep"],
-    },
-    "STEP.NEXT": {
-      actions: ["setNextStep"],
-    },
-    "STEP.PREV": {
-      actions: ["setPrevStep"],
-    },
+    // External step change (from watch): cleans up previous effect
     "STEP.CHANGED": [
       {
         guard: and("isValidStep", "hasResolvedTarget"),
         target: "running.scrolling",
+        reenter: true,
         actions: ["cleanupStepEffect"],
       },
       {
         guard: and("isValidStep", "hasTarget"),
         target: "running.resolving",
+        reenter: true,
         actions: ["cleanupStepEffect"],
       },
       {
         guard: and("isValidStep", "isWaitingStep"),
         target: "running.waiting",
+        reenter: true,
         actions: ["cleanupStepEffect"],
       },
       {
         guard: "isValidStep",
         target: "running.active",
+        reenter: true,
         actions: ["cleanupStepEffect"],
       },
     ],
-    DISMISS: [
+    // Internal step change (from performStepTransition/show): no effect cleanup
+    // because performStepTransition already cleaned up the previous effect
+    "STEP.ROUTE": [
+      {
+        guard: and("isValidStep", "hasResolvedTarget"),
+        target: "running.scrolling",
+        reenter: true,
+      },
       {
-        guard: "isLastStep",
-        target: "tourInactive",
-        actions: ["cleanupAll", "invokeOnDismiss", "invokeOnComplete", "clearStep"],
+        guard: and("isValidStep", "hasTarget"),
+        target: "running.resolving",
+        reenter: true,
       },
       {
-        target: "tourInactive",
-        actions: ["cleanupAll", "invokeOnDismiss", "clearStep"],
+        guard: and("isValidStep", "isWaitingStep"),
+        target: "running.waiting",
+        reenter: true,
+      },
+      {
+        guard: "isValidStep",
+        target: "running.active",
+        reenter: true,
       },
     ],
-    SKIP: {
-      target: "tourInactive",
-      actions: ["cleanupAll", "invokeOnSkip", "clearStep"],
-    },
   },
 
   states: {
@@ -170,6 +185,35 @@ export const machine = createMachine<TourSchema>({
     },
 
     running: {
+      initial: "resolving",
+
+      on: {
+        "STEP.SET": {
+          actions: ["setStep"],
+        },
+        "STEP.NEXT": {
+          actions: ["setNextStep"],
+        },
+        "STEP.PREV": {
+          actions: ["setPrevStep"],
+        },
+        DISMISS: [
+          {
+            guard: "isLastStep",
+            target: "tourInactive",
+            actions: ["cleanupAll", "invokeOnDismiss", "invokeOnComplete", "clearStep"],
+          },
+          {
+            target: "tourInactive",
+            actions: ["cleanupAll", "invokeOnDismiss", "clearStep"],
+          },
+        ],
+        SKIP: {
+          target: "tourInactive",
+          actions: ["cleanupAll", "invokeOnSkip", "clearStep"],
+        },
+      },
+
       states: {
         resolving: {
           tags: ["closed"],
@@ -243,33 +287,37 @@ export const machine = createMachine<TourSchema>({
       },
       setStep(params) {
         const { event } = params
-        const step = event.value
-        if (step == null) return
-
-        const manager = new StepManager(params)
-        manager.transitionToStep(step)
+        if (event.value == null) return
+        const steps = params.context.get("steps")
+        const idx = isString(event.value) ? findStepIndex(steps, event.value) : event.value
+        performStepTransition(params, idx)
       },
-      clearStep(params) {
-        const manager = new StepManager(params)
-        manager.clear()
+      clearStep({ context, refs }) {
+        refs.get("_targetCleanup")?.()
+        refs.set("_targetCleanup", undefined)
+
+        context.set("targetRect", { width: 0, height: 0, x: 0, y: 0 })
+        context.set("resolvedTarget", null)
+
+        refs.set("_internalChange", true)
+        context.set("stepId", null)
       },
       setInitialStep(params) {
         const { context, event } = params
         const steps = context.get("steps")
         if (steps.length === 0) return
-
-        const manager = new StepManager(params)
-        manager.transitionToStep(event.value ?? 0)
+        const idx = isString(event.value) ? findStepIndex(steps, event.value) : (event.value ?? 0)
+        performStepTransition(params, idx)
       },
       setNextStep(params) {
-        const { computed } = params
-        const manager = new StepManager(params)
-        manager.next(computed("stepIndex"))
+        const steps = params.context.get("steps")
+        const idx = nextIndex(steps, params.computed("stepIndex"))
+        performStepTransition(params, idx)
       },
       setPrevStep(params) {
-        const { computed } = params
-        const manager = new StepManager(params)
-        manager.prev(computed("stepIndex"))
+        const steps = params.context.get("steps")
+        const idx = prevIndex(steps, params.computed("stepIndex"))
+        performStepTransition(params, idx)
       },
       invokeOnStart({ prop, context, computed }) {
         prop("onStatusChange")?.({
@@ -306,29 +354,23 @@ export const machine = createMachine<TourSchema>({
           stepIndex: computed("stepIndex"),
         })
       },
-      raiseStepChange({ send }) {
-        send({ type: "STEP.CHANGED" })
-      },
       setResolvedTarget({ context, event, computed }) {
         const node = event.node ?? computed("step")?.target?.()
         context.set("resolvedTarget", node ?? null)
       },
-      syncTargetAttrs(params) {
-        const { context } = params
-        const targetEl = context.get("resolvedTarget")
-        const manager = new StepManager(params)
-        manager.syncTarget(targetEl)
-      },
-      cleanupAll(params) {
-        const manager = new StepManager(params)
-        manager.cleanupAll()
+      cleanupAll({ refs }) {
+        refs.get("_targetCleanup")?.()
+        refs.set("_targetCleanup", undefined)
+        refs.set("_prevTarget", undefined)
+
+        refs.get("_effectCleanup")?.()
+        refs.set("_effectCleanup", undefined)
       },
-      cleanupStepEffect(params) {
-        const manager = new StepManager(params)
-        manager.cleanupStepEffect()
+      cleanupStepEffect({ refs }) {
+        refs.get("_effectCleanup")?.()
+        refs.set("_effectCleanup", undefined)
       },
       validateSteps({ context }) {
-        // ensure all steps have unique ids
         const ids = new Set()
 
         context.get("steps").forEach((step) => {
@@ -473,7 +515,6 @@ export const machine = createMachine<TourSchema>({
         if (step == null) return
         const contentEl = () => dom.getContentEl(scope)
         const targetEl = () => context.get("resolvedTarget")
-        // Include both content and target in focus trap so users can interact with the spotlight target
         return trapFocus([contentEl, targetEl], {
           escapeDeactivates: false,
           allowOutsideClick: true,
@@ -504,6 +545,7 @@ export const machine = createMachine<TourSchema>({
           strategy: "absolute",
           gutter: 10,
           offset: step.offset,
+          restoreStyles: true,
           getAnchorRect(el) {
             if (!isHTMLElement(el)) return null
             const rect = el.getBoundingClientRect()
@@ -521,228 +563,135 @@ export const machine = createMachine<TourSchema>({
 })
 
 // ============================================================================
-// Step Manager
+// Step transition helpers
 // ============================================================================
 
 /**
- * Manages step transitions, cleanup, and effect execution for the tour machine.
- * Encapsulates all step-related logic in a single cohesive unit.
+ * Shared logic for syncing target element attributes.
+ * Used by both actions and the watch callback.
  */
-class StepManager {
-  constructor(private params: Params<TourSchema>) {}
-
-  /**
-   * Transition to a step by id or index
-   */
-  transitionToStep(step: string | number) {
-    const steps = this.params.context.get("steps")
-    const idx = isString(step) ? findStepIndex(steps, step) : step
-    this.transitionTo(idx)
+function syncTargetAttrsFromContext(params: {
+  context: Params<TourSchema>["context"]
+  refs: Params<TourSchema>["refs"]
+  prop?: Params<TourSchema>["prop"]
+}) {
+  const { context, refs, prop } = params
+  const targetEl = context.get("resolvedTarget")
+  const prevTarget = refs.get("_prevTarget")
+
+  if (targetEl !== prevTarget) {
+    refs.get("_targetCleanup")?.()
+    refs.set("_targetCleanup", undefined)
   }
 
-  /**
-   * Transition to the next step from the given index
-   */
-  next(currentIndex: number) {
-    const steps = this.params.context.get("steps")
-    const idx = nextIndex(steps, currentIndex)
-    this.transitionTo(idx)
+  if (!targetEl) {
+    refs.set("_prevTarget", null)
+    return
   }
 
-  /**
-   * Transition to the previous step from the given index
-   */
-  prev(currentIndex: number) {
-    const steps = this.params.context.get("steps")
-    const idx = prevIndex(steps, currentIndex)
-    this.transitionTo(idx)
-  }
+  if (targetEl === prevTarget) return
 
-  /**
-   * Clear the current step and reset tour state
-   */
-  clear() {
-    const { context } = this.params
-    context.set("targetRect", { width: 0, height: 0, x: 0, y: 0 })
-    context.set("resolvedTarget", null)
-    this.transitionTo(-1)
-  }
+  if (prop?.("preventInteraction")) targetEl.inert = true
+  targetEl.setAttribute("data-tour-highlighted", "")
 
-  /**
-   * Cleanup all resources including effects, target attributes, and resolved target.
-   * Use when completely tearing down the tour or transitioning between steps.
-   */
-  cleanupAll() {
-    const { refs } = this.params
+  refs.set("_targetCleanup", () => {
+    if (prop?.("preventInteraction")) targetEl.inert = false
+    targetEl.removeAttribute("data-tour-highlighted")
+  })
+  refs.set("_prevTarget", targetEl)
+}
 
-    refs.get("_targetCleanup")?.()
-    refs.set("_targetCleanup", undefined)
-    refs.set("_prevTarget", undefined)
+function performStepTransition(params: Params<TourSchema>, idx: number) {
+  const { context, refs, send } = params
+  const steps = context.get("steps")
+  const step = steps[idx]
 
-    refs.get("_effectCleanup")?.()
-    refs.set("_effectCleanup", undefined)
+  if (!step) {
+    refs.set("_internalChange", true)
+    context.set("stepId", null)
+    return
   }
 
-  /**
-   * Cleanup only the step effect cleanup function.
-   * Skips cleanup if an effect is currently running.
-   */
-  cleanupStepEffect() {
-    const { refs } = this.params
-
-    // Don't cleanup if we're currently running an effect
-    if (refs.get("_runningEffect")) {
-      return
-    }
-
-    refs.get("_effectCleanup")?.()
-    refs.set("_effectCleanup", undefined)
+  if (isEqual(context.get("stepId"), step.id)) {
+    return
   }
 
-  /**
-   * Sync target element attributes (inert, data-tour-highlighted).
-   * Handles cleanup of previous target and applies attributes to new target.
-   */
-  syncTarget(targetEl: HTMLElement | null) {
-    const { refs, prop } = this.params
-    const prevTarget = refs.get("_prevTarget")
-
-    // Only cleanup if target has changed
-    if (targetEl !== prevTarget) {
-      refs.get("_targetCleanup")?.()
-      refs.set("_targetCleanup", undefined)
-    }
-
-    if (!targetEl) {
-      refs.set("_prevTarget", null)
-      return
-    }
-
-    // Skip if same target (attributes already applied)
-    if (targetEl === prevTarget) {
-      return
-    }
+  // Cleanup previous step effects and target attributes
+  refs.get("_effectCleanup")?.()
+  refs.set("_effectCleanup", undefined)
 
-    // Apply attributes to new target
-    if (prop("preventInteraction")) targetEl.inert = true
-    targetEl.setAttribute("data-tour-highlighted", "")
+  refs.get("_targetCleanup")?.()
+  refs.set("_targetCleanup", undefined)
 
-    // Store cleanup and current target
-    refs.set("_targetCleanup", () => {
-      if (prop("preventInteraction")) targetEl.inert = false
-      targetEl.removeAttribute("data-tour-highlighted")
-    })
-    refs.set("_prevTarget", targetEl)
+  if (step.effect) {
+    executeStepEffect(params, step, idx)
+    return
   }
 
-  /**
-   * Transition to a step by index
-   */
-  transitionTo(idx: number) {
-    const { context, refs } = this.params
-    const steps = context.get("steps")
-    const step = steps[idx]
+  // Resolve target, set context, sync attrs, then route via STEP.ROUTE
+  const resolvedTarget = step.target?.() ?? null
+  context.set("resolvedTarget", resolvedTarget)
+  refs.set("_internalChange", true)
+  context.set("stepId", step.id)
+  syncTargetAttrsFromContext(params)
+  send({ type: "STEP.ROUTE" })
+}
 
-    if (!step) {
+function createEffectUtilities(params: Params<TourSchema>, step: StepDetails, idx: number): StepEffectArgs {
+  const { context, computed, refs, send, prop } = params
+  const steps = context.get("steps")
+
+  return {
+    show: () => {
+      // Resolve target and route via STEP.ROUTE (no effect cleanup)
+      const resolvedTarget = step.target?.() ?? null
+      context.set("resolvedTarget", resolvedTarget)
+      refs.set("_internalChange", true)
+      context.set("stepId", step.id)
+      syncTargetAttrsFromContext(params)
+      send({ type: "STEP.ROUTE" })
+    },
+    update: (data) => {
+      context.set("steps", (prev) => prev.map((s, i) => (i === idx ? { ...s, ...data } : s)))
+    },
+    next: () => {
+      const nextIdx = nextIndex(steps, computed("stepIndex"))
+      performStepTransition(params, nextIdx)
+    },
+    goto: (id: string) => {
+      const targetIdx = findStepIndex(steps, id)
+      if (targetIdx === -1) {
+        warn(`[zag-js/tour] Step with id "${id}" not found`)
+        return
+      }
+      performStepTransition(params, targetIdx)
+    },
+    dismiss: () => {
+      refs.set("_internalChange", true)
       context.set("stepId", null)
-      return
-    }
-
-    if (isEqual(context.get("stepId"), step.id)) {
-      // Clear flag if somehow left set (defensive programming)
-      refs.set("_runningEffect", false)
-      return
-    }
-
-    this.cleanup()
-
-    const utilities = this.createUtilities(step, idx)
-
-    if (step.effect) {
-      this.executeEffect(step, utilities)
-    } else {
-      utilities.show()
-    }
+      prop("onStatusChange")?.({ status: "dismissed", stepId: null, stepIndex: -1 })
+    },
+    target: step.target,
   }
+}
 
-  /**
-   * Clean up previous step effects and target attributes
-   */
-  private cleanup() {
-    const { refs } = this.params
+function executeStepEffect(params: Params<TourSchema>, step: StepDetails, idx: number) {
+  const { refs } = params
 
-    refs.get("_effectCleanup")?.()
-    refs.set("_effectCleanup", undefined)
-    refs.get("_targetCleanup")?.()
-    refs.set("_targetCleanup", undefined)
-  }
+  const utilities = createEffectUtilities(params, step, idx)
 
-  /**
-   * Create utility functions for step effects
-   */
-  private createUtilities(step: StepDetails, idx: number): StepEffectArgs {
-    const { context, computed, prop } = this.params
-    const steps = context.get("steps")
+  let cleanup: StepEffectCleanup | undefined
 
-    return {
-      show: () => {
-        context.set("stepId", step.id)
-      },
-      update: (data) => {
-        context.set("steps", (prev) => prev.map((s, i) => (i === idx ? { ...s, ...data } : s)))
-      },
-      next: () => {
-        const nextIdx = nextIndex(steps, computed("stepIndex"))
-        this.transitionTo(nextIdx)
-      },
-      goto: (id: string) => {
-        const targetIdx = findStepIndex(steps, id)
-        if (targetIdx === -1) {
-          warn(`[zag-js/tour] Step with id "${id}" not found`)
-          return
-        }
-        this.transitionTo(targetIdx)
-      },
-      dismiss: () => {
-        context.set("stepId", null)
-        prop("onStatusChange")?.({ status: "dismissed", stepId: null, stepIndex: -1 })
-      },
-      target: step.target,
-    }
+  try {
+    cleanup = step.effect!(utilities)
+  } catch (error) {
+    console.error(error)
+    return
   }
 
-  /**
-   * Execute a step's effect function
-   */
-  private executeEffect(step: StepDetails, utilities: StepEffectArgs) {
-    const { refs } = this.params
-
-    refs.set("_runningEffect", true)
-
-    let cleanup: StepEffectCleanup | undefined
-
-    try {
-      cleanup = step.effect!(utilities)
-    } catch (error) {
-      refs.set("_runningEffect", false)
-      console.error(error)
-      return
-    }
-
-    refs.set("_effectCleanup", cleanup)
+  refs.set("_effectCleanup", cleanup)
 
-    // For wait-type steps, automatically set the stepId so the state machine
-    // can transition to running.waiting state, but don't call show() from the effect
-    if (isWaitStep(step)) {
-      utilities.show()
-    }
-
-    // Clear the flag after all microtasks (including watcher) have completed
-    // Use double queueMicrotask for deterministic timing
-    queueMicrotask(() => {
-      queueMicrotask(() => {
-        refs.set("_runningEffect", false)
-      })
-    })
+  if (isWaitStep(step)) {
+    utilities.show()
   }
 }
diff --git a/packages/machines/tour/src/tour.types.ts b/packages/machines/tour/src/tour.types.ts
index 861acc0658..3596681147 100644
--- a/packages/machines/tour/src/tour.types.ts
+++ b/packages/machines/tour/src/tour.types.ts
@@ -258,9 +258,9 @@ interface Refs {
    */
   _effectCleanup?: StepEffectCleanup | undefined
   /**
-   * Flag to indicate that an effect is currently running
+   * Flag to skip the watch when stepId is changed internally
    */
-  _runningEffect?: boolean | undefined
+  _internalChange?: boolean | undefined
   /**
    * The previous target element to detect changes
    */
diff --git a/packages/machines/tree-view/CHANGELOG.md b/packages/machines/tree-view/CHANGELOG.md
index 9f8a12c87a..081b1c8fc6 100644
--- a/packages/machines/tree-view/CHANGELOG.md
+++ b/packages/machines/tree-view/CHANGELOG.md
@@ -1,5 +1,17 @@
 # @zag-js/tree-view
 
+## 1.38.1
+
+### Patch Changes
+
+- Updated dependencies [[`2b4818c`](https://github.com/chakra-ui/zag/commit/2b4818c3b82ed1ca8ffd2cb44110a4a195ac68d6)]:
+  - @zag-js/core@1.38.1
+  - @zag-js/anatomy@1.38.1
+  - @zag-js/types@1.38.1
+  - @zag-js/collection@1.38.1
+  - @zag-js/utils@1.38.1
+  - @zag-js/dom-query@1.38.1
+
 ## 1.38.0
 
 ### Patch Changes
diff --git a/packages/machines/tree-view/package.json b/packages/machines/tree-view/package.json
index 1bd90d8fca..ec88b32ab3 100644
--- a/packages/machines/tree-view/package.json
+++ b/packages/machines/tree-view/package.json
@@ -1,6 +1,6 @@
 {
   "name": "@zag-js/tree-view",
-  "version": "1.38.0",
+  "version": "1.38.1",
   "description": "Core logic for the tree-view widget implemented as a state machine",
   "keywords": [
     "js",
diff --git a/packages/store/CHANGELOG.md b/packages/store/CHANGELOG.md
index 3c7c34c07c..478d3b065c 100644
--- a/packages/store/CHANGELOG.md
+++ b/packages/store/CHANGELOG.md
@@ -1,5 +1,7 @@
 # @zag-js/store
 
+## 1.38.1
+
 ## 1.38.0
 
 ## 1.37.0
diff --git a/packages/store/package.json b/packages/store/package.json
index 564f9ad505..2aae02be37 100644
--- a/packages/store/package.json
+++ b/packages/store/package.json
@@ -1,6 +1,6 @@
 {
   "name": "@zag-js/store",
-  "version": "1.38.0",
+  "version": "1.38.1",
   "description": "The reactive store package for zag machines",
   "keywords": [
     "js",
diff --git a/packages/types/CHANGELOG.md b/packages/types/CHANGELOG.md
index 36dc6e09e0..ebd2e94fbc 100644
--- a/packages/types/CHANGELOG.md
+++ b/packages/types/CHANGELOG.md
@@ -1,5 +1,7 @@
 # @zag-js/types
 
+## 1.38.1
+
 ## 1.38.0
 
 ## 1.37.0
diff --git a/packages/types/package.json b/packages/types/package.json
index c407cf52ae..5df27509c5 100644
--- a/packages/types/package.json
+++ b/packages/types/package.json
@@ -1,6 +1,6 @@
 {
   "name": "@zag-js/types",
-  "version": "1.38.0",
+  "version": "1.38.1",
   "keywords": [
     "js",
     "utils",
diff --git a/packages/utilities/aria-hidden/CHANGELOG.md b/packages/utilities/aria-hidden/CHANGELOG.md
index b965a5b558..7ddcc24dd5 100644
--- a/packages/utilities/aria-hidden/CHANGELOG.md
+++ b/packages/utilities/aria-hidden/CHANGELOG.md
@@ -1,5 +1,12 @@
 # @zag-js/aria-hidden
 
+## 1.38.1
+
+### Patch Changes
+
+- Updated dependencies []:
+  - @zag-js/dom-query@1.38.1
+
 ## 1.38.0
 
 ### Patch Changes
diff --git a/packages/utilities/aria-hidden/package.json b/packages/utilities/aria-hidden/package.json
index eaffdf0b19..8a00c9910f 100644
--- a/packages/utilities/aria-hidden/package.json
+++ b/packages/utilities/aria-hidden/package.json
@@ -1,6 +1,6 @@
 {
   "name": "@zag-js/aria-hidden",
-  "version": "1.38.0",
+  "version": "1.38.1",
   "description": "Hide targets from screen readers",
   "keywords": [
     "js",
diff --git a/packages/utilities/auto-resize/CHANGELOG.md b/packages/utilities/auto-resize/CHANGELOG.md
index 07d57de126..4606745d82 100644
--- a/packages/utilities/auto-resize/CHANGELOG.md
+++ b/packages/utilities/auto-resize/CHANGELOG.md
@@ -1,5 +1,12 @@
 # @zag-js/auto-resize
 
+## 1.38.1
+
+### Patch Changes
+
+- Updated dependencies []:
+  - @zag-js/dom-query@1.38.1
+
 ## 1.38.0
 
 ### Patch Changes
diff --git a/packages/utilities/auto-resize/package.json b/packages/utilities/auto-resize/package.json
index b10ceec8a1..d6052c6bf8 100644
--- a/packages/utilities/auto-resize/package.json
+++ b/packages/utilities/auto-resize/package.json
@@ -1,6 +1,6 @@
 {
   "name": "@zag-js/auto-resize",
-  "version": "1.38.0",
+  "version": "1.38.1",
   "description": "Autoresize utilities for the web",
   "keywords": [
     "js",
diff --git a/packages/utilities/collection/CHANGELOG.md b/packages/utilities/collection/CHANGELOG.md
index 725e57f0a3..ecb25748f8 100644
--- a/packages/utilities/collection/CHANGELOG.md
+++ b/packages/utilities/collection/CHANGELOG.md
@@ -1,5 +1,12 @@
 # @zag-js/collection
 
+## 1.38.1
+
+### Patch Changes
+
+- Updated dependencies []:
+  - @zag-js/utils@1.38.1
+
 ## 1.38.0
 
 ### Patch Changes
diff --git a/packages/utilities/collection/package.json b/packages/utilities/collection/package.json
index c26ae05fd1..c98d5d7660 100644
--- a/packages/utilities/collection/package.json
+++ b/packages/utilities/collection/package.json
@@ -1,6 +1,6 @@
 {
   "name": "@zag-js/collection",
-  "version": "1.38.0",
+  "version": "1.38.1",
   "description": "Utilities to manage a collection of items.",
   "keywords": [
     "js",
diff --git a/packages/utilities/color-utils/CHANGELOG.md b/packages/utilities/color-utils/CHANGELOG.md
index 1a37569dbe..2c235bfdfc 100644
--- a/packages/utilities/color-utils/CHANGELOG.md
+++ b/packages/utilities/color-utils/CHANGELOG.md
@@ -1,5 +1,12 @@
 # @zag-js/color-utils
 
+## 1.38.1
+
+### Patch Changes
+
+- Updated dependencies []:
+  - @zag-js/utils@1.38.1
+
 ## 1.38.0
 
 ### Patch Changes
diff --git a/packages/utilities/color-utils/package.json b/packages/utilities/color-utils/package.json
index caa4967dee..062a40912c 100644
--- a/packages/utilities/color-utils/package.json
+++ b/packages/utilities/color-utils/package.json
@@ -1,6 +1,6 @@
 {
   "name": "@zag-js/color-utils",
-  "version": "1.38.0",
+  "version": "1.38.1",
   "description": "Color utilities for zag.js",
   "keywords": [
     "js",
diff --git a/packages/utilities/core/CHANGELOG.md b/packages/utilities/core/CHANGELOG.md
index 4cb28a5cf4..449da52f33 100644
--- a/packages/utilities/core/CHANGELOG.md
+++ b/packages/utilities/core/CHANGELOG.md
@@ -1,5 +1,7 @@
 # @zag-js/utils
 
+## 1.38.1
+
 ## 1.38.0
 
 ## 1.37.0
diff --git a/packages/utilities/core/package.json b/packages/utilities/core/package.json
index 5b56da2b43..6e9359c3ca 100644
--- a/packages/utilities/core/package.json
+++ b/packages/utilities/core/package.json
@@ -1,6 +1,6 @@
 {
   "name": "@zag-js/utils",
-  "version": "1.38.0",
+  "version": "1.38.1",
   "description": "",
   "keywords": [
     "js",
diff --git a/packages/utilities/date-utils/CHANGELOG.md b/packages/utilities/date-utils/CHANGELOG.md
index 9c05cb0422..51b2228014 100644
--- a/packages/utilities/date-utils/CHANGELOG.md
+++ b/packages/utilities/date-utils/CHANGELOG.md
@@ -1,5 +1,7 @@
 # @zag-js/date-utils
 
+## 1.38.1
+
 ## 1.38.0
 
 ## 1.37.0
diff --git a/packages/utilities/date-utils/package.json b/packages/utilities/date-utils/package.json
index bfbec34457..8be741f2c9 100644
--- a/packages/utilities/date-utils/package.json
+++ b/packages/utilities/date-utils/package.json
@@ -1,6 +1,6 @@
 {
   "name": "@zag-js/date-utils",
-  "version": "1.38.0",
+  "version": "1.38.1",
   "description": "Date utilities for zag.js",
   "keywords": [
     "js",
diff --git a/packages/utilities/dismissable/CHANGELOG.md b/packages/utilities/dismissable/CHANGELOG.md
index ac822dd938..1c7dbd711a 100644
--- a/packages/utilities/dismissable/CHANGELOG.md
+++ b/packages/utilities/dismissable/CHANGELOG.md
@@ -1,5 +1,14 @@
 # @zag-js/dismissable
 
+## 1.38.1
+
+### Patch Changes
+
+- Updated dependencies []:
+  - @zag-js/utils@1.38.1
+  - @zag-js/dom-query@1.38.1
+  - @zag-js/interact-outside@1.38.1
+
 ## 1.38.0
 
 ### Patch Changes
diff --git a/packages/utilities/dismissable/package.json b/packages/utilities/dismissable/package.json
index 6ffd2e2255..6493a87801 100644
--- a/packages/utilities/dismissable/package.json
+++ b/packages/utilities/dismissable/package.json
@@ -1,6 +1,6 @@
 {
   "name": "@zag-js/dismissable",
-  "version": "1.38.0",
+  "version": "1.38.1",
   "description": "Dismissable layer utilities for the DOM",
   "keywords": [
     "js",
diff --git a/packages/utilities/dom-query/CHANGELOG.md b/packages/utilities/dom-query/CHANGELOG.md
index cae988e28d..23fc142f17 100644
--- a/packages/utilities/dom-query/CHANGELOG.md
+++ b/packages/utilities/dom-query/CHANGELOG.md
@@ -1,5 +1,12 @@
 # @zag-js/dom-query
 
+## 1.38.1
+
+### Patch Changes
+
+- Updated dependencies []:
+  - @zag-js/types@1.38.1
+
 ## 1.38.0
 
 ### Patch Changes
diff --git a/packages/utilities/dom-query/package.json b/packages/utilities/dom-query/package.json
index e453122033..ae28e19931 100644
--- a/packages/utilities/dom-query/package.json
+++ b/packages/utilities/dom-query/package.json
@@ -1,6 +1,6 @@
 {
   "name": "@zag-js/dom-query",
-  "version": "1.38.0",
+  "version": "1.38.1",
   "description": "The dom helper library for zag.js machines",
   "keywords": [
     "js",
diff --git a/packages/utilities/dom-query/src/wait-for.ts b/packages/utilities/dom-query/src/wait-for.ts
index 4821ddf458..5df0317976 100644
--- a/packages/utilities/dom-query/src/wait-for.ts
+++ b/packages/utilities/dom-query/src/wait-for.ts
@@ -21,7 +21,7 @@ export function waitForPromise<T>(
 
     signal.addEventListener("abort", () => {
       clearTimeout(timeoutId)
-      reject(new Error("Promise aborted"))
+      reject(new DOMException("Promise aborted", "AbortError"))
     })
 
     promise
diff --git a/packages/utilities/file-utils/CHANGELOG.md b/packages/utilities/file-utils/CHANGELOG.md
index 5dfcada3e3..dbd163a308 100644
--- a/packages/utilities/file-utils/CHANGELOG.md
+++ b/packages/utilities/file-utils/CHANGELOG.md
@@ -1,5 +1,12 @@
 # @zag-js/file-utils
 
+## 1.38.1
+
+### Patch Changes
+
+- Updated dependencies []:
+  - @zag-js/i18n-utils@1.38.1
+
 ## 1.38.0
 
 ### Patch Changes
diff --git a/packages/utilities/file-utils/package.json b/packages/utilities/file-utils/package.json
index abe1fca158..a7b7b73375 100644
--- a/packages/utilities/file-utils/package.json
+++ b/packages/utilities/file-utils/package.json
@@ -1,6 +1,6 @@
 {
   "name": "@zag-js/file-utils",
-  "version": "1.38.0",
+  "version": "1.38.1",
   "description": "JS File API utilities",
   "keywords": [
     "js",
diff --git a/packages/utilities/focus-trap/CHANGELOG.md b/packages/utilities/focus-trap/CHANGELOG.md
index be0fe5c9a9..0d90a6f6de 100644
--- a/packages/utilities/focus-trap/CHANGELOG.md
+++ b/packages/utilities/focus-trap/CHANGELOG.md
@@ -1,5 +1,12 @@
 # @zag-js/focus-trap
 
+## 1.38.1
+
+### Patch Changes
+
+- Updated dependencies []:
+  - @zag-js/dom-query@1.38.1
+
 ## 1.38.0
 
 ### Patch Changes
diff --git a/packages/utilities/focus-trap/package.json b/packages/utilities/focus-trap/package.json
index 9011609e61..686bd884b5 100644
--- a/packages/utilities/focus-trap/package.json
+++ b/packages/utilities/focus-trap/package.json
@@ -1,6 +1,6 @@
 {
   "name": "@zag-js/focus-trap",
-  "version": "1.38.0",
+  "version": "1.38.1",
   "description": "Focus trap utility",
   "keywords": [
     "js",
diff --git a/packages/utilities/focus-visible/CHANGELOG.md b/packages/utilities/focus-visible/CHANGELOG.md
index db03ee2e1a..a24b0677d1 100644
--- a/packages/utilities/focus-visible/CHANGELOG.md
+++ b/packages/utilities/focus-visible/CHANGELOG.md
@@ -1,5 +1,12 @@
 # @zag-js/focus-visible
 
+## 1.38.1
+
+### Patch Changes
+
+- Updated dependencies []:
+  - @zag-js/dom-query@1.38.1
+
 ## 1.38.0
 
 ### Patch Changes
diff --git a/packages/utilities/focus-visible/package.json b/packages/utilities/focus-visible/package.json
index 89d1736879..0d8baae27e 100644
--- a/packages/utilities/focus-visible/package.json
+++ b/packages/utilities/focus-visible/package.json
@@ -1,6 +1,6 @@
 {
   "name": "@zag-js/focus-visible",
-  "version": "1.38.0",
+  "version": "1.38.1",
   "description": "Focus visible polyfill utility based on WICG",
   "keywords": [
     "js",
diff --git a/packages/utilities/highlight-word/CHANGELOG.md b/packages/utilities/highlight-word/CHANGELOG.md
index 1820d632aa..8649e43ffc 100644
--- a/packages/utilities/highlight-word/CHANGELOG.md
+++ b/packages/utilities/highlight-word/CHANGELOG.md
@@ -1,5 +1,7 @@
 # @zag-js/highlight-word
 
+## 1.38.1
+
 ## 1.38.0
 
 ## 1.37.0
diff --git a/packages/utilities/highlight-word/package.json b/packages/utilities/highlight-word/package.json
index a05021e511..5ba493e794 100644
--- a/packages/utilities/highlight-word/package.json
+++ b/packages/utilities/highlight-word/package.json
@@ -1,6 +1,6 @@
 {
   "name": "@zag-js/highlight-word",
-  "version": "1.38.0",
+  "version": "1.38.1",
   "description": "Highlight a portion of text in a string",
   "keywords": [
     "js",
diff --git a/packages/utilities/hotkeys/CHANGELOG.md b/packages/utilities/hotkeys/CHANGELOG.md
index a10055e76b..e8b0c39233 100644
--- a/packages/utilities/hotkeys/CHANGELOG.md
+++ b/packages/utilities/hotkeys/CHANGELOG.md
@@ -1,5 +1,7 @@
 # @zag-js/hotkeys
 
+## 1.38.1
+
 ## 1.38.0
 
 ## 1.37.0
diff --git a/packages/utilities/hotkeys/package.json b/packages/utilities/hotkeys/package.json
index 600cb47227..7d56d0bce6 100644
--- a/packages/utilities/hotkeys/package.json
+++ b/packages/utilities/hotkeys/package.json
@@ -1,6 +1,6 @@
 {
   "name": "@zag-js/hotkeys",
-  "version": "1.38.0",
+  "version": "1.38.1",
   "description": "Utility for managing keyboard shortcuts",
   "keywords": [
     "js",
diff --git a/packages/utilities/i18n-utils/CHANGELOG.md b/packages/utilities/i18n-utils/CHANGELOG.md
index 9e3e87adee..772918039b 100644
--- a/packages/utilities/i18n-utils/CHANGELOG.md
+++ b/packages/utilities/i18n-utils/CHANGELOG.md
@@ -1,5 +1,12 @@
 # @zag-js/i18n-utils
 
+## 1.38.1
+
+### Patch Changes
+
+- Updated dependencies []:
+  - @zag-js/dom-query@1.38.1
+
 ## 1.38.0
 
 ### Patch Changes
diff --git a/packages/utilities/i18n-utils/package.json b/packages/utilities/i18n-utils/package.json
index 5b8bb83383..870c849463 100644
--- a/packages/utilities/i18n-utils/package.json
+++ b/packages/utilities/i18n-utils/package.json
@@ -1,6 +1,6 @@
 {
   "name": "@zag-js/i18n-utils",
-  "version": "1.38.0",
+  "version": "1.38.1",
   "description": "Interationalization utilities for Zag.js",
   "keywords": [
     "js",
diff --git a/packages/utilities/interact-outside/CHANGELOG.md b/packages/utilities/interact-outside/CHANGELOG.md
index 56cda56865..56f38b5b23 100644
--- a/packages/utilities/interact-outside/CHANGELOG.md
+++ b/packages/utilities/interact-outside/CHANGELOG.md
@@ -1,5 +1,13 @@
 # @zag-js/interact-outside
 
+## 1.38.1
+
+### Patch Changes
+
+- Updated dependencies []:
+  - @zag-js/utils@1.38.1
+  - @zag-js/dom-query@1.38.1
+
 ## 1.38.0
 
 ### Patch Changes
diff --git a/packages/utilities/interact-outside/package.json b/packages/utilities/interact-outside/package.json
index e7ae2a53e2..a2ce93b3e6 100644
--- a/packages/utilities/interact-outside/package.json
+++ b/packages/utilities/interact-outside/package.json
@@ -1,6 +1,6 @@
 {
   "name": "@zag-js/interact-outside",
-  "version": "1.38.0",
+  "version": "1.38.1",
   "description": "Track interactions or focus outside an element",
   "keywords": [
     "js",
diff --git a/packages/utilities/json-tree-utils/CHANGELOG.md b/packages/utilities/json-tree-utils/CHANGELOG.md
index 96a5d4ad42..2bdd229a9e 100644
--- a/packages/utilities/json-tree-utils/CHANGELOG.md
+++ b/packages/utilities/json-tree-utils/CHANGELOG.md
@@ -1,5 +1,7 @@
 # @zag-js/json-tree-utils
 
+## 1.38.1
+
 ## 1.38.0
 
 ## 1.37.0
diff --git a/packages/utilities/json-tree-utils/package.json b/packages/utilities/json-tree-utils/package.json
index 4bc4d88b8d..4dd8bda101 100644
--- a/packages/utilities/json-tree-utils/package.json
+++ b/packages/utilities/json-tree-utils/package.json
@@ -1,6 +1,6 @@
 {
   "name": "@zag-js/json-tree-utils",
-  "version": "1.38.0",
+  "version": "1.38.1",
   "description": "Utilities for building json tree data",
   "keywords": [
     "json",
diff --git a/packages/utilities/live-region/CHANGELOG.md b/packages/utilities/live-region/CHANGELOG.md
index d9192178c3..47fbea4780 100644
--- a/packages/utilities/live-region/CHANGELOG.md
+++ b/packages/utilities/live-region/CHANGELOG.md
@@ -1,5 +1,7 @@
 # @zag-js/live-region
 
+## 1.38.1
+
 ## 1.38.0
 
 ## 1.37.0
diff --git a/packages/utilities/live-region/package.json b/packages/utilities/live-region/package.json
index 3252c71f01..cdd8dfbc5b 100644
--- a/packages/utilities/live-region/package.json
+++ b/packages/utilities/live-region/package.json
@@ -1,6 +1,6 @@
 {
   "name": "@zag-js/live-region",
-  "version": "1.38.0",
+  "version": "1.38.1",
   "description": "Implementing live region for screen readers",
   "keywords": [
     "js",
diff --git a/packages/utilities/popper/CHANGELOG.md b/packages/utilities/popper/CHANGELOG.md
index 84ef634d69..0d204f3110 100644
--- a/packages/utilities/popper/CHANGELOG.md
+++ b/packages/utilities/popper/CHANGELOG.md
@@ -1,5 +1,18 @@
 # @zag-js/popper
 
+## 1.38.1
+
+### Patch Changes
+
+- [`2b4818c`](https://github.com/chakra-ui/zag/commit/2b4818c3b82ed1ca8ffd2cb44110a4a195ac68d6) Thanks
+  [@segunadebayo](https://github.com/segunadebayo)! - - Fix step navigation events (`next`, `prev`, `setStep`) firing
+  when the tour is inactive, bypassing the `start` flow
+  - Fix popper styles not being cleaned up when transitioning from a tooltip step to a dialog/non-tooltip step
+  - Rename `cleanupStyles` option to `restoreStyles` in the popper package
+- Updated dependencies []:
+  - @zag-js/utils@1.38.1
+  - @zag-js/dom-query@1.38.1
+
 ## 1.38.0
 
 ### Patch Changes
diff --git a/packages/utilities/popper/package.json b/packages/utilities/popper/package.json
index a713ee249f..c73c47be99 100644
--- a/packages/utilities/popper/package.json
+++ b/packages/utilities/popper/package.json
@@ -1,6 +1,6 @@
 {
   "name": "@zag-js/popper",
-  "version": "1.38.0",
+  "version": "1.38.1",
   "description": "Dynamic positioning logic for ui machines",
   "keywords": [
     "js",
diff --git a/packages/utilities/popper/src/get-placement.ts b/packages/utilities/popper/src/get-placement.ts
index b642a0c6ee..ba4edfae4b 100644
--- a/packages/utilities/popper/src/get-placement.ts
+++ b/packages/utilities/popper/src/get-placement.ts
@@ -11,6 +11,7 @@ const defaultOptions: PositioningOptions = {
   strategy: "absolute",
   placement: "bottom",
   listeners: true,
+  restoreStyles: false,
   gutter: 8,
   flip: true,
   slide: true,
@@ -153,6 +154,39 @@ function getAutoUpdateOptions(opts?: boolean | AutoUpdateOptions): AutoUpdateOpt
   return opts
 }
 
+const floatingStyleProps = [
+  "transform",
+  "visibility",
+  "pointer-events",
+  "--x",
+  "--y",
+  "--z-index",
+  "--reference-width",
+  "--reference-height",
+  "--available-width",
+  "--available-height",
+  "--transform-origin",
+]
+
+const arrowStyleProps = ["top", "right", "bottom", "left"]
+
+function createStyleCleanup(el: HTMLElement | null, props: string[]) {
+  if (!el) return noop
+
+  const prev = new Map(props.map((prop) => [prop, el.style.getPropertyValue(prop)]))
+
+  return () => {
+    prev.forEach((value, prop) => {
+      if (value) el.style.setProperty(prop, value)
+      else el.style.removeProperty(prop)
+    })
+
+    if (el.style.length === 0) {
+      el.removeAttribute("style")
+    }
+  }
+}
+
 function getPlacementImpl(referenceOrVirtual: MaybeRectElement, floating: MaybeElement, opts: PositioningOptions = {}) {
   const anchor = opts.getAnchorElement?.() ?? referenceOrVirtual
   const reference = getAnchorElement(anchor, opts.getAnchorRect)
@@ -164,6 +198,8 @@ function getPlacementImpl(referenceOrVirtual: MaybeRectElement, floating: MaybeE
    * -----------------------------------------------------------------------------*/
 
   const arrowEl = floating.querySelector<HTMLElement>("[data-part=arrow]")
+  const restoreFloatingStyles = options.restoreStyles ? createStyleCleanup(floating, floatingStyleProps) : undefined
+  const restoreArrowStyles = options.restoreStyles ? createStyleCleanup(arrowEl, arrowStyleProps) : undefined
 
   const middleware: (Middleware | undefined)[] = [
     getOffsetMiddleware(arrowEl, options),
@@ -255,6 +291,8 @@ function getPlacementImpl(referenceOrVirtual: MaybeRectElement, floating: MaybeE
 
   return () => {
     cancelAutoUpdate?.()
+    restoreArrowStyles?.()
+    restoreFloatingStyles?.()
     onPositioned?.({ placed: false })
   }
 }
diff --git a/packages/utilities/popper/src/types.ts b/packages/utilities/popper/src/types.ts
index 030c0b36e0..fdb12ef0aa 100644
--- a/packages/utilities/popper/src/types.ts
+++ b/packages/utilities/popper/src/types.ts
@@ -17,6 +17,10 @@ export interface AnchorRect {
 }
 
 export interface PositioningOptions {
+  /**
+   * Whether styles applied by the positioning utility should be restored on cleanup.
+   */
+  restoreStyles?: boolean | undefined
   /**
    * Whether the popover should be hidden when the reference element is detached
    */
diff --git a/packages/utilities/rect/CHANGELOG.md b/packages/utilities/rect/CHANGELOG.md
index b098d2ac03..1884c58769 100644
--- a/packages/utilities/rect/CHANGELOG.md
+++ b/packages/utilities/rect/CHANGELOG.md
@@ -1,5 +1,7 @@
 # @zag-js/rect-utils
 
+## 1.38.1
+
 ## 1.38.0
 
 ## 1.37.0
diff --git a/packages/utilities/rect/package.json b/packages/utilities/rect/package.json
index 783e91f832..a9eed033df 100644
--- a/packages/utilities/rect/package.json
+++ b/packages/utilities/rect/package.json
@@ -1,6 +1,6 @@
 {
   "name": "@zag-js/rect-utils",
-  "version": "1.38.0",
+  "version": "1.38.1",
   "description": "",
   "keywords": [
     "js",
diff --git a/packages/utilities/remove-scroll/CHANGELOG.md b/packages/utilities/remove-scroll/CHANGELOG.md
index e5a2704d4e..0ff7e5f3da 100644
--- a/packages/utilities/remove-scroll/CHANGELOG.md
+++ b/packages/utilities/remove-scroll/CHANGELOG.md
@@ -1,5 +1,12 @@
 # @zag-js/remove-scroll
 
+## 1.38.1
+
+### Patch Changes
+
+- Updated dependencies []:
+  - @zag-js/dom-query@1.38.1
+
 ## 1.38.0
 
 ### Patch Changes
diff --git a/packages/utilities/remove-scroll/package.json b/packages/utilities/remove-scroll/package.json
index f559f3b891..05d967b4ba 100644
--- a/packages/utilities/remove-scroll/package.json
+++ b/packages/utilities/remove-scroll/package.json
@@ -1,6 +1,6 @@
 {
   "name": "@zag-js/remove-scroll",
-  "version": "1.38.0",
+  "version": "1.38.1",
   "description": "JavaScript utility to remove scroll on body",
   "keywords": [
     "js",
diff --git a/packages/utilities/scroll-snap/CHANGELOG.md b/packages/utilities/scroll-snap/CHANGELOG.md
index 9b8c1eb871..48382e20bf 100644
--- a/packages/utilities/scroll-snap/CHANGELOG.md
+++ b/packages/utilities/scroll-snap/CHANGELOG.md
@@ -1,5 +1,12 @@
 # @zag-js/scroll-snap
 
+## 1.38.1
+
+### Patch Changes
+
+- Updated dependencies []:
+  - @zag-js/dom-query@1.38.1
+
 ## 1.38.0
 
 ### Patch Changes
diff --git a/packages/utilities/scroll-snap/package.json b/packages/utilities/scroll-snap/package.json
index 368dbcd660..431ccf5150 100644
--- a/packages/utilities/scroll-snap/package.json
+++ b/packages/utilities/scroll-snap/package.json
@@ -1,6 +1,6 @@
 {
   "name": "@zag-js/scroll-snap",
-  "version": "1.38.0",
+  "version": "1.38.1",
   "description": "Scroll snap utilities",
   "keywords": [
     "js",
diff --git a/packages/utilities/stringify-state/CHANGELOG.md b/packages/utilities/stringify-state/CHANGELOG.md
index 0223b090bc..47b3a54c53 100644
--- a/packages/utilities/stringify-state/CHANGELOG.md
+++ b/packages/utilities/stringify-state/CHANGELOG.md
@@ -1,5 +1,7 @@
 # @zag-js/stringify-state
 
+## 1.38.1
+
 ## 1.38.0
 
 ## 1.37.0
diff --git a/packages/utilities/stringify-state/package.json b/packages/utilities/stringify-state/package.json
index 67a2b073e4..049615fc4c 100644
--- a/packages/utilities/stringify-state/package.json
+++ b/packages/utilities/stringify-state/package.json
@@ -1,6 +1,6 @@
 {
   "name": "@zag-js/stringify-state",
-  "version": "1.38.0",
+  "version": "1.38.1",
   "description": "Helper to stringify state of Zag machines",
   "keywords": [
     "js",
diff --git a/shared/src/routes.ts b/shared/src/routes.ts
index 02db21e385..85eb882a73 100644
--- a/shared/src/routes.ts
+++ b/shared/src/routes.ts
@@ -136,7 +136,10 @@ export const componentRoutes: ComponentRoute[] = [
     label: "Tour",
     examples: [
       { slug: "basic", title: "Basic" },
-      { slug: "with-input-event", title: "Input Event" },
+      { slug: "wait-step", title: "Wait Step" },
+      { slug: "wait-for-input-event", title: "Wait for Input" },
+      { slug: "step-types", title: "Step Types" },
+      { slug: "conditional", title: "Conditional" },
     ],
   },
   {
diff --git a/starters/svelte-kit/CHANGELOG.md b/starters/svelte-kit/CHANGELOG.md
index e3e888402b..8710c9a990 100644
--- a/starters/svelte-kit/CHANGELOG.md
+++ b/starters/svelte-kit/CHANGELOG.md
@@ -1,5 +1,13 @@
 # svelte-kit-starter
 
+## 0.0.11
+
+### Patch Changes
+
+- Updated dependencies []:
+  - @zag-js/svelte@1.38.1
+  - @zag-js/switch@1.38.1
+
 ## 0.0.10
 
 ### Patch Changes
diff --git a/starters/svelte-kit/package.json b/starters/svelte-kit/package.json
index c301ede0a6..b160baeecf 100644
--- a/starters/svelte-kit/package.json
+++ b/starters/svelte-kit/package.json
@@ -1,6 +1,6 @@
 {
   "name": "svelte-kit-starter",
-  "version": "0.0.10",
+  "version": "0.0.11",
   "private": true,
   "type": "module",
   "scripts": {
