senke
9060ae6752
refactor(notifications): NotificationMenu module with hook, subcomponents, skeleton
...
- Add notification-menu/ with useNotificationMenu, Trigger, Dropdown, List, Item, Skeleton
- Dropdown max-h-96 (no arbitrary max-h-[500px])
- Props notificationsOverride, isLoadingOverride, errorOverride for Storybook
- Re-export from NotificationMenu.tsx
- Stories: Default, Loading, Empty, Error, Skeleton
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-06 00:07:19 +01:00
senke
6dca8a36d9
docs(audit): add LibraryManager to refactored components table
...
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-06 00:00:58 +01:00
senke
74ed02b414
refactor(library): LibraryManager module with hook, subcomponents, skeleton
...
- Add library-manager/ with useLibraryManager, Header, Toolbar, Error, Empty, Content, Stats, Skeleton
- Layout min-h-layout-page (no arbitrary h-[600px])
- Props tracksOverride, errorOverride, isLoadingOverride for Storybook
- Re-export from LibraryManager.tsx
- Stories: Default, Loading (Skeleton), Empty, Error
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-06 00:00:35 +01:00
senke
b6563112ea
docs(audit): add CourseDetailView to refactored components table
...
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-05 23:52:47 +01:00
senke
45971e7a07
refactor(education): CourseDetailView module with hook, subcomponents, skeleton
...
- Add course-detail-view/ with useCourseDetailView, Header, Tabs, Sidebar, Skeleton
- Stories: Default, Loading (Skeleton), Empty, Enrolled
- Re-export from CourseDetailView.tsx
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-05 23:52:24 +01:00
senke
3120aa96f5
docs(audit): add CourseLearningView to refactored components table
...
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-05 23:46:20 +01:00
senke
bfd95f2ce8
refactor(education): CourseLearningView module with hook, subcomponents, skeleton
...
- Add course-learning-view/ with useCourseLearningView, Header, Player, Tabs, Sidebar, Skeleton
- Layout min-h-layout-main, no arbitrary values
- Re-export from CourseLearningView.tsx
- Stories: Default, Loading (Skeleton), Empty, Complete
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-05 23:45:58 +01:00
senke
a88d5a3e7c
docs(audit): mark ProductDetailView (marketplace) as refactored in frontend audit
...
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-05 23:38:28 +01:00
senke
f901a78438
refactor(marketplace): split ProductDetailView into module (Header, Gallery, Info, Licenses, Description, Reviews, Similar, Skeleton)
...
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-05 23:38:09 +01:00
senke
56940b16ad
docs(audit): mark PlaybackHeatmap as refactored in frontend audit
...
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-05 23:31:25 +01:00
senke
7d3ce8a7f0
refactor(streaming): split PlaybackHeatmap into module (Header, Stats, Grid, Skeleton, Error, Empty)
...
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-05 23:31:06 +01:00
senke
ea2810d64b
docs(audit): mark ProjectDetailView as refactored in frontend audit
...
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-05 23:24:57 +01:00
senke
8c8891d29f
refactor(studio): split ProjectDetailView into module (Header, Tabs, Overview, Files, Settings, Sidebar, Skeleton)
...
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-05 23:24:39 +01:00
senke
c69124595e
docs(audit): mark SessionsPage as refactored in frontend audit
...
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-05 23:19:26 +01:00
senke
1e58725c95
refactor(auth): split SessionsPage into module (Header, Content, Skeleton, stories)
...
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-05 23:19:06 +01:00
senke
9eb27d108b
docs(audit): mark TrackSearchFilters as refactored in frontend audit
...
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-05 23:09:51 +01:00
senke
9f97bbfc0b
refactor(tracks): split TrackSearchFilters into module (Basic, Advanced, Skeleton)
...
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-05 23:09:36 +01:00
senke
775f28f313
docs(audit): add AccountSettings to refactored components in FRONTEND_DEEP_DIVE_AUDIT
...
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-05 23:04:31 +01:00
senke
3cf40619fa
refactor(settings): extract AccountSettings into account-settings module
...
- Add account-settings/ with useAccountSettings, AccountSettingsErrorBanner,
AccountSettingsPasswordCard, AccountSettingsExportCard, AccountSettingsDeleteCard,
AccountSettingsSkeleton
- Re-export from AccountSettings.tsx for backward compatibility
- Stories: Default, Loading (skeleton, min-h-layout-story); remove ToastProvider
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-05 23:04:16 +01:00
senke
5001769177
docs(audit): add Dialog to refactored components in FRONTEND_DEEP_DIVE_AUDIT
...
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-05 23:00:02 +01:00
senke
6677bde6fe
refactor(ui): extract Dialog into dialog module
...
- Add dialog/ with types, Dialog, DialogHeader, DialogBody, DialogFooter,
DialogContent, DialogDescription, DialogTitle, DialogTrigger, DialogSkeleton
- Re-export from dialog.tsx via dialog/index for backward compatibility
- Stories: Default, Alert, Composition (max-w-md), Loading (DialogSkeleton)
- Test: assert Kodo destructive classes (text-kodo-red) for alert variant
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-05 22:59:48 +01:00
senke
6b21655f3f
docs(audit): add PlaylistList to refactored components in FRONTEND_DEEP_DIVE_AUDIT
...
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-05 22:55:11 +01:00
senke
2134d27058
refactor(playlists): extract PlaylistList into playlist-list module
...
- Add playlist-list/ with usePlaylistList, PlaylistListToolbar, PlaylistListEmpty,
PlaylistListError, types; keep PlaylistListSkeleton at components level
- Re-export from PlaylistList.tsx for backward compatibility
- Stories: Default, Grid, Empty (MSW), Loading (skeleton, min-h-layout-story)
- Replace min-h-[44px] with min-h-11; no arbitrary values
- Tests: assert French labels and Pagination text; fix skeleton test
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-05 22:54:54 +01:00
senke
aeab65de09
docs(audit): add TrackFilters to refactored components in FRONTEND_DEEP_DIVE_AUDIT
...
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-05 22:46:26 +01:00
senke
c71da0bc92
refactor(tracks): extract TrackFilters into track-filters module
...
- Add track-filters/ with useTrackFilters, TrackFiltersHeader, TrackFiltersSearch,
TrackFiltersGrid, TrackFiltersClear, TrackFiltersSkeleton, types
- Re-export from TrackFilters.tsx for backward compatibility
- Stories: Default, Collapsible, Loading (skeleton)
- Layout primitive min-h-layout-story for skeleton; no arbitrary values
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-05 22:46:11 +01:00
senke
0b6d1c0511
docs(audit): record AudioPlayer (components/player) refactor in FRONTEND_DEEP_DIVE_AUDIT
...
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-05 22:40:19 +01:00
senke
27970f34c9
refactor(player): extract AudioPlayer into audio-player module
...
- types, useAudioPlayerEffects, AudioPlayerTrackInfo, AudioPlayerControls
- AudioPlayerProgress, AudioPlayerVolume, AudioPlayerSkeleton
- Stories: Default (mock store), Skeleton
- Re-export from AudioPlayer.tsx
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-05 22:40:06 +01:00
senke
4b6f272861
docs(audit): record DataList refactor in FRONTEND_DEEP_DIVE_AUDIT
...
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-05 22:36:06 +01:00
senke
97f00097cc
refactor(ui): extract DataList into data-list module
...
- types, DataListSkeleton, DataListEmpty, DataListError, DataList
- Remove duplicate Modal/Dropdown from DataList.tsx (exist in modal.tsx/dropdown.tsx)
- Stories: Default, Loading, Empty, Error, Skeleton (min-h-layout-story)
- Re-export from DataList.tsx
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-05 22:35:53 +01:00
senke
62708affa0
docs(audit): record OptimizedImage refactor in FRONTEND_DEEP_DIVE_AUDIT
...
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-05 22:31:48 +01:00
senke
345597bcda
refactor(ui): extract OptimizedImage into optimized-image module
...
- types, generateImageSources, BlurPlaceholder, useImageFormatSupport
- OptimizedImage, OptimizedImageSkeleton, useImagePreloader, ResponsiveImage
- Stories: Default, WithPlaceholder, ErrorState, Loading (skeleton)
- Re-export from optimized-image.tsx; tests adapted to loading state
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-05 22:31:35 +01:00
senke
91a6ff290a
fix(ui): call onAvatarUpdated('') after successful avatar delete
...
Ensures parents that rely on onAvatarUpdated get the empty URL when
avatar is removed. Aligns with profile feature test contract.
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-05 22:24:50 +01:00
senke
5c228ae374
docs(audit): record AvatarUpload refactor in FRONTEND_DEEP_DIVE_AUDIT
...
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-05 22:21:13 +01:00
senke
9efb239b39
refactor(ui): extract AvatarUpload into avatar-upload module
...
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-05 22:21:02 +01:00
senke
7d9b7084d6
docs(audit): record DatePicker refactor in FRONTEND_DEEP_DIVE_AUDIT
...
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-05 22:15:27 +01:00
senke
2fff1eb488
refactor(ui): extract DatePicker into date-picker module
...
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-05 22:15:11 +01:00
senke
5e4266fc5e
docs(audit): record ShareLinkManager refactor in FRONTEND_DEEP_DIVE_AUDIT
...
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-05 22:09:42 +01:00
senke
c8e6e82a5c
refactor(share): extract ShareLinkManager into share-link-manager module
...
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-05 22:09:31 +01:00
senke
b70900a8f0
docs(audit): record PlaybackDashboard refactor in FRONTEND_DEEP_DIVE_AUDIT
...
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-05 22:04:54 +01:00
senke
5cf8cbfc0e
refactor(streaming): extract PlaybackDashboard into playback-dashboard module
...
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-05 22:04:38 +01:00
senke
f61d05b527
docs(audit): record MonitoringDashboard refactor in FRONTEND_DEEP_DIVE_AUDIT
...
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-05 21:57:59 +01:00
senke
deba9f4c6c
refactor(monitoring): extract MonitoringDashboard into monitoring-dashboard module
...
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-05 21:57:39 +01:00
senke
2b3a5d84b9
docs(audit): record RegisterPage refactor in FRONTEND_DEEP_DIVE_AUDIT
...
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-05 21:50:42 +01:00
senke
bc289680bf
refactor(auth): extract RegisterPage into register-page module
...
- Add register-page/ with useRegisterPage, RegisterPageForm,
RegisterPageVerificationNotice, RegisterPageSkeleton
- Layout primitives (min-h-layout-page-sm), tokens (success, destructive)
- Stories: Default, Loading, WithError; re-export from pages/RegisterPage
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-05 21:50:17 +01:00
senke
03f4387f13
docs(audit): record FileManagerView refactor in FRONTEND_DEEP_DIVE_AUDIT
...
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-05 21:45:27 +01:00
senke
88a347dfd1
refactor(views): extract FileManagerView into file-manager-view module
...
- Add file-manager-view/ with useFileManagerView, Header, Toolbar, Table, Grid,
Empty, Skeleton; types and mockFiles
- Layout primitives (min-h-layout-page-sm), no arbitrary values
- Stories: Default, Loading, Empty
- Re-export from FileManagerView.tsx
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-05 21:45:01 +01:00
senke
a4d5e19099
docs(audit): record SearchPage refactor in FRONTEND_DEEP_DIVE_AUDIT
...
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-05 21:39:51 +01:00
senke
e1c073bf9c
refactor(search): extract SearchPage into feature module
...
- Add features/search/components/search-page/ with useSearchPage, Header,
Discovery, Empty, Error, Results, Skeleton
- Layout primitives only (min-h-layout-page, max-w-6xl)
- Stories: Default, Loading, Empty, Error; MSW handler for SearchResults shape
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-05 21:39:31 +01:00
senke
5d9a9418b7
docs(audit): record NotificationsPage refactor in FRONTEND_DEEP_DIVE_AUDIT
...
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-05 21:34:54 +01:00
senke
b4ad28183f
fix(views): use layout primitive in NotificationsView loading state
...
Replace arbitrary h-[50vh] with min-h-layout-page-sm per .cursorrules
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-05 21:32:33 +01:00