diff --git a/package-lock.json b/package-lock.json index a36af0fdaf..bb453b4f22 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10026,9 +10026,9 @@ } }, "node_modules/@codemirror/commands": { - "version": "6.9.0", - "resolved": "https://registry.npmjs.org/@codemirror/commands/-/commands-6.9.0.tgz", - "integrity": "sha512-454TVgjhO6cMufsyyGN70rGIfJxJEjcqjBG2x2Y03Y/+Fm99d3O/Kv1QDYWuG6hvxsgmjXmBuATikIIYvERX+w==", + "version": "6.10.1", + "resolved": "https://registry.npmjs.org/@codemirror/commands/-/commands-6.10.1.tgz", + "integrity": "sha512-uWDWFypNdQmz2y1LaNJzK7fL7TYKLeUAU0npEC685OKTF3KcQ2Vu3klIM78D7I6wGhktme0lh3CuQLv0ZCrD9Q==", "dev": true, "license": "MIT", "dependencies": { @@ -10087,9 +10087,9 @@ } }, "node_modules/@codemirror/lang-markdown": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/@codemirror/lang-markdown/-/lang-markdown-6.4.0.tgz", - "integrity": "sha512-ZeArR54seh4laFbUTVy0ZmQgO+C/cxxlW4jEoQMhL3HALScBpZBeZcLzrQmJsTEx4is9GzOe0bFAke2B1KZqeA==", + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/@codemirror/lang-markdown/-/lang-markdown-6.5.0.tgz", + "integrity": "sha512-0K40bZ35jpHya6FriukbgaleaqzBLZfOh7HuzqbMxBXkbYMJDxfF39c23xOgxFezR+3G+tR2/Mup+Xk865OMvw==", "dev": true, "license": "MIT", "dependencies": { @@ -10103,24 +10103,24 @@ } }, "node_modules/@codemirror/language": { - "version": "6.11.3", - "resolved": "https://registry.npmjs.org/@codemirror/language/-/language-6.11.3.tgz", - "integrity": "sha512-9HBM2XnwDj7fnu0551HkGdrUrrqmYq/WC5iv6nbY2WdicXdGbhR/gfbZOH73Aqj4351alY1+aoG9rCNfiwS1RA==", + "version": "6.12.1", + "resolved": "https://registry.npmjs.org/@codemirror/language/-/language-6.12.1.tgz", + "integrity": "sha512-Fa6xkSiuGKc8XC8Cn96T+TQHYj4ZZ7RdFmXA3i9xe/3hLHfwPZdM+dqfX0Cp0zQklBKhVD8Yzc8LS45rkqcwpQ==", "dev": true, "license": "MIT", "dependencies": { "@codemirror/state": "^6.0.0", "@codemirror/view": "^6.23.0", - "@lezer/common": "^1.1.0", + "@lezer/common": "^1.5.0", "@lezer/highlight": "^1.0.0", "@lezer/lr": "^1.0.0", "style-mod": "^4.0.0" } }, "node_modules/@codemirror/lint": { - "version": "6.9.0", - "resolved": "https://registry.npmjs.org/@codemirror/lint/-/lint-6.9.0.tgz", - "integrity": "sha512-wZxW+9XDytH3SKvS8cQzMyQCaaazH8XL1EMHleHe00wVzsv7NBQKVW2yzEHrRhmM7ZOhVdItPbvlRBvMp9ej7A==", + "version": "6.9.2", + "resolved": "https://registry.npmjs.org/@codemirror/lint/-/lint-6.9.2.tgz", + "integrity": "sha512-sv3DylBiIyi+xKwRCJAAsBZZZWo82shJ/RTMymLabAdtbkV5cSKwWDeCgtUq3v8flTaXS2y1kKkICuRYtUswyQ==", "dev": true, "license": "MIT", "dependencies": { @@ -10142,9 +10142,9 @@ } }, "node_modules/@codemirror/state": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/@codemirror/state/-/state-6.5.2.tgz", - "integrity": "sha512-FVqsPqtPWKVVL3dPSxy8wEF/ymIEuVzF1PK3VbUgrxXpJUSHQWWZz4JMToquRxnkw+36LTamCZG2iua2Ptq0fA==", + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/@codemirror/state/-/state-6.5.4.tgz", + "integrity": "sha512-8y7xqG/hpB53l25CIoit9/ngxdfoG+fx+V3SHBrinnhOtLvKHRyAJJuHzkWrR4YXXLX8eXBsejgAAxHUOdW1yw==", "dev": true, "license": "MIT", "dependencies": { @@ -10152,9 +10152,9 @@ } }, "node_modules/@codemirror/view": { - "version": "6.38.6", - "resolved": "https://registry.npmjs.org/@codemirror/view/-/view-6.38.6.tgz", - "integrity": "sha512-qiS0z1bKs5WOvHIAC0Cybmv4AJSkAXgX5aD6Mqd2epSLlVJsQl8NG23jCVouIgkh4All/mrbdsf2UOLFnJw0tw==", + "version": "6.39.11", + "resolved": "https://registry.npmjs.org/@codemirror/view/-/view-6.39.11.tgz", + "integrity": "sha512-bWdeR8gWM87l4DB/kYSF9A+dVackzDb/V56Tq7QVrQ7rn86W0rgZFtlL3g3pem6AeGcb9NQNoy3ao4WpW4h5tQ==", "dev": true, "license": "MIT", "dependencies": { @@ -13713,9 +13713,9 @@ "license": "MIT" }, "node_modules/@lezer/common": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/@lezer/common/-/common-1.2.3.tgz", - "integrity": "sha512-w7ojc8ejBqr2REPsWxJjrMFsA/ysDCFICn8zEOR9mrqzOu2amhITYuLD8ag6XZf0CFXDrhKqw7+tW8cX66NaDA==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@lezer/common/-/common-1.5.0.tgz", + "integrity": "sha512-PNGcolp9hr4PJdXR4ix7XtixDrClScvtSCYW3rQG106oVMOOI+jFb+0+J3mbeL/53g1Zd6s0kJzaw6Ri68GmAA==", "dev": true, "license": "MIT" }, @@ -13732,9 +13732,9 @@ } }, "node_modules/@lezer/generator": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/@lezer/generator/-/generator-1.7.3.tgz", - "integrity": "sha512-vAI2O1tPF8QMMgp+bdUeeJCneJNkOZvqsrtyb4ohnFVFdboSqPwBEacnt0HH4E+5h+qsIwTHUSAhffU4hzKl1A==", + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/@lezer/generator/-/generator-1.8.0.tgz", + "integrity": "sha512-/SF4EDWowPqV1jOgoGSGTIFsE7Ezdr7ZYxyihl5eMKVO5tlnpIhFcDavgm1hHY5GEonoOAEnJ0CU0x+tvuAuUg==", "dev": true, "license": "MIT", "dependencies": { @@ -13746,12 +13746,13 @@ } }, "node_modules/@lezer/highlight": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@lezer/highlight/-/highlight-1.2.1.tgz", - "integrity": "sha512-Z5duk4RN/3zuVO7Jq0pGLJ3qynpxUVsh7IbUbGj88+uV2ApSAn6kWg2au3iJb+0Zi7kKtqffIESgNcRXWZWmSA==", + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@lezer/highlight/-/highlight-1.2.3.tgz", + "integrity": "sha512-qXdH7UqTvGfdVBINrgKhDsVTJTxactNNxLk7+UMwZhU13lMHaOBlJe9Vqp907ya56Y3+ed2tlqzys7jDkTmW0g==", "dev": true, + "license": "MIT", "dependencies": { - "@lezer/common": "^1.0.0" + "@lezer/common": "^1.3.0" } }, "node_modules/@lezer/html": { @@ -13779,22 +13780,23 @@ } }, "node_modules/@lezer/lr": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/@lezer/lr/-/lr-1.4.2.tgz", - "integrity": "sha512-pu0K1jCIdnQ12aWNaAVU5bzi7Bd1w54J3ECgANPmYLtQKP0HBj2cE/5coBD66MT10xbtIuUr7tg0Shbsvk0mDA==", + "version": "1.4.7", + "resolved": "https://registry.npmjs.org/@lezer/lr/-/lr-1.4.7.tgz", + "integrity": "sha512-wNIFWdSUfX9Jc6ePMzxSPVgTVB4EOfDIwLQLWASyiUdHKaMsiilj9bYiGkGQCKVodd0x6bgQCV207PILGFCF9Q==", "dev": true, + "license": "MIT", "dependencies": { "@lezer/common": "^1.0.0" } }, "node_modules/@lezer/markdown": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/@lezer/markdown/-/markdown-1.4.3.tgz", - "integrity": "sha512-kfw+2uMrQ/wy/+ONfrH83OkdFNM0ye5Xq96cLlaCy7h5UT9FO54DU4oRoIc0CSBh5NWmWuiIJA7NGLMJbQ+Oxg==", + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/@lezer/markdown/-/markdown-1.6.3.tgz", + "integrity": "sha512-jpGm5Ps+XErS+xA4urw7ogEGkeZOahVQF21Z6oECF0sj+2liwZopd2+I8uH5I/vZsRuuze3OxBREIANLf6KKUw==", "dev": true, "license": "MIT", "dependencies": { - "@lezer/common": "^1.0.0", + "@lezer/common": "^1.5.0", "@lezer/highlight": "^1.0.0" } }, @@ -59152,20 +59154,20 @@ "@babel/preset-typescript": "^7.28.5", "@babel/register": "^7.28.3", "@codemirror/autocomplete": "github:overleaf/codemirror-autocomplete#6445cd056671c98d12d1c597ba705e11327ec4c5", - "@codemirror/commands": "^6.9.0", - "@codemirror/lang-markdown": "^6.4.0", - "@codemirror/language": "^6.11.3", - "@codemirror/lint": "^6.9.0", + "@codemirror/commands": "6.10.1", + "@codemirror/lang-markdown": "6.5.0", + "@codemirror/language": "6.12.1", + "@codemirror/lint": "6.9.2", "@codemirror/search": "github:overleaf/codemirror-search#04380a528c339cd4b78fb10b3ef017f657ec17bd", - "@codemirror/state": "^6.5.2", - "@codemirror/view": "^6.38.6", + "@codemirror/state": "6.5.4", + "@codemirror/view": "6.39.11", "@floating-ui/react": "^0.27.5", "@juggle/resize-observer": "^3.3.1", - "@lezer/common": "^1.2.3", - "@lezer/generator": "^1.7.3", - "@lezer/highlight": "^1.2.1", - "@lezer/lr": "^1.4.2", - "@lezer/markdown": "^1.4.3", + "@lezer/common": "1.5.0", + "@lezer/generator": "1.8.0", + "@lezer/highlight": "1.2.3", + "@lezer/lr": "1.4.7", + "@lezer/markdown": "1.6.3", "@overleaf/codemirror-tree-view": "^0.1.3", "@overleaf/dictionaries": "https://github.com/overleaf/dictionaries/archive/refs/tags/v0.0.3.tar.gz", "@overleaf/eslint-plugin": "*", diff --git a/services/web/frontend/js/features/source-editor/extensions/visual/atomic-decorations.ts b/services/web/frontend/js/features/source-editor/extensions/visual/atomic-decorations.ts index 5cae6eae1a..cdedab31b4 100644 --- a/services/web/frontend/js/features/source-editor/extensions/visual/atomic-decorations.ts +++ b/services/web/frontend/js/features/source-editor/extensions/visual/atomic-decorations.ts @@ -1017,7 +1017,7 @@ export const atomicDecorations = (options: Options) => { ...decorateArgumentBraces( new BraceWidget(decorateBrackets ? '' : '['), argumentNode, - from, + argumentNode.from, false, new BraceWidget(decorateBrackets ? '' : ']'), { open: OpenBracket, close: CloseBracket } diff --git a/services/web/frontend/js/features/source-editor/extensions/visual/visual-widgets/brace.ts b/services/web/frontend/js/features/source-editor/extensions/visual/visual-widgets/brace.ts index 12949f5ac9..3c30ca387a 100644 --- a/services/web/frontend/js/features/source-editor/extensions/visual/visual-widgets/brace.ts +++ b/services/web/frontend/js/features/source-editor/extensions/visual/visual-widgets/brace.ts @@ -1,16 +1,14 @@ import { WidgetType } from '@codemirror/view' export class BraceWidget extends WidgetType { - constructor(private content?: string) { + constructor(private content = '') { super() } toDOM() { const element = document.createElement('span') element.classList.add('ol-cm-brace') - if (this.content !== undefined) { - element.textContent = this.content - } + element.textContent = this.content return element } @@ -22,6 +20,11 @@ export class BraceWidget extends WidgetType { return widget.content === this.content } + updateDOM(element: HTMLSpanElement): boolean { + element.textContent = this.content + return true + } + coordsAt(element: HTMLElement) { return element.getBoundingClientRect() } diff --git a/services/web/frontend/js/features/source-editor/extensions/visual/visual-widgets/icon-brace.ts b/services/web/frontend/js/features/source-editor/extensions/visual/visual-widgets/icon-brace.ts index 55d4338e96..e42e1a343e 100644 --- a/services/web/frontend/js/features/source-editor/extensions/visual/visual-widgets/icon-brace.ts +++ b/services/web/frontend/js/features/source-editor/extensions/visual/visual-widgets/icon-brace.ts @@ -1,7 +1,7 @@ import { WidgetType } from '@codemirror/view' export class IconBraceWidget extends WidgetType { - constructor(private content?: string) { + constructor(private content = '') { super() } @@ -9,9 +9,7 @@ export class IconBraceWidget extends WidgetType { const element = document.createElement('span') element.classList.add('ol-cm-brace') element.classList.add('ol-cm-icon-brace') - if (this.content !== undefined) { - element.textContent = this.content - } + element.textContent = this.content return element } @@ -24,7 +22,7 @@ export class IconBraceWidget extends WidgetType { } updateDOM(element: HTMLElement): boolean { - element.textContent = this.content ?? '' + element.textContent = this.content return true } diff --git a/services/web/package.json b/services/web/package.json index 17d4612f43..c53aa80491 100644 --- a/services/web/package.json +++ b/services/web/package.json @@ -207,20 +207,20 @@ "@babel/preset-typescript": "^7.28.5", "@babel/register": "^7.28.3", "@codemirror/autocomplete": "github:overleaf/codemirror-autocomplete#6445cd056671c98d12d1c597ba705e11327ec4c5", - "@codemirror/commands": "^6.9.0", - "@codemirror/lang-markdown": "^6.4.0", - "@codemirror/language": "^6.11.3", - "@codemirror/lint": "^6.9.0", + "@codemirror/commands": "6.10.1", + "@codemirror/lang-markdown": "6.5.0", + "@codemirror/language": "6.12.1", + "@codemirror/lint": "6.9.2", "@codemirror/search": "github:overleaf/codemirror-search#04380a528c339cd4b78fb10b3ef017f657ec17bd", - "@codemirror/state": "^6.5.2", - "@codemirror/view": "^6.38.6", + "@codemirror/state": "6.5.4", + "@codemirror/view": "6.39.11", "@floating-ui/react": "^0.27.5", "@juggle/resize-observer": "^3.3.1", - "@lezer/common": "^1.2.3", - "@lezer/generator": "^1.7.3", - "@lezer/highlight": "^1.2.1", - "@lezer/lr": "^1.4.2", - "@lezer/markdown": "^1.4.3", + "@lezer/common": "1.5.0", + "@lezer/generator": "1.8.0", + "@lezer/highlight": "1.2.3", + "@lezer/lr": "1.4.7", + "@lezer/markdown": "1.6.3", "@overleaf/codemirror-tree-view": "^0.1.3", "@overleaf/dictionaries": "https://github.com/overleaf/dictionaries/archive/refs/tags/v0.0.3.tar.gz", "@overleaf/eslint-plugin": "*", diff --git a/services/web/test/frontend/features/source-editor/components/codemirror-editor-visual.spec.tsx b/services/web/test/frontend/features/source-editor/components/codemirror-editor-visual.spec.tsx index 28d0177dc3..2bbfda6ce3 100644 --- a/services/web/test/frontend/features/source-editor/components/codemirror-editor-visual.spec.tsx +++ b/services/web/test/frontend/features/source-editor/components/codemirror-editor-visual.spec.tsx @@ -730,7 +730,7 @@ describe(' in Visual mode', function () { cy.get('.ol-cm-textcolor') .should('have.length', 1) .should('have.text', 'foo') - .should('have.attr', 'style', 'color: rgb(255,0,0)') + .should('have.attr', 'style', 'color: rgb(255, 0, 0);') }) it('decorates colorbox', function () { @@ -738,7 +738,7 @@ describe(' in Visual mode', function () { cy.get('.ol-cm-colorbox') .should('have.length', 1) .should('have.text', 'foo') - .should('have.attr', 'style', 'background-color: rgb(255,255,0)') + .should('have.attr', 'style', 'background-color: rgb(255, 255, 0);') }) })