shadcn-ui/ui · error · Error
useLocks must be used within LocksProvider
Error message
useLocks must be used within LocksProvider
What it means
Typeset variant of [143]. `useLocks` reads `LocksContext`; the typeset provider memoizes `{ locks, isLocked, toggleLock }`. A consumer outside `<LocksProvider>` throws so the lock contract can't be partially absent.
Source
Thrown at apps/v4/app/(app)/(typeset)/hooks/use-locks.tsx:50
} else {
next.add(param)
}
return next
})
}, [])
const value = React.useMemo(
() => ({ locks, isLocked, toggleLock }),
[locks, isLocked, toggleLock]
)
return <LocksContext value={value}>{children}</LocksContext>
}
export function useLocks() {
const context = React.useContext(LocksContext)
if (!context) {
throw new Error("useLocks must be used within LocksProvider")
}
return context
}
View on GitHub (pinned to efac598707)
Solutions
- Wrap the typeset subtree in `<LocksProvider>`.
- Import from the (typeset) use-locks module to match the context instance.
- Decorate tests with the provider.
Example fix
// before <TypesetLockablePanel /> // after <LocksProvider> <TypesetLockablePanel /> </LocksProvider>
Defensive patterns
Strategy: type-guard
Validate before calling
render(<LocksProvider>{<TypesetLockablePanel/>}</LocksProvider>) // (typeset) LocksProvider Type guard
import React from "react"
import { LocksContext } from "@/(app)/(typeset)/hooks/use-locks"
const hasTypesetLocks = () => React.useContext(LocksContext) != null Try / catch
try { useLocks() } catch (e) { if (e.message.includes("LocksProvider")) {/*wrap subtree*/} throw e } Prevention
- Mount the (typeset) LocksProvider at the typeset layout root.
- Import from the (typeset) module to match context identity.
- Reuse test decorators across (create)/(typeset) by parameterizing the provider.
When it happens
Trigger: A typeset panel that calls `useLocks()` rendered without a `<LocksProvider>` ancestor; sharing a lock-aware panel across create/typeset without re-wrapping.
Common situations: Route layout changes; portal/dialog rendering; isolated tests.
Related errors
- useLocks must be used within LocksProvider
- usePreviewOverride must be used within a TypesetPreviewOverr
- useHistory must be used within TypesetHistoryProvider
- usePreviewOverride must be used within a PreviewOverrideProv
- useHistory must be used within HistoryProvider
AI-assisted analysis of shadcn-ui/ui@efac598707 (2026-08-12).
Data as JSON: /api/errors/57bd7daba9f48437.
Report an issue: GitHub.