story-generator/src/components/layouts/DashboardLayout.tsx

47 lines
2.0 KiB
TypeScript

import React from 'react';
import { DashboardSidebar } from './DashboardSidebar';
interface DashboardLayoutProps {
children: React.ReactNode;
}
export function DashboardLayout({ children }: DashboardLayoutProps): JSX.Element {
const [sidebarOpen, setSidebarOpen] = React.useState(false);
return (
<>
<button
onClick={() => setSidebarOpen(!sidebarOpen)}
type="button"
className="inline-flex items-center p-2 mt-2 ms-3 text-sm text-gray-500 rounded-lg sm:hidden hover:bg-gray-100 focus:outline-none focus:ring-2 focus:ring-gray-200 dark:text-gray-400 dark:hover:bg-gray-700 dark:focus:ring-gray-600"
>
<span className="sr-only">Abrir menu</span>
<svg className="w-6 h-6" aria-hidden="true" fill="currentColor" viewBox="0 0 20 20">
<path clipRule="evenodd" fillRule="evenodd" d="M2 4.75A.75.75 0 012.75 4h14.5a.75.75 0 010 1.5H2.75A.75.75 0 012 4.75zm0 10.5a.75.75 0 01.75-.75h7.5a.75.75 0 010 1.5h-7.5a.75.75 0 01-.75-.75zM2 10a.75.75 0 01.75-.75h14.5a.75.75 0 010 1.5H2.75A.75.75 0 012 10z" />
</svg>
</button>
<aside
className={`fixed top-0 left-0 z-40 w-64 h-screen transition-transform ${
sidebarOpen ? 'translate-x-0' : '-translate-x-full'
} sm:translate-x-0`}
>
<div className="h-full px-3 py-4 overflow-y-auto bg-white border-r border-gray-200 dark:bg-gray-800 dark:border-gray-700">
<div className="flex items-center pb-4 mb-4 border-b border-gray-200 dark:border-gray-700">
<img src="/logo.svg" className="h-8 me-3" alt="Logo" />
<span className="self-center text-xl font-semibold whitespace-nowrap dark:text-white">
Leiturama
</span>
</div>
<DashboardSidebar />
</div>
</aside>
<div className="p-4 sm:ml-64">
<div className="p-4 border-2 border-gray-200 border-dashed rounded-lg dark:border-gray-700">
{children}
</div>
</div>
</>
);
}