senke
|
6a51afb0a7
|
refactor(web): split PurchasesView into purchases-view module
- types: PurchasesViewProps, Purchase
- usePurchasesView: commerceService.getPurchases, search, refund, download
- PurchasesViewHeader, PurchasesViewItem, PurchasesViewList, PurchasesViewSkeleton
- RefundRequestModal in orchestrator; Loading renders Skeleton
- Stories: Default, Empty (initialPurchases []), Loading (Skeleton)
- Re-export from PurchasesView.tsx
Co-authored-by: Cursor <cursoragent@cursor.com>
|
2026-02-06 21:42:35 +01:00 |
|
senke
|
54ce30c318
|
docs(audit): SocialView refactorised 2026-02-05
Co-authored-by: Cursor <cursoragent@cursor.com>
|
2026-02-06 21:35:06 +01:00 |
|
senke
|
51e017a3d5
|
refactor(web): split SocialView into social-view module
- types: SocialViewProps, SocialTabKey
- useSocialView: feedTracks (trackService.list), activeTab, playTrack
- SocialViewSidebar, SocialViewFeed, SocialViewFeedItem, SocialViewTrending, SocialViewSkeleton
- Loading renders Skeleton; decorator min-h-layout-page
- Re-export from SocialView.tsx
Co-authored-by: Cursor <cursoragent@cursor.com>
|
2026-02-06 21:34:18 +01:00 |
|
senke
|
4a451ab019
|
docs(audit): MarketplaceView refactorised 2026-02-05
Co-authored-by: Cursor <cursoragent@cursor.com>
|
2026-02-06 21:26:33 +01:00 |
|
senke
|
ea0daa3c00
|
refactor(web): split MarketplaceView into marketplace-view module
- types: MarketplaceViewProps, MarketplaceCategory; useMarketplaceView with marketplaceService/fallback
- MarketplaceViewHeader, MarketplaceViewCategories, MarketplaceViewSidebar, MarketplaceViewGrid, MarketplaceViewSkeleton
- allProducts for ProductDetailView similarProducts; min-h-screen -> min-h-layout-page
- Stories: Default, Loading (Skeleton); decorator min-h-layout-page
- Re-export from MarketplaceView.tsx
Co-authored-by: Cursor <cursoragent@cursor.com>
|
2026-02-06 18:42:16 +01:00 |
|
senke
|
78bff32cea
|
docs(audit): AnalyticsView refactorised 2026-02-05
Co-authored-by: Cursor <cursoragent@cursor.com>
|
2026-02-06 18:34:24 +01:00 |
|
senke
|
eaab9a545e
|
refactor(web): split AnalyticsView into analytics-view module
- types: AnalyticsViewProps, DateRangeKey, GlobalStats, TopTrackRow, TrafficSource, DeviceStats, ChartHoverData
- useAnalyticsView: dateRange, stats, topTracks, trafficSources, deviceStats, loading, hoveredData, handleExport
- AnalyticsViewHeader, AnalyticsViewKpiGrid, AnalyticsViewChart, AnalyticsViewOrigins, AnalyticsViewPlatforms, AnalyticsViewTopTracks, AnalyticsViewSkeleton
- Data via analyticsService; loading renders Skeleton
- text-[10px] -> text-xs, tracking-[0.2em] -> tracking-wide
- Stories: Default, Loading (Skeleton); decorator min-h-layout-page
- Re-export from AnalyticsView.tsx
Co-authored-by: Cursor <cursoragent@cursor.com>
|
2026-02-06 18:33:42 +01:00 |
|
senke
|
f5363787d1
|
docs(audit): LiveView refactorised 2026-02-05
Co-authored-by: Cursor <cursoragent@cursor.com>
|
2026-02-06 18:16:11 +01:00 |
|
senke
|
0dcf1dc20f
|
refactor(web): split LiveView into live-view module
- types.ts: LiveViewProps, LiveViewChatMessage; mockData: FEATURED_STREAM, CHAT_MESSAGES
- useLiveView: stream, chatMessages, msgInput, handleSend, addToast
- LiveViewPlayer, LiveViewStreamInfo, LiveViewRecommended, LiveViewChat, LiveViewSkeleton
- Layout h-[calc(100vh-120px)] -> min-h-layout-main; text-[10px] -> text-xs
- Stories: Default, Loading (Skeleton); decorator min-h-layout-page
- Re-export from LiveView.tsx
Co-authored-by: Cursor <cursoragent@cursor.com>
|
2026-02-06 18:15:41 +01:00 |
|
senke
|
f0050d6d7c
|
docs(audit): CheckoutView refactorised 2026-02-05
Co-authored-by: Cursor <cursoragent@cursor.com>
|
2026-02-06 18:04:47 +01:00 |
|
senke
|
2d26429417
|
refactor(web): split CheckoutView into checkout-view module
- types.ts: CheckoutViewProps, CheckoutFormState, INITIAL_CHECKOUT_FORM
- useCheckoutView: form state, cart/tax, handlePurchase, onComplete
- CheckoutViewHeader, CheckoutViewBillingCard, CheckoutViewPaymentCard,
CheckoutViewOrderSummary, CheckoutViewSkeleton
- CheckoutView orchestrator; re-export from CheckoutView.tsx
- Stories: Loading (Skeleton), Default, Processing, Success
- Decorator min-h-screen -> min-h-layout-page
Co-authored-by: Cursor <cursoragent@cursor.com>
|
2026-02-06 18:04:13 +01:00 |
|
senke
|
cae40acac0
|
docs(audit): AdminDashboardView refactorised 2026-02-05
Co-authored-by: Cursor <cursoragent@cursor.com>
|
2026-02-06 17:54:39 +01:00 |
|
senke
|
9039f15a25
|
refactor(web): split AdminDashboardView into admin-dashboard-view module
- types: DashboardStats, UploadItem, AuditLogItem, StatCardProps, Report
- useAdminDashboardView: fetchData, handleAction, triggerProtocol
- Header, StatCard, TrafficCard, ProtocolsCard, NodeHealthCard, Tabs
- AdminDashboardSkeleton for Loading state
- max-w-layout-content, text-xs, gap-0.5 (no arbitrary values)
- Stories: Default, Loading (Skeleton). Decorator min-h-layout-page
- Re-export from AdminDashboardView.tsx
Co-authored-by: Cursor <cursoragent@cursor.com>
|
2026-02-06 17:54:02 +01:00 |
|
senke
|
b59ac99295
|
docs(audit): components/settings/account AccountSettings refactorised 2026-02-05
Co-authored-by: Cursor <cursoragent@cursor.com>
|
2026-02-06 17:43:34 +01:00 |
|
senke
|
aa5d46895d
|
refactor(web): split AccountSettings (components/settings/account) into module
- account-settings/types: AccountSettingsUserMock, AccountSettingsToggles
- useAccountSettingsPage: view, modals, user, toggles, theme, setThemeOption
- IdentityCard, PreferencesCard, NotificationsCard, PrivacyCard, DangerCard
- AccountSettingsSkeleton for Loading state
- Privacy labels text-xs (no text-[10px])
- Theme selection: isOptionSelected(theme, variant)
- Stories: Default, Loading (Skeleton). Decorator min-h-layout-page
- Re-export from AccountSettings.tsx
Co-authored-by: Cursor <cursoragent@cursor.com>
|
2026-02-06 17:42:57 +01:00 |
|
senke
|
8616af6cc7
|
docs(audit): ChatInterface refactorised 2026-02-05
Co-authored-by: Cursor <cursoragent@cursor.com>
|
2026-02-06 14:25:15 +01:00 |
|
senke
|
cc8bd68b07
|
refactor(web): split ChatInterface into chat-interface module
- types.ts: ChatInterfaceProps
- useChatInterface: state, wsService, loadMessages, loadChatStats, handleSendMessage, formatTimestamp
- ChatInterfaceHeader, ChatInterfaceMessages, ChatInterfaceInput
- ChatInterfaceSkeleton for Loading state
- Stories: Default, ProductionRoom, Loading (Skeleton)
- Decorator h-[600px] -> min-h-layout-page
- Re-export from ChatInterface.tsx
Co-authored-by: Cursor <cursoragent@cursor.com>
|
2026-02-06 14:24:41 +01:00 |
|
senke
|
34b82fd316
|
docs(audit): CreateProductView refactorised 2026-02-05
Co-authored-by: Cursor <cursoragent@cursor.com>
|
2026-02-06 14:17:28 +01:00 |
|
senke
|
4e4ba02b7b
|
refactor(web): split CreateProductView into create-product-view module
- types.ts: LicenseConfig
- useCreateProductView: form state, updateLicense, handlePublish, handleSaveDraft
- CreateProductViewHeader, CoverCard, FilesCard, DetailsCard, PricingCard
- CreateProductViewSkeleton for Loading state
- Textarea min-h-24 (no arbitrary value)
- MSW: POST marketplace/products for Storybook
- Stories: Default, Loading (Skeleton)
- Re-export from CreateProductView.tsx
Co-authored-by: Cursor <cursoragent@cursor.com>
|
2026-02-06 14:16:38 +01:00 |
|
senke
|
de415a8c3b
|
docs(audit): FileDetailsView refactorised 2026-02-05
Co-authored-by: Cursor <cursoragent@cursor.com>
|
2026-02-06 14:06:09 +01:00 |
|
senke
|
7f9345b4d0
|
refactor(web): split FileDetailsView into file-details-view module
- types.ts: FileDetailsViewProps, ActivityItem, VersionItem
- mockData.ts: MOCK_ACTIVITY, MOCK_VERSIONS, getMockFile
- useFileDetailsView.ts: hook returning file, activity, versions
- FileDetailsViewHeader, Preview, Metadata, Activity, Versions, Storage
- FileDetailsViewSkeleton for Loading state
- Layout: min-h-layout-page-sm, badge text-xs
- Imports use @/ for Storybook resolution
- Stories: Default, Loading (Skeleton)
- Re-export from FileDetailsView.tsx
Co-authored-by: Cursor <cursoragent@cursor.com>
|
2026-02-06 14:05:44 +01:00 |
|
senke
|
63b3745707
|
docs(audit): VirtualizedList refactorised 2026-02-05
Co-authored-by: Cursor <cursoragent@cursor.com>
|
2026-02-06 13:55:32 +01:00 |
|
senke
|
f9db7b1f32
|
refactor(web): split VirtualizedList into virtualized-list module
- virtualized-list/types.ts: VirtualizedListProps
- virtualized-list/useInfiniteScroll.ts: useInfiniteScroll hook
- virtualized-list/useScrollPosition.ts: useScrollPosition hook
- virtualized-list/VirtualizedList.tsx: main component
- Re-export from virtualized-list.tsx via ./virtualized-list/index
- Test mock extended with getTotalSize, measureElement, key on virtual items
- 4 tests pass
Co-authored-by: Cursor <cursoragent@cursor.com>
|
2026-02-06 13:55:06 +01:00 |
|
senke
|
ce47d5a2b7
|
docs(audit): context/AudioContext refactorised 2026-02-05
Co-authored-by: Cursor <cursoragent@cursor.com>
|
2026-02-06 13:46:58 +01:00 |
|
senke
|
ed33ba1d85
|
refactor(web): split AudioContext into context/audio-context module
- types.ts: VisualizerSettings, AudioContextType
- mockTracks.ts: mock track data for initial state
- useAudioContextValue.ts: all state, effects, and actions
- AudioContext.tsx: createContext, useAudio, AudioProvider
- Re-export from context/AudioContext.tsx (useAudio, AudioProvider, VisualizerSettings)
- Fix toggleMute to toggle isMuted (was incorrectly toggling isPlaying)
- 12 tests pass
Co-authored-by: Cursor <cursoragent@cursor.com>
|
2026-02-06 13:46:29 +01:00 |
|
senke
|
5237a327db
|
docs(audit): add features/player AudioPlayer refactor entry to FRONTEND_DEEP_DIVE_AUDIT
Co-authored-by: Cursor <cursoragent@cursor.com>
|
2026-02-06 13:37:31 +01:00 |
|
senke
|
d53a049a41
|
refactor(player): decompose AudioPlayer into audio-player module
- Add audio-player/ with useAudioPlayerLifecycle, AudioPlayerCompact, AudioPlayerFull, AudioPlayerSkeleton
- Re-export and default export from AudioPlayer.tsx
- Story Loading uses AudioPlayerSkeleton; 20 tests pass
Co-authored-by: Cursor <cursoragent@cursor.com>
|
2026-02-06 13:37:04 +01:00 |
|
senke
|
f0983b5d4a
|
docs(audit): add Library UploadModal refactor entry to FRONTEND_DEEP_DIVE_AUDIT
Co-authored-by: Cursor <cursoragent@cursor.com>
|
2026-02-06 13:26:57 +01:00 |
|
senke
|
e76667cfd1
|
refactor(library): decompose UploadModal into upload-modal module
- Add upload-modal/ with useLibraryUploadModal, UploadModalForm, UploadModalFooter, types
- Re-export UploadModal from UploadModal.tsx
- Form ids for a11y (library-upload-*); trigger role=button tabIndex=0
Co-authored-by: Cursor <cursoragent@cursor.com>
|
2026-02-06 13:26:19 +01:00 |
|
senke
|
a2ef332fd5
|
docs(audit): add DiscoverView refactor entry to FRONTEND_DEEP_DIVE_AUDIT
Co-authored-by: Cursor <cursoragent@cursor.com>
|
2026-02-06 13:19:48 +01:00 |
|
senke
|
107d98eeaa
|
refactor(views): decompose DiscoverView into discover-view module
- Add discover-view/ with useDiscoverView, Hero, Trending, NewReleases, Genres, Skeleton, Error
- Re-export DiscoverView from DiscoverView.tsx
- Loading: Skeleton instead of h-[50vh] spinner; Error: min-h-layout-page-sm
- Conformity: UPDATED badge text-[10px] -> text-xs
- Stories: Default, Loading (Skeleton), Error
Co-authored-by: Cursor <cursoragent@cursor.com>
|
2026-02-06 13:19:25 +01:00 |
|
senke
|
df17fae256
|
docs(audit): add UserProfilePage refactor entry to FRONTEND_DEEP_DIVE_AUDIT
Co-authored-by: Cursor <cursoragent@cursor.com>
|
2026-02-06 13:11:09 +01:00 |
|
senke
|
8e05e15d19
|
refactor(profile): decompose UserProfilePage into user-profile-page module
- Add user-profile-page/ with useUserProfilePage, Hero, Header, Tabs, Skeleton, Error
- Re-export UserProfilePage from UserProfilePage.tsx
- Stories: Default (/u/demo), Loading (Skeleton), NotFound (/u/notfound)
- MSW: GET /api/v1/users/by-username/:username (404 for notfound)
- Tests: mock useUserProfilePage, ToastProvider; 7 tests pass
Co-authored-by: Cursor <cursoragent@cursor.com>
|
2026-02-06 13:10:33 +01:00 |
|
senke
|
4019305a1a
|
docs(audit): GroupDetailView refactor entry
Co-authored-by: Cursor <cursoragent@cursor.com>
|
2026-02-06 12:35:28 +01:00 |
|
senke
|
a8db2eec5d
|
refactor(social): GroupDetailView module, useGroupDetailView, Header, Members, Events, Sidebar, Skeleton, stories
Co-authored-by: Cursor <cursoragent@cursor.com>
|
2026-02-06 12:34:57 +01:00 |
|
senke
|
bff0688cdd
|
docs(audit): EditProfile refactor entry
Co-authored-by: Cursor <cursoragent@cursor.com>
|
2026-02-06 11:45:29 +01:00 |
|
senke
|
19033b1e68
|
refactor(settings): EditProfile module, useEditProfile, ImagesCard, IdentityCard, Sidebar, Skeleton, cropUtils, stories
Co-authored-by: Cursor <cursoragent@cursor.com>
|
2026-02-06 11:45:16 +01:00 |
|
senke
|
a243adf0a1
|
docs(audit): FormBuilder refactor entry
Co-authored-by: Cursor <cursoragent@cursor.com>
|
2026-02-06 11:36:31 +01:00 |
|
senke
|
6a68d4dc21
|
refactor(forms): FormBuilder module, useFormBuilder, FormBuilderFieldWidget, re-export, stories, a11y id
Co-authored-by: Cursor <cursoragent@cursor.com>
|
2026-02-06 11:36:20 +01:00 |
|
senke
|
2f3a6f4ff9
|
docs(audit): MonitoringDashboardContent subcomponents entry
Co-authored-by: Cursor <cursoragent@cursor.com>
|
2026-02-06 11:28:03 +01:00 |
|
senke
|
7dfd2e2592
|
refactor(monitoring): MonitoringDashboardContent split into Header, Stats, ValidationCard, ErrorsCard, PerformanceCard
Co-authored-by: Cursor <cursoragent@cursor.com>
|
2026-02-06 11:27:54 +01:00 |
|
senke
|
76a480f5fb
|
docs(audit): Table (data) refactor entry
Co-authored-by: Cursor <cursoragent@cursor.com>
|
2026-02-06 11:23:10 +01:00 |
|
senke
|
6616256226
|
refactor(data): Table module, useTable, TableHeadRow, TableBodyRows, re-export, stories, tests
Co-authored-by: Cursor <cursoragent@cursor.com>
|
2026-02-06 11:22:47 +01:00 |
|
senke
|
8d7506bde0
|
docs(audit): tooltip refactor entry
Co-authored-by: Cursor <cursoragent@cursor.com>
|
2026-02-06 10:32:46 +01:00 |
|
senke
|
27fd12fe6c
|
refactor(ui): tooltip module, useTooltip, re-export, tests
Co-authored-by: Cursor <cursoragent@cursor.com>
|
2026-02-06 10:32:14 +01:00 |
|
senke
|
dfd9ba6220
|
docs(audit): tabs refactor entry
Co-authored-by: Cursor <cursoragent@cursor.com>
|
2026-02-06 10:12:56 +01:00 |
|
senke
|
65545df49b
|
refactor(ui): tabs module, re-export
Co-authored-by: Cursor <cursoragent@cursor.com>
|
2026-02-06 10:12:33 +01:00 |
|
senke
|
3a27c35b48
|
docs(audit): accordion refactor entry
Co-authored-by: Cursor <cursoragent@cursor.com>
|
2026-02-06 02:33:34 +01:00 |
|
senke
|
61e2021968
|
refactor(ui): accordion module, re-export
Co-authored-by: Cursor <cursoragent@cursor.com>
|
2026-02-06 02:33:10 +01:00 |
|
senke
|
8a4a6cd9cd
|
docs(audit): dropdown-menu refactor entry
Co-authored-by: Cursor <cursoragent@cursor.com>
|
2026-02-06 02:27:58 +01:00 |
|