{ "$schema": "https://ui.shadcn.com/schema/registry-item.json", "name": "admin-layout", "title": "Admin Layout", "description": "Complete AdminLTE layout wrapper with sidebar, header, content area, footer, and React context provider for layout state management.", "dependencies": [ "lucide-react" ], "registryDependencies": [ "https://raw.githubusercontent.com/dnachavez/adminlte-next/master/public/r/adminlte-theme.json", "https://raw.githubusercontent.com/dnachavez/adminlte-next/master/public/r/main-header.json", "https://raw.githubusercontent.com/dnachavez/adminlte-next/master/public/r/main-sidebar.json", "https://raw.githubusercontent.com/dnachavez/adminlte-next/master/public/r/content-wrapper.json", "https://raw.githubusercontent.com/dnachavez/adminlte-next/master/public/r/content-header.json", "https://raw.githubusercontent.com/dnachavez/adminlte-next/master/public/r/main-footer.json", "https://raw.githubusercontent.com/dnachavez/adminlte-next/master/public/r/control-sidebar.json", "https://raw.githubusercontent.com/dnachavez/adminlte-next/master/public/r/use-layout.json", "https://raw.githubusercontent.com/dnachavez/adminlte-next/master/public/r/use-push-menu.json" ], "files": [ { "path": "registry/new-york/admin-layout/blocks/admin-layout.tsx", "content": "\"use client\"\n\nimport * as React from \"react\"\nimport { cn } from \"@/registry/new-york/adminlte-theme/lib/cn\"\nimport {\n AdminLTELayoutProvider,\n useAdminLTELayout,\n} from \"@/registry/new-york/admin-layout/blocks/admin-layout-provider\"\nimport type { Skin } from \"@/registry/new-york/admin-layout/blocks/admin-layout-provider\"\n\ninterface AdminLayoutProps {\n children: React.ReactNode\n defaultSkin?: Skin\n defaultCollapsed?: boolean\n defaultFixed?: boolean\n defaultBoxed?: boolean\n sidebarMini?: boolean\n className?: string\n}\n\nfunction AdminLayoutInner({\n children,\n className,\n}: {\n children: React.ReactNode\n className?: string\n}) {\n const {\n skin,\n sidebarCollapsed,\n sidebarMobileOpen,\n isFixed,\n isBoxed,\n sidebarMini,\n } = useAdminLTELayout()\n\n return (\n \n
\n {children}\n
\n \n )\n}\n\nfunction AdminLayout({\n children,\n defaultSkin = \"skin-blue\",\n defaultCollapsed = false,\n defaultFixed = false,\n defaultBoxed = false,\n sidebarMini = true,\n className,\n}: AdminLayoutProps) {\n return (\n \n \n {children}\n \n \n )\n}\n\nexport { AdminLayout }\nexport type { AdminLayoutProps }\n", "type": "registry:component" }, { "path": "registry/new-york/admin-layout/blocks/admin-layout-provider.tsx", "content": "\"use client\"\n\nimport * as React from \"react\"\n\ntype Skin =\n | \"skin-blue\"\n | \"skin-blue-light\"\n | \"skin-green\"\n | \"skin-green-light\"\n | \"skin-red\"\n | \"skin-red-light\"\n | \"skin-yellow\"\n | \"skin-yellow-light\"\n | \"skin-purple\"\n | \"skin-purple-light\"\n | \"skin-black\"\n | \"skin-black-light\"\n\ninterface AdminLTELayoutState {\n skin: Skin\n sidebarCollapsed: boolean\n sidebarMobileOpen: boolean\n isMobile: boolean\n isFixed: boolean\n isBoxed: boolean\n controlSidebarOpen: boolean\n sidebarMini: boolean\n}\n\ninterface AdminLTELayoutActions {\n setSkin: (skin: Skin) => void\n toggleSidebar: () => void\n openSidebar: () => void\n closeSidebar: () => void\n closeMobileSidebar: () => void\n setFixed: (fixed: boolean) => void\n setBoxed: (boxed: boolean) => void\n toggleControlSidebar: () => void\n setSidebarMini: (mini: boolean) => void\n}\n\ntype AdminLTELayoutContextValue = AdminLTELayoutState & AdminLTELayoutActions\n\nconst AdminLTELayoutContext = React.createContext(null)\n\nexport function useAdminLTELayout() {\n const context = React.useContext(AdminLTELayoutContext)\n if (!context) {\n throw new Error(\"useAdminLTELayout must be used within AdminLTELayoutProvider\")\n }\n return context\n}\n\ninterface AdminLTELayoutProviderProps {\n children: React.ReactNode\n defaultSkin?: Skin\n defaultCollapsed?: boolean\n defaultFixed?: boolean\n defaultBoxed?: boolean\n sidebarMini?: boolean\n collapseScreenSize?: number\n}\n\nexport function AdminLTELayoutProvider({\n children,\n defaultSkin = \"skin-blue\",\n defaultCollapsed = false,\n defaultFixed = false,\n defaultBoxed = false,\n sidebarMini = true,\n collapseScreenSize = 767,\n}: AdminLTELayoutProviderProps) {\n const [skin, setSkin] = React.useState(defaultSkin)\n const [sidebarCollapsed, setSidebarCollapsed] = React.useState(defaultCollapsed)\n const [sidebarMobileOpen, setSidebarMobileOpen] = React.useState(false)\n const [isMobile, setIsMobile] = React.useState(false)\n const [isFixed, setFixed] = React.useState(defaultFixed)\n const [isBoxed, setBoxed] = React.useState(defaultBoxed)\n const [controlSidebarOpen, setControlSidebarOpen] = React.useState(false)\n const [isSidebarMini, setSidebarMini] = React.useState(sidebarMini)\n\n React.useEffect(() => {\n const checkMobile = () => {\n setIsMobile(window.innerWidth <= collapseScreenSize)\n }\n checkMobile()\n window.addEventListener(\"resize\", checkMobile)\n return () => window.removeEventListener(\"resize\", checkMobile)\n }, [collapseScreenSize])\n\n const toggleSidebar = React.useCallback(() => {\n if (isMobile) {\n setSidebarMobileOpen((prev) => !prev)\n } else {\n setSidebarCollapsed((prev) => !prev)\n }\n }, [isMobile])\n\n const openSidebar = React.useCallback(() => {\n if (isMobile) setSidebarMobileOpen(true)\n else setSidebarCollapsed(false)\n }, [isMobile])\n\n const closeSidebar = React.useCallback(() => {\n if (isMobile) setSidebarMobileOpen(false)\n else setSidebarCollapsed(true)\n }, [isMobile])\n\n const closeMobileSidebar = React.useCallback(() => {\n if (isMobile) setSidebarMobileOpen(false)\n }, [isMobile])\n\n const toggleControlSidebar = React.useCallback(() => {\n setControlSidebarOpen((prev) => !prev)\n }, [])\n\n const value: AdminLTELayoutContextValue = {\n skin,\n sidebarCollapsed,\n sidebarMobileOpen,\n isMobile,\n isFixed,\n isBoxed,\n controlSidebarOpen,\n sidebarMini: isSidebarMini,\n setSkin,\n toggleSidebar,\n openSidebar,\n closeSidebar,\n closeMobileSidebar,\n setFixed,\n setBoxed,\n toggleControlSidebar,\n setSidebarMini,\n }\n\n return (\n \n {children}\n \n )\n}\n\nexport type { Skin, AdminLTELayoutState, AdminLTELayoutActions, AdminLTELayoutContextValue }\n", "type": "registry:component" } ], "type": "registry:block" }