senke
|
58d47f3e38
|
style(track-history): elevate visual fidelity to premium standards
Co-authored-by: Cursor <cursoragent@cursor.com>
|
2026-02-07 08:49:21 +01:00 |
|
senke
|
c9cef0f36d
|
style(tracks): elevate visual fidelity to premium standards
Co-authored-by: Cursor <cursoragent@cursor.com>
|
2026-02-07 08:35:52 +01:00 |
|
senke
|
4b2d86414b
|
style(comments): elevate visual fidelity to premium standards
Co-authored-by: Cursor <cursoragent@cursor.com>
|
2026-02-07 08:13:59 +01:00 |
|
senke
|
e3dbbbb032
|
style(ui): elevate visual fidelity to premium standards
Co-authored-by: Cursor <cursoragent@cursor.com>
|
2026-02-07 08:03:28 +01:00 |
|
senke
|
276229a0e4
|
feat(tracks): use TrackListSkeleton for loading state and add Error story
Co-authored-by: Cursor <cursoragent@cursor.com>
|
2026-02-07 07:40:16 +01:00 |
|
senke
|
0527eb76e5
|
test(comments): add comprehensive stories and MSW mocks
Co-authored-by: Cursor <cursoragent@cursor.com>
|
2026-02-07 07:33:05 +01:00 |
|
senke
|
9573b8261c
|
feat(comments): add high-fidelity skeletons and Framer Motion transitions
Co-authored-by: Cursor <cursoragent@cursor.com>
|
2026-02-07 07:32:49 +01:00 |
|
senke
|
65e8a69db2
|
refactor(comments): modularize CommentSection with atomic sub-components
Co-authored-by: Cursor <cursoragent@cursor.com>
|
2026-02-07 07:32:37 +01:00 |
|
senke
|
17b57dc885
|
docs(audit): TrackDetailPage refactorised 2026-02-05
Co-authored-by: Cursor <cursoragent@cursor.com>
|
2026-02-07 06:57:46 +01:00 |
|
senke
|
1c4b35a51e
|
refactor(tracks): split TrackDetailPage into module with Hero, CoverAndActions, Info, Tabs, Skeleton, NotFound
Co-authored-by: Cursor <cursoragent@cursor.com>
|
2026-02-07 06:57:32 +01:00 |
|
senke
|
1474078090
|
docs(audit): PlaylistDetailPage refactorised 2026-02-05
Co-authored-by: Cursor <cursoragent@cursor.com>
|
2026-02-07 06:47:07 +01:00 |
|
senke
|
df9d5f9be8
|
refactor(playlists): split PlaylistDetailPage into module with Hero, CoverAndInfo, ActionsBar, Tabs, Skeleton, NotFound
Co-authored-by: Cursor <cursoragent@cursor.com>
|
2026-02-07 06:46:30 +01:00 |
|
senke
|
b0921cd070
|
docs(audit): PlaylistActions refactorised 2026-02-05
Co-authored-by: Cursor <cursoragent@cursor.com>
|
2026-02-07 06:10:30 +01:00 |
|
senke
|
7d13c23d72
|
refactor(playlists): split PlaylistActions into module (buttons, edit dialog, skeleton)
Co-authored-by: Cursor <cursoragent@cursor.com>
|
2026-02-07 06:09:51 +01:00 |
|
senke
|
92bd9eeef3
|
docs(audit): EquipmentDetailView refactorised 2026-02-05
Co-authored-by: Cursor <cursoragent@cursor.com>
|
2026-02-07 05:46:19 +01:00 |
|
senke
|
6f7156f035
|
refactor(web): split EquipmentDetailView into module (nav, gallery, specs, header, warranty, docs, service, skeleton)
Co-authored-by: Cursor <cursoragent@cursor.com>
|
2026-02-07 05:46:16 +01:00 |
|
senke
|
7744e3ca0e
|
docs(audit): TrackListPagination refactorised 2026-02-05
Co-authored-by: Cursor <cursoragent@cursor.com>
|
2026-02-07 05:04:24 +01:00 |
|
senke
|
79eed88e57
|
refactor(web): split TrackListPagination into module (info, nav, utils, skeleton)
Co-authored-by: Cursor <cursoragent@cursor.com>
|
2026-02-07 05:03:53 +01:00 |
|
senke
|
5fd968ec4a
|
docs(audit): PlaylistAnalytics refactorised 2026-02-05
Co-authored-by: Cursor <cursoragent@cursor.com>
|
2026-02-07 04:54:00 +01:00 |
|
senke
|
27c8b9940e
|
refactor(web): split PlaylistAnalytics into module (stat cards, main/advanced, error, skeleton)
Co-authored-by: Cursor <cursoragent@cursor.com>
|
2026-02-07 04:53:54 +01:00 |
|
senke
|
0352824f06
|
docs(audit): VirtualizedChatMessages refactorised 2026-02-05
Co-authored-by: Cursor <cursoragent@cursor.com>
|
2026-02-07 04:44:30 +01:00 |
|
senke
|
aafb4b083a
|
refactor(web): split VirtualizedChatMessages into module (item, empty, loading, scroll btn, skeleton)
Co-authored-by: Cursor <cursoragent@cursor.com>
|
2026-02-07 04:44:26 +01:00 |
|
senke
|
51c1937b51
|
docs(audit): LibraryPage refactorised 2026-02-05
Co-authored-by: Cursor <cursoragent@cursor.com>
|
2026-02-07 04:31:15 +01:00 |
|
senke
|
d7d22b705e
|
refactor(web): split LibraryPage into module (toolbar, empty, grid, list, skeleton)
Co-authored-by: Cursor <cursoragent@cursor.com>
|
2026-02-07 04:31:06 +01:00 |
|
senke
|
e3fa53925c
|
docs(audit): router refactorised 2026-02-05
Co-authored-by: Cursor <cursoragent@cursor.com>
|
2026-02-07 04:16:43 +01:00 |
|
senke
|
0bec3183d9
|
refactor(web): split router into module (PublicRoute, ProtectedLayoutRoute, routeConfig)
Co-authored-by: Cursor <cursoragent@cursor.com>
|
2026-02-07 04:16:37 +01:00 |
|
senke
|
e342776843
|
docs(audit): ChatView refactorised 2026-02-05
Co-authored-by: Cursor <cursoragent@cursor.com>
|
2026-02-07 04:01:30 +01:00 |
|
senke
|
d11aa1d3a2
|
refactor(web): split ChatView into chat-view module
Co-authored-by: Cursor <cursoragent@cursor.com>
|
2026-02-07 03:59:32 +01:00 |
|
senke
|
509a893b50
|
docs(audit): AuthView refactorised 2026-02-05
Co-authored-by: Cursor <cursoragent@cursor.com>
|
2026-02-07 03:54:38 +01:00 |
|
senke
|
de3e704373
|
refactor(web): split AuthView into auth-view module
Co-authored-by: Cursor <cursoragent@cursor.com>
|
2026-02-07 03:53:59 +01:00 |
|
senke
|
a5a5e001d0
|
docs(audit): AdminView refactorised 2026-02-05
Co-authored-by: Cursor <cursoragent@cursor.com>
|
2026-02-06 22:32:04 +01:00 |
|
senke
|
86450a93ab
|
refactor(web): split AdminView into admin-view module
Co-authored-by: Cursor <cursoragent@cursor.com>
|
2026-02-06 22:31:24 +01:00 |
|
senke
|
5a6d647434
|
docs(audit): NotificationsView refactorised 2026-02-05
Co-authored-by: Cursor <cursoragent@cursor.com>
|
2026-02-06 22:23:19 +01:00 |
|
senke
|
b4cca23ec9
|
refactor(web): split NotificationsView into notifications-view module
Co-authored-by: Cursor <cursoragent@cursor.com>
|
2026-02-06 22:22:47 +01:00 |
|
senke
|
fe63e56c1f
|
docs(audit): EducationView refactorised 2026-02-05
Co-authored-by: Cursor <cursoragent@cursor.com>
|
2026-02-06 22:11:45 +01:00 |
|
senke
|
abc4386495
|
refactor(web): split EducationView into education-view module
Co-authored-by: Cursor <cursoragent@cursor.com>
|
2026-02-06 22:11:13 +01:00 |
|
senke
|
99517571d3
|
docs(audit): SettingsView refactorised 2026-02-05
Co-authored-by: Cursor <cursoragent@cursor.com>
|
2026-02-06 22:00:12 +01:00 |
|
senke
|
6ccf3db0e1
|
refactor(web): split SettingsView into settings-view module
Co-authored-by: Cursor <cursoragent@cursor.com>
|
2026-02-06 21:59:42 +01:00 |
|
senke
|
0c19958cd2
|
docs(audit): CartView refactorised 2026-02-05
Co-authored-by: Cursor <cursoragent@cursor.com>
|
2026-02-06 21:51:30 +01:00 |
|
senke
|
dcf89cb2da
|
refactor(web): split CartView into cart-view module
- types: CartViewProps, CartDiscount
- useCartView: useCartStore, showPromo, discount, tax/finalTotal, handleApplyPromo
- CartViewEmpty, CartViewHeader, CartViewSummary, CartViewSecure, CartViewSkeleton
- PromoCodeModal in orchestrator; min-h-[60vh] -> min-h-layout-page-sm
- Stories: Default, Empty, Loading (Skeleton); decorator min-h-layout-page
- Re-export from CartView.tsx
Co-authored-by: Cursor <cursoragent@cursor.com>
|
2026-02-06 21:49:55 +01:00 |
|
senke
|
b076b83f19
|
docs(audit): PurchasesView refactorised 2026-02-05
Co-authored-by: Cursor <cursoragent@cursor.com>
|
2026-02-06 21:43:08 +01:00 |
|
senke
|
de2144f34f
|
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
|
7d8345684d
|
docs(audit): SocialView refactorised 2026-02-05
Co-authored-by: Cursor <cursoragent@cursor.com>
|
2026-02-06 21:35:06 +01:00 |
|
senke
|
b6b2791b76
|
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
|
be4b297a06
|
docs(audit): MarketplaceView refactorised 2026-02-05
Co-authored-by: Cursor <cursoragent@cursor.com>
|
2026-02-06 21:26:33 +01:00 |
|
senke
|
9a8af12b6b
|
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
|
ac1cf02544
|
docs(audit): AnalyticsView refactorised 2026-02-05
Co-authored-by: Cursor <cursoragent@cursor.com>
|
2026-02-06 18:34:24 +01:00 |
|
senke
|
461fd9cf6a
|
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
|
b74dc97fb4
|
docs(audit): LiveView refactorised 2026-02-05
Co-authored-by: Cursor <cursoragent@cursor.com>
|
2026-02-06 18:16:11 +01:00 |
|
senke
|
30df8c99ea
|
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 |
|