├── apps ├── reatom │ ├── .env.production │ ├── .env.development │ ├── src │ │ ├── features │ │ │ ├── artists │ │ │ │ ├── index.ts │ │ │ │ ├── api │ │ │ │ │ └── index.ts │ │ │ │ └── ui │ │ │ │ │ └── ArtistCard │ │ │ │ │ └── index.ts │ │ │ ├── playlists │ │ │ │ ├── api │ │ │ │ │ ├── types.ts │ │ │ │ │ └── index.ts │ │ │ │ ├── index.ts │ │ │ │ └── ui │ │ │ │ │ ├── PlaylistOverview │ │ │ │ │ └── index.ts │ │ │ │ │ ├── CreatePlaylistModal │ │ │ │ │ └── index.ts │ │ │ │ │ └── index.ts │ │ │ ├── auth │ │ │ │ ├── index.ts │ │ │ │ └── ui │ │ │ │ │ ├── ProfileDropdownMenu │ │ │ │ │ ├── index.ts │ │ │ │ │ └── ProfileDropdownMenu.module.css │ │ │ │ │ ├── LoginButtonAndModal │ │ │ │ │ └── index.ts │ │ │ │ │ └── index.ts │ │ │ ├── reactions │ │ │ │ ├── index.ts │ │ │ │ └── ui │ │ │ │ │ ├── index.ts │ │ │ │ │ └── ReactionProvider │ │ │ │ │ └── index.ts │ │ │ ├── tags │ │ │ │ ├── api │ │ │ │ │ ├── index.ts │ │ │ │ │ └── tags-api.ts │ │ │ │ ├── ui │ │ │ │ │ ├── TagsList │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ └── TagsList.module.css │ │ │ │ │ └── index.ts │ │ │ │ └── index.ts │ │ │ └── tracks │ │ │ │ ├── ui │ │ │ │ ├── TrackCard │ │ │ │ │ └── index.ts │ │ │ │ ├── TrackOverview │ │ │ │ │ └── index.ts │ │ │ │ ├── TracksTable │ │ │ │ │ └── index.ts │ │ │ │ ├── TrackInfoCell │ │ │ │ │ └── index.ts │ │ │ │ ├── index.ts │ │ │ │ └── TrackRow │ │ │ │ │ └── TrackRow.module.css │ │ │ │ ├── index.ts │ │ │ │ └── api │ │ │ │ ├── index.ts │ │ │ │ └── types.ts │ │ ├── pages │ │ │ ├── UserPage │ │ │ │ ├── ui │ │ │ │ │ ├── UserTabs │ │ │ │ │ │ ├── TracksTab │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ └── TracksTab.module.css │ │ │ │ │ │ ├── LikedTracksTab │ │ │ │ │ │ │ ├── LikedTracksTab.module.css │ │ │ │ │ │ │ └── index.ts │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── PlaylistsTab │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ └── PlaylistsTab.module.css │ │ │ │ │ │ └── MyLikedPlaylistsTab │ │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── UserInfo │ │ │ │ │ │ └── index.ts │ │ │ │ │ └── index.ts │ │ │ │ ├── index.ts │ │ │ │ ├── UserPage.module.css │ │ │ │ └── UserPage.tsx │ │ │ ├── MainPage │ │ │ │ ├── index.ts │ │ │ │ └── MainPage.module.css │ │ │ ├── TrackPage │ │ │ │ ├── index.ts │ │ │ │ ├── ui │ │ │ │ │ └── ControlPanel │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ └── ControlPanel.module.css │ │ │ │ └── TrackPage.module.css │ │ │ ├── PlaylistPage │ │ │ │ ├── index.ts │ │ │ │ ├── ui │ │ │ │ │ └── ControlPanel │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ └── ControlPanel.module.css │ │ │ │ └── PlaylistPage.module.css │ │ │ ├── TracksPage │ │ │ │ ├── index.ts │ │ │ │ └── TracksPage.module.css │ │ │ ├── PlaylistsPage │ │ │ │ └── index.ts │ │ │ ├── common │ │ │ │ ├── ContentList │ │ │ │ │ ├── index.ts │ │ │ │ │ └── ContentList.module.css │ │ │ │ ├── PageWrapper │ │ │ │ │ ├── index.ts │ │ │ │ │ └── PageWrapper.module.css │ │ │ │ ├── SortSelect │ │ │ │ │ ├── index.ts │ │ │ │ │ └── SortSelect.module.css │ │ │ │ ├── SearchTextField │ │ │ │ │ └── index.ts │ │ │ │ └── index.ts │ │ │ ├── index.ts │ │ │ └── auth │ │ │ │ └── OAuthRedirect │ │ │ │ └── OAuthCallback.module.css │ │ ├── widgets │ │ │ └── Player │ │ │ │ ├── index.ts │ │ │ │ └── Player.module.css │ │ ├── layout │ │ │ ├── index.ts │ │ │ ├── Header │ │ │ │ ├── index.ts │ │ │ │ └── Header.module.css │ │ │ └── Sidebar │ │ │ │ ├── MenuLinks │ │ │ │ └── index.ts │ │ │ │ ├── index.ts │ │ │ │ ├── Sidebar.module.css │ │ │ │ └── Sidebar.tsx │ │ ├── vite-env.d.ts │ │ ├── app │ │ │ ├── routing │ │ │ │ └── index.ts │ │ │ └── App.tsx │ │ ├── shared │ │ │ ├── components │ │ │ │ ├── Button │ │ │ │ │ └── index.ts │ │ │ │ ├── Card │ │ │ │ │ ├── index.ts │ │ │ │ │ └── Card.module.css │ │ │ │ ├── Dialog │ │ │ │ │ └── index.ts │ │ │ │ ├── Select │ │ │ │ │ └── index.ts │ │ │ │ ├── Table │ │ │ │ │ └── index.ts │ │ │ │ ├── Tabs │ │ │ │ │ └── index.ts │ │ │ │ ├── Hashtag │ │ │ │ │ └── index.ts │ │ │ │ ├── Progress │ │ │ │ │ └── index.ts │ │ │ │ ├── Textarea │ │ │ │ │ └── index.ts │ │ │ │ ├── IconButton │ │ │ │ │ └── index.ts │ │ │ │ ├── Pagination │ │ │ │ │ └── index.ts │ │ │ │ ├── SearchField │ │ │ │ │ └── index.ts │ │ │ │ ├── TagEditor │ │ │ │ │ └── index.ts │ │ │ │ ├── TextField │ │ │ │ │ └── index.ts │ │ │ │ ├── Typography │ │ │ │ │ └── index.ts │ │ │ │ ├── AudioPlayer │ │ │ │ │ └── index.ts │ │ │ │ ├── Autocomplete │ │ │ │ │ └── index.ts │ │ │ │ ├── DropdownMenu │ │ │ │ │ └── index.ts │ │ │ │ ├── ImageUploader │ │ │ │ │ └── index.ts │ │ │ │ └── ReactionButtons │ │ │ │ │ └── index.ts │ │ │ ├── icons │ │ │ │ ├── LiveWaveIcon │ │ │ │ │ └── index.ts │ │ │ │ └── KeyboardArrowRightIcon.tsx │ │ │ ├── hooks │ │ │ │ └── index.ts │ │ │ ├── utils │ │ │ │ ├── index.ts │ │ │ │ └── validators │ │ │ │ │ ├── inNun.ts │ │ │ │ │ ├── isNull.ts │ │ │ │ │ ├── getType.ts │ │ │ │ │ ├── isUndefined.ts │ │ │ │ │ ├── isValid.ts │ │ │ │ │ └── isArray.ts │ │ │ ├── api │ │ │ │ └── types.ts │ │ │ ├── fonts │ │ │ │ ├── lato-v24-latin-700.woff2 │ │ │ │ ├── lato-v24-latin-900.woff2 │ │ │ │ └── lato-v24-latin-regular.woff2 │ │ │ └── config │ │ │ │ └── config.ts │ │ ├── entities │ │ │ └── playlist │ │ │ │ ├── ui │ │ │ │ ├── PlaylistCard │ │ │ │ │ └── index.ts │ │ │ │ └── PlaylistItem │ │ │ │ │ └── index.ts │ │ │ │ └── index.tsx │ │ └── assets │ │ │ └── img │ │ │ ├── no-cover.png │ │ │ ├── avatar-default.png │ │ │ └── track-default-cover.jpg │ ├── .env │ ├── README.md │ ├── tsconfig.json │ └── .storybook │ │ └── main.ts ├── tanstack-query-zustand │ ├── .env.production │ ├── src │ │ ├── features │ │ │ ├── artists │ │ │ │ ├── index.ts │ │ │ │ ├── api │ │ │ │ │ └── index.ts │ │ │ │ └── ui │ │ │ │ │ └── ArtistCard │ │ │ │ │ └── index.ts │ │ │ ├── auth │ │ │ │ ├── index.ts │ │ │ │ └── ui │ │ │ │ │ ├── LoginModal │ │ │ │ │ └── index.ts │ │ │ │ │ ├── ProfileDropdownMenu │ │ │ │ │ └── index.ts │ │ │ │ │ ├── LoginButtonAndModal │ │ │ │ │ └── index.ts │ │ │ │ │ └── index.ts │ │ │ ├── tags │ │ │ │ ├── api │ │ │ │ │ └── index.ts │ │ │ │ ├── ui │ │ │ │ │ ├── TagsList │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ └── TagsList.module.css │ │ │ │ │ └── index.ts │ │ │ │ └── index.ts │ │ │ ├── playlists │ │ │ │ ├── api │ │ │ │ │ ├── index.ts │ │ │ │ │ └── types.ts │ │ │ │ ├── index.ts │ │ │ │ └── ui │ │ │ │ │ ├── PlaylistOverview │ │ │ │ │ └── index.ts │ │ │ │ │ ├── CreatePlaylistModal │ │ │ │ │ └── index.ts │ │ │ │ │ └── index.ts │ │ │ └── tracks │ │ │ │ ├── ui │ │ │ │ ├── TrackCard │ │ │ │ │ └── index.ts │ │ │ │ ├── TracksTable │ │ │ │ │ └── index.ts │ │ │ │ ├── TrackInfoCell │ │ │ │ │ └── index.ts │ │ │ │ ├── TrackOverview │ │ │ │ │ └── index.ts │ │ │ │ ├── index.ts │ │ │ │ └── TrackRow │ │ │ │ │ └── TrackRow.module.css │ │ │ │ ├── index.ts │ │ │ │ └── api │ │ │ │ ├── index.ts │ │ │ │ └── types.ts │ │ ├── shared │ │ │ ├── auth │ │ │ │ └── types │ │ │ │ │ └── local-storage.keys.ts │ │ │ ├── components │ │ │ │ ├── Card │ │ │ │ │ ├── index.ts │ │ │ │ │ └── Card.module.css │ │ │ │ ├── Table │ │ │ │ │ └── index.ts │ │ │ │ ├── Tabs │ │ │ │ │ └── index.ts │ │ │ │ ├── Button │ │ │ │ │ └── index.ts │ │ │ │ ├── Dialog │ │ │ │ │ └── index.ts │ │ │ │ ├── Hashtag │ │ │ │ │ └── index.ts │ │ │ │ ├── Progress │ │ │ │ │ └── index.ts │ │ │ │ ├── Select │ │ │ │ │ └── index.ts │ │ │ │ ├── Textarea │ │ │ │ │ └── index.ts │ │ │ │ ├── IconButton │ │ │ │ │ └── index.ts │ │ │ │ ├── Pagination │ │ │ │ │ └── index.ts │ │ │ │ ├── TagEditor │ │ │ │ │ └── index.ts │ │ │ │ ├── TextField │ │ │ │ │ └── index.ts │ │ │ │ ├── Typography │ │ │ │ │ └── index.ts │ │ │ │ ├── AudioPlayer │ │ │ │ │ └── index.ts │ │ │ │ ├── Autocomplete │ │ │ │ │ └── index.ts │ │ │ │ ├── CoverImage │ │ │ │ │ ├── index.ts │ │ │ │ │ └── CoverImage.styles.module.scss │ │ │ │ ├── DropdownMenu │ │ │ │ │ └── index.ts │ │ │ │ ├── ImageUploader │ │ │ │ │ └── index.ts │ │ │ │ ├── SearchField │ │ │ │ │ └── index.ts │ │ │ │ └── ReactionButtons │ │ │ │ │ └── index.ts │ │ │ ├── hooks │ │ │ │ ├── getId │ │ │ │ │ └── index.ts │ │ │ │ ├── debounceCallback │ │ │ │ │ └── index.ts │ │ │ │ ├── debounceValue │ │ │ │ │ └── index.ts │ │ │ │ ├── throttleCallback │ │ │ │ │ └── index.ts │ │ │ │ ├── infiniteScroll │ │ │ │ │ ├── index.ts │ │ │ │ │ └── useObserverInfiniteScroll.types.ts │ │ │ │ └── index.ts │ │ │ ├── icons │ │ │ │ └── LiveWaveIcon │ │ │ │ │ └── index.ts │ │ │ ├── featureFlags.ts │ │ │ ├── types │ │ │ │ └── strict.tsx │ │ │ ├── utils │ │ │ │ ├── index.ts │ │ │ │ └── validators │ │ │ │ │ ├── inNun.ts │ │ │ │ │ ├── isNull.ts │ │ │ │ │ ├── isNotEmptyArray.ts │ │ │ │ │ ├── getType.ts │ │ │ │ │ ├── isNumber.ts │ │ │ │ │ ├── isUndefined.ts │ │ │ │ │ ├── isValid.ts │ │ │ │ │ ├── isArray.ts │ │ │ │ │ └── isString.ts │ │ │ ├── api │ │ │ │ └── types.ts │ │ │ ├── fonts │ │ │ │ ├── lato-v24-latin-700.woff2 │ │ │ │ ├── lato-v24-latin-900.woff2 │ │ │ │ └── lato-v24-latin-regular.woff2 │ │ │ └── config │ │ │ │ └── config.ts │ │ ├── pages │ │ │ ├── UserPage │ │ │ │ ├── ui │ │ │ │ │ ├── UserTabs │ │ │ │ │ │ ├── TracksTab │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ └── TracksTab.module.css │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── LikedTracksTab │ │ │ │ │ │ │ ├── LikedTracksTab.module.css │ │ │ │ │ │ │ └── index.ts │ │ │ │ │ │ ├── PlaylistsTab │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ └── PlaylistsTab.module.css │ │ │ │ │ │ └── MyLikedPlaylistsTab │ │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── UserInfo │ │ │ │ │ │ └── index.ts │ │ │ │ │ └── index.ts │ │ │ │ ├── index.ts │ │ │ │ ├── UserPage.module.css │ │ │ │ └── UserPage.tsx │ │ │ ├── MainPage │ │ │ │ ├── index.ts │ │ │ │ └── MainPage.module.css │ │ │ ├── TrackPage │ │ │ │ ├── index.ts │ │ │ │ ├── ui │ │ │ │ │ └── ControlPanel │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ └── ControlPanel.module.css │ │ │ │ └── TrackPage.module.css │ │ │ ├── TracksPage │ │ │ │ └── index.ts │ │ │ ├── PlaylistPage │ │ │ │ ├── index.ts │ │ │ │ ├── ui │ │ │ │ │ └── ControlPanel │ │ │ │ │ │ └── index.ts │ │ │ │ └── PlaylistPage.module.css │ │ │ ├── PlaylistsPage │ │ │ │ └── index.ts │ │ │ ├── common │ │ │ │ ├── SortSelect │ │ │ │ │ ├── index.ts │ │ │ │ │ └── SortSelect.module.css │ │ │ │ ├── ContentList │ │ │ │ │ ├── index.ts │ │ │ │ │ └── ContentList.module.css │ │ │ │ ├── PageWrapper │ │ │ │ │ ├── index.ts │ │ │ │ │ └── PageWrapper.module.css │ │ │ │ ├── SearchTextField │ │ │ │ │ └── index.ts │ │ │ │ └── index.ts │ │ │ ├── index.ts │ │ │ └── auth │ │ │ │ └── OAuthRedirect │ │ │ │ └── OAuthCallback.module.css │ │ ├── layout │ │ │ ├── index.ts │ │ │ ├── Header │ │ │ │ ├── index.ts │ │ │ │ └── Header.module.css │ │ │ └── Sidebar │ │ │ │ ├── MenuLinks │ │ │ │ └── index.ts │ │ │ │ ├── index.ts │ │ │ │ ├── Sidebar.module.css │ │ │ │ └── Sidebar.tsx │ │ ├── widgets │ │ │ └── Player │ │ │ │ ├── index.ts │ │ │ │ └── Player.module.css │ │ ├── app │ │ │ ├── routing │ │ │ │ └── index.ts │ │ │ └── App.tsx │ │ ├── entities │ │ │ └── playlist │ │ │ │ ├── ui │ │ │ │ ├── PlaylistCard │ │ │ │ │ └── index.ts │ │ │ │ └── PlaylistItem │ │ │ │ │ └── index.ts │ │ │ │ └── index.tsx │ │ ├── assets │ │ │ └── img │ │ │ │ ├── no-cover.png │ │ │ │ ├── avatar-default.png │ │ │ │ └── track-default-cover.jpg │ │ └── main.tsx │ ├── .env.development │ ├── .env │ ├── README.md │ ├── tsconfig.json │ └── .storybook │ │ └── main.ts ├── ui-vanilla │ ├── src │ │ ├── features │ │ │ ├── artists │ │ │ │ ├── index.ts │ │ │ │ ├── api │ │ │ │ │ └── index.ts │ │ │ │ └── ui │ │ │ │ │ └── ArtistCard │ │ │ │ │ └── index.ts │ │ │ ├── auth │ │ │ │ ├── index.ts │ │ │ │ └── ui │ │ │ │ │ ├── ProfileDropdownMenu │ │ │ │ │ └── index.ts │ │ │ │ │ ├── LoginButtonAndModal │ │ │ │ │ └── index.ts │ │ │ │ │ └── index.ts │ │ │ ├── tags │ │ │ │ ├── api │ │ │ │ │ └── index.ts │ │ │ │ ├── index.ts │ │ │ │ └── ui │ │ │ │ │ ├── TagsList │ │ │ │ │ ├── index.ts │ │ │ │ │ └── TagsList.module.css │ │ │ │ │ └── index.ts │ │ │ ├── playlists │ │ │ │ ├── api │ │ │ │ │ └── index.ts │ │ │ │ ├── index.ts │ │ │ │ └── ui │ │ │ │ │ ├── PlaylistCard │ │ │ │ │ └── index.ts │ │ │ │ │ ├── PlaylistOverview │ │ │ │ │ └── index.ts │ │ │ │ │ ├── CreatePlaylistModal │ │ │ │ │ └── index.ts │ │ │ │ │ └── index.ts │ │ │ └── tracks │ │ │ │ ├── ui │ │ │ │ ├── TrackCard │ │ │ │ │ └── index.ts │ │ │ │ ├── TracksTable │ │ │ │ │ └── index.ts │ │ │ │ ├── TrackOverview │ │ │ │ │ └── index.ts │ │ │ │ ├── TrackInfoCell │ │ │ │ │ └── index.ts │ │ │ │ ├── index.ts │ │ │ │ └── TrackRow │ │ │ │ │ └── TrackRow.module.css │ │ │ │ ├── index.ts │ │ │ │ └── api │ │ │ │ ├── index.ts │ │ │ │ └── types.ts │ │ ├── pages │ │ │ ├── UserPage │ │ │ │ ├── ui │ │ │ │ │ ├── UserTabs │ │ │ │ │ │ ├── TracksTab │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ └── TracksTab.module.css │ │ │ │ │ │ ├── LikedTracksTab │ │ │ │ │ │ │ ├── LikedTracksTab.module.css │ │ │ │ │ │ │ └── index.ts │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── PlaylistsTab │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ └── PlaylistsTab.module.css │ │ │ │ │ │ └── MyLikedPlaylistsTab │ │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── UserInfo │ │ │ │ │ │ └── index.ts │ │ │ │ │ └── index.ts │ │ │ │ ├── index.ts │ │ │ │ ├── UserPage.module.css │ │ │ │ └── UserPage.tsx │ │ │ ├── MainPage │ │ │ │ ├── index.ts │ │ │ │ └── MainPage.module.css │ │ │ ├── TrackPage │ │ │ │ ├── index.ts │ │ │ │ ├── ui │ │ │ │ │ └── ControlPanel │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ └── ControlPanel.module.css │ │ │ │ └── TrackPage.module.css │ │ │ ├── TracksPage │ │ │ │ ├── index.ts │ │ │ │ └── TracksPage.module.css │ │ │ ├── PlaylistPage │ │ │ │ ├── index.ts │ │ │ │ ├── ui │ │ │ │ │ └── ControlPanel │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ └── ControlPanel.module.css │ │ │ │ └── PlaylistPage.module.css │ │ │ ├── PlaylistsPage │ │ │ │ └── index.ts │ │ │ ├── common │ │ │ │ ├── ContentList │ │ │ │ │ ├── index.ts │ │ │ │ │ └── ContentList.module.css │ │ │ │ ├── PageWrapper │ │ │ │ │ ├── index.ts │ │ │ │ │ └── PageWrapper.module.css │ │ │ │ ├── SortSelect │ │ │ │ │ ├── index.ts │ │ │ │ │ └── SortSelect.module.css │ │ │ │ ├── SearchTextField │ │ │ │ │ └── index.ts │ │ │ │ └── index.ts │ │ │ └── index.ts │ │ ├── layout │ │ │ ├── index.ts │ │ │ ├── Header │ │ │ │ ├── index.ts │ │ │ │ └── Header.module.css │ │ │ └── Sidebar │ │ │ │ ├── index.ts │ │ │ │ ├── MenuLinks │ │ │ │ └── index.ts │ │ │ │ ├── Sidebar.module.css │ │ │ │ └── Sidebar.tsx │ │ ├── shared │ │ │ ├── hooks │ │ │ │ └── index.ts │ │ │ ├── components │ │ │ │ ├── Card │ │ │ │ │ ├── index.ts │ │ │ │ │ └── Card.module.css │ │ │ │ ├── Tabs │ │ │ │ │ └── index.ts │ │ │ │ ├── Button │ │ │ │ │ └── index.ts │ │ │ │ ├── Dialog │ │ │ │ │ └── index.ts │ │ │ │ ├── Select │ │ │ │ │ └── index.ts │ │ │ │ ├── Table │ │ │ │ │ └── index.ts │ │ │ │ ├── Hashtag │ │ │ │ │ └── index.ts │ │ │ │ ├── Progress │ │ │ │ │ └── index.ts │ │ │ │ ├── TagEditor │ │ │ │ │ └── index.ts │ │ │ │ ├── TextField │ │ │ │ │ └── index.ts │ │ │ │ ├── Textarea │ │ │ │ │ └── index.ts │ │ │ │ ├── IconButton │ │ │ │ │ └── index.ts │ │ │ │ ├── Pagination │ │ │ │ │ └── index.ts │ │ │ │ ├── SearchField │ │ │ │ │ └── index.ts │ │ │ │ ├── Typography │ │ │ │ │ └── index.ts │ │ │ │ ├── AudioPlayer │ │ │ │ │ └── index.ts │ │ │ │ ├── Autocomplete │ │ │ │ │ └── index.ts │ │ │ │ ├── DropdownMenu │ │ │ │ │ └── index.ts │ │ │ │ ├── ImageUploader │ │ │ │ │ └── index.ts │ │ │ │ └── ReactionButtons │ │ │ │ │ └── index.ts │ │ │ ├── icons │ │ │ │ ├── LiveWaveIcon │ │ │ │ │ └── index.ts │ │ │ │ └── KeyboardArrowRightIcon.tsx │ │ │ └── fonts │ │ │ │ ├── lato-v24-latin-700.woff2 │ │ │ │ ├── lato-v24-latin-900.woff2 │ │ │ │ └── lato-v24-latin-regular.woff2 │ │ ├── widgets │ │ │ └── Player │ │ │ │ ├── index.ts │ │ │ │ └── Player.module.css │ │ ├── vite-env.d.ts │ │ └── app │ │ │ ├── routing │ │ │ └── index.ts │ │ │ └── App.tsx │ ├── tsconfig.json │ ├── README.md │ ├── .storybook │ │ └── main.ts │ └── vite.config.ts ├── rtk-query │ ├── src │ │ ├── app │ │ │ ├── store │ │ │ │ └── index.ts │ │ │ ├── api │ │ │ │ └── index.ts │ │ │ └── routing │ │ │ │ └── index.ts │ │ ├── pages │ │ │ ├── UserPage │ │ │ │ ├── ui │ │ │ │ │ ├── UserTabs │ │ │ │ │ │ ├── TracksTab │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ └── TracksTab.module.css │ │ │ │ │ │ ├── LikedTracksTab │ │ │ │ │ │ │ ├── LikedTracksTab.module.css │ │ │ │ │ │ │ └── index.ts │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── PlaylistsTab │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ └── PlaylistsTab.module.css │ │ │ │ │ │ └── MyLikedPlaylistsTab │ │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── UserInfo │ │ │ │ │ │ └── index.ts │ │ │ │ │ └── index.ts │ │ │ │ ├── index.ts │ │ │ │ ├── hooks │ │ │ │ │ └── index.ts │ │ │ │ ├── UserPage.module.css │ │ │ │ └── UserPage.tsx │ │ │ ├── MainPage │ │ │ │ ├── index.ts │ │ │ │ └── MainPage.module.css │ │ │ ├── TrackPage │ │ │ │ ├── index.ts │ │ │ │ ├── ui │ │ │ │ │ └── ControlPanel │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ └── ControlPanel.module.css │ │ │ │ └── TrackPage.module.css │ │ │ ├── TracksPage │ │ │ │ ├── index.ts │ │ │ │ └── TracksPage.module.css │ │ │ ├── PlaylistPage │ │ │ │ ├── index.ts │ │ │ │ ├── ui │ │ │ │ │ └── ControlPanel │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ └── ControlPanel.module.css │ │ │ │ └── PlaylistPage.module.css │ │ │ ├── PlaylistsPage │ │ │ │ └── index.ts │ │ │ ├── common │ │ │ │ ├── hooks │ │ │ │ │ └── index.ts │ │ │ │ ├── ui │ │ │ │ │ ├── ContentList │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ └── ContentList.module.css │ │ │ │ │ ├── PageWrapper │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── SearchTags │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── SortSelect │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ └── SortSelect.module.css │ │ │ │ │ └── SearchTextField │ │ │ │ │ │ └── index.ts │ │ │ │ └── index.ts │ │ │ ├── TrackLyricsPage │ │ │ │ └── index.ts │ │ │ └── index.ts │ │ ├── features │ │ │ ├── playlists │ │ │ │ ├── ui │ │ │ │ │ ├── ChoosePlaylistModal │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── PlaylistCard │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── PlaylistOverview │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── PlaylistCardSkeleton │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── CreateEditPlaylistModal │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── ChoosePlaylistButtonAndModal │ │ │ │ │ │ └── index.ts │ │ │ │ │ └── index.ts │ │ │ │ ├── model │ │ │ │ │ ├── index.ts │ │ │ │ │ └── hooks │ │ │ │ │ │ └── index.ts │ │ │ │ ├── index.ts │ │ │ │ └── api │ │ │ │ │ └── index.ts │ │ │ ├── tags │ │ │ │ ├── api │ │ │ │ │ ├── index.ts │ │ │ │ │ └── tagsApi.types.ts │ │ │ │ ├── index.ts │ │ │ │ └── ui │ │ │ │ │ ├── PlaylistTagAutocomplete │ │ │ │ │ ├── PlaylistTagAutocomplete.module.css │ │ │ │ │ └── index.ts │ │ │ │ │ ├── TagsList │ │ │ │ │ ├── index.ts │ │ │ │ │ └── TagsList.module.css │ │ │ │ │ └── index.ts │ │ │ ├── artists │ │ │ │ ├── api │ │ │ │ │ └── index.ts │ │ │ │ ├── ui │ │ │ │ │ ├── ArtistCard │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ └── ArtistsTagAutocomplete │ │ │ │ │ │ ├── ArtistsTagAutocomplete.module.css │ │ │ │ │ │ └── index.ts │ │ │ │ └── index.ts │ │ │ ├── auth │ │ │ │ ├── model │ │ │ │ │ └── index.ts │ │ │ │ ├── ui │ │ │ │ │ ├── OAuthRedirect │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ └── OAuthCallback.module.css │ │ │ │ │ ├── LoginModal │ │ │ │ │ │ └── index.ts │ │ │ │ │ └── index.ts │ │ │ │ ├── api │ │ │ │ │ └── index.ts │ │ │ │ └── index.ts │ │ │ ├── profile │ │ │ │ ├── types │ │ │ │ │ ├── index.ts │ │ │ │ │ └── profile.type.ts │ │ │ │ ├── ui │ │ │ │ │ ├── index.ts │ │ │ │ │ └── EditProfileModal │ │ │ │ │ │ └── index.ts │ │ │ │ ├── utils │ │ │ │ │ ├── index.ts │ │ │ │ │ └── storage-key.ts │ │ │ │ ├── config │ │ │ │ │ ├── index.ts │ │ │ │ │ └── empty-profile.ts │ │ │ │ ├── model │ │ │ │ │ ├── hook │ │ │ │ │ │ └── index.ts │ │ │ │ │ └── index.ts │ │ │ │ └── index.ts │ │ │ └── tracks │ │ │ │ ├── ui │ │ │ │ ├── TrackCard │ │ │ │ │ └── index.ts │ │ │ │ ├── TracksTable │ │ │ │ │ └── index.ts │ │ │ │ ├── TrackActions │ │ │ │ │ └── index.ts │ │ │ │ ├── TrackOverview │ │ │ │ │ └── index.ts │ │ │ │ ├── TrackInfoCell │ │ │ │ │ └── index.ts │ │ │ │ ├── CreateEditTrackModal │ │ │ │ │ └── index.ts │ │ │ │ ├── index.ts │ │ │ │ └── TrackRow │ │ │ │ │ └── TrackRow.module.css │ │ │ │ ├── model │ │ │ │ ├── index.ts │ │ │ │ └── hooks │ │ │ │ │ └── index.ts │ │ │ │ ├── index.ts │ │ │ │ └── api │ │ │ │ └── index.ts │ │ ├── layout │ │ │ ├── index.ts │ │ │ ├── Sidebar │ │ │ │ ├── index.ts │ │ │ │ ├── MenuLinks │ │ │ │ │ └── index.ts │ │ │ │ ├── Sidebar.module.css │ │ │ │ └── Sidebar.tsx │ │ │ ├── AppLoader │ │ │ │ ├── index.ts │ │ │ │ └── AppLoader.tsx │ │ │ └── Header │ │ │ │ ├── AccountMenu │ │ │ │ └── index.ts │ │ │ │ ├── index.ts │ │ │ │ └── Header.module.css │ │ ├── player │ │ │ ├── player.ts │ │ │ └── utils │ │ │ │ └── index.ts │ │ ├── shared │ │ │ ├── configs │ │ │ │ ├── index.ts │ │ │ │ └── paths.ts │ │ │ ├── components │ │ │ │ ├── Card │ │ │ │ │ ├── index.ts │ │ │ │ │ └── Card.module.css │ │ │ │ ├── Tabs │ │ │ │ │ └── index.ts │ │ │ │ ├── Avatar │ │ │ │ │ └── index.ts │ │ │ │ ├── Button │ │ │ │ │ └── index.ts │ │ │ │ ├── Dialog │ │ │ │ │ └── index.ts │ │ │ │ ├── Hashtag │ │ │ │ │ └── index.ts │ │ │ │ ├── Loader │ │ │ │ │ └── index.ts │ │ │ │ ├── Select │ │ │ │ │ └── index.ts │ │ │ │ ├── Table │ │ │ │ │ └── index.ts │ │ │ │ ├── Progress │ │ │ │ │ └── index.ts │ │ │ │ ├── Skeleton │ │ │ │ │ └── index.ts │ │ │ │ ├── TagEditor │ │ │ │ │ └── index.ts │ │ │ │ ├── TextField │ │ │ │ │ └── index.ts │ │ │ │ ├── Textarea │ │ │ │ │ └── index.ts │ │ │ │ ├── Autocomplete │ │ │ │ │ └── index.ts │ │ │ │ ├── DropdownMenu │ │ │ │ │ └── index.ts │ │ │ │ ├── FileUploader │ │ │ │ │ └── index.ts │ │ │ │ ├── IconButton │ │ │ │ │ └── index.ts │ │ │ │ ├── ImageCropper │ │ │ │ │ └── index.ts │ │ │ │ ├── Pagination │ │ │ │ │ └── index.ts │ │ │ │ ├── SearchField │ │ │ │ │ └── index.ts │ │ │ │ ├── Typography │ │ │ │ │ └── index.ts │ │ │ │ ├── AudioPlayer │ │ │ │ │ └── index.ts │ │ │ │ ├── ImageUploader │ │ │ │ │ └── index.ts │ │ │ │ ├── ReactionButtons │ │ │ │ │ └── index.ts │ │ │ │ └── FormControlledTextField │ │ │ │ │ └── index.ts │ │ │ ├── constants │ │ │ │ ├── index.ts │ │ │ │ └── constants.ts │ │ │ ├── types │ │ │ │ ├── common.types.ts │ │ │ │ └── index.ts │ │ │ ├── icons │ │ │ │ ├── LiveWaveIcon │ │ │ │ │ └── index.ts │ │ │ │ └── KeyboardArrowRightIcon.tsx │ │ │ ├── assets │ │ │ │ ├── fonts │ │ │ │ │ ├── lato-v24-latin-700.woff2 │ │ │ │ │ ├── lato-v24-latin-900.woff2 │ │ │ │ │ └── lato-v24-latin-regular.woff2 │ │ │ │ └── images │ │ │ │ │ └── no-cover-placeholder.avif │ │ │ ├── hooks │ │ │ │ ├── index.ts │ │ │ │ ├── useAppSelector.ts │ │ │ │ └── useAppDispatch.ts │ │ │ └── utils │ │ │ │ ├── get-image-by-type.ts │ │ │ │ ├── index.ts │ │ │ │ ├── get-user-initials.ts │ │ │ │ └── show-error-toast.ts │ │ ├── widgets │ │ │ └── Player │ │ │ │ ├── index.ts │ │ │ │ └── Player.module.css │ │ └── vite-env.d.ts │ ├── .env │ ├── tsconfig.json │ ├── README.md │ └── .storybook │ │ └── main.ts ├── nextjs │ ├── src │ │ ├── shared │ │ │ └── common.types.ts │ │ ├── app │ │ │ └── favicon.ico │ │ └── features │ │ │ └── auth │ │ │ └── ui │ │ │ ├── Login │ │ │ └── Login.tsx │ │ │ └── MeInfo │ │ │ └── MeInfo.tsx │ ├── .env │ ├── public │ │ └── vercel.svg │ └── next.config.ts ├── react-effector-fsd │ ├── src │ │ ├── pages │ │ │ ├── home │ │ │ │ ├── index.ts │ │ │ │ └── Home.tsx │ │ │ ├── user │ │ │ │ ├── index.ts │ │ │ │ └── UserPage.tsx │ │ │ └── auth │ │ │ │ └── OAuthRedirect │ │ │ │ └── OAuthCallback.module.css │ │ ├── app │ │ │ ├── routes │ │ │ │ └── index.ts │ │ │ └── model │ │ │ │ └── init.ts │ │ ├── shared │ │ │ ├── components │ │ │ │ ├── Card │ │ │ │ │ ├── index.ts │ │ │ │ │ └── Card.module.css │ │ │ │ ├── Table │ │ │ │ │ └── index.ts │ │ │ │ ├── Tabs │ │ │ │ │ └── index.ts │ │ │ │ ├── Button │ │ │ │ │ └── index.ts │ │ │ │ ├── Dialog │ │ │ │ │ └── index.ts │ │ │ │ ├── Hashtag │ │ │ │ │ └── index.ts │ │ │ │ ├── Select │ │ │ │ │ └── index.ts │ │ │ │ ├── IconButton │ │ │ │ │ └── index.ts │ │ │ │ ├── Pagination │ │ │ │ │ └── index.ts │ │ │ │ ├── Progress │ │ │ │ │ └── index.ts │ │ │ │ ├── TagEditor │ │ │ │ │ └── index.ts │ │ │ │ ├── TextField │ │ │ │ │ └── index.ts │ │ │ │ ├── Textarea │ │ │ │ │ └── index.ts │ │ │ │ ├── Typography │ │ │ │ │ └── index.ts │ │ │ │ ├── Autocomplete │ │ │ │ │ └── index.ts │ │ │ │ ├── DropdownMenu │ │ │ │ │ └── index.ts │ │ │ │ ├── SearchField │ │ │ │ │ └── index.ts │ │ │ │ ├── AudioPlayer │ │ │ │ │ └── index.ts │ │ │ │ ├── ImageUploader │ │ │ │ │ └── index.ts │ │ │ │ └── ReactionButtons │ │ │ │ │ └── index.ts │ │ │ ├── icons │ │ │ │ └── LiveWaveIcon │ │ │ │ │ └── index.ts │ │ │ ├── hooks │ │ │ │ └── index.ts │ │ │ ├── fonts │ │ │ │ ├── lato-v24-latin-700.woff2 │ │ │ │ ├── lato-v24-latin-900.woff2 │ │ │ │ └── lato-v24-latin-regular.woff2 │ │ │ └── config │ │ │ │ └── config.ts │ │ ├── widgets │ │ │ └── layout │ │ │ │ ├── index.ts │ │ │ │ └── ui │ │ │ │ ├── Header │ │ │ │ └── Header.module.css │ │ │ │ └── Sidebar │ │ │ │ ├── Sidebar.module.css │ │ │ │ └── Sidebar.tsx │ │ └── features │ │ │ └── auth │ │ │ ├── ui │ │ │ ├── ProfileDropdownMenu │ │ │ │ └── index.ts │ │ │ ├── LoginButtonAndModal │ │ │ │ └── index.ts │ │ │ └── index.ts │ │ │ ├── model │ │ │ └── user.types.ts │ │ │ ├── index.ts │ │ │ └── api │ │ │ ├── logout.ts │ │ │ └── me.ts │ └── .env.example └── react-native-expo │ ├── .npmrc │ ├── assets │ ├── icon.png │ ├── favicon.png │ ├── adaptive-icon.png │ ├── splash-icon.png │ └── fonts │ │ ├── Lato-Bold.ttf │ │ ├── Lato-Thin.ttf │ │ ├── Lato-Light.ttf │ │ └── Lato-Regular.ttf │ ├── shared │ ├── consts │ │ ├── consts.ts │ │ └── key-storage │ │ │ └── key-storage.ts │ └── utils │ │ └── makeFullUrl.ts │ ├── app │ └── (app) │ │ ├── tracks │ │ └── tracks.tsx │ │ ├── library │ │ └── library.tsx │ │ └── playlists │ │ └── playlists.tsx │ ├── features │ └── auth │ │ └── model │ │ ├── config │ │ └── oauth.ts │ │ └── utils │ │ ├── getOauthRedirectUrl.ts │ │ └── expoUrlToHttpCallback.ts │ ├── declarations.d.ts │ └── index.ts ├── .husky └── pre-commit ├── youtube ├── rtk-query │ └── lesson1 │ │ ├── README.md │ │ ├── src │ │ ├── common │ │ │ ├── enums │ │ │ │ ├── index.ts │ │ │ │ └── enums.ts │ │ │ ├── types │ │ │ │ └── index.ts │ │ │ ├── routing │ │ │ │ └── index.ts │ │ │ ├── schemas │ │ │ │ └── index.ts │ │ │ ├── constants │ │ │ │ └── index.ts │ │ │ ├── socket │ │ │ │ └── index.ts │ │ │ ├── utils │ │ │ │ ├── trimToMaxLength.ts │ │ │ │ ├── isTokens.ts │ │ │ │ ├── errorToast.ts │ │ │ │ └── isErrorWithProperty.ts │ │ │ ├── hooks │ │ │ │ └── index.ts │ │ │ └── components │ │ │ │ ├── index.tsx │ │ │ │ └── PageNotFound │ │ │ │ ├── PageNotFound.module.css │ │ │ │ └── PageNotFound.tsx │ │ ├── vite-env.d.ts │ │ ├── app │ │ │ └── ui │ │ │ │ ├── App │ │ │ │ └── App.module.css │ │ │ │ └── MainPage │ │ │ │ └── MainPage.tsx │ │ ├── features │ │ │ ├── playlists │ │ │ │ └── ui │ │ │ │ │ ├── CreatePlaylistForm │ │ │ │ │ └── CreatePlaylistForm.module.css │ │ │ │ │ ├── PlaylistsPage.module.css │ │ │ │ │ ├── PlaylistItem │ │ │ │ │ └── PlaylistCover │ │ │ │ │ │ └── PlaylistCover.module.css │ │ │ │ │ └── PlaylistsList │ │ │ │ │ └── PlaylistsList.module.css │ │ │ ├── auth │ │ │ │ ├── ui │ │ │ │ │ └── ProfilePage │ │ │ │ │ │ └── ProfilePage.module.css │ │ │ │ └── model │ │ │ │ │ └── auth.schemas.ts │ │ │ └── tracks │ │ │ │ └── ui │ │ │ │ └── TracksList │ │ │ │ └── TracksList.module.css │ │ ├── index.css │ │ └── assets │ │ │ └── images │ │ │ └── default-playlist-cover.png │ │ ├── .prettierrc │ │ ├── tsconfig.json │ │ ├── .env │ │ └── vite.config.ts ├── tanstack-query-router-fsd │ └── lesson1 │ │ ├── src │ │ ├── vite-env.d.ts │ │ ├── features │ │ │ └── auth │ │ │ │ └── ui │ │ │ │ └── account-bar.module.css │ │ ├── shared │ │ │ ├── config │ │ │ │ ├── api-config.ts │ │ │ │ └── localstorage-keys.ts │ │ │ ├── api │ │ │ │ └── keys-factories │ │ │ │ │ └── auth-keys-factory.ts │ │ │ └── ui │ │ │ │ └── pagination │ │ │ │ └── pagination.module.css │ │ ├── app │ │ │ ├── layouts │ │ │ │ └── root-layout.module.css │ │ │ ├── routes │ │ │ │ ├── __root.tsx │ │ │ │ ├── index.tsx │ │ │ │ ├── my-playlists.tsx │ │ │ │ └── oauth │ │ │ │ │ └── callback.tsx │ │ │ └── styles │ │ │ │ └── index.css │ │ └── pages │ │ │ └── playlists-page.tsx │ │ ├── .env │ │ ├── tsconfig.json │ │ └── tsr.config.json └── markup │ ├── tsconfig.json │ └── vite.config.ts ├── experiment-apps ├── trelly-rtk │ ├── src │ │ ├── common │ │ │ ├── enums │ │ │ │ └── index.ts │ │ │ ├── types │ │ │ │ └── index.ts │ │ │ ├── actions │ │ │ │ ├── index.ts │ │ │ │ └── actions.ts │ │ │ ├── constants │ │ │ │ ├── index.ts │ │ │ │ └── constants.ts │ │ │ ├── routing │ │ │ │ └── index.ts │ │ │ ├── theme │ │ │ │ └── index.ts │ │ │ ├── instance │ │ │ │ └── index.ts │ │ │ ├── styles │ │ │ │ ├── index.ts │ │ │ │ └── container.styles.ts │ │ │ ├── hooks │ │ │ │ ├── index.ts │ │ │ │ ├── useAppDispatch.ts │ │ │ │ └── useAppSelector.ts │ │ │ ├── utils │ │ │ │ ├── index.ts │ │ │ │ ├── createAppSlice.ts │ │ │ │ └── isTokens.ts │ │ │ └── components │ │ │ │ └── PageNotFound │ │ │ │ └── PageNotFound.module.css │ │ ├── vite-env.d.ts │ │ ├── features │ │ │ ├── auth │ │ │ │ ├── lib │ │ │ │ │ └── schemas │ │ │ │ │ │ └── index.ts │ │ │ │ ├── ui │ │ │ │ │ └── Login │ │ │ │ │ │ └── Login.module.css │ │ │ │ └── api │ │ │ │ │ └── authApi.types.ts │ │ │ ├── boards │ │ │ │ ├── lib │ │ │ │ │ └── utils │ │ │ │ │ │ └── index.ts │ │ │ │ └── ui │ │ │ │ │ └── Boards │ │ │ │ │ └── BoardItem │ │ │ │ │ └── BoardTitle │ │ │ │ │ └── BoardTitle.module.css │ │ │ └── tasks │ │ │ │ └── ui │ │ │ │ └── Tasks │ │ │ │ ├── TaskItem │ │ │ │ └── TaskItem.styles.ts │ │ │ │ └── TasksPagination │ │ │ │ └── TasksPagination.module.css │ │ └── app │ │ │ └── ui │ │ │ └── App.module.css │ ├── .prettierrc │ └── tsconfig.json ├── musicfun-tanstack-query-small-example │ ├── src │ │ ├── vite-env.d.ts │ │ ├── features │ │ │ ├── auth │ │ │ │ ├── index.tsx │ │ │ │ └── ui │ │ │ │ │ ├── account-bar.module.css │ │ │ │ │ ├── logout-button │ │ │ │ │ ├── logout-button.tsx │ │ │ │ │ └── use-logout.ts │ │ │ │ │ └── login-button │ │ │ │ │ └── login-button.tsx │ │ │ └── playlists │ │ │ │ ├── add-playlist-form │ │ │ │ └── add-playlist-form.module.css │ │ │ │ └── playlist-cover │ │ │ │ └── playlist-cover.module.css │ │ ├── pages │ │ │ ├── auth │ │ │ │ └── index.tsx │ │ │ └── playlists │ │ │ │ └── ui │ │ │ │ ├── my-playlists │ │ │ │ └── my-playlists-page.module.css │ │ │ │ └── playlists-with-filters-page.tsx │ │ ├── shared │ │ │ ├── api │ │ │ │ └── index.ts │ │ │ ├── routes │ │ │ │ └── routes.ts │ │ │ ├── config │ │ │ │ └── api.config.ts │ │ │ ├── db │ │ │ │ └── localstorage-keys.ts │ │ │ └── ui │ │ │ │ └── pagination │ │ │ │ └── pagination.module.css │ │ ├── assets │ │ │ └── img │ │ │ │ └── no-cover.png │ │ └── app │ │ │ ├── providers │ │ │ └── web-socket-provider.tsx │ │ │ ├── layouts │ │ │ └── root-layout.module.css │ │ │ └── routes │ │ │ ├── oauth │ │ │ └── callback.tsx │ │ │ ├── index.tsx │ │ │ └── __root.tsx │ ├── .env │ ├── tsr.config.json │ └── tsconfig.json └── musicfun-tanstack-query-orval-small-example │ ├── src │ ├── vite-env.d.ts │ ├── features │ │ ├── auth │ │ │ ├── index.tsx │ │ │ └── ui │ │ │ │ ├── account-bar.module.css │ │ │ │ ├── logout-button │ │ │ │ └── logout-button.tsx │ │ │ │ └── login-button │ │ │ │ └── login-button.tsx │ │ └── playlists │ │ │ ├── add-playlist-form │ │ │ └── add-playlist-form.module.css │ │ │ └── playlist-cover │ │ │ └── playlist-cover.module.css │ ├── pages │ │ ├── auth │ │ │ └── index.tsx │ │ └── playlists │ │ │ └── ui │ │ │ ├── my-playlists │ │ │ └── my-playlists-page.module.css │ │ │ └── playlists-with-filters-page.tsx │ ├── shared │ │ ├── api │ │ │ └── index.ts │ │ ├── routes │ │ │ └── routes.ts │ │ ├── config │ │ │ └── api.config.ts │ │ ├── db │ │ │ └── localstorage-keys.ts │ │ └── ui │ │ │ └── pagination │ │ │ └── pagination.module.css │ ├── assets │ │ └── img │ │ │ └── no-cover.png │ └── app │ │ ├── providers │ │ └── web-socket-provider.tsx │ │ ├── layouts │ │ └── root-layout.module.css │ │ └── routes │ │ ├── oauth │ │ └── callback.tsx │ │ ├── index.tsx │ │ └── __root.tsx │ ├── .env │ └── tsr.config.json ├── content-thoughts └── search-input │ └── info.md ├── .prettierignore ├── sounds-examples └── 1.mp3 ├── packages └── musicfun-api-sdk │ ├── src │ ├── api │ │ ├── tags │ │ │ └── tagsApi.types.ts │ │ └── artists │ │ │ └── artistsApi.types.ts │ └── common │ │ └── types │ │ ├── common.types.ts │ │ ├── enums.ts │ │ └── playlists-tracks.types.ts │ └── tsconfig.json ├── architecture └── microfrontends │ ├── player │ ├── tsconfig.json │ └── src │ │ └── App.tsx │ └── root │ ├── tsconfig.json │ └── src │ └── main.tsx └── .prettierrc /apps/reatom/.env.production: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.husky/pre-commit: -------------------------------------------------------------------------------- 1 | pnpm exec lint-staged 2 | -------------------------------------------------------------------------------- /apps/reatom/.env.development: -------------------------------------------------------------------------------- 1 | VITE_API_KEY= -------------------------------------------------------------------------------- /apps/reatom/src/features/artists/index.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /apps/tanstack-query-zustand/.env.production: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /apps/reatom/src/features/artists/api/index.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /apps/reatom/src/features/playlists/api/types.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /apps/ui-vanilla/src/features/artists/index.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /apps/ui-vanilla/src/features/artists/api/index.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /apps/tanstack-query-zustand/src/features/artists/index.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /apps/reatom/src/features/auth/index.ts: -------------------------------------------------------------------------------- 1 | export * from './ui' 2 | -------------------------------------------------------------------------------- /apps/reatom/src/pages/UserPage/ui/UserTabs/TracksTab/index.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /apps/tanstack-query-zustand/.env.development: -------------------------------------------------------------------------------- 1 | VITE_API_KEY= 2 | -------------------------------------------------------------------------------- /apps/tanstack-query-zustand/src/features/artists/api/index.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /youtube/rtk-query/lesson1/README.md: -------------------------------------------------------------------------------- 1 | # Musicfun RTK query 2 | -------------------------------------------------------------------------------- /apps/reatom/src/features/reactions/index.ts: -------------------------------------------------------------------------------- 1 | export * from './ui' 2 | -------------------------------------------------------------------------------- /apps/reatom/src/widgets/Player/index.ts: -------------------------------------------------------------------------------- 1 | export * from './Player' 2 | -------------------------------------------------------------------------------- /apps/rtk-query/src/app/store/index.ts: -------------------------------------------------------------------------------- 1 | export * from './store' 2 | -------------------------------------------------------------------------------- /apps/rtk-query/src/pages/UserPage/ui/UserTabs/TracksTab/index.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /apps/ui-vanilla/src/features/auth/index.ts: -------------------------------------------------------------------------------- 1 | export * from './ui' 2 | -------------------------------------------------------------------------------- /apps/ui-vanilla/src/pages/UserPage/ui/UserTabs/TracksTab/index.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /apps/reatom/src/features/tags/api/index.ts: -------------------------------------------------------------------------------- 1 | export * from './tags-api' 2 | -------------------------------------------------------------------------------- /apps/reatom/src/layout/index.ts: -------------------------------------------------------------------------------- 1 | export { Layout } from './Layout' 2 | -------------------------------------------------------------------------------- /apps/reatom/src/pages/MainPage/index.ts: -------------------------------------------------------------------------------- 1 | export * from './MainPage' 2 | -------------------------------------------------------------------------------- /apps/reatom/src/pages/TrackPage/index.ts: -------------------------------------------------------------------------------- 1 | export * from './TrackPage' 2 | -------------------------------------------------------------------------------- /apps/reatom/src/pages/UserPage/index.ts: -------------------------------------------------------------------------------- 1 | export * from './UserPage' 2 | -------------------------------------------------------------------------------- /apps/reatom/src/vite-env.d.ts: -------------------------------------------------------------------------------- 1 | /// 2 | -------------------------------------------------------------------------------- /apps/rtk-query/src/app/api/index.ts: -------------------------------------------------------------------------------- 1 | export * from './base-api.ts' 2 | -------------------------------------------------------------------------------- /apps/rtk-query/src/app/routing/index.ts: -------------------------------------------------------------------------------- 1 | export * from './Routing' 2 | -------------------------------------------------------------------------------- /apps/rtk-query/src/features/playlists/ui/ChoosePlaylistModal/index.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /apps/rtk-query/src/layout/index.ts: -------------------------------------------------------------------------------- 1 | export { Layout } from './Layout' 2 | -------------------------------------------------------------------------------- /apps/rtk-query/src/pages/MainPage/index.ts: -------------------------------------------------------------------------------- 1 | export * from './MainPage' 2 | -------------------------------------------------------------------------------- /apps/rtk-query/src/pages/UserPage/index.ts: -------------------------------------------------------------------------------- 1 | export * from './UserPage' 2 | -------------------------------------------------------------------------------- /apps/rtk-query/src/player/player.ts: -------------------------------------------------------------------------------- 1 | export const audio = new Audio() 2 | -------------------------------------------------------------------------------- /apps/rtk-query/src/shared/configs/index.ts: -------------------------------------------------------------------------------- 1 | export * from './paths' 2 | -------------------------------------------------------------------------------- /apps/rtk-query/src/widgets/Player/index.ts: -------------------------------------------------------------------------------- 1 | export * from './Player' 2 | -------------------------------------------------------------------------------- /apps/tanstack-query-zustand/src/shared/auth/types/local-storage.keys.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /apps/ui-vanilla/src/layout/index.ts: -------------------------------------------------------------------------------- 1 | export { Layout } from './Layout' 2 | -------------------------------------------------------------------------------- /apps/ui-vanilla/src/shared/hooks/index.ts: -------------------------------------------------------------------------------- 1 | export * from './useGetId' 2 | -------------------------------------------------------------------------------- /apps/ui-vanilla/src/widgets/Player/index.ts: -------------------------------------------------------------------------------- 1 | export * from './Player' 2 | -------------------------------------------------------------------------------- /apps/nextjs/src/shared/common.types.ts: -------------------------------------------------------------------------------- 1 | export type Nullable = T | null 2 | -------------------------------------------------------------------------------- /apps/reatom/src/app/routing/index.ts: -------------------------------------------------------------------------------- 1 | export { Routing } from './Routing' 2 | -------------------------------------------------------------------------------- /apps/reatom/src/layout/Header/index.ts: -------------------------------------------------------------------------------- 1 | export { Header } from './Header' 2 | -------------------------------------------------------------------------------- /apps/reatom/src/pages/PlaylistPage/index.ts: -------------------------------------------------------------------------------- 1 | export * from './PlaylistPage' 2 | -------------------------------------------------------------------------------- /apps/reatom/src/pages/TracksPage/index.ts: -------------------------------------------------------------------------------- 1 | export * from './TracksPage' 2 | -------------------------------------------------------------------------------- /apps/reatom/src/shared/components/Button/index.ts: -------------------------------------------------------------------------------- 1 | export * from './Button' 2 | -------------------------------------------------------------------------------- /apps/reatom/src/shared/components/Card/index.ts: -------------------------------------------------------------------------------- 1 | export * from './Card' 2 | -------------------------------------------------------------------------------- /apps/reatom/src/shared/components/Dialog/index.ts: -------------------------------------------------------------------------------- 1 | export * from './Dialog' 2 | -------------------------------------------------------------------------------- /apps/reatom/src/shared/components/Select/index.ts: -------------------------------------------------------------------------------- 1 | export * from './Select' 2 | -------------------------------------------------------------------------------- /apps/reatom/src/shared/components/Table/index.ts: -------------------------------------------------------------------------------- 1 | export * from './Table' 2 | -------------------------------------------------------------------------------- /apps/reatom/src/shared/components/Tabs/index.ts: -------------------------------------------------------------------------------- 1 | export * from './Tabs' 2 | -------------------------------------------------------------------------------- /apps/rtk-query/src/features/tags/api/index.ts: -------------------------------------------------------------------------------- 1 | export * from './tagsApi' 2 | -------------------------------------------------------------------------------- /apps/rtk-query/src/pages/TrackPage/index.ts: -------------------------------------------------------------------------------- 1 | export * from './TrackPage' 2 | -------------------------------------------------------------------------------- /apps/rtk-query/src/pages/TracksPage/index.ts: -------------------------------------------------------------------------------- 1 | export * from './TracksPage' 2 | -------------------------------------------------------------------------------- /apps/rtk-query/src/shared/components/Card/index.ts: -------------------------------------------------------------------------------- 1 | export * from './Card' 2 | -------------------------------------------------------------------------------- /apps/rtk-query/src/shared/components/Tabs/index.ts: -------------------------------------------------------------------------------- 1 | export * from './Tabs' 2 | -------------------------------------------------------------------------------- /apps/rtk-query/src/vite-env.d.ts: -------------------------------------------------------------------------------- 1 | /// 2 | -------------------------------------------------------------------------------- /apps/tanstack-query-zustand/src/pages/UserPage/ui/UserTabs/TracksTab/index.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /apps/ui-vanilla/src/features/tags/api/index.ts: -------------------------------------------------------------------------------- 1 | export * from './tags-api' 2 | -------------------------------------------------------------------------------- /apps/ui-vanilla/src/pages/MainPage/index.ts: -------------------------------------------------------------------------------- 1 | export * from './MainPage' 2 | -------------------------------------------------------------------------------- /apps/ui-vanilla/src/pages/TrackPage/index.ts: -------------------------------------------------------------------------------- 1 | export * from './TrackPage' 2 | -------------------------------------------------------------------------------- /apps/ui-vanilla/src/pages/TracksPage/index.ts: -------------------------------------------------------------------------------- 1 | export * from './TracksPage' 2 | -------------------------------------------------------------------------------- /apps/ui-vanilla/src/pages/UserPage/index.ts: -------------------------------------------------------------------------------- 1 | export * from './UserPage' 2 | -------------------------------------------------------------------------------- /apps/ui-vanilla/src/shared/components/Card/index.ts: -------------------------------------------------------------------------------- 1 | export * from './Card' 2 | -------------------------------------------------------------------------------- /apps/ui-vanilla/src/shared/components/Tabs/index.ts: -------------------------------------------------------------------------------- 1 | export * from './Tabs' 2 | -------------------------------------------------------------------------------- /apps/ui-vanilla/src/vite-env.d.ts: -------------------------------------------------------------------------------- 1 | /// 2 | -------------------------------------------------------------------------------- /apps/react-effector-fsd/src/pages/home/index.ts: -------------------------------------------------------------------------------- 1 | export { Home } from './Home' 2 | -------------------------------------------------------------------------------- /apps/reatom/src/features/playlists/api/index.ts: -------------------------------------------------------------------------------- 1 | export * from './playlistsApi' 2 | -------------------------------------------------------------------------------- /apps/reatom/src/layout/Sidebar/MenuLinks/index.ts: -------------------------------------------------------------------------------- 1 | export * from './MenuLinks' 2 | -------------------------------------------------------------------------------- /apps/reatom/src/layout/Sidebar/index.ts: -------------------------------------------------------------------------------- 1 | export { Sidebar } from './Sidebar' 2 | -------------------------------------------------------------------------------- /apps/reatom/src/pages/PlaylistsPage/index.ts: -------------------------------------------------------------------------------- 1 | export * from './PlaylistsPage' 2 | -------------------------------------------------------------------------------- /apps/reatom/src/pages/UserPage/ui/UserInfo/index.ts: -------------------------------------------------------------------------------- 1 | export * from './UserInfo' 2 | -------------------------------------------------------------------------------- /apps/reatom/src/pages/UserPage/ui/UserTabs/LikedTracksTab/LikedTracksTab.module.css: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /apps/reatom/src/pages/UserPage/ui/UserTabs/index.ts: -------------------------------------------------------------------------------- 1 | export * from './UserTabs' 2 | -------------------------------------------------------------------------------- /apps/reatom/src/pages/common/ContentList/index.ts: -------------------------------------------------------------------------------- 1 | export * from './ContentList' 2 | -------------------------------------------------------------------------------- /apps/reatom/src/pages/common/PageWrapper/index.ts: -------------------------------------------------------------------------------- 1 | export * from './PageWrapper' 2 | -------------------------------------------------------------------------------- /apps/reatom/src/pages/common/SortSelect/index.ts: -------------------------------------------------------------------------------- 1 | export * from './SortSelect' 2 | -------------------------------------------------------------------------------- /apps/reatom/src/shared/components/Hashtag/index.ts: -------------------------------------------------------------------------------- 1 | export * from './Tag.tsx' 2 | -------------------------------------------------------------------------------- /apps/reatom/src/shared/components/Progress/index.ts: -------------------------------------------------------------------------------- 1 | export * from './Progress' 2 | -------------------------------------------------------------------------------- /apps/reatom/src/shared/components/Textarea/index.ts: -------------------------------------------------------------------------------- 1 | export * from './Textarea' 2 | -------------------------------------------------------------------------------- /apps/rtk-query/src/features/artists/api/index.ts: -------------------------------------------------------------------------------- 1 | export * from './artists-api' 2 | -------------------------------------------------------------------------------- /apps/rtk-query/src/features/auth/model/index.ts: -------------------------------------------------------------------------------- 1 | export * from './auth-slice' 2 | -------------------------------------------------------------------------------- /apps/rtk-query/src/layout/Sidebar/index.ts: -------------------------------------------------------------------------------- 1 | export { Sidebar } from './Sidebar' 2 | -------------------------------------------------------------------------------- /apps/rtk-query/src/pages/PlaylistPage/index.ts: -------------------------------------------------------------------------------- 1 | export * from './PlaylistPage' 2 | -------------------------------------------------------------------------------- /apps/rtk-query/src/pages/PlaylistsPage/index.ts: -------------------------------------------------------------------------------- 1 | export * from './PlaylistsPage' 2 | -------------------------------------------------------------------------------- /apps/rtk-query/src/shared/components/Avatar/index.ts: -------------------------------------------------------------------------------- 1 | export * from './Avatar' 2 | -------------------------------------------------------------------------------- /apps/rtk-query/src/shared/components/Button/index.ts: -------------------------------------------------------------------------------- 1 | export * from './Button' 2 | -------------------------------------------------------------------------------- /apps/rtk-query/src/shared/components/Dialog/index.ts: -------------------------------------------------------------------------------- 1 | export * from './Dialog' 2 | -------------------------------------------------------------------------------- /apps/rtk-query/src/shared/components/Hashtag/index.ts: -------------------------------------------------------------------------------- 1 | export * from './Tag.tsx' 2 | -------------------------------------------------------------------------------- /apps/rtk-query/src/shared/components/Loader/index.ts: -------------------------------------------------------------------------------- 1 | export * from './Loader' 2 | -------------------------------------------------------------------------------- /apps/rtk-query/src/shared/components/Select/index.ts: -------------------------------------------------------------------------------- 1 | export * from './Select' 2 | -------------------------------------------------------------------------------- /apps/rtk-query/src/shared/components/Table/index.ts: -------------------------------------------------------------------------------- 1 | export * from './Table' 2 | -------------------------------------------------------------------------------- /apps/rtk-query/src/shared/constants/index.ts: -------------------------------------------------------------------------------- 1 | export * from './constants.ts' 2 | -------------------------------------------------------------------------------- /apps/tanstack-query-zustand/src/features/auth/index.ts: -------------------------------------------------------------------------------- 1 | export * from './ui' 2 | -------------------------------------------------------------------------------- /apps/ui-vanilla/src/app/routing/index.ts: -------------------------------------------------------------------------------- 1 | export { Routing } from './Routing' 2 | -------------------------------------------------------------------------------- /apps/ui-vanilla/src/layout/Header/index.ts: -------------------------------------------------------------------------------- 1 | export { Header } from './Header' 2 | -------------------------------------------------------------------------------- /apps/ui-vanilla/src/layout/Sidebar/index.ts: -------------------------------------------------------------------------------- 1 | export { Sidebar } from './Sidebar' 2 | -------------------------------------------------------------------------------- /apps/ui-vanilla/src/pages/PlaylistPage/index.ts: -------------------------------------------------------------------------------- 1 | export * from './PlaylistPage' 2 | -------------------------------------------------------------------------------- /apps/ui-vanilla/src/shared/components/Button/index.ts: -------------------------------------------------------------------------------- 1 | export * from './Button' 2 | -------------------------------------------------------------------------------- /apps/ui-vanilla/src/shared/components/Dialog/index.ts: -------------------------------------------------------------------------------- 1 | export * from './Dialog' 2 | -------------------------------------------------------------------------------- /apps/ui-vanilla/src/shared/components/Select/index.ts: -------------------------------------------------------------------------------- 1 | export * from './Select' 2 | -------------------------------------------------------------------------------- /apps/ui-vanilla/src/shared/components/Table/index.ts: -------------------------------------------------------------------------------- 1 | export * from './Table' 2 | -------------------------------------------------------------------------------- /experiment-apps/trelly-rtk/src/common/enums/index.ts: -------------------------------------------------------------------------------- 1 | export * from "./enums" 2 | -------------------------------------------------------------------------------- /experiment-apps/trelly-rtk/src/common/types/index.ts: -------------------------------------------------------------------------------- 1 | export * from "./types" 2 | -------------------------------------------------------------------------------- /youtube/rtk-query/lesson1/src/common/enums/index.ts: -------------------------------------------------------------------------------- 1 | export * from './enums.ts' 2 | -------------------------------------------------------------------------------- /youtube/rtk-query/lesson1/src/common/types/index.ts: -------------------------------------------------------------------------------- 1 | export * from './types.ts' 2 | -------------------------------------------------------------------------------- /apps/react-effector-fsd/src/app/routes/index.ts: -------------------------------------------------------------------------------- 1 | export { Routing } from './Routing' 2 | -------------------------------------------------------------------------------- /apps/react-effector-fsd/src/shared/components/Card/index.ts: -------------------------------------------------------------------------------- 1 | export * from './Card' 2 | -------------------------------------------------------------------------------- /apps/react-effector-fsd/src/shared/components/Table/index.ts: -------------------------------------------------------------------------------- 1 | export * from './Table' 2 | -------------------------------------------------------------------------------- /apps/react-effector-fsd/src/shared/components/Tabs/index.ts: -------------------------------------------------------------------------------- 1 | export * from './Tabs' 2 | -------------------------------------------------------------------------------- /apps/reatom/src/features/artists/ui/ArtistCard/index.ts: -------------------------------------------------------------------------------- 1 | export * from './ArtistCard' 2 | -------------------------------------------------------------------------------- /apps/reatom/src/features/reactions/ui/index.ts: -------------------------------------------------------------------------------- 1 | export * from './ReactionProvider' 2 | -------------------------------------------------------------------------------- /apps/reatom/src/features/tracks/ui/TrackCard/index.ts: -------------------------------------------------------------------------------- 1 | export * from './TrackCard' 2 | -------------------------------------------------------------------------------- /apps/reatom/src/shared/components/IconButton/index.ts: -------------------------------------------------------------------------------- 1 | export * from './IconButton' 2 | -------------------------------------------------------------------------------- /apps/reatom/src/shared/components/Pagination/index.ts: -------------------------------------------------------------------------------- 1 | export * from './Pagination' 2 | -------------------------------------------------------------------------------- /apps/reatom/src/shared/components/SearchField/index.ts: -------------------------------------------------------------------------------- 1 | export * from './SearchField' 2 | -------------------------------------------------------------------------------- /apps/reatom/src/shared/components/TagEditor/index.ts: -------------------------------------------------------------------------------- 1 | export * from './TagEditor' 2 | -------------------------------------------------------------------------------- /apps/reatom/src/shared/components/TextField/index.ts: -------------------------------------------------------------------------------- 1 | export * from './TextField' 2 | -------------------------------------------------------------------------------- /apps/reatom/src/shared/components/Typography/index.ts: -------------------------------------------------------------------------------- 1 | export * from './Typography' 2 | -------------------------------------------------------------------------------- /apps/rtk-query/src/features/profile/types/index.ts: -------------------------------------------------------------------------------- 1 | export * from './profile.type' 2 | -------------------------------------------------------------------------------- /apps/rtk-query/src/features/profile/ui/index.ts: -------------------------------------------------------------------------------- 1 | export * from './EditProfileModal' 2 | -------------------------------------------------------------------------------- /apps/rtk-query/src/features/profile/utils/index.ts: -------------------------------------------------------------------------------- 1 | export * from './storage-key' 2 | -------------------------------------------------------------------------------- /apps/rtk-query/src/features/tracks/ui/TrackCard/index.ts: -------------------------------------------------------------------------------- 1 | export * from './TrackCard' 2 | -------------------------------------------------------------------------------- /apps/rtk-query/src/layout/AppLoader/index.ts: -------------------------------------------------------------------------------- 1 | export { AppLoader } from './AppLoader' 2 | -------------------------------------------------------------------------------- /apps/rtk-query/src/layout/Header/AccountMenu/index.ts: -------------------------------------------------------------------------------- 1 | export * from './AccountMenu' 2 | -------------------------------------------------------------------------------- /apps/rtk-query/src/layout/Sidebar/MenuLinks/index.ts: -------------------------------------------------------------------------------- 1 | export * from './MenuLinks' 2 | -------------------------------------------------------------------------------- /apps/rtk-query/src/pages/UserPage/hooks/index.ts: -------------------------------------------------------------------------------- 1 | export * from './useOwnerData.ts' 2 | -------------------------------------------------------------------------------- /apps/rtk-query/src/pages/UserPage/ui/UserInfo/index.ts: -------------------------------------------------------------------------------- 1 | export * from './UserInfo' 2 | -------------------------------------------------------------------------------- /apps/rtk-query/src/pages/UserPage/ui/UserTabs/LikedTracksTab/LikedTracksTab.module.css: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /apps/rtk-query/src/pages/UserPage/ui/UserTabs/index.ts: -------------------------------------------------------------------------------- 1 | export * from './UserTabs' 2 | -------------------------------------------------------------------------------- /apps/rtk-query/src/pages/common/hooks/index.ts: -------------------------------------------------------------------------------- 1 | export * from './usePageSearchParams' 2 | -------------------------------------------------------------------------------- /apps/rtk-query/src/shared/components/Progress/index.ts: -------------------------------------------------------------------------------- 1 | export * from './Progress' 2 | -------------------------------------------------------------------------------- /apps/rtk-query/src/shared/components/Skeleton/index.ts: -------------------------------------------------------------------------------- 1 | export * from './Skeleton' 2 | -------------------------------------------------------------------------------- /apps/rtk-query/src/shared/components/TagEditor/index.ts: -------------------------------------------------------------------------------- 1 | export * from './TagEditor' 2 | -------------------------------------------------------------------------------- /apps/rtk-query/src/shared/components/TextField/index.ts: -------------------------------------------------------------------------------- 1 | export * from './TextField' 2 | -------------------------------------------------------------------------------- /apps/rtk-query/src/shared/components/Textarea/index.ts: -------------------------------------------------------------------------------- 1 | export * from './Textarea' 2 | -------------------------------------------------------------------------------- /apps/rtk-query/src/shared/constants/constants.ts: -------------------------------------------------------------------------------- 1 | export const LOCALE_KEY = 'locale' 2 | -------------------------------------------------------------------------------- /apps/rtk-query/src/shared/types/common.types.ts: -------------------------------------------------------------------------------- 1 | export type Nullable = T | null 2 | -------------------------------------------------------------------------------- /apps/tanstack-query-zustand/src/layout/index.ts: -------------------------------------------------------------------------------- 1 | export { Layout } from './Layout' 2 | -------------------------------------------------------------------------------- /apps/tanstack-query-zustand/src/pages/MainPage/index.ts: -------------------------------------------------------------------------------- 1 | export * from './MainPage' 2 | -------------------------------------------------------------------------------- /apps/tanstack-query-zustand/src/pages/TrackPage/index.ts: -------------------------------------------------------------------------------- 1 | export * from './TrackPage' 2 | -------------------------------------------------------------------------------- /apps/tanstack-query-zustand/src/pages/UserPage/index.ts: -------------------------------------------------------------------------------- 1 | export * from './UserPage' 2 | -------------------------------------------------------------------------------- /apps/tanstack-query-zustand/src/widgets/Player/index.ts: -------------------------------------------------------------------------------- 1 | export * from './Player' 2 | -------------------------------------------------------------------------------- /apps/ui-vanilla/src/features/playlists/api/index.ts: -------------------------------------------------------------------------------- 1 | export * from './playlistsApi' 2 | -------------------------------------------------------------------------------- /apps/ui-vanilla/src/layout/Sidebar/MenuLinks/index.ts: -------------------------------------------------------------------------------- 1 | export * from './MenuLinks' 2 | -------------------------------------------------------------------------------- /apps/ui-vanilla/src/pages/PlaylistsPage/index.ts: -------------------------------------------------------------------------------- 1 | export * from './PlaylistsPage' 2 | -------------------------------------------------------------------------------- /apps/ui-vanilla/src/pages/UserPage/ui/UserInfo/index.ts: -------------------------------------------------------------------------------- 1 | export * from './UserInfo' 2 | -------------------------------------------------------------------------------- /apps/ui-vanilla/src/pages/UserPage/ui/UserTabs/LikedTracksTab/LikedTracksTab.module.css: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /apps/ui-vanilla/src/pages/UserPage/ui/UserTabs/index.ts: -------------------------------------------------------------------------------- 1 | export * from './UserTabs' 2 | -------------------------------------------------------------------------------- /apps/ui-vanilla/src/pages/common/ContentList/index.ts: -------------------------------------------------------------------------------- 1 | export * from './ContentList' 2 | -------------------------------------------------------------------------------- /apps/ui-vanilla/src/pages/common/PageWrapper/index.ts: -------------------------------------------------------------------------------- 1 | export * from './PageWrapper' 2 | -------------------------------------------------------------------------------- /apps/ui-vanilla/src/pages/common/SortSelect/index.ts: -------------------------------------------------------------------------------- 1 | export * from './SortSelect' 2 | -------------------------------------------------------------------------------- /apps/ui-vanilla/src/shared/components/Hashtag/index.ts: -------------------------------------------------------------------------------- 1 | export * from './Tag.tsx' 2 | -------------------------------------------------------------------------------- /apps/ui-vanilla/src/shared/components/Progress/index.ts: -------------------------------------------------------------------------------- 1 | export * from './Progress' 2 | -------------------------------------------------------------------------------- /apps/ui-vanilla/src/shared/components/TagEditor/index.ts: -------------------------------------------------------------------------------- 1 | export * from './TagEditor' 2 | -------------------------------------------------------------------------------- /apps/ui-vanilla/src/shared/components/TextField/index.ts: -------------------------------------------------------------------------------- 1 | export * from './TextField' 2 | -------------------------------------------------------------------------------- /apps/ui-vanilla/src/shared/components/Textarea/index.ts: -------------------------------------------------------------------------------- 1 | export * from './Textarea' 2 | -------------------------------------------------------------------------------- /experiment-apps/trelly-rtk/src/common/actions/index.ts: -------------------------------------------------------------------------------- 1 | export * from "./actions" 2 | -------------------------------------------------------------------------------- /experiment-apps/trelly-rtk/src/common/constants/index.ts: -------------------------------------------------------------------------------- 1 | export * from "./constants" 2 | -------------------------------------------------------------------------------- /experiment-apps/trelly-rtk/src/common/routing/index.ts: -------------------------------------------------------------------------------- 1 | export * from "./Routing" 2 | -------------------------------------------------------------------------------- /experiment-apps/trelly-rtk/src/vite-env.d.ts: -------------------------------------------------------------------------------- 1 | /// 2 | -------------------------------------------------------------------------------- /youtube/rtk-query/lesson1/src/common/routing/index.ts: -------------------------------------------------------------------------------- 1 | export * from './Routing.tsx' 2 | -------------------------------------------------------------------------------- /youtube/rtk-query/lesson1/src/common/schemas/index.ts: -------------------------------------------------------------------------------- 1 | export * from './schemas.ts' 2 | -------------------------------------------------------------------------------- /youtube/rtk-query/lesson1/src/vite-env.d.ts: -------------------------------------------------------------------------------- 1 | /// 2 | -------------------------------------------------------------------------------- /apps/nextjs/.env: -------------------------------------------------------------------------------- 1 | BASE_URL=https://musicfun.it-incubator.app/api/1.0 2 | API_KEY= 3 | 4 | -------------------------------------------------------------------------------- /apps/react-effector-fsd/src/pages/user/index.ts: -------------------------------------------------------------------------------- 1 | export { UserPage } from './UserPage' 2 | -------------------------------------------------------------------------------- /apps/react-effector-fsd/src/shared/components/Button/index.ts: -------------------------------------------------------------------------------- 1 | export * from './Button' 2 | -------------------------------------------------------------------------------- /apps/react-effector-fsd/src/shared/components/Dialog/index.ts: -------------------------------------------------------------------------------- 1 | export * from './Dialog' 2 | -------------------------------------------------------------------------------- /apps/react-effector-fsd/src/shared/components/Hashtag/index.ts: -------------------------------------------------------------------------------- 1 | export * from './Tag.tsx' 2 | -------------------------------------------------------------------------------- /apps/react-effector-fsd/src/shared/components/Select/index.ts: -------------------------------------------------------------------------------- 1 | export * from './Select' 2 | -------------------------------------------------------------------------------- /apps/reatom/src/features/tags/ui/TagsList/index.ts: -------------------------------------------------------------------------------- 1 | export { TagsList } from './TagsList' 2 | -------------------------------------------------------------------------------- /apps/reatom/src/features/tracks/index.ts: -------------------------------------------------------------------------------- 1 | export * from './api' 2 | export * from './ui' 3 | -------------------------------------------------------------------------------- /apps/reatom/src/features/tracks/ui/TrackOverview/index.ts: -------------------------------------------------------------------------------- 1 | export * from './TrackOverview' 2 | -------------------------------------------------------------------------------- /apps/reatom/src/features/tracks/ui/TracksTable/index.ts: -------------------------------------------------------------------------------- 1 | export * from './TracksTable' 2 | -------------------------------------------------------------------------------- /apps/reatom/src/pages/TrackPage/ui/ControlPanel/index.ts: -------------------------------------------------------------------------------- 1 | export * from './ControlPanel' 2 | -------------------------------------------------------------------------------- /apps/reatom/src/pages/common/SearchTextField/index.ts: -------------------------------------------------------------------------------- 1 | export * from './SearchTextField' 2 | -------------------------------------------------------------------------------- /apps/reatom/src/shared/components/AudioPlayer/index.ts: -------------------------------------------------------------------------------- 1 | export * from './AudioPlayer.tsx' 2 | -------------------------------------------------------------------------------- /apps/reatom/src/shared/components/Autocomplete/index.ts: -------------------------------------------------------------------------------- 1 | export * from './Autocomplete' 2 | -------------------------------------------------------------------------------- /apps/reatom/src/shared/components/DropdownMenu/index.ts: -------------------------------------------------------------------------------- 1 | export * from './DropdownMenu' 2 | -------------------------------------------------------------------------------- /apps/reatom/src/shared/components/ImageUploader/index.ts: -------------------------------------------------------------------------------- 1 | export * from './ImageUploader' 2 | -------------------------------------------------------------------------------- /apps/reatom/src/widgets/Player/Player.module.css: -------------------------------------------------------------------------------- 1 | .player { 2 | grid-area: player; 3 | } 4 | -------------------------------------------------------------------------------- /apps/rtk-query/src/features/artists/ui/ArtistCard/index.ts: -------------------------------------------------------------------------------- 1 | export * from './ArtistCard' 2 | -------------------------------------------------------------------------------- /apps/rtk-query/src/features/artists/ui/index.ts: -------------------------------------------------------------------------------- 1 | export * from './ArtistsTagAutocomplete' 2 | -------------------------------------------------------------------------------- /apps/rtk-query/src/features/tags/index.ts: -------------------------------------------------------------------------------- 1 | export * from './api' 2 | export * from './ui' 3 | -------------------------------------------------------------------------------- /apps/rtk-query/src/features/tracks/ui/TracksTable/index.ts: -------------------------------------------------------------------------------- 1 | export * from './TracksTable' 2 | -------------------------------------------------------------------------------- /apps/rtk-query/src/pages/common/ui/ContentList/index.ts: -------------------------------------------------------------------------------- 1 | export * from './ContentList.tsx' 2 | -------------------------------------------------------------------------------- /apps/rtk-query/src/pages/common/ui/PageWrapper/index.ts: -------------------------------------------------------------------------------- 1 | export * from './PageWrapper.tsx' 2 | -------------------------------------------------------------------------------- /apps/rtk-query/src/pages/common/ui/SearchTags/index.ts: -------------------------------------------------------------------------------- 1 | export * from './SearchTags.tsx' 2 | -------------------------------------------------------------------------------- /apps/rtk-query/src/pages/common/ui/SortSelect/index.ts: -------------------------------------------------------------------------------- 1 | export * from './SortSelect.tsx' 2 | -------------------------------------------------------------------------------- /apps/rtk-query/src/shared/components/Autocomplete/index.ts: -------------------------------------------------------------------------------- 1 | export * from './Autocomplete' 2 | -------------------------------------------------------------------------------- /apps/rtk-query/src/shared/components/DropdownMenu/index.ts: -------------------------------------------------------------------------------- 1 | export * from './DropdownMenu' 2 | -------------------------------------------------------------------------------- /apps/rtk-query/src/shared/components/FileUploader/index.ts: -------------------------------------------------------------------------------- 1 | export * from './FileUploader' 2 | -------------------------------------------------------------------------------- /apps/rtk-query/src/shared/components/IconButton/index.ts: -------------------------------------------------------------------------------- 1 | export * from './IconButton' 2 | -------------------------------------------------------------------------------- /apps/rtk-query/src/shared/components/ImageCropper/index.ts: -------------------------------------------------------------------------------- 1 | export * from './ImageCropper' 2 | -------------------------------------------------------------------------------- /apps/rtk-query/src/shared/components/Pagination/index.ts: -------------------------------------------------------------------------------- 1 | export * from './Pagination' 2 | -------------------------------------------------------------------------------- /apps/rtk-query/src/shared/components/SearchField/index.ts: -------------------------------------------------------------------------------- 1 | export * from './SearchField' 2 | -------------------------------------------------------------------------------- /apps/rtk-query/src/shared/components/Typography/index.ts: -------------------------------------------------------------------------------- 1 | export * from './Typography' 2 | -------------------------------------------------------------------------------- /apps/tanstack-query-zustand/src/app/routing/index.ts: -------------------------------------------------------------------------------- 1 | export { Routing } from './Routing' 2 | -------------------------------------------------------------------------------- /apps/tanstack-query-zustand/src/features/tags/api/index.ts: -------------------------------------------------------------------------------- 1 | export * from './tags-api' 2 | -------------------------------------------------------------------------------- /apps/tanstack-query-zustand/src/layout/Header/index.ts: -------------------------------------------------------------------------------- 1 | export { Header } from './Header' 2 | -------------------------------------------------------------------------------- /apps/tanstack-query-zustand/src/pages/TracksPage/index.ts: -------------------------------------------------------------------------------- 1 | export * from './TracksPage' 2 | -------------------------------------------------------------------------------- /apps/tanstack-query-zustand/src/shared/components/Card/index.ts: -------------------------------------------------------------------------------- 1 | export * from './Card' 2 | -------------------------------------------------------------------------------- /apps/tanstack-query-zustand/src/shared/components/Table/index.ts: -------------------------------------------------------------------------------- 1 | export * from './Table' 2 | -------------------------------------------------------------------------------- /apps/tanstack-query-zustand/src/shared/components/Tabs/index.ts: -------------------------------------------------------------------------------- 1 | export * from './Tabs' 2 | -------------------------------------------------------------------------------- /apps/ui-vanilla/src/features/artists/ui/ArtistCard/index.ts: -------------------------------------------------------------------------------- 1 | export * from './ArtistCard' 2 | -------------------------------------------------------------------------------- /apps/ui-vanilla/src/features/tags/index.ts: -------------------------------------------------------------------------------- 1 | export * from './api' 2 | export * from './ui' 3 | -------------------------------------------------------------------------------- /apps/ui-vanilla/src/features/tracks/ui/TrackCard/index.ts: -------------------------------------------------------------------------------- 1 | export * from './TrackCard' 2 | -------------------------------------------------------------------------------- /apps/ui-vanilla/src/features/tracks/ui/TracksTable/index.ts: -------------------------------------------------------------------------------- 1 | export * from './TracksTable' 2 | -------------------------------------------------------------------------------- /apps/ui-vanilla/src/shared/components/IconButton/index.ts: -------------------------------------------------------------------------------- 1 | export * from './IconButton' 2 | -------------------------------------------------------------------------------- /apps/ui-vanilla/src/shared/components/Pagination/index.ts: -------------------------------------------------------------------------------- 1 | export * from './Pagination' 2 | -------------------------------------------------------------------------------- /apps/ui-vanilla/src/shared/components/SearchField/index.ts: -------------------------------------------------------------------------------- 1 | export * from './SearchField' 2 | -------------------------------------------------------------------------------- /apps/ui-vanilla/src/shared/components/Typography/index.ts: -------------------------------------------------------------------------------- 1 | export * from './Typography' 2 | -------------------------------------------------------------------------------- /experiment-apps/trelly-rtk/src/common/theme/index.ts: -------------------------------------------------------------------------------- 1 | export { getTheme } from "./theme" 2 | -------------------------------------------------------------------------------- /youtube/rtk-query/lesson1/src/common/constants/index.ts: -------------------------------------------------------------------------------- 1 | export * from './constants.ts' 2 | -------------------------------------------------------------------------------- /apps/react-effector-fsd/src/shared/components/IconButton/index.ts: -------------------------------------------------------------------------------- 1 | export * from './IconButton' 2 | -------------------------------------------------------------------------------- /apps/react-effector-fsd/src/shared/components/Pagination/index.ts: -------------------------------------------------------------------------------- 1 | export * from './Pagination' 2 | -------------------------------------------------------------------------------- /apps/react-effector-fsd/src/shared/components/Progress/index.ts: -------------------------------------------------------------------------------- 1 | export * from './Progress' 2 | -------------------------------------------------------------------------------- /apps/react-effector-fsd/src/shared/components/TagEditor/index.ts: -------------------------------------------------------------------------------- 1 | export * from './TagEditor' 2 | -------------------------------------------------------------------------------- /apps/react-effector-fsd/src/shared/components/TextField/index.ts: -------------------------------------------------------------------------------- 1 | export * from './TextField' 2 | -------------------------------------------------------------------------------- /apps/react-effector-fsd/src/shared/components/Textarea/index.ts: -------------------------------------------------------------------------------- 1 | export * from './Textarea' 2 | -------------------------------------------------------------------------------- /apps/react-effector-fsd/src/shared/components/Typography/index.ts: -------------------------------------------------------------------------------- 1 | export * from './Typography' 2 | -------------------------------------------------------------------------------- /apps/react-effector-fsd/src/widgets/layout/index.ts: -------------------------------------------------------------------------------- 1 | export { Layout } from './ui/Layout.tsx' 2 | -------------------------------------------------------------------------------- /apps/reatom/src/entities/playlist/ui/PlaylistCard/index.ts: -------------------------------------------------------------------------------- 1 | export * from './PlaylistCard.tsx' 2 | -------------------------------------------------------------------------------- /apps/reatom/src/features/playlists/index.ts: -------------------------------------------------------------------------------- 1 | export * from './api' 2 | export * from './ui' 3 | -------------------------------------------------------------------------------- /apps/reatom/src/features/tags/ui/index.ts: -------------------------------------------------------------------------------- 1 | export * from './' 2 | export * from './TagsList' 3 | -------------------------------------------------------------------------------- /apps/reatom/src/features/tracks/ui/TrackInfoCell/index.ts: -------------------------------------------------------------------------------- 1 | export * from './TrackInfoCell.tsx' 2 | -------------------------------------------------------------------------------- /apps/reatom/src/pages/PlaylistPage/ui/ControlPanel/index.ts: -------------------------------------------------------------------------------- 1 | export * from './ControlPanel' 2 | -------------------------------------------------------------------------------- /apps/reatom/src/shared/components/ReactionButtons/index.ts: -------------------------------------------------------------------------------- 1 | export * from './ReactionButtons' 2 | -------------------------------------------------------------------------------- /apps/rtk-query/src/features/artists/index.ts: -------------------------------------------------------------------------------- 1 | export * from './api' 2 | export * from './ui' 3 | -------------------------------------------------------------------------------- /apps/rtk-query/src/features/artists/ui/ArtistsTagAutocomplete/ArtistsTagAutocomplete.module.css: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /apps/rtk-query/src/features/auth/ui/OAuthRedirect/index.ts: -------------------------------------------------------------------------------- 1 | export * from './OAuthCallback' 2 | -------------------------------------------------------------------------------- /apps/rtk-query/src/features/playlists/ui/PlaylistCard/index.ts: -------------------------------------------------------------------------------- 1 | export * from './PlaylistCard' 2 | -------------------------------------------------------------------------------- /apps/rtk-query/src/features/tags/ui/PlaylistTagAutocomplete/PlaylistTagAutocomplete.module.css: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /apps/rtk-query/src/features/tags/ui/TagsList/index.ts: -------------------------------------------------------------------------------- 1 | export { TagsList } from './TagsList' 2 | -------------------------------------------------------------------------------- /apps/rtk-query/src/features/tracks/ui/TrackActions/index.ts: -------------------------------------------------------------------------------- 1 | export * from './TrackActions' 2 | -------------------------------------------------------------------------------- /apps/rtk-query/src/features/tracks/ui/TrackOverview/index.ts: -------------------------------------------------------------------------------- 1 | export * from './TrackOverview' 2 | -------------------------------------------------------------------------------- /apps/rtk-query/src/pages/PlaylistPage/ui/ControlPanel/index.ts: -------------------------------------------------------------------------------- 1 | export * from './ControlPanel' 2 | -------------------------------------------------------------------------------- /apps/rtk-query/src/pages/TrackPage/ui/ControlPanel/index.ts: -------------------------------------------------------------------------------- 1 | export * from './ControlPanel' 2 | -------------------------------------------------------------------------------- /apps/rtk-query/src/shared/components/AudioPlayer/index.ts: -------------------------------------------------------------------------------- 1 | export * from './AudioPlayer.tsx' 2 | -------------------------------------------------------------------------------- /apps/rtk-query/src/shared/components/ImageUploader/index.ts: -------------------------------------------------------------------------------- 1 | export * from './ImageUploader' 2 | -------------------------------------------------------------------------------- /apps/rtk-query/src/widgets/Player/Player.module.css: -------------------------------------------------------------------------------- 1 | .player { 2 | grid-area: player; 3 | } 4 | -------------------------------------------------------------------------------- /apps/tanstack-query-zustand/src/features/playlists/api/index.ts: -------------------------------------------------------------------------------- 1 | export * from './playlistsApi' 2 | -------------------------------------------------------------------------------- /apps/tanstack-query-zustand/src/layout/Sidebar/MenuLinks/index.ts: -------------------------------------------------------------------------------- 1 | export * from './MenuLinks' 2 | -------------------------------------------------------------------------------- /apps/tanstack-query-zustand/src/layout/Sidebar/index.ts: -------------------------------------------------------------------------------- 1 | export { Sidebar } from './Sidebar' 2 | -------------------------------------------------------------------------------- /apps/tanstack-query-zustand/src/pages/PlaylistPage/index.ts: -------------------------------------------------------------------------------- 1 | export * from './PlaylistPage' 2 | -------------------------------------------------------------------------------- /apps/tanstack-query-zustand/src/pages/PlaylistsPage/index.ts: -------------------------------------------------------------------------------- 1 | export * from './PlaylistsPage' 2 | -------------------------------------------------------------------------------- /apps/tanstack-query-zustand/src/pages/UserPage/ui/UserInfo/index.ts: -------------------------------------------------------------------------------- 1 | export * from './UserInfo' 2 | -------------------------------------------------------------------------------- /apps/tanstack-query-zustand/src/pages/UserPage/ui/UserTabs/index.ts: -------------------------------------------------------------------------------- 1 | export * from './UserTabs' 2 | -------------------------------------------------------------------------------- /apps/tanstack-query-zustand/src/pages/common/SortSelect/index.ts: -------------------------------------------------------------------------------- 1 | export * from './SortSelect' 2 | -------------------------------------------------------------------------------- /apps/tanstack-query-zustand/src/shared/components/Button/index.ts: -------------------------------------------------------------------------------- 1 | export * from './Button' 2 | -------------------------------------------------------------------------------- /apps/tanstack-query-zustand/src/shared/components/Dialog/index.ts: -------------------------------------------------------------------------------- 1 | export * from './Dialog' 2 | -------------------------------------------------------------------------------- /apps/tanstack-query-zustand/src/shared/components/Hashtag/index.ts: -------------------------------------------------------------------------------- 1 | export * from './Tag.tsx' 2 | -------------------------------------------------------------------------------- /apps/tanstack-query-zustand/src/shared/components/Progress/index.ts: -------------------------------------------------------------------------------- 1 | export * from './Progress' 2 | -------------------------------------------------------------------------------- /apps/tanstack-query-zustand/src/shared/components/Select/index.ts: -------------------------------------------------------------------------------- 1 | export * from './Select' 2 | -------------------------------------------------------------------------------- /apps/tanstack-query-zustand/src/shared/components/Textarea/index.ts: -------------------------------------------------------------------------------- 1 | export * from './Textarea' 2 | -------------------------------------------------------------------------------- /apps/ui-vanilla/src/features/playlists/index.ts: -------------------------------------------------------------------------------- 1 | export * from './api' 2 | export * from './ui' 3 | -------------------------------------------------------------------------------- /apps/ui-vanilla/src/features/playlists/ui/PlaylistCard/index.ts: -------------------------------------------------------------------------------- 1 | export * from './PlaylistCard' 2 | -------------------------------------------------------------------------------- /apps/ui-vanilla/src/features/tags/ui/TagsList/index.ts: -------------------------------------------------------------------------------- 1 | export { TagsList } from './TagsList' 2 | -------------------------------------------------------------------------------- /apps/ui-vanilla/src/features/tracks/index.ts: -------------------------------------------------------------------------------- 1 | export * from './api' 2 | export * from './ui' 3 | -------------------------------------------------------------------------------- /apps/ui-vanilla/src/features/tracks/ui/TrackOverview/index.ts: -------------------------------------------------------------------------------- 1 | export * from './TrackOverview' 2 | -------------------------------------------------------------------------------- /apps/ui-vanilla/src/pages/PlaylistPage/ui/ControlPanel/index.ts: -------------------------------------------------------------------------------- 1 | export * from './ControlPanel' 2 | -------------------------------------------------------------------------------- /apps/ui-vanilla/src/pages/TrackPage/ui/ControlPanel/index.ts: -------------------------------------------------------------------------------- 1 | export * from './ControlPanel' 2 | -------------------------------------------------------------------------------- /apps/ui-vanilla/src/pages/common/SearchTextField/index.ts: -------------------------------------------------------------------------------- 1 | export * from './SearchTextField' 2 | -------------------------------------------------------------------------------- /apps/ui-vanilla/src/shared/components/AudioPlayer/index.ts: -------------------------------------------------------------------------------- 1 | export * from './AudioPlayer.tsx' 2 | -------------------------------------------------------------------------------- /apps/ui-vanilla/src/shared/components/Autocomplete/index.ts: -------------------------------------------------------------------------------- 1 | export * from './Autocomplete' 2 | -------------------------------------------------------------------------------- /apps/ui-vanilla/src/shared/components/DropdownMenu/index.ts: -------------------------------------------------------------------------------- 1 | export * from './DropdownMenu' 2 | -------------------------------------------------------------------------------- /apps/ui-vanilla/src/shared/components/ImageUploader/index.ts: -------------------------------------------------------------------------------- 1 | export * from './ImageUploader' 2 | -------------------------------------------------------------------------------- /apps/ui-vanilla/src/widgets/Player/Player.module.css: -------------------------------------------------------------------------------- 1 | .player { 2 | grid-area: player; 3 | } 4 | -------------------------------------------------------------------------------- /experiment-apps/trelly-rtk/.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "printWidth": 120, 3 | "semi": false 4 | } 5 | -------------------------------------------------------------------------------- /experiment-apps/trelly-rtk/src/common/instance/index.ts: -------------------------------------------------------------------------------- 1 | export { instance } from "./instance" 2 | -------------------------------------------------------------------------------- /apps/react-effector-fsd/src/shared/components/Autocomplete/index.ts: -------------------------------------------------------------------------------- 1 | export * from './Autocomplete' 2 | -------------------------------------------------------------------------------- /apps/react-effector-fsd/src/shared/components/DropdownMenu/index.ts: -------------------------------------------------------------------------------- 1 | export * from './DropdownMenu' 2 | -------------------------------------------------------------------------------- /apps/react-effector-fsd/src/shared/components/SearchField/index.ts: -------------------------------------------------------------------------------- 1 | export * from './SearchField' 2 | -------------------------------------------------------------------------------- /apps/reatom/src/features/auth/ui/ProfileDropdownMenu/index.ts: -------------------------------------------------------------------------------- 1 | export * from './ProfileDropdownMenu' 2 | -------------------------------------------------------------------------------- /apps/reatom/src/features/playlists/ui/PlaylistOverview/index.ts: -------------------------------------------------------------------------------- 1 | export * from './PlaylistOverview' 2 | -------------------------------------------------------------------------------- /apps/reatom/src/features/reactions/ui/ReactionProvider/index.ts: -------------------------------------------------------------------------------- 1 | export * from './ReactionProvider' 2 | -------------------------------------------------------------------------------- /apps/reatom/src/pages/UserPage/ui/UserTabs/LikedTracksTab/index.ts: -------------------------------------------------------------------------------- 1 | export * from './LikedTracksTab' 2 | -------------------------------------------------------------------------------- /apps/reatom/src/pages/UserPage/ui/UserTabs/PlaylistsTab/index.ts: -------------------------------------------------------------------------------- 1 | export * from './PlaylistsTab' 2 | -------------------------------------------------------------------------------- /apps/reatom/src/shared/icons/LiveWaveIcon/index.ts: -------------------------------------------------------------------------------- 1 | export { LiveWaveIcon } from './LiveWaveIcon' 2 | -------------------------------------------------------------------------------- /apps/rtk-query/src/features/auth/ui/LoginModal/index.ts: -------------------------------------------------------------------------------- 1 | export { LoginModal } from './LoginModal' 2 | -------------------------------------------------------------------------------- /apps/rtk-query/src/features/profile/config/index.ts: -------------------------------------------------------------------------------- 1 | export { emptyProfile } from './empty-profile' 2 | -------------------------------------------------------------------------------- /apps/rtk-query/src/features/tracks/ui/TrackInfoCell/index.ts: -------------------------------------------------------------------------------- 1 | export * from './TrackInfoCell.tsx' 2 | -------------------------------------------------------------------------------- /apps/rtk-query/src/pages/UserPage/ui/UserTabs/PlaylistsTab/index.ts: -------------------------------------------------------------------------------- 1 | export * from './PlaylistsTab' 2 | -------------------------------------------------------------------------------- /apps/rtk-query/src/pages/common/ui/SearchTextField/index.ts: -------------------------------------------------------------------------------- 1 | export * from './SearchTextField.tsx' 2 | -------------------------------------------------------------------------------- /apps/rtk-query/src/shared/components/ReactionButtons/index.ts: -------------------------------------------------------------------------------- 1 | export * from './ReactionButtons' 2 | -------------------------------------------------------------------------------- /apps/rtk-query/src/shared/icons/LiveWaveIcon/index.ts: -------------------------------------------------------------------------------- 1 | export { LiveWaveIcon } from './LiveWaveIcon' 2 | -------------------------------------------------------------------------------- /apps/tanstack-query-zustand/src/features/tracks/ui/TrackCard/index.ts: -------------------------------------------------------------------------------- 1 | export * from './TrackCard' 2 | -------------------------------------------------------------------------------- /apps/tanstack-query-zustand/src/pages/UserPage/ui/UserTabs/LikedTracksTab/LikedTracksTab.module.css: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /apps/tanstack-query-zustand/src/pages/common/ContentList/index.ts: -------------------------------------------------------------------------------- 1 | export * from './ContentList' 2 | -------------------------------------------------------------------------------- /apps/tanstack-query-zustand/src/pages/common/PageWrapper/index.ts: -------------------------------------------------------------------------------- 1 | export * from './PageWrapper' 2 | -------------------------------------------------------------------------------- /apps/tanstack-query-zustand/src/shared/components/IconButton/index.ts: -------------------------------------------------------------------------------- 1 | export * from './IconButton' 2 | -------------------------------------------------------------------------------- /apps/tanstack-query-zustand/src/shared/components/Pagination/index.ts: -------------------------------------------------------------------------------- 1 | export * from './Pagination' 2 | -------------------------------------------------------------------------------- /apps/tanstack-query-zustand/src/shared/components/TagEditor/index.ts: -------------------------------------------------------------------------------- 1 | export * from './TagEditor' 2 | -------------------------------------------------------------------------------- /apps/tanstack-query-zustand/src/shared/components/TextField/index.ts: -------------------------------------------------------------------------------- 1 | export * from './TextField' 2 | -------------------------------------------------------------------------------- /apps/tanstack-query-zustand/src/shared/components/Typography/index.ts: -------------------------------------------------------------------------------- 1 | export * from './Typography' 2 | -------------------------------------------------------------------------------- /apps/tanstack-query-zustand/src/shared/hooks/getId/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from './useGetId' 2 | -------------------------------------------------------------------------------- /apps/ui-vanilla/src/features/tags/ui/index.ts: -------------------------------------------------------------------------------- 1 | export * from './' 2 | export * from './TagsList' 3 | -------------------------------------------------------------------------------- /apps/ui-vanilla/src/features/tracks/ui/TrackInfoCell/index.ts: -------------------------------------------------------------------------------- 1 | export * from './TrackInfoCell.tsx' 2 | -------------------------------------------------------------------------------- /apps/ui-vanilla/src/pages/UserPage/ui/UserTabs/PlaylistsTab/index.ts: -------------------------------------------------------------------------------- 1 | export * from './PlaylistsTab' 2 | -------------------------------------------------------------------------------- /apps/ui-vanilla/src/shared/components/ReactionButtons/index.ts: -------------------------------------------------------------------------------- 1 | export * from './ReactionButtons' 2 | -------------------------------------------------------------------------------- /content-thoughts/search-input/info.md: -------------------------------------------------------------------------------- 1 | https://chatgpt.com/c/683de0c6-bd6c-8006-9b72-b97880e5e855 2 | -------------------------------------------------------------------------------- /experiment-apps/trelly-rtk/src/features/auth/lib/schemas/index.ts: -------------------------------------------------------------------------------- 1 | export * from "./loginSchema" 2 | -------------------------------------------------------------------------------- /experiment-apps/trelly-rtk/src/features/boards/lib/utils/index.ts: -------------------------------------------------------------------------------- 1 | export * from "./createTaskModel" 2 | -------------------------------------------------------------------------------- /youtube/tanstack-query-router-fsd/lesson1/src/vite-env.d.ts: -------------------------------------------------------------------------------- 1 | /// 2 | -------------------------------------------------------------------------------- /apps/react-effector-fsd/src/shared/components/AudioPlayer/index.ts: -------------------------------------------------------------------------------- 1 | export * from './AudioPlayer.tsx' 2 | -------------------------------------------------------------------------------- /apps/react-effector-fsd/src/shared/components/ImageUploader/index.ts: -------------------------------------------------------------------------------- 1 | export * from './ImageUploader' 2 | -------------------------------------------------------------------------------- /apps/react-effector-fsd/src/shared/components/ReactionButtons/index.ts: -------------------------------------------------------------------------------- 1 | export * from './ReactionButtons' 2 | -------------------------------------------------------------------------------- /apps/reatom/src/features/playlists/ui/CreatePlaylistModal/index.ts: -------------------------------------------------------------------------------- 1 | export * from './CreatePlaylistModal' 2 | -------------------------------------------------------------------------------- /apps/reatom/src/features/tracks/api/index.ts: -------------------------------------------------------------------------------- 1 | export * from './tracksApi' 2 | export * from './types' 3 | -------------------------------------------------------------------------------- /apps/reatom/src/pages/UserPage/ui/index.ts: -------------------------------------------------------------------------------- 1 | export * from './UserInfo' 2 | export * from './UserTabs' 3 | -------------------------------------------------------------------------------- /apps/reatom/src/shared/hooks/index.ts: -------------------------------------------------------------------------------- 1 | export * from './useDebounceValue' 2 | export * from './useGetId' 3 | -------------------------------------------------------------------------------- /apps/rtk-query/src/features/playlists/ui/PlaylistOverview/index.ts: -------------------------------------------------------------------------------- 1 | export * from './PlaylistOverview' 2 | -------------------------------------------------------------------------------- /apps/rtk-query/src/pages/UserPage/ui/UserTabs/LikedTracksTab/index.ts: -------------------------------------------------------------------------------- 1 | export * from './LikedTracksTab' 2 | -------------------------------------------------------------------------------- /apps/rtk-query/src/pages/UserPage/ui/index.ts: -------------------------------------------------------------------------------- 1 | export * from './UserInfo' 2 | export * from './UserTabs' 3 | -------------------------------------------------------------------------------- /apps/tanstack-query-zustand/src/features/artists/ui/ArtistCard/index.ts: -------------------------------------------------------------------------------- 1 | export * from './ArtistCard' 2 | -------------------------------------------------------------------------------- /apps/tanstack-query-zustand/src/features/tags/ui/TagsList/index.ts: -------------------------------------------------------------------------------- 1 | export { TagsList } from './TagsList' 2 | -------------------------------------------------------------------------------- /apps/tanstack-query-zustand/src/features/tracks/index.ts: -------------------------------------------------------------------------------- 1 | export * from './api' 2 | export * from './ui' 3 | -------------------------------------------------------------------------------- /apps/tanstack-query-zustand/src/features/tracks/ui/TracksTable/index.ts: -------------------------------------------------------------------------------- 1 | export * from './TracksTable' 2 | -------------------------------------------------------------------------------- /apps/tanstack-query-zustand/src/pages/TrackPage/ui/ControlPanel/index.ts: -------------------------------------------------------------------------------- 1 | export * from './ControlPanel' 2 | -------------------------------------------------------------------------------- /apps/tanstack-query-zustand/src/pages/common/SearchTextField/index.ts: -------------------------------------------------------------------------------- 1 | export * from './SearchTextField' 2 | -------------------------------------------------------------------------------- /apps/tanstack-query-zustand/src/shared/components/AudioPlayer/index.ts: -------------------------------------------------------------------------------- 1 | export * from './AudioPlayer.tsx' 2 | -------------------------------------------------------------------------------- /apps/tanstack-query-zustand/src/shared/components/Autocomplete/index.ts: -------------------------------------------------------------------------------- 1 | export * from './Autocomplete' 2 | -------------------------------------------------------------------------------- /apps/tanstack-query-zustand/src/shared/components/CoverImage/index.ts: -------------------------------------------------------------------------------- 1 | export * from './CoverImage.tsx' 2 | -------------------------------------------------------------------------------- /apps/tanstack-query-zustand/src/shared/components/DropdownMenu/index.ts: -------------------------------------------------------------------------------- 1 | export * from './DropdownMenu' 2 | -------------------------------------------------------------------------------- /apps/tanstack-query-zustand/src/shared/components/ImageUploader/index.ts: -------------------------------------------------------------------------------- 1 | export * from './ImageUploader' 2 | -------------------------------------------------------------------------------- /apps/tanstack-query-zustand/src/shared/components/SearchField/index.ts: -------------------------------------------------------------------------------- 1 | export * from './SearchField' 2 | -------------------------------------------------------------------------------- /apps/ui-vanilla/src/features/auth/ui/ProfileDropdownMenu/index.ts: -------------------------------------------------------------------------------- 1 | export * from './ProfileDropdownMenu' 2 | -------------------------------------------------------------------------------- /apps/ui-vanilla/src/features/playlists/ui/PlaylistOverview/index.ts: -------------------------------------------------------------------------------- 1 | export * from './PlaylistOverview' 2 | -------------------------------------------------------------------------------- /apps/ui-vanilla/src/features/tracks/api/index.ts: -------------------------------------------------------------------------------- 1 | export * from './tracksApi' 2 | export * from './types' 3 | -------------------------------------------------------------------------------- /apps/ui-vanilla/src/pages/UserPage/ui/UserTabs/LikedTracksTab/index.ts: -------------------------------------------------------------------------------- 1 | export * from './LikedTracksTab' 2 | -------------------------------------------------------------------------------- /apps/ui-vanilla/src/pages/UserPage/ui/index.ts: -------------------------------------------------------------------------------- 1 | export * from './UserInfo' 2 | export * from './UserTabs' 3 | -------------------------------------------------------------------------------- /apps/ui-vanilla/src/shared/icons/LiveWaveIcon/index.ts: -------------------------------------------------------------------------------- 1 | export { LiveWaveIcon } from './LiveWaveIcon' 2 | -------------------------------------------------------------------------------- /experiment-apps/trelly-rtk/src/common/styles/index.ts: -------------------------------------------------------------------------------- 1 | export { containerSx } from "./container.styles" 2 | -------------------------------------------------------------------------------- /.prettierignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | dist 3 | build 4 | .next 5 | .nuxt 6 | coverage 7 | *.log 8 | pnpm-lock.yaml 9 | -------------------------------------------------------------------------------- /apps/react-effector-fsd/src/shared/icons/LiveWaveIcon/index.ts: -------------------------------------------------------------------------------- 1 | export { LiveWaveIcon } from './LiveWaveIcon' 2 | -------------------------------------------------------------------------------- /apps/reatom/src/entities/playlist/ui/PlaylistItem/index.ts: -------------------------------------------------------------------------------- 1 | export { PlaylistItem } from './PlaylistItem.tsx' 2 | -------------------------------------------------------------------------------- /apps/reatom/src/pages/UserPage/ui/UserTabs/MyLikedPlaylistsTab/index.ts: -------------------------------------------------------------------------------- 1 | export * from './MyLikedPlaylistsTab' 2 | -------------------------------------------------------------------------------- /apps/rtk-query/src/features/auth/api/index.ts: -------------------------------------------------------------------------------- 1 | export * from './auth-api' 2 | export * from './auth-api.types' 3 | -------------------------------------------------------------------------------- /apps/rtk-query/src/features/auth/ui/index.ts: -------------------------------------------------------------------------------- 1 | export * from './LoginModal' 2 | export * from './OAuthRedirect' 3 | -------------------------------------------------------------------------------- /apps/rtk-query/src/features/playlists/ui/PlaylistCardSkeleton/index.ts: -------------------------------------------------------------------------------- 1 | export * from './PlaylistCardSkeleton' 2 | -------------------------------------------------------------------------------- /apps/rtk-query/src/features/tracks/model/index.ts: -------------------------------------------------------------------------------- 1 | export * from './hooks' 2 | export * from './tracks-slice' 3 | -------------------------------------------------------------------------------- /apps/rtk-query/src/features/tracks/ui/CreateEditTrackModal/index.ts: -------------------------------------------------------------------------------- 1 | export * from './CreateEditTrackModal' 2 | -------------------------------------------------------------------------------- /apps/rtk-query/src/layout/Header/index.ts: -------------------------------------------------------------------------------- 1 | export * from './AccountMenu' 2 | export { Header } from './Header' 3 | -------------------------------------------------------------------------------- /apps/rtk-query/src/pages/TrackLyricsPage/index.ts: -------------------------------------------------------------------------------- 1 | export { TrackLyricsPage } from './TrackLyricsPage.tsx' 2 | -------------------------------------------------------------------------------- /apps/tanstack-query-zustand/src/entities/playlist/ui/PlaylistCard/index.ts: -------------------------------------------------------------------------------- 1 | export * from './PlaylistCard.tsx' 2 | -------------------------------------------------------------------------------- /apps/tanstack-query-zustand/src/features/playlists/index.ts: -------------------------------------------------------------------------------- 1 | export * from './api' 2 | export * from './ui' 3 | -------------------------------------------------------------------------------- /apps/tanstack-query-zustand/src/features/tags/ui/index.ts: -------------------------------------------------------------------------------- 1 | export * from './' 2 | export * from './TagsList' 3 | -------------------------------------------------------------------------------- /apps/tanstack-query-zustand/src/features/tracks/ui/TrackInfoCell/index.ts: -------------------------------------------------------------------------------- 1 | export * from './TrackInfoCell.tsx' 2 | -------------------------------------------------------------------------------- /apps/tanstack-query-zustand/src/features/tracks/ui/TrackOverview/index.ts: -------------------------------------------------------------------------------- 1 | export * from './TrackOverview' 2 | -------------------------------------------------------------------------------- /apps/tanstack-query-zustand/src/pages/PlaylistPage/ui/ControlPanel/index.ts: -------------------------------------------------------------------------------- 1 | export * from './ControlPanel' 2 | -------------------------------------------------------------------------------- /apps/tanstack-query-zustand/src/shared/components/ReactionButtons/index.ts: -------------------------------------------------------------------------------- 1 | export * from './ReactionButtons' 2 | -------------------------------------------------------------------------------- /apps/tanstack-query-zustand/src/widgets/Player/Player.module.css: -------------------------------------------------------------------------------- 1 | .player { 2 | grid-area: player; 3 | } 4 | -------------------------------------------------------------------------------- /apps/ui-vanilla/src/features/playlists/ui/CreatePlaylistModal/index.ts: -------------------------------------------------------------------------------- 1 | export * from './CreatePlaylistModal' 2 | -------------------------------------------------------------------------------- /experiment-apps/musicfun-tanstack-query-small-example/src/vite-env.d.ts: -------------------------------------------------------------------------------- 1 | /// 2 | -------------------------------------------------------------------------------- /apps/react-effector-fsd/src/features/auth/ui/ProfileDropdownMenu/index.ts: -------------------------------------------------------------------------------- 1 | export * from './ProfileDropdownMenu' 2 | -------------------------------------------------------------------------------- /apps/rtk-query/src/features/playlists/model/index.ts: -------------------------------------------------------------------------------- 1 | export * from './hooks' 2 | export * from './playlists-slice' 3 | -------------------------------------------------------------------------------- /apps/rtk-query/src/features/tags/ui/PlaylistTagAutocomplete/index.ts: -------------------------------------------------------------------------------- 1 | export * from './PlaylistTagAutocomplete.tsx' 2 | -------------------------------------------------------------------------------- /apps/rtk-query/src/pages/UserPage/ui/UserTabs/MyLikedPlaylistsTab/index.ts: -------------------------------------------------------------------------------- 1 | export * from './MyLikedPlaylistsTab' 2 | -------------------------------------------------------------------------------- /apps/rtk-query/src/shared/components/FormControlledTextField/index.ts: -------------------------------------------------------------------------------- 1 | export * from './FormControlledTextField' 2 | -------------------------------------------------------------------------------- /apps/tanstack-query-zustand/src/features/auth/ui/LoginModal/index.ts: -------------------------------------------------------------------------------- 1 | export { LoginModal } from './LoginModal.tsx' 2 | -------------------------------------------------------------------------------- /apps/tanstack-query-zustand/src/features/playlists/ui/PlaylistOverview/index.ts: -------------------------------------------------------------------------------- 1 | export * from './PlaylistOverview' 2 | -------------------------------------------------------------------------------- /apps/tanstack-query-zustand/src/pages/UserPage/ui/UserTabs/PlaylistsTab/index.ts: -------------------------------------------------------------------------------- 1 | export * from './PlaylistsTab' 2 | -------------------------------------------------------------------------------- /apps/tanstack-query-zustand/src/shared/icons/LiveWaveIcon/index.ts: -------------------------------------------------------------------------------- 1 | export { LiveWaveIcon } from './LiveWaveIcon' 2 | -------------------------------------------------------------------------------- /apps/ui-vanilla/src/pages/UserPage/ui/UserTabs/MyLikedPlaylistsTab/index.ts: -------------------------------------------------------------------------------- 1 | export * from './MyLikedPlaylistsTab' 2 | -------------------------------------------------------------------------------- /sounds-examples/1.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/it-incubator/musicfun-react-all-stacks/HEAD/sounds-examples/1.mp3 -------------------------------------------------------------------------------- /apps/react-effector-fsd/src/shared/hooks/index.ts: -------------------------------------------------------------------------------- 1 | export * from './useDebounceValue' 2 | export * from './useGetId' 3 | -------------------------------------------------------------------------------- /apps/reatom/.env: -------------------------------------------------------------------------------- 1 | VITE_API_BASE_URL=https://musicfun.it-incubator.app/api/1.0 2 | VITE_API_KEY= 3 | BASE_URL=tanstackquery -------------------------------------------------------------------------------- /apps/rtk-query/src/features/artists/ui/ArtistsTagAutocomplete/index.ts: -------------------------------------------------------------------------------- 1 | export * from './ArtistsTagAutocomplete.tsx' 2 | -------------------------------------------------------------------------------- /apps/rtk-query/src/features/auth/index.ts: -------------------------------------------------------------------------------- 1 | export * from './api' 2 | export * from './model' 3 | export * from './ui' 4 | -------------------------------------------------------------------------------- /apps/rtk-query/src/features/profile/ui/EditProfileModal/index.ts: -------------------------------------------------------------------------------- 1 | export { EditProfileModal } from './EditProfileModal' 2 | -------------------------------------------------------------------------------- /apps/rtk-query/src/features/tags/api/tagsApi.types.ts: -------------------------------------------------------------------------------- 1 | export type Tag = { 2 | id: string 3 | name: string 4 | } 5 | -------------------------------------------------------------------------------- /apps/rtk-query/src/features/tags/ui/index.ts: -------------------------------------------------------------------------------- 1 | export * from './PlaylistTagAutocomplete' 2 | export * from './TagsList' 3 | -------------------------------------------------------------------------------- /apps/rtk-query/src/features/tracks/index.ts: -------------------------------------------------------------------------------- 1 | export * from './api' 2 | export * from './model' 3 | export * from './ui' 4 | -------------------------------------------------------------------------------- /apps/tanstack-query-zustand/src/features/auth/ui/ProfileDropdownMenu/index.ts: -------------------------------------------------------------------------------- 1 | export * from './ProfileDropdownMenu' 2 | -------------------------------------------------------------------------------- /apps/tanstack-query-zustand/src/features/tracks/api/index.ts: -------------------------------------------------------------------------------- 1 | export * from './tracksApi' 2 | export * from './types' 3 | -------------------------------------------------------------------------------- /apps/tanstack-query-zustand/src/pages/UserPage/ui/UserTabs/LikedTracksTab/index.ts: -------------------------------------------------------------------------------- 1 | export * from './LikedTracksTab' 2 | -------------------------------------------------------------------------------- /apps/tanstack-query-zustand/src/pages/UserPage/ui/index.ts: -------------------------------------------------------------------------------- 1 | export * from './UserInfo' 2 | export * from './UserTabs' 3 | -------------------------------------------------------------------------------- /apps/tanstack-query-zustand/src/shared/featureFlags.ts: -------------------------------------------------------------------------------- 1 | export const featuresFlags = { 2 | deletePlaylist: true, 3 | } 4 | -------------------------------------------------------------------------------- /apps/tanstack-query-zustand/src/shared/hooks/debounceCallback/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from './useDebounceCallback' 2 | -------------------------------------------------------------------------------- /apps/tanstack-query-zustand/src/shared/hooks/debounceValue/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from './useDebounceValue.ts' 2 | -------------------------------------------------------------------------------- /apps/tanstack-query-zustand/src/shared/hooks/throttleCallback/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from './useThrottleCallback' 2 | -------------------------------------------------------------------------------- /experiment-apps/musicfun-tanstack-query-orval-small-example/src/vite-env.d.ts: -------------------------------------------------------------------------------- 1 | /// 2 | -------------------------------------------------------------------------------- /packages/musicfun-api-sdk/src/api/tags/tagsApi.types.ts: -------------------------------------------------------------------------------- 1 | export type Tag = { 2 | id: string 3 | name: string 4 | } 5 | -------------------------------------------------------------------------------- /youtube/rtk-query/lesson1/.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "printWidth": 120, 3 | "semi": false, 4 | "singleQuote": true 5 | } 6 | -------------------------------------------------------------------------------- /youtube/tanstack-query-router-fsd/lesson1/.env: -------------------------------------------------------------------------------- 1 | VITE_BASE_URL=https://musicfun.it-incubator.app/api/1.0/ 2 | VITE_API_KEY= -------------------------------------------------------------------------------- /apps/react-effector-fsd/src/pages/home/Home.tsx: -------------------------------------------------------------------------------- 1 | export function Home() { 2 | return
Musicfun home page
3 | } 4 | -------------------------------------------------------------------------------- /apps/reatom/src/features/auth/ui/LoginButtonAndModal/index.ts: -------------------------------------------------------------------------------- 1 | export { LoginButtonAndModal } from './LoginButtonAndModal' 2 | -------------------------------------------------------------------------------- /apps/reatom/src/features/auth/ui/index.ts: -------------------------------------------------------------------------------- 1 | export * from './LoginButtonAndModal' 2 | export * from './ProfileDropdownMenu' 3 | -------------------------------------------------------------------------------- /apps/reatom/src/features/playlists/ui/index.ts: -------------------------------------------------------------------------------- 1 | export * from './CreatePlaylistModal' 2 | export * from './PlaylistOverview' 3 | -------------------------------------------------------------------------------- /apps/rtk-query/src/features/playlists/index.ts: -------------------------------------------------------------------------------- 1 | export * from './api' 2 | export * from './model' 3 | export * from './ui' 4 | -------------------------------------------------------------------------------- /apps/rtk-query/src/shared/types/index.ts: -------------------------------------------------------------------------------- 1 | export * from './common.types.ts' 2 | export * from './commonApi.types.ts' 3 | 4 | -------------------------------------------------------------------------------- /apps/tanstack-query-zustand/src/entities/playlist/ui/PlaylistItem/index.ts: -------------------------------------------------------------------------------- 1 | export { PlaylistItem } from './PlaylistItem.tsx' 2 | -------------------------------------------------------------------------------- /apps/tanstack-query-zustand/src/features/playlists/ui/CreatePlaylistModal/index.ts: -------------------------------------------------------------------------------- 1 | export * from './CreatePlaylistModal' 2 | -------------------------------------------------------------------------------- /apps/tanstack-query-zustand/src/shared/hooks/infiniteScroll/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from './useObserverInfiniteScroll' 2 | -------------------------------------------------------------------------------- /youtube/rtk-query/lesson1/src/app/ui/App/App.module.css: -------------------------------------------------------------------------------- 1 | .layout { 2 | max-width: 1186px; 3 | margin: 0 auto 200px; 4 | } 5 | -------------------------------------------------------------------------------- /apps/reatom/src/shared/utils/index.ts: -------------------------------------------------------------------------------- 1 | import * as ValidationUtils from './validators' 2 | 3 | export { ValidationUtils as VU } 4 | -------------------------------------------------------------------------------- /apps/tanstack-query-zustand/src/pages/UserPage/ui/UserTabs/MyLikedPlaylistsTab/index.ts: -------------------------------------------------------------------------------- 1 | export * from './MyLikedPlaylistsTab' 2 | -------------------------------------------------------------------------------- /apps/ui-vanilla/src/features/auth/ui/LoginButtonAndModal/index.ts: -------------------------------------------------------------------------------- 1 | export { LoginButtonAndModal } from './LoginButtonAndModal' 2 | -------------------------------------------------------------------------------- /apps/ui-vanilla/src/features/auth/ui/index.ts: -------------------------------------------------------------------------------- 1 | export * from './LoginButtonAndModal' 2 | export * from './ProfileDropdownMenu' 3 | -------------------------------------------------------------------------------- /packages/musicfun-api-sdk/src/api/artists/artistsApi.types.ts: -------------------------------------------------------------------------------- 1 | export type Artist = { 2 | id: string 3 | name: string 4 | } 5 | -------------------------------------------------------------------------------- /apps/nextjs/src/app/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/it-incubator/musicfun-react-all-stacks/HEAD/apps/nextjs/src/app/favicon.ico -------------------------------------------------------------------------------- /apps/react-effector-fsd/src/features/auth/ui/LoginButtonAndModal/index.ts: -------------------------------------------------------------------------------- 1 | export { LoginButtonAndModal } from './LoginButtonAndModal' 2 | -------------------------------------------------------------------------------- /apps/react-effector-fsd/src/features/auth/ui/index.ts: -------------------------------------------------------------------------------- 1 | export * from './LoginButtonAndModal' 2 | export * from './ProfileDropdownMenu' 3 | -------------------------------------------------------------------------------- /apps/rtk-query/src/features/profile/utils/storage-key.ts: -------------------------------------------------------------------------------- 1 | export const getProfileStorageKey = (userId: string) => `profile_${userId}` 2 | -------------------------------------------------------------------------------- /apps/rtk-query/src/features/tracks/model/hooks/index.ts: -------------------------------------------------------------------------------- 1 | export * from './useCreateTrackModal' 2 | export * from './useEditTrackModal' 3 | -------------------------------------------------------------------------------- /experiment-apps/musicfun-tanstack-query-small-example/src/features/auth/index.tsx: -------------------------------------------------------------------------------- 1 | export { AccountBar } from './ui/account-bar.tsx' 2 | -------------------------------------------------------------------------------- /apps/react-native-expo/.npmrc: -------------------------------------------------------------------------------- 1 | public-hoist-pattern[]=@babel/* 2 | public-hoist-pattern[]=react 3 | public-hoist-pattern[]=react-native 4 | 5 | -------------------------------------------------------------------------------- /apps/reatom/src/features/tags/ui/TagsList/TagsList.module.css: -------------------------------------------------------------------------------- 1 | .list { 2 | display: flex; 3 | flex-wrap: wrap; 4 | gap: 8px; 5 | } 6 | -------------------------------------------------------------------------------- /apps/reatom/src/features/tracks/api/types.ts: -------------------------------------------------------------------------------- 1 | export enum CurrentUserReaction { 2 | None = 0, 3 | Like = 1, 4 | Dislike = 2, 5 | } 6 | -------------------------------------------------------------------------------- /apps/rtk-query/.env: -------------------------------------------------------------------------------- 1 | VITE_BASE_URL=https://musicfun.it-incubator.app/api/1.0 2 | VITE_DOMAIN_ADDRESS=http://localhost:5176 3 | VITE_API_KEY= 4 | -------------------------------------------------------------------------------- /apps/rtk-query/src/features/profile/model/hook/index.ts: -------------------------------------------------------------------------------- 1 | export * from './useEditProfileModal' 2 | export * from './useEditProfileSchema' 3 | -------------------------------------------------------------------------------- /apps/rtk-query/src/features/tags/ui/TagsList/TagsList.module.css: -------------------------------------------------------------------------------- 1 | .list { 2 | display: flex; 3 | flex-wrap: wrap; 4 | gap: 8px; 5 | } 6 | -------------------------------------------------------------------------------- /apps/tanstack-query-zustand/src/features/auth/ui/LoginButtonAndModal/index.ts: -------------------------------------------------------------------------------- 1 | export { LoginButtonAndModal } from './LoginButtonAndModal' 2 | -------------------------------------------------------------------------------- /apps/tanstack-query-zustand/src/features/auth/ui/index.ts: -------------------------------------------------------------------------------- 1 | export * from './LoginButtonAndModal' 2 | export * from './ProfileDropdownMenu' 3 | -------------------------------------------------------------------------------- /apps/tanstack-query-zustand/src/features/playlists/ui/index.ts: -------------------------------------------------------------------------------- 1 | export * from './CreatePlaylistModal' 2 | export * from './PlaylistOverview' 3 | -------------------------------------------------------------------------------- /apps/tanstack-query-zustand/src/shared/types/strict.tsx: -------------------------------------------------------------------------------- 1 | export type Strict = U & Record, never> 2 | -------------------------------------------------------------------------------- /apps/ui-vanilla/src/features/tags/ui/TagsList/TagsList.module.css: -------------------------------------------------------------------------------- 1 | .list { 2 | display: flex; 3 | flex-wrap: wrap; 4 | gap: 8px; 5 | } 6 | -------------------------------------------------------------------------------- /apps/ui-vanilla/src/features/tracks/api/types.ts: -------------------------------------------------------------------------------- 1 | export enum CurrentUserReaction { 2 | None = 0, 3 | Like = 1, 4 | Dislike = 2, 5 | } 6 | -------------------------------------------------------------------------------- /experiment-apps/musicfun-tanstack-query-orval-small-example/src/features/auth/index.tsx: -------------------------------------------------------------------------------- 1 | export { AccountBar } from './ui/account-bar.tsx' 2 | -------------------------------------------------------------------------------- /apps/react-effector-fsd/.env.example: -------------------------------------------------------------------------------- 1 | VITE_API_BASE_URL=https://musicfun.it-incubator.app/api/1.0 2 | VITE_API_KEY= 3 | VITE_BASE_URL=effector 4 | -------------------------------------------------------------------------------- /apps/reatom/src/features/tracks/ui/index.ts: -------------------------------------------------------------------------------- 1 | export * from './TrackCard' 2 | export * from './TrackOverview' 3 | export * from './TracksTable' 4 | -------------------------------------------------------------------------------- /apps/rtk-query/src/features/playlists/model/hooks/index.ts: -------------------------------------------------------------------------------- 1 | export * from './useCreatePlaylistModal' 2 | export * from './useEditPlaylistModal' 3 | -------------------------------------------------------------------------------- /apps/rtk-query/src/features/playlists/ui/CreateEditPlaylistModal/index.ts: -------------------------------------------------------------------------------- 1 | export { CreateEditPlaylistModal } from './CreateEditPlaylistModal' 2 | -------------------------------------------------------------------------------- /apps/tanstack-query-zustand/.env: -------------------------------------------------------------------------------- 1 | VITE_API_BASE_URL=https://musicfun.it-incubator.app/api/1.0 2 | VITE_API_KEY= 3 | VITE_APP_BASE_URL=tanstackquery -------------------------------------------------------------------------------- /apps/tanstack-query-zustand/src/shared/utils/index.ts: -------------------------------------------------------------------------------- 1 | import * as ValidationUtils from './validators' 2 | 3 | export { ValidationUtils as VU } 4 | -------------------------------------------------------------------------------- /experiment-apps/musicfun-tanstack-query-small-example/src/pages/auth/index.tsx: -------------------------------------------------------------------------------- 1 | export { OauthCallbackPage } from './ui/oauth-callback-page.tsx' 2 | -------------------------------------------------------------------------------- /apps/react-native-expo/assets/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/it-incubator/musicfun-react-all-stacks/HEAD/apps/react-native-expo/assets/icon.png -------------------------------------------------------------------------------- /apps/reatom/src/assets/img/no-cover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/it-incubator/musicfun-react-all-stacks/HEAD/apps/reatom/src/assets/img/no-cover.png -------------------------------------------------------------------------------- /apps/reatom/src/entities/playlist/index.tsx: -------------------------------------------------------------------------------- 1 | export { PlaylistCard } from './ui/PlaylistCard' 2 | export { PlaylistItem } from './ui/PlaylistItem' 3 | -------------------------------------------------------------------------------- /apps/reatom/src/shared/utils/validators/inNun.ts: -------------------------------------------------------------------------------- 1 | function isNaN(value: number) { 2 | return Number.isNaN(value) 3 | } 4 | 5 | export default isNaN 6 | -------------------------------------------------------------------------------- /apps/rtk-query/src/features/profile/model/index.ts: -------------------------------------------------------------------------------- 1 | export * from './hook' 2 | export * from './profile-schemas' 3 | export * from './profile-slice' 4 | -------------------------------------------------------------------------------- /apps/rtk-query/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "files": [], 3 | "references": [{ "path": "./tsconfig.app.json" }, { "path": "./tsconfig.node.json" }] 4 | } 5 | -------------------------------------------------------------------------------- /apps/ui-vanilla/src/features/tracks/ui/index.ts: -------------------------------------------------------------------------------- 1 | export * from './TrackCard' 2 | export * from './TrackOverview' 3 | export * from './TracksTable' 4 | -------------------------------------------------------------------------------- /apps/ui-vanilla/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "files": [], 3 | "references": [{ "path": "./tsconfig.app.json" }, { "path": "./tsconfig.node.json" }] 4 | } 5 | -------------------------------------------------------------------------------- /experiment-apps/musicfun-tanstack-query-orval-small-example/src/pages/auth/index.tsx: -------------------------------------------------------------------------------- 1 | export { OauthCallbackPage } from './ui/oauth-callback-page.tsx' 2 | -------------------------------------------------------------------------------- /youtube/markup/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "files": [], 3 | "references": [{ "path": "./tsconfig.app.json" }, { "path": "./tsconfig.node.json" }] 4 | } 5 | -------------------------------------------------------------------------------- /youtube/tanstack-query-router-fsd/lesson1/src/features/auth/ui/account-bar.module.css: -------------------------------------------------------------------------------- 1 | .meInfoContainer { 2 | display: flex; 3 | gap: 10px; 4 | } 5 | -------------------------------------------------------------------------------- /apps/nextjs/public/vercel.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /apps/react-native-expo/assets/favicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/it-incubator/musicfun-react-all-stacks/HEAD/apps/react-native-expo/assets/favicon.png -------------------------------------------------------------------------------- /apps/rtk-query/src/features/profile/index.ts: -------------------------------------------------------------------------------- 1 | export * from './config' 2 | export * from './model' 3 | export * from './types' 4 | export * from './ui' 5 | -------------------------------------------------------------------------------- /apps/tanstack-query-zustand/src/features/tags/ui/TagsList/TagsList.module.css: -------------------------------------------------------------------------------- 1 | .list { 2 | display: flex; 3 | flex-wrap: wrap; 4 | gap: 8px; 5 | } 6 | -------------------------------------------------------------------------------- /apps/tanstack-query-zustand/src/features/tracks/api/types.ts: -------------------------------------------------------------------------------- 1 | export enum CurrentUserReaction { 2 | None = 0, 3 | Like = 1, 4 | Dislike = -1, 5 | } 6 | -------------------------------------------------------------------------------- /youtube/rtk-query/lesson1/src/common/enums/enums.ts: -------------------------------------------------------------------------------- 1 | export const CurrentUserReaction = { 2 | Like: 1, 3 | Dislike: -1, 4 | None: 0, 5 | } as const 6 | -------------------------------------------------------------------------------- /apps/rtk-query/src/features/playlists/ui/ChoosePlaylistButtonAndModal/index.ts: -------------------------------------------------------------------------------- 1 | export { ChoosePlaylistButtonAndModal } from './ChoosePlaylistButtonAndModal' 2 | -------------------------------------------------------------------------------- /apps/tanstack-query-zustand/src/features/playlists/api/types.ts: -------------------------------------------------------------------------------- 1 | export enum CurrentUserReaction { 2 | None = 0, 3 | Like = 1, 4 | Dislike = -1, 5 | } 6 | -------------------------------------------------------------------------------- /apps/tanstack-query-zustand/src/features/tracks/ui/index.ts: -------------------------------------------------------------------------------- 1 | export * from './TrackCard' 2 | export * from './TrackOverview' 3 | export * from './TracksTable' 4 | -------------------------------------------------------------------------------- /experiment-apps/trelly-rtk/src/common/hooks/index.ts: -------------------------------------------------------------------------------- 1 | export { useAppDispatch } from "./useAppDispatch" 2 | export { useAppSelector } from "./useAppSelector" 3 | -------------------------------------------------------------------------------- /experiment-apps/trelly-rtk/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "files": [], 3 | "references": [{ "path": "./tsconfig.app.json" }, { "path": "./tsconfig.node.json" }] 4 | } 5 | -------------------------------------------------------------------------------- /youtube/rtk-query/lesson1/src/common/socket/index.ts: -------------------------------------------------------------------------------- 1 | export { getSocket } from './getSocket.ts' 2 | export { subscribeToEvent } from './subscribeToEvent.ts' 3 | -------------------------------------------------------------------------------- /youtube/rtk-query/lesson1/src/features/playlists/ui/CreatePlaylistForm/CreatePlaylistForm.module.css: -------------------------------------------------------------------------------- 1 | .error { 2 | color: red; 3 | font-weight: bold; 4 | } 5 | -------------------------------------------------------------------------------- /youtube/rtk-query/lesson1/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "files": [], 3 | "references": [{ "path": "./tsconfig.app.json" }, { "path": "./tsconfig.node.json" }] 4 | } 5 | -------------------------------------------------------------------------------- /apps/react-native-expo/assets/adaptive-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/it-incubator/musicfun-react-all-stacks/HEAD/apps/react-native-expo/assets/adaptive-icon.png -------------------------------------------------------------------------------- /apps/react-native-expo/assets/splash-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/it-incubator/musicfun-react-all-stacks/HEAD/apps/react-native-expo/assets/splash-icon.png -------------------------------------------------------------------------------- /apps/reatom/src/assets/img/avatar-default.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/it-incubator/musicfun-react-all-stacks/HEAD/apps/reatom/src/assets/img/avatar-default.png -------------------------------------------------------------------------------- /apps/reatom/src/shared/api/types.ts: -------------------------------------------------------------------------------- 1 | import type { components } from '@/shared/api/schema.ts' 2 | 3 | export type MainImage = components['schemas']['ImageDto'][] 4 | -------------------------------------------------------------------------------- /apps/reatom/src/shared/utils/validators/isNull.ts: -------------------------------------------------------------------------------- 1 | function isNull(value: unknown): value is null { 2 | return value === null 3 | } 4 | 5 | export default isNull 6 | -------------------------------------------------------------------------------- /apps/tanstack-query-zustand/src/entities/playlist/index.tsx: -------------------------------------------------------------------------------- 1 | export { PlaylistCard } from './ui/PlaylistCard' 2 | export { PlaylistItem } from './ui/PlaylistItem' 3 | -------------------------------------------------------------------------------- /apps/ui-vanilla/src/features/playlists/ui/index.ts: -------------------------------------------------------------------------------- 1 | export * from './CreatePlaylistModal' 2 | export * from './PlaylistCard' 3 | export * from './PlaylistOverview' 4 | -------------------------------------------------------------------------------- /experiment-apps/musicfun-tanstack-query-small-example/src/features/auth/ui/account-bar.module.css: -------------------------------------------------------------------------------- 1 | .meInfoContainer { 2 | display: flex; 3 | gap: 10px; 4 | } 5 | -------------------------------------------------------------------------------- /experiment-apps/musicfun-tanstack-query-small-example/src/shared/api/index.ts: -------------------------------------------------------------------------------- 1 | export { getClient, setClientConfig } from './client' 2 | export * from './schema' 3 | -------------------------------------------------------------------------------- /youtube/rtk-query/lesson1/src/features/playlists/ui/PlaylistsPage.module.css: -------------------------------------------------------------------------------- 1 | .container { 2 | display: flex; 3 | flex-direction: column; 4 | gap: 30px; 5 | } 6 | -------------------------------------------------------------------------------- /apps/react-native-expo/assets/fonts/Lato-Bold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/it-incubator/musicfun-react-all-stacks/HEAD/apps/react-native-expo/assets/fonts/Lato-Bold.ttf -------------------------------------------------------------------------------- /apps/react-native-expo/assets/fonts/Lato-Thin.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/it-incubator/musicfun-react-all-stacks/HEAD/apps/react-native-expo/assets/fonts/Lato-Thin.ttf -------------------------------------------------------------------------------- /apps/react-native-expo/shared/consts/consts.ts: -------------------------------------------------------------------------------- 1 | export const CALLBACK_URL = 'http://localhost:8081/callback' 2 | export const RETRY_HEADER_CONST = 'x-musicfun-retried' 3 | -------------------------------------------------------------------------------- /apps/reatom/README.md: -------------------------------------------------------------------------------- 1 | UI for Musicfun app without libs 2 | 3 | TODO: 4 | [] Add common components for TrackOverview and PlaylistOverview 5 | [] Refactor DropdownMenu 6 | -------------------------------------------------------------------------------- /apps/tanstack-query-zustand/src/shared/utils/validators/inNun.ts: -------------------------------------------------------------------------------- 1 | function isNaN(value: number) { 2 | return Number.isNaN(value) 3 | } 4 | 5 | export default isNaN 6 | -------------------------------------------------------------------------------- /architecture/microfrontends/player/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "files": [], 3 | "references": [{ "path": "./tsconfig.app.json" }, { "path": "./tsconfig.node.json" }] 4 | } 5 | -------------------------------------------------------------------------------- /architecture/microfrontends/root/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "files": [], 3 | "references": [{ "path": "./tsconfig.app.json" }, { "path": "./tsconfig.node.json" }] 4 | } 5 | -------------------------------------------------------------------------------- /experiment-apps/musicfun-tanstack-query-orval-small-example/src/features/auth/ui/account-bar.module.css: -------------------------------------------------------------------------------- 1 | .meInfoContainer { 2 | display: flex; 3 | gap: 10px; 4 | } 5 | -------------------------------------------------------------------------------- /experiment-apps/musicfun-tanstack-query-orval-small-example/src/shared/api/index.ts: -------------------------------------------------------------------------------- 1 | export { getClient, setClientConfig } from './client' 2 | export * from './schema' 3 | -------------------------------------------------------------------------------- /experiment-apps/trelly-rtk/src/features/boards/ui/Boards/BoardItem/BoardTitle/BoardTitle.module.css: -------------------------------------------------------------------------------- 1 | .container { 2 | display: flex; 3 | align-items: center; 4 | } 5 | -------------------------------------------------------------------------------- /youtube/rtk-query/lesson1/src/features/auth/ui/ProfilePage/ProfilePage.module.css: -------------------------------------------------------------------------------- 1 | .container { 2 | display: flex; 3 | flex-direction: column; 4 | gap: 30px; 5 | } 6 | -------------------------------------------------------------------------------- /youtube/rtk-query/lesson1/src/index.css: -------------------------------------------------------------------------------- 1 | :root { 2 | font-family: system-ui, Avenir, Helvetica, Arial, sans-serif; 3 | line-height: 1.5; 4 | font-weight: 400; 5 | } 6 | -------------------------------------------------------------------------------- /apps/react-effector-fsd/src/pages/user/UserPage.tsx: -------------------------------------------------------------------------------- 1 | export const UserPage = () => { 2 | return ( 3 |
4 |
UserPage
5 |
6 | ) 7 | } 8 | -------------------------------------------------------------------------------- /apps/react-native-expo/assets/fonts/Lato-Light.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/it-incubator/musicfun-react-all-stacks/HEAD/apps/react-native-expo/assets/fonts/Lato-Light.ttf -------------------------------------------------------------------------------- /apps/react-native-expo/assets/fonts/Lato-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/it-incubator/musicfun-react-all-stacks/HEAD/apps/react-native-expo/assets/fonts/Lato-Regular.ttf -------------------------------------------------------------------------------- /apps/reatom/src/assets/img/track-default-cover.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/it-incubator/musicfun-react-all-stacks/HEAD/apps/reatom/src/assets/img/track-default-cover.jpg -------------------------------------------------------------------------------- /apps/reatom/src/pages/common/index.ts: -------------------------------------------------------------------------------- 1 | export * from './ContentList' 2 | export * from './PageWrapper' 3 | export * from './SearchTextField' 4 | export * from './SortSelect' 5 | -------------------------------------------------------------------------------- /apps/ui-vanilla/README.md: -------------------------------------------------------------------------------- 1 | UI for Musicfun app without libs 2 | 3 | TODO: 4 | [] Add common components for TrackOverview and PlaylistOverview 5 | [] Refactor DropdownMenu 6 | -------------------------------------------------------------------------------- /experiment-apps/musicfun-tanstack-query-small-example/.env: -------------------------------------------------------------------------------- 1 | VITE_BASE_URL=https://musicfun.it-incubator.app/api/1.0 2 | VITE_API_KEY= 3 | VITE_CURRENT_DOMAIN=http://localhost:5174 -------------------------------------------------------------------------------- /experiment-apps/musicfun-tanstack-query-small-example/src/shared/routes/routes.ts: -------------------------------------------------------------------------------- 1 | export const ROUTES = { 2 | main: '/', 3 | myPlaylists: '/my-playlists', 4 | } as const 5 | -------------------------------------------------------------------------------- /experiment-apps/trelly-rtk/src/common/actions/actions.ts: -------------------------------------------------------------------------------- 1 | import { createAction } from "@reduxjs/toolkit" 2 | 3 | export const clearDataAC = createAction("common/clearData") 4 | -------------------------------------------------------------------------------- /youtube/tanstack-query-router-fsd/lesson1/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "files": [], 3 | "references": [{ "path": "./tsconfig.app.json" }, { "path": "./tsconfig.node.json" }] 4 | } 5 | -------------------------------------------------------------------------------- /youtube/tanstack-query-router-fsd/lesson1/tsr.config.json: -------------------------------------------------------------------------------- 1 | { 2 | "routesDirectory": "./src/app/routes", 3 | "generatedRouteTree": "./src/app/routes/routeTree.gen.ts" 4 | } 5 | -------------------------------------------------------------------------------- /apps/reatom/src/features/tags/index.ts: -------------------------------------------------------------------------------- 1 | export { MOCK_5_HASHTAGS, MOCK_HASHTAGS } from './api/tags-api' 2 | export { useTags } from './api/use-tags.query' 3 | export * from './ui' 4 | -------------------------------------------------------------------------------- /apps/reatom/src/pages/UserPage/UserPage.module.css: -------------------------------------------------------------------------------- 1 | .userPage { 2 | --page-gradient-color: #b8a661; 3 | 4 | display: flex; 5 | flex-direction: column; 6 | gap: 24px; 7 | } 8 | -------------------------------------------------------------------------------- /apps/reatom/src/shared/components/Card/Card.module.css: -------------------------------------------------------------------------------- 1 | .card { 2 | display: flex; 3 | flex-direction: column; 4 | padding: 8px; 5 | background: var(--color-bg-card); 6 | } 7 | -------------------------------------------------------------------------------- /apps/reatom/src/shared/fonts/lato-v24-latin-700.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/it-incubator/musicfun-react-all-stacks/HEAD/apps/reatom/src/shared/fonts/lato-v24-latin-700.woff2 -------------------------------------------------------------------------------- /apps/reatom/src/shared/fonts/lato-v24-latin-900.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/it-incubator/musicfun-react-all-stacks/HEAD/apps/reatom/src/shared/fonts/lato-v24-latin-900.woff2 -------------------------------------------------------------------------------- /apps/rtk-query/src/features/tracks/api/index.ts: -------------------------------------------------------------------------------- 1 | export * from './tracksApi' 2 | export * from './tracksApi.types' 3 | export { MOCK_TRACKS } from '@/features/tracks/api/mocks.ts' 4 | -------------------------------------------------------------------------------- /apps/tanstack-query-zustand/src/shared/api/types.ts: -------------------------------------------------------------------------------- 1 | import type { components } from '@/shared/api/schema.ts' 2 | 3 | export type MainImage = components['schemas']['ImageDto'][] 4 | -------------------------------------------------------------------------------- /apps/tanstack-query-zustand/src/shared/utils/validators/isNull.ts: -------------------------------------------------------------------------------- 1 | function isNull(value: unknown): value is null { 2 | return value === null 3 | } 4 | 5 | export default isNull 6 | -------------------------------------------------------------------------------- /apps/ui-vanilla/src/pages/common/index.ts: -------------------------------------------------------------------------------- 1 | export * from './ContentList' 2 | export * from './PageWrapper' 3 | export * from './SearchTextField' 4 | export * from './SortSelect' 5 | -------------------------------------------------------------------------------- /experiment-apps/musicfun-tanstack-query-orval-small-example/.env: -------------------------------------------------------------------------------- 1 | VITE_BASE_URL=https://musicfun.it-incubator.app/api/1.0 2 | VITE_API_KEY= 3 | VITE_CURRENT_DOMAIN=http://localhost:5174 -------------------------------------------------------------------------------- /experiment-apps/musicfun-tanstack-query-orval-small-example/src/shared/routes/routes.ts: -------------------------------------------------------------------------------- 1 | export const ROUTES = { 2 | main: '/', 3 | myPlaylists: '/my-playlists', 4 | } as const 5 | -------------------------------------------------------------------------------- /apps/nextjs/next.config.ts: -------------------------------------------------------------------------------- 1 | import type { NextConfig } from 'next' 2 | 3 | const nextConfig: NextConfig = { 4 | /* config options here */ 5 | } 6 | 7 | export default nextConfig 8 | -------------------------------------------------------------------------------- /apps/reatom/src/pages/PlaylistPage/PlaylistPage.module.css: -------------------------------------------------------------------------------- 1 | .playlistPage { 2 | --page-gradient-color: #adbf22; 3 | } 4 | 5 | .playlistOverview { 6 | margin-bottom: 46px; 7 | } 8 | -------------------------------------------------------------------------------- /apps/reatom/src/shared/fonts/lato-v24-latin-regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/it-incubator/musicfun-react-all-stacks/HEAD/apps/reatom/src/shared/fonts/lato-v24-latin-regular.woff2 -------------------------------------------------------------------------------- /apps/rtk-query/src/pages/PlaylistPage/PlaylistPage.module.css: -------------------------------------------------------------------------------- 1 | .playlistPage { 2 | --page-gradient-color: #adbf22; 3 | } 4 | 5 | .playlistOverview { 6 | margin-bottom: 46px; 7 | } 8 | -------------------------------------------------------------------------------- /apps/rtk-query/src/pages/UserPage/UserPage.module.css: -------------------------------------------------------------------------------- 1 | .userPage { 2 | --page-gradient-color: #b8a661; 3 | 4 | display: flex; 5 | flex-direction: column; 6 | gap: 24px; 7 | } 8 | -------------------------------------------------------------------------------- /apps/rtk-query/src/shared/components/Card/Card.module.css: -------------------------------------------------------------------------------- 1 | .card { 2 | display: flex; 3 | flex-direction: column; 4 | padding: 8px; 5 | background: var(--color-bg-card); 6 | } 7 | -------------------------------------------------------------------------------- /apps/tanstack-query-zustand/README.md: -------------------------------------------------------------------------------- 1 | UI for Musicfun app without libs 2 | 3 | TODO: 4 | [] Add common components for TrackOverview and PlaylistOverview 5 | [] Refactor DropdownMenu 6 | -------------------------------------------------------------------------------- /apps/tanstack-query-zustand/src/assets/img/no-cover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/it-incubator/musicfun-react-all-stacks/HEAD/apps/tanstack-query-zustand/src/assets/img/no-cover.png -------------------------------------------------------------------------------- /apps/ui-vanilla/src/pages/PlaylistPage/PlaylistPage.module.css: -------------------------------------------------------------------------------- 1 | .playlistPage { 2 | --page-gradient-color: #adbf22; 3 | } 4 | 5 | .playlistOverview { 6 | margin-bottom: 46px; 7 | } 8 | -------------------------------------------------------------------------------- /apps/ui-vanilla/src/pages/UserPage/UserPage.module.css: -------------------------------------------------------------------------------- 1 | .userPage { 2 | --page-gradient-color: #b8a661; 3 | 4 | display: flex; 5 | flex-direction: column; 6 | gap: 24px; 7 | } 8 | -------------------------------------------------------------------------------- /apps/ui-vanilla/src/shared/components/Card/Card.module.css: -------------------------------------------------------------------------------- 1 | .card { 2 | display: flex; 3 | flex-direction: column; 4 | padding: 8px; 5 | background: var(--color-bg-card); 6 | } 7 | -------------------------------------------------------------------------------- /apps/ui-vanilla/src/shared/fonts/lato-v24-latin-700.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/it-incubator/musicfun-react-all-stacks/HEAD/apps/ui-vanilla/src/shared/fonts/lato-v24-latin-700.woff2 -------------------------------------------------------------------------------- /apps/ui-vanilla/src/shared/fonts/lato-v24-latin-900.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/it-incubator/musicfun-react-all-stacks/HEAD/apps/ui-vanilla/src/shared/fonts/lato-v24-latin-900.woff2 -------------------------------------------------------------------------------- /youtube/rtk-query/lesson1/src/features/playlists/ui/PlaylistItem/PlaylistCover/PlaylistCover.module.css: -------------------------------------------------------------------------------- 1 | .cover { 2 | width: 240px; 3 | height: 240px; 4 | object-fit: cover; 5 | } 6 | -------------------------------------------------------------------------------- /youtube/tanstack-query-router-fsd/lesson1/src/shared/config/api-config.ts: -------------------------------------------------------------------------------- 1 | export const baseUrl = import.meta.env.VITE_BASE_URL 2 | export const apiKey = import.meta.env.VITE_API_KEY 3 | -------------------------------------------------------------------------------- /apps/tanstack-query-zustand/src/pages/common/index.ts: -------------------------------------------------------------------------------- 1 | export * from './ContentList' 2 | export * from './PageWrapper' 3 | export * from './SearchTextField' 4 | export * from './SortSelect' 5 | -------------------------------------------------------------------------------- /apps/ui-vanilla/src/app/App.tsx: -------------------------------------------------------------------------------- 1 | import { Routing } from './routing' 2 | 3 | export const App = () => { 4 | return ( 5 | <> 6 | 7 | 8 | ) 9 | } 10 | -------------------------------------------------------------------------------- /experiment-apps/musicfun-tanstack-query-small-example/tsr.config.json: -------------------------------------------------------------------------------- 1 | { 2 | "routesDirectory": "./src/app/routes", 3 | "generatedRouteTree": "./src/app/routes/routeTree.gen.ts" 4 | } 5 | -------------------------------------------------------------------------------- /youtube/tanstack-query-router-fsd/lesson1/src/shared/api/keys-factories/auth-keys-factory.ts: -------------------------------------------------------------------------------- 1 | export const authKeys = { 2 | all: ['auth'], 3 | me: () => [...authKeys.all, 'me'], 4 | } 5 | -------------------------------------------------------------------------------- /apps/react-effector-fsd/src/features/auth/model/user.types.ts: -------------------------------------------------------------------------------- 1 | import type { components } from '@/shared/api/schema.ts' 2 | 3 | export type User = components['schemas']['GetMeOutput'] | null 4 | -------------------------------------------------------------------------------- /apps/react-effector-fsd/src/shared/components/Card/Card.module.css: -------------------------------------------------------------------------------- 1 | .card { 2 | display: flex; 3 | flex-direction: column; 4 | padding: 8px; 5 | background: var(--color-bg-card); 6 | } 7 | -------------------------------------------------------------------------------- /apps/tanstack-query-zustand/src/assets/img/avatar-default.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/it-incubator/musicfun-react-all-stacks/HEAD/apps/tanstack-query-zustand/src/assets/img/avatar-default.png -------------------------------------------------------------------------------- /apps/tanstack-query-zustand/src/features/tags/index.ts: -------------------------------------------------------------------------------- 1 | export { MOCK_5_HASHTAGS, MOCK_HASHTAGS } from './api/tags-api' 2 | export { useTags } from './api/use-tags.query' 3 | export * from './ui' 4 | -------------------------------------------------------------------------------- /apps/tanstack-query-zustand/src/shared/utils/validators/isNotEmptyArray.ts: -------------------------------------------------------------------------------- 1 | export function isNotEmptyArray(array?: unknown[]): array is unknown[] { 2 | return !!array && array.length > 0 3 | } 4 | -------------------------------------------------------------------------------- /apps/ui-vanilla/src/shared/fonts/lato-v24-latin-regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/it-incubator/musicfun-react-all-stacks/HEAD/apps/ui-vanilla/src/shared/fonts/lato-v24-latin-regular.woff2 -------------------------------------------------------------------------------- /experiment-apps/musicfun-tanstack-query-orval-small-example/tsr.config.json: -------------------------------------------------------------------------------- 1 | { 2 | "routesDirectory": "./src/app/routes", 3 | "generatedRouteTree": "./src/app/routes/routeTree.gen.ts" 4 | } 5 | -------------------------------------------------------------------------------- /apps/react-effector-fsd/src/features/auth/index.ts: -------------------------------------------------------------------------------- 1 | export { getOauthRedirectUrl } from './model/auth-api.types' 2 | export { $me, loginFx, logoutFx } from './model/model.ts' 3 | export * from './ui' 4 | -------------------------------------------------------------------------------- /apps/rtk-query/README.md: -------------------------------------------------------------------------------- 1 | TODO: 2 | [] Add common components for TrackOverview and PlaylistOverview 3 | [] Refactor autocomplete (Headless UI) 4 | [] Errors handling 5 | [] Infinity scroll for tracks 6 | -------------------------------------------------------------------------------- /apps/rtk-query/src/shared/assets/fonts/lato-v24-latin-700.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/it-incubator/musicfun-react-all-stacks/HEAD/apps/rtk-query/src/shared/assets/fonts/lato-v24-latin-700.woff2 -------------------------------------------------------------------------------- /apps/rtk-query/src/shared/assets/fonts/lato-v24-latin-900.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/it-incubator/musicfun-react-all-stacks/HEAD/apps/rtk-query/src/shared/assets/fonts/lato-v24-latin-900.woff2 -------------------------------------------------------------------------------- /apps/tanstack-query-zustand/src/pages/PlaylistPage/PlaylistPage.module.css: -------------------------------------------------------------------------------- 1 | .playlistPage { 2 | --page-gradient-color: #adbf22; 3 | } 4 | 5 | .playlistOverview { 6 | margin-bottom: 46px; 7 | } 8 | -------------------------------------------------------------------------------- /apps/tanstack-query-zustand/src/pages/UserPage/UserPage.module.css: -------------------------------------------------------------------------------- 1 | .userPage { 2 | --page-gradient-color: #b8a661; 3 | 4 | display: flex; 5 | flex-direction: column; 6 | gap: 24px; 7 | } 8 | -------------------------------------------------------------------------------- /apps/tanstack-query-zustand/src/shared/components/Card/Card.module.css: -------------------------------------------------------------------------------- 1 | .card { 2 | display: flex; 3 | flex-direction: column; 4 | padding: 8px; 5 | background: var(--color-bg-card); 6 | } 7 | -------------------------------------------------------------------------------- /apps/tanstack-query-zustand/src/shared/components/CoverImage/CoverImage.styles.module.scss: -------------------------------------------------------------------------------- 1 | .coverImage { 2 | width: 100%; 3 | height: 100%; 4 | object-fit: cover; 5 | display: block; 6 | } 7 | -------------------------------------------------------------------------------- /experiment-apps/musicfun-tanstack-query-small-example/src/features/playlists/add-playlist-form/add-playlist-form.module.css: -------------------------------------------------------------------------------- 1 | .form { 2 | border-bottom: 1px solid grey; 3 | padding: 10px; 4 | } 5 | -------------------------------------------------------------------------------- /experiment-apps/musicfun-tanstack-query-small-example/src/shared/config/api.config.ts: -------------------------------------------------------------------------------- 1 | export const apiBaseUrl = import.meta.env.VITE_BASE_URL 2 | export const apiKey = import.meta.env.VITE_API_KEY 3 | -------------------------------------------------------------------------------- /apps/react-effector-fsd/src/shared/fonts/lato-v24-latin-700.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/it-incubator/musicfun-react-all-stacks/HEAD/apps/react-effector-fsd/src/shared/fonts/lato-v24-latin-700.woff2 -------------------------------------------------------------------------------- /apps/react-effector-fsd/src/shared/fonts/lato-v24-latin-900.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/it-incubator/musicfun-react-all-stacks/HEAD/apps/react-effector-fsd/src/shared/fonts/lato-v24-latin-900.woff2 -------------------------------------------------------------------------------- /apps/reatom/src/pages/MainPage/MainPage.module.css: -------------------------------------------------------------------------------- 1 | .mainPage { 2 | display: flex; 3 | flex-direction: column; 4 | gap: 32px; 5 | } 6 | 7 | .artistsList { 8 | --list-gap: 24px; 9 | } 10 | -------------------------------------------------------------------------------- /apps/rtk-query/src/pages/MainPage/MainPage.module.css: -------------------------------------------------------------------------------- 1 | .mainPage { 2 | display: flex; 3 | flex-direction: column; 4 | gap: 32px; 5 | } 6 | 7 | .artistsList { 8 | --list-gap: 24px; 9 | } 10 | -------------------------------------------------------------------------------- /apps/rtk-query/src/shared/assets/fonts/lato-v24-latin-regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/it-incubator/musicfun-react-all-stacks/HEAD/apps/rtk-query/src/shared/assets/fonts/lato-v24-latin-regular.woff2 -------------------------------------------------------------------------------- /apps/rtk-query/src/shared/assets/images/no-cover-placeholder.avif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/it-incubator/musicfun-react-all-stacks/HEAD/apps/rtk-query/src/shared/assets/images/no-cover-placeholder.avif -------------------------------------------------------------------------------- /apps/tanstack-query-zustand/src/assets/img/track-default-cover.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/it-incubator/musicfun-react-all-stacks/HEAD/apps/tanstack-query-zustand/src/assets/img/track-default-cover.jpg -------------------------------------------------------------------------------- /apps/ui-vanilla/src/pages/MainPage/MainPage.module.css: -------------------------------------------------------------------------------- 1 | .mainPage { 2 | display: flex; 3 | flex-direction: column; 4 | gap: 32px; 5 | } 6 | 7 | .artistsList { 8 | --list-gap: 24px; 9 | } 10 | -------------------------------------------------------------------------------- /experiment-apps/musicfun-tanstack-query-orval-small-example/src/features/playlists/add-playlist-form/add-playlist-form.module.css: -------------------------------------------------------------------------------- 1 | .form { 2 | border-bottom: 1px solid grey; 3 | padding: 10px; 4 | } 5 | -------------------------------------------------------------------------------- /experiment-apps/musicfun-tanstack-query-orval-small-example/src/shared/config/api.config.ts: -------------------------------------------------------------------------------- 1 | export const apiBaseUrl = import.meta.env.VITE_BASE_URL 2 | export const apiKey = import.meta.env.VITE_API_KEY 3 | -------------------------------------------------------------------------------- /youtube/rtk-query/lesson1/.env: -------------------------------------------------------------------------------- 1 | VITE_BASE_URL=https://musicfun.it-incubator.app/api/1.0 2 | VITE_DOMAIN_ADDRESS=http://localhost:5173 3 | VITE_SOCKET_URL=wss://musicfun.it-incubator.app 4 | VITE_API_KEY= 5 | -------------------------------------------------------------------------------- /apps/react-effector-fsd/src/shared/fonts/lato-v24-latin-regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/it-incubator/musicfun-react-all-stacks/HEAD/apps/react-effector-fsd/src/shared/fonts/lato-v24-latin-regular.woff2 -------------------------------------------------------------------------------- /apps/rtk-query/src/features/playlists/ui/index.ts: -------------------------------------------------------------------------------- 1 | export * from './CreateEditPlaylistModal' 2 | export * from './PlaylistCard' 3 | export * from './PlaylistCardSkeleton' 4 | export * from './PlaylistOverview' 5 | -------------------------------------------------------------------------------- /apps/rtk-query/src/player/utils/index.ts: -------------------------------------------------------------------------------- 1 | export { formatTime, parseTime } from './formatTime' 2 | export { shuffle, shuffleWithCurrentItem } from './shuffle' 3 | export { debounce, throttle } from './throttle' 4 | -------------------------------------------------------------------------------- /apps/tanstack-query-zustand/src/shared/fonts/lato-v24-latin-700.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/it-incubator/musicfun-react-all-stacks/HEAD/apps/tanstack-query-zustand/src/shared/fonts/lato-v24-latin-700.woff2 -------------------------------------------------------------------------------- /apps/tanstack-query-zustand/src/shared/fonts/lato-v24-latin-900.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/it-incubator/musicfun-react-all-stacks/HEAD/apps/tanstack-query-zustand/src/shared/fonts/lato-v24-latin-900.woff2 -------------------------------------------------------------------------------- /apps/rtk-query/src/shared/hooks/index.ts: -------------------------------------------------------------------------------- 1 | export * from './useAppDispatch' 2 | export * from './useAppSelector' 3 | export * from './useDebounce' 4 | export * from './useGetId' 5 | export * from './useGlobalLoading' 6 | -------------------------------------------------------------------------------- /experiment-apps/trelly-rtk/src/common/utils/index.ts: -------------------------------------------------------------------------------- 1 | export { createAppSlice } from "./createAppSlice" 2 | export { handleError } from "./handleError" 3 | export { isErrorWithMessage } from "./isErrorWithMessage" 4 | -------------------------------------------------------------------------------- /youtube/markup/vite.config.ts: -------------------------------------------------------------------------------- 1 | import react from '@vitejs/plugin-react' 2 | import { defineConfig } from 'vite' 3 | 4 | // https://vite.dev/config/ 5 | export default defineConfig({ 6 | plugins: [react()], 7 | }) 8 | -------------------------------------------------------------------------------- /youtube/rtk-query/lesson1/src/assets/images/default-playlist-cover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/it-incubator/musicfun-react-all-stacks/HEAD/youtube/rtk-query/lesson1/src/assets/images/default-playlist-cover.png -------------------------------------------------------------------------------- /youtube/tanstack-query-router-fsd/lesson1/src/shared/config/localstorage-keys.ts: -------------------------------------------------------------------------------- 1 | export const localStorageKeys = { 2 | refreshToken: 'musicfun-refresh-token', 3 | accessToken: 'musicfun-access-token', 4 | } 5 | -------------------------------------------------------------------------------- /apps/reatom/src/pages/UserPage/ui/UserTabs/TracksTab/TracksTab.module.css: -------------------------------------------------------------------------------- 1 | .uploadTrackButton { 2 | display: block; 3 | 4 | width: 328px; 5 | height: 54px; 6 | margin: 0 auto; 7 | margin-bottom: 24px; 8 | } 9 | -------------------------------------------------------------------------------- /apps/rtk-query/src/pages/UserPage/ui/UserTabs/TracksTab/TracksTab.module.css: -------------------------------------------------------------------------------- 1 | .uploadTrackButton { 2 | display: block; 3 | 4 | width: 328px; 5 | height: 54px; 6 | margin: 0 auto; 7 | margin-bottom: 24px; 8 | } 9 | -------------------------------------------------------------------------------- /apps/rtk-query/src/shared/hooks/useAppSelector.ts: -------------------------------------------------------------------------------- 1 | import { useSelector } from 'react-redux' 2 | 3 | import type { RootState } from '@/app/store' 4 | 5 | export const useAppSelector = useSelector.withTypes() 6 | -------------------------------------------------------------------------------- /apps/tanstack-query-zustand/src/pages/MainPage/MainPage.module.css: -------------------------------------------------------------------------------- 1 | .mainPage { 2 | display: flex; 3 | flex-direction: column; 4 | gap: 32px; 5 | } 6 | 7 | .artistsList { 8 | --list-gap: 24px; 9 | } 10 | -------------------------------------------------------------------------------- /apps/tanstack-query-zustand/src/shared/fonts/lato-v24-latin-regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/it-incubator/musicfun-react-all-stacks/HEAD/apps/tanstack-query-zustand/src/shared/fonts/lato-v24-latin-regular.woff2 -------------------------------------------------------------------------------- /architecture/microfrontends/root/src/main.tsx: -------------------------------------------------------------------------------- 1 | import { createRoot } from 'react-dom/client' 2 | import './index.css' 3 | import App from './App.tsx' 4 | 5 | createRoot(document.getElementById('root')!).render() 6 | -------------------------------------------------------------------------------- /experiment-apps/musicfun-tanstack-query-small-example/src/shared/db/localstorage-keys.ts: -------------------------------------------------------------------------------- 1 | export const localStorageKeys = { 2 | refreshToken: 'musicfun-refresh-token', 3 | accessToken: 'musicfun-access-token', 4 | } 5 | -------------------------------------------------------------------------------- /experiment-apps/trelly-rtk/src/common/styles/container.styles.ts: -------------------------------------------------------------------------------- 1 | import { SxProps } from "@mui/material" 2 | 3 | export const containerSx: SxProps = { 4 | display: "flex", 5 | justifyContent: "space-between", 6 | } 7 | -------------------------------------------------------------------------------- /youtube/rtk-query/lesson1/src/common/utils/trimToMaxLength.ts: -------------------------------------------------------------------------------- 1 | export function trimToMaxLength(str: string, maxLength = 100): string { 2 | return str.length > maxLength ? str.slice(0, maxLength - 3) + '...' : str 3 | } 4 | -------------------------------------------------------------------------------- /apps/reatom/src/pages/index.ts: -------------------------------------------------------------------------------- 1 | export * from './MainPage' 2 | export * from './PlaylistPage' 3 | export * from './PlaylistsPage' 4 | export * from './TrackPage' 5 | export * from './TracksPage' 6 | export * from './UserPage' 7 | -------------------------------------------------------------------------------- /apps/reatom/src/shared/config/config.ts: -------------------------------------------------------------------------------- 1 | export const API_BASE_URL = import.meta.env.VITE_API_BASE_URL 2 | export const API_KEY = import.meta.env.VITE_API_KEY 3 | export const CURRENT_APP_DOMAIN = import.meta.env.BASE_URL 4 | -------------------------------------------------------------------------------- /apps/rtk-query/src/features/tracks/ui/index.ts: -------------------------------------------------------------------------------- 1 | export * from './CreateEditTrackModal' 2 | export * from './TrackActions' 3 | export * from './TrackCard' 4 | export * from './TrackOverview' 5 | export * from './TracksTable' 6 | -------------------------------------------------------------------------------- /apps/rtk-query/src/pages/common/index.ts: -------------------------------------------------------------------------------- 1 | export * from './ui/ContentList' 2 | export * from './ui/PageWrapper' 3 | export * from './ui/SearchTags' 4 | export * from './ui/SearchTextField' 5 | export * from './ui/SortSelect' 6 | -------------------------------------------------------------------------------- /apps/rtk-query/src/shared/hooks/useAppDispatch.ts: -------------------------------------------------------------------------------- 1 | import { useDispatch } from 'react-redux' 2 | 3 | import type { AppDispatch } from '@/app/store' 4 | 5 | export const useAppDispatch = useDispatch.withTypes() 6 | -------------------------------------------------------------------------------- /apps/ui-vanilla/src/pages/UserPage/ui/UserTabs/TracksTab/TracksTab.module.css: -------------------------------------------------------------------------------- 1 | .uploadTrackButton { 2 | display: block; 3 | 4 | width: 328px; 5 | height: 54px; 6 | margin: 0 auto; 7 | margin-bottom: 24px; 8 | } 9 | -------------------------------------------------------------------------------- /experiment-apps/musicfun-tanstack-query-orval-small-example/src/shared/db/localstorage-keys.ts: -------------------------------------------------------------------------------- 1 | export const localStorageKeys = { 2 | refreshToken: 'musicfun-refresh-token', 3 | accessToken: 'musicfun-access-token', 4 | } 5 | -------------------------------------------------------------------------------- /experiment-apps/trelly-rtk/src/common/constants/constants.ts: -------------------------------------------------------------------------------- 1 | export const PAGE_SIZE = 4 2 | 3 | export const LOCALSTORAGE_KEYS = { 4 | refreshToken: "trelly-refresh-token", 5 | accessToken: "trelly-access-token", 6 | } 7 | -------------------------------------------------------------------------------- /packages/musicfun-api-sdk/src/common/types/common.types.ts: -------------------------------------------------------------------------------- 1 | export type Nullable = T | null 2 | 3 | export type Meta = { 4 | page: number 5 | pageSize: number 6 | totalCount: number 7 | pagesCount: number 8 | } 9 | -------------------------------------------------------------------------------- /youtube/tanstack-query-router-fsd/lesson1/src/shared/ui/pagination/pagination.module.css: -------------------------------------------------------------------------------- 1 | .container { 2 | display: flex; 3 | align-content: center; 4 | align-items: center; 5 | margin: 0 auto; 6 | gap: 40px; 7 | } 8 | -------------------------------------------------------------------------------- /apps/reatom/src/pages/UserPage/ui/UserTabs/PlaylistsTab/PlaylistsTab.module.css: -------------------------------------------------------------------------------- 1 | .createPlaylistButton { 2 | display: block; 3 | 4 | width: 328px; 5 | height: 54px; 6 | margin: 0 auto; 7 | margin-bottom: 24px; 8 | } 9 | -------------------------------------------------------------------------------- /apps/rtk-query/src/features/profile/config/empty-profile.ts: -------------------------------------------------------------------------------- 1 | import type { Profile } from '@/features/profile' 2 | 3 | export const emptyProfile: Profile = { 4 | avatar: null, 5 | fullName: { name: '', surname: '' }, 6 | } 7 | -------------------------------------------------------------------------------- /apps/rtk-query/src/pages/UserPage/ui/UserTabs/PlaylistsTab/PlaylistsTab.module.css: -------------------------------------------------------------------------------- 1 | .createPlaylistButton { 2 | display: block; 3 | 4 | width: 328px; 5 | height: 54px; 6 | margin: 0 auto; 7 | margin-bottom: 24px; 8 | } 9 | -------------------------------------------------------------------------------- /apps/rtk-query/src/pages/index.ts: -------------------------------------------------------------------------------- 1 | export * from './MainPage' 2 | export * from './PlaylistPage' 3 | export * from './PlaylistsPage' 4 | export * from './TrackPage' 5 | export * from './TracksPage' 6 | export * from './UserPage' 7 | -------------------------------------------------------------------------------- /apps/ui-vanilla/src/pages/UserPage/ui/UserTabs/PlaylistsTab/PlaylistsTab.module.css: -------------------------------------------------------------------------------- 1 | .createPlaylistButton { 2 | display: block; 3 | 4 | width: 328px; 5 | height: 54px; 6 | margin: 0 auto; 7 | margin-bottom: 24px; 8 | } 9 | -------------------------------------------------------------------------------- /apps/ui-vanilla/src/pages/index.ts: -------------------------------------------------------------------------------- 1 | export * from './MainPage' 2 | export * from './PlaylistPage' 3 | export * from './PlaylistsPage' 4 | export * from './TrackPage' 5 | export * from './TracksPage' 6 | export * from './UserPage' 7 | -------------------------------------------------------------------------------- /apps/rtk-query/src/features/profile/types/profile.type.ts: -------------------------------------------------------------------------------- 1 | export type FullName = { 2 | name: string 3 | surname: string 4 | } 5 | 6 | export type Profile = { 7 | fullName: FullName 8 | avatar: string | null 9 | } 10 | -------------------------------------------------------------------------------- /apps/tanstack-query-zustand/src/pages/UserPage/ui/UserTabs/TracksTab/TracksTab.module.css: -------------------------------------------------------------------------------- 1 | .uploadTrackButton { 2 | display: block; 3 | 4 | width: 328px; 5 | height: 54px; 6 | margin: 0 auto; 7 | margin-bottom: 24px; 8 | } 9 | -------------------------------------------------------------------------------- /experiment-apps/musicfun-tanstack-query-small-example/src/assets/img/no-cover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/it-incubator/musicfun-react-all-stacks/HEAD/experiment-apps/musicfun-tanstack-query-small-example/src/assets/img/no-cover.png -------------------------------------------------------------------------------- /youtube/rtk-query/lesson1/src/common/hooks/index.ts: -------------------------------------------------------------------------------- 1 | export { useDebounceValue } from './useDebounceValue.ts' 2 | export { useGlobalLoading } from './useGlobalLoading.ts' 3 | export { useInfiniteScroll } from './useInfiniteScroll.ts' 4 | -------------------------------------------------------------------------------- /apps/react-effector-fsd/src/shared/config/config.ts: -------------------------------------------------------------------------------- 1 | export const API_BASE_URL = import.meta.env.VITE_API_BASE_URL 2 | export const API_KEY = import.meta.env.VITE_API_KEY 3 | export const CURRENT_APP_DOMAIN = import.meta.env.VITE_BASE_URL 4 | -------------------------------------------------------------------------------- /apps/react-native-expo/app/(app)/tracks/tracks.tsx: -------------------------------------------------------------------------------- 1 | import { Text, View } from 'react-native' 2 | 3 | export default function Tracks() { 4 | return ( 5 | 6 | tracks 7 | 8 | ) 9 | } 10 | -------------------------------------------------------------------------------- /apps/reatom/src/shared/utils/validators/getType.ts: -------------------------------------------------------------------------------- 1 | // eslint-disable-next-line @typescript-eslint/no-explicit-any 2 | function getType(object: any) { 3 | return Object.prototype.toString.call(object) 4 | } 5 | 6 | export default getType 7 | -------------------------------------------------------------------------------- /experiment-apps/musicfun-tanstack-query-small-example/src/shared/ui/pagination/pagination.module.css: -------------------------------------------------------------------------------- 1 | .container { 2 | display: flex; 3 | align-content: center; 4 | align-items: center; 5 | margin: 0 auto; 6 | gap: 40px; 7 | } 8 | -------------------------------------------------------------------------------- /experiment-apps/trelly-rtk/src/common/utils/createAppSlice.ts: -------------------------------------------------------------------------------- 1 | import { asyncThunkCreator, buildCreateSlice } from "@reduxjs/toolkit" 2 | 3 | export const createAppSlice = buildCreateSlice({ creators: { asyncThunk: asyncThunkCreator } }) 4 | -------------------------------------------------------------------------------- /.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "singleQuote": true, 3 | "tabWidth": 2, 4 | "trailingComma": "es5", 5 | "bracketSameLine": true, 6 | "arrowParens": "always", 7 | "endOfLine": "auto", 8 | "printWidth": 100, 9 | "semi": false 10 | } 11 | -------------------------------------------------------------------------------- /apps/react-native-expo/app/(app)/library/library.tsx: -------------------------------------------------------------------------------- 1 | import { Text, View } from 'react-native' 2 | 3 | export default function Library() { 4 | return ( 5 | 6 | Library 7 | 8 | ) 9 | } 10 | -------------------------------------------------------------------------------- /apps/react-native-expo/features/auth/model/config/oauth.ts: -------------------------------------------------------------------------------- 1 | import * as AuthSession from 'expo-auth-session' 2 | 3 | const base = AuthSession.makeRedirectUri({ scheme: 'musicfun' }) 4 | export const REDIRECT_URI_EXPO = `${base}/oauth/callback` 5 | -------------------------------------------------------------------------------- /apps/reatom/src/pages/common/ContentList/ContentList.module.css: -------------------------------------------------------------------------------- 1 | .title { 2 | margin-bottom: 20px; 3 | } 4 | 5 | .list { 6 | display: flex; 7 | flex-wrap: wrap; 8 | gap: var(--list-gap, 8px); 9 | padding-bottom: 8px; 10 | } 11 | -------------------------------------------------------------------------------- /apps/tanstack-query-zustand/src/pages/index.ts: -------------------------------------------------------------------------------- 1 | export * from './MainPage' 2 | export * from './PlaylistPage' 3 | export * from './PlaylistsPage' 4 | export * from './TrackPage' 5 | export * from './TracksPage' 6 | export * from './UserPage' 7 | -------------------------------------------------------------------------------- /experiment-apps/musicfun-tanstack-query-orval-small-example/src/assets/img/no-cover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/it-incubator/musicfun-react-all-stacks/HEAD/experiment-apps/musicfun-tanstack-query-orval-small-example/src/assets/img/no-cover.png -------------------------------------------------------------------------------- /experiment-apps/musicfun-tanstack-query-orval-small-example/src/shared/ui/pagination/pagination.module.css: -------------------------------------------------------------------------------- 1 | .container { 2 | display: flex; 3 | align-content: center; 4 | align-items: center; 5 | margin: 0 auto; 6 | gap: 40px; 7 | } 8 | -------------------------------------------------------------------------------- /experiment-apps/trelly-rtk/src/common/hooks/useAppDispatch.ts: -------------------------------------------------------------------------------- 1 | import { useDispatch } from "react-redux" 2 | 3 | import type { AppDispatch } from "@/app/model/store.ts" 4 | 5 | export const useAppDispatch = useDispatch.withTypes() 6 | -------------------------------------------------------------------------------- /experiment-apps/trelly-rtk/src/common/hooks/useAppSelector.ts: -------------------------------------------------------------------------------- 1 | import { useSelector } from "react-redux" 2 | 3 | import type { RootState } from "@/app/model/store.ts" 4 | 5 | export const useAppSelector = useSelector.withTypes() 6 | -------------------------------------------------------------------------------- /apps/reatom/src/layout/Header/Header.module.css: -------------------------------------------------------------------------------- 1 | .header { 2 | display: flex; 3 | grid-area: header; 4 | align-items: center; 5 | justify-content: space-between; 6 | 7 | height: var(--header-height); 8 | padding: 0 32px; 9 | } 10 | -------------------------------------------------------------------------------- /apps/reatom/src/shared/utils/validators/isUndefined.ts: -------------------------------------------------------------------------------- 1 | import getType from './getType' 2 | 3 | function isUndefined(value: unknown): value is undefined { 4 | return getType(value) === '[object Undefined]' 5 | } 6 | 7 | export default isUndefined 8 | -------------------------------------------------------------------------------- /apps/rtk-query/src/pages/common/ui/ContentList/ContentList.module.css: -------------------------------------------------------------------------------- 1 | .title { 2 | margin-bottom: 20px; 3 | } 4 | 5 | .list { 6 | display: flex; 7 | flex-wrap: wrap; 8 | gap: var(--list-gap, 8px); 9 | padding-bottom: 8px; 10 | } 11 | -------------------------------------------------------------------------------- /apps/ui-vanilla/src/pages/common/ContentList/ContentList.module.css: -------------------------------------------------------------------------------- 1 | .title { 2 | margin-bottom: 20px; 3 | } 4 | 5 | .list { 6 | display: flex; 7 | flex-wrap: wrap; 8 | gap: var(--list-gap, 8px); 9 | padding-bottom: 8px; 10 | } 11 | -------------------------------------------------------------------------------- /architecture/microfrontends/player/src/App.tsx: -------------------------------------------------------------------------------- 1 | import { useState } from 'react' 2 | import './App.css' 3 | 4 | function App() { 5 | const [count, setCount] = useState(0) 6 | 7 | return <>player 8 | } 9 | 10 | export default App 11 | -------------------------------------------------------------------------------- /apps/react-effector-fsd/src/features/auth/api/logout.ts: -------------------------------------------------------------------------------- 1 | import { api } from '@/shared/api/client' 2 | 3 | export const logoutApi = async (refreshToken: string) => { 4 | await api().POST('/auth/logout', { 5 | body: { refreshToken }, 6 | }) 7 | } 8 | -------------------------------------------------------------------------------- /apps/react-native-expo/app/(app)/playlists/playlists.tsx: -------------------------------------------------------------------------------- 1 | import { Text, View } from 'react-native' 2 | 3 | export default function Playlists() { 4 | return ( 5 | 6 | all-playlist 7 | 8 | ) 9 | } 10 | -------------------------------------------------------------------------------- /apps/rtk-query/src/shared/utils/get-image-by-type.ts: -------------------------------------------------------------------------------- 1 | import type { Images, ImageType } from '@/shared/types' 2 | 3 | export const getImageByType = (images: Images, type: ImageType) => { 4 | return images.main.find((image) => image.type === type) 5 | } 6 | -------------------------------------------------------------------------------- /apps/ui-vanilla/src/layout/Header/Header.module.css: -------------------------------------------------------------------------------- 1 | .header { 2 | display: flex; 3 | grid-area: header; 4 | align-items: center; 5 | justify-content: space-between; 6 | 7 | height: var(--header-height); 8 | padding: 0 32px; 9 | } 10 | -------------------------------------------------------------------------------- /experiment-apps/musicfun-tanstack-query-small-example/src/app/providers/web-socket-provider.tsx: -------------------------------------------------------------------------------- 1 | import type { ReactNode } from 'react' 2 | 3 | export function WebSocketProvider({ children }: { children: ReactNode }) { 4 | return <>{children} 5 | } 6 | -------------------------------------------------------------------------------- /apps/react-native-expo/declarations.d.ts: -------------------------------------------------------------------------------- 1 | declare module '*.svg' { 2 | import type { FunctionComponent } from 'react' 3 | import type { SvgProps } from 'react-native-svg' 4 | const content: FunctionComponent 5 | export default content 6 | } 7 | -------------------------------------------------------------------------------- /apps/reatom/src/pages/PlaylistPage/ui/ControlPanel/ControlPanel.module.css: -------------------------------------------------------------------------------- 1 | .box { 2 | display: flex; 3 | gap: 24px; 4 | align-items: center; 5 | margin-bottom: 16px; 6 | } 7 | 8 | .playButton { 9 | width: 80px; 10 | height: 80px; 11 | } 12 | -------------------------------------------------------------------------------- /apps/reatom/src/pages/TrackPage/ui/ControlPanel/ControlPanel.module.css: -------------------------------------------------------------------------------- 1 | .box { 2 | display: flex; 3 | gap: 24px; 4 | align-items: center; 5 | margin-bottom: 16px; 6 | } 7 | 8 | .playButton { 9 | width: 80px; 10 | height: 80px; 11 | } 12 | -------------------------------------------------------------------------------- /apps/rtk-query/src/pages/TrackPage/ui/ControlPanel/ControlPanel.module.css: -------------------------------------------------------------------------------- 1 | .box { 2 | display: flex; 3 | gap: 24px; 4 | align-items: center; 5 | margin-bottom: 16px; 6 | } 7 | 8 | .playButton { 9 | width: 80px; 10 | height: 80px; 11 | } 12 | -------------------------------------------------------------------------------- /apps/tanstack-query-zustand/src/pages/common/ContentList/ContentList.module.css: -------------------------------------------------------------------------------- 1 | .title { 2 | margin-bottom: 20px; 3 | } 4 | 5 | .list { 6 | display: flex; 7 | flex-wrap: wrap; 8 | gap: var(--list-gap, 8px); 9 | padding-bottom: 8px; 10 | } 11 | -------------------------------------------------------------------------------- /apps/tanstack-query-zustand/src/shared/utils/validators/getType.ts: -------------------------------------------------------------------------------- 1 | // eslint-disable-next-line @typescript-eslint/no-explicit-any 2 | function getType(object: any) { 3 | return Object.prototype.toString.call(object) 4 | } 5 | 6 | export default getType 7 | -------------------------------------------------------------------------------- /experiment-apps/musicfun-tanstack-query-orval-small-example/src/app/providers/web-socket-provider.tsx: -------------------------------------------------------------------------------- 1 | import type { ReactNode } from 'react' 2 | 3 | export function WebSocketProvider({ children }: { children: ReactNode }) { 4 | return <>{children} 5 | } 6 | -------------------------------------------------------------------------------- /youtube/tanstack-query-router-fsd/lesson1/src/app/layouts/root-layout.module.css: -------------------------------------------------------------------------------- 1 | .container { 2 | padding-top: 10px; 3 | max-width: 900px; 4 | margin: 0 auto; 5 | display: flex; 6 | flex-direction: row; 7 | justify-content: space-between; 8 | } 9 | -------------------------------------------------------------------------------- /apps/rtk-query/src/features/playlists/api/index.ts: -------------------------------------------------------------------------------- 1 | export * from './playlistsApi' 2 | export * from './playlistsApi.types' 3 | export { MOCK_PLAYLISTS } from '@/features/playlists/api/mocks.ts' 4 | export { MOCK_PLAYLIST } from '@/features/playlists/api/mocks.ts' 5 | -------------------------------------------------------------------------------- /apps/rtk-query/src/pages/PlaylistPage/ui/ControlPanel/ControlPanel.module.css: -------------------------------------------------------------------------------- 1 | .box { 2 | display: flex; 3 | gap: 24px; 4 | align-items: center; 5 | margin-bottom: 16px; 6 | } 7 | 8 | .playButton { 9 | width: 80px; 10 | height: 80px; 11 | } 12 | -------------------------------------------------------------------------------- /apps/tanstack-query-zustand/src/layout/Header/Header.module.css: -------------------------------------------------------------------------------- 1 | .header { 2 | display: flex; 3 | grid-area: header; 4 | align-items: center; 5 | justify-content: space-between; 6 | 7 | height: var(--header-height); 8 | padding: 0 32px; 9 | } 10 | -------------------------------------------------------------------------------- /apps/tanstack-query-zustand/src/shared/utils/validators/isNumber.ts: -------------------------------------------------------------------------------- 1 | import getType from './getType' 2 | 3 | function isNumber(value: unknown): value is T { 4 | return getType(value) === '[object Number]' 5 | } 6 | 7 | export default isNumber 8 | -------------------------------------------------------------------------------- /apps/ui-vanilla/src/pages/PlaylistPage/ui/ControlPanel/ControlPanel.module.css: -------------------------------------------------------------------------------- 1 | .box { 2 | display: flex; 3 | gap: 24px; 4 | align-items: center; 5 | margin-bottom: 16px; 6 | } 7 | 8 | .playButton { 9 | width: 80px; 10 | height: 80px; 11 | } 12 | -------------------------------------------------------------------------------- /apps/ui-vanilla/src/pages/TrackPage/ui/ControlPanel/ControlPanel.module.css: -------------------------------------------------------------------------------- 1 | .box { 2 | display: flex; 3 | gap: 24px; 4 | align-items: center; 5 | margin-bottom: 16px; 6 | } 7 | 8 | .playButton { 9 | width: 80px; 10 | height: 80px; 11 | } 12 | -------------------------------------------------------------------------------- /experiment-apps/musicfun-tanstack-query-small-example/src/features/playlists/playlist-cover/playlist-cover.module.css: -------------------------------------------------------------------------------- 1 | .container { 2 | margin-bottom: 30px; 3 | } 4 | 5 | .cover { 6 | width: 100px; 7 | height: 100px; 8 | object-fit: cover; 9 | } 10 | -------------------------------------------------------------------------------- /experiment-apps/trelly-rtk/src/features/auth/ui/Login/Login.module.css: -------------------------------------------------------------------------------- 1 | .wrapper { 2 | width: 500px; 3 | margin: 0 auto; 4 | text-align: center; 5 | } 6 | 7 | .container { 8 | display: flex; 9 | flex-direction: column; 10 | gap: 20px; 11 | } 12 | -------------------------------------------------------------------------------- /apps/react-native-expo/shared/consts/key-storage/key-storage.ts: -------------------------------------------------------------------------------- 1 | export const KEY_STORAGE = { 2 | RQ_CACHE: 'musicfun-rq-cache', 3 | AUTH_TOKEN: 'musicfun-auth-token', 4 | ACCESS_TOKEN: 'musicfun-access-token', 5 | REFRESH_TOKEN: 'musicfun-refresh-token', 6 | } 7 | -------------------------------------------------------------------------------- /apps/reatom/src/features/tracks/ui/TrackRow/TrackRow.module.css: -------------------------------------------------------------------------------- 1 | .playing { 2 | color: var(--color-accent); 3 | } 4 | 5 | .progress { 6 | width: 183px; 7 | } 8 | 9 | .actions { 10 | display: flex; 11 | gap: 12px; 12 | align-items: center; 13 | } 14 | -------------------------------------------------------------------------------- /apps/rtk-query/src/features/tracks/ui/TrackRow/TrackRow.module.css: -------------------------------------------------------------------------------- 1 | .playing { 2 | color: var(--color-accent); 3 | } 4 | 5 | .progress { 6 | width: 183px; 7 | } 8 | 9 | .actions { 10 | display: flex; 11 | gap: 12px; 12 | align-items: center; 13 | } 14 | -------------------------------------------------------------------------------- /apps/tanstack-query-zustand/src/shared/utils/validators/isUndefined.ts: -------------------------------------------------------------------------------- 1 | import getType from './getType' 2 | 3 | function isUndefined(value: unknown): value is undefined { 4 | return getType(value) === '[object Undefined]' 5 | } 6 | 7 | export default isUndefined 8 | -------------------------------------------------------------------------------- /experiment-apps/musicfun-tanstack-query-orval-small-example/src/features/playlists/playlist-cover/playlist-cover.module.css: -------------------------------------------------------------------------------- 1 | .container { 2 | margin-bottom: 30px; 3 | } 4 | 5 | .cover { 6 | width: 100px; 7 | height: 100px; 8 | object-fit: cover; 9 | } 10 | -------------------------------------------------------------------------------- /experiment-apps/musicfun-tanstack-query-small-example/src/app/layouts/root-layout.module.css: -------------------------------------------------------------------------------- 1 | .container { 2 | padding-top: 10px; 3 | max-width: 900px; 4 | margin: 0 auto; 5 | display: flex; 6 | flex-direction: row; 7 | justify-content: space-between; 8 | } 9 | -------------------------------------------------------------------------------- /experiment-apps/trelly-rtk/src/common/utils/isTokens.ts: -------------------------------------------------------------------------------- 1 | export const isTokens = (data: unknown): data is { accessToken: string; refreshToken: string } => { 2 | return typeof data === "object" && data !== null && "accessToken" in data && "refreshToken" in data 3 | } 4 | -------------------------------------------------------------------------------- /packages/musicfun-api-sdk/src/common/types/enums.ts: -------------------------------------------------------------------------------- 1 | export const CurrentUserReaction = { 2 | Like: 1, 3 | Dislike: -1, 4 | NotResponding: 0, 5 | } as const 6 | 7 | export type CurrentUserReaction = (typeof CurrentUserReaction)[keyof typeof CurrentUserReaction] 8 | -------------------------------------------------------------------------------- /youtube/rtk-query/lesson1/src/common/utils/isTokens.ts: -------------------------------------------------------------------------------- 1 | export const isTokens = (data: unknown): data is { accessToken: string; refreshToken: string } => { 2 | return typeof data === 'object' && data !== null && 'accessToken' in data && 'refreshToken' in data 3 | } 4 | -------------------------------------------------------------------------------- /apps/react-effector-fsd/src/widgets/layout/ui/Header/Header.module.css: -------------------------------------------------------------------------------- 1 | .header { 2 | display: flex; 3 | grid-area: header; 4 | align-items: center; 5 | justify-content: space-between; 6 | 7 | height: var(--header-height); 8 | padding: 0 32px; 9 | } 10 | -------------------------------------------------------------------------------- /apps/reatom/src/app/App.tsx: -------------------------------------------------------------------------------- 1 | import { ToastContainer } from 'react-toastify' 2 | 3 | import { Routing } from './routing' 4 | 5 | export const App = () => { 6 | return ( 7 | <> 8 | 9 | 10 | 11 | ) 12 | } 13 | -------------------------------------------------------------------------------- /apps/reatom/src/pages/common/SortSelect/SortSelect.module.css: -------------------------------------------------------------------------------- 1 | .selectLabel { 2 | display: flex; 3 | flex-shrink: 0; 4 | gap: 8px; 5 | align-items: center; 6 | 7 | width: 210px; 8 | } 9 | 10 | .select { 11 | flex-shrink: 0; 12 | width: 145px; 13 | } 14 | -------------------------------------------------------------------------------- /apps/tanstack-query-zustand/src/pages/TrackPage/ui/ControlPanel/ControlPanel.module.css: -------------------------------------------------------------------------------- 1 | .box { 2 | display: flex; 3 | gap: 24px; 4 | align-items: center; 5 | margin-bottom: 16px; 6 | } 7 | 8 | .playButton { 9 | width: 80px; 10 | height: 80px; 11 | } 12 | -------------------------------------------------------------------------------- /apps/ui-vanilla/src/features/tracks/ui/TrackRow/TrackRow.module.css: -------------------------------------------------------------------------------- 1 | .playing { 2 | color: var(--color-accent); 3 | } 4 | 5 | .progress { 6 | width: 183px; 7 | } 8 | 9 | .actions { 10 | display: flex; 11 | gap: 12px; 12 | align-items: center; 13 | } 14 | -------------------------------------------------------------------------------- /experiment-apps/musicfun-tanstack-query-orval-small-example/src/app/layouts/root-layout.module.css: -------------------------------------------------------------------------------- 1 | .container { 2 | padding-top: 10px; 3 | max-width: 900px; 4 | margin: 0 auto; 5 | display: flex; 6 | flex-direction: row; 7 | justify-content: space-between; 8 | } 9 | -------------------------------------------------------------------------------- /youtube/tanstack-query-router-fsd/lesson1/src/app/routes/__root.tsx: -------------------------------------------------------------------------------- 1 | import { createRootRoute } from '@tanstack/react-router' 2 | 3 | import { RootLayout } from '../layouts/root-layout.tsx' 4 | 5 | export const Route = createRootRoute({ 6 | component: RootLayout, 7 | }) 8 | -------------------------------------------------------------------------------- /apps/reatom/src/layout/Sidebar/Sidebar.module.css: -------------------------------------------------------------------------------- 1 | .sidebar { 2 | overflow-y: auto; 3 | display: flex; 4 | grid-area: sidebar; 5 | flex-direction: column; 6 | 7 | height: calc(100vh - var(--header-height) - var(--player-height)); 8 | padding: 0 30px; 9 | } 10 | -------------------------------------------------------------------------------- /apps/reatom/src/layout/Sidebar/Sidebar.tsx: -------------------------------------------------------------------------------- 1 | import { MenuLinks } from './MenuLinks' 2 | import s from './Sidebar.module.css' 3 | 4 | export const Sidebar = () => { 5 | return ( 6 |
7 | 8 |
9 | ) 10 | } 11 | -------------------------------------------------------------------------------- /apps/rtk-query/src/shared/utils/index.ts: -------------------------------------------------------------------------------- 1 | export * from './build-query-string' 2 | export * from './convert-file-to-base-64' 3 | export * from './get-image-by-type' 4 | export * from './get-user-initials' 5 | export * from './set-locale' 6 | export * from './show-error-toast' 7 | -------------------------------------------------------------------------------- /apps/ui-vanilla/src/pages/common/SortSelect/SortSelect.module.css: -------------------------------------------------------------------------------- 1 | .selectLabel { 2 | display: flex; 3 | flex-shrink: 0; 4 | gap: 8px; 5 | align-items: center; 6 | 7 | width: 210px; 8 | } 9 | 10 | .select { 11 | flex-shrink: 0; 12 | width: 145px; 13 | } 14 | -------------------------------------------------------------------------------- /experiment-apps/trelly-rtk/src/app/ui/App.module.css: -------------------------------------------------------------------------------- 1 | .app { 2 | display: flex; 3 | flex-direction: column; 4 | width: 100vw; 5 | } 6 | 7 | .circularProgressContainer { 8 | position: fixed; 9 | top: 30%; 10 | text-align: center; 11 | width: 100%; 12 | } 13 | -------------------------------------------------------------------------------- /apps/rtk-query/src/layout/Sidebar/Sidebar.module.css: -------------------------------------------------------------------------------- 1 | .sidebar { 2 | overflow-y: auto; 3 | display: flex; 4 | grid-area: sidebar; 5 | flex-direction: column; 6 | 7 | height: calc(100vh - var(--header-height) - var(--player-height)); 8 | padding: 0 30px; 9 | } 10 | -------------------------------------------------------------------------------- /apps/rtk-query/src/layout/Sidebar/Sidebar.tsx: -------------------------------------------------------------------------------- 1 | import { MenuLinks } from './MenuLinks' 2 | import s from './Sidebar.module.css' 3 | 4 | export const Sidebar = () => { 5 | return ( 6 |
7 | 8 |
9 | ) 10 | } 11 | -------------------------------------------------------------------------------- /apps/ui-vanilla/src/layout/Sidebar/Sidebar.module.css: -------------------------------------------------------------------------------- 1 | .sidebar { 2 | overflow-y: auto; 3 | display: flex; 4 | grid-area: sidebar; 5 | flex-direction: column; 6 | 7 | height: calc(100vh - var(--header-height) - var(--player-height)); 8 | padding: 0 30px; 9 | } 10 | -------------------------------------------------------------------------------- /apps/ui-vanilla/src/layout/Sidebar/Sidebar.tsx: -------------------------------------------------------------------------------- 1 | import { MenuLinks } from './MenuLinks' 2 | import s from './Sidebar.module.css' 3 | 4 | export const Sidebar = () => { 5 | return ( 6 |
7 | 8 |
9 | ) 10 | } 11 | -------------------------------------------------------------------------------- /experiment-apps/trelly-rtk/src/features/tasks/ui/Tasks/TaskItem/TaskItem.styles.ts: -------------------------------------------------------------------------------- 1 | import { SxProps } from "@mui/material" 2 | 3 | export const getListItemSx = (isDone: boolean): SxProps => ({ 4 | p: 0, 5 | justifyContent: "space-between", 6 | opacity: isDone ? 0.5 : 1, 7 | }) 8 | -------------------------------------------------------------------------------- /apps/nextjs/src/features/auth/ui/Login/Login.tsx: -------------------------------------------------------------------------------- 1 | import { authApi } from '@/shared/api/auth-api' 2 | import { redirectAfterOauthUri } from '@/shared/api/base' 3 | 4 | export const Login = () => { 5 | return Login via APIHUB 6 | } 7 | -------------------------------------------------------------------------------- /apps/react-native-expo/features/auth/model/utils/getOauthRedirectUrl.ts: -------------------------------------------------------------------------------- 1 | import { API_ROOT } from '@/shared/api/api-root/api-root' 2 | 3 | export const getOauthRedirectUrl = (redirectUrl: string) => 4 | `${API_ROOT}/auth/oauth-redirect?callbackUrl=${encodeURIComponent(redirectUrl)}` 5 | -------------------------------------------------------------------------------- /apps/reatom/src/pages/TrackPage/TrackPage.module.css: -------------------------------------------------------------------------------- 1 | .trackPage { 2 | --page-gradient-color: #9a3426; 3 | } 4 | 5 | .trackOverview { 6 | margin-bottom: 46px; 7 | } 8 | 9 | .title { 10 | margin-bottom: 18px; 11 | } 12 | 13 | .search { 14 | margin-bottom: 24px; 15 | } 16 | -------------------------------------------------------------------------------- /apps/reatom/src/pages/auth/OAuthRedirect/OAuthCallback.module.css: -------------------------------------------------------------------------------- 1 | .title { 2 | text-align: center; 3 | font-size: 250px; 4 | margin: 0; 5 | } 6 | 7 | .subtitle { 8 | text-align: center; 9 | font-size: 50px; 10 | margin: 0; 11 | text-transform: uppercase; 12 | } 13 | -------------------------------------------------------------------------------- /apps/reatom/src/shared/utils/validators/isValid.ts: -------------------------------------------------------------------------------- 1 | import isNull from './isNull' 2 | import isUndefined from './isUndefined' 3 | 4 | function isValid(value: T | null | undefined): value is T { 5 | return !isNull(value) && !isUndefined(value) 6 | } 7 | 8 | export default isValid 9 | -------------------------------------------------------------------------------- /apps/rtk-query/src/shared/utils/get-user-initials.ts: -------------------------------------------------------------------------------- 1 | import type { FullName } from '@/features/profile' 2 | 3 | export const getUserInitials = (fullName?: FullName, login?: string) => { 4 | return fullName?.name ? `${fullName.name[0]} ${fullName.surname[0]}` : (login?.[0] ?? '?') 5 | } 6 | -------------------------------------------------------------------------------- /apps/tanstack-query-zustand/src/app/App.tsx: -------------------------------------------------------------------------------- 1 | import { ToastContainer } from 'react-toastify' 2 | 3 | import { Routing } from './routing' 4 | 5 | export const App = () => { 6 | return ( 7 | <> 8 | 9 | 10 | 11 | ) 12 | } 13 | -------------------------------------------------------------------------------- /youtube/tanstack-query-router-fsd/lesson1/src/app/routes/index.tsx: -------------------------------------------------------------------------------- 1 | import { createFileRoute } from '@tanstack/react-router' 2 | 3 | import { PlaylistsPage } from '../../pages/playlists-page.tsx' 4 | 5 | export const Route = createFileRoute('/')({ 6 | component: PlaylistsPage, 7 | }) 8 | -------------------------------------------------------------------------------- /apps/react-effector-fsd/src/features/auth/api/me.ts: -------------------------------------------------------------------------------- 1 | import { api } from '@/shared/api/client' 2 | 3 | import type { User } from '../model/user.types' 4 | 5 | export const meApi = async (): Promise => { 6 | const res = await api().GET('/auth/me') 7 | return res.data ?? null 8 | } 9 | -------------------------------------------------------------------------------- /apps/reatom/src/shared/utils/validators/isArray.ts: -------------------------------------------------------------------------------- 1 | import getType from './getType' 2 | 3 | // eslint-disable-next-line @typescript-eslint/no-explicit-any 4 | function isArray(value: any): value is T[] { 5 | return getType(value) === '[object Array]' 6 | } 7 | 8 | export default isArray 9 | -------------------------------------------------------------------------------- /apps/rtk-query/src/pages/TrackPage/TrackPage.module.css: -------------------------------------------------------------------------------- 1 | .trackPage { 2 | --page-gradient-color: #9a3426; 3 | } 4 | 5 | .trackOverview { 6 | margin-bottom: 46px; 7 | } 8 | 9 | .title { 10 | margin-bottom: 18px; 11 | } 12 | 13 | .search { 14 | margin-bottom: 24px; 15 | } 16 | -------------------------------------------------------------------------------- /apps/tanstack-query-zustand/src/layout/Sidebar/Sidebar.module.css: -------------------------------------------------------------------------------- 1 | .sidebar { 2 | overflow-y: auto; 3 | display: flex; 4 | grid-area: sidebar; 5 | flex-direction: column; 6 | 7 | height: calc(100vh - var(--header-height) - var(--player-height)); 8 | padding: 0 30px; 9 | } 10 | -------------------------------------------------------------------------------- /apps/tanstack-query-zustand/src/layout/Sidebar/Sidebar.tsx: -------------------------------------------------------------------------------- 1 | import { MenuLinks } from './MenuLinks' 2 | import s from './Sidebar.module.css' 3 | 4 | export const Sidebar = () => { 5 | return ( 6 |
7 | 8 |
9 | ) 10 | } 11 | -------------------------------------------------------------------------------- /apps/tanstack-query-zustand/src/pages/common/SortSelect/SortSelect.module.css: -------------------------------------------------------------------------------- 1 | .selectLabel { 2 | display: flex; 3 | flex-shrink: 0; 4 | gap: 8px; 5 | align-items: center; 6 | 7 | width: 210px; 8 | } 9 | 10 | .select { 11 | flex-shrink: 0; 12 | width: 145px; 13 | } 14 | -------------------------------------------------------------------------------- /apps/ui-vanilla/src/pages/TrackPage/TrackPage.module.css: -------------------------------------------------------------------------------- 1 | .trackPage { 2 | --page-gradient-color: #9a3426; 3 | } 4 | 5 | .trackOverview { 6 | margin-bottom: 46px; 7 | } 8 | 9 | .title { 10 | margin-bottom: 18px; 11 | } 12 | 13 | .search { 14 | margin-bottom: 24px; 15 | } 16 | -------------------------------------------------------------------------------- /packages/musicfun-api-sdk/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "declaration": true, 4 | "outDir": "dist", 5 | "module": "ESNext", 6 | "target": "ES2019", 7 | "moduleResolution": "Node", 8 | "strict": true 9 | }, 10 | "include": ["src"] 11 | } 12 | -------------------------------------------------------------------------------- /apps/react-effector-fsd/src/pages/auth/OAuthRedirect/OAuthCallback.module.css: -------------------------------------------------------------------------------- 1 | .title { 2 | text-align: center; 3 | font-size: 250px; 4 | margin: 0; 5 | } 6 | 7 | .subtitle { 8 | text-align: center; 9 | font-size: 50px; 10 | margin: 0; 11 | text-transform: uppercase; 12 | } 13 | -------------------------------------------------------------------------------- /apps/rtk-query/src/features/auth/ui/OAuthRedirect/OAuthCallback.module.css: -------------------------------------------------------------------------------- 1 | .title { 2 | text-align: center; 3 | font-size: 250px; 4 | margin: 0; 5 | } 6 | 7 | .subtitle { 8 | text-align: center; 9 | font-size: 50px; 10 | margin: 0; 11 | text-transform: uppercase; 12 | } 13 | -------------------------------------------------------------------------------- /youtube/rtk-query/lesson1/src/features/playlists/ui/PlaylistsList/PlaylistsList.module.css: -------------------------------------------------------------------------------- 1 | .items { 2 | display: flex; 3 | gap: 30px; 4 | flex-wrap: wrap; 5 | } 6 | 7 | .item { 8 | width: 240px; 9 | padding: 16px; 10 | border: 1px solid #ddd; 11 | border-radius: 8px; 12 | } 13 | -------------------------------------------------------------------------------- /apps/react-effector-fsd/src/widgets/layout/ui/Sidebar/Sidebar.module.css: -------------------------------------------------------------------------------- 1 | .sidebar { 2 | overflow-y: auto; 3 | display: flex; 4 | grid-area: sidebar; 5 | flex-direction: column; 6 | 7 | height: calc(100vh - var(--header-height) - var(--player-height)); 8 | padding: 0 30px; 9 | } 10 | -------------------------------------------------------------------------------- /apps/rtk-query/src/layout/AppLoader/AppLoader.tsx: -------------------------------------------------------------------------------- 1 | import { Loader } from '@/shared/components' 2 | import { useIsGlobalLoading } from '@/shared/hooks' 3 | 4 | export const AppLoader = () => { 5 | const isLoading = useIsGlobalLoading() 6 | if (!isLoading) return null 7 | return 8 | } 9 | -------------------------------------------------------------------------------- /apps/tanstack-query-zustand/src/pages/TrackPage/TrackPage.module.css: -------------------------------------------------------------------------------- 1 | .trackPage { 2 | --page-gradient-color: #9a3426; 3 | } 4 | 5 | .trackOverview { 6 | margin-bottom: 46px; 7 | } 8 | 9 | .title { 10 | margin-bottom: 18px; 11 | } 12 | 13 | .search { 14 | margin-bottom: 24px; 15 | } 16 | -------------------------------------------------------------------------------- /apps/tanstack-query-zustand/src/pages/auth/OAuthRedirect/OAuthCallback.module.css: -------------------------------------------------------------------------------- 1 | .title { 2 | text-align: center; 3 | font-size: 250px; 4 | margin: 0; 5 | } 6 | 7 | .subtitle { 8 | text-align: center; 9 | font-size: 50px; 10 | margin: 0; 11 | text-transform: uppercase; 12 | } 13 | -------------------------------------------------------------------------------- /apps/tanstack-query-zustand/src/shared/utils/validators/isValid.ts: -------------------------------------------------------------------------------- 1 | import isNull from './isNull' 2 | import isUndefined from './isUndefined' 3 | 4 | function isValid(value: T | null | undefined): value is T { 5 | return !isNull(value) && !isUndefined(value) 6 | } 7 | 8 | export default isValid 9 | -------------------------------------------------------------------------------- /youtube/rtk-query/lesson1/src/common/components/index.tsx: -------------------------------------------------------------------------------- 1 | export { Header } from './Header/Header.tsx' 2 | export { LinearProgress } from './LinearProgress/LinearProgress.tsx' 3 | export { PageNotFound } from './PageNotFound/PageNotFound.tsx' 4 | export { Pagination } from './Pagination/Pagination.tsx' 5 | -------------------------------------------------------------------------------- /apps/react-effector-fsd/src/app/model/init.ts: -------------------------------------------------------------------------------- 1 | import { createEvent, sample } from 'effector' 2 | 3 | import { initApiClientFx } from '@/features/auth/model/model.ts' 4 | 5 | export const appStarted = createEvent() 6 | 7 | sample({ 8 | clock: appStarted, 9 | target: initApiClientFx, 10 | }) 11 | -------------------------------------------------------------------------------- /apps/tanstack-query-zustand/src/shared/utils/validators/isArray.ts: -------------------------------------------------------------------------------- 1 | import getType from './getType' 2 | 3 | // eslint-disable-next-line @typescript-eslint/no-explicit-any 4 | function isArray(value: any): value is T[] { 5 | return getType(value) === '[object Array]' 6 | } 7 | 8 | export default isArray 9 | -------------------------------------------------------------------------------- /experiment-apps/trelly-rtk/src/common/components/PageNotFound/PageNotFound.module.css: -------------------------------------------------------------------------------- 1 | .title { 2 | text-align: center; 3 | font-size: 250px; 4 | margin: 0; 5 | } 6 | 7 | .subtitle { 8 | text-align: center; 9 | font-size: 50px; 10 | margin: 0; 11 | text-transform: uppercase; 12 | } 13 | -------------------------------------------------------------------------------- /youtube/rtk-query/lesson1/src/common/components/PageNotFound/PageNotFound.module.css: -------------------------------------------------------------------------------- 1 | .title { 2 | text-align: center; 3 | font-size: 250px; 4 | margin: 0; 5 | } 6 | 7 | .subtitle { 8 | text-align: center; 9 | font-size: 50px; 10 | margin: 0; 11 | text-transform: uppercase; 12 | } 13 | -------------------------------------------------------------------------------- /apps/tanstack-query-zustand/src/shared/config/config.ts: -------------------------------------------------------------------------------- 1 | export const API_BASE_URL = import.meta.env.VITE_API_BASE_URL 2 | export const API_KEY = import.meta.env.VITE_API_KEY 3 | export const CURRENT_APP_DOMAIN = import.meta.env.VITE_APP_BASE_URL 4 | 5 | console.log('CURRENT_APP_DOMAIN: ', CURRENT_APP_DOMAIN) 6 | -------------------------------------------------------------------------------- /experiment-apps/musicfun-tanstack-query-small-example/src/app/routes/oauth/callback.tsx: -------------------------------------------------------------------------------- 1 | import { createFileRoute } from '@tanstack/react-router' 2 | 3 | import { OauthCallbackPage } from '@/pages/auth' 4 | 5 | export const Route = createFileRoute('/oauth/callback')({ 6 | component: OauthCallbackPage, 7 | }) 8 | -------------------------------------------------------------------------------- /experiment-apps/trelly-rtk/src/features/tasks/ui/Tasks/TasksPagination/TasksPagination.module.css: -------------------------------------------------------------------------------- 1 | .pagination { 2 | margin-bottom: 10px; 3 | display: flex; 4 | justify-content: center; 5 | } 6 | 7 | .totalCount { 8 | display: flex; 9 | justify-content: right; 10 | margin-right: 16px; 11 | } 12 | -------------------------------------------------------------------------------- /youtube/tanstack-query-router-fsd/lesson1/src/app/routes/my-playlists.tsx: -------------------------------------------------------------------------------- 1 | import { createFileRoute } from '@tanstack/react-router' 2 | 3 | import { MyPlaylistsPage } from '../../pages/my-playlists-page.tsx' 4 | 5 | export const Route = createFileRoute('/my-playlists')({ 6 | component: MyPlaylistsPage, 7 | }) 8 | -------------------------------------------------------------------------------- /apps/react-effector-fsd/src/widgets/layout/ui/Sidebar/Sidebar.tsx: -------------------------------------------------------------------------------- 1 | import { MenuLinks } from './MenuLinks/MenuLinks.tsx' 2 | import s from './Sidebar.module.css' 3 | 4 | export const Sidebar = () => { 5 | return ( 6 |
7 | 8 |
9 | ) 10 | } 11 | -------------------------------------------------------------------------------- /apps/rtk-query/src/pages/common/ui/SortSelect/SortSelect.module.css: -------------------------------------------------------------------------------- 1 | .selectLabel { 2 | display: flex; 3 | flex-shrink: 0; 4 | gap: 8px; 5 | align-items: center; 6 | 7 | min-width: 210px; 8 | white-space: nowrap; 9 | } 10 | 11 | .select { 12 | flex-shrink: 1; 13 | min-width: 145px; 14 | } 15 | -------------------------------------------------------------------------------- /apps/tanstack-query-zustand/src/main.tsx: -------------------------------------------------------------------------------- 1 | import { StrictMode } from 'react' 2 | import { createRoot } from 'react-dom/client' 3 | import './index.css' 4 | import App from './App.tsx' 5 | 6 | createRoot(document.getElementById('root')!).render( 7 | 8 | 9 | 10 | ) 11 | -------------------------------------------------------------------------------- /experiment-apps/musicfun-tanstack-query-orval-small-example/src/app/routes/oauth/callback.tsx: -------------------------------------------------------------------------------- 1 | import { createFileRoute } from '@tanstack/react-router' 2 | 3 | import { OauthCallbackPage } from '@/pages/auth' 4 | 5 | export const Route = createFileRoute('/oauth/callback')({ 6 | component: OauthCallbackPage, 7 | }) 8 | -------------------------------------------------------------------------------- /apps/rtk-query/src/shared/utils/show-error-toast.ts: -------------------------------------------------------------------------------- 1 | import { toast } from 'react-toastify' 2 | 3 | export const showErrorToast = (message: string, error?: unknown) => { 4 | toast(message, { theme: 'colored', type: 'error' }) 5 | 6 | if (error) { 7 | console.error(`${message}\n`, error) 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /youtube/rtk-query/lesson1/src/common/utils/errorToast.ts: -------------------------------------------------------------------------------- 1 | import { toast } from 'react-toastify' 2 | 3 | export const errorToast = (message: string, error?: unknown) => { 4 | toast(message, { theme: 'colored', type: 'error' }) 5 | 6 | if (error) { 7 | console.error(`${message}\n`, error) 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /experiment-apps/musicfun-tanstack-query-small-example/src/pages/playlists/ui/my-playlists/my-playlists-page.module.css: -------------------------------------------------------------------------------- 1 | .playlistsBox { 2 | display: flex; 3 | gap: 50px; 4 | } 5 | 6 | .playlistColumn { 7 | width: 600px; 8 | flex-shrink: 0; 9 | padding-top: 10px; 10 | } 11 | 12 | .editFormColumn { 13 | } 14 | -------------------------------------------------------------------------------- /youtube/rtk-query/lesson1/src/common/components/PageNotFound/PageNotFound.tsx: -------------------------------------------------------------------------------- 1 | import s from './PageNotFound.module.css' 2 | 3 | export const PageNotFound = () => { 4 | return ( 5 | <> 6 |

404

7 |

page not found

8 | 9 | ) 10 | } 11 | -------------------------------------------------------------------------------- /apps/react-native-expo/shared/utils/makeFullUrl.ts: -------------------------------------------------------------------------------- 1 | export const makeFullUrl = (base?: string, path?: string): string => { 2 | const b = (base || '').replace(/\/+$/, '') 3 | const p = (path || '').replace(/^\/+/, '') 4 | if (!b && !p) return '' 5 | if (!b) return '/' + p 6 | if (!p) return b 7 | return `${b}/${p}` 8 | } 9 | -------------------------------------------------------------------------------- /apps/reatom/src/pages/TracksPage/TracksPage.module.css: -------------------------------------------------------------------------------- 1 | .title { 2 | margin-bottom: 24px; 3 | } 4 | 5 | .controls { 6 | margin-bottom: 32px; 7 | } 8 | 9 | .controlsRow { 10 | display: flex; 11 | gap: 32px; 12 | align-items: center; 13 | justify-content: space-between; 14 | 15 | margin-bottom: 32px; 16 | } 17 | -------------------------------------------------------------------------------- /apps/reatom/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "module": "ESNext", // or "NodeNext" 4 | "moduleResolution": "Bundler", // or "NodeNext", 5 | "noUncheckedIndexedAccess": true 6 | }, 7 | "files": [], 8 | "references": [{ "path": "./tsconfig.app.json" }, { "path": "./tsconfig.node.json" }] 9 | } 10 | -------------------------------------------------------------------------------- /experiment-apps/musicfun-tanstack-query-orval-small-example/src/pages/playlists/ui/my-playlists/my-playlists-page.module.css: -------------------------------------------------------------------------------- 1 | .playlistsBox { 2 | display: flex; 3 | gap: 50px; 4 | } 5 | 6 | .playlistColumn { 7 | width: 600px; 8 | flex-shrink: 0; 9 | padding-top: 10px; 10 | } 11 | 12 | .editFormColumn { 13 | } 14 | -------------------------------------------------------------------------------- /youtube/rtk-query/lesson1/src/features/auth/model/auth.schemas.ts: -------------------------------------------------------------------------------- 1 | import * as z from 'zod' 2 | 3 | export const meResponseSchema = z.object({ 4 | userId: z.string(), 5 | login: z.string(), 6 | }) 7 | 8 | export const loginResponseSchema = z.object({ 9 | refreshToken: z.jwt(), 10 | accessToken: z.jwt(), 11 | }) 12 | -------------------------------------------------------------------------------- /youtube/tanstack-query-router-fsd/lesson1/src/app/routes/oauth/callback.tsx: -------------------------------------------------------------------------------- 1 | import { createFileRoute } from '@tanstack/react-router' 2 | 3 | import { OAuthCallbackPage } from '../../../pages/auth/oauth-callback-page.tsx' 4 | 5 | export const Route = createFileRoute('/oauth/callback')({ 6 | component: OAuthCallbackPage, 7 | }) 8 | -------------------------------------------------------------------------------- /apps/rtk-query/src/pages/TracksPage/TracksPage.module.css: -------------------------------------------------------------------------------- 1 | .title { 2 | margin-bottom: 24px; 3 | } 4 | 5 | .controls { 6 | margin-bottom: 32px; 7 | } 8 | 9 | .controlsRow { 10 | display: flex; 11 | gap: 32px; 12 | align-items: center; 13 | justify-content: space-between; 14 | 15 | margin-bottom: 32px; 16 | } 17 | -------------------------------------------------------------------------------- /apps/tanstack-query-zustand/src/shared/utils/validators/isString.ts: -------------------------------------------------------------------------------- 1 | import getType from './getType' 2 | 3 | // eslint-disable-next-line @typescript-eslint/no-explicit-any 4 | function isString(value: any): value is TString { 5 | return getType(value) === '[object String]' 6 | } 7 | 8 | export default isString 9 | -------------------------------------------------------------------------------- /apps/ui-vanilla/src/pages/TracksPage/TracksPage.module.css: -------------------------------------------------------------------------------- 1 | .title { 2 | margin-bottom: 24px; 3 | } 4 | 5 | .controls { 6 | margin-bottom: 32px; 7 | } 8 | 9 | .controlsRow { 10 | display: flex; 11 | gap: 32px; 12 | align-items: center; 13 | justify-content: space-between; 14 | 15 | margin-bottom: 32px; 16 | } 17 | -------------------------------------------------------------------------------- /experiment-apps/musicfun-tanstack-query-small-example/src/app/routes/index.tsx: -------------------------------------------------------------------------------- 1 | import { createFileRoute } from '@tanstack/react-router' 2 | 3 | import { Playlists } from '../../features/playlists/list/playlists.tsx' 4 | 5 | export const Route = createFileRoute('/')({ 6 | component: () => , 7 | }) 8 | -------------------------------------------------------------------------------- /youtube/tanstack-query-router-fsd/lesson1/src/pages/playlists-page.tsx: -------------------------------------------------------------------------------- 1 | import { Playlists } from '../widgets/playlists/ui/playlists.tsx' 2 | 3 | export function PlaylistsPage() { 4 | return ( 5 |
6 |

hello it-incubator!!!

7 | 8 |
9 | ) 10 | } 11 | -------------------------------------------------------------------------------- /apps/tanstack-query-zustand/src/shared/hooks/infiniteScroll/useObserverInfiniteScroll.types.ts: -------------------------------------------------------------------------------- 1 | export interface IUseObserverInfiniteScroll extends Partial { 2 | targetElement: HTMLElement | null 3 | rootElement?: HTMLElement | null 4 | 5 | callBack?(entry: IntersectionObserverEntry): Promise | void 6 | } 7 | -------------------------------------------------------------------------------- /experiment-apps/musicfun-tanstack-query-orval-small-example/src/app/routes/index.tsx: -------------------------------------------------------------------------------- 1 | import { createFileRoute } from '@tanstack/react-router' 2 | 3 | import { Playlists } from '../../features/playlists/list/playlists.tsx' 4 | 5 | export const Route = createFileRoute('/')({ 6 | component: () => , 7 | }) 8 | -------------------------------------------------------------------------------- /apps/tanstack-query-zustand/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "module": "ESNext", // or "NodeNext" 4 | "moduleResolution": "Bundler", // or "NodeNext", 5 | "noUncheckedIndexedAccess": true 6 | }, 7 | "files": [], 8 | "references": [{ "path": "./tsconfig.app.json" }, { "path": "./tsconfig.node.json" }] 9 | } 10 | -------------------------------------------------------------------------------- /youtube/rtk-query/lesson1/src/app/ui/MainPage/MainPage.tsx: -------------------------------------------------------------------------------- 1 | import { useGetMeQuery } from '@/features/auth/api/authApi.ts' 2 | 3 | export const MainPage = () => { 4 | const { data } = useGetMeQuery() 5 | 6 | return ( 7 |
8 |

Main page

9 |
login: {data?.login}
10 |
11 | ) 12 | } 13 | -------------------------------------------------------------------------------- /experiment-apps/musicfun-tanstack-query-small-example/src/app/routes/__root.tsx: -------------------------------------------------------------------------------- 1 | import 'react-toastify/dist/ReactToastify.css' 2 | 3 | import { createRootRoute } from '@tanstack/react-router' 4 | 5 | import { RootLayout } from '@/app/layouts/root-layout.tsx' 6 | 7 | export const Route = createRootRoute({ 8 | component: RootLayout, 9 | }) 10 | -------------------------------------------------------------------------------- /experiment-apps/musicfun-tanstack-query-small-example/src/pages/playlists/ui/playlists-with-filters-page.tsx: -------------------------------------------------------------------------------- 1 | import { PaginatedPlaylists } from '@/features/playlists/list/paginated-playlists.tsx' 2 | 3 | export function PlaylistsWithFiltersPage() { 4 | return ( 5 |
6 | 7 |
8 | ) 9 | } 10 | -------------------------------------------------------------------------------- /apps/reatom/src/pages/common/PageWrapper/PageWrapper.module.css: -------------------------------------------------------------------------------- 1 | .wrapper { 2 | min-height: calc(100vh - var(--header-height)); 3 | padding: 30px 40px; 4 | background: linear-gradient( 5 | 180deg, 6 | var(--page-gradient-color, #3333a3) 0, 7 | var(--color-bg-secondary) 300px, 8 | var(--color-bg-secondary) 100% 9 | ); 10 | } 11 | -------------------------------------------------------------------------------- /apps/rtk-query/src/layout/Header/Header.module.css: -------------------------------------------------------------------------------- 1 | .header { 2 | display: flex; 3 | grid-area: header; 4 | align-items: center; 5 | justify-content: space-between; 6 | 7 | height: var(--header-height); 8 | padding: 0 32px; 9 | } 10 | 11 | .actions { 12 | display: flex; 13 | column-gap: 20px; 14 | align-items: center; 15 | } 16 | -------------------------------------------------------------------------------- /experiment-apps/musicfun-tanstack-query-orval-small-example/src/pages/playlists/ui/playlists-with-filters-page.tsx: -------------------------------------------------------------------------------- 1 | import { PaginatedPlaylists } from '@/features/playlists/list/paginated-playlists.tsx' 2 | 3 | export function PlaylistsWithFiltersPage() { 4 | return ( 5 |
6 | 7 |
8 | ) 9 | } 10 | -------------------------------------------------------------------------------- /experiment-apps/musicfun-tanstack-query-small-example/src/features/auth/ui/logout-button/logout-button.tsx: -------------------------------------------------------------------------------- 1 | import { useLogout } from '@/features/auth/ui/logout-button/use-logout.ts' 2 | 3 | export const LogoutButton = () => { 4 | const { logout: handleLogoutClick } = useLogout() 5 | 6 | return 7 | } 8 | -------------------------------------------------------------------------------- /experiment-apps/trelly-rtk/src/features/auth/api/authApi.types.ts: -------------------------------------------------------------------------------- 1 | // Response 2 | export type OAuthResponse = { 3 | refreshToken: string 4 | accessToken: string 5 | } 6 | 7 | // Arguments 8 | export type LoginArgs = { 9 | code: string 10 | redirectUri: string 11 | accessTokenTTL: string // e.g. "3m" 12 | rememberMe: boolean 13 | } 14 | -------------------------------------------------------------------------------- /apps/react-native-expo/index.ts: -------------------------------------------------------------------------------- 1 | import { registerRootComponent } from 'expo' 2 | 3 | import App from './App' 4 | 5 | // registerRootComponent calls AppRegistry.registerComponent('main', () => App); 6 | // It also ensures that whether you load the app in Expo Go or in a native build, 7 | // the environment is set up appropriately 8 | registerRootComponent(App) 9 | -------------------------------------------------------------------------------- /apps/reatom/.storybook/main.ts: -------------------------------------------------------------------------------- 1 | import type { StorybookConfig } from '@storybook/react-vite' 2 | 3 | const config: StorybookConfig = { 4 | stories: ['../src/**/*.mdx', '../src/**/*.stories.@(js|jsx|mjs|ts|tsx)'], 5 | addons: [], 6 | framework: { 7 | name: '@storybook/react-vite', 8 | options: {}, 9 | }, 10 | } 11 | export default config 12 | -------------------------------------------------------------------------------- /apps/rtk-query/src/shared/configs/paths.ts: -------------------------------------------------------------------------------- 1 | export const Paths = { 2 | Main: '/', 3 | Auth: '/sign-in', 4 | Playlists: '/playlists', 5 | Profile: '/user', 6 | Tracks: '/tracks', 7 | TracksLyrics: '/tracks/lyrics', 8 | OAuthRedirect: '/oauth/callback', 9 | Artists: '/artists', 10 | Tags: '/tags', 11 | NotFound: '*', 12 | } as const 13 | -------------------------------------------------------------------------------- /apps/tanstack-query-zustand/src/features/tracks/ui/TrackRow/TrackRow.module.css: -------------------------------------------------------------------------------- 1 | .tableRow { 2 | cursor: pointer; 3 | user-select: none; 4 | } 5 | 6 | .playing { 7 | color: var(--color-accent); 8 | } 9 | 10 | .progress { 11 | width: 183px; 12 | } 13 | 14 | .actions { 15 | display: flex; 16 | gap: 12px; 17 | align-items: center; 18 | } 19 | -------------------------------------------------------------------------------- /apps/ui-vanilla/src/pages/common/PageWrapper/PageWrapper.module.css: -------------------------------------------------------------------------------- 1 | .wrapper { 2 | min-height: calc(100vh - var(--header-height)); 3 | padding: 30px 40px; 4 | background: linear-gradient( 5 | 180deg, 6 | var(--page-gradient-color, #3333a3) 0, 7 | var(--color-bg-secondary) 300px, 8 | var(--color-bg-secondary) 100% 9 | ); 10 | } 11 | -------------------------------------------------------------------------------- /experiment-apps/musicfun-tanstack-query-orval-small-example/src/app/routes/__root.tsx: -------------------------------------------------------------------------------- 1 | import 'react-toastify/dist/ReactToastify.css' 2 | 3 | import { createRootRoute } from '@tanstack/react-router' 4 | 5 | import { RootLayout } from '@/app/layouts/root-layout.tsx' 6 | 7 | export const Route = createRootRoute({ 8 | component: RootLayout, 9 | }) 10 | -------------------------------------------------------------------------------- /experiment-apps/musicfun-tanstack-query-orval-small-example/src/features/auth/ui/logout-button/logout-button.tsx: -------------------------------------------------------------------------------- 1 | import { useLogout } from '@/features/auth/ui/logout-button/use-logout.ts' 2 | 3 | export const LogoutButton = () => { 4 | const { logout: handleLogoutClick } = useLogout() 5 | 6 | return 7 | } 8 | -------------------------------------------------------------------------------- /experiment-apps/musicfun-tanstack-query-small-example/src/features/auth/ui/login-button/login-button.tsx: -------------------------------------------------------------------------------- 1 | import { useLogin } from '@/features/auth/ui/login-button/use-login.tsx' 2 | 3 | export const LoginButton = () => { 4 | const { login: handleLoginClick } = useLogin() 5 | 6 | return 7 | } 8 | -------------------------------------------------------------------------------- /youtube/rtk-query/lesson1/src/features/tracks/ui/TracksList/TracksList.module.css: -------------------------------------------------------------------------------- 1 | .list { 2 | display: flex; 3 | flex-direction: column; 4 | gap: 20px; 5 | } 6 | 7 | .item { 8 | display: flex; 9 | justify-content: space-between; 10 | align-items: center; 11 | padding: 16px; 12 | border: 1px solid #ddd; 13 | border-radius: 8px; 14 | } 15 | -------------------------------------------------------------------------------- /apps/react-native-expo/features/auth/model/utils/expoUrlToHttpCallback.ts: -------------------------------------------------------------------------------- 1 | export function expoUrlToHttpCallback(expoUrl: string): string { 2 | try { 3 | // убираем префикс exp:// 4 | const url = expoUrl.replace(/^exp:\/\//, '') 5 | return `http://${url}/oauth/callback` 6 | } catch { 7 | throw new Error('Invalid expo URL') 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /apps/reatom/src/pages/UserPage/UserPage.tsx: -------------------------------------------------------------------------------- 1 | import { PageWrapper } from '../common' 2 | import { UserInfo, UserTabs } from './ui' 3 | import s from './UserPage.module.css' 4 | 5 | export const UserPage = () => { 6 | return ( 7 | 8 | 9 | 10 | 11 | ) 12 | } 13 | -------------------------------------------------------------------------------- /apps/rtk-query/.storybook/main.ts: -------------------------------------------------------------------------------- 1 | import type { StorybookConfig } from '@storybook/react-vite' 2 | 3 | const config: StorybookConfig = { 4 | stories: ['../src/**/*.mdx', '../src/**/*.stories.@(js|jsx|mjs|ts|tsx)'], 5 | addons: [], 6 | framework: { 7 | name: '@storybook/react-vite', 8 | options: {}, 9 | }, 10 | } 11 | export default config 12 | -------------------------------------------------------------------------------- /apps/ui-vanilla/.storybook/main.ts: -------------------------------------------------------------------------------- 1 | import type { StorybookConfig } from '@storybook/react-vite' 2 | 3 | const config: StorybookConfig = { 4 | stories: ['../src/**/*.mdx', '../src/**/*.stories.@(js|jsx|mjs|ts|tsx)'], 5 | addons: [], 6 | framework: { 7 | name: '@storybook/react-vite', 8 | options: {}, 9 | }, 10 | } 11 | export default config 12 | -------------------------------------------------------------------------------- /apps/ui-vanilla/vite.config.ts: -------------------------------------------------------------------------------- 1 | import path from 'node:path' 2 | 3 | import react from '@vitejs/plugin-react' 4 | import { defineConfig } from 'vite' 5 | 6 | // https://vite.dev/config/ 7 | export default defineConfig({ 8 | plugins: [react()], 9 | resolve: { 10 | alias: { 11 | '@': path.resolve(__dirname, 'src'), 12 | }, 13 | }, 14 | }) 15 | -------------------------------------------------------------------------------- /experiment-apps/musicfun-tanstack-query-orval-small-example/src/features/auth/ui/login-button/login-button.tsx: -------------------------------------------------------------------------------- 1 | import { useLogin } from '@/features/auth/ui/login-button/use-login.tsx' 2 | 3 | export const LoginButton = () => { 4 | const { login: handleLoginClick } = useLogin() 5 | 6 | return 7 | } 8 | -------------------------------------------------------------------------------- /apps/rtk-query/src/pages/UserPage/UserPage.tsx: -------------------------------------------------------------------------------- 1 | import { PageWrapper } from '../common' 2 | import { UserInfo, UserTabs } from './ui' 3 | import s from './UserPage.module.css' 4 | 5 | export const UserPage = () => { 6 | return ( 7 | 8 | 9 | 10 | 11 | ) 12 | } 13 | -------------------------------------------------------------------------------- /apps/tanstack-query-zustand/src/pages/common/PageWrapper/PageWrapper.module.css: -------------------------------------------------------------------------------- 1 | .wrapper { 2 | min-height: calc(100vh - var(--header-height)); 3 | padding: 30px 40px; 4 | background: linear-gradient( 5 | 180deg, 6 | var(--page-gradient-color, #3333a3) 0, 7 | var(--color-bg-secondary) 300px, 8 | var(--color-bg-secondary) 100% 9 | ); 10 | } 11 | -------------------------------------------------------------------------------- /apps/ui-vanilla/src/pages/UserPage/UserPage.tsx: -------------------------------------------------------------------------------- 1 | import { PageWrapper } from '../common' 2 | import { UserInfo, UserTabs } from './ui' 3 | import s from './UserPage.module.css' 4 | 5 | export const UserPage = () => { 6 | return ( 7 | 8 | 9 | 10 | 11 | ) 12 | } 13 | -------------------------------------------------------------------------------- /experiment-apps/musicfun-tanstack-query-small-example/src/features/auth/ui/logout-button/use-logout.ts: -------------------------------------------------------------------------------- 1 | import { useLogoutMutation } from '@/features/auth/api/use-logout.mutation.ts' 2 | 3 | export const useLogout = () => { 4 | const { mutate } = useLogoutMutation() 5 | 6 | const logout = () => { 7 | mutate() 8 | } 9 | 10 | return { logout } 11 | } 12 | -------------------------------------------------------------------------------- /experiment-apps/musicfun-tanstack-query-small-example/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "module": "ESNext", // or "NodeNext" 4 | "moduleResolution": "Bundler", // or "NodeNext" 5 | "noUncheckedIndexedAccess": true 6 | }, 7 | "files": [], 8 | "references": [{ "path": "./tsconfig.app.json" }, { "path": "./tsconfig.node.json" }] 9 | } 10 | -------------------------------------------------------------------------------- /packages/musicfun-api-sdk/src/common/types/playlists-tracks.types.ts: -------------------------------------------------------------------------------- 1 | export type Images = { 2 | main: Cover[] 3 | } 4 | 5 | export type Cover = { 6 | type: 'original' | 'medium' | 'thumbnail' 7 | width: number 8 | height: number 9 | fileSize: number 10 | url: string 11 | } 12 | 13 | export type User = { 14 | id: string 15 | name: string 16 | } 17 | -------------------------------------------------------------------------------- /youtube/rtk-query/lesson1/src/common/utils/isErrorWithProperty.ts: -------------------------------------------------------------------------------- 1 | export function isErrorWithProperty(error: unknown, property: T): error is Record { 2 | return ( 3 | typeof error === 'object' && 4 | error != null && 5 | property in error && 6 | typeof (error as Record)[property] === 'string' 7 | ) 8 | } 9 | -------------------------------------------------------------------------------- /youtube/tanstack-query-router-fsd/lesson1/src/app/styles/index.css: -------------------------------------------------------------------------------- 1 | body { 2 | font-family: 3 | system-ui, 4 | -apple-system, 5 | BlinkMacSystemFont, 6 | 'Segoe UI', 7 | Roboto, 8 | 'Helvetica Neue', 9 | Arial, 10 | sans-serif; 11 | background: #060707; 12 | 13 | color: #9c9c9c; 14 | } 15 | a { 16 | color: #9c9c9c; 17 | } 18 | -------------------------------------------------------------------------------- /apps/reatom/src/shared/icons/KeyboardArrowRightIcon.tsx: -------------------------------------------------------------------------------- 1 | import type { SVGProps } from 'react' 2 | 3 | export const KeyboardArrowRightIcon = (props: SVGProps) => ( 4 | 5 | 6 | 7 | ) 8 | -------------------------------------------------------------------------------- /apps/tanstack-query-zustand/src/pages/UserPage/ui/UserTabs/PlaylistsTab/PlaylistsTab.module.css: -------------------------------------------------------------------------------- 1 | .createPlaylistButton { 2 | display: block; 3 | 4 | width: 328px; 5 | height: 54px; 6 | margin: 0 auto; 7 | margin-bottom: 24px; 8 | } 9 | 10 | .emptyState { 11 | text-align: center; 12 | padding: 60px 0; 13 | color: #888; 14 | font-size: 16px; 15 | } 16 | -------------------------------------------------------------------------------- /apps/tanstack-query-zustand/src/shared/hooks/index.ts: -------------------------------------------------------------------------------- 1 | export { default as useDebounceCallback } from './debounceCallback' 2 | export { default as useDebounceValue } from './debounceValue' 3 | export { default as useGetId } from './getId' 4 | export { default as useInfiniteScroll } from './infiniteScroll' 5 | export { default as useThrottleCallback } from './throttleCallback' 6 | -------------------------------------------------------------------------------- /youtube/rtk-query/lesson1/vite.config.ts: -------------------------------------------------------------------------------- 1 | import react from '@vitejs/plugin-react-swc' 2 | import path from 'path' 3 | import { defineConfig } from 'vite' 4 | 5 | // https://vite.dev/config/ 6 | export default defineConfig({ 7 | plugins: [react()], 8 | resolve: { 9 | alias: { 10 | '@/': `${path.resolve(__dirname, 'src')}/`, 11 | }, 12 | }, 13 | }) 14 | -------------------------------------------------------------------------------- /apps/nextjs/src/features/auth/ui/MeInfo/MeInfo.tsx: -------------------------------------------------------------------------------- 1 | import { Logout } from '@/features/auth/ui/Logout/Logout' 2 | import { authApi } from '@/shared/api/auth-api' 3 | 4 | export const MeInfo = async () => { 5 | const meData = await authApi.getMe() 6 | 7 | return ( 8 |
9 | userLogin: {meData.login} 10 | 11 |
12 | ) 13 | } 14 | -------------------------------------------------------------------------------- /apps/reatom/src/features/auth/ui/ProfileDropdownMenu/ProfileDropdownMenu.module.css: -------------------------------------------------------------------------------- 1 | .trigger { 2 | cursor: pointer; 3 | display: flex; 4 | gap: 8px; 5 | align-items: center; 6 | } 7 | 8 | .avatar { 9 | overflow: hidden; 10 | width: 34px; 11 | height: 34px; 12 | border-radius: 50%; 13 | } 14 | 15 | .name { 16 | color: var(--color-text-primary); 17 | } 18 | -------------------------------------------------------------------------------- /apps/reatom/src/features/tags/api/tags-api.ts: -------------------------------------------------------------------------------- 1 | export const MOCK_HASHTAGS = [ 2 | 'Rock', 3 | 'Jazz', 4 | 'Blues', 5 | 'Metal', 6 | 'Folk', 7 | 'Coding', 8 | 'Dark Ambient', 9 | 'Chill', 10 | 'Lo-fi', 11 | ] 12 | 13 | export const MOCK_5_HASHTAGS = MOCK_HASHTAGS.slice(0, 5) 14 | 15 | export type TagDto = { 16 | id: string 17 | name: string 18 | } 19 | -------------------------------------------------------------------------------- /apps/rtk-query/src/shared/icons/KeyboardArrowRightIcon.tsx: -------------------------------------------------------------------------------- 1 | import type { SVGProps } from 'react' 2 | 3 | export const KeyboardArrowRightIcon = (props: SVGProps) => ( 4 | 5 | 6 | 7 | ) 8 | -------------------------------------------------------------------------------- /apps/tanstack-query-zustand/.storybook/main.ts: -------------------------------------------------------------------------------- 1 | import type { StorybookConfig } from '@storybook/react-vite' 2 | 3 | const config: StorybookConfig = { 4 | stories: ['../src/**/*.mdx', '../src/**/*.stories.@(js|jsx|mjs|ts|tsx)'], 5 | addons: [], 6 | framework: { 7 | name: '@storybook/react-vite', 8 | options: {}, 9 | }, 10 | } 11 | export default config 12 | -------------------------------------------------------------------------------- /apps/tanstack-query-zustand/src/pages/UserPage/UserPage.tsx: -------------------------------------------------------------------------------- 1 | import { PageWrapper } from '../common' 2 | import { UserInfo, UserTabs } from './ui' 3 | import s from './UserPage.module.css' 4 | 5 | export const UserPage = () => { 6 | return ( 7 | 8 | 9 | 10 | 11 | ) 12 | } 13 | -------------------------------------------------------------------------------- /apps/ui-vanilla/src/shared/icons/KeyboardArrowRightIcon.tsx: -------------------------------------------------------------------------------- 1 | import type { SVGProps } from 'react' 2 | 3 | export const KeyboardArrowRightIcon = (props: SVGProps) => ( 4 | 5 | 6 | 7 | ) 8 | --------------------------------------------------------------------------------