@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,303 @@
1
+ # ListItemsComponent
2
+
3
+ A comprehensive, production-ready React component for displaying lists of items with multiple view types, virtualization, selection, drag & drop, and full accessibility support.
4
+
5
+ ## Features
6
+
7
+ ### ✅ Completed Features
8
+
9
+ #### Phase 1: Foundation
10
+ - **Multiple View Types**: List, Grid, Details, Masonry (horizontal/vertical)
11
+ - **MobX State Management**: Reactive state with proper observer patterns
12
+ - **Provider Architecture**: Flexible data provider interface
13
+ - **TypeScript Support**: Full type safety throughout
14
+
15
+ #### Phase 2: Selection & View Types
16
+ - **Selection Management**: Single/multi-select with keyboard modifiers
17
+ - **View Type Switching**: Seamless switching between different layouts
18
+ - **Focus Management**: Keyboard navigation and focus handling
19
+ - **Debug Logging**: Comprehensive logging for state changes
20
+
21
+ #### Phase 3: Performance & Virtualization
22
+ - **TRUE Virtualization**: Only renders 20-50 visible items instead of all 10,000+ items
23
+ - **Scroll-based Viewport**: Calculates visible range based on scroll position with throttling
24
+ - **Performance Optimization**: Memoized components and efficient re-renders
25
+ - **Dynamic Loading**: Range-based item loading for huge datasets
26
+ - **Memory Management**: Efficient cleanup and disposal
27
+ - **60fps Performance**: RequestAnimationFrame-based scroll handling for smooth experience
28
+
29
+ **Performance Metrics**:
30
+ - **Before Fix**: 10,000 DOM elements rendered, poor performance
31
+ - **After Fix**: 20-50 DOM elements rendered, smooth 60fps scrolling
32
+ - **Memory Usage**: 95% reduction in DOM nodes for large datasets
33
+
34
+ #### Phase 4: Advanced Features (Tasks 4.1-4.10)
35
+ - **Masonry View**: Pinterest-style layout with variable item heights
36
+ - **View Size Controls**: Adjustable item sizes (small/medium/large/extra-large)
37
+ - **Variable Item Dimensions**: Custom width/height per item
38
+ - **Fake Images**: Placeholder images with proper aspect ratios
39
+ - **Large Dataset Support**: Handles 10,000+ items efficiently
40
+ - **Items Per Row Control**: Manual and automatic column count
41
+
42
+ #### Phase 5: Polish & UX (Tasks 5.1-5.4)
43
+ - **Loading States**: Skeleton UI and loading indicators
44
+ - **Error Handling**: Comprehensive error boundaries and user-friendly messages
45
+ - **Empty States**: Customizable no-items scenarios
46
+ - **Accessibility (ARIA)**: Full screen reader support and keyboard navigation
47
+
48
+ ### 🔧 MobX Architecture & Reactivity
49
+
50
+ #### Critical MobX Pattern: Observer Components in Loops
51
+
52
+ **PROBLEM**: Components rendered inside `.map()`, `.filter()`, or other iteration methods must be extracted into separate observer components for proper MobX reactivity.
53
+
54
+ **WRONG** ❌:
55
+ ```tsx
56
+ const MyComponent = observer(() => (
57
+ <div>
58
+ {items.map(item => (
59
+ <div key={item.id}>{item.name}</div> // Won't react to item.name changes!
60
+ ))}
61
+ </div>
62
+ ))
63
+ ```
64
+
65
+ **CORRECT** ✅:
66
+ ```tsx
67
+ // Extract into separate observer component
68
+ const ItemComponent = observer(({ item }) => (
69
+ <div>{item.name}</div>
70
+ ))
71
+
72
+ const MyComponent = observer(() => (
73
+ <div>
74
+ {items.map(item => (
75
+ <ItemComponent key={item.id} item={item} />
76
+ ))}
77
+ </div>
78
+ ))
79
+ ```
80
+
81
+ #### Fixed Components
82
+
83
+ We identified and fixed MobX reactivity issues in these components:
84
+
85
+ 1. **ViewTypeSelector**: Extracted `ViewTypeButton` observer component
86
+ 2. **ViewSizeControls**: Extracted `SizePresetButton` observer component
87
+ 3. **ListContextMenu**: Extracted `ContextMenuItem` observer component
88
+ 4. **MasonryView**: Extracted `MasonryColumn` and `MasonryItem` observer components
89
+ 5. **VirtualizedGrid**: Extracted `GridItemWrapper` observer component
90
+
91
+ #### MobX Best Practices Applied
92
+
93
+ - **makeAutoObservable**: Used throughout for automatic observable detection
94
+ - **Observable Collections**: `observable.map()` for reactive lookups
95
+ - **Flow for Async**: Proper async action handling with `flow()`
96
+ - **Computed Properties**: Performance-optimized derived state
97
+ - **Observer Components**: All React components wrapped with `observer()`
98
+ - **Component Extraction**: Separate observer components for list items
99
+
100
+ ## Architecture
101
+
102
+ ### Core Components
103
+
104
+ ```
105
+ ListItemsComponent/
106
+ ├── components/
107
+ │ ├── ListItems.tsx # Main container component
108
+ │ ├── ListItem.tsx # Individual item renderer
109
+ │ ├── ViewTypeSelector.tsx # View switching controls
110
+ │ ├── ViewSizeControls.tsx # Size adjustment controls
111
+ │ ├── VirtualizedList.tsx # Virtualized list view
112
+ │ ├── VirtualizedGrid.tsx # Virtualized grid view
113
+ │ ├── MasonryView.tsx # Masonry layout view
114
+ │ ├── ListLoader.tsx # Loading states & skeletons
115
+ │ ├── LoadingIndicator.tsx # Partial loading indicators
116
+ │ ├── ErrorBoundary.tsx # React error boundaries
117
+ │ ├── ErrorDisplay.tsx # Error state display
118
+ │ ├── EmptyState.tsx # No items state
119
+ │ └── ListContextMenu.tsx # Right-click context menu
120
+ ├── models/
121
+ │ └── ListItemsModel.ts # MobX state management
122
+ ├── providers/
123
+ │ └── ListItemsProvider.ts # Data provider interface
124
+ ├── types/
125
+ │ └── ListTypes.ts # TypeScript definitions
126
+ ├── utils/
127
+ │ └── ListAccessibility.ts # ARIA utilities
128
+ └── index.ts # Public exports
129
+ ```
130
+
131
+ ### MobX State Management
132
+
133
+ The `ListItemsModel` uses MobX for reactive state management:
134
+
135
+ ```typescript
136
+ export class ListItemsModel implements ListItemsProviderListener {
137
+ // Observable collections for reactive updates
138
+ items: ListItemData[] = [];
139
+ itemMap = observable.map<string, ListItemData>();
140
+ selectedItems = observable.map<string, ListItemData>();
141
+
142
+ // Computed properties for derived state
143
+ get selectedItemsArray(): ListItemData[] {
144
+ return Array.from(this.selectedItems.values());
145
+ }
146
+
147
+ // Flow for async actions
148
+ loadItems = flow(function* (this: ListItemsModel, options?: ListLoadOptions) {
149
+ // Async loading logic
150
+ });
151
+
152
+ constructor(public provider: ListItemsProvider) {
153
+ makeAutoObservable(this, {});
154
+ }
155
+ }
156
+ ```
157
+
158
+ ### Provider Pattern
159
+
160
+ The component uses a provider pattern for data access:
161
+
162
+ ```typescript
163
+ export interface ListItemsProvider {
164
+ // Data loading
165
+ loadItems(options?: ListLoadOptions): Promise<ListLoadResult>;
166
+ loadItemRange?(start: number, end: number): Promise<ListLoadResult>;
167
+
168
+ // Configuration
169
+ isMultiSelectEnabled: boolean;
170
+ isDragDropEnabled: boolean;
171
+ isVirtualizationEnabled: boolean;
172
+
173
+ // Event handlers
174
+ onSelectionChange?(info: ListSelectionInfo): void;
175
+ onItemDoubleClick?(item: ListItemData): void;
176
+ onViewTypeChange?(viewType: ListViewType): void;
177
+ }
178
+ ```
179
+
180
+ ## Usage
181
+
182
+ ### Basic Usage
183
+
184
+ ```tsx
185
+ import { ListItems, createMockListProvider } from '@anymux/fs-ui';
186
+
187
+ function MyComponent() {
188
+ const provider = createMockListProvider(1000); // 1000 mock items
189
+
190
+ return (
191
+ <ListItems
192
+ model={new ListItemsModel(provider)}
193
+ height={600}
194
+ width={800}
195
+ enableVirtualization={true}
196
+ />
197
+ );
198
+ }
199
+ ```
200
+
201
+ ### Advanced Usage with Custom Provider
202
+
203
+ ```typescript
204
+ class MyCustomProvider implements ListItemsProvider {
205
+ isMultiSelectEnabled = true;
206
+ isDragDropEnabled = true;
207
+ isVirtualizationEnabled = true;
208
+
209
+ async loadItems(options?: ListLoadOptions): Promise<ListLoadResult> {
210
+ // Your custom data loading logic
211
+ const response = await fetch('/api/items');
212
+ const data = await response.json();
213
+
214
+ return {
215
+ items: data.items,
216
+ totalCount: data.total
217
+ };
218
+ }
219
+
220
+ onSelectionChange(info: ListSelectionInfo): void {
221
+ console.log('Selection changed:', info.selectedItems);
222
+ }
223
+
224
+ onItemDoubleClick(item: ListItemData): void {
225
+ console.log('Item double-clicked:', item.name);
226
+ }
227
+ }
228
+ ```
229
+
230
+ ### View Types
231
+
232
+ The component supports multiple view types:
233
+
234
+ ```typescript
235
+ const viewTypes: ListViewType[] = [
236
+ { id: 'list', name: 'List', icon: 'list' },
237
+ { id: 'grid', name: 'Grid', icon: 'grid' },
238
+ { id: 'details', name: 'Details', icon: 'table' },
239
+ { id: 'masonry-horizontal', name: 'Masonry', icon: 'grid' }
240
+ ];
241
+ ```
242
+
243
+ ### Accessibility
244
+
245
+ Full ARIA support is built-in:
246
+
247
+ - Screen reader announcements
248
+ - Keyboard navigation (Arrow keys, Home, End, Page Up/Down)
249
+ - Focus management
250
+ - Role and state attributes
251
+ - Live region updates
252
+
253
+ ### Performance
254
+
255
+ - **Virtualization**: Handles 10,000+ items efficiently
256
+ - **Memoization**: Components optimized with React.memo
257
+ - **Observable Maps**: O(1) selection lookups
258
+ - **Range Loading**: Dynamic loading of visible items
259
+ - **Proper Observer Patterns**: Efficient MobX reactivity
260
+
261
+ ## Development
262
+
263
+ ### Building
264
+
265
+ ```bash
266
+ npm run build
267
+ ```
268
+
269
+ ### Testing
270
+
271
+ ```bash
272
+ npm run test
273
+ ```
274
+
275
+ ### Demo
276
+
277
+ ```bash
278
+ cd apps/web
279
+ npm run dev
280
+ # Visit http://localhost:3000/list-samples
281
+ ```
282
+
283
+ ## Future Enhancements
284
+
285
+ - **Drag & Drop**: Visual feedback and drop zones
286
+ - **Context Menu**: Rich right-click menus
287
+ - **Filtering**: Built-in search and filter capabilities
288
+ - **Sorting**: Column-based sorting for details view
289
+ - **Theming**: Customizable appearance
290
+ - **Export**: CSV/JSON export functionality
291
+
292
+ ## Contributing
293
+
294
+ 1. Follow MobX best practices (see architecture section above)
295
+ 2. Extract components inside loops into separate observer components
296
+ 3. Use `makeAutoObservable` for new models
297
+ 4. Add proper TypeScript types
298
+ 5. Include accessibility attributes
299
+ 6. Write tests for new features
300
+
301
+ ## License
302
+
303
+ MIT