diff --git a/.changeset/5867-layout-plaintext-fences-batch5.md b/.changeset/5867-layout-plaintext-fences-batch5.md
new file mode 100644
index 0000000000..089856b3da
--- /dev/null
+++ b/.changeset/5867-layout-plaintext-fences-batch5.md
@@ -0,0 +1,9 @@
+---
+---
+
+Documentation only: re-fenced the 12 TypeScript blocks in `content/docs/layout/**` that were
+fenced `plaintext`, so `check-doc-snippet-types` compiles them, and fixed the four blocks it
+then reddened (a missing `AppShellBranding` import, three examples using components and values
+they never imported, and two `AppShell` examples that passed no children). Lowered
+`KNOWN_UNHIGHLIGHTED_TS_FENCES` by the three layout files in the same change. No published
+behaviour changes.
diff --git a/content/docs/layout/app-shell.mdx b/content/docs/layout/app-shell.mdx
index e5ba3790d4..5e1deace18 100644
--- a/content/docs/layout/app-shell.mdx
+++ b/content/docs/layout/app-shell.mdx
@@ -7,7 +7,7 @@ The AppShell component provides the main application layout structure with an in
## Basic Usage
-```plaintext
+```tsx
import { AppShell, SidebarNav, type NavItem } from '@object-ui/layout';
import { Home, Settings, Users } from 'lucide-react';
@@ -32,7 +32,9 @@ const navItems: NavItem[] = [
## Component Props
-```plaintext
+```ts
+import type { AppShellBranding } from '@object-ui/layout';
+
interface AppShellProps {
sidebar?: React.ReactNode; // Sidebar content (usually SidebarNav)
navbar?: React.ReactNode; // Top navbar content (logo, search, user menu)
@@ -111,14 +113,21 @@ The AppShell renders no toggle button of its own. What it does give you is the
- Programmatic control — `useSidebar().toggleSidebar()` from any component inside the shell
- A toggle button you render yourself; it belongs in the `navbar` slot:
-```plaintext
+```tsx
import { SidebarTrigger } from '@object-ui/components';
+import { AppShell, SidebarNav, type NavItem } from '@object-ui/layout';
+import { Home, Settings } from 'lucide-react';
+
+const navItems: NavItem[] = [
+ { title: 'Dashboard', href: '/', icon: Home },
+ { title: 'Settings', href: '/settings', icon: Settings },
+];
}
sidebar={}
>
- {/* Your page content */}
+
Your page content
```
@@ -160,7 +169,7 @@ navbar={
## Complete Example
-```plaintext
+```tsx
import { AppShell, SidebarNav, type NavItem } from '@object-ui/layout';
import { Avatar, AvatarFallback, Button, Input } from '@object-ui/components';
import { Bell, Folder, LayoutDashboard, Settings, Users } from 'lucide-react';
diff --git a/content/docs/layout/page-header.mdx b/content/docs/layout/page-header.mdx
index 7ab7240f63..7d87d4c047 100644
--- a/content/docs/layout/page-header.mdx
+++ b/content/docs/layout/page-header.mdx
@@ -34,7 +34,7 @@ The PageHeader component provides a consistent header for pages with title, subt
## Basic Usage
-```plaintext
+```tsx
import { PageHeader } from '@object-ui/layout';
{
title: string; // Page title (required); {field.path} tokens interpolated
subtitle?: string; // Secondary line under the title — the canonical key
@@ -268,7 +268,7 @@ rename it to `subtitle`, and do not assume objectui#3789 touched it.
## Complete Example
-```plaintext
+```tsx
import { PageHeader } from '@object-ui/layout';
import { Button } from '@object-ui/components';
import { Plus, Download, Settings } from 'lucide-react';
diff --git a/content/docs/layout/sidebar-nav.mdx b/content/docs/layout/sidebar-nav.mdx
index 0baf0ff840..361e3967c3 100644
--- a/content/docs/layout/sidebar-nav.mdx
+++ b/content/docs/layout/sidebar-nav.mdx
@@ -7,7 +7,7 @@ The SidebarNav component provides a responsive sidebar navigation menu with supp
## Basic Usage
-```plaintext
+```tsx
import { SidebarNav } from '@object-ui/layout';
import { Home, Users, Settings } from 'lucide-react';
@@ -35,7 +35,7 @@ import { Home, Users, Settings } from 'lucide-react';
## Component Props
-```plaintext
+```ts
interface SidebarNavProps {
items: NavItem[] | NavGroup[]; // Navigation items or grouped items
title?: string; // Sidebar title (default: "Application")
@@ -75,7 +75,8 @@ The SidebarNav automatically highlights the active route based on the current UR
Add Lucide icons to navigation items:
-```plaintext
+```tsx
+import { SidebarNav } from '@object-ui/layout';
import {
LayoutDashboard,
Users,
@@ -188,7 +189,7 @@ Set a custom title for the sidebar:
## Complete Example
-```plaintext
+```tsx
import { SidebarNav, type NavGroup } from '@object-ui/layout';
import {
Home,
@@ -244,8 +245,9 @@ function App() {
The SidebarNav is designed to work with AppShell:
-```plaintext
+```tsx
import { AppShell, SidebarNav } from '@object-ui/layout';
+import { Home, Info } from 'lucide-react';
}
>
- {/* Your content */}
+ Your content
```
diff --git a/scripts/check-doc-fence-languages.mjs b/scripts/check-doc-fence-languages.mjs
index 72e3d52fbe..264d154bd0 100644
--- a/scripts/check-doc-fence-languages.mjs
+++ b/scripts/check-doc-fence-languages.mjs
@@ -372,9 +372,6 @@ export const KNOWN_UNHIGHLIGHTED_TS_FENCES = new Map([
['content/docs/components/overlay/sheet.mdx', 1],
['content/docs/components/overlay/tooltip.mdx', 1],
['content/docs/core/report-schema.mdx', 11],
- ['content/docs/layout/app-shell.mdx', 4],
- ['content/docs/layout/page-header.mdx', 3],
- ['content/docs/layout/sidebar-nav.mdx', 5],
['content/docs/plugins/plugin-calendar.mdx', 1],
['content/docs/plugins/plugin-chatbot.mdx', 2],
['content/docs/plugins/plugin-dashboard.mdx', 3],