@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,146 @@
1
+ import React from 'react';
2
+ import { observer } from 'mobx-react-lite';
3
+ import type { ListViewType } from '../../providers/ListItemsProvider';
4
+
5
+ // AICODE-NOTE: Skeleton loader component for list items during loading
6
+ export interface ListLoaderProps {
7
+ viewType: ListViewType;
8
+ itemCount?: number;
9
+ itemWidth?: number;
10
+ itemHeight?: number;
11
+ className?: string;
12
+ }
13
+
14
+ const ListLoaderComponent: React.FC<ListLoaderProps> = ({
15
+ viewType,
16
+ itemCount = 12,
17
+ itemWidth = 200,
18
+ itemHeight = 140,
19
+ className = ''
20
+ }) => {
21
+ // AICODE-NOTE: Generate skeleton items based on view type
22
+ const skeletonItems = Array.from({ length: itemCount }, (_, index) => (
23
+ <SkeletonItem
24
+ key={index}
25
+ viewType={viewType}
26
+ itemWidth={itemWidth}
27
+ itemHeight={itemHeight}
28
+ />
29
+ ));
30
+
31
+ // AICODE-NOTE: Container styles based on view type
32
+ const getContainerClasses = () => {
33
+ switch (viewType.id) {
34
+ case 'grid':
35
+ case 'masonry-horizontal':
36
+ case 'masonry-vertical':
37
+ return `grid gap-3 p-4 ${className}`;
38
+ case 'details':
39
+ return `divide-y ${className}`;
40
+ default:
41
+ return `divide-y ${className}`;
42
+ }
43
+ };
44
+
45
+ const getContainerStyle = () => {
46
+ if (viewType.id === 'grid' || viewType.id.includes('masonry')) {
47
+ return {
48
+ gridTemplateColumns: 'repeat(auto-fill, minmax(160px, 1fr))'
49
+ };
50
+ }
51
+ return {};
52
+ };
53
+
54
+ return (
55
+ <div className={getContainerClasses()} style={getContainerStyle()}>
56
+ {skeletonItems}
57
+ </div>
58
+ );
59
+ };
60
+
61
+ // AICODE-NOTE: Individual skeleton item component
62
+ interface SkeletonItemProps {
63
+ viewType: ListViewType;
64
+ itemWidth: number;
65
+ itemHeight: number;
66
+ }
67
+
68
+ const SkeletonItem: React.FC<SkeletonItemProps> = ({
69
+ viewType,
70
+ itemWidth,
71
+ itemHeight
72
+ }) => {
73
+ // AICODE-NOTE: Base skeleton classes with animation
74
+ const baseSkeletonClasses = "animate-pulse bg-muted rounded";
75
+
76
+ // AICODE-NOTE: Grid/Masonry skeleton layout
77
+ if (viewType.id === 'grid' || viewType.id.includes('masonry')) {
78
+ return (
79
+ <div
80
+ className="flex flex-col items-center justify-start p-3 rounded-lg border border-transparent min-h-[140px]"
81
+ style={{ width: itemWidth }}
82
+ >
83
+ {/* AICODE-NOTE: Image/icon skeleton */}
84
+ <div
85
+ className={`${baseSkeletonClasses} mb-2 flex-1`}
86
+ style={{
87
+ width: itemWidth - 24,
88
+ height: itemHeight - 60,
89
+ minHeight: '80px'
90
+ }}
91
+ />
92
+
93
+ {/* AICODE-NOTE: Title skeleton */}
94
+ <div className="w-full space-y-1">
95
+ <div className={`${baseSkeletonClasses} h-4 w-3/4 mx-auto`} />
96
+ <div className={`${baseSkeletonClasses} h-3 w-1/2 mx-auto`} />
97
+ </div>
98
+
99
+ {/* AICODE-NOTE: Metadata skeleton */}
100
+ <div className={`${baseSkeletonClasses} h-3 w-16 mt-1`} />
101
+ </div>
102
+ );
103
+ }
104
+
105
+ // AICODE-NOTE: Details view skeleton layout
106
+ if (viewType.id === 'details') {
107
+ return (
108
+ <div className="flex items-center gap-4 p-2">
109
+ {/* AICODE-NOTE: Icon skeleton */}
110
+ <div className={`${baseSkeletonClasses} w-4 h-4 flex-shrink-0`} />
111
+
112
+ {/* AICODE-NOTE: Name column skeleton */}
113
+ <div className={`${baseSkeletonClasses} h-4 flex-1`} />
114
+
115
+ {/* AICODE-NOTE: Type column skeleton */}
116
+ <div className={`${baseSkeletonClasses} h-4 w-24`} />
117
+
118
+ {/* AICODE-NOTE: Modified column skeleton */}
119
+ <div className={`${baseSkeletonClasses} h-4 w-32`} />
120
+
121
+ {/* AICODE-NOTE: Size column skeleton */}
122
+ <div className={`${baseSkeletonClasses} h-4 w-20`} />
123
+ </div>
124
+ );
125
+ }
126
+
127
+ // AICODE-NOTE: Default list view skeleton layout
128
+ return (
129
+ <div className="flex items-center gap-3 p-2">
130
+ {/* AICODE-NOTE: Icon skeleton */}
131
+ <div className={`${baseSkeletonClasses} w-4 h-4 flex-shrink-0`} />
132
+
133
+ {/* AICODE-NOTE: Content skeleton */}
134
+ <div className="flex-1 min-w-0 space-y-1">
135
+ <div className={`${baseSkeletonClasses} h-4 w-3/4`} />
136
+ <div className={`${baseSkeletonClasses} h-3 w-1/2`} />
137
+ </div>
138
+
139
+ {/* AICODE-NOTE: Metadata skeleton */}
140
+ <div className={`${baseSkeletonClasses} h-3 w-16 flex-shrink-0`} />
141
+ </div>
142
+ );
143
+ };
144
+
145
+ // AICODE-NOTE: Export memoized component for performance
146
+ export const ListLoader = observer(ListLoaderComponent);
@@ -0,0 +1,80 @@
1
+ import React from 'react';
2
+ import { observer } from 'mobx-react-lite';
3
+ import { LoadingSpinner } from '@anymux/ui/components/loading-spinner';
4
+
5
+ const SIZE_MAP = { small: 'sm', medium: 'md', large: 'lg' } as const;
6
+ const TEXT_SIZE_MAP = { small: 'text-xs', medium: 'text-sm', large: 'text-base' } as const;
7
+ const SPACING_MAP = { small: 'space-y-1', medium: 'space-y-2', large: 'space-y-3' } as const;
8
+
9
+ export interface LoadingIndicatorProps {
10
+ size?: 'small' | 'medium' | 'large';
11
+ message?: string;
12
+ className?: string;
13
+ showSpinner?: boolean;
14
+ }
15
+
16
+ const LoadingIndicatorComponent: React.FC<LoadingIndicatorProps> = ({
17
+ size = 'medium',
18
+ message = 'Loading...',
19
+ className = '',
20
+ showSpinner = true,
21
+ }) => {
22
+ return (
23
+ <div className={`flex items-center justify-center ${className}`}>
24
+ <div className={`text-center ${SPACING_MAP[size]}`}>
25
+ {showSpinner && (
26
+ <div className="flex justify-center">
27
+ <LoadingSpinner size={SIZE_MAP[size]} label={message || 'Loading...'} />
28
+ </div>
29
+ )}
30
+ {message && (
31
+ <p className={`text-muted-foreground ${TEXT_SIZE_MAP[size]}`}>{message}</p>
32
+ )}
33
+ </div>
34
+ </div>
35
+ );
36
+ };
37
+
38
+ export interface InlineLoadingProps {
39
+ className?: string;
40
+ }
41
+
42
+ const InlineLoadingComponent: React.FC<InlineLoadingProps> = ({ className = '' }) => {
43
+ return (
44
+ <div className={`flex items-center gap-2 ${className}`}>
45
+ <LoadingSpinner size="sm" label="Loading..." className="size-3" />
46
+ <span className="text-xs text-muted-foreground">Loading...</span>
47
+ </div>
48
+ );
49
+ };
50
+
51
+ export interface LoadingProgressProps {
52
+ progress: number;
53
+ message?: string;
54
+ className?: string;
55
+ }
56
+
57
+ const LoadingProgressComponent: React.FC<LoadingProgressProps> = ({
58
+ progress,
59
+ message,
60
+ className = '',
61
+ }) => {
62
+ return (
63
+ <div className={`space-y-2 ${className}`}>
64
+ {message && (
65
+ <p className="text-sm text-muted-foreground text-center">{message}</p>
66
+ )}
67
+ <div className="w-full bg-muted rounded-full h-2">
68
+ <div
69
+ className="bg-primary h-2 rounded-full transition-all duration-300 ease-out"
70
+ style={{ width: `${Math.max(0, Math.min(100, progress))}%` }}
71
+ />
72
+ </div>
73
+ <p className="text-xs text-muted-foreground text-center">{Math.round(progress)}%</p>
74
+ </div>
75
+ );
76
+ };
77
+
78
+ export const LoadingIndicator = observer(LoadingIndicatorComponent);
79
+ export const InlineLoading = observer(InlineLoadingComponent);
80
+ export const LoadingProgress = observer(LoadingProgressComponent);
@@ -0,0 +1,92 @@
1
+ // Core components
2
+ export { ListItem } from './components/ListItem';
3
+ export { ListItems } from './components/ListItems';
4
+ export { ListContextMenu } from './components/ListContextMenu';
5
+ export { ViewTypeSelector } from './components/ViewTypeSelector';
6
+ export { SearchFilter } from './components/SearchFilter';
7
+ export { VirtualizedList } from './components/VirtualizedList';
8
+ export { VirtualizedGrid } from './components/VirtualizedGrid';
9
+ export { MasonryView } from './components/MasonryView';
10
+ export { ViewSizeControls } from './components/ViewSizeControls';
11
+ export { TreemapView } from './components/TreemapView';
12
+ export { CalculatedGridView } from './components/CalculatedGridView';
13
+
14
+ // Shared components
15
+ export { ListLoader } from './components/shared/ListLoader';
16
+ export { LoadingIndicator, InlineLoading, LoadingProgress } from './components/shared/LoadingIndicator';
17
+ export { ListErrorBoundary } from './components/shared/ErrorBoundary';
18
+ export { ErrorDisplay, NetworkError, LoadError } from './components/shared/ErrorDisplay';
19
+ export { EmptyState, NoItems, NoSearchResults, NoSelection } from './components/shared/EmptyState';
20
+
21
+ // Models
22
+ export { ListItemsModel } from './models/ListItemsModel';
23
+ export { TreemapModel } from './models/TreemapModel';
24
+
25
+ // Providers
26
+ export type { ListItemsProvider, ListViewType, TreemapNodeData, TreemapScanProgress } from './providers/ListItemsProvider';
27
+ export {
28
+ LIST_VIEW_TYPE,
29
+ GRID_VIEW_TYPE,
30
+ DETAILS_VIEW_TYPE,
31
+ MASONRY_HORIZONTAL_VIEW_TYPE,
32
+ MASONRY_VERTICAL_VIEW_TYPE,
33
+ TREEMAP_VIEW_TYPE
34
+ } from './providers/ListItemsProvider';
35
+ export { TestListProvider } from './providers/TestListProvider';
36
+
37
+ // Utilities
38
+ export { ListKeyboardHandler, useListKeyboard } from './utils/ListKeyboard';
39
+ export type { KeyboardNavigationOptions } from './utils/ListKeyboard';
40
+
41
+ export {
42
+ getListAccessibilityProps,
43
+ getItemAccessibilityProps,
44
+ createLiveRegionAnnouncement,
45
+ getNextFocusIndex,
46
+ FocusManager,
47
+ announceToScreenReader,
48
+ type AccessibilityConfig,
49
+ type ItemAccessibilityConfig,
50
+ type KeyboardNavigationConfig
51
+ } from './utils/ListAccessibility';
52
+
53
+ export { benchmark, benchmarkLogger, type BenchmarkResult, type BenchmarkReport } from './utils/BenchmarkLogger';
54
+
55
+ export {
56
+ GridLayoutCalculator,
57
+ createGridCalculator,
58
+ GRID_PRESETS,
59
+ type GridLayoutConfig,
60
+ type GridItemLayout,
61
+ type GridLayoutResult
62
+ } from './utils/GridLayoutCalculator';
63
+
64
+ export {
65
+ MasonryLayoutCalculator,
66
+ createMasonryCalculator,
67
+ MASONRY_PRESETS,
68
+ type MasonryLayoutConfig,
69
+ type MasonryItemLayout,
70
+ type MasonryLayoutResult,
71
+ type MasonryItemData
72
+ } from './utils/MasonryLayoutCalculator';
73
+
74
+ // Types
75
+ export type {
76
+ ListItemData,
77
+ ListLoadOptions,
78
+ ListLoadResult,
79
+ ListSelectionInfo,
80
+ ListDragDropInfo,
81
+ VirtualizationConfig,
82
+ ThumbnailSize,
83
+ ListContextMenuItem,
84
+ ListItemRenderer,
85
+ ListError
86
+ } from './types/ListTypes';
87
+
88
+ export type { ListItemProps } from './components/ListItem';
89
+ export type { ListItemsProps } from './components/ListItems';
90
+ export type { ViewTypeSelectorProps } from './components/ViewTypeSelector';
91
+ export type { VirtualizedListProps } from './components/VirtualizedList';
92
+ export type { VirtualizedGridProps } from './components/VirtualizedGrid';