{"version":3,"sources":["/home/runner/work/openframe-oss-lib/openframe-oss-lib/openframe-frontend-core/dist/components/ui/file-manager/index.cjs","../../../../src/components/ui/file-manager/file-manager.tsx","../../../../src/components/ui/file-manager/file-manager-action-bar.tsx","../../../../src/components/ui/file-manager/file-manager-breadcrumb.tsx","../../../../src/components/ui/file-manager/file-manager-table.tsx","../../../../src/components/ui/file-manager/file-manager-empty.tsx","../../../../src/components/ui/file-manager/file-manager-table-row.tsx","../../../../src/components/ui/file-manager/file-icon.tsx","../../../../src/components/ui/file-manager/file-manager-context-menu.tsx","../../../../src/components/ui/file-manager/file-manager-skeleton.tsx"],"names":["jsx","jsxs","Copy","Scissors","React","MoreHorizontal","ChevronRight","useState"],"mappings":"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","file":"/home/runner/work/openframe-oss-lib/openframe-oss-lib/openframe-frontend-core/dist/components/ui/file-manager/index.cjs","sourcesContent":[null,"'use client';\n\nimport { useMemo } from 'react';\nimport { cn } from '../../../utils/cn';\nimport { SearchIcon } from '../../icons-v2-generated/interface/search-icon';\nimport { Input } from '../input';\nimport { FileManagerActionBar } from './file-manager-action-bar';\nimport { FileManagerBreadcrumb } from './file-manager-breadcrumb';\nimport { FileManagerTable } from './file-manager-table';\nimport type { FileManagerProps, BreadcrumbItem, FileItem } from './types';\n\nexport function FileManager({\n  files,\n  currentPath,\n  selectedFiles,\n  searchQuery,\n  loading = false,\n  isSearching,\n  showCheckboxes = true,\n  showSearch = true,\n  showActions = true,\n  canPaste = false,\n  disableSearch = false,\n  resultsCount,\n  onNavigate,\n  onBreadcrumbClick,\n  onSearch,\n  onSelectFile,\n  onSelectAll,\n  onFileAction,\n  onFileClick,\n  onFolderOpen,\n  className,\n}: FileManagerProps) {\n  const breadcrumbItems = useMemo((): BreadcrumbItem[] => {\n    const items: BreadcrumbItem[] = [];\n\n    items.push({ label: 'Root', path: '' });\n\n    if (!currentPath || currentPath === '' || currentPath === '/') {\n      return items;\n    }\n\n    const isWindowsPath = currentPath.includes('\\\\') || /^[A-Za-z]:/.test(currentPath);\n    const separator = isWindowsPath ? '\\\\' : '/';\n\n    const parts = currentPath.split(separator).filter(Boolean);\n\n    let startIndex = 0;\n    if (isWindowsPath && parts.length > 0) {\n      const driveMatch = parts[0].match(/^([A-Za-z]:)/);\n      if (driveMatch) {\n        items.push({\n          label: driveMatch[1],\n          path: driveMatch[1] + separator,\n        });\n        if (parts[0] === driveMatch[1]) {\n          startIndex = 1;\n        } else {\n          parts[0] = parts[0].substring(driveMatch[1].length);\n        }\n      }\n    }\n\n    let accumulatedPath = '';\n    if (isWindowsPath && items.length > 1) {\n      accumulatedPath = items[items.length - 1].path;\n    }\n\n    for (let i = startIndex; i < parts.length; i++) {\n      const part = parts[i];\n      if (!part) continue;\n\n      if (isWindowsPath) {\n        accumulatedPath = accumulatedPath.endsWith(separator)\n          ? accumulatedPath + part\n          : accumulatedPath + separator + part;\n      } else {\n        accumulatedPath = accumulatedPath === '' || accumulatedPath === '/' ? '/' + part : accumulatedPath + '/' + part;\n      }\n\n      items.push({\n        label: part,\n        path: accumulatedPath,\n      });\n    }\n\n    return items;\n  }, [currentPath]);\n\n  const handleBreadcrumbClick = (path: string) => {\n    onBreadcrumbClick?.(path);\n    onNavigate?.(path);\n  };\n\n  const handleFolderOpen = (file: FileItem) => {\n    let newPath: string;\n\n    if (!currentPath || currentPath === '') {\n      if (file.name && /^[A-Za-z]:/.test(file.name)) {\n        newPath = file.name + (file.name.endsWith('\\\\') ? '' : '\\\\');\n      } else {\n        newPath = file.name;\n      }\n    } else {\n      const separator = currentPath.includes('\\\\') ? '\\\\' : '/';\n\n      if (currentPath === '/') {\n        newPath = '/' + file.name;\n      } else if (currentPath.endsWith(separator)) {\n        newPath = currentPath + file.name;\n      } else {\n        newPath = currentPath + separator + file.name;\n      }\n    }\n\n    onFolderOpen?.(file);\n    onNavigate?.(newPath);\n  };\n\n  const handleSelectAll = (selected: boolean) => {\n    onSelectAll?.(selected);\n  };\n\n  const handleSelectFile = (fileId: string, selected: boolean) => {\n    onSelectFile?.(fileId, selected);\n  };\n\n  return (\n    <div className={cn('flex h-full flex-col bg-ods-bg', className)}>\n      <div className=\"flex min-h-0 flex-1 flex-col space-y-6 py-2\">\n        <div className=\"mb-4 flex flex-col justify-between gap-4 md:flex-row\">\n          <FileManagerBreadcrumb items={breadcrumbItems} onItemClick={handleBreadcrumbClick} />\n\n          {showActions && (\n            <FileManagerActionBar\n              canPaste={canPaste}\n              hasSelection={selectedFiles.length > 0}\n              onNewFolder={() => onFileAction?.('new-folder')}\n              onPaste={() => onFileAction?.('paste')}\n              onCopy={() => onFileAction?.('copy')}\n              onCut={() => onFileAction?.('cut')}\n              onUpload={() => onFileAction?.('upload')}\n              onSelectAll={() => handleSelectAll(true)}\n            />\n          )}\n        </div>\n\n        {showSearch && (\n          <Input\n            value={searchQuery}\n            onChange={e => onSearch?.(e.target.value)}\n            placeholder=\"Search...\"\n            disabled={disableSearch}\n            startAdornment={<SearchIcon />}\n            loading={isSearching}\n          />\n        )}\n\n        <div className=\"min-h-0 flex-1\">\n          <FileManagerTable\n            files={files}\n            selectedFiles={selectedFiles}\n            resultsCount={resultsCount || files.length}\n            showCheckboxes={showCheckboxes}\n            loading={loading}\n            isSearchResult={!!searchQuery}\n            onSelectFile={handleSelectFile}\n            onSelectAll={handleSelectAll}\n            onFileClick={onFileClick}\n            onFolderOpen={handleFolderOpen}\n            onFileAction={onFileAction}\n          />\n        </div>\n      </div>\n    </div>\n  );\n}\n","'use client';\n\nimport { FolderPlus, Clipboard, Upload, CheckSquare, Copy, Scissors } from 'lucide-react';\nimport { cn } from '../../../utils/cn';\nimport { Button } from '../button';\nimport type { FileManagerActionBarProps } from './types';\n\nexport function FileManagerActionBar({\n  canPaste = false,\n  hasSelection = false,\n  onNewFolder,\n  onPaste,\n  onCopy,\n  onCut,\n  onUpload,\n  onSelectAll,\n  className,\n}: FileManagerActionBarProps) {\n  return (\n    <div className={cn('flex flex-wrap items-center gap-4 md:justify-end', className)}>\n      <Button variant=\"outline\" size=\"small-legacy\" onClick={onNewFolder} leftIcon={<FolderPlus className=\"h-4 w-4\" />}>\n        New Folder\n      </Button>\n\n      <Button\n        variant=\"outline\"\n        size=\"small-legacy\"\n        onClick={onCopy}\n        disabled={!hasSelection}\n        leftIcon={<Copy className=\"h-4 w-4\" />}\n      >\n        Copy\n      </Button>\n\n      <Button\n        variant=\"outline\"\n        size=\"small-legacy\"\n        onClick={onCut}\n        disabled={!hasSelection}\n        leftIcon={<Scissors className=\"h-4 w-4\" />}\n      >\n        Cut\n      </Button>\n\n      <Button\n        variant=\"outline\"\n        size=\"small-legacy\"\n        onClick={onPaste}\n        disabled={!canPaste}\n        leftIcon={<Clipboard className=\"h-4 w-4\" />}\n      >\n        Paste\n      </Button>\n\n      <Button variant=\"outline\" size=\"small-legacy\" onClick={onUpload} leftIcon={<Upload className=\"h-4 w-4\" />}>\n        Upload\n      </Button>\n\n      <Button\n        variant=\"outline\"\n        size=\"small-legacy\"\n        onClick={onSelectAll}\n        leftIcon={<CheckSquare className=\"h-4 w-4\" />}\n      >\n        Select All\n      </Button>\n    </div>\n  );\n}\n","'use client';\n\nimport { ChevronRight } from 'lucide-react';\nimport React from 'react';\nimport { cn } from '../../../utils/cn';\nimport type { FileManagerBreadcrumbProps } from './types';\n\nexport function FileManagerBreadcrumb({ items, onItemClick, className }: FileManagerBreadcrumbProps) {\n  return (\n    <nav className={cn('flex flex-wrap items-center gap-x-1 gap-y-1 break-words text-h6', className)}>\n      {items.map((item, index) => (\n        <React.Fragment key={item.path}>\n          {index > 0 && <ChevronRight className=\"h-4 w-4 flex-shrink-0 text-ods-text-tertiary\" />}\n          <button\n            onClick={() => onItemClick?.(item.path)}\n            className={cn(\n              'shrink-0 rounded px-1 py-0.5 transition-colors hover:bg-ods-bg-hover',\n              'break-all text-left text-ods-text-primary hover:text-ods-accent',\n              index === items.length - 1 && 'font-medium',\n            )}\n          >\n            {item.label}\n          </button>\n        </React.Fragment>\n      ))}\n    </nav>\n  );\n}\n","'use client';\n\nimport { useLayoutEffect, useMemo, useRef, useState } from 'react';\nimport { cn } from '../../../utils/cn';\nimport { Checkbox } from '../checkbox';\nimport { Skeleton } from '../skeleton';\nimport { FileManagerEmpty } from './file-manager-empty';\nimport { FileManagerTableRow } from './file-manager-table-row';\nimport type { FileManagerTableProps } from './types';\n\nexport function FileManagerTable({\n  files,\n  selectedFiles,\n  showCheckboxes = true,\n  loading = false,\n  isSearchResult = false,\n  onSelectFile,\n  onSelectAll,\n  onFileClick,\n  onFolderOpen,\n  onFileAction,\n  className,\n}: FileManagerTableProps) {\n  const allSelected = useMemo(() => {\n    return files.length > 0 && selectedFiles.length === files.length;\n  }, [files.length, selectedFiles.length]);\n\n  const someSelected = useMemo(() => {\n    return selectedFiles.length > 0 && selectedFiles.length < files.length;\n  }, [files.length, selectedFiles.length]);\n\n  const containerRef = useRef<HTMLDivElement>(null);\n  const [measuredHeight, setTableHeight] = useState<number | null>(null);\n  // There is nothing to size while the skeleton or the empty state is showing,\n  // and that is knowable during render — masking it here means the effect no\n  // longer has to write `null` back into state (a second render pass) every\n  // time a fetch starts or a filter empties the list.\n  const tableHeight = loading || files.length === 0 ? null : measuredHeight;\n\n  useLayoutEffect(() => {\n    if (loading || files.length === 0) return undefined;\n\n    const handleResize = () => {\n      const node = containerRef.current;\n      if (!node) return;\n      const rect = node.getBoundingClientRect();\n      const availableHeight = window.innerHeight - rect.top;\n      setTableHeight(availableHeight > 0 ? availableHeight : null);\n    };\n\n    handleResize();\n\n    window.addEventListener('resize', handleResize);\n    window.addEventListener('scroll', handleResize, true);\n\n    const resizeObserver = new ResizeObserver(handleResize);\n    const parent = containerRef.current?.parentElement;\n    if (parent) {\n      resizeObserver.observe(parent);\n    } else if (containerRef.current) {\n      resizeObserver.observe(containerRef.current);\n    }\n\n    return () => {\n      window.removeEventListener('resize', handleResize);\n      window.removeEventListener('scroll', handleResize, true);\n      resizeObserver.disconnect();\n    };\n  }, [loading, files.length]);\n\n  const handleSelectAll = (checked: boolean) => {\n    onSelectAll?.(checked);\n  };\n\n  if (loading) {\n    const skeletonRows = 8;\n\n    return (\n      <div className={cn('flex flex-col rounded-lg border border-ods-border bg-ods-bg', className)}>\n        {/* Table header */}\n        <div className=\"flex h-12 items-center rounded-t-lg border-b border-ods-border bg-ods-bg-surface px-4\">\n          {showCheckboxes && (\n            <div className=\"mr-4\">\n              <Skeleton className=\"h-5 w-5 rounded\" />\n            </div>\n          )}\n\n          <div className=\"flex min-w-0 flex-1 items-center gap-3 text-ods-text-secondary text-h5\">NAME</div>\n\n          <div className=\"w-24 shrink-0 pr-4 text-ods-text-secondary text-h5\">SIZE</div>\n\n          <div className=\"w-36 shrink-0 pl-4 text-ods-text-secondary text-h5\">EDITED</div>\n\n          <div className=\"flex w-48 shrink-0 justify-end pl-4\">{/* Space for action buttons */}</div>\n        </div>\n\n        {/* Skeleton rows */}\n        <div className=\"flex-1 divide-y divide-ods-border overflow-auto rounded-b-lg\">\n          {Array.from({ length: skeletonRows }).map((_, idx) => (\n            <div key={idx} className=\"group flex h-16 items-center border-ods-border bg-ods-card px-4\">\n              {showCheckboxes && (\n                <div className=\"mr-4\">\n                  <Skeleton className=\"h-5 w-5 rounded\" />\n                </div>\n              )}\n\n              {/* File icon and name column */}\n              <div className=\"flex min-w-0 flex-1 items-center gap-3\">\n                <Skeleton className=\"h-6 w-6 rounded\" />\n                <div className=\"flex min-w-0 flex-col\">\n                  <Skeleton className=\"h-4 w-32\" />\n                  {isSearchResult && <Skeleton className=\"mt-1 h-3 w-48\" />}\n                </div>\n              </div>\n\n              {/* Size column */}\n              <div className=\"w-24 shrink-0 pr-4\">\n                <Skeleton className=\"h-4 w-16\" />\n              </div>\n\n              {/* Modified date column */}\n              <div className=\"w-36 shrink-0 pl-4\">\n                <Skeleton className=\"h-4 w-24\" />\n              </div>\n\n              {/* Action buttons column */}\n              <div className=\"flex w-48 shrink-0 items-center justify-end gap-1 pl-4\">\n                <Skeleton className=\"h-8 w-8 rounded\" />\n                <Skeleton className=\"h-8 w-8 rounded\" />\n              </div>\n            </div>\n          ))}\n        </div>\n      </div>\n    );\n  }\n\n  if (files.length === 0) {\n    return <FileManagerEmpty />;\n  }\n\n  return (\n    <div\n      ref={containerRef}\n      className={cn('flex flex-col rounded-lg border border-ods-border bg-ods-bg', className)}\n      style={tableHeight ? { height: `${tableHeight}px` } : undefined}\n    >\n      <div className=\"flex h-12 items-center rounded-t-lg border-b border-ods-border bg-ods-bg-surface px-4\">\n        {showCheckboxes && (\n          <div className=\"mr-4\">\n            <Checkbox checked={allSelected || someSelected} onCheckedChange={handleSelectAll} className=\"h-5 w-5\" />\n          </div>\n        )}\n\n        <div className=\"flex min-w-0 flex-1 items-center gap-3 text-ods-text-secondary text-h5\">NAME</div>\n\n        <div className=\"w-24 shrink-0 pr-4 text-ods-text-secondary text-h5\">SIZE</div>\n\n        <div className=\"w-36 shrink-0 pl-4 text-ods-text-secondary text-h5\">EDITED</div>\n\n        <div className=\"flex w-48 shrink-0 justify-end pl-4\">{/* Space for action buttons */}</div>\n      </div>\n\n      <div className=\"flex-1 divide-y divide-ods-border overflow-auto rounded-b-lg\">\n        {files.map(file => (\n          <FileManagerTableRow\n            key={file.id}\n            file={file}\n            isSelected={selectedFiles.includes(file.id)}\n            showCheckbox={showCheckboxes}\n            showPath={isSearchResult}\n            onSelect={selected => onSelectFile?.(file.id, selected)}\n            onClick={() => {\n              if (isSearchResult) {\n                onFileClick?.(file);\n              } else if (file.type === 'folder') {\n                onFolderOpen?.(file);\n              }\n            }}\n            onDoubleClick={() => {\n              if (file.type === 'folder' && !isSearchResult) {\n                onFolderOpen?.(file);\n              }\n            }}\n            onActionClick={action => onFileAction?.(action, file.id)}\n          />\n        ))}\n      </div>\n    </div>\n  );\n}\n","'use client';\n\nimport { FolderOpen } from 'lucide-react';\nimport { cn } from '../../../utils/cn';\nimport { Button } from '../button';\nimport type { FileManagerEmptyProps } from './types';\n\nexport function FileManagerEmpty({\n  message = 'No files or folders found',\n  description = 'This folder is empty. Create a new folder or upload files to get started.',\n  action,\n  className,\n}: FileManagerEmptyProps) {\n  return (\n    <div className={cn('flex flex-col items-center justify-center px-4 py-20', className)}>\n      <div className=\"mb-6 rounded-full bg-ods-bg-surface p-4\">\n        <FolderOpen className=\"h-12 w-12 text-ods-text-tertiary\" />\n      </div>\n\n      <h3 className=\"mb-2 text-ods-text-primary text-h4\">{message}</h3>\n\n      <p className=\"mb-6 max-w-md text-center text-ods-text-secondary text-h6\">{description}</p>\n\n      {action && (\n        <Button variant=\"accent\" size=\"small-legacy\" onClick={action.onClick}>\n          {action.label}\n        </Button>\n      )}\n    </div>\n  );\n}\n","'use client';\n\nimport { ChevronRight, MoreHorizontal } from 'lucide-react';\nimport type React from 'react';\nimport { useState } from 'react';\nimport { cn } from '../../../utils/cn';\nimport { Button } from '../button';\nimport { Checkbox } from '../checkbox';\nimport { FileIcon } from './file-icon';\nimport { FileManagerContextMenu } from './file-manager-context-menu';\nimport type { FileAction, FileManagerTableRowProps } from './types';\n\nexport function FileManagerTableRow({\n  file,\n  isSelected = false,\n  showCheckbox = true,\n  showPath = false,\n  onSelect,\n  onClick,\n  onDoubleClick,\n  onContextMenu,\n  onActionClick,\n  className,\n}: FileManagerTableRowProps) {\n  const [contextMenuOpen, setContextMenuOpen] = useState(false);\n\n  const handleRowClick = (e: React.MouseEvent) => {\n    // Don't trigger row click if clicking on interactive elements\n    if ((e.target as HTMLElement).closest('[data-no-row-click]')) {\n      return;\n    }\n    onClick?.();\n  };\n\n  const handleCheckboxChange = (checked: boolean) => {\n    onSelect?.(checked);\n  };\n\n  const handleContextAction = (action: FileAction) => {\n    onActionClick?.(action);\n    setContextMenuOpen(false);\n  };\n\n  const fileExtension = file.type === 'file' ? file.name.split('.').pop() : undefined;\n\n  return (\n    <div\n      className={cn(\n        'group flex h-16 items-center border-ods-border bg-ods-card px-4',\n        'cursor-pointer transition-colors hover:bg-ods-bg-hover',\n        isSelected && 'bg-ods-bg-surface',\n        className,\n      )}\n      onClick={handleRowClick}\n      onDoubleClick={onDoubleClick}\n      onContextMenu={e => {\n        e.preventDefault();\n        onContextMenu?.(e);\n      }}\n    >\n      {showCheckbox && (\n        <div className=\"mr-4\" data-no-row-click>\n          <Checkbox checked={isSelected} onCheckedChange={handleCheckboxChange} className=\"h-5 w-5\" />\n        </div>\n      )}\n\n      <div className=\"flex min-w-0 flex-1 items-center gap-3\">\n        <FileIcon type={file.type} extension={fileExtension} size=\"md\" />\n        <div className=\"flex min-w-0 flex-col\">\n          <span className=\"truncate text-ods-text-primary text-h6\" title={file.name}>\n            {file.name}\n          </span>\n          {showPath && file.path && (\n            <span className=\"truncate text-ods-text-secondary text-h6\" title={file.path}>\n              {file.path}\n            </span>\n          )}\n        </div>\n      </div>\n\n      <div className=\"w-24 shrink-0 pr-4 text-ods-text-secondary text-h6\">{file.size || ''}</div>\n\n      <div className=\"w-36 shrink-0 pl-4 text-ods-text-secondary text-h6\">{file.modified}</div>\n\n      <div className=\"flex w-48 shrink-0 items-center justify-end gap-1 pl-4\" data-no-row-click>\n        <FileManagerContextMenu\n          open={contextMenuOpen}\n          onOpenChange={setContextMenuOpen}\n          onAction={handleContextAction}\n          fileType={file.type}\n          trigger={\n            <Button\n              variant=\"transparent\"\n              size=\"small-legacy\"\n              className=\"h-8 w-8 p-0 opacity-0 transition-opacity group-hover:opacity-100\"\n              onClick={e => {\n                e.stopPropagation();\n              }}\n            >\n              <MoreHorizontal className=\"h-4 w-4\" />\n            </Button>\n          }\n        />\n\n        {file.type === 'folder' ? (\n          <Button\n            variant=\"transparent\"\n            size=\"small-legacy\"\n            className=\"h-8 w-8 p-0\"\n            onClick={e => {\n              e.stopPropagation();\n              onDoubleClick?.();\n            }}\n          >\n            <ChevronRight className=\"h-4 w-4\" />\n          </Button>\n        ) : (\n          <div className=\"w-8\" /> /* Space to maintain alignment when no chevron */\n        )}\n      </div>\n    </div>\n  );\n}\n","'use client';\n\nimport { Folder, File, FileText, Image, FileVideo, FileAudio, FileCode, FileArchive } from 'lucide-react';\nimport { cn } from '../../../utils/cn';\nimport type { FileIconProps } from './types';\n\nconst sizeMap = {\n  sm: 'h-4 w-4',\n  md: 'h-5 w-5',\n  lg: 'h-6 w-6',\n};\n\nconst getFileIcon = (extension?: string) => {\n  if (!extension) return File;\n\n  const ext = extension.toLowerCase();\n\n  // Document files\n  if (['txt', 'doc', 'docx', 'pdf', 'rtf'].includes(ext)) return FileText;\n\n  // Image files\n  if (['jpg', 'jpeg', 'png', 'gif', 'svg', 'webp', 'bmp'].includes(ext)) return Image;\n\n  // Video files\n  if (['mp4', 'avi', 'mov', 'wmv', 'flv', 'mkv'].includes(ext)) return FileVideo;\n\n  // Audio files\n  if (['mp3', 'wav', 'flac', 'aac', 'ogg', 'wma'].includes(ext)) return FileAudio;\n\n  // Code files\n  if (['js', 'ts', 'jsx', 'tsx', 'py', 'java', 'c', 'cpp', 'cs', 'html', 'css', 'json', 'xml'].includes(ext))\n    return FileCode;\n\n  // Archive files\n  if (['zip', 'rar', '7z', 'tar', 'gz', 'bz2'].includes(ext)) return FileArchive;\n\n  return File;\n};\n\nexport function FileIcon({ type, extension, className, size = 'md' }: FileIconProps) {\n  const Icon = type === 'folder' ? Folder : getFileIcon(extension);\n\n  return (\n    <Icon className={cn(sizeMap[size], type === 'folder' ? 'text-ods-accent' : 'text-ods-text-secondary', className)} />\n  );\n}\n","'use client';\n\nimport { Download, Copy, Edit2, Scissors, Trash2, MoreHorizontal } from 'lucide-react';\nimport React from 'react';\nimport { cn } from '../../../utils/cn';\nimport { Button } from '../button';\nimport {\n  DropdownMenu,\n  DropdownMenuContent,\n  DropdownMenuItem,\n  DropdownMenuSeparator,\n  DropdownMenuTrigger,\n} from '../dropdown-menu';\nimport type { FileManagerContextMenuProps } from './types';\n\nexport function FileManagerContextMenu({\n  open,\n  onOpenChange,\n  onAction,\n  fileType = 'file',\n  hasSelection = false,\n  trigger,\n  className,\n}: FileManagerContextMenuProps) {\n  const menuItems = [\n    {\n      action: 'download' as const,\n      label: 'Download',\n      icon: Download,\n      show: fileType === 'file' || hasSelection,\n    },\n    {\n      action: 'copy' as const,\n      label: 'Copy',\n      icon: Copy,\n      show: true,\n    },\n    {\n      action: 'rename' as const,\n      label: 'Rename',\n      icon: Edit2,\n      show: !hasSelection,\n    },\n    {\n      action: 'cut' as const,\n      label: 'Cut',\n      icon: Scissors,\n      show: true,\n    },\n    {\n      action: 'delete' as const,\n      label: 'Delete',\n      icon: Trash2,\n      show: true,\n      separator: true,\n    },\n  ];\n\n  const visibleItems = menuItems.filter(item => item.show);\n\n  return (\n    <DropdownMenu open={open} onOpenChange={onOpenChange}>\n      <DropdownMenuTrigger asChild>\n        {trigger || (\n          <Button variant=\"transparent\" size=\"small-legacy\" className=\"h-8 w-8 p-0\">\n            <MoreHorizontal className=\"h-4 w-4\" />\n          </Button>\n        )}\n      </DropdownMenuTrigger>\n      <DropdownMenuContent align=\"end\" className={cn('w-56', className)} onClick={e => e.stopPropagation()}>\n        {visibleItems.map((item, index) => (\n          <React.Fragment key={item.action}>\n            {item.separator && index > 0 && <DropdownMenuSeparator />}\n            <DropdownMenuItem\n              onClick={e => {\n                e.stopPropagation();\n                onAction(item.action);\n              }}\n              className=\"cursor-pointer\"\n            >\n              <item.icon className=\"mr-3 h-4 w-4\" />\n              <span>{item.label}</span>\n            </DropdownMenuItem>\n          </React.Fragment>\n        ))}\n      </DropdownMenuContent>\n    </DropdownMenu>\n  );\n}\n","'use client';\n\nimport { Skeleton } from '../skeleton';\n\ninterface FileManagerSkeletonProps {\n  rows?: number;\n  showSearch?: boolean;\n  showActions?: boolean;\n}\n\nexport function FileManagerSkeleton({ rows = 8, showSearch = true, showActions = true }: FileManagerSkeletonProps) {\n  const rowPlaceholders = Array.from({ length: rows });\n\n  return (\n    <div className=\"flex h-full flex-col bg-ods-bg\">\n      <div className=\"flex min-h-0 flex-1 flex-col space-y-6 py-6\">\n        {/* Breadcrumb and Action Bar */}\n        <div className=\"flex flex-wrap items-start justify-between gap-4\">\n          {/* Breadcrumb skeleton */}\n          <div className=\"flex min-w-0 flex-1 items-center gap-2\">\n            <Skeleton className=\"h-5 w-12\" />\n            <Skeleton className=\"h-4 w-4 rounded-full\" />\n            <Skeleton className=\"h-5 w-20\" />\n            <Skeleton className=\"h-4 w-4 rounded-full\" />\n            <Skeleton className=\"h-5 w-24\" />\n          </div>\n\n          {/* Action buttons skeleton */}\n          {showActions && (\n            <div className=\"flex flex-shrink-0 items-center gap-2\">\n              <Skeleton className=\"h-9 w-24\" />\n              <Skeleton className=\"h-9 w-20\" />\n              <Skeleton className=\"h-9 w-20\" />\n              <Skeleton className=\"h-9 w-28\" />\n            </div>\n          )}\n        </div>\n\n        {/* Search bar skeleton */}\n        {showSearch && <Skeleton className=\"h-10 w-full rounded-lg\" />}\n\n        {/* Table skeleton */}\n        <div className=\"min-h-0 flex-1\">\n          <div className=\"flex flex-col rounded-lg border border-ods-border bg-ods-bg\">\n            {/* Table header */}\n            <div className=\"flex h-12 items-center rounded-t-lg border-b border-ods-border bg-ods-bg-surface px-4\">\n              {/* Checkbox */}\n              <div className=\"mr-4\">\n                <Skeleton className=\"h-5 w-5 rounded\" />\n              </div>\n\n              {/* Column headers */}\n              <div className=\"flex min-w-0 flex-1 items-center gap-3 text-ods-text-secondary text-h5\">NAME</div>\n\n              <div className=\"w-24 shrink-0 pr-4 text-ods-text-secondary text-h5\">SIZE</div>\n\n              <div className=\"w-36 shrink-0 pl-4 text-ods-text-secondary text-h5\">EDITED</div>\n\n              <div className=\"flex w-48 shrink-0 justify-end pl-4\">{/* Empty space for actions */}</div>\n            </div>\n\n            {/* Table rows */}\n            <div className=\"min-h-0 flex-1 divide-y divide-ods-border overflow-auto rounded-b-lg\">\n              {rowPlaceholders.map((_, idx) => (\n                <div key={idx} className=\"flex h-16 items-center border-ods-border bg-ods-card px-4\">\n                  {/* Checkbox */}\n                  <div className=\"mr-4\">\n                    <Skeleton className=\"h-5 w-5 rounded\" />\n                  </div>\n\n                  {/* File icon and name */}\n                  <div className=\"flex min-w-0 flex-1 items-center gap-3\">\n                    <Skeleton className=\"h-6 w-6 rounded\" />\n                    <div className=\"flex min-w-0 flex-col\">\n                      <Skeleton className=\"h-4 w-32\" />\n                    </div>\n                  </div>\n\n                  {/* Size */}\n                  <div className=\"w-24 shrink-0 pr-4\">\n                    <Skeleton className=\"h-4 w-16\" />\n                  </div>\n\n                  {/* Modified date */}\n                  <div className=\"w-36 shrink-0 pl-4\">\n                    <Skeleton className=\"h-4 w-24\" />\n                  </div>\n\n                  {/* Action buttons */}\n                  <div className=\"flex w-48 shrink-0 items-center justify-end gap-1 pl-4\">\n                    <Skeleton className=\"h-8 w-8 rounded\" />\n                    <Skeleton className=\"h-8 w-8 rounded\" />\n                  </div>\n                </div>\n              ))}\n            </div>\n          </div>\n        </div>\n      </div>\n    </div>\n  );\n}\n"]}