@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.
Files changed (244) hide show
  1. package/dist/ExplorerLayout-CSIJd7N4.js +105 -0
  2. package/dist/ExplorerLayout-CSIJd7N4.js.map +1 -0
  3. package/dist/FileBrowserContext-B6jixa2j.js +11 -0
  4. package/dist/FileBrowserContext-B6jixa2j.js.map +1 -0
  5. package/dist/calendar-DSlrbHoj.js +761 -0
  6. package/dist/calendar-DSlrbHoj.js.map +1 -0
  7. package/dist/calendar.d.ts +3 -0
  8. package/dist/calendar.js +3 -0
  9. package/dist/contacts-DQXTZzHc.js +539 -0
  10. package/dist/contacts-DQXTZzHc.js.map +1 -0
  11. package/dist/contacts.d.ts +3 -0
  12. package/dist/contacts.js +3 -0
  13. package/dist/file-browser-m5atC3kF.js +6755 -0
  14. package/dist/file-browser-m5atC3kF.js.map +1 -0
  15. package/dist/file-browser.d.ts +11 -0
  16. package/dist/file-browser.js +9 -0
  17. package/dist/git-B55e6LL-.js +561 -0
  18. package/dist/git-B55e6LL-.js.map +1 -0
  19. package/dist/git.d.ts +2 -0
  20. package/dist/git.js +3 -0
  21. package/dist/iconMap-V4B8P-Uh.js +206 -0
  22. package/dist/iconMap-V4B8P-Uh.js.map +1 -0
  23. package/dist/icons-CIsIOZXR.js +0 -0
  24. package/dist/icons.d.ts +2 -0
  25. package/dist/icons.js +4 -0
  26. package/dist/index-BNmNIWBL.d.ts +71 -0
  27. package/dist/index-BNmNIWBL.d.ts.map +1 -0
  28. package/dist/index-Bryv_GCG.d.ts +1481 -0
  29. package/dist/index-Bryv_GCG.d.ts.map +1 -0
  30. package/dist/index-CuQIjSXs.d.ts +134 -0
  31. package/dist/index-CuQIjSXs.d.ts.map +1 -0
  32. package/dist/index-DSu19mq0.d.ts +153 -0
  33. package/dist/index-DSu19mq0.d.ts.map +1 -0
  34. package/dist/index-DmsyeHFr.d.ts +149 -0
  35. package/dist/index-DmsyeHFr.d.ts.map +1 -0
  36. package/dist/index-DxnJ8FYM.d.ts +17 -0
  37. package/dist/index-DxnJ8FYM.d.ts.map +1 -0
  38. package/dist/index-DzfY1Tok.d.ts +32 -0
  39. package/dist/index-DzfY1Tok.d.ts.map +1 -0
  40. package/dist/index-Ml_SgiKa.d.ts +1847 -0
  41. package/dist/index-Ml_SgiKa.d.ts.map +1 -0
  42. package/dist/index-kHr9udZD.d.ts +1025 -0
  43. package/dist/index-kHr9udZD.d.ts.map +1 -0
  44. package/dist/index.d.ts +11 -0
  45. package/dist/index.js +15 -0
  46. package/dist/layout-Ca_4r8ka.js +89 -0
  47. package/dist/layout-Ca_4r8ka.js.map +1 -0
  48. package/dist/layout.d.ts +2 -0
  49. package/dist/layout.js +5 -0
  50. package/dist/list-CxfT6hix.js +6831 -0
  51. package/dist/list-CxfT6hix.js.map +1 -0
  52. package/dist/list.d.ts +2 -0
  53. package/dist/list.js +5 -0
  54. package/dist/media-DZ292aKK.js +557 -0
  55. package/dist/media-DZ292aKK.js.map +1 -0
  56. package/dist/media.d.ts +3 -0
  57. package/dist/media.js +3 -0
  58. package/dist/tree-Dd9Z0Aso.js +3351 -0
  59. package/dist/tree-Dd9Z0Aso.js.map +1 -0
  60. package/dist/tree.d.ts +2 -0
  61. package/dist/tree.js +6 -0
  62. package/dist/types-common-CB3kRek8.d.ts +26 -0
  63. package/dist/types-common-CB3kRek8.d.ts.map +1 -0
  64. package/dist/utils-B4fdKKsy.js +3 -0
  65. package/package.json +109 -0
  66. package/src/calendar/AgendaView.tsx +37 -0
  67. package/src/calendar/CalendarBrowser.tsx +90 -0
  68. package/src/calendar/CalendarModel.ts +142 -0
  69. package/src/calendar/CalendarSidebar.tsx +81 -0
  70. package/src/calendar/DayView.tsx +76 -0
  71. package/src/calendar/EventCard.tsx +51 -0
  72. package/src/calendar/MockCalendarProvider.ts +98 -0
  73. package/src/calendar/MonthView.tsx +77 -0
  74. package/src/calendar/WeekView.tsx +129 -0
  75. package/src/calendar/index.ts +18 -0
  76. package/src/calendar/types.ts +25 -0
  77. package/src/contacts/ContactAvatar.tsx +35 -0
  78. package/src/contacts/ContactBrowser.tsx +56 -0
  79. package/src/contacts/ContactCard.tsx +37 -0
  80. package/src/contacts/ContactDetail.tsx +63 -0
  81. package/src/contacts/ContactGroupSidebar.tsx +40 -0
  82. package/src/contacts/ContactList.tsx +32 -0
  83. package/src/contacts/ContactListModel.ts +120 -0
  84. package/src/contacts/MockContactProvider.ts +77 -0
  85. package/src/contacts/index.ts +17 -0
  86. package/src/contacts/types.ts +26 -0
  87. package/src/demos/CalendarBrowserDemo.tsx +15 -0
  88. package/src/demos/ContactBrowserDemo.tsx +15 -0
  89. package/src/demos/MediaBrowserDemo.tsx +15 -0
  90. package/src/file-browser/adapters/DocumentViewerAdapter.ts +371 -0
  91. package/src/file-browser/adapters/FileSystemBridge.ts +168 -0
  92. package/src/file-browser/adapters/GitBrowserAdapter.ts +546 -0
  93. package/src/file-browser/adapters/README.md +504 -0
  94. package/src/file-browser/adapters/index.ts +27 -0
  95. package/src/file-browser/adapters/types.ts +70 -0
  96. package/src/file-browser/architecture.md +645 -0
  97. package/src/file-browser/components/CreateItemDialog.tsx +71 -0
  98. package/src/file-browser/components/DeleteConfirmDialog.tsx +58 -0
  99. package/src/file-browser/components/FileBrowser.tsx +473 -0
  100. package/src/file-browser/components/FileBrowserContent.tsx +209 -0
  101. package/src/file-browser/components/FileBrowserHeader.tsx +151 -0
  102. package/src/file-browser/components/FileBrowserToolbar.tsx +145 -0
  103. package/src/file-browser/components/LeftPanel/LeftPanel.tsx +103 -0
  104. package/src/file-browser/components/LeftPanel/LeftPanelTabs.tsx +70 -0
  105. package/src/file-browser/components/LeftPanel/TreeNavigationView.tsx +256 -0
  106. package/src/file-browser/components/PreviewPane.tsx +146 -0
  107. package/src/file-browser/components/RightPanel/FilePreview.tsx +219 -0
  108. package/src/file-browser/components/RightPanel/RightPanel.tsx +186 -0
  109. package/src/file-browser/components/RightPanel/RightPanelToolbar.tsx +113 -0
  110. package/src/file-browser/components/UploadProgress.tsx +123 -0
  111. package/src/file-browser/components/ViewerHost.tsx +208 -0
  112. package/src/file-browser/components/mobile/MobileNavigation.tsx +227 -0
  113. package/src/file-browser/components/navigation/NavigationButtons.tsx +171 -0
  114. package/src/file-browser/components/shared/ErrorBoundary.tsx +116 -0
  115. package/src/file-browser/components/shared/FileBrowserItem.tsx +195 -0
  116. package/src/file-browser/components/shared/FileIcon.tsx +169 -0
  117. package/src/file-browser/components/toolbar/ViewModeToggle.tsx +200 -0
  118. package/src/file-browser/components/views/ListView/ListView.tsx +484 -0
  119. package/src/file-browser/components/views/ThumbnailView/ThumbnailView.tsx +323 -0
  120. package/src/file-browser/components/views/TreeView/TreeNode.tsx +186 -0
  121. package/src/file-browser/components/views/TreeView/TreeNodeList.tsx +191 -0
  122. package/src/file-browser/components/views/TreeView/TreeView.tsx +200 -0
  123. package/src/file-browser/components/views/TreemapView/TreemapView.tsx +339 -0
  124. package/src/file-browser/context/FileBrowserContext.tsx +13 -0
  125. package/src/file-browser/examples/BasicUsage.tsx +20 -0
  126. package/src/file-browser/index.ts +98 -0
  127. package/src/file-browser/models/FileBrowserModel.ts +623 -0
  128. package/src/file-browser/models/LeftPanelManagerModel.ts +105 -0
  129. package/src/file-browser/models/NavigationManagerModel.ts +312 -0
  130. package/src/file-browser/models/ResponsiveLayoutManagerModel.ts +437 -0
  131. package/src/file-browser/models/RightPanelManagerModel.ts +190 -0
  132. package/src/file-browser/models/SelectionManagerModel.ts +252 -0
  133. package/src/file-browser/models/ToolbarManagerModel.ts +144 -0
  134. package/src/file-browser/models/UploadModel.ts +147 -0
  135. package/src/file-browser/models/ViewModeManagerModel.ts +185 -0
  136. package/src/file-browser/models/ViewerHostModel.ts +44 -0
  137. package/src/file-browser/models/ui/ListViewUIModel.ts +265 -0
  138. package/src/file-browser/models/ui/PreviewUIModel.ts +297 -0
  139. package/src/file-browser/models/ui/ThumbnailViewUIModel.ts +254 -0
  140. package/src/file-browser/models/ui/TreeViewUIModel.ts +128 -0
  141. package/src/file-browser/models/ui/TreemapViewUIModel.ts +350 -0
  142. package/src/file-browser/providers/FileSystemListProvider.ts +552 -0
  143. package/src/file-browser/providers/FileSystemProvider.ts +401 -0
  144. package/src/file-browser/providers/FileSystemTreeProvider.ts +231 -0
  145. package/src/file-browser/providers/GitProvider.ts +337 -0
  146. package/src/file-browser/providers/GitRepositoryProvider.ts +376 -0
  147. package/src/file-browser/providers/IFileBrowserProvider.ts +56 -0
  148. package/src/file-browser/providers/MemoryProvider.ts +303 -0
  149. package/src/file-browser/providers/index.ts +4 -0
  150. package/src/file-browser/registry/ViewerRegistry.ts +551 -0
  151. package/src/file-browser/registry/types.ts +144 -0
  152. package/src/file-browser/scripts/performanceBenchmark.ts +553 -0
  153. package/src/file-browser/services/ThumbnailCacheService.ts +128 -0
  154. package/src/file-browser/tasks.md +537 -0
  155. package/src/file-browser/types/FileBrowserTypes.ts +126 -0
  156. package/src/file-browser/types/ProviderTypes.ts +155 -0
  157. package/src/file-browser/types/UITypes.ts +235 -0
  158. package/src/file-browser/types/ViewModeTypes.ts +150 -0
  159. package/src/file-browser/utils/gestures.ts +327 -0
  160. package/src/file-browser/utils/performance.ts +563 -0
  161. package/src/file-browser/viewers/ImageViewer.tsx +163 -0
  162. package/src/file-browser/viewers/ImageViewerModel.ts +79 -0
  163. package/src/file-browser/viewers/TextViewer.tsx +95 -0
  164. package/src/file-browser/viewers/UnsupportedFileViewer.tsx +57 -0
  165. package/src/file-browser/viewers/index.ts +61 -0
  166. package/src/git/BranchList.tsx +128 -0
  167. package/src/git/CommitGraph.tsx +239 -0
  168. package/src/git/CommitList.tsx +258 -0
  169. package/src/git/DiffViewer.tsx +219 -0
  170. package/src/git/index.ts +4 -0
  171. package/src/icons/iconMap.ts +146 -0
  172. package/src/icons/index.ts +9 -0
  173. package/src/index.ts +13 -0
  174. package/src/layout/README.md +307 -0
  175. package/src/layout/components/ExplorerLayout/ExplorerLayout.tsx +178 -0
  176. package/src/layout/examples/SimpleExample.tsx +60 -0
  177. package/src/layout/index.ts +6 -0
  178. package/src/lib/utils.ts +1 -0
  179. package/src/list/README.md +303 -0
  180. package/src/list/architecture.md +807 -0
  181. package/src/list/components/CalculatedGridView.tsx +252 -0
  182. package/src/list/components/DragPreview.tsx +102 -0
  183. package/src/list/components/ListContextMenu.tsx +274 -0
  184. package/src/list/components/ListItem.tsx +761 -0
  185. package/src/list/components/ListItems.tsx +919 -0
  186. package/src/list/components/MasonryView.tsx +241 -0
  187. package/src/list/components/SearchFilter.tsx +44 -0
  188. package/src/list/components/TreemapView.tsx +709 -0
  189. package/src/list/components/ViewSizeControls.tsx +205 -0
  190. package/src/list/components/ViewTypeSelector.tsx +312 -0
  191. package/src/list/components/VirtualizedDetailsView.tsx +231 -0
  192. package/src/list/components/VirtualizedGrid.tsx +164 -0
  193. package/src/list/components/VirtualizedList.tsx +154 -0
  194. package/src/list/components/VirtualizedMasonryView.tsx +344 -0
  195. package/src/list/components/shared/EmptyState.tsx +103 -0
  196. package/src/list/components/shared/ErrorBoundary.tsx +123 -0
  197. package/src/list/components/shared/ErrorDisplay.tsx +100 -0
  198. package/src/list/components/shared/ListLoader.tsx +146 -0
  199. package/src/list/components/shared/LoadingIndicator.tsx +80 -0
  200. package/src/list/index.ts +92 -0
  201. package/src/list/models/ListItemsModel.ts +1301 -0
  202. package/src/list/models/TreemapModel.ts +204 -0
  203. package/src/list/providers/ListItemsProvider.ts +313 -0
  204. package/src/list/providers/TestListProvider.ts +604 -0
  205. package/src/list/tasks.md +937 -0
  206. package/src/list/types/ListTypes.ts +178 -0
  207. package/src/list/utils/BenchmarkLogger.ts +243 -0
  208. package/src/list/utils/DragDropManager.ts +320 -0
  209. package/src/list/utils/GridLayoutCalculator.ts +290 -0
  210. package/src/list/utils/ListAccessibility.ts +367 -0
  211. package/src/list/utils/ListKeyboard.ts +414 -0
  212. package/src/list/utils/MasonryLayoutCalculator.ts +302 -0
  213. package/src/list/utils/MasonryLayoutEngine.ts +401 -0
  214. package/src/list/utils/__tests__/MasonryLayoutEngine.test.ts +157 -0
  215. package/src/list/utils/__tests__/VirtualizedMasonryView.test.tsx +251 -0
  216. package/src/media/AlbumSidebar.tsx +48 -0
  217. package/src/media/MediaBrowser.tsx +92 -0
  218. package/src/media/MediaBrowserModel.ts +138 -0
  219. package/src/media/MediaGrid.tsx +50 -0
  220. package/src/media/MediaList.tsx +49 -0
  221. package/src/media/MediaPreview.tsx +63 -0
  222. package/src/media/MediaTimeline.tsx +38 -0
  223. package/src/media/MockMediaProvider.ts +70 -0
  224. package/src/media/index.ts +18 -0
  225. package/src/media/types.ts +21 -0
  226. package/src/styles/variables.css +60 -0
  227. package/src/tree/DEVELOPMENT_SUMMARY.md +170 -0
  228. package/src/tree/__tests__/TreeModel.test.ts +16 -0
  229. package/src/tree/architecture.md +530 -0
  230. package/src/tree/components/Tree.tsx +283 -0
  231. package/src/tree/components/TreeCheckbox.tsx +147 -0
  232. package/src/tree/components/TreeContextMenu.tsx +139 -0
  233. package/src/tree/components/TreeNodeList.tsx +329 -0
  234. package/src/tree/components/TreeTable.tsx +382 -0
  235. package/src/tree/index.ts +58 -0
  236. package/src/tree/models/TreeModel.ts +839 -0
  237. package/src/tree/providers/SimpleTreeProvider.ts +463 -0
  238. package/src/tree/providers/TestTreeProvider.ts +946 -0
  239. package/src/tree/providers/TreeProvider.ts +308 -0
  240. package/src/tree/tasks.md +2046 -0
  241. package/src/tree/types/TreeTypes.ts +279 -0
  242. package/src/tree/utils/SelectionTheme.ts +150 -0
  243. package/src/tree/utils/logger.ts +203 -0
  244. package/src/types-common.ts +21 -0
@@ -0,0 +1,537 @@
1
+ # FileBrowser Integration with TreeComponent and ListItemsComponent - Development Tasks
2
+
3
+ ## Overview
4
+ Rewrite FileBrowser to leverage existing TreeComponent and ListItemsComponent architectures instead of creating custom dual-panel implementations. This provides better code reuse, consistency, and maintainability.
5
+
6
+ ## Architecture Summary
7
+ - **TreeComponent Integration**: Left panel shows directories only using existing TreeComponent
8
+ - **ListItemsComponent Integration**: Right panel shows all items using existing ListItemsComponent
9
+ - **FileSystem Bridge**: Adapter that converts `@anymux/file-system` to component data structures
10
+ - **Provider Bridge**: Custom providers bridge FileSystem to TreeProvider and ListItemsProvider interfaces
11
+ - **State Synchronization**: FileBrowserModel orchestrates both components with synchronized state
12
+ - **File System Agnostic**: Works with any `@anymux/file-system` implementation
13
+
14
+ ## Success Criteria
15
+ - ✅ Leverage existing TreeComponent and ListItemsComponent instead of custom implementations
16
+ - ✅ Work with any `@anymux/file-system` implementation
17
+ - ✅ Tree shows directories only, list shows all items (files and directories)
18
+ - ✅ Synchronized selection and navigation between tree and list
19
+ - ✅ Maintain FileBrowser API compatibility
20
+ - ✅ Clean separation with adapters and providers
21
+ - ✅ Integration with apps/web/list-samples for demonstration
22
+
23
+ ---
24
+
25
+ ## Completed Tasks ✅
26
+
27
+ ### Phases 1-11: Legacy Dual-Panel Architecture (✅ COMPLETED)
28
+ All previous phases (1-11) have been completed but are now superseded by the new TreeComponent/ListItemsComponent integration approach. The legacy implementation provided valuable learning and established patterns that inform the new architecture.
29
+
30
+ ---
31
+
32
+ ## 🚧 CURRENT PHASE: Phase 12 - TreeComponent and ListItemsComponent Integration
33
+
34
+ ### Task 12.1: Create FileSystem Bridge Adapter (🔄 IN PROGRESS)
35
+ **Goal**: Create adapter that converts `@anymux/file-system` operations to TreeComponent and ListItemsComponent data structures
36
+ **Files**: `packages/fs-ui/src/FileBrowser/adapters/FileSystemBridge.ts`
37
+ **Test**: Unit test with MemoryFileSystem - verify directory tree and content loading
38
+ **Definition of Done**:
39
+ - ✅ FileSystemBridge class with IFileSystem integration
40
+ - ✅ loadDirectoryTree() method for TreeComponent (directories only)
41
+ - ✅ loadDirectoryContents() method for ListItemsComponent (all items)
42
+ - ✅ File operations (read, write, delete, rename, create)
43
+ - ✅ Error handling for permission issues
44
+ - ✅ Sorting: directories first, then files, both alphabetical
45
+ - ✅ Type-safe FileSystemItem interface
46
+
47
+ **Status**: ✅ COMPLETED - FileSystemBridge created with all required functionality
48
+
49
+ ### Task 12.2: Create FileSystemTreeProvider (🔄 IN PROGRESS)
50
+ **Goal**: Bridge FileSystemBridge to TreeComponent provider interface
51
+ **Files**: `packages/fs-ui/src/FileBrowser/providers/FileSystemTreeProvider.ts`
52
+ **Test**: Integration test with TreeComponent - verify directory-only tree
53
+ **Definition of Done**:
54
+ - 🔄 FileSystemTreeProvider implements TreeProvider interface
55
+ - 🔄 loadNodes() and loadChildren() for tree structure
56
+ - 🔄 onSelectionChange callback for synchronization
57
+ - 🔄 Context menu for directory operations
58
+ - 🔄 Directory operations (create, rename, delete folders)
59
+ - 🔄 Search functionality for directories
60
+ - 🔄 Proper MobX integration
61
+
62
+ **Status**: 🔄 IN PROGRESS - Basic structure created, need to fix interface compatibility
63
+
64
+ ### Task 12.3: Create FileSystemListProvider
65
+ **Goal**: Bridge FileSystemBridge to ListItemsComponent provider interface
66
+ **Files**: `packages/fs-ui/src/FileBrowser/providers/FileSystemListProvider.ts`
67
+ **Test**: Integration test with ListItemsComponent - verify all items display
68
+ **Definition of Done**:
69
+ - 🔄 FileSystemListProvider implements ListItemsProvider interface
70
+ - 🔄 loadItems() for current directory contents
71
+ - 🔄 getSupportedViewTypes() for view mode support
72
+ - 🔄 onItemAction for file/directory opening
73
+ - 🔄 onSelectionChange and onNavigation callbacks
74
+ - 🔄 Context menus for files and directories
75
+ - 🔄 File type icons and thumbnails
76
+ - 🔄 File operations integration
77
+
78
+ **Status**: 🔄 IN PROGRESS - Basic structure created, need to fix interface compatibility
79
+
80
+ ### Task 12.4: Create FileBrowserModel Orchestrator
81
+ **Goal**: Main model that orchestrates TreeComponent and ListItemsComponent
82
+ **Files**: `packages/fs-ui/src/FileBrowser/models/FileBrowserModel.ts`
83
+ **Test**: Integration test - verify state synchronization between components
84
+ **Definition of Done**:
85
+ - 🔄 FileBrowserModel with IFileSystem integration
86
+ - 🔄 FileSystemBridge, TreeProvider, ListProvider creation
87
+ - 🔄 TreeModel and ListItemsModel management
88
+ - 🔄 State synchronization methods (handleTreeSelection, handleListNavigation)
89
+ - 🔄 Navigation methods (navigateUp, navigateToPath, refresh)
90
+ - 🔄 Path breadcrumb computation
91
+ - 🔄 Error handling and loading states
92
+
93
+ **Status**: 🔄 IN PROGRESS - Core structure created, need to fix TreeModel method compatibility
94
+
95
+ ### Task 12.5: Create FileBrowser Component
96
+ **Goal**: Main React component that combines TreeComponent and ListItemsComponent
97
+ **Files**: `packages/fs-ui/src/FileBrowser/components/FileBrowser.tsx`
98
+ **Test**: Visual test - verify dual-panel layout with synchronized behavior
99
+ **Definition of Done**:
100
+ - ✅ FileBrowser component with IFileSystem prop
101
+ - ✅ Dual-panel layout: Tree (left) + ListItems (right)
102
+ - ✅ Breadcrumb navigation and controls
103
+ - ✅ Error handling and loading states
104
+ - ✅ Responsive design principles
105
+ - ✅ MobX observer integration
106
+ - ✅ Proper TypeScript interfaces
107
+
108
+ **Status**: ✅ COMPLETED - Component created with proper layout and integration
109
+
110
+ ### Task 12.6: Fix Provider Interface Compatibility
111
+ **Goal**: Ensure providers properly implement TreeProvider and ListItemsProvider interfaces
112
+ **Files**: Provider files and related interfaces
113
+ **Test**: TypeScript compilation and interface compliance
114
+ **Definition of Done**:
115
+ - 🔄 FileSystemTreeProvider fully implements TreeProvider
116
+ - 🔄 FileSystemListProvider fully implements ListItemsProvider
117
+ - 🔄 All method signatures match expected interfaces
118
+ - 🔄 MobX integration working properly
119
+ - 🔄 Context menu implementations working
120
+ - 🔄 Error handling in place
121
+
122
+ **Status**: 🔄 PARTIAL - Most interface issues fixed, some minor TypeScript errors remain
123
+
124
+ ### Task 12.7: Add TreeModel Method Extensions
125
+ **Goal**: Extend TreeModel or create wrapper to support path selection and expansion
126
+ **Files**: TreeComponent integration or wrapper classes
127
+ **Test**: Unit test - verify path navigation works in tree
128
+ **Definition of Done**:
129
+ - 🔄 selectPath() method for programmatic tree selection
130
+ - 🔄 expandToPath() method for expanding tree to show path
131
+ - 🔄 refresh() method for tree reloading
132
+ - 🔄 Integration with FileBrowserModel synchronization
133
+ - 🔄 Backward compatibility maintained
134
+
135
+ **Status**: 🔄 NOT STARTED - Need to implement or create wrapper
136
+
137
+ ### Task 12.8: Create Demo Integration with MemoryFileSystem
138
+ **Goal**: Integration example using MemoryFileSystem for apps/web/list-samples
139
+ **Files**: Update list-samples page with FileBrowser tab
140
+ **Test**: E2E test - verify FileBrowser works in real application
141
+ **Definition of Done**:
142
+ - ✅ MemoryFileSystem with sample directory structure
143
+ - ✅ FileBrowser demo component created
144
+ - 🔄 Side-by-side comparison with ListItems-only
145
+ - ✅ Demonstrate file system operations
146
+ - ✅ Responsive design working
147
+ - ✅ State synchronization visible
148
+
149
+ **Status**: 🔄 PARTIAL - Demo component created, need to integrate into list-samples page
150
+
151
+ ### Task 12.9: Integration Testing and Documentation
152
+ **Goal**: Comprehensive testing and documentation for new architecture
153
+ **Files**: Test suites and documentation updates
154
+ **Test**: Full integration testing with different file systems
155
+ **Definition of Done**:
156
+ - 🔄 Unit tests for all bridge classes and providers
157
+ - 🔄 Integration tests with TreeComponent and ListItemsComponent
158
+ - 🔄 E2E tests with MemoryFileSystem and real file systems
159
+ - 🔄 Performance testing with large directory structures
160
+ - 🔄 API documentation and usage examples
161
+ - 🔄 Migration guide from legacy FileBrowser
162
+
163
+ **Status**: 🔄 NOT STARTED - Waiting for core implementation
164
+
165
+ ---
166
+
167
+ ## Phase 12 Current Focus
168
+
169
+ **Current Task**: Task 12.6 - Fix remaining provider interface compatibility issues
170
+ **Next Priority**: Task 12.7 - Add TreeModel method extensions for path navigation
171
+ **Progress**: Basic dual-panel functionality implemented with demo, some TypeScript errors remain
172
+ **Immediate Goal**: Fix final TypeScript issues and complete demo integration
173
+
174
+ ## Implementation Notes
175
+
176
+ ### Provider Interface Challenges
177
+ - TreeProvider and ListItemsProvider have specific method signatures
178
+ - Context menu interfaces may differ between components
179
+ - Selection event signatures need alignment
180
+ - MobX integration patterns must be consistent
181
+
182
+ ### TreeModel Integration
183
+ - TreeModel may not have selectPath/expandToPath methods
184
+ - May need to create wrapper or extend TreeComponent
185
+ - Alternative: use TreeProvider callbacks for path synchronization
186
+ - Ensure backward compatibility with existing TreeComponent usage
187
+
188
+ ### File System Integration
189
+ - IFileSystem interface is well-defined and stable
190
+ - FileSystemBridge provides clean abstraction
191
+ - Support for different file system implementations (Memory, Node, Browser)
192
+ - Error handling for permission and network issues
193
+
194
+ ### State Synchronization Patterns
195
+ - FileBrowserModel as single source of truth
196
+ - MobX reactive updates between tree and list
197
+ - Path state drives both components
198
+ - Selection coordination through model callbacks
199
+
200
+ Each task should be completed fully and tested before moving to the next. Focus on getting the basic functionality working before adding advanced features.
201
+
202
+ ---
203
+
204
+ ## Architecture Benefits
205
+
206
+ ### Code Reuse
207
+ - Leverages existing, tested TreeComponent and ListItemsComponent
208
+ - Avoids duplicating functionality that already exists
209
+ - Consistent behavior with other parts of the application
210
+ - Shared patterns for MobX integration and performance
211
+
212
+ ### Maintainability
213
+ - Changes to TreeComponent or ListItemsComponent benefit FileBrowser
214
+ - Single codebase for tree and list functionality
215
+ - Clear separation of concerns with adapters and providers
216
+ - Type-safe integration throughout
217
+
218
+ ### Flexibility
219
+ - Works with any IFileSystem implementation
220
+ - Easy to add new file system backends
221
+ - Provider pattern allows customization
222
+ - Clean integration points for extending functionality
223
+
224
+ ---
225
+
226
+ ## Notes for Engineering LLM
227
+
228
+ ### Current Focus
229
+ - **Working on Task 12.2**: Creating FileSystemTreeProvider
230
+ - **Next**: Task 12.3 - Create FileSystemListProvider
231
+ - **Priority**: Get basic dual-panel functionality working
232
+
233
+ ### Development Guidelines
234
+ 1. **TreeComponent Integration**: Left panel shows directories only using existing TreeComponent
235
+ 2. **ListItemsComponent Integration**: Right panel shows all items using existing ListItemsComponent
236
+ 3. **FileSystem Bridge**: Adapter that converts `@anymux/file-system` to component data structures
237
+ 4. **Provider Bridge**: Custom providers bridge FileSystem to TreeProvider and ListItemsProvider interfaces
238
+ 5. **State Synchronization**: FileBrowserModel orchestrates both components with synchronized state
239
+ 6. **File System Agnostic**: Works with any `@anymux/file-system` implementation
240
+
241
+ ### Testing Strategy
242
+ - **Unit Tests**: Test each provider independently
243
+ - **Integration Tests**: Test state synchronization between components
244
+ - **Visual Tests**: Verify dual-panel layout
245
+ - **Performance Tests**: Ensure independent component updates
246
+
247
+ ### Key Architectural Changes
248
+ - **Single Panel → Dual Panel**: Left navigation + right content
249
+ - **View Modes Split**: Left panel modes vs right panel view modes
250
+ - **Provider Simplified**: Remove git-specific code, focus on core interface
251
+ - **Content Type Aware**: Right panel switches between file preview and folder content
252
+
253
+ ---
254
+
255
+ ## Architecture Notes
256
+
257
+ ### Left Panel Modes
258
+ - **Tree**: Default hierarchical navigation (always available)
259
+ - **Git Graph**: Added by git provider (not in fs-ui)
260
+ - **Smart Folders**: Added by advanced providers
261
+ - **Bookmarks**: Added by providers with bookmark support
262
+
263
+ ### Right Panel Content
264
+ - **File Selected**: Shows file preview
265
+ - **Folder Selected**: Shows folder contents in selected view mode
266
+ - **View Modes**: List, Thumbnail, Treemap, Detail (only for folders)
267
+
268
+ ### Panel Coordination Rules
269
+ - **Independent**: View mode changes don't affect other panel
270
+ - **Coordinated**: Selection/navigation affects both panels
271
+ - **Current Item**: Always synchronized between panels and breadcrumbs
272
+ - **Responsive**: Left panel collapsible on mobile via hamburger button
273
+
274
+ ### Provider Responsibilities
275
+ - **fs-ui**: Core dual-panel UI + MemoryProvider for demos
276
+ - **Consumers**: Create specific providers (GitProvider, FileSystemProvider, etc.)
277
+ - **Integration**: Adapters bridge existing code with new dual-panel design
278
+
279
+ Each task should be completed fully before moving to the next. If any task fails testing, fix the issues before proceeding.
280
+
281
+ ---
282
+
283
+ ## 🚧 CURRENT PHASE: Phase 12 - TreeComponent and ListItemsComponent Integration
284
+
285
+ ### Phase 12: Rewrite FileBrowser to Leverage Existing Components
286
+
287
+ Instead of custom dual-panel implementation, integrate with existing TreeComponent and ListItemsComponent for better code reuse and consistency.
288
+
289
+ ### Task 12.1: Create FileSystem Bridge Adapter (✅ COMPLETED)
290
+ **Goal**: Create adapter that converts `@anymux/file-system` operations to TreeComponent and ListItemsComponent data structures
291
+ **Files**: `packages/fs-ui/src/FileBrowser/adapters/FileSystemBridge.ts`
292
+ **Test**: Unit test with MemoryFileSystem - verify directory tree and content loading
293
+ **Definition of Done**:
294
+ - ✅ FileSystemBridge class with IFileSystem integration
295
+ - ✅ loadDirectoryTree() method for TreeComponent (directories only)
296
+ - ✅ loadDirectoryContents() method for ListItemsComponent (all items)
297
+ - ✅ File operations (read, write, delete, rename, create)
298
+ - ✅ Error handling for permission issues
299
+ - ✅ Sorting: directories first, then files, both alphabetical
300
+ - ✅ Type-safe FileSystemItem interface
301
+
302
+ **Status**: ✅ COMPLETED
303
+
304
+ ### Task 12.2: Create FileSystemTreeProvider (🔄 IN PROGRESS)
305
+ **Goal**: Bridge FileSystemBridge to TreeComponent provider interface
306
+ **Files**: `packages/fs-ui/src/FileBrowser/providers/FileSystemTreeProvider.ts`
307
+ **Test**: Integration test with TreeComponent - verify directory-only tree
308
+ **Definition of Done**:
309
+ - 🔄 FileSystemTreeProvider implements TreeProvider interface
310
+ - 🔄 loadNodes() and loadChildren() for tree structure
311
+ - 🔄 onSelectionChange callback for synchronization
312
+ - 🔄 Context menu for directory operations
313
+ - 🔄 Directory operations (create, rename, delete folders)
314
+ - 🔄 Search functionality for directories
315
+ - 🔄 Proper MobX integration
316
+
317
+ **Status**: 🔄 STARTED - Need to fix interface compatibility
318
+
319
+ ### Task 12.3: Create FileSystemListProvider (🔄 IN PROGRESS)
320
+ **Goal**: Bridge FileSystemBridge to ListItemsComponent provider interface
321
+ **Files**: `packages/fs-ui/src/FileBrowser/providers/FileSystemListProvider.ts`
322
+ **Test**: Integration test with ListItemsComponent - verify all items display
323
+ **Definition of Done**:
324
+ - 🔄 FileSystemListProvider implements ListItemsProvider interface
325
+ - 🔄 loadItems() for current directory contents
326
+ - 🔄 getSupportedViewTypes() for view mode support
327
+ - 🔄 onItemAction for file/directory opening
328
+ - 🔄 onSelectionChange and onNavigation callbacks
329
+ - 🔄 Context menus for files and directories
330
+ - 🔄 File type icons and thumbnails
331
+ - 🔄 File operations integration
332
+
333
+ **Status**: 🔄 STARTED - Need to fix interface compatibility
334
+
335
+ ### Task 12.4: Create FileBrowserModel Orchestrator (🔄 IN PROGRESS)
336
+ **Goal**: Main model that orchestrates TreeComponent and ListItemsComponent
337
+ **Files**: `packages/fs-ui/src/FileBrowser/models/FileBrowserModel.ts`
338
+ **Test**: Integration test - verify state synchronization between components
339
+ **Definition of Done**:
340
+ - 🔄 FileBrowserModel with IFileSystem integration
341
+ - 🔄 FileSystemBridge, TreeProvider, ListProvider creation
342
+ - 🔄 TreeModel and ListItemsModel management
343
+ - 🔄 State synchronization methods (handleTreeSelection, handleListNavigation)
344
+ - 🔄 Navigation methods (navigateUp, navigateToPath, refresh)
345
+ - 🔄 Path breadcrumb computation
346
+ - 🔄 Error handling and loading states
347
+
348
+ **Status**: 🔄 STARTED - Need to fix TreeModel method compatibility
349
+
350
+ ### Task 12.5: Create FileBrowser Component (✅ COMPLETED)
351
+ **Goal**: Main React component that combines TreeComponent and ListItemsComponent
352
+ **Files**: `packages/fs-ui/src/FileBrowser/components/FileBrowser.tsx`
353
+ **Test**: Visual test - verify dual-panel layout with synchronized behavior
354
+ **Definition of Done**:
355
+ - ✅ FileBrowser component with IFileSystem prop
356
+ - ✅ Dual-panel layout: Tree (left) + ListItems (right)
357
+ - ✅ Breadcrumb navigation and controls
358
+ - ✅ Error handling and loading states
359
+ - ✅ Responsive design principles
360
+ - ✅ MobX observer integration
361
+ - ✅ Proper TypeScript interfaces
362
+
363
+ **Status**: ✅ COMPLETED
364
+
365
+ ### Task 12.6: Fix Provider Interface Compatibility (🔄 PARTIAL)
366
+ **Goal**: Ensure providers properly implement TreeProvider and ListItemsProvider interfaces
367
+ **Files**: Provider files and related interfaces
368
+ **Test**: TypeScript compilation and interface compliance
369
+ **Definition of Done**:
370
+ - 🔄 FileSystemTreeProvider fully implements TreeProvider
371
+ - 🔄 FileSystemListProvider fully implements ListItemsProvider
372
+ - 🔄 All method signatures match expected interfaces
373
+ - 🔄 MobX integration working properly
374
+ - 🔄 Context menu implementations working
375
+ - 🔄 Error handling in place
376
+
377
+ **Status**: 🔄 IN PROGRESS
378
+
379
+ ### Task 12.7: Add TreeModel Method Extensions
380
+ **Goal**: Extend TreeModel or create wrapper to support path selection and expansion
381
+ **Files**: TreeComponent integration or wrapper classes
382
+ **Test**: Unit test - verify path navigation works in tree
383
+ **Definition of Done**:
384
+ - 🔄 selectPath() method for programmatic tree selection
385
+ - 🔄 expandToPath() method for expanding tree to show path
386
+ - 🔄 refresh() method for tree reloading
387
+ - 🔄 Integration with FileBrowserModel synchronization
388
+ - 🔄 Backward compatibility maintained
389
+
390
+ **Status**: 🔄 NOT STARTED
391
+
392
+ ### Task 12.8: Create Demo Integration with MemoryFileSystem
393
+ **Goal**: Integration example using MemoryFileSystem for apps/web/list-samples
394
+ **Files**: Update list-samples page with FileBrowser tab
395
+ **Test**: E2E test - verify FileBrowser works in real application
396
+ **Definition of Done**:
397
+ - 🔄 MemoryFileSystem with sample directory structure
398
+ - 🔄 FileBrowser tab in list-samples page
399
+ - 🔄 Side-by-side comparison with ListItems-only
400
+ - 🔄 Demonstrate file system operations
401
+ - 🔄 Responsive design working
402
+ - 🔄 State synchronization visible
403
+
404
+ **Status**: 🔄 NOT STARTED
405
+
406
+ ### Task 12.9: Integration Testing and Documentation
407
+ **Goal**: Comprehensive testing and documentation for new architecture
408
+ **Files**: Test suites and documentation updates
409
+ **Test**: Full integration testing with different file systems
410
+ **Definition of Done**:
411
+ - 🔄 Unit tests for all bridge classes and providers
412
+ - 🔄 Integration tests with TreeComponent and ListItemsComponent
413
+ - 🔄 E2E tests with MemoryFileSystem and real file systems
414
+ - 🔄 Performance testing with large directory structures
415
+ - 🔄 API documentation and usage examples
416
+ - 🔄 Migration guide from legacy FileBrowser
417
+
418
+ **Status**: 🔄 NOT STARTED
419
+
420
+ ---
421
+
422
+ ## 🎉 LEGACY PHASES COMPLETED: Dual-Panel Architecture (✅ SUPERSEDED)
423
+
424
+ ### Phase 11: Real-World Integration ✅ COMPLETED BUT SUPERSEDED
425
+
426
+ ### Phase 11: Integration with Existing Applications
427
+
428
+ Now that the FileBrowser dual-panel system is complete, we need to integrate it with the existing applications to replace legacy file browsing components.
429
+
430
+ ### Task 11.1: Create FileSystemProvider for fs-document-viewer ✅ COMPLETED
431
+ **Goal**: Create a provider that works with IFileSystem interface
432
+ **Files**:
433
+ - ✅ `packages/fs-ui/src/FileBrowser/providers/FileSystemProvider.ts` - Already existed with comprehensive implementation
434
+ - ✅ `packages/fs-document-viewer/src/components/DocumentViewerWithFileBrowser.tsx` - Created new component
435
+ - ✅ `packages/fs-document-viewer/src/index.ts` - Updated exports
436
+ **Test**: Integration test with MemoryFileSystem and BrowserFS
437
+ **Definition of Done**:
438
+ - ✅ FileSystemProvider implements IFileBrowserProvider
439
+ - ✅ Works with any IFileSystem implementation
440
+ - ✅ Supports file preview for document viewing
441
+ - ✅ Provides proper file icons and metadata
442
+ - ✅ Handles filesystem errors gracefully
443
+ - ✅ New DocumentViewerWithFileBrowser component created
444
+ - ✅ Maintains backward compatibility with existing DocumentViewer
445
+
446
+ ### Task 11.2: Create GitProvider for Git Browser
447
+ **Goal**: Create a provider that works with Git repositories
448
+ **Files**:
449
+ - `packages/fs-ui/src/FileBrowser/providers/GitProvider.ts`
450
+ - `apps/web/lib/GitBrowserApp/components/RepositoryView/RepositoryViewWithFileBrowser.tsx`
451
+ **Test**: Integration test with GitRepositoryModel and GitWrapperIntegration
452
+ **Definition of Done**:
453
+ - ✅ GitProvider implements IFileBrowserProvider
454
+ - ✅ Works with GitRepositoryModel and GitWrapperIntegration
455
+ - ✅ Supports Git-specific features (commit info, diff preview)
456
+ - ✅ Provides Git-aware file icons and status
457
+ - ✅ Handles Git operations (checkout, branch switching)
458
+ - ✅ New RepositoryViewWithFileBrowser component created
459
+ - ✅ Maintains backward compatibility with existing FileTree
460
+
461
+ ### Task 11.3: Update fs-document-viewer Package
462
+ **Goal**: Replace legacy DocumentViewer with FileBrowser-based version
463
+ **Files**:
464
+ - `packages/fs-document-viewer/src/index.ts`
465
+ - `packages/fs-document-viewer/src/providers/DocumentViewerProvider.ts`
466
+ **Test**: E2E test with both old and new DocumentViewer
467
+ **Definition of Done**:
468
+ - ✅ Export both DocumentViewer (legacy) and DocumentViewerWithFileBrowser
469
+ - ✅ Create specialized DocumentViewerProvider with document preview
470
+ - ✅ Update package exports to include new components
471
+ - ✅ Add migration guide in README
472
+ - ✅ Ensure feature parity with original DocumentViewer
473
+ - ✅ Add responsive design improvements
474
+
475
+ ### Task 11.4: Update Git Browser Application
476
+ **Goal**: Replace legacy FileTree with FileBrowser-based version
477
+ **Files**:
478
+ - `apps/web/lib/GitBrowserApp/components/RepositoryView/RepositoryView.tsx`
479
+ - `apps/web/lib/GitBrowserApp/providers/GitBrowserProvider.ts`
480
+ **Test**: E2E test with Git repository browsing
481
+ **Definition of Done**:
482
+ - ✅ Replace FileTree component with FileBrowser
483
+ - ✅ Create specialized GitBrowserProvider with Git features
484
+ - ✅ Integrate with existing Git operations
485
+ - ✅ Maintain file selection and preview functionality
486
+ - ✅ Ensure responsive design works in Git Browser context
487
+ - ✅ Add Git-specific view modes (history, diff, blame)
488
+
489
+ ### Task 11.5: Integration Testing and Documentation
490
+ **Goal**: Comprehensive testing and documentation for integrations
491
+ **Files**:
492
+ - Integration test suites
493
+ - Migration documentation
494
+ - Performance benchmarks
495
+ **Test**: Full regression testing of both applications
496
+ **Definition of Done**:
497
+ - ✅ All existing functionality preserved
498
+ - ✅ No regressions in performance
499
+ - ✅ Mobile responsiveness working in both applications
500
+ - ✅ Accessibility compliance maintained
501
+ - ✅ Complete migration documentation
502
+ - ✅ Performance comparison benchmarks
503
+ - ✅ User migration guides
504
+
505
+ ---
506
+
507
+ ## Integration Notes
508
+
509
+ ### FileSystemProvider Features
510
+ - Direct IFileSystem integration
511
+ - File type detection and icons
512
+ - Document preview capabilities
513
+ - Error handling and recovery
514
+ - Performance optimization for large directories
515
+
516
+ ### GitProvider Features
517
+ - Git repository integration
518
+ - Commit and branch awareness
519
+ - File status indicators (modified, staged, etc.)
520
+ - Git operations integration
521
+ - Diff and history preview
522
+
523
+ ### Migration Strategy
524
+ - Backward compatibility maintained
525
+ - Side-by-side deployment option
526
+ - Gradual migration path
527
+ - Feature flag support
528
+ - Performance monitoring
529
+
530
+ ### Testing Requirements
531
+ - Unit tests for all providers
532
+ - Integration tests with real filesystems/repositories
533
+ - Performance regression testing
534
+ - Accessibility compliance verification
535
+ - Mobile responsiveness validation
536
+
537
+ Each integration task should be completed and tested thoroughly before proceeding to the next.
@@ -0,0 +1,126 @@
1
+ import React from 'react';
2
+
3
+ export interface FileBrowserItem {
4
+ id: string;
5
+ name: string;
6
+ path: string;
7
+ type: 'file' | 'directory';
8
+ size?: number;
9
+ lastModified?: Date;
10
+ permissions?: string;
11
+ metadata?: Record<string, any>;
12
+ children?: FileBrowserItem[];
13
+ isLoading?: boolean;
14
+ hasChildren?: boolean;
15
+ }
16
+
17
+ export interface FileBrowserItemDetails extends FileBrowserItem {
18
+ content?: string | Uint8Array;
19
+ preview?: PreviewData;
20
+ properties?: Record<string, any>;
21
+ }
22
+
23
+ export interface PreviewData {
24
+ type: 'image' | 'text' | 'video' | 'audio' | 'document';
25
+ url?: string;
26
+ content?: string;
27
+ thumbnail?: string;
28
+ metadata?: Record<string, any>;
29
+ }
30
+
31
+ export interface IconDefinition {
32
+ type: 'lucide' | 'custom';
33
+ name?: string;
34
+ component?: React.ComponentType<any>;
35
+ color?: string;
36
+ size?: number;
37
+ }
38
+
39
+ export interface ItemChange {
40
+ type: 'added' | 'removed' | 'modified' | 'moved';
41
+ item: FileBrowserItem;
42
+ oldPath?: string;
43
+ newPath?: string;
44
+ }
45
+
46
+ export interface FilterCriteria {
47
+ searchText?: string;
48
+ fileTypes?: string[];
49
+ dateRange?: {
50
+ start: Date;
51
+ end: Date;
52
+ };
53
+ sizeRange?: {
54
+ min: number;
55
+ max: number;
56
+ };
57
+ customFilters?: Record<string, any>;
58
+ }
59
+
60
+ export interface SortCriteria {
61
+ field: string;
62
+ direction: 'asc' | 'desc';
63
+ }
64
+
65
+ export interface NavigationState {
66
+ currentPath: string;
67
+ history: string[];
68
+ historyIndex: number;
69
+ canGoBack: boolean;
70
+ canGoForward: boolean;
71
+ }
72
+
73
+ export interface SelectionState {
74
+ selectedItems: Set<string>;
75
+ lastSelectedIndex: number;
76
+ focusedItemId: string | null;
77
+ selectionMode: 'single' | 'multiple';
78
+ }
79
+
80
+ export type LoadingState = 'idle' | 'loading' | 'success' | 'error';
81
+
82
+ export interface ErrorState {
83
+ message: string;
84
+ code?: string;
85
+ details?: any;
86
+ timestamp: Date;
87
+ }
88
+
89
+ // Event handlers for the FileBrowser
90
+ export interface FileBrowserEventHandlers {
91
+ onPathChange?: (path: string) => void;
92
+ onItemSelect?: (item: FileBrowserItem) => void;
93
+ onItemActivate?: (item: FileBrowserItem) => void;
94
+ onSelectionChange?: (selectedItems: FileBrowserItem[]) => void;
95
+ onError?: (error: ErrorState) => void;
96
+ onLoadingChange?: (isLoading: boolean) => void;
97
+ }
98
+
99
+ // Props for the main FileBrowser component
100
+ export interface FileBrowserProps {
101
+ // Data source
102
+ provider: any; // Will be typed as IFileBrowserProvider in implementation
103
+
104
+ // Initial state
105
+ initialPath?: string;
106
+ initialViewMode?: string;
107
+
108
+ // Event handlers
109
+ eventHandlers?: FileBrowserEventHandlers;
110
+
111
+ // UI configuration
112
+ className?: string;
113
+ style?: React.CSSProperties;
114
+ showToolbar?: boolean;
115
+ showBreadcrumb?: boolean;
116
+ showStatusBar?: boolean;
117
+ allowMultiSelect?: boolean;
118
+
119
+ // View mode configuration
120
+ availableViewModes?: string[];
121
+ defaultViewMode?: string;
122
+
123
+ // Customization
124
+ theme?: 'light' | 'dark' | 'auto';
125
+ density?: 'compact' | 'normal' | 'comfortable';
126
+ }