@anymux/ui-kit 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/ExplorerLayout-CSIJd7N4.js +105 -0
- package/dist/ExplorerLayout-CSIJd7N4.js.map +1 -0
- package/dist/FileBrowserContext-B6jixa2j.js +11 -0
- package/dist/FileBrowserContext-B6jixa2j.js.map +1 -0
- package/dist/calendar-DSlrbHoj.js +761 -0
- package/dist/calendar-DSlrbHoj.js.map +1 -0
- package/dist/calendar.d.ts +3 -0
- package/dist/calendar.js +3 -0
- package/dist/contacts-DQXTZzHc.js +539 -0
- package/dist/contacts-DQXTZzHc.js.map +1 -0
- package/dist/contacts.d.ts +3 -0
- package/dist/contacts.js +3 -0
- package/dist/file-browser-m5atC3kF.js +6755 -0
- package/dist/file-browser-m5atC3kF.js.map +1 -0
- package/dist/file-browser.d.ts +11 -0
- package/dist/file-browser.js +9 -0
- package/dist/git-B55e6LL-.js +561 -0
- package/dist/git-B55e6LL-.js.map +1 -0
- package/dist/git.d.ts +2 -0
- package/dist/git.js +3 -0
- package/dist/iconMap-V4B8P-Uh.js +206 -0
- package/dist/iconMap-V4B8P-Uh.js.map +1 -0
- package/dist/icons-CIsIOZXR.js +0 -0
- package/dist/icons.d.ts +2 -0
- package/dist/icons.js +4 -0
- package/dist/index-BNmNIWBL.d.ts +71 -0
- package/dist/index-BNmNIWBL.d.ts.map +1 -0
- package/dist/index-Bryv_GCG.d.ts +1481 -0
- package/dist/index-Bryv_GCG.d.ts.map +1 -0
- package/dist/index-CuQIjSXs.d.ts +134 -0
- package/dist/index-CuQIjSXs.d.ts.map +1 -0
- package/dist/index-DSu19mq0.d.ts +153 -0
- package/dist/index-DSu19mq0.d.ts.map +1 -0
- package/dist/index-DmsyeHFr.d.ts +149 -0
- package/dist/index-DmsyeHFr.d.ts.map +1 -0
- package/dist/index-DxnJ8FYM.d.ts +17 -0
- package/dist/index-DxnJ8FYM.d.ts.map +1 -0
- package/dist/index-DzfY1Tok.d.ts +32 -0
- package/dist/index-DzfY1Tok.d.ts.map +1 -0
- package/dist/index-Ml_SgiKa.d.ts +1847 -0
- package/dist/index-Ml_SgiKa.d.ts.map +1 -0
- package/dist/index-kHr9udZD.d.ts +1025 -0
- package/dist/index-kHr9udZD.d.ts.map +1 -0
- package/dist/index.d.ts +11 -0
- package/dist/index.js +15 -0
- package/dist/layout-Ca_4r8ka.js +89 -0
- package/dist/layout-Ca_4r8ka.js.map +1 -0
- package/dist/layout.d.ts +2 -0
- package/dist/layout.js +5 -0
- package/dist/list-CxfT6hix.js +6831 -0
- package/dist/list-CxfT6hix.js.map +1 -0
- package/dist/list.d.ts +2 -0
- package/dist/list.js +5 -0
- package/dist/media-DZ292aKK.js +557 -0
- package/dist/media-DZ292aKK.js.map +1 -0
- package/dist/media.d.ts +3 -0
- package/dist/media.js +3 -0
- package/dist/tree-Dd9Z0Aso.js +3351 -0
- package/dist/tree-Dd9Z0Aso.js.map +1 -0
- package/dist/tree.d.ts +2 -0
- package/dist/tree.js +6 -0
- package/dist/types-common-CB3kRek8.d.ts +26 -0
- package/dist/types-common-CB3kRek8.d.ts.map +1 -0
- package/dist/utils-B4fdKKsy.js +3 -0
- package/package.json +109 -0
- package/src/calendar/AgendaView.tsx +37 -0
- package/src/calendar/CalendarBrowser.tsx +90 -0
- package/src/calendar/CalendarModel.ts +142 -0
- package/src/calendar/CalendarSidebar.tsx +81 -0
- package/src/calendar/DayView.tsx +76 -0
- package/src/calendar/EventCard.tsx +51 -0
- package/src/calendar/MockCalendarProvider.ts +98 -0
- package/src/calendar/MonthView.tsx +77 -0
- package/src/calendar/WeekView.tsx +129 -0
- package/src/calendar/index.ts +18 -0
- package/src/calendar/types.ts +25 -0
- package/src/contacts/ContactAvatar.tsx +35 -0
- package/src/contacts/ContactBrowser.tsx +56 -0
- package/src/contacts/ContactCard.tsx +37 -0
- package/src/contacts/ContactDetail.tsx +63 -0
- package/src/contacts/ContactGroupSidebar.tsx +40 -0
- package/src/contacts/ContactList.tsx +32 -0
- package/src/contacts/ContactListModel.ts +120 -0
- package/src/contacts/MockContactProvider.ts +77 -0
- package/src/contacts/index.ts +17 -0
- package/src/contacts/types.ts +26 -0
- package/src/demos/CalendarBrowserDemo.tsx +15 -0
- package/src/demos/ContactBrowserDemo.tsx +15 -0
- package/src/demos/MediaBrowserDemo.tsx +15 -0
- package/src/file-browser/adapters/DocumentViewerAdapter.ts +371 -0
- package/src/file-browser/adapters/FileSystemBridge.ts +168 -0
- package/src/file-browser/adapters/GitBrowserAdapter.ts +546 -0
- package/src/file-browser/adapters/README.md +504 -0
- package/src/file-browser/adapters/index.ts +27 -0
- package/src/file-browser/adapters/types.ts +70 -0
- package/src/file-browser/architecture.md +645 -0
- package/src/file-browser/components/CreateItemDialog.tsx +71 -0
- package/src/file-browser/components/DeleteConfirmDialog.tsx +58 -0
- package/src/file-browser/components/FileBrowser.tsx +473 -0
- package/src/file-browser/components/FileBrowserContent.tsx +209 -0
- package/src/file-browser/components/FileBrowserHeader.tsx +151 -0
- package/src/file-browser/components/FileBrowserToolbar.tsx +145 -0
- package/src/file-browser/components/LeftPanel/LeftPanel.tsx +103 -0
- package/src/file-browser/components/LeftPanel/LeftPanelTabs.tsx +70 -0
- package/src/file-browser/components/LeftPanel/TreeNavigationView.tsx +256 -0
- package/src/file-browser/components/PreviewPane.tsx +146 -0
- package/src/file-browser/components/RightPanel/FilePreview.tsx +219 -0
- package/src/file-browser/components/RightPanel/RightPanel.tsx +186 -0
- package/src/file-browser/components/RightPanel/RightPanelToolbar.tsx +113 -0
- package/src/file-browser/components/UploadProgress.tsx +123 -0
- package/src/file-browser/components/ViewerHost.tsx +208 -0
- package/src/file-browser/components/mobile/MobileNavigation.tsx +227 -0
- package/src/file-browser/components/navigation/NavigationButtons.tsx +171 -0
- package/src/file-browser/components/shared/ErrorBoundary.tsx +116 -0
- package/src/file-browser/components/shared/FileBrowserItem.tsx +195 -0
- package/src/file-browser/components/shared/FileIcon.tsx +169 -0
- package/src/file-browser/components/toolbar/ViewModeToggle.tsx +200 -0
- package/src/file-browser/components/views/ListView/ListView.tsx +484 -0
- package/src/file-browser/components/views/ThumbnailView/ThumbnailView.tsx +323 -0
- package/src/file-browser/components/views/TreeView/TreeNode.tsx +186 -0
- package/src/file-browser/components/views/TreeView/TreeNodeList.tsx +191 -0
- package/src/file-browser/components/views/TreeView/TreeView.tsx +200 -0
- package/src/file-browser/components/views/TreemapView/TreemapView.tsx +339 -0
- package/src/file-browser/context/FileBrowserContext.tsx +13 -0
- package/src/file-browser/examples/BasicUsage.tsx +20 -0
- package/src/file-browser/index.ts +98 -0
- package/src/file-browser/models/FileBrowserModel.ts +623 -0
- package/src/file-browser/models/LeftPanelManagerModel.ts +105 -0
- package/src/file-browser/models/NavigationManagerModel.ts +312 -0
- package/src/file-browser/models/ResponsiveLayoutManagerModel.ts +437 -0
- package/src/file-browser/models/RightPanelManagerModel.ts +190 -0
- package/src/file-browser/models/SelectionManagerModel.ts +252 -0
- package/src/file-browser/models/ToolbarManagerModel.ts +144 -0
- package/src/file-browser/models/UploadModel.ts +147 -0
- package/src/file-browser/models/ViewModeManagerModel.ts +185 -0
- package/src/file-browser/models/ViewerHostModel.ts +44 -0
- package/src/file-browser/models/ui/ListViewUIModel.ts +265 -0
- package/src/file-browser/models/ui/PreviewUIModel.ts +297 -0
- package/src/file-browser/models/ui/ThumbnailViewUIModel.ts +254 -0
- package/src/file-browser/models/ui/TreeViewUIModel.ts +128 -0
- package/src/file-browser/models/ui/TreemapViewUIModel.ts +350 -0
- package/src/file-browser/providers/FileSystemListProvider.ts +552 -0
- package/src/file-browser/providers/FileSystemProvider.ts +401 -0
- package/src/file-browser/providers/FileSystemTreeProvider.ts +231 -0
- package/src/file-browser/providers/GitProvider.ts +337 -0
- package/src/file-browser/providers/GitRepositoryProvider.ts +376 -0
- package/src/file-browser/providers/IFileBrowserProvider.ts +56 -0
- package/src/file-browser/providers/MemoryProvider.ts +303 -0
- package/src/file-browser/providers/index.ts +4 -0
- package/src/file-browser/registry/ViewerRegistry.ts +551 -0
- package/src/file-browser/registry/types.ts +144 -0
- package/src/file-browser/scripts/performanceBenchmark.ts +553 -0
- package/src/file-browser/services/ThumbnailCacheService.ts +128 -0
- package/src/file-browser/tasks.md +537 -0
- package/src/file-browser/types/FileBrowserTypes.ts +126 -0
- package/src/file-browser/types/ProviderTypes.ts +155 -0
- package/src/file-browser/types/UITypes.ts +235 -0
- package/src/file-browser/types/ViewModeTypes.ts +150 -0
- package/src/file-browser/utils/gestures.ts +327 -0
- package/src/file-browser/utils/performance.ts +563 -0
- package/src/file-browser/viewers/ImageViewer.tsx +163 -0
- package/src/file-browser/viewers/ImageViewerModel.ts +79 -0
- package/src/file-browser/viewers/TextViewer.tsx +95 -0
- package/src/file-browser/viewers/UnsupportedFileViewer.tsx +57 -0
- package/src/file-browser/viewers/index.ts +61 -0
- package/src/git/BranchList.tsx +128 -0
- package/src/git/CommitGraph.tsx +239 -0
- package/src/git/CommitList.tsx +258 -0
- package/src/git/DiffViewer.tsx +219 -0
- package/src/git/index.ts +4 -0
- package/src/icons/iconMap.ts +146 -0
- package/src/icons/index.ts +9 -0
- package/src/index.ts +13 -0
- package/src/layout/README.md +307 -0
- package/src/layout/components/ExplorerLayout/ExplorerLayout.tsx +178 -0
- package/src/layout/examples/SimpleExample.tsx +60 -0
- package/src/layout/index.ts +6 -0
- package/src/lib/utils.ts +1 -0
- package/src/list/README.md +303 -0
- package/src/list/architecture.md +807 -0
- package/src/list/components/CalculatedGridView.tsx +252 -0
- package/src/list/components/DragPreview.tsx +102 -0
- package/src/list/components/ListContextMenu.tsx +274 -0
- package/src/list/components/ListItem.tsx +761 -0
- package/src/list/components/ListItems.tsx +919 -0
- package/src/list/components/MasonryView.tsx +241 -0
- package/src/list/components/SearchFilter.tsx +44 -0
- package/src/list/components/TreemapView.tsx +709 -0
- package/src/list/components/ViewSizeControls.tsx +205 -0
- package/src/list/components/ViewTypeSelector.tsx +312 -0
- package/src/list/components/VirtualizedDetailsView.tsx +231 -0
- package/src/list/components/VirtualizedGrid.tsx +164 -0
- package/src/list/components/VirtualizedList.tsx +154 -0
- package/src/list/components/VirtualizedMasonryView.tsx +344 -0
- package/src/list/components/shared/EmptyState.tsx +103 -0
- package/src/list/components/shared/ErrorBoundary.tsx +123 -0
- package/src/list/components/shared/ErrorDisplay.tsx +100 -0
- package/src/list/components/shared/ListLoader.tsx +146 -0
- package/src/list/components/shared/LoadingIndicator.tsx +80 -0
- package/src/list/index.ts +92 -0
- package/src/list/models/ListItemsModel.ts +1301 -0
- package/src/list/models/TreemapModel.ts +204 -0
- package/src/list/providers/ListItemsProvider.ts +313 -0
- package/src/list/providers/TestListProvider.ts +604 -0
- package/src/list/tasks.md +937 -0
- package/src/list/types/ListTypes.ts +178 -0
- package/src/list/utils/BenchmarkLogger.ts +243 -0
- package/src/list/utils/DragDropManager.ts +320 -0
- package/src/list/utils/GridLayoutCalculator.ts +290 -0
- package/src/list/utils/ListAccessibility.ts +367 -0
- package/src/list/utils/ListKeyboard.ts +414 -0
- package/src/list/utils/MasonryLayoutCalculator.ts +302 -0
- package/src/list/utils/MasonryLayoutEngine.ts +401 -0
- package/src/list/utils/__tests__/MasonryLayoutEngine.test.ts +157 -0
- package/src/list/utils/__tests__/VirtualizedMasonryView.test.tsx +251 -0
- package/src/media/AlbumSidebar.tsx +48 -0
- package/src/media/MediaBrowser.tsx +92 -0
- package/src/media/MediaBrowserModel.ts +138 -0
- package/src/media/MediaGrid.tsx +50 -0
- package/src/media/MediaList.tsx +49 -0
- package/src/media/MediaPreview.tsx +63 -0
- package/src/media/MediaTimeline.tsx +38 -0
- package/src/media/MockMediaProvider.ts +70 -0
- package/src/media/index.ts +18 -0
- package/src/media/types.ts +21 -0
- package/src/styles/variables.css +60 -0
- package/src/tree/DEVELOPMENT_SUMMARY.md +170 -0
- package/src/tree/__tests__/TreeModel.test.ts +16 -0
- package/src/tree/architecture.md +530 -0
- package/src/tree/components/Tree.tsx +283 -0
- package/src/tree/components/TreeCheckbox.tsx +147 -0
- package/src/tree/components/TreeContextMenu.tsx +139 -0
- package/src/tree/components/TreeNodeList.tsx +329 -0
- package/src/tree/components/TreeTable.tsx +382 -0
- package/src/tree/index.ts +58 -0
- package/src/tree/models/TreeModel.ts +839 -0
- package/src/tree/providers/SimpleTreeProvider.ts +463 -0
- package/src/tree/providers/TestTreeProvider.ts +946 -0
- package/src/tree/providers/TreeProvider.ts +308 -0
- package/src/tree/tasks.md +2046 -0
- package/src/tree/types/TreeTypes.ts +279 -0
- package/src/tree/utils/SelectionTheme.ts +150 -0
- package/src/tree/utils/logger.ts +203 -0
- package/src/types-common.ts +21 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"git-B55e6LL-.js","names":["index: number","commits: GitCommit[]","lanes: (string | null)[]","nodes: GraphNode[]","sha: string","connections: GraphConnection[]","CommitGraph: React.FC<CommitGraphProps>","col: number","row: number","date: Date","sha: string","message: string","name: string","CommitList: React.FC<CommitListProps>","status: GitDiffEntry['status']","patch: string","type: PatchLine['type']","DiffViewer: React.FC<DiffViewerProps>","BranchList: React.FC<BranchListProps>"],"sources":["../src/git/CommitGraph.tsx","../src/git/CommitList.tsx","../src/git/DiffViewer.tsx","../src/git/BranchList.tsx"],"sourcesContent":["import React from 'react';\nimport type { GitCommit } from '@anymux/file-system';\n\n// ---- Graph Layout Types ----\n\nexport interface GraphNode {\n sha: string;\n column: number;\n /** Paths to draw FROM this node downward to parents */\n connections: GraphConnection[];\n}\n\nexport interface GraphConnection {\n /** Column of the parent commit */\n toColumn: number;\n /** Row index of the parent commit (-1 if parent is off-screen) */\n toRow: number;\n /** Color index for the connection line */\n colorIndex: number;\n}\n\n// ---- Lane Colors ----\n\nconst LANE_COLORS = [\n '#3b82f6', // blue-500\n '#10b981', // emerald-500\n '#f59e0b', // amber-500\n '#ef4444', // red-500\n '#8b5cf6', // violet-500\n '#06b6d4', // cyan-500\n '#ec4899', // pink-500\n '#14b8a6', // teal-500\n '#f97316', // orange-500\n '#6366f1', // indigo-500\n];\n\nfunction laneColor(index: number): string {\n return LANE_COLORS[index % LANE_COLORS.length]!;\n}\n\n// ---- Graph Layout Algorithm ----\n\nexport function computeGraphLayout(commits: GitCommit[]): GraphNode[] {\n const shaToRow = new Map<string, number>();\n commits.forEach((c, i) => shaToRow.set(c.sha, i));\n\n // Lanes: array of active SHAs that occupy each column\n // When a commit is encountered, it takes over the lane reserved for it.\n // When a commit has parents, lanes are allocated for them.\n const lanes: (string | null)[] = [];\n const nodes: GraphNode[] = [];\n\n function findLane(sha: string): number {\n const idx = lanes.indexOf(sha);\n return idx >= 0 ? idx : -1;\n }\n\n function allocateLane(sha: string): number {\n // Reuse empty lane if available\n for (let i = 0; i < lanes.length; i++) {\n if (lanes[i] === null) {\n lanes[i] = sha;\n return i;\n }\n }\n lanes.push(sha);\n return lanes.length - 1;\n }\n\n for (let row = 0; row < commits.length; row++) {\n const commit = commits[row]!;\n let column = findLane(commit.sha);\n\n if (column === -1) {\n // First commit or branch start — allocate new lane\n column = allocateLane(commit.sha);\n }\n\n // Free this lane (will be reassigned to first parent)\n lanes[column] = null;\n\n const connections: GraphConnection[] = [];\n const parents = commit.parents;\n\n for (let pi = 0; pi < parents.length; pi++) {\n const parentSha = parents[pi]!;\n const parentRow = shaToRow.get(parentSha) ?? -1;\n let parentLane = findLane(parentSha);\n\n if (parentLane === -1) {\n if (pi === 0) {\n // First parent: reuse this commit's column for continuity\n lanes[column] = parentSha;\n parentLane = column;\n } else {\n // Merge parent: allocate a new lane\n parentLane = allocateLane(parentSha);\n }\n }\n\n connections.push({\n toColumn: parentLane,\n toRow: parentRow,\n colorIndex: parentLane,\n });\n }\n\n nodes.push({ sha: commit.sha, column, connections });\n }\n\n return nodes;\n}\n\n// ---- Graph Renderer ----\n\nconst ROW_HEIGHT = 40; // Must match commit row height\nconst COL_WIDTH = 14;\nconst NODE_RADIUS = 4;\nconst LEFT_PAD = 8;\n\nexport interface CommitGraphProps {\n nodes: GraphNode[];\n totalRows: number;\n /** SHA of the HEAD commit — its lane will be visually highlighted */\n headSha?: string;\n className?: string;\n}\n\nexport const CommitGraph: React.FC<CommitGraphProps> = ({ nodes, totalRows, headSha, className }) => {\n if (nodes.length === 0) return null;\n\n // Find the column of the HEAD commit for lane highlighting\n const headNode = headSha ? nodes.find((n) => n.sha === headSha) : undefined;\n const headColumn = headNode?.column;\n\n const maxColumn = Math.max(...nodes.map((n) => {\n const connMax = n.connections.length > 0\n ? Math.max(...n.connections.map((c) => c.toColumn))\n : 0;\n return Math.max(n.column, connMax);\n }));\n\n const width = LEFT_PAD + (maxColumn + 1) * COL_WIDTH + NODE_RADIUS + 2;\n\n function x(col: number): number {\n return LEFT_PAD + col * COL_WIDTH + COL_WIDTH / 2;\n }\n\n function y(row: number): number {\n return row * ROW_HEIGHT + ROW_HEIGHT / 2;\n }\n\n return (\n <svg\n className={className}\n width={width}\n height={totalRows * ROW_HEIGHT}\n style={{ position: 'absolute', left: 0, top: 0, pointerEvents: 'none' }}\n >\n {/* Draw connections (lines) first so they're behind nodes */}\n {nodes.map((node, row) =>\n node.connections.map((conn, ci) => {\n const x1 = x(node.column);\n const y1 = y(row);\n const x2 = x(conn.toColumn);\n // If parent is off-screen, draw to bottom\n const y2 = conn.toRow >= 0 ? y(conn.toRow) : totalRows * ROW_HEIGHT;\n const color = laneColor(conn.colorIndex);\n const isHeadLane = headColumn !== undefined && node.column === headColumn && conn.toColumn === headColumn;\n const sw = isHeadLane ? 2.5 : 2;\n\n if (x1 === x2) {\n // Straight vertical line\n return (\n <line\n key={`${node.sha}-${ci}`}\n x1={x1}\n y1={y1}\n x2={x2}\n y2={y2}\n stroke={color}\n strokeWidth={sw}\n strokeLinecap=\"round\"\n opacity={headColumn !== undefined && !isHeadLane ? 0.5 : 1}\n />\n );\n }\n\n // Curved path for branch/merge\n const midY = y1 + ROW_HEIGHT * 0.6;\n return (\n <path\n key={`${node.sha}-${ci}`}\n d={`M ${x1} ${y1} C ${x1} ${midY}, ${x2} ${midY}, ${x2} ${y2}`}\n stroke={color}\n strokeWidth={sw}\n fill=\"none\"\n strokeLinecap=\"round\"\n opacity={headColumn !== undefined && !isHeadLane ? 0.5 : 1}\n />\n );\n })\n )}\n\n {/* Draw active lane lines (continuation between nodes) */}\n\n {/* Draw commit nodes on top */}\n {nodes.map((node, row) => {\n const isHead = node.sha === headSha;\n const isOnHeadLane = headColumn !== undefined && node.column === headColumn;\n const dimmed = headColumn !== undefined && !isOnHeadLane;\n return (\n <circle\n key={node.sha}\n cx={x(node.column)}\n cy={y(row)}\n r={isHead ? NODE_RADIUS + 1.5 : NODE_RADIUS}\n fill={laneColor(node.column)}\n stroke={isHead ? laneColor(node.column) : 'white'}\n strokeWidth={isHead ? 2.5 : 1.5}\n opacity={dimmed ? 0.5 : 1}\n />\n );\n })}\n </svg>\n );\n};\n\n/** Compute the width the graph will take, for adding left padding to commit rows */\nexport function graphWidth(nodes: GraphNode[]): number {\n if (nodes.length === 0) return 0;\n const maxColumn = Math.max(...nodes.map((n) => {\n const connMax = n.connections.length > 0\n ? Math.max(...n.connections.map((c) => c.toColumn))\n : 0;\n return Math.max(n.column, connMax);\n }));\n return LEFT_PAD + (maxColumn + 1) * COL_WIDTH + NODE_RADIUS + 2;\n}\n","import React, { useState, useMemo } from 'react';\nimport {\n GitCommit as GitCommitIcon,\n ChevronDown,\n ChevronRight,\n User,\n Clock,\n Hash,\n FileText,\n} from 'lucide-react';\nimport type { GitCommit } from '@anymux/file-system';\nimport { CommitGraph, computeGraphLayout, graphWidth } from './CommitGraph';\n\n// ---- Helpers ----\n\nfunction formatRelativeTime(date: Date): string {\n const now = Date.now();\n const diffMs = now - new Date(date).getTime();\n const seconds = Math.floor(diffMs / 1000);\n const minutes = Math.floor(seconds / 60);\n const hours = Math.floor(minutes / 60);\n const days = Math.floor(hours / 24);\n const weeks = Math.floor(days / 7);\n const months = Math.floor(days / 30);\n\n if (seconds < 60) return 'just now';\n if (minutes < 60) return `${minutes}m ago`;\n if (hours < 24) return `${hours}h ago`;\n if (days < 7) return `${days}d ago`;\n if (weeks < 5) return `${weeks}w ago`;\n if (months < 12) return `${months}mo ago`;\n return new Date(date).toLocaleDateString();\n}\n\nfunction shortSha(sha: string): string {\n return sha.slice(0, 7);\n}\n\nfunction firstLine(message: string): string {\n return message.split('\\n')[0] ?? message;\n}\n\nfunction authorInitials(name: string): string {\n const parts = name.split(/\\s+/);\n if (parts.length >= 2) {\n return (parts[0]![0]! + parts[parts.length - 1]![0]!).toUpperCase();\n }\n return name.slice(0, 2).toUpperCase();\n}\n\n/** Deterministic color from a string (for avatar backgrounds). */\nfunction authorColor(name: string): string {\n let hash = 0;\n for (let i = 0; i < name.length; i++) {\n hash = name.charCodeAt(i) + ((hash << 5) - hash);\n }\n const colors = [\n 'bg-blue-500',\n 'bg-emerald-500',\n 'bg-violet-500',\n 'bg-amber-500',\n 'bg-rose-500',\n 'bg-cyan-500',\n 'bg-pink-500',\n 'bg-teal-500',\n ];\n return colors[Math.abs(hash) % colors.length]!;\n}\n\n// ---- Types ----\n\nexport interface CommitListProps {\n commits: GitCommit[];\n headSha?: string;\n /** Number of changed files per commit (keyed by sha). Optional enrichment. */\n changedFileCounts?: Record<string, number>;\n onSelectCommit?: (commit: GitCommit) => void;\n selectedSha?: string;\n /** Show commit graph (branch lanes) alongside the list */\n showGraph?: boolean;\n className?: string;\n}\n\n// ---- Commit Row ----\n\ninterface CommitRowProps {\n commit: GitCommit;\n isHead: boolean;\n changedFileCount?: number;\n isSelected: boolean;\n onSelect: () => void;\n}\n\nfunction CommitRow({ commit, isHead, changedFileCount, isSelected, onSelect }: CommitRowProps) {\n const [expanded, setExpanded] = useState(false);\n const message = firstLine(commit.message);\n const hasFullBody = commit.message.includes('\\n');\n\n return (\n <div\n className={`group border-b border-gray-100 dark:border-gray-800 transition-colors ${\n isSelected\n ? 'bg-blue-50 dark:bg-blue-900/20'\n : 'hover:bg-gray-50 dark:hover:bg-gray-800/50'\n }`}\n >\n {/* Main row */}\n <button\n onClick={onSelect}\n className=\"flex items-center gap-2.5 w-full px-3 py-2 text-left\"\n >\n {/* Expand toggle */}\n <button\n onClick={(e) => {\n e.stopPropagation();\n setExpanded(!expanded);\n }}\n className=\"w-4 h-4 flex items-center justify-center text-gray-400 hover:text-gray-600 dark:hover:text-gray-300 flex-shrink-0\"\n >\n {expanded ? (\n <ChevronDown className=\"h-3 w-3\" />\n ) : (\n <ChevronRight className=\"h-3 w-3\" />\n )}\n </button>\n\n {/* Author avatar */}\n <div\n className={`w-6 h-6 rounded-full flex items-center justify-center text-[9px] font-bold text-white flex-shrink-0 ${authorColor(commit.author.name)}`}\n >\n {authorInitials(commit.author.name)}\n </div>\n\n {/* Message + metadata */}\n <div className=\"flex-1 min-w-0\">\n <div className=\"flex items-center gap-2\">\n <span className=\"text-xs font-medium truncate\">\n {message}\n </span>\n {isHead && (\n <span className=\"px-1.5 py-0.5 text-[9px] font-bold bg-yellow-100 text-yellow-800 dark:bg-yellow-900/40 dark:text-yellow-300 rounded flex-shrink-0\">\n HEAD\n </span>\n )}\n </div>\n <div className=\"flex items-center gap-2 mt-0.5\">\n <span className=\"text-[10px] text-gray-500 dark:text-gray-400\">\n {commit.author.name}\n </span>\n <span className=\"text-[10px] text-gray-400 dark:text-gray-500\">\n {formatRelativeTime(commit.author.date)}\n </span>\n </div>\n </div>\n\n {/* SHA badge */}\n <code className=\"text-[10px] font-mono text-gray-400 dark:text-gray-500 bg-gray-100 dark:bg-gray-800 px-1.5 py-0.5 rounded flex-shrink-0\">\n {shortSha(commit.sha)}\n </code>\n </button>\n\n {/* Expanded detail */}\n {expanded && (\n <div className=\"px-3 pb-3 pl-[52px] space-y-2\">\n {/* Full commit message */}\n {hasFullBody && (\n <div className=\"text-xs text-gray-600 dark:text-gray-300 whitespace-pre-wrap bg-gray-50 dark:bg-gray-800/50 rounded p-2 border border-gray-100 dark:border-gray-700\">\n {commit.message}\n </div>\n )}\n\n <div className=\"flex flex-wrap gap-x-4 gap-y-1 text-[10px] text-gray-500 dark:text-gray-400\">\n <div className=\"flex items-center gap-1\">\n <User className=\"h-3 w-3\" />\n <span>{commit.author.name}</span>\n <span className=\"text-gray-400 dark:text-gray-500\"><{commit.author.email}></span>\n </div>\n <div className=\"flex items-center gap-1\">\n <Clock className=\"h-3 w-3\" />\n <span>{new Date(commit.author.date).toLocaleString()}</span>\n </div>\n <div className=\"flex items-center gap-1\">\n <Hash className=\"h-3 w-3\" />\n <code className=\"font-mono\">{commit.sha}</code>\n </div>\n {commit.parents.length > 0 && (\n <div className=\"flex items-center gap-1\">\n <GitCommitIcon className=\"h-3 w-3\" />\n <span>\n {commit.parents.length === 1 ? 'Parent' : 'Parents'}:{' '}\n {commit.parents.map((p) => shortSha(p)).join(', ')}\n </span>\n </div>\n )}\n {changedFileCount !== undefined && (\n <div className=\"flex items-center gap-1\">\n <FileText className=\"h-3 w-3\" />\n <span>{changedFileCount} file{changedFileCount !== 1 ? 's' : ''} changed</span>\n </div>\n )}\n </div>\n </div>\n )}\n </div>\n );\n}\n\n// ---- CommitList Component ----\n\nexport const CommitList: React.FC<CommitListProps> = ({\n commits,\n headSha,\n changedFileCounts,\n onSelectCommit,\n selectedSha,\n showGraph = true,\n className,\n}) => {\n const graphNodes = useMemo(\n () => (showGraph ? computeGraphLayout(commits) : []),\n [commits, showGraph],\n );\n const gWidth = showGraph ? graphWidth(graphNodes) : 0;\n\n if (commits.length === 0) {\n return (\n <div className={`flex items-center justify-center py-8 text-xs text-gray-400 ${className ?? ''}`}>\n No commits found\n </div>\n );\n }\n\n return (\n <div className={`overflow-auto ${className ?? ''}`}>\n <div className=\"relative\" style={{ minWidth: gWidth + 200 }}>\n {showGraph && graphNodes.length > 0 && (\n <CommitGraph\n nodes={graphNodes}\n totalRows={commits.length}\n headSha={headSha}\n />\n )}\n <div style={{ paddingLeft: gWidth }}>\n {commits.map((commit) => (\n <CommitRow\n key={commit.sha}\n commit={commit}\n isHead={commit.sha === headSha}\n changedFileCount={changedFileCounts?.[commit.sha]}\n isSelected={commit.sha === selectedSha}\n onSelect={() => onSelectCommit?.(commit)}\n />\n ))}\n </div>\n </div>\n </div>\n );\n};\n","import React, { useState } from 'react';\nimport {\n ChevronDown,\n ChevronRight,\n Plus,\n Minus,\n FileText,\n FilePlus2,\n FileX2,\n FileEdit,\n ArrowRightLeft,\n} from 'lucide-react';\nimport type { GitDiffEntry } from '@anymux/file-system';\n\n// ---- Helpers ----\n\nfunction statusIcon(status: GitDiffEntry['status']) {\n switch (status) {\n case 'added':\n return <FilePlus2 className=\"h-3.5 w-3.5 text-green-500\" />;\n case 'deleted':\n return <FileX2 className=\"h-3.5 w-3.5 text-red-500\" />;\n case 'modified':\n return <FileEdit className=\"h-3.5 w-3.5 text-yellow-500\" />;\n case 'renamed':\n return <ArrowRightLeft className=\"h-3.5 w-3.5 text-blue-500\" />;\n }\n}\n\nfunction statusLabel(status: GitDiffEntry['status']): string {\n switch (status) {\n case 'added': return 'Added';\n case 'deleted': return 'Deleted';\n case 'modified': return 'Modified';\n case 'renamed': return 'Renamed';\n }\n}\n\nfunction statusBadgeClass(status: GitDiffEntry['status']): string {\n switch (status) {\n case 'added':\n return 'bg-green-100 text-green-700 dark:bg-green-900/30 dark:text-green-400';\n case 'deleted':\n return 'bg-red-100 text-red-700 dark:bg-red-900/30 dark:text-red-400';\n case 'modified':\n return 'bg-yellow-100 text-yellow-700 dark:bg-yellow-900/30 dark:text-yellow-400';\n case 'renamed':\n return 'bg-blue-100 text-blue-700 dark:bg-blue-900/30 dark:text-blue-400';\n }\n}\n\ninterface PatchLine {\n type: 'context' | 'addition' | 'deletion' | 'header';\n content: string;\n}\n\nfunction parsePatch(patch: string): PatchLine[] {\n const lines = patch.split('\\n');\n return lines.map((line) => {\n if (line.startsWith('@@')) {\n return { type: 'header', content: line };\n } else if (line.startsWith('+')) {\n return { type: 'addition', content: line };\n } else if (line.startsWith('-')) {\n return { type: 'deletion', content: line };\n }\n return { type: 'context', content: line };\n });\n}\n\nfunction lineClassName(type: PatchLine['type']): string {\n switch (type) {\n case 'addition':\n return 'bg-green-50 dark:bg-green-900/20 text-green-800 dark:text-green-300';\n case 'deletion':\n return 'bg-red-50 dark:bg-red-900/20 text-red-800 dark:text-red-300';\n case 'header':\n return 'bg-blue-50 dark:bg-blue-900/20 text-blue-600 dark:text-blue-400 font-medium';\n default:\n return 'text-gray-700 dark:text-gray-300';\n }\n}\n\n// ---- Types ----\n\nexport interface DiffViewerProps {\n entries: GitDiffEntry[];\n className?: string;\n}\n\n// ---- File Diff Section ----\n\ninterface FileDiffSectionProps {\n entry: GitDiffEntry;\n defaultExpanded?: boolean;\n}\n\nfunction FileDiffSection({ entry, defaultExpanded = false }: FileDiffSectionProps) {\n const [expanded, setExpanded] = useState(defaultExpanded);\n const patchLines = entry.patch ? parsePatch(entry.patch) : [];\n\n return (\n <div className=\"border border-gray-200 dark:border-gray-700 rounded-lg overflow-hidden\">\n {/* File header */}\n <button\n onClick={() => setExpanded(!expanded)}\n className=\"flex items-center gap-2 w-full px-3 py-2 bg-gray-50 dark:bg-gray-800 hover:bg-gray-100 dark:hover:bg-gray-700/50 transition-colors text-left\"\n >\n <span className=\"flex-shrink-0 text-gray-400\">\n {expanded ? (\n <ChevronDown className=\"h-3.5 w-3.5\" />\n ) : (\n <ChevronRight className=\"h-3.5 w-3.5\" />\n )}\n </span>\n\n {statusIcon(entry.status)}\n\n <span className=\"text-xs font-mono truncate flex-1\">\n {entry.previousPath && entry.status === 'renamed' ? (\n <>\n <span className=\"text-gray-400\">{entry.previousPath}</span>\n <span className=\"text-gray-500 mx-1\">→</span>\n <span>{entry.path}</span>\n </>\n ) : (\n entry.path\n )}\n </span>\n\n <span className={`px-1.5 py-0.5 text-[9px] font-medium rounded flex-shrink-0 ${statusBadgeClass(entry.status)}`}>\n {statusLabel(entry.status)}\n </span>\n\n <div className=\"flex items-center gap-1.5 flex-shrink-0 text-[10px]\">\n {entry.additions > 0 && (\n <span className=\"flex items-center gap-0.5 text-green-600 dark:text-green-400\">\n <Plus className=\"h-2.5 w-2.5\" />\n {entry.additions}\n </span>\n )}\n {entry.deletions > 0 && (\n <span className=\"flex items-center gap-0.5 text-red-600 dark:text-red-400\">\n <Minus className=\"h-2.5 w-2.5\" />\n {entry.deletions}\n </span>\n )}\n </div>\n </button>\n\n {/* Patch content */}\n {expanded && (\n <div className=\"overflow-x-auto\">\n {patchLines.length > 0 ? (\n <pre className=\"text-[11px] leading-[1.6] font-mono\">\n {patchLines.map((line, i) => (\n <div\n key={i}\n className={`px-3 ${lineClassName(line.type)}`}\n >\n {line.content}\n </div>\n ))}\n </pre>\n ) : (\n <div className=\"px-3 py-4 text-center text-xs text-gray-400 italic\">\n No diff content available\n </div>\n )}\n </div>\n )}\n </div>\n );\n}\n\n// ---- DiffViewer Component ----\n\nexport const DiffViewer: React.FC<DiffViewerProps> = ({ entries, className }) => {\n if (entries.length === 0) {\n return (\n <div className={`flex items-center justify-center py-8 text-xs text-gray-400 ${className ?? ''}`}>\n No changes to display\n </div>\n );\n }\n\n const totalAdditions = entries.reduce((sum, e) => sum + e.additions, 0);\n const totalDeletions = entries.reduce((sum, e) => sum + e.deletions, 0);\n\n return (\n <div className={`space-y-2 ${className ?? ''}`}>\n {/* Summary bar */}\n <div className=\"flex items-center gap-3 px-3 py-2 bg-gray-50 dark:bg-gray-800 rounded-lg text-xs text-gray-600 dark:text-gray-300\">\n <div className=\"flex items-center gap-1\">\n <FileText className=\"h-3.5 w-3.5 text-gray-400\" />\n <span className=\"font-medium\">{entries.length}</span>\n <span>file{entries.length !== 1 ? 's' : ''} changed</span>\n </div>\n <div className=\"flex items-center gap-1 text-green-600 dark:text-green-400\">\n <Plus className=\"h-3 w-3\" />\n <span>{totalAdditions}</span>\n </div>\n <div className=\"flex items-center gap-1 text-red-600 dark:text-red-400\">\n <Minus className=\"h-3 w-3\" />\n <span>{totalDeletions}</span>\n </div>\n </div>\n\n {/* File diffs */}\n {entries.map((entry) => (\n <FileDiffSection\n key={entry.path}\n entry={entry}\n defaultExpanded={entries.length <= 5}\n />\n ))}\n </div>\n );\n};\n","import React, { useState, useMemo } from 'react';\nimport {\n GitBranch as GitBranchIcon,\n Search,\n Shield,\n Check,\n} from 'lucide-react';\nimport type { GitBranch } from '@anymux/file-system';\n\n// ---- Types ----\n\nexport interface BranchListProps {\n branches: GitBranch[];\n currentBranch?: string;\n onSelectBranch?: (branch: GitBranch) => void;\n className?: string;\n}\n\n// ---- BranchList Component ----\n\nexport const BranchList: React.FC<BranchListProps> = ({\n branches,\n currentBranch,\n onSelectBranch,\n className,\n}) => {\n const [search, setSearch] = useState('');\n\n const filtered = useMemo(() => {\n if (!search) return branches;\n const lower = search.toLowerCase();\n return branches.filter((b) => b.name.toLowerCase().includes(lower));\n }, [branches, search]);\n\n // Sort: default branch first, then current, then alphabetical\n const sorted = useMemo(() => {\n return [...filtered].sort((a, b) => {\n if (a.isDefault && !b.isDefault) return -1;\n if (!a.isDefault && b.isDefault) return 1;\n if (a.name === currentBranch && b.name !== currentBranch) return -1;\n if (a.name !== currentBranch && b.name === currentBranch) return 1;\n return a.name.localeCompare(b.name);\n });\n }, [filtered, currentBranch]);\n\n return (\n <div className={`flex flex-col h-full ${className ?? ''}`}>\n {/* Search input */}\n <div className=\"px-2 py-2 border-b border-gray-200 dark:border-gray-700 flex-shrink-0\">\n <div className=\"relative\">\n <Search className=\"absolute left-2 top-1/2 -translate-y-1/2 h-3 w-3 text-gray-400\" />\n <input\n type=\"text\"\n placeholder=\"Filter branches...\"\n value={search}\n onChange={(e) => setSearch(e.target.value)}\n className=\"w-full pl-7 pr-2 py-1.5 text-xs rounded-md border border-gray-200 dark:border-gray-600 bg-gray-50 dark:bg-gray-900 focus:outline-none focus:ring-1 focus:ring-blue-500 placeholder-gray-400\"\n />\n </div>\n </div>\n\n {/* Branch list */}\n <div className=\"flex-1 overflow-auto\">\n {sorted.length === 0 ? (\n <div className=\"px-3 py-6 text-center text-xs text-gray-400\">\n {search ? 'No matching branches' : 'No branches found'}\n </div>\n ) : (\n sorted.map((branch) => {\n const isCurrent = branch.name === currentBranch;\n\n return (\n <button\n key={branch.name}\n onClick={() => onSelectBranch?.(branch)}\n className={`flex items-center gap-2 w-full px-3 py-2 text-left transition-colors border-b border-gray-50 dark:border-gray-800/50 ${\n isCurrent\n ? 'bg-blue-50 dark:bg-blue-900/20'\n : 'hover:bg-gray-50 dark:hover:bg-gray-800/50'\n }`}\n >\n {/* Current indicator */}\n <span className=\"w-4 flex-shrink-0 flex items-center justify-center\">\n {isCurrent ? (\n <Check className=\"h-3.5 w-3.5 text-blue-500\" />\n ) : (\n <GitBranchIcon className=\"h-3.5 w-3.5 text-gray-400\" />\n )}\n </span>\n\n {/* Branch name */}\n <span\n className={`text-xs truncate flex-1 ${\n isCurrent\n ? 'font-semibold text-blue-700 dark:text-blue-300'\n : 'text-gray-700 dark:text-gray-300'\n }`}\n >\n {branch.name}\n </span>\n\n {/* Badges */}\n <div className=\"flex items-center gap-1 flex-shrink-0\">\n {branch.isDefault && (\n <span className=\"px-1.5 py-0.5 text-[9px] font-medium bg-green-100 text-green-700 dark:bg-green-900/30 dark:text-green-400 rounded\">\n default\n </span>\n )}\n {branch.isProtected && (\n <span className=\"flex items-center gap-0.5 px-1.5 py-0.5 text-[9px] font-medium bg-orange-100 text-orange-700 dark:bg-orange-900/30 dark:text-orange-400 rounded\">\n <Shield className=\"h-2.5 w-2.5\" />\n protected\n </span>\n )}\n </div>\n\n {/* Short SHA */}\n <code className=\"text-[10px] font-mono text-gray-400 dark:text-gray-500 flex-shrink-0\">\n {branch.sha.slice(0, 7)}\n </code>\n </button>\n );\n })\n )}\n </div>\n </div>\n );\n};\n"],"mappings":"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"}
|
package/dist/git.d.ts
ADDED
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import { BranchList$1 as BranchList, BranchListProps, CommitGraph$1 as CommitGraph, CommitList$1 as CommitList, CommitListProps, DiffViewer$1 as DiffViewer, DiffViewerProps, GraphConnection, GraphNode, computeGraphLayout$1 as computeGraphLayout, graphWidth$1 as graphWidth } from "./index-BNmNIWBL.js";
|
|
2
|
+
export { BranchList, BranchListProps, CommitGraph, CommitList, CommitListProps, DiffViewer, DiffViewerProps, GraphConnection, GraphNode, computeGraphLayout, graphWidth };
|
package/dist/git.js
ADDED
|
@@ -0,0 +1,206 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import { AlertCircle, AlertTriangle, Archive, Bookmark, Check, CheckCircle, Copy, Database, Download, Eye, File, FileAudio, FileCode, FileImage, FileJson, FileKey, FilePlus, FileSpreadsheet, FileTerminal, FileText, FileType, FileVideo, Folder, FolderOpen, FolderPlus, Globe, Heart, Info, List, Minus, Pencil, Plus, Presentation, Scissors, Settings, Share2, Star, Tag, Trash2, Upload, X, ZoomIn } from "lucide-react";
|
|
3
|
+
|
|
4
|
+
//#region src/icons/iconMap.ts
|
|
5
|
+
const lucideIconMap = {
|
|
6
|
+
"file": File,
|
|
7
|
+
"file-text": FileText,
|
|
8
|
+
"file-image": FileImage,
|
|
9
|
+
"file-video": FileVideo,
|
|
10
|
+
"file-audio": FileAudio,
|
|
11
|
+
"file-code": FileCode,
|
|
12
|
+
"folder": Folder,
|
|
13
|
+
"folder-open": FolderOpen,
|
|
14
|
+
"folder-plus": FolderPlus,
|
|
15
|
+
"file-plus": FilePlus,
|
|
16
|
+
"archive": Archive,
|
|
17
|
+
"file-spreadsheet": FileSpreadsheet,
|
|
18
|
+
"file-type": FileType,
|
|
19
|
+
"settings": Settings,
|
|
20
|
+
"file-json": FileJson,
|
|
21
|
+
"file-terminal": FileTerminal,
|
|
22
|
+
"database": Database,
|
|
23
|
+
"globe": Globe,
|
|
24
|
+
"presentation": Presentation,
|
|
25
|
+
"file-key": FileKey
|
|
26
|
+
};
|
|
27
|
+
const iconColorMap = {
|
|
28
|
+
"folder": "text-blue-500",
|
|
29
|
+
"folder-open": "text-blue-500",
|
|
30
|
+
"file-image": "text-emerald-500",
|
|
31
|
+
"file-video": "text-orange-500",
|
|
32
|
+
"file-audio": "text-violet-500",
|
|
33
|
+
"file-code": "text-blue-500",
|
|
34
|
+
"file-text": "text-gray-500",
|
|
35
|
+
"file-type": "text-gray-500",
|
|
36
|
+
"file-json": "text-yellow-500",
|
|
37
|
+
"file-terminal": "text-green-500",
|
|
38
|
+
"file-spreadsheet": "text-emerald-600",
|
|
39
|
+
"file-key": "text-red-500",
|
|
40
|
+
"archive": "text-amber-500",
|
|
41
|
+
"database": "text-purple-500",
|
|
42
|
+
"globe": "text-blue-400",
|
|
43
|
+
"presentation": "text-orange-500",
|
|
44
|
+
"file": "text-gray-400"
|
|
45
|
+
};
|
|
46
|
+
const fileExtensionIconMap = {
|
|
47
|
+
"jpg": "file-image",
|
|
48
|
+
"jpeg": "file-image",
|
|
49
|
+
"png": "file-image",
|
|
50
|
+
"gif": "file-image",
|
|
51
|
+
"svg": "file-image",
|
|
52
|
+
"webp": "file-image",
|
|
53
|
+
"bmp": "file-image",
|
|
54
|
+
"ico": "file-image",
|
|
55
|
+
"tiff": "file-image",
|
|
56
|
+
"tif": "file-image",
|
|
57
|
+
"avif": "file-image",
|
|
58
|
+
"heic": "file-image",
|
|
59
|
+
"mp4": "file-video",
|
|
60
|
+
"avi": "file-video",
|
|
61
|
+
"mkv": "file-video",
|
|
62
|
+
"mov": "file-video",
|
|
63
|
+
"wmv": "file-video",
|
|
64
|
+
"flv": "file-video",
|
|
65
|
+
"webm": "file-video",
|
|
66
|
+
"m4v": "file-video",
|
|
67
|
+
"mp3": "file-audio",
|
|
68
|
+
"wav": "file-audio",
|
|
69
|
+
"flac": "file-audio",
|
|
70
|
+
"aac": "file-audio",
|
|
71
|
+
"ogg": "file-audio",
|
|
72
|
+
"wma": "file-audio",
|
|
73
|
+
"m4a": "file-audio",
|
|
74
|
+
"opus": "file-audio",
|
|
75
|
+
"txt": "file-text",
|
|
76
|
+
"md": "file-text",
|
|
77
|
+
"mdx": "file-text",
|
|
78
|
+
"rst": "file-text",
|
|
79
|
+
"rtf": "file-text",
|
|
80
|
+
"log": "file-text",
|
|
81
|
+
"csv": "file-text",
|
|
82
|
+
"pdf": "file-type",
|
|
83
|
+
"doc": "file-text",
|
|
84
|
+
"docx": "file-text",
|
|
85
|
+
"xls": "file-spreadsheet",
|
|
86
|
+
"xlsx": "file-spreadsheet",
|
|
87
|
+
"ods": "file-spreadsheet",
|
|
88
|
+
"ppt": "presentation",
|
|
89
|
+
"pptx": "presentation",
|
|
90
|
+
"odp": "presentation",
|
|
91
|
+
"js": "file-code",
|
|
92
|
+
"jsx": "file-code",
|
|
93
|
+
"ts": "file-code",
|
|
94
|
+
"tsx": "file-code",
|
|
95
|
+
"mjs": "file-code",
|
|
96
|
+
"cjs": "file-code",
|
|
97
|
+
"html": "globe",
|
|
98
|
+
"htm": "globe",
|
|
99
|
+
"css": "file-code",
|
|
100
|
+
"scss": "file-code",
|
|
101
|
+
"sass": "file-code",
|
|
102
|
+
"less": "file-code",
|
|
103
|
+
"vue": "file-code",
|
|
104
|
+
"svelte": "file-code",
|
|
105
|
+
"json": "file-json",
|
|
106
|
+
"jsonc": "file-json",
|
|
107
|
+
"json5": "file-json",
|
|
108
|
+
"xml": "file-code",
|
|
109
|
+
"yaml": "file-code",
|
|
110
|
+
"yml": "file-code",
|
|
111
|
+
"toml": "file-code",
|
|
112
|
+
"py": "file-code",
|
|
113
|
+
"rb": "file-code",
|
|
114
|
+
"java": "file-code",
|
|
115
|
+
"kt": "file-code",
|
|
116
|
+
"go": "file-code",
|
|
117
|
+
"rs": "file-code",
|
|
118
|
+
"c": "file-code",
|
|
119
|
+
"cpp": "file-code",
|
|
120
|
+
"h": "file-code",
|
|
121
|
+
"hpp": "file-code",
|
|
122
|
+
"cs": "file-code",
|
|
123
|
+
"swift": "file-code",
|
|
124
|
+
"php": "file-code",
|
|
125
|
+
"r": "file-code",
|
|
126
|
+
"lua": "file-code",
|
|
127
|
+
"dart": "file-code",
|
|
128
|
+
"scala": "file-code",
|
|
129
|
+
"zig": "file-code",
|
|
130
|
+
"ex": "file-code",
|
|
131
|
+
"exs": "file-code",
|
|
132
|
+
"sh": "file-terminal",
|
|
133
|
+
"bash": "file-terminal",
|
|
134
|
+
"zsh": "file-terminal",
|
|
135
|
+
"fish": "file-terminal",
|
|
136
|
+
"ps1": "file-terminal",
|
|
137
|
+
"bat": "file-terminal",
|
|
138
|
+
"cmd": "file-terminal",
|
|
139
|
+
"env": "file-key",
|
|
140
|
+
"ini": "settings",
|
|
141
|
+
"conf": "settings",
|
|
142
|
+
"cfg": "settings",
|
|
143
|
+
"properties": "settings",
|
|
144
|
+
"sql": "database",
|
|
145
|
+
"sqlite": "database",
|
|
146
|
+
"db": "database",
|
|
147
|
+
"zip": "archive",
|
|
148
|
+
"tar": "archive",
|
|
149
|
+
"gz": "archive",
|
|
150
|
+
"bz2": "archive",
|
|
151
|
+
"xz": "archive",
|
|
152
|
+
"7z": "archive",
|
|
153
|
+
"rar": "archive",
|
|
154
|
+
"tgz": "archive",
|
|
155
|
+
"lock": "file-key"
|
|
156
|
+
};
|
|
157
|
+
function getIconForExtension(filename) {
|
|
158
|
+
const ext = filename.split(".").pop()?.toLowerCase() || "";
|
|
159
|
+
return fileExtensionIconMap[ext] || "file";
|
|
160
|
+
}
|
|
161
|
+
function getIconForFile(filename, isDirectory) {
|
|
162
|
+
if (isDirectory) return "folder";
|
|
163
|
+
return getIconForExtension(filename);
|
|
164
|
+
}
|
|
165
|
+
const contextMenuIconMap = {
|
|
166
|
+
"eye": Eye,
|
|
167
|
+
"edit": Pencil,
|
|
168
|
+
"trash": Trash2,
|
|
169
|
+
"folder-open": FolderOpen,
|
|
170
|
+
"copy": Copy,
|
|
171
|
+
"download": Download,
|
|
172
|
+
"upload": Upload,
|
|
173
|
+
"share": Share2,
|
|
174
|
+
"scissors": Scissors,
|
|
175
|
+
"star": Star,
|
|
176
|
+
"heart": Heart,
|
|
177
|
+
"bookmark": Bookmark,
|
|
178
|
+
"tag": Tag,
|
|
179
|
+
"settings": Settings,
|
|
180
|
+
"info": Info,
|
|
181
|
+
"warning": AlertTriangle,
|
|
182
|
+
"error": AlertCircle,
|
|
183
|
+
"success": CheckCircle,
|
|
184
|
+
"plus": Plus,
|
|
185
|
+
"minus": Minus,
|
|
186
|
+
"x": X,
|
|
187
|
+
"check": Check,
|
|
188
|
+
"file": File,
|
|
189
|
+
"folder": Folder,
|
|
190
|
+
"folder-plus": FolderPlus,
|
|
191
|
+
"file-plus": FilePlus,
|
|
192
|
+
"archive": Archive,
|
|
193
|
+
"zoom-in": ZoomIn,
|
|
194
|
+
"list": List
|
|
195
|
+
};
|
|
196
|
+
function resolveIcon(name, className) {
|
|
197
|
+
const iconName = name || "file";
|
|
198
|
+
const MappedIcon = lucideIconMap[iconName] || File;
|
|
199
|
+
const colorClass = iconColorMap[iconName] || "text-gray-400";
|
|
200
|
+
const finalClassName = className ? `${className} ${colorClass}` : `w-4 h-4 ${colorClass}`;
|
|
201
|
+
return React.createElement(MappedIcon, { className: finalClassName });
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
//#endregion
|
|
205
|
+
export { contextMenuIconMap as contextMenuIconMap$1, fileExtensionIconMap as fileExtensionIconMap$1, getIconForExtension as getIconForExtension$1, getIconForFile as getIconForFile$1, iconColorMap as iconColorMap$1, lucideIconMap as lucideIconMap$1, resolveIcon as resolveIcon$1 };
|
|
206
|
+
//# sourceMappingURL=iconMap-V4B8P-Uh.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"iconMap-V4B8P-Uh.js","names":["lucideIconMap: Record<string, LucideIcon>","iconColorMap: Record<string, string>","fileExtensionIconMap: Record<string, string>","filename: string","isDirectory: boolean","contextMenuIconMap: Record<string, LucideIcon>","name: string","className?: string"],"sources":["../src/icons/iconMap.ts"],"sourcesContent":["import React from 'react';\nimport {\n File, FileText, FileImage, FileVideo, FileAudio, FileCode,\n Folder, FolderOpen, FolderPlus, FilePlus, Archive, FileSpreadsheet, FileType, Settings,\n FileJson, FileTerminal, Database, Globe, Presentation, FileKey,\n Eye, Pencil, Trash2, Copy, Download, Upload, Share2, Scissors,\n Star, Heart, Bookmark, Tag, Info, AlertTriangle, AlertCircle,\n CheckCircle, Plus, Minus, X, Check, ZoomIn, List,\n type LucideIcon\n} from 'lucide-react';\n\n// Icon name to Lucide component mapping for resolving string icon identifiers\nexport const lucideIconMap: Record<string, LucideIcon> = {\n 'file': File, 'file-text': FileText, 'file-image': FileImage,\n 'file-video': FileVideo, 'file-audio': FileAudio, 'file-code': FileCode,\n 'folder': Folder, 'folder-open': FolderOpen, 'folder-plus': FolderPlus, 'file-plus': FilePlus, 'archive': Archive,\n 'file-spreadsheet': FileSpreadsheet, 'file-type': FileType, 'settings': Settings,\n 'file-json': FileJson, 'file-terminal': FileTerminal,\n 'database': Database, 'globe': Globe, 'presentation': Presentation, 'file-key': FileKey,\n};\n\n// Semantic color mapping for icon types\nexport const iconColorMap: Record<string, string> = {\n 'folder': 'text-blue-500',\n 'folder-open': 'text-blue-500',\n 'file-image': 'text-emerald-500',\n 'file-video': 'text-orange-500',\n 'file-audio': 'text-violet-500',\n 'file-code': 'text-blue-500',\n 'file-text': 'text-gray-500',\n 'file-type': 'text-gray-500',\n 'file-json': 'text-yellow-500',\n 'file-terminal': 'text-green-500',\n 'file-spreadsheet': 'text-emerald-600',\n 'file-key': 'text-red-500',\n 'archive': 'text-amber-500',\n 'database': 'text-purple-500',\n 'globe': 'text-blue-400',\n 'presentation': 'text-orange-500',\n 'file': 'text-gray-400',\n};\n\n// Comprehensive file extension to icon name mapping\nexport const fileExtensionIconMap: Record<string, string> = {\n // Images\n 'jpg': 'file-image', 'jpeg': 'file-image', 'png': 'file-image', 'gif': 'file-image',\n 'svg': 'file-image', 'webp': 'file-image', 'bmp': 'file-image', 'ico': 'file-image',\n 'tiff': 'file-image', 'tif': 'file-image', 'avif': 'file-image', 'heic': 'file-image',\n // Video\n 'mp4': 'file-video', 'avi': 'file-video', 'mkv': 'file-video', 'mov': 'file-video',\n 'wmv': 'file-video', 'flv': 'file-video', 'webm': 'file-video', 'm4v': 'file-video',\n // Audio\n 'mp3': 'file-audio', 'wav': 'file-audio', 'flac': 'file-audio', 'aac': 'file-audio',\n 'ogg': 'file-audio', 'wma': 'file-audio', 'm4a': 'file-audio', 'opus': 'file-audio',\n // Documents\n 'txt': 'file-text', 'md': 'file-text', 'mdx': 'file-text', 'rst': 'file-text',\n 'rtf': 'file-text', 'log': 'file-text', 'csv': 'file-text',\n 'pdf': 'file-type', 'doc': 'file-text', 'docx': 'file-text',\n // Spreadsheets\n 'xls': 'file-spreadsheet', 'xlsx': 'file-spreadsheet', 'ods': 'file-spreadsheet',\n // Presentations\n 'ppt': 'presentation', 'pptx': 'presentation', 'odp': 'presentation',\n // Code - JavaScript/TypeScript\n 'js': 'file-code', 'jsx': 'file-code', 'ts': 'file-code', 'tsx': 'file-code',\n 'mjs': 'file-code', 'cjs': 'file-code',\n // Code - Web\n 'html': 'globe', 'htm': 'globe', 'css': 'file-code', 'scss': 'file-code',\n 'sass': 'file-code', 'less': 'file-code', 'vue': 'file-code', 'svelte': 'file-code',\n // Code - Data\n 'json': 'file-json', 'jsonc': 'file-json', 'json5': 'file-json',\n 'xml': 'file-code', 'yaml': 'file-code', 'yml': 'file-code', 'toml': 'file-code',\n // Code - General\n 'py': 'file-code', 'rb': 'file-code', 'java': 'file-code', 'kt': 'file-code',\n 'go': 'file-code', 'rs': 'file-code', 'c': 'file-code', 'cpp': 'file-code',\n 'h': 'file-code', 'hpp': 'file-code', 'cs': 'file-code', 'swift': 'file-code',\n 'php': 'file-code', 'r': 'file-code', 'lua': 'file-code', 'dart': 'file-code',\n 'scala': 'file-code', 'zig': 'file-code', 'ex': 'file-code', 'exs': 'file-code',\n // Shell / Config\n 'sh': 'file-terminal', 'bash': 'file-terminal', 'zsh': 'file-terminal',\n 'fish': 'file-terminal', 'ps1': 'file-terminal', 'bat': 'file-terminal',\n 'cmd': 'file-terminal',\n // Config files\n 'env': 'file-key', 'ini': 'settings', 'conf': 'settings', 'cfg': 'settings',\n 'properties': 'settings',\n // Database\n 'sql': 'database', 'sqlite': 'database', 'db': 'database',\n // Archives\n 'zip': 'archive', 'tar': 'archive', 'gz': 'archive', 'bz2': 'archive',\n 'xz': 'archive', '7z': 'archive', 'rar': 'archive', 'tgz': 'archive',\n // Lock / package files\n 'lock': 'file-key',\n};\n\n// Get icon name for a file extension\nexport function getIconForExtension(filename: string): string {\n const ext = filename.split('.').pop()?.toLowerCase() || '';\n return fileExtensionIconMap[ext] || 'file';\n}\n\n// Get icon name for a file (handles directories too)\nexport function getIconForFile(filename: string, isDirectory: boolean): string {\n if (isDirectory) return 'folder';\n return getIconForExtension(filename);\n}\n\n// Context menu icon mapping - Lucide icons for menu items\nexport const contextMenuIconMap: Record<string, LucideIcon> = {\n 'eye': Eye,\n 'edit': Pencil,\n 'trash': Trash2,\n 'folder-open': FolderOpen,\n 'copy': Copy,\n 'download': Download,\n 'upload': Upload,\n 'share': Share2,\n 'scissors': Scissors,\n 'star': Star,\n 'heart': Heart,\n 'bookmark': Bookmark,\n 'tag': Tag,\n 'settings': Settings,\n 'info': Info,\n 'warning': AlertTriangle,\n 'error': AlertCircle,\n 'success': CheckCircle,\n 'plus': Plus,\n 'minus': Minus,\n 'x': X,\n 'check': Check,\n 'file': File,\n 'folder': Folder,\n 'folder-plus': FolderPlus,\n 'file-plus': FilePlus,\n 'archive': Archive,\n 'zoom-in': ZoomIn,\n 'list': List,\n};\n\n// Resolve an icon name to a React element\nexport function resolveIcon(name: string, className?: string): React.ReactElement {\n const iconName = name || 'file';\n const MappedIcon = lucideIconMap[iconName] || File;\n const colorClass = iconColorMap[iconName] || 'text-gray-400';\n const finalClassName = className ? `${className} ${colorClass}` : `w-4 h-4 ${colorClass}`;\n return React.createElement(MappedIcon, { className: finalClassName });\n}\n"],"mappings":";;;;AAYA,MAAaA,gBAA4C;CACvD,QAAQ;CAAM,aAAa;CAAU,cAAc;CACnD,cAAc;CAAW,cAAc;CAAW,aAAa;CAC/D,UAAU;CAAQ,eAAe;CAAY,eAAe;CAAY,aAAa;CAAU,WAAW;CAC1G,oBAAoB;CAAiB,aAAa;CAAU,YAAY;CACxE,aAAa;CAAU,iBAAiB;CACxC,YAAY;CAAU,SAAS;CAAO,gBAAgB;CAAc,YAAY;AACjF;AAGD,MAAaC,eAAuC;CAClD,UAAU;CACV,eAAe;CACf,cAAc;CACd,cAAc;CACd,cAAc;CACd,aAAa;CACb,aAAa;CACb,aAAa;CACb,aAAa;CACb,iBAAiB;CACjB,oBAAoB;CACpB,YAAY;CACZ,WAAW;CACX,YAAY;CACZ,SAAS;CACT,gBAAgB;CAChB,QAAQ;AACT;AAGD,MAAaC,uBAA+C;CAE1D,OAAO;CAAc,QAAQ;CAAc,OAAO;CAAc,OAAO;CACvE,OAAO;CAAc,QAAQ;CAAc,OAAO;CAAc,OAAO;CACvE,QAAQ;CAAc,OAAO;CAAc,QAAQ;CAAc,QAAQ;CAEzE,OAAO;CAAc,OAAO;CAAc,OAAO;CAAc,OAAO;CACtE,OAAO;CAAc,OAAO;CAAc,QAAQ;CAAc,OAAO;CAEvE,OAAO;CAAc,OAAO;CAAc,QAAQ;CAAc,OAAO;CACvE,OAAO;CAAc,OAAO;CAAc,OAAO;CAAc,QAAQ;CAEvE,OAAO;CAAa,MAAM;CAAa,OAAO;CAAa,OAAO;CAClE,OAAO;CAAa,OAAO;CAAa,OAAO;CAC/C,OAAO;CAAa,OAAO;CAAa,QAAQ;CAEhD,OAAO;CAAoB,QAAQ;CAAoB,OAAO;CAE9D,OAAO;CAAgB,QAAQ;CAAgB,OAAO;CAEtD,MAAM;CAAa,OAAO;CAAa,MAAM;CAAa,OAAO;CACjE,OAAO;CAAa,OAAO;CAE3B,QAAQ;CAAS,OAAO;CAAS,OAAO;CAAa,QAAQ;CAC7D,QAAQ;CAAa,QAAQ;CAAa,OAAO;CAAa,UAAU;CAExE,QAAQ;CAAa,SAAS;CAAa,SAAS;CACpD,OAAO;CAAa,QAAQ;CAAa,OAAO;CAAa,QAAQ;CAErE,MAAM;CAAa,MAAM;CAAa,QAAQ;CAAa,MAAM;CACjE,MAAM;CAAa,MAAM;CAAa,KAAK;CAAa,OAAO;CAC/D,KAAK;CAAa,OAAO;CAAa,MAAM;CAAa,SAAS;CAClE,OAAO;CAAa,KAAK;CAAa,OAAO;CAAa,QAAQ;CAClE,SAAS;CAAa,OAAO;CAAa,MAAM;CAAa,OAAO;CAEpE,MAAM;CAAiB,QAAQ;CAAiB,OAAO;CACvD,QAAQ;CAAiB,OAAO;CAAiB,OAAO;CACxD,OAAO;CAEP,OAAO;CAAY,OAAO;CAAY,QAAQ;CAAY,OAAO;CACjE,cAAc;CAEd,OAAO;CAAY,UAAU;CAAY,MAAM;CAE/C,OAAO;CAAW,OAAO;CAAW,MAAM;CAAW,OAAO;CAC5D,MAAM;CAAW,MAAM;CAAW,OAAO;CAAW,OAAO;CAE3D,QAAQ;AACT;AAGD,SAAgB,oBAAoBC,UAA0B;CAC5D,MAAM,MAAM,SAAS,MAAM,IAAI,CAAC,KAAK,EAAE,aAAa,IAAI;AACxD,QAAO,qBAAqB,QAAQ;AACrC;AAGD,SAAgB,eAAeA,UAAkBC,aAA8B;AAC7E,KAAI,YAAa,QAAO;AACxB,QAAO,oBAAoB,SAAS;AACrC;AAGD,MAAaC,qBAAiD;CAC5D,OAAO;CACP,QAAQ;CACR,SAAS;CACT,eAAe;CACf,QAAQ;CACR,YAAY;CACZ,UAAU;CACV,SAAS;CACT,YAAY;CACZ,QAAQ;CACR,SAAS;CACT,YAAY;CACZ,OAAO;CACP,YAAY;CACZ,QAAQ;CACR,WAAW;CACX,SAAS;CACT,WAAW;CACX,QAAQ;CACR,SAAS;CACT,KAAK;CACL,SAAS;CACT,QAAQ;CACR,UAAU;CACV,eAAe;CACf,aAAa;CACb,WAAW;CACX,WAAW;CACX,QAAQ;AACT;AAGD,SAAgB,YAAYC,MAAcC,WAAwC;CAChF,MAAM,WAAW,QAAQ;CACzB,MAAM,aAAa,cAAc,aAAa;CAC9C,MAAM,aAAa,aAAa,aAAa;CAC7C,MAAM,iBAAiB,aAAa,EAAE,UAAU,GAAG,WAAW,KAAK,UAAU,WAAW;AACxF,QAAO,MAAM,cAAc,YAAY,EAAE,WAAW,eAAgB,EAAC;AACtE"}
|
|
File without changes
|
package/dist/icons.d.ts
ADDED
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import { contextMenuIconMap, fileExtensionIconMap, getIconForExtension, getIconForFile, iconColorMap, lucideIconMap, resolveIcon } from "./index-DxnJ8FYM.js";
|
|
2
|
+
export { contextMenuIconMap, fileExtensionIconMap, getIconForExtension, getIconForFile, iconColorMap, lucideIconMap, resolveIcon };
|
package/dist/icons.js
ADDED
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { contextMenuIconMap$1 as contextMenuIconMap, fileExtensionIconMap$1 as fileExtensionIconMap, getIconForExtension$1 as getIconForExtension, getIconForFile$1 as getIconForFile, iconColorMap$1 as iconColorMap, lucideIconMap$1 as lucideIconMap, resolveIcon$1 as resolveIcon } from "./iconMap-V4B8P-Uh.js";
|
|
2
|
+
import "./icons-CIsIOZXR.js";
|
|
3
|
+
|
|
4
|
+
export { contextMenuIconMap, fileExtensionIconMap, getIconForExtension, getIconForFile, iconColorMap, lucideIconMap, resolveIcon };
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import { GitBranch, GitCommit, GitDiffEntry } from "@anymux/file-system";
|
|
3
|
+
|
|
4
|
+
//#region src/git/CommitList.d.ts
|
|
5
|
+
interface CommitListProps {
|
|
6
|
+
commits: GitCommit[];
|
|
7
|
+
headSha?: string;
|
|
8
|
+
/** Number of changed files per commit (keyed by sha). Optional enrichment. */
|
|
9
|
+
changedFileCounts?: Record<string, number>;
|
|
10
|
+
onSelectCommit?: (commit: GitCommit) => void;
|
|
11
|
+
selectedSha?: string;
|
|
12
|
+
/** Show commit graph (branch lanes) alongside the list */
|
|
13
|
+
showGraph?: boolean;
|
|
14
|
+
className?: string;
|
|
15
|
+
}
|
|
16
|
+
declare const CommitList: React.FC<CommitListProps>;
|
|
17
|
+
|
|
18
|
+
//#endregion
|
|
19
|
+
//#region src/git/CommitGraph.d.ts
|
|
20
|
+
//# sourceMappingURL=CommitList.d.ts.map
|
|
21
|
+
interface GraphNode {
|
|
22
|
+
sha: string;
|
|
23
|
+
column: number;
|
|
24
|
+
/** Paths to draw FROM this node downward to parents */
|
|
25
|
+
connections: GraphConnection[];
|
|
26
|
+
}
|
|
27
|
+
interface GraphConnection {
|
|
28
|
+
/** Column of the parent commit */
|
|
29
|
+
toColumn: number;
|
|
30
|
+
/** Row index of the parent commit (-1 if parent is off-screen) */
|
|
31
|
+
toRow: number;
|
|
32
|
+
/** Color index for the connection line */
|
|
33
|
+
colorIndex: number;
|
|
34
|
+
}
|
|
35
|
+
declare function computeGraphLayout(commits: GitCommit[]): GraphNode[];
|
|
36
|
+
interface CommitGraphProps {
|
|
37
|
+
nodes: GraphNode[];
|
|
38
|
+
totalRows: number;
|
|
39
|
+
/** SHA of the HEAD commit — its lane will be visually highlighted */
|
|
40
|
+
headSha?: string;
|
|
41
|
+
className?: string;
|
|
42
|
+
}
|
|
43
|
+
declare const CommitGraph: React.FC<CommitGraphProps>;
|
|
44
|
+
/** Compute the width the graph will take, for adding left padding to commit rows */
|
|
45
|
+
declare function graphWidth(nodes: GraphNode[]): number;
|
|
46
|
+
|
|
47
|
+
//#endregion
|
|
48
|
+
//#region src/git/DiffViewer.d.ts
|
|
49
|
+
//# sourceMappingURL=CommitGraph.d.ts.map
|
|
50
|
+
interface DiffViewerProps {
|
|
51
|
+
entries: GitDiffEntry[];
|
|
52
|
+
className?: string;
|
|
53
|
+
}
|
|
54
|
+
declare const DiffViewer: React.FC<DiffViewerProps>;
|
|
55
|
+
|
|
56
|
+
//#endregion
|
|
57
|
+
//#region src/git/BranchList.d.ts
|
|
58
|
+
//# sourceMappingURL=DiffViewer.d.ts.map
|
|
59
|
+
interface BranchListProps {
|
|
60
|
+
branches: GitBranch[];
|
|
61
|
+
currentBranch?: string;
|
|
62
|
+
onSelectBranch?: (branch: GitBranch) => void;
|
|
63
|
+
className?: string;
|
|
64
|
+
}
|
|
65
|
+
declare const BranchList: React.FC<BranchListProps>;
|
|
66
|
+
|
|
67
|
+
//#endregion
|
|
68
|
+
//# sourceMappingURL=BranchList.d.ts.map
|
|
69
|
+
|
|
70
|
+
export { BranchList as BranchList$1, BranchListProps, CommitGraph as CommitGraph$1, CommitList as CommitList$1, CommitListProps, DiffViewer as DiffViewer$1, DiffViewerProps, GraphConnection, GraphNode, computeGraphLayout as computeGraphLayout$1, graphWidth as graphWidth$1 };
|
|
71
|
+
//# sourceMappingURL=index-BNmNIWBL.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index-BNmNIWBL.d.ts","names":[],"sources":["../src/git/CommitList.tsx","../src/git/CommitGraph.tsx","../src/git/DiffViewer.tsx","../src/git/BranchList.tsx"],"sourcesContent":null,"mappings":";;;;UAuEiB,eAAA;WACN;EADM,OAAA,CAAA,EAAA,MAAA;EAAe;EAAA,iBACrB,CAAA,EAGW,MAHX,CAAA,MAAA,EAAA,MAAA,CAAA;EAAS,cAGE,CAAA,EAAA,CAAA,MAAA,EACM,SADN,EAAA,GAAA,IAAA;EAAM,WACA,CAAA,EAAA,MAAA;EAAS;EAqIxB,SAAA,CAAA,EAAA,OAgDZ;EAAA,SAAA,CAAA,EAAA,MAAA;;AAhDwB,cAAZ,UAAkB,EAAN,KAAA,CAAM,EAAA,CAAG,eAAH,CAAA;;;;AAAE;UC5MhB,SAAA;;EDkEA,MAAA,EAAA,MAAA;EAAe;EAAA,WACrB,EC/DI,eD+DJ,EAAA;;AAIiB,UChEX,eAAA,CDgEW;EAAS;EAqIxB,QAAA,EAAA,MAgDZ;EAAA;EAAA,KAhDiC,EAAA,MAAA;EAAe;EAAhB,UAAA,EAAA,MAAA;;iBCvKjB,kBAAA,UAA4B,cAAc;UA8EzC,gBAAA;EAnHA,KAAA,EAoHR,SApHiB,EAAA;EAOT,SAAA,EAAA,MAAA;EA8BD;EAAkB,OAAA,CAAA,EAAA,MAAA;EAAA,SAAU,CAAA,EAAA,MAAA;;AAAuB,cAsFtD,WAtFsD,EAsFzC,KAAA,CAAM,EAtFmC,CAsFhC,gBAtFgC,CAAA;AA8EnE;AAQa,iBAqGG,UAAA,CAHf,KAAA,EAGiC,SAHjC,EAAA,CAAA,EAAA,MAAA;;;;;UC7IgB,eAAA;WACN;EFfM,SAAA,CAAA,EAAA,MAAe;;AACrB,cEyGE,UFzGF,EEyGc,KAAA,CAAM,EFzGpB,CEyGuB,eFzGvB,CAAA;;;;;UG7DM,eAAA;YACL;EH2DK,aAAA,CAAA,EAAA,MAAe;EAAA,cAAA,CAAA,EAAA,CAAA,MAAA,EGzDJ,SHyDI,EAAA,GAAA,IAAA;EAAA,SACrB,CAAA,EAAA,MAAA;;AAIiB,cGxDf,UHwDe,EGxDH,KAAA,CAAM,EHwDH,CGxDM,eHwDN,CAAA;;;AAAS"}
|