Commit graph

699 commits

Author SHA1 Message Date
senke
01ee3e2ff9 test(upload): add UploadModal stories (Default, Open)
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-05 21:03:15 +01:00
senke
ecfde9255d refactor(upload): decompose UploadModal into upload-modal module
- Add upload-modal/ with useUploadModal, constants, and presentational
  components: Dropzone, FileDisplay, Progress, ErrorAlert, MetadataForm
- Re-export from UploadModal.tsx for backward compatibility

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-05 21:03:07 +01:00
senke
0d1a426efa test(ui): add LazyErrorFallback and LazyComponent stories; fix LazyComponent tests for fallback text
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-05 20:49:17 +01:00
senke
8bfabe79ad refactor(ui): decompose LazyComponent into lazy-component module with LazyErrorFallback, LazyErrorBoundary, createLazyComponent
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-05 20:48:36 +01:00
senke
048861b7b6 test(views): add GearView stories Default, Loading, Empty, Error and GearViewSkeleton
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-05 20:38:59 +01:00
senke
3b4e322c37 refactor(views): decompose GearView into gear-view module with useGearView and sub-components
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-05 20:38:45 +01:00
senke
97103ae957 test(views): add ProfileView stories Default, Loading, Error and ProfileViewSkeleton
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-05 20:30:50 +01:00
senke
a3e24bd14a refactor(views): decompose ProfileView into profile-view module with hook and sub-components
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-05 20:30:36 +01:00
senke
8de10347fc test(user): add ProfileForm stories (Default, Loading, Error) and Skeleton; fix tests and MSW completion handler
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-05 20:21:05 +01:00
senke
f4185b7776 refactor(user): decompose ProfileForm into profile-form module with hook and sub-components
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-05 20:20:49 +01:00
senke
dd01585fbd test(chat): add stories and mocks for ChatSidebar
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-05 20:07:20 +01:00
senke
e0f28a0e16 refactor(chat): decompose ChatSidebar into sub-components
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-05 20:07:09 +01:00
senke
92b8a5678b test(search): add stories Loading/Empty/Error and fix Search tests
- Stories: Loading, Empty, Error; decorator max-w-2xl min-h-layout-story
- SearchSkeleton.stories; fix tests: waitFor, Enter for history, keyboard nav query

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-05 19:45:52 +01:00
senke
76360fa736 refactor(search): decompose Search into sub-components
- Add features/search/components/search: types, useSearchSuggestions,
  SearchInput, SearchDropdown, SearchSkeleton
- Search.tsx orchestrator; re-export from components/search for GlobalSearchBar
- No console.log; logger only; layout primitives in stories

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-05 19:45:41 +01:00
senke
be660c6269 fix(storybook): ignore net::ERR_ABORTED on iframe in audit (navigation false positive)
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-05 19:32:39 +01:00
senke
cfecaf5e7f test(tracks): add stories and mocks for CommentThread
- Stories: EmptyReplies, LoadingReplies, ReplyError; decorator uses max-w-2xl, min-h-layout-story
- CommentThreadSkeleton.stories.tsx
- MSW: PUT */api/v1/comments/:id for update; useUser mock in CommentThread.test

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-05 19:20:58 +01:00
senke
39c1ee7308 refactor(tracks): decompose CommentThread into sub-components
- Add comment-thread module: types, useCommentReplies, useCommentActions
- Presentational components: CommentThreadHeader, CommentThreadContent,
  CommentThreadActions, CommentReplyForm, CommentRepliesList
- CommentThreadSkeleton for Loading state
- CommentThread.tsx becomes orchestrator (~170 lines); re-export from module
- FE-COMP-012 preserved; no breaking change for CommentSection

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-05 19:20:47 +01:00
senke
df8c094454 feat(ui): implement skeleton-first loading and grid/list orchestration for CloudFileBrowser 2026-02-05 19:04:03 +01:00
senke
0b3428e261 refactor(studio): modularize CloudFileBrowser with FileTable, FileGrid and FileToolbar 2026-02-05 19:04:00 +01:00
senke
7e9f7a298e test(msw): add inventory gear handlers for deterministic story testing 2026-02-05 18:18:17 +01:00
senke
25fce07e3d feat(ui): implement grid/list view orchestration with synchronized skeletons for GearView 2026-02-05 18:18:13 +01:00
senke
7a28d1fd69 refactor(ui): create atomic gear module with Header, Filters, Grid, and Modal 2026-02-05 18:18:09 +01:00
senke
f3e6b11eef refactor(ui): modularize ProfileView into Header, Stats, and Tabs components 2026-02-05 14:32:20 +01:00
senke
eb87ad07b3 chore(dx): add .cursorrules and design system audit documentation 2026-02-05 14:20:06 +01:00
senke
1ed1caaa56 refactor(ui): decompose ProfileForm into atomic sub-components (Avatar, Identity, Social, Actions, Security) 2026-02-05 14:16:01 +01:00
senke
f515079909 docs(storybook): final comparison 67%→0%, contract update, silent toasts in Storybook 2026-02-05 13:39:59 +01:00
senke
1a95401cf2 chore(storybook): add test:storybook script for local audit 2026-02-05 13:39:56 +01:00
senke
8372b42274 ci(storybook): add audit workflow and exit 1 on audit failures 2026-02-05 13:39:53 +01:00
senke
0e170aaecf chore(storybook): set MSW onUnhandledRequest to 'error' to block unhandled network requests 2026-02-05 13:22:03 +01:00
senke
07c9861db5 chore(storybook): reclassify story hierarchy (App/Pages, Layouts, UI, Features, Docs/Failures) and enable autodocs 2026-02-05 13:21:54 +01:00
senke
d707eb7cd8 docs(storybook): clarify global decorator guarantees nav/auth context (Phase 3)
All stories run under AuthProvider and MemoryRouter; no story should
crash on missing useContext for auth or router.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-05 13:08:45 +01:00
senke
69f7550912 refactor(storybook): remove duplicate providers from stories (Phase 2)
Stories no longer wrap with QueryClientProvider, ToastProvider,
ThemeProvider, or MemoryRouter; global StorybookDecorator provides them.
- Route-specific pages use parameters.router.initialEntries
  (ResetPasswordPage, VerifyEmailPage) or minimal MemoryRouter+Route
  where useParams is needed (TrackDetailPage, PlaylistDetailPage).
- Stories that seeded query cache use useQueryClient() from global
  decorator (FollowButton, CollaboratorManagement, CommentSection).
- Navbar, AuthLayout, DashboardLayout, Header, and 25+ story files
  simplified to layout divs only.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-05 13:08:17 +01:00
senke
9767b3fdf8 feat(storybook): global StorybookDecorator in decorators.tsx (Phase 2)
Single decorator provides: I18nextProvider(i18n), ThemeProvider,
QueryClientProvider(retry:false), ToastProvider, AudioProvider,
AuthProvider, MemoryRouter. Stories can set parameters.router.initialEntries
for route-specific views. preview.tsx uses StorybookDecorator only.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-05 13:01:49 +01:00
senke
aeaf3435e6 chore(storybook): audit script filter sb-manager/sb-addons + comparison report
- Filter requestfailed to ignore /sb-manager/, /sb-addons/, /index.json,
  /project.json so the audit counts only app/API failures.
- Add STORYBOOK_AUDIT_COMPARISON.md: before 641 stories / 1250 errors,
  after 0 app errors (Phase 1 validated).

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-05 12:41:08 +01:00
senke
c31b1d0e92 docs(storybook): document MSW/same-origin contract in preview
Storybook must be run via npm run storybook so VITE_API_URL stays
relative and VITE_STORYBOOK is set; avoids accidental real API calls.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-05 12:28:04 +01:00
senke
c63dabcc88 fix(storybook): mark ErrorBoundary error stories for audit allowlist
WithError and WithCustomFallback set parameters.storybookAudit.expectConsoleErrors
so audit/CI can treat their console errors as intentional (failure demo).

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-05 12:17:50 +01:00
senke
15df7e2728 fix(storybook): mock dicebear and transparenttextures in MSW
Prevent external asset requests during Storybook so no network
dependency and deterministic rendering. Return 1x1 SVG placeholder.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-05 12:17:14 +01:00
senke
cde74b56e8 fix(storybook): fix auth/me shape and add dashboard, sessions, roles handlers
- auth/me: return data.user so authService.getCurrentUser() gets response.data.user
- Add GET /api/v1/dashboard for dashboardService (stats, recent_activity, library_preview)
- Add GET /api/v1/sessions/stats for sessionsApi
- Add GET /api/v1/roles and /roles/:id for admin views
- Remove console.log from audit/stats handler

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-05 12:16:56 +01:00
senke
4985cc7435 fix(storybook): disable logger network send in Storybook
Set VITE_STORYBOOK=true for storybook dev/build so the logger never
sends POST to /logs/frontend in the isolated UI environment. Prevents
94+ failed network requests in audit and keeps Storybook hermetic.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-05 12:16:23 +01:00
senke
d18dd2cca4 fix(storybook): remediate crashes and improve mock stability
- Add global AuthProvider and QueryClientProvider
- Fix Loader2 reference error in CommentThread
- Fix coverUrl crash in ProductCard
- Fix double-slash URL bug in logger
- Improve MSW handlers and environment config
2026-02-04 19:33:00 +01:00
senke
77e94da0da fix(frontend): remove redundant api version path in logger endpoint 2026-02-04 10:18:47 +01:00
senke
c241433941 fix(storybook): add global AuthProvider to preview.tsx 2026-02-04 10:17:19 +01:00
senke
ca59f1359d fix(storybook): update MSW handlers to be cookie-compatible and add missing logs endpoint 2026-02-04 10:15:11 +01:00
senke
0396da06ec feat(storybook): integrate msw for data mocking 2026-02-04 01:01:45 +01:00
senke
62010f6a22 chore(storybook): improve configuration and cleanup 2026-02-04 00:44:40 +01:00
senke
04d65e55f6 stabilisation: fix commit 2026-02-03 09:56:11 +01:00
senke
0a054ac8d9 refactor(cart): migrate CheckoutView and MarketplaceView to useCartStore and fix stories 2026-02-03 09:50:51 +01:00
senke
5e8e8b5875 refactor(cart): migrate CartView and CartItem to useCartStore 2026-02-03 09:46:01 +01:00
senke
922851653f refactor(cart): migrate Navbar to useCartStore and remove CartProvider decorator 2026-02-03 09:42:59 +01:00
senke
80d6b10793 refactor(cart): migrate WishlistView to useCartStore 2026-02-03 09:40:54 +01:00