{"version":3,"sources":["../../../layouts/simple/index.tsx"],"sourcesContent":["\"use client\";\nimport React, { useState, useMemo, useEffect } from 'react';\nimport { Menu } from 'lucide-react';\nimport { cn } from '../../utils/ui';\nimport { UserMenus } from './user-menu';\nimport { MobileMenu } from './mobile-menu';\nimport type { MenuItem, UserMenuSection } from './types';\n\ninterface LayoutProps {\n  logo?: {\n    src?: string;\n    link?: string;\n  };\n  user?: {\n    menuSections: UserMenuSection[];\n    trigger?: React.ReactNode;\n  };\n  left?: {\n    menus: MenuItem[];\n  };\n  right?: {\n    menus: MenuItem[];\n  };\n  sidebar?: {\n    title: string;\n    content: React.ReactNode;\n  };\n  footer?: {\n    menus: MenuItem[];\n    content?: string;\n  };\n  classNames?: {\n    header?: {\n      wrapper: string;\n      logo?: string;\n      left?: {\n        nav?: string;\n        link?: string;\n      };\n      right?: {\n        nav?: string;\n        link?: string;\n      };\n    };\n    content?: {\n      wrapper?: string;\n      bottom?: string;\n    };\n    footer?: {\n      wrapper?: string;\n      nav?: string;\n      link?: string;\n    };\n  };\n  loading?: boolean;\n  children?: React.ReactNode;\n  aslink: React.ElementType;\n}\n\nexport default function SimpleLayout(props: LayoutProps) {\n  const { logo, user, left, right, sidebar, footer, classNames, loading, children, aslink } = props;\n\n  const [mobileMenuOpen, setMobileMenuOpen] = useState(false);\n  const [isMobile, setIsMobile] = useState(false);\n\n  const LinkComponent = aslink ?? 'button';\n\n  useEffect(() => {\n    const handleResize = () => {\n      setIsMobile(window.innerWidth < 768);\n    };\n    handleResize();\n    window.addEventListener('resize', handleResize);\n    return () => window.removeEventListener('resize', handleResize);\n  }, []);\n\n  const toggleMobileMenu = () => setMobileMenuOpen(!mobileMenuOpen);\n\n  const leftMenus = left?.menus ?? [];\n  const rightMenus = right?.menus ?? [];\n  const topMenus = [...leftMenus, ...rightMenus];\n  const userMenuSections = user?.menuSections ?? [];\n  const footerMenus = footer?.menus ?? [];\n\n  return (\n    <div className=\"flex flex-col min-h-screen\">\n      {/* Header */}\n      <header\n        className={cn(\n          'px-4 py-2 flex items-center justify-between bg-gray-100 border-b border-gray-300',\n          classNames?.header?.wrapper,\n        )}\n      >\n        <div className=\"flex items-center space-x-4\">\n          {sidebar && (\n            <button\n              className=\"bg-transparent border-gray-400 hover:border-gray-500\"\n              onClick={() => {\n                /* open sidebar */\n              }}\n            >\n              {/* icon */}\n            </button>\n          )}\n          {logo && (\n            <div className={cn('_logo')}>\n              <LinkComponent to={logo.link ?? '/'} href={logo.link ?? '/'}>\n                <img src={logo.src} alt=\"Logo\" className={cn('h-10', classNames?.header?.logo)} />\n              </LinkComponent>\n            </div>\n          )}\n\n          {/* Left Menus */}\n          <nav className={cn('flex space-x-4 items-center', classNames?.header?.left?.nav)}>\n            {leftMenus.map((item) =>\n              item.link ? (\n                <LinkComponent\n                  key={item.label}\n                  to={item.link}\n                  href={item.link}\n                  className={cn(\n                    'text-left text-secondary visited:text-secondary hover:text-primary cursor-pointer no-underline',\n                    classNames?.header?.left?.link,\n                    item.className,\n                    item.title || !isMobile ? 'inline-block' : 'hidden',\n                  )}\n                >\n                  {item.label}\n                </LinkComponent>\n              ) : (\n                <button\n                  key={item.label}\n                  onClick={item.action}\n                  className={cn(\n                    'text-left text-secondary visited:text-secondary hover:text-primary cursor-pointer no-underline',\n                    classNames?.header?.left?.link,\n                    item.className,\n                    item.title || !isMobile ? 'inline-block' : 'hidden',\n                  )}\n                >\n                  {item.label}\n                </button>\n              ),\n            )}\n          </nav>\n        </div>\n\n        {/* Right menus */}\n        <nav className={cn('hidden md:flex space-x-4 items-center', classNames?.header?.right?.nav)}>\n          {rightMenus.map((item) =>\n            item.link ? (\n              <LinkComponent\n                key={item.label}\n                to={item.link}\n                href={item.link}\n                className={cn(\n                  'text-left text-secondary visited:text-secondary hover:text-primary cursor-pointer no-underline',\n                  classNames?.header?.right?.link,\n                  item.className,\n                )}\n              >\n                {item.label}\n              </LinkComponent>\n            ) : (\n              <button\n                key={item.label}\n                onClick={item.action}\n                className={cn(\n                  'text-left text-secondary visited:text-secondary hover:text-primary cursor-pointer no-underline',\n                  classNames?.header?.right?.link,\n                  item.className,\n                )}\n              >\n                {item.label}\n              </button>\n            ),\n          )}\n          {userMenuSections.length > 0 && (\n            <UserMenus sections={userMenuSections} trigger={user?.trigger} aslink={aslink} />\n          )}\n        </nav>\n\n        {/* Mobile menu button */}\n        <button onClick={toggleMobileMenu} className=\"md:hidden p-2 text-gray-700 hover:text-primary cursor-pointer\">\n          <Menu className=\"\" />\n        </button>\n      </header>\n\n      {/* Mobile menu */}\n      {isMobile && mobileMenuOpen && (\n        <div className=\"w-full\">\n          <MobileMenu sections={userMenuSections} aslink={aslink} onClick={toggleMobileMenu} />\n        </div>\n      )}\n\n      {/* Main content */}\n      <main className={cn('p-4 flex flex-col flex-1', classNames?.content)}>\n        {!loading && <div className=\"flex items-center justify-center h-full\">{children}</div>}\n        <div className={cn('flex-1', classNames?.content?.bottom)}></div>\n      </main>\n\n      {/* Footer */}\n      {footer && (\n        <footer\n          className={cn(\n            'px-4 py-4 bg-gray-100 border-t border-gray-300 text-sm text-gray-600',\n            classNames?.footer?.wrapper,\n          )}\n        >\n          <nav className={cn('flex flex-wrap justify-center space-x-4', classNames?.footer?.nav)}>\n            {footerMenus.map((item) =>\n              item.link ? (\n                <LinkComponent\n                  key={item.label}\n                  to={item.link}\n                  href={item.link}\n                  className={cn(\n                    'text-secondary hover:text-primary cursor-pointer no-underline',\n                    classNames?.footer?.link,\n                    item.className,\n                  )}\n                >\n                  {item.label}\n                </LinkComponent>\n              ) : (\n                <button\n                  key={item.label}\n                  onClick={item.action}\n                  className={cn(\n                    'text-secondary hover:text-primary cursor-pointer no-underline',\n                    classNames?.footer?.link,\n                    item.className,\n                  )}\n                >\n                  {item.label}\n                </button>\n              ),\n            )}\n          </nav>\n          <div className=\"mt-2 text-center\">{footer?.content}</div>\n        </footer>\n      )}\n    </div>\n  );\n}\n"],"mappings":"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","names":["_a","_b","_c","_d"]}