diff --git a/packages/app/constants/defaultSettings.json b/packages/app/constants/defaultSettings.json
index 01c80cd2..291e27d4 100755
--- a/packages/app/constants/defaultSettings.json
+++ b/packages/app/constants/defaultSettings.json
@@ -15,6 +15,7 @@
"postCard_expansible_actions": true,
"feed_max_fetch": 20,
"style.compactMode": false,
+ "sidebar.floating": false,
"language": "en",
"sidebarKeys": [
"home",
diff --git a/packages/app/constants/settings/apparence/index.jsx b/packages/app/constants/settings/apparence/index.jsx
index 1930e996..e9a67dd0 100755
--- a/packages/app/constants/settings/apparence/index.jsx
+++ b/packages/app/constants/settings/apparence/index.jsx
@@ -16,6 +16,16 @@ export default [
"experimental": true,
"storaged": true
},
+ {
+ "id": "sidebar.floating",
+ "title": "Floating Sidebar",
+ "description": "Make the sidebar floats over layout content.",
+ "component": "Switch",
+ "icon": "MdOutlineLastPage",
+ "group": "layout",
+ "emitEvent": "app.softReload",
+ "storaged": true
+ },
{
"id": "reduceAnimations",
"storaged": true,
diff --git a/packages/app/src/App.jsx b/packages/app/src/App.jsx
index e1424da1..2ee176f9 100755
--- a/packages/app/src/App.jsx
+++ b/packages/app/src/App.jsx
@@ -123,6 +123,15 @@ class App extends React.Component {
window.electron.ipcRenderer.invoke("app.minimize")
}
},
+ "app.reload": () => {
+ window.location.reload()
+ },
+ "app.softReload": () => {
+ this.forceUpdate()
+
+ app.eventBus.emit("layout.forceUpdate")
+ app.eventBus.emit("router.forceUpdate")
+ },
"app.openSearcher": () => {
App.publicMethods.openSearcher()
},
diff --git a/packages/app/src/components/Layout/sidebar/index.jsx b/packages/app/src/components/Layout/sidebar/index.jsx
index 21a73d15..449cf49c 100755
--- a/packages/app/src/components/Layout/sidebar/index.jsx
+++ b/packages/app/src/components/Layout/sidebar/index.jsx
@@ -227,6 +227,7 @@ export default class Sidebar extends React.Component {
classnames(
"app_sidebar",
{
+ ["floating"]: window.app?.settings.get("sidebar.floating"),
["collapsed"]: this.state.visible && this.state.collapsed,
["elevated"]: this.state.visible && this.state.elevated,
["hidden"]: !this.state.visible,
diff --git a/packages/app/src/components/Layout/sidebar/index.less b/packages/app/src/components/Layout/sidebar/index.less
index 05a4518e..b81306b2 100755
--- a/packages/app/src/components/Layout/sidebar/index.less
+++ b/packages/app/src/components/Layout/sidebar/index.less
@@ -25,6 +25,10 @@
border-radius: 0 @app_sidebar_borderRadius @app_sidebar_borderRadius 0;
border: 1px solid var(--sidebar-background-color);
+ &.floating {
+ position: absolute;
+ }
+
&.collapsed {
width: 80px;
min-width: 80px;
diff --git a/packages/app/src/components/Layout/sidedrawer/index.jsx b/packages/app/src/components/Layout/sidedrawer/index.jsx
index 1285ac7c..da85c3d5 100755
--- a/packages/app/src/components/Layout/sidedrawer/index.jsx
+++ b/packages/app/src/components/Layout/sidedrawer/index.jsx
@@ -224,7 +224,12 @@ export default class SidedrawerController extends React.Component {
render() {
return
{this.state.drawers}
diff --git a/packages/app/src/components/Layout/sidedrawer/index.less b/packages/app/src/components/Layout/sidedrawer/index.less
index 88528d52..fe5c5153 100755
--- a/packages/app/src/components/Layout/sidedrawer/index.less
+++ b/packages/app/src/components/Layout/sidedrawer/index.less
@@ -3,6 +3,12 @@
.sidedrawers-wrapper {
display: flex;
flex-direction: row;
+
+ &.floating-sidebar {
+ z-index: 950;
+ position: absolute;
+ margin-left: @app_sidebar_collapsed_width;
+ }
.sidedrawer {
position: relative;
diff --git a/packages/app/src/components/PostCard/components/header/index.less b/packages/app/src/components/PostCard/components/header/index.less
index f6ea2969..b95e579c 100755
--- a/packages/app/src/components/PostCard/components/header/index.less
+++ b/packages/app/src/components/PostCard/components/header/index.less
@@ -49,6 +49,7 @@
margin: 0;
font-family: "DM Mono", monospace;
align-self: start;
+ font-size: 1rem;
cursor: pointer;
}
diff --git a/packages/app/src/components/Settings/index.jsx b/packages/app/src/components/Settings/index.jsx
index a14c7f41..63ff4c49 100755
--- a/packages/app/src/components/Settings/index.jsx
+++ b/packages/app/src/components/Settings/index.jsx
@@ -91,6 +91,10 @@ const SettingItem = (props) => {
}
}
+ if (item.storaged) {
+ await window.app.settings.set(item.id, updateValue)
+ }
+
if (typeof item.emitEvent === "string") {
let emissionPayload = updateValue
@@ -105,10 +109,6 @@ const SettingItem = (props) => {
return false
}
- if (item.storaged) {
- await window.app.settings.set(item.id, updateValue)
- }
-
if (item.debounced) {
setDelayedValue(null)
}
diff --git a/packages/app/src/layout.jsx b/packages/app/src/layout.jsx
index b43ba3f6..952b977a 100755
--- a/packages/app/src/layout.jsx
+++ b/packages/app/src/layout.jsx
@@ -25,6 +25,9 @@ export default class Layout extends React.PureComponent {
"app.initialization.finish": () => {
app.eventBus.emit("layout.render.unlock")
},
+ "layout.forceUpdate": () => {
+ this.forceUpdate()
+ },
"layout.render.lock": () => {
this.setState({
renderLock: true,
diff --git a/packages/app/src/layouts/default/index.jsx b/packages/app/src/layouts/default/index.jsx
index 0bf7866d..b562a4be 100755
--- a/packages/app/src/layouts/default/index.jsx
+++ b/packages/app/src/layouts/default/index.jsx
@@ -12,13 +12,18 @@ export default (props) => {
-
-
-
- {React.cloneElement(props.children, props)}
-
-
-
+
+
+ {React.cloneElement(props.children, props)}
+
+
>
-}
+}
\ No newline at end of file
diff --git a/packages/app/src/theme/index.less b/packages/app/src/theme/index.less
index e917bed7..45f4aacd 100755
--- a/packages/app/src/theme/index.less
+++ b/packages/app/src/theme/index.less
@@ -160,30 +160,29 @@ html {
}
}
-.ant-layout,
.content_layout {
- width: 100%;
- height: 100%;
- max-height: 100vh;
-
- background-color: transparent;
-}
-
-.layout_page {
position: relative;
-webkit-overflow-scrolling: touch;
-
+
height: 100%;
+ width: 100%;
+ max-height: 100vh;
padding: 10px;
-
+
overflow-x: hidden;
overflow-y: overlay;
-
+
transition: all 150ms ease-in-out;
margin: var(--layoutMargin);
padding: var(--layoutPadding);
+
+ background-color: transparent;
+
+ &.floating-sidebar {
+ margin-left: @app_sidebar_collapsed_width;
+ }
}
.app_background_decorator {