diff --git a/apps/build-docs/package.json b/apps/build-docs/package.json index c173c96f19..cbfebddae5 100644 --- a/apps/build-docs/package.json +++ b/apps/build-docs/package.json @@ -20,7 +20,7 @@ "@triliumnext/server": "workspace:*" }, "devDependencies": { - "@redocly/cli": "2.25.4", + "@redocly/cli": "2.26.0", "archiver": "7.0.1", "fs-extra": "11.3.4", "js-yaml": "4.1.1", diff --git a/apps/client-standalone/package.json b/apps/client-standalone/package.json index b6da1301f5..420b7a99fb 100644 --- a/apps/client-standalone/package.json +++ b/apps/client-standalone/package.json @@ -32,7 +32,7 @@ "@triliumnext/highlightjs": "workspace:*", "@triliumnext/share-theme": "workspace:*", "@triliumnext/split.js": "workspace:*", - "@zumer/snapdom": "2.7.0", + "@zumer/snapdom": "2.8.0", "autocomplete.js": "0.38.1", "bootstrap": "5.3.8", "boxicons": "2.1.4", @@ -43,7 +43,7 @@ "fflate": "0.8.2", "force-graph": "1.51.2", "globals": "17.4.0", - "i18next": "26.0.3", + "i18next": "26.0.4", "i18next-http-backend": "3.0.4", "aes-js": "3.1.2", "jquery": "4.0.0", diff --git a/apps/client/package.json b/apps/client/package.json index 3aea46be67..11a0e5cc3d 100644 --- a/apps/client/package.json +++ b/apps/client/package.json @@ -42,7 +42,7 @@ "@univerjs/preset-sheets-note": "0.20.0", "@univerjs/preset-sheets-sort": "0.20.0", "@univerjs/presets": "0.20.0", - "@zumer/snapdom": "2.7.0", + "@zumer/snapdom": "2.8.0", "autocomplete.js": "0.38.1", "bootstrap": "5.3.8", "boxicons": "2.1.4", @@ -52,7 +52,7 @@ "dompurify": "3.3.3", "draggabilly": "3.0.0", "force-graph": "1.51.2", - "i18next": "26.0.3", + "i18next": "26.0.4", "i18next-http-backend": "3.0.4", "jquery": "4.0.0", "jquery.fancytree": "2.38.5", diff --git a/apps/client/src/widgets/react/hooks.tsx b/apps/client/src/widgets/react/hooks.tsx index 251463fa9a..6c70703385 100644 --- a/apps/client/src/widgets/react/hooks.tsx +++ b/apps/client/src/widgets/react/hooks.tsx @@ -1447,24 +1447,29 @@ export function useColorScheme() { export function useMathRendering(containerRef: RefObject, deps: unknown[]) { useEffect(() => { if (!containerRef.current) return; - // Support both read-only (.math-tex) and CKEditor editing view (.ck-math-tex) classes - const mathElements = containerRef.current.querySelectorAll(".math-tex, .ck-math-tex"); + const mathElements = containerRef.current.querySelectorAll(".math-tex"); for (const mathEl of mathElements) { // Skip if already rendered by KaTeX if (mathEl.querySelector(".katex")) continue; try { - let equation = mathEl.textContent || ""; + // CKEditor's data format wraps the equation with \(...\) or \[...\] + // delimiters. katex.render() expects raw LaTeX without them. + const raw = mathEl.textContent?.trim() ?? ""; + let equation: string; + let displayMode = false; - // CKEditor widgets store equation without delimiters, add them for KaTeX - if (mathEl.classList.contains("ck-math-tex")) { - // Check if it's display mode or inline - const isDisplay = mathEl.classList.contains("ck-math-tex-display"); - equation = isDisplay ? `\\[${equation}\\]` : `\\(${equation}\\)`; + if (raw.startsWith("\\(") && raw.endsWith("\\)")) { + equation = raw.slice(2, -2); + } else if (raw.startsWith("\\[") && raw.endsWith("\\]")) { + equation = raw.slice(2, -2); + displayMode = true; + } else { + equation = raw; } - math.render(equation, mathEl as HTMLElement); + math.render(equation, mathEl as HTMLElement, { displayMode }); } catch (e) { console.warn("Failed to render math:", e); } diff --git a/apps/client/src/widgets/sidebar/TableOfContents.tsx b/apps/client/src/widgets/sidebar/TableOfContents.tsx index aca1c11c5b..4442af884c 100644 --- a/apps/client/src/widgets/sidebar/TableOfContents.tsx +++ b/apps/client/src/widgets/sidebar/TableOfContents.tsx @@ -200,17 +200,34 @@ function extractTocFromTextEditor(editor: CKTextEditor) { const level = Number(item.name.replace( 'heading', '' )); - // Convert model element to view, then to DOM to get HTML + // Convert model element to view, then to DOM to get HTML. + // Math UIElements render their KaTeX content asynchronously, so + // ck-math-tex spans may be empty at read time. Replace them with + // math-tex spans (the data format) using the equation from the model, + // so useMathRendering can render them synchronously in the sidebar. const viewEl = editor.editing.mapper.toViewElement(item); let text = ''; if (viewEl) { const domEl = editor.editing.view.domConverter.mapViewToDom(viewEl); if (domEl instanceof HTMLElement) { - text = domEl.innerHTML; + const clone = domEl.cloneNode(true) as HTMLElement; + const ckMathSpans = clone.querySelectorAll('.ck-math-tex'); + let mathIdx = 0; + for (const child of item.getChildren()) { + if (!child.is('element', 'mathtex-inline')) continue; + if (mathIdx >= ckMathSpans.length) break; + const equation = String(child.getAttribute('equation') ?? ''); + const span = document.createElement('span'); + span.className = 'math-tex'; + span.textContent = `\\(${equation}\\)`; + ckMathSpans[mathIdx].replaceWith(span); + mathIdx++; + } + text = clone.innerHTML; } } - // Fallback to plain text if conversion fails + // Fallback to plain text if DOM conversion fails if (!text) { text = Array.from( item.getChildren() ) .map( c => c.is( '$text' ) ? c.data : '' ) diff --git a/apps/desktop/package.json b/apps/desktop/package.json index 0ef67c9106..7473aac31f 100644 --- a/apps/desktop/package.json +++ b/apps/desktop/package.json @@ -45,7 +45,7 @@ "@triliumnext/server": "workspace:*", "@types/electron-squirrel-startup": "1.0.2", "copy-webpack-plugin": "14.0.0", - "electron": "41.1.1", + "electron": "41.2.0", "prebuild-install": "7.1.3" } } \ No newline at end of file diff --git a/apps/edit-docs/package.json b/apps/edit-docs/package.json index d663ce56a5..d4cd68e140 100644 --- a/apps/edit-docs/package.json +++ b/apps/edit-docs/package.json @@ -13,7 +13,7 @@ "@triliumnext/desktop": "workspace:*", "@types/fs-extra": "11.0.4", "copy-webpack-plugin": "14.0.0", - "electron": "41.1.1", + "electron": "41.2.0", "fs-extra": "11.3.4" }, "scripts": { diff --git a/apps/server/package.json b/apps/server/package.json index 91d9a3b6bc..e909296494 100644 --- a/apps/server/package.json +++ b/apps/server/package.json @@ -34,11 +34,11 @@ "@ai-sdk/google": "3.0.60", "@ai-sdk/openai": "3.0.52", "@modelcontextprotocol/sdk": "^1.12.1", - "ai": "6.0.153", + "ai": "6.0.154", "better-sqlite3": "12.8.0", "html-to-text": "9.0.5", "i18next-fs-backend": "2.6.3", - "i18next": "26.0.3", + "i18next": "26.0.4", "js-yaml": "4.1.1", "unpdf": "1.4.0" }, @@ -82,7 +82,7 @@ "debounce": "3.0.0", "debug": "4.4.3", "ejs": "5.0.1", - "electron": "41.1.1", + "electron": "41.2.0", "electron-window-state": "5.0.3", "express": "5.2.1", "express-http-proxy": "2.1.2", diff --git a/apps/website/package.json b/apps/website/package.json index d7e31961e7..0f603e930e 100644 --- a/apps/website/package.json +++ b/apps/website/package.json @@ -9,7 +9,7 @@ "preview": "pnpm build && vite preview" }, "dependencies": { - "i18next": "26.0.3", + "i18next": "26.0.4", "preact": "10.29.1", "preact-iso": "2.11.1", "preact-render-to-string": "6.6.7", diff --git a/package.json b/package.json index ac25daf5b5..fdf87efdf5 100644 --- a/package.json +++ b/package.json @@ -105,7 +105,7 @@ "overrides": { "@codemirror/language": "6.12.3", "@lezer/highlight": "1.2.3", - "@lezer/common": "1.5.1", + "@lezer/common": "1.5.2", "mermaid": "11.14.0", "preact": "10.29.1", "roughjs": "4.6.6", @@ -159,7 +159,7 @@ "handlebars@<4.7.9": ">=4.7.9", "qs@<6.14.2": ">=6.14.2", "minimatch@<3.1.4": "^3.1.4", - "minimatch@3>brace-expansion": "^5.0.0", + "minimatch@3>brace-expansion": "^1.1.13", "serialize-javascript@<7.0.5": ">=7.0.5", "webpack@<5.104.1": ">=5.104.1", "file-type@>=13.0.0 <21.3.1": ">=21.3.1", diff --git a/packages/trilium-core/package.json b/packages/trilium-core/package.json index d18d4ea165..b2e702af0f 100644 --- a/packages/trilium-core/package.json +++ b/packages/trilium-core/package.json @@ -13,7 +13,7 @@ "async-mutex": "0.5.0", "chardet": "2.1.1", "escape-html": "1.0.3", - "i18next": "26.0.3", + "i18next": "26.0.4", "mime-types": "3.0.2", "node-html-parser": "7.1.0", "sanitize-filename": "1.6.4", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 1c9c2a807c..0e0ae46e2b 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -7,7 +7,7 @@ settings: overrides: '@codemirror/language': 6.12.3 '@lezer/highlight': 1.2.3 - '@lezer/common': 1.5.1 + '@lezer/common': 1.5.2 mermaid: 11.14.0 preact: 10.29.1 roughjs: 4.6.6 @@ -61,7 +61,7 @@ overrides: handlebars@<4.7.9: '>=4.7.9' qs@<6.14.2: '>=6.14.2' minimatch@<3.1.4: ^3.1.4 - minimatch@3>brace-expansion: ^5.0.0 + minimatch@3>brace-expansion: ^1.1.13 serialize-javascript@<7.0.5: '>=7.0.5' webpack@<5.104.1: '>=5.104.1' file-type@>=13.0.0 <21.3.1: '>=21.3.1' @@ -194,8 +194,8 @@ importers: version: link:../server devDependencies: '@redocly/cli': - specifier: 2.25.4 - version: 2.25.4(@opentelemetry/api@1.9.0)(bufferutil@4.0.9)(core-js@3.46.0)(encoding@0.1.13)(utf-8-validate@6.0.5) + specifier: 2.26.0 + version: 2.26.0(@opentelemetry/api@1.9.0)(bufferutil@4.0.9)(core-js@3.46.0)(encoding@0.1.13)(utf-8-validate@6.0.5) archiver: specifier: 7.0.1 version: 7.0.1 @@ -293,8 +293,8 @@ importers: specifier: 0.20.0 version: 0.20.0(@types/react-dom@19.1.6(@types/react@19.1.7))(@types/react@19.1.7)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(rxjs@7.8.2) '@zumer/snapdom': - specifier: 2.7.0 - version: 2.7.0 + specifier: 2.8.0 + version: 2.8.0 autocomplete.js: specifier: 0.38.1 version: 0.38.1 @@ -323,8 +323,8 @@ importers: specifier: 1.51.2 version: 1.51.2 i18next: - specifier: 26.0.3 - version: 26.0.3(typescript@6.0.2) + specifier: 26.0.4 + version: 26.0.4(typescript@6.0.2) i18next-http-backend: specifier: 3.0.4 version: 3.0.4(encoding@0.1.13) @@ -366,7 +366,7 @@ importers: version: 10.29.1 react-i18next: specifier: 17.0.2 - version: 17.0.2(i18next@26.0.3(typescript@6.0.2))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@6.0.2) + version: 17.0.2(i18next@26.0.4(typescript@6.0.2))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@6.0.2) react-window: specifier: 2.2.7 version: 2.2.7(react-dom@19.2.4(react@19.2.4))(react@19.2.4) @@ -489,8 +489,8 @@ importers: specifier: workspace:* version: link:../../packages/splitjs '@zumer/snapdom': - specifier: 2.7.0 - version: 2.7.0 + specifier: 2.8.0 + version: 2.8.0 aes-js: specifier: 3.1.2 version: 3.1.2 @@ -525,8 +525,8 @@ importers: specifier: 17.4.0 version: 17.4.0 i18next: - specifier: 26.0.3 - version: 26.0.3(typescript@6.0.2) + specifier: 26.0.4 + version: 26.0.4(typescript@6.0.2) i18next-http-backend: specifier: 3.0.4 version: 3.0.4(encoding@0.1.13) @@ -586,7 +586,7 @@ importers: version: 10.29.1 react-i18next: specifier: 17.0.2 - version: 17.0.2(i18next@26.0.3(typescript@6.0.2))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@6.0.2) + version: 17.0.2(i18next@26.0.4(typescript@6.0.2))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@6.0.2) react-window: specifier: 2.2.7 version: 2.2.7(react-dom@19.2.4(react@19.2.4))(react@19.2.4) @@ -671,7 +671,7 @@ importers: dependencies: '@electron/remote': specifier: 2.1.3 - version: 2.1.3(electron@41.1.1) + version: 2.1.3(electron@41.2.0) better-sqlite3: specifier: 12.8.0 version: 12.8.0 @@ -731,8 +731,8 @@ importers: specifier: 14.0.0 version: 14.0.0(webpack@5.105.4(esbuild@0.28.0)) electron: - specifier: 41.1.1 - version: 41.1.1 + specifier: 41.2.0 + version: 41.2.0 prebuild-install: specifier: 7.1.3 version: 7.1.3 @@ -790,8 +790,8 @@ importers: specifier: 14.0.0 version: 14.0.0(webpack@5.105.4(esbuild@0.28.0)) electron: - specifier: 41.1.1 - version: 41.1.1 + specifier: 41.2.0 + version: 41.2.0 fs-extra: specifier: 11.3.4 version: 11.3.4 @@ -820,8 +820,8 @@ importers: specifier: ^1.12.1 version: 1.29.0(zod@4.3.6) ai: - specifier: 6.0.153 - version: 6.0.153(zod@4.3.6) + specifier: 6.0.154 + version: 6.0.154(zod@4.3.6) better-sqlite3: specifier: 12.8.0 version: 12.8.0 @@ -829,8 +829,8 @@ importers: specifier: 9.0.5 version: 9.0.5 i18next: - specifier: 26.0.3 - version: 26.0.3(typescript@6.0.2) + specifier: 26.0.4 + version: 26.0.4(typescript@6.0.2) i18next-fs-backend: specifier: 2.6.3 version: 2.6.3 @@ -846,7 +846,7 @@ importers: version: 7.1.2 '@electron/remote': specifier: 2.1.3 - version: 2.1.3(electron@41.1.1) + version: 2.1.3(electron@41.2.0) '@triliumnext/commons': specifier: workspace:* version: link:../../packages/commons @@ -959,8 +959,8 @@ importers: specifier: 5.0.1 version: 5.0.1 electron: - specifier: 41.1.1 - version: 41.1.1 + specifier: 41.2.0 + version: 41.2.0 electron-window-state: specifier: 5.0.3 version: 5.0.3 @@ -1092,8 +1092,8 @@ importers: apps/website: dependencies: i18next: - specifier: 26.0.3 - version: 26.0.3(typescript@6.0.2) + specifier: 26.0.4 + version: 26.0.4(typescript@6.0.2) preact: specifier: 10.29.1 version: 10.29.1 @@ -1105,7 +1105,7 @@ importers: version: 6.6.7(preact@10.29.1) react-i18next: specifier: 17.0.2 - version: 17.0.2(i18next@26.0.3(typescript@6.0.2))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@6.0.2) + version: 17.0.2(i18next@26.0.4(typescript@6.0.2))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@6.0.2) devDependencies: '@preact/preset-vite': specifier: 2.10.5 @@ -1524,7 +1524,7 @@ importers: version: 6.5.3(@codemirror/language@6.12.3)(@codemirror/state@6.6.0)(@codemirror/view@6.41.0) '@replit/codemirror-lang-nix': specifier: 6.0.1 - version: 6.0.1(@codemirror/autocomplete@6.18.6)(@codemirror/language@6.12.3)(@codemirror/state@6.6.0)(@codemirror/view@6.41.0)(@lezer/common@1.5.1)(@lezer/highlight@1.2.3)(@lezer/lr@1.4.2) + version: 6.0.1(@codemirror/autocomplete@6.18.6)(@codemirror/language@6.12.3)(@codemirror/state@6.6.0)(@codemirror/view@6.41.0)(@lezer/common@1.5.2)(@lezer/highlight@1.2.3)(@lezer/lr@1.4.2) '@replit/codemirror-vim': specifier: 6.3.0 version: 6.3.0(@codemirror/commands@6.10.3)(@codemirror/language@6.12.3)(@codemirror/search@6.6.0)(@codemirror/state@6.6.0)(@codemirror/view@6.41.0) @@ -1668,8 +1668,8 @@ importers: specifier: 1.0.3 version: 1.0.3 i18next: - specifier: 26.0.3 - version: 26.0.3(typescript@6.0.2) + specifier: 26.0.4 + version: 26.0.4(typescript@6.0.2) mime-types: specifier: 3.0.2 version: 3.0.2 @@ -1728,8 +1728,8 @@ packages: peerDependencies: zod: ^3.25.76 || ^4.1.8 - '@ai-sdk/gateway@3.0.93': - resolution: {integrity: sha512-8D6C9eEvDq6IgrdlWzpbniahDkoLiieTCrpzH8p/Hw63/0iPnZJ1uZcqxHrDIVDW/+aaGhBXqmx5C7HSd2eMmQ==} + '@ai-sdk/gateway@3.0.94': + resolution: {integrity: sha512-uDDwLZhCkvC89crVS3S90D5L7AcVN8WriGuYVNYgVAaVcvy3Mthy3R9ICfzG75BObhz6pm2FWnhxDfNRK+t69Q==} engines: {node: '>=18'} peerDependencies: zod: ^3.25.76 || ^4.1.8 @@ -3867,8 +3867,8 @@ packages: '@keyv/serialize@1.1.1': resolution: {integrity: sha512-dXn3FZhPv0US+7dtJsIi2R+c7qWYiReoEh5zUntWCf4oSpMNib8FDhSoed6m3QyZdx5hK7iLFkYk3rNxwt8vTA==} - '@lezer/common@1.5.1': - resolution: {integrity: sha512-6YRVG9vBkaY7p1IVxL4s44n5nUnaNnGM2/AckNgYOnxTG2kWh1vR8BMxPseWPjRNpb5VtXnMpeYAEAADoRV1Iw==} + '@lezer/common@1.5.2': + resolution: {integrity: sha512-sxQE460fPZyU3sdc8lafxiPwJHBzZRy/udNFynGQky1SePYBdhkBl1kOagA9uT3pxR8K09bOrmTUqA9wb/PjSQ==} '@lezer/css@1.1.11': resolution: {integrity: sha512-FuAnusbLBl1SEAtfN8NdShxYJiESKw9LAFysfea1T96jD3ydBn12oYjaSG1a04BQRIUd93/0D8e5CV1cUMkmQg==} @@ -5055,27 +5055,27 @@ packages: '@redocly/cli-otel@0.1.2': resolution: {integrity: sha512-Bg7BoO5t1x3lVK+KhA5aGPmeXpQmdf6WtTYHhelKJCsQ+tRMiJoFAQoKHoBHAoNxXrhlS3K9lKFLHGmtxsFQfA==} - '@redocly/cli@2.25.4': - resolution: {integrity: sha512-ypBv8ZhckTzcOfsFH2VILsLqk00bJ1tI0POtlaEf8z0rDsnmD8auUETkMzw8wlUB+aQM7+VSzpSsmcmqeSgzWQ==} + '@redocly/cli@2.26.0': + resolution: {integrity: sha512-24S1ls0qvu3uaPiW4OImy06CpImAkUOd3h7OG+Hq9By5pPavjOE34KtdQTaaFso3e1qgzXYdQh6HPqEY1nTZgA==} engines: {node: '>=22.12.0 || >=20.19.0 <21.0.0', npm: '>=10'} hasBin: true '@redocly/config@0.22.2': resolution: {integrity: sha512-roRDai8/zr2S9YfmzUfNhKjOF0NdcOIqF7bhf4MVC5UxpjIysDjyudvlAiVbpPHp3eDRWbdzUgtkK1a7YiDNyQ==} - '@redocly/config@0.46.0': - resolution: {integrity: sha512-FZEprNEkmLITKKdv5blIai1qiCcc4dn5+96AjWnmFQmH/oz/OyBiXBSi752/M+Wmype7aH2uRywSCuYlu4CgVA==} + '@redocly/config@0.46.1': + resolution: {integrity: sha512-dSdkB2wRLtvl3f7ayRu9vqVhUMjjRaxZlHgRbgOtPPXxn4uI/ciDO87h4CJb7Iet+OVpevpAU6gU8bo5qVbQxg==} '@redocly/openapi-core@1.34.5': resolution: {integrity: sha512-0EbE8LRbkogtcCXU7liAyC00n9uNG9hJ+eMyHFdUsy9lB/WGqnEBgwjA9q2cyzAVcdTkQqTBBU1XePNnN3OijA==} engines: {node: '>=18.17.0', npm: '>=9.5.0'} - '@redocly/openapi-core@2.25.4': - resolution: {integrity: sha512-zYdKQEsowPNtkTixrfbn5DySWBLQpTsISthVBBEPAa3OZC75UI76CbHXEamJ8Kmlead9IkD5RbgeJvxqJ5/H6Q==} + '@redocly/openapi-core@2.26.0': + resolution: {integrity: sha512-BjTPzSV1Gv430W9S/7i5T/dEZDK00GFk6ILCNTI+31pA9lEFJOXc0XRJT+V3v+m3nXIgGoo6GgqeLdAiM10rNg==} engines: {node: '>=22.12.0 || >=20.19.0 <21.0.0', npm: '>=10'} - '@redocly/respect-core@2.25.4': - resolution: {integrity: sha512-0xMbcSft+9Q2sO1wSJMxo510Aqc/kGF/AmUK3OaLQvGvKUgOqq2Op/0aorNQJk6s8WBEH4UN4eFt7fUzUeXs8g==} + '@redocly/respect-core@2.26.0': + resolution: {integrity: sha512-mejFg26XNp8pqHwnL75QvI7MO4dhgFKa+v35OgOcVMrU9tGZ/VaFbplEyvdrRgjoonguXoLDoMN4Iw1rWlZg0g==} engines: {node: '>=22.12.0 || >=20.19.0 <21.0.0', npm: '>=10'} '@replit/codemirror-indentation-markers@6.5.3': @@ -5092,7 +5092,7 @@ packages: '@codemirror/language': 6.12.3 '@codemirror/state': ^6.0.0 '@codemirror/view': ^6.0.0 - '@lezer/common': 1.5.1 + '@lezer/common': 1.5.2 '@lezer/highlight': 1.2.3 '@lezer/lr': ^1.0.0 @@ -6813,8 +6813,8 @@ packages: resolution: {integrity: sha512-0fztsk/0ryJ+2PPr9EyXS5/Co7OK8q3zY/xOoozEWaUsL5x+C0cyZ4YyMuUffOO2Dx/rAdq4JMPqW0VUtm+vzA==} engines: {bun: '>=0.7.0', deno: '>=1.0.0', node: '>=18.0.0'} - '@zumer/snapdom@2.7.0': - resolution: {integrity: sha512-ZiELKzDszeFOazPQ/ExXzgtdoW9jADVjDjInr5XDAlVdCx0RbNsFiG7RLyM48XnA7EyCA9yTvmXSc3ElDrTRqA==} + '@zumer/snapdom@2.8.0': + resolution: {integrity: sha512-NhztgFDNfOkFt8Ox9PIJ1IwggyMui5UDazysOgZD7FSGL0G7H8U+J3ft0iecxAS8daj5aC62i3blaTk7s2GcpA==} abbrev@1.1.1: resolution: {integrity: sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==} @@ -6898,8 +6898,8 @@ packages: resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==} engines: {node: '>=8'} - ai@6.0.153: - resolution: {integrity: sha512-UlgBe4k0Ja1m1Eufn6FVSsHoF0sc7qwxX35ywJPDogIvBz0pHc+NOmCqiRY904DczNYIuwpZfKBLVz8HXgu3mg==} + ai@6.0.154: + resolution: {integrity: sha512-HfKJKCTJsDZxqrIUDSVnBQ7DpQlx5WI4ExqtLd7Bl70epLmvkpc/HYMzU1hP9W+g9VEAcvZo4fbMqc3v5D+9gQ==} engines: {node: '>=18'} peerDependencies: zod: ^3.25.76 || ^4.1.8 @@ -7138,6 +7138,9 @@ packages: bail@2.0.2: resolution: {integrity: sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==} + balanced-match@1.0.2: + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + balanced-match@4.0.3: resolution: {integrity: sha512-1pHv8LX9CpKut1Zp4EXey7Z8OfH11ONNH6Dhi2WDUt31VVZFXZzKwXcysBgqSumFCmR+0dqjMK5v5JiFHzi0+g==} engines: {node: 20 || >=22} @@ -7267,6 +7270,9 @@ packages: bplist-creator@0.0.8: resolution: {integrity: sha512-Za9JKzD6fjLC16oX2wsXfc+qBEhJBJB1YPInoAQpMLhDuj5aVOv1baGeIQSq1Fr3OCqzvsoQcSBSwGId/Ja2PA==} + brace-expansion@1.1.14: + resolution: {integrity: sha512-MWPGfDxnyzKU7rNOW9SP/c50vi3xrmrua/+6hfPbCS2ABNWfx24vPidzvC7krjU/RTo235sV776ymlsMtGKj8g==} + brace-expansion@5.0.5: resolution: {integrity: sha512-VZznLgtwhn+Mact9tfiwx64fA9erHH/MCXEUfB/0bX/6Fz6ny5EGTXYltMocqg4xFAQZtnO3DHWWXi8RiuN7cQ==} engines: {node: 18 || 20 || >=22} @@ -7735,6 +7741,9 @@ packages: resolution: {integrity: sha512-9mAqGPHLakhCLeNyxPkK4xVo746zQ/czLH1Ky+vkitMnWfWZps8r0qXuwhwizagCRttsL4lfG4pIOvaWLpAP0w==} engines: {node: '>= 0.8.0'} + concat-map@0.0.1: + resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + concat-stream@1.6.2: resolution: {integrity: sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==} engines: {'0': node >= 0.8} @@ -8443,8 +8452,8 @@ packages: resolution: {integrity: sha512-bO3y10YikuUwUuDUQRM4KfwNkKhnpVO7IPdbsrejwN9/AABJzzTQ4GeHwyzNSrVO+tEH3/Np255a3sVZpZDjvg==} engines: {node: '>=8.0.0'} - electron@41.1.1: - resolution: {integrity: sha512-8bgvDhBjli+3Z2YCKgzzoBPh6391pr7Xv2h/tTJG4ETgvPvUxZomObbZLs31mUzYb6VrlcDDd9cyWyNKtPm3tA==} + electron@41.2.0: + resolution: {integrity: sha512-0OKLiymqfV0WK68RBXqAm3Myad2TpI5wwxLCBEUcH5Nugo3YfSk7p1Js/AL9266qTz5xZioUnxt9hG8FFwax0g==} engines: {node: '>= 12.20.55'} hasBin: true @@ -9608,8 +9617,8 @@ packages: i18next-http-backend@3.0.4: resolution: {integrity: sha512-udwrBIE6cNpqn1gRAqRULq3+7MzIIuaiKRWrz++dVz5SqWW2VwXmPJtAgkI0JtMLFaADC9qNmnZAxWAhsxXx2g==} - i18next@26.0.3: - resolution: {integrity: sha512-1571kXINxHKY7LksWp8wP+zP0YqHSSpl/OW0Y0owFEf2H3s8gCAffWaZivcz14rMkOvn3R/psiQxVsR9t2Nafg==} + i18next@26.0.4: + resolution: {integrity: sha512-gXF7U9bfioXPLv7mw8Qt2nfO7vij5MyINvPgVv99pX3fL1Y01pw2mKBFrlYpRxRCl2wz3ISenj6VsMJT2isfuA==} peerDependencies: typescript: ^5 || ^6 peerDependenciesMeta: @@ -14386,7 +14395,7 @@ snapshots: '@ai-sdk/provider-utils': 4.0.23(zod@4.3.6) zod: 4.3.6 - '@ai-sdk/gateway@3.0.93(zod@4.3.6)': + '@ai-sdk/gateway@3.0.94(zod@4.3.6)': dependencies: '@ai-sdk/provider': 3.0.8 '@ai-sdk/provider-utils': 4.0.23(zod@4.3.6) @@ -15626,28 +15635,28 @@ snapshots: '@codemirror/language': 6.12.3 '@codemirror/state': 6.6.0 '@codemirror/view': 6.41.0 - '@lezer/common': 1.5.1 + '@lezer/common': 1.5.2 '@codemirror/commands@6.10.3': dependencies: '@codemirror/language': 6.12.3 '@codemirror/state': 6.6.0 '@codemirror/view': 6.41.0 - '@lezer/common': 1.5.1 + '@lezer/common': 1.5.2 '@codemirror/commands@6.8.1': dependencies: '@codemirror/language': 6.12.3 '@codemirror/state': 6.6.0 '@codemirror/view': 6.41.0 - '@lezer/common': 1.5.1 + '@lezer/common': 1.5.2 '@codemirror/lang-css@6.3.1': dependencies: '@codemirror/autocomplete': 6.18.6 '@codemirror/language': 6.12.3 '@codemirror/state': 6.6.0 - '@lezer/common': 1.5.1 + '@lezer/common': 1.5.2 '@lezer/css': 1.1.11 '@codemirror/lang-html@6.4.11': @@ -15658,7 +15667,7 @@ snapshots: '@codemirror/language': 6.12.3 '@codemirror/state': 6.6.0 '@codemirror/view': 6.41.0 - '@lezer/common': 1.5.1 + '@lezer/common': 1.5.2 '@lezer/css': 1.1.11 '@lezer/html': 1.3.12 @@ -15669,7 +15678,7 @@ snapshots: '@codemirror/lint': 6.8.5 '@codemirror/state': 6.6.0 '@codemirror/view': 6.41.0 - '@lezer/common': 1.5.1 + '@lezer/common': 1.5.2 '@lezer/javascript': 1.5.1 '@codemirror/lang-json@6.0.2': @@ -15684,7 +15693,7 @@ snapshots: '@codemirror/language': 6.12.3 '@codemirror/state': 6.6.0 '@codemirror/view': 6.41.0 - '@lezer/common': 1.5.1 + '@lezer/common': 1.5.2 '@lezer/markdown': 1.4.3 '@codemirror/lang-markdown@6.5.0': @@ -15694,7 +15703,7 @@ snapshots: '@codemirror/language': 6.12.3 '@codemirror/state': 6.6.0 '@codemirror/view': 6.41.0 - '@lezer/common': 1.5.1 + '@lezer/common': 1.5.2 '@lezer/markdown': 1.4.3 '@codemirror/lang-php@6.0.2': @@ -15702,7 +15711,7 @@ snapshots: '@codemirror/lang-html': 6.4.11 '@codemirror/language': 6.12.3 '@codemirror/state': 6.6.0 - '@lezer/common': 1.5.1 + '@lezer/common': 1.5.2 '@lezer/php': 1.0.2 '@codemirror/lang-vue@0.1.3': @@ -15710,7 +15719,7 @@ snapshots: '@codemirror/lang-html': 6.4.11 '@codemirror/lang-javascript': 6.2.5 '@codemirror/language': 6.12.3 - '@lezer/common': 1.5.1 + '@lezer/common': 1.5.2 '@lezer/highlight': 1.2.3 '@lezer/lr': 1.4.2 @@ -15720,14 +15729,14 @@ snapshots: '@codemirror/language': 6.12.3 '@codemirror/state': 6.6.0 '@codemirror/view': 6.41.0 - '@lezer/common': 1.5.1 + '@lezer/common': 1.5.2 '@lezer/xml': 1.0.6 '@codemirror/language@6.12.3': dependencies: '@codemirror/state': 6.6.0 '@codemirror/view': 6.41.0 - '@lezer/common': 1.5.1 + '@lezer/common': 1.5.2 '@lezer/highlight': 1.2.3 '@lezer/lr': 1.4.2 style-mod: 4.1.2 @@ -16242,9 +16251,9 @@ snapshots: transitivePeerDependencies: - supports-color - '@electron/remote@2.1.3(electron@41.1.1)': + '@electron/remote@2.1.3(electron@41.2.0)': dependencies: - electron: 41.1.1 + electron: 41.2.0 '@electron/universal@2.0.2': dependencies: @@ -17451,54 +17460,54 @@ snapshots: '@keyv/serialize@1.1.1': {} - '@lezer/common@1.5.1': {} + '@lezer/common@1.5.2': {} '@lezer/css@1.1.11': dependencies: - '@lezer/common': 1.5.1 + '@lezer/common': 1.5.2 '@lezer/highlight': 1.2.3 '@lezer/lr': 1.4.2 '@lezer/highlight@1.2.3': dependencies: - '@lezer/common': 1.5.1 + '@lezer/common': 1.5.2 '@lezer/html@1.3.12': dependencies: - '@lezer/common': 1.5.1 + '@lezer/common': 1.5.2 '@lezer/highlight': 1.2.3 '@lezer/lr': 1.4.2 '@lezer/javascript@1.5.1': dependencies: - '@lezer/common': 1.5.1 + '@lezer/common': 1.5.2 '@lezer/highlight': 1.2.3 '@lezer/lr': 1.4.2 '@lezer/json@1.0.3': dependencies: - '@lezer/common': 1.5.1 + '@lezer/common': 1.5.2 '@lezer/highlight': 1.2.3 '@lezer/lr': 1.4.2 '@lezer/lr@1.4.2': dependencies: - '@lezer/common': 1.5.1 + '@lezer/common': 1.5.2 '@lezer/markdown@1.4.3': dependencies: - '@lezer/common': 1.5.1 + '@lezer/common': 1.5.2 '@lezer/highlight': 1.2.3 '@lezer/php@1.0.2': dependencies: - '@lezer/common': 1.5.1 + '@lezer/common': 1.5.2 '@lezer/highlight': 1.2.3 '@lezer/lr': 1.4.2 '@lezer/xml@1.0.6': dependencies: - '@lezer/common': 1.5.1 + '@lezer/common': 1.5.2 '@lezer/highlight': 1.2.3 '@lezer/lr': 1.4.2 @@ -18696,15 +18705,15 @@ snapshots: dependencies: ulid: 2.4.0 - '@redocly/cli@2.25.4(@opentelemetry/api@1.9.0)(bufferutil@4.0.9)(core-js@3.46.0)(encoding@0.1.13)(utf-8-validate@6.0.5)': + '@redocly/cli@2.26.0(@opentelemetry/api@1.9.0)(bufferutil@4.0.9)(core-js@3.46.0)(encoding@0.1.13)(utf-8-validate@6.0.5)': dependencies: '@opentelemetry/exporter-trace-otlp-http': 0.202.0(@opentelemetry/api@1.9.0) '@opentelemetry/resources': 2.0.1(@opentelemetry/api@1.9.0) '@opentelemetry/sdk-trace-node': 2.0.1(@opentelemetry/api@1.9.0) '@opentelemetry/semantic-conventions': 1.34.0 '@redocly/cli-otel': 0.1.2 - '@redocly/openapi-core': 2.25.4 - '@redocly/respect-core': 2.25.4 + '@redocly/openapi-core': 2.26.0 + '@redocly/respect-core': 2.26.0 abort-controller: 3.0.0 ajv: '@redocly/ajv@8.18.0' ajv-formats: 3.0.1(@redocly/ajv@8.18.0) @@ -18738,7 +18747,7 @@ snapshots: '@redocly/config@0.22.2': {} - '@redocly/config@0.46.0': + '@redocly/config@0.46.1': dependencies: json-schema-to-ts: 2.7.2 @@ -18756,10 +18765,10 @@ snapshots: transitivePeerDependencies: - supports-color - '@redocly/openapi-core@2.25.4': + '@redocly/openapi-core@2.26.0': dependencies: '@redocly/ajv': 8.18.0 - '@redocly/config': 0.46.0 + '@redocly/config': 0.46.1 ajv: '@redocly/ajv@8.18.0' ajv-formats: 3.0.1(@redocly/ajv@8.18.0) colorette: 1.4.0 @@ -18769,12 +18778,12 @@ snapshots: pluralize: 8.0.0 yaml-ast-parser: 0.0.43 - '@redocly/respect-core@2.25.4': + '@redocly/respect-core@2.26.0': dependencies: '@faker-js/faker': 7.6.0 '@noble/hashes': 1.8.0 '@redocly/ajv': 8.18.0 - '@redocly/openapi-core': 2.25.4 + '@redocly/openapi-core': 2.26.0 ajv: '@redocly/ajv@8.18.0' better-ajv-errors: 1.2.0(@redocly/ajv@8.18.0) colorette: 2.0.20 @@ -18790,13 +18799,13 @@ snapshots: '@codemirror/state': 6.6.0 '@codemirror/view': 6.41.0 - '@replit/codemirror-lang-nix@6.0.1(@codemirror/autocomplete@6.18.6)(@codemirror/language@6.12.3)(@codemirror/state@6.6.0)(@codemirror/view@6.41.0)(@lezer/common@1.5.1)(@lezer/highlight@1.2.3)(@lezer/lr@1.4.2)': + '@replit/codemirror-lang-nix@6.0.1(@codemirror/autocomplete@6.18.6)(@codemirror/language@6.12.3)(@codemirror/state@6.6.0)(@codemirror/view@6.41.0)(@lezer/common@1.5.2)(@lezer/highlight@1.2.3)(@lezer/lr@1.4.2)': dependencies: '@codemirror/autocomplete': 6.18.6 '@codemirror/language': 6.12.3 '@codemirror/state': 6.6.0 '@codemirror/view': 6.41.0 - '@lezer/common': 1.5.1 + '@lezer/common': 1.5.2 '@lezer/highlight': 1.2.3 '@lezer/lr': 1.4.2 @@ -21558,7 +21567,7 @@ snapshots: '@zip.js/zip.js@2.8.11': {} - '@zumer/snapdom@2.7.0': {} + '@zumer/snapdom@2.8.0': {} abbrev@1.1.1: {} @@ -21623,9 +21632,9 @@ snapshots: clean-stack: 2.2.0 indent-string: 4.0.0 - ai@6.0.153(zod@4.3.6): + ai@6.0.154(zod@4.3.6): dependencies: - '@ai-sdk/gateway': 3.0.93(zod@4.3.6) + '@ai-sdk/gateway': 3.0.94(zod@4.3.6) '@ai-sdk/provider': 3.0.8 '@ai-sdk/provider-utils': 4.0.23(zod@4.3.6) '@opentelemetry/api': 1.9.0 @@ -21898,6 +21907,8 @@ snapshots: bail@2.0.2: {} + balanced-match@1.0.2: {} + balanced-match@4.0.3: {} bare-events@2.7.0: {} @@ -22038,6 +22049,11 @@ snapshots: stream-buffers: 2.2.0 optional: true + brace-expansion@1.1.14: + dependencies: + balanced-match: 1.0.2 + concat-map: 0.0.1 + brace-expansion@5.0.5: dependencies: balanced-match: 4.0.3 @@ -22675,6 +22691,8 @@ snapshots: transitivePeerDependencies: - supports-color + concat-map@0.0.1: {} + concat-stream@1.6.2: dependencies: buffer-from: 1.1.2 @@ -23462,10 +23480,10 @@ snapshots: - supports-color optional: true - electron@41.1.1: + electron@41.2.0: dependencies: '@electron/get': 2.0.3 - '@types/node': 24.12.0 + '@types/node': 24.12.2 extract-zip: 2.0.1 transitivePeerDependencies: - supports-color @@ -25101,7 +25119,7 @@ snapshots: transitivePeerDependencies: - encoding - i18next@26.0.3(typescript@6.0.2): + i18next@26.0.4(typescript@6.0.2): dependencies: '@babel/runtime': 7.29.2 optionalDependencies: @@ -26562,7 +26580,7 @@ snapshots: minimatch@3.1.5: dependencies: - brace-expansion: 5.0.5 + brace-expansion: 1.1.14 minimatch@5.1.9: dependencies: @@ -27757,11 +27775,11 @@ snapshots: react: 19.2.4 scheduler: 0.27.0 - react-i18next@17.0.2(i18next@26.0.3(typescript@6.0.2))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@6.0.2): + react-i18next@17.0.2(i18next@26.0.4(typescript@6.0.2))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@6.0.2): dependencies: '@babel/runtime': 7.29.2 html-parse-stringify: 3.0.1 - i18next: 26.0.3(typescript@6.0.2) + i18next: 26.0.4(typescript@6.0.2) react: 19.2.4 use-sync-external-store: 1.6.0(react@19.2.4) optionalDependencies: