diff --git a/packages/app/src/App.jsx b/packages/app/src/App.jsx index 3e5e01e0..a7ad99c8 100755 --- a/packages/app/src/App.jsx +++ b/packages/app/src/App.jsx @@ -88,7 +88,7 @@ import { DOMWindow } from "components/RenderWindow" import { Icons } from "components/Icons" -import { ThemeProvider } from "cores/style" +import { ThemeProvider } from "cores/style/style.core.jsx" import Layout from "./layout" import * as Router from "./router" diff --git a/packages/app/src/components/DraggableDrawer/index.jsx b/packages/app/src/components/DraggableDrawer/index.jsx index 8f4a9f09..a3bb95ed 100755 --- a/packages/app/src/components/DraggableDrawer/index.jsx +++ b/packages/app/src/components/DraggableDrawer/index.jsx @@ -74,7 +74,7 @@ export default class Drawer extends Component { ALLOW_DRAWER_TRANSFORM = true componentDidMount() { - this.DESKTOP_MODE = !window.isMobile + this.DESKTOP_MODE = !app.isMobile } componentDidUpdate(prevProps, nextState) { diff --git a/packages/app/src/components/Layout/bottomBar/index.jsx b/packages/app/src/components/Layout/bottomBar/index.jsx index 56ba92d0..1749f42b 100755 --- a/packages/app/src/components/Layout/bottomBar/index.jsx +++ b/packages/app/src/components/Layout/bottomBar/index.jsx @@ -6,31 +6,39 @@ import { Motion, spring } from "react-motion" import { Icons, createIconRender } from "components/Icons" +import { WithPlayerContext, Context } from "contexts/WithPlayerContext" + +import PlayerView from "pages/@mobile-views/player" + import "./index.less" -const items = [ - { - id: "creator", - dispatchEvent: "app.openCreator", - icon: "PlusCircle", - classnames: [["primary"]] - }, - { - id: "feed", - location: "/home/feed", - icon: "Home", - }, - { - id: "explore", - location: "/home/explore", - icon: "Search", - }, - { - id: "livestreams", - location: "/home/livestreams", - icon: "Tv", +const PlayerButton = (props) => { + const openPlayerView = () => { + app.DrawerController.open("player", PlayerView) } -] + + React.useEffect(() => { + openPlayerView() + }, []) + + return
+ { + props.playback === "playing" ? : + } +
+} const AccountButton = (props) => { const user = app.userData @@ -51,26 +59,10 @@ const AccountButton = (props) => { key: "settings", text: <> Settings, onClick: () => { - app.openSettings() + app.navigation.goToSettings() ActionSheetRef.current.close() } }, - { - key: "savedPosts", - text: <> Saved Posts, - onClick: () => { - app.setLocation("/home/savedPosts") - ActionSheetRef.current.close() - } - }, - { - key: "about", - text: <> About, - onClick: () => { - app.setLocation("/about") - ActionSheetRef.current.close() - } - } ] }) } @@ -91,7 +83,17 @@ const AccountButton = (props) => { } -export default class BottomBar extends React.Component { +export default (props) => { + return + + +} + +export class BottomBar extends React.Component { + static contextType = Context + state = { allowed: true, show: true, @@ -133,7 +135,7 @@ export default class BottomBar extends React.Component { } toggleVisibility = (to) => { - if (!window.isMobile) { + if (!app.isMobile) { to = false } else { to = to ?? !this.state.visible @@ -160,21 +162,6 @@ export default class BottomBar extends React.Component { } } - renderItems = () => { - return items.map((item) => { - return
this.handleItemClick(item)} - > -
- {createIconRender(item.icon)} -
-
- }) - } - render() { if (this.state.render) { return
@@ -195,7 +182,51 @@ export default class BottomBar extends React.Component { }} >
- {this.renderItems()} +
app.setLocation("/")} + > +
+ {createIconRender("PlusCircle")} +
+
+ + { + this.context.currentManifest &&
+ +
+ } + + + +
+
+ {createIconRender("Search")} +
+
+
} diff --git a/packages/app/src/components/Layout/bottomBar/index.less b/packages/app/src/components/Layout/bottomBar/index.less index eb395ae2..13ac626d 100755 --- a/packages/app/src/components/Layout/bottomBar/index.less +++ b/packages/app/src/components/Layout/bottomBar/index.less @@ -1,4 +1,26 @@ @import "theme/vars.less"; +@import "theme/animations.less"; + +.player_btn { + color: var(--color); + + background-color: var(--average-color); + + padding: 10px 20px; + + border-radius: 8px; + + &.bounce { + svg { + animation: bounce 1s infinite; + } + } + + svg { + color: var(--color); + margin: 0; + } +} .bottomBar { display: flex; @@ -24,6 +46,8 @@ background-color: var(--background-color-accent); border-radius: 12px 12px 0 0; + box-shadow: @card-shadow; + .items { display: inline-flex; align-items: center; diff --git a/packages/app/src/components/Login/index.jsx b/packages/app/src/components/Login/index.jsx index 84999bd1..b54d1f88 100755 --- a/packages/app/src/components/Login/index.jsx +++ b/packages/app/src/components/Login/index.jsx @@ -227,7 +227,7 @@ export default class Login extends React.Component { > Password this.onUpdateInput("password", e.target.value)} onPressEnter={this.nextStep} /> diff --git a/packages/app/src/components/PagePanels/components/NavMenu/index.jsx b/packages/app/src/components/PagePanels/components/NavMenu/index.jsx new file mode 100644 index 00000000..d9c171a7 --- /dev/null +++ b/packages/app/src/components/PagePanels/components/NavMenu/index.jsx @@ -0,0 +1,59 @@ +import React from "react" +import classnames from "classnames" +import * as antd from "antd" + +import { createIconRender } from "components/Icons" + +import "./index.less" + +const NavMenu = (props) => { + const handleOnClickItem = (event) => { + return props.onClickItem(event.key) + } + + return
+ { + props.header && + } + + +
+} + +const NavMenuMobile = (props) => { + return
+
+ { + props.items.map((item) => { + return
props.onClickItem(item.key)} + > +
+ {item.icon} +
+ +
+ {item.label} +
+
+ }) + } +
+
+} + +export default app.isMobile ? NavMenuMobile : NavMenu \ No newline at end of file diff --git a/packages/app/src/components/PagePanels/components/NavMenu/index.less b/packages/app/src/components/PagePanels/components/NavMenu/index.less new file mode 100644 index 00000000..64bbdbdb --- /dev/null +++ b/packages/app/src/components/PagePanels/components/NavMenu/index.less @@ -0,0 +1,21 @@ +.navmenu_wrapper { + position: relative; +} + +.__mobile__navmenu_wrapper { + box-sizing: border-box; + + position: sticky; + + top: 0; + left: 0; + + width: 100%; + + .card { + display: flex; + flex-direction: row; + + gap: 10px; + } +} \ No newline at end of file diff --git a/packages/app/src/components/PagePanels/index.jsx b/packages/app/src/components/PagePanels/index.jsx index 0f40efd0..889d2688 100755 --- a/packages/app/src/components/PagePanels/index.jsx +++ b/packages/app/src/components/PagePanels/index.jsx @@ -4,6 +4,8 @@ import * as antd from "antd" import { createIconRender } from "components/Icons" +import NavMenu from "./components/NavMenu" + import "./index.less" export const Panel = (props) => { @@ -19,29 +21,6 @@ export const Panel = (props) => { } -const NavMenu = (props) => { - const handleOnClickItem = (event) => { - return props.onClickItem(event.key) - } - - return
- { - props.header && - } - - -
-} - export class PagePanelWithNavMenu extends React.Component { state = { // if defaultTab is not set, try to get it from query, if not, use the first tab diff --git a/packages/app/src/components/Player/BackgroundMediaPlayer/index.less b/packages/app/src/components/Player/BackgroundMediaPlayer/index.less index 8e5ad676..34cd4808 100644 --- a/packages/app/src/components/Player/BackgroundMediaPlayer/index.less +++ b/packages/app/src/components/Player/BackgroundMediaPlayer/index.less @@ -1,3 +1,5 @@ +@import "theme/animations.less"; + .background_media_player { position: relative; @@ -234,23 +236,4 @@ } } } -} - -@keyframes bounce { - - 0%, - 20%, - 50%, - 80%, - 100% { - transform: translateY(0); - } - - 40% { - transform: translateY(-5px); - } - - 60% { - transform: translateY(-3px); - } } \ No newline at end of file diff --git a/packages/app/src/components/Player/Controls/index.jsx b/packages/app/src/components/Player/Controls/index.jsx index 6ea0ce1d..7e675747 100644 --- a/packages/app/src/components/Player/Controls/index.jsx +++ b/packages/app/src/components/Player/Controls/index.jsx @@ -79,23 +79,25 @@ export default ({ onClick={() => onClickActionsButton("next")} disabled={syncModeLocked} /> - -
- { - audioMuted - ? - : - } -
-
+
+ { + audioMuted + ? + : + } +
+ + } } \ No newline at end of file diff --git a/packages/app/src/components/Player/MediaPlayer/index.jsx b/packages/app/src/components/Player/MediaPlayer/index.jsx index f4560a9e..3ef2ea7d 100755 --- a/packages/app/src/components/Player/MediaPlayer/index.jsx +++ b/packages/app/src/components/Player/MediaPlayer/index.jsx @@ -90,8 +90,9 @@ export class AudioPlayer extends React.Component { className={classnames( "embbededMediaPlayerWrapper", { - ["hovering"]: this.state.showControls, + ["hovering"]: this.props.frame !== false && this.state.showControls, ["minimized"]: this.context.minimized, + ["no-frame"]: this.props.frame === false, } )} onMouseEnter={this.onMouse} diff --git a/packages/app/src/components/Player/MediaPlayer/index.less b/packages/app/src/components/Player/MediaPlayer/index.less index 10c5a885..bcccf8d0 100755 --- a/packages/app/src/components/Player/MediaPlayer/index.less +++ b/packages/app/src/components/Player/MediaPlayer/index.less @@ -18,6 +18,31 @@ transition: all 150ms ease-in-out; + &.no-frame { + width: 100%; + height: 100%; + + flex-direction: column; + + .player { + background-color: transparent; + border-radius: 0; + + box-shadow: none; + } + + .top_controls { + position: relative; + opacity: 1; + + height: @top_controls_height; + width: 100%; + + background-color: transparent; + box-shadow: none; + } + } + &.minimized { pointer-events: none; diff --git a/packages/app/src/components/PlaylistTimelineEntry/index.less b/packages/app/src/components/PlaylistTimelineEntry/index.less index d8d7ed98..b48d3b61 100644 --- a/packages/app/src/components/PlaylistTimelineEntry/index.less +++ b/packages/app/src/components/PlaylistTimelineEntry/index.less @@ -98,10 +98,14 @@ font-size: 0.9rem; + color: var(--text-color); + .playlistTimelineEntry_statistic { display: flex; flex-direction: row; + color: var(--text-color); + justify-content: center; align-items: center; } diff --git a/packages/app/src/components/PostCard/index.less b/packages/app/src/components/PostCard/index.less index cb531b55..9ac72d4f 100755 --- a/packages/app/src/components/PostCard/index.less +++ b/packages/app/src/components/PostCard/index.less @@ -5,7 +5,7 @@ width: 35vw; min-width: 300px; max-width: 800px; - + //max-width: 600px; //min-height: 165px; //height: 100%; diff --git a/packages/app/src/components/PostsList/index.jsx b/packages/app/src/components/PostsList/index.jsx index f8e4c2c5..165e65b1 100755 --- a/packages/app/src/components/PostsList/index.jsx +++ b/packages/app/src/components/PostsList/index.jsx @@ -368,95 +368,43 @@ export class PostsListsComponent extends React.Component { return
- { - !this.state.realtimeUpdates &&
- } - > - Resume - -
- } - { - this.state.list.map((data) => { - return React.createElement(typeToComponent[data.type ?? "post"] ?? PostCard, { - key: data._id, - data: data, - events: { - onClickLike: this.onLikePost, - onClickSave: this.onSavePost, - onClickDelete: this.onDeletePost, - onClickEdit: this.onEditPost, - } - }) - }) - } -
-
- - return - {({ height }) => { - console.log("[PostList] AutoSizer height update => ", height) - - return - { - !this.state.realtimeUpdates &&
- } - > - Resume - -
- } - { - this.state.list.map((data) => { - return React.createElement(typeToComponent[data.type ?? "post"] ?? PostCard, { - key: data._id, - data: data, - events: { - onClickLike: this.onLikePost, - onClickSave: this.onSavePost, - onClickDelete: this.onDeletePost, - onClickEdit: this.onEditPost, - } - }) + ref={this.listRef} + className="post-list" + loadingComponent={LoadingComponent} + noResultComponent={NoResultComponent} + hasMore={this.state.hasMore} + fetching={this.state.loading} + onBottom={this.onLoadMore} + > + { + !this.state.realtimeUpdates && !app.isMobile &&
+ } + > + Resume + +
+ } + { + this.state.list.map((data) => { + return React.createElement(typeToComponent[data.type ?? "post"] ?? PostCard, { + key: data._id, + data: data, + events: { + onClickLike: this.onLikePost, + onClickSave: this.onSavePost, + onClickDelete: this.onDeletePost, + onClickEdit: this.onEditPost, + } }) - } -
- }} -
+ }) + } + + } } diff --git a/packages/app/src/components/PostsList/index.less b/packages/app/src/components/PostsList/index.less index d8830634..4c73f2cf 100755 --- a/packages/app/src/components/PostsList/index.less +++ b/packages/app/src/components/PostsList/index.less @@ -33,7 +33,6 @@ margin: auto; z-index: 150; - } .resume_btn_wrapper { diff --git a/packages/app/src/layout.jsx b/packages/app/src/layout.jsx index a59ef2f2..5c4d970d 100755 --- a/packages/app/src/layout.jsx +++ b/packages/app/src/layout.jsx @@ -51,12 +51,8 @@ export default class Layout extends React.PureComponent { } componentDidMount() { - if (window.app.cores.settings.get("forceMobileMode") || window.app.capacitor.isAppCapacitor() || Math.min(window.screen.width, window.screen.height) < 768 || navigator.userAgent.indexOf("Mobi") > -1) { - window.isMobile = true - + if (window.app.cores.settings.get("forceMobileMode") || app.isMobile) { app.layout.set("mobile") - } else { - window.isMobile = false } // register events @@ -147,7 +143,7 @@ export default class Layout extends React.PureComponent { return JSON.stringify(this.state.renderError) } - const Layout = Layouts[layoutType] + const Layout = Layouts[app.isMobile ? "mobile" : layoutType] if (!Layout) { return app.eventBus.emit("runtime.crash", new Error(`Layout type [${layoutType}] not found`)) diff --git a/packages/app/src/layouts/mobile/index.jsx b/packages/app/src/layouts/mobile/index.jsx index 747521be..6c110795 100755 --- a/packages/app/src/layouts/mobile/index.jsx +++ b/packages/app/src/layouts/mobile/index.jsx @@ -9,11 +9,9 @@ export default (props) => { -
{React.cloneElement(props.children, props)}
-
diff --git a/packages/app/src/layouts/none/index.jsx b/packages/app/src/layouts/none/index.jsx index 943fc832..e05c7417 100755 --- a/packages/app/src/layouts/none/index.jsx +++ b/packages/app/src/layouts/none/index.jsx @@ -5,7 +5,7 @@ import classnames from "classnames" import { Drawer, Sidedrawer } from "components/Layout" export default (props) => { - return + return
diff --git a/packages/app/src/pages/@mobile-views/player/index.jsx b/packages/app/src/pages/@mobile-views/player/index.jsx new file mode 100644 index 00000000..27ac6896 --- /dev/null +++ b/packages/app/src/pages/@mobile-views/player/index.jsx @@ -0,0 +1,12 @@ +import React from "react" +import MediaPlayer from "components/Player/MediaPlayer" + +import "./index.less" + +export default () => { + return
+ +
+} \ No newline at end of file diff --git a/packages/app/src/pages/@mobile-views/player/index.less b/packages/app/src/pages/@mobile-views/player/index.less new file mode 100644 index 00000000..d58f797c --- /dev/null +++ b/packages/app/src/pages/@mobile-views/player/index.less @@ -0,0 +1,8 @@ +.__mobile-player-view { + display: flex; + + flex-direction: column; + + height: 100%; + width: 100%; +} \ No newline at end of file diff --git a/packages/app/src/pages/account/index.jsx b/packages/app/src/pages/account/index.jsx index 9b5c191c..ed667519 100755 --- a/packages/app/src/pages/account/index.jsx +++ b/packages/app/src/pages/account/index.jsx @@ -258,7 +258,7 @@ export default class Account extends React.Component {
this.handlePageTransition(e.key)} > diff --git a/packages/app/src/pages/index.mobile.jsx b/packages/app/src/pages/index.mobile.jsx new file mode 100644 index 00000000..13b302c7 --- /dev/null +++ b/packages/app/src/pages/index.mobile.jsx @@ -0,0 +1,35 @@ +import React from "react" +import * as antd from "antd" +import { Translation } from "react-i18next" + +import { PagePanelWithNavMenu } from "components/PagePanels" + +import { Icons } from "components/Icons" + +import Tabs from "./home/tabs" + +export default class Home extends React.Component { + render() { + const navMenuHeader = <> +

+ + {(t) => t("Timeline")} +

+ + + {(t) => t("Create")} + + + + return + } +} \ No newline at end of file diff --git a/packages/app/src/pages/login/index.jsx b/packages/app/src/pages/login/index.jsx index 8b6d5ea2..0b9eab75 100755 --- a/packages/app/src/pages/login/index.jsx +++ b/packages/app/src/pages/login/index.jsx @@ -75,7 +75,7 @@ export default (props) => {
- +
{ diff --git a/packages/app/src/pages/login/index.mobile.jsx b/packages/app/src/pages/login/index.mobile.jsx index 97116dbb..2cc46086 100755 --- a/packages/app/src/pages/login/index.mobile.jsx +++ b/packages/app/src/pages/login/index.mobile.jsx @@ -1,12 +1,15 @@ import React from "react" -import "./index.less" +import "./index.mobile.less" export default (props) => { const [wallpaperData, setWallpaperData] = React.useState(null) const setRandomWallpaper = async () => { - const featuredWallpapers = await app.cores.api.request("main", "get", "featuredWallpapers").catch((err) => { + const { data: featuredWallpapers } = await app.cores.api.customRequest({ + method: "GET", + url: "/featured_wallpapers" + }).catch((err) => { console.error(err) return [] }) @@ -19,12 +22,12 @@ export default (props) => { React.useEffect(() => { if (app.userData) { - return app.goMain() + return app.navigation.goMain() } setRandomWallpaper() - app.eventBus.emit("app.createLogin", { + app.controls.openLoginForm({ defaultLocked: true, }) }, []) @@ -36,9 +39,9 @@ export default (props) => { }} className="wallpaper" > -

+ {/*

{wallpaperData?.author ? wallpaperData.author : null} -

+

*/}
} \ No newline at end of file diff --git a/packages/app/src/pages/login/index.mobile.less b/packages/app/src/pages/login/index.mobile.less new file mode 100644 index 00000000..b05a5d18 --- /dev/null +++ b/packages/app/src/pages/login/index.mobile.less @@ -0,0 +1,22 @@ +.loginPage { + position: relative; + + width: 100%; + height: 100vh; + height: 100dvh; + + .wallpaper { + position: absolute; + + top: 0; + left: 0; + + width: 100%; + height: 100vh; + height: 100dvh; + + background-position: center; + background-size: cover; + background-repeat: no-repeat; + } +} \ No newline at end of file diff --git a/packages/app/src/pages/lyrics/index.jsx b/packages/app/src/pages/lyrics/index.jsx index 5777fa3b..b8cf7da3 100644 --- a/packages/app/src/pages/lyrics/index.jsx +++ b/packages/app/src/pages/lyrics/index.jsx @@ -601,10 +601,16 @@ export default class SyncLyrics extends React.Component { colorAnalysis, }) - app.SidebarController.toggleVisibility(false) + if (app.SidebarController) { + app.SidebarController.toggleVisibility(false) + } + + if (app.layout.floatingStack) { + app.layout.floatingStack.toogleGlobalVisibility(false) + } + app.cores.style.compactMode(true) app.cores.style.applyVariant("dark") - app.layout.floatingStack.toogleGlobalVisibility(false) // request full screen to browser if (document.fullscreenEnabled) { @@ -640,10 +646,16 @@ export default class SyncLyrics extends React.Component { delete window._hacks - app.SidebarController.toggleVisibility(true) + if (app.SidebarController) { + app.SidebarController.toggleVisibility(true) + } + + if (app.layout.floatingStack) { + app.layout.floatingStack.toogleGlobalVisibility(true) + } + app.cores.style.compactMode(false) app.cores.style.applyInitialVariant() - app.layout.floatingStack.toogleGlobalVisibility(true) // exit full screen if (document.fullscreenEnabled) { diff --git a/packages/app/src/pages/music/creator/index.jsx b/packages/app/src/pages/music/creator/index.jsx index c86d7ccd..0f8a7102 100755 --- a/packages/app/src/pages/music/creator/index.jsx +++ b/packages/app/src/pages/music/creator/index.jsx @@ -279,7 +279,9 @@ export default class PlaylistCreatorSteps extends React.Component { okType: "danger", cancelText: "Cancel", onOk: async () => { - const result = await PlaylistModel.deletePlaylist(this.props.playlist_id) + const result = await PlaylistModel.deletePlaylist(this.props.playlist_id, { + remove_with_tracks: true + }) if (result) { app.message.success("Playlist deleted") diff --git a/packages/app/src/pages/play/[play_id].jsx b/packages/app/src/pages/play/[play_id].jsx index 122782f8..b720fd1a 100755 --- a/packages/app/src/pages/play/[play_id].jsx +++ b/packages/app/src/pages/play/[play_id].jsx @@ -105,7 +105,7 @@ export default (props) => { return
diff --git a/packages/app/src/pages/play/index.less b/packages/app/src/pages/play/index.less index 82de831e..c4a31764 100755 --- a/packages/app/src/pages/play/index.less +++ b/packages/app/src/pages/play/index.less @@ -1,4 +1,4 @@ -.play { +.playlist_view { display: grid; grid-template-columns: 30vw 1fr; @@ -54,15 +54,12 @@ background-color: black; border-radius: 12px; - overflow: hidden; img { width: 100%; height: 100%; - border-radius: 12px; - object-fit: cover; } } diff --git a/packages/app/src/pages/settings/index.jsx b/packages/app/src/pages/settings/index.jsx index f3d57117..3f216d92 100755 --- a/packages/app/src/pages/settings/index.jsx +++ b/packages/app/src/pages/settings/index.jsx @@ -591,7 +591,7 @@ export default () => { className={classnames( "settings_wrapper", { - ["mobile"]: window.isMobile, + ["mobile"]: app.isMobile, } )} > diff --git a/packages/app/src/router.jsx b/packages/app/src/router.jsx index f09ce3f8..2cdac8a0 100755 --- a/packages/app/src/router.jsx +++ b/packages/app/src/router.jsx @@ -46,7 +46,7 @@ const mobileRoutes = Object.keys(pathsMobile).map((route) => { return { path, - element: pathsMobile[path] + element: pathsMobile[route] } }) @@ -192,13 +192,11 @@ export const PageRender = React.memo((props) => { return { routes.map((route, index) => { - let Element = route.element + if (app.isMobile) { + const mobileRoute = mobileRoutes.find((r) => r.path === route.path) - if (window.isMobile) { - const mobileElement = mobileRoutes.find((r) => r.path === route.path) - - if (mobileElement) { - Element = mobileElement + if (mobileRoute) { + route = mobileRoute } } diff --git a/packages/app/src/theme/animations.less b/packages/app/src/theme/animations.less index b5fb0386..2fc35b5c 100755 --- a/packages/app/src/theme/animations.less +++ b/packages/app/src/theme/animations.less @@ -93,4 +93,23 @@ to { opacity: 0; } +} + +@keyframes bounce { + + 0%, + 20%, + 50%, + 80%, + 100% { + transform: translateY(0); + } + + 40% { + transform: translateY(-5px); + } + + 60% { + transform: translateY(-3px); + } } \ No newline at end of file diff --git a/packages/app/src/theme/mobile.less b/packages/app/src/theme/mobile.less index 70b66f9a..3c82c70a 100755 --- a/packages/app/src/theme/mobile.less +++ b/packages/app/src/theme/mobile.less @@ -10,8 +10,10 @@ .content_wrapper { height: 100%; width: 100%; + overflow-y: scroll; - padding-top: 20px; + + //padding-top: 20px; } .content_layout { @@ -22,142 +24,139 @@ align-items: center; justify-content: center; - width: 100vw; - padding: 0 10px; + width: 100%; + padding: 7px; + + box-sizing: border-box; } - .frameDecorator { - position: absolute; - left: 0; - - z-index: 8000; - - width: 100vw; - height: @app_frameDecorator_height; - - background-color: rgba(var(--layoutBackgroundColor), 0.8); - - filter: blur(4px); - backdrop-filter: blur(10px); - - &.top { - top: 0; - transform: translate(0, -6px); - } - - &.bottom { - bottom: 0; - transform: translate(0, 6px); - } - } - - // FIXMETS FOR MOBILE LAYOUT - .loginPage { - flex-direction: column; - - .wallpaper { - width: 100vw; - } - } - - .dashboard { - display: flex; - flex-direction: column; - } - - .postPage { + .playlist_view { display: flex; flex-direction: column; - height: 90vh; + .play_info_wrapper { + position: relative; - .postCard { - &.fullmode { - .wrapper { - height: 76vh; + .play_info { + width: 100%; - .post_content { - .post_attachments { - height: 60vh; - overflow: hidden; + .play_info_cover { + width: 100%; + height: 100%; + } + } + } - .carousel-root { - .carousel { - min-height: 200px; + .list { + padding: 30px 10px; + } + } - >div { - display: flex; - align-items: center; - height: 100%; - } - } - } + .pagePanels { + display: flex; + flex-direction: column; + + align-items: center; + justify-content: center; + + overflow-x: visible; + + width: 100%; + height: 100%; + + .panel { + width: 100%; + //height: 100%; + + &.left { + z-index: 500; + overflow: visible; + overflow-x: visible; + } + + &.right { + z-index: 400; + + overflow-x: visible; + } + } + + .card { + width: 100%; + height: 100%; + + display: flex; + flex-direction: row; + + padding: 5px; + + justify-content: space-between; + + box-shadow: @card-shadow; + + border-radius: 12px; + + isolation: unset; + overflow: visible; + + .item { + display: flex; + flex-direction: column; + + justify-content: center; + align-items: center; + + padding: 5px 10px; + + border-radius: 8px; + + .icon { + svg { + margin: 0 !important; + font-size: 1rem; + } + } + + .label { + font-size: 0.6rem; + } + + &.active { + .icon { + svg { + color: var(--colorPrimary); + } + } + + .label { + color: var(--colorPrimary); + } + + background-color: var(--background-color-primary); + } + } + } + } + + .post-list_wrapper { + .post-list { + padding-top: 10px; + border-radius: 0; + + .playlistTimelineEntry { + width: 100%; + + .playlistTimelineEntry_content { + .playlistTimelineEntry_thumbnail { + img { + width: 20vw; + height: 20vw; } } } } - } - } - .accountProfile { - padding: 0; - - .contents { - display: flex; - flex-direction: column; - - padding: 0; - - margin-top: -4.0vh; - - padding: 0; - - .tabContent { - padding: 0; - padding-top: 26px; - } - - .tabMenuWrapper { - display: flex; - flex-direction: column; - align-items: center; - justify-content: center; - - width: 100%; - - margin: 0; - - .ant-menu { - padding: 0; - margin: 0; - } - } - } - } - - .liveStream { - flex-direction: column; - - .plyr { - position: absolute; - - top: 0; - left: 0; - - width: 100%; - height: 60vh; - - border-radius: 6px; - } - - .panel { - height: 40vh; - } - } - - .postCard { - .post_actionsWrapper { - .actions { + .postCard { width: 100%; } }