diff --git a/front/package-lock.json b/front/package-lock.json
index 1af993700..0dfd9847c 100644
--- a/front/package-lock.json
+++ b/front/package-lock.json
@@ -34,6 +34,7 @@
"js-yaml": "^4.1.0",
"lodash.debounce": "^4.0.8",
"lodash.throttle": "^4.1.1",
+ "lucide-react": "^0.474.0",
"monaco-editor": "^0.52.0",
"object-path-immutable": "^4.1.0",
"pagedjs": "^0.4.0",
@@ -7397,6 +7398,15 @@
"integrity": "sha512-AI2r85+4MquTw9ZYqabu4nMwy9Oftlfa/e/52t9IjtfG+mGBbTNdAoZ3RQKLHR6r0wQnwZnPIEh/Ya6XTWAKNA==",
"optional": true
},
+ "node_modules/lucide-react": {
+ "version": "0.474.0",
+ "resolved": "https://registry.npmjs.org/lucide-react/-/lucide-react-0.474.0.tgz",
+ "integrity": "sha512-CmghgHkh0OJNmxGKWc0qfPJCYHASPMVSyGY8fj3xgk4v84ItqDg64JNKFZn5hC6E0vHi6gxnbCgwhyVB09wQtA==",
+ "license": "ISC",
+ "peerDependencies": {
+ "react": "^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0"
+ }
+ },
"node_modules/lz-string": {
"version": "1.5.0",
"resolved": "https://registry.npmjs.org/lz-string/-/lz-string-1.5.0.tgz",
diff --git a/front/package.json b/front/package.json
index 1db3e9d52..78253ed3d 100644
--- a/front/package.json
+++ b/front/package.json
@@ -52,6 +52,7 @@
"js-yaml": "^4.1.0",
"lodash.debounce": "^4.0.8",
"lodash.throttle": "^4.1.1",
+ "lucide-react": "^0.474.0",
"monaco-editor": "^0.52.0",
"object-path-immutable": "^4.1.0",
"pagedjs": "^0.4.0",
@@ -113,4 +114,4 @@
"node": "18.20.4",
"npm": "10.9.0"
}
-}
\ No newline at end of file
+}
diff --git a/front/src/components/Sidebar.jsx b/front/src/components/Sidebar.jsx
new file mode 100644
index 000000000..a7544360f
--- /dev/null
+++ b/front/src/components/Sidebar.jsx
@@ -0,0 +1,32 @@
+import clsx from 'clsx'
+import { PanelRightClose, PanelRightOpen } from 'lucide-react'
+
+import styles from './Sidebar.module.scss'
+
+export default function Sidebar({
+ opened,
+ setOpened,
+ labelOpened,
+ labelClosed,
+ children,
+}) {
+ const button = opened ? (
+
+ ) : (
+
+ )
+
+ const label = opened ? labelOpened ?? 'Close' : labelClosed ?? 'Open'
+
+ return (
+
+
setOpened(!opened)}>
+
{button}
+
{label}
+
+ {opened &&
{children}
}
+
+ )
+}
diff --git a/front/src/components/Sidebar.module.scss b/front/src/components/Sidebar.module.scss
new file mode 100644
index 000000000..90111c30f
--- /dev/null
+++ b/front/src/components/Sidebar.module.scss
@@ -0,0 +1,51 @@
+.sidebar {
+ border-left: 1px solid #DCDCDC;
+ margin-left: 2rem;
+ max-width: 33vw;
+ position: relative;
+}
+
+.opened {
+ margin-left: 6rem;
+ .action {
+ left: -4.5rem;
+ }
+}
+
+.closed {
+ margin-left: 6rem;
+ padding-left: 3rem;
+
+ .action {
+ right: 0.5rem;
+ }
+}
+
+.action {
+ display: flex;
+ background-color: #F9F9F9;
+ border: 1px solid #DCDCDC;
+ padding: 0.5rem 1rem;
+ align-items: center;
+ gap: 0.25rem;
+ position: absolute;
+ top: 1rem;
+ max-width: fit-content;
+ cursor: pointer;
+}
+
+.icon {
+ display: flex;
+ align-items: center;
+}
+
+.label {
+ font-weight: 500;
+}
+
+.content {
+ margin-top: 4rem;
+ padding-top: 1rem;
+ padding-left: 1rem;
+}
+
diff --git a/front/src/components/Write/ArticleEditorMetadata.jsx b/front/src/components/Write/ArticleEditorMetadata.jsx
index a035f662d..1948e17d2 100644
--- a/front/src/components/Write/ArticleEditorMetadata.jsx
+++ b/front/src/components/Write/ArticleEditorMetadata.jsx
@@ -4,7 +4,7 @@ import { useDispatch, useSelector } from 'react-redux'
import PropTypes from 'prop-types'
import { useTranslation } from 'react-i18next'
import YAML from 'js-yaml'
-import { Sidebar } from 'react-feather'
+import Sidebar from '../Sidebar.jsx'
import { toYaml } from './metadata/yaml.js'
import ArticleEditorMetadataForm from './yamleditor/ArticleEditorMetadataForm.jsx'
@@ -74,77 +74,55 @@ export default function ArticleEditorMetadata({
)
return (
-