@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,155 @@
1
+ import { FileBrowserItem, FileBrowserItemDetails, IconDefinition, PreviewData, ItemChange } from './FileBrowserTypes';
2
+ import { ViewModeDefinition } from './ViewModeTypes';
3
+
4
+ export interface IFileBrowserProvider {
5
+ // Identification
6
+ readonly id: string;
7
+ readonly name: string;
8
+ readonly version: string;
9
+
10
+ // Data operations
11
+ loadItems(path: string): Promise<FileBrowserItem[]>;
12
+ loadItemDetails(item: FileBrowserItem): Promise<FileBrowserItemDetails>;
13
+ refreshItems(path: string): Promise<FileBrowserItem[]>;
14
+
15
+ // Path operations
16
+ normalizePath(path: string): string;
17
+ getParentPath(path: string): string | null;
18
+ resolvePath(basePath: string, relativePath: string): string;
19
+
20
+ // Capabilities
21
+ getSupportedViewModes(): ViewModeDefinition[];
22
+ getToolbarActions(): ToolbarAction[];
23
+ getContextMenuActions(item: FileBrowserItem): ContextAction[];
24
+ getDefaultViewMode(): string;
25
+
26
+ // Operations
27
+ canPerformAction(action: string, items: FileBrowserItem[]): boolean;
28
+ performAction(action: string, items: FileBrowserItem[]): Promise<ActionResult>;
29
+
30
+ // Customization
31
+ getItemIcon(item: FileBrowserItem): IconDefinition;
32
+ getItemPreview(item: FileBrowserItem): Promise<PreviewData | null>;
33
+ getItemDisplayName(item: FileBrowserItem): string;
34
+ getItemTooltip(item: FileBrowserItem): string;
35
+
36
+ // Filtering and sorting
37
+ getAvailableFilters(): FilterDefinition[];
38
+ getAvailableSortFields(): SortFieldDefinition[];
39
+ applyFilter(items: FileBrowserItem[], criteria: any): FileBrowserItem[];
40
+ applySort(items: FileBrowserItem[], field: string, direction: 'asc' | 'desc'): FileBrowserItem[];
41
+
42
+ // Events
43
+ onItemsChanged(callback: (changes: ItemChange[]) => void): () => void;
44
+ onError(callback: (error: Error) => void): () => void;
45
+
46
+ // Lifecycle
47
+ initialize?(): Promise<void>;
48
+ dispose?(): void;
49
+ }
50
+
51
+ export interface ToolbarAction {
52
+ id: string;
53
+ label: string;
54
+ icon: IconDefinition;
55
+ tooltip?: string;
56
+ category?: string;
57
+ priority?: number;
58
+ shortcut?: string;
59
+
60
+ // Visibility and state
61
+ isVisible?: (context: ActionContext) => boolean;
62
+ isEnabled?: (context: ActionContext) => boolean;
63
+ isActive?: (context: ActionContext) => boolean;
64
+
65
+ // Action handler
66
+ action: (context: ActionContext) => Promise<void> | void;
67
+
68
+ // UI customization
69
+ variant?: 'default' | 'primary' | 'secondary' | 'destructive';
70
+ size?: 'sm' | 'md' | 'lg';
71
+ showLabel?: boolean;
72
+ }
73
+
74
+ export interface ContextAction {
75
+ id: string;
76
+ label: string;
77
+ icon?: IconDefinition;
78
+ shortcut?: string;
79
+
80
+ // Grouping
81
+ group?: string;
82
+ separator?: boolean;
83
+
84
+ // State
85
+ isEnabled?: (context: ActionContext) => boolean;
86
+ isVisible?: (context: ActionContext) => boolean;
87
+
88
+ // Action handler
89
+ action: (context: ActionContext) => Promise<void> | void;
90
+
91
+ // Submenu support
92
+ submenu?: ContextAction[];
93
+ }
94
+
95
+ export interface ActionContext {
96
+ selectedItems: FileBrowserItem[];
97
+ currentPath: string;
98
+ provider: IFileBrowserProvider;
99
+ viewMode: string;
100
+ allItems: FileBrowserItem[];
101
+ }
102
+
103
+ export interface ActionResult {
104
+ success: boolean;
105
+ message?: string;
106
+ data?: any;
107
+ error?: Error;
108
+ }
109
+
110
+ export interface FilterDefinition {
111
+ id: string;
112
+ label: string;
113
+ type: 'text' | 'select' | 'multiselect' | 'date' | 'range' | 'boolean';
114
+ defaultValue?: any;
115
+ options?: { value: any; label: string }[];
116
+ placeholder?: string;
117
+ }
118
+
119
+ export interface SortFieldDefinition {
120
+ id: string;
121
+ label: string;
122
+ defaultDirection?: 'asc' | 'desc';
123
+ customSort?: (a: FileBrowserItem, b: FileBrowserItem, direction: 'asc' | 'desc') => number;
124
+ }
125
+
126
+ export interface ProviderCapabilities {
127
+ canCreate: boolean;
128
+ canRead: boolean;
129
+ canUpdate: boolean;
130
+ canDelete: boolean;
131
+ canMove: boolean;
132
+ canCopy: boolean;
133
+ canRename: boolean;
134
+ canUpload: boolean;
135
+ canDownload: boolean;
136
+ canPreview: boolean;
137
+ canSearch: boolean;
138
+ canFilter: boolean;
139
+ canSort: boolean;
140
+ supportsNavigation: boolean;
141
+ supportsSelection: boolean;
142
+ supportsHierarchy: boolean;
143
+ maxFileSize?: number;
144
+ supportedFileTypes?: string[];
145
+ }
146
+
147
+ export interface ProviderConfiguration {
148
+ enableLogging?: boolean;
149
+ cacheSize?: number;
150
+ cacheTTL?: number;
151
+ batchSize?: number;
152
+ timeout?: number;
153
+ retryAttempts?: number;
154
+ customOptions?: Record<string, any>;
155
+ }
@@ -0,0 +1,235 @@
1
+ import React from 'react';
2
+ import { FileBrowserItem, IconDefinition } from './FileBrowserTypes';
3
+
4
+ export interface UIComponentProps {
5
+ className?: string;
6
+ style?: React.CSSProperties;
7
+ children?: React.ReactNode;
8
+ }
9
+
10
+ export interface LoadingSpinnerProps extends UIComponentProps {
11
+ size?: 'sm' | 'md' | 'lg';
12
+ message?: string;
13
+ overlay?: boolean;
14
+ }
15
+
16
+ export interface ErrorBoundaryProps extends UIComponentProps {
17
+ fallback?: React.ComponentType<ErrorFallbackProps>;
18
+ onError?: (error: Error, errorInfo: React.ErrorInfo) => void;
19
+ }
20
+
21
+ export interface ErrorFallbackProps {
22
+ error: Error;
23
+ resetError: () => void;
24
+ }
25
+
26
+ export interface FileIconProps extends UIComponentProps {
27
+ item: FileBrowserItem;
28
+ size?: number | 'sm' | 'md' | 'lg';
29
+ variant?: 'outline' | 'filled';
30
+ }
31
+
32
+ export interface VirtualizedListProps extends UIComponentProps {
33
+ items: any[];
34
+ itemHeight: number | ((index: number) => number);
35
+ renderItem: (props: VirtualizedItemProps) => React.ReactNode;
36
+ overscan?: number;
37
+ scrollToIndex?: number;
38
+ onScroll?: (scrollTop: number) => void;
39
+ }
40
+
41
+ export interface VirtualizedItemProps {
42
+ index: number;
43
+ item: any;
44
+ style: React.CSSProperties;
45
+ isVisible: boolean;
46
+ }
47
+
48
+ export interface BreadcrumbProps extends UIComponentProps {
49
+ path: string;
50
+ onNavigate: (path: string) => void;
51
+ maxItems?: number;
52
+ separator?: React.ReactNode;
53
+ }
54
+
55
+ export interface BreadcrumbItem {
56
+ label: string;
57
+ path: string;
58
+ isClickable: boolean;
59
+ }
60
+
61
+ export interface PathInputProps extends UIComponentProps {
62
+ value: string;
63
+ onChange: (value: string) => void;
64
+ onSubmit: (value: string) => void;
65
+ placeholder?: string;
66
+ autoComplete?: string[];
67
+ }
68
+
69
+ export interface NavigationButtonsProps extends UIComponentProps {
70
+ canGoBack: boolean;
71
+ canGoForward: boolean;
72
+ canGoUp: boolean;
73
+ onGoBack: () => void;
74
+ onGoForward: () => void;
75
+ onGoUp: () => void;
76
+ }
77
+
78
+ export interface DynamicToolbarProps extends UIComponentProps {
79
+ actions: ToolbarActionConfig[];
80
+ context: ToolbarContext;
81
+ variant?: 'horizontal' | 'vertical';
82
+ size?: 'sm' | 'md' | 'lg';
83
+ }
84
+
85
+ export interface ToolbarActionConfig {
86
+ id: string;
87
+ label: string;
88
+ icon: IconDefinition;
89
+ tooltip?: string;
90
+ shortcut?: string;
91
+ variant?: 'default' | 'primary' | 'secondary' | 'destructive';
92
+ size?: 'sm' | 'md' | 'lg';
93
+ showLabel?: boolean;
94
+ isVisible?: boolean;
95
+ isEnabled?: boolean;
96
+ isActive?: boolean;
97
+ action: () => void;
98
+ }
99
+
100
+ export interface ToolbarContext {
101
+ selectedItems: FileBrowserItem[];
102
+ currentPath: string;
103
+ viewMode: string;
104
+ hasSelection: boolean;
105
+ }
106
+
107
+ export interface ViewModeToggleProps extends UIComponentProps {
108
+ viewModes: ViewModeOption[];
109
+ currentViewMode: string;
110
+ onViewModeChange: (viewMode: string) => void;
111
+ variant?: 'tabs' | 'dropdown' | 'buttons';
112
+ }
113
+
114
+ export interface ViewModeOption {
115
+ id: string;
116
+ name: string;
117
+ icon: IconDefinition;
118
+ tooltip?: string;
119
+ isEnabled?: boolean;
120
+ }
121
+
122
+ export interface FilterControlsProps extends UIComponentProps {
123
+ filters: FilterConfig[];
124
+ values: Record<string, any>;
125
+ onChange: (filterId: string, value: any) => void;
126
+ onReset: () => void;
127
+ variant?: 'inline' | 'dropdown' | 'sidebar';
128
+ }
129
+
130
+ export interface FilterConfig {
131
+ id: string;
132
+ label: string;
133
+ type: 'text' | 'select' | 'multiselect' | 'date' | 'range' | 'boolean';
134
+ placeholder?: string;
135
+ options?: FilterOption[];
136
+ defaultValue?: any;
137
+ isVisible?: boolean;
138
+ isEnabled?: boolean;
139
+ }
140
+
141
+ export interface FilterOption {
142
+ value: any;
143
+ label: string;
144
+ description?: string;
145
+ icon?: IconDefinition;
146
+ }
147
+
148
+ export interface ActionButtonsProps extends UIComponentProps {
149
+ actions: ActionButtonConfig[];
150
+ variant?: 'toolbar' | 'context' | 'floating';
151
+ size?: 'sm' | 'md' | 'lg';
152
+ }
153
+
154
+ export interface ActionButtonConfig {
155
+ id: string;
156
+ label: string;
157
+ icon?: IconDefinition;
158
+ tooltip?: string;
159
+ variant?: 'default' | 'primary' | 'secondary' | 'destructive';
160
+ isVisible?: boolean;
161
+ isEnabled?: boolean;
162
+ action: () => void;
163
+ }
164
+
165
+ export interface ContextMenuProps extends UIComponentProps {
166
+ isOpen: boolean;
167
+ position: { x: number; y: number };
168
+ items: ContextMenuItem[];
169
+ onClose: () => void;
170
+ }
171
+
172
+ export interface ContextMenuItem {
173
+ id: string;
174
+ label: string;
175
+ icon?: IconDefinition;
176
+ shortcut?: string;
177
+ type?: 'item' | 'separator' | 'submenu';
178
+ isEnabled?: boolean;
179
+ isVisible?: boolean;
180
+ action?: () => void;
181
+ submenu?: ContextMenuItem[];
182
+ }
183
+
184
+ export interface TooltipProps extends UIComponentProps {
185
+ content: React.ReactNode;
186
+ placement?: 'top' | 'bottom' | 'left' | 'right';
187
+ delay?: number;
188
+ disabled?: boolean;
189
+ }
190
+
191
+ export interface DropZoneProps extends UIComponentProps {
192
+ onDrop: (files: FileList) => void;
193
+ onDragEnter?: () => void;
194
+ onDragLeave?: () => void;
195
+ accept?: string[];
196
+ multiple?: boolean;
197
+ disabled?: boolean;
198
+ overlay?: boolean;
199
+ }
200
+
201
+ export interface SelectionIndicatorProps extends UIComponentProps {
202
+ isSelected: boolean;
203
+ isFocused: boolean;
204
+ isMultiSelect: boolean;
205
+ onClick?: () => void;
206
+ }
207
+
208
+ export interface ResizeHandleProps extends UIComponentProps {
209
+ direction: 'horizontal' | 'vertical';
210
+ onResize: (delta: number) => void;
211
+ onResizeStart?: () => void;
212
+ onResizeEnd?: () => void;
213
+ }
214
+
215
+ export interface KeyboardNavigationProps {
216
+ items: any[];
217
+ selectedIndex: number;
218
+ onSelectionChange: (index: number) => void;
219
+ onActivate: (index: number) => void;
220
+ disabled?: boolean;
221
+ multiSelect?: boolean;
222
+ }
223
+
224
+ export type ThemeVariant = 'light' | 'dark' | 'auto';
225
+ export type SizeVariant = 'xs' | 'sm' | 'md' | 'lg' | 'xl';
226
+ export type ColorVariant = 'default' | 'primary' | 'secondary' | 'success' | 'warning' | 'error';
227
+
228
+ export interface ThemeConfig {
229
+ variant: ThemeVariant;
230
+ colors: Record<string, string>;
231
+ spacing: Record<string, number>;
232
+ borderRadius: Record<string, number>;
233
+ fontSize: Record<string, number>;
234
+ shadows: Record<string, string>;
235
+ }
@@ -0,0 +1,150 @@
1
+ import React from 'react';
2
+ import { IconDefinition } from './FileBrowserTypes';
3
+
4
+ export interface ViewModeDefinition {
5
+ id: string;
6
+ name: string;
7
+ description?: string;
8
+ icon: IconDefinition;
9
+ component: React.ComponentType<ViewModeComponentProps>;
10
+ capabilities: ViewModeCapabilities;
11
+ settings?: ViewModeSettings;
12
+ isDefault?: boolean;
13
+ priority?: number;
14
+ }
15
+
16
+ export interface ViewModeComponentProps {
17
+ model: any; // Will be typed more specifically in implementation
18
+ className?: string;
19
+ style?: React.CSSProperties;
20
+ }
21
+
22
+ export interface ViewModeCapabilities {
23
+ supportsSelection: boolean;
24
+ supportsMultiSelection: boolean;
25
+ supportsNavigation: boolean;
26
+ supportsSorting: boolean;
27
+ supportsFiltering: boolean;
28
+ supportsDragDrop: boolean;
29
+ supportsKeyboardNavigation: boolean;
30
+ supportsVirtualization: boolean;
31
+ supportsGrouping?: boolean;
32
+ supportsInlinePreview?: boolean;
33
+ supportsCustomColumns?: boolean;
34
+ supportsZoom?: boolean;
35
+ }
36
+
37
+ export interface ViewModeSettings {
38
+ defaultSortField?: string;
39
+ defaultSortDirection?: 'asc' | 'desc';
40
+ itemSize?: {
41
+ width?: number;
42
+ height?: number;
43
+ minWidth?: number;
44
+ maxWidth?: number;
45
+ minHeight?: number;
46
+ maxHeight?: number;
47
+ };
48
+ layout?: {
49
+ padding?: number;
50
+ gap?: number;
51
+ columns?: number | 'auto';
52
+ rows?: number | 'auto';
53
+ };
54
+ display?: {
55
+ showIcons?: boolean;
56
+ showLabels?: boolean;
57
+ showDetails?: boolean;
58
+ showPreview?: boolean;
59
+ iconSize?: 'small' | 'medium' | 'large';
60
+ labelPosition?: 'bottom' | 'right' | 'overlay';
61
+ };
62
+ interaction?: {
63
+ singleClickOpen?: boolean;
64
+ doubleClickOpen?: boolean;
65
+ hoverPreview?: boolean;
66
+ contextMenu?: boolean;
67
+ };
68
+ performance?: {
69
+ virtualization?: boolean;
70
+ bufferSize?: number;
71
+ preloadCount?: number;
72
+ debounceMs?: number;
73
+ };
74
+ customSettings?: Record<string, any>;
75
+ }
76
+
77
+ export interface ViewModeState {
78
+ isActive: boolean;
79
+ isInitialized: boolean;
80
+ settings: ViewModeSettings;
81
+ lastUsed?: Date;
82
+ userPreferences?: Record<string, any>;
83
+ }
84
+
85
+ export interface TreeViewSettings extends ViewModeSettings {
86
+ indentSize?: number;
87
+ showConnectors?: boolean;
88
+ expandOnSingleClick?: boolean;
89
+ collapseOnSecondClick?: boolean;
90
+ rememberExpansion?: boolean;
91
+ autoExpand?: boolean;
92
+ maxDepth?: number;
93
+ }
94
+
95
+ export interface ListViewSettings extends ViewModeSettings {
96
+ columns?: ColumnDefinition[];
97
+ headerHeight?: number;
98
+ rowHeight?: number;
99
+ alternatingRows?: boolean;
100
+ gridLines?: boolean;
101
+ resizableColumns?: boolean;
102
+ sortableColumns?: boolean;
103
+ }
104
+
105
+ export interface ThumbnailViewSettings extends ViewModeSettings {
106
+ thumbnailSize?: number;
107
+ aspectRatio?: number;
108
+ showFilenames?: boolean;
109
+ showFileSize?: boolean;
110
+ showDate?: boolean;
111
+ gridSpacing?: number;
112
+ loadThumbnails?: boolean;
113
+ thumbnailQuality?: 'low' | 'medium' | 'high';
114
+ }
115
+
116
+ export interface TreemapViewSettings extends ViewModeSettings {
117
+ algorithm?: 'squarified' | 'slice-dice' | 'strip';
118
+ colorScheme?: 'size' | 'type' | 'date' | 'custom';
119
+ paddingInner?: number;
120
+ paddingOuter?: number;
121
+ showLabels?: boolean;
122
+ labelThreshold?: number;
123
+ animation?: boolean;
124
+ zoomable?: boolean;
125
+ }
126
+
127
+ export interface ColumnDefinition {
128
+ id: string;
129
+ label: string;
130
+ width?: number;
131
+ minWidth?: number;
132
+ maxWidth?: number;
133
+ sortable?: boolean;
134
+ resizable?: boolean;
135
+ visible?: boolean;
136
+ align?: 'left' | 'center' | 'right';
137
+ format?: (value: any) => string;
138
+ renderer?: React.ComponentType<{ value: any; item: any }>;
139
+ priority?: number;
140
+ }
141
+
142
+ export type ViewModeType = 'tree' | 'list' | 'thumbnail' | 'treemap' | 'custom';
143
+
144
+ export interface ViewModeRegistry {
145
+ registerViewMode(definition: ViewModeDefinition): void;
146
+ unregisterViewMode(id: string): void;
147
+ getViewMode(id: string): ViewModeDefinition | undefined;
148
+ getAllViewModes(): ViewModeDefinition[];
149
+ getViewModesByCapability(capability: keyof ViewModeCapabilities): ViewModeDefinition[];
150
+ }