Skip to content
← Blocks / Core

Gate Wrapper

A copy-paste React layout primitive for composing a fully custom access-code UI — page-centered or inline positioning, no verification logic. Zero dependencies.

CoreUtilitycorelayout

Best used for Composing a fully custom access-code UI that still needs the standard page/inline positioning.

Not a verification strategy — just layout. Every block that renders visible UI (<KnockCodes>, <ProtectedCard>, <AccessDeniedScreen>, ...) composes on this instead of re-deriving centering/spacing.

// Usage

Minimal setup

<GateWrapper variant="page">
  <YourCustomAccessForm />
</GateWrapper>
Your own custom gate UI goes here — Gate Wrapper only handles outer positioning.
Installation

Add this block to your project

Recommended

npx shadcn@latest add @knock-codes/gate-wrapper

Also installs

  • cx (classname helper)

These install together as one atomic unit — even a presentational or read-only piece needs the full verification stack (hook, types, core) behind it to actually run.

Files created (2)

  • components/knock-codes/react/cx.ts
  • components/knock-codes/react/GateWrapper.tsx
Other ways

GitHub shorthand

npx shadcn@latest add trivedi-vatsal/knock-codes/gate-wrapper

Copy the files by hand

  1. Open the Code tab in the preview above.
  2. Create each path listed below in your project and paste its contents in.
  3. Do the same for anything listed under “Also installs”, if present.
// Props

API reference

PropTypeDefaultDescription
children *ReactNodeContent to position.
variant"page" | "inline""page""page" centers full-height (min-h-100dvh); "inline" flows naturally in place.
classNamestringExtra classes on the wrapper.
Notes

Accessibility

Purely structural — a single div with positioning classes. No semantics of its own to get wrong.

Customization

Use it directly when none of the other blocks' visual shells fit — wrap your own fully custom access-code form in it to get the same full-page-centered or inline placement every other block uses, for free.

Security & Verification

Need a hash? Use the hash generator on Getting Started — computed locally, never sent anywhere.

The honest version

Knock Codes stops casual visitors, search engines, and forwarded links. Local mode does not stop anyone who opens DevTools — the hash ships in your client bundle by design. Server mode (swap one prop) hides the hash from the client; children you already bundled are still in the JavaScript, and a forged session works unless you wire validateSession. A velvet rope, with an optional real lock. Never marketed as more than that.

// Compose with

Blocks that pair well with this one

These combine naturally with this block, whether as a shared shell, a shared session, or a common fallback.