diff --git a/horreum-web/package-lock.json b/horreum-web/package-lock.json index eea3d9a76..4f81951d4 100644 --- a/horreum-web/package-lock.json +++ b/horreum-web/package-lock.json @@ -29,7 +29,7 @@ "keycloak-js": "23.0.7", "luxon": "3.3.0", "moment": "2.30.1", - "monaco-editor": "0.52.0", + "monaco-editor": "0.54.0", "react": "19.1.1", "react-autosuggest": "10.1.0", "react-dom": "19.1.1", @@ -2416,6 +2416,12 @@ "domelementtype": "1" } }, + "node_modules/dompurify": { + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-3.1.7.tgz", + "integrity": "sha512-VaTstWtsneJY8xzy7DekmYWEOZcmzIe3Qb3zPd4STve1OBTa+e+WmS1ITQec1fZYXI3HCsOZZiSMpG6oxoWMWQ==", + "license": "(MPL-2.0 OR Apache-2.0)" + }, "node_modules/domutils": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz", @@ -3607,6 +3613,18 @@ "node": ">=12" } }, + "node_modules/marked": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/marked/-/marked-14.0.0.tgz", + "integrity": "sha512-uIj4+faQ+MgHgwUW1l2PsPglZLOLOT1uErt06dAPtx2kjteLAkbsd/0FiYg/MGS+i7ZKLb7w2WClxHkzOOuryQ==", + "license": "MIT", + "bin": { + "marked": "bin/marked.js" + }, + "engines": { + "node": ">= 18" + } + }, "node_modules/mdast-util-from-markdown": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.2.tgz", @@ -4244,9 +4262,14 @@ } }, "node_modules/monaco-editor": { - "version": "0.52.0", - "resolved": "https://registry.npmjs.org/monaco-editor/-/monaco-editor-0.52.0.tgz", - "integrity": "sha512-OeWhNpABLCeTqubfqLMXGsqf6OmPU6pHM85kF3dhy6kq5hnhuVS1p3VrEW/XhWHc71P2tHyS5JFySD8mgs1crw==" + "version": "0.54.0", + "resolved": "https://registry.npmjs.org/monaco-editor/-/monaco-editor-0.54.0.tgz", + "integrity": "sha512-hx45SEUoLatgWxHKCmlLJH81xBo0uXP4sRkESUpmDQevfi+e7K1VuiSprK6UpQ8u4zOcKNiH0pMvHvlMWA/4cw==", + "license": "MIT", + "dependencies": { + "dompurify": "3.1.7", + "marked": "14.0.0" + } }, "node_modules/ms": { "version": "2.1.2", diff --git a/horreum-web/package.json b/horreum-web/package.json index 8fdb285c2..8d8070b1a 100644 --- a/horreum-web/package.json +++ b/horreum-web/package.json @@ -25,7 +25,7 @@ "keycloak-js": "23.0.7", "luxon": "3.3.0", "moment": "2.30.1", - "monaco-editor": "0.52.0", + "monaco-editor": "0.54.0", "react": "19.1.1", "react-autosuggest": "10.1.0", "react-dom": "19.1.1", diff --git a/horreum-web/src/components/Editor/monaco/Editor.tsx b/horreum-web/src/components/Editor/monaco/Editor.tsx index 8ee6415c7..41db99255 100644 --- a/horreum-web/src/components/Editor/monaco/Editor.tsx +++ b/horreum-web/src/components/Editor/monaco/Editor.tsx @@ -15,6 +15,10 @@ export default function Editor(props: EditorProps) { const monaco = useMonaco() const valueGetter = useRef<() => string>(undefined) + // requires re-render. does not sync with localStorage + // the storage event is not triggered on the window where the change is made + const dark = localStorage.getItem('dark-theme') === 'true'; + const onMount: OnMount = (editor: editor.IStandaloneCodeEditor) => { valueGetter.current = () => editor.getValue() if (!monaco) { @@ -38,13 +42,19 @@ export default function Editor(props: EditorProps) {