@anymux/ui-kit 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/ExplorerLayout-CSIJd7N4.js +105 -0
- package/dist/ExplorerLayout-CSIJd7N4.js.map +1 -0
- package/dist/FileBrowserContext-B6jixa2j.js +11 -0
- package/dist/FileBrowserContext-B6jixa2j.js.map +1 -0
- package/dist/calendar-DSlrbHoj.js +761 -0
- package/dist/calendar-DSlrbHoj.js.map +1 -0
- package/dist/calendar.d.ts +3 -0
- package/dist/calendar.js +3 -0
- package/dist/contacts-DQXTZzHc.js +539 -0
- package/dist/contacts-DQXTZzHc.js.map +1 -0
- package/dist/contacts.d.ts +3 -0
- package/dist/contacts.js +3 -0
- package/dist/file-browser-m5atC3kF.js +6755 -0
- package/dist/file-browser-m5atC3kF.js.map +1 -0
- package/dist/file-browser.d.ts +11 -0
- package/dist/file-browser.js +9 -0
- package/dist/git-B55e6LL-.js +561 -0
- package/dist/git-B55e6LL-.js.map +1 -0
- package/dist/git.d.ts +2 -0
- package/dist/git.js +3 -0
- package/dist/iconMap-V4B8P-Uh.js +206 -0
- package/dist/iconMap-V4B8P-Uh.js.map +1 -0
- package/dist/icons-CIsIOZXR.js +0 -0
- package/dist/icons.d.ts +2 -0
- package/dist/icons.js +4 -0
- package/dist/index-BNmNIWBL.d.ts +71 -0
- package/dist/index-BNmNIWBL.d.ts.map +1 -0
- package/dist/index-Bryv_GCG.d.ts +1481 -0
- package/dist/index-Bryv_GCG.d.ts.map +1 -0
- package/dist/index-CuQIjSXs.d.ts +134 -0
- package/dist/index-CuQIjSXs.d.ts.map +1 -0
- package/dist/index-DSu19mq0.d.ts +153 -0
- package/dist/index-DSu19mq0.d.ts.map +1 -0
- package/dist/index-DmsyeHFr.d.ts +149 -0
- package/dist/index-DmsyeHFr.d.ts.map +1 -0
- package/dist/index-DxnJ8FYM.d.ts +17 -0
- package/dist/index-DxnJ8FYM.d.ts.map +1 -0
- package/dist/index-DzfY1Tok.d.ts +32 -0
- package/dist/index-DzfY1Tok.d.ts.map +1 -0
- package/dist/index-Ml_SgiKa.d.ts +1847 -0
- package/dist/index-Ml_SgiKa.d.ts.map +1 -0
- package/dist/index-kHr9udZD.d.ts +1025 -0
- package/dist/index-kHr9udZD.d.ts.map +1 -0
- package/dist/index.d.ts +11 -0
- package/dist/index.js +15 -0
- package/dist/layout-Ca_4r8ka.js +89 -0
- package/dist/layout-Ca_4r8ka.js.map +1 -0
- package/dist/layout.d.ts +2 -0
- package/dist/layout.js +5 -0
- package/dist/list-CxfT6hix.js +6831 -0
- package/dist/list-CxfT6hix.js.map +1 -0
- package/dist/list.d.ts +2 -0
- package/dist/list.js +5 -0
- package/dist/media-DZ292aKK.js +557 -0
- package/dist/media-DZ292aKK.js.map +1 -0
- package/dist/media.d.ts +3 -0
- package/dist/media.js +3 -0
- package/dist/tree-Dd9Z0Aso.js +3351 -0
- package/dist/tree-Dd9Z0Aso.js.map +1 -0
- package/dist/tree.d.ts +2 -0
- package/dist/tree.js +6 -0
- package/dist/types-common-CB3kRek8.d.ts +26 -0
- package/dist/types-common-CB3kRek8.d.ts.map +1 -0
- package/dist/utils-B4fdKKsy.js +3 -0
- package/package.json +109 -0
- package/src/calendar/AgendaView.tsx +37 -0
- package/src/calendar/CalendarBrowser.tsx +90 -0
- package/src/calendar/CalendarModel.ts +142 -0
- package/src/calendar/CalendarSidebar.tsx +81 -0
- package/src/calendar/DayView.tsx +76 -0
- package/src/calendar/EventCard.tsx +51 -0
- package/src/calendar/MockCalendarProvider.ts +98 -0
- package/src/calendar/MonthView.tsx +77 -0
- package/src/calendar/WeekView.tsx +129 -0
- package/src/calendar/index.ts +18 -0
- package/src/calendar/types.ts +25 -0
- package/src/contacts/ContactAvatar.tsx +35 -0
- package/src/contacts/ContactBrowser.tsx +56 -0
- package/src/contacts/ContactCard.tsx +37 -0
- package/src/contacts/ContactDetail.tsx +63 -0
- package/src/contacts/ContactGroupSidebar.tsx +40 -0
- package/src/contacts/ContactList.tsx +32 -0
- package/src/contacts/ContactListModel.ts +120 -0
- package/src/contacts/MockContactProvider.ts +77 -0
- package/src/contacts/index.ts +17 -0
- package/src/contacts/types.ts +26 -0
- package/src/demos/CalendarBrowserDemo.tsx +15 -0
- package/src/demos/ContactBrowserDemo.tsx +15 -0
- package/src/demos/MediaBrowserDemo.tsx +15 -0
- package/src/file-browser/adapters/DocumentViewerAdapter.ts +371 -0
- package/src/file-browser/adapters/FileSystemBridge.ts +168 -0
- package/src/file-browser/adapters/GitBrowserAdapter.ts +546 -0
- package/src/file-browser/adapters/README.md +504 -0
- package/src/file-browser/adapters/index.ts +27 -0
- package/src/file-browser/adapters/types.ts +70 -0
- package/src/file-browser/architecture.md +645 -0
- package/src/file-browser/components/CreateItemDialog.tsx +71 -0
- package/src/file-browser/components/DeleteConfirmDialog.tsx +58 -0
- package/src/file-browser/components/FileBrowser.tsx +473 -0
- package/src/file-browser/components/FileBrowserContent.tsx +209 -0
- package/src/file-browser/components/FileBrowserHeader.tsx +151 -0
- package/src/file-browser/components/FileBrowserToolbar.tsx +145 -0
- package/src/file-browser/components/LeftPanel/LeftPanel.tsx +103 -0
- package/src/file-browser/components/LeftPanel/LeftPanelTabs.tsx +70 -0
- package/src/file-browser/components/LeftPanel/TreeNavigationView.tsx +256 -0
- package/src/file-browser/components/PreviewPane.tsx +146 -0
- package/src/file-browser/components/RightPanel/FilePreview.tsx +219 -0
- package/src/file-browser/components/RightPanel/RightPanel.tsx +186 -0
- package/src/file-browser/components/RightPanel/RightPanelToolbar.tsx +113 -0
- package/src/file-browser/components/UploadProgress.tsx +123 -0
- package/src/file-browser/components/ViewerHost.tsx +208 -0
- package/src/file-browser/components/mobile/MobileNavigation.tsx +227 -0
- package/src/file-browser/components/navigation/NavigationButtons.tsx +171 -0
- package/src/file-browser/components/shared/ErrorBoundary.tsx +116 -0
- package/src/file-browser/components/shared/FileBrowserItem.tsx +195 -0
- package/src/file-browser/components/shared/FileIcon.tsx +169 -0
- package/src/file-browser/components/toolbar/ViewModeToggle.tsx +200 -0
- package/src/file-browser/components/views/ListView/ListView.tsx +484 -0
- package/src/file-browser/components/views/ThumbnailView/ThumbnailView.tsx +323 -0
- package/src/file-browser/components/views/TreeView/TreeNode.tsx +186 -0
- package/src/file-browser/components/views/TreeView/TreeNodeList.tsx +191 -0
- package/src/file-browser/components/views/TreeView/TreeView.tsx +200 -0
- package/src/file-browser/components/views/TreemapView/TreemapView.tsx +339 -0
- package/src/file-browser/context/FileBrowserContext.tsx +13 -0
- package/src/file-browser/examples/BasicUsage.tsx +20 -0
- package/src/file-browser/index.ts +98 -0
- package/src/file-browser/models/FileBrowserModel.ts +623 -0
- package/src/file-browser/models/LeftPanelManagerModel.ts +105 -0
- package/src/file-browser/models/NavigationManagerModel.ts +312 -0
- package/src/file-browser/models/ResponsiveLayoutManagerModel.ts +437 -0
- package/src/file-browser/models/RightPanelManagerModel.ts +190 -0
- package/src/file-browser/models/SelectionManagerModel.ts +252 -0
- package/src/file-browser/models/ToolbarManagerModel.ts +144 -0
- package/src/file-browser/models/UploadModel.ts +147 -0
- package/src/file-browser/models/ViewModeManagerModel.ts +185 -0
- package/src/file-browser/models/ViewerHostModel.ts +44 -0
- package/src/file-browser/models/ui/ListViewUIModel.ts +265 -0
- package/src/file-browser/models/ui/PreviewUIModel.ts +297 -0
- package/src/file-browser/models/ui/ThumbnailViewUIModel.ts +254 -0
- package/src/file-browser/models/ui/TreeViewUIModel.ts +128 -0
- package/src/file-browser/models/ui/TreemapViewUIModel.ts +350 -0
- package/src/file-browser/providers/FileSystemListProvider.ts +552 -0
- package/src/file-browser/providers/FileSystemProvider.ts +401 -0
- package/src/file-browser/providers/FileSystemTreeProvider.ts +231 -0
- package/src/file-browser/providers/GitProvider.ts +337 -0
- package/src/file-browser/providers/GitRepositoryProvider.ts +376 -0
- package/src/file-browser/providers/IFileBrowserProvider.ts +56 -0
- package/src/file-browser/providers/MemoryProvider.ts +303 -0
- package/src/file-browser/providers/index.ts +4 -0
- package/src/file-browser/registry/ViewerRegistry.ts +551 -0
- package/src/file-browser/registry/types.ts +144 -0
- package/src/file-browser/scripts/performanceBenchmark.ts +553 -0
- package/src/file-browser/services/ThumbnailCacheService.ts +128 -0
- package/src/file-browser/tasks.md +537 -0
- package/src/file-browser/types/FileBrowserTypes.ts +126 -0
- package/src/file-browser/types/ProviderTypes.ts +155 -0
- package/src/file-browser/types/UITypes.ts +235 -0
- package/src/file-browser/types/ViewModeTypes.ts +150 -0
- package/src/file-browser/utils/gestures.ts +327 -0
- package/src/file-browser/utils/performance.ts +563 -0
- package/src/file-browser/viewers/ImageViewer.tsx +163 -0
- package/src/file-browser/viewers/ImageViewerModel.ts +79 -0
- package/src/file-browser/viewers/TextViewer.tsx +95 -0
- package/src/file-browser/viewers/UnsupportedFileViewer.tsx +57 -0
- package/src/file-browser/viewers/index.ts +61 -0
- package/src/git/BranchList.tsx +128 -0
- package/src/git/CommitGraph.tsx +239 -0
- package/src/git/CommitList.tsx +258 -0
- package/src/git/DiffViewer.tsx +219 -0
- package/src/git/index.ts +4 -0
- package/src/icons/iconMap.ts +146 -0
- package/src/icons/index.ts +9 -0
- package/src/index.ts +13 -0
- package/src/layout/README.md +307 -0
- package/src/layout/components/ExplorerLayout/ExplorerLayout.tsx +178 -0
- package/src/layout/examples/SimpleExample.tsx +60 -0
- package/src/layout/index.ts +6 -0
- package/src/lib/utils.ts +1 -0
- package/src/list/README.md +303 -0
- package/src/list/architecture.md +807 -0
- package/src/list/components/CalculatedGridView.tsx +252 -0
- package/src/list/components/DragPreview.tsx +102 -0
- package/src/list/components/ListContextMenu.tsx +274 -0
- package/src/list/components/ListItem.tsx +761 -0
- package/src/list/components/ListItems.tsx +919 -0
- package/src/list/components/MasonryView.tsx +241 -0
- package/src/list/components/SearchFilter.tsx +44 -0
- package/src/list/components/TreemapView.tsx +709 -0
- package/src/list/components/ViewSizeControls.tsx +205 -0
- package/src/list/components/ViewTypeSelector.tsx +312 -0
- package/src/list/components/VirtualizedDetailsView.tsx +231 -0
- package/src/list/components/VirtualizedGrid.tsx +164 -0
- package/src/list/components/VirtualizedList.tsx +154 -0
- package/src/list/components/VirtualizedMasonryView.tsx +344 -0
- package/src/list/components/shared/EmptyState.tsx +103 -0
- package/src/list/components/shared/ErrorBoundary.tsx +123 -0
- package/src/list/components/shared/ErrorDisplay.tsx +100 -0
- package/src/list/components/shared/ListLoader.tsx +146 -0
- package/src/list/components/shared/LoadingIndicator.tsx +80 -0
- package/src/list/index.ts +92 -0
- package/src/list/models/ListItemsModel.ts +1301 -0
- package/src/list/models/TreemapModel.ts +204 -0
- package/src/list/providers/ListItemsProvider.ts +313 -0
- package/src/list/providers/TestListProvider.ts +604 -0
- package/src/list/tasks.md +937 -0
- package/src/list/types/ListTypes.ts +178 -0
- package/src/list/utils/BenchmarkLogger.ts +243 -0
- package/src/list/utils/DragDropManager.ts +320 -0
- package/src/list/utils/GridLayoutCalculator.ts +290 -0
- package/src/list/utils/ListAccessibility.ts +367 -0
- package/src/list/utils/ListKeyboard.ts +414 -0
- package/src/list/utils/MasonryLayoutCalculator.ts +302 -0
- package/src/list/utils/MasonryLayoutEngine.ts +401 -0
- package/src/list/utils/__tests__/MasonryLayoutEngine.test.ts +157 -0
- package/src/list/utils/__tests__/VirtualizedMasonryView.test.tsx +251 -0
- package/src/media/AlbumSidebar.tsx +48 -0
- package/src/media/MediaBrowser.tsx +92 -0
- package/src/media/MediaBrowserModel.ts +138 -0
- package/src/media/MediaGrid.tsx +50 -0
- package/src/media/MediaList.tsx +49 -0
- package/src/media/MediaPreview.tsx +63 -0
- package/src/media/MediaTimeline.tsx +38 -0
- package/src/media/MockMediaProvider.ts +70 -0
- package/src/media/index.ts +18 -0
- package/src/media/types.ts +21 -0
- package/src/styles/variables.css +60 -0
- package/src/tree/DEVELOPMENT_SUMMARY.md +170 -0
- package/src/tree/__tests__/TreeModel.test.ts +16 -0
- package/src/tree/architecture.md +530 -0
- package/src/tree/components/Tree.tsx +283 -0
- package/src/tree/components/TreeCheckbox.tsx +147 -0
- package/src/tree/components/TreeContextMenu.tsx +139 -0
- package/src/tree/components/TreeNodeList.tsx +329 -0
- package/src/tree/components/TreeTable.tsx +382 -0
- package/src/tree/index.ts +58 -0
- package/src/tree/models/TreeModel.ts +839 -0
- package/src/tree/providers/SimpleTreeProvider.ts +463 -0
- package/src/tree/providers/TestTreeProvider.ts +946 -0
- package/src/tree/providers/TreeProvider.ts +308 -0
- package/src/tree/tasks.md +2046 -0
- package/src/tree/types/TreeTypes.ts +279 -0
- package/src/tree/utils/SelectionTheme.ts +150 -0
- package/src/tree/utils/logger.ts +203 -0
- package/src/types-common.ts +21 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"contacts-DQXTZzHc.js","names":["provider: IContactProvider","err: any","contact: ContactItem | null","groupId: string | null","query: string","sortBy: ContactSortBy","contact: Omit<ContactItem, 'id' | 'createdAt' | 'updatedAt'>","id: string","contacts: ContactItem[]","GROUPS_DATA: ContactGroup[]","contacts: ContactItem[]","id: string","item: Omit<ContactItem, 'id' | 'createdAt' | 'updatedAt'>","created: ContactItem","updates: Partial<ContactItem>","query: string","groupId: string","name: string"],"sources":["../src/contacts/ContactListModel.ts","../src/contacts/ContactAvatar.tsx","../src/contacts/ContactCard.tsx","../src/contacts/ContactList.tsx","../src/contacts/ContactDetail.tsx","../src/contacts/ContactGroupSidebar.tsx","../src/contacts/ContactBrowser.tsx","../src/contacts/MockContactProvider.ts"],"sourcesContent":["import { makeAutoObservable, runInAction } from 'mobx';\nimport type { IContactProvider, ContactItem, ContactGroup } from './types';\n\nexport type ContactSortBy = 'firstName' | 'lastName' | 'company';\n\nexport class ContactListModel {\n contacts: ContactItem[] = [];\n selectedContact: ContactItem | null = null;\n groups: ContactGroup[] = [];\n currentGroup: string | null = null;\n searchQuery = '';\n sortBy: ContactSortBy = 'lastName';\n loading = false;\n error: string | null = null;\n\n constructor(private provider: IContactProvider) {\n makeAutoObservable(this);\n }\n\n get filteredContacts(): ContactItem[] {\n let result = this.contacts;\n if (this.searchQuery) {\n const q = this.searchQuery.toLowerCase();\n result = result.filter(c =>\n c.firstName.toLowerCase().includes(q) ||\n c.lastName.toLowerCase().includes(q) ||\n c.email?.toLowerCase().includes(q) ||\n c.company?.toLowerCase().includes(q)\n );\n }\n return this.sortContacts(result);\n }\n\n get groupedByLetter(): Map<string, ContactItem[]> {\n const groups = new Map<string, ContactItem[]>();\n for (const contact of this.filteredContacts) {\n const letter = (this.sortBy === 'firstName' ? contact.firstName : contact.lastName)\n .charAt(0).toUpperCase();\n const group = groups.get(letter) ?? [];\n group.push(contact);\n groups.set(letter, group);\n }\n return groups;\n }\n\n get groupedByGroup(): Map<string, ContactItem[]> {\n const groups = new Map<string, ContactItem[]>();\n for (const contact of this.filteredContacts) {\n for (const groupName of contact.groups ?? ['Ungrouped']) {\n const group = groups.get(groupName) ?? [];\n group.push(contact);\n groups.set(groupName, group);\n }\n }\n return groups;\n }\n\n async loadContacts() {\n this.loading = true;\n this.error = null;\n try {\n const [contacts, groups] = await Promise.all([\n this.currentGroup\n ? this.provider.getByGroup(this.currentGroup)\n : this.provider.listItems(),\n this.provider.getGroups()\n ]);\n runInAction(() => {\n this.contacts = contacts;\n this.groups = groups;\n });\n } catch (err: any) {\n runInAction(() => { this.error = err?.message || 'Failed to load contacts'; });\n } finally {\n runInAction(() => { this.loading = false; });\n }\n }\n\n selectContact(contact: ContactItem | null) {\n this.selectedContact = contact;\n }\n\n setGroup(groupId: string | null) {\n this.currentGroup = groupId;\n this.loadContacts();\n }\n\n setSearch(query: string) {\n this.searchQuery = query;\n }\n\n setSort(sortBy: ContactSortBy) {\n this.sortBy = sortBy;\n }\n\n async addContact(contact: Omit<ContactItem, 'id' | 'createdAt' | 'updatedAt'>) {\n const created = await this.provider.createItem(contact);\n runInAction(() => { this.contacts.push(created); });\n return created;\n }\n\n async deleteContact(id: string) {\n await this.provider.deleteItem(id);\n runInAction(() => {\n this.contacts = this.contacts.filter(c => c.id !== id);\n if (this.selectedContact?.id === id) this.selectedContact = null;\n });\n }\n\n private sortContacts(contacts: ContactItem[]): ContactItem[] {\n return [...contacts].sort((a, b) => {\n switch (this.sortBy) {\n case 'firstName': return a.firstName.localeCompare(b.firstName);\n case 'lastName': return a.lastName.localeCompare(b.lastName);\n case 'company': return (a.company ?? '').localeCompare(b.company ?? '');\n default: return 0;\n }\n });\n }\n}\n","import React from 'react';\n\nexport interface ContactAvatarProps {\n firstName: string;\n lastName: string;\n avatar?: string;\n size?: 'sm' | 'md' | 'lg';\n className?: string;\n}\n\nconst sizeClasses = {\n sm: 'w-8 h-8 text-xs',\n md: 'w-10 h-10 text-sm',\n lg: 'w-16 h-16 text-xl',\n};\n\nconst bgColors = [\n 'bg-blue-500', 'bg-green-500', 'bg-purple-500', 'bg-pink-500',\n 'bg-indigo-500', 'bg-teal-500', 'bg-orange-500', 'bg-red-500',\n];\n\nexport const ContactAvatar = ({ firstName, lastName, avatar, size = 'md', className = '' }: ContactAvatarProps) => {\n const initials = `${firstName.charAt(0)}${lastName.charAt(0)}`.toUpperCase();\n const colorIdx = (firstName.charCodeAt(0) + lastName.charCodeAt(0)) % bgColors.length;\n\n if (avatar) {\n return <img src={avatar} alt={`${firstName} ${lastName}`} className={`${sizeClasses[size]} rounded-full object-cover ${className}`} />;\n }\n\n return (\n <div className={`${sizeClasses[size]} ${bgColors[colorIdx]} rounded-full flex items-center justify-center text-white font-medium ${className}`}>\n {initials}\n </div>\n );\n};\n","import React from 'react';\nimport { Mail, Phone, Building } from 'lucide-react';\nimport type { ContactItem } from './types';\nimport { ContactAvatar } from './ContactAvatar';\n\nexport interface ContactCardProps {\n contact: ContactItem;\n selected?: boolean;\n onClick?: () => void;\n className?: string;\n}\n\nexport const ContactCard = ({ contact, selected = false, onClick, className = '' }: ContactCardProps) => (\n <button\n onClick={onClick}\n className={`flex items-center gap-3 px-4 py-3 w-full text-left transition-colors ${\n selected ? 'bg-blue-50 border-l-2 border-blue-500' : 'hover:bg-gray-50 border-l-2 border-transparent'\n } ${className}`}\n >\n <ContactAvatar firstName={contact.firstName} lastName={contact.lastName} avatar={contact.avatar} />\n <div className=\"flex-1 min-w-0\">\n <p className=\"text-sm font-medium text-gray-900 truncate\" title={`${contact.firstName} ${contact.lastName}`}>\n {contact.firstName} {contact.lastName}\n </p>\n {contact.company && (\n <p className=\"text-xs text-gray-500 flex items-center gap-1 truncate\" title={contact.company}>\n <Building size={12} />\n {contact.company}\n </p>\n )}\n </div>\n <div className=\"flex items-center gap-1.5 text-gray-400\">\n {contact.email && <Mail size={14} />}\n {contact.phone && <Phone size={14} />}\n </div>\n </button>\n);\n","import React from 'react';\nimport { observer } from 'mobx-react-lite';\nimport type { ContactListModel } from './ContactListModel';\nimport { ContactCard } from './ContactCard';\n\nexport interface ContactListProps {\n model: ContactListModel;\n className?: string;\n}\n\nexport const ContactList = observer<ContactListProps>(({ model, className = '' }) => (\n <div className={`overflow-y-auto ${className}`}>\n {Array.from(model.groupedByLetter.entries()).map(([letter, contacts]) => (\n <div key={letter}>\n <div className=\"sticky top-0 bg-gray-50/90 backdrop-blur-sm px-4 py-1 border-b border-gray-100\">\n <span className=\"text-xs font-semibold text-gray-500\">{letter}</span>\n </div>\n {contacts.map(contact => (\n <ContactCard\n key={contact.id}\n contact={contact}\n selected={model.selectedContact?.id === contact.id}\n onClick={() => model.selectContact(contact)}\n />\n ))}\n </div>\n ))}\n {model.filteredContacts.length === 0 && (\n <div className=\"flex items-center justify-center h-32 text-gray-400 text-sm\">No contacts found</div>\n )}\n </div>\n));\n","import React from 'react';\nimport { observer } from 'mobx-react-lite';\nimport { Mail, Phone, MapPin, Building, Calendar, Tag } from 'lucide-react';\nimport type { ContactListModel } from './ContactListModel';\nimport { ContactAvatar } from './ContactAvatar';\n\nexport interface ContactDetailProps {\n model: ContactListModel;\n className?: string;\n}\n\nconst DetailRow = ({ icon: Icon, label, value }: { icon: React.ElementType; label: string; value: string }) => (\n <div className=\"flex items-start gap-3 py-2\">\n <Icon size={16} className=\"text-gray-400 mt-0.5 flex-shrink-0\" />\n <div>\n <p className=\"text-xs text-gray-500\">{label}</p>\n <p className=\"text-sm text-gray-900\">{value}</p>\n </div>\n </div>\n);\n\nexport const ContactDetail = observer<ContactDetailProps>(({ model, className = '' }) => {\n const contact = model.selectedContact;\n\n if (!contact) {\n return (\n <div className={`flex items-center justify-center h-full text-gray-400 text-sm ${className}`}>\n Select a contact to view details\n </div>\n );\n }\n\n return (\n <div className={`p-6 overflow-y-auto ${className}`}>\n <div className=\"flex flex-col items-center mb-6\">\n <ContactAvatar firstName={contact.firstName} lastName={contact.lastName} avatar={contact.avatar} size=\"lg\" />\n <h2 className=\"mt-3 text-lg font-semibold text-gray-900\">{contact.firstName} {contact.lastName}</h2>\n {contact.company && <p className=\"text-sm text-gray-500\">{contact.company}</p>}\n </div>\n\n <div className=\"divide-y divide-gray-100\">\n {contact.email && <DetailRow icon={Mail} label=\"Email\" value={contact.email} />}\n {contact.phone && <DetailRow icon={Phone} label=\"Phone\" value={contact.phone} />}\n {contact.company && <DetailRow icon={Building} label=\"Company\" value={contact.company} />}\n {contact.address && <DetailRow icon={MapPin} label=\"Address\" value={contact.address} />}\n {contact.birthday && <DetailRow icon={Calendar} label=\"Birthday\" value={contact.birthday.toLocaleDateString()} />}\n {contact.groups && contact.groups.length > 0 && (\n <div className=\"flex items-start gap-3 py-2\">\n <Tag size={16} className=\"text-gray-400 mt-0.5 flex-shrink-0\" />\n <div>\n <p className=\"text-xs text-gray-500\">Groups</p>\n <div className=\"flex flex-wrap gap-1 mt-1\">\n {contact.groups.map(g => (\n <span key={g} className=\"text-xs bg-gray-100 text-gray-600 px-2 py-0.5 rounded-full\">{g}</span>\n ))}\n </div>\n </div>\n </div>\n )}\n </div>\n </div>\n );\n});\n","import React from 'react';\nimport { observer } from 'mobx-react-lite';\nimport { Users, User } from 'lucide-react';\nimport type { ContactListModel } from './ContactListModel';\n\nexport interface ContactGroupSidebarProps {\n model: ContactListModel;\n className?: string;\n}\n\nexport const ContactGroupSidebar = observer<ContactGroupSidebarProps>(({ model, className = '' }) => (\n <div className={`w-56 border-r border-gray-200 bg-gray-50 overflow-y-auto ${className}`}>\n <div className=\"p-3\">\n <h3 className=\"text-xs font-semibold text-gray-500 uppercase tracking-wider mb-2\">Groups</h3>\n <button\n onClick={() => model.setGroup(null)}\n className={`flex items-center gap-2 w-full px-3 py-2 rounded-lg text-sm transition-colors ${\n model.currentGroup === null ? 'bg-blue-100 text-blue-700' : 'text-gray-700 hover:bg-gray-100'\n }`}\n >\n <Users size={16} />\n <span>All Contacts</span>\n <span className=\"ml-auto text-xs text-gray-400\">{model.contacts.length}</span>\n </button>\n {model.groups.map(group => (\n <button\n key={group.id}\n onClick={() => model.setGroup(group.id)}\n className={`flex items-center gap-2 w-full px-3 py-2 rounded-lg text-sm transition-colors ${\n model.currentGroup === group.id ? 'bg-blue-100 text-blue-700' : 'text-gray-700 hover:bg-gray-100'\n }`}\n >\n <User size={16} />\n <span className=\"truncate\" title={group.name}>{group.name}</span>\n <span className=\"ml-auto text-xs text-gray-400\">{group.count}</span>\n </button>\n ))}\n </div>\n </div>\n));\n","import React, { useEffect } from 'react';\nimport { observer } from 'mobx-react-lite';\nimport { Search, Loader2 } from 'lucide-react';\nimport { BrowserError } from '@anymux/ui/components/browser-error';\nimport type { ContactListModel } from './ContactListModel';\nimport { ContactList } from './ContactList';\nimport { ContactDetail } from './ContactDetail';\nimport { ContactGroupSidebar } from './ContactGroupSidebar';\n\nexport interface ContactBrowserProps {\n model: ContactListModel;\n className?: string;\n showSidebar?: boolean;\n}\n\nexport const ContactBrowser = observer<ContactBrowserProps>(({ model, className = '', showSidebar = true }) => {\n useEffect(() => { model.loadContacts(); }, [model]);\n\n return (\n <div className={`flex h-full bg-white rounded-xl border border-gray-200 overflow-hidden ${className}`}>\n {showSidebar && <ContactGroupSidebar model={model} />}\n\n <div className=\"flex-1 flex flex-col min-w-0 border-r border-gray-200\" style={{ maxWidth: '380px' }}>\n {/* Search */}\n <div className=\"px-4 py-2 border-b border-gray-200\">\n <div className=\"relative\">\n <Search size={16} className=\"absolute left-3 top-1/2 -translate-y-1/2 text-gray-400\" />\n <input\n type=\"text\"\n placeholder=\"Search contacts...\"\n value={model.searchQuery}\n onChange={e => model.setSearch(e.target.value)}\n className=\"w-full pl-9 pr-3 py-1.5 text-sm border border-gray-200 rounded-lg focus:outline-none focus:ring-2 focus:ring-blue-500\"\n />\n </div>\n </div>\n\n {model.loading ? (\n <div className=\"flex items-center justify-center h-64\">\n <Loader2 size={24} className=\"animate-spin text-gray-400\" />\n </div>\n ) : model.error ? (\n <BrowserError\n error={model.error}\n context=\"Contacts\"\n onRetry={() => model.loadContacts()}\n />\n ) : (\n <ContactList model={model} className=\"flex-1\" />\n )}\n </div>\n\n <ContactDetail model={model} className=\"flex-1\" />\n </div>\n );\n});\n","import type { IContactProvider, ContactItem, ContactGroup } from './types';\n\nconst FIRST_NAMES = ['Alice', 'Bob', 'Charlie', 'Diana', 'Emma', 'Frank', 'Grace', 'Henry', 'Iris', 'Jack', 'Karen', 'Leo', 'Mia', 'Nathan', 'Olivia', 'Paul', 'Quinn', 'Rachel', 'Sam', 'Tina', 'Uma', 'Victor', 'Wendy', 'Xavier', 'Yara', 'Zach'];\nconst LAST_NAMES = ['Anderson', 'Baker', 'Chen', 'Davis', 'Evans', 'Fisher', 'Garcia', 'Hall', 'Ibrahim', 'Jones', 'Kim', 'Lee', 'Martinez', 'Nguyen', 'O\\'Brien', 'Park', 'Quinn', 'Robinson', 'Smith', 'Taylor', 'Ueda', 'Vega', 'Wilson', 'Xu', 'Yang', 'Zhang'];\nconst COMPANIES = ['Acme Corp', 'TechStart Inc', 'Global Systems', 'DataFlow', 'CloudNine', 'PixelPerfect'];\nconst GROUPS_DATA: ContactGroup[] = [\n { id: 'family', name: 'Family', count: 8 },\n { id: 'work', name: 'Work', count: 12 },\n { id: 'friends', name: 'Friends', count: 10 },\n { id: 'vip', name: 'VIP', count: 5 },\n];\n\nfunction generateContacts(): ContactItem[] {\n const contacts: ContactItem[] = [];\n const now = new Date();\n for (let i = 0; i < FIRST_NAMES.length; i++) {\n contacts.push({\n id: `contact-${i}`,\n type: 'contact',\n title: `${FIRST_NAMES[i]} ${LAST_NAMES[i]}`,\n firstName: FIRST_NAMES[i],\n lastName: LAST_NAMES[i],\n email: `${FIRST_NAMES[i].toLowerCase()}.${LAST_NAMES[i].toLowerCase()}@example.com`,\n phone: `+1 (555) ${String(100 + i).padStart(3, '0')}-${String(1000 + i * 37).slice(0, 4)}`,\n company: COMPANIES[i % COMPANIES.length],\n address: `${100 + i} Main St, City ${i % 10}, ST ${10000 + i}`,\n birthday: new Date(1985 + (i % 20), i % 12, 1 + (i % 28)),\n groups: [GROUPS_DATA[i % GROUPS_DATA.length].id],\n createdAt: now,\n updatedAt: now,\n });\n }\n return contacts;\n}\n\nexport class MockContactProvider implements IContactProvider {\n private contacts = generateContacts();\n\n async listItems() { return this.contacts; }\n\n async getItem(id: string) { return this.contacts.find(c => c.id === id) ?? null; }\n\n async createItem(item: Omit<ContactItem, 'id' | 'createdAt' | 'updatedAt'>) {\n const now = new Date();\n const created: ContactItem = { ...item, id: `contact-${Date.now()}`, createdAt: now, updatedAt: now } as ContactItem;\n this.contacts.push(created);\n return created;\n }\n\n async updateItem(id: string, updates: Partial<ContactItem>) {\n const idx = this.contacts.findIndex(c => c.id === id);\n if (idx === -1) throw new Error('Not found');\n this.contacts[idx] = { ...this.contacts[idx], ...updates, updatedAt: new Date() };\n return this.contacts[idx];\n }\n\n async deleteItem(id: string) {\n this.contacts = this.contacts.filter(c => c.id !== id);\n }\n\n async search(query: string) {\n const q = query.toLowerCase();\n return this.contacts.filter(c =>\n c.firstName.toLowerCase().includes(q) || c.lastName.toLowerCase().includes(q)\n );\n }\n\n async getGroups() { return GROUPS_DATA; }\n\n async getByGroup(groupId: string) {\n return this.contacts.filter(c => c.groups?.includes(groupId));\n }\n\n async searchByName(name: string) {\n return this.search(name);\n }\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import "./types-common-CB3kRek8.js";
|
|
2
|
+
import { ContactAvatar$1 as ContactAvatar, ContactAvatarProps, ContactBrowser$1 as ContactBrowser, ContactBrowserProps, ContactCard$1 as ContactCard, ContactCardProps, ContactDetail$1 as ContactDetail, ContactDetailProps, ContactGroup, ContactGroupSidebar$1 as ContactGroupSidebar, ContactGroupSidebarProps, ContactItem, ContactList$1 as ContactList, ContactListModel$1 as ContactListModel, ContactListProps, ContactSortBy, IContactProvider, MockContactProvider$1 as MockContactProvider } from "./index-DmsyeHFr.js";
|
|
3
|
+
export { ContactAvatar, ContactAvatarProps, ContactBrowser, ContactBrowserProps, ContactCard, ContactCardProps, ContactDetail, ContactDetailProps, ContactGroup, ContactGroupSidebar, ContactGroupSidebarProps, ContactItem, ContactList, ContactListModel, ContactListProps, ContactSortBy, IContactProvider, MockContactProvider };
|
package/dist/contacts.js
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import { ContactAvatar, ContactBrowser, ContactCard, ContactDetail, ContactGroupSidebar, ContactList, ContactListModel, MockContactProvider } from "./contacts-DQXTZzHc.js";
|
|
2
|
+
|
|
3
|
+
export { ContactAvatar, ContactBrowser, ContactCard, ContactDetail, ContactGroupSidebar, ContactList, ContactListModel, MockContactProvider };
|