From 3ecdcd9ea08199d735a03f536cedd81b05336361 Mon Sep 17 00:00:00 2001 From: "Romain DEP." Date: Fri, 28 Nov 2025 23:22:20 +0100 Subject: [PATCH 001/353] fix(sorting): BC! give precedence to #top notes over #sortFolderFirst --- apps/server/src/services/tree.ts | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/apps/server/src/services/tree.ts b/apps/server/src/services/tree.ts index 05c9ecdd9b..9348bc4900 100644 --- a/apps/server/src/services/tree.ts +++ b/apps/server/src/services/tree.ts @@ -98,15 +98,6 @@ function sortNotes(parentNoteId: string, customSortBy: string = "title", reverse } notes.sort((a, b) => { - if (foldersFirst) { - const aHasChildren = a.hasChildren(); - const bHasChildren = b.hasChildren(); - - if ((aHasChildren && !bHasChildren) || (!aHasChildren && bHasChildren)) { - // exactly one note of the two is a directory, so the sorting will be done based on this status - return aHasChildren ? -1 : 1; - } - } function fetchValue(note: BNote, key: string) { let rawValue: string | null; @@ -154,6 +145,16 @@ function sortNotes(parentNoteId: string, customSortBy: string = "title", reverse return compare(bottomBEl, bottomAEl) * (reverse ? -1 : 1); } + if (foldersFirst) { + const aHasChildren = a.hasChildren(); + const bHasChildren = b.hasChildren(); + + if ((aHasChildren && !bHasChildren) || (!aHasChildren && bHasChildren)) { + // exactly one note of the two is a directory, so the sorting will be done based on this status + return aHasChildren ? -1 : 1; + } + } + const customAEl = fetchValue(a, customSortBy) ?? fetchValue(a, "title") as string; const customBEl = fetchValue(b, customSortBy) ?? fetchValue(b, "title") as string; From a1c03143342078c68301cc7bc51a68ce4840c5dc Mon Sep 17 00:00:00 2001 From: "Romain DEP." Date: Fri, 28 Nov 2025 23:28:14 +0100 Subject: [PATCH 002/353] chore(sorting): add test cases for previous commit and increase test coverage --- apps/server/src/services/tree.spec.ts | 99 ++++++++++++++++++++++----- 1 file changed, 81 insertions(+), 18 deletions(-) diff --git a/apps/server/src/services/tree.spec.ts b/apps/server/src/services/tree.spec.ts index 1efd9acbeb..7107152627 100644 --- a/apps/server/src/services/tree.spec.ts +++ b/apps/server/src/services/tree.spec.ts @@ -1,11 +1,11 @@ -import { beforeEach, describe, expect, it, vi } from "vitest"; -import { note, NoteBuilder } from "../test/becca_mocking.js"; +import {beforeEach, describe, expect, it, vi} from "vitest"; +import {note, NoteBuilder} from "../test/becca_mocking.js"; import becca from "../becca/becca.js"; import BBranch from "../becca/entities/bbranch.js"; import BNote from "../becca/entities/bnote.js"; import tree from "./tree.js"; import cls from "./cls.js"; -import { buildNote } from "../test/becca_easy_mocking.js"; +import {buildNote} from "../test/becca_easy_mocking.js"; describe("Tree", () => { let rootNote!: NoteBuilder; @@ -48,6 +48,23 @@ describe("Tree", () => { }; }); }); + it("sorts notes by title (base case)", () => { + + const note = buildNote({ + children: [ + {title: "1"}, + {title: "2"}, + {title: "3"}, + ], + "#sorted": "", + }); + cls.init(() => { + tree.sortNotesIfNeeded(note.noteId); + }); + const orderedTitles = note.children.map((child) => child.title); + expect(orderedTitles).toStrictEqual(["1", "2", "3"]); + } + ) it("custom sort order is idempotent", () => { rootNote.label("sorted", "order"); @@ -56,13 +73,15 @@ describe("Tree", () => { for (let i = 0; i <= 5; i++) { rootNote.child(note(String(i)).label("order", String(i))); } + rootNote.child(note("top").label("top")); + rootNote.child(note("bottom").label("bottom")); // Add a few values which have no defined order. for (let i = 6; i < 10; i++) { rootNote.child(note(String(i))); } - const expectedOrder = [ "0", "1", "2", "3", "4", "5", "6", "7", "8", "9" ]; + const expectedOrder = ["top", "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "bottom"]; // Sort a few times to ensure that the resulting order is the same. for (let i = 0; i < 5; i++) { @@ -78,12 +97,12 @@ describe("Tree", () => { it("pins to the top and bottom", () => { const note = buildNote({ children: [ - { title: "bottom", "#bottom": "" }, - { title: "5" }, - { title: "3" }, - { title: "2" }, - { title: "1" }, - { title: "top", "#top": "" } + {title: "bottom", "#bottom": ""}, + {title: "5"}, + {title: "3"}, + {title: "2"}, + {title: "1"}, + {title: "top", "#top": ""} ], "#sorted": "" }); @@ -91,18 +110,18 @@ describe("Tree", () => { tree.sortNotesIfNeeded(note.noteId); }); const orderedTitles = note.children.map((child) => child.title); - expect(orderedTitles).toStrictEqual([ "top", "1", "2", "3", "5", "bottom" ]); + expect(orderedTitles).toStrictEqual(["top", "1", "2", "3", "5", "bottom"]); }); it("pins to the top and bottom in reverse order", () => { const note = buildNote({ children: [ - { title: "bottom", "#bottom": "" }, - { title: "1" }, - { title: "2" }, - { title: "3" }, - { title: "5" }, - { title: "top", "#top": "" } + {title: "bottom", "#bottom": ""}, + {title: "1"}, + {title: "2"}, + {title: "3"}, + {title: "5"}, + {title: "top", "#top": ""} ], "#sorted": "", "#sortDirection": "desc" @@ -111,6 +130,50 @@ describe("Tree", () => { tree.sortNotesIfNeeded(note.noteId); }); const orderedTitles = note.children.map((child) => child.title); - expect(orderedTitles).toStrictEqual([ "top", "5", "3", "2", "1", "bottom" ]); + expect(orderedTitles).toStrictEqual(["top", "5", "3", "2", "1", "bottom"]); }); + + it("keeps folder notes on top when #sortFolderFirst is set, but not above #top", () => { + const note = buildNote({ + children: [ + {title: "bottom", "#bottom": ""}, + {title: "1"}, + {title: "2"}, + {title: "p1", children: [{title: "1.1"}, {title: "1.2"}]}, + {title: "p2", children: [{title: "2.1"}, {title: "2.2"}]}, + {title: "3"}, + {title: "5"}, + {title: "top", "#top": ""} + ], + "#sorted": "", + "#sortFoldersFirst": "" + }); + cls.init(() => { + tree.sortNotesIfNeeded(note.noteId); + }); + const orderedTitles = note.children.map((child) => child.title); + expect(orderedTitles).toStrictEqual(["top", "p1", "p2", "1", "2", "3", "5", "bottom"]); + }); + + it("sorts notes accordingly when #sortNatural is set", () => { + const note = buildNote({ + children: [ + {title: "bottom", "#bottom": ""}, + {title: "1"}, + {title: "2"}, + {title: "10"}, + {title: "20"}, + {title: "3"}, + {title: "top", "#top": ""} + ], + "#sorted": "", + "#sortNatural": "" + }); + cls.init(() => { + tree.sortNotesIfNeeded(note.noteId); + }); + const orderedTitles = note.children.map((child) => child.title); + expect(orderedTitles).toStrictEqual(["top", "1", "2", "3", "10", "20", "bottom"]); + } + ) }); From 142ed42d90a85da1cc4398034049e1475d7bb4ac Mon Sep 17 00:00:00 2001 From: perfectra1n Date: Mon, 5 Jan 2026 11:38:18 -0800 Subject: [PATCH 003/353] feat(ux): show more helpful output when users encounter permissions issues within the data directory --- apps/server/src/services/data_dir.ts | 38 +++++++++++++++++++++++++++- 1 file changed, 37 insertions(+), 1 deletion(-) diff --git a/apps/server/src/services/data_dir.ts b/apps/server/src/services/data_dir.ts index 4f277736bd..1e6de81bfb 100644 --- a/apps/server/src/services/data_dir.ts +++ b/apps/server/src/services/data_dir.ts @@ -75,9 +75,45 @@ export function getPlatformAppDataDir(platform: ReturnType, } } +function outputPermissionDiagnostics(targetPath: fs.PathLike) { + const pathStr = targetPath.toString(); + const parentDir = pathJoin(pathStr, ".."); + + console.error("\n========== PERMISSION ERROR DIAGNOSTICS =========="); + console.error(`Failed to create directory: ${pathStr}`); + + // Output current process UID:GID (Unix only) + if (typeof process.getuid === "function" && typeof process.getgid === "function") { + console.error(`Process running as UID:GID = ${process.getuid()}:${process.getgid()}`); + } + + // Try to get parent directory stats + try { + const stats = fs.statSync(parentDir); + console.error(`Parent directory: ${parentDir}`); + console.error(` Owner UID:GID = ${stats.uid}:${stats.gid}`); + console.error(` Permissions = ${(stats.mode & 0o777).toString(8)} (octal)`); + } catch { + console.error(`Parent directory ${parentDir} is not accessible`); + } + + console.error("\nTo fix this issue:"); + console.error(" - Ensure the data directory is owned by the user running Trilium"); + console.error(" - Or set USER_UID and USER_GID environment variables to match the directory owner"); + console.error(" - Example: docker run -e USER_UID=$(id -u) -e USER_GID=$(id -g) ..."); + console.error("====================================================\n"); +} + function createDirIfNotExisting(path: fs.PathLike, permissionMode: fs.Mode = FOLDER_PERMISSIONS) { if (!fs.existsSync(path)) { - fs.mkdirSync(path, permissionMode); + try { + fs.mkdirSync(path, permissionMode); + } catch (err: unknown) { + if (err && typeof err === "object" && "code" in err && err.code === "EACCES") { + outputPermissionDiagnostics(path); + } + throw err; + } } } From 0185dd0d187c2853d05f83d2b63c5b2868784c98 Mon Sep 17 00:00:00 2001 From: perfectra1n Date: Mon, 5 Jan 2026 11:55:14 -0800 Subject: [PATCH 004/353] feat(ux): implement suggestions from gemini just to make sure --- apps/server/src/services/data_dir.ts | 23 +++++++++++++++++------ 1 file changed, 17 insertions(+), 6 deletions(-) diff --git a/apps/server/src/services/data_dir.ts b/apps/server/src/services/data_dir.ts index 1e6de81bfb..d0f34f01df 100644 --- a/apps/server/src/services/data_dir.ts +++ b/apps/server/src/services/data_dir.ts @@ -105,15 +105,26 @@ function outputPermissionDiagnostics(targetPath: fs.PathLike) { } function createDirIfNotExisting(path: fs.PathLike, permissionMode: fs.Mode = FOLDER_PERMISSIONS) { - if (!fs.existsSync(path)) { - try { - fs.mkdirSync(path, permissionMode); - } catch (err: unknown) { - if (err && typeof err === "object" && "code" in err && err.code === "EACCES") { + try { + fs.mkdirSync(path, permissionMode); + } catch (err: unknown) { + if (err && typeof err === "object" && "code" in err) { + const code = (err as { code: string }).code; + + if (code === "EACCES") { outputPermissionDiagnostics(path); + } else if (code === "EEXIST") { + // Directory already exists - verify it's actually a directory + try { + if (fs.statSync(path).isDirectory()) { + return; + } + } catch { + // If we can't stat it, fall through to re-throw original error + } } - throw err; } + throw err; } } From 2dd541e1d0f65bcb9f42f79b4d7c61b7bda886a7 Mon Sep 17 00:00:00 2001 From: perfectra1n Date: Mon, 5 Jan 2026 14:34:46 -0800 Subject: [PATCH 005/353] fix(tests): update data_dir tests for new EEXIST graceful handling --- apps/server/src/services/data_dir.spec.ts | 77 ++++++++++++----------- 1 file changed, 41 insertions(+), 36 deletions(-) diff --git a/apps/server/src/services/data_dir.spec.ts b/apps/server/src/services/data_dir.spec.ts index f04f16ca02..a58529688b 100644 --- a/apps/server/src/services/data_dir.spec.ts +++ b/apps/server/src/services/data_dir.spec.ts @@ -10,6 +10,7 @@ describe("data_dir.ts unit tests", async () => { const mockFn = { existsSyncMock: vi.fn(), mkdirSyncMock: vi.fn(), + statSyncMock: vi.fn(), osHomedirMock: vi.fn(), osPlatformMock: vi.fn(), pathJoinMock: vi.fn() @@ -21,7 +22,8 @@ describe("data_dir.ts unit tests", async () => { return { default: { existsSync: mockFn.existsSyncMock, - mkdirSync: mockFn.mkdirSyncMock + mkdirSync: mockFn.mkdirSyncMock, + statSync: mockFn.statSyncMock } }; }); @@ -109,34 +111,36 @@ describe("data_dir.ts unit tests", async () => { */ describe("case A", () => { - it("when folder exists – it should return the path, without attempting to create the folder", async () => { + it("when folder exists – it should return the path, handling EEXIST gracefully", async () => { const mockTriliumDataPath = "/home/mock/trilium-data-ENV-A1"; process.env.TRILIUM_DATA_DIR = mockTriliumDataPath; - // set fs.existsSync to true, i.e. the folder does exist - mockFn.existsSyncMock.mockImplementation(() => true); + // mkdirSync throws EEXIST when folder already exists (EAFP pattern) + const eexistError = new Error("EEXIST: file already exists") as NodeJS.ErrnoException; + eexistError.code = "EEXIST"; + mockFn.mkdirSyncMock.mockImplementation(() => { throw eexistError; }); + + // statSync confirms it's a directory + mockFn.statSyncMock.mockImplementation(() => ({ isDirectory: () => true })); const result = getTriliumDataDir("trilium-data"); - // createDirIfNotExisting should call existsync 1 time and mkdirSync 0 times -> as it does not need to create the folder - // and return value should be TRILIUM_DATA_DIR value from process.env - expect(mockFn.existsSyncMock).toHaveBeenCalledTimes(1); - expect(mockFn.mkdirSyncMock).toHaveBeenCalledTimes(0); + // createDirIfNotExisting tries mkdirSync first (EAFP), then statSync to verify it's a directory + expect(mockFn.mkdirSyncMock).toHaveBeenCalledTimes(1); + expect(mockFn.statSyncMock).toHaveBeenCalledTimes(1); expect(result).toEqual(process.env.TRILIUM_DATA_DIR); }); - it("when folder does not exist – it should attempt to create the folder and return the path", async () => { + it("when folder does not exist – it should create the folder and return the path", async () => { const mockTriliumDataPath = "/home/mock/trilium-data-ENV-A2"; process.env.TRILIUM_DATA_DIR = mockTriliumDataPath; - // set fs.existsSync mock to return false, i.e. the folder does not exist - mockFn.existsSyncMock.mockImplementation(() => false); + // mkdirSync succeeds when folder doesn't exist + mockFn.mkdirSyncMock.mockImplementation(() => undefined); const result = getTriliumDataDir("trilium-data"); - // createDirIfNotExisting should call existsync 1 time and mkdirSync 1 times -> as it has to create the folder - // and return value should be TRILIUM_DATA_DIR value from process.env - expect(mockFn.existsSyncMock).toHaveBeenCalledTimes(1); + // createDirIfNotExisting calls mkdirSync which succeeds expect(mockFn.mkdirSyncMock).toHaveBeenCalledTimes(1); expect(result).toEqual(process.env.TRILIUM_DATA_DIR); }); @@ -171,19 +175,19 @@ describe("data_dir.ts unit tests", async () => { // use Generator to precisely control order of fs.existSync return values const existsSyncMockGen = (function* () { - // 1) fs.existSync -> case B + // 1) fs.existSync -> case B -> checking if folder exists in home dir yield false; // 2) fs.existSync -> case C -> checking if default OS PlatformAppDataDir exists yield true; - // 3) fs.existSync -> case C -> checking if Trilium Data folder exists - yield false; })(); mockFn.existsSyncMock.mockImplementation(() => existsSyncMockGen.next().value); + // mkdirSync succeeds (folder doesn't exist) + mockFn.mkdirSyncMock.mockImplementation(() => undefined); const result = getTriliumDataDir(dataDirName); - expect(mockFn.existsSyncMock).toHaveBeenCalledTimes(3); + expect(mockFn.existsSyncMock).toHaveBeenCalledTimes(2); expect(mockFn.mkdirSyncMock).toHaveBeenCalledTimes(1); expect(result).toEqual(mockPlatformDataPath); }); @@ -198,21 +202,26 @@ describe("data_dir.ts unit tests", async () => { // use Generator to precisely control order of fs.existSync return values const existsSyncMockGen = (function* () { - // 1) fs.existSync -> case B + // 1) fs.existSync -> case B -> checking if folder exists in home dir yield false; // 2) fs.existSync -> case C -> checking if default OS PlatformAppDataDir exists yield true; - // 3) fs.existSync -> case C -> checking if Trilium Data folder exists - yield true; })(); mockFn.existsSyncMock.mockImplementation(() => existsSyncMockGen.next().value); + // mkdirSync throws EEXIST (folder already exists), statSync confirms it's a directory + const eexistError = new Error("EEXIST: file already exists") as NodeJS.ErrnoException; + eexistError.code = "EEXIST"; + mockFn.mkdirSyncMock.mockImplementation(() => { throw eexistError; }); + mockFn.statSyncMock.mockImplementation(() => ({ isDirectory: () => true })); + const result = getTriliumDataDir(dataDirName); expect(result).toEqual(mockPlatformDataPath); - expect(mockFn.existsSyncMock).toHaveBeenCalledTimes(3); - expect(mockFn.mkdirSyncMock).toHaveBeenCalledTimes(0); + expect(mockFn.existsSyncMock).toHaveBeenCalledTimes(2); + expect(mockFn.mkdirSyncMock).toHaveBeenCalledTimes(1); + expect(mockFn.statSyncMock).toHaveBeenCalledTimes(1); }); it("w/ Platform 'win32' and set process.env.APPDATA behaviour", async () => { @@ -227,20 +236,20 @@ describe("data_dir.ts unit tests", async () => { // use Generator to precisely control order of fs.existSync return values const existsSyncMockGen = (function* () { - // 1) fs.existSync -> case B + // 1) fs.existSync -> case B -> checking if folder exists in home dir yield false; // 2) fs.existSync -> case C -> checking if default OS PlatformAppDataDir exists yield true; - // 3) fs.existSync -> case C -> checking if Trilium Data folder exists - yield false; })(); mockFn.existsSyncMock.mockImplementation(() => existsSyncMockGen.next().value); + // mkdirSync succeeds (folder doesn't exist) + mockFn.mkdirSyncMock.mockImplementation(() => undefined); const result = getTriliumDataDir(dataDirName); expect(result).toEqual(mockPlatformDataPath); - expect(mockFn.existsSyncMock).toHaveBeenCalledTimes(3); + expect(mockFn.existsSyncMock).toHaveBeenCalledTimes(2); expect(mockFn.mkdirSyncMock).toHaveBeenCalledTimes(1); }); }); @@ -253,19 +262,15 @@ describe("data_dir.ts unit tests", async () => { setMockPlatform("aix", homedir, mockPlatformDataPath); - const existsSyncMockGen = (function* () { - // first fs.existSync -> case B -> checking if folder exists in home folder - yield false; - // second fs.existSync -> case D -> triggered by createDirIfNotExisting - yield false; - })(); - - mockFn.existsSyncMock.mockImplementation(() => existsSyncMockGen.next().value); + // fs.existSync -> case B -> checking if folder exists in home folder + mockFn.existsSyncMock.mockImplementation(() => false); + // mkdirSync succeeds (folder doesn't exist) + mockFn.mkdirSyncMock.mockImplementation(() => undefined); const result = getTriliumDataDir(dataDirName); expect(result).toEqual(mockPlatformDataPath); - expect(mockFn.existsSyncMock).toHaveBeenCalledTimes(2); + expect(mockFn.existsSyncMock).toHaveBeenCalledTimes(1); expect(mockFn.mkdirSyncMock).toHaveBeenCalledTimes(1); }); }); From 6595fd9c10894755699af87dc416c8bb89a25e8a Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sun, 11 Jan 2026 14:43:06 +0000 Subject: [PATCH 006/353] chore(deps): update dependency happy-dom to v20.1.0 --- apps/client/package.json | 2 +- package.json | 2 +- pnpm-lock.yaml | 55 ++++++++++++++++++++++------------------ 3 files changed, 32 insertions(+), 27 deletions(-) diff --git a/apps/client/package.json b/apps/client/package.json index 1f08b90305..ee16110641 100644 --- a/apps/client/package.json +++ b/apps/client/package.json @@ -78,7 +78,7 @@ "@types/reveal.js": "5.2.2", "@types/tabulator-tables": "6.3.1", "copy-webpack-plugin": "13.0.1", - "happy-dom": "20.0.11", + "happy-dom": "20.1.0", "lightningcss": "1.30.2", "script-loader": "0.7.2", "vite-plugin-static-copy": "3.1.4" diff --git a/package.json b/package.json index 2bcfd5c10d..ef721f7178 100644 --- a/package.json +++ b/package.json @@ -61,7 +61,7 @@ "eslint-config-prettier": "10.1.8", "eslint-plugin-playwright": "2.4.1", "eslint-plugin-simple-import-sort": "12.1.1", - "happy-dom": "~20.0.0", + "happy-dom": "~20.1.0", "http-server": "14.1.1", "jiti": "2.6.1", "jsonc-eslint-parser": "2.4.2", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 9d2bc1e4a4..856b64d7b8 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -89,8 +89,8 @@ importers: specifier: 12.1.1 version: 12.1.1(eslint@9.39.2(jiti@2.6.1)) happy-dom: - specifier: ~20.0.0 - version: 20.0.11 + specifier: ~20.1.0 + version: 20.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5) http-server: specifier: 14.1.1 version: 14.1.1 @@ -129,7 +129,7 @@ importers: version: 4.5.4(@types/node@24.10.7)(rollup@4.52.0)(typescript@5.9.3)(vite@7.3.1(@types/node@24.10.7)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1)) vitest: specifier: 4.0.16 - version: 4.0.16(@opentelemetry/api@1.9.0)(@types/node@24.10.7)(@vitest/browser-webdriverio@4.0.16)(@vitest/ui@4.0.16)(happy-dom@20.0.11)(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.2)(msw@2.7.5(@types/node@24.10.7)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) + version: 4.0.16(@opentelemetry/api@1.9.0)(@types/node@24.10.7)(@vitest/browser-webdriverio@4.0.16)(@vitest/ui@4.0.16)(happy-dom@20.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.2)(msw@2.7.5(@types/node@24.10.7)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) apps/build-docs: devDependencies: @@ -339,8 +339,8 @@ importers: specifier: 13.0.1 version: 13.0.1(webpack@5.101.3(esbuild@0.27.2)) happy-dom: - specifier: 20.0.11 - version: 20.0.11 + specifier: 20.1.0 + version: 20.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5) lightningcss: specifier: 1.30.2 version: 1.30.2 @@ -852,7 +852,7 @@ importers: version: 7.3.1(@types/node@24.10.7)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) vitest: specifier: 4.0.16 - version: 4.0.16(@opentelemetry/api@1.9.0)(@types/node@24.10.7)(@vitest/browser-webdriverio@4.0.16)(@vitest/ui@4.0.16)(happy-dom@20.0.11)(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.2)(msw@2.7.5(@types/node@24.10.7)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) + version: 4.0.16(@opentelemetry/api@1.9.0)(@types/node@24.10.7)(@vitest/browser-webdriverio@4.0.16)(@vitest/ui@4.0.16)(happy-dom@20.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.2)(msw@2.7.5(@types/node@24.10.7)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) packages/ckeditor5: dependencies: @@ -943,7 +943,7 @@ importers: version: 2.0.0(typescript@5.9.3)(vite@7.3.1(@types/node@24.10.7)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1)) vitest: specifier: 4.0.16 - version: 4.0.16(@opentelemetry/api@1.9.0)(@types/node@24.10.7)(@vitest/browser-webdriverio@4.0.16)(@vitest/ui@4.0.16)(happy-dom@20.0.11)(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.2)(msw@2.7.5(@types/node@24.10.7)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) + version: 4.0.16(@opentelemetry/api@1.9.0)(@types/node@24.10.7)(@vitest/browser-webdriverio@4.0.16)(@vitest/ui@4.0.16)(happy-dom@20.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.2)(msw@2.7.5(@types/node@24.10.7)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) webdriverio: specifier: 9.23.0 version: 9.23.0(bufferutil@4.0.9)(utf-8-validate@6.0.5) @@ -1003,7 +1003,7 @@ importers: version: 2.0.0(typescript@5.9.3)(vite@7.3.1(@types/node@24.10.7)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1)) vitest: specifier: 4.0.16 - version: 4.0.16(@opentelemetry/api@1.9.0)(@types/node@24.10.7)(@vitest/browser-webdriverio@4.0.16)(@vitest/ui@4.0.16)(happy-dom@20.0.11)(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.2)(msw@2.7.5(@types/node@24.10.7)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) + version: 4.0.16(@opentelemetry/api@1.9.0)(@types/node@24.10.7)(@vitest/browser-webdriverio@4.0.16)(@vitest/ui@4.0.16)(happy-dom@20.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.2)(msw@2.7.5(@types/node@24.10.7)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) webdriverio: specifier: 9.23.0 version: 9.23.0(bufferutil@4.0.9)(utf-8-validate@6.0.5) @@ -1063,7 +1063,7 @@ importers: version: 2.0.0(typescript@5.9.3)(vite@7.3.1(@types/node@24.10.7)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1)) vitest: specifier: 4.0.16 - version: 4.0.16(@opentelemetry/api@1.9.0)(@types/node@24.10.7)(@vitest/browser-webdriverio@4.0.16)(@vitest/ui@4.0.16)(happy-dom@20.0.11)(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.2)(msw@2.7.5(@types/node@24.10.7)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) + version: 4.0.16(@opentelemetry/api@1.9.0)(@types/node@24.10.7)(@vitest/browser-webdriverio@4.0.16)(@vitest/ui@4.0.16)(happy-dom@20.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.2)(msw@2.7.5(@types/node@24.10.7)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) webdriverio: specifier: 9.23.0 version: 9.23.0(bufferutil@4.0.9)(utf-8-validate@6.0.5) @@ -1130,7 +1130,7 @@ importers: version: 2.0.0(typescript@5.9.3)(vite@7.3.1(@types/node@24.10.7)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1)) vitest: specifier: 4.0.16 - version: 4.0.16(@opentelemetry/api@1.9.0)(@types/node@24.10.7)(@vitest/browser-webdriverio@4.0.16)(@vitest/ui@4.0.16)(happy-dom@20.0.11)(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.2)(msw@2.7.5(@types/node@24.10.7)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) + version: 4.0.16(@opentelemetry/api@1.9.0)(@types/node@24.10.7)(@vitest/browser-webdriverio@4.0.16)(@vitest/ui@4.0.16)(happy-dom@20.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.2)(msw@2.7.5(@types/node@24.10.7)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) webdriverio: specifier: 9.23.0 version: 9.23.0(bufferutil@4.0.9)(utf-8-validate@6.0.5) @@ -1197,7 +1197,7 @@ importers: version: 2.0.0(typescript@5.9.3)(vite@7.3.1(@types/node@24.10.7)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1)) vitest: specifier: 4.0.16 - version: 4.0.16(@opentelemetry/api@1.9.0)(@types/node@24.10.7)(@vitest/browser-webdriverio@4.0.16)(@vitest/ui@4.0.16)(happy-dom@20.0.11)(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.2)(msw@2.7.5(@types/node@24.10.7)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) + version: 4.0.16(@opentelemetry/api@1.9.0)(@types/node@24.10.7)(@vitest/browser-webdriverio@4.0.16)(@vitest/ui@4.0.16)(happy-dom@20.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.2)(msw@2.7.5(@types/node@24.10.7)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) webdriverio: specifier: 9.23.0 version: 9.23.0(bufferutil@4.0.9)(utf-8-validate@6.0.5) @@ -8715,8 +8715,8 @@ packages: engines: {node: '>=0.4.7'} hasBin: true - happy-dom@20.0.11: - resolution: {integrity: sha512-QsCdAUHAmiDeKeaNojb1OHOPF7NjcWPBR7obdu3NwH2a/oyQaLg5d0aaCy/9My6CdPChYF07dvz5chaXBGaD4g==} + happy-dom@20.1.0: + resolution: {integrity: sha512-ebvqjBqzenBk2LjzNEAzoj7yhw7rW/R2/wVevMu6Mrq3MXtcI/RUz4+ozpcOcqVLEWPqLfg2v9EAU7fFXZUUJw==} engines: {node: '>=20.0.0'} has-bigints@1.1.0: @@ -15094,8 +15094,6 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.3.0 '@ckeditor/ckeditor5-utils': 47.3.0 ckeditor5: 47.3.0 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-block-quote@47.3.0': dependencies: @@ -15170,6 +15168,8 @@ snapshots: '@ckeditor/ckeditor5-core': 47.3.0 '@ckeditor/ckeditor5-utils': 47.3.0 ckeditor5: 47.3.0 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-code-block@47.3.0(patch_hash=2361d8caad7d6b5bddacc3a3b4aa37dbfba260b1c1b22a450413a79c1bb1ce95)': dependencies: @@ -15235,6 +15235,8 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.3.0 '@ckeditor/ckeditor5-watchdog': 47.3.0 es-toolkit: 1.39.5 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-dev-build-tools@54.2.3(@swc/helpers@0.5.17)(tslib@2.8.1)(typescript@5.9.3)': dependencies: @@ -15387,8 +15389,6 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.3.0 ckeditor5: 47.3.0 es-toolkit: 1.39.5 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-editor-multi-root@47.3.0': dependencies: @@ -20518,7 +20518,7 @@ snapshots: '@vitest/browser-webdriverio@4.0.16(bufferutil@4.0.9)(msw@2.7.5(@types/node@24.10.7)(typescript@5.9.3))(utf-8-validate@6.0.5)(vite@7.3.1(@types/node@24.10.7)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1))(vitest@4.0.16)(webdriverio@9.23.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))': dependencies: '@vitest/browser': 4.0.16(bufferutil@4.0.9)(msw@2.7.5(@types/node@24.10.7)(typescript@5.9.3))(utf-8-validate@6.0.5)(vite@7.3.1(@types/node@24.10.7)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1))(vitest@4.0.16) - vitest: 4.0.16(@opentelemetry/api@1.9.0)(@types/node@24.10.7)(@vitest/browser-webdriverio@4.0.16)(@vitest/ui@4.0.16)(happy-dom@20.0.11)(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.2)(msw@2.7.5(@types/node@24.10.7)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) + vitest: 4.0.16(@opentelemetry/api@1.9.0)(@types/node@24.10.7)(@vitest/browser-webdriverio@4.0.16)(@vitest/ui@4.0.16)(happy-dom@20.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.2)(msw@2.7.5(@types/node@24.10.7)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) webdriverio: 9.23.0(bufferutil@4.0.9)(utf-8-validate@6.0.5) transitivePeerDependencies: - bufferutil @@ -20535,7 +20535,7 @@ snapshots: pngjs: 7.0.0 sirv: 3.0.2 tinyrainbow: 3.0.3 - vitest: 4.0.16(@opentelemetry/api@1.9.0)(@types/node@24.10.7)(@vitest/browser-webdriverio@4.0.16)(@vitest/ui@4.0.16)(happy-dom@20.0.11)(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.2)(msw@2.7.5(@types/node@24.10.7)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) + vitest: 4.0.16(@opentelemetry/api@1.9.0)(@types/node@24.10.7)(@vitest/browser-webdriverio@4.0.16)(@vitest/ui@4.0.16)(happy-dom@20.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.2)(msw@2.7.5(@types/node@24.10.7)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) ws: 8.19.0(bufferutil@4.0.9)(utf-8-validate@6.0.5) transitivePeerDependencies: - bufferutil @@ -20556,7 +20556,7 @@ snapshots: magicast: 0.5.1 obug: 2.1.1 tinyrainbow: 3.0.3 - vitest: 4.0.16(@opentelemetry/api@1.9.0)(@types/node@24.10.7)(@vitest/browser-webdriverio@4.0.16)(@vitest/ui@4.0.16)(happy-dom@20.0.11)(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.2)(msw@2.7.5(@types/node@24.10.7)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) + vitest: 4.0.16(@opentelemetry/api@1.9.0)(@types/node@24.10.7)(@vitest/browser-webdriverio@4.0.16)(@vitest/ui@4.0.16)(happy-dom@20.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.2)(msw@2.7.5(@types/node@24.10.7)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) transitivePeerDependencies: - supports-color @@ -20573,7 +20573,7 @@ snapshots: obug: 2.1.1 std-env: 3.10.0 tinyrainbow: 3.0.3 - vitest: 4.0.16(@opentelemetry/api@1.9.0)(@types/node@24.10.7)(@vitest/browser-webdriverio@4.0.16)(@vitest/ui@4.0.16)(happy-dom@20.0.11)(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.2)(msw@2.7.5(@types/node@24.10.7)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) + vitest: 4.0.16(@opentelemetry/api@1.9.0)(@types/node@24.10.7)(@vitest/browser-webdriverio@4.0.16)(@vitest/ui@4.0.16)(happy-dom@20.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.2)(msw@2.7.5(@types/node@24.10.7)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) optionalDependencies: '@vitest/browser': 4.0.16(bufferutil@4.0.9)(msw@2.7.5(@types/node@24.10.7)(typescript@5.9.3))(utf-8-validate@6.0.5)(vite@7.3.1(@types/node@24.10.7)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1))(vitest@4.0.16) transitivePeerDependencies: @@ -20623,7 +20623,7 @@ snapshots: sirv: 3.0.2 tinyglobby: 0.2.15 tinyrainbow: 3.0.3 - vitest: 4.0.16(@opentelemetry/api@1.9.0)(@types/node@24.10.7)(@vitest/browser-webdriverio@4.0.16)(@vitest/ui@4.0.16)(happy-dom@20.0.11)(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.2)(msw@2.7.5(@types/node@24.10.7)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) + vitest: 4.0.16(@opentelemetry/api@1.9.0)(@types/node@24.10.7)(@vitest/browser-webdriverio@4.0.16)(@vitest/ui@4.0.16)(happy-dom@20.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.2)(msw@2.7.5(@types/node@24.10.7)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) '@vitest/utils@4.0.16': dependencies: @@ -24391,11 +24391,16 @@ snapshots: optionalDependencies: uglify-js: 3.19.3 - happy-dom@20.0.11: + happy-dom@20.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5): dependencies: '@types/node': 20.19.25 '@types/whatwg-mimetype': 3.0.2 + '@types/ws': 8.18.1 whatwg-mimetype: 3.0.0 + ws: 8.19.0(bufferutil@4.0.9)(utf-8-validate@6.0.5) + transitivePeerDependencies: + - bufferutil + - utf-8-validate has-bigints@1.1.0: {} @@ -30453,7 +30458,7 @@ snapshots: tsx: 4.21.0 yaml: 2.8.1 - vitest@4.0.16(@opentelemetry/api@1.9.0)(@types/node@24.10.7)(@vitest/browser-webdriverio@4.0.16)(@vitest/ui@4.0.16)(happy-dom@20.0.11)(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.2)(msw@2.7.5(@types/node@24.10.7)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1): + vitest@4.0.16(@opentelemetry/api@1.9.0)(@types/node@24.10.7)(@vitest/browser-webdriverio@4.0.16)(@vitest/ui@4.0.16)(happy-dom@20.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.2)(msw@2.7.5(@types/node@24.10.7)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1): dependencies: '@vitest/expect': 4.0.16 '@vitest/mocker': 4.0.16(msw@2.7.5(@types/node@24.10.7)(typescript@5.9.3))(vite@7.3.1(@types/node@24.10.7)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1)) @@ -30480,7 +30485,7 @@ snapshots: '@types/node': 24.10.7 '@vitest/browser-webdriverio': 4.0.16(bufferutil@4.0.9)(msw@2.7.5(@types/node@24.10.7)(typescript@5.9.3))(utf-8-validate@6.0.5)(vite@7.3.1(@types/node@24.10.7)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1))(vitest@4.0.16)(webdriverio@9.23.0(bufferutil@4.0.9)(utf-8-validate@6.0.5)) '@vitest/ui': 4.0.16(vitest@4.0.16) - happy-dom: 20.0.11 + happy-dom: 20.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5) jsdom: 26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5) transitivePeerDependencies: - jiti From 72d9e846b7380ee4b09aaea26afc2304f24a9cf2 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 12 Jan 2026 05:55:15 +0000 Subject: [PATCH 007/353] fix(deps): update dependency i18next to v25.7.4 --- apps/client/package.json | 2 +- apps/server/package.json | 2 +- apps/website/package.json | 2 +- pnpm-lock.yaml | 40 +++++++++++++-------------------------- 4 files changed, 16 insertions(+), 30 deletions(-) diff --git a/apps/client/package.json b/apps/client/package.json index d102435f21..4e1c13b6cf 100644 --- a/apps/client/package.json +++ b/apps/client/package.json @@ -44,7 +44,7 @@ "draggabilly": "3.0.0", "force-graph": "1.51.0", "globals": "17.0.0", - "i18next": "25.7.3", + "i18next": "25.7.4", "i18next-http-backend": "3.0.2", "jquery": "3.7.1", "jquery.fancytree": "2.38.5", diff --git a/apps/server/package.json b/apps/server/package.json index 3bd95c60d0..bb099d98b0 100644 --- a/apps/server/package.json +++ b/apps/server/package.json @@ -99,7 +99,7 @@ "html2plaintext": "2.1.4", "http-proxy-agent": "7.0.2", "https-proxy-agent": "7.0.6", - "i18next": "25.7.3", + "i18next": "25.7.4", "i18next-fs-backend": "2.6.1", "image-type": "6.0.0", "ini": "6.0.0", diff --git a/apps/website/package.json b/apps/website/package.json index d04e686235..e9328ef026 100644 --- a/apps/website/package.json +++ b/apps/website/package.json @@ -9,7 +9,7 @@ "preview": "pnpm build && vite preview" }, "dependencies": { - "i18next": "25.7.3", + "i18next": "25.7.4", "i18next-http-backend": "3.0.2", "preact": "10.28.2", "preact-iso": "2.11.1", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index f3d6a48d0b..616feb0b6c 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -242,8 +242,8 @@ importers: specifier: 17.0.0 version: 17.0.0 i18next: - specifier: 25.7.3 - version: 25.7.3(typescript@5.9.3) + specifier: 25.7.4 + version: 25.7.4(typescript@5.9.3) i18next-http-backend: specifier: 3.0.2 version: 3.0.2(encoding@0.1.13) @@ -291,7 +291,7 @@ importers: version: 10.28.2 react-i18next: specifier: 16.5.1 - version: 16.5.1(i18next@25.7.3(typescript@5.9.3))(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(typescript@5.9.3) + version: 16.5.1(i18next@25.7.4(typescript@5.9.3))(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(typescript@5.9.3) react-window: specifier: 2.2.5 version: 2.2.5(react-dom@19.2.3(react@19.2.3))(react@19.2.3) @@ -706,8 +706,8 @@ importers: specifier: 7.0.6 version: 7.0.6 i18next: - specifier: 25.7.3 - version: 25.7.3(typescript@5.9.3) + specifier: 25.7.4 + version: 25.7.4(typescript@5.9.3) i18next-fs-backend: specifier: 2.6.1 version: 2.6.1 @@ -814,8 +814,8 @@ importers: apps/website: dependencies: i18next: - specifier: 25.7.3 - version: 25.7.3(typescript@5.9.3) + specifier: 25.7.4 + version: 25.7.4(typescript@5.9.3) i18next-http-backend: specifier: 3.0.2 version: 3.0.2(encoding@0.1.13) @@ -830,7 +830,7 @@ importers: version: 6.6.5(preact@10.28.2) react-i18next: specifier: 16.5.1 - version: 16.5.1(i18next@25.7.3(typescript@5.9.3))(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(typescript@5.9.3) + version: 16.5.1(i18next@25.7.4(typescript@5.9.3))(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(typescript@5.9.3) devDependencies: '@preact/preset-vite': specifier: 2.10.2 @@ -8985,8 +8985,8 @@ packages: i18next-http-backend@3.0.2: resolution: {integrity: sha512-PdlvPnvIp4E1sYi46Ik4tBYh/v/NbYfFFgTjkwFl0is8A18s7/bx9aXqsrOax9WUbeNS6mD2oix7Z0yGGf6m5g==} - i18next@25.7.3: - resolution: {integrity: sha512-2XaT+HpYGuc2uTExq9TVRhLsso+Dxym6PWaKpn36wfBmTI779OQ7iP/XaZHzrnGyzU4SHpFrTYLKfVyBfAhVNA==} + i18next@25.7.4: + resolution: {integrity: sha512-hRkpEblXXcXSNbw8mBNq9042OEetgyB/ahc/X17uV/khPwzV+uB8RHceHh3qavyrkPJvmXFKXME2Sy1E0KjAfw==} peerDependencies: typescript: ^5 peerDependenciesMeta: @@ -15366,8 +15366,6 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.3.0 ckeditor5: 47.3.0 es-toolkit: 1.39.5 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-editor-classic@47.3.0': dependencies: @@ -15377,8 +15375,6 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.3.0 ckeditor5: 47.3.0 es-toolkit: 1.39.5 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-editor-decoupled@47.3.0': dependencies: @@ -15388,8 +15384,6 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.3.0 ckeditor5: 47.3.0 es-toolkit: 1.39.5 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-editor-inline@47.3.0': dependencies: @@ -15507,8 +15501,6 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.3.0 ckeditor5: 47.3.0 es-toolkit: 1.39.5 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-font@47.3.0': dependencies: @@ -15583,8 +15575,6 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.3.0 '@ckeditor/ckeditor5-widget': 47.3.0 ckeditor5: 47.3.0 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-html-embed@47.3.0': dependencies: @@ -15884,8 +15874,6 @@ snapshots: '@ckeditor/ckeditor5-core': 47.3.0 '@ckeditor/ckeditor5-engine': 47.3.0 ckeditor5: 47.3.0 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-real-time-collaboration@47.3.0(bufferutil@4.0.9)(utf-8-validate@6.0.5)': dependencies: @@ -16004,8 +15992,6 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.3.0 '@ckeditor/ckeditor5-utils': 47.3.0 ckeditor5: 47.3.0 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-special-characters@47.3.0': dependencies: @@ -24803,7 +24789,7 @@ snapshots: transitivePeerDependencies: - encoding - i18next@25.7.3(typescript@5.9.3): + i18next@25.7.4(typescript@5.9.3): dependencies: '@babel/runtime': 7.28.4 optionalDependencies: @@ -28037,11 +28023,11 @@ snapshots: react: 19.2.3 scheduler: 0.27.0 - react-i18next@16.5.1(i18next@25.7.3(typescript@5.9.3))(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(typescript@5.9.3): + react-i18next@16.5.1(i18next@25.7.4(typescript@5.9.3))(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(typescript@5.9.3): dependencies: '@babel/runtime': 7.28.4 html-parse-stringify: 3.0.1 - i18next: 25.7.3(typescript@5.9.3) + i18next: 25.7.4(typescript@5.9.3) react: 19.2.3 use-sync-external-store: 1.6.0(react@19.2.3) optionalDependencies: From 644cc27fa709cd0334433fc425a5621ef09aee69 Mon Sep 17 00:00:00 2001 From: chloelee767 Date: Mon, 12 Jan 2026 23:05:42 +0800 Subject: [PATCH 008/353] fix alt shortcuts on mac not triggering --- apps/client/src/services/shortcuts.ts | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/apps/client/src/services/shortcuts.ts b/apps/client/src/services/shortcuts.ts index 167dc01d99..63db45302d 100644 --- a/apps/client/src/services/shortcuts.ts +++ b/apps/client/src/services/shortcuts.ts @@ -213,8 +213,11 @@ export function keyMatches(e: KeyboardEvent, key: string): boolean { } // For letter keys, use the physical key code for consistency + // On macOS, Option/Alt key produces special characters, so we must use e.code if (key.length === 1 && key >= 'a' && key <= 'z') { - return e.key.toLowerCase() === key.toLowerCase(); + // e.code is like "KeyA", "KeyB", etc. + const expectedCode = `Key${key.toUpperCase()}`; + return e.code === expectedCode || e.key.toLowerCase() === key.toLowerCase(); } // For regular keys, check both key and code as fallback From a5e8c8f573f8b46cabef668e9d8a4157a451c573 Mon Sep 17 00:00:00 2001 From: chloelee767 Date: Tue, 13 Jan 2026 00:05:07 +0800 Subject: [PATCH 009/353] add tests --- apps/client/src/services/shortcuts.spec.ts | 41 ++++++++++++++++++++++ 1 file changed, 41 insertions(+) diff --git a/apps/client/src/services/shortcuts.spec.ts b/apps/client/src/services/shortcuts.spec.ts index b9576025fe..6950c604cf 100644 --- a/apps/client/src/services/shortcuts.spec.ts +++ b/apps/client/src/services/shortcuts.spec.ts @@ -100,6 +100,20 @@ describe("shortcuts", () => { expect(consoleSpy).toHaveBeenCalled(); consoleSpy.mockRestore(); }); + + it("should match letter keys using code when key is a special character (macOS Alt behavior)", () => { + // On macOS, pressing Option/Alt + A produces 'å' as the key, but code is still 'KeyA' + const macOSAltAEvent = createKeyboardEvent("å", "KeyA"); + expect(keyMatches(macOSAltAEvent, "a")).toBe(true); + + // Option + H produces '˙' + const macOSAltHEvent = createKeyboardEvent("˙", "KeyH"); + expect(keyMatches(macOSAltHEvent, "h")).toBe(true); + + // Option + S produces 'ß' + const macOSAltSEvent = createKeyboardEvent("ß", "KeyS"); + expect(keyMatches(macOSAltSEvent, "s")).toBe(true); + }); }); describe("matchesShortcut", () => { @@ -200,6 +214,33 @@ describe("shortcuts", () => { expect(consoleSpy).toHaveBeenCalled(); consoleSpy.mockRestore(); }); + + it("should match Alt+letter shortcuts on macOS where key is a special character", () => { + // On macOS, pressing Option/Alt + A produces 'å' but code remains 'KeyA' + const macOSAltAEvent = createKeyboardEvent({ + key: "å", + code: "KeyA", + altKey: true + }); + expect(matchesShortcut(macOSAltAEvent, "alt+a")).toBe(true); + + // Option/Alt + H produces '˙' + const macOSAltHEvent = createKeyboardEvent({ + key: "˙", + code: "KeyH", + altKey: true + }); + expect(matchesShortcut(macOSAltHEvent, "alt+h")).toBe(true); + + // Combined with Ctrl: Ctrl+Alt+S where Alt produces 'ß' + const macOSCtrlAltSEvent = createKeyboardEvent({ + key: "ß", + code: "KeyS", + ctrlKey: true, + altKey: true + }); + expect(matchesShortcut(macOSCtrlAltSEvent, "ctrl+alt+s")).toBe(true); + }); }); describe("bindGlobalShortcut", () => { From 9e7eba5eab38ae1c721b3f9029d54eaf255c0dfe Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 13 Jan 2026 01:13:45 +0000 Subject: [PATCH 010/353] chore(deps): update dependency @redocly/cli to v2.14.5 --- apps/build-docs/package.json | 2 +- pnpm-lock.yaml | 82 +++++++++++++----------------------- 2 files changed, 31 insertions(+), 53 deletions(-) diff --git a/apps/build-docs/package.json b/apps/build-docs/package.json index 4dec167b03..80cdef54f3 100644 --- a/apps/build-docs/package.json +++ b/apps/build-docs/package.json @@ -11,7 +11,7 @@ "license": "AGPL-3.0-only", "packageManager": "pnpm@10.28.0", "devDependencies": { - "@redocly/cli": "2.14.4", + "@redocly/cli": "2.14.5", "archiver": "7.0.1", "fs-extra": "11.3.3", "react": "19.2.3", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index f3d6a48d0b..1152604204 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -134,8 +134,8 @@ importers: apps/build-docs: devDependencies: '@redocly/cli': - specifier: 2.14.4 - version: 2.14.4(@opentelemetry/api@1.9.0)(ajv@8.17.1)(bufferutil@4.0.9)(core-js@3.46.0)(encoding@0.1.13)(utf-8-validate@6.0.5) + specifier: 2.14.5 + version: 2.14.5(@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 @@ -4359,27 +4359,27 @@ packages: '@redocly/ajv@8.17.1': resolution: {integrity: sha512-EDtsGZS964mf9zAUXAl9Ew16eYbeyAFWhsPr0fX6oaJxgd8rApYlPBf0joyhnUHz88WxrigyFtTaqqzXNzPgqw==} - '@redocly/cli@2.14.4': - resolution: {integrity: sha512-DM6xT3hIvEc7a0z4r2DzUkusfmkPs0at6MGOiouASqxlG/k5k38KwIII51mE0c8VmMGhArhxZAFnptoycVpFoQ==} + '@redocly/cli@2.14.5': + resolution: {integrity: sha512-02Zz7YS7UwfBpbHbF64ApUkspr8Ar2XytgZ7JUljVwz+VjzCRcxkGMGE82BVYYQNKkw/YwlNOIX+lYYNbowTcw==} 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.41.1': - resolution: {integrity: sha512-LcMCzFbP/sqkCLSG3YswmeScP4fM5SjDCQizwa+psZ0PhYrKOMF7azZ6ZBkWs115uv5RfOk+jYAWLdKkZGGGXg==} + '@redocly/config@0.41.2': + resolution: {integrity: sha512-G6muhdTKcEV2TECBFzuT905p4a27OgUtwBqRVnMx1JebO6i8zlm6bPB2H3fD1Hl+MiUpk7Jx2kwGmLVgpz5nIg==} '@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.14.4': - resolution: {integrity: sha512-FqYf8pBXrZlbhjgcqEpgWrYk3E5j04I4nx0Pn2rMMlDe9S8N9T6axemJGHC6HvrzVJrTWLsUIsV6ndpBICnR2g==} + '@redocly/openapi-core@2.14.5': + resolution: {integrity: sha512-MQQR+RCG0V+jZV6msgKv1CNi/+TZUXmjMAAuTEktaTOYIsQWTCV9GYSD/2n94eMDZwxI4olr05OPzOZo9z0EMg==} engines: {node: '>=22.12.0 || >=20.19.0 <21.0.0', npm: '>=10'} - '@redocly/respect-core@2.14.4': - resolution: {integrity: sha512-b7AZVVo6XXU5DFSUFv0m0ZmaLbRGILUMEV+ZlDKzIYRd9SDUNOze6DtFNPQjz+ePJnvzu1s55ZluQXPyF0y4fQ==} + '@redocly/respect-core@2.14.5': + resolution: {integrity: sha512-zZKYwBZYfRi4/Iv2V7hq9xOYhpO3+IuzYjk8/V0CZjoHCnoW8jgGGhvoXMn/BfedZS9/3fV9n4SEskIbmCPl8Q==} engines: {node: '>=22.12.0 || >=20.19.0 <21.0.0', npm: '>=10'} '@replit/codemirror-indentation-markers@6.5.3': @@ -15024,8 +15024,6 @@ snapshots: '@ckeditor/ckeditor5-core': 47.3.0 '@ckeditor/ckeditor5-upload': 47.3.0 ckeditor5: 47.3.0 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-ai@47.3.0(bufferutil@4.0.9)(utf-8-validate@6.0.5)': dependencies: @@ -15366,8 +15364,6 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.3.0 ckeditor5: 47.3.0 es-toolkit: 1.39.5 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-editor-classic@47.3.0': dependencies: @@ -15377,8 +15373,6 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.3.0 ckeditor5: 47.3.0 es-toolkit: 1.39.5 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-editor-decoupled@47.3.0': dependencies: @@ -15388,8 +15382,6 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.3.0 ckeditor5: 47.3.0 es-toolkit: 1.39.5 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-editor-inline@47.3.0': dependencies: @@ -15423,8 +15415,6 @@ snapshots: '@ckeditor/ckeditor5-table': 47.3.0 '@ckeditor/ckeditor5-utils': 47.3.0 ckeditor5: 47.3.0 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-emoji@47.3.0': dependencies: @@ -15507,8 +15497,6 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.3.0 ckeditor5: 47.3.0 es-toolkit: 1.39.5 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-font@47.3.0': dependencies: @@ -15583,8 +15571,6 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.3.0 '@ckeditor/ckeditor5-widget': 47.3.0 ckeditor5: 47.3.0 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-html-embed@47.3.0': dependencies: @@ -15611,8 +15597,6 @@ snapshots: '@ckeditor/ckeditor5-widget': 47.3.0 ckeditor5: 47.3.0 es-toolkit: 1.39.5 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-icons@47.3.0': {} @@ -15884,8 +15868,6 @@ snapshots: '@ckeditor/ckeditor5-core': 47.3.0 '@ckeditor/ckeditor5-engine': 47.3.0 ckeditor5: 47.3.0 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-real-time-collaboration@47.3.0(bufferutil@4.0.9)(utf-8-validate@6.0.5)': dependencies: @@ -16004,8 +15986,6 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.3.0 '@ckeditor/ckeditor5-utils': 47.3.0 ckeditor5: 47.3.0 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-special-characters@47.3.0': dependencies: @@ -18808,16 +18788,17 @@ snapshots: json-schema-traverse: 1.0.0 require-from-string: 2.0.2 - '@redocly/cli@2.14.4(@opentelemetry/api@1.9.0)(ajv@8.17.1)(bufferutil@4.0.9)(core-js@3.46.0)(encoding@0.1.13)(utf-8-validate@6.0.5)': + '@redocly/cli@2.14.5(@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/openapi-core': 2.14.4(ajv@8.17.1) - '@redocly/respect-core': 2.14.4(ajv@8.17.1) + '@redocly/openapi-core': 2.14.5 + '@redocly/respect-core': 2.14.5 abort-controller: 3.0.0 - ajv-formats: 3.0.1(ajv@8.17.1) + ajv: '@redocly/ajv@8.17.1' + ajv-formats: 3.0.1(@redocly/ajv@8.17.1) chokidar: 3.6.0 colorette: 1.4.0 cookie: 0.7.2 @@ -18839,7 +18820,6 @@ snapshots: yargs: 17.0.1 transitivePeerDependencies: - '@opentelemetry/api' - - ajv - bufferutil - core-js - encoding @@ -18849,7 +18829,7 @@ snapshots: '@redocly/config@0.22.2': {} - '@redocly/config@0.41.1': + '@redocly/config@0.41.2': dependencies: json-schema-to-ts: 2.7.2 @@ -18867,34 +18847,32 @@ snapshots: transitivePeerDependencies: - supports-color - '@redocly/openapi-core@2.14.4(ajv@8.17.1)': + '@redocly/openapi-core@2.14.5': dependencies: '@redocly/ajv': 8.17.1 - '@redocly/config': 0.41.1 - ajv-formats: 3.0.1(ajv@8.17.1) + '@redocly/config': 0.41.2 + ajv: '@redocly/ajv@8.17.1' + ajv-formats: 3.0.1(@redocly/ajv@8.17.1) colorette: 1.4.0 js-levenshtein: 1.1.6 js-yaml: 4.1.1 picomatch: 4.0.3 pluralize: 8.0.0 yaml-ast-parser: 0.0.43 - transitivePeerDependencies: - - ajv - '@redocly/respect-core@2.14.4(ajv@8.17.1)': + '@redocly/respect-core@2.14.5': dependencies: '@faker-js/faker': 7.6.0 '@noble/hashes': 1.8.0 '@redocly/ajv': 8.17.1 - '@redocly/openapi-core': 2.14.4(ajv@8.17.1) - better-ajv-errors: 1.2.0(ajv@8.17.1) + '@redocly/openapi-core': 2.14.5 + ajv: '@redocly/ajv@8.17.1' + better-ajv-errors: 1.2.0(@redocly/ajv@8.17.1) colorette: 2.0.20 json-pointer: 0.6.2 jsonpath-rfc9535: 1.3.0 openapi-sampler: 1.6.2 outdent: 0.8.0 - transitivePeerDependencies: - - ajv '@replit/codemirror-indentation-markers@6.5.3(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.39.9)': dependencies: @@ -20919,14 +20897,14 @@ snapshots: optionalDependencies: ajv: 8.17.1 + ajv-formats@3.0.1(@redocly/ajv@8.17.1): + optionalDependencies: + ajv: '@redocly/ajv@8.17.1' + ajv-formats@3.0.1(ajv@8.13.0): optionalDependencies: ajv: 8.13.0 - ajv-formats@3.0.1(ajv@8.17.1): - optionalDependencies: - ajv: 8.17.1 - ajv-keywords@3.5.2(ajv@6.12.6): dependencies: ajv: 6.12.6 @@ -21269,11 +21247,11 @@ snapshots: batch@0.6.1: {} - better-ajv-errors@1.2.0(ajv@8.17.1): + better-ajv-errors@1.2.0(@redocly/ajv@8.17.1): dependencies: '@babel/code-frame': 7.27.1 '@humanwhocodes/momoa': 2.0.4 - ajv: 8.17.1 + ajv: '@redocly/ajv@8.17.1' chalk: 4.1.2 jsonpointer: 5.0.1 leven: 3.1.0 From b93540b40d00d25256a2482877795469dc72041d Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 13 Jan 2026 01:14:27 +0000 Subject: [PATCH 011/353] chore(deps): update dependency @smithy/middleware-retry to v4.4.20 --- packages/ckeditor5/package.json | 2 +- pnpm-lock.yaml | 130 ++++++++++++++------------------ 2 files changed, 56 insertions(+), 76 deletions(-) diff --git a/packages/ckeditor5/package.json b/packages/ckeditor5/package.json index 6de6d88155..170c7038bb 100644 --- a/packages/ckeditor5/package.json +++ b/packages/ckeditor5/package.json @@ -16,7 +16,7 @@ "ckeditor5-premium-features": "47.3.0" }, "devDependencies": { - "@smithy/middleware-retry": "4.4.19", + "@smithy/middleware-retry": "4.4.20", "@types/jquery": "3.5.33" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index f3d6a48d0b..239f1e9ea7 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -882,8 +882,8 @@ importers: version: 47.3.0(bufferutil@4.0.9)(ckeditor5@47.3.0)(utf-8-validate@6.0.5) devDependencies: '@smithy/middleware-retry': - specifier: 4.4.19 - version: 4.4.19 + specifier: 4.4.20 + version: 4.4.20 '@types/jquery': specifier: 3.5.33 version: 3.5.33 @@ -4762,14 +4762,14 @@ packages: resolution: {integrity: sha512-prmU+rDddxHOH0oNcwemL+SwnzcG65sBF2yXRO7aeXIn/xTlq2pX7JLVbkBnVLowHLg4/OL4+jBmv9hVrVGS+w==} engines: {node: '>=18.0.0'} - '@smithy/core@3.20.0': - resolution: {integrity: sha512-WsSHCPq/neD5G/MkK4csLI5Y5Pkd9c1NMfpYEKeghSGaD4Ja1qLIohRQf2D5c1Uy5aXp76DeKHkzWZ9KAlHroQ==} - engines: {node: '>=18.0.0'} - '@smithy/core@3.20.2': resolution: {integrity: sha512-nc99TseyTwL1bg+T21cyEA5oItNy1XN4aUeyOlXJnvyRW5VSK1oRKRoSM/Iq0KFPuqZMxjBemSZHZCOZbSyBMw==} engines: {node: '>=18.0.0'} + '@smithy/core@3.20.3': + resolution: {integrity: sha512-iwF1e0+H9vX+4reUA0WjKnc5ueg0Leinl5kI7wsie5bVXoYdzkpINz6NPYhpr/5InOv332a7wNV5AxJyFoVUsQ==} + engines: {node: '>=18.0.0'} + '@smithy/credential-provider-imds@4.0.6': resolution: {integrity: sha512-hKMWcANhUiNbCJouYkZ9V3+/Qf9pteR1dnwgdyzR09R4ODEYx8BbUysHwRSyex4rZ9zapddZhLFTnT4ZijR4pw==} engines: {node: '>=18.0.0'} @@ -4822,16 +4822,16 @@ packages: resolution: {integrity: sha512-F7gDyfI2BB1Kc+4M6rpuOLne5LOcEknH1n6UQB69qv+HucXBR1rkzXBnQTB2q46sFy1PM/zuSJOB532yc8bg3w==} engines: {node: '>=18.0.0'} - '@smithy/middleware-endpoint@4.4.1': - resolution: {integrity: sha512-gpLspUAoe6f1M6H0u4cVuFzxZBrsGZmjx2O9SigurTx4PbntYa4AJ+o0G0oGm1L2oSX6oBhcGHwrfJHup2JnJg==} - engines: {node: '>=18.0.0'} - '@smithy/middleware-endpoint@4.4.3': resolution: {integrity: sha512-Zb8R35hjBhp1oFhiaAZ9QhClpPHdEDmNDC2UrrB2fqV0oNDUUPH12ovZHB5xi/Rd+pg/BJHOR1q+SfsieSKPQg==} engines: {node: '>=18.0.0'} - '@smithy/middleware-retry@4.4.19': - resolution: {integrity: sha512-QtisFIjIw2tjMm/ESatjWFVIQb5Xd093z8xhxq/SijLg7Mgo2C2wod47Ib/AHpBLFhwYXPzd7Hp2+JVXfeZyMQ==} + '@smithy/middleware-endpoint@4.4.4': + resolution: {integrity: sha512-TFxS6C5bGSc4djD1SLVmstCpfYDjmMnBR4KRDge5HEEtgSINGPKuxLvaAGfSPx5FFoMaTJkj4jJLNFggeWpRoQ==} + engines: {node: '>=18.0.0'} + + '@smithy/middleware-retry@4.4.20': + resolution: {integrity: sha512-+UvEn/8HGzh/6zpe9xFGZe7go4/fzflggfeRG/TvdGLoUY7Gw+4RgzKJEPU2NvPo0k/j/o7vvx25ZWyOXeGoxw==} engines: {node: '>=18.0.0'} '@smithy/middleware-serde@4.2.6': @@ -4894,14 +4894,14 @@ packages: resolution: {integrity: sha512-d3+U/VpX7a60seHziWnVZOHuEgJlclufjkS6zhXvxcJgkJq4UWdH5eOBLzHRMx6gXjsdT9h6lfpmLzbrdupHgQ==} engines: {node: '>=18.0.0'} - '@smithy/smithy-client@4.10.2': - resolution: {integrity: sha512-D5z79xQWpgrGpAHb054Fn2CCTQZpog7JELbVQ6XAvXs5MNKWf28U9gzSBlJkOyMl9LA1TZEjRtwvGXfP0Sl90g==} - engines: {node: '>=18.0.0'} - '@smithy/smithy-client@4.10.4': resolution: {integrity: sha512-rHig+BWjhjlHlah67ryaW9DECYixiJo5pQCTEwsJyarRBAwHMMC3iYz5MXXAHXe64ZAMn1NhTUSTFIu1T6n6jg==} engines: {node: '>=18.0.0'} + '@smithy/smithy-client@4.10.5': + resolution: {integrity: sha512-uotYm3WDne01R0DxBqF9J8WZc8gSgdj+uC7Lv/R+GinH4rxcgRLxLDayYkyGAboZlYszly6maQA+NGQ5N4gLhQ==} + engines: {node: '>=18.0.0'} + '@smithy/types@4.11.0': resolution: {integrity: sha512-mlrmL0DRDVe3mNrjTcVcZEgkFmufITfUAPBEA+AHYiIeYyJebso/He1qLbP3PssRe22KUzLRpQSdBPbXdgZ2VA==} engines: {node: '>=18.0.0'} @@ -14451,7 +14451,7 @@ snapshots: '@aws-sdk/util-user-agent-browser': 3.821.0 '@aws-sdk/util-user-agent-node': 3.823.0 '@smithy/config-resolver': 4.1.4 - '@smithy/core': 3.20.0 + '@smithy/core': 3.20.2 '@smithy/eventstream-serde-browser': 4.0.4 '@smithy/eventstream-serde-config-resolver': 4.1.2 '@smithy/eventstream-serde-node': 4.0.4 @@ -14459,14 +14459,14 @@ snapshots: '@smithy/hash-node': 4.0.4 '@smithy/invalid-dependency': 4.0.4 '@smithy/middleware-content-length': 4.0.4 - '@smithy/middleware-endpoint': 4.4.1 - '@smithy/middleware-retry': 4.4.19 + '@smithy/middleware-endpoint': 4.4.3 + '@smithy/middleware-retry': 4.4.20 '@smithy/middleware-serde': 4.2.6 '@smithy/middleware-stack': 4.2.7 '@smithy/node-config-provider': 4.3.7 '@smithy/node-http-handler': 4.4.5 '@smithy/protocol-http': 5.3.7 - '@smithy/smithy-client': 4.10.2 + '@smithy/smithy-client': 4.10.4 '@smithy/types': 4.11.0 '@smithy/url-parser': 4.2.5 '@smithy/util-base64': 4.3.0 @@ -14500,19 +14500,19 @@ snapshots: '@aws-sdk/util-user-agent-browser': 3.821.0 '@aws-sdk/util-user-agent-node': 3.823.0 '@smithy/config-resolver': 4.1.4 - '@smithy/core': 3.20.0 + '@smithy/core': 3.20.2 '@smithy/fetch-http-handler': 5.3.8 '@smithy/hash-node': 4.0.4 '@smithy/invalid-dependency': 4.0.4 '@smithy/middleware-content-length': 4.0.4 - '@smithy/middleware-endpoint': 4.4.1 - '@smithy/middleware-retry': 4.4.19 + '@smithy/middleware-endpoint': 4.4.3 + '@smithy/middleware-retry': 4.4.20 '@smithy/middleware-serde': 4.2.8 '@smithy/middleware-stack': 4.2.7 '@smithy/node-config-provider': 4.3.7 '@smithy/node-http-handler': 4.4.7 '@smithy/protocol-http': 5.3.7 - '@smithy/smithy-client': 4.10.2 + '@smithy/smithy-client': 4.10.4 '@smithy/types': 4.11.0 '@smithy/url-parser': 4.2.7 '@smithy/util-base64': 4.3.0 @@ -14532,12 +14532,12 @@ snapshots: dependencies: '@aws-sdk/types': 3.821.0 '@aws-sdk/xml-builder': 3.821.0 - '@smithy/core': 3.20.0 + '@smithy/core': 3.20.2 '@smithy/node-config-provider': 4.3.7 '@smithy/property-provider': 4.2.7 '@smithy/protocol-http': 5.3.7 '@smithy/signature-v4': 5.1.2 - '@smithy/smithy-client': 4.10.2 + '@smithy/smithy-client': 4.10.4 '@smithy/types': 4.11.0 '@smithy/util-base64': 4.3.0 '@smithy/util-body-length-browser': 4.2.0 @@ -14562,7 +14562,7 @@ snapshots: '@smithy/node-http-handler': 4.4.7 '@smithy/property-provider': 4.2.7 '@smithy/protocol-http': 5.3.7 - '@smithy/smithy-client': 4.10.2 + '@smithy/smithy-client': 4.10.4 '@smithy/types': 4.11.0 '@smithy/util-stream': 4.5.8 tslib: 2.8.1 @@ -14674,7 +14674,7 @@ snapshots: '@aws-sdk/core': 3.823.0 '@aws-sdk/types': 3.821.0 '@aws-sdk/util-endpoints': 3.821.0 - '@smithy/core': 3.20.0 + '@smithy/core': 3.20.2 '@smithy/protocol-http': 5.3.7 '@smithy/types': 4.11.0 tslib: 2.8.1 @@ -14694,19 +14694,19 @@ snapshots: '@aws-sdk/util-user-agent-browser': 3.821.0 '@aws-sdk/util-user-agent-node': 3.823.0 '@smithy/config-resolver': 4.1.4 - '@smithy/core': 3.20.0 + '@smithy/core': 3.20.2 '@smithy/fetch-http-handler': 5.3.8 '@smithy/hash-node': 4.0.4 '@smithy/invalid-dependency': 4.0.4 '@smithy/middleware-content-length': 4.0.4 - '@smithy/middleware-endpoint': 4.4.1 - '@smithy/middleware-retry': 4.4.19 + '@smithy/middleware-endpoint': 4.4.3 + '@smithy/middleware-retry': 4.4.20 '@smithy/middleware-serde': 4.2.8 '@smithy/middleware-stack': 4.2.7 '@smithy/node-config-provider': 4.3.7 '@smithy/node-http-handler': 4.4.7 '@smithy/protocol-http': 5.3.7 - '@smithy/smithy-client': 4.10.2 + '@smithy/smithy-client': 4.10.4 '@smithy/types': 4.11.0 '@smithy/url-parser': 4.2.7 '@smithy/util-base64': 4.3.0 @@ -15024,8 +15024,6 @@ snapshots: '@ckeditor/ckeditor5-core': 47.3.0 '@ckeditor/ckeditor5-upload': 47.3.0 ckeditor5: 47.3.0 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-ai@47.3.0(bufferutil@4.0.9)(utf-8-validate@6.0.5)': dependencies: @@ -15172,8 +15170,6 @@ snapshots: '@ckeditor/ckeditor5-core': 47.3.0 '@ckeditor/ckeditor5-utils': 47.3.0 ckeditor5: 47.3.0 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-code-block@47.3.0(patch_hash=2361d8caad7d6b5bddacc3a3b4aa37dbfba260b1c1b22a450413a79c1bb1ce95)': dependencies: @@ -15366,8 +15362,6 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.3.0 ckeditor5: 47.3.0 es-toolkit: 1.39.5 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-editor-classic@47.3.0': dependencies: @@ -15377,8 +15371,6 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.3.0 ckeditor5: 47.3.0 es-toolkit: 1.39.5 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-editor-decoupled@47.3.0': dependencies: @@ -15388,8 +15380,6 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.3.0 ckeditor5: 47.3.0 es-toolkit: 1.39.5 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-editor-inline@47.3.0': dependencies: @@ -15507,8 +15497,6 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.3.0 ckeditor5: 47.3.0 es-toolkit: 1.39.5 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-font@47.3.0': dependencies: @@ -15583,8 +15571,6 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.3.0 '@ckeditor/ckeditor5-widget': 47.3.0 ckeditor5: 47.3.0 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-html-embed@47.3.0': dependencies: @@ -15884,8 +15870,6 @@ snapshots: '@ckeditor/ckeditor5-core': 47.3.0 '@ckeditor/ckeditor5-engine': 47.3.0 ckeditor5: 47.3.0 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-real-time-collaboration@47.3.0(bufferutil@4.0.9)(utf-8-validate@6.0.5)': dependencies: @@ -15916,8 +15900,6 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.3.0 '@ckeditor/ckeditor5-utils': 47.3.0 ckeditor5: 47.3.0 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-restricted-editing@47.3.0': dependencies: @@ -16004,8 +15986,6 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.3.0 '@ckeditor/ckeditor5-utils': 47.3.0 ckeditor5: 47.3.0 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-special-characters@47.3.0': dependencies: @@ -19226,7 +19206,7 @@ snapshots: '@smithy/util-middleware': 4.2.7 tslib: 2.8.1 - '@smithy/core@3.20.0': + '@smithy/core@3.20.2': dependencies: '@smithy/middleware-serde': 4.2.8 '@smithy/protocol-http': 5.3.7 @@ -19239,7 +19219,7 @@ snapshots: '@smithy/uuid': 1.1.0 tslib: 2.8.1 - '@smithy/core@3.20.2': + '@smithy/core@3.20.3': dependencies: '@smithy/middleware-serde': 4.2.8 '@smithy/protocol-http': 5.3.7 @@ -19332,17 +19312,6 @@ snapshots: '@smithy/types': 4.11.0 tslib: 2.8.1 - '@smithy/middleware-endpoint@4.4.1': - dependencies: - '@smithy/core': 3.20.0 - '@smithy/middleware-serde': 4.2.8 - '@smithy/node-config-provider': 4.3.7 - '@smithy/shared-ini-file-loader': 4.4.2 - '@smithy/types': 4.11.0 - '@smithy/url-parser': 4.2.7 - '@smithy/util-middleware': 4.2.7 - tslib: 2.8.1 - '@smithy/middleware-endpoint@4.4.3': dependencies: '@smithy/core': 3.20.2 @@ -19354,12 +19323,23 @@ snapshots: '@smithy/util-middleware': 4.2.7 tslib: 2.8.1 - '@smithy/middleware-retry@4.4.19': + '@smithy/middleware-endpoint@4.4.4': + dependencies: + '@smithy/core': 3.20.3 + '@smithy/middleware-serde': 4.2.8 + '@smithy/node-config-provider': 4.3.7 + '@smithy/shared-ini-file-loader': 4.4.2 + '@smithy/types': 4.11.0 + '@smithy/url-parser': 4.2.7 + '@smithy/util-middleware': 4.2.7 + tslib: 2.8.1 + + '@smithy/middleware-retry@4.4.20': dependencies: '@smithy/node-config-provider': 4.3.7 '@smithy/protocol-http': 5.3.7 '@smithy/service-error-classification': 4.2.7 - '@smithy/smithy-client': 4.10.4 + '@smithy/smithy-client': 4.10.5 '@smithy/types': 4.11.0 '@smithy/util-middleware': 4.2.7 '@smithy/util-retry': 4.2.7 @@ -19458,20 +19438,20 @@ snapshots: '@smithy/util-utf8': 4.2.0 tslib: 2.8.1 - '@smithy/smithy-client@4.10.2': + '@smithy/smithy-client@4.10.4': dependencies: - '@smithy/core': 3.20.0 - '@smithy/middleware-endpoint': 4.4.1 + '@smithy/core': 3.20.2 + '@smithy/middleware-endpoint': 4.4.3 '@smithy/middleware-stack': 4.2.7 '@smithy/protocol-http': 5.3.7 '@smithy/types': 4.11.0 '@smithy/util-stream': 4.5.8 tslib: 2.8.1 - '@smithy/smithy-client@4.10.4': + '@smithy/smithy-client@4.10.5': dependencies: - '@smithy/core': 3.20.2 - '@smithy/middleware-endpoint': 4.4.3 + '@smithy/core': 3.20.3 + '@smithy/middleware-endpoint': 4.4.4 '@smithy/middleware-stack': 4.2.7 '@smithy/protocol-http': 5.3.7 '@smithy/types': 4.11.0 @@ -19525,7 +19505,7 @@ snapshots: '@smithy/util-defaults-mode-browser@4.0.22': dependencies: '@smithy/property-provider': 4.2.7 - '@smithy/smithy-client': 4.10.2 + '@smithy/smithy-client': 4.10.4 '@smithy/types': 4.11.0 bowser: 2.11.0 tslib: 2.8.1 @@ -19536,7 +19516,7 @@ snapshots: '@smithy/credential-provider-imds': 4.0.6 '@smithy/node-config-provider': 4.3.7 '@smithy/property-provider': 4.2.7 - '@smithy/smithy-client': 4.10.2 + '@smithy/smithy-client': 4.10.4 '@smithy/types': 4.11.0 tslib: 2.8.1 From 028334407c23babc25c5e68f164b9ca959767a93 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 13 Jan 2026 01:15:54 +0000 Subject: [PATCH 012/353] fix(deps): update dependency diff to v8.0.3 --- apps/db-compare/package.json | 2 +- pnpm-lock.yaml | 30 ++++++++---------------------- 2 files changed, 9 insertions(+), 23 deletions(-) diff --git a/apps/db-compare/package.json b/apps/db-compare/package.json index 3bea743360..0d975a901f 100644 --- a/apps/db-compare/package.json +++ b/apps/db-compare/package.json @@ -5,7 +5,7 @@ "description": "Tool to compare content of Trilium databases. Useful for debugging sync problems.", "dependencies": { "colors": "1.4.0", - "diff": "8.0.2", + "diff": "8.0.3", "sqlite": "5.1.1", "sqlite3": "5.1.7" }, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index f3d6a48d0b..9f02d54257 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -357,8 +357,8 @@ importers: specifier: 1.4.0 version: 1.4.0 diff: - specifier: 8.0.2 - version: 8.0.2 + specifier: 8.0.3 + version: 8.0.3 sqlite: specifier: 5.1.1 version: 5.1.1 @@ -7613,6 +7613,10 @@ packages: resolution: {integrity: sha512-sSuxWU5j5SR9QQji/o2qMvqRNYRDOcBTgsJ/DeCf4iSN4gW+gNMXM7wFIP+fdXZxoNiAnHUTGjCr+TSWXdRDKg==} engines: {node: '>=0.3.1'} + diff@8.0.3: + resolution: {integrity: sha512-qejHi7bcSD4hQAZE0tNAawRK1ZtafHDmMTMkrrIGgSLl7hTnQHmKCeB45xAcbfTqK2zowkM3j3bHt/4b/ARbYQ==} + engines: {node: '>=0.3.1'} + dir-compare@4.2.0: resolution: {integrity: sha512-2xMCmOoMrdQIPHdsTawECdNPwlVFB9zGcz3kuhmBO6U3oU+UQjsue0i8ayLKpgBcm+hcXPMVSGUN9d+pvJ6+VQ==} @@ -15024,8 +15028,6 @@ snapshots: '@ckeditor/ckeditor5-core': 47.3.0 '@ckeditor/ckeditor5-upload': 47.3.0 ckeditor5: 47.3.0 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-ai@47.3.0(bufferutil@4.0.9)(utf-8-validate@6.0.5)': dependencies: @@ -15172,8 +15174,6 @@ snapshots: '@ckeditor/ckeditor5-core': 47.3.0 '@ckeditor/ckeditor5-utils': 47.3.0 ckeditor5: 47.3.0 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-code-block@47.3.0(patch_hash=2361d8caad7d6b5bddacc3a3b4aa37dbfba260b1c1b22a450413a79c1bb1ce95)': dependencies: @@ -15366,8 +15366,6 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.3.0 ckeditor5: 47.3.0 es-toolkit: 1.39.5 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-editor-classic@47.3.0': dependencies: @@ -15377,8 +15375,6 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.3.0 ckeditor5: 47.3.0 es-toolkit: 1.39.5 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-editor-decoupled@47.3.0': dependencies: @@ -15388,8 +15384,6 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.3.0 ckeditor5: 47.3.0 es-toolkit: 1.39.5 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-editor-inline@47.3.0': dependencies: @@ -15507,8 +15501,6 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.3.0 ckeditor5: 47.3.0 es-toolkit: 1.39.5 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-font@47.3.0': dependencies: @@ -15583,8 +15575,6 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.3.0 '@ckeditor/ckeditor5-widget': 47.3.0 ckeditor5: 47.3.0 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-html-embed@47.3.0': dependencies: @@ -15884,8 +15874,6 @@ snapshots: '@ckeditor/ckeditor5-core': 47.3.0 '@ckeditor/ckeditor5-engine': 47.3.0 ckeditor5: 47.3.0 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-real-time-collaboration@47.3.0(bufferutil@4.0.9)(utf-8-validate@6.0.5)': dependencies: @@ -15916,8 +15904,6 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.3.0 '@ckeditor/ckeditor5-utils': 47.3.0 ckeditor5: 47.3.0 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-restricted-editing@47.3.0': dependencies: @@ -16004,8 +15990,6 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.3.0 '@ckeditor/ckeditor5-utils': 47.3.0 ckeditor5: 47.3.0 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-special-characters@47.3.0': dependencies: @@ -22779,6 +22763,8 @@ snapshots: diff@8.0.2: {} + diff@8.0.3: {} + dir-compare@4.2.0: dependencies: minimatch: 3.1.2 From 9b4b1a393ecd3c474ca85ad803cf6c4c6c234c75 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 13 Jan 2026 01:16:28 +0000 Subject: [PATCH 013/353] chore(deps): update dependency eslint-plugin-playwright to v2.5.0 --- package.json | 2 +- pnpm-lock.yaml | 30 +++++------------------------- 2 files changed, 6 insertions(+), 26 deletions(-) diff --git a/package.json b/package.json index c81cd92a02..8fe20e4ff2 100644 --- a/package.json +++ b/package.json @@ -59,7 +59,7 @@ "eslint": "9.39.2", "eslint-config-preact": "2.0.0", "eslint-config-prettier": "10.1.8", - "eslint-plugin-playwright": "2.4.1", + "eslint-plugin-playwright": "2.5.0", "eslint-plugin-simple-import-sort": "12.1.1", "happy-dom": "~20.0.0", "http-server": "14.1.1", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index f3d6a48d0b..3a732dba60 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -83,8 +83,8 @@ importers: specifier: 10.1.8 version: 10.1.8(eslint@9.39.2(jiti@2.6.1)) eslint-plugin-playwright: - specifier: 2.4.1 - version: 2.4.1(eslint@9.39.2(jiti@2.6.1)) + specifier: 2.5.0 + version: 2.5.0(eslint@9.39.2(jiti@2.6.1)) eslint-plugin-simple-import-sort: specifier: 12.1.1 version: 12.1.1(eslint@9.39.2(jiti@2.6.1)) @@ -8002,8 +8002,8 @@ packages: peerDependencies: eslint: '>=9.0.0' - eslint-plugin-playwright@2.4.1: - resolution: {integrity: sha512-rKx00OLmwrtGmA8UhOFeDu4lK1Y0i5n5VliK7DCdzc1Dh+StvCEwWajtSYqfhbHa935DoHWyS1DN95NBDGXGWg==} + eslint-plugin-playwright@2.5.0: + resolution: {integrity: sha512-1ckFw7Abdz+l23wtw5Tg4GTK3Y+MgEQQNjEr7FTJP3wwmIOj8DkbJ6G655aPc09c0Kfn/NoGA4xpMZzeSO4NWw==} engines: {node: '>=16.9.0'} peerDependencies: eslint: '>=8.40.0' @@ -15024,8 +15024,6 @@ snapshots: '@ckeditor/ckeditor5-core': 47.3.0 '@ckeditor/ckeditor5-upload': 47.3.0 ckeditor5: 47.3.0 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-ai@47.3.0(bufferutil@4.0.9)(utf-8-validate@6.0.5)': dependencies: @@ -15172,8 +15170,6 @@ snapshots: '@ckeditor/ckeditor5-core': 47.3.0 '@ckeditor/ckeditor5-utils': 47.3.0 ckeditor5: 47.3.0 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-code-block@47.3.0(patch_hash=2361d8caad7d6b5bddacc3a3b4aa37dbfba260b1c1b22a450413a79c1bb1ce95)': dependencies: @@ -15366,8 +15362,6 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.3.0 ckeditor5: 47.3.0 es-toolkit: 1.39.5 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-editor-classic@47.3.0': dependencies: @@ -15377,8 +15371,6 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.3.0 ckeditor5: 47.3.0 es-toolkit: 1.39.5 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-editor-decoupled@47.3.0': dependencies: @@ -15388,8 +15380,6 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.3.0 ckeditor5: 47.3.0 es-toolkit: 1.39.5 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-editor-inline@47.3.0': dependencies: @@ -15507,8 +15497,6 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.3.0 ckeditor5: 47.3.0 es-toolkit: 1.39.5 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-font@47.3.0': dependencies: @@ -15583,8 +15571,6 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.3.0 '@ckeditor/ckeditor5-widget': 47.3.0 ckeditor5: 47.3.0 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-html-embed@47.3.0': dependencies: @@ -15884,8 +15870,6 @@ snapshots: '@ckeditor/ckeditor5-core': 47.3.0 '@ckeditor/ckeditor5-engine': 47.3.0 ckeditor5: 47.3.0 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-real-time-collaboration@47.3.0(bufferutil@4.0.9)(utf-8-validate@6.0.5)': dependencies: @@ -15916,8 +15900,6 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.3.0 '@ckeditor/ckeditor5-utils': 47.3.0 ckeditor5: 47.3.0 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-restricted-editing@47.3.0': dependencies: @@ -16004,8 +15986,6 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.3.0 '@ckeditor/ckeditor5-utils': 47.3.0 ckeditor5: 47.3.0 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-special-characters@47.3.0': dependencies: @@ -23474,7 +23454,7 @@ snapshots: eslint: 9.39.2(jiti@2.6.1) globals: 15.15.0 - eslint-plugin-playwright@2.4.1(eslint@9.39.2(jiti@2.6.1)): + eslint-plugin-playwright@2.5.0(eslint@9.39.2(jiti@2.6.1)): dependencies: eslint: 9.39.2(jiti@2.6.1) globals: 16.5.0 From 6c8e6f242960876d08196bfd698d9e0feb9ac0d2 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 13 Jan 2026 01:16:59 +0000 Subject: [PATCH 014/353] chore(deps): update electron-forge monorepo to v7.11.1 --- apps/desktop/package.json | 16 +-- pnpm-lock.yaml | 284 +++++++++++++++++--------------------- 2 files changed, 133 insertions(+), 167 deletions(-) diff --git a/apps/desktop/package.json b/apps/desktop/package.json index fded9a17b5..f83d2671e6 100644 --- a/apps/desktop/package.json +++ b/apps/desktop/package.json @@ -36,14 +36,14 @@ "@triliumnext/server": "workspace:*", "copy-webpack-plugin": "13.0.1", "electron": "39.2.7", - "@electron-forge/cli": "7.10.2", - "@electron-forge/maker-deb": "7.10.2", - "@electron-forge/maker-dmg": "7.10.2", - "@electron-forge/maker-flatpak": "7.10.2", - "@electron-forge/maker-rpm": "7.10.2", - "@electron-forge/maker-squirrel": "7.10.2", - "@electron-forge/maker-zip": "7.10.2", - "@electron-forge/plugin-auto-unpack-natives": "7.10.2", + "@electron-forge/cli": "7.11.1", + "@electron-forge/maker-deb": "7.11.1", + "@electron-forge/maker-dmg": "7.11.1", + "@electron-forge/maker-flatpak": "7.11.1", + "@electron-forge/maker-rpm": "7.11.1", + "@electron-forge/maker-squirrel": "7.11.1", + "@electron-forge/maker-zip": "7.11.1", + "@electron-forge/plugin-auto-unpack-natives": "7.11.1", "prebuild-install": "7.1.3" } } \ No newline at end of file diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index f3d6a48d0b..4b972cefc3 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -391,29 +391,29 @@ importers: version: 2.38.5(jquery@3.7.1) devDependencies: '@electron-forge/cli': - specifier: 7.10.2 - version: 7.10.2(encoding@0.1.13)(esbuild@0.27.2) + specifier: 7.11.1 + version: 7.11.1(encoding@0.1.13)(esbuild@0.27.2) '@electron-forge/maker-deb': - specifier: 7.10.2 - version: 7.10.2 + specifier: 7.11.1 + version: 7.11.1 '@electron-forge/maker-dmg': - specifier: 7.10.2 - version: 7.10.2 + specifier: 7.11.1 + version: 7.11.1 '@electron-forge/maker-flatpak': - specifier: 7.10.2 - version: 7.10.2 + specifier: 7.11.1 + version: 7.11.1 '@electron-forge/maker-rpm': - specifier: 7.10.2 - version: 7.10.2 + specifier: 7.11.1 + version: 7.11.1 '@electron-forge/maker-squirrel': - specifier: 7.10.2 - version: 7.10.2 + specifier: 7.11.1 + version: 7.11.1 '@electron-forge/maker-zip': - specifier: 7.10.2 - version: 7.10.2 + specifier: 7.11.1 + version: 7.11.1 '@electron-forge/plugin-auto-unpack-natives': - specifier: 7.10.2 - version: 7.10.2 + specifier: 7.11.1 + version: 7.11.1 '@triliumnext/commons': specifier: workspace:* version: link:../../packages/commons @@ -2209,85 +2209,85 @@ packages: '@dual-bundle/import-meta-resolve@4.2.1': resolution: {integrity: sha512-id+7YRUgoUX6CgV0DtuhirQWodeeA7Lf4i2x71JS/vtA5pRb/hIGWlw+G6MeXvsM+MXrz0VAydTGElX1rAfgPg==} - '@electron-forge/cli@7.10.2': - resolution: {integrity: sha512-X1RtS5IqNgzGDS2rr1q0Y74wU/m3DbU4vSgllNun1ZQv1BfMpDcKLhnKi3aeetoA0huLTpMVU9eWJ7bziI9fxA==} + '@electron-forge/cli@7.11.1': + resolution: {integrity: sha512-pk8AoLsr7t7LBAt0cFD06XFA6uxtPdvtLx06xeal7O9o7GHGCbj29WGwFoJ8Br/ENM0Ho868S3PrAn1PtBXt5g==} engines: {node: '>= 16.4.0'} hasBin: true - '@electron-forge/core-utils@7.10.2': - resolution: {integrity: sha512-JXrk2hWR4q8KgZFABpojjuqql3tYeVIH6qmtbkNEkZEQq7YIxajJBCct7J7bWfNQTmHotsQ3k5KLknhyhTaBMw==} + '@electron-forge/core-utils@7.11.1': + resolution: {integrity: sha512-9UxRWVsfcziBsbAA2MS0Oz4yYovQCO2BhnGIfsbKNTBtMc/RcVSxAS0NMyymce44i43p1ZC/FqWhnt1XqYw3bQ==} engines: {node: '>= 16.4.0'} - '@electron-forge/core@7.10.2': - resolution: {integrity: sha512-HAIuOtpOfGjA0cd55tbEV2gAv+A7tSZg9bonmVDYFEe6dBgbLk8a3+/1fJUdWW8fyFkg1wa8zK7pjP751bAXsA==} + '@electron-forge/core@7.11.1': + resolution: {integrity: sha512-YtuPLzggPKPabFAD2rOZFE0s7f4KaUTpGRduhSMbZUqpqD1TIPyfoDBpYiZvao3Ht8pyZeOJjbzcC0LpFs9gIQ==} engines: {node: '>= 16.4.0'} - '@electron-forge/maker-base@7.10.2': - resolution: {integrity: sha512-1QN4qnPVTjo+qWYG+s0kYv7XcuIowsPVvbl718FgJUcvkxyRjUA6kWHjFxRvdV6g7Sa2PzZBF+/Mrjpws1lehQ==} + '@electron-forge/maker-base@7.11.1': + resolution: {integrity: sha512-yhZrCGoN6bDeiB5DHFaueZ1h84AReElEj+f0hl2Ph4UbZnO0cnLpbx+Bs+XfMLAiA+beC8muB5UDK5ysfuT9BQ==} engines: {node: '>= 16.4.0'} - '@electron-forge/maker-deb@7.10.2': - resolution: {integrity: sha512-4MPr9NW5UbEUbf9geZn5R/0O/QVIiy2EgUXOYOeKkA7oR8U6I1I3+BytYFHYcxbY6+PGhi1H1VTLJLITbHGVWw==} + '@electron-forge/maker-deb@7.11.1': + resolution: {integrity: sha512-QTYiryQLYPDkq6pIfBmx0GQ6D8QatUkowH7rTlW5MnCUa0uumX0Xu7yGIjesuwW37fxT3Lv4xi+FSXMCm2eC1w==} engines: {node: '>= 16.4.0'} - '@electron-forge/maker-dmg@7.10.2': - resolution: {integrity: sha512-ksSX6/Ioxa3h3rEGIg26qfDcJgB3aFGivitRdSkEnzUCLWJSUoThEwLToA7CAq4J/4ZREK0PDJ7FPsB+F8CYfQ==} + '@electron-forge/maker-dmg@7.11.1': + resolution: {integrity: sha512-7zs5/Ewz1PcOl4N1102stFgBiFGWxU18+UPFUSd/fgf9MErBl4HBWuVNMIHyeJ/56rdfkcmTxTqE+9TBEYrZcg==} engines: {node: '>= 16.4.0'} - '@electron-forge/maker-flatpak@7.10.2': - resolution: {integrity: sha512-LldkYGkIhri99+HqetGjNzi2cdXy32o5uLlr7fDLoiegm8WAkvvWxFTLdSDS1RP94f6PVOKR9KHqPauu5GaIYw==} + '@electron-forge/maker-flatpak@7.11.1': + resolution: {integrity: sha512-H7+aa1OkJUHBj08DdbhSz2gL1hD/IowYpVS+uv7e6PcDqRYy/5XQQ2FoX52+3Qlik8d+tai7iOzVGcqb+D7f0Q==} engines: {node: '>= 16.4.0'} - '@electron-forge/maker-rpm@7.10.2': - resolution: {integrity: sha512-LQoeYzbY/z1yuBBA+bNutCJmhCA4NcXUbFO4OTqsIX8B6y1zNTYZT4JEuhoK7eBsP4/Rz6u/JnNp0XOyjftOUQ==} + '@electron-forge/maker-rpm@7.11.1': + resolution: {integrity: sha512-iEfJPRQQyaTqk2EbUfZgulChNWvxGXeYUH0xBX/r5cj1pL4vcJXt3jLMQBVn3mk/0Ytv9UWRs8R/XuNWX6sf2w==} engines: {node: '>= 16.4.0'} - '@electron-forge/maker-squirrel@7.10.2': - resolution: {integrity: sha512-Y5EhNSBXf4a7qcq+BK/x5qVDlQ1Gez5V+arUpDvVxf1zwvsB1aSyAjmoBrOKGYD9A5pJzjkMWMDw95MStl1W4A==} + '@electron-forge/maker-squirrel@7.11.1': + resolution: {integrity: sha512-oSg7fgad6l+X0DjtRkSpMzB0AjzyDO4mb2gzM4kTodkP1ADeiMi08bxy0ZeCESqLm5+fG72cAPmEr3BAPvI1yw==} engines: {node: '>= 16.4.0'} - '@electron-forge/maker-zip@7.10.2': - resolution: {integrity: sha512-APRqVPM+O1rj4O7sk5f8tqJpS5UgxcUJEsCnXN4JRpdRvsOlMopzYZdazlCLH9l7S+r4ZKirjtMluIGeYq8YOg==} + '@electron-forge/maker-zip@7.11.1': + resolution: {integrity: sha512-30rcp0AbJLfkFBX2hmO14LKXx7z9V61LffTVbTCFMh5vUB2kZvcA5xAhsBk2oUJWfGVxe1DuSEU0rDR9bUMHUg==} engines: {node: '>= 16.4.0'} - '@electron-forge/plugin-auto-unpack-natives@7.10.2': - resolution: {integrity: sha512-uQnahm1DECwqI8hBC7PKccyfovY/YqHNz8de3OxyjQDmwsqQfCA8Ucyh1E9n4NMEpw6Co8KLn+qF2BuIOsftLA==} + '@electron-forge/plugin-auto-unpack-natives@7.11.1': + resolution: {integrity: sha512-5uRM3WNv7jIeDt8pLP3V4U2puWHPGJ/3qRuSE47RKgTp5qxpZidWHSYcEJJxjoqOL/7KFwSqKSQ/a36GoZV4Fg==} engines: {node: '>= 16.4.0'} - '@electron-forge/plugin-base@7.10.2': - resolution: {integrity: sha512-+4YLmkLZxvS6JFXYNI4dHt8Il8iIvwk2o6lCJGwNysOUq2KOZ3Wu1He4Ko8HhKcO1VWbFvslbh57oQn963Aryw==} + '@electron-forge/plugin-base@7.11.1': + resolution: {integrity: sha512-lKpSOV1GA3FoYiD9k05i6v4KaQVmojnRgCr7d6VL1bFp13QOtXSaAWhFI9mtSY7rGElOacX6Zt7P7rPoB8T9eQ==} engines: {node: '>= 16.4.0'} - '@electron-forge/publisher-base@7.10.2': - resolution: {integrity: sha512-2k2VOY0wOoAgQoQXn/u3EJ2Ka2v363+wC/+zUMTWGeRHW8pRwX84WX2SpsTttRzbsqAEMJYw5FAzgMBEQUTfpg==} + '@electron-forge/publisher-base@7.11.1': + resolution: {integrity: sha512-rXE9oMFGMtdQrixnumWYH5TTGsp99iPHZb3jI74YWq518ctCh6DlIgWlhf6ok2X0+lhWovcIb45KJucUFAQ13w==} engines: {node: '>= 16.4.0'} - '@electron-forge/shared-types@7.10.2': - resolution: {integrity: sha512-e2pd9RsdbKwsNf6UtKoolmJGy92Nc0/XO4SI91doV8cM954hM2XSYz3VHoqXebMFAF1JDfXoEUt6UCRbEDgMgw==} + '@electron-forge/shared-types@7.11.1': + resolution: {integrity: sha512-vvBWdAEh53UJlDGUevpaJk1+sqDMQibfrbHR+0IPA4MPyQex7/Uhv3vYH9oGHujBVAChQahjAuJt0fG6IJBLZg==} engines: {node: '>= 16.4.0'} - '@electron-forge/template-base@7.10.2': - resolution: {integrity: sha512-D9DbEx3rtikIhUyn4tcz2pJqHNU/+FXKNnzSvmrJoJ9LusR3C42OU9GtbU8oT3nawpnCGgPFIOGXrzexFPp6DA==} + '@electron-forge/template-base@7.11.1': + resolution: {integrity: sha512-XpTaEf+EfQw+0BlSAtSpZKYIKYvKu4raNzSGHZZoSYHp+HDC7R+MlpFQmSJiGdYQzQ14C+uxO42tVjgM0DMbpw==} engines: {node: '>= 16.4.0'} - '@electron-forge/template-vite-typescript@7.10.2': - resolution: {integrity: sha512-df7rpxxIOIyZn0RfQ1GIlLW7dXhxkerc9uZ3ozO4C7zfvip3z0Mg+wS1synktPfr4WISaPktIdnj3mVu6Uu7Mw==} + '@electron-forge/template-vite-typescript@7.11.1': + resolution: {integrity: sha512-Us4AHXFb+4z+gXgZImSqMBS63oKnsQWLOhqRg321xiDzu2UcQPlwgWNb4rAEKNVC1e7LXrUNDHuBiTrQkvWXbg==} engines: {node: '>= 16.4.0'} - '@electron-forge/template-vite@7.10.2': - resolution: {integrity: sha512-hR9HBOM902yq7zhFl8bO3w5ufMgitdd5ZwDzAdKITFh2ttZemHy9ha5S0K+R+4GoXHz8t7hUTHk8+iPy09qrpA==} + '@electron-forge/template-vite@7.11.1': + resolution: {integrity: sha512-Or8Lxf4awoeUZoMTKJEw5KQDIhqOFs24WhVka3yZXxc6VgVWN79KmYKYM6uM/YMQttmafhsBhY2t1Lxo1WR/ug==} engines: {node: '>= 16.4.0'} - '@electron-forge/template-webpack-typescript@7.10.2': - resolution: {integrity: sha512-JtrLUAFbxxWJ1kU7b8MNyL5SO9/rY5UeNz1b9hvMvilW8GxyMWUen58dafgdnx3OpKLNZnhOOhgRagNppEzJOA==} + '@electron-forge/template-webpack-typescript@7.11.1': + resolution: {integrity: sha512-6ExfFnFkHBz8rvRFTFg5HVGTC12uJpbVk4q8DVg0R8rhhxhqiVNh8lF2UPtZ2yT2UtGWjXNVlyP3Y3T6q6E3GQ==} engines: {node: '>= 16.4.0'} - '@electron-forge/template-webpack@7.10.2': - resolution: {integrity: sha512-VIUXA+XHM5SLjg7fIpOOmBsgi0LstkjrEz4gUzVL0AaITM7e+BCziIHld1ceXLbQ1FnKtrUGnQ9X/cHYxYvhHg==} + '@electron-forge/template-webpack@7.11.1': + resolution: {integrity: sha512-15lbXxi+er461MPk6sbwAOyjofAHwmQjTvxNCiNpaU2naEwbj3t0SlLq/BMr5HxnVOaMmA7+lKV9afkIom+d4Q==} engines: {node: '>= 16.4.0'} - '@electron-forge/tracer@7.10.2': - resolution: {integrity: sha512-jhLLQbttfZViSOYn/3SJc8HML+jNZAytPVJwgGGd3coUiFysWJ2Xald99iqOiouPAhIigBfNPxQb/q/EbcDu4g==} + '@electron-forge/tracer@7.11.1': + resolution: {integrity: sha512-tiB6cglVQFcSw9N8GRwVwZUeB9u0DOx2Mj7aFXBUsFLUYQapvVGv51tUSy/UAW5lvmubGscYIILuVko+II3+NA==} engines: {node: '>= 14.17.5'} '@electron/asar@3.4.1': @@ -3254,10 +3254,6 @@ packages: resolution: {integrity: sha512-ToG8d6RIbnVpbdPdiN7BCxZGiHOTomOX94C2FaT5KOHupV40tKEDozp12res6cMIfRKrXLJyexAZhWVHgbALSQ==} engines: {node: '>=18'} - '@inquirer/figures@1.0.13': - resolution: {integrity: sha512-lGPVU3yO9ZNqA7vTYz26jny41lE7yoQansmqdMLBEfqaGsmdg7V3W9mK9Pvb5IL4EVZ9GnSDGMO/cJXud5dMaw==} - engines: {node: '>=18'} - '@inquirer/figures@1.0.15': resolution: {integrity: sha512-t2IEY+unGHOzAaVM5Xx6DEWKeXlDDcNPeDyUpsRc6CUhBfU3VQOEl+Vssh7VNp1dR8MdUJBWhuObjXCsVpjN5g==} engines: {node: '>=18'} @@ -12481,11 +12477,6 @@ packages: engines: {node: '>=10'} hasBin: true - semver@7.7.2: - resolution: {integrity: sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==} - engines: {node: '>=10'} - hasBin: true - semver@7.7.3: resolution: {integrity: sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==} engines: {node: '>=10'} @@ -15024,8 +15015,6 @@ snapshots: '@ckeditor/ckeditor5-core': 47.3.0 '@ckeditor/ckeditor5-upload': 47.3.0 ckeditor5: 47.3.0 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-ai@47.3.0(bufferutil@4.0.9)(utf-8-validate@6.0.5)': dependencies: @@ -15172,8 +15161,6 @@ snapshots: '@ckeditor/ckeditor5-core': 47.3.0 '@ckeditor/ckeditor5-utils': 47.3.0 ckeditor5: 47.3.0 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-code-block@47.3.0(patch_hash=2361d8caad7d6b5bddacc3a3b4aa37dbfba260b1c1b22a450413a79c1bb1ce95)': dependencies: @@ -15366,8 +15353,6 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.3.0 ckeditor5: 47.3.0 es-toolkit: 1.39.5 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-editor-classic@47.3.0': dependencies: @@ -15377,8 +15362,6 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.3.0 ckeditor5: 47.3.0 es-toolkit: 1.39.5 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-editor-decoupled@47.3.0': dependencies: @@ -15388,8 +15371,6 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.3.0 ckeditor5: 47.3.0 es-toolkit: 1.39.5 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-editor-inline@47.3.0': dependencies: @@ -15507,8 +15488,6 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.3.0 ckeditor5: 47.3.0 es-toolkit: 1.39.5 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-font@47.3.0': dependencies: @@ -15583,8 +15562,6 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.3.0 '@ckeditor/ckeditor5-widget': 47.3.0 ckeditor5: 47.3.0 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-html-embed@47.3.0': dependencies: @@ -15884,8 +15861,6 @@ snapshots: '@ckeditor/ckeditor5-core': 47.3.0 '@ckeditor/ckeditor5-engine': 47.3.0 ckeditor5: 47.3.0 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-real-time-collaboration@47.3.0(bufferutil@4.0.9)(utf-8-validate@6.0.5)': dependencies: @@ -15916,8 +15891,6 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.3.0 '@ckeditor/ckeditor5-utils': 47.3.0 ckeditor5: 47.3.0 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-restricted-editing@47.3.0': dependencies: @@ -16004,8 +15977,6 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.3.0 '@ckeditor/ckeditor5-utils': 47.3.0 ckeditor5: 47.3.0 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-special-characters@47.3.0': dependencies: @@ -16386,11 +16357,11 @@ snapshots: '@dual-bundle/import-meta-resolve@4.2.1': {} - '@electron-forge/cli@7.10.2(encoding@0.1.13)(esbuild@0.27.2)': + '@electron-forge/cli@7.11.1(encoding@0.1.13)(esbuild@0.27.2)': dependencies: - '@electron-forge/core': 7.10.2(encoding@0.1.13)(esbuild@0.27.2) - '@electron-forge/core-utils': 7.10.2 - '@electron-forge/shared-types': 7.10.2 + '@electron-forge/core': 7.11.1(encoding@0.1.13)(esbuild@0.27.2) + '@electron-forge/core-utils': 7.11.1 + '@electron-forge/shared-types': 7.11.1 '@electron/get': 3.1.0 '@inquirer/prompts': 6.0.1 '@listr2/prompt-adapter-inquirer': 2.0.22(@inquirer/prompts@6.0.1) @@ -16400,7 +16371,7 @@ snapshots: fs-extra: 10.1.0 listr2: 7.0.2 log-symbols: 4.1.0 - semver: 7.7.2 + semver: 7.7.3 transitivePeerDependencies: - '@swc/core' - bluebird @@ -16410,9 +16381,9 @@ snapshots: - uglify-js - webpack-cli - '@electron-forge/core-utils@7.10.2': + '@electron-forge/core-utils@7.11.1': dependencies: - '@electron-forge/shared-types': 7.10.2 + '@electron-forge/shared-types': 7.11.1 '@electron/rebuild': 3.7.2 '@malept/cross-spawn-promise': 2.0.0 chalk: 4.1.2 @@ -16426,19 +16397,19 @@ snapshots: - bluebird - supports-color - '@electron-forge/core@7.10.2(encoding@0.1.13)(esbuild@0.27.2)': + '@electron-forge/core@7.11.1(encoding@0.1.13)(esbuild@0.27.2)': dependencies: - '@electron-forge/core-utils': 7.10.2 - '@electron-forge/maker-base': 7.10.2 - '@electron-forge/plugin-base': 7.10.2 - '@electron-forge/publisher-base': 7.10.2 - '@electron-forge/shared-types': 7.10.2 - '@electron-forge/template-base': 7.10.2 - '@electron-forge/template-vite': 7.10.2 - '@electron-forge/template-vite-typescript': 7.10.2 - '@electron-forge/template-webpack': 7.10.2 - '@electron-forge/template-webpack-typescript': 7.10.2(esbuild@0.27.2) - '@electron-forge/tracer': 7.10.2 + '@electron-forge/core-utils': 7.11.1 + '@electron-forge/maker-base': 7.11.1 + '@electron-forge/plugin-base': 7.11.1 + '@electron-forge/publisher-base': 7.11.1 + '@electron-forge/shared-types': 7.11.1 + '@electron-forge/template-base': 7.11.1 + '@electron-forge/template-vite': 7.11.1 + '@electron-forge/template-vite-typescript': 7.11.1 + '@electron-forge/template-webpack': 7.11.1 + '@electron-forge/template-webpack-typescript': 7.11.1(esbuild@0.27.2) + '@electron-forge/tracer': 7.11.1 '@electron/get': 3.1.0 '@electron/packager': 18.3.6 '@electron/rebuild': 3.7.2 @@ -16471,29 +16442,29 @@ snapshots: - uglify-js - webpack-cli - '@electron-forge/maker-base@7.10.2': + '@electron-forge/maker-base@7.11.1': dependencies: - '@electron-forge/shared-types': 7.10.2 + '@electron-forge/shared-types': 7.11.1 fs-extra: 10.1.0 which: 2.0.2 transitivePeerDependencies: - bluebird - supports-color - '@electron-forge/maker-deb@7.10.2': + '@electron-forge/maker-deb@7.11.1': dependencies: - '@electron-forge/maker-base': 7.10.2 - '@electron-forge/shared-types': 7.10.2 + '@electron-forge/maker-base': 7.11.1 + '@electron-forge/shared-types': 7.11.1 optionalDependencies: electron-installer-debian: 3.2.0 transitivePeerDependencies: - bluebird - supports-color - '@electron-forge/maker-dmg@7.10.2': + '@electron-forge/maker-dmg@7.11.1': dependencies: - '@electron-forge/maker-base': 7.10.2 - '@electron-forge/shared-types': 7.10.2 + '@electron-forge/maker-base': 7.11.1 + '@electron-forge/shared-types': 7.11.1 fs-extra: 10.1.0 optionalDependencies: electron-installer-dmg: 5.0.1 @@ -16501,10 +16472,10 @@ snapshots: - bluebird - supports-color - '@electron-forge/maker-flatpak@7.10.2': + '@electron-forge/maker-flatpak@7.11.1': dependencies: - '@electron-forge/maker-base': 7.10.2 - '@electron-forge/shared-types': 7.10.2 + '@electron-forge/maker-base': 7.11.1 + '@electron-forge/shared-types': 7.11.1 fs-extra: 10.1.0 optionalDependencies: '@malept/electron-installer-flatpak': 0.11.4 @@ -16512,20 +16483,20 @@ snapshots: - bluebird - supports-color - '@electron-forge/maker-rpm@7.10.2': + '@electron-forge/maker-rpm@7.11.1': dependencies: - '@electron-forge/maker-base': 7.10.2 - '@electron-forge/shared-types': 7.10.2 + '@electron-forge/maker-base': 7.11.1 + '@electron-forge/shared-types': 7.11.1 optionalDependencies: electron-installer-redhat: 3.4.0 transitivePeerDependencies: - bluebird - supports-color - '@electron-forge/maker-squirrel@7.10.2': + '@electron-forge/maker-squirrel@7.11.1': dependencies: - '@electron-forge/maker-base': 7.10.2 - '@electron-forge/shared-types': 7.10.2 + '@electron-forge/maker-base': 7.11.1 + '@electron-forge/shared-types': 7.11.1 fs-extra: 10.1.0 optionalDependencies: electron-winstaller: 5.4.0 @@ -16533,10 +16504,10 @@ snapshots: - bluebird - supports-color - '@electron-forge/maker-zip@7.10.2': + '@electron-forge/maker-zip@7.11.1': dependencies: - '@electron-forge/maker-base': 7.10.2 - '@electron-forge/shared-types': 7.10.2 + '@electron-forge/maker-base': 7.11.1 + '@electron-forge/shared-types': 7.11.1 cross-zip: 4.0.1 fs-extra: 10.1.0 got: 11.8.6 @@ -16544,31 +16515,31 @@ snapshots: - bluebird - supports-color - '@electron-forge/plugin-auto-unpack-natives@7.10.2': + '@electron-forge/plugin-auto-unpack-natives@7.11.1': dependencies: - '@electron-forge/plugin-base': 7.10.2 - '@electron-forge/shared-types': 7.10.2 + '@electron-forge/plugin-base': 7.11.1 + '@electron-forge/shared-types': 7.11.1 transitivePeerDependencies: - bluebird - supports-color - '@electron-forge/plugin-base@7.10.2': + '@electron-forge/plugin-base@7.11.1': dependencies: - '@electron-forge/shared-types': 7.10.2 + '@electron-forge/shared-types': 7.11.1 transitivePeerDependencies: - bluebird - supports-color - '@electron-forge/publisher-base@7.10.2': + '@electron-forge/publisher-base@7.11.1': dependencies: - '@electron-forge/shared-types': 7.10.2 + '@electron-forge/shared-types': 7.11.1 transitivePeerDependencies: - bluebird - supports-color - '@electron-forge/shared-types@7.10.2': + '@electron-forge/shared-types@7.11.1': dependencies: - '@electron-forge/tracer': 7.10.2 + '@electron-forge/tracer': 7.11.1 '@electron/packager': 18.3.6 '@electron/rebuild': 3.7.2 listr2: 7.0.2 @@ -16576,10 +16547,10 @@ snapshots: - bluebird - supports-color - '@electron-forge/template-base@7.10.2': + '@electron-forge/template-base@7.11.1': dependencies: - '@electron-forge/core-utils': 7.10.2 - '@electron-forge/shared-types': 7.10.2 + '@electron-forge/core-utils': 7.11.1 + '@electron-forge/shared-types': 7.11.1 '@malept/cross-spawn-promise': 2.0.0 debug: 4.4.3(supports-color@8.1.1) fs-extra: 10.1.0 @@ -16589,28 +16560,28 @@ snapshots: - bluebird - supports-color - '@electron-forge/template-vite-typescript@7.10.2': + '@electron-forge/template-vite-typescript@7.11.1': dependencies: - '@electron-forge/shared-types': 7.10.2 - '@electron-forge/template-base': 7.10.2 + '@electron-forge/shared-types': 7.11.1 + '@electron-forge/template-base': 7.11.1 fs-extra: 10.1.0 transitivePeerDependencies: - bluebird - supports-color - '@electron-forge/template-vite@7.10.2': + '@electron-forge/template-vite@7.11.1': dependencies: - '@electron-forge/shared-types': 7.10.2 - '@electron-forge/template-base': 7.10.2 + '@electron-forge/shared-types': 7.11.1 + '@electron-forge/template-base': 7.11.1 fs-extra: 10.1.0 transitivePeerDependencies: - bluebird - supports-color - '@electron-forge/template-webpack-typescript@7.10.2(esbuild@0.27.2)': + '@electron-forge/template-webpack-typescript@7.11.1(esbuild@0.27.2)': dependencies: - '@electron-forge/shared-types': 7.10.2 - '@electron-forge/template-base': 7.10.2 + '@electron-forge/shared-types': 7.11.1 + '@electron-forge/template-base': 7.11.1 fs-extra: 10.1.0 typescript: 5.4.5 webpack: 5.101.3(esbuild@0.27.2) @@ -16622,16 +16593,16 @@ snapshots: - uglify-js - webpack-cli - '@electron-forge/template-webpack@7.10.2': + '@electron-forge/template-webpack@7.11.1': dependencies: - '@electron-forge/shared-types': 7.10.2 - '@electron-forge/template-base': 7.10.2 + '@electron-forge/shared-types': 7.11.1 + '@electron-forge/template-base': 7.11.1 fs-extra: 10.1.0 transitivePeerDependencies: - bluebird - supports-color - '@electron-forge/tracer@7.10.2': + '@electron-forge/tracer@7.11.1': dependencies: chrome-trace-event: 1.0.4 @@ -17475,7 +17446,7 @@ snapshots: '@inquirer/checkbox@3.0.1': dependencies: '@inquirer/core': 9.2.1 - '@inquirer/figures': 1.0.13 + '@inquirer/figures': 1.0.15 '@inquirer/type': 2.0.0 ansi-escapes: 4.3.2 yoctocolors-cjs: 2.1.3 @@ -17509,7 +17480,7 @@ snapshots: '@inquirer/core@9.2.1': dependencies: - '@inquirer/figures': 1.0.13 + '@inquirer/figures': 1.0.15 '@inquirer/type': 2.0.0 '@types/mute-stream': 0.0.4 '@types/node': 22.19.1 @@ -17534,10 +17505,7 @@ snapshots: '@inquirer/type': 2.0.0 yoctocolors-cjs: 2.1.3 - '@inquirer/figures@1.0.13': {} - - '@inquirer/figures@1.0.15': - optional: true + '@inquirer/figures@1.0.15': {} '@inquirer/input@3.0.1': dependencies: @@ -17577,14 +17545,14 @@ snapshots: '@inquirer/search@2.0.1': dependencies: '@inquirer/core': 9.2.1 - '@inquirer/figures': 1.0.13 + '@inquirer/figures': 1.0.15 '@inquirer/type': 2.0.0 yoctocolors-cjs: 2.1.3 '@inquirer/select@3.0.1': dependencies: '@inquirer/core': 9.2.1 - '@inquirer/figures': 1.0.13 + '@inquirer/figures': 1.0.15 '@inquirer/type': 2.0.0 ansi-escapes: 4.3.2 yoctocolors-cjs: 2.1.3 @@ -28772,8 +28740,6 @@ snapshots: dependencies: lru-cache: 6.0.0 - semver@7.7.2: {} - semver@7.7.3: {} send@0.19.0: From f5e2129ad474462959ae0b47b652cdf3b1e4cb77 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 13 Jan 2026 01:17:33 +0000 Subject: [PATCH 015/353] chore(deps): update typescript-eslint monorepo to v8.53.0 --- package.json | 2 +- packages/ckeditor5-admonition/package.json | 4 +- packages/ckeditor5-footnotes/package.json | 4 +- .../ckeditor5-keyboard-marker/package.json | 4 +- packages/ckeditor5-math/package.json | 4 +- packages/ckeditor5-mermaid/package.json | 4 +- packages/share-theme/package.json | 4 +- pnpm-lock.yaml | 314 ++++++++---------- 8 files changed, 155 insertions(+), 185 deletions(-) diff --git a/package.json b/package.json index c81cd92a02..35bf4958fe 100644 --- a/package.json +++ b/package.json @@ -70,7 +70,7 @@ "tslib": "2.8.1", "tsx": "4.21.0", "typescript": "~5.9.0", - "typescript-eslint": "8.52.0", + "typescript-eslint": "8.53.0", "upath": "2.0.1", "vite": "7.3.1", "vite-plugin-dts": "~4.5.0", diff --git a/packages/ckeditor5-admonition/package.json b/packages/ckeditor5-admonition/package.json index 6491fb82c6..87fe210a3f 100644 --- a/packages/ckeditor5-admonition/package.json +++ b/packages/ckeditor5-admonition/package.json @@ -24,8 +24,8 @@ "@ckeditor/ckeditor5-dev-build-tools": "54.2.3", "@ckeditor/ckeditor5-inspector": ">=4.1.0", "@ckeditor/ckeditor5-package-tools": "5.0.1", - "@typescript-eslint/eslint-plugin": "~8.52.0", - "@typescript-eslint/parser": "8.52.0", + "@typescript-eslint/eslint-plugin": "~8.53.0", + "@typescript-eslint/parser": "8.53.0", "@vitest/browser": "4.0.16", "@vitest/coverage-istanbul": "4.0.16", "ckeditor5": "47.3.0", diff --git a/packages/ckeditor5-footnotes/package.json b/packages/ckeditor5-footnotes/package.json index 85de46f487..161008a426 100644 --- a/packages/ckeditor5-footnotes/package.json +++ b/packages/ckeditor5-footnotes/package.json @@ -25,8 +25,8 @@ "@ckeditor/ckeditor5-dev-build-tools": "54.2.3", "@ckeditor/ckeditor5-inspector": ">=4.1.0", "@ckeditor/ckeditor5-package-tools": "5.0.1", - "@typescript-eslint/eslint-plugin": "~8.52.0", - "@typescript-eslint/parser": "8.52.0", + "@typescript-eslint/eslint-plugin": "~8.53.0", + "@typescript-eslint/parser": "8.53.0", "@vitest/browser": "4.0.16", "@vitest/coverage-istanbul": "4.0.16", "ckeditor5": "47.3.0", diff --git a/packages/ckeditor5-keyboard-marker/package.json b/packages/ckeditor5-keyboard-marker/package.json index 03262e5986..185b3223c2 100644 --- a/packages/ckeditor5-keyboard-marker/package.json +++ b/packages/ckeditor5-keyboard-marker/package.json @@ -27,8 +27,8 @@ "@ckeditor/ckeditor5-dev-build-tools": "54.2.3", "@ckeditor/ckeditor5-inspector": ">=4.1.0", "@ckeditor/ckeditor5-package-tools": "5.0.1", - "@typescript-eslint/eslint-plugin": "~8.52.0", - "@typescript-eslint/parser": "8.52.0", + "@typescript-eslint/eslint-plugin": "~8.53.0", + "@typescript-eslint/parser": "8.53.0", "@vitest/browser": "4.0.16", "@vitest/coverage-istanbul": "4.0.16", "ckeditor5": "47.3.0", diff --git a/packages/ckeditor5-math/package.json b/packages/ckeditor5-math/package.json index 33334568f5..d5bddcf37f 100644 --- a/packages/ckeditor5-math/package.json +++ b/packages/ckeditor5-math/package.json @@ -27,8 +27,8 @@ "@ckeditor/ckeditor5-dev-build-tools": "54.2.3", "@ckeditor/ckeditor5-inspector": ">=4.1.0", "@ckeditor/ckeditor5-package-tools": "5.0.1", - "@typescript-eslint/eslint-plugin": "~8.52.0", - "@typescript-eslint/parser": "8.52.0", + "@typescript-eslint/eslint-plugin": "~8.53.0", + "@typescript-eslint/parser": "8.53.0", "@vitest/browser": "4.0.16", "@vitest/coverage-istanbul": "4.0.16", "ckeditor5": "47.3.0", diff --git a/packages/ckeditor5-mermaid/package.json b/packages/ckeditor5-mermaid/package.json index a421e00829..04c675345e 100644 --- a/packages/ckeditor5-mermaid/package.json +++ b/packages/ckeditor5-mermaid/package.json @@ -27,8 +27,8 @@ "@ckeditor/ckeditor5-dev-build-tools": "54.2.3", "@ckeditor/ckeditor5-inspector": ">=4.1.0", "@ckeditor/ckeditor5-package-tools": "5.0.1", - "@typescript-eslint/eslint-plugin": "~8.52.0", - "@typescript-eslint/parser": "8.52.0", + "@typescript-eslint/eslint-plugin": "~8.53.0", + "@typescript-eslint/parser": "8.53.0", "@vitest/browser": "4.0.16", "@vitest/coverage-istanbul": "4.0.16", "ckeditor5": "47.3.0", diff --git a/packages/share-theme/package.json b/packages/share-theme/package.json index d8526f6ee9..a20b744f17 100644 --- a/packages/share-theme/package.json +++ b/packages/share-theme/package.json @@ -31,8 +31,8 @@ "devDependencies": { "@digitak/esrun": "3.2.26", "@triliumnext/ckeditor5": "workspace:*", - "@typescript-eslint/eslint-plugin": "8.52.0", - "@typescript-eslint/parser": "8.52.0", + "@typescript-eslint/eslint-plugin": "8.53.0", + "@typescript-eslint/parser": "8.53.0", "dotenv": "17.2.3", "esbuild": "0.27.2", "eslint": "9.39.2", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index f3d6a48d0b..cd59d072a5 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -116,8 +116,8 @@ importers: specifier: ~5.9.0 version: 5.9.3 typescript-eslint: - specifier: 8.52.0 - version: 8.52.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) + specifier: 8.53.0 + version: 8.53.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) upath: specifier: 2.0.1 version: 2.0.1 @@ -900,11 +900,11 @@ importers: specifier: 5.0.1 version: 5.0.1(@babel/core@7.28.0)(@swc/core@1.11.29(@swc/helpers@0.5.17))(@types/node@24.10.7)(bufferutil@4.0.9)(esbuild@0.27.2)(utf-8-validate@6.0.5) '@typescript-eslint/eslint-plugin': - specifier: ~8.52.0 - version: 8.52.0(@typescript-eslint/parser@8.52.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) + specifier: ~8.53.0 + version: 8.53.0(@typescript-eslint/parser@8.53.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) '@typescript-eslint/parser': - specifier: 8.52.0 - version: 8.52.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) + specifier: 8.53.0 + version: 8.53.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) '@vitest/browser': specifier: 4.0.16 version: 4.0.16(bufferutil@4.0.9)(msw@2.7.5(@types/node@24.10.7)(typescript@5.9.3))(utf-8-validate@6.0.5)(vite@7.3.1(@types/node@24.10.7)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1))(vitest@4.0.16) @@ -960,11 +960,11 @@ importers: specifier: 5.0.1 version: 5.0.1(@babel/core@7.28.0)(@swc/core@1.11.29(@swc/helpers@0.5.17))(@types/node@24.10.7)(bufferutil@4.0.9)(esbuild@0.27.2)(utf-8-validate@6.0.5) '@typescript-eslint/eslint-plugin': - specifier: ~8.52.0 - version: 8.52.0(@typescript-eslint/parser@8.52.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) + specifier: ~8.53.0 + version: 8.53.0(@typescript-eslint/parser@8.53.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) '@typescript-eslint/parser': - specifier: 8.52.0 - version: 8.52.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) + specifier: 8.53.0 + version: 8.53.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) '@vitest/browser': specifier: 4.0.16 version: 4.0.16(bufferutil@4.0.9)(msw@2.7.5(@types/node@24.10.7)(typescript@5.9.3))(utf-8-validate@6.0.5)(vite@7.3.1(@types/node@24.10.7)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1))(vitest@4.0.16) @@ -1020,11 +1020,11 @@ importers: specifier: 5.0.1 version: 5.0.1(@babel/core@7.28.0)(@swc/core@1.11.29(@swc/helpers@0.5.17))(@types/node@24.10.7)(bufferutil@4.0.9)(esbuild@0.27.2)(utf-8-validate@6.0.5) '@typescript-eslint/eslint-plugin': - specifier: ~8.52.0 - version: 8.52.0(@typescript-eslint/parser@8.52.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) + specifier: ~8.53.0 + version: 8.53.0(@typescript-eslint/parser@8.53.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) '@typescript-eslint/parser': - specifier: 8.52.0 - version: 8.52.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) + specifier: 8.53.0 + version: 8.53.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) '@vitest/browser': specifier: 4.0.16 version: 4.0.16(bufferutil@4.0.9)(msw@2.7.5(@types/node@24.10.7)(typescript@5.9.3))(utf-8-validate@6.0.5)(vite@7.3.1(@types/node@24.10.7)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1))(vitest@4.0.16) @@ -1087,11 +1087,11 @@ importers: specifier: 5.0.1 version: 5.0.1(@babel/core@7.28.0)(@swc/core@1.11.29(@swc/helpers@0.5.17))(@types/node@24.10.7)(bufferutil@4.0.9)(esbuild@0.27.2)(utf-8-validate@6.0.5) '@typescript-eslint/eslint-plugin': - specifier: ~8.52.0 - version: 8.52.0(@typescript-eslint/parser@8.52.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) + specifier: ~8.53.0 + version: 8.53.0(@typescript-eslint/parser@8.53.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) '@typescript-eslint/parser': - specifier: 8.52.0 - version: 8.52.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) + specifier: 8.53.0 + version: 8.53.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) '@vitest/browser': specifier: 4.0.16 version: 4.0.16(bufferutil@4.0.9)(msw@2.7.5(@types/node@24.10.7)(typescript@5.9.3))(utf-8-validate@6.0.5)(vite@7.3.1(@types/node@24.10.7)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1))(vitest@4.0.16) @@ -1154,11 +1154,11 @@ importers: specifier: 5.0.1 version: 5.0.1(@babel/core@7.28.0)(@swc/core@1.11.29(@swc/helpers@0.5.17))(@types/node@24.10.7)(bufferutil@4.0.9)(esbuild@0.27.2)(utf-8-validate@6.0.5) '@typescript-eslint/eslint-plugin': - specifier: ~8.52.0 - version: 8.52.0(@typescript-eslint/parser@8.52.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) + specifier: ~8.53.0 + version: 8.53.0(@typescript-eslint/parser@8.53.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) '@typescript-eslint/parser': - specifier: 8.52.0 - version: 8.52.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) + specifier: 8.53.0 + version: 8.53.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) '@vitest/browser': specifier: 4.0.16 version: 4.0.16(bufferutil@4.0.9)(msw@2.7.5(@types/node@24.10.7)(typescript@5.9.3))(utf-8-validate@6.0.5)(vite@7.3.1(@types/node@24.10.7)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1))(vitest@4.0.16) @@ -1405,11 +1405,11 @@ importers: specifier: workspace:* version: link:../ckeditor5 '@typescript-eslint/eslint-plugin': - specifier: 8.52.0 - version: 8.52.0(@typescript-eslint/parser@8.52.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) + specifier: 8.53.0 + version: 8.53.0(@typescript-eslint/parser@8.53.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) '@typescript-eslint/parser': - specifier: 8.52.0 - version: 8.52.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) + specifier: 8.53.0 + version: 8.53.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) dotenv: specifier: 17.2.3 version: 17.2.3 @@ -5602,11 +5602,11 @@ packages: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/eslint-plugin@8.52.0': - resolution: {integrity: sha512-okqtOgqu2qmZJ5iN4TWlgfF171dZmx2FzdOv2K/ixL2LZWDStL8+JgQerI2sa8eAEfoydG9+0V96m7V+P8yE1Q==} + '@typescript-eslint/eslint-plugin@8.53.0': + resolution: {integrity: sha512-eEXsVvLPu8Z4PkFibtuFJLJOTAV/nPdgtSjkGoPpddpFk3/ym2oy97jynY6ic2m6+nc5M8SE1e9v/mHKsulcJg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - '@typescript-eslint/parser': ^8.52.0 + '@typescript-eslint/parser': ^8.53.0 eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <6.0.0' @@ -5617,8 +5617,8 @@ packages: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/parser@8.52.0': - resolution: {integrity: sha512-iIACsx8pxRnguSYhHiMn2PvhvfpopO9FXHyn1mG5txZIsAaB6F0KwbFnUQN3KCiG3Jcuad/Cao2FAs1Wp7vAyg==} + '@typescript-eslint/parser@8.53.0': + resolution: {integrity: sha512-npiaib8XzbjtzS2N4HlqPvlpxpmZ14FjSJrteZpPxGUaYPlvhzlzUZ4mZyABo0EFrOWnvyd0Xxroq//hKhtAWg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 @@ -5630,14 +5630,14 @@ packages: peerDependencies: typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/project-service@8.51.0': - resolution: {integrity: sha512-Luv/GafO07Z7HpiI7qeEW5NW8HUtZI/fo/kE0YbtQEFpJRUuR0ajcWfCE5bnMvL7QQFrmT/odMe8QZww8X2nfQ==} + '@typescript-eslint/project-service@8.52.0': + resolution: {integrity: sha512-xD0MfdSdEmeFa3OmVqonHi+Cciab96ls1UhIF/qX/O/gPu5KXD0bY9lu33jj04fjzrXHcuvjBcBC+D3SNSadaw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/project-service@8.52.0': - resolution: {integrity: sha512-xD0MfdSdEmeFa3OmVqonHi+Cciab96ls1UhIF/qX/O/gPu5KXD0bY9lu33jj04fjzrXHcuvjBcBC+D3SNSadaw==} + '@typescript-eslint/project-service@8.53.0': + resolution: {integrity: sha512-Bl6Gdr7NqkqIP5yP9z1JU///Nmes4Eose6L1HwpuVHwScgDPPuEWbUVhvlZmb8hy0vX9syLk5EGNL700WcBlbg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.0.0' @@ -5646,28 +5646,28 @@ packages: resolution: {integrity: sha512-tMDbLGXb1wC+McN1M6QeDx7P7c0UWO5z9CXqp7J8E+xGcJuUuevWKxuG8j41FoweS3+L41SkyKKkia16jpX7CA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/scope-manager@8.51.0': - resolution: {integrity: sha512-JhhJDVwsSx4hiOEQPeajGhCWgBMBwVkxC/Pet53EpBVs7zHHtayKefw1jtPaNRXpI9RA2uocdmpdfE7T+NrizA==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/scope-manager@8.52.0': resolution: {integrity: sha512-ixxqmmCcc1Nf8S0mS0TkJ/3LKcC8mruYJPOU6Ia2F/zUUR4pApW7LzrpU3JmtePbRUTes9bEqRc1Gg4iyRnDzA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@typescript-eslint/scope-manager@8.53.0': + resolution: {integrity: sha512-kWNj3l01eOGSdVBnfAF2K1BTh06WS0Yet6JUgb9Cmkqaz3Jlu0fdVUjj9UI8gPidBWSMqDIglmEXifSgDT/D0g==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@typescript-eslint/tsconfig-utils@8.46.4': resolution: {integrity: sha512-+/XqaZPIAk6Cjg7NWgSGe27X4zMGqrFqZ8atJsX3CWxH/jACqWnrWI68h7nHQld0y+k9eTTjb9r+KU4twLoo9A==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/tsconfig-utils@8.51.0': - resolution: {integrity: sha512-Qi5bSy/vuHeWyir2C8u/uqGMIlIDu8fuiYWv48ZGlZ/k+PRPHtaAu7erpc7p5bzw2WNNSniuxoMSO4Ar6V9OXw==} + '@typescript-eslint/tsconfig-utils@8.52.0': + resolution: {integrity: sha512-jl+8fzr/SdzdxWJznq5nvoI7qn2tNYV/ZBAEcaFMVXf+K6jmXvAFrgo/+5rxgnL152f//pDEAYAhhBAZGrVfwg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/tsconfig-utils@8.52.0': - resolution: {integrity: sha512-jl+8fzr/SdzdxWJznq5nvoI7qn2tNYV/ZBAEcaFMVXf+K6jmXvAFrgo/+5rxgnL152f//pDEAYAhhBAZGrVfwg==} + '@typescript-eslint/tsconfig-utils@8.53.0': + resolution: {integrity: sha512-K6Sc0R5GIG6dNoPdOooQ+KtvT5KCKAvTcY8h2rIuul19vxH5OTQk7ArKkd4yTzkw66WnNY0kPPzzcmWA+XRmiA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.0.0' @@ -5679,8 +5679,8 @@ packages: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/type-utils@8.52.0': - resolution: {integrity: sha512-JD3wKBRWglYRQkAtsyGz1AewDu3mTc7NtRjR/ceTyGoPqmdS5oCdx/oZMWD5Zuqmo6/MpsYs0wp6axNt88/2EQ==} + '@typescript-eslint/type-utils@8.53.0': + resolution: {integrity: sha512-BBAUhlx7g4SmcLhn8cnbxoxtmS7hcq39xKCgiutL3oNx1TaIp+cny51s8ewnKMpVUKQUGb41RAUWZ9kxYdovuw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 @@ -5690,41 +5690,34 @@ packages: resolution: {integrity: sha512-USjyxm3gQEePdUwJBFjjGNG18xY9A2grDVGuk7/9AkjIF1L+ZrVnwR5VAU5JXtUnBL/Nwt3H31KlRDaksnM7/w==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/types@8.51.0': - resolution: {integrity: sha512-TizAvWYFM6sSscmEakjY3sPqGwxZRSywSsPEiuZF6d5GmGD9Gvlsv0f6N8FvAAA0CD06l3rIcWNbsN1e5F/9Ag==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/types@8.52.0': resolution: {integrity: sha512-LWQV1V4q9V4cT4H5JCIx3481iIFxH1UkVk+ZkGGAV1ZGcjGI9IoFOfg3O6ywz8QqCDEp7Inlg6kovMofsNRaGg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@typescript-eslint/types@8.53.0': + resolution: {integrity: sha512-Bmh9KX31Vlxa13+PqPvt4RzKRN1XORYSLlAE+sO1i28NkisGbTtSLFVB3l7PWdHtR3E0mVMuC7JilWJ99m2HxQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@typescript-eslint/typescript-estree@8.46.4': resolution: {integrity: sha512-7oV2qEOr1d4NWNmpXLR35LvCfOkTNymY9oyW+lUHkmCno7aOmIf/hMaydnJBUTBMRCOGZh8YjkFOc8dadEoNGA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/typescript-estree@8.51.0': - resolution: {integrity: sha512-1qNjGqFRmlq0VW5iVlcyHBbCjPB7y6SxpBkrbhNWMy/65ZoncXCEPJxkRZL8McrseNH6lFhaxCIaX+vBuFnRng==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/typescript-estree@8.52.0': resolution: {integrity: sha512-XP3LClsCc0FsTK5/frGjolyADTh3QmsLp6nKd476xNI9CsSsLnmn4f0jrzNoAulmxlmNIpeXuHYeEQv61Q6qeQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/utils@8.46.4': - resolution: {integrity: sha512-AbSv11fklGXV6T28dp2Me04Uw90R2iJ30g2bgLz529Koehrmkbs1r7paFqr1vPCZi7hHwYxYtxfyQMRC8QaVSg==} + '@typescript-eslint/typescript-estree@8.53.0': + resolution: {integrity: sha512-pw0c0Gdo7Z4xOG987u3nJ8akL9093yEEKv8QTJ+Bhkghj1xyj8cgPaavlr9rq8h7+s6plUJ4QJYw2gCZodqmGw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/utils@8.51.0': - resolution: {integrity: sha512-11rZYxSe0zabiKaCP2QAwRf/dnmgFgvTmeDTtZvUvXG3UuAdg/GU02NExmmIXzz3vLGgMdtrIosI84jITQOxUA==} + '@typescript-eslint/utils@8.46.4': + resolution: {integrity: sha512-AbSv11fklGXV6T28dp2Me04Uw90R2iJ30g2bgLz529Koehrmkbs1r7paFqr1vPCZi7hHwYxYtxfyQMRC8QaVSg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 @@ -5737,18 +5730,25 @@ packages: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <6.0.0' + '@typescript-eslint/utils@8.53.0': + resolution: {integrity: sha512-XDY4mXTez3Z1iRDI5mbRhH4DFSt46oaIFsLg+Zn97+sYrXACziXSQcSelMybnVZ5pa1P6xYkPr5cMJyunM1ZDA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <6.0.0' + '@typescript-eslint/visitor-keys@8.46.4': resolution: {integrity: sha512-/++5CYLQqsO9HFGLI7APrxBJYo+5OCMpViuhV8q5/Qa3o5mMrF//eQHks+PXcsAVaLdn817fMuS7zqoXNNZGaw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/visitor-keys@8.51.0': - resolution: {integrity: sha512-mM/JRQOzhVN1ykejrvwnBRV3+7yTKK8tVANVN3o1O0t0v7o+jqdVu9crPy5Y9dov15TJk/FTIgoUGHrTOVL3Zg==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/visitor-keys@8.52.0': resolution: {integrity: sha512-ink3/Zofus34nmBsPjow63FP5M7IGff0RKAgqR6+CFpdk22M7aLwC9gOcLGYqr7MczLPzZVERW9hRog3O4n1sQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@typescript-eslint/visitor-keys@8.53.0': + resolution: {integrity: sha512-LZ2NqIHFhvFwxG0qZeLL9DvdNAHPGCY5dIRwBhyYeU+LfLhcStE1ImjsuTG/WaVh3XysGaeLW8Rqq7cGkPCFvw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@ungap/structured-clone@1.3.0': resolution: {integrity: sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==} @@ -13353,12 +13353,6 @@ packages: ts-algebra@2.0.0: resolution: {integrity: sha512-FPAhNPFMrkwz76P7cdjdmiShwMynZYN6SgOujD1urY4oNm80Ou9oMdmbR45LotcKOXoy7wSmHkRFE6Mxbrhefw==} - ts-api-utils@2.3.0: - resolution: {integrity: sha512-6eg3Y9SF7SsAvGzRHQvvc1skDAhwI4YQ32ui1scxD1Ccr0G5qIIbUBT3pFTKX8kmWIQClHobtUdNuaBgwdfdWg==} - engines: {node: '>=18.12'} - peerDependencies: - typescript: '>=4.8.4' - ts-api-utils@2.4.0: resolution: {integrity: sha512-3TaVTaAv2gTiMB35i3FiGJaRfwb3Pyn/j3m/bfAvGe8FB7CF6u+LMYqYlDh7reQf7UNvoTvdfAqHGmPGOSsPmA==} engines: {node: '>=18.12'} @@ -13490,8 +13484,8 @@ packages: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <6.0.0' - typescript-eslint@8.52.0: - resolution: {integrity: sha512-atlQQJ2YkO4pfTVQmQ+wvYQwexPDOIgo+RaVcD7gHgzy/IQA+XTyuxNM9M9TVXvttkF7koBHmcwisKdOAf2EcA==} + typescript-eslint@8.53.0: + resolution: {integrity: sha512-xHURCQNxZ1dsWn0sdOaOfCSQG0HKeqSj9OexIxrz6ypU6wHYOdX2I3D2b8s8wFSsSOYJb+6q283cLiLlkEsBYw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 @@ -15024,8 +15018,6 @@ snapshots: '@ckeditor/ckeditor5-core': 47.3.0 '@ckeditor/ckeditor5-upload': 47.3.0 ckeditor5: 47.3.0 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-ai@47.3.0(bufferutil@4.0.9)(utf-8-validate@6.0.5)': dependencies: @@ -15172,8 +15164,6 @@ snapshots: '@ckeditor/ckeditor5-core': 47.3.0 '@ckeditor/ckeditor5-utils': 47.3.0 ckeditor5: 47.3.0 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-code-block@47.3.0(patch_hash=2361d8caad7d6b5bddacc3a3b4aa37dbfba260b1c1b22a450413a79c1bb1ce95)': dependencies: @@ -15366,8 +15356,6 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.3.0 ckeditor5: 47.3.0 es-toolkit: 1.39.5 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-editor-classic@47.3.0': dependencies: @@ -15377,8 +15365,6 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.3.0 ckeditor5: 47.3.0 es-toolkit: 1.39.5 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-editor-decoupled@47.3.0': dependencies: @@ -15388,8 +15374,6 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.3.0 ckeditor5: 47.3.0 es-toolkit: 1.39.5 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-editor-inline@47.3.0': dependencies: @@ -15507,8 +15491,6 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.3.0 ckeditor5: 47.3.0 es-toolkit: 1.39.5 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-font@47.3.0': dependencies: @@ -15583,8 +15565,6 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.3.0 '@ckeditor/ckeditor5-widget': 47.3.0 ckeditor5: 47.3.0 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-html-embed@47.3.0': dependencies: @@ -15884,8 +15864,6 @@ snapshots: '@ckeditor/ckeditor5-core': 47.3.0 '@ckeditor/ckeditor5-engine': 47.3.0 ckeditor5: 47.3.0 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-real-time-collaboration@47.3.0(bufferutil@4.0.9)(utf-8-validate@6.0.5)': dependencies: @@ -15916,8 +15894,6 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.3.0 '@ckeditor/ckeditor5-utils': 47.3.0 ckeditor5: 47.3.0 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-restricted-editing@47.3.0': dependencies: @@ -16004,8 +15980,6 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.3.0 '@ckeditor/ckeditor5-utils': 47.3.0 ckeditor5: 47.3.0 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-special-characters@47.3.0': dependencies: @@ -16821,7 +16795,7 @@ snapshots: '@es-joy/jsdoccomment@0.50.2': dependencies: '@types/estree': 1.0.8 - '@typescript-eslint/types': 8.51.0 + '@typescript-eslint/types': 8.52.0 comment-parser: 1.4.1 esquery: 1.6.0 jsdoc-type-pratt-parser: 4.1.0 @@ -19604,7 +19578,7 @@ snapshots: '@stylistic/eslint-plugin@4.4.1(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)': dependencies: - '@typescript-eslint/utils': 8.51.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/utils': 8.52.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) eslint: 9.39.2(jiti@2.6.1) eslint-visitor-keys: 4.2.1 espree: 10.4.0 @@ -20281,19 +20255,19 @@ snapshots: graphemer: 1.4.0 ignore: 7.0.5 natural-compare: 1.4.0 - ts-api-utils: 2.3.0(typescript@5.9.3) + ts-api-utils: 2.4.0(typescript@5.9.3) typescript: 5.9.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/eslint-plugin@8.52.0(@typescript-eslint/parser@8.52.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)': + '@typescript-eslint/eslint-plugin@8.53.0(@typescript-eslint/parser@8.53.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)': dependencies: '@eslint-community/regexpp': 4.12.2 - '@typescript-eslint/parser': 8.52.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/scope-manager': 8.52.0 - '@typescript-eslint/type-utils': 8.52.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/utils': 8.52.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/visitor-keys': 8.52.0 + '@typescript-eslint/parser': 8.53.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/scope-manager': 8.53.0 + '@typescript-eslint/type-utils': 8.53.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/utils': 8.53.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/visitor-keys': 8.53.0 eslint: 9.39.2(jiti@2.6.1) ignore: 7.0.5 natural-compare: 1.4.0 @@ -20314,12 +20288,12 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.52.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)': + '@typescript-eslint/parser@8.53.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)': dependencies: - '@typescript-eslint/scope-manager': 8.52.0 - '@typescript-eslint/types': 8.52.0 - '@typescript-eslint/typescript-estree': 8.52.0(typescript@5.9.3) - '@typescript-eslint/visitor-keys': 8.52.0 + '@typescript-eslint/scope-manager': 8.53.0 + '@typescript-eslint/types': 8.53.0 + '@typescript-eslint/typescript-estree': 8.53.0(typescript@5.9.3) + '@typescript-eslint/visitor-keys': 8.53.0 debug: 4.4.3(supports-color@8.1.1) eslint: 9.39.2(jiti@2.6.1) typescript: 5.9.3 @@ -20328,17 +20302,8 @@ snapshots: '@typescript-eslint/project-service@8.46.4(typescript@5.9.3)': dependencies: - '@typescript-eslint/tsconfig-utils': 8.51.0(typescript@5.9.3) - '@typescript-eslint/types': 8.51.0 - debug: 4.4.3(supports-color@8.1.1) - typescript: 5.9.3 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/project-service@8.51.0(typescript@5.9.3)': - dependencies: - '@typescript-eslint/tsconfig-utils': 8.51.0(typescript@5.9.3) - '@typescript-eslint/types': 8.51.0 + '@typescript-eslint/tsconfig-utils': 8.52.0(typescript@5.9.3) + '@typescript-eslint/types': 8.52.0 debug: 4.4.3(supports-color@8.1.1) typescript: 5.9.3 transitivePeerDependencies: @@ -20353,30 +20318,39 @@ snapshots: transitivePeerDependencies: - supports-color + '@typescript-eslint/project-service@8.53.0(typescript@5.9.3)': + dependencies: + '@typescript-eslint/tsconfig-utils': 8.53.0(typescript@5.9.3) + '@typescript-eslint/types': 8.53.0 + debug: 4.4.3(supports-color@8.1.1) + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color + '@typescript-eslint/scope-manager@8.46.4': dependencies: '@typescript-eslint/types': 8.46.4 '@typescript-eslint/visitor-keys': 8.46.4 - '@typescript-eslint/scope-manager@8.51.0': - dependencies: - '@typescript-eslint/types': 8.51.0 - '@typescript-eslint/visitor-keys': 8.51.0 - '@typescript-eslint/scope-manager@8.52.0': dependencies: '@typescript-eslint/types': 8.52.0 '@typescript-eslint/visitor-keys': 8.52.0 + '@typescript-eslint/scope-manager@8.53.0': + dependencies: + '@typescript-eslint/types': 8.53.0 + '@typescript-eslint/visitor-keys': 8.53.0 + '@typescript-eslint/tsconfig-utils@8.46.4(typescript@5.9.3)': dependencies: typescript: 5.9.3 - '@typescript-eslint/tsconfig-utils@8.51.0(typescript@5.9.3)': + '@typescript-eslint/tsconfig-utils@8.52.0(typescript@5.9.3)': dependencies: typescript: 5.9.3 - '@typescript-eslint/tsconfig-utils@8.52.0(typescript@5.9.3)': + '@typescript-eslint/tsconfig-utils@8.53.0(typescript@5.9.3)': dependencies: typescript: 5.9.3 @@ -20387,16 +20361,16 @@ snapshots: '@typescript-eslint/utils': 8.46.4(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) debug: 4.4.3(supports-color@8.1.1) eslint: 9.39.2(jiti@2.6.1) - ts-api-utils: 2.3.0(typescript@5.9.3) + ts-api-utils: 2.4.0(typescript@5.9.3) typescript: 5.9.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/type-utils@8.52.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)': + '@typescript-eslint/type-utils@8.53.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)': dependencies: - '@typescript-eslint/types': 8.52.0 - '@typescript-eslint/typescript-estree': 8.52.0(typescript@5.9.3) - '@typescript-eslint/utils': 8.52.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/types': 8.53.0 + '@typescript-eslint/typescript-estree': 8.53.0(typescript@5.9.3) + '@typescript-eslint/utils': 8.53.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) debug: 4.4.3(supports-color@8.1.1) eslint: 9.39.2(jiti@2.6.1) ts-api-utils: 2.4.0(typescript@5.9.3) @@ -20406,10 +20380,10 @@ snapshots: '@typescript-eslint/types@8.46.4': {} - '@typescript-eslint/types@8.51.0': {} - '@typescript-eslint/types@8.52.0': {} + '@typescript-eslint/types@8.53.0': {} + '@typescript-eslint/typescript-estree@8.46.4(typescript@5.9.3)': dependencies: '@typescript-eslint/project-service': 8.46.4(typescript@5.9.3) @@ -20421,22 +20395,7 @@ snapshots: is-glob: 4.0.3 minimatch: 9.0.5 semver: 7.7.3 - ts-api-utils: 2.3.0(typescript@5.9.3) - typescript: 5.9.3 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/typescript-estree@8.51.0(typescript@5.9.3)': - dependencies: - '@typescript-eslint/project-service': 8.51.0(typescript@5.9.3) - '@typescript-eslint/tsconfig-utils': 8.51.0(typescript@5.9.3) - '@typescript-eslint/types': 8.51.0 - '@typescript-eslint/visitor-keys': 8.51.0 - debug: 4.4.3(supports-color@8.1.1) - minimatch: 9.0.5 - semver: 7.7.3 - tinyglobby: 0.2.15 - ts-api-utils: 2.3.0(typescript@5.9.3) + ts-api-utils: 2.4.0(typescript@5.9.3) typescript: 5.9.3 transitivePeerDependencies: - supports-color @@ -20456,23 +20415,27 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.46.4(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)': + '@typescript-eslint/typescript-estree@8.53.0(typescript@5.9.3)': dependencies: - '@eslint-community/eslint-utils': 4.9.0(eslint@9.39.2(jiti@2.6.1)) - '@typescript-eslint/scope-manager': 8.46.4 - '@typescript-eslint/types': 8.46.4 - '@typescript-eslint/typescript-estree': 8.46.4(typescript@5.9.3) - eslint: 9.39.2(jiti@2.6.1) + '@typescript-eslint/project-service': 8.53.0(typescript@5.9.3) + '@typescript-eslint/tsconfig-utils': 8.53.0(typescript@5.9.3) + '@typescript-eslint/types': 8.53.0 + '@typescript-eslint/visitor-keys': 8.53.0 + debug: 4.4.3(supports-color@8.1.1) + minimatch: 9.0.5 + semver: 7.7.3 + tinyglobby: 0.2.15 + ts-api-utils: 2.4.0(typescript@5.9.3) typescript: 5.9.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.51.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)': + '@typescript-eslint/utils@8.46.4(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)': dependencies: - '@eslint-community/eslint-utils': 4.9.0(eslint@9.39.2(jiti@2.6.1)) - '@typescript-eslint/scope-manager': 8.51.0 - '@typescript-eslint/types': 8.51.0 - '@typescript-eslint/typescript-estree': 8.51.0(typescript@5.9.3) + '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.2(jiti@2.6.1)) + '@typescript-eslint/scope-manager': 8.46.4 + '@typescript-eslint/types': 8.46.4 + '@typescript-eslint/typescript-estree': 8.46.4(typescript@5.9.3) eslint: 9.39.2(jiti@2.6.1) typescript: 5.9.3 transitivePeerDependencies: @@ -20489,21 +20452,32 @@ snapshots: transitivePeerDependencies: - supports-color + '@typescript-eslint/utils@8.53.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)': + dependencies: + '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.2(jiti@2.6.1)) + '@typescript-eslint/scope-manager': 8.53.0 + '@typescript-eslint/types': 8.53.0 + '@typescript-eslint/typescript-estree': 8.53.0(typescript@5.9.3) + eslint: 9.39.2(jiti@2.6.1) + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color + '@typescript-eslint/visitor-keys@8.46.4': dependencies: '@typescript-eslint/types': 8.46.4 eslint-visitor-keys: 4.2.1 - '@typescript-eslint/visitor-keys@8.51.0': - dependencies: - '@typescript-eslint/types': 8.51.0 - eslint-visitor-keys: 4.2.1 - '@typescript-eslint/visitor-keys@8.52.0': dependencies: '@typescript-eslint/types': 8.52.0 eslint-visitor-keys: 4.2.1 + '@typescript-eslint/visitor-keys@8.53.0': + dependencies: + '@typescript-eslint/types': 8.53.0 + eslint-visitor-keys: 4.2.1 + '@ungap/structured-clone@1.3.0': {} '@uploadcare/cname-prefix@6.17.0': {} @@ -29958,10 +29932,6 @@ snapshots: ts-algebra@2.0.0: {} - ts-api-utils@2.3.0(typescript@5.9.3): - dependencies: - typescript: 5.9.3 - ts-api-utils@2.4.0(typescript@5.9.3): dependencies: typescript: 5.9.3 @@ -30150,12 +30120,12 @@ snapshots: transitivePeerDependencies: - supports-color - typescript-eslint@8.52.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3): + typescript-eslint@8.53.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3): dependencies: - '@typescript-eslint/eslint-plugin': 8.52.0(@typescript-eslint/parser@8.52.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/parser': 8.52.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/typescript-estree': 8.52.0(typescript@5.9.3) - '@typescript-eslint/utils': 8.52.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/eslint-plugin': 8.53.0(@typescript-eslint/parser@8.53.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/parser': 8.53.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/typescript-estree': 8.53.0(typescript@5.9.3) + '@typescript-eslint/utils': 8.53.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) eslint: 9.39.2(jiti@2.6.1) typescript: 5.9.3 transitivePeerDependencies: From 56356f9c614158a9becbe33a6679cf3a3a0f771c Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 13 Jan 2026 05:38:17 +0000 Subject: [PATCH 016/353] fix(deps): update dependency react-i18next to v16.5.2 --- apps/client/package.json | 2 +- apps/website/package.json | 2 +- pnpm-lock.yaml | 20 +++++++++++--------- 3 files changed, 13 insertions(+), 11 deletions(-) diff --git a/apps/client/package.json b/apps/client/package.json index a8af1048a9..ab05938480 100644 --- a/apps/client/package.json +++ b/apps/client/package.json @@ -60,7 +60,7 @@ "normalize.css": "8.0.1", "panzoom": "9.4.3", "preact": "10.28.2", - "react-i18next": "16.5.1", + "react-i18next": "16.5.2", "react-window": "2.2.5", "reveal.js": "5.2.1", "svg-pan-zoom": "3.6.2", diff --git a/apps/website/package.json b/apps/website/package.json index e9328ef026..c3ff22b145 100644 --- a/apps/website/package.json +++ b/apps/website/package.json @@ -14,7 +14,7 @@ "preact": "10.28.2", "preact-iso": "2.11.1", "preact-render-to-string": "6.6.5", - "react-i18next": "16.5.1" + "react-i18next": "16.5.2" }, "devDependencies": { "@preact/preset-vite": "2.10.2", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 30b925c5b0..ee4cd760d3 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -290,8 +290,8 @@ importers: specifier: 10.28.2 version: 10.28.2 react-i18next: - specifier: 16.5.1 - version: 16.5.1(i18next@25.7.4(typescript@5.9.3))(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(typescript@5.9.3) + specifier: 16.5.2 + version: 16.5.2(i18next@25.7.4(typescript@5.9.3))(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(typescript@5.9.3) react-window: specifier: 2.2.5 version: 2.2.5(react-dom@19.2.3(react@19.2.3))(react@19.2.3) @@ -829,8 +829,8 @@ importers: specifier: 6.6.5 version: 6.6.5(preact@10.28.2) react-i18next: - specifier: 16.5.1 - version: 16.5.1(i18next@25.7.4(typescript@5.9.3))(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(typescript@5.9.3) + specifier: 16.5.2 + version: 16.5.2(i18next@25.7.4(typescript@5.9.3))(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(typescript@5.9.3) devDependencies: '@preact/preset-vite': specifier: 2.10.2 @@ -11877,8 +11877,8 @@ packages: peerDependencies: react: ^19.2.3 - react-i18next@16.5.1: - resolution: {integrity: sha512-Hks6UIRZWW4c+qDAnx1csVsCGYeIR4MoBGQgJ+NUoNnO6qLxXuf8zu0xdcinyXUORgGzCdRsexxO1Xzv3sTdnw==} + react-i18next@16.5.2: + resolution: {integrity: sha512-GG/SBVxx9dvrO1uCs8VYdKfOP8NEBUhNP+2VDQLCifRJ8DL1qPq296k2ACNGyZMDe7iyIlz/LMJTQOs8HXSRvw==} peerDependencies: i18next: '>= 25.6.2' react: '>= 16.8.0' @@ -15092,6 +15092,8 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.3.0 '@ckeditor/ckeditor5-utils': 47.3.0 ckeditor5: 47.3.0 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-block-quote@47.3.0': dependencies: @@ -15166,8 +15168,6 @@ snapshots: '@ckeditor/ckeditor5-core': 47.3.0 '@ckeditor/ckeditor5-utils': 47.3.0 ckeditor5: 47.3.0 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-code-block@47.3.0(patch_hash=2361d8caad7d6b5bddacc3a3b4aa37dbfba260b1c1b22a450413a79c1bb1ce95)': dependencies: @@ -15387,6 +15387,8 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.3.0 ckeditor5: 47.3.0 es-toolkit: 1.39.5 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-editor-multi-root@47.3.0': dependencies: @@ -28020,7 +28022,7 @@ snapshots: react: 19.2.3 scheduler: 0.27.0 - react-i18next@16.5.1(i18next@25.7.4(typescript@5.9.3))(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(typescript@5.9.3): + react-i18next@16.5.2(i18next@25.7.4(typescript@5.9.3))(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(typescript@5.9.3): dependencies: '@babel/runtime': 7.28.4 html-parse-stringify: 3.0.1 From ad4a8ec5f43e957bc9bd9cfe30015f1230d99f10 Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Tue, 13 Jan 2026 07:40:20 +0200 Subject: [PATCH 017/353] chore(deps): use pinned versions --- package.json | 6 +- packages/ckeditor5-admonition/package.json | 4 +- packages/ckeditor5-footnotes/package.json | 4 +- .../ckeditor5-keyboard-marker/package.json | 4 +- packages/ckeditor5-math/package.json | 4 +- packages/ckeditor5-mermaid/package.json | 4 +- pnpm-lock.yaml | 80 ++++++++----------- 7 files changed, 48 insertions(+), 58 deletions(-) diff --git a/package.json b/package.json index 251595a855..6be93429cb 100644 --- a/package.json +++ b/package.json @@ -61,7 +61,7 @@ "eslint-config-prettier": "10.1.8", "eslint-plugin-playwright": "2.5.0", "eslint-plugin-simple-import-sort": "12.1.1", - "happy-dom": "~20.1.0", + "happy-dom": "20.1.0", "http-server": "14.1.1", "jiti": "2.6.1", "jsonc-eslint-parser": "2.4.2", @@ -69,11 +69,11 @@ "rollup-plugin-webpack-stats": "2.1.9", "tslib": "2.8.1", "tsx": "4.21.0", - "typescript": "~5.9.0", + "typescript": "5.9.3", "typescript-eslint": "8.53.0", "upath": "2.0.1", "vite": "7.3.1", - "vite-plugin-dts": "~4.5.0", + "vite-plugin-dts": "4.5.4", "vitest": "4.0.16" }, "license": "AGPL-3.0-only", diff --git a/packages/ckeditor5-admonition/package.json b/packages/ckeditor5-admonition/package.json index 87fe210a3f..652f221b9e 100644 --- a/packages/ckeditor5-admonition/package.json +++ b/packages/ckeditor5-admonition/package.json @@ -24,7 +24,7 @@ "@ckeditor/ckeditor5-dev-build-tools": "54.2.3", "@ckeditor/ckeditor5-inspector": ">=4.1.0", "@ckeditor/ckeditor5-package-tools": "5.0.1", - "@typescript-eslint/eslint-plugin": "~8.53.0", + "@typescript-eslint/eslint-plugin": "8.53.0", "@typescript-eslint/parser": "8.53.0", "@vitest/browser": "4.0.16", "@vitest/coverage-istanbul": "4.0.16", @@ -37,7 +37,7 @@ "stylelint-config-ckeditor5": ">=9.1.0", "ts-node": "10.9.2", "typescript": "5.9.3", - "vite-plugin-svgo": "~2.0.0", + "vite-plugin-svgo": "2.0.0", "vitest": "4.0.16", "webdriverio": "9.23.0" }, diff --git a/packages/ckeditor5-footnotes/package.json b/packages/ckeditor5-footnotes/package.json index 161008a426..e4433a18aa 100644 --- a/packages/ckeditor5-footnotes/package.json +++ b/packages/ckeditor5-footnotes/package.json @@ -25,7 +25,7 @@ "@ckeditor/ckeditor5-dev-build-tools": "54.2.3", "@ckeditor/ckeditor5-inspector": ">=4.1.0", "@ckeditor/ckeditor5-package-tools": "5.0.1", - "@typescript-eslint/eslint-plugin": "~8.53.0", + "@typescript-eslint/eslint-plugin": "8.53.0", "@typescript-eslint/parser": "8.53.0", "@vitest/browser": "4.0.16", "@vitest/coverage-istanbul": "4.0.16", @@ -38,7 +38,7 @@ "stylelint-config-ckeditor5": ">=9.1.0", "ts-node": "10.9.2", "typescript": "5.9.3", - "vite-plugin-svgo": "~2.0.0", + "vite-plugin-svgo": "2.0.0", "vitest": "4.0.16", "webdriverio": "9.23.0" }, diff --git a/packages/ckeditor5-keyboard-marker/package.json b/packages/ckeditor5-keyboard-marker/package.json index 185b3223c2..4aa0bfbfea 100644 --- a/packages/ckeditor5-keyboard-marker/package.json +++ b/packages/ckeditor5-keyboard-marker/package.json @@ -27,7 +27,7 @@ "@ckeditor/ckeditor5-dev-build-tools": "54.2.3", "@ckeditor/ckeditor5-inspector": ">=4.1.0", "@ckeditor/ckeditor5-package-tools": "5.0.1", - "@typescript-eslint/eslint-plugin": "~8.53.0", + "@typescript-eslint/eslint-plugin": "8.53.0", "@typescript-eslint/parser": "8.53.0", "@vitest/browser": "4.0.16", "@vitest/coverage-istanbul": "4.0.16", @@ -40,7 +40,7 @@ "stylelint-config-ckeditor5": ">=9.1.0", "ts-node": "10.9.2", "typescript": "5.9.3", - "vite-plugin-svgo": "~2.0.0", + "vite-plugin-svgo": "2.0.0", "vitest": "4.0.16", "webdriverio": "9.23.0" }, diff --git a/packages/ckeditor5-math/package.json b/packages/ckeditor5-math/package.json index d5bddcf37f..11384472fe 100644 --- a/packages/ckeditor5-math/package.json +++ b/packages/ckeditor5-math/package.json @@ -27,7 +27,7 @@ "@ckeditor/ckeditor5-dev-build-tools": "54.2.3", "@ckeditor/ckeditor5-inspector": ">=4.1.0", "@ckeditor/ckeditor5-package-tools": "5.0.1", - "@typescript-eslint/eslint-plugin": "~8.53.0", + "@typescript-eslint/eslint-plugin": "8.53.0", "@typescript-eslint/parser": "8.53.0", "@vitest/browser": "4.0.16", "@vitest/coverage-istanbul": "4.0.16", @@ -40,7 +40,7 @@ "stylelint-config-ckeditor5": ">=9.1.0", "ts-node": "10.9.2", "typescript": "5.9.3", - "vite-plugin-svgo": "~2.0.0", + "vite-plugin-svgo": "2.0.0", "vitest": "4.0.16", "webdriverio": "9.23.0" }, diff --git a/packages/ckeditor5-mermaid/package.json b/packages/ckeditor5-mermaid/package.json index 04c675345e..6743723361 100644 --- a/packages/ckeditor5-mermaid/package.json +++ b/packages/ckeditor5-mermaid/package.json @@ -27,7 +27,7 @@ "@ckeditor/ckeditor5-dev-build-tools": "54.2.3", "@ckeditor/ckeditor5-inspector": ">=4.1.0", "@ckeditor/ckeditor5-package-tools": "5.0.1", - "@typescript-eslint/eslint-plugin": "~8.53.0", + "@typescript-eslint/eslint-plugin": "8.53.0", "@typescript-eslint/parser": "8.53.0", "@vitest/browser": "4.0.16", "@vitest/coverage-istanbul": "4.0.16", @@ -40,7 +40,7 @@ "stylelint-config-ckeditor5": ">=9.1.0", "ts-node": "10.9.2", "typescript": "5.9.3", - "vite-plugin-svgo": "~2.0.0", + "vite-plugin-svgo": "2.0.0", "vitest": "4.0.16", "webdriverio": "9.23.0" }, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 30b925c5b0..3b8763f475 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -89,7 +89,7 @@ importers: specifier: 12.1.1 version: 12.1.1(eslint@9.39.2(jiti@2.6.1)) happy-dom: - specifier: ~20.1.0 + specifier: 20.1.0 version: 20.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5) http-server: specifier: 14.1.1 @@ -113,7 +113,7 @@ importers: specifier: 4.21.0 version: 4.21.0 typescript: - specifier: ~5.9.0 + specifier: 5.9.3 version: 5.9.3 typescript-eslint: specifier: 8.53.0 @@ -125,7 +125,7 @@ importers: specifier: 7.3.1 version: 7.3.1(@types/node@24.10.7)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) vite-plugin-dts: - specifier: ~4.5.0 + specifier: 4.5.4 version: 4.5.4(@types/node@24.10.7)(rollup@4.52.0)(typescript@5.9.3)(vite@7.3.1(@types/node@24.10.7)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1)) vitest: specifier: 4.0.16 @@ -900,7 +900,7 @@ importers: specifier: 5.0.1 version: 5.0.1(@babel/core@7.28.0)(@swc/core@1.11.29(@swc/helpers@0.5.17))(@types/node@24.10.7)(bufferutil@4.0.9)(esbuild@0.27.2)(utf-8-validate@6.0.5) '@typescript-eslint/eslint-plugin': - specifier: ~8.53.0 + specifier: 8.53.0 version: 8.53.0(@typescript-eslint/parser@8.53.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) '@typescript-eslint/parser': specifier: 8.53.0 @@ -939,7 +939,7 @@ importers: specifier: 5.9.3 version: 5.9.3 vite-plugin-svgo: - specifier: ~2.0.0 + specifier: 2.0.0 version: 2.0.0(typescript@5.9.3)(vite@7.3.1(@types/node@24.10.7)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1)) vitest: specifier: 4.0.16 @@ -960,7 +960,7 @@ importers: specifier: 5.0.1 version: 5.0.1(@babel/core@7.28.0)(@swc/core@1.11.29(@swc/helpers@0.5.17))(@types/node@24.10.7)(bufferutil@4.0.9)(esbuild@0.27.2)(utf-8-validate@6.0.5) '@typescript-eslint/eslint-plugin': - specifier: ~8.53.0 + specifier: 8.53.0 version: 8.53.0(@typescript-eslint/parser@8.53.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) '@typescript-eslint/parser': specifier: 8.53.0 @@ -999,7 +999,7 @@ importers: specifier: 5.9.3 version: 5.9.3 vite-plugin-svgo: - specifier: ~2.0.0 + specifier: 2.0.0 version: 2.0.0(typescript@5.9.3)(vite@7.3.1(@types/node@24.10.7)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1)) vitest: specifier: 4.0.16 @@ -1020,7 +1020,7 @@ importers: specifier: 5.0.1 version: 5.0.1(@babel/core@7.28.0)(@swc/core@1.11.29(@swc/helpers@0.5.17))(@types/node@24.10.7)(bufferutil@4.0.9)(esbuild@0.27.2)(utf-8-validate@6.0.5) '@typescript-eslint/eslint-plugin': - specifier: ~8.53.0 + specifier: 8.53.0 version: 8.53.0(@typescript-eslint/parser@8.53.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) '@typescript-eslint/parser': specifier: 8.53.0 @@ -1059,7 +1059,7 @@ importers: specifier: 5.9.3 version: 5.9.3 vite-plugin-svgo: - specifier: ~2.0.0 + specifier: 2.0.0 version: 2.0.0(typescript@5.9.3)(vite@7.3.1(@types/node@24.10.7)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1)) vitest: specifier: 4.0.16 @@ -1087,7 +1087,7 @@ importers: specifier: 5.0.1 version: 5.0.1(@babel/core@7.28.0)(@swc/core@1.11.29(@swc/helpers@0.5.17))(@types/node@24.10.7)(bufferutil@4.0.9)(esbuild@0.27.2)(utf-8-validate@6.0.5) '@typescript-eslint/eslint-plugin': - specifier: ~8.53.0 + specifier: 8.53.0 version: 8.53.0(@typescript-eslint/parser@8.53.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) '@typescript-eslint/parser': specifier: 8.53.0 @@ -1126,7 +1126,7 @@ importers: specifier: 5.9.3 version: 5.9.3 vite-plugin-svgo: - specifier: ~2.0.0 + specifier: 2.0.0 version: 2.0.0(typescript@5.9.3)(vite@7.3.1(@types/node@24.10.7)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1)) vitest: specifier: 4.0.16 @@ -1154,7 +1154,7 @@ importers: specifier: 5.0.1 version: 5.0.1(@babel/core@7.28.0)(@swc/core@1.11.29(@swc/helpers@0.5.17))(@types/node@24.10.7)(bufferutil@4.0.9)(esbuild@0.27.2)(utf-8-validate@6.0.5) '@typescript-eslint/eslint-plugin': - specifier: ~8.53.0 + specifier: 8.53.0 version: 8.53.0(@typescript-eslint/parser@8.53.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) '@typescript-eslint/parser': specifier: 8.53.0 @@ -1193,7 +1193,7 @@ importers: specifier: 5.9.3 version: 5.9.3 vite-plugin-svgo: - specifier: ~2.0.0 + specifier: 2.0.0 version: 2.0.0(typescript@5.9.3)(vite@7.3.1(@types/node@24.10.7)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1)) vitest: specifier: 4.0.16 @@ -15022,6 +15022,8 @@ snapshots: '@ckeditor/ckeditor5-core': 47.3.0 '@ckeditor/ckeditor5-upload': 47.3.0 ckeditor5: 47.3.0 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-ai@47.3.0(bufferutil@4.0.9)(utf-8-validate@6.0.5)': dependencies: @@ -15092,6 +15094,8 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.3.0 '@ckeditor/ckeditor5-utils': 47.3.0 ckeditor5: 47.3.0 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-block-quote@47.3.0': dependencies: @@ -15160,6 +15164,8 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.3.0 '@ckeditor/ckeditor5-widget': 47.3.0 es-toolkit: 1.39.5 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-cloud-services@47.3.0': dependencies: @@ -15360,6 +15366,8 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.3.0 ckeditor5: 47.3.0 es-toolkit: 1.39.5 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-editor-classic@47.3.0': dependencies: @@ -15369,6 +15377,8 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.3.0 ckeditor5: 47.3.0 es-toolkit: 1.39.5 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-editor-decoupled@47.3.0': dependencies: @@ -15378,6 +15388,8 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.3.0 ckeditor5: 47.3.0 es-toolkit: 1.39.5 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-editor-inline@47.3.0': dependencies: @@ -15387,6 +15399,8 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.3.0 ckeditor5: 47.3.0 es-toolkit: 1.39.5 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-editor-multi-root@47.3.0': dependencies: @@ -15409,8 +15423,6 @@ snapshots: '@ckeditor/ckeditor5-table': 47.3.0 '@ckeditor/ckeditor5-utils': 47.3.0 ckeditor5: 47.3.0 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-emoji@47.3.0': dependencies: @@ -15467,8 +15479,6 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.3.0 '@ckeditor/ckeditor5-utils': 47.3.0 ckeditor5: 47.3.0 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-export-word@47.3.0': dependencies: @@ -15493,6 +15503,8 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.3.0 ckeditor5: 47.3.0 es-toolkit: 1.39.5 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-font@47.3.0': dependencies: @@ -15567,6 +15579,8 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.3.0 '@ckeditor/ckeditor5-widget': 47.3.0 ckeditor5: 47.3.0 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-html-embed@47.3.0': dependencies: @@ -15626,8 +15640,6 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.3.0 '@ckeditor/ckeditor5-utils': 47.3.0 ckeditor5: 47.3.0 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-indent@47.3.0': dependencies: @@ -15740,8 +15752,6 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.3.0 '@ckeditor/ckeditor5-widget': 47.3.0 ckeditor5: 47.3.0 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-mention@47.3.0(patch_hash=5981fb59ba35829e4dff1d39cf771000f8a8fdfa7a34b51d8af9549541f2d62d)': dependencies: @@ -15751,8 +15761,6 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.3.0 ckeditor5: 47.3.0 es-toolkit: 1.39.5 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-merge-fields@47.3.0': dependencies: @@ -15765,8 +15773,6 @@ snapshots: '@ckeditor/ckeditor5-widget': 47.3.0 ckeditor5: 47.3.0 es-toolkit: 1.39.5 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-minimap@47.3.0': dependencies: @@ -15775,8 +15781,6 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.3.0 '@ckeditor/ckeditor5-utils': 47.3.0 ckeditor5: 47.3.0 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-operations-compressor@47.3.0': dependencies: @@ -15831,8 +15835,6 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.3.0 '@ckeditor/ckeditor5-widget': 47.3.0 ckeditor5: 47.3.0 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-pagination@47.3.0': dependencies: @@ -15940,8 +15942,6 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.3.0 '@ckeditor/ckeditor5-utils': 47.3.0 ckeditor5: 47.3.0 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-slash-command@47.3.0': dependencies: @@ -15954,8 +15954,6 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.3.0 '@ckeditor/ckeditor5-utils': 47.3.0 ckeditor5: 47.3.0 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-source-editing-enhanced@47.3.0': dependencies: @@ -16003,8 +16001,6 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.3.0 ckeditor5: 47.3.0 es-toolkit: 1.39.5 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-table@47.3.0': dependencies: @@ -16017,8 +16013,6 @@ snapshots: '@ckeditor/ckeditor5-widget': 47.3.0 ckeditor5: 47.3.0 es-toolkit: 1.39.5 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-template@47.3.0': dependencies: @@ -16129,8 +16123,6 @@ snapshots: '@ckeditor/ckeditor5-engine': 47.3.0 '@ckeditor/ckeditor5-utils': 47.3.0 es-toolkit: 1.39.5 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-widget@47.3.0': dependencies: @@ -16150,8 +16142,6 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.3.0 ckeditor5: 47.3.0 es-toolkit: 1.39.5 - transitivePeerDependencies: - - supports-color '@codemirror/autocomplete@6.18.6': dependencies: @@ -16797,7 +16787,7 @@ snapshots: '@es-joy/jsdoccomment@0.50.2': dependencies: '@types/estree': 1.0.8 - '@typescript-eslint/types': 8.52.0 + '@typescript-eslint/types': 8.53.0 comment-parser: 1.4.1 esquery: 1.6.0 jsdoc-type-pratt-parser: 4.1.0 @@ -20305,7 +20295,7 @@ snapshots: '@typescript-eslint/project-service@8.46.4(typescript@5.9.3)': dependencies: '@typescript-eslint/tsconfig-utils': 8.52.0(typescript@5.9.3) - '@typescript-eslint/types': 8.52.0 + '@typescript-eslint/types': 8.53.0 debug: 4.4.3(supports-color@8.1.1) typescript: 5.9.3 transitivePeerDependencies: @@ -20314,7 +20304,7 @@ snapshots: '@typescript-eslint/project-service@8.52.0(typescript@5.9.3)': dependencies: '@typescript-eslint/tsconfig-utils': 8.52.0(typescript@5.9.3) - '@typescript-eslint/types': 8.52.0 + '@typescript-eslint/types': 8.53.0 debug: 4.4.3(supports-color@8.1.1) typescript: 5.9.3 transitivePeerDependencies: @@ -29642,7 +29632,7 @@ snapshots: commander: 7.2.0 css-select: 5.2.2 css-tree: 2.3.1 - css-what: 6.1.0 + css-what: 6.2.2 csso: 5.0.5 picocolors: 1.1.1 From 8e47f333294730554d5a6c95b4a033d497937e6e Mon Sep 17 00:00:00 2001 From: Wael Nasreddine Date: Sat, 10 Jan 2026 11:44:54 -0800 Subject: [PATCH 018/353] Refactor edit-docs to use edit-docs-config.yaml This removes hardcoded configuration from edit-docs.ts and replaces it with dynamic loading from edit-docs-config.yaml. Changes: - Removed BASE_URL and NOTE_MAPPINGS constants - Removed DOCS_ROOT and USER_GUIDE_ROOT environment variable dependencies - Added js-yaml for YAML parsing - Config paths are resolved relative to repository root The tool now reads configuration from edit-docs-config.yaml, making it easier to customize without code changes. The pnpm script is simplified since it no longer needs to pass complex environment variables. --- apps/edit-docs/package.json | 2 +- apps/edit-docs/src/edit-docs.ts | 64 ++++++++++++++++----------------- edit-docs-config.yaml | 24 +++++++++++++ package.json | 2 ++ pnpm-lock.yaml | 43 ++++++++++------------ 5 files changed, 76 insertions(+), 59 deletions(-) create mode 100644 edit-docs-config.yaml diff --git a/apps/edit-docs/package.json b/apps/edit-docs/package.json index 30df957347..d627275328 100644 --- a/apps/edit-docs/package.json +++ b/apps/edit-docs/package.json @@ -16,7 +16,7 @@ "fs-extra": "11.3.3" }, "scripts": { - "edit-docs": "cross-env TRILIUM_PORT=37741 TRILIUM_DATA_DIR=data TRILIUM_INTEGRATION_TEST=memory-no-store DOCS_ROOT=../../../docs USER_GUIDE_ROOT=\"../../server/src/assets/doc_notes/en/User Guide\" tsx ../../scripts/electron-start.mts src/edit-docs.ts", + "edit-docs": "cross-env TRILIUM_PORT=37741 TRILIUM_DATA_DIR=data TRILIUM_INTEGRATION_TEST=memory-no-store tsx ../../scripts/electron-start.mts src/edit-docs.ts", "edit-demo": "cross-env TRILIUM_PORT=37744 TRILIUM_DATA_DIR=data TRILIUM_INTEGRATION_TEST=memory-no-store DOCS_ROOT=../../../docs USER_GUIDE_ROOT=\"../../server/src/assets/doc_notes/en/User Guide\" tsx ../../scripts/electron-start.mts src/edit-demo.ts" } } \ No newline at end of file diff --git a/apps/edit-docs/src/edit-docs.ts b/apps/edit-docs/src/edit-docs.ts index 762dacc5b0..86c56ed277 100644 --- a/apps/edit-docs/src/edit-docs.ts +++ b/apps/edit-docs/src/edit-docs.ts @@ -1,14 +1,16 @@ -import fs from "fs/promises"; -import fsExtra from "fs-extra"; -import path from "path"; -import type { NoteMetaFile } from "@triliumnext/server/src/services/meta/note_meta.js"; -import { initializeTranslations } from "@triliumnext/server/src/services/i18n.js"; import debounce from "@triliumnext/client/src/services/debounce.js"; -import { extractZip, importData, initializeDatabase, startElectron } from "./utils.js"; import cls from "@triliumnext/server/src/services/cls.js"; import type { AdvancedExportOptions, ExportFormat } from "@triliumnext/server/src/services/export/zip/abstract_provider.js"; +import { initializeTranslations } from "@triliumnext/server/src/services/i18n.js"; import { parseNoteMetaFile } from "@triliumnext/server/src/services/in_app_help.js"; +import type { NoteMetaFile } from "@triliumnext/server/src/services/meta/note_meta.js"; import type NoteMeta from "@triliumnext/server/src/services/meta/note_meta.js"; +import fs from "fs/promises"; +import fsExtra from "fs-extra"; +import yaml from "js-yaml"; +import path from "path"; + +import { extractZip, importData, initializeDatabase, startElectron } from "./utils.js"; interface NoteMapping { rootNoteId: string; @@ -18,39 +20,33 @@ interface NoteMapping { exportOnly?: boolean; } -const { DOCS_ROOT, USER_GUIDE_ROOT } = process.env; -if (!DOCS_ROOT || !USER_GUIDE_ROOT) { - throw new Error("Missing DOCS_ROOT or USER_GUIDE_ROOT environment variable."); +interface Config { + baseUrl: string; + noteMappings: NoteMapping[]; } -const BASE_URL = "https://docs.triliumnotes.org"; +// Configuration variables +let BASE_URL: string; +let NOTE_MAPPINGS: NoteMapping[]; + +// Load configuration from edit-docs-config.yaml +async function loadConfig() { + const CONFIG_PATH = path.join(__dirname, "../../../edit-docs-config.yaml"); + const configContent = await fs.readFile(CONFIG_PATH, "utf-8"); + const config = yaml.load(configContent) as Config; + + BASE_URL = config.baseUrl; + // Resolve all paths relative to the repository root + const REPO_ROOT = path.join(__dirname, "../../.."); + NOTE_MAPPINGS = config.noteMappings.map((mapping) => ({ + ...mapping, + path: path.join(REPO_ROOT, mapping.path) + })); +} -const NOTE_MAPPINGS: NoteMapping[] = [ - { - rootNoteId: "pOsGYCXsbNQG", - path: path.join(__dirname, DOCS_ROOT, "User Guide"), - format: "markdown" - }, - { - rootNoteId: "pOsGYCXsbNQG", - path: path.join(__dirname, USER_GUIDE_ROOT), - format: "html", - ignoredFiles: ["index.html", "navigation.html", "style.css", "User Guide.html"], - exportOnly: true - }, - { - rootNoteId: "jdjRLhLV3TtI", - path: path.join(__dirname, DOCS_ROOT, "Developer Guide"), - format: "markdown" - }, - { - rootNoteId: "hD3V4hiu2VW4", - path: path.join(__dirname, DOCS_ROOT, "Release Notes"), - format: "markdown" - } -]; async function main() { + await loadConfig(); const initializedPromise = startElectron(() => { // Wait for the import to be finished and the application to be loaded before we listen to changes. setTimeout(() => registerHandlers(), 10_000); diff --git a/edit-docs-config.yaml b/edit-docs-config.yaml new file mode 100644 index 0000000000..728523c5ca --- /dev/null +++ b/edit-docs-config.yaml @@ -0,0 +1,24 @@ +baseUrl: "https://docs.triliumnotes.org" + +noteMappings: + - rootNoteId: "pOsGYCXsbNQG" + path: "docs/User Guide" + format: "markdown" + + - rootNoteId: "pOsGYCXsbNQG" + path: "apps/server/src/assets/doc_notes/en/User Guide" + format: "html" + ignoredFiles: + - "index.html" + - "navigation.html" + - "style.css" + - "User Guide.html" + exportOnly: true + + - rootNoteId: "jdjRLhLV3TtI" + path: "docs/Developer Guide" + format: "markdown" + + - rootNoteId: "hD3V4hiu2VW4" + path: "docs/Release Notes" + format: "markdown" diff --git a/package.json b/package.json index 251595a855..95b5c13451 100644 --- a/package.json +++ b/package.json @@ -48,6 +48,7 @@ "@playwright/test": "1.57.0", "@triliumnext/server": "workspace:*", "@types/express": "5.0.6", + "@types/js-yaml": "4.0.9", "@types/node": "24.10.7", "@vitest/browser-webdriverio": "4.0.16", "@vitest/coverage-v8": "4.0.16", @@ -64,6 +65,7 @@ "happy-dom": "~20.1.0", "http-server": "14.1.1", "jiti": "2.6.1", + "js-yaml": "4.1.1", "jsonc-eslint-parser": "2.4.2", "react-refresh": "0.18.0", "rollup-plugin-webpack-stats": "2.1.9", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 30b925c5b0..7ca1bdb556 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -49,6 +49,9 @@ importers: '@types/express': specifier: 5.0.6 version: 5.0.6 + '@types/js-yaml': + specifier: 4.0.9 + version: 4.0.9 '@types/node': specifier: 24.10.7 version: 24.10.7 @@ -97,6 +100,9 @@ importers: jiti: specifier: 2.6.1 version: 2.6.1 + js-yaml: + specifier: 4.1.1 + version: 4.1.1 jsonc-eslint-parser: specifier: 2.4.2 version: 2.4.2 @@ -5376,6 +5382,9 @@ packages: '@types/jquery@3.5.33': resolution: {integrity: sha512-SeyVJXlCZpEki5F0ghuYe+L+PprQta6nRZqhONt9F13dWBtR/ftoaIbdRQ7cis7womE+X2LKhsDdDtkkDhJS6g==} + '@types/js-yaml@4.0.9': + resolution: {integrity: sha512-k4MGaQl5TGo/iipqb2UDG2UwjXziSWkh0uysQelTlJpX1qGlpUZYm8PnO4DxG1qBomtJUdYJ6qR6xdIah10JLg==} + '@types/json-schema@7.0.15': resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} @@ -15022,6 +15031,8 @@ snapshots: '@ckeditor/ckeditor5-core': 47.3.0 '@ckeditor/ckeditor5-upload': 47.3.0 ckeditor5: 47.3.0 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-ai@47.3.0(bufferutil@4.0.9)(utf-8-validate@6.0.5)': dependencies: @@ -15160,6 +15171,8 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.3.0 '@ckeditor/ckeditor5-widget': 47.3.0 es-toolkit: 1.39.5 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-cloud-services@47.3.0': dependencies: @@ -15360,6 +15373,8 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.3.0 ckeditor5: 47.3.0 es-toolkit: 1.39.5 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-editor-classic@47.3.0': dependencies: @@ -15369,6 +15384,8 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.3.0 ckeditor5: 47.3.0 es-toolkit: 1.39.5 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-editor-decoupled@47.3.0': dependencies: @@ -15612,8 +15629,6 @@ snapshots: '@ckeditor/ckeditor5-widget': 47.3.0 ckeditor5: 47.3.0 es-toolkit: 1.39.5 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-import-word@47.3.0': dependencies: @@ -15639,8 +15654,6 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.3.0 '@ckeditor/ckeditor5-utils': 47.3.0 ckeditor5: 47.3.0 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-inspector@5.0.0': {} @@ -15650,8 +15663,6 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.3.0 '@ckeditor/ckeditor5-utils': 47.3.0 ckeditor5: 47.3.0 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-line-height@47.3.0': dependencies: @@ -15676,8 +15687,6 @@ snapshots: '@ckeditor/ckeditor5-widget': 47.3.0 ckeditor5: 47.3.0 es-toolkit: 1.39.5 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-list-multi-level@47.3.0': dependencies: @@ -15701,8 +15710,6 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.3.0 '@ckeditor/ckeditor5-utils': 47.3.0 ckeditor5: 47.3.0 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-markdown-gfm@47.3.0': dependencies: @@ -15831,8 +15838,6 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.3.0 '@ckeditor/ckeditor5-widget': 47.3.0 ckeditor5: 47.3.0 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-pagination@47.3.0': dependencies: @@ -15940,8 +15945,6 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.3.0 '@ckeditor/ckeditor5-utils': 47.3.0 ckeditor5: 47.3.0 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-slash-command@47.3.0': dependencies: @@ -15954,8 +15957,6 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.3.0 '@ckeditor/ckeditor5-utils': 47.3.0 ckeditor5: 47.3.0 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-source-editing-enhanced@47.3.0': dependencies: @@ -16003,8 +16004,6 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.3.0 ckeditor5: 47.3.0 es-toolkit: 1.39.5 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-table@47.3.0': dependencies: @@ -16129,8 +16128,6 @@ snapshots: '@ckeditor/ckeditor5-engine': 47.3.0 '@ckeditor/ckeditor5-utils': 47.3.0 es-toolkit: 1.39.5 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-widget@47.3.0': dependencies: @@ -16150,8 +16147,6 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.3.0 ckeditor5: 47.3.0 es-toolkit: 1.39.5 - transitivePeerDependencies: - - supports-color '@codemirror/autocomplete@6.18.6': dependencies: @@ -20005,6 +20000,8 @@ snapshots: dependencies: '@types/sizzle': 2.3.9 + '@types/js-yaml@4.0.9': {} + '@types/json-schema@7.0.15': {} '@types/jsonfile@6.1.4': @@ -21675,8 +21672,6 @@ snapshots: ckeditor5-collaboration@47.3.0: dependencies: '@ckeditor/ckeditor5-collaboration-core': 47.3.0 - transitivePeerDependencies: - - supports-color ckeditor5-premium-features@47.3.0(bufferutil@4.0.9)(ckeditor5@47.3.0)(utf-8-validate@6.0.5): dependencies: From 015e41e79235b5db1ae817d6ce675555320ac5cd Mon Sep 17 00:00:00 2001 From: Wael Nasreddine Date: Sun, 11 Jan 2026 14:10:19 -0800 Subject: [PATCH 019/353] fix(edit-docs): Minify meta for format==share --- apps/edit-docs/src/edit-docs.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/edit-docs/src/edit-docs.ts b/apps/edit-docs/src/edit-docs.ts index 86c56ed277..baf56c6f6d 100644 --- a/apps/edit-docs/src/edit-docs.ts +++ b/apps/edit-docs/src/edit-docs.ts @@ -138,7 +138,7 @@ async function exportData(noteId: string, format: ExportFormat, outputPath: stri } } - const minifyMeta = (format === "html"); + const minifyMeta = (format === "html" || format === "share"); await cleanUpMeta(outputPath, minifyMeta); } From fb4d63b049216784dfefec64430e4f577fd04ebe Mon Sep 17 00:00:00 2001 From: Wael Nasreddine Date: Sat, 10 Jan 2026 12:09:18 -0800 Subject: [PATCH 020/353] Add --config, --help, and --version flags to edit-docs - Implement --config (-c) flag to allow custom configuration file paths. - Add --help (-h) flag to display tool usage and available options. - Add --version (-v) flag to display the current Trilium version. - Update electron-start.mts to correctly pass command-line arguments to Electron. - Synchronize edit-docs version with the root package.json via update-version.ts. - Resolve config paths relative to the configuration file's directory. This makes edit-docs more robust and easier to use from external projects and immutable environments like Nix. --- apps/edit-docs/package.json | 2 +- apps/edit-docs/src/edit-docs.ts | 69 ++++++++++++++++++++++++++++++--- scripts/electron-start.mts | 3 +- scripts/update-version.ts | 2 +- 4 files changed, 67 insertions(+), 9 deletions(-) diff --git a/apps/edit-docs/package.json b/apps/edit-docs/package.json index d627275328..31d7e51ec1 100644 --- a/apps/edit-docs/package.json +++ b/apps/edit-docs/package.json @@ -1,6 +1,6 @@ { "name": "@triliumnext/edit-docs", - "version": "0.0.1", + "version": "0.101.3", "private": true, "description": "Desktop version of Trilium which imports the demo database (presented to new users at start-up) or the user guide and other documentation and saves the modifications for committing.", "dependencies": { diff --git a/apps/edit-docs/src/edit-docs.ts b/apps/edit-docs/src/edit-docs.ts index baf56c6f6d..c15a2f0863 100644 --- a/apps/edit-docs/src/edit-docs.ts +++ b/apps/edit-docs/src/edit-docs.ts @@ -10,6 +10,7 @@ import fsExtra from "fs-extra"; import yaml from "js-yaml"; import path from "path"; +import packageJson from "../package.json" with { type: "json" }; import { extractZip, importData, initializeDatabase, startElectron } from "./utils.js"; interface NoteMapping { @@ -25,26 +26,82 @@ interface Config { noteMappings: NoteMapping[]; } -// Configuration variables +// Parse command-line arguments +function parseArgs() { + const args = process.argv.slice(2); + let configPath: string | undefined; + let showHelp = false; + let showVersion = false; + + for (let i = 0; i < args.length; i++) { + if (args[i] === '--config' || args[i] === '-c') { + configPath = args[i + 1]; + i++; // Skip the next argument as it's the value + } else if (args[i] === '--help' || args[i] === '-h') { + showHelp = true; + } else if (args[i] === '--version' || args[i] === '-v') { + showVersion = true; + } + } + + return { configPath, showHelp, showVersion }; +} + +function getVersion(): string { + return packageJson.version; +} + +function printHelp() { + const version = getVersion(); + console.log(` +Usage: trilium-edit-docs [options] + +Options: + -c, --config Path to the configuration file (default: edit-docs-config.yaml in the root) + -h, --help Display this help message + -v, --version Display version information + +Version: ${version} +`); +} + +function printVersion() { + const version = getVersion(); + console.log(version); +} + +const { configPath, showHelp, showVersion } = parseArgs(); + +if (showHelp) { + printHelp(); + process.exit(0); +} else if (showVersion) { + printVersion(); + process.exit(0); +} + +// Configuration variables to be initialized let BASE_URL: string; let NOTE_MAPPINGS: NoteMapping[]; // Load configuration from edit-docs-config.yaml async function loadConfig() { - const CONFIG_PATH = path.join(__dirname, "../../../edit-docs-config.yaml"); + const CONFIG_PATH = configPath + ? path.resolve(configPath) + : path.join(__dirname, "../../../edit-docs-config.yaml"); + const configContent = await fs.readFile(CONFIG_PATH, "utf-8"); const config = yaml.load(configContent) as Config; BASE_URL = config.baseUrl; - // Resolve all paths relative to the repository root - const REPO_ROOT = path.join(__dirname, "../../.."); + // Resolve all paths relative to the config file's directory (for flexibility with external configs) + const CONFIG_DIR = path.dirname(CONFIG_PATH); NOTE_MAPPINGS = config.noteMappings.map((mapping) => ({ ...mapping, - path: path.join(REPO_ROOT, mapping.path) + path: path.resolve(CONFIG_DIR, mapping.path) })); } - async function main() { await loadConfig(); const initializedPromise = startElectron(() => { diff --git a/scripts/electron-start.mts b/scripts/electron-start.mts index e1ed9df7e0..05277820a1 100644 --- a/scripts/electron-start.mts +++ b/scripts/electron-start.mts @@ -3,7 +3,8 @@ import { getElectronPath, isNixOS } from "./utils.mjs"; const LD_LIBRARY_PATH = isNixOS() && execSync("nix eval --raw nixpkgs#gcc.cc.lib").toString("utf-8") + "/lib"; -execSync(`${getElectronPath()} ${process.argv[2]} --no-sandbox`, { +const args = process.argv.slice(2); +execSync(`${getElectronPath()} ${args.join(" ")} --no-sandbox`, { stdio: "inherit", env: { ...process.env, diff --git a/scripts/update-version.ts b/scripts/update-version.ts index fd00ff35d2..d9e52abe45 100644 --- a/scripts/update-version.ts +++ b/scripts/update-version.ts @@ -26,7 +26,7 @@ function getVersion(packageJsonPath: string) { function main() { const version = getVersion(join(__dirname, "..", "package.json")); - for (const appName of ["server", "client", "desktop"]) { + for (const appName of ["server", "client", "desktop", "edit-docs"]) { patchPackageJson(join(__dirname, "..", "apps", appName, "package.json"), version); } From 5b37140ffac30272f681a631aa766b8ca22085de Mon Sep 17 00:00:00 2001 From: Wael Nasreddine Date: Sat, 10 Jan 2026 13:30:52 -0800 Subject: [PATCH 021/353] Fix race condition in edit-docs Electron ready event The edit-docs tool would hang on startup when the Electron 'ready' event fired before the event listener was registered. This race condition occurred because: 1. startElectron() creates a deferred promise and registers a 'ready' listener 2. The 'ready' event fires asynchronously at some point during app initialization 3. If async work (like config loading) delays the listener registration, Electron may already be ready when app.on('ready', ...) is called 4. Once fired, the 'ready' event doesn't fire again, leaving the listener waiting forever The fix checks electron.app.isReady() before registering the listener: - If already ready: execute the handler immediately - If not ready: register the listener as before This ensures the initialization sequence completes regardless of timing. The issue became apparent while working on making edit-docs reusable from other projects (see #8343), where config loading added enough async delay to consistently trigger the race condition. Related: https://github.com/TriliumNext/Trilium/issues/8343 --- apps/edit-docs/src/utils.ts | 30 +++++++++++++++++++----------- 1 file changed, 19 insertions(+), 11 deletions(-) diff --git a/apps/edit-docs/src/utils.ts b/apps/edit-docs/src/utils.ts index 708c36814b..84e62ba399 100644 --- a/apps/edit-docs/src/utils.ts +++ b/apps/edit-docs/src/utils.ts @@ -1,13 +1,14 @@ import cls from "@triliumnext/server/src/services/cls.js"; +import TaskContext from "@triliumnext/server/src/services/task_context.js"; +import windowService from "@triliumnext/server/src/services/window.js"; +import archiver, { type Archiver } from "archiver"; +import electron from "electron"; +import type { WriteStream } from "fs"; import fs from "fs/promises"; import fsExtra from "fs-extra"; import path from "path"; -import electron from "electron"; -import windowService from "@triliumnext/server/src/services/window.js"; -import archiver, { type Archiver } from "archiver"; -import type { WriteStream } from "fs"; -import TaskContext from "@triliumnext/server/src/services/task_context.js"; import { resolve } from "path"; + import { deferred, DeferredPromise } from "../../../packages/commons/src"; export function initializeDatabase(skipDemoDb: boolean) { @@ -32,10 +33,9 @@ export function initializeDatabase(skipDemoDb: boolean) { */ export function startElectron(callback: () => void): DeferredPromise { const initializedPromise = deferred(); - electron.app.on("ready", async () => { - await initializedPromise; - console.log("Electron is ready!"); + const readyHandler = async () => { + await initializedPromise; // Start the server. const startTriliumServer = (await import("@triliumnext/server/src/www.js")).default; @@ -45,7 +45,15 @@ export function startElectron(callback: () => void): DeferredPromise { await windowService.createMainWindow(electron.app); callback(); - }); + }; + + // Handle race condition: Electron ready event may have already fired + if (electron.app.isReady()) { + readyHandler(); + } else { + electron.app.on("ready", readyHandler); + } + return initializedPromise; } @@ -70,7 +78,7 @@ async function createImportZip(path: string) { zlib: { level: 0 } }); - console.log("Archive path is ", resolve(path)) + console.log("Archive path is ", resolve(path)); archive.directory(path, "/"); const outputStream = fsExtra.createWriteStream(inputFile); @@ -92,7 +100,7 @@ function waitForEnd(archive: Archiver, stream: WriteStream) { } export async function extractZip(zipFilePath: string, outputPath: string, ignoredFiles?: Set) { - const promise = deferred() + const promise = deferred(); setTimeout(async () => { // Then extract the zip. const { readZipFile, readContent } = (await import("@triliumnext/server/src/services/import/zip.js")); From 0273c64bbfd2dd1d0f72732d79a2546d2f156031 Mon Sep 17 00:00:00 2001 From: Wael Nasreddine Date: Sat, 10 Jan 2026 12:04:22 -0800 Subject: [PATCH 022/353] Build edit-docs as standalone package using makeApp Changed edit-docs from a simple wrapper script to a properly built Nix package using makeApp, similar to how desktop and server are built. Changes: - Added build script to apps/edit-docs/package.json - Created apps/edit-docs/scripts/build.ts based on desktop's build script - Added edit-docs:build task to root package.json - Changed flake.nix to use makeApp which: - Builds edit-docs with all dependencies bundled - Creates a standalone trilium-edit-docs executable - Can be installed with 'nix profile install' and run from any directory This makes edit-docs truly reusable - it can now be installed and run from any project without requiring the Trilium source tree. --- README.md | 11 +++++ apps/edit-docs/package.json | 2 + apps/edit-docs/scripts/build.ts | 40 ++++++++++++++++ .../spec/build-checks/artifacts.spec.ts | 48 +++++++++++++++++++ apps/edit-docs/src/edit-docs.ts | 23 +++++++-- apps/edit-docs/src/utils.ts | 32 +++++++------ apps/edit-docs/vitest.build.config.mts | 17 +++++++ flake.nix | 25 +++++++++- package.json | 3 +- 9 files changed, 181 insertions(+), 20 deletions(-) create mode 100644 apps/edit-docs/scripts/build.ts create mode 100644 apps/edit-docs/spec/build-checks/artifacts.spec.ts create mode 100644 apps/edit-docs/vitest.build.config.mts diff --git a/README.md b/README.md index 34664689bb..0fc8e562b3 100644 --- a/README.md +++ b/README.md @@ -165,6 +165,17 @@ pnpm install pnpm edit-docs:edit-docs ``` +Alternatively, if you have Nix installed: +```shell +# Run directly +nix run .#edit-docs + +# Or install to your profile +nix profile install .#edit-docs +trilium-edit-docs +``` + + ### Building the Executable Download the repository, install dependencies using `pnpm` and then build the desktop app for Windows: ```shell diff --git a/apps/edit-docs/package.json b/apps/edit-docs/package.json index 31d7e51ec1..2282522f74 100644 --- a/apps/edit-docs/package.json +++ b/apps/edit-docs/package.json @@ -16,6 +16,8 @@ "fs-extra": "11.3.3" }, "scripts": { + "build": "tsx scripts/build.ts", + "test-build": "vitest --config vitest.build.config.mts", "edit-docs": "cross-env TRILIUM_PORT=37741 TRILIUM_DATA_DIR=data TRILIUM_INTEGRATION_TEST=memory-no-store tsx ../../scripts/electron-start.mts src/edit-docs.ts", "edit-demo": "cross-env TRILIUM_PORT=37744 TRILIUM_DATA_DIR=data TRILIUM_INTEGRATION_TEST=memory-no-store DOCS_ROOT=../../../docs USER_GUIDE_ROOT=\"../../server/src/assets/doc_notes/en/User Guide\" tsx ../../scripts/electron-start.mts src/edit-demo.ts" } diff --git a/apps/edit-docs/scripts/build.ts b/apps/edit-docs/scripts/build.ts new file mode 100644 index 0000000000..251d96f7b7 --- /dev/null +++ b/apps/edit-docs/scripts/build.ts @@ -0,0 +1,40 @@ +import { writeFileSync } from "fs"; +import { join } from "path"; + +import BuildHelper from "../../../scripts/build-utils"; +import originalPackageJson from "../package.json" with { type: "json" }; + +const build = new BuildHelper("apps/edit-docs"); + +async function main() { + await build.buildBackend(["src/edit-docs.ts", "src/utils.ts"]); + + // Copy assets from server (needed for DB initialization) + build.copy("/apps/server/src/assets", "assets/"); + build.triggerBuildAndCopyTo("packages/share-theme", "share-theme/assets/"); + build.copy("/packages/share-theme/src/templates", "share-theme/templates/"); + build.copy("/node_modules/ckeditor5/dist/ckeditor5-content.css", "ckeditor5-content.css"); + build.buildFrontend(); + + // Copy node modules dependencies + build.copyNodeModules(["better-sqlite3", "bindings", "file-uri-to-path", "@electron/remote"]); + + generatePackageJson(); +} + +function generatePackageJson() { + const { version, author, license, description, dependencies, devDependencies } = originalPackageJson; + const packageJson = { + name: "trilium-edit-docs", + main: "edit-docs.cjs", + version, + author, + license, + description, + dependencies: {"better-sqlite3": dependencies["better-sqlite3"]}, + devDependencies: {electron: devDependencies.electron}, + }; + writeFileSync(join(build.outDir, "package.json"), JSON.stringify(packageJson, null, "\t"), "utf-8"); +} + +main(); diff --git a/apps/edit-docs/spec/build-checks/artifacts.spec.ts b/apps/edit-docs/spec/build-checks/artifacts.spec.ts new file mode 100644 index 0000000000..ae2e171965 --- /dev/null +++ b/apps/edit-docs/spec/build-checks/artifacts.spec.ts @@ -0,0 +1,48 @@ +import { globSync } from "fs"; +import { join } from "path"; +import { it, describe, expect } from "vitest"; + +describe("Check artifacts are present", () => { + const distPath = join(__dirname, "../../dist"); + + it("has the necessary node modules", async () => { + const paths = [ + "node_modules/better-sqlite3", + "node_modules/bindings", + "node_modules/file-uri-to-path", + "node_modules/@electron/remote" + ]; + + ensurePathsExist(paths); + }); + + it("includes the client", async () => { + const paths = [ + "public/assets", + "public/fonts", + "public/node_modules", + "public/src", + "public/stylesheets", + "public/translations" + ]; + + ensurePathsExist(paths); + }); + + it("includes necessary assets", async () => { + const paths = [ + "assets", + "share-theme", + "ckeditor5-content.css" + ]; + + ensurePathsExist(paths); + }); + + function ensurePathsExist(paths: string[]) { + for (const path of paths) { + const result = globSync(join(distPath, path, "**")); + expect(result, path).not.toHaveLength(0); + } + } +}); diff --git a/apps/edit-docs/src/edit-docs.ts b/apps/edit-docs/src/edit-docs.ts index c15a2f0863..8cb6b898dd 100644 --- a/apps/edit-docs/src/edit-docs.ts +++ b/apps/edit-docs/src/edit-docs.ts @@ -36,6 +36,10 @@ function parseArgs() { for (let i = 0; i < args.length; i++) { if (args[i] === '--config' || args[i] === '-c') { configPath = args[i + 1]; + if (!configPath) { + console.error("Error: --config/-c requires a path argument"); + process.exit(1); + } i++; // Skip the next argument as it's the value } else if (args[i] === '--help' || args[i] === '-h') { showHelp = true; @@ -86,9 +90,15 @@ let NOTE_MAPPINGS: NoteMapping[]; // Load configuration from edit-docs-config.yaml async function loadConfig() { - const CONFIG_PATH = configPath + let CONFIG_PATH = configPath ? path.resolve(configPath) - : path.join(__dirname, "../../../edit-docs-config.yaml"); + : path.join(process.cwd(), "edit-docs-config.yaml"); + + const exists = await fs.access(CONFIG_PATH).then(() => true).catch(() => false); + if (!exists && !configPath) { + // Fallback to project root if running from within a subproject + CONFIG_PATH = path.join(__dirname, "../../../edit-docs-config.yaml"); + } const configContent = await fs.readFile(CONFIG_PATH, "utf-8"); const config = yaml.load(configContent) as Config; @@ -106,12 +116,18 @@ async function main() { await loadConfig(); const initializedPromise = startElectron(() => { // Wait for the import to be finished and the application to be loaded before we listen to changes. - setTimeout(() => registerHandlers(), 10_000); + setTimeout(() => { + registerHandlers(); + }, 10_000); }); await initializeTranslations(); await initializeDatabase(true); + // Wait for becca to be loaded before importing data + const beccaLoader = await import("@triliumnext/server/src/becca/becca_loader.js"); + await beccaLoader.beccaLoaded; + cls.init(async () => { for (const mapping of NOTE_MAPPINGS) { if (!mapping.exportOnly) { @@ -248,7 +264,6 @@ async function registerHandlers() { return; } - console.log("Got entity changed", e.entityName, e.entity.title); debouncer(); }); } diff --git a/apps/edit-docs/src/utils.ts b/apps/edit-docs/src/utils.ts index 84e62ba399..3b41a70fd5 100644 --- a/apps/edit-docs/src/utils.ts +++ b/apps/edit-docs/src/utils.ts @@ -7,18 +7,21 @@ import type { WriteStream } from "fs"; import fs from "fs/promises"; import fsExtra from "fs-extra"; import path from "path"; -import { resolve } from "path"; -import { deferred, DeferredPromise } from "../../../packages/commons/src"; +import { deferred, type DeferredPromise } from "../../../packages/commons/src/index.js"; -export function initializeDatabase(skipDemoDb: boolean) { - return new Promise(async (resolve) => { - const sqlInit = (await import("@triliumnext/server/src/services/sql_init.js")).default; - cls.init(async () => { - if (!sqlInit.isDbInitialized()) { - await sqlInit.createInitialDatabase(skipDemoDb); - } - resolve(); +export function initializeDatabase(skipDemoDb: boolean): Promise { + return new Promise((resolve) => { + import("@triliumnext/server/src/services/sql_init.js").then((m) => { + const sqlInit = m.default; + cls.init(async () => { + if (!sqlInit.isDbInitialized()) { + sqlInit.createInitialDatabase(skipDemoDb).then(() => resolve()); + } else { + sqlInit.dbReady.resolve(); + resolve(); + } + }); }); }); } @@ -78,7 +81,6 @@ async function createImportZip(path: string) { zlib: { level: 0 } }); - console.log("Archive path is ", resolve(path)); archive.directory(path, "/"); const outputStream = fsExtra.createWriteStream(inputFile); @@ -93,9 +95,11 @@ async function createImportZip(path: string) { } function waitForEnd(archive: Archiver, stream: WriteStream) { - return new Promise(async (res, rej) => { - stream.on("finish", () => res()); - await archive.finalize(); + return new Promise((res, rej) => { + stream.on("finish", res); + stream.on("error", rej); + archive.on("error", rej); + archive.finalize().catch(rej); }); } diff --git a/apps/edit-docs/vitest.build.config.mts b/apps/edit-docs/vitest.build.config.mts new file mode 100644 index 0000000000..9dff36fc07 --- /dev/null +++ b/apps/edit-docs/vitest.build.config.mts @@ -0,0 +1,17 @@ +/// +import { defineConfig } from 'vite'; + +export default defineConfig(() => ({ + root: __dirname, + cacheDir: '../../node_modules/.vite/apps/edit-docs', + plugins: [], + test: { + watch: false, + globals: true, + environment: "node", + include: ['spec/build-checks/**'], + reporters: [ + "verbose" + ] + }, +})); diff --git a/flake.nix b/flake.nix index 72cc8946b1..ed1548b9ee 100644 --- a/flake.nix +++ b/flake.nix @@ -112,7 +112,7 @@ nodejs.python removeReferencesTo ] - ++ lib.optionals (app == "desktop") [ + ++ lib.optionals (app == "desktop" || app == "edit-docs") [ copyDesktopItems # required for NIXOS_OZONE_WL expansion # https://github.com/NixOS/nixpkgs/issues/172583 @@ -252,10 +252,33 @@ --add-flags $out/opt/trilium-server/main.cjs ''; }; + + edit-docs = makeApp { + app = "edit-docs"; + preBuildCommands = '' + export npm_config_nodedir=${electron.headers} + pnpm postinstall + ''; + buildTask = "edit-docs:build"; + mainProgram = "trilium-edit-docs"; + installCommands = '' + #remove-references-to -t ${electron.headers} apps/edit-docs/dist/node_modules/better-sqlite3/build/config.gypi + #remove-references-to -t ${nodejs.python} apps/edit-docs/dist/node_modules/better-sqlite3/build/config.gypi + + mkdir -p $out/{bin,opt/trilium-edit-docs} + cp --archive apps/edit-docs/dist/* $out/opt/trilium-edit-docs + makeShellWrapper ${lib.getExe electron} $out/bin/trilium-edit-docs \ + --set-default ELECTRON_IS_DEV 0 \ + --set TRILIUM_RESOURCE_DIR $out/opt/trilium-edit-docs \ + --add-flags $out/opt/trilium-edit-docs/edit-docs.cjs + ''; + }; + in { packages.desktop = desktop; packages.server = server; + packages.edit-docs = edit-docs; packages.default = desktop; diff --git a/package.json b/package.json index 95b5c13451..a6cc47c5f6 100644 --- a/package.json +++ b/package.json @@ -17,6 +17,8 @@ "desktop:start": "pnpm run --filter desktop dev", "desktop:build": "pnpm run --filter desktop build", "desktop:start-prod": "pnpm run --filter desktop start-prod", + "edit-docs:edit-docs": "pnpm run --filter edit-docs edit-docs", + "edit-docs:build": "pnpm run --filter edit-docs build", "website:start": "pnpm run --filter website dev", "website:build": "pnpm run --filter website build", "electron:build": "pnpm desktop:build", @@ -28,7 +30,6 @@ "chore:update-version": "tsx ./scripts/update-version.ts", "docs:build": "pnpm run --filter build-docs start", "docs:preview": "pnpm http-server site -p 9000", - "edit-docs:edit-docs": "pnpm run --filter edit-docs edit-docs", "edit-docs:edit-demo": "pnpm run --filter edit-docs edit-demo", "test:all": "pnpm test:parallel && pnpm test:sequential", "test:parallel": "pnpm --filter=!server --filter=!ckeditor5-mermaid --filter=!ckeditor5-math --parallel test", From c3623a15fb2381c6f17025c8cffce072f83bb064 Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Tue, 13 Jan 2026 10:09:51 +0200 Subject: [PATCH 023/353] fix(ci): website workflow failing due to postinstall scripts --- .github/workflows/website.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/website.yml b/.github/workflows/website.yml index cb141375c0..ad04a68c39 100644 --- a/.github/workflows/website.yml +++ b/.github/workflows/website.yml @@ -34,7 +34,7 @@ jobs: cache: "pnpm" - name: Install dependencies - run: pnpm install --filter website --frozen-lockfile + run: pnpm install --filter website --frozen-lockfile --ignore-scripts - name: Build the website run: pnpm website:build From cb11955a447a574ec327a6d4771e21c6e55f97f9 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 13 Jan 2026 08:12:19 +0000 Subject: [PATCH 024/353] chore(deps): update vitest monorepo to v4.0.17 --- apps/website/package.json | 2 +- package.json | 8 +- packages/ckeditor5-admonition/package.json | 6 +- packages/ckeditor5-footnotes/package.json | 6 +- .../ckeditor5-keyboard-marker/package.json | 6 +- packages/ckeditor5-math/package.json | 6 +- packages/ckeditor5-mermaid/package.json | 6 +- pnpm-lock.yaml | 329 +++++++++--------- 8 files changed, 178 insertions(+), 191 deletions(-) diff --git a/apps/website/package.json b/apps/website/package.json index e9328ef026..23b5dc94ce 100644 --- a/apps/website/package.json +++ b/apps/website/package.json @@ -23,7 +23,7 @@ "typescript": "5.9.3", "user-agent-data-types": "0.4.2", "vite": "7.3.1", - "vitest": "4.0.16" + "vitest": "4.0.17" }, "eslintConfig": { "extends": "preact" diff --git a/package.json b/package.json index 6be93429cb..435ea1c23d 100644 --- a/package.json +++ b/package.json @@ -49,9 +49,9 @@ "@triliumnext/server": "workspace:*", "@types/express": "5.0.6", "@types/node": "24.10.7", - "@vitest/browser-webdriverio": "4.0.16", - "@vitest/coverage-v8": "4.0.16", - "@vitest/ui": "4.0.16", + "@vitest/browser-webdriverio": "4.0.17", + "@vitest/coverage-v8": "4.0.17", + "@vitest/ui": "4.0.17", "chalk": "5.6.2", "cross-env": "10.1.0", "dpdm": "3.14.0", @@ -74,7 +74,7 @@ "upath": "2.0.1", "vite": "7.3.1", "vite-plugin-dts": "4.5.4", - "vitest": "4.0.16" + "vitest": "4.0.17" }, "license": "AGPL-3.0-only", "author": { diff --git a/packages/ckeditor5-admonition/package.json b/packages/ckeditor5-admonition/package.json index 652f221b9e..428d3eb45e 100644 --- a/packages/ckeditor5-admonition/package.json +++ b/packages/ckeditor5-admonition/package.json @@ -26,8 +26,8 @@ "@ckeditor/ckeditor5-package-tools": "5.0.1", "@typescript-eslint/eslint-plugin": "8.53.0", "@typescript-eslint/parser": "8.53.0", - "@vitest/browser": "4.0.16", - "@vitest/coverage-istanbul": "4.0.16", + "@vitest/browser": "4.0.17", + "@vitest/coverage-istanbul": "4.0.17", "ckeditor5": "47.3.0", "eslint": "9.39.2", "eslint-config-ckeditor5": ">=9.1.0", @@ -38,7 +38,7 @@ "ts-node": "10.9.2", "typescript": "5.9.3", "vite-plugin-svgo": "2.0.0", - "vitest": "4.0.16", + "vitest": "4.0.17", "webdriverio": "9.23.0" }, "peerDependencies": { diff --git a/packages/ckeditor5-footnotes/package.json b/packages/ckeditor5-footnotes/package.json index e4433a18aa..ca48c2b891 100644 --- a/packages/ckeditor5-footnotes/package.json +++ b/packages/ckeditor5-footnotes/package.json @@ -27,8 +27,8 @@ "@ckeditor/ckeditor5-package-tools": "5.0.1", "@typescript-eslint/eslint-plugin": "8.53.0", "@typescript-eslint/parser": "8.53.0", - "@vitest/browser": "4.0.16", - "@vitest/coverage-istanbul": "4.0.16", + "@vitest/browser": "4.0.17", + "@vitest/coverage-istanbul": "4.0.17", "ckeditor5": "47.3.0", "eslint": "9.39.2", "eslint-config-ckeditor5": ">=9.1.0", @@ -39,7 +39,7 @@ "ts-node": "10.9.2", "typescript": "5.9.3", "vite-plugin-svgo": "2.0.0", - "vitest": "4.0.16", + "vitest": "4.0.17", "webdriverio": "9.23.0" }, "peerDependencies": { diff --git a/packages/ckeditor5-keyboard-marker/package.json b/packages/ckeditor5-keyboard-marker/package.json index 4aa0bfbfea..8757680a99 100644 --- a/packages/ckeditor5-keyboard-marker/package.json +++ b/packages/ckeditor5-keyboard-marker/package.json @@ -29,8 +29,8 @@ "@ckeditor/ckeditor5-package-tools": "5.0.1", "@typescript-eslint/eslint-plugin": "8.53.0", "@typescript-eslint/parser": "8.53.0", - "@vitest/browser": "4.0.16", - "@vitest/coverage-istanbul": "4.0.16", + "@vitest/browser": "4.0.17", + "@vitest/coverage-istanbul": "4.0.17", "ckeditor5": "47.3.0", "eslint": "9.39.2", "eslint-config-ckeditor5": ">=9.1.0", @@ -41,7 +41,7 @@ "ts-node": "10.9.2", "typescript": "5.9.3", "vite-plugin-svgo": "2.0.0", - "vitest": "4.0.16", + "vitest": "4.0.17", "webdriverio": "9.23.0" }, "peerDependencies": { diff --git a/packages/ckeditor5-math/package.json b/packages/ckeditor5-math/package.json index 11384472fe..8a49aba9ca 100644 --- a/packages/ckeditor5-math/package.json +++ b/packages/ckeditor5-math/package.json @@ -29,8 +29,8 @@ "@ckeditor/ckeditor5-package-tools": "5.0.1", "@typescript-eslint/eslint-plugin": "8.53.0", "@typescript-eslint/parser": "8.53.0", - "@vitest/browser": "4.0.16", - "@vitest/coverage-istanbul": "4.0.16", + "@vitest/browser": "4.0.17", + "@vitest/coverage-istanbul": "4.0.17", "ckeditor5": "47.3.0", "eslint": "9.39.2", "eslint-config-ckeditor5": ">=9.1.0", @@ -41,7 +41,7 @@ "ts-node": "10.9.2", "typescript": "5.9.3", "vite-plugin-svgo": "2.0.0", - "vitest": "4.0.16", + "vitest": "4.0.17", "webdriverio": "9.23.0" }, "peerDependencies": { diff --git a/packages/ckeditor5-mermaid/package.json b/packages/ckeditor5-mermaid/package.json index 6743723361..371301d7fc 100644 --- a/packages/ckeditor5-mermaid/package.json +++ b/packages/ckeditor5-mermaid/package.json @@ -29,8 +29,8 @@ "@ckeditor/ckeditor5-package-tools": "5.0.1", "@typescript-eslint/eslint-plugin": "8.53.0", "@typescript-eslint/parser": "8.53.0", - "@vitest/browser": "4.0.16", - "@vitest/coverage-istanbul": "4.0.16", + "@vitest/browser": "4.0.17", + "@vitest/coverage-istanbul": "4.0.17", "ckeditor5": "47.3.0", "eslint": "9.39.2", "eslint-config-ckeditor5": ">=9.1.0", @@ -41,7 +41,7 @@ "ts-node": "10.9.2", "typescript": "5.9.3", "vite-plugin-svgo": "2.0.0", - "vitest": "4.0.16", + "vitest": "4.0.17", "webdriverio": "9.23.0" }, "peerDependencies": { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 3b8763f475..31c81664b9 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -53,14 +53,14 @@ importers: specifier: 24.10.7 version: 24.10.7 '@vitest/browser-webdriverio': - specifier: 4.0.16 - version: 4.0.16(bufferutil@4.0.9)(msw@2.7.5(@types/node@24.10.7)(typescript@5.9.3))(utf-8-validate@6.0.5)(vite@7.3.1(@types/node@24.10.7)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1))(vitest@4.0.16)(webdriverio@9.23.0(bufferutil@4.0.9)(utf-8-validate@6.0.5)) + specifier: 4.0.17 + version: 4.0.17(bufferutil@4.0.9)(msw@2.7.5(@types/node@24.10.7)(typescript@5.9.3))(utf-8-validate@6.0.5)(vite@7.3.1(@types/node@24.10.7)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1))(vitest@4.0.17)(webdriverio@9.23.0(bufferutil@4.0.9)(utf-8-validate@6.0.5)) '@vitest/coverage-v8': - specifier: 4.0.16 - version: 4.0.16(@vitest/browser@4.0.16(bufferutil@4.0.9)(msw@2.7.5(@types/node@24.10.7)(typescript@5.9.3))(utf-8-validate@6.0.5)(vite@7.3.1(@types/node@24.10.7)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1))(vitest@4.0.16))(vitest@4.0.16) + specifier: 4.0.17 + version: 4.0.17(@vitest/browser@4.0.17(bufferutil@4.0.9)(msw@2.7.5(@types/node@24.10.7)(typescript@5.9.3))(utf-8-validate@6.0.5)(vite@7.3.1(@types/node@24.10.7)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1))(vitest@4.0.17))(vitest@4.0.17) '@vitest/ui': - specifier: 4.0.16 - version: 4.0.16(vitest@4.0.16) + specifier: 4.0.17 + version: 4.0.17(vitest@4.0.17) chalk: specifier: 5.6.2 version: 5.6.2 @@ -128,8 +128,8 @@ importers: specifier: 4.5.4 version: 4.5.4(@types/node@24.10.7)(rollup@4.52.0)(typescript@5.9.3)(vite@7.3.1(@types/node@24.10.7)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1)) vitest: - specifier: 4.0.16 - version: 4.0.16(@opentelemetry/api@1.9.0)(@types/node@24.10.7)(@vitest/browser-webdriverio@4.0.16)(@vitest/ui@4.0.16)(happy-dom@20.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.2)(msw@2.7.5(@types/node@24.10.7)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) + specifier: 4.0.17 + version: 4.0.17(@opentelemetry/api@1.9.0)(@types/node@24.10.7)(@vitest/browser-webdriverio@4.0.17)(@vitest/ui@4.0.17)(happy-dom@20.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.2)(msw@2.7.5(@types/node@24.10.7)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) apps/build-docs: devDependencies: @@ -851,8 +851,8 @@ importers: specifier: 7.3.1 version: 7.3.1(@types/node@24.10.7)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) vitest: - specifier: 4.0.16 - version: 4.0.16(@opentelemetry/api@1.9.0)(@types/node@24.10.7)(@vitest/browser-webdriverio@4.0.16)(@vitest/ui@4.0.16)(happy-dom@20.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.2)(msw@2.7.5(@types/node@24.10.7)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) + specifier: 4.0.17 + version: 4.0.17(@opentelemetry/api@1.9.0)(@types/node@24.10.7)(@vitest/browser-webdriverio@4.0.17)(@vitest/ui@4.0.17)(happy-dom@20.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.2)(msw@2.7.5(@types/node@24.10.7)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) packages/ckeditor5: dependencies: @@ -906,11 +906,11 @@ importers: specifier: 8.53.0 version: 8.53.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) '@vitest/browser': - specifier: 4.0.16 - version: 4.0.16(bufferutil@4.0.9)(msw@2.7.5(@types/node@24.10.7)(typescript@5.9.3))(utf-8-validate@6.0.5)(vite@7.3.1(@types/node@24.10.7)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1))(vitest@4.0.16) + specifier: 4.0.17 + version: 4.0.17(bufferutil@4.0.9)(msw@2.7.5(@types/node@24.10.7)(typescript@5.9.3))(utf-8-validate@6.0.5)(vite@7.3.1(@types/node@24.10.7)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1))(vitest@4.0.17) '@vitest/coverage-istanbul': - specifier: 4.0.16 - version: 4.0.16(vitest@4.0.16) + specifier: 4.0.17 + version: 4.0.17(vitest@4.0.17) ckeditor5: specifier: 47.3.0 version: 47.3.0 @@ -942,8 +942,8 @@ importers: specifier: 2.0.0 version: 2.0.0(typescript@5.9.3)(vite@7.3.1(@types/node@24.10.7)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1)) vitest: - specifier: 4.0.16 - version: 4.0.16(@opentelemetry/api@1.9.0)(@types/node@24.10.7)(@vitest/browser-webdriverio@4.0.16)(@vitest/ui@4.0.16)(happy-dom@20.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.2)(msw@2.7.5(@types/node@24.10.7)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) + specifier: 4.0.17 + version: 4.0.17(@opentelemetry/api@1.9.0)(@types/node@24.10.7)(@vitest/browser-webdriverio@4.0.17)(@vitest/ui@4.0.17)(happy-dom@20.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.2)(msw@2.7.5(@types/node@24.10.7)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) webdriverio: specifier: 9.23.0 version: 9.23.0(bufferutil@4.0.9)(utf-8-validate@6.0.5) @@ -966,11 +966,11 @@ importers: specifier: 8.53.0 version: 8.53.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) '@vitest/browser': - specifier: 4.0.16 - version: 4.0.16(bufferutil@4.0.9)(msw@2.7.5(@types/node@24.10.7)(typescript@5.9.3))(utf-8-validate@6.0.5)(vite@7.3.1(@types/node@24.10.7)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1))(vitest@4.0.16) + specifier: 4.0.17 + version: 4.0.17(bufferutil@4.0.9)(msw@2.7.5(@types/node@24.10.7)(typescript@5.9.3))(utf-8-validate@6.0.5)(vite@7.3.1(@types/node@24.10.7)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1))(vitest@4.0.17) '@vitest/coverage-istanbul': - specifier: 4.0.16 - version: 4.0.16(vitest@4.0.16) + specifier: 4.0.17 + version: 4.0.17(vitest@4.0.17) ckeditor5: specifier: 47.3.0 version: 47.3.0 @@ -1002,8 +1002,8 @@ importers: specifier: 2.0.0 version: 2.0.0(typescript@5.9.3)(vite@7.3.1(@types/node@24.10.7)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1)) vitest: - specifier: 4.0.16 - version: 4.0.16(@opentelemetry/api@1.9.0)(@types/node@24.10.7)(@vitest/browser-webdriverio@4.0.16)(@vitest/ui@4.0.16)(happy-dom@20.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.2)(msw@2.7.5(@types/node@24.10.7)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) + specifier: 4.0.17 + version: 4.0.17(@opentelemetry/api@1.9.0)(@types/node@24.10.7)(@vitest/browser-webdriverio@4.0.17)(@vitest/ui@4.0.17)(happy-dom@20.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.2)(msw@2.7.5(@types/node@24.10.7)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) webdriverio: specifier: 9.23.0 version: 9.23.0(bufferutil@4.0.9)(utf-8-validate@6.0.5) @@ -1026,11 +1026,11 @@ importers: specifier: 8.53.0 version: 8.53.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) '@vitest/browser': - specifier: 4.0.16 - version: 4.0.16(bufferutil@4.0.9)(msw@2.7.5(@types/node@24.10.7)(typescript@5.9.3))(utf-8-validate@6.0.5)(vite@7.3.1(@types/node@24.10.7)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1))(vitest@4.0.16) + specifier: 4.0.17 + version: 4.0.17(bufferutil@4.0.9)(msw@2.7.5(@types/node@24.10.7)(typescript@5.9.3))(utf-8-validate@6.0.5)(vite@7.3.1(@types/node@24.10.7)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1))(vitest@4.0.17) '@vitest/coverage-istanbul': - specifier: 4.0.16 - version: 4.0.16(vitest@4.0.16) + specifier: 4.0.17 + version: 4.0.17(vitest@4.0.17) ckeditor5: specifier: 47.3.0 version: 47.3.0 @@ -1062,8 +1062,8 @@ importers: specifier: 2.0.0 version: 2.0.0(typescript@5.9.3)(vite@7.3.1(@types/node@24.10.7)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1)) vitest: - specifier: 4.0.16 - version: 4.0.16(@opentelemetry/api@1.9.0)(@types/node@24.10.7)(@vitest/browser-webdriverio@4.0.16)(@vitest/ui@4.0.16)(happy-dom@20.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.2)(msw@2.7.5(@types/node@24.10.7)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) + specifier: 4.0.17 + version: 4.0.17(@opentelemetry/api@1.9.0)(@types/node@24.10.7)(@vitest/browser-webdriverio@4.0.17)(@vitest/ui@4.0.17)(happy-dom@20.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.2)(msw@2.7.5(@types/node@24.10.7)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) webdriverio: specifier: 9.23.0 version: 9.23.0(bufferutil@4.0.9)(utf-8-validate@6.0.5) @@ -1093,11 +1093,11 @@ importers: specifier: 8.53.0 version: 8.53.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) '@vitest/browser': - specifier: 4.0.16 - version: 4.0.16(bufferutil@4.0.9)(msw@2.7.5(@types/node@24.10.7)(typescript@5.9.3))(utf-8-validate@6.0.5)(vite@7.3.1(@types/node@24.10.7)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1))(vitest@4.0.16) + specifier: 4.0.17 + version: 4.0.17(bufferutil@4.0.9)(msw@2.7.5(@types/node@24.10.7)(typescript@5.9.3))(utf-8-validate@6.0.5)(vite@7.3.1(@types/node@24.10.7)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1))(vitest@4.0.17) '@vitest/coverage-istanbul': - specifier: 4.0.16 - version: 4.0.16(vitest@4.0.16) + specifier: 4.0.17 + version: 4.0.17(vitest@4.0.17) ckeditor5: specifier: 47.3.0 version: 47.3.0 @@ -1129,8 +1129,8 @@ importers: specifier: 2.0.0 version: 2.0.0(typescript@5.9.3)(vite@7.3.1(@types/node@24.10.7)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1)) vitest: - specifier: 4.0.16 - version: 4.0.16(@opentelemetry/api@1.9.0)(@types/node@24.10.7)(@vitest/browser-webdriverio@4.0.16)(@vitest/ui@4.0.16)(happy-dom@20.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.2)(msw@2.7.5(@types/node@24.10.7)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) + specifier: 4.0.17 + version: 4.0.17(@opentelemetry/api@1.9.0)(@types/node@24.10.7)(@vitest/browser-webdriverio@4.0.17)(@vitest/ui@4.0.17)(happy-dom@20.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.2)(msw@2.7.5(@types/node@24.10.7)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) webdriverio: specifier: 9.23.0 version: 9.23.0(bufferutil@4.0.9)(utf-8-validate@6.0.5) @@ -1160,11 +1160,11 @@ importers: specifier: 8.53.0 version: 8.53.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) '@vitest/browser': - specifier: 4.0.16 - version: 4.0.16(bufferutil@4.0.9)(msw@2.7.5(@types/node@24.10.7)(typescript@5.9.3))(utf-8-validate@6.0.5)(vite@7.3.1(@types/node@24.10.7)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1))(vitest@4.0.16) + specifier: 4.0.17 + version: 4.0.17(bufferutil@4.0.9)(msw@2.7.5(@types/node@24.10.7)(typescript@5.9.3))(utf-8-validate@6.0.5)(vite@7.3.1(@types/node@24.10.7)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1))(vitest@4.0.17) '@vitest/coverage-istanbul': - specifier: 4.0.16 - version: 4.0.16(vitest@4.0.16) + specifier: 4.0.17 + version: 4.0.17(vitest@4.0.17) ckeditor5: specifier: 47.3.0 version: 47.3.0 @@ -1196,8 +1196,8 @@ importers: specifier: 2.0.0 version: 2.0.0(typescript@5.9.3)(vite@7.3.1(@types/node@24.10.7)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1)) vitest: - specifier: 4.0.16 - version: 4.0.16(@opentelemetry/api@1.9.0)(@types/node@24.10.7)(@vitest/browser-webdriverio@4.0.16)(@vitest/ui@4.0.16)(happy-dom@20.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.2)(msw@2.7.5(@types/node@24.10.7)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) + specifier: 4.0.17 + version: 4.0.17(@opentelemetry/api@1.9.0)(@types/node@24.10.7)(@vitest/browser-webdriverio@4.0.17)(@vitest/ui@4.0.17)(happy-dom@20.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.2)(msw@2.7.5(@types/node@24.10.7)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) webdriverio: specifier: 9.23.0 version: 9.23.0(bufferutil@4.0.9)(utf-8-validate@6.0.5) @@ -5769,36 +5769,36 @@ packages: resolution: {integrity: sha512-ir6xo6HLy3TVn4lVJ+9fOOcq8vvgMmcXoSP/mM+l1CTKKJmd0hzXqNkZ1CYyz7PiRhLPUC6fprmUuA7rnVC87g==} engines: {node: '>=16'} - '@vitest/browser-webdriverio@4.0.16': - resolution: {integrity: sha512-DE0dCXQMtqMJJ0NruA0LTawHa4kPnNGfWYQh1r20QeD5oIDNbggpL4/jy58Wn8OcruaEGEHTKEWdaNOhdHefsg==} + '@vitest/browser-webdriverio@4.0.17': + resolution: {integrity: sha512-0u1C2yW5J9wt7vrkZ5+VTj6+Ckz4LKV3SBWjk55clK5Earqh24c1tv+VdRW1ZSxlzJ6gjeAm/YoFM7MMq6tFHw==} peerDependencies: - vitest: 4.0.16 + vitest: 4.0.17 webdriverio: '*' - '@vitest/browser@4.0.16': - resolution: {integrity: sha512-t4toy8X/YTnjYEPoY0pbDBg3EvDPg1elCDrfc+VupPHwoN/5/FNQ8Z+xBYIaEnOE2vVEyKwqYBzZ9h9rJtZVcg==} + '@vitest/browser@4.0.17': + resolution: {integrity: sha512-cgf2JZk2fv5or3efmOrRJe1V9Md89BPgz4ntzbf84yAb+z2hW6niaGFinl9aFzPZ1q3TGfWZQWZ9gXTFThs2Qw==} peerDependencies: - vitest: 4.0.16 + vitest: 4.0.17 - '@vitest/coverage-istanbul@4.0.16': - resolution: {integrity: sha512-CLyueXIHewDzmov97rGW/RNtg++UBwdtY/F9PZbEDvHlX16JWVyolg7OeGXZS3xkuuoaZMheef7luDFCoC6vsQ==} + '@vitest/coverage-istanbul@4.0.17': + resolution: {integrity: sha512-ayJXDFjASfKRwe4MlBxnC55busMQNxlWQu8i13q2V7/DT1KKUIfIqLgAphnBclqLmi/oAIC4JHcBF6GWZ3/EeQ==} peerDependencies: - vitest: 4.0.16 + vitest: 4.0.17 - '@vitest/coverage-v8@4.0.16': - resolution: {integrity: sha512-2rNdjEIsPRzsdu6/9Eq0AYAzYdpP6Bx9cje9tL3FE5XzXRQF1fNU9pe/1yE8fCrS0HD+fBtt6gLPh6LI57tX7A==} + '@vitest/coverage-v8@4.0.17': + resolution: {integrity: sha512-/6zU2FLGg0jsd+ePZcwHRy3+WpNTBBhDY56P4JTRqUN/Dp6CvOEa9HrikcQ4KfV2b2kAHUFB4dl1SuocWXSFEw==} peerDependencies: - '@vitest/browser': 4.0.16 - vitest: 4.0.16 + '@vitest/browser': 4.0.17 + vitest: 4.0.17 peerDependenciesMeta: '@vitest/browser': optional: true - '@vitest/expect@4.0.16': - resolution: {integrity: sha512-eshqULT2It7McaJkQGLkPjPjNph+uevROGuIMJdG3V+0BSR2w9u6J9Lwu+E8cK5TETlfou8GRijhafIMhXsimA==} + '@vitest/expect@4.0.17': + resolution: {integrity: sha512-mEoqP3RqhKlbmUmntNDDCJeTDavDR+fVYkSOw8qRwJFaW/0/5zA9zFeTrHqNtcmwh6j26yMmwx2PqUDPzt5ZAQ==} - '@vitest/mocker@4.0.16': - resolution: {integrity: sha512-yb6k4AZxJTB+q9ycAvsoxGn+j/po0UaPgajllBgt1PzoMAAmJGYFdDk0uCcRcxb3BrME34I6u8gHZTQlkqSZpg==} + '@vitest/mocker@4.0.17': + resolution: {integrity: sha512-+ZtQhLA3lDh1tI2wxe3yMsGzbp7uuJSWBM1iTIKCbppWTSBN09PUC+L+fyNlQApQoR+Ps8twt2pbSSXg2fQVEQ==} peerDependencies: msw: ^2.4.9 vite: ^6.0.0 || ^7.0.0-0 @@ -5808,25 +5808,25 @@ packages: vite: optional: true - '@vitest/pretty-format@4.0.16': - resolution: {integrity: sha512-eNCYNsSty9xJKi/UdVD8Ou16alu7AYiS2fCPRs0b1OdhJiV89buAXQLpTbe+X8V9L6qrs9CqyvU7OaAopJYPsA==} + '@vitest/pretty-format@4.0.17': + resolution: {integrity: sha512-Ah3VAYmjcEdHg6+MwFE17qyLqBHZ+ni2ScKCiW2XrlSBV4H3Z7vYfPfz7CWQ33gyu76oc0Ai36+kgLU3rfF4nw==} - '@vitest/runner@4.0.16': - resolution: {integrity: sha512-VWEDm5Wv9xEo80ctjORcTQRJ539EGPB3Pb9ApvVRAY1U/WkHXmmYISqU5E79uCwcW7xYUV38gwZD+RV755fu3Q==} + '@vitest/runner@4.0.17': + resolution: {integrity: sha512-JmuQyf8aMWoo/LmNFppdpkfRVHJcsgzkbCA+/Bk7VfNH7RE6Ut2qxegeyx2j3ojtJtKIbIGy3h+KxGfYfk28YQ==} - '@vitest/snapshot@4.0.16': - resolution: {integrity: sha512-sf6NcrYhYBsSYefxnry+DR8n3UV4xWZwWxYbCJUt2YdvtqzSPR7VfGrY0zsv090DAbjFZsi7ZaMi1KnSRyK1XA==} + '@vitest/snapshot@4.0.17': + resolution: {integrity: sha512-npPelD7oyL+YQM2gbIYvlavlMVWUfNNGZPcu0aEUQXt7FXTuqhmgiYupPnAanhKvyP6Srs2pIbWo30K0RbDtRQ==} - '@vitest/spy@4.0.16': - resolution: {integrity: sha512-4jIOWjKP0ZUaEmJm00E0cOBLU+5WE0BpeNr3XN6TEF05ltro6NJqHWxXD0kA8/Zc8Nh23AT8WQxwNG+WeROupw==} + '@vitest/spy@4.0.17': + resolution: {integrity: sha512-I1bQo8QaP6tZlTomQNWKJE6ym4SHf3oLS7ceNjozxxgzavRAgZDc06T7kD8gb9bXKEgcLNt00Z+kZO6KaJ62Ew==} - '@vitest/ui@4.0.16': - resolution: {integrity: sha512-rkoPH+RqWopVxDnCBE/ysIdfQ2A7j1eDmW8tCxxrR9nnFBa9jKf86VgsSAzxBd1x+ny0GC4JgiD3SNfRHv3pOg==} + '@vitest/ui@4.0.17': + resolution: {integrity: sha512-hRDjg6dlDz7JlZAvjbiCdAJ3SDG+NH8tjZe21vjxfvT2ssYAn72SRXMge3dKKABm3bIJ3C+3wdunIdur8PHEAw==} peerDependencies: - vitest: 4.0.16 + vitest: 4.0.17 - '@vitest/utils@4.0.16': - resolution: {integrity: sha512-h8z9yYhV3e1LEfaQ3zdypIrnAg/9hguReGZoS7Gl0aBG5xgA410zBqECqmaF/+RkTggRsfnzc1XaAHA6bmUufA==} + '@vitest/utils@4.0.17': + resolution: {integrity: sha512-RG6iy+IzQpa9SB8HAFHJ9Y+pTzI+h8553MrciN9eC6TFBErqrQaTas4vG+MVj8S4uKk8uTT2p0vgZPnTdxd96w==} '@volar/language-core@2.4.13': resolution: {integrity: sha512-MnQJ7eKchJx5Oz+YdbqyFUk8BN6jasdJv31n/7r6/WwlOOv7qzvot6B66887l2ST3bUW4Mewml54euzpJWA6bg==} @@ -6232,8 +6232,8 @@ packages: resolution: {integrity: sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w==} engines: {node: '>=4'} - ast-v8-to-istanbul@0.3.8: - resolution: {integrity: sha512-szgSZqUxI5T8mLKvS7WTjF9is+MVbOeLADU73IseOcrqhxr/VAvy6wfoVE39KnKzA7JRhjF5eUagNlHwvZPlKQ==} + ast-v8-to-istanbul@0.3.10: + resolution: {integrity: sha512-p4K7vMz2ZSk3wN8l5o3y2bJAoZXT3VuJI5OLTATY/01CYWumWvwkUw0SqDBnNq6IiTO3qDa1eSQDibAV8g7XOQ==} astral-regex@2.0.0: resolution: {integrity: sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==} @@ -9422,10 +9422,6 @@ packages: resolution: {integrity: sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==} engines: {node: '>=10'} - istanbul-lib-source-maps@5.0.6: - resolution: {integrity: sha512-yg2d+Em4KizZC5niWhQaIomgf5WlL4vOOjZ5xGCmF8SnPE/mDWWXgvRExdcpCgh9lLRRa1/fSYp2ymmbJ1pI+A==} - engines: {node: '>=10'} - istanbul-reports@3.2.0: resolution: {integrity: sha512-HGYWWS/ehqTV3xN10i23tkPkpH46MLCIMFNCaaKNavAXTF1RkqxawEPtnjnGZ6XKSInBKkiOA5BKS+aZiY3AvA==} engines: {node: '>=8'} @@ -9997,9 +9993,6 @@ packages: magic-string@0.25.9: resolution: {integrity: sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==} - magic-string@0.30.18: - resolution: {integrity: sha512-yi8swmWbO17qHhwIBNeeZxTceJMeBvWJaId6dyvTSOwTipqeHhMhOrz6513r1sOKnpvQ7zkhlG8tPrpilwTxHQ==} - magic-string@0.30.21: resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==} @@ -13849,18 +13842,18 @@ packages: yaml: optional: true - vitest@4.0.16: - resolution: {integrity: sha512-E4t7DJ9pESL6E3I8nFjPa4xGUd3PmiWDLsDztS2qXSJWfHtbQnwAWylaBvSNY48I3vr8PTqIZlyK8TE3V3CA4Q==} + vitest@4.0.17: + resolution: {integrity: sha512-FQMeF0DJdWY0iOnbv466n/0BudNdKj1l5jYgl5JVTwjSsZSlqyXFt/9+1sEyhR6CLowbZpV7O1sCHrzBhucKKg==} engines: {node: ^20.0.0 || ^22.0.0 || >=24.0.0} hasBin: true peerDependencies: '@edge-runtime/vm': '*' '@opentelemetry/api': ^1.9.0 '@types/node': ^20.0.0 || ^22.0.0 || >=24.0.0 - '@vitest/browser-playwright': 4.0.16 - '@vitest/browser-preview': 4.0.16 - '@vitest/browser-webdriverio': 4.0.16 - '@vitest/ui': 4.0.16 + '@vitest/browser-playwright': 4.0.17 + '@vitest/browser-preview': 4.0.17 + '@vitest/browser-webdriverio': 4.0.17 + '@vitest/ui': 4.0.17 happy-dom: '*' jsdom: '*' peerDependenciesMeta: @@ -14815,15 +14808,15 @@ snapshots: '@babel/generator@7.28.3': dependencies: - '@babel/parser': 7.28.4 - '@babel/types': 7.28.4 + '@babel/parser': 7.28.5 + '@babel/types': 7.28.5 '@jridgewell/gen-mapping': 0.3.13 '@jridgewell/trace-mapping': 0.3.31 jsesc: 3.1.0 '@babel/helper-annotate-as-pure@7.27.3': dependencies: - '@babel/types': 7.28.1 + '@babel/types': 7.28.5 '@babel/helper-compilation-targets@7.27.2': dependencies: @@ -14838,7 +14831,7 @@ snapshots: '@babel/helper-module-imports@7.27.1': dependencies: '@babel/traverse': 7.28.0 - '@babel/types': 7.28.1 + '@babel/types': 7.28.5 transitivePeerDependencies: - supports-color @@ -14864,11 +14857,11 @@ snapshots: '@babel/helpers@7.27.6': dependencies: '@babel/template': 7.27.2 - '@babel/types': 7.28.4 + '@babel/types': 7.28.5 '@babel/parser@7.28.4': dependencies: - '@babel/types': 7.28.4 + '@babel/types': 7.28.5 '@babel/parser@7.28.5': dependencies: @@ -14907,8 +14900,8 @@ snapshots: '@babel/template@7.27.2': dependencies: '@babel/code-frame': 7.27.1 - '@babel/parser': 7.28.4 - '@babel/types': 7.28.4 + '@babel/parser': 7.28.5 + '@babel/types': 7.28.5 '@babel/traverse@7.28.0': dependencies: @@ -14927,9 +14920,9 @@ snapshots: '@babel/code-frame': 7.27.1 '@babel/generator': 7.28.3 '@babel/helper-globals': 7.28.0 - '@babel/parser': 7.28.4 + '@babel/parser': 7.28.5 '@babel/template': 7.27.2 - '@babel/types': 7.28.4 + '@babel/types': 7.28.5 debug: 4.4.3(supports-color@8.1.1) transitivePeerDependencies: - supports-color @@ -15022,8 +15015,6 @@ snapshots: '@ckeditor/ckeditor5-core': 47.3.0 '@ckeditor/ckeditor5-upload': 47.3.0 ckeditor5: 47.3.0 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-ai@47.3.0(bufferutil@4.0.9)(utf-8-validate@6.0.5)': dependencies: @@ -15164,16 +15155,12 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.3.0 '@ckeditor/ckeditor5-widget': 47.3.0 es-toolkit: 1.39.5 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-cloud-services@47.3.0': dependencies: '@ckeditor/ckeditor5-core': 47.3.0 '@ckeditor/ckeditor5-utils': 47.3.0 ckeditor5: 47.3.0 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-code-block@47.3.0(patch_hash=2361d8caad7d6b5bddacc3a3b4aa37dbfba260b1c1b22a450413a79c1bb1ce95)': dependencies: @@ -15366,8 +15353,6 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.3.0 ckeditor5: 47.3.0 es-toolkit: 1.39.5 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-editor-classic@47.3.0': dependencies: @@ -15377,8 +15362,6 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.3.0 ckeditor5: 47.3.0 es-toolkit: 1.39.5 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-editor-decoupled@47.3.0': dependencies: @@ -15388,8 +15371,6 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.3.0 ckeditor5: 47.3.0 es-toolkit: 1.39.5 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-editor-inline@47.3.0': dependencies: @@ -15399,8 +15380,6 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.3.0 ckeditor5: 47.3.0 es-toolkit: 1.39.5 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-editor-multi-root@47.3.0': dependencies: @@ -15479,6 +15458,8 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.3.0 '@ckeditor/ckeditor5-utils': 47.3.0 ckeditor5: 47.3.0 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-export-word@47.3.0': dependencies: @@ -15503,8 +15484,6 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.3.0 ckeditor5: 47.3.0 es-toolkit: 1.39.5 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-font@47.3.0': dependencies: @@ -15579,8 +15558,6 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.3.0 '@ckeditor/ckeditor5-widget': 47.3.0 ckeditor5: 47.3.0 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-html-embed@47.3.0': dependencies: @@ -15640,6 +15617,8 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.3.0 '@ckeditor/ckeditor5-utils': 47.3.0 ckeditor5: 47.3.0 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-indent@47.3.0': dependencies: @@ -15752,6 +15731,8 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.3.0 '@ckeditor/ckeditor5-widget': 47.3.0 ckeditor5: 47.3.0 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-mention@47.3.0(patch_hash=5981fb59ba35829e4dff1d39cf771000f8a8fdfa7a34b51d8af9549541f2d62d)': dependencies: @@ -15761,6 +15742,8 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.3.0 ckeditor5: 47.3.0 es-toolkit: 1.39.5 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-merge-fields@47.3.0': dependencies: @@ -15773,6 +15756,8 @@ snapshots: '@ckeditor/ckeditor5-widget': 47.3.0 ckeditor5: 47.3.0 es-toolkit: 1.39.5 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-minimap@47.3.0': dependencies: @@ -15781,6 +15766,8 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.3.0 '@ckeditor/ckeditor5-utils': 47.3.0 ckeditor5: 47.3.0 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-operations-compressor@47.3.0': dependencies: @@ -15835,6 +15822,8 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.3.0 '@ckeditor/ckeditor5-widget': 47.3.0 ckeditor5: 47.3.0 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-pagination@47.3.0': dependencies: @@ -15942,6 +15931,8 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.3.0 '@ckeditor/ckeditor5-utils': 47.3.0 ckeditor5: 47.3.0 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-slash-command@47.3.0': dependencies: @@ -15954,6 +15945,8 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.3.0 '@ckeditor/ckeditor5-utils': 47.3.0 ckeditor5: 47.3.0 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-source-editing-enhanced@47.3.0': dependencies: @@ -16001,6 +15994,8 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.3.0 ckeditor5: 47.3.0 es-toolkit: 1.39.5 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-table@47.3.0': dependencies: @@ -16013,6 +16008,8 @@ snapshots: '@ckeditor/ckeditor5-widget': 47.3.0 ckeditor5: 47.3.0 es-toolkit: 1.39.5 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-template@47.3.0': dependencies: @@ -16087,6 +16084,8 @@ snapshots: '@ckeditor/ckeditor5-icons': 47.3.0 '@ckeditor/ckeditor5-ui': 47.3.0 '@ckeditor/ckeditor5-utils': 47.3.0 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-upload@47.3.0': dependencies: @@ -16123,6 +16122,8 @@ snapshots: '@ckeditor/ckeditor5-engine': 47.3.0 '@ckeditor/ckeditor5-utils': 47.3.0 es-toolkit: 1.39.5 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-widget@47.3.0': dependencies: @@ -16142,6 +16143,8 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.3.0 ckeditor5: 47.3.0 es-toolkit: 1.39.5 + transitivePeerDependencies: + - supports-color '@codemirror/autocomplete@6.18.6': dependencies: @@ -20503,10 +20506,10 @@ snapshots: - bufferutil - utf-8-validate - '@vitest/browser-webdriverio@4.0.16(bufferutil@4.0.9)(msw@2.7.5(@types/node@24.10.7)(typescript@5.9.3))(utf-8-validate@6.0.5)(vite@7.3.1(@types/node@24.10.7)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1))(vitest@4.0.16)(webdriverio@9.23.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))': + '@vitest/browser-webdriverio@4.0.17(bufferutil@4.0.9)(msw@2.7.5(@types/node@24.10.7)(typescript@5.9.3))(utf-8-validate@6.0.5)(vite@7.3.1(@types/node@24.10.7)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1))(vitest@4.0.17)(webdriverio@9.23.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))': dependencies: - '@vitest/browser': 4.0.16(bufferutil@4.0.9)(msw@2.7.5(@types/node@24.10.7)(typescript@5.9.3))(utf-8-validate@6.0.5)(vite@7.3.1(@types/node@24.10.7)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1))(vitest@4.0.16) - vitest: 4.0.16(@opentelemetry/api@1.9.0)(@types/node@24.10.7)(@vitest/browser-webdriverio@4.0.16)(@vitest/ui@4.0.16)(happy-dom@20.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.2)(msw@2.7.5(@types/node@24.10.7)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) + '@vitest/browser': 4.0.17(bufferutil@4.0.9)(msw@2.7.5(@types/node@24.10.7)(typescript@5.9.3))(utf-8-validate@6.0.5)(vite@7.3.1(@types/node@24.10.7)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1))(vitest@4.0.17) + vitest: 4.0.17(@opentelemetry/api@1.9.0)(@types/node@24.10.7)(@vitest/browser-webdriverio@4.0.17)(@vitest/ui@4.0.17)(happy-dom@20.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.2)(msw@2.7.5(@types/node@24.10.7)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) webdriverio: 9.23.0(bufferutil@4.0.9)(utf-8-validate@6.0.5) transitivePeerDependencies: - bufferutil @@ -20514,16 +20517,16 @@ snapshots: - utf-8-validate - vite - '@vitest/browser@4.0.16(bufferutil@4.0.9)(msw@2.7.5(@types/node@24.10.7)(typescript@5.9.3))(utf-8-validate@6.0.5)(vite@7.3.1(@types/node@24.10.7)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1))(vitest@4.0.16)': + '@vitest/browser@4.0.17(bufferutil@4.0.9)(msw@2.7.5(@types/node@24.10.7)(typescript@5.9.3))(utf-8-validate@6.0.5)(vite@7.3.1(@types/node@24.10.7)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1))(vitest@4.0.17)': dependencies: - '@vitest/mocker': 4.0.16(msw@2.7.5(@types/node@24.10.7)(typescript@5.9.3))(vite@7.3.1(@types/node@24.10.7)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1)) - '@vitest/utils': 4.0.16 + '@vitest/mocker': 4.0.17(msw@2.7.5(@types/node@24.10.7)(typescript@5.9.3))(vite@7.3.1(@types/node@24.10.7)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1)) + '@vitest/utils': 4.0.17 magic-string: 0.30.21 pixelmatch: 7.1.0 pngjs: 7.0.0 sirv: 3.0.2 tinyrainbow: 3.0.3 - vitest: 4.0.16(@opentelemetry/api@1.9.0)(@types/node@24.10.7)(@vitest/browser-webdriverio@4.0.16)(@vitest/ui@4.0.16)(happy-dom@20.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.2)(msw@2.7.5(@types/node@24.10.7)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) + vitest: 4.0.17(@opentelemetry/api@1.9.0)(@types/node@24.10.7)(@vitest/browser-webdriverio@4.0.17)(@vitest/ui@4.0.17)(happy-dom@20.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.2)(msw@2.7.5(@types/node@24.10.7)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) ws: 8.19.0(bufferutil@4.0.9)(utf-8-validate@6.0.5) transitivePeerDependencies: - bufferutil @@ -20531,7 +20534,7 @@ snapshots: - utf-8-validate - vite - '@vitest/coverage-istanbul@4.0.16(vitest@4.0.16)': + '@vitest/coverage-istanbul@4.0.17(vitest@4.0.17)': dependencies: '@istanbuljs/schema': 0.1.3 '@jridgewell/gen-mapping': 0.3.13 @@ -20539,83 +20542,79 @@ snapshots: istanbul-lib-coverage: 3.2.2 istanbul-lib-instrument: 6.0.3 istanbul-lib-report: 3.0.1 - istanbul-lib-source-maps: 5.0.6 istanbul-reports: 3.2.0 magicast: 0.5.1 obug: 2.1.1 tinyrainbow: 3.0.3 - vitest: 4.0.16(@opentelemetry/api@1.9.0)(@types/node@24.10.7)(@vitest/browser-webdriverio@4.0.16)(@vitest/ui@4.0.16)(happy-dom@20.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.2)(msw@2.7.5(@types/node@24.10.7)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) + vitest: 4.0.17(@opentelemetry/api@1.9.0)(@types/node@24.10.7)(@vitest/browser-webdriverio@4.0.17)(@vitest/ui@4.0.17)(happy-dom@20.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.2)(msw@2.7.5(@types/node@24.10.7)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) transitivePeerDependencies: - supports-color - '@vitest/coverage-v8@4.0.16(@vitest/browser@4.0.16(bufferutil@4.0.9)(msw@2.7.5(@types/node@24.10.7)(typescript@5.9.3))(utf-8-validate@6.0.5)(vite@7.3.1(@types/node@24.10.7)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1))(vitest@4.0.16))(vitest@4.0.16)': + '@vitest/coverage-v8@4.0.17(@vitest/browser@4.0.17(bufferutil@4.0.9)(msw@2.7.5(@types/node@24.10.7)(typescript@5.9.3))(utf-8-validate@6.0.5)(vite@7.3.1(@types/node@24.10.7)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1))(vitest@4.0.17))(vitest@4.0.17)': dependencies: '@bcoe/v8-coverage': 1.0.2 - '@vitest/utils': 4.0.16 - ast-v8-to-istanbul: 0.3.8 + '@vitest/utils': 4.0.17 + ast-v8-to-istanbul: 0.3.10 istanbul-lib-coverage: 3.2.2 istanbul-lib-report: 3.0.1 - istanbul-lib-source-maps: 5.0.6 istanbul-reports: 3.2.0 magicast: 0.5.1 obug: 2.1.1 std-env: 3.10.0 tinyrainbow: 3.0.3 - vitest: 4.0.16(@opentelemetry/api@1.9.0)(@types/node@24.10.7)(@vitest/browser-webdriverio@4.0.16)(@vitest/ui@4.0.16)(happy-dom@20.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.2)(msw@2.7.5(@types/node@24.10.7)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) + vitest: 4.0.17(@opentelemetry/api@1.9.0)(@types/node@24.10.7)(@vitest/browser-webdriverio@4.0.17)(@vitest/ui@4.0.17)(happy-dom@20.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.2)(msw@2.7.5(@types/node@24.10.7)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) optionalDependencies: - '@vitest/browser': 4.0.16(bufferutil@4.0.9)(msw@2.7.5(@types/node@24.10.7)(typescript@5.9.3))(utf-8-validate@6.0.5)(vite@7.3.1(@types/node@24.10.7)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1))(vitest@4.0.16) - transitivePeerDependencies: - - supports-color + '@vitest/browser': 4.0.17(bufferutil@4.0.9)(msw@2.7.5(@types/node@24.10.7)(typescript@5.9.3))(utf-8-validate@6.0.5)(vite@7.3.1(@types/node@24.10.7)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1))(vitest@4.0.17) - '@vitest/expect@4.0.16': + '@vitest/expect@4.0.17': dependencies: '@standard-schema/spec': 1.0.0 '@types/chai': 5.2.2 - '@vitest/spy': 4.0.16 - '@vitest/utils': 4.0.16 + '@vitest/spy': 4.0.17 + '@vitest/utils': 4.0.17 chai: 6.2.1 tinyrainbow: 3.0.3 - '@vitest/mocker@4.0.16(msw@2.7.5(@types/node@24.10.7)(typescript@5.9.3))(vite@7.3.1(@types/node@24.10.7)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1))': + '@vitest/mocker@4.0.17(msw@2.7.5(@types/node@24.10.7)(typescript@5.9.3))(vite@7.3.1(@types/node@24.10.7)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1))': dependencies: - '@vitest/spy': 4.0.16 + '@vitest/spy': 4.0.17 estree-walker: 3.0.3 magic-string: 0.30.21 optionalDependencies: msw: 2.7.5(@types/node@24.10.7)(typescript@5.9.3) vite: 7.3.1(@types/node@24.10.7)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) - '@vitest/pretty-format@4.0.16': + '@vitest/pretty-format@4.0.17': dependencies: tinyrainbow: 3.0.3 - '@vitest/runner@4.0.16': + '@vitest/runner@4.0.17': dependencies: - '@vitest/utils': 4.0.16 + '@vitest/utils': 4.0.17 pathe: 2.0.3 - '@vitest/snapshot@4.0.16': + '@vitest/snapshot@4.0.17': dependencies: - '@vitest/pretty-format': 4.0.16 + '@vitest/pretty-format': 4.0.17 magic-string: 0.30.21 pathe: 2.0.3 - '@vitest/spy@4.0.16': {} + '@vitest/spy@4.0.17': {} - '@vitest/ui@4.0.16(vitest@4.0.16)': + '@vitest/ui@4.0.17(vitest@4.0.17)': dependencies: - '@vitest/utils': 4.0.16 + '@vitest/utils': 4.0.17 fflate: 0.8.2 flatted: 3.3.3 pathe: 2.0.3 sirv: 3.0.2 tinyglobby: 0.2.15 tinyrainbow: 3.0.3 - vitest: 4.0.16(@opentelemetry/api@1.9.0)(@types/node@24.10.7)(@vitest/browser-webdriverio@4.0.16)(@vitest/ui@4.0.16)(happy-dom@20.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.2)(msw@2.7.5(@types/node@24.10.7)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) + vitest: 4.0.17(@opentelemetry/api@1.9.0)(@types/node@24.10.7)(@vitest/browser-webdriverio@4.0.17)(@vitest/ui@4.0.17)(happy-dom@20.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.2)(msw@2.7.5(@types/node@24.10.7)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) - '@vitest/utils@4.0.16': + '@vitest/utils@4.0.17': dependencies: - '@vitest/pretty-format': 4.0.16 + '@vitest/pretty-format': 4.0.17 tinyrainbow: 3.0.3 '@volar/language-core@2.4.13': @@ -21118,7 +21117,7 @@ snapshots: dependencies: tslib: 2.8.1 - ast-v8-to-istanbul@0.3.8: + ast-v8-to-istanbul@0.3.10: dependencies: '@jridgewell/trace-mapping': 0.3.31 estree-walker: 3.0.3 @@ -25144,14 +25143,6 @@ snapshots: make-dir: 4.0.0 supports-color: 7.2.0 - istanbul-lib-source-maps@5.0.6: - dependencies: - '@jridgewell/trace-mapping': 0.3.31 - debug: 4.4.3(supports-color@8.1.1) - istanbul-lib-coverage: 3.2.2 - transitivePeerDependencies: - - supports-color - istanbul-reports@3.2.0: dependencies: html-escaper: 2.0.2 @@ -25792,10 +25783,6 @@ snapshots: dependencies: sourcemap-codec: 1.4.8 - magic-string@0.30.18: - dependencies: - '@jridgewell/sourcemap-codec': 1.5.5 - magic-string@0.30.21: dependencies: '@jridgewell/sourcemap-codec': 1.5.5 @@ -30417,7 +30404,7 @@ snapshots: vite-prerender-plugin@0.5.11(vite@7.3.1(@types/node@24.10.7)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1)): dependencies: kolorist: 1.8.0 - magic-string: 0.30.18 + magic-string: 0.30.21 node-html-parser: 6.1.13 simple-code-frame: 1.3.0 source-map: 0.7.6 @@ -30444,15 +30431,15 @@ snapshots: tsx: 4.21.0 yaml: 2.8.1 - vitest@4.0.16(@opentelemetry/api@1.9.0)(@types/node@24.10.7)(@vitest/browser-webdriverio@4.0.16)(@vitest/ui@4.0.16)(happy-dom@20.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.2)(msw@2.7.5(@types/node@24.10.7)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1): + vitest@4.0.17(@opentelemetry/api@1.9.0)(@types/node@24.10.7)(@vitest/browser-webdriverio@4.0.17)(@vitest/ui@4.0.17)(happy-dom@20.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.2)(msw@2.7.5(@types/node@24.10.7)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1): dependencies: - '@vitest/expect': 4.0.16 - '@vitest/mocker': 4.0.16(msw@2.7.5(@types/node@24.10.7)(typescript@5.9.3))(vite@7.3.1(@types/node@24.10.7)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1)) - '@vitest/pretty-format': 4.0.16 - '@vitest/runner': 4.0.16 - '@vitest/snapshot': 4.0.16 - '@vitest/spy': 4.0.16 - '@vitest/utils': 4.0.16 + '@vitest/expect': 4.0.17 + '@vitest/mocker': 4.0.17(msw@2.7.5(@types/node@24.10.7)(typescript@5.9.3))(vite@7.3.1(@types/node@24.10.7)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1)) + '@vitest/pretty-format': 4.0.17 + '@vitest/runner': 4.0.17 + '@vitest/snapshot': 4.0.17 + '@vitest/spy': 4.0.17 + '@vitest/utils': 4.0.17 es-module-lexer: 1.7.0 expect-type: 1.2.2 magic-string: 0.30.21 @@ -30469,8 +30456,8 @@ snapshots: optionalDependencies: '@opentelemetry/api': 1.9.0 '@types/node': 24.10.7 - '@vitest/browser-webdriverio': 4.0.16(bufferutil@4.0.9)(msw@2.7.5(@types/node@24.10.7)(typescript@5.9.3))(utf-8-validate@6.0.5)(vite@7.3.1(@types/node@24.10.7)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1))(vitest@4.0.16)(webdriverio@9.23.0(bufferutil@4.0.9)(utf-8-validate@6.0.5)) - '@vitest/ui': 4.0.16(vitest@4.0.16) + '@vitest/browser-webdriverio': 4.0.17(bufferutil@4.0.9)(msw@2.7.5(@types/node@24.10.7)(typescript@5.9.3))(utf-8-validate@6.0.5)(vite@7.3.1(@types/node@24.10.7)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1))(vitest@4.0.17)(webdriverio@9.23.0(bufferutil@4.0.9)(utf-8-validate@6.0.5)) + '@vitest/ui': 4.0.17(vitest@4.0.17) happy-dom: 20.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5) jsdom: 26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5) transitivePeerDependencies: From 2796b291388fb834973c59009bfd69dcaf845af9 Mon Sep 17 00:00:00 2001 From: Hosted Weblate Date: Tue, 13 Jan 2026 06:35:09 +0100 Subject: [PATCH 025/353] Update translation files Updated by "Cleanup translation files" add-on in Weblate. Translation: Trilium Notes/README Translate-URL: https://hosted.weblate.org/projects/trilium/readme/ --- docs/README-nb_NO.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/README-nb_NO.md b/docs/README-nb_NO.md index f779b5ce99..bd0217934a 100644 --- a/docs/README-nb_NO.md +++ b/docs/README-nb_NO.md @@ -91,8 +91,8 @@ Vår dokumentasjon er tilgjengelig i flere format: * Direct [OpenID and TOTP integration](https://docs.triliumnotes.org/user-guide/setup/server/mfa) for more secure login -* [Synchronization](https://docs.triliumnotes.org/user-guide/setup/synchronization) - with self-hosted sync server +* [Synkronisering](https://docs.triliumnotes.org/user-guide/setup/synchronization) + med selv-hostet sync server * there are [3rd party services for hosting synchronisation server](https://docs.triliumnotes.org/user-guide/setup/server/cloud-hosting) * [Sharing](https://docs.triliumnotes.org/user-guide/advanced-usage/sharing) From 892c2cd838afd5dfeb4a8db28fe4691cee389502 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kim=20N=C3=B8glegaard?= Date: Mon, 12 Jan 2026 07:33:20 +0100 Subject: [PATCH 026/353] =?UTF-8?q?Translated=20using=20Weblate=20(Norwegi?= =?UTF-8?q?an=20Bokm=C3=A5l)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Currently translated at 2.3% (41 of 1759 strings) Translation: Trilium Notes/Client Translate-URL: https://hosted.weblate.org/projects/trilium/client/nb_NO/ --- .../src/translations/nb-NO/translation.json | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/apps/client/src/translations/nb-NO/translation.json b/apps/client/src/translations/nb-NO/translation.json index e12fc40cf3..ee36c293fb 100644 --- a/apps/client/src/translations/nb-NO/translation.json +++ b/apps/client/src/translations/nb-NO/translation.json @@ -60,5 +60,23 @@ }, "include_note": { "label_note": "Notat" + }, + "prompt": { + "title": "Ledetekst", + "ok": "OK", + "defaultTitle": "Ledetekst" + }, + "info": { + "closeButton": "Lukk", + "okButton": "OK" + }, + "markdown_import": { + "import_button": "Importer" + }, + "protected_session_password": { + "close_label": "Lukk" + }, + "recent_changes": { + "undelete_link": "gjenopprett" } } From dc8abed2f3490ddc5215d69397d276dceb97ddab Mon Sep 17 00:00:00 2001 From: nvno Date: Mon, 12 Jan 2026 12:03:45 +0100 Subject: [PATCH 027/353] Translated using Weblate (Portuguese) Currently translated at 99.6% (1753 of 1759 strings) Translation: Trilium Notes/Client Translate-URL: https://hosted.weblate.org/projects/trilium/client/pt/ --- .../src/translations/pt/translation.json | 256 ++++++++++++++++-- 1 file changed, 232 insertions(+), 24 deletions(-) diff --git a/apps/client/src/translations/pt/translation.json b/apps/client/src/translations/pt/translation.json index 7e500bc93b..cd03411ceb 100644 --- a/apps/client/src/translations/pt/translation.json +++ b/apps/client/src/translations/pt/translation.json @@ -772,7 +772,10 @@ "filter-default": "Icons default", "no_results": "Não foram encontrados icons.", "search_placeholder_filtered": "Procurar {{number}} icons no {{name}}", - "icon_tooltip": "{{name}}\nPacote de icons: {{iconPack}}" + "icon_tooltip": "{{name}}\nPacote de icons: {{iconPack}}", + "search_placeholder_one": "Procurar {{number}} icon nos {{count}} pacotes", + "search_placeholder_many": "Procurar {{number}} icons em {{count}} pacotes", + "search_placeholder_other": "Procurar {{number}} icons nos {{count}} pacotes" }, "basic_properties": { "note_type": "Tipo da nota", @@ -799,7 +802,8 @@ "expand_nth_level": "Expandir {{depth}} níveis", "expand_all_levels": "Expandir todos os níveis", "include_archived_notes": "Mostrar notas arquivadas", - "expand_tooltip": "Expande a direcção dos descendentes desta colecção (um nível). Para mais opções, carregar na seta à direita." + "expand_tooltip": "Expande a direcção dos descendentes desta colecção (um nível). Para mais opções, carregar na seta à direita.", + "hide_child_notes": "Esconder notas descendentes na árvore" }, "edited_notes": { "no_edited_notes_found": "Ainda não há nenhuma nota editada neste dia…", @@ -1017,7 +1021,9 @@ "editor_crashed_title": "O editor de texto quebrou", "editor_crashed_details_button": "Ver mais detalhes...", "editor_crashed_details_title": "Informação técnica", - "editor_crashed_details_intro": "Se teve este erro várias vezes, considerer reportar no GitHub disponibilizando a informação abaixo." + "editor_crashed_details_intro": "Se teve este erro várias vezes, considerer reportar no GitHub disponibilizando a informação abaixo.", + "editor_crashed_content": "O seu conteudo foi recuperado com sucesso, mas alguns das alterações mais recentes podem não ter sido gravadas.", + "keeps-crashing": "Componente de edição a rebentar continuamente. Por favor tentar reiniciar Trilium. Se o problema persistir, considere abrir um bug report." }, "empty": { "open_note_instruction": "Abra uma nota a digitar o título da nota no campo abaixo ou escolha uma nota na árvore.", @@ -1145,7 +1151,8 @@ "title": "Largura do Conteúdo", "default_description": "Por padrão, o Trilium limita a largura máxima do conteúdo para melhorar a legibilidade em janelas maximizadas em ecrãs largos.", "max_width_label": "Largura máxima do conteúdo", - "max_width_unit": "pixels" + "max_width_unit": "pixels", + "centerContent": "Manter conteúdo centrado" }, "native_title_bar": { "title": "Barra de Título Nativa (requer recarregar a app)", @@ -1177,7 +1184,9 @@ "title": "Desempenho", "enable-motion": "Ativar transições e animações", "enable-shadows": "Ativar sombras", - "enable-backdrop-effects": "Ativar efeitos de fundo para menus, popups e painéis" + "enable-backdrop-effects": "Ativar efeitos de fundo para menus, popups e painéis", + "enable-smooth-scroll": "Activar deslocamento suave", + "app-restart-required": "(é necessário reiniciar a aplicação para aplicar as alterações)" }, "ai_llm": { "not_started": "Não iniciado", @@ -1336,7 +1345,10 @@ "title": "Editor" }, "code_mime_types": { - "title": "Tipos MIME disponíveis no dropdown" + "title": "Tipos MIME disponíveis no dropdown", + "tooltip_syntax_highlighting": "Destaque de sintaxe", + "tooltip_code_block_syntax": "Blocos de código nas notas de texto", + "tooltip_code_note_syntax": "Notas de código" }, "vim_key_bindings": { "use_vim_keybindings_in_code_notes": "Atribuições de teclas do Vim", @@ -1456,7 +1468,13 @@ "min-days-in-first-week": "Mínimo de dias da primeira semana", "first-week-info": "Primeira semana que contenha a primeira Quinta-feira do ano é baseado na ISO 8601.", "first-week-warning": "Alterar as opções de primeira semana pode causar duplicidade nas Notas Semanais existentes e estas Notas não serão atualizadas de acordo.", - "formatting-locale": "Formato de data e número" + "formatting-locale": "Formato de data e número", + "tuesday": "Terça-feira", + "wednesday": "Quarta-feira", + "thursday": "Quinta-feira", + "friday": "Sexta-feira", + "saturday": "Sábado", + "formatting-locale-auto": "Baseado na linguagem da aplicação" }, "backup": { "automatic_backup": "Backup automático", @@ -1549,7 +1567,8 @@ "oauth_description_warning": "Para ativar o OAuth/OpenID, precisa definir a URL base do OAuth/OpenID, o client ID e o client secret no ficheiro config.ini e reiniciar a aplicação. Se quiser configurar via variáveis de ambiente, defina TRILIUM_OAUTH_BASE_URL, TRILIUM_OAUTH_CLIENT_ID e TRILIUM_OAUTH_CLIENT_SECRET.", "oauth_user_account": "Conta do Utilizador: ", "oauth_user_email": "E-mail do Utilizador: ", - "oauth_user_not_logged_in": "Não está logado!" + "oauth_user_not_logged_in": "Não está logado!", + "oauth_missing_vars": "Configurações em falta: {{-variables}}" }, "shortcuts": { "keyboard_shortcuts": "Atalhos de Teclado", @@ -1649,7 +1668,12 @@ "apply-bulk-actions": "Aplicar ações em massa", "converted-to-attachments": "{{count}} notas foram convertidas em anexos.", "convert-to-attachment-confirm": "Tem certeza que deseja converter as notas selecionadas em anexos das suas notas-pai?", - "open-in-popup": "Edição rápida" + "open-in-popup": "Edição rápida", + "open-in-a-new-window": "Abrir numa nova janela", + "archive": "Arquivar", + "unarchive": "Retirar do arquivo", + "hide-subtree": "Esconder sub-árvore", + "show-subtree": "Mostrar sub-árvore" }, "shared_info": { "shared_publicly": "Esta nota é partilhada publicamente em {{- link}}.", @@ -1710,7 +1734,13 @@ }, "highlights_list_2": { "title": "Lista de Destaques", - "options": "Opções" + "options": "Opções", + "no_highlights": "Sem destaques encontrados.", + "menu_configure": "Configurar lista de destaques...", + "modal_title": "Configurar list de destaques", + "title_with_count_one": "{{count}} destaque", + "title_with_count_many": "{{count}} destaques", + "title_with_count_other": "{{count}} destaques" }, "quick-search": { "placeholder": "Pesquisa rápida", @@ -1733,16 +1763,43 @@ "refresh-saved-search-results": "Atualizar resultados de pesquisa gravados", "create-child-note": "Criar nota filha", "unhoist": "Desafixar", - "toggle-sidebar": "Alternar barra lateral" + "toggle-sidebar": "Alternar barra lateral", + "dropping-not-allowed": "Largar notas nesta localização não é permitida", + "clone-indicator-tooltip": "Esta nota tem {{- count}} ascendentes: {{- parents}}", + "shared-indicator-tooltip": "Esta nota está partilhada publicamente", + "shared-indicator-tooltip-with-url": "Esta nota está partilhada publicamente em: {{- url}}", + "subtree-hidden-moved-title": "Adicionar ao {{title}}", + "subtree-hidden-moved-description-collection": "Esta colecção esconde as notas descendentes na árvore.", + "subtree-hidden-moved-description-other": "Notas descendentes estão escondidades na árvore para esta nota.", + "subtree-hidden-tooltip_one": "{{count}} nota descendentes escondidas da árvore", + "subtree-hidden-tooltip_many": "{{count}} notas descendentes escondidas da árvore", + "subtree-hidden-tooltip_other": "{{count}} notas descendentes escondidas da árvore", + "clone-indicator-tooltip-single": "Esta nota está clonada (1 additional parent: {{- parent}})" }, "title_bar_buttons": { "window-on-top": "Manter Janela no Topo" }, "note_detail": { - "could_not_find_typewidget": "Não foi possível encontrar typeWidget para o tipo '{{type}}'" + "could_not_find_typewidget": "Não foi possível encontrar typeWidget para o tipo '{{type}}'", + "print_report_collection_details_button": "Ver detalhes", + "printing": "Impressão em progresso...", + "printing_pdf": "Exportação PDF em progresso...", + "print_report_title": "Imprimir relatório", + "print_report_collection_details_ignored_notes": "Ignorar notas", + "print_report_collection_content_one": "{{count}} nota na colecção não pode ser impressa porque não é suportado ou está protegida.", + "print_report_collection_content_many": "{{count}} notas na colecção não podem ser impressas porque não é suportado ou estão protegidas.", + "print_report_collection_content_other": "{{count}} notas na colecção não podem ser impressas porque não é suportado ou estão protegidas." }, "note_title": { - "placeholder": "digite o título da nota aqui..." + "placeholder": "digite o título da nota aqui...", + "promoted_attributes": "Atributos destacados", + "created_on": "Criado em ", + "last_modified": "Modificado em ", + "note_type_switcher_label": "Alterar de {{type}} para:", + "note_type_switcher_others": "Outro tipo de nota", + "note_type_switcher_templates": "Template", + "note_type_switcher_collection": "Colecção", + "edited_notes": "Notas editadas neste dia" }, "search_result": { "no_notes_found": "Nenhuma nota encontrada para os parâmetros de pesquisa digitados.", @@ -1771,7 +1828,8 @@ }, "toc": { "table_of_contents": "Tabela de Conteúdos", - "options": "Opções" + "options": "Opções", + "no_headings": "Sem cabeçalhos." }, "watched_file_update_status": { "file_last_modified": "O ficheiro foi modificado pela última vez em .", @@ -1814,7 +1872,9 @@ "ws": { "sync-check-failed": "A verificação de sincronização falhou!", "consistency-checks-failed": "A verificação de consistência falhou! Veja os logs para pormenores.", - "encountered-error": "Encontrado o erro \"{{message}}\", verifique o console." + "encountered-error": "Encontrado o erro \"{{message}}\", verifique o console.", + "lost-websocket-connection-title": "Perdida conexão com o servidor", + "lost-websocket-connection-message": "Verifique a configuração da proxy inversa (e.g. nginx ou Apache) para assegurar conexões WebSocket estão permitidas e não bloqueadas." }, "hoisted_note": { "confirm_unhoisting": "A nota solicitada '{{requestedNote}}' está fora da árvore da nota fixada '{{hoistedNote}}' e precisa desafixar para aceder a nota. Quer prosseguir e desafixar?" @@ -1870,7 +1930,8 @@ "copy-link": "Copiar ligação", "paste": "Colar", "paste-as-plain-text": "Colar como texto sem formatação", - "search_online": "Pesquisar por \"{{term}}\" com {{searchEngine}}" + "search_online": "Pesquisar por \"{{term}}\" com {{searchEngine}}", + "search_in_trilium": "A procurar \"{{term}}\" no Trilium" }, "image_context_menu": { "copy_reference_to_clipboard": "Copiar referência para a área de transferência", @@ -1880,7 +1941,8 @@ "open_note_in_new_tab": "Abrir nota em nova guia", "open_note_in_new_split": "Abrir nota em nova divisão", "open_note_in_new_window": "Abrir nota em nova janela", - "open_note_in_popup": "Edição rápida" + "open_note_in_popup": "Edição rápida", + "open_note_in_other_split": "Abrir nota noutro separador" }, "electron_integration": { "desktop-application": "Aplicação Desktop", @@ -1888,7 +1950,8 @@ "native-title-bar-description": "Para Windows e macOS, manter a barra de título nativa desativada faz a aplicação parecer mais compacta. No Linux, manter a barra de título nativa ativada faz a aplicação se integrar melhor com o restante do sistema.", "background-effects": "Ativar efeitos de fundo (apenas Windows 11)", "restart-app-button": "Reiniciar a aplicação para ver as alterações", - "zoom-factor": "Fator de Zoom" + "zoom-factor": "Fator de Zoom", + "background-effects-description": "O Mica adiciona um desfoque, fundo estiloso as janelas da aplicação, criando uma profundidade e aspecto moderno. \"Barra de titulo nativa\" deve estar inactiva." }, "note_autocomplete": { "search-for": "Pesquisar por \"{{term}}\"", @@ -1948,7 +2011,8 @@ }, "note_language": { "not_set": "Não atribuído", - "configure-languages": "Configurar idiomas..." + "configure-languages": "Configurar idiomas...", + "help-on-languages": "Ajuda nas linguagens de conteúdos..." }, "content_language": { "title": "Idiomas do conteúdo", @@ -1966,7 +2030,8 @@ "button_title": "Exportar diagrama como PNG" }, "svg": { - "export_to_png": "O diagrama não pôde ser exportado como PNG." + "export_to_png": "O diagrama não pôde ser exportado como PNG.", + "export_to_svg": "O diagrama não pode ser exportado para SVG." }, "code_theme": { "title": "Aparência", @@ -1985,7 +2050,11 @@ "editorfeatures": { "title": "Recursos", "emoji_completion_enabled": "Ativar auto-completar de Emoji", - "note_completion_enabled": "Ativar auto-completar de notas" + "note_completion_enabled": "Ativar auto-completar de notas", + "emoji_completion_description": "Se activo, emojis podem ser facilmente inseridos em texto ao pressionar `:`, seguido do nome de um emoji.", + "note_completion_description": "Se activo, links para notas podem ser criadas ao escrever `@` seguido do titulo de uma nota.", + "slash_commands_enabled": "Activar comentários simples", + "slash_commands_description": "Se activo, editar comandos como inserir quebras de linha ou cabeçalhos podem ser activado/inactivado ao escrever `/`." }, "table_view": { "new-row": "Nova linha", @@ -2027,7 +2096,16 @@ "delete-column": "Apagar coluna", "delete-column-confirmation": "Tem certeza que deseja apagar esta coluna? O atributo correspondente também será apagado de todas as notas abaixo desta coluna.", "new-item": "Novo elemento", - "add-column": "Adicionar Coluna" + "add-column": "Adicionar Coluna", + "delete-note": "Apagar nota...", + "remove-from-board": "Remover do quadro", + "archive-note": "Arquivar nota", + "new-item-placeholder": "Inserir titulo da nota...", + "add-column-placeholder": "Inserir nome da coluna...", + "edit-note-title": "Clicar para editar o titulo da nota", + "unarchive-note": "Remover nota do arquivo", + "edit-column-title": "Click para editar titulo da coluna", + "column-already-exists": "Esta coluna já existe no quadro." }, "command_palette": { "tree-action-name": "Árvore: {{name}}", @@ -2058,16 +2136,146 @@ "background_effects_title": "Efeitos de fundo estão estáveis agora", "background_effects_message": "Em dispositivos Windows, efeitos de fundo estão estáveis agora. Os efeitos de fundo adicionam um toque de cor à interface do utilizador borrando o plano de fundo atrás dela. Esta técnica também é usada noutras aplicações como o Windows Explorer.", "background_effects_button": "Ativar os efeitos de fundo", - "dismiss": "Dispensar" + "dismiss": "Dispensar", + "new_layout_title": "Novo titulo do layout", + "new_layout_button": "Mais informação", + "new_layout_message": "Estamos a introduzir um layout modernizado para o Trilium. A faixa foi removida e está integrada na interface principal, com uma nota barra de estado e secções expansíveis (como as propriedades próprias) a tomar papéis principais.\n\nO novo layout está activo por defeito, e pode ser temporáriamente disabilidade em Opções → Aparência." }, "settings": { "related_settings": "Configurações relacionadas" }, "settings_appearance": { "related_code_blocks": "Esquema de cores para blocos de código em notas de texto", - "related_code_notes": "Esquema de cores para notas de código" + "related_code_notes": "Esquema de cores para notas de código", + "ui": "Interface do utilizador", + "ui_old_layout": "Layout antigo", + "ui_new_layout": "Nova aparência" }, "units": { "percentage": "%" + }, + "experimental_features": { + "title": "Opções experimentais", + "new_layout_name": "Novo layout", + "new_layout_description": "Experimente o novo layout para um aspecto moderno e melhor estabilidade. Sujeito a grandes alterações nas próximas publicações.", + "disclaimer": "Estas opções são experimentais e podem causar instabilidade. Usar com cuidado." + }, + "read-only-info": { + "read-only-note": "Actualmente a ver em modo de leitura.", + "edit-note": "Editar nota", + "auto-read-only-note": "Esta nota está a ser mostrada em modo de leitura para um carregamento mais rápido." + }, + "presentation_view": { + "edit-slide": "Editar este slide", + "start-presentation": "Iniciar apresentação", + "slide-overview": "Alternar visão geral dos slides" + }, + "calendar_view": { + "delete_note": "Apagar nota..." + }, + "pagination": { + "page_title": "Página {{startIndex}} - {{endIndex}}", + "total_notes": "{{count}} notas" + }, + "collections": { + "rendering_error": "Sem possíbilidade de mostrar conteúdos devido a um erro." + }, + "note-color": { + "clear-color": "Remover cor da nota", + "set-color": "Atribuir cor da nota", + "set-custom-color": "Afectar cor personalizada da nota" + }, + "popup-editor": { + "maximize": "Alterar para editor completo" + }, + "server": { + "unknown_http_error_title": "Erro na comunicação com servidor", + "unknown_http_error_content": "Código de estado: {{statusCode}}\nURL: {{method}} {{url}}\nMessagem: {{message}}", + "traefik_blocks_requests": "Se está a usar o Traefik, este introduz uma alteração que afecta a comunicação com o servidor." + }, + "tab_history_navigation_buttons": { + "go-back": "Ir para a nota anterior", + "go-forward": "Ir para nota seguinte" + }, + "breadcrumb": { + "hoisted_badge": "Içado", + "workspace_badge": "Área de trabalho", + "scroll_to_top_title": "Saltar para o início da nota", + "create_new_note": "Criar nova nota descendente", + "empty_hide_archived_notes": "Esconder notas arquivadas", + "hoisted_badge_title": "Retirar de içado" + }, + "breadcrumb_badges": { + "read_only_explicit": "Modo de leitura", + "read_only_auto": "Modo de leitura automático", + "read_only_temporarily_disabled": "Editável temporáriamente", + "read_only_auto_description": "Esta nota foi automaticamente colocada em modo de leitura por razões de performance. Este limite automatico é ajustável nas configurações.\n\nClicar para editar temporáriamente.", + "read_only_temporarily_disabled_description": "Esta nota está editável, mas normalmente está em modo de leitura. A nova vai regressar para mode de leitura assim que navegar para outra nota.\n\nClicar para reactivar o modo de leitura.", + "read_only_explicit_description": "Esta nota foi manualmente colocada em modo de leitura.\nClicar para editar temporáriamente.", + "shared_publicly": "Partilhado publicamente", + "shared_locally": "Partilhado localmente", + "shared_copy_to_clipboard": "Copiar link para a área de transferência", + "shared_open_in_browser": "Abrir link no browser", + "shared_unshare": "Remover partilha", + "clipped_note_description": "Esta nota foi retirar do {{url}}.\n\nClicar para navegar no código fonte da página.", + "clipped_note": "Web clipe", + "execute_script": "Correr script", + "execute_script_description": "Esta nota é uma nota de script. Clicar para executar o script.", + "execute_sql": "Correr SQL", + "execute_sql_description": "Esta nota é uma nota de SQL. Clicar para executar script SQL.", + "save_status_saved": "Guardar", + "save_status_saving": "A guardar...", + "save_status_unsaved": "Não gravado", + "save_status_error": "Gravar falhou", + "save_status_saving_tooltip": "Alterações estão a ser guardadas", + "save_status_unsaved_tooltip": "Existem alterações não guardadas. Serão guardadas automaticamente em breve.", + "save_status_error_tooltip": "Ocorreu um erro ao guardar a nota. Se possível, tente copiar os conteúdos da nota para outro local e reiniciar a aplicação." + }, + "status_bar": { + "language_title": "Alterar lingua do conteúdo", + "note_info_title": "Ver informação da nota (e.g., datas, tamanho da nota)", + "backlinks_one": "{{count}} backlink", + "backlinks_many": "{{count}} backlinks", + "backlinks_other": "{{count}} backlinks", + "backlinks_title_one": "Ver backlink", + "backlinks_title_many": "Ver backlinks", + "backlinks_title_other": "Ver backlinks", + "attachments_one": "{{count}} anexo", + "attachments_many": "{{count}} anexos", + "attachments_other": "{{count}} anexos", + "attachments_title_one": "Ver anexo num novo separador", + "attachments_title_many": "Ver anexos num novo separador", + "attachments_title_other": "Ver anexos num novo separador", + "attributes_one": "{{count}} atributo", + "attributes_many": "{{count}} atributos", + "attributes_other": "{{count}} atributos", + "attributes_title": "Atributos próprios e herdados", + "note_paths_one": "{{count}} caminho", + "note_paths_many": "{{count}} caminhos", + "note_paths_other": "{{count}} caminhos", + "note_paths_title": "Caminhos da nota", + "code_note_switcher": "Alterar modo de linguagem" + }, + "attributes_panel": { + "title": "Atributos da nota" + }, + "right_pane": { + "empty_message": "Nada para mostrar nesta nota", + "empty_button": "Esconder painél", + "toggle": "Alterar painel direito", + "custom_widget_go_to_source": "Ir para código fonte" + }, + "pdf": { + "attachments_one": "{{count}} anexo pdf", + "attachments_many": "{{count}} anexos pdf", + "attachments_other": "{{count}} anexos pdf", + "layers_one": "{{count}} camada", + "layers_many": "{{count}} camadas", + "layers_other": "{{count}} camadas", + "pages_one": "{{count}} página", + "pages_many": "{{count}} páginas", + "pages_other": "{{count}} páginas", + "pages_alt": "Página {{pageNumber}}", + "pages_loading": "A carregar..." } } From abdcd6cc0cb9a41126c9313840165f09a7731454 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kim=20N=C3=B8glegaard?= Date: Mon, 12 Jan 2026 07:50:13 +0100 Subject: [PATCH 028/353] =?UTF-8?q?Translated=20using=20Weblate=20(Norwegi?= =?UTF-8?q?an=20Bokm=C3=A5l)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Currently translated at 6.4% (25 of 388 strings) Translation: Trilium Notes/Server Translate-URL: https://hosted.weblate.org/projects/trilium/server/nb_NO/ --- .../src/assets/translations/nb-NO/server.json | 26 +++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/apps/server/src/assets/translations/nb-NO/server.json b/apps/server/src/assets/translations/nb-NO/server.json index 6398803c88..b5a63a0bfb 100644 --- a/apps/server/src/assets/translations/nb-NO/server.json +++ b/apps/server/src/assets/translations/nb-NO/server.json @@ -13,5 +13,31 @@ }, "setup_sync-from-desktop": { "step6-here": "her" + }, + "set_password": { + "password": "Passord" + }, + "setup": { + "next": "Neste", + "title": "Konfigurasjon" + }, + "login": { + "title": "Logg inn", + "password": "Passord", + "button": "Logg inn" + }, + "setup_sync-from-server": { + "server-host-placeholder": "https://:", + "proxy-server-placeholder": "https://:", + "note": "Obs:", + "password": "Passord", + "password-placeholder": "Passord", + "back": "Tilbake" + }, + "setup_sync-in-progress": { + "outstanding-items-default": "N/A" + }, + "share_page": { + "parent": "overordnet notat:" } } From 1363f94621aeda03cfa792d3e8ea045d25448e80 Mon Sep 17 00:00:00 2001 From: noobhjy Date: Mon, 12 Jan 2026 14:18:16 +0100 Subject: [PATCH 029/353] Translated using Weblate (Chinese (Simplified Han script)) Currently translated at 100.0% (1759 of 1759 strings) Translation: Trilium Notes/Client Translate-URL: https://hosted.weblate.org/projects/trilium/client/zh_Hans/ --- apps/client/src/translations/cn/translation.json | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/apps/client/src/translations/cn/translation.json b/apps/client/src/translations/cn/translation.json index 4842423ba9..47c3d491f7 100644 --- a/apps/client/src/translations/cn/translation.json +++ b/apps/client/src/translations/cn/translation.json @@ -1604,7 +1604,9 @@ "clone-indicator-tooltip": "此笔记有 {{- count}} 个父级: {{- parents}}", "clone-indicator-tooltip-single": "此笔记已克隆(1 个额外的父级:{{- parent}})", "subtree-hidden-tooltip_other": "从树中隐藏的 {{count}} 篇子笔记", - "subtree-hidden-moved-title": "已添加到 {{title}}" + "subtree-hidden-moved-title": "已添加到 {{title}}", + "subtree-hidden-moved-description-collection": "此集合隐藏其树中的子笔记。", + "subtree-hidden-moved-description-other": "子笔记隐藏于此笔记的树中。" }, "title_bar_buttons": { "window-on-top": "保持此窗口置顶" From 3e541e37fec8cb698471eae29c290814cb46803d Mon Sep 17 00:00:00 2001 From: Hosted Weblate Date: Tue, 13 Jan 2026 20:44:39 +0100 Subject: [PATCH 030/353] Update translation files Updated by "Cleanup translation files" add-on in Weblate. Translation: Trilium Notes/README Translate-URL: https://hosted.weblate.org/projects/trilium/readme/ --- docs/README-de.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/README-de.md b/docs/README-de.md index 3636ec91e5..a3c2112144 100644 --- a/docs/README-de.md +++ b/docs/README-de.md @@ -132,8 +132,8 @@ Unsere Dokumentation ist verfügbar in mehreren Formaten: einfachen Speichern von Webinhalten * Anpassbare Benutzeroberfläche (Seitenleisten-Schaltflächen, benutzerdefinierte Widgets, ...) -* [Metriken](https://docs.triliumnotes.org/user-guide/advanced-usage/metrics) - zusammen mit einem Grafana-Dashboard. +* [Metrics](https://docs.triliumnotes.org/user-guide/advanced-usage/metrics), + zusätzlich mit dem Grafana Dashboard. ✨ Weitere Informationen zu TriliumNext findet man in den folgenden Ressourcen/Communities von Drittanbietern: From a7aedf93abc9f55b3fc9de81859f013fac3ea80e Mon Sep 17 00:00:00 2001 From: Gishky Date: Tue, 13 Jan 2026 14:24:21 +0100 Subject: [PATCH 031/353] Translated using Weblate (German) Currently translated at 100.0% (152 of 152 strings) Translation: Trilium Notes/Website Translate-URL: https://hosted.weblate.org/projects/trilium/website/de/ --- apps/website/src/translations/de/translation.json | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/apps/website/src/translations/de/translation.json b/apps/website/src/translations/de/translation.json index 07737e106a..dcbc5e3861 100644 --- a/apps/website/src/translations/de/translation.json +++ b/apps/website/src/translations/de/translation.json @@ -21,7 +21,7 @@ "note_structure_description": "Notizen lassen sich hierarchisch anordnen. Ordner sind nicht nötig, da jede Notiz Unternotizen enthalten kann. Eine einzelne Notiz kann an mehreren Stellen in der Hierarchie hinzugefügt werden.", "hoisting_description": "Trennen Sie Ihre persönlichen und beruflichen Notizen ganz einfach, indem Sie sie in einem Arbeitsbereich gruppieren. Dadurch wird Ihre Notizstruktur so fokussiert, dass nur ein bestimmter Satz von Notizen angezeigt wird.", "hoisting_title": "Arbeitsbereiche und Fokusansicht", - "attributes_description": "Verwenden Sie Beziehungen zwischen Notizen oder fügen Sie Beschriftungen hinzu, um die Kategorisierung zu vereinfachen. Verwenden Sie hervorgehobene Attribute, um strukturierte Informationen einzugeben, die in Tabellen und Boards verwendet werden können." + "attributes_description": "Für leichtes kategorsieren, nutze Verbindungen zwischen Notizen oder füge Label hinzu. Verwende hervorgehobene Attribute, um sie als strukturierte Informationen in Tabellen oder Anschlagbretter zu verwenden." }, "productivity_benefits": { "revisions_title": "Notizrevisionen", @@ -30,7 +30,7 @@ "protected_notes_title": "Geschützte Notizen", "jump_to_title": "Schnellsuche und Kommandos", "search_title": "Leistungsstarke Suche", - "web_clipper_title": "Web clipper", + "web_clipper_title": "Webschnipsel", "revisions_content": "Notizen werden regelmäßig im Hintergrund gespeichert und Revisionen können zur Überprüfung oder zum Rückgängigmachen versehentlicher Änderungen verwendet werden. Revisionen können auch bei Bedarf erstellt werden.", "sync_content": "Verwenden Sie eine selbst gehostete oder Cloud-Instanz, um Ihre Notizen ganz einfach auf mehreren Geräten zu synchronisieren und über eine WebApp von Ihrem mobilen Gerät aus darauf zuzugreifen.", "protected_notes_content": "Halten Sie vertrauliche Informationen sicher, indem Sie Notizen verschlüsseln und mit einem Passwort schützen.", @@ -41,7 +41,7 @@ "note_types": { "text_title": "Text Notizen", "code_title": "Code Notizen", - "canvas_title": "Canvas", + "canvas_title": "Leinwand", "mermaid_title": "Mermaid Diagramm", "mindmap_title": "Mind Map", "text_description": "Die Notizen werden mit einem visuellen Editor (WYSIWYG) bearbeitet, der Tabellen, Bilder, mathematische Ausdrücke und Code-Blöcke mit Syntaxhervorhebung unterstützt. Formatieren Sie den Text schnell mit einer Markdown-ähnlichen Syntax oder mit Slash-Befehlen.", @@ -162,7 +162,7 @@ }, "social_buttons": { "github": "GitHub", - "github_discussions": "GitHub Discussions", + "github_discussions": "GitHub Diskussionen", "matrix": "Matrix", "reddit": "Reddit" }, @@ -184,7 +184,7 @@ "way_market": "Weitersagen: Teilen Sie Trilium Notes mit Freunden, in Blogs und sozialen Medien." }, "404": { - "title": "404: Not Found", + "title": "404: Nicht gefunden", "description": "Die gesuchte Seite konnte nicht gefunden werden. Möglicherweise wurde sie gelöscht oder die URL ist falsch." }, "download_helper_desktop_windows": { @@ -193,7 +193,7 @@ "description_x64": "Kompatibel mit Intel- oder AMD-Geräten unter Windows 10 und 11.", "description_arm64": "Kompatibel mit ARM-Geräten (z. B. mit Qualcomm Snapdragon).", "quick_start": "Installation über Winget:", - "download_exe": "Download Installer (.exe)", + "download_exe": "Installationsdatei herunterladen (.exe)", "download_zip": "Portable (.zip)", "download_scoop": "Scoop" } From f6821bce03e4a85ee3ac20014ec88bce2e0df1b2 Mon Sep 17 00:00:00 2001 From: Gishky Date: Tue, 13 Jan 2026 14:24:41 +0100 Subject: [PATCH 032/353] Translated using Weblate (German) Currently translated at 100.0% (1759 of 1759 strings) Translation: Trilium Notes/Client Translate-URL: https://hosted.weblate.org/projects/trilium/client/de/ --- .../src/translations/de/translation.json | 159 +++++++++++++++--- 1 file changed, 135 insertions(+), 24 deletions(-) diff --git a/apps/client/src/translations/de/translation.json b/apps/client/src/translations/de/translation.json index c9bc04b7fa..10df8f772e 100644 --- a/apps/client/src/translations/de/translation.json +++ b/apps/client/src/translations/de/translation.json @@ -1,6 +1,6 @@ { "about": { - "title": "Über Trilium Notes", + "title": "Über Trilium Notizen", "homepage": "Startseite:", "app_version": "App-Version:", "db_version": "DB-Version:", @@ -26,7 +26,12 @@ "widget-list-error": { "title": "Abruf der Liste von Widgets vom Server ist fehlgeschlagen" }, - "open-script-note": "Script-Notiz öffnen" + "open-script-note": "Script-Notiz öffnen", + "widget-render-error": { + "title": "Eine externe React Integration konnte nicht dargestellt werden" + }, + "widget-missing-parent": "Der externen Integration fehlt die erforderliche Eigenschaft '{{property}}'\n\nFalls dieses Skript ohne UI-Element ausgeführt werden soll, benutze stattdessen '#run=frontendStartup'.", + "scripting-error": "Benutzerdefinierter Skriptfehler: {{title}}" }, "add_link": { "add_link": "Link hinzufügen", @@ -210,7 +215,7 @@ "modalTitle": "Infonachricht", "closeButton": "Schließen", "okButton": "OK", - "copy_to_clipboard": "In die Zwischenablage kopieren" + "copy_to_clipboard": "In Zwischenablage kopieren" }, "jump_to_note": { "search_button": "Suche im Volltext", @@ -698,8 +703,8 @@ "export_as_image_png": "PNG (Raster)", "export_as_image_svg": "SVG (Vektor)", "note_map": "Notizen Karte", - "view_revisions": "Notizrevisionen", - "advanced": "Erweitert" + "view_revisions": "Änderungshistorie...", + "advanced": "Fortgeschritten" }, "onclick_button": { "no_click_handler": "Das Schaltflächen-Widget „{{componentId}}“ hat keinen definierten Klick-Handler" @@ -792,7 +797,8 @@ "expand_all_levels": "Alle Ebenen erweitern", "expand_tooltip": "Erweitert die direkten Unterelemente dieser Sammlung (eine Ebene tiefer). Für weitere Optionen auf den Pfeil rechts klicken.", "expand_first_level": "Direkte Unterelemente erweitern", - "expand_nth_level": "{{depth}} Ebenen erweitern" + "expand_nth_level": "{{depth}} Ebenen erweitern", + "hide_child_notes": "Unterknoten im Baum ausblenden" }, "edited_notes": { "no_edited_notes_found": "An diesem Tag wurden noch keine Notizen bearbeitet...", @@ -805,7 +811,7 @@ "file_type": "Dateityp", "file_size": "Dateigröße", "download": "Herunterladen", - "open": "Offen", + "open": "Extern öffnen", "upload_new_revision": "Neue Revision hochladen", "upload_success": "Neue Dateirevision wurde hochgeladen.", "upload_failed": "Das Hochladen einer neuen Dateirevision ist fehlgeschlagen.", @@ -903,7 +909,7 @@ "unknown_search_option": "Unbekannte Suchoption {{searchOptionName}}", "search_note_saved": "Suchnotiz wurde in {{-notePathTitle}} gespeichert", "actions_executed": "Aktionen wurden ausgeführt.", - "view_options": "Anzeigeoptionen:" + "view_options": "Optionen anzeigen:" }, "similar_notes": { "title": "Ähnliche Notizen", @@ -1009,9 +1015,9 @@ "auto-detect-language": "Automatisch erkannt", "keeps-crashing": "Die Bearbeitungskomponente stürzt immer wieder ab. Bitte starten Sie Trilium neu. Wenn das Problem weiterhin besteht, erstellen Sie einen Fehlerbericht.", "editor_crashed_title": "Der Text Editor ist abgestürzt", - "editor_crashed_content": "Ihr Inhalt wurde erfolgreich wiederhergestellt, aber einzelne Ihrer letzten Änderungen waren möglicherweise noch nicht gespeichert.", - "editor_crashed_details_button": "Zeige mehr Details…", - "editor_crashed_details_intro": "Falls Sie diesen Fehler mehrmals sehen, melden Sie dies auf GitHub mit den folgenden Informationen.", + "editor_crashed_content": "Ihr Inhalt wurde erfolgreich wiederhergestellt, aber kürzlich gemachte Änderungen wurden unter Umständen nicht gespeichert.", + "editor_crashed_details_button": "Mehr Details anzeigen...", + "editor_crashed_details_intro": "Falls dieser Fehler häufiger auftritt, ziehen Sie in Betracht uns diesen über GitHub zu melden, indem Sie die folgenden Informationen bereitstellen.", "editor_crashed_details_title": "Technische Informationen" }, "empty": { @@ -1412,7 +1418,7 @@ "will_be_deleted_in": "Dieser Anhang wird in {{time}} automatisch gelöscht", "will_be_deleted_soon": "Dieser Anhang wird bald automatisch gelöscht", "deletion_reason": ", da der Anhang nicht im Inhalt der Notiz verlinkt ist. Um das Löschen zu verhindern, füge den Anhangslink wieder in den Inhalt ein oder wandel den Anhang in eine Notiz um.", - "role_and_size": "Rolle: {{role}}, Größe: {{size}}", + "role_and_size": "Rolle: {{role}}, Größe: {{size}}, MIME: {{- mimeType}}", "link_copied": "Anhangslink in die Zwischenablage kopiert.", "unrecognized_role": "Unbekannte Anhangsrolle „{{role}}“." }, @@ -1463,10 +1469,13 @@ "import-into-note": "In Notiz importieren", "apply-bulk-actions": "Massenaktionen anwenden", "converted-to-attachments": "{{count}} Notizen wurden als Anhang konvertiert.", - "convert-to-attachment-confirm": "Bist du sicher, dass du die ausgewählten Notizen in Anhänge ihrer übergeordneten Notizen umwandeln möchtest?", + "convert-to-attachment-confirm": "Bist du sicher, dass du die ausgewählten Notizen in Anhänge ihrer übergeordneten Notizen umwandeln möchtest? Diese Operation wird nur auf Bildnotizes angewandt. Andere Notizen werden übersprungen.", "open-in-popup": "Schnellbearbeitung", "archive": "Archiviere", - "unarchive": "Entarchivieren" + "unarchive": "Entarchivieren", + "open-in-a-new-window": "In neuem Fenster öffnen", + "hide-subtree": "Teilbaum ausblenden", + "show-subtree": "Teilbaum anzeigen" }, "shared_info": { "shared_publicly": "Diese Notiz ist öffentlich geteilt auf {{- link}}.", @@ -1556,7 +1565,16 @@ "create-child-note": "Unternotiz anlegen", "unhoist": "Fokus verlassen", "toggle-sidebar": "Seitenleiste ein-/ausblenden", - "dropping-not-allowed": "Ablegen von Notizen an dieser Stelle ist nicht zulässig." + "dropping-not-allowed": "Ablegen von Notizen an dieser Stelle ist nicht zulässig.", + "clone-indicator-tooltip": "Diese Notiz hat {{- count}} Elterknoten: {{- parents}}", + "clone-indicator-tooltip-single": "Diese Notiz ist geklont (1 weiterer Elternknoten: {{- parent}})", + "shared-indicator-tooltip": "Diese Notiz ist öffentlich einsehbar", + "shared-indicator-tooltip-with-url": "Diese Notiz ist unter {{- url}} öffentlich einsehbar", + "subtree-hidden-tooltip_one": "{{count}} Unterknoten, der im Baum ausgeblendet ist", + "subtree-hidden-tooltip_other": "{{count}} Unterknoten, die im Baum ausgeblendet sind", + "subtree-hidden-moved-title": "Zu {{title}} hinzugefügt", + "subtree-hidden-moved-description-collection": "Diese Sammlung blendet ihre Unternotizem im Baum aus.", + "subtree-hidden-moved-description-other": "Diese Sammlung blendet ihre Unterknoten im Baum aus." }, "title_bar_buttons": { "window-on-top": "Dieses Fenster immer oben halten" @@ -1567,7 +1585,9 @@ "printing_pdf": "PDF-Export läuft…", "print_report_title": "Druckreport", "print_report_collection_details_button": "Details anzeigen", - "print_report_collection_details_ignored_notes": "Ignorierte Notizen" + "print_report_collection_details_ignored_notes": "Ignorierte Notizen", + "print_report_collection_content_one": "{{count}} Notiz in der Sammlung konnte nicht gedruckt werden, weil sie nicht unterstützt ist oder geschützt ist.", + "print_report_collection_content_other": "{{count}} Notizen in der Sammlung konnten nicht gedruckt werden, weil sie nicht unterstützt sind oder geschützt sind." }, "note_title": { "placeholder": "Titel der Notiz hier eingeben…", @@ -1720,7 +1740,8 @@ "open_note_in_new_tab": "Notiz in neuen Tab öffnen", "open_note_in_new_split": "Notiz in neuen geteilten Tab öffnen", "open_note_in_new_window": "Notiz in neuen Fenster öffnen", - "open_note_in_popup": "Schnellbearbeitung" + "open_note_in_popup": "Schnellbearbeitung", + "open_note_in_other_split": "Notiz in neuer Spalte öffnen" }, "electron_integration": { "desktop-application": "Desktop Anwendung", @@ -1988,8 +2009,9 @@ "unknown_widget": "Unbekanntes Widget für '{{id}}'." }, "note_language": { - "not_set": "Nicht gesetzt", - "configure-languages": "Konfiguriere Sprachen..." + "not_set": "Keine Sprache ausgewählt", + "configure-languages": "Konfiguriere Sprachen...", + "help-on-languages": "Zu Übersetzungen beitragen..." }, "content_language": { "title": "Inhaltssprachen", @@ -2007,7 +2029,8 @@ "button_title": "Exportiere Diagramm als PNG" }, "svg": { - "export_to_png": "Das Diagramm konnte als PNG nicht exportiert werden." + "export_to_png": "Das Diagramm konnte als PNG nicht exportiert werden.", + "export_to_svg": "Das Diagramm konnte nicht als SVG exportiert werden." }, "code_theme": { "title": "Aussehen", @@ -2055,7 +2078,7 @@ "book_properties_config": { "hide-weekends": "Wochenenden ausblenden", "display-week-numbers": "Zeige Kalenderwoche", - "map-style": "Kartenstil:", + "map-style": "Kartenstil", "max-nesting-depth": "Maximale Verschachtelungstiefe:", "raster": "Raster", "vector_light": "Vektor (Hell)", @@ -2108,14 +2131,20 @@ "background_effects_title": "Hintergrundeffekte sind jetzt zuverlässig nutzbar", "background_effects_message": "Auf Windows-Geräten sind die Hintergrundeffekte nun vollständig stabil. Die Hintergrundeffekte verleihen der Benutzeroberfläche einen Farbakzent, indem der Hintergrund dahinter weichgezeichnet wird. Diese Technik wird auch in anderen Anwendungen wie dem Windows-Explorer eingesetzt.", "background_effects_button": "Aktiviere Hintergrundeffekte", - "dismiss": "Ablehnen" + "dismiss": "Ablehnen", + "new_layout_title": "Neues Layout", + "new_layout_message": "Wir haben ein modernisiertes Layout für Trilium eingeführt. Die Multifunktionsleiste wurde entfernt und als neue Statusanzeige und ausklappbaren Sektionen (wie hervorgehobenen Attributen), welche Schlüsselfunktionen übernehmen, nahtlos in das Hauptinterface integriert.\n\nDas neue Layout ist standardmäßig aktiviert und kann temporär in Optionen → Anzeige deaktiviert werden.", + "new_layout_button": "Mehr Informationen" }, "settings": { "related_settings": "Ähnliche Einstellungen" }, "settings_appearance": { "related_code_blocks": "Farbschema für Code-Blöcke in Textnotizen", - "related_code_notes": "Farbschema für Code-Notizen" + "related_code_notes": "Farbschema für Code-Notizen", + "ui": "Benutzeroberfläche", + "ui_old_layout": "Altes Layout", + "ui_new_layout": "Neues Layout" }, "units": { "percentage": "%" @@ -2151,6 +2180,88 @@ "experimental_features": { "title": "Experimentelle Optionen", "disclaimer": "Diese Optionen sind experimentell und können Instabilitäten verursachen. Achtsam zu verwenden.", - "new_layout_name": "Neues Layout" + "new_layout_name": "Neues Layout", + "new_layout_description": "Probiere das neue Layout für eine modernere Darstellung und verbesserte Benutzbarkeit aus. Kann sich in Zukunft stark ändern." + }, + "server": { + "unknown_http_error_title": "Bei der Kommunikation mit dem Server ist ein Fehler aufgetreten", + "unknown_http_error_content": "Statuscode: {{statusCode}}\nURL: {{method}} {{url}}\nNachricht: {{message}}", + "traefik_blocks_requests": "Der Traefik Reverse-Proxy hat ein fatales Update bekommen, welche die Kommunikation mit dem Server stört." + }, + "tab_history_navigation_buttons": { + "go-back": "Zur vorherigen Notiz zurück kehren", + "go-forward": "Zur nächsten Notiz" + }, + "breadcrumb": { + "hoisted_badge": "Gehoben", + "hoisted_badge_title": "Abgesenkt", + "workspace_badge": "Arbeitsfläche", + "scroll_to_top_title": "Zum Anfang der Notiz springen", + "create_new_note": "Neue Unternotiz erstellen", + "empty_hide_archived_notes": "Archivierte Notizen ausblenden" + }, + "breadcrumb_badges": { + "read_only_explicit": "Nicht Änderbar", + "read_only_explicit_description": "Diese Notiz wurde händisch als nicht änderbar markiert.\nKlicke hier um sie temporär zu bearbeiten.", + "read_only_auto": "Automatisch nicht änderbar", + "read_only_auto_description": "Diese Notiz wurde automatisch aus Leistungsgründen als nicht änderbar markiert. Dieses automatische Limit kann in den Einstellungen angepasst werden.\n\nKlicke hier, um sie temporär zu bearbeiten.", + "read_only_temporarily_disabled": "Temporär bearbeitbar", + "read_only_temporarily_disabled_description": "Diese Notiz ist aktuell bearbeitbar, ist aber normalerweise nicht änderbar. Sobald du zu einer anderen Notiz navigierst, kehrt diese Notiz in ihren Normalzustand zurück.\n\nKlicke hier, um die Notiz wieder nicht änderbar zu machen.", + "shared_publicly": "Öffentlich geteilt", + "shared_locally": "Lokal geteilt", + "shared_copy_to_clipboard": "Link in die Zwischenablage kopieren", + "shared_open_in_browser": "Link öffnen", + "shared_unshare": "Teilen aufheben", + "clipped_note": "Internetschnellverweis", + "clipped_note_description": "Diese Notiz wurde von {{url}} übernommen.\n\nKlicke hier, um zum Ursprung zu gehen.", + "execute_script": "Skript ausführen", + "execute_script_description": "Diese Notiz ist eine Skriptnotiz. Klicke hier, um das Skript auszuführen.", + "execute_sql": "SQL ausführen", + "execute_sql_description": "Diese Notiz ist eine SQL-Notiz. Klicke hier, um die SQL-Abfrage auszuführen.", + "save_status_saved": "Gespeichert", + "save_status_saving": "Speichern...", + "save_status_unsaved": "Nicht gespeichert", + "save_status_error": "Speichern fehlgeschlagen", + "save_status_saving_tooltip": "Änderungen werden gespeichert.", + "save_status_unsaved_tooltip": "Es gibt ungespeicherte Änderungen, welche gleich automatisch gespeichert werden.", + "save_status_error_tooltip": "Beim speichern der Notiz ist ein Fehler aufgetreten. Wenn möglich, versuche die Notiz woandershin zu kopieren und die Applikation neu zu laden." + }, + "status_bar": { + "language_title": "Inhaltssprache ändern", + "note_info_title": "Notizinfo anzeigen (z.B.: Datum, Notizgröße)", + "backlinks_one": "{{count}} Rücklink", + "backlinks_other": "{{count}} Rücklinks", + "backlinks_title_one": "Rücklink anzeigen", + "backlinks_title_other": "Rücklinks anzeigen", + "attachments_one": "{{count}} Anhang", + "attachments_other": "{{count}} Anhänge", + "attachments_title_one": "Anhang in einem neuen Tab öffnen", + "attachments_title_other": "Anhänge in einem neuen Tab öffnen", + "attributes_one": "{{count}} Eigenschaft", + "attributes_other": "{{count}} Eigenschaften", + "attributes_title": "Eigene und gererbte Eigenschaften", + "note_paths_one": "{{count}} Pfad", + "note_paths_other": "{{count}} Pfade", + "note_paths_title": "Notizpfade", + "code_note_switcher": "Sprachmodus ändern" + }, + "attributes_panel": { + "title": "Notizeigenschaften" + }, + "right_pane": { + "empty_message": "Für diese Notiz gibt es nichts anzuzeigen", + "empty_button": "Anzeige ausblenden", + "toggle": "Rechte Anzeige umschalten", + "custom_widget_go_to_source": "Zum Ursprungscode" + }, + "pdf": { + "attachments_one": "{{count}} Anhang", + "attachments_other": "{{count}} Anhänge", + "layers_one": "{{count}} Ebene", + "layers_other": "{{count}} Ebenen", + "pages_one": "{{count}} Seite", + "pages_other": "{{count}} Seiten", + "pages_alt": "Seite {{pageNumber}}", + "pages_loading": "Laden..." } } From 932966591958d868a8175aa37691dc7e957e4a7a Mon Sep 17 00:00:00 2001 From: Gishky Date: Tue, 13 Jan 2026 14:25:34 +0100 Subject: [PATCH 033/353] Translated using Weblate (English (United Kingdom)) Currently translated at 1.9% (34 of 1759 strings) Translation: Trilium Notes/Client Translate-URL: https://hosted.weblate.org/projects/trilium/client/en_GB/ --- apps/client/src/translations/en-GB/translation.json | 3 +++ 1 file changed, 3 insertions(+) diff --git a/apps/client/src/translations/en-GB/translation.json b/apps/client/src/translations/en-GB/translation.json index 4c2ed6bcef..aedd8f2a99 100644 --- a/apps/client/src/translations/en-GB/translation.json +++ b/apps/client/src/translations/en-GB/translation.json @@ -69,5 +69,8 @@ "clear-color": "Clear note colour", "set-color": "Set note colour", "set-custom-color": "Set custom note colour" + }, + "about": { + "title": "About Trilium Notes" } } From 79ca299726093ee29fcea08517f0ace89607342a Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Tue, 13 Jan 2026 22:49:46 +0200 Subject: [PATCH 034/353] feat(i18n): add workflow to check translation coverage --- .github/workflows/i18n.yml | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 .github/workflows/i18n.yml diff --git a/.github/workflows/i18n.yml b/.github/workflows/i18n.yml new file mode 100644 index 0000000000..6b36b788f1 --- /dev/null +++ b/.github/workflows/i18n.yml @@ -0,0 +1,26 @@ +name: Internationalization +on: + push: + branches: + - "weblate:*" + workflow_dispatch: + pull_request: + paths: + - "apps/client/src/translations/**" + +jobs: + i18n-check: + name: Check i18n translations + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v6 + - uses: pnpm/action-setup@v4 + - name: Set up node & dependencies + uses: actions/setup-node@v6 + with: + node-version: 24 + cache: 'pnpm' + - name: Install dependencies + run: pnpm install --frozen-lockfile + - name: Check translations + run: pnpm tsx scripts/translation/check-translation-coverage.ts From e7ff364c011e5440ba64504de1746546fc721fe4 Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Tue, 13 Jan 2026 22:52:51 +0200 Subject: [PATCH 035/353] chore(i18n): trigger on workflow change --- .github/workflows/i18n.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/i18n.yml b/.github/workflows/i18n.yml index 6b36b788f1..d75384f8a1 100644 --- a/.github/workflows/i18n.yml +++ b/.github/workflows/i18n.yml @@ -7,6 +7,7 @@ on: pull_request: paths: - "apps/client/src/translations/**" + - ".github/workflows/i18n.yml" jobs: i18n-check: From 4800f2a172796b408e4e77892cc1809de442e086 Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Tue, 13 Jan 2026 22:56:27 +0200 Subject: [PATCH 036/353] chore(ci/i18n): add permissions --- .github/workflows/i18n.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/workflows/i18n.yml b/.github/workflows/i18n.yml index d75384f8a1..a07eeea8d3 100644 --- a/.github/workflows/i18n.yml +++ b/.github/workflows/i18n.yml @@ -9,6 +9,9 @@ on: - "apps/client/src/translations/**" - ".github/workflows/i18n.yml" +permissions: + contents: read + jobs: i18n-check: name: Check i18n translations From d445209eebb5c0902528b8af246f1bf2f653649b Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 14 Jan 2026 01:00:18 +0000 Subject: [PATCH 037/353] chore(deps): update dependency @smithy/middleware-retry to v4.4.22 --- packages/ckeditor5/package.json | 2 +- pnpm-lock.yaml | 349 ++++++++++++++++++++++++-------- 2 files changed, 270 insertions(+), 81 deletions(-) diff --git a/packages/ckeditor5/package.json b/packages/ckeditor5/package.json index 170c7038bb..f3c1097716 100644 --- a/packages/ckeditor5/package.json +++ b/packages/ckeditor5/package.json @@ -16,7 +16,7 @@ "ckeditor5-premium-features": "47.3.0" }, "devDependencies": { - "@smithy/middleware-retry": "4.4.20", + "@smithy/middleware-retry": "4.4.22", "@types/jquery": "3.5.33" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index b61dc0f909..9721913b7a 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -888,8 +888,8 @@ importers: version: 47.3.0(bufferutil@4.0.9)(ckeditor5@47.3.0)(utf-8-validate@6.0.5) devDependencies: '@smithy/middleware-retry': - specifier: 4.4.20 - version: 4.4.20 + specifier: 4.4.22 + version: 4.4.22 '@types/jquery': specifier: 3.5.33 version: 3.5.33 @@ -4760,18 +4760,22 @@ packages: resolution: {integrity: sha512-rzMY6CaKx2qxrbYbqjXWS0plqEy7LOdKHS0bg4ixJ6aoGDPNUcLWk/FRNuCILh7GKLG9TFUXYYeQQldMBBwuyw==} engines: {node: '>=18.0.0'} + '@smithy/abort-controller@4.2.8': + resolution: {integrity: sha512-peuVfkYHAmS5ybKxWcfraK7WBBP0J+rkfUcbHJJKQ4ir3UAUNQI+Y4Vt/PqSzGqgloJ5O1dk7+WzNL8wcCSXbw==} + engines: {node: '>=18.0.0'} + '@smithy/config-resolver@4.1.4': resolution: {integrity: sha512-prmU+rDddxHOH0oNcwemL+SwnzcG65sBF2yXRO7aeXIn/xTlq2pX7JLVbkBnVLowHLg4/OL4+jBmv9hVrVGS+w==} engines: {node: '>=18.0.0'} - '@smithy/core@3.20.2': - resolution: {integrity: sha512-nc99TseyTwL1bg+T21cyEA5oItNy1XN4aUeyOlXJnvyRW5VSK1oRKRoSM/Iq0KFPuqZMxjBemSZHZCOZbSyBMw==} - engines: {node: '>=18.0.0'} - '@smithy/core@3.20.3': resolution: {integrity: sha512-iwF1e0+H9vX+4reUA0WjKnc5ueg0Leinl5kI7wsie5bVXoYdzkpINz6NPYhpr/5InOv332a7wNV5AxJyFoVUsQ==} engines: {node: '>=18.0.0'} + '@smithy/core@3.20.5': + resolution: {integrity: sha512-0Tz77Td8ynHaowXfOdrD0F1IH4tgWGUhwmLwmpFyTbr+U9WHXNNp9u/k2VjBXGnSe7BwjBERRpXsokGTXzNjhA==} + engines: {node: '>=18.0.0'} + '@smithy/credential-provider-imds@4.0.6': resolution: {integrity: sha512-hKMWcANhUiNbCJouYkZ9V3+/Qf9pteR1dnwgdyzR09R4ODEYx8BbUysHwRSyex4rZ9zapddZhLFTnT4ZijR4pw==} engines: {node: '>=18.0.0'} @@ -4804,6 +4808,10 @@ packages: resolution: {integrity: sha512-h/Fi+o7mti4n8wx1SR6UHWLaakwHRx29sizvp8OOm7iqwKGFneT06GCSFhml6Bha5BT6ot5pj3CYZnCHhGC2Rg==} engines: {node: '>=18.0.0'} + '@smithy/fetch-http-handler@5.3.9': + resolution: {integrity: sha512-I4UhmcTYXBrct03rwzQX1Y/iqQlzVQaPxWjCjula++5EmWq9YGBrx6bbGqluGc1f0XEfhSkiY4jhLgbsJUMKRA==} + engines: {node: '>=18.0.0'} + '@smithy/hash-node@4.0.4': resolution: {integrity: sha512-qnbTPUhCVnCgBp4z4BUJUhOEkVwxiEi1cyFM+Zj6o+aY8OFGxUQleKWq8ltgp3dujuhXojIvJWdoqpm6dVO3lQ==} engines: {node: '>=18.0.0'} @@ -4824,16 +4832,16 @@ packages: resolution: {integrity: sha512-F7gDyfI2BB1Kc+4M6rpuOLne5LOcEknH1n6UQB69qv+HucXBR1rkzXBnQTB2q46sFy1PM/zuSJOB532yc8bg3w==} engines: {node: '>=18.0.0'} - '@smithy/middleware-endpoint@4.4.3': - resolution: {integrity: sha512-Zb8R35hjBhp1oFhiaAZ9QhClpPHdEDmNDC2UrrB2fqV0oNDUUPH12ovZHB5xi/Rd+pg/BJHOR1q+SfsieSKPQg==} - engines: {node: '>=18.0.0'} - '@smithy/middleware-endpoint@4.4.4': resolution: {integrity: sha512-TFxS6C5bGSc4djD1SLVmstCpfYDjmMnBR4KRDge5HEEtgSINGPKuxLvaAGfSPx5FFoMaTJkj4jJLNFggeWpRoQ==} engines: {node: '>=18.0.0'} - '@smithy/middleware-retry@4.4.20': - resolution: {integrity: sha512-+UvEn/8HGzh/6zpe9xFGZe7go4/fzflggfeRG/TvdGLoUY7Gw+4RgzKJEPU2NvPo0k/j/o7vvx25ZWyOXeGoxw==} + '@smithy/middleware-endpoint@4.4.6': + resolution: {integrity: sha512-dpq3bHqbEOBqGBjRVHVFP3eUSPpX0BYtg1D5d5Irgk6orGGAuZfY22rC4sErhg+ZfY/Y0kPqm1XpAmDZg7DeuA==} + engines: {node: '>=18.0.0'} + + '@smithy/middleware-retry@4.4.22': + resolution: {integrity: sha512-vwWDMaObSMjw6WCC/3Ae9G7uul5Sk95jr07CDk1gkIMpaDic0phPS1MpVAZ6+YkF7PAzRlpsDjxPwRlh/S11FQ==} engines: {node: '>=18.0.0'} '@smithy/middleware-serde@4.2.6': @@ -4844,14 +4852,26 @@ packages: resolution: {integrity: sha512-8rDGYen5m5+NV9eHv9ry0sqm2gI6W7mc1VSFMtn6Igo25S507/HaOX9LTHAS2/J32VXD0xSzrY0H5FJtOMS4/w==} engines: {node: '>=18.0.0'} + '@smithy/middleware-serde@4.2.9': + resolution: {integrity: sha512-eMNiej0u/snzDvlqRGSN3Vl0ESn3838+nKyVfF2FKNXFbi4SERYT6PR392D39iczngbqqGG0Jl1DlCnp7tBbXQ==} + engines: {node: '>=18.0.0'} + '@smithy/middleware-stack@4.2.7': resolution: {integrity: sha512-bsOT0rJ+HHlZd9crHoS37mt8qRRN/h9jRve1SXUhVbkRzu0QaNYZp1i1jha4n098tsvROjcwfLlfvcFuJSXEsw==} engines: {node: '>=18.0.0'} + '@smithy/middleware-stack@4.2.8': + resolution: {integrity: sha512-w6LCfOviTYQjBctOKSwy6A8FIkQy7ICvglrZFl6Bw4FmcQ1Z420fUtIhxaUZZshRe0VCq4kvDiPiXrPZAe8oRA==} + engines: {node: '>=18.0.0'} + '@smithy/node-config-provider@4.3.7': resolution: {integrity: sha512-7r58wq8sdOcrwWe+klL9y3bc4GW1gnlfnFOuL7CXa7UzfhzhxKuzNdtqgzmTV+53lEp9NXh5hY/S4UgjLOzPfw==} engines: {node: '>=18.0.0'} + '@smithy/node-config-provider@4.3.8': + resolution: {integrity: sha512-aFP1ai4lrbVlWjfpAfRSL8KFcnJQYfTl5QxLJXY32vghJrDuFyPZ6LtUL+JEGYiFRG1PfPLHLoxj107ulncLIg==} + engines: {node: '>=18.0.0'} + '@smithy/node-http-handler@4.4.5': resolution: {integrity: sha512-CMnzM9R2WqlqXQGtIlsHMEZfXKJVTIrqCNoSd/QpAyp+Dw0a1Vps13l6ma1fH8g7zSPNsA59B/kWgeylFuA/lw==} engines: {node: '>=18.0.0'} @@ -4860,14 +4880,26 @@ packages: resolution: {integrity: sha512-NELpdmBOO6EpZtWgQiHjoShs1kmweaiNuETUpuup+cmm/xJYjT4eUjfhrXRP4jCOaAsS3c3yPsP3B+K+/fyPCQ==} engines: {node: '>=18.0.0'} + '@smithy/node-http-handler@4.4.8': + resolution: {integrity: sha512-q9u+MSbJVIJ1QmJ4+1u+cERXkrhuILCBDsJUBAW1MPE6sFonbCNaegFuwW9ll8kh5UdyY3jOkoOGlc7BesoLpg==} + engines: {node: '>=18.0.0'} + '@smithy/property-provider@4.2.7': resolution: {integrity: sha512-jmNYKe9MGGPoSl/D7JDDs1C8b3dC8f/w78LbaVfoTtWy4xAd5dfjaFG9c9PWPihY4ggMQNQSMtzU77CNgAJwmA==} engines: {node: '>=18.0.0'} + '@smithy/property-provider@4.2.8': + resolution: {integrity: sha512-EtCTbyIveCKeOXDSWSdze3k612yCPq1YbXsbqX3UHhkOSW8zKsM9NOJG5gTIya0vbY2DIaieG8pKo1rITHYL0w==} + engines: {node: '>=18.0.0'} + '@smithy/protocol-http@5.3.7': resolution: {integrity: sha512-1r07pb994I20dD/c2seaZhoCuNYm0rWrvBxhCQ70brNh11M5Ml2ew6qJVo0lclB3jMIXirD4s2XRXRe7QEi0xA==} engines: {node: '>=18.0.0'} + '@smithy/protocol-http@5.3.8': + resolution: {integrity: sha512-QNINVDhxpZ5QnP3aviNHQFlRogQZDfYlCkQT+7tJnErPQbDhysondEjhikuANxgMsZrkGeiAxXy4jguEGsDrWQ==} + engines: {node: '>=18.0.0'} + '@smithy/querystring-builder@4.2.5': resolution: {integrity: sha512-y98otMI1saoajeik2kLfGyRp11e5U/iJYH/wLCh3aTV/XutbGT9nziKGkgCaMD1ghK7p6htHMm6b6scl9JRUWg==} engines: {node: '>=18.0.0'} @@ -4876,6 +4908,10 @@ packages: resolution: {integrity: sha512-eKONSywHZxK4tBxe2lXEysh8wbBdvDWiA+RIuaxZSgCMmA0zMgoDpGLJhnyj+c0leOQprVnXOmcB4m+W9Rw7sg==} engines: {node: '>=18.0.0'} + '@smithy/querystring-builder@4.2.8': + resolution: {integrity: sha512-Xr83r31+DrE8CP3MqPgMJl+pQlLLmOfiEUnoyAlGzzJIrEsbKsPy1hqH0qySaQm4oWrCBlUqRt+idEgunKB+iw==} + engines: {node: '>=18.0.0'} + '@smithy/querystring-parser@4.2.5': resolution: {integrity: sha512-031WCTdPYgiQRYNPXznHXof2YM0GwL6SeaSyTH/P72M1Vz73TvCNH2Nq8Iu2IEPq9QP2yx0/nrw5YmSeAi/AjQ==} engines: {node: '>=18.0.0'} @@ -4884,30 +4920,46 @@ packages: resolution: {integrity: sha512-3X5ZvzUHmlSTHAXFlswrS6EGt8fMSIxX/c3Rm1Pni3+wYWB6cjGocmRIoqcQF9nU5OgGmL0u7l9m44tSUpfj9w==} engines: {node: '>=18.0.0'} + '@smithy/querystring-parser@4.2.8': + resolution: {integrity: sha512-vUurovluVy50CUlazOiXkPq40KGvGWSdmusa3130MwrR1UNnNgKAlj58wlOe61XSHRpUfIIh6cE0zZ8mzKaDPA==} + engines: {node: '>=18.0.0'} + '@smithy/service-error-classification@4.2.7': resolution: {integrity: sha512-YB7oCbukqEb2Dlh3340/8g8vNGbs/QsNNRms+gv3N2AtZz9/1vSBx6/6tpwQpZMEJFs7Uq8h4mmOn48ZZ72MkA==} engines: {node: '>=18.0.0'} + '@smithy/service-error-classification@4.2.8': + resolution: {integrity: sha512-mZ5xddodpJhEt3RkCjbmUQuXUOaPNTkbMGR0bcS8FE0bJDLMZlhmpgrvPNCYglVw5rsYTpSnv19womw9WWXKQQ==} + engines: {node: '>=18.0.0'} + '@smithy/shared-ini-file-loader@4.4.2': resolution: {integrity: sha512-M7iUUff/KwfNunmrgtqBfvZSzh3bmFgv/j/t1Y1dQ+8dNo34br1cqVEqy6v0mYEgi0DkGO7Xig0AnuOaEGVlcg==} engines: {node: '>=18.0.0'} - '@smithy/signature-v4@5.1.2': - resolution: {integrity: sha512-d3+U/VpX7a60seHziWnVZOHuEgJlclufjkS6zhXvxcJgkJq4UWdH5eOBLzHRMx6gXjsdT9h6lfpmLzbrdupHgQ==} + '@smithy/shared-ini-file-loader@4.4.3': + resolution: {integrity: sha512-DfQjxXQnzC5UbCUPeC3Ie8u+rIWZTvuDPAGU/BxzrOGhRvgUanaP68kDZA+jaT3ZI+djOf+4dERGlm9mWfFDrg==} engines: {node: '>=18.0.0'} - '@smithy/smithy-client@4.10.4': - resolution: {integrity: sha512-rHig+BWjhjlHlah67ryaW9DECYixiJo5pQCTEwsJyarRBAwHMMC3iYz5MXXAHXe64ZAMn1NhTUSTFIu1T6n6jg==} + '@smithy/signature-v4@5.1.2': + resolution: {integrity: sha512-d3+U/VpX7a60seHziWnVZOHuEgJlclufjkS6zhXvxcJgkJq4UWdH5eOBLzHRMx6gXjsdT9h6lfpmLzbrdupHgQ==} engines: {node: '>=18.0.0'} '@smithy/smithy-client@4.10.5': resolution: {integrity: sha512-uotYm3WDne01R0DxBqF9J8WZc8gSgdj+uC7Lv/R+GinH4rxcgRLxLDayYkyGAboZlYszly6maQA+NGQ5N4gLhQ==} engines: {node: '>=18.0.0'} + '@smithy/smithy-client@4.10.7': + resolution: {integrity: sha512-Uznt0I9z3os3Z+8pbXrOSCTXCA6vrjyN7Ub+8l2pRDum44vLv8qw0qGVkJN0/tZBZotaEFHrDPKUoPNueTr5Vg==} + engines: {node: '>=18.0.0'} + '@smithy/types@4.11.0': resolution: {integrity: sha512-mlrmL0DRDVe3mNrjTcVcZEgkFmufITfUAPBEA+AHYiIeYyJebso/He1qLbP3PssRe22KUzLRpQSdBPbXdgZ2VA==} engines: {node: '>=18.0.0'} + '@smithy/types@4.12.0': + resolution: {integrity: sha512-9YcuJVTOBDjg9LWo23Qp0lTQ3D7fQsQtwle0jVfpbUHy9qBwCEgKuVH4FqFB3VYu0nwdHKiEMA+oXz7oV8X1kw==} + engines: {node: '>=18.0.0'} + '@smithy/url-parser@4.2.5': resolution: {integrity: sha512-VaxMGsilqFnK1CeBX+LXnSuaMx4sTL/6znSZh2829txWieazdVxr54HmiyTsIbpOTLcf5nYpq9lpzmwRdxj6rQ==} engines: {node: '>=18.0.0'} @@ -4916,6 +4968,10 @@ packages: resolution: {integrity: sha512-/RLtVsRV4uY3qPWhBDsjwahAtt3x2IsMGnP5W1b2VZIe+qgCqkLxI1UOHDZp1Q1QSOrdOR32MF3Ph2JfWT1VHg==} engines: {node: '>=18.0.0'} + '@smithy/url-parser@4.2.8': + resolution: {integrity: sha512-NQho9U68TGMEU639YkXnVMV3GEFFULmmaWdlu1E9qzyIePOHsoSnagTGSDv1Zi8DCNN6btxOSdgmy5E/hsZwhA==} + engines: {node: '>=18.0.0'} + '@smithy/util-base64@4.3.0': resolution: {integrity: sha512-GkXZ59JfyxsIwNTWFnjmFEI8kZpRNIBfxKjv09+nkAWPt/4aGaEWMM04m4sxgNVWkbt2MdSvE3KF/PfX4nFedQ==} engines: {node: '>=18.0.0'} @@ -4960,10 +5016,22 @@ packages: resolution: {integrity: sha512-i1IkpbOae6NvIKsEeLLM9/2q4X+M90KV3oCFgWQI4q0Qz+yUZvsr+gZPdAEAtFhWQhAHpTsJO8DRJPuwVyln+w==} engines: {node: '>=18.0.0'} + '@smithy/util-middleware@4.2.8': + resolution: {integrity: sha512-PMqfeJxLcNPMDgvPbbLl/2Vpin+luxqTGPpW3NAQVLbRrFRzTa4rNAASYeIGjRV9Ytuhzny39SpyU04EQreF+A==} + engines: {node: '>=18.0.0'} + '@smithy/util-retry@4.2.7': resolution: {integrity: sha512-SvDdsQyF5CIASa4EYVT02LukPHVzAgUA4kMAuZ97QJc2BpAqZfA4PINB8/KOoCXEw9tsuv/jQjMeaHFvxdLNGg==} engines: {node: '>=18.0.0'} + '@smithy/util-retry@4.2.8': + resolution: {integrity: sha512-CfJqwvoRY0kTGe5AkQokpURNCT1u/MkRzMTASWMPPo2hNSnKtF1D45dQl3DE2LKLr4m+PW9mCeBMJr5mCAVThg==} + engines: {node: '>=18.0.0'} + + '@smithy/util-stream@4.5.10': + resolution: {integrity: sha512-jbqemy51UFSZSp2y0ZmRfckmrzuKww95zT9BYMmuJ8v3altGcqjwoV1tzpOwuHaKrwQrCjIzOib499ymr2f98g==} + engines: {node: '>=18.0.0'} + '@smithy/util-stream@4.5.8': resolution: {integrity: sha512-ZnnBhTapjM0YPGUSmOs0Mcg/Gg87k503qG4zU2v/+Js2Gu+daKOJMeqcQns8ajepY8tgzzfYxl6kQyZKml6O2w==} engines: {node: '>=18.0.0'} @@ -14442,7 +14510,7 @@ snapshots: '@aws-sdk/util-user-agent-browser': 3.821.0 '@aws-sdk/util-user-agent-node': 3.823.0 '@smithy/config-resolver': 4.1.4 - '@smithy/core': 3.20.2 + '@smithy/core': 3.20.3 '@smithy/eventstream-serde-browser': 4.0.4 '@smithy/eventstream-serde-config-resolver': 4.1.2 '@smithy/eventstream-serde-node': 4.0.4 @@ -14450,14 +14518,14 @@ snapshots: '@smithy/hash-node': 4.0.4 '@smithy/invalid-dependency': 4.0.4 '@smithy/middleware-content-length': 4.0.4 - '@smithy/middleware-endpoint': 4.4.3 - '@smithy/middleware-retry': 4.4.20 + '@smithy/middleware-endpoint': 4.4.4 + '@smithy/middleware-retry': 4.4.22 '@smithy/middleware-serde': 4.2.6 '@smithy/middleware-stack': 4.2.7 '@smithy/node-config-provider': 4.3.7 '@smithy/node-http-handler': 4.4.5 '@smithy/protocol-http': 5.3.7 - '@smithy/smithy-client': 4.10.4 + '@smithy/smithy-client': 4.10.5 '@smithy/types': 4.11.0 '@smithy/url-parser': 4.2.5 '@smithy/util-base64': 4.3.0 @@ -14491,19 +14559,19 @@ snapshots: '@aws-sdk/util-user-agent-browser': 3.821.0 '@aws-sdk/util-user-agent-node': 3.823.0 '@smithy/config-resolver': 4.1.4 - '@smithy/core': 3.20.2 + '@smithy/core': 3.20.3 '@smithy/fetch-http-handler': 5.3.8 '@smithy/hash-node': 4.0.4 '@smithy/invalid-dependency': 4.0.4 '@smithy/middleware-content-length': 4.0.4 - '@smithy/middleware-endpoint': 4.4.3 - '@smithy/middleware-retry': 4.4.20 + '@smithy/middleware-endpoint': 4.4.4 + '@smithy/middleware-retry': 4.4.22 '@smithy/middleware-serde': 4.2.8 '@smithy/middleware-stack': 4.2.7 '@smithy/node-config-provider': 4.3.7 '@smithy/node-http-handler': 4.4.7 '@smithy/protocol-http': 5.3.7 - '@smithy/smithy-client': 4.10.4 + '@smithy/smithy-client': 4.10.5 '@smithy/types': 4.11.0 '@smithy/url-parser': 4.2.7 '@smithy/util-base64': 4.3.0 @@ -14523,12 +14591,12 @@ snapshots: dependencies: '@aws-sdk/types': 3.821.0 '@aws-sdk/xml-builder': 3.821.0 - '@smithy/core': 3.20.2 + '@smithy/core': 3.20.3 '@smithy/node-config-provider': 4.3.7 '@smithy/property-provider': 4.2.7 '@smithy/protocol-http': 5.3.7 '@smithy/signature-v4': 5.1.2 - '@smithy/smithy-client': 4.10.4 + '@smithy/smithy-client': 4.10.5 '@smithy/types': 4.11.0 '@smithy/util-base64': 4.3.0 '@smithy/util-body-length-browser': 4.2.0 @@ -14553,7 +14621,7 @@ snapshots: '@smithy/node-http-handler': 4.4.7 '@smithy/property-provider': 4.2.7 '@smithy/protocol-http': 5.3.7 - '@smithy/smithy-client': 4.10.4 + '@smithy/smithy-client': 4.10.5 '@smithy/types': 4.11.0 '@smithy/util-stream': 4.5.8 tslib: 2.8.1 @@ -14665,7 +14733,7 @@ snapshots: '@aws-sdk/core': 3.823.0 '@aws-sdk/types': 3.821.0 '@aws-sdk/util-endpoints': 3.821.0 - '@smithy/core': 3.20.2 + '@smithy/core': 3.20.3 '@smithy/protocol-http': 5.3.7 '@smithy/types': 4.11.0 tslib: 2.8.1 @@ -14685,19 +14753,19 @@ snapshots: '@aws-sdk/util-user-agent-browser': 3.821.0 '@aws-sdk/util-user-agent-node': 3.823.0 '@smithy/config-resolver': 4.1.4 - '@smithy/core': 3.20.2 + '@smithy/core': 3.20.3 '@smithy/fetch-http-handler': 5.3.8 '@smithy/hash-node': 4.0.4 '@smithy/invalid-dependency': 4.0.4 '@smithy/middleware-content-length': 4.0.4 - '@smithy/middleware-endpoint': 4.4.3 - '@smithy/middleware-retry': 4.4.20 + '@smithy/middleware-endpoint': 4.4.4 + '@smithy/middleware-retry': 4.4.22 '@smithy/middleware-serde': 4.2.8 '@smithy/middleware-stack': 4.2.7 '@smithy/node-config-provider': 4.3.7 '@smithy/node-http-handler': 4.4.7 '@smithy/protocol-http': 5.3.7 - '@smithy/smithy-client': 4.10.4 + '@smithy/smithy-client': 4.10.5 '@smithy/types': 4.11.0 '@smithy/url-parser': 4.2.7 '@smithy/util-base64': 4.3.0 @@ -15015,8 +15083,6 @@ snapshots: '@ckeditor/ckeditor5-core': 47.3.0 '@ckeditor/ckeditor5-upload': 47.3.0 ckeditor5: 47.3.0 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-ai@47.3.0(bufferutil@4.0.9)(utf-8-validate@6.0.5)': dependencies: @@ -15157,14 +15223,14 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.3.0 '@ckeditor/ckeditor5-widget': 47.3.0 es-toolkit: 1.39.5 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-cloud-services@47.3.0': dependencies: '@ckeditor/ckeditor5-core': 47.3.0 '@ckeditor/ckeditor5-utils': 47.3.0 ckeditor5: 47.3.0 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-code-block@47.3.0(patch_hash=2361d8caad7d6b5bddacc3a3b4aa37dbfba260b1c1b22a450413a79c1bb1ce95)': dependencies: @@ -15357,8 +15423,6 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.3.0 ckeditor5: 47.3.0 es-toolkit: 1.39.5 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-editor-classic@47.3.0': dependencies: @@ -15368,8 +15432,6 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.3.0 ckeditor5: 47.3.0 es-toolkit: 1.39.5 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-editor-decoupled@47.3.0': dependencies: @@ -15388,8 +15450,6 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.3.0 ckeditor5: 47.3.0 es-toolkit: 1.39.5 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-editor-multi-root@47.3.0': dependencies: @@ -15412,6 +15472,8 @@ snapshots: '@ckeditor/ckeditor5-table': 47.3.0 '@ckeditor/ckeditor5-utils': 47.3.0 ckeditor5: 47.3.0 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-emoji@47.3.0': dependencies: @@ -15594,6 +15656,8 @@ snapshots: '@ckeditor/ckeditor5-widget': 47.3.0 ckeditor5: 47.3.0 es-toolkit: 1.39.5 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-icons@47.3.0': {} @@ -15611,6 +15675,8 @@ snapshots: '@ckeditor/ckeditor5-widget': 47.3.0 ckeditor5: 47.3.0 es-toolkit: 1.39.5 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-import-word@47.3.0': dependencies: @@ -15636,6 +15702,8 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.3.0 '@ckeditor/ckeditor5-utils': 47.3.0 ckeditor5: 47.3.0 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-inspector@5.0.0': {} @@ -15645,6 +15713,8 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.3.0 '@ckeditor/ckeditor5-utils': 47.3.0 ckeditor5: 47.3.0 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-line-height@47.3.0': dependencies: @@ -15669,6 +15739,8 @@ snapshots: '@ckeditor/ckeditor5-widget': 47.3.0 ckeditor5: 47.3.0 es-toolkit: 1.39.5 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-list-multi-level@47.3.0': dependencies: @@ -15692,6 +15764,8 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.3.0 '@ckeditor/ckeditor5-utils': 47.3.0 ckeditor5: 47.3.0 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-markdown-gfm@47.3.0': dependencies: @@ -15820,6 +15894,8 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.3.0 '@ckeditor/ckeditor5-widget': 47.3.0 ckeditor5: 47.3.0 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-pagination@47.3.0': dependencies: @@ -15927,6 +16003,8 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.3.0 '@ckeditor/ckeditor5-utils': 47.3.0 ckeditor5: 47.3.0 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-slash-command@47.3.0': dependencies: @@ -15939,6 +16017,8 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.3.0 '@ckeditor/ckeditor5-utils': 47.3.0 ckeditor5: 47.3.0 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-source-editing-enhanced@47.3.0': dependencies: @@ -15986,6 +16066,8 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.3.0 ckeditor5: 47.3.0 es-toolkit: 1.39.5 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-table@47.3.0': dependencies: @@ -16112,6 +16194,8 @@ snapshots: '@ckeditor/ckeditor5-engine': 47.3.0 '@ckeditor/ckeditor5-utils': 47.3.0 es-toolkit: 1.39.5 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-widget@47.3.0': dependencies: @@ -16131,6 +16215,8 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.3.0 ckeditor5: 47.3.0 es-toolkit: 1.39.5 + transitivePeerDependencies: + - supports-color '@codemirror/autocomplete@6.18.6': dependencies: @@ -19168,6 +19254,11 @@ snapshots: '@smithy/types': 4.11.0 tslib: 2.8.1 + '@smithy/abort-controller@4.2.8': + dependencies: + '@smithy/types': 4.12.0 + tslib: 2.8.1 + '@smithy/config-resolver@4.1.4': dependencies: '@smithy/node-config-provider': 4.3.7 @@ -19176,7 +19267,7 @@ snapshots: '@smithy/util-middleware': 4.2.7 tslib: 2.8.1 - '@smithy/core@3.20.2': + '@smithy/core@3.20.3': dependencies: '@smithy/middleware-serde': 4.2.8 '@smithy/protocol-http': 5.3.7 @@ -19189,15 +19280,15 @@ snapshots: '@smithy/uuid': 1.1.0 tslib: 2.8.1 - '@smithy/core@3.20.3': + '@smithy/core@3.20.5': dependencies: - '@smithy/middleware-serde': 4.2.8 - '@smithy/protocol-http': 5.3.7 - '@smithy/types': 4.11.0 + '@smithy/middleware-serde': 4.2.9 + '@smithy/protocol-http': 5.3.8 + '@smithy/types': 4.12.0 '@smithy/util-base64': 4.3.0 '@smithy/util-body-length-browser': 4.2.0 - '@smithy/util-middleware': 4.2.7 - '@smithy/util-stream': 4.5.8 + '@smithy/util-middleware': 4.2.8 + '@smithy/util-stream': 4.5.10 '@smithy/util-utf8': 4.2.0 '@smithy/uuid': 1.1.0 tslib: 2.8.1 @@ -19256,6 +19347,14 @@ snapshots: '@smithy/util-base64': 4.3.0 tslib: 2.8.1 + '@smithy/fetch-http-handler@5.3.9': + dependencies: + '@smithy/protocol-http': 5.3.8 + '@smithy/querystring-builder': 4.2.8 + '@smithy/types': 4.12.0 + '@smithy/util-base64': 4.3.0 + tslib: 2.8.1 + '@smithy/hash-node@4.0.4': dependencies: '@smithy/types': 4.11.0 @@ -19282,17 +19381,6 @@ snapshots: '@smithy/types': 4.11.0 tslib: 2.8.1 - '@smithy/middleware-endpoint@4.4.3': - dependencies: - '@smithy/core': 3.20.2 - '@smithy/middleware-serde': 4.2.8 - '@smithy/node-config-provider': 4.3.7 - '@smithy/shared-ini-file-loader': 4.4.2 - '@smithy/types': 4.11.0 - '@smithy/url-parser': 4.2.7 - '@smithy/util-middleware': 4.2.7 - tslib: 2.8.1 - '@smithy/middleware-endpoint@4.4.4': dependencies: '@smithy/core': 3.20.3 @@ -19304,15 +19392,26 @@ snapshots: '@smithy/util-middleware': 4.2.7 tslib: 2.8.1 - '@smithy/middleware-retry@4.4.20': + '@smithy/middleware-endpoint@4.4.6': dependencies: - '@smithy/node-config-provider': 4.3.7 - '@smithy/protocol-http': 5.3.7 - '@smithy/service-error-classification': 4.2.7 - '@smithy/smithy-client': 4.10.5 - '@smithy/types': 4.11.0 - '@smithy/util-middleware': 4.2.7 - '@smithy/util-retry': 4.2.7 + '@smithy/core': 3.20.5 + '@smithy/middleware-serde': 4.2.9 + '@smithy/node-config-provider': 4.3.8 + '@smithy/shared-ini-file-loader': 4.4.3 + '@smithy/types': 4.12.0 + '@smithy/url-parser': 4.2.8 + '@smithy/util-middleware': 4.2.8 + tslib: 2.8.1 + + '@smithy/middleware-retry@4.4.22': + dependencies: + '@smithy/node-config-provider': 4.3.8 + '@smithy/protocol-http': 5.3.8 + '@smithy/service-error-classification': 4.2.8 + '@smithy/smithy-client': 4.10.7 + '@smithy/types': 4.12.0 + '@smithy/util-middleware': 4.2.8 + '@smithy/util-retry': 4.2.8 '@smithy/uuid': 1.1.0 tslib: 2.8.1 @@ -19328,11 +19427,22 @@ snapshots: '@smithy/types': 4.11.0 tslib: 2.8.1 + '@smithy/middleware-serde@4.2.9': + dependencies: + '@smithy/protocol-http': 5.3.8 + '@smithy/types': 4.12.0 + tslib: 2.8.1 + '@smithy/middleware-stack@4.2.7': dependencies: '@smithy/types': 4.11.0 tslib: 2.8.1 + '@smithy/middleware-stack@4.2.8': + dependencies: + '@smithy/types': 4.12.0 + tslib: 2.8.1 + '@smithy/node-config-provider@4.3.7': dependencies: '@smithy/property-provider': 4.2.7 @@ -19340,6 +19450,13 @@ snapshots: '@smithy/types': 4.11.0 tslib: 2.8.1 + '@smithy/node-config-provider@4.3.8': + dependencies: + '@smithy/property-provider': 4.2.8 + '@smithy/shared-ini-file-loader': 4.4.3 + '@smithy/types': 4.12.0 + tslib: 2.8.1 + '@smithy/node-http-handler@4.4.5': dependencies: '@smithy/abort-controller': 4.2.5 @@ -19356,16 +19473,34 @@ snapshots: '@smithy/types': 4.11.0 tslib: 2.8.1 + '@smithy/node-http-handler@4.4.8': + dependencies: + '@smithy/abort-controller': 4.2.8 + '@smithy/protocol-http': 5.3.8 + '@smithy/querystring-builder': 4.2.8 + '@smithy/types': 4.12.0 + tslib: 2.8.1 + '@smithy/property-provider@4.2.7': dependencies: '@smithy/types': 4.11.0 tslib: 2.8.1 + '@smithy/property-provider@4.2.8': + dependencies: + '@smithy/types': 4.12.0 + tslib: 2.8.1 + '@smithy/protocol-http@5.3.7': dependencies: '@smithy/types': 4.11.0 tslib: 2.8.1 + '@smithy/protocol-http@5.3.8': + dependencies: + '@smithy/types': 4.12.0 + tslib: 2.8.1 + '@smithy/querystring-builder@4.2.5': dependencies: '@smithy/types': 4.11.0 @@ -19378,6 +19513,12 @@ snapshots: '@smithy/util-uri-escape': 4.2.0 tslib: 2.8.1 + '@smithy/querystring-builder@4.2.8': + dependencies: + '@smithy/types': 4.12.0 + '@smithy/util-uri-escape': 4.2.0 + tslib: 2.8.1 + '@smithy/querystring-parser@4.2.5': dependencies: '@smithy/types': 4.11.0 @@ -19388,15 +19529,29 @@ snapshots: '@smithy/types': 4.11.0 tslib: 2.8.1 + '@smithy/querystring-parser@4.2.8': + dependencies: + '@smithy/types': 4.12.0 + tslib: 2.8.1 + '@smithy/service-error-classification@4.2.7': dependencies: '@smithy/types': 4.11.0 + '@smithy/service-error-classification@4.2.8': + dependencies: + '@smithy/types': 4.12.0 + '@smithy/shared-ini-file-loader@4.4.2': dependencies: '@smithy/types': 4.11.0 tslib: 2.8.1 + '@smithy/shared-ini-file-loader@4.4.3': + dependencies: + '@smithy/types': 4.12.0 + tslib: 2.8.1 + '@smithy/signature-v4@5.1.2': dependencies: '@smithy/is-array-buffer': 4.2.0 @@ -19408,16 +19563,6 @@ snapshots: '@smithy/util-utf8': 4.2.0 tslib: 2.8.1 - '@smithy/smithy-client@4.10.4': - dependencies: - '@smithy/core': 3.20.2 - '@smithy/middleware-endpoint': 4.4.3 - '@smithy/middleware-stack': 4.2.7 - '@smithy/protocol-http': 5.3.7 - '@smithy/types': 4.11.0 - '@smithy/util-stream': 4.5.8 - tslib: 2.8.1 - '@smithy/smithy-client@4.10.5': dependencies: '@smithy/core': 3.20.3 @@ -19428,10 +19573,24 @@ snapshots: '@smithy/util-stream': 4.5.8 tslib: 2.8.1 + '@smithy/smithy-client@4.10.7': + dependencies: + '@smithy/core': 3.20.5 + '@smithy/middleware-endpoint': 4.4.6 + '@smithy/middleware-stack': 4.2.8 + '@smithy/protocol-http': 5.3.8 + '@smithy/types': 4.12.0 + '@smithy/util-stream': 4.5.10 + tslib: 2.8.1 + '@smithy/types@4.11.0': dependencies: tslib: 2.8.1 + '@smithy/types@4.12.0': + dependencies: + tslib: 2.8.1 + '@smithy/url-parser@4.2.5': dependencies: '@smithy/querystring-parser': 4.2.5 @@ -19444,6 +19603,12 @@ snapshots: '@smithy/types': 4.11.0 tslib: 2.8.1 + '@smithy/url-parser@4.2.8': + dependencies: + '@smithy/querystring-parser': 4.2.8 + '@smithy/types': 4.12.0 + tslib: 2.8.1 + '@smithy/util-base64@4.3.0': dependencies: '@smithy/util-buffer-from': 4.2.0 @@ -19475,7 +19640,7 @@ snapshots: '@smithy/util-defaults-mode-browser@4.0.22': dependencies: '@smithy/property-provider': 4.2.7 - '@smithy/smithy-client': 4.10.4 + '@smithy/smithy-client': 4.10.5 '@smithy/types': 4.11.0 bowser: 2.11.0 tslib: 2.8.1 @@ -19486,7 +19651,7 @@ snapshots: '@smithy/credential-provider-imds': 4.0.6 '@smithy/node-config-provider': 4.3.7 '@smithy/property-provider': 4.2.7 - '@smithy/smithy-client': 4.10.4 + '@smithy/smithy-client': 4.10.5 '@smithy/types': 4.11.0 tslib: 2.8.1 @@ -19505,12 +19670,34 @@ snapshots: '@smithy/types': 4.11.0 tslib: 2.8.1 + '@smithy/util-middleware@4.2.8': + dependencies: + '@smithy/types': 4.12.0 + tslib: 2.8.1 + '@smithy/util-retry@4.2.7': dependencies: '@smithy/service-error-classification': 4.2.7 '@smithy/types': 4.11.0 tslib: 2.8.1 + '@smithy/util-retry@4.2.8': + dependencies: + '@smithy/service-error-classification': 4.2.8 + '@smithy/types': 4.12.0 + tslib: 2.8.1 + + '@smithy/util-stream@4.5.10': + dependencies: + '@smithy/fetch-http-handler': 5.3.9 + '@smithy/node-http-handler': 4.4.8 + '@smithy/types': 4.12.0 + '@smithy/util-base64': 4.3.0 + '@smithy/util-buffer-from': 4.2.0 + '@smithy/util-hex-encoding': 4.2.0 + '@smithy/util-utf8': 4.2.0 + tslib: 2.8.1 + '@smithy/util-stream@4.5.8': dependencies: '@smithy/fetch-http-handler': 5.3.8 @@ -21647,6 +21834,8 @@ snapshots: ckeditor5-collaboration@47.3.0: dependencies: '@ckeditor/ckeditor5-collaboration-core': 47.3.0 + transitivePeerDependencies: + - supports-color ckeditor5-premium-features@47.3.0(bufferutil@4.0.9)(ckeditor5@47.3.0)(utf-8-validate@6.0.5): dependencies: From 42b7f4c7957a80b62cff855271eed2a7f22c5d51 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 14 Jan 2026 01:01:06 +0000 Subject: [PATCH 038/353] fix(deps): update dependency react-i18next to v16.5.3 --- apps/client/package.json | 2 +- apps/website/package.json | 2 +- pnpm-lock.yaml | 52 ++++++++++++++++++++++++++------------- 3 files changed, 37 insertions(+), 19 deletions(-) diff --git a/apps/client/package.json b/apps/client/package.json index ab05938480..523d1919b4 100644 --- a/apps/client/package.json +++ b/apps/client/package.json @@ -60,7 +60,7 @@ "normalize.css": "8.0.1", "panzoom": "9.4.3", "preact": "10.28.2", - "react-i18next": "16.5.2", + "react-i18next": "16.5.3", "react-window": "2.2.5", "reveal.js": "5.2.1", "svg-pan-zoom": "3.6.2", diff --git a/apps/website/package.json b/apps/website/package.json index e63c16fc15..304563fcb4 100644 --- a/apps/website/package.json +++ b/apps/website/package.json @@ -14,7 +14,7 @@ "preact": "10.28.2", "preact-iso": "2.11.1", "preact-render-to-string": "6.6.5", - "react-i18next": "16.5.2" + "react-i18next": "16.5.3" }, "devDependencies": { "@preact/preset-vite": "2.10.2", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index b61dc0f909..d95fb2cb0d 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -296,8 +296,8 @@ importers: specifier: 10.28.2 version: 10.28.2 react-i18next: - specifier: 16.5.2 - version: 16.5.2(i18next@25.7.4(typescript@5.9.3))(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(typescript@5.9.3) + specifier: 16.5.3 + version: 16.5.3(i18next@25.7.4(typescript@5.9.3))(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(typescript@5.9.3) react-window: specifier: 2.2.5 version: 2.2.5(react-dom@19.2.3(react@19.2.3))(react@19.2.3) @@ -835,8 +835,8 @@ importers: specifier: 6.6.5 version: 6.6.5(preact@10.28.2) react-i18next: - specifier: 16.5.2 - version: 16.5.2(i18next@25.7.4(typescript@5.9.3))(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(typescript@5.9.3) + specifier: 16.5.3 + version: 16.5.3(i18next@25.7.4(typescript@5.9.3))(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(typescript@5.9.3) devDependencies: '@preact/preset-vite': specifier: 2.10.2 @@ -11875,8 +11875,8 @@ packages: peerDependencies: react: ^19.2.3 - react-i18next@16.5.2: - resolution: {integrity: sha512-GG/SBVxx9dvrO1uCs8VYdKfOP8NEBUhNP+2VDQLCifRJ8DL1qPq296k2ACNGyZMDe7iyIlz/LMJTQOs8HXSRvw==} + react-i18next@16.5.3: + resolution: {integrity: sha512-fo+/NNch37zqxOzlBYrWMx0uy/yInPkRfjSuy4lqKdaecR17nvCHnEUt3QyzA8XjQ2B/0iW/5BhaHR3ZmukpGw==} peerDependencies: i18next: '>= 25.6.2' react: '>= 16.8.0' @@ -15015,8 +15015,6 @@ snapshots: '@ckeditor/ckeditor5-core': 47.3.0 '@ckeditor/ckeditor5-upload': 47.3.0 ckeditor5: 47.3.0 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-ai@47.3.0(bufferutil@4.0.9)(utf-8-validate@6.0.5)': dependencies: @@ -15157,8 +15155,6 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.3.0 '@ckeditor/ckeditor5-widget': 47.3.0 es-toolkit: 1.39.5 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-cloud-services@47.3.0': dependencies: @@ -15357,8 +15353,6 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.3.0 ckeditor5: 47.3.0 es-toolkit: 1.39.5 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-editor-classic@47.3.0': dependencies: @@ -15368,8 +15362,6 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.3.0 ckeditor5: 47.3.0 es-toolkit: 1.39.5 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-editor-decoupled@47.3.0': dependencies: @@ -15412,6 +15404,8 @@ snapshots: '@ckeditor/ckeditor5-table': 47.3.0 '@ckeditor/ckeditor5-utils': 47.3.0 ckeditor5: 47.3.0 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-emoji@47.3.0': dependencies: @@ -15594,6 +15588,8 @@ snapshots: '@ckeditor/ckeditor5-widget': 47.3.0 ckeditor5: 47.3.0 es-toolkit: 1.39.5 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-icons@47.3.0': {} @@ -15611,6 +15607,8 @@ snapshots: '@ckeditor/ckeditor5-widget': 47.3.0 ckeditor5: 47.3.0 es-toolkit: 1.39.5 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-import-word@47.3.0': dependencies: @@ -15636,6 +15634,8 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.3.0 '@ckeditor/ckeditor5-utils': 47.3.0 ckeditor5: 47.3.0 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-inspector@5.0.0': {} @@ -15645,6 +15645,8 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.3.0 '@ckeditor/ckeditor5-utils': 47.3.0 ckeditor5: 47.3.0 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-line-height@47.3.0': dependencies: @@ -15669,6 +15671,8 @@ snapshots: '@ckeditor/ckeditor5-widget': 47.3.0 ckeditor5: 47.3.0 es-toolkit: 1.39.5 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-list-multi-level@47.3.0': dependencies: @@ -15692,6 +15696,8 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.3.0 '@ckeditor/ckeditor5-utils': 47.3.0 ckeditor5: 47.3.0 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-markdown-gfm@47.3.0': dependencies: @@ -15820,6 +15826,8 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.3.0 '@ckeditor/ckeditor5-widget': 47.3.0 ckeditor5: 47.3.0 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-pagination@47.3.0': dependencies: @@ -15927,6 +15935,8 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.3.0 '@ckeditor/ckeditor5-utils': 47.3.0 ckeditor5: 47.3.0 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-slash-command@47.3.0': dependencies: @@ -15939,6 +15949,8 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.3.0 '@ckeditor/ckeditor5-utils': 47.3.0 ckeditor5: 47.3.0 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-source-editing-enhanced@47.3.0': dependencies: @@ -15986,6 +15998,8 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.3.0 ckeditor5: 47.3.0 es-toolkit: 1.39.5 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-table@47.3.0': dependencies: @@ -16074,8 +16088,6 @@ snapshots: '@ckeditor/ckeditor5-icons': 47.3.0 '@ckeditor/ckeditor5-ui': 47.3.0 '@ckeditor/ckeditor5-utils': 47.3.0 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-upload@47.3.0': dependencies: @@ -16112,6 +16124,8 @@ snapshots: '@ckeditor/ckeditor5-engine': 47.3.0 '@ckeditor/ckeditor5-utils': 47.3.0 es-toolkit: 1.39.5 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-widget@47.3.0': dependencies: @@ -16131,6 +16145,8 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.3.0 ckeditor5: 47.3.0 es-toolkit: 1.39.5 + transitivePeerDependencies: + - supports-color '@codemirror/autocomplete@6.18.6': dependencies: @@ -21647,6 +21663,8 @@ snapshots: ckeditor5-collaboration@47.3.0: dependencies: '@ckeditor/ckeditor5-collaboration-core': 47.3.0 + transitivePeerDependencies: + - supports-color ckeditor5-premium-features@47.3.0(bufferutil@4.0.9)(ckeditor5@47.3.0)(utf-8-validate@6.0.5): dependencies: @@ -27978,7 +27996,7 @@ snapshots: react: 19.2.3 scheduler: 0.27.0 - react-i18next@16.5.2(i18next@25.7.4(typescript@5.9.3))(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(typescript@5.9.3): + react-i18next@16.5.3(i18next@25.7.4(typescript@5.9.3))(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(typescript@5.9.3): dependencies: '@babel/runtime': 7.28.4 html-parse-stringify: 3.0.1 From 3e284208efd578f0026aaf9dae2d891867fbdbb2 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 14 Jan 2026 01:01:57 +0000 Subject: [PATCH 039/353] chore(deps): update dependency @ckeditor/ckeditor5-dev-build-tools to v54.3.0 --- packages/ckeditor5-admonition/package.json | 2 +- packages/ckeditor5-footnotes/package.json | 2 +- .../ckeditor5-keyboard-marker/package.json | 2 +- packages/ckeditor5-math/package.json | 2 +- packages/ckeditor5-mermaid/package.json | 2 +- pnpm-lock.yaml | 64 ++++++++++++------- 6 files changed, 46 insertions(+), 28 deletions(-) diff --git a/packages/ckeditor5-admonition/package.json b/packages/ckeditor5-admonition/package.json index 428d3eb45e..44f11e7647 100644 --- a/packages/ckeditor5-admonition/package.json +++ b/packages/ckeditor5-admonition/package.json @@ -21,7 +21,7 @@ "ckeditor5-metadata.json" ], "devDependencies": { - "@ckeditor/ckeditor5-dev-build-tools": "54.2.3", + "@ckeditor/ckeditor5-dev-build-tools": "54.3.0", "@ckeditor/ckeditor5-inspector": ">=4.1.0", "@ckeditor/ckeditor5-package-tools": "5.0.1", "@typescript-eslint/eslint-plugin": "8.53.0", diff --git a/packages/ckeditor5-footnotes/package.json b/packages/ckeditor5-footnotes/package.json index ca48c2b891..8f5b034f4b 100644 --- a/packages/ckeditor5-footnotes/package.json +++ b/packages/ckeditor5-footnotes/package.json @@ -22,7 +22,7 @@ "ckeditor5-metadata.json" ], "devDependencies": { - "@ckeditor/ckeditor5-dev-build-tools": "54.2.3", + "@ckeditor/ckeditor5-dev-build-tools": "54.3.0", "@ckeditor/ckeditor5-inspector": ">=4.1.0", "@ckeditor/ckeditor5-package-tools": "5.0.1", "@typescript-eslint/eslint-plugin": "8.53.0", diff --git a/packages/ckeditor5-keyboard-marker/package.json b/packages/ckeditor5-keyboard-marker/package.json index 8757680a99..17422ddc15 100644 --- a/packages/ckeditor5-keyboard-marker/package.json +++ b/packages/ckeditor5-keyboard-marker/package.json @@ -24,7 +24,7 @@ "ckeditor5-metadata.json" ], "devDependencies": { - "@ckeditor/ckeditor5-dev-build-tools": "54.2.3", + "@ckeditor/ckeditor5-dev-build-tools": "54.3.0", "@ckeditor/ckeditor5-inspector": ">=4.1.0", "@ckeditor/ckeditor5-package-tools": "5.0.1", "@typescript-eslint/eslint-plugin": "8.53.0", diff --git a/packages/ckeditor5-math/package.json b/packages/ckeditor5-math/package.json index 8a49aba9ca..a74007774c 100644 --- a/packages/ckeditor5-math/package.json +++ b/packages/ckeditor5-math/package.json @@ -24,7 +24,7 @@ "ckeditor5-metadata.json" ], "devDependencies": { - "@ckeditor/ckeditor5-dev-build-tools": "54.2.3", + "@ckeditor/ckeditor5-dev-build-tools": "54.3.0", "@ckeditor/ckeditor5-inspector": ">=4.1.0", "@ckeditor/ckeditor5-package-tools": "5.0.1", "@typescript-eslint/eslint-plugin": "8.53.0", diff --git a/packages/ckeditor5-mermaid/package.json b/packages/ckeditor5-mermaid/package.json index 371301d7fc..ac3e58cb70 100644 --- a/packages/ckeditor5-mermaid/package.json +++ b/packages/ckeditor5-mermaid/package.json @@ -24,7 +24,7 @@ "ckeditor5-metadata.json" ], "devDependencies": { - "@ckeditor/ckeditor5-dev-build-tools": "54.2.3", + "@ckeditor/ckeditor5-dev-build-tools": "54.3.0", "@ckeditor/ckeditor5-inspector": ">=4.1.0", "@ckeditor/ckeditor5-package-tools": "5.0.1", "@typescript-eslint/eslint-plugin": "8.53.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index b61dc0f909..40c0b3138c 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -897,8 +897,8 @@ importers: packages/ckeditor5-admonition: devDependencies: '@ckeditor/ckeditor5-dev-build-tools': - specifier: 54.2.3 - version: 54.2.3(@swc/helpers@0.5.17)(tslib@2.8.1)(typescript@5.9.3) + specifier: 54.3.0 + version: 54.3.0(@swc/helpers@0.5.17)(tslib@2.8.1)(typescript@5.9.3) '@ckeditor/ckeditor5-inspector': specifier: '>=4.1.0' version: 5.0.0 @@ -957,8 +957,8 @@ importers: packages/ckeditor5-footnotes: devDependencies: '@ckeditor/ckeditor5-dev-build-tools': - specifier: 54.2.3 - version: 54.2.3(@swc/helpers@0.5.17)(tslib@2.8.1)(typescript@5.9.3) + specifier: 54.3.0 + version: 54.3.0(@swc/helpers@0.5.17)(tslib@2.8.1)(typescript@5.9.3) '@ckeditor/ckeditor5-inspector': specifier: '>=4.1.0' version: 5.0.0 @@ -1017,8 +1017,8 @@ importers: packages/ckeditor5-keyboard-marker: devDependencies: '@ckeditor/ckeditor5-dev-build-tools': - specifier: 54.2.3 - version: 54.2.3(@swc/helpers@0.5.17)(tslib@2.8.1)(typescript@5.9.3) + specifier: 54.3.0 + version: 54.3.0(@swc/helpers@0.5.17)(tslib@2.8.1)(typescript@5.9.3) '@ckeditor/ckeditor5-inspector': specifier: '>=4.1.0' version: 5.0.0 @@ -1084,8 +1084,8 @@ importers: version: 0.108.2 devDependencies: '@ckeditor/ckeditor5-dev-build-tools': - specifier: 54.2.3 - version: 54.2.3(@swc/helpers@0.5.17)(tslib@2.8.1)(typescript@5.9.3) + specifier: 54.3.0 + version: 54.3.0(@swc/helpers@0.5.17)(tslib@2.8.1)(typescript@5.9.3) '@ckeditor/ckeditor5-inspector': specifier: '>=4.1.0' version: 5.0.0 @@ -1151,8 +1151,8 @@ importers: version: 4.17.22 devDependencies: '@ckeditor/ckeditor5-dev-build-tools': - specifier: 54.2.3 - version: 54.2.3(@swc/helpers@0.5.17)(tslib@2.8.1)(typescript@5.9.3) + specifier: 54.3.0 + version: 54.3.0(@swc/helpers@0.5.17)(tslib@2.8.1)(typescript@5.9.3) '@ckeditor/ckeditor5-inspector': specifier: '>=4.1.0' version: 5.0.0 @@ -1849,8 +1849,8 @@ packages: '@ckeditor/ckeditor5-core@47.3.0': resolution: {integrity: sha512-jLawN3a8yL5lbwG8gZeJihcVKkDgq+rAFeXc+Rd+nw+c5uGCdkc5F7PCRjhw+JOGruXUhNsbiF/4iNv3hUcO/A==} - '@ckeditor/ckeditor5-dev-build-tools@54.2.3': - resolution: {integrity: sha512-Bc8EjAQY0DLnBTXurmYAJn9NEHCHV62sMQ8YKYtt54SjkHClEKohmptkcwEBvvSki6dHrj0X8laZrHD4UM+mWw==} + '@ckeditor/ckeditor5-dev-build-tools@54.3.0': + resolution: {integrity: sha512-46gPUhiSdDdFBsGewGgSnVq2E5vkwXBVN2L9dbQ3t9Wta3F4zjXxw+496mAq71hAVxfZmyACjaVT3pAJojUIRw==} engines: {node: '>=24.11.0', npm: '>=5.7.1'} hasBin: true @@ -15015,8 +15015,6 @@ snapshots: '@ckeditor/ckeditor5-core': 47.3.0 '@ckeditor/ckeditor5-upload': 47.3.0 ckeditor5: 47.3.0 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-ai@47.3.0(bufferutil@4.0.9)(utf-8-validate@6.0.5)': dependencies: @@ -15157,8 +15155,6 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.3.0 '@ckeditor/ckeditor5-widget': 47.3.0 es-toolkit: 1.39.5 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-cloud-services@47.3.0': dependencies: @@ -15233,7 +15229,7 @@ snapshots: transitivePeerDependencies: - supports-color - '@ckeditor/ckeditor5-dev-build-tools@54.2.3(@swc/helpers@0.5.17)(tslib@2.8.1)(typescript@5.9.3)': + '@ckeditor/ckeditor5-dev-build-tools@54.3.0(@swc/helpers@0.5.17)(tslib@2.8.1)(typescript@5.9.3)': dependencies: '@rollup/plugin-commonjs': 28.0.9(rollup@4.52.0) '@rollup/plugin-json': 6.1.0(rollup@4.52.0) @@ -15357,8 +15353,6 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.3.0 ckeditor5: 47.3.0 es-toolkit: 1.39.5 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-editor-classic@47.3.0': dependencies: @@ -15368,8 +15362,6 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.3.0 ckeditor5: 47.3.0 es-toolkit: 1.39.5 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-editor-decoupled@47.3.0': dependencies: @@ -15412,6 +15404,8 @@ snapshots: '@ckeditor/ckeditor5-table': 47.3.0 '@ckeditor/ckeditor5-utils': 47.3.0 ckeditor5: 47.3.0 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-emoji@47.3.0': dependencies: @@ -15594,6 +15588,8 @@ snapshots: '@ckeditor/ckeditor5-widget': 47.3.0 ckeditor5: 47.3.0 es-toolkit: 1.39.5 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-icons@47.3.0': {} @@ -15611,6 +15607,8 @@ snapshots: '@ckeditor/ckeditor5-widget': 47.3.0 ckeditor5: 47.3.0 es-toolkit: 1.39.5 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-import-word@47.3.0': dependencies: @@ -15636,6 +15634,8 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.3.0 '@ckeditor/ckeditor5-utils': 47.3.0 ckeditor5: 47.3.0 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-inspector@5.0.0': {} @@ -15645,6 +15645,8 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.3.0 '@ckeditor/ckeditor5-utils': 47.3.0 ckeditor5: 47.3.0 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-line-height@47.3.0': dependencies: @@ -15669,6 +15671,8 @@ snapshots: '@ckeditor/ckeditor5-widget': 47.3.0 ckeditor5: 47.3.0 es-toolkit: 1.39.5 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-list-multi-level@47.3.0': dependencies: @@ -15692,6 +15696,8 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.3.0 '@ckeditor/ckeditor5-utils': 47.3.0 ckeditor5: 47.3.0 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-markdown-gfm@47.3.0': dependencies: @@ -15820,6 +15826,8 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.3.0 '@ckeditor/ckeditor5-widget': 47.3.0 ckeditor5: 47.3.0 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-pagination@47.3.0': dependencies: @@ -15927,6 +15935,8 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.3.0 '@ckeditor/ckeditor5-utils': 47.3.0 ckeditor5: 47.3.0 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-slash-command@47.3.0': dependencies: @@ -15939,6 +15949,8 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.3.0 '@ckeditor/ckeditor5-utils': 47.3.0 ckeditor5: 47.3.0 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-source-editing-enhanced@47.3.0': dependencies: @@ -15986,6 +15998,8 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.3.0 ckeditor5: 47.3.0 es-toolkit: 1.39.5 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-table@47.3.0': dependencies: @@ -16074,8 +16088,6 @@ snapshots: '@ckeditor/ckeditor5-icons': 47.3.0 '@ckeditor/ckeditor5-ui': 47.3.0 '@ckeditor/ckeditor5-utils': 47.3.0 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-upload@47.3.0': dependencies: @@ -16112,6 +16124,8 @@ snapshots: '@ckeditor/ckeditor5-engine': 47.3.0 '@ckeditor/ckeditor5-utils': 47.3.0 es-toolkit: 1.39.5 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-widget@47.3.0': dependencies: @@ -16131,6 +16145,8 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.3.0 ckeditor5: 47.3.0 es-toolkit: 1.39.5 + transitivePeerDependencies: + - supports-color '@codemirror/autocomplete@6.18.6': dependencies: @@ -21647,6 +21663,8 @@ snapshots: ckeditor5-collaboration@47.3.0: dependencies: '@ckeditor/ckeditor5-collaboration-core': 47.3.0 + transitivePeerDependencies: + - supports-color ckeditor5-premium-features@47.3.0(bufferutil@4.0.9)(ckeditor5@47.3.0)(utf-8-validate@6.0.5): dependencies: From 2c4fb6c0d0961a8057158b1193c8980cf6fad013 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 14 Jan 2026 01:02:53 +0000 Subject: [PATCH 040/353] chore(deps): update node.js to v24.13.0 --- .nvmrc | 2 +- package.json | 2 +- pnpm-lock.yaml | 322 ++++++++++++++++++++++++++----------------------- 3 files changed, 171 insertions(+), 155 deletions(-) diff --git a/.nvmrc b/.nvmrc index 1e4f3920b5..cf2efde811 100644 --- a/.nvmrc +++ b/.nvmrc @@ -1 +1 @@ -24.12.0 \ No newline at end of file +24.13.0 \ No newline at end of file diff --git a/package.json b/package.json index f05f6aa039..6c6acd24bc 100644 --- a/package.json +++ b/package.json @@ -50,7 +50,7 @@ "@triliumnext/server": "workspace:*", "@types/express": "5.0.6", "@types/js-yaml": "4.0.9", - "@types/node": "24.10.7", + "@types/node": "24.10.8", "@vitest/browser-webdriverio": "4.0.17", "@vitest/coverage-v8": "4.0.17", "@vitest/ui": "4.0.17", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index b61dc0f909..1f72f06d75 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -53,14 +53,14 @@ importers: specifier: 4.0.9 version: 4.0.9 '@types/node': - specifier: 24.10.7 - version: 24.10.7 + specifier: 24.10.8 + version: 24.10.8 '@vitest/browser-webdriverio': specifier: 4.0.17 - version: 4.0.17(bufferutil@4.0.9)(msw@2.7.5(@types/node@24.10.7)(typescript@5.9.3))(utf-8-validate@6.0.5)(vite@7.3.1(@types/node@24.10.7)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1))(vitest@4.0.17)(webdriverio@9.23.0(bufferutil@4.0.9)(utf-8-validate@6.0.5)) + version: 4.0.17(bufferutil@4.0.9)(msw@2.7.5(@types/node@24.10.8)(typescript@5.9.3))(utf-8-validate@6.0.5)(vite@7.3.1(@types/node@24.10.8)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1))(vitest@4.0.17)(webdriverio@9.23.0(bufferutil@4.0.9)(utf-8-validate@6.0.5)) '@vitest/coverage-v8': specifier: 4.0.17 - version: 4.0.17(@vitest/browser@4.0.17(bufferutil@4.0.9)(msw@2.7.5(@types/node@24.10.7)(typescript@5.9.3))(utf-8-validate@6.0.5)(vite@7.3.1(@types/node@24.10.7)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1))(vitest@4.0.17))(vitest@4.0.17) + version: 4.0.17(@vitest/browser@4.0.17(bufferutil@4.0.9)(msw@2.7.5(@types/node@24.10.8)(typescript@5.9.3))(utf-8-validate@6.0.5)(vite@7.3.1(@types/node@24.10.8)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1))(vitest@4.0.17))(vitest@4.0.17) '@vitest/ui': specifier: 4.0.17 version: 4.0.17(vitest@4.0.17) @@ -111,7 +111,7 @@ importers: version: 0.18.0 rollup-plugin-webpack-stats: specifier: 2.1.9 - version: 2.1.9(rolldown@1.0.0-beta.29)(rollup@4.52.0)(vite@7.3.1(@types/node@24.10.7)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1)) + version: 2.1.9(rolldown@1.0.0-beta.29)(rollup@4.52.0)(vite@7.3.1(@types/node@24.10.8)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1)) tslib: specifier: 2.8.1 version: 2.8.1 @@ -129,13 +129,13 @@ importers: version: 2.0.1 vite: specifier: 7.3.1 - version: 7.3.1(@types/node@24.10.7)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) + version: 7.3.1(@types/node@24.10.8)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) vite-plugin-dts: specifier: 4.5.4 - version: 4.5.4(@types/node@24.10.7)(rollup@4.52.0)(typescript@5.9.3)(vite@7.3.1(@types/node@24.10.7)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1)) + version: 4.5.4(@types/node@24.10.8)(rollup@4.52.0)(typescript@5.9.3)(vite@7.3.1(@types/node@24.10.8)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1)) vitest: specifier: 4.0.17 - version: 4.0.17(@opentelemetry/api@1.9.0)(@types/node@24.10.7)(@vitest/browser-webdriverio@4.0.17)(@vitest/ui@4.0.17)(happy-dom@20.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.2)(msw@2.7.5(@types/node@24.10.7)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) + version: 4.0.17(@opentelemetry/api@1.9.0)(@types/node@24.10.8)(@vitest/browser-webdriverio@4.0.17)(@vitest/ui@4.0.17)(happy-dom@20.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.2)(msw@2.7.5(@types/node@24.10.8)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) apps/build-docs: devDependencies: @@ -319,7 +319,7 @@ importers: version: 5.0.0 '@prefresh/vite': specifier: 2.4.11 - version: 2.4.11(preact@10.28.2)(vite@7.3.1(@types/node@24.10.7)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1)) + version: 2.4.11(preact@10.28.2)(vite@7.3.1(@types/node@24.10.8)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1)) '@types/bootstrap': specifier: 5.2.10 version: 5.2.10 @@ -355,7 +355,7 @@ importers: version: 0.7.2 vite-plugin-static-copy: specifier: 3.1.4 - version: 3.1.4(vite@7.3.1(@types/node@24.10.7)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1)) + version: 3.1.4(vite@7.3.1(@types/node@24.10.8)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1)) apps/db-compare: dependencies: @@ -800,7 +800,7 @@ importers: version: 1.0.1 vite: specifier: 7.3.1 - version: 7.3.1(@types/node@24.10.7)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) + version: 7.3.1(@types/node@24.10.8)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) ws: specifier: 8.19.0 version: 8.19.0(bufferutil@4.0.9)(utf-8-validate@6.0.5) @@ -840,7 +840,7 @@ importers: devDependencies: '@preact/preset-vite': specifier: 2.10.2 - version: 2.10.2(@babel/core@7.28.0)(preact@10.28.2)(vite@7.3.1(@types/node@24.10.7)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1)) + version: 2.10.2(@babel/core@7.28.0)(preact@10.28.2)(vite@7.3.1(@types/node@24.10.8)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1)) eslint: specifier: 9.39.2 version: 9.39.2(jiti@2.6.1) @@ -855,10 +855,10 @@ importers: version: 0.4.2 vite: specifier: 7.3.1 - version: 7.3.1(@types/node@24.10.7)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) + version: 7.3.1(@types/node@24.10.8)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) vitest: specifier: 4.0.17 - version: 4.0.17(@opentelemetry/api@1.9.0)(@types/node@24.10.7)(@vitest/browser-webdriverio@4.0.17)(@vitest/ui@4.0.17)(happy-dom@20.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.2)(msw@2.7.5(@types/node@24.10.7)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) + version: 4.0.17(@opentelemetry/api@1.9.0)(@types/node@24.10.8)(@vitest/browser-webdriverio@4.0.17)(@vitest/ui@4.0.17)(happy-dom@20.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.2)(msw@2.7.5(@types/node@24.10.8)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) packages/ckeditor5: dependencies: @@ -904,7 +904,7 @@ importers: version: 5.0.0 '@ckeditor/ckeditor5-package-tools': specifier: 5.0.1 - version: 5.0.1(@babel/core@7.28.0)(@swc/core@1.11.29(@swc/helpers@0.5.17))(@types/node@24.10.7)(bufferutil@4.0.9)(esbuild@0.27.2)(utf-8-validate@6.0.5) + version: 5.0.1(@babel/core@7.28.0)(@swc/core@1.11.29(@swc/helpers@0.5.17))(@types/node@24.10.8)(bufferutil@4.0.9)(esbuild@0.27.2)(utf-8-validate@6.0.5) '@typescript-eslint/eslint-plugin': specifier: 8.53.0 version: 8.53.0(@typescript-eslint/parser@8.53.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) @@ -913,7 +913,7 @@ importers: version: 8.53.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) '@vitest/browser': specifier: 4.0.17 - version: 4.0.17(bufferutil@4.0.9)(msw@2.7.5(@types/node@24.10.7)(typescript@5.9.3))(utf-8-validate@6.0.5)(vite@7.3.1(@types/node@24.10.7)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1))(vitest@4.0.17) + version: 4.0.17(bufferutil@4.0.9)(msw@2.7.5(@types/node@24.10.8)(typescript@5.9.3))(utf-8-validate@6.0.5)(vite@7.3.1(@types/node@24.10.8)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1))(vitest@4.0.17) '@vitest/coverage-istanbul': specifier: 4.0.17 version: 4.0.17(vitest@4.0.17) @@ -940,16 +940,16 @@ importers: version: 13.0.0(stylelint@16.26.1(typescript@5.9.3)) ts-node: specifier: 10.9.2 - version: 10.9.2(@swc/core@1.11.29(@swc/helpers@0.5.17))(@types/node@24.10.7)(typescript@5.9.3) + version: 10.9.2(@swc/core@1.11.29(@swc/helpers@0.5.17))(@types/node@24.10.8)(typescript@5.9.3) typescript: specifier: 5.9.3 version: 5.9.3 vite-plugin-svgo: specifier: 2.0.0 - version: 2.0.0(typescript@5.9.3)(vite@7.3.1(@types/node@24.10.7)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1)) + version: 2.0.0(typescript@5.9.3)(vite@7.3.1(@types/node@24.10.8)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1)) vitest: specifier: 4.0.17 - version: 4.0.17(@opentelemetry/api@1.9.0)(@types/node@24.10.7)(@vitest/browser-webdriverio@4.0.17)(@vitest/ui@4.0.17)(happy-dom@20.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.2)(msw@2.7.5(@types/node@24.10.7)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) + version: 4.0.17(@opentelemetry/api@1.9.0)(@types/node@24.10.8)(@vitest/browser-webdriverio@4.0.17)(@vitest/ui@4.0.17)(happy-dom@20.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.2)(msw@2.7.5(@types/node@24.10.8)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) webdriverio: specifier: 9.23.0 version: 9.23.0(bufferutil@4.0.9)(utf-8-validate@6.0.5) @@ -964,7 +964,7 @@ importers: version: 5.0.0 '@ckeditor/ckeditor5-package-tools': specifier: 5.0.1 - version: 5.0.1(@babel/core@7.28.0)(@swc/core@1.11.29(@swc/helpers@0.5.17))(@types/node@24.10.7)(bufferutil@4.0.9)(esbuild@0.27.2)(utf-8-validate@6.0.5) + version: 5.0.1(@babel/core@7.28.0)(@swc/core@1.11.29(@swc/helpers@0.5.17))(@types/node@24.10.8)(bufferutil@4.0.9)(esbuild@0.27.2)(utf-8-validate@6.0.5) '@typescript-eslint/eslint-plugin': specifier: 8.53.0 version: 8.53.0(@typescript-eslint/parser@8.53.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) @@ -973,7 +973,7 @@ importers: version: 8.53.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) '@vitest/browser': specifier: 4.0.17 - version: 4.0.17(bufferutil@4.0.9)(msw@2.7.5(@types/node@24.10.7)(typescript@5.9.3))(utf-8-validate@6.0.5)(vite@7.3.1(@types/node@24.10.7)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1))(vitest@4.0.17) + version: 4.0.17(bufferutil@4.0.9)(msw@2.7.5(@types/node@24.10.8)(typescript@5.9.3))(utf-8-validate@6.0.5)(vite@7.3.1(@types/node@24.10.8)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1))(vitest@4.0.17) '@vitest/coverage-istanbul': specifier: 4.0.17 version: 4.0.17(vitest@4.0.17) @@ -1000,16 +1000,16 @@ importers: version: 13.0.0(stylelint@16.26.1(typescript@5.9.3)) ts-node: specifier: 10.9.2 - version: 10.9.2(@swc/core@1.11.29(@swc/helpers@0.5.17))(@types/node@24.10.7)(typescript@5.9.3) + version: 10.9.2(@swc/core@1.11.29(@swc/helpers@0.5.17))(@types/node@24.10.8)(typescript@5.9.3) typescript: specifier: 5.9.3 version: 5.9.3 vite-plugin-svgo: specifier: 2.0.0 - version: 2.0.0(typescript@5.9.3)(vite@7.3.1(@types/node@24.10.7)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1)) + version: 2.0.0(typescript@5.9.3)(vite@7.3.1(@types/node@24.10.8)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1)) vitest: specifier: 4.0.17 - version: 4.0.17(@opentelemetry/api@1.9.0)(@types/node@24.10.7)(@vitest/browser-webdriverio@4.0.17)(@vitest/ui@4.0.17)(happy-dom@20.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.2)(msw@2.7.5(@types/node@24.10.7)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) + version: 4.0.17(@opentelemetry/api@1.9.0)(@types/node@24.10.8)(@vitest/browser-webdriverio@4.0.17)(@vitest/ui@4.0.17)(happy-dom@20.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.2)(msw@2.7.5(@types/node@24.10.8)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) webdriverio: specifier: 9.23.0 version: 9.23.0(bufferutil@4.0.9)(utf-8-validate@6.0.5) @@ -1024,7 +1024,7 @@ importers: version: 5.0.0 '@ckeditor/ckeditor5-package-tools': specifier: 5.0.1 - version: 5.0.1(@babel/core@7.28.0)(@swc/core@1.11.29(@swc/helpers@0.5.17))(@types/node@24.10.7)(bufferutil@4.0.9)(esbuild@0.27.2)(utf-8-validate@6.0.5) + version: 5.0.1(@babel/core@7.28.0)(@swc/core@1.11.29(@swc/helpers@0.5.17))(@types/node@24.10.8)(bufferutil@4.0.9)(esbuild@0.27.2)(utf-8-validate@6.0.5) '@typescript-eslint/eslint-plugin': specifier: 8.53.0 version: 8.53.0(@typescript-eslint/parser@8.53.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) @@ -1033,7 +1033,7 @@ importers: version: 8.53.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) '@vitest/browser': specifier: 4.0.17 - version: 4.0.17(bufferutil@4.0.9)(msw@2.7.5(@types/node@24.10.7)(typescript@5.9.3))(utf-8-validate@6.0.5)(vite@7.3.1(@types/node@24.10.7)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1))(vitest@4.0.17) + version: 4.0.17(bufferutil@4.0.9)(msw@2.7.5(@types/node@24.10.8)(typescript@5.9.3))(utf-8-validate@6.0.5)(vite@7.3.1(@types/node@24.10.8)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1))(vitest@4.0.17) '@vitest/coverage-istanbul': specifier: 4.0.17 version: 4.0.17(vitest@4.0.17) @@ -1060,16 +1060,16 @@ importers: version: 13.0.0(stylelint@16.26.1(typescript@5.9.3)) ts-node: specifier: 10.9.2 - version: 10.9.2(@swc/core@1.11.29(@swc/helpers@0.5.17))(@types/node@24.10.7)(typescript@5.9.3) + version: 10.9.2(@swc/core@1.11.29(@swc/helpers@0.5.17))(@types/node@24.10.8)(typescript@5.9.3) typescript: specifier: 5.9.3 version: 5.9.3 vite-plugin-svgo: specifier: 2.0.0 - version: 2.0.0(typescript@5.9.3)(vite@7.3.1(@types/node@24.10.7)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1)) + version: 2.0.0(typescript@5.9.3)(vite@7.3.1(@types/node@24.10.8)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1)) vitest: specifier: 4.0.17 - version: 4.0.17(@opentelemetry/api@1.9.0)(@types/node@24.10.7)(@vitest/browser-webdriverio@4.0.17)(@vitest/ui@4.0.17)(happy-dom@20.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.2)(msw@2.7.5(@types/node@24.10.7)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) + version: 4.0.17(@opentelemetry/api@1.9.0)(@types/node@24.10.8)(@vitest/browser-webdriverio@4.0.17)(@vitest/ui@4.0.17)(happy-dom@20.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.2)(msw@2.7.5(@types/node@24.10.8)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) webdriverio: specifier: 9.23.0 version: 9.23.0(bufferutil@4.0.9)(utf-8-validate@6.0.5) @@ -1091,7 +1091,7 @@ importers: version: 5.0.0 '@ckeditor/ckeditor5-package-tools': specifier: 5.0.1 - version: 5.0.1(@babel/core@7.28.0)(@swc/core@1.11.29(@swc/helpers@0.5.17))(@types/node@24.10.7)(bufferutil@4.0.9)(esbuild@0.27.2)(utf-8-validate@6.0.5) + version: 5.0.1(@babel/core@7.28.0)(@swc/core@1.11.29(@swc/helpers@0.5.17))(@types/node@24.10.8)(bufferutil@4.0.9)(esbuild@0.27.2)(utf-8-validate@6.0.5) '@typescript-eslint/eslint-plugin': specifier: 8.53.0 version: 8.53.0(@typescript-eslint/parser@8.53.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) @@ -1100,7 +1100,7 @@ importers: version: 8.53.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) '@vitest/browser': specifier: 4.0.17 - version: 4.0.17(bufferutil@4.0.9)(msw@2.7.5(@types/node@24.10.7)(typescript@5.9.3))(utf-8-validate@6.0.5)(vite@7.3.1(@types/node@24.10.7)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1))(vitest@4.0.17) + version: 4.0.17(bufferutil@4.0.9)(msw@2.7.5(@types/node@24.10.8)(typescript@5.9.3))(utf-8-validate@6.0.5)(vite@7.3.1(@types/node@24.10.8)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1))(vitest@4.0.17) '@vitest/coverage-istanbul': specifier: 4.0.17 version: 4.0.17(vitest@4.0.17) @@ -1127,16 +1127,16 @@ importers: version: 13.0.0(stylelint@16.26.1(typescript@5.9.3)) ts-node: specifier: 10.9.2 - version: 10.9.2(@swc/core@1.11.29(@swc/helpers@0.5.17))(@types/node@24.10.7)(typescript@5.9.3) + version: 10.9.2(@swc/core@1.11.29(@swc/helpers@0.5.17))(@types/node@24.10.8)(typescript@5.9.3) typescript: specifier: 5.9.3 version: 5.9.3 vite-plugin-svgo: specifier: 2.0.0 - version: 2.0.0(typescript@5.9.3)(vite@7.3.1(@types/node@24.10.7)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1)) + version: 2.0.0(typescript@5.9.3)(vite@7.3.1(@types/node@24.10.8)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1)) vitest: specifier: 4.0.17 - version: 4.0.17(@opentelemetry/api@1.9.0)(@types/node@24.10.7)(@vitest/browser-webdriverio@4.0.17)(@vitest/ui@4.0.17)(happy-dom@20.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.2)(msw@2.7.5(@types/node@24.10.7)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) + version: 4.0.17(@opentelemetry/api@1.9.0)(@types/node@24.10.8)(@vitest/browser-webdriverio@4.0.17)(@vitest/ui@4.0.17)(happy-dom@20.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.2)(msw@2.7.5(@types/node@24.10.8)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) webdriverio: specifier: 9.23.0 version: 9.23.0(bufferutil@4.0.9)(utf-8-validate@6.0.5) @@ -1158,7 +1158,7 @@ importers: version: 5.0.0 '@ckeditor/ckeditor5-package-tools': specifier: 5.0.1 - version: 5.0.1(@babel/core@7.28.0)(@swc/core@1.11.29(@swc/helpers@0.5.17))(@types/node@24.10.7)(bufferutil@4.0.9)(esbuild@0.27.2)(utf-8-validate@6.0.5) + version: 5.0.1(@babel/core@7.28.0)(@swc/core@1.11.29(@swc/helpers@0.5.17))(@types/node@24.10.8)(bufferutil@4.0.9)(esbuild@0.27.2)(utf-8-validate@6.0.5) '@typescript-eslint/eslint-plugin': specifier: 8.53.0 version: 8.53.0(@typescript-eslint/parser@8.53.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) @@ -1167,7 +1167,7 @@ importers: version: 8.53.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) '@vitest/browser': specifier: 4.0.17 - version: 4.0.17(bufferutil@4.0.9)(msw@2.7.5(@types/node@24.10.7)(typescript@5.9.3))(utf-8-validate@6.0.5)(vite@7.3.1(@types/node@24.10.7)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1))(vitest@4.0.17) + version: 4.0.17(bufferutil@4.0.9)(msw@2.7.5(@types/node@24.10.8)(typescript@5.9.3))(utf-8-validate@6.0.5)(vite@7.3.1(@types/node@24.10.8)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1))(vitest@4.0.17) '@vitest/coverage-istanbul': specifier: 4.0.17 version: 4.0.17(vitest@4.0.17) @@ -1194,16 +1194,16 @@ importers: version: 13.0.0(stylelint@16.26.1(typescript@5.9.3)) ts-node: specifier: 10.9.2 - version: 10.9.2(@swc/core@1.11.29(@swc/helpers@0.5.17))(@types/node@24.10.7)(typescript@5.9.3) + version: 10.9.2(@swc/core@1.11.29(@swc/helpers@0.5.17))(@types/node@24.10.8)(typescript@5.9.3) typescript: specifier: 5.9.3 version: 5.9.3 vite-plugin-svgo: specifier: 2.0.0 - version: 2.0.0(typescript@5.9.3)(vite@7.3.1(@types/node@24.10.7)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1)) + version: 2.0.0(typescript@5.9.3)(vite@7.3.1(@types/node@24.10.8)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1)) vitest: specifier: 4.0.17 - version: 4.0.17(@opentelemetry/api@1.9.0)(@types/node@24.10.7)(@vitest/browser-webdriverio@4.0.17)(@vitest/ui@4.0.17)(happy-dom@20.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.2)(msw@2.7.5(@types/node@24.10.7)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) + version: 4.0.17(@opentelemetry/api@1.9.0)(@types/node@24.10.8)(@vitest/browser-webdriverio@4.0.17)(@vitest/ui@4.0.17)(happy-dom@20.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.2)(msw@2.7.5(@types/node@24.10.8)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) webdriverio: specifier: 9.23.0 version: 9.23.0(bufferutil@4.0.9)(utf-8-validate@6.0.5) @@ -5459,8 +5459,8 @@ packages: '@types/node@22.19.1': resolution: {integrity: sha512-LCCV0HdSZZZb34qifBsyWlUmok6W7ouER+oQIGBScS8EsZsQbrtFTUrDX4hOl+CS6p7cnNC4td+qrSVGSCTUfQ==} - '@types/node@24.10.7': - resolution: {integrity: sha512-+054pVMzVTmRQV8BhpGv3UyfZ2Llgl8rdpDTon+cUH9+na0ncBVXj3wTUKh14+Kiz18ziM3b4ikpP5/Pc0rQEQ==} + '@types/node@24.10.8': + resolution: {integrity: sha512-r0bBaXu5Swb05doFYO2kTWHMovJnNVbCsII0fhesM8bNRlLhXIuckley4a2DaD+vOdmm5G+zGkQZAPZsF80+YQ==} '@types/parse-json@4.0.2': resolution: {integrity: sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==} @@ -15015,8 +15015,6 @@ snapshots: '@ckeditor/ckeditor5-core': 47.3.0 '@ckeditor/ckeditor5-upload': 47.3.0 ckeditor5: 47.3.0 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-ai@47.3.0(bufferutil@4.0.9)(utf-8-validate@6.0.5)': dependencies: @@ -15157,8 +15155,6 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.3.0 '@ckeditor/ckeditor5-widget': 47.3.0 es-toolkit: 1.39.5 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-cloud-services@47.3.0': dependencies: @@ -15230,8 +15226,6 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.3.0 '@ckeditor/ckeditor5-watchdog': 47.3.0 es-toolkit: 1.39.5 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-dev-build-tools@54.2.3(@swc/helpers@0.5.17)(tslib@2.8.1)(typescript@5.9.3)': dependencies: @@ -15357,8 +15351,6 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.3.0 ckeditor5: 47.3.0 es-toolkit: 1.39.5 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-editor-classic@47.3.0': dependencies: @@ -15368,8 +15360,6 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.3.0 ckeditor5: 47.3.0 es-toolkit: 1.39.5 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-editor-decoupled@47.3.0': dependencies: @@ -15412,6 +15402,8 @@ snapshots: '@ckeditor/ckeditor5-table': 47.3.0 '@ckeditor/ckeditor5-utils': 47.3.0 ckeditor5: 47.3.0 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-emoji@47.3.0': dependencies: @@ -15594,6 +15586,8 @@ snapshots: '@ckeditor/ckeditor5-widget': 47.3.0 ckeditor5: 47.3.0 es-toolkit: 1.39.5 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-icons@47.3.0': {} @@ -15611,6 +15605,8 @@ snapshots: '@ckeditor/ckeditor5-widget': 47.3.0 ckeditor5: 47.3.0 es-toolkit: 1.39.5 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-import-word@47.3.0': dependencies: @@ -15636,6 +15632,8 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.3.0 '@ckeditor/ckeditor5-utils': 47.3.0 ckeditor5: 47.3.0 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-inspector@5.0.0': {} @@ -15645,6 +15643,8 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.3.0 '@ckeditor/ckeditor5-utils': 47.3.0 ckeditor5: 47.3.0 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-line-height@47.3.0': dependencies: @@ -15669,6 +15669,8 @@ snapshots: '@ckeditor/ckeditor5-widget': 47.3.0 ckeditor5: 47.3.0 es-toolkit: 1.39.5 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-list-multi-level@47.3.0': dependencies: @@ -15692,6 +15694,8 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.3.0 '@ckeditor/ckeditor5-utils': 47.3.0 ckeditor5: 47.3.0 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-markdown-gfm@47.3.0': dependencies: @@ -15774,7 +15778,7 @@ snapshots: es-toolkit: 1.39.5 protobufjs: 7.5.0 - '@ckeditor/ckeditor5-package-tools@5.0.1(@babel/core@7.28.0)(@swc/core@1.11.29(@swc/helpers@0.5.17))(@types/node@24.10.7)(bufferutil@4.0.9)(esbuild@0.27.2)(utf-8-validate@6.0.5)': + '@ckeditor/ckeditor5-package-tools@5.0.1(@babel/core@7.28.0)(@swc/core@1.11.29(@swc/helpers@0.5.17))(@types/node@24.10.8)(bufferutil@4.0.9)(esbuild@0.27.2)(utf-8-validate@6.0.5)': dependencies: '@ckeditor/ckeditor5-dev-translations': 54.0.0(@babel/core@7.28.0)(@swc/core@1.11.29(@swc/helpers@0.5.17))(esbuild@0.27.2)(typescript@5.0.4)(webpack@5.101.3(@swc/core@1.11.29(@swc/helpers@0.5.17))(esbuild@0.27.2)) '@ckeditor/ckeditor5-dev-utils': 54.0.0(@babel/core@7.28.0)(@swc/core@1.11.29(@swc/helpers@0.5.17))(esbuild@0.27.2)(typescript@5.0.4)(webpack@5.101.3(@swc/core@1.11.29(@swc/helpers@0.5.17))(esbuild@0.27.2)) @@ -15793,7 +15797,7 @@ snapshots: stylelint-config-ckeditor5: 2.0.1(stylelint@16.26.1(typescript@5.9.3)) terser-webpack-plugin: 5.3.14(@swc/core@1.11.29(@swc/helpers@0.5.17))(esbuild@0.27.2)(webpack@5.101.3(@swc/core@1.11.29(@swc/helpers@0.5.17))(esbuild@0.27.2)) ts-loader: 9.5.4(typescript@5.0.4)(webpack@5.101.3(@swc/core@1.11.29(@swc/helpers@0.5.17))(esbuild@0.27.2)) - ts-node: 10.9.2(@swc/core@1.11.29(@swc/helpers@0.5.17))(@types/node@24.10.7)(typescript@5.0.4) + ts-node: 10.9.2(@swc/core@1.11.29(@swc/helpers@0.5.17))(@types/node@24.10.8)(typescript@5.0.4) typescript: 5.0.4 upath: 2.0.1 webpack: 5.101.3(@swc/core@1.11.29(@swc/helpers@0.5.17))(esbuild@0.27.2) @@ -15820,6 +15824,8 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.3.0 '@ckeditor/ckeditor5-widget': 47.3.0 ckeditor5: 47.3.0 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-pagination@47.3.0': dependencies: @@ -15927,6 +15933,8 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.3.0 '@ckeditor/ckeditor5-utils': 47.3.0 ckeditor5: 47.3.0 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-slash-command@47.3.0': dependencies: @@ -15939,6 +15947,8 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.3.0 '@ckeditor/ckeditor5-utils': 47.3.0 ckeditor5: 47.3.0 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-source-editing-enhanced@47.3.0': dependencies: @@ -15986,6 +15996,8 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.3.0 ckeditor5: 47.3.0 es-toolkit: 1.39.5 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-table@47.3.0': dependencies: @@ -16074,8 +16086,6 @@ snapshots: '@ckeditor/ckeditor5-icons': 47.3.0 '@ckeditor/ckeditor5-ui': 47.3.0 '@ckeditor/ckeditor5-utils': 47.3.0 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-upload@47.3.0': dependencies: @@ -16112,6 +16122,8 @@ snapshots: '@ckeditor/ckeditor5-engine': 47.3.0 '@ckeditor/ckeditor5-utils': 47.3.0 es-toolkit: 1.39.5 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-widget@47.3.0': dependencies: @@ -16131,6 +16143,8 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.3.0 ckeditor5: 47.3.0 es-toolkit: 1.39.5 + transitivePeerDependencies: + - supports-color '@codemirror/autocomplete@6.18.6': dependencies: @@ -17440,26 +17454,26 @@ snapshots: '@inquirer/core': 9.2.1 '@inquirer/type': 2.0.0 - '@inquirer/confirm@5.1.21(@types/node@24.10.7)': + '@inquirer/confirm@5.1.21(@types/node@24.10.8)': dependencies: - '@inquirer/core': 10.3.2(@types/node@24.10.7) - '@inquirer/type': 3.0.10(@types/node@24.10.7) + '@inquirer/core': 10.3.2(@types/node@24.10.8) + '@inquirer/type': 3.0.10(@types/node@24.10.8) optionalDependencies: - '@types/node': 24.10.7 + '@types/node': 24.10.8 optional: true - '@inquirer/core@10.3.2(@types/node@24.10.7)': + '@inquirer/core@10.3.2(@types/node@24.10.8)': dependencies: '@inquirer/ansi': 1.0.2 '@inquirer/figures': 1.0.15 - '@inquirer/type': 3.0.10(@types/node@24.10.7) + '@inquirer/type': 3.0.10(@types/node@24.10.8) cli-width: 4.1.0 mute-stream: 2.0.0 signal-exit: 4.1.0 wrap-ansi: 6.2.0 yoctocolors-cjs: 2.1.3 optionalDependencies: - '@types/node': 24.10.7 + '@types/node': 24.10.8 optional: true '@inquirer/core@9.2.1': @@ -17549,9 +17563,9 @@ snapshots: dependencies: mute-stream: 1.0.0 - '@inquirer/type@3.0.10(@types/node@24.10.7)': + '@inquirer/type@3.0.10(@types/node@24.10.8)': optionalDependencies: - '@types/node': 24.10.7 + '@types/node': 24.10.8 optional: true '@isaacs/balanced-match@4.0.1': {} @@ -17989,23 +18003,23 @@ snapshots: dependencies: langium: 3.3.1 - '@microsoft/api-extractor-model@7.30.6(@types/node@24.10.7)': + '@microsoft/api-extractor-model@7.30.6(@types/node@24.10.8)': dependencies: '@microsoft/tsdoc': 0.15.1 '@microsoft/tsdoc-config': 0.17.1 - '@rushstack/node-core-library': 5.13.1(@types/node@24.10.7) + '@rushstack/node-core-library': 5.13.1(@types/node@24.10.8) transitivePeerDependencies: - '@types/node' - '@microsoft/api-extractor@7.52.8(@types/node@24.10.7)': + '@microsoft/api-extractor@7.52.8(@types/node@24.10.8)': dependencies: - '@microsoft/api-extractor-model': 7.30.6(@types/node@24.10.7) + '@microsoft/api-extractor-model': 7.30.6(@types/node@24.10.8) '@microsoft/tsdoc': 0.15.1 '@microsoft/tsdoc-config': 0.17.1 - '@rushstack/node-core-library': 5.13.1(@types/node@24.10.7) + '@rushstack/node-core-library': 5.13.1(@types/node@24.10.8) '@rushstack/rig-package': 0.5.3 - '@rushstack/terminal': 0.15.3(@types/node@24.10.7) - '@rushstack/ts-command-line': 5.0.1(@types/node@24.10.7) + '@rushstack/terminal': 0.15.3(@types/node@24.10.8) + '@rushstack/ts-command-line': 5.0.1(@types/node@24.10.8) lodash: 4.17.21 minimatch: 3.0.8 resolve: 1.22.10 @@ -18378,18 +18392,18 @@ snapshots: '@popperjs/core@2.11.8': {} - '@preact/preset-vite@2.10.2(@babel/core@7.28.0)(preact@10.28.2)(vite@7.3.1(@types/node@24.10.7)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1))': + '@preact/preset-vite@2.10.2(@babel/core@7.28.0)(preact@10.28.2)(vite@7.3.1(@types/node@24.10.8)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1))': dependencies: '@babel/core': 7.28.0 '@babel/plugin-transform-react-jsx': 7.27.1(@babel/core@7.28.0) '@babel/plugin-transform-react-jsx-development': 7.27.1(@babel/core@7.28.0) - '@prefresh/vite': 2.4.8(preact@10.28.2)(vite@7.3.1(@types/node@24.10.7)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1)) + '@prefresh/vite': 2.4.8(preact@10.28.2)(vite@7.3.1(@types/node@24.10.8)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1)) '@rollup/pluginutils': 4.2.1 babel-plugin-transform-hook-names: 1.0.2(@babel/core@7.28.0) debug: 4.4.1 picocolors: 1.1.1 - vite: 7.3.1(@types/node@24.10.7)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) - vite-prerender-plugin: 0.5.11(vite@7.3.1(@types/node@24.10.7)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1)) + vite: 7.3.1(@types/node@24.10.8)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) + vite-prerender-plugin: 0.5.11(vite@7.3.1(@types/node@24.10.8)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1)) transitivePeerDependencies: - preact - supports-color @@ -18409,7 +18423,7 @@ snapshots: '@prefresh/utils@1.2.1': {} - '@prefresh/vite@2.4.11(preact@10.28.2)(vite@7.3.1(@types/node@24.10.7)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1))': + '@prefresh/vite@2.4.11(preact@10.28.2)(vite@7.3.1(@types/node@24.10.8)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1))': dependencies: '@babel/core': 7.28.0 '@prefresh/babel-plugin': 0.5.2 @@ -18417,11 +18431,11 @@ snapshots: '@prefresh/utils': 1.2.1 '@rollup/pluginutils': 4.2.1 preact: 10.28.2 - vite: 7.3.1(@types/node@24.10.7)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) + vite: 7.3.1(@types/node@24.10.8)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) transitivePeerDependencies: - supports-color - '@prefresh/vite@2.4.8(preact@10.28.2)(vite@7.3.1(@types/node@24.10.7)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1))': + '@prefresh/vite@2.4.8(preact@10.28.2)(vite@7.3.1(@types/node@24.10.8)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1))': dependencies: '@babel/core': 7.28.0 '@prefresh/babel-plugin': 0.5.2 @@ -18429,7 +18443,7 @@ snapshots: '@prefresh/utils': 1.2.1 '@rollup/pluginutils': 4.2.1 preact: 10.28.2 - vite: 7.3.1(@types/node@24.10.7)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) + vite: 7.3.1(@types/node@24.10.8)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) transitivePeerDependencies: - supports-color @@ -19057,7 +19071,7 @@ snapshots: '@rollup/rollup-win32-x64-msvc@4.52.0': optional: true - '@rushstack/node-core-library@5.13.1(@types/node@24.10.7)': + '@rushstack/node-core-library@5.13.1(@types/node@24.10.8)': dependencies: ajv: 8.13.0 ajv-draft-04: 1.0.0(ajv@8.13.0) @@ -19068,23 +19082,23 @@ snapshots: resolve: 1.22.10 semver: 7.5.4 optionalDependencies: - '@types/node': 24.10.7 + '@types/node': 24.10.8 '@rushstack/rig-package@0.5.3': dependencies: resolve: 1.22.10 strip-json-comments: 3.1.1 - '@rushstack/terminal@0.15.3(@types/node@24.10.7)': + '@rushstack/terminal@0.15.3(@types/node@24.10.8)': dependencies: - '@rushstack/node-core-library': 5.13.1(@types/node@24.10.7) + '@rushstack/node-core-library': 5.13.1(@types/node@24.10.8) supports-color: 8.1.1 optionalDependencies: - '@types/node': 24.10.7 + '@types/node': 24.10.8 - '@rushstack/ts-command-line@5.0.1(@types/node@24.10.7)': + '@rushstack/ts-command-line@5.0.1(@types/node@24.10.8)': dependencies: - '@rushstack/terminal': 0.15.3(@types/node@24.10.7) + '@rushstack/terminal': 0.15.3(@types/node@24.10.8) '@types/argparse': 1.0.38 argparse: 1.0.10 string-argv: 0.3.2 @@ -19682,7 +19696,7 @@ snapshots: '@types/appdmg@0.5.5': dependencies: - '@types/node': 24.10.7 + '@types/node': 24.10.8 optional: true '@types/archiver@7.0.0': @@ -19698,11 +19712,11 @@ snapshots: '@types/body-parser@1.19.6': dependencies: '@types/connect': 3.4.38 - '@types/node': 24.10.7 + '@types/node': 24.10.8 '@types/bonjour@3.5.13': dependencies: - '@types/node': 24.10.7 + '@types/node': 24.10.8 '@types/bootstrap@5.2.10': dependencies: @@ -19716,7 +19730,7 @@ snapshots: dependencies: '@types/http-cache-semantics': 4.0.4 '@types/keyv': 3.1.4 - '@types/node': 24.10.7 + '@types/node': 24.10.8 '@types/responselike': 1.0.3 '@types/chai@5.2.2': @@ -19741,11 +19755,11 @@ snapshots: '@types/connect-history-api-fallback@1.5.4': dependencies: '@types/express-serve-static-core': 5.1.0 - '@types/node': 24.10.7 + '@types/node': 24.10.8 '@types/connect@3.4.38': dependencies: - '@types/node': 24.10.7 + '@types/node': 24.10.8 '@types/cookie-parser@1.4.10(@types/express@5.0.6)': dependencies: @@ -19758,7 +19772,7 @@ snapshots: '@types/cors@2.8.19': dependencies: - '@types/node': 24.10.7 + '@types/node': 24.10.8 '@types/cssnano@5.1.3(postcss@8.5.6)': dependencies: @@ -19915,7 +19929,7 @@ snapshots: '@types/express-serve-static-core@5.1.0': dependencies: - '@types/node': 24.10.7 + '@types/node': 24.10.8 '@types/qs': 6.14.0 '@types/range-parser': 1.2.7 '@types/send': 0.17.5 @@ -19950,7 +19964,7 @@ snapshots: '@types/fs-extra@9.0.13': dependencies: - '@types/node': 24.10.7 + '@types/node': 24.10.8 optional: true '@types/geojson-vt@3.2.5': @@ -19971,7 +19985,7 @@ snapshots: '@types/http-proxy@1.17.16': dependencies: - '@types/node': 24.10.7 + '@types/node': 24.10.8 '@types/ini@4.1.1': {} @@ -19985,11 +19999,11 @@ snapshots: '@types/jsonfile@6.1.4': dependencies: - '@types/node': 24.10.7 + '@types/node': 24.10.8 '@types/keyv@3.1.4': dependencies: - '@types/node': 24.10.7 + '@types/node': 24.10.8 '@types/leaflet-gpx@1.3.8': dependencies: @@ -20037,11 +20051,11 @@ snapshots: '@types/mute-stream@0.0.4': dependencies: - '@types/node': 24.10.7 + '@types/node': 24.10.8 '@types/node-forge@1.3.14': dependencies: - '@types/node': 24.10.7 + '@types/node': 24.10.8 '@types/node@16.9.1': {} @@ -20069,7 +20083,7 @@ snapshots: dependencies: undici-types: 6.21.0 - '@types/node@24.10.7': + '@types/node@24.10.8': dependencies: undici-types: 7.16.0 @@ -20097,13 +20111,13 @@ snapshots: '@types/readdir-glob@1.1.5': dependencies: - '@types/node': 24.10.7 + '@types/node': 24.10.8 '@types/resolve@1.20.2': {} '@types/responselike@1.0.3': dependencies: - '@types/node': 24.10.7 + '@types/node': 24.10.8 '@types/retry@0.12.2': {} @@ -20122,7 +20136,7 @@ snapshots: '@types/send@0.17.5': dependencies: '@types/mime': 1.3.5 - '@types/node': 24.10.7 + '@types/node': 24.10.8 '@types/serve-favicon@2.5.7': dependencies: @@ -20135,7 +20149,7 @@ snapshots: '@types/serve-static@1.15.10': dependencies: '@types/http-errors': 2.0.4 - '@types/node': 24.10.7 + '@types/node': 24.10.8 '@types/send': 0.17.5 '@types/serve-static@2.2.0': @@ -20149,7 +20163,7 @@ snapshots: '@types/sockjs@0.3.36': dependencies: - '@types/node': 24.10.7 + '@types/node': 24.10.8 '@types/statuses@2.0.6': optional: true @@ -20164,7 +20178,7 @@ snapshots: dependencies: '@types/cookiejar': 2.1.5 '@types/methods': 1.1.4 - '@types/node': 24.10.7 + '@types/node': 24.10.8 form-data: 4.0.4 '@types/supercluster@7.1.3': @@ -20180,7 +20194,7 @@ snapshots: '@types/through2@2.0.41': dependencies: - '@types/node': 24.10.7 + '@types/node': 24.10.8 '@types/tmp@0.2.6': {} @@ -20218,7 +20232,7 @@ snapshots: '@types/yauzl@2.10.3': dependencies: - '@types/node': 24.10.7 + '@types/node': 24.10.8 optional: true '@typescript-eslint/eslint-plugin@8.46.4(@typescript-eslint/parser@8.46.4(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)': @@ -20489,10 +20503,10 @@ snapshots: - bufferutil - utf-8-validate - '@vitest/browser-webdriverio@4.0.17(bufferutil@4.0.9)(msw@2.7.5(@types/node@24.10.7)(typescript@5.9.3))(utf-8-validate@6.0.5)(vite@7.3.1(@types/node@24.10.7)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1))(vitest@4.0.17)(webdriverio@9.23.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))': + '@vitest/browser-webdriverio@4.0.17(bufferutil@4.0.9)(msw@2.7.5(@types/node@24.10.8)(typescript@5.9.3))(utf-8-validate@6.0.5)(vite@7.3.1(@types/node@24.10.8)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1))(vitest@4.0.17)(webdriverio@9.23.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))': dependencies: - '@vitest/browser': 4.0.17(bufferutil@4.0.9)(msw@2.7.5(@types/node@24.10.7)(typescript@5.9.3))(utf-8-validate@6.0.5)(vite@7.3.1(@types/node@24.10.7)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1))(vitest@4.0.17) - vitest: 4.0.17(@opentelemetry/api@1.9.0)(@types/node@24.10.7)(@vitest/browser-webdriverio@4.0.17)(@vitest/ui@4.0.17)(happy-dom@20.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.2)(msw@2.7.5(@types/node@24.10.7)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) + '@vitest/browser': 4.0.17(bufferutil@4.0.9)(msw@2.7.5(@types/node@24.10.8)(typescript@5.9.3))(utf-8-validate@6.0.5)(vite@7.3.1(@types/node@24.10.8)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1))(vitest@4.0.17) + vitest: 4.0.17(@opentelemetry/api@1.9.0)(@types/node@24.10.8)(@vitest/browser-webdriverio@4.0.17)(@vitest/ui@4.0.17)(happy-dom@20.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.2)(msw@2.7.5(@types/node@24.10.8)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) webdriverio: 9.23.0(bufferutil@4.0.9)(utf-8-validate@6.0.5) transitivePeerDependencies: - bufferutil @@ -20500,16 +20514,16 @@ snapshots: - utf-8-validate - vite - '@vitest/browser@4.0.17(bufferutil@4.0.9)(msw@2.7.5(@types/node@24.10.7)(typescript@5.9.3))(utf-8-validate@6.0.5)(vite@7.3.1(@types/node@24.10.7)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1))(vitest@4.0.17)': + '@vitest/browser@4.0.17(bufferutil@4.0.9)(msw@2.7.5(@types/node@24.10.8)(typescript@5.9.3))(utf-8-validate@6.0.5)(vite@7.3.1(@types/node@24.10.8)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1))(vitest@4.0.17)': dependencies: - '@vitest/mocker': 4.0.17(msw@2.7.5(@types/node@24.10.7)(typescript@5.9.3))(vite@7.3.1(@types/node@24.10.7)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1)) + '@vitest/mocker': 4.0.17(msw@2.7.5(@types/node@24.10.8)(typescript@5.9.3))(vite@7.3.1(@types/node@24.10.8)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1)) '@vitest/utils': 4.0.17 magic-string: 0.30.21 pixelmatch: 7.1.0 pngjs: 7.0.0 sirv: 3.0.2 tinyrainbow: 3.0.3 - vitest: 4.0.17(@opentelemetry/api@1.9.0)(@types/node@24.10.7)(@vitest/browser-webdriverio@4.0.17)(@vitest/ui@4.0.17)(happy-dom@20.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.2)(msw@2.7.5(@types/node@24.10.7)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) + vitest: 4.0.17(@opentelemetry/api@1.9.0)(@types/node@24.10.8)(@vitest/browser-webdriverio@4.0.17)(@vitest/ui@4.0.17)(happy-dom@20.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.2)(msw@2.7.5(@types/node@24.10.8)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) ws: 8.19.0(bufferutil@4.0.9)(utf-8-validate@6.0.5) transitivePeerDependencies: - bufferutil @@ -20529,11 +20543,11 @@ snapshots: magicast: 0.5.1 obug: 2.1.1 tinyrainbow: 3.0.3 - vitest: 4.0.17(@opentelemetry/api@1.9.0)(@types/node@24.10.7)(@vitest/browser-webdriverio@4.0.17)(@vitest/ui@4.0.17)(happy-dom@20.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.2)(msw@2.7.5(@types/node@24.10.7)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) + vitest: 4.0.17(@opentelemetry/api@1.9.0)(@types/node@24.10.8)(@vitest/browser-webdriverio@4.0.17)(@vitest/ui@4.0.17)(happy-dom@20.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.2)(msw@2.7.5(@types/node@24.10.8)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) transitivePeerDependencies: - supports-color - '@vitest/coverage-v8@4.0.17(@vitest/browser@4.0.17(bufferutil@4.0.9)(msw@2.7.5(@types/node@24.10.7)(typescript@5.9.3))(utf-8-validate@6.0.5)(vite@7.3.1(@types/node@24.10.7)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1))(vitest@4.0.17))(vitest@4.0.17)': + '@vitest/coverage-v8@4.0.17(@vitest/browser@4.0.17(bufferutil@4.0.9)(msw@2.7.5(@types/node@24.10.8)(typescript@5.9.3))(utf-8-validate@6.0.5)(vite@7.3.1(@types/node@24.10.8)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1))(vitest@4.0.17))(vitest@4.0.17)': dependencies: '@bcoe/v8-coverage': 1.0.2 '@vitest/utils': 4.0.17 @@ -20545,9 +20559,9 @@ snapshots: obug: 2.1.1 std-env: 3.10.0 tinyrainbow: 3.0.3 - vitest: 4.0.17(@opentelemetry/api@1.9.0)(@types/node@24.10.7)(@vitest/browser-webdriverio@4.0.17)(@vitest/ui@4.0.17)(happy-dom@20.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.2)(msw@2.7.5(@types/node@24.10.7)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) + vitest: 4.0.17(@opentelemetry/api@1.9.0)(@types/node@24.10.8)(@vitest/browser-webdriverio@4.0.17)(@vitest/ui@4.0.17)(happy-dom@20.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.2)(msw@2.7.5(@types/node@24.10.8)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) optionalDependencies: - '@vitest/browser': 4.0.17(bufferutil@4.0.9)(msw@2.7.5(@types/node@24.10.7)(typescript@5.9.3))(utf-8-validate@6.0.5)(vite@7.3.1(@types/node@24.10.7)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1))(vitest@4.0.17) + '@vitest/browser': 4.0.17(bufferutil@4.0.9)(msw@2.7.5(@types/node@24.10.8)(typescript@5.9.3))(utf-8-validate@6.0.5)(vite@7.3.1(@types/node@24.10.8)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1))(vitest@4.0.17) '@vitest/expect@4.0.17': dependencies: @@ -20558,14 +20572,14 @@ snapshots: chai: 6.2.1 tinyrainbow: 3.0.3 - '@vitest/mocker@4.0.17(msw@2.7.5(@types/node@24.10.7)(typescript@5.9.3))(vite@7.3.1(@types/node@24.10.7)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1))': + '@vitest/mocker@4.0.17(msw@2.7.5(@types/node@24.10.8)(typescript@5.9.3))(vite@7.3.1(@types/node@24.10.8)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1))': dependencies: '@vitest/spy': 4.0.17 estree-walker: 3.0.3 magic-string: 0.30.21 optionalDependencies: - msw: 2.7.5(@types/node@24.10.7)(typescript@5.9.3) - vite: 7.3.1(@types/node@24.10.7)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) + msw: 2.7.5(@types/node@24.10.8)(typescript@5.9.3) + vite: 7.3.1(@types/node@24.10.8)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) '@vitest/pretty-format@4.0.17': dependencies: @@ -20593,7 +20607,7 @@ snapshots: sirv: 3.0.2 tinyglobby: 0.2.15 tinyrainbow: 3.0.3 - vitest: 4.0.17(@opentelemetry/api@1.9.0)(@types/node@24.10.7)(@vitest/browser-webdriverio@4.0.17)(@vitest/ui@4.0.17)(happy-dom@20.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.2)(msw@2.7.5(@types/node@24.10.7)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) + vitest: 4.0.17(@opentelemetry/api@1.9.0)(@types/node@24.10.8)(@vitest/browser-webdriverio@4.0.17)(@vitest/ui@4.0.17)(happy-dom@20.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.2)(msw@2.7.5(@types/node@24.10.8)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) '@vitest/utils@4.0.17': dependencies: @@ -21647,6 +21661,8 @@ snapshots: ckeditor5-collaboration@47.3.0: dependencies: '@ckeditor/ckeditor5-collaboration-core': 47.3.0 + transitivePeerDependencies: + - supports-color ckeditor5-premium-features@47.3.0(bufferutil@4.0.9)(ckeditor5@47.3.0)(utf-8-validate@6.0.5): dependencies: @@ -23029,7 +23045,7 @@ snapshots: engine.io@6.6.4(bufferutil@4.0.9)(utf-8-validate@6.0.5): dependencies: '@types/cors': 2.8.19 - '@types/node': 24.10.7 + '@types/node': 24.10.8 accepts: 1.3.8 base64id: 2.0.0 cookie: 0.7.2 @@ -25159,7 +25175,7 @@ snapshots: jest-worker@27.5.1: dependencies: - '@types/node': 24.10.7 + '@types/node': 24.10.8 merge-stream: 2.0.0 supports-color: 8.1.1 @@ -26534,12 +26550,12 @@ snapshots: ms@2.1.3: {} - msw@2.7.5(@types/node@24.10.7)(typescript@5.9.3): + msw@2.7.5(@types/node@24.10.8)(typescript@5.9.3): dependencies: '@bundled-es-modules/cookie': 2.0.1 '@bundled-es-modules/statuses': 1.0.1 '@bundled-es-modules/tough-cookie': 0.1.6 - '@inquirer/confirm': 5.1.21(@types/node@24.10.7) + '@inquirer/confirm': 5.1.21(@types/node@24.10.8) '@mswjs/interceptors': 0.37.6 '@open-draft/deferred-promise': 2.2.0 '@open-draft/until': 2.1.0 @@ -27827,7 +27843,7 @@ snapshots: '@protobufjs/path': 1.1.2 '@protobufjs/pool': 1.1.0 '@protobufjs/utf8': 1.1.0 - '@types/node': 24.10.7 + '@types/node': 24.10.8 long: 5.3.2 protocol-buffers-schema@3.6.0: {} @@ -28400,11 +28416,11 @@ snapshots: '@rolldown/binding-win32-x64-msvc': 1.0.0-beta.29 optional: true - rollup-plugin-stats@1.5.4(rolldown@1.0.0-beta.29)(rollup@4.52.0)(vite@7.3.1(@types/node@24.10.7)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1)): + rollup-plugin-stats@1.5.4(rolldown@1.0.0-beta.29)(rollup@4.52.0)(vite@7.3.1(@types/node@24.10.8)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1)): optionalDependencies: rolldown: 1.0.0-beta.29 rollup: 4.52.0 - vite: 7.3.1(@types/node@24.10.7)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) + vite: 7.3.1(@types/node@24.10.8)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) rollup-plugin-styles@4.0.0(rollup@4.52.0): dependencies: @@ -28433,13 +28449,13 @@ snapshots: '@rollup/pluginutils': 5.1.4(rollup@4.52.0) rollup: 4.52.0 - rollup-plugin-webpack-stats@2.1.9(rolldown@1.0.0-beta.29)(rollup@4.52.0)(vite@7.3.1(@types/node@24.10.7)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1)): + rollup-plugin-webpack-stats@2.1.9(rolldown@1.0.0-beta.29)(rollup@4.52.0)(vite@7.3.1(@types/node@24.10.8)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1)): dependencies: - rollup-plugin-stats: 1.5.4(rolldown@1.0.0-beta.29)(rollup@4.52.0)(vite@7.3.1(@types/node@24.10.7)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1)) + rollup-plugin-stats: 1.5.4(rolldown@1.0.0-beta.29)(rollup@4.52.0)(vite@7.3.1(@types/node@24.10.8)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1)) optionalDependencies: rolldown: 1.0.0-beta.29 rollup: 4.52.0 - vite: 7.3.1(@types/node@24.10.7)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) + vite: 7.3.1(@types/node@24.10.8)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) rollup@4.52.0: dependencies: @@ -29915,14 +29931,14 @@ snapshots: typescript: 5.0.4 webpack: 5.101.3(@swc/core@1.11.29(@swc/helpers@0.5.17))(esbuild@0.27.2) - ts-node@10.9.2(@swc/core@1.11.29(@swc/helpers@0.5.17))(@types/node@24.10.7)(typescript@5.0.4): + ts-node@10.9.2(@swc/core@1.11.29(@swc/helpers@0.5.17))(@types/node@24.10.8)(typescript@5.0.4): dependencies: '@cspotcode/source-map-support': 0.8.1 '@tsconfig/node10': 1.0.11 '@tsconfig/node12': 1.0.11 '@tsconfig/node14': 1.0.3 '@tsconfig/node16': 1.0.4 - '@types/node': 24.10.7 + '@types/node': 24.10.8 acorn: 8.15.0 acorn-walk: 8.3.4 arg: 4.1.3 @@ -29935,14 +29951,14 @@ snapshots: optionalDependencies: '@swc/core': 1.11.29(@swc/helpers@0.5.17) - ts-node@10.9.2(@swc/core@1.11.29(@swc/helpers@0.5.17))(@types/node@24.10.7)(typescript@5.9.3): + ts-node@10.9.2(@swc/core@1.11.29(@swc/helpers@0.5.17))(@types/node@24.10.8)(typescript@5.9.3): dependencies: '@cspotcode/source-map-support': 0.8.1 '@tsconfig/node10': 1.0.11 '@tsconfig/node12': 1.0.11 '@tsconfig/node14': 1.0.3 '@tsconfig/node16': 1.0.4 - '@types/node': 24.10.7 + '@types/node': 24.10.8 acorn: 8.15.0 acorn-walk: 8.3.4 arg: 4.1.3 @@ -30347,9 +30363,9 @@ snapshots: '@types/unist': 3.0.3 vfile-message: 4.0.2 - vite-plugin-dts@4.5.4(@types/node@24.10.7)(rollup@4.52.0)(typescript@5.9.3)(vite@7.3.1(@types/node@24.10.7)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1)): + vite-plugin-dts@4.5.4(@types/node@24.10.8)(rollup@4.52.0)(typescript@5.9.3)(vite@7.3.1(@types/node@24.10.8)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1)): dependencies: - '@microsoft/api-extractor': 7.52.8(@types/node@24.10.7) + '@microsoft/api-extractor': 7.52.8(@types/node@24.10.8) '@rollup/pluginutils': 5.1.4(rollup@4.52.0) '@volar/typescript': 2.4.13 '@vue/language-core': 2.2.0(typescript@5.9.3) @@ -30360,27 +30376,27 @@ snapshots: magic-string: 0.30.21 typescript: 5.9.3 optionalDependencies: - vite: 7.3.1(@types/node@24.10.7)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) + vite: 7.3.1(@types/node@24.10.8)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) transitivePeerDependencies: - '@types/node' - rollup - supports-color - vite-plugin-static-copy@3.1.4(vite@7.3.1(@types/node@24.10.7)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1)): + vite-plugin-static-copy@3.1.4(vite@7.3.1(@types/node@24.10.8)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1)): dependencies: chokidar: 3.6.0 p-map: 7.0.3 picocolors: 1.1.1 tinyglobby: 0.2.15 - vite: 7.3.1(@types/node@24.10.7)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) + vite: 7.3.1(@types/node@24.10.8)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) - vite-plugin-svgo@2.0.0(typescript@5.9.3)(vite@7.3.1(@types/node@24.10.7)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1)): + vite-plugin-svgo@2.0.0(typescript@5.9.3)(vite@7.3.1(@types/node@24.10.8)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1)): dependencies: svgo: 3.3.2 typescript: 5.9.3 - vite: 7.3.1(@types/node@24.10.7)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) + vite: 7.3.1(@types/node@24.10.8)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) - vite-prerender-plugin@0.5.11(vite@7.3.1(@types/node@24.10.7)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1)): + vite-prerender-plugin@0.5.11(vite@7.3.1(@types/node@24.10.8)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1)): dependencies: kolorist: 1.8.0 magic-string: 0.30.21 @@ -30388,9 +30404,9 @@ snapshots: simple-code-frame: 1.3.0 source-map: 0.7.6 stack-trace: 1.0.0-pre2 - vite: 7.3.1(@types/node@24.10.7)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) + vite: 7.3.1(@types/node@24.10.8)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) - vite@7.3.1(@types/node@24.10.7)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1): + vite@7.3.1(@types/node@24.10.8)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1): dependencies: esbuild: 0.27.2 fdir: 6.5.0(picomatch@4.0.3) @@ -30399,7 +30415,7 @@ snapshots: rollup: 4.52.0 tinyglobby: 0.2.15 optionalDependencies: - '@types/node': 24.10.7 + '@types/node': 24.10.8 fsevents: 2.3.3 jiti: 2.6.1 less: 4.1.3 @@ -30410,10 +30426,10 @@ snapshots: tsx: 4.21.0 yaml: 2.8.1 - vitest@4.0.17(@opentelemetry/api@1.9.0)(@types/node@24.10.7)(@vitest/browser-webdriverio@4.0.17)(@vitest/ui@4.0.17)(happy-dom@20.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.2)(msw@2.7.5(@types/node@24.10.7)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1): + vitest@4.0.17(@opentelemetry/api@1.9.0)(@types/node@24.10.8)(@vitest/browser-webdriverio@4.0.17)(@vitest/ui@4.0.17)(happy-dom@20.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.2)(msw@2.7.5(@types/node@24.10.8)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1): dependencies: '@vitest/expect': 4.0.17 - '@vitest/mocker': 4.0.17(msw@2.7.5(@types/node@24.10.7)(typescript@5.9.3))(vite@7.3.1(@types/node@24.10.7)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1)) + '@vitest/mocker': 4.0.17(msw@2.7.5(@types/node@24.10.8)(typescript@5.9.3))(vite@7.3.1(@types/node@24.10.8)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1)) '@vitest/pretty-format': 4.0.17 '@vitest/runner': 4.0.17 '@vitest/snapshot': 4.0.17 @@ -30430,12 +30446,12 @@ snapshots: tinyexec: 1.0.2 tinyglobby: 0.2.15 tinyrainbow: 3.0.3 - vite: 7.3.1(@types/node@24.10.7)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) + vite: 7.3.1(@types/node@24.10.8)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) why-is-node-running: 2.3.0 optionalDependencies: '@opentelemetry/api': 1.9.0 - '@types/node': 24.10.7 - '@vitest/browser-webdriverio': 4.0.17(bufferutil@4.0.9)(msw@2.7.5(@types/node@24.10.7)(typescript@5.9.3))(utf-8-validate@6.0.5)(vite@7.3.1(@types/node@24.10.7)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1))(vitest@4.0.17)(webdriverio@9.23.0(bufferutil@4.0.9)(utf-8-validate@6.0.5)) + '@types/node': 24.10.8 + '@vitest/browser-webdriverio': 4.0.17(bufferutil@4.0.9)(msw@2.7.5(@types/node@24.10.8)(typescript@5.9.3))(utf-8-validate@6.0.5)(vite@7.3.1(@types/node@24.10.8)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1))(vitest@4.0.17)(webdriverio@9.23.0(bufferutil@4.0.9)(utf-8-validate@6.0.5)) '@vitest/ui': 4.0.17(vitest@4.0.17) happy-dom: 20.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5) jsdom: 26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5) From 7405627663c2805a479289c771764fdba909dde6 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 14 Jan 2026 01:03:37 +0000 Subject: [PATCH 041/353] fix(deps): update codemirror --- packages/codemirror/package.json | 4 +- pnpm-lock.yaml | 248 +++++++++++++++++-------------- 2 files changed, 135 insertions(+), 117 deletions(-) diff --git a/packages/codemirror/package.json b/packages/codemirror/package.json index 87b248d406..5dfd7c44c9 100644 --- a/packages/codemirror/package.json +++ b/packages/codemirror/package.json @@ -15,8 +15,8 @@ "@codemirror/lang-vue": "0.1.3", "@codemirror/lang-xml": "6.1.0", "@codemirror/legacy-modes": "6.5.2", - "@codemirror/search": "6.5.11", - "@codemirror/view": "6.39.9", + "@codemirror/search": "6.6.0", + "@codemirror/view": "6.39.10", "@fsegurai/codemirror-theme-abcdef": "6.2.3", "@fsegurai/codemirror-theme-abyss": "6.2.3", "@fsegurai/codemirror-theme-android-studio": "6.2.3", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index b61dc0f909..1957e581ce 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1241,92 +1241,92 @@ importers: specifier: 6.5.2 version: 6.5.2 '@codemirror/search': - specifier: 6.5.11 - version: 6.5.11 + specifier: 6.6.0 + version: 6.6.0 '@codemirror/view': - specifier: 6.39.9 - version: 6.39.9 + specifier: 6.39.10 + version: 6.39.10 '@fsegurai/codemirror-theme-abcdef': specifier: 6.2.3 - version: 6.2.3(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.39.9)(@lezer/highlight@1.2.1) + version: 6.2.3(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.39.10)(@lezer/highlight@1.2.1) '@fsegurai/codemirror-theme-abyss': specifier: 6.2.3 - version: 6.2.3(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.39.9)(@lezer/highlight@1.2.1) + version: 6.2.3(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.39.10)(@lezer/highlight@1.2.1) '@fsegurai/codemirror-theme-android-studio': specifier: 6.2.3 - version: 6.2.3(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.39.9)(@lezer/highlight@1.2.1) + version: 6.2.3(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.39.10)(@lezer/highlight@1.2.1) '@fsegurai/codemirror-theme-andromeda': specifier: 6.2.3 - version: 6.2.3(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.39.9)(@lezer/highlight@1.2.1) + version: 6.2.3(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.39.10)(@lezer/highlight@1.2.1) '@fsegurai/codemirror-theme-basic-dark': specifier: 6.2.3 - version: 6.2.3(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.39.9)(@lezer/highlight@1.2.1) + version: 6.2.3(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.39.10)(@lezer/highlight@1.2.1) '@fsegurai/codemirror-theme-basic-light': specifier: 6.2.3 - version: 6.2.3(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.39.9)(@lezer/highlight@1.2.1) + version: 6.2.3(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.39.10)(@lezer/highlight@1.2.1) '@fsegurai/codemirror-theme-cobalt2': specifier: 6.0.3 - version: 6.0.3(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.39.9)(@lezer/highlight@1.2.1) + version: 6.0.3(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.39.10)(@lezer/highlight@1.2.1) '@fsegurai/codemirror-theme-forest': specifier: 6.2.3 - version: 6.2.3(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.39.9)(@lezer/highlight@1.2.1) + version: 6.2.3(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.39.10)(@lezer/highlight@1.2.1) '@fsegurai/codemirror-theme-github-dark': specifier: 6.2.3 - version: 6.2.3(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.39.9)(@lezer/highlight@1.2.1) + version: 6.2.3(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.39.10)(@lezer/highlight@1.2.1) '@fsegurai/codemirror-theme-github-light': specifier: 6.2.3 - version: 6.2.3(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.39.9)(@lezer/highlight@1.2.1) + version: 6.2.3(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.39.10)(@lezer/highlight@1.2.1) '@fsegurai/codemirror-theme-gruvbox-dark': specifier: 6.2.3 - version: 6.2.3(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.39.9)(@lezer/highlight@1.2.1) + version: 6.2.3(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.39.10)(@lezer/highlight@1.2.1) '@fsegurai/codemirror-theme-gruvbox-light': specifier: 6.2.3 - version: 6.2.3(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.39.9)(@lezer/highlight@1.2.1) + version: 6.2.3(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.39.10)(@lezer/highlight@1.2.1) '@fsegurai/codemirror-theme-material-dark': specifier: 6.2.3 - version: 6.2.3(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.39.9)(@lezer/highlight@1.2.1) + version: 6.2.3(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.39.10)(@lezer/highlight@1.2.1) '@fsegurai/codemirror-theme-material-light': specifier: 6.2.3 - version: 6.2.3(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.39.9)(@lezer/highlight@1.2.1) + version: 6.2.3(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.39.10)(@lezer/highlight@1.2.1) '@fsegurai/codemirror-theme-monokai': specifier: 6.2.3 - version: 6.2.3(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.39.9)(@lezer/highlight@1.2.1) + version: 6.2.3(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.39.10)(@lezer/highlight@1.2.1) '@fsegurai/codemirror-theme-nord': specifier: 6.2.3 - version: 6.2.3(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.39.9)(@lezer/highlight@1.2.1) + version: 6.2.3(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.39.10)(@lezer/highlight@1.2.1) '@fsegurai/codemirror-theme-palenight': specifier: 6.2.3 - version: 6.2.3(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.39.9)(@lezer/highlight@1.2.1) + version: 6.2.3(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.39.10)(@lezer/highlight@1.2.1) '@fsegurai/codemirror-theme-solarized-dark': specifier: 6.2.3 - version: 6.2.3(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.39.9)(@lezer/highlight@1.2.1) + version: 6.2.3(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.39.10)(@lezer/highlight@1.2.1) '@fsegurai/codemirror-theme-solarized-light': specifier: 6.2.3 - version: 6.2.3(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.39.9)(@lezer/highlight@1.2.1) + version: 6.2.3(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.39.10)(@lezer/highlight@1.2.1) '@fsegurai/codemirror-theme-tokyo-night-day': specifier: 6.2.3 - version: 6.2.3(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.39.9)(@lezer/highlight@1.2.1) + version: 6.2.3(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.39.10)(@lezer/highlight@1.2.1) '@fsegurai/codemirror-theme-tokyo-night-storm': specifier: 6.2.3 - version: 6.2.3(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.39.9)(@lezer/highlight@1.2.1) + version: 6.2.3(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.39.10)(@lezer/highlight@1.2.1) '@fsegurai/codemirror-theme-volcano': specifier: 6.2.3 - version: 6.2.3(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.39.9)(@lezer/highlight@1.2.1) + version: 6.2.3(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.39.10)(@lezer/highlight@1.2.1) '@fsegurai/codemirror-theme-vscode-dark': specifier: 6.2.3 - version: 6.2.3(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.39.9)(@lezer/highlight@1.2.1) + version: 6.2.3(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.39.10)(@lezer/highlight@1.2.1) '@fsegurai/codemirror-theme-vscode-light': specifier: 6.2.3 - version: 6.2.3(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.39.9)(@lezer/highlight@1.2.1) + version: 6.2.3(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.39.10)(@lezer/highlight@1.2.1) '@replit/codemirror-indentation-markers': specifier: 6.5.3 - version: 6.5.3(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.39.9) + version: 6.5.3(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.39.10) '@replit/codemirror-lang-nix': specifier: 6.0.1 - version: 6.0.1(@codemirror/autocomplete@6.18.6)(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.39.9)(@lezer/common@1.2.3)(@lezer/highlight@1.2.1)(@lezer/lr@1.4.2) + version: 6.0.1(@codemirror/autocomplete@6.18.6)(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.39.10)(@lezer/common@1.2.3)(@lezer/highlight@1.2.1)(@lezer/lr@1.4.2) '@replit/codemirror-vim': specifier: 6.3.0 - version: 6.3.0(@codemirror/commands@6.10.1)(@codemirror/language@6.11.0)(@codemirror/search@6.5.11)(@codemirror/state@6.5.2)(@codemirror/view@6.39.9) + version: 6.3.0(@codemirror/commands@6.10.1)(@codemirror/language@6.11.0)(@codemirror/search@6.6.0)(@codemirror/state@6.5.2)(@codemirror/view@6.39.10) '@ssddanbrown/codemirror-lang-smarty': specifier: 1.0.0 version: 1.0.0 @@ -2122,8 +2122,8 @@ packages: '@codemirror/lint@6.8.5': resolution: {integrity: sha512-s3n3KisH7dx3vsoeGMxsbRAgKe4O1vbrnKBClm99PU0fWxmxsx5rR2PfqQgIt+2MMJBHbiJ5rfIdLYfB9NNvsA==} - '@codemirror/search@6.5.11': - resolution: {integrity: sha512-KmWepDE6jUdL6n8cAAqIpRmLPBZ5ZKnicE8oGU/s3QrAVID+0VhLFrzUucVKHG5035/BSykhExDL/Xm7dHthiA==} + '@codemirror/search@6.6.0': + resolution: {integrity: sha512-koFuNXcDvyyotWcgOnZGmY7LZqEOXZaaxD/j6n18TCLx2/9HieZJ5H6hs1g8FiRxBD0DNfs0nXn17g872RmYdw==} '@codemirror/state@6.5.2': resolution: {integrity: sha512-FVqsPqtPWKVVL3dPSxy8wEF/ymIEuVzF1PK3VbUgrxXpJUSHQWWZz4JMToquRxnkw+36LTamCZG2iua2Ptq0fA==} @@ -2131,8 +2131,8 @@ packages: '@codemirror/theme-one-dark@6.1.2': resolution: {integrity: sha512-F+sH0X16j/qFLMAfbciKTxVOwkdAS336b7AXTKOZhy8BR3eH/RelsnLgLFINrpST63mmN2OuwUt0W2ndUgYwUA==} - '@codemirror/view@6.39.9': - resolution: {integrity: sha512-miGSIfBOKC1s2oHoa80dp+BjtsL8sXsrgGlQnQuOcfvaedcQUtqddTmKbJSDkLl4mkgPvZyXuKic2HDNYcJLYA==} + '@codemirror/view@6.39.10': + resolution: {integrity: sha512-QfT/PXhiiP76PxMnX0RQVPDQrqfRt9wr9QhInNHnEUu4PWoNS8QwwcIDEneXFChJv22y+Yu/Cz5lFMTPz+h16w==} '@colors/colors@1.5.0': resolution: {integrity: sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==} @@ -15015,8 +15015,6 @@ snapshots: '@ckeditor/ckeditor5-core': 47.3.0 '@ckeditor/ckeditor5-upload': 47.3.0 ckeditor5: 47.3.0 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-ai@47.3.0(bufferutil@4.0.9)(utf-8-validate@6.0.5)': dependencies: @@ -15157,8 +15155,6 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.3.0 '@ckeditor/ckeditor5-widget': 47.3.0 es-toolkit: 1.39.5 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-cloud-services@47.3.0': dependencies: @@ -15357,8 +15353,6 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.3.0 ckeditor5: 47.3.0 es-toolkit: 1.39.5 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-editor-classic@47.3.0': dependencies: @@ -15368,8 +15362,6 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.3.0 ckeditor5: 47.3.0 es-toolkit: 1.39.5 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-editor-decoupled@47.3.0': dependencies: @@ -15412,6 +15404,8 @@ snapshots: '@ckeditor/ckeditor5-table': 47.3.0 '@ckeditor/ckeditor5-utils': 47.3.0 ckeditor5: 47.3.0 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-emoji@47.3.0': dependencies: @@ -15594,6 +15588,8 @@ snapshots: '@ckeditor/ckeditor5-widget': 47.3.0 ckeditor5: 47.3.0 es-toolkit: 1.39.5 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-icons@47.3.0': {} @@ -15611,6 +15607,8 @@ snapshots: '@ckeditor/ckeditor5-widget': 47.3.0 ckeditor5: 47.3.0 es-toolkit: 1.39.5 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-import-word@47.3.0': dependencies: @@ -15636,6 +15634,8 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.3.0 '@ckeditor/ckeditor5-utils': 47.3.0 ckeditor5: 47.3.0 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-inspector@5.0.0': {} @@ -15645,6 +15645,8 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.3.0 '@ckeditor/ckeditor5-utils': 47.3.0 ckeditor5: 47.3.0 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-line-height@47.3.0': dependencies: @@ -15669,6 +15671,8 @@ snapshots: '@ckeditor/ckeditor5-widget': 47.3.0 ckeditor5: 47.3.0 es-toolkit: 1.39.5 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-list-multi-level@47.3.0': dependencies: @@ -15692,6 +15696,8 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.3.0 '@ckeditor/ckeditor5-utils': 47.3.0 ckeditor5: 47.3.0 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-markdown-gfm@47.3.0': dependencies: @@ -15820,6 +15826,8 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.3.0 '@ckeditor/ckeditor5-widget': 47.3.0 ckeditor5: 47.3.0 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-pagination@47.3.0': dependencies: @@ -15927,6 +15935,8 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.3.0 '@ckeditor/ckeditor5-utils': 47.3.0 ckeditor5: 47.3.0 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-slash-command@47.3.0': dependencies: @@ -15939,6 +15949,8 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.3.0 '@ckeditor/ckeditor5-utils': 47.3.0 ckeditor5: 47.3.0 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-source-editing-enhanced@47.3.0': dependencies: @@ -15954,7 +15966,7 @@ snapshots: '@codemirror/language': 6.11.0 '@codemirror/state': 6.5.2 '@codemirror/theme-one-dark': 6.1.2 - '@codemirror/view': 6.39.9 + '@codemirror/view': 6.39.10 ckeditor5: 47.3.0 '@ckeditor/ckeditor5-source-editing@47.3.0': @@ -15986,6 +15998,8 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.3.0 ckeditor5: 47.3.0 es-toolkit: 1.39.5 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-table@47.3.0': dependencies: @@ -16074,8 +16088,6 @@ snapshots: '@ckeditor/ckeditor5-icons': 47.3.0 '@ckeditor/ckeditor5-ui': 47.3.0 '@ckeditor/ckeditor5-utils': 47.3.0 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-upload@47.3.0': dependencies: @@ -16112,6 +16124,8 @@ snapshots: '@ckeditor/ckeditor5-engine': 47.3.0 '@ckeditor/ckeditor5-utils': 47.3.0 es-toolkit: 1.39.5 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-widget@47.3.0': dependencies: @@ -16131,26 +16145,28 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.3.0 ckeditor5: 47.3.0 es-toolkit: 1.39.5 + transitivePeerDependencies: + - supports-color '@codemirror/autocomplete@6.18.6': dependencies: '@codemirror/language': 6.11.0 '@codemirror/state': 6.5.2 - '@codemirror/view': 6.39.9 + '@codemirror/view': 6.39.10 '@lezer/common': 1.2.3 '@codemirror/commands@6.10.1': dependencies: '@codemirror/language': 6.11.0 '@codemirror/state': 6.5.2 - '@codemirror/view': 6.39.9 + '@codemirror/view': 6.39.10 '@lezer/common': 1.2.3 '@codemirror/commands@6.8.1': dependencies: '@codemirror/language': 6.11.0 '@codemirror/state': 6.5.2 - '@codemirror/view': 6.39.9 + '@codemirror/view': 6.39.10 '@lezer/common': 1.2.3 '@codemirror/lang-css@6.3.1': @@ -16168,7 +16184,7 @@ snapshots: '@codemirror/lang-javascript': 6.2.4 '@codemirror/language': 6.11.0 '@codemirror/state': 6.5.2 - '@codemirror/view': 6.39.9 + '@codemirror/view': 6.39.10 '@lezer/common': 1.2.3 '@lezer/css': 1.1.11 '@lezer/html': 1.3.12 @@ -16179,7 +16195,7 @@ snapshots: '@codemirror/language': 6.11.0 '@codemirror/lint': 6.8.5 '@codemirror/state': 6.5.2 - '@codemirror/view': 6.39.9 + '@codemirror/view': 6.39.10 '@lezer/common': 1.2.3 '@lezer/javascript': 1.5.1 @@ -16194,7 +16210,7 @@ snapshots: '@codemirror/lang-html': 6.4.11 '@codemirror/language': 6.11.0 '@codemirror/state': 6.5.2 - '@codemirror/view': 6.39.9 + '@codemirror/view': 6.39.10 '@lezer/common': 1.2.3 '@lezer/markdown': 1.4.3 @@ -16204,7 +16220,7 @@ snapshots: '@codemirror/lang-html': 6.4.11 '@codemirror/language': 6.11.0 '@codemirror/state': 6.5.2 - '@codemirror/view': 6.39.9 + '@codemirror/view': 6.39.10 '@lezer/common': 1.2.3 '@lezer/markdown': 1.4.3 @@ -16230,14 +16246,14 @@ snapshots: '@codemirror/autocomplete': 6.18.6 '@codemirror/language': 6.11.0 '@codemirror/state': 6.5.2 - '@codemirror/view': 6.39.9 + '@codemirror/view': 6.39.10 '@lezer/common': 1.2.3 '@lezer/xml': 1.0.6 '@codemirror/language@6.11.0': dependencies: '@codemirror/state': 6.5.2 - '@codemirror/view': 6.39.9 + '@codemirror/view': 6.39.10 '@lezer/common': 1.2.3 '@lezer/highlight': 1.2.1 '@lezer/lr': 1.4.2 @@ -16250,13 +16266,13 @@ snapshots: '@codemirror/lint@6.8.5': dependencies: '@codemirror/state': 6.5.2 - '@codemirror/view': 6.39.9 + '@codemirror/view': 6.39.10 crelt: 1.0.6 - '@codemirror/search@6.5.11': + '@codemirror/search@6.6.0': dependencies: '@codemirror/state': 6.5.2 - '@codemirror/view': 6.39.9 + '@codemirror/view': 6.39.10 crelt: 1.0.6 '@codemirror/state@6.5.2': @@ -16267,10 +16283,10 @@ snapshots: dependencies: '@codemirror/language': 6.11.0 '@codemirror/state': 6.5.2 - '@codemirror/view': 6.39.9 + '@codemirror/view': 6.39.10 '@lezer/highlight': 1.2.1 - '@codemirror/view@6.39.9': + '@codemirror/view@6.39.10': dependencies: '@codemirror/state': 6.5.2 crelt: 1.0.6 @@ -17186,172 +17202,172 @@ snapshots: '@floating-ui/utils@0.2.9': {} - '@fsegurai/codemirror-theme-abcdef@6.2.3(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.39.9)(@lezer/highlight@1.2.1)': + '@fsegurai/codemirror-theme-abcdef@6.2.3(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.39.10)(@lezer/highlight@1.2.1)': dependencies: '@codemirror/language': 6.11.0 '@codemirror/state': 6.5.2 - '@codemirror/view': 6.39.9 + '@codemirror/view': 6.39.10 '@lezer/highlight': 1.2.1 - '@fsegurai/codemirror-theme-abyss@6.2.3(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.39.9)(@lezer/highlight@1.2.1)': + '@fsegurai/codemirror-theme-abyss@6.2.3(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.39.10)(@lezer/highlight@1.2.1)': dependencies: '@codemirror/language': 6.11.0 '@codemirror/state': 6.5.2 - '@codemirror/view': 6.39.9 + '@codemirror/view': 6.39.10 '@lezer/highlight': 1.2.1 - '@fsegurai/codemirror-theme-android-studio@6.2.3(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.39.9)(@lezer/highlight@1.2.1)': + '@fsegurai/codemirror-theme-android-studio@6.2.3(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.39.10)(@lezer/highlight@1.2.1)': dependencies: '@codemirror/language': 6.11.0 '@codemirror/state': 6.5.2 - '@codemirror/view': 6.39.9 + '@codemirror/view': 6.39.10 '@lezer/highlight': 1.2.1 - '@fsegurai/codemirror-theme-andromeda@6.2.3(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.39.9)(@lezer/highlight@1.2.1)': + '@fsegurai/codemirror-theme-andromeda@6.2.3(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.39.10)(@lezer/highlight@1.2.1)': dependencies: '@codemirror/language': 6.11.0 '@codemirror/state': 6.5.2 - '@codemirror/view': 6.39.9 + '@codemirror/view': 6.39.10 '@lezer/highlight': 1.2.1 - '@fsegurai/codemirror-theme-basic-dark@6.2.3(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.39.9)(@lezer/highlight@1.2.1)': + '@fsegurai/codemirror-theme-basic-dark@6.2.3(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.39.10)(@lezer/highlight@1.2.1)': dependencies: '@codemirror/language': 6.11.0 '@codemirror/state': 6.5.2 - '@codemirror/view': 6.39.9 + '@codemirror/view': 6.39.10 '@lezer/highlight': 1.2.1 - '@fsegurai/codemirror-theme-basic-light@6.2.3(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.39.9)(@lezer/highlight@1.2.1)': + '@fsegurai/codemirror-theme-basic-light@6.2.3(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.39.10)(@lezer/highlight@1.2.1)': dependencies: '@codemirror/language': 6.11.0 '@codemirror/state': 6.5.2 - '@codemirror/view': 6.39.9 + '@codemirror/view': 6.39.10 '@lezer/highlight': 1.2.1 - '@fsegurai/codemirror-theme-cobalt2@6.0.3(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.39.9)(@lezer/highlight@1.2.1)': + '@fsegurai/codemirror-theme-cobalt2@6.0.3(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.39.10)(@lezer/highlight@1.2.1)': dependencies: '@codemirror/language': 6.11.0 '@codemirror/state': 6.5.2 - '@codemirror/view': 6.39.9 + '@codemirror/view': 6.39.10 '@lezer/highlight': 1.2.1 - '@fsegurai/codemirror-theme-forest@6.2.3(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.39.9)(@lezer/highlight@1.2.1)': + '@fsegurai/codemirror-theme-forest@6.2.3(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.39.10)(@lezer/highlight@1.2.1)': dependencies: '@codemirror/language': 6.11.0 '@codemirror/state': 6.5.2 - '@codemirror/view': 6.39.9 + '@codemirror/view': 6.39.10 '@lezer/highlight': 1.2.1 - '@fsegurai/codemirror-theme-github-dark@6.2.3(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.39.9)(@lezer/highlight@1.2.1)': + '@fsegurai/codemirror-theme-github-dark@6.2.3(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.39.10)(@lezer/highlight@1.2.1)': dependencies: '@codemirror/language': 6.11.0 '@codemirror/state': 6.5.2 - '@codemirror/view': 6.39.9 + '@codemirror/view': 6.39.10 '@lezer/highlight': 1.2.1 - '@fsegurai/codemirror-theme-github-light@6.2.3(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.39.9)(@lezer/highlight@1.2.1)': + '@fsegurai/codemirror-theme-github-light@6.2.3(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.39.10)(@lezer/highlight@1.2.1)': dependencies: '@codemirror/language': 6.11.0 '@codemirror/state': 6.5.2 - '@codemirror/view': 6.39.9 + '@codemirror/view': 6.39.10 '@lezer/highlight': 1.2.1 - '@fsegurai/codemirror-theme-gruvbox-dark@6.2.3(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.39.9)(@lezer/highlight@1.2.1)': + '@fsegurai/codemirror-theme-gruvbox-dark@6.2.3(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.39.10)(@lezer/highlight@1.2.1)': dependencies: '@codemirror/language': 6.11.0 '@codemirror/state': 6.5.2 - '@codemirror/view': 6.39.9 + '@codemirror/view': 6.39.10 '@lezer/highlight': 1.2.1 - '@fsegurai/codemirror-theme-gruvbox-light@6.2.3(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.39.9)(@lezer/highlight@1.2.1)': + '@fsegurai/codemirror-theme-gruvbox-light@6.2.3(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.39.10)(@lezer/highlight@1.2.1)': dependencies: '@codemirror/language': 6.11.0 '@codemirror/state': 6.5.2 - '@codemirror/view': 6.39.9 + '@codemirror/view': 6.39.10 '@lezer/highlight': 1.2.1 - '@fsegurai/codemirror-theme-material-dark@6.2.3(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.39.9)(@lezer/highlight@1.2.1)': + '@fsegurai/codemirror-theme-material-dark@6.2.3(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.39.10)(@lezer/highlight@1.2.1)': dependencies: '@codemirror/language': 6.11.0 '@codemirror/state': 6.5.2 - '@codemirror/view': 6.39.9 + '@codemirror/view': 6.39.10 '@lezer/highlight': 1.2.1 - '@fsegurai/codemirror-theme-material-light@6.2.3(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.39.9)(@lezer/highlight@1.2.1)': + '@fsegurai/codemirror-theme-material-light@6.2.3(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.39.10)(@lezer/highlight@1.2.1)': dependencies: '@codemirror/language': 6.11.0 '@codemirror/state': 6.5.2 - '@codemirror/view': 6.39.9 + '@codemirror/view': 6.39.10 '@lezer/highlight': 1.2.1 - '@fsegurai/codemirror-theme-monokai@6.2.3(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.39.9)(@lezer/highlight@1.2.1)': + '@fsegurai/codemirror-theme-monokai@6.2.3(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.39.10)(@lezer/highlight@1.2.1)': dependencies: '@codemirror/language': 6.11.0 '@codemirror/state': 6.5.2 - '@codemirror/view': 6.39.9 + '@codemirror/view': 6.39.10 '@lezer/highlight': 1.2.1 - '@fsegurai/codemirror-theme-nord@6.2.3(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.39.9)(@lezer/highlight@1.2.1)': + '@fsegurai/codemirror-theme-nord@6.2.3(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.39.10)(@lezer/highlight@1.2.1)': dependencies: '@codemirror/language': 6.11.0 '@codemirror/state': 6.5.2 - '@codemirror/view': 6.39.9 + '@codemirror/view': 6.39.10 '@lezer/highlight': 1.2.1 - '@fsegurai/codemirror-theme-palenight@6.2.3(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.39.9)(@lezer/highlight@1.2.1)': + '@fsegurai/codemirror-theme-palenight@6.2.3(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.39.10)(@lezer/highlight@1.2.1)': dependencies: '@codemirror/language': 6.11.0 '@codemirror/state': 6.5.2 - '@codemirror/view': 6.39.9 + '@codemirror/view': 6.39.10 '@lezer/highlight': 1.2.1 - '@fsegurai/codemirror-theme-solarized-dark@6.2.3(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.39.9)(@lezer/highlight@1.2.1)': + '@fsegurai/codemirror-theme-solarized-dark@6.2.3(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.39.10)(@lezer/highlight@1.2.1)': dependencies: '@codemirror/language': 6.11.0 '@codemirror/state': 6.5.2 - '@codemirror/view': 6.39.9 + '@codemirror/view': 6.39.10 '@lezer/highlight': 1.2.1 - '@fsegurai/codemirror-theme-solarized-light@6.2.3(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.39.9)(@lezer/highlight@1.2.1)': + '@fsegurai/codemirror-theme-solarized-light@6.2.3(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.39.10)(@lezer/highlight@1.2.1)': dependencies: '@codemirror/language': 6.11.0 '@codemirror/state': 6.5.2 - '@codemirror/view': 6.39.9 + '@codemirror/view': 6.39.10 '@lezer/highlight': 1.2.1 - '@fsegurai/codemirror-theme-tokyo-night-day@6.2.3(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.39.9)(@lezer/highlight@1.2.1)': + '@fsegurai/codemirror-theme-tokyo-night-day@6.2.3(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.39.10)(@lezer/highlight@1.2.1)': dependencies: '@codemirror/language': 6.11.0 '@codemirror/state': 6.5.2 - '@codemirror/view': 6.39.9 + '@codemirror/view': 6.39.10 '@lezer/highlight': 1.2.1 - '@fsegurai/codemirror-theme-tokyo-night-storm@6.2.3(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.39.9)(@lezer/highlight@1.2.1)': + '@fsegurai/codemirror-theme-tokyo-night-storm@6.2.3(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.39.10)(@lezer/highlight@1.2.1)': dependencies: '@codemirror/language': 6.11.0 '@codemirror/state': 6.5.2 - '@codemirror/view': 6.39.9 + '@codemirror/view': 6.39.10 '@lezer/highlight': 1.2.1 - '@fsegurai/codemirror-theme-volcano@6.2.3(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.39.9)(@lezer/highlight@1.2.1)': + '@fsegurai/codemirror-theme-volcano@6.2.3(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.39.10)(@lezer/highlight@1.2.1)': dependencies: '@codemirror/language': 6.11.0 '@codemirror/state': 6.5.2 - '@codemirror/view': 6.39.9 + '@codemirror/view': 6.39.10 '@lezer/highlight': 1.2.1 - '@fsegurai/codemirror-theme-vscode-dark@6.2.3(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.39.9)(@lezer/highlight@1.2.1)': + '@fsegurai/codemirror-theme-vscode-dark@6.2.3(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.39.10)(@lezer/highlight@1.2.1)': dependencies: '@codemirror/language': 6.11.0 '@codemirror/state': 6.5.2 - '@codemirror/view': 6.39.9 + '@codemirror/view': 6.39.10 '@lezer/highlight': 1.2.1 - '@fsegurai/codemirror-theme-vscode-light@6.2.3(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.39.9)(@lezer/highlight@1.2.1)': + '@fsegurai/codemirror-theme-vscode-light@6.2.3(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.39.10)(@lezer/highlight@1.2.1)': dependencies: '@codemirror/language': 6.11.0 '@codemirror/state': 6.5.2 - '@codemirror/view': 6.39.9 + '@codemirror/view': 6.39.10 '@lezer/highlight': 1.2.1 '@fullcalendar/core@6.1.20': @@ -18846,29 +18862,29 @@ snapshots: openapi-sampler: 1.6.2 outdent: 0.8.0 - '@replit/codemirror-indentation-markers@6.5.3(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.39.9)': + '@replit/codemirror-indentation-markers@6.5.3(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.39.10)': dependencies: '@codemirror/language': 6.11.0 '@codemirror/state': 6.5.2 - '@codemirror/view': 6.39.9 + '@codemirror/view': 6.39.10 - '@replit/codemirror-lang-nix@6.0.1(@codemirror/autocomplete@6.18.6)(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.39.9)(@lezer/common@1.2.3)(@lezer/highlight@1.2.1)(@lezer/lr@1.4.2)': + '@replit/codemirror-lang-nix@6.0.1(@codemirror/autocomplete@6.18.6)(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.39.10)(@lezer/common@1.2.3)(@lezer/highlight@1.2.1)(@lezer/lr@1.4.2)': dependencies: '@codemirror/autocomplete': 6.18.6 '@codemirror/language': 6.11.0 '@codemirror/state': 6.5.2 - '@codemirror/view': 6.39.9 + '@codemirror/view': 6.39.10 '@lezer/common': 1.2.3 '@lezer/highlight': 1.2.1 '@lezer/lr': 1.4.2 - '@replit/codemirror-vim@6.3.0(@codemirror/commands@6.10.1)(@codemirror/language@6.11.0)(@codemirror/search@6.5.11)(@codemirror/state@6.5.2)(@codemirror/view@6.39.9)': + '@replit/codemirror-vim@6.3.0(@codemirror/commands@6.10.1)(@codemirror/language@6.11.0)(@codemirror/search@6.6.0)(@codemirror/state@6.5.2)(@codemirror/view@6.39.10)': dependencies: '@codemirror/commands': 6.10.1 '@codemirror/language': 6.11.0 - '@codemirror/search': 6.5.11 + '@codemirror/search': 6.6.0 '@codemirror/state': 6.5.2 - '@codemirror/view': 6.39.9 + '@codemirror/view': 6.39.10 '@rolldown/binding-android-arm64@1.0.0-beta.29': optional: true @@ -21647,6 +21663,8 @@ snapshots: ckeditor5-collaboration@47.3.0: dependencies: '@ckeditor/ckeditor5-collaboration-core': 47.3.0 + transitivePeerDependencies: + - supports-color ckeditor5-premium-features@47.3.0(bufferutil@4.0.9)(ckeditor5@47.3.0)(utf-8-validate@6.0.5): dependencies: From 0b5c1b648b98adf5d52ca2e061cfcf856b641b82 Mon Sep 17 00:00:00 2001 From: Hosted Weblate Date: Wed, 14 Jan 2026 06:41:16 +0100 Subject: [PATCH 042/353] Update translation files Updated by "Cleanup translation files" add-on in Weblate. Translation: Trilium Notes/README Translate-URL: https://hosted.weblate.org/projects/trilium/readme/ --- docs/README-hi.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/README-hi.md b/docs/README-hi.md index 9f0b724356..216863fb04 100644 --- a/docs/README-hi.md +++ b/docs/README-hi.md @@ -67,7 +67,7 @@ application with focus on building large personal knowledge bases. - [Patterns of Personal Knowledge Base](https://docs.triliumnotes.org/user-guide/misc/patterns-of-personal-knowledge) -## 🎁 Features +## 🎁 खासियतें * Notes can be arranged into arbitrarily deep tree. Single note can be placed into multiple places in the tree (see From 924d495d2e9b8e90791d28308f696109bf951eef Mon Sep 17 00:00:00 2001 From: Yatrik Patel Date: Wed, 14 Jan 2026 01:34:52 +0100 Subject: [PATCH 043/353] Translated using Weblate (Hindi) Currently translated at 7.2% (28 of 388 strings) Translation: Trilium Notes/Server Translate-URL: https://hosted.weblate.org/projects/trilium/server/hi/ --- apps/server/src/assets/translations/hi/server.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/apps/server/src/assets/translations/hi/server.json b/apps/server/src/assets/translations/hi/server.json index c0309cf6db..36b9e7829d 100644 --- a/apps/server/src/assets/translations/hi/server.json +++ b/apps/server/src/assets/translations/hi/server.json @@ -26,6 +26,7 @@ "quick-search": "क्विक सर्च बार को एक्टिवेट करें", "search-in-subtree": "एक्टिव नोट के सब-ट्री में नोट्स खोजें", "expand-subtree": "मौजूदा नोट के सब-ट्री को (subtree) एक्सपैंड करें", - "delete-note": "नोट डिलीट करें" + "delete-note": "नोट डिलीट करें", + "move-note-up-in-hierarchy": "नोट एक लेवल ऊपर मूव करें" } } From 93dd08d6298087afebb44dde70c8714f7b263171 Mon Sep 17 00:00:00 2001 From: Hosted Weblate Date: Wed, 14 Jan 2026 15:06:51 +0100 Subject: [PATCH 044/353] Update translation files Updated by "Cleanup translation files" add-on in Weblate. Translation: Trilium Notes/README Translate-URL: https://hosted.weblate.org/projects/trilium/readme/ --- docs/README-tr.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/README-tr.md b/docs/README-tr.md index 7dc80ac0ba..2046da31da 100644 --- a/docs/README-tr.md +++ b/docs/README-tr.md @@ -48,15 +48,15 @@ açık kaynaklı, çapraz platform hiyerarşik bir not alma uygulamasıdır. edin(https://docs.triliumnotes.org/)** Dokümantasyonumuz birden fazla formatta mevcuttur: -- **Online Documentation**: Browse the full documentation at - [docs.triliumnotes.org](https://docs.triliumnotes.org/) +- **Çevrimiçi Dökümantasyon**: Tüm dökümantasyonu görebilmek için + [docs.triliumnotes.org](https://docs.triliumnotes.org/)'a uğrayın - **In-App Help**: Press `F1` within Trilium to access the same documentation directly in the application - **GitHub**: Navigate through the [User Guide](./User%20Guide/User%20Guide/) in this repository -### Quick Links -- [Getting Started Guide](https://docs.triliumnotes.org/) +### Hızlı linkler +- [Başlangıç Kılavuzu](https://docs.triliumnotes.org/) - [Installation Instructions](https://docs.triliumnotes.org/user-guide/setup) - [Docker Setup](https://docs.triliumnotes.org/user-guide/setup/server/installation/docker) From 1d95392d222449d78b253999c33ceda78123b4c3 Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Wed, 14 Jan 2026 16:06:58 +0200 Subject: [PATCH 045/353] docs(user): improve Evernote documentation --- .../doc_notes/en/User Guide/!!!meta.json | 2 +- .../Import & Export/Evernote.html | 92 ++++++++++++--- .../Process internal links by titl.js | 35 ++++++ .../Note Tree/Hiding the subtree.html | 69 +++++------ docs/Developer Guide/!!!meta.json | 2 +- .../Developer Guide/Documentation.md | 2 +- docs/User Guide/!!!meta.json | 109 +++++++++++++----- docs/User Guide/User Guide.md | 2 +- .../Import & Export/Evernote.md | 54 ++++++++- .../Process internal links by titl.js | 35 ++++++ 10 files changed, 310 insertions(+), 92 deletions(-) create mode 100644 apps/server/src/assets/doc_notes/en/User Guide/User Guide/Basic Concepts and Features/Import & Export/Evernote/Process internal links by titl.js create mode 100644 docs/User Guide/User Guide/Basic Concepts and Features/Import & Export/Evernote/Process internal links by titl.js diff --git a/apps/server/src/assets/doc_notes/en/User Guide/!!!meta.json b/apps/server/src/assets/doc_notes/en/User Guide/!!!meta.json index 8abbb2f5c9..cab05610ef 100644 --- a/apps/server/src/assets/doc_notes/en/User Guide/!!!meta.json +++ b/apps/server/src/assets/doc_notes/en/User Guide/!!!meta.json @@ -1 +1 @@ -[{"id":"_help_BOCnjTMBCoxW","title":"Feature Highlights","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Feature Highlights"},{"name":"iconClass","value":"bx bx-star","type":"label"}]},{"id":"_help_Otzi9La2YAUX","title":"Installation & Setup","type":"book","attributes":[{"name":"iconClass","value":"bx bx-cog","type":"label"}],"children":[{"id":"_help_poXkQfguuA0U","title":"Desktop Installation","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Desktop Installation"},{"name":"iconClass","value":"bx bx-desktop","type":"label"}],"children":[{"id":"_help_nRqcgfTb97uV","title":"Using the desktop application as a server","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Desktop Installation/Using the desktop application "},{"name":"iconClass","value":"bx bx-file","type":"label"}]},{"id":"_help_Rp0q8bSP6Ayl","title":"System Requirements","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Desktop Installation/System Requirements"},{"name":"iconClass","value":"bx bx-chip","type":"label"}]},{"id":"_help_Un4wj2Mak2Ky","title":"Nix flake","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Desktop Installation/Nix flake"},{"name":"iconClass","value":"bx bxl-tux","type":"label"}]}]},{"id":"_help_WOcw2SLH6tbX","title":"Server Installation","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Server Installation"},{"name":"iconClass","value":"bx bx-server","type":"label"}],"children":[{"id":"_help_Dgg7bR3b6K9j","title":"1. Installing the server","type":"book","attributes":[{"name":"iconClass","value":"bx bx-folder","type":"label"}],"children":[{"id":"_help_3tW6mORuTHnB","title":"Packaged version for Linux","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Server Installation/1. Installing the server/Packaged version for Linux"},{"name":"iconClass","value":"bx bxl-tux","type":"label"}]},{"id":"_help_rWX5eY045zbE","title":"Using Docker","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Server Installation/1. Installing the server/Using Docker"},{"name":"iconClass","value":"bx bxl-docker","type":"label"}]},{"id":"_help_moVgBcoxE3EK","title":"On NixOS","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Server Installation/1. Installing the server/On NixOS"},{"name":"iconClass","value":"bx bxl-tux","type":"label"}]},{"id":"_help_J1Bb6lVlwU5T","title":"Manually","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Server Installation/1. Installing the server/Manually"},{"name":"iconClass","value":"bx bx-code-alt","type":"label"}]},{"id":"_help_DCmT6e7clMoP","title":"Using Kubernetes","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Server Installation/1. Installing the server/Using Kubernetes"},{"name":"iconClass","value":"bx bxl-kubernetes","type":"label"}]},{"id":"_help_klCWNks3ReaQ","title":"Multiple server instances","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Server Installation/1. Installing the server/Multiple server instances"},{"name":"iconClass","value":"bx bxs-user-account","type":"label"}]}]},{"id":"_help_vcjrb3VVYPZI","title":"2. Reverse proxy","type":"book","attributes":[{"name":"iconClass","value":"bx bx-folder","type":"label"}],"children":[{"id":"_help_ud6MShXL4WpO","title":"Nginx","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Server Installation/2. Reverse proxy/Nginx"},{"name":"iconClass","value":"bx bx-file","type":"label"}]},{"id":"_help_fDLvzOx29Pfg","title":"Apache using Docker","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Server Installation/2. Reverse proxy/Apache using Docker"},{"name":"iconClass","value":"bx bx-file","type":"label"}]},{"id":"_help_LLzSMXACKhUs","title":"Trusted proxy","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Server Installation/2. Reverse proxy/Trusted proxy"},{"name":"iconClass","value":"bx bx-file","type":"label"}]},{"id":"_help_5ERVJb9s4FRD","title":"Traefik","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Server Installation/2. Reverse proxy/Traefik"},{"name":"iconClass","value":"bx bx-file","type":"label"}]}]},{"id":"_help_l2VkvOwUNfZj","title":"HTTPS (TLS)","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Server Installation/HTTPS (TLS)"},{"name":"iconClass","value":"bx bx-lock-alt","type":"label"}]},{"id":"_help_0hzsNCP31IAB","title":"Authentication","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Server Installation/Authentication"},{"name":"iconClass","value":"bx bx-user","type":"label"}]},{"id":"_help_7DAiwaf8Z7Rz","title":"Multi-Factor Authentication","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Server Installation/Multi-Factor Authentication"},{"name":"iconClass","value":"bx bx-stopwatch","type":"label"}]},{"id":"_help_Un4wj2Mak2Ky","title":"Nix flake","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Server Installation/Nix flake.clone"},{"name":"iconClass","value":"bx bx-file","type":"label"}]},{"id":"_help_yeEaYqosGLSh","title":"Third-party cloud hosting","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Server Installation/Third-party cloud hosting"},{"name":"iconClass","value":"bx bx-cloud","type":"label"}]},{"id":"_help_iGTnKjubbXkA","title":"System Requirements","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Server Installation/System Requirements"},{"name":"iconClass","value":"bx bx-chip","type":"label"}]}]},{"id":"_help_cbkrhQjrkKrh","title":"Synchronization","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Synchronization"},{"name":"iconClass","value":"bx bx-sync","type":"label"}]},{"id":"_help_RDslemsQ6gCp","title":"Mobile Frontend","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Mobile Frontend"},{"name":"iconClass","value":"bx bx-mobile-alt","type":"label"}]},{"id":"_help_MtPxeAWVAzMg","title":"Web Clipper","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Web Clipper"},{"name":"iconClass","value":"bx bx-paperclip","type":"label"}]},{"id":"_help_n1lujUxCwipy","title":"Upgrading TriliumNext","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Upgrading TriliumNext"},{"name":"iconClass","value":"bx bx-up-arrow-alt","type":"label"}]},{"id":"_help_ODY7qQn5m2FT","title":"Backup","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Backup"},{"name":"iconClass","value":"bx bx-hdd","type":"label"}]},{"id":"_help_tAassRL4RSQL","title":"Data directory","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Data directory"},{"name":"iconClass","value":"bx bx-folder-open","type":"label"}]}]},{"id":"_help_gh7bpGYxajRS","title":"Basic Concepts and Features","type":"book","attributes":[{"name":"iconClass","value":"bx bx-help-circle","type":"label"}],"children":[{"id":"_help_Vc8PjrjAGuOp","title":"UI Elements","type":"book","attributes":[{"name":"iconClass","value":"bx bx-window-alt","type":"label"}],"children":[{"id":"_help_x0JgW8UqGXvq","title":"Vertical and horizontal layout","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/Vertical and horizontal layout"},{"name":"iconClass","value":"bx bxs-layout","type":"label"}]},{"id":"_help_x3i7MxGccDuM","title":"Global menu","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/Global menu"},{"name":"iconClass","value":"bx bx-menu","type":"label"}]},{"id":"_help_oPVyFC7WL2Lp","title":"Note Tree","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/Note Tree"},{"name":"iconClass","value":"bx bxs-tree-alt","type":"label"}],"children":[{"id":"_help_YtSN43OrfzaA","title":"Note tree contextual menu","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/Note Tree/Note tree contextual menu"},{"name":"iconClass","value":"bx bx-menu","type":"label"}]},{"id":"_help_yTjUdsOi4CIE","title":"Multiple selection","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/Note Tree/Multiple selection"},{"name":"iconClass","value":"bx bx-list-plus","type":"label"}]},{"id":"_help_DvdZhoQZY9Yd","title":"Keyboard shortcuts","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/Note Tree/Keyboard shortcuts"},{"name":"iconClass","value":"bx bxs-keyboard","type":"label"}]},{"id":"_help_wyaGBBQrl4i3","title":"Hiding the subtree","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/Note Tree/Hiding the subtree"},{"name":"iconClass","value":"bx bx-hide","type":"label"}]}]},{"id":"_help_BlN9DFI679QC","title":"Ribbon","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/Ribbon"},{"name":"iconClass","value":"bx bx-dots-horizontal","type":"label"}]},{"id":"_help_3seOhtN8uLIY","title":"Tabs","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/Tabs"},{"name":"iconClass","value":"bx bx-dock-top","type":"label"}]},{"id":"_help_xYmIYSP6wE3F","title":"Launch Bar","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/Launch Bar"},{"name":"iconClass","value":"bx bx-sidebar","type":"label"}]},{"id":"_help_8YBEPzcpUgxw","title":"Note buttons","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/Note buttons"},{"name":"iconClass","value":"bx bx-dots-vertical-rounded","type":"label"}]},{"id":"_help_4TIF1oA4VQRO","title":"Options","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/Options"},{"name":"iconClass","value":"bx bx-cog","type":"label"}]},{"id":"_help_luNhaphA37EO","title":"Split View","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/Split View"},{"name":"iconClass","value":"bx bx-dock-right","type":"label"}]},{"id":"_help_XpOYSgsLkTJy","title":"Floating buttons","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/Floating buttons"},{"name":"iconClass","value":"bx bx-rectangle","type":"label"}]},{"id":"_help_RnaPdbciOfeq","title":"Right Sidebar","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/Right Sidebar"},{"name":"iconClass","value":"bx bxs-dock-right","type":"label"}]},{"id":"_help_r5JGHN99bVKn","title":"Recent Changes","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/Recent Changes"},{"name":"iconClass","value":"bx bx-history","type":"label"}]},{"id":"_help_ny318J39E5Z0","title":"Zoom","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/Zoom"},{"name":"iconClass","value":"bx bx-zoom-in","type":"label"}]},{"id":"_help_lgKX7r3aL30x","title":"Note Tooltip","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/Note Tooltip"},{"name":"iconClass","value":"bx bx-message-detail","type":"label"}]},{"id":"_help_IjZS7iK5EXtb","title":"New Layout","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/New Layout"},{"name":"iconClass","value":"bx bx-layout","type":"label"}],"children":[{"id":"_help_I6p2a06hdnL6","title":"Breadcrumb","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/New Layout/Breadcrumb"},{"name":"iconClass","value":"bx bx-chevron-right","type":"label"}]},{"id":"_help_AlJ73vBCjWDw","title":"Status bar","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/New Layout/Status bar"},{"name":"iconClass","value":"bx bx-dock-bottom","type":"label"}]}]}]},{"id":"_help_BFs8mudNFgCS","title":"Notes","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Notes"},{"name":"iconClass","value":"bx bx-notepad","type":"label"}],"children":[{"id":"_help_p9kXRFAkwN4o","title":"Note Icons","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Notes/Note Icons"},{"name":"iconClass","value":"bx bxs-grid","type":"label"}]},{"id":"_help_0vhv7lsOLy82","title":"Attachments","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Notes/Attachments"},{"name":"iconClass","value":"bx bx-paperclip","type":"label"}]},{"id":"_help_IakOLONlIfGI","title":"Cloning Notes","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Notes/Cloning Notes"},{"name":"iconClass","value":"bx bx-duplicate","type":"label"}],"children":[{"id":"_help_TBwsyfadTA18","title":"Branch prefix","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Notes/Cloning Notes/Branch prefix"},{"name":"iconClass","value":"bx bx-rename","type":"label"}]}]},{"id":"_help_bwg0e8ewQMak","title":"Protected Notes","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Notes/Protected Notes"},{"name":"iconClass","value":"bx bx-lock-alt","type":"label"}]},{"id":"_help_MKmLg5x6xkor","title":"Archived Notes","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Notes/Archived Notes"},{"name":"iconClass","value":"bx bx-box","type":"label"}]},{"id":"_help_vZWERwf8U3nx","title":"Note Revisions","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Notes/Note Revisions"},{"name":"iconClass","value":"bx bx-history","type":"label"}]},{"id":"_help_aGlEvb9hyDhS","title":"Sorting Notes","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Notes/Sorting Notes"},{"name":"iconClass","value":"bx bx-sort-up","type":"label"}]},{"id":"_help_NRnIZmSMc5sj","title":"Printing & Exporting as PDF","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Notes/Printing & Exporting as PDF"},{"name":"iconClass","value":"bx bx-printer","type":"label"}]},{"id":"_help_CoFPLs3dRlXc","title":"Read-Only Notes","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Notes/Read-Only Notes"},{"name":"iconClass","value":"bx bx-edit-alt","type":"label"}]},{"id":"_help_0ESUbbAxVnoK","title":"Note List","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Notes/Note List"},{"name":"iconClass","value":"bx bxs-grid","type":"label"}]}]},{"id":"_help_wArbEsdSae6g","title":"Navigation","type":"book","attributes":[{"name":"iconClass","value":"bx bx-navigation","type":"label"}],"children":[{"id":"_help_kBrnXNG3Hplm","title":"Tree Concepts","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Navigation/Tree Concepts"},{"name":"iconClass","value":"bx bx-pyramid","type":"label"}]},{"id":"_help_MMiBEQljMQh2","title":"Note Navigation","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Navigation/Note Navigation"},{"name":"iconClass","value":"bx bxs-navigation","type":"label"}]},{"id":"_help_Ms1nauBra7gq","title":"Quick search","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Navigation/Quick search"},{"name":"iconClass","value":"bx bx-search-alt-2","type":"label"}]},{"id":"_help_F1r9QtzQLZqm","title":"Jump to...","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Navigation/Jump to"},{"name":"iconClass","value":"bx bx-send","type":"label"}]},{"id":"_help_eIg8jdvaoNNd","title":"Search","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Navigation/Search"},{"name":"iconClass","value":"bx bx-search-alt-2","type":"label"}]},{"id":"_help_u3YFHC9tQlpm","title":"Bookmarks","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Navigation/Bookmarks"},{"name":"iconClass","value":"bx bx-bookmarks","type":"label"}]},{"id":"_help_OR8WJ7Iz9K4U","title":"Note Hoisting","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Navigation/Note Hoisting"},{"name":"iconClass","value":"bx bxs-chevrons-up","type":"label"}]},{"id":"_help_ZjLYv08Rp3qC","title":"Quick edit","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Navigation/Quick edit"},{"name":"iconClass","value":"bx bx-edit","type":"label"}]},{"id":"_help_9sRHySam5fXb","title":"Workspaces","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Navigation/Workspaces"},{"name":"iconClass","value":"bx bx-door-open","type":"label"}]},{"id":"_help_xWtq5NUHOwql","title":"Similar Notes","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Navigation/Similar Notes"},{"name":"iconClass","value":"bx bx-bar-chart","type":"label"}]},{"id":"_help_McngOG2jbUWX","title":"Search in note","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Navigation/Search in note"},{"name":"iconClass","value":"bx bx-search-alt-2","type":"label"}]}]},{"id":"_help_A9Oc6YKKc65v","title":"Keyboard Shortcuts","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Keyboard Shortcuts"},{"name":"iconClass","value":"bx bxs-keyboard","type":"label"}]},{"id":"_help_Wy267RK4M69c","title":"Themes","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Themes"},{"name":"iconClass","value":"bx bx-palette","type":"label"}],"children":[{"id":"_help_VbjZvtUek0Ln","title":"Theme Gallery","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Themes/Theme Gallery"},{"name":"iconClass","value":"bx bx-book-reader","type":"label"}]},{"id":"_help_gOKqSJgXLcIj","title":"Icon Packs","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Themes/Icon Packs"},{"name":"iconClass","value":"bx bx-package","type":"label"}]}]},{"id":"_help_mHbBMPDPkVV5","title":"Import & Export","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Import & Export"},{"name":"iconClass","value":"bx bx-import","type":"label"}],"children":[{"id":"_help_Oau6X9rCuegd","title":"Markdown","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Import & Export/Markdown"},{"name":"iconClass","value":"bx bxl-markdown","type":"label"}],"children":[{"id":"_help_rJ9grSgoExl9","title":"Supported syntax","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Import & Export/Markdown/Supported syntax"},{"name":"iconClass","value":"bx bx-code-alt","type":"label"}]}]},{"id":"_help_syuSEKf2rUGr","title":"Evernote","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Import & Export/Evernote"},{"name":"iconClass","value":"bx bx-window-open","type":"label"}]},{"id":"_help_GnhlmrATVqcH","title":"OneNote","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Import & Export/OneNote"},{"name":"iconClass","value":"bx bx-window-open","type":"label"}]}]},{"id":"_help_rC3pL2aptaRE","title":"Zen mode","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Zen mode"},{"name":"iconClass","value":"bx bxs-yin-yang","type":"label"}]}]},{"id":"_help_s3YCWHBfmYuM","title":"Quick Start","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Quick Start"},{"name":"iconClass","value":"bx bx-run","type":"label"}]},{"id":"_help_i6dbnitykE5D","title":"FAQ","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/FAQ"},{"name":"iconClass","value":"bx bx-question-mark","type":"label"}]},{"id":"_help_KSZ04uQ2D1St","title":"Note Types","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types"},{"name":"iconClass","value":"bx bx-edit","type":"label"}],"children":[{"id":"_help_iPIMuisry3hd","title":"Text","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text"},{"name":"iconClass","value":"bx bx-note","type":"label"}],"children":[{"id":"_help_NwBbFdNZ9h7O","title":"Block quotes & admonitions","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Block quotes & admonitions"},{"name":"iconClass","value":"bx bx-info-circle","type":"label"}]},{"id":"_help_oSuaNgyyKnhu","title":"Bookmarks","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Bookmarks"},{"name":"iconClass","value":"bx bx-bookmark","type":"label"}]},{"id":"_help_veGu4faJErEM","title":"Content language & Right-to-left support","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Content language & Right-to-le"},{"name":"iconClass","value":"bx bx-align-right","type":"label"}]},{"id":"_help_2x0ZAX9ePtzV","title":"Cut to subnote","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Cut to subnote"},{"name":"iconClass","value":"bx bx-cut","type":"label"}]},{"id":"_help_UYuUB1ZekNQU","title":"Developer-specific formatting","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Developer-specific formatting"},{"name":"iconClass","value":"bx bx-code-alt","type":"label"}],"children":[{"id":"_help_QxEyIjRBizuC","title":"Code blocks","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Developer-specific formatting/Code blocks"},{"name":"iconClass","value":"bx bx-code","type":"label"}]}]},{"id":"_help_AgjCISero73a","title":"Footnotes","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Footnotes"},{"name":"iconClass","value":"bx bx-bracket","type":"label"}]},{"id":"_help_nRhnJkTT8cPs","title":"Formatting toolbar","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Formatting toolbar"},{"name":"iconClass","value":"bx bx-text","type":"label"}]},{"id":"_help_Gr6xFaF6ioJ5","title":"General formatting","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/General formatting"},{"name":"iconClass","value":"bx bx-bold","type":"label"}]},{"id":"_help_AxshuNRegLAv","title":"Highlights list","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Highlights list"},{"name":"iconClass","value":"bx bx-highlight","type":"label"}]},{"id":"_help_mT0HEkOsz6i1","title":"Images","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Images"},{"name":"iconClass","value":"bx bx-image-alt","type":"label"}],"children":[{"id":"_help_0Ofbk1aSuVRu","title":"Image references","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Images/Image references"},{"name":"iconClass","value":"bx bxs-file-image","type":"label"}]}]},{"id":"_help_nBAXQFj20hS1","title":"Include Note","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Include Note"},{"name":"iconClass","value":"bx bx-file","type":"label"}]},{"id":"_help_CohkqWQC1iBv","title":"Insert buttons","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Insert buttons"},{"name":"iconClass","value":"bx bx-plus","type":"label"}]},{"id":"_help_oiVPnW8QfnvS","title":"Keyboard shortcuts","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Keyboard shortcuts"},{"name":"iconClass","value":"bx bxs-keyboard","type":"label"}]},{"id":"_help_QEAPj01N5f7w","title":"Links","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Links"},{"name":"iconClass","value":"bx bx-link-alt","type":"label"}],"children":[{"id":"_help_3IDVtesTQ8ds","title":"External links","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Links/External links"},{"name":"iconClass","value":"bx bx-link-external","type":"label"}]},{"id":"_help_hrZ1D00cLbal","title":"Internal (reference) links","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Links/Internal (reference) links"},{"name":"iconClass","value":"bx bx-link","type":"label"}]}]},{"id":"_help_S6Xx8QIWTV66","title":"Lists","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Lists"},{"name":"iconClass","value":"bx bx-list-ul","type":"label"}]},{"id":"_help_QrtTYPmdd1qq","title":"Markdown-like formatting","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Markdown-like formatting"},{"name":"iconClass","value":"bx bxl-markdown","type":"label"}]},{"id":"_help_YfYAtQBcfo5V","title":"Math Equations","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Math Equations"},{"name":"iconClass","value":"bx bx-math","type":"label"}]},{"id":"_help_dEHYtoWWi8ct","title":"Other features","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Other features"},{"name":"iconClass","value":"bx bxs-grid","type":"label"}]},{"id":"_help_gLt3vA97tMcp","title":"Premium features","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Premium features"},{"name":"iconClass","value":"bx bx-star","type":"label"}],"children":[{"id":"_help_ZlN4nump6EbW","title":"Slash Commands","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Premium features/Slash Commands"},{"name":"iconClass","value":"bx bx-menu","type":"label"}]},{"id":"_help_pwc194wlRzcH","title":"Text Snippets","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Premium features/Text Snippets"},{"name":"iconClass","value":"bx bx-align-left","type":"label"}]},{"id":"_help_5wZallV2Qo1t","title":"Format Painter","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Premium features/Format Painter"},{"name":"iconClass","value":"bx bxs-paint-roll","type":"label"}]}]},{"id":"_help_BFvAtE74rbP6","title":"Table of contents","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Table of contents"},{"name":"iconClass","value":"bx bx-heading","type":"label"}]},{"id":"_help_NdowYOC1GFKS","title":"Tables","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Tables"},{"name":"iconClass","value":"bx bx-table","type":"label"}]}]},{"id":"_help_6f9hih2hXXZk","title":"Code","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Code"},{"name":"iconClass","value":"bx bx-code","type":"label"}]},{"id":"_help_m523cpzocqaD","title":"Saved Search","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Saved Search"},{"name":"iconClass","value":"bx bx-file-find","type":"label"}]},{"id":"_help_iRwzGnHPzonm","title":"Relation Map","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Relation Map"},{"name":"iconClass","value":"bx bxs-network-chart","type":"label"}]},{"id":"_help_bdUJEHsAPYQR","title":"Note Map","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Note Map"},{"name":"iconClass","value":"bx bxs-network-chart","type":"label"}]},{"id":"_help_HcABDtFCkbFN","title":"Render Note","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Render Note"},{"name":"iconClass","value":"bx bx-extension","type":"label"}]},{"id":"_help_s1aBHPd79XYj","title":"Mermaid Diagrams","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Mermaid Diagrams"},{"name":"iconClass","value":"bx bx-selection","type":"label"}],"children":[{"id":"_help_RH6yLjjWJHof","title":"ELK layout","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Mermaid Diagrams/ELK layout"},{"name":"iconClass","value":"bx bxs-network-chart","type":"label"}]},{"id":"_help_WWgeUaBb7UfC","title":"Syntax reference","type":"webView","attributes":[{"type":"label","name":"webViewSrc","value":"https://mermaid.js.org/intro/syntax-reference.html"},{"name":"iconClass","value":"bx bx-file","type":"label"}],"enforceAttributes":true}]},{"id":"_help_grjYqerjn243","title":"Canvas","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Canvas"},{"name":"iconClass","value":"bx bx-pen","type":"label"}]},{"id":"_help_1vHRoWCEjj0L","title":"Web View","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Web View"},{"name":"iconClass","value":"bx bx-globe-alt","type":"label"}]},{"id":"_help_gBbsAeiuUxI5","title":"Mind Map","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Mind Map"},{"name":"iconClass","value":"bx bx-sitemap","type":"label"}]},{"id":"_help_W8vYD3Q1zjCR","title":"File","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/File"},{"name":"iconClass","value":"bx bx-file-blank","type":"label"}],"children":[{"id":"_help_XJGJrpu7F9sh","title":"PDFs","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/File/PDFs"},{"name":"iconClass","value":"bx bxs-file-pdf","type":"label"}]}]}]},{"id":"_help_GTwFsgaA0lCt","title":"Collections","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Collections"},{"name":"iconClass","value":"bx bx-book","type":"label"}],"children":[{"id":"_help_xWbu3jpNWapp","title":"Calendar","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Collections/Calendar"},{"name":"iconClass","value":"bx bx-calendar","type":"label"}]},{"id":"_help_2FvYrpmOXm29","title":"Table","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Collections/Table"},{"name":"iconClass","value":"bx bx-table","type":"label"}]},{"id":"_help_CtBQqbwXDx1w","title":"Kanban Board","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Collections/Kanban Board"},{"name":"iconClass","value":"bx bx-columns","type":"label"}]},{"id":"_help_81SGnPGMk7Xc","title":"Geo Map","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Collections/Geo Map"},{"name":"iconClass","value":"bx bx-map-alt","type":"label"}]},{"id":"_help_zP3PMqaG71Ct","title":"Presentation","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Collections/Presentation"},{"name":"iconClass","value":"bx bx-slideshow","type":"label"}]},{"id":"_help_8QqnMzx393bx","title":"Grid View","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Collections/Grid View"},{"name":"iconClass","value":"bx bxs-grid","type":"label"}]},{"id":"_help_mULW0Q3VojwY","title":"List View","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Collections/List View"},{"name":"iconClass","value":"bx bx-list-ul","type":"label"}]}]},{"id":"_help_BgmBlOIl72jZ","title":"Troubleshooting","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Troubleshooting"},{"name":"iconClass","value":"bx bx-bug","type":"label"}],"children":[{"id":"_help_wy8So3yZZlH9","title":"Reporting issues","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Troubleshooting/Reporting issues"},{"name":"iconClass","value":"bx bx-bug-alt","type":"label"}]},{"id":"_help_x59R8J8KV5Bp","title":"Anonymized Database","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Troubleshooting/Anonymized Database"},{"name":"iconClass","value":"bx bx-low-vision","type":"label"}]},{"id":"_help_qzNzp9LYQyPT","title":"Error logs","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Troubleshooting/Error logs"},{"name":"iconClass","value":"bx bx-comment-error","type":"label"}],"children":[{"id":"_help_bnyigUA2UK7s","title":"Backend (server) logs","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Troubleshooting/Error logs/Backend (server) logs"},{"name":"iconClass","value":"bx bx-server","type":"label"}]},{"id":"_help_9yEHzMyFirZR","title":"Frontend logs","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Troubleshooting/Error logs/Frontend logs"},{"name":"iconClass","value":"bx bx-window-alt","type":"label"}]}]},{"id":"_help_vdlYGAcpXAgc","title":"Synchronization fails with 504 Gateway Timeout","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Troubleshooting/Synchronization fails with 504"},{"name":"iconClass","value":"bx bx-error","type":"label"}]},{"id":"_help_s8alTXmpFR61","title":"Refreshing the application","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Troubleshooting/Refreshing the application"},{"name":"iconClass","value":"bx bx-refresh","type":"label"}]}]},{"id":"_help_pKK96zzmvBGf","title":"Theme development","type":"book","attributes":[{"name":"iconClass","value":"bx bx-palette","type":"label"}],"children":[{"id":"_help_7NfNr5pZpVKV","title":"Creating a custom theme","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Theme development/Creating a custom theme"},{"name":"iconClass","value":"bx bxs-color","type":"label"}]},{"id":"_help_WFGzWeUK6arS","title":"Customize the Next theme","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Theme development/Customize the Next theme"},{"name":"iconClass","value":"bx bx-news","type":"label"}]},{"id":"_help_WN5z4M8ASACJ","title":"Reference","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Theme development/Reference"},{"name":"iconClass","value":"bx bx-book-open","type":"label"}]},{"id":"_help_AlhDUqhENtH7","title":"Custom app-wide CSS","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Theme development/Custom app-wide CSS"},{"name":"iconClass","value":"bx bxs-file-css","type":"label"}]},{"id":"_help_g1mlRoU8CsqC","title":"Creating an icon pack","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Theme development/Creating an icon pack"},{"name":"iconClass","value":"bx bx-package","type":"label"}]}]},{"id":"_help_tC7s2alapj8V","title":"Advanced Usage","type":"book","attributes":[{"name":"iconClass","value":"bx bx-rocket","type":"label"}],"children":[{"id":"_help_zEY4DaJG4YT5","title":"Attributes","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Attributes"},{"name":"iconClass","value":"bx bx-list-check","type":"label"}],"children":[{"id":"_help_HI6GBBIduIgv","title":"Labels","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Attributes/Labels"},{"name":"iconClass","value":"bx bx-hash","type":"label"}]},{"id":"_help_Cq5X6iKQop6R","title":"Relations","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Attributes/Relations"},{"name":"iconClass","value":"bx bx-transfer","type":"label"}]},{"id":"_help_bwZpz2ajCEwO","title":"Attribute Inheritance","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Attributes/Attribute Inheritance"},{"name":"iconClass","value":"bx bx-list-plus","type":"label"}]},{"id":"_help_OFXdgB2nNk1F","title":"Promoted Attributes","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Attributes/Promoted Attributes"},{"name":"iconClass","value":"bx bx-table","type":"label"}]}]},{"id":"_help_KC1HB96bqqHX","title":"Templates","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Templates"},{"name":"iconClass","value":"bx bx-copy","type":"label"}]},{"id":"_help_BCkXAVs63Ttv","title":"Note Map (Link map, Tree map)","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Note Map (Link map, Tree map)"},{"name":"iconClass","value":"bx bxs-network-chart","type":"label"}]},{"id":"_help_R9pX4DGra2Vt","title":"Sharing","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Sharing"},{"name":"iconClass","value":"bx bx-share-alt","type":"label"}],"children":[{"id":"_help_Qjt68inQ2bRj","title":"Serving directly the content of a note","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Sharing/Serving directly the content o"},{"name":"iconClass","value":"bx bx-code","type":"label"}]},{"id":"_help_ycBFjKrrwE9p","title":"Exporting static HTML for web publishing","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Sharing/Exporting static HTML for web "},{"name":"iconClass","value":"bx bxs-file-html","type":"label"}]},{"id":"_help_sLIJ6f1dkJYW","title":"Reverse proxy configuration","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Sharing/Reverse proxy configuration"},{"name":"iconClass","value":"bx bx-world","type":"label"}]}]},{"id":"_help_5668rwcirq1t","title":"Advanced Showcases","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Advanced Showcases"},{"name":"iconClass","value":"bx bxs-component","type":"label"}],"children":[{"id":"_help_l0tKav7yLHGF","title":"Day Notes","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Advanced Showcases/Day Notes"},{"name":"iconClass","value":"bx bx-calendar","type":"label"}]},{"id":"_help_R7abl2fc6Mxi","title":"Weight Tracker","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Advanced Showcases/Weight Tracker"},{"name":"iconClass","value":"bx bx-line-chart","type":"label"}]},{"id":"_help_xYjQUYhpbUEW","title":"Task Manager","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Advanced Showcases/Task Manager"},{"name":"iconClass","value":"bx bx-calendar-check","type":"label"}]}]},{"id":"_help_J5Ex1ZrMbyJ6","title":"Custom Request Handler","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Custom Request Handler"},{"name":"iconClass","value":"bx bx-globe","type":"label"}]},{"id":"_help_d3fAXQ2diepH","title":"Custom Resource Providers","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Custom Resource Providers"},{"name":"iconClass","value":"bx bxs-file-plus","type":"label"}]},{"id":"_help_pgxEVkzLl1OP","title":"ETAPI (REST API)","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/ETAPI (REST API)"},{"name":"iconClass","value":"bx bx-extension","type":"label"}],"children":[{"id":"_help_9qPsTWBorUhQ","title":"API Reference","type":"webView","attributes":[{"type":"label","name":"webViewSrc","value":"https://docs.triliumnotes.org/rest-api/etapi/"},{"name":"iconClass","value":"bx bx-file","type":"label"}],"enforceAttributes":true}]},{"id":"_help_47ZrP6FNuoG8","title":"Default Note Title","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Default Note Title"},{"name":"iconClass","value":"bx bx-edit-alt","type":"label"}]},{"id":"_help_wX4HbRucYSDD","title":"Database","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Database"},{"name":"iconClass","value":"bx bx-data","type":"label"}],"children":[{"id":"_help_oyIAJ9PvvwHX","title":"Manually altering the database","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Database/Manually altering the database"},{"name":"iconClass","value":"bx bxs-edit","type":"label"}],"children":[{"id":"_help_YKWqdJhzi2VY","title":"SQL Console","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Database/Manually altering the database/SQL Console"},{"name":"iconClass","value":"bx bx-data","type":"label"}]}]},{"id":"_help_6tZeKvSHEUiB","title":"Demo Notes","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Database/Demo Notes"},{"name":"iconClass","value":"bx bx-package","type":"label"}]}]},{"id":"_help_Gzjqa934BdH4","title":"Configuration (config.ini or environment variables)","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Configuration (config.ini or e"},{"name":"iconClass","value":"bx bx-cog","type":"label"}],"children":[{"id":"_help_c5xB8m4g2IY6","title":"Trilium instance","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Configuration (config.ini or environment variables)/Trilium instance"},{"name":"iconClass","value":"bx bx-windows","type":"label"}]},{"id":"_help_LWtBjFej3wX3","title":"Cross-Origin Resource Sharing (CORS)","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Configuration (config.ini or environment variables)/Cross-Origin Resource Sharing "},{"name":"iconClass","value":"bx bx-lock","type":"label"}]}]},{"id":"_help_ivYnonVFBxbQ","title":"Bulk Actions","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Bulk Actions"},{"name":"iconClass","value":"bx bx-list-plus","type":"label"}]},{"id":"_help_4FahAwuGTAwC","title":"Note source","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Note source"},{"name":"iconClass","value":"bx bx-code","type":"label"}]},{"id":"_help_1YeN2MzFUluU","title":"Technologies used","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Technologies used"},{"name":"iconClass","value":"bx bx-pyramid","type":"label"}],"children":[{"id":"_help_MI26XDLSAlCD","title":"CKEditor","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Technologies used/CKEditor"},{"name":"iconClass","value":"bx bx-file","type":"label"}]},{"id":"_help_N4IDkixaDG9C","title":"MindElixir","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Technologies used/MindElixir"},{"name":"iconClass","value":"bx bx-sitemap","type":"label"}]},{"id":"_help_H0mM1lTxF9JI","title":"Excalidraw","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Technologies used/Excalidraw"},{"name":"iconClass","value":"bx bx-pen","type":"label"}]},{"id":"_help_MQHyy2dIFgxS","title":"Leaflet","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Technologies used/Leaflet"},{"name":"iconClass","value":"bx bx-map-alt","type":"label"}]}]},{"id":"_help_m1lbrzyKDaRB","title":"Note ID","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Note ID"},{"name":"iconClass","value":"bx bx-hash","type":"label"}]},{"id":"_help_0vTSyvhPTAOz","title":"Internal API","type":"book","attributes":[{"name":"iconClass","value":"bx bxs-component","type":"label"}],"children":[{"id":"_help_z8O2VG4ZZJD7","title":"API Reference","type":"webView","attributes":[{"type":"label","name":"webViewSrc","value":"https://docs.triliumnotes.org/rest-api/internal/"},{"name":"iconClass","value":"bx bx-file","type":"label"}],"enforceAttributes":true}]},{"id":"_help_2mUhVmZK8RF3","title":"Hidden Notes","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Hidden Notes"},{"name":"iconClass","value":"bx bx-hide","type":"label"}]},{"id":"_help_uYF7pmepw27K","title":"Metrics","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Metrics"},{"name":"iconClass","value":"bx bxs-data","type":"label"}],"children":[{"id":"_help_bOP3TB56fL1V","title":"grafana-dashboard.json","type":"doc","attributes":[{"name":"iconClass","value":"bx bx-file","type":"label"}]}]},{"id":"_help_64ZTlUPgEPtW","title":"Safe mode","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Safe mode"},{"name":"iconClass","value":"bx bxs-virus-block","type":"label"}]},{"id":"_help_HAIOFBoYIIdO","title":"Nightly release","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Nightly release"},{"name":"iconClass","value":"bx bx-moon","type":"label"}]},{"id":"_help_ZmT9ln8XJX2o","title":"Read-only database","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Read-only database"},{"name":"iconClass","value":"bx bx-book-reader","type":"label"}]}]},{"id":"_help_GBBMSlVSOIGP","title":"AI","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/AI"},{"name":"iconClass","value":"bx bx-bot","type":"label"}],"children":[{"id":"_help_WkM7gsEUyCXs","title":"Providers","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/AI/Providers"},{"name":"iconClass","value":"bx bx-select-multiple","type":"label"}],"children":[{"id":"_help_7EdTxPADv95W","title":"Ollama","type":"book","attributes":[{"name":"iconClass","value":"bx bx-message-dots","type":"label"}],"children":[{"id":"_help_vvUCN7FDkq7G","title":"Installing Ollama","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/AI/Providers/Ollama/Installing Ollama"},{"name":"iconClass","value":"bx bx-file","type":"label"}]}]},{"id":"_help_ZavFigBX9AwP","title":"OpenAI","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/AI/Providers/OpenAI"},{"name":"iconClass","value":"bx bx-message-dots","type":"label"}]},{"id":"_help_e0lkirXEiSNc","title":"Anthropic","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/AI/Providers/Anthropic"},{"name":"iconClass","value":"bx bx-message-dots","type":"label"}]}]}]},{"id":"_help_CdNpE2pqjmI6","title":"Scripting","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Scripting"},{"name":"iconClass","value":"bx bxs-file-js","type":"label"}],"children":[{"id":"_help_yIhgI5H7A2Sm","title":"Frontend Basics","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Scripting/Frontend Basics"},{"name":"iconClass","value":"bx bx-window","type":"label"}],"children":[{"id":"_help_MgibgPcfeuGz","title":"Custom Widgets","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Scripting/Frontend Basics/Custom Widgets"},{"name":"iconClass","value":"bx bxs-widget","type":"label"}],"children":[{"id":"_help_SynTBQiBsdYJ","title":"Widget Basics","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Scripting/Frontend Basics/Custom Widgets/Widget Basics"},{"name":"iconClass","value":"bx bx-file","type":"label"}]},{"id":"_help_GhurYZjh8e1V","title":"Note context aware widget","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Scripting/Frontend Basics/Custom Widgets/Note context aware widget"},{"name":"iconClass","value":"bx bx-file","type":"label"}]},{"id":"_help_M8IppdwVHSjG","title":"Right pane widget","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Scripting/Frontend Basics/Custom Widgets/Right pane widget"},{"name":"iconClass","value":"bx bx-file","type":"label"}]},{"id":"_help_YNxAqkI5Kg1M","title":"Word count widget","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Scripting/Frontend Basics/Custom Widgets/Word count widget"},{"name":"iconClass","value":"bx bx-file","type":"label"}]},{"id":"_help_VqGQnnPGnqAU","title":"CSS","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Scripting/Frontend Basics/Custom Widgets/CSS"},{"name":"iconClass","value":"bx bx-file","type":"label"}]},{"id":"_help_gMkgcLJ6jBkg","title":"Troubleshooting","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Scripting/Frontend Basics/Custom Widgets/Troubleshooting"},{"name":"iconClass","value":"bx bx-file","type":"label"}]}]},{"id":"_help_es8OU2GuguFU","title":"Examples","type":"book","attributes":[{"name":"iconClass","value":"bx bx-code-alt","type":"label"}],"children":[{"id":"_help_TjLYAo3JMO8X","title":"\"New Task\" launcher button","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Scripting/Frontend Basics/Examples/New Task launcher button"},{"name":"iconClass","value":"bx bx-task","type":"label"}]},{"id":"_help_7kZPMD0uFwkH","title":"Downloading responses from Google Forms","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Scripting/Frontend Basics/Examples/Downloading responses from Goo"},{"name":"iconClass","value":"bx bx-file","type":"label"}]},{"id":"_help_DL92EjAaXT26","title":"Using promoted attributes to configure scripts","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Scripting/Frontend Basics/Examples/Using promoted attributes to c"},{"name":"iconClass","value":"bx bx-file","type":"label"}]}]},{"id":"_help_4Gn3psZKsfSm","title":"Launch Bar Widgets","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Scripting/Frontend Basics/Launch Bar Widgets"},{"name":"iconClass","value":"bx bx-dock-left","type":"label"}],"children":[{"id":"_help_IPArqVfDQ4We","title":"Note Title Widget","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Scripting/Frontend Basics/Launch Bar Widgets/Note Title Widget"},{"name":"iconClass","value":"bx bx-file","type":"label"}]},{"id":"_help_gcI7RPbaNSh3","title":"Analog Watch","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Scripting/Frontend Basics/Launch Bar Widgets/Analog Watch"},{"name":"iconClass","value":"bx bx-file","type":"label"}]}]},{"id":"_help_KLsqhjaqh1QW","title":"Preact","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Scripting/Frontend Basics/Preact"},{"name":"iconClass","value":"bx bxl-react","type":"label"}],"children":[{"id":"_help_Bqde6BvPo05g","title":"Component libraries","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Scripting/Frontend Basics/Preact/Component libraries"},{"name":"iconClass","value":"bx bxs-component","type":"label"}]},{"id":"_help_ykYtbM9k3a7B","title":"Hooks","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Scripting/Frontend Basics/Preact/Hooks"},{"name":"iconClass","value":"bx bx-question-mark","type":"label"}]},{"id":"_help_Sg9GrCtyftZf","title":"CSS","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Scripting/Frontend Basics/Preact/CSS"},{"name":"iconClass","value":"bx bxs-file-css","type":"label"}]},{"id":"_help_RSssb9S3xgSr","title":"Built-in components","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Scripting/Frontend Basics/Preact/Built-in components"},{"name":"iconClass","value":"bx bxs-component","type":"label"}],"children":[{"id":"_help_i9B4IW7b6V6z","title":"Widget showcase","type":"doc","attributes":[{"name":"iconClass","value":"bx bx-file","type":"label"}]}]}]}]},{"id":"_help_SPirpZypehBG","title":"Backend scripts","type":"book","attributes":[{"name":"iconClass","value":"bx bx-server","type":"label"}],"children":[{"id":"_help_fZ2IGYFXjkEy","title":"Server-side imports","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Scripting/Backend scripts/Server-side imports"},{"name":"iconClass","value":"bx bx-file","type":"label"}]},{"id":"_help_GPERMystNGTB","title":"Events","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Scripting/Backend scripts/Events"},{"name":"iconClass","value":"bx bx-rss","type":"label"}]}]},{"id":"_help_wqXwKJl6VpNk","title":"Common concepts","type":"book","attributes":[{"name":"iconClass","value":"bx bxl-nodejs","type":"label"}],"children":[{"id":"_help_hA834UaHhSNn","title":"Script bundles","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Scripting/Common concepts/Script bundles"},{"name":"iconClass","value":"bx bx-package","type":"label"}]}]},{"id":"_help_GLks18SNjxmC","title":"Script API","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Scripting/Script API"},{"name":"iconClass","value":"bx bx-code-curly","type":"label"}],"children":[{"id":"_help_Q2z6av6JZVWm","title":"Frontend API","type":"webView","attributes":[{"type":"label","name":"webViewSrc","value":"https://docs.triliumnotes.org/script-api/frontend"},{"name":"iconClass","value":"bx bx-folder","type":"label"}],"enforceAttributes":true,"children":[{"id":"_help_habiZ3HU8Kw8","title":"FNote","type":"webView","attributes":[{"type":"label","name":"webViewSrc","value":"https://docs.triliumnotes.org/script-api/frontend/interfaces/FNote.html"},{"name":"iconClass","value":"bx bx-file","type":"label"}],"enforceAttributes":true}]},{"id":"_help_MEtfsqa5VwNi","title":"Backend API","type":"webView","attributes":[{"type":"label","name":"webViewSrc","value":"https://docs.triliumnotes.org/script-api/backend"},{"name":"iconClass","value":"bx bx-file","type":"label"}],"enforceAttributes":true},{"id":"_help_ApVHZ8JY5ofC","title":"Day.js","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Scripting/Script API/Day.js"},{"name":"iconClass","value":"bx bx-calendar","type":"label"}]}]},{"id":"_help_vElnKeDNPSVl","title":"Logging","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Scripting/Logging"},{"name":"iconClass","value":"bx bx-terminal","type":"label"}]}]},{"id":"_help_Fm0j45KqyHpU","title":"Miscellaneous","type":"book","attributes":[{"name":"iconClass","value":"bx bx-info-circle","type":"label"}],"children":[{"id":"_help_WFbFXrgnDyyU","title":"Privacy Policy","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Miscellaneous/Privacy Policy"},{"name":"iconClass","value":"bx bx-file","type":"label"}]},{"id":"_help_NcsmUYZRWEW4","title":"Patterns of personal knowledge","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Miscellaneous/Patterns of personal knowledge"},{"name":"iconClass","value":"bx bx-file","type":"label"}]}]}] \ No newline at end of file +[{"id":"_help_BOCnjTMBCoxW","title":"Feature Highlights","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Feature Highlights"},{"name":"iconClass","value":"bx bx-star","type":"label"}]},{"id":"_help_Otzi9La2YAUX","title":"Installation & Setup","type":"book","attributes":[{"name":"iconClass","value":"bx bx-cog","type":"label"}],"children":[{"id":"_help_poXkQfguuA0U","title":"Desktop Installation","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Desktop Installation"},{"name":"iconClass","value":"bx bx-desktop","type":"label"}],"children":[{"id":"_help_nRqcgfTb97uV","title":"Using the desktop application as a server","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Desktop Installation/Using the desktop application "},{"name":"iconClass","value":"bx bx-file","type":"label"}]},{"id":"_help_Rp0q8bSP6Ayl","title":"System Requirements","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Desktop Installation/System Requirements"},{"name":"iconClass","value":"bx bx-chip","type":"label"}]},{"id":"_help_Un4wj2Mak2Ky","title":"Nix flake","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Desktop Installation/Nix flake"},{"name":"iconClass","value":"bx bxl-tux","type":"label"}]}]},{"id":"_help_WOcw2SLH6tbX","title":"Server Installation","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Server Installation"},{"name":"iconClass","value":"bx bx-server","type":"label"}],"children":[{"id":"_help_Dgg7bR3b6K9j","title":"1. Installing the server","type":"book","attributes":[{"name":"iconClass","value":"bx bx-folder","type":"label"}],"children":[{"id":"_help_3tW6mORuTHnB","title":"Packaged version for Linux","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Server Installation/1. Installing the server/Packaged version for Linux"},{"name":"iconClass","value":"bx bxl-tux","type":"label"}]},{"id":"_help_rWX5eY045zbE","title":"Using Docker","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Server Installation/1. Installing the server/Using Docker"},{"name":"iconClass","value":"bx bxl-docker","type":"label"}]},{"id":"_help_moVgBcoxE3EK","title":"On NixOS","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Server Installation/1. Installing the server/On NixOS"},{"name":"iconClass","value":"bx bxl-tux","type":"label"}]},{"id":"_help_J1Bb6lVlwU5T","title":"Manually","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Server Installation/1. Installing the server/Manually"},{"name":"iconClass","value":"bx bx-code-alt","type":"label"}]},{"id":"_help_DCmT6e7clMoP","title":"Using Kubernetes","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Server Installation/1. Installing the server/Using Kubernetes"},{"name":"iconClass","value":"bx bxl-kubernetes","type":"label"}]},{"id":"_help_klCWNks3ReaQ","title":"Multiple server instances","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Server Installation/1. Installing the server/Multiple server instances"},{"name":"iconClass","value":"bx bxs-user-account","type":"label"}]}]},{"id":"_help_vcjrb3VVYPZI","title":"2. Reverse proxy","type":"book","attributes":[{"name":"iconClass","value":"bx bx-folder","type":"label"}],"children":[{"id":"_help_ud6MShXL4WpO","title":"Nginx","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Server Installation/2. Reverse proxy/Nginx"},{"name":"iconClass","value":"bx bx-file","type":"label"}]},{"id":"_help_fDLvzOx29Pfg","title":"Apache using Docker","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Server Installation/2. Reverse proxy/Apache using Docker"},{"name":"iconClass","value":"bx bx-file","type":"label"}]},{"id":"_help_LLzSMXACKhUs","title":"Trusted proxy","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Server Installation/2. Reverse proxy/Trusted proxy"},{"name":"iconClass","value":"bx bx-file","type":"label"}]},{"id":"_help_5ERVJb9s4FRD","title":"Traefik","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Server Installation/2. Reverse proxy/Traefik"},{"name":"iconClass","value":"bx bx-file","type":"label"}]}]},{"id":"_help_l2VkvOwUNfZj","title":"HTTPS (TLS)","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Server Installation/HTTPS (TLS)"},{"name":"iconClass","value":"bx bx-lock-alt","type":"label"}]},{"id":"_help_0hzsNCP31IAB","title":"Authentication","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Server Installation/Authentication"},{"name":"iconClass","value":"bx bx-user","type":"label"}]},{"id":"_help_7DAiwaf8Z7Rz","title":"Multi-Factor Authentication","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Server Installation/Multi-Factor Authentication"},{"name":"iconClass","value":"bx bx-stopwatch","type":"label"}]},{"id":"_help_Un4wj2Mak2Ky","title":"Nix flake","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Server Installation/Nix flake.clone"},{"name":"iconClass","value":"bx bx-file","type":"label"}]},{"id":"_help_yeEaYqosGLSh","title":"Third-party cloud hosting","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Server Installation/Third-party cloud hosting"},{"name":"iconClass","value":"bx bx-cloud","type":"label"}]},{"id":"_help_iGTnKjubbXkA","title":"System Requirements","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Server Installation/System Requirements"},{"name":"iconClass","value":"bx bx-chip","type":"label"}]}]},{"id":"_help_cbkrhQjrkKrh","title":"Synchronization","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Synchronization"},{"name":"iconClass","value":"bx bx-sync","type":"label"}]},{"id":"_help_RDslemsQ6gCp","title":"Mobile Frontend","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Mobile Frontend"},{"name":"iconClass","value":"bx bx-mobile-alt","type":"label"}]},{"id":"_help_MtPxeAWVAzMg","title":"Web Clipper","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Web Clipper"},{"name":"iconClass","value":"bx bx-paperclip","type":"label"}]},{"id":"_help_n1lujUxCwipy","title":"Upgrading TriliumNext","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Upgrading TriliumNext"},{"name":"iconClass","value":"bx bx-up-arrow-alt","type":"label"}]},{"id":"_help_ODY7qQn5m2FT","title":"Backup","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Backup"},{"name":"iconClass","value":"bx bx-hdd","type":"label"}]},{"id":"_help_tAassRL4RSQL","title":"Data directory","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Data directory"},{"name":"iconClass","value":"bx bx-folder-open","type":"label"}]}]},{"id":"_help_gh7bpGYxajRS","title":"Basic Concepts and Features","type":"book","attributes":[{"name":"iconClass","value":"bx bx-help-circle","type":"label"}],"children":[{"id":"_help_Vc8PjrjAGuOp","title":"UI Elements","type":"book","attributes":[{"name":"iconClass","value":"bx bx-window-alt","type":"label"}],"children":[{"id":"_help_x0JgW8UqGXvq","title":"Vertical and horizontal layout","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/Vertical and horizontal layout"},{"name":"iconClass","value":"bx bxs-layout","type":"label"}]},{"id":"_help_x3i7MxGccDuM","title":"Global menu","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/Global menu"},{"name":"iconClass","value":"bx bx-menu","type":"label"}]},{"id":"_help_oPVyFC7WL2Lp","title":"Note Tree","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/Note Tree"},{"name":"iconClass","value":"bx bxs-tree-alt","type":"label"}],"children":[{"id":"_help_YtSN43OrfzaA","title":"Note tree contextual menu","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/Note Tree/Note tree contextual menu"},{"name":"iconClass","value":"bx bx-menu","type":"label"}]},{"id":"_help_yTjUdsOi4CIE","title":"Multiple selection","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/Note Tree/Multiple selection"},{"name":"iconClass","value":"bx bx-list-plus","type":"label"}]},{"id":"_help_DvdZhoQZY9Yd","title":"Keyboard shortcuts","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/Note Tree/Keyboard shortcuts"},{"name":"iconClass","value":"bx bxs-keyboard","type":"label"}]},{"id":"_help_wyaGBBQrl4i3","title":"Hiding the subtree","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/Note Tree/Hiding the subtree"},{"name":"iconClass","value":"bx bx-hide","type":"label"}]}]},{"id":"_help_BlN9DFI679QC","title":"Ribbon","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/Ribbon"},{"name":"iconClass","value":"bx bx-dots-horizontal","type":"label"}]},{"id":"_help_3seOhtN8uLIY","title":"Tabs","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/Tabs"},{"name":"iconClass","value":"bx bx-dock-top","type":"label"}]},{"id":"_help_xYmIYSP6wE3F","title":"Launch Bar","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/Launch Bar"},{"name":"iconClass","value":"bx bx-sidebar","type":"label"}]},{"id":"_help_8YBEPzcpUgxw","title":"Note buttons","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/Note buttons"},{"name":"iconClass","value":"bx bx-dots-vertical-rounded","type":"label"}]},{"id":"_help_4TIF1oA4VQRO","title":"Options","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/Options"},{"name":"iconClass","value":"bx bx-cog","type":"label"}]},{"id":"_help_luNhaphA37EO","title":"Split View","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/Split View"},{"name":"iconClass","value":"bx bx-dock-right","type":"label"}]},{"id":"_help_XpOYSgsLkTJy","title":"Floating buttons","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/Floating buttons"},{"name":"iconClass","value":"bx bx-rectangle","type":"label"}]},{"id":"_help_RnaPdbciOfeq","title":"Right Sidebar","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/Right Sidebar"},{"name":"iconClass","value":"bx bxs-dock-right","type":"label"}]},{"id":"_help_r5JGHN99bVKn","title":"Recent Changes","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/Recent Changes"},{"name":"iconClass","value":"bx bx-history","type":"label"}]},{"id":"_help_ny318J39E5Z0","title":"Zoom","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/Zoom"},{"name":"iconClass","value":"bx bx-zoom-in","type":"label"}]},{"id":"_help_lgKX7r3aL30x","title":"Note Tooltip","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/Note Tooltip"},{"name":"iconClass","value":"bx bx-message-detail","type":"label"}]},{"id":"_help_IjZS7iK5EXtb","title":"New Layout","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/New Layout"},{"name":"iconClass","value":"bx bx-layout","type":"label"}],"children":[{"id":"_help_I6p2a06hdnL6","title":"Breadcrumb","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/New Layout/Breadcrumb"},{"name":"iconClass","value":"bx bx-chevron-right","type":"label"}]},{"id":"_help_AlJ73vBCjWDw","title":"Status bar","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/New Layout/Status bar"},{"name":"iconClass","value":"bx bx-dock-bottom","type":"label"}]}]}]},{"id":"_help_BFs8mudNFgCS","title":"Notes","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Notes"},{"name":"iconClass","value":"bx bx-notepad","type":"label"}],"children":[{"id":"_help_p9kXRFAkwN4o","title":"Note Icons","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Notes/Note Icons"},{"name":"iconClass","value":"bx bxs-grid","type":"label"}]},{"id":"_help_0vhv7lsOLy82","title":"Attachments","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Notes/Attachments"},{"name":"iconClass","value":"bx bx-paperclip","type":"label"}]},{"id":"_help_IakOLONlIfGI","title":"Cloning Notes","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Notes/Cloning Notes"},{"name":"iconClass","value":"bx bx-duplicate","type":"label"}],"children":[{"id":"_help_TBwsyfadTA18","title":"Branch prefix","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Notes/Cloning Notes/Branch prefix"},{"name":"iconClass","value":"bx bx-rename","type":"label"}]}]},{"id":"_help_bwg0e8ewQMak","title":"Protected Notes","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Notes/Protected Notes"},{"name":"iconClass","value":"bx bx-lock-alt","type":"label"}]},{"id":"_help_MKmLg5x6xkor","title":"Archived Notes","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Notes/Archived Notes"},{"name":"iconClass","value":"bx bx-box","type":"label"}]},{"id":"_help_vZWERwf8U3nx","title":"Note Revisions","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Notes/Note Revisions"},{"name":"iconClass","value":"bx bx-history","type":"label"}]},{"id":"_help_aGlEvb9hyDhS","title":"Sorting Notes","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Notes/Sorting Notes"},{"name":"iconClass","value":"bx bx-sort-up","type":"label"}]},{"id":"_help_NRnIZmSMc5sj","title":"Printing & Exporting as PDF","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Notes/Printing & Exporting as PDF"},{"name":"iconClass","value":"bx bx-printer","type":"label"}]},{"id":"_help_CoFPLs3dRlXc","title":"Read-Only Notes","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Notes/Read-Only Notes"},{"name":"iconClass","value":"bx bx-edit-alt","type":"label"}]},{"id":"_help_0ESUbbAxVnoK","title":"Note List","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Notes/Note List"},{"name":"iconClass","value":"bx bxs-grid","type":"label"}]}]},{"id":"_help_wArbEsdSae6g","title":"Navigation","type":"book","attributes":[{"name":"iconClass","value":"bx bx-navigation","type":"label"}],"children":[{"id":"_help_kBrnXNG3Hplm","title":"Tree Concepts","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Navigation/Tree Concepts"},{"name":"iconClass","value":"bx bx-pyramid","type":"label"}]},{"id":"_help_MMiBEQljMQh2","title":"Note Navigation","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Navigation/Note Navigation"},{"name":"iconClass","value":"bx bxs-navigation","type":"label"}]},{"id":"_help_Ms1nauBra7gq","title":"Quick search","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Navigation/Quick search"},{"name":"iconClass","value":"bx bx-search-alt-2","type":"label"}]},{"id":"_help_F1r9QtzQLZqm","title":"Jump to...","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Navigation/Jump to"},{"name":"iconClass","value":"bx bx-send","type":"label"}]},{"id":"_help_eIg8jdvaoNNd","title":"Search","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Navigation/Search"},{"name":"iconClass","value":"bx bx-search-alt-2","type":"label"}]},{"id":"_help_u3YFHC9tQlpm","title":"Bookmarks","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Navigation/Bookmarks"},{"name":"iconClass","value":"bx bx-bookmarks","type":"label"}]},{"id":"_help_OR8WJ7Iz9K4U","title":"Note Hoisting","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Navigation/Note Hoisting"},{"name":"iconClass","value":"bx bxs-chevrons-up","type":"label"}]},{"id":"_help_ZjLYv08Rp3qC","title":"Quick edit","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Navigation/Quick edit"},{"name":"iconClass","value":"bx bx-edit","type":"label"}]},{"id":"_help_9sRHySam5fXb","title":"Workspaces","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Navigation/Workspaces"},{"name":"iconClass","value":"bx bx-door-open","type":"label"}]},{"id":"_help_xWtq5NUHOwql","title":"Similar Notes","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Navigation/Similar Notes"},{"name":"iconClass","value":"bx bx-bar-chart","type":"label"}]},{"id":"_help_McngOG2jbUWX","title":"Search in note","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Navigation/Search in note"},{"name":"iconClass","value":"bx bx-search-alt-2","type":"label"}]}]},{"id":"_help_A9Oc6YKKc65v","title":"Keyboard Shortcuts","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Keyboard Shortcuts"},{"name":"iconClass","value":"bx bxs-keyboard","type":"label"}]},{"id":"_help_Wy267RK4M69c","title":"Themes","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Themes"},{"name":"iconClass","value":"bx bx-palette","type":"label"}],"children":[{"id":"_help_VbjZvtUek0Ln","title":"Theme Gallery","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Themes/Theme Gallery"},{"name":"iconClass","value":"bx bx-book-reader","type":"label"}]},{"id":"_help_gOKqSJgXLcIj","title":"Icon Packs","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Themes/Icon Packs"},{"name":"iconClass","value":"bx bx-package","type":"label"}]}]},{"id":"_help_mHbBMPDPkVV5","title":"Import & Export","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Import & Export"},{"name":"iconClass","value":"bx bx-import","type":"label"}],"children":[{"id":"_help_Oau6X9rCuegd","title":"Markdown","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Import & Export/Markdown"},{"name":"iconClass","value":"bx bxl-markdown","type":"label"}],"children":[{"id":"_help_rJ9grSgoExl9","title":"Supported syntax","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Import & Export/Markdown/Supported syntax"},{"name":"iconClass","value":"bx bx-code-alt","type":"label"}]}]},{"id":"_help_syuSEKf2rUGr","title":"Evernote","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Import & Export/Evernote"},{"name":"iconClass","value":"bx bx-window-open","type":"label"}],"children":[{"id":"_help_dj3j8dG4th4l","title":"Process internal links by title","type":"doc","attributes":[{"name":"iconClass","value":"bx bx-file","type":"label"}]}]},{"id":"_help_GnhlmrATVqcH","title":"OneNote","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Import & Export/OneNote"},{"name":"iconClass","value":"bx bx-window-open","type":"label"}]}]},{"id":"_help_rC3pL2aptaRE","title":"Zen mode","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Zen mode"},{"name":"iconClass","value":"bx bxs-yin-yang","type":"label"}]}]},{"id":"_help_s3YCWHBfmYuM","title":"Quick Start","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Quick Start"},{"name":"iconClass","value":"bx bx-run","type":"label"}]},{"id":"_help_i6dbnitykE5D","title":"FAQ","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/FAQ"},{"name":"iconClass","value":"bx bx-question-mark","type":"label"}]},{"id":"_help_KSZ04uQ2D1St","title":"Note Types","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types"},{"name":"iconClass","value":"bx bx-edit","type":"label"}],"children":[{"id":"_help_iPIMuisry3hd","title":"Text","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text"},{"name":"iconClass","value":"bx bx-note","type":"label"}],"children":[{"id":"_help_NwBbFdNZ9h7O","title":"Block quotes & admonitions","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Block quotes & admonitions"},{"name":"iconClass","value":"bx bx-info-circle","type":"label"}]},{"id":"_help_oSuaNgyyKnhu","title":"Bookmarks","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Bookmarks"},{"name":"iconClass","value":"bx bx-bookmark","type":"label"}]},{"id":"_help_veGu4faJErEM","title":"Content language & Right-to-left support","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Content language & Right-to-le"},{"name":"iconClass","value":"bx bx-align-right","type":"label"}]},{"id":"_help_2x0ZAX9ePtzV","title":"Cut to subnote","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Cut to subnote"},{"name":"iconClass","value":"bx bx-cut","type":"label"}]},{"id":"_help_UYuUB1ZekNQU","title":"Developer-specific formatting","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Developer-specific formatting"},{"name":"iconClass","value":"bx bx-code-alt","type":"label"}],"children":[{"id":"_help_QxEyIjRBizuC","title":"Code blocks","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Developer-specific formatting/Code blocks"},{"name":"iconClass","value":"bx bx-code","type":"label"}]}]},{"id":"_help_AgjCISero73a","title":"Footnotes","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Footnotes"},{"name":"iconClass","value":"bx bx-bracket","type":"label"}]},{"id":"_help_nRhnJkTT8cPs","title":"Formatting toolbar","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Formatting toolbar"},{"name":"iconClass","value":"bx bx-text","type":"label"}]},{"id":"_help_Gr6xFaF6ioJ5","title":"General formatting","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/General formatting"},{"name":"iconClass","value":"bx bx-bold","type":"label"}]},{"id":"_help_AxshuNRegLAv","title":"Highlights list","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Highlights list"},{"name":"iconClass","value":"bx bx-highlight","type":"label"}]},{"id":"_help_mT0HEkOsz6i1","title":"Images","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Images"},{"name":"iconClass","value":"bx bx-image-alt","type":"label"}],"children":[{"id":"_help_0Ofbk1aSuVRu","title":"Image references","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Images/Image references"},{"name":"iconClass","value":"bx bxs-file-image","type":"label"}]}]},{"id":"_help_nBAXQFj20hS1","title":"Include Note","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Include Note"},{"name":"iconClass","value":"bx bx-file","type":"label"}]},{"id":"_help_CohkqWQC1iBv","title":"Insert buttons","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Insert buttons"},{"name":"iconClass","value":"bx bx-plus","type":"label"}]},{"id":"_help_oiVPnW8QfnvS","title":"Keyboard shortcuts","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Keyboard shortcuts"},{"name":"iconClass","value":"bx bxs-keyboard","type":"label"}]},{"id":"_help_QEAPj01N5f7w","title":"Links","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Links"},{"name":"iconClass","value":"bx bx-link-alt","type":"label"}],"children":[{"id":"_help_3IDVtesTQ8ds","title":"External links","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Links/External links"},{"name":"iconClass","value":"bx bx-link-external","type":"label"}]},{"id":"_help_hrZ1D00cLbal","title":"Internal (reference) links","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Links/Internal (reference) links"},{"name":"iconClass","value":"bx bx-link","type":"label"}]}]},{"id":"_help_S6Xx8QIWTV66","title":"Lists","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Lists"},{"name":"iconClass","value":"bx bx-list-ul","type":"label"}]},{"id":"_help_QrtTYPmdd1qq","title":"Markdown-like formatting","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Markdown-like formatting"},{"name":"iconClass","value":"bx bxl-markdown","type":"label"}]},{"id":"_help_YfYAtQBcfo5V","title":"Math Equations","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Math Equations"},{"name":"iconClass","value":"bx bx-math","type":"label"}]},{"id":"_help_dEHYtoWWi8ct","title":"Other features","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Other features"},{"name":"iconClass","value":"bx bxs-grid","type":"label"}]},{"id":"_help_gLt3vA97tMcp","title":"Premium features","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Premium features"},{"name":"iconClass","value":"bx bx-star","type":"label"}],"children":[{"id":"_help_ZlN4nump6EbW","title":"Slash Commands","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Premium features/Slash Commands"},{"name":"iconClass","value":"bx bx-menu","type":"label"}]},{"id":"_help_pwc194wlRzcH","title":"Text Snippets","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Premium features/Text Snippets"},{"name":"iconClass","value":"bx bx-align-left","type":"label"}]},{"id":"_help_5wZallV2Qo1t","title":"Format Painter","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Premium features/Format Painter"},{"name":"iconClass","value":"bx bxs-paint-roll","type":"label"}]}]},{"id":"_help_BFvAtE74rbP6","title":"Table of contents","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Table of contents"},{"name":"iconClass","value":"bx bx-heading","type":"label"}]},{"id":"_help_NdowYOC1GFKS","title":"Tables","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Tables"},{"name":"iconClass","value":"bx bx-table","type":"label"}]}]},{"id":"_help_6f9hih2hXXZk","title":"Code","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Code"},{"name":"iconClass","value":"bx bx-code","type":"label"}]},{"id":"_help_m523cpzocqaD","title":"Saved Search","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Saved Search"},{"name":"iconClass","value":"bx bx-file-find","type":"label"}]},{"id":"_help_iRwzGnHPzonm","title":"Relation Map","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Relation Map"},{"name":"iconClass","value":"bx bxs-network-chart","type":"label"}]},{"id":"_help_bdUJEHsAPYQR","title":"Note Map","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Note Map"},{"name":"iconClass","value":"bx bxs-network-chart","type":"label"}]},{"id":"_help_HcABDtFCkbFN","title":"Render Note","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Render Note"},{"name":"iconClass","value":"bx bx-extension","type":"label"}]},{"id":"_help_s1aBHPd79XYj","title":"Mermaid Diagrams","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Mermaid Diagrams"},{"name":"iconClass","value":"bx bx-selection","type":"label"}],"children":[{"id":"_help_RH6yLjjWJHof","title":"ELK layout","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Mermaid Diagrams/ELK layout"},{"name":"iconClass","value":"bx bxs-network-chart","type":"label"}]},{"id":"_help_WWgeUaBb7UfC","title":"Syntax reference","type":"webView","attributes":[{"type":"label","name":"webViewSrc","value":"https://mermaid.js.org/intro/syntax-reference.html"},{"name":"iconClass","value":"bx bx-file","type":"label"}],"enforceAttributes":true}]},{"id":"_help_grjYqerjn243","title":"Canvas","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Canvas"},{"name":"iconClass","value":"bx bx-pen","type":"label"}]},{"id":"_help_1vHRoWCEjj0L","title":"Web View","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Web View"},{"name":"iconClass","value":"bx bx-globe-alt","type":"label"}]},{"id":"_help_gBbsAeiuUxI5","title":"Mind Map","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Mind Map"},{"name":"iconClass","value":"bx bx-sitemap","type":"label"}]},{"id":"_help_W8vYD3Q1zjCR","title":"File","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/File"},{"name":"iconClass","value":"bx bx-file-blank","type":"label"}],"children":[{"id":"_help_XJGJrpu7F9sh","title":"PDFs","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/File/PDFs"},{"name":"iconClass","value":"bx bxs-file-pdf","type":"label"}]}]}]},{"id":"_help_GTwFsgaA0lCt","title":"Collections","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Collections"},{"name":"iconClass","value":"bx bx-book","type":"label"}],"children":[{"id":"_help_xWbu3jpNWapp","title":"Calendar","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Collections/Calendar"},{"name":"iconClass","value":"bx bx-calendar","type":"label"}]},{"id":"_help_2FvYrpmOXm29","title":"Table","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Collections/Table"},{"name":"iconClass","value":"bx bx-table","type":"label"}]},{"id":"_help_CtBQqbwXDx1w","title":"Kanban Board","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Collections/Kanban Board"},{"name":"iconClass","value":"bx bx-columns","type":"label"}]},{"id":"_help_81SGnPGMk7Xc","title":"Geo Map","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Collections/Geo Map"},{"name":"iconClass","value":"bx bx-map-alt","type":"label"}]},{"id":"_help_zP3PMqaG71Ct","title":"Presentation","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Collections/Presentation"},{"name":"iconClass","value":"bx bx-slideshow","type":"label"}]},{"id":"_help_8QqnMzx393bx","title":"Grid View","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Collections/Grid View"},{"name":"iconClass","value":"bx bxs-grid","type":"label"}]},{"id":"_help_mULW0Q3VojwY","title":"List View","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Collections/List View"},{"name":"iconClass","value":"bx bx-list-ul","type":"label"}]}]},{"id":"_help_BgmBlOIl72jZ","title":"Troubleshooting","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Troubleshooting"},{"name":"iconClass","value":"bx bx-bug","type":"label"}],"children":[{"id":"_help_wy8So3yZZlH9","title":"Reporting issues","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Troubleshooting/Reporting issues"},{"name":"iconClass","value":"bx bx-bug-alt","type":"label"}]},{"id":"_help_x59R8J8KV5Bp","title":"Anonymized Database","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Troubleshooting/Anonymized Database"},{"name":"iconClass","value":"bx bx-low-vision","type":"label"}]},{"id":"_help_qzNzp9LYQyPT","title":"Error logs","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Troubleshooting/Error logs"},{"name":"iconClass","value":"bx bx-comment-error","type":"label"}],"children":[{"id":"_help_bnyigUA2UK7s","title":"Backend (server) logs","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Troubleshooting/Error logs/Backend (server) logs"},{"name":"iconClass","value":"bx bx-server","type":"label"}]},{"id":"_help_9yEHzMyFirZR","title":"Frontend logs","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Troubleshooting/Error logs/Frontend logs"},{"name":"iconClass","value":"bx bx-window-alt","type":"label"}]}]},{"id":"_help_vdlYGAcpXAgc","title":"Synchronization fails with 504 Gateway Timeout","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Troubleshooting/Synchronization fails with 504"},{"name":"iconClass","value":"bx bx-error","type":"label"}]},{"id":"_help_s8alTXmpFR61","title":"Refreshing the application","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Troubleshooting/Refreshing the application"},{"name":"iconClass","value":"bx bx-refresh","type":"label"}]}]},{"id":"_help_pKK96zzmvBGf","title":"Theme development","type":"book","attributes":[{"name":"iconClass","value":"bx bx-palette","type":"label"}],"children":[{"id":"_help_7NfNr5pZpVKV","title":"Creating a custom theme","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Theme development/Creating a custom theme"},{"name":"iconClass","value":"bx bxs-color","type":"label"}]},{"id":"_help_WFGzWeUK6arS","title":"Customize the Next theme","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Theme development/Customize the Next theme"},{"name":"iconClass","value":"bx bx-news","type":"label"}]},{"id":"_help_WN5z4M8ASACJ","title":"Reference","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Theme development/Reference"},{"name":"iconClass","value":"bx bx-book-open","type":"label"}]},{"id":"_help_AlhDUqhENtH7","title":"Custom app-wide CSS","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Theme development/Custom app-wide CSS"},{"name":"iconClass","value":"bx bxs-file-css","type":"label"}]},{"id":"_help_g1mlRoU8CsqC","title":"Creating an icon pack","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Theme development/Creating an icon pack"},{"name":"iconClass","value":"bx bx-package","type":"label"}]}]},{"id":"_help_tC7s2alapj8V","title":"Advanced Usage","type":"book","attributes":[{"name":"iconClass","value":"bx bx-rocket","type":"label"}],"children":[{"id":"_help_zEY4DaJG4YT5","title":"Attributes","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Attributes"},{"name":"iconClass","value":"bx bx-list-check","type":"label"}],"children":[{"id":"_help_HI6GBBIduIgv","title":"Labels","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Attributes/Labels"},{"name":"iconClass","value":"bx bx-hash","type":"label"}]},{"id":"_help_Cq5X6iKQop6R","title":"Relations","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Attributes/Relations"},{"name":"iconClass","value":"bx bx-transfer","type":"label"}]},{"id":"_help_bwZpz2ajCEwO","title":"Attribute Inheritance","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Attributes/Attribute Inheritance"},{"name":"iconClass","value":"bx bx-list-plus","type":"label"}]},{"id":"_help_OFXdgB2nNk1F","title":"Promoted Attributes","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Attributes/Promoted Attributes"},{"name":"iconClass","value":"bx bx-table","type":"label"}]}]},{"id":"_help_KC1HB96bqqHX","title":"Templates","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Templates"},{"name":"iconClass","value":"bx bx-copy","type":"label"}]},{"id":"_help_BCkXAVs63Ttv","title":"Note Map (Link map, Tree map)","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Note Map (Link map, Tree map)"},{"name":"iconClass","value":"bx bxs-network-chart","type":"label"}]},{"id":"_help_R9pX4DGra2Vt","title":"Sharing","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Sharing"},{"name":"iconClass","value":"bx bx-share-alt","type":"label"}],"children":[{"id":"_help_Qjt68inQ2bRj","title":"Serving directly the content of a note","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Sharing/Serving directly the content o"},{"name":"iconClass","value":"bx bx-code","type":"label"}]},{"id":"_help_ycBFjKrrwE9p","title":"Exporting static HTML for web publishing","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Sharing/Exporting static HTML for web "},{"name":"iconClass","value":"bx bxs-file-html","type":"label"}]},{"id":"_help_sLIJ6f1dkJYW","title":"Reverse proxy configuration","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Sharing/Reverse proxy configuration"},{"name":"iconClass","value":"bx bx-world","type":"label"}]}]},{"id":"_help_5668rwcirq1t","title":"Advanced Showcases","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Advanced Showcases"},{"name":"iconClass","value":"bx bxs-component","type":"label"}],"children":[{"id":"_help_l0tKav7yLHGF","title":"Day Notes","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Advanced Showcases/Day Notes"},{"name":"iconClass","value":"bx bx-calendar","type":"label"}]},{"id":"_help_R7abl2fc6Mxi","title":"Weight Tracker","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Advanced Showcases/Weight Tracker"},{"name":"iconClass","value":"bx bx-line-chart","type":"label"}]},{"id":"_help_xYjQUYhpbUEW","title":"Task Manager","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Advanced Showcases/Task Manager"},{"name":"iconClass","value":"bx bx-calendar-check","type":"label"}]}]},{"id":"_help_J5Ex1ZrMbyJ6","title":"Custom Request Handler","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Custom Request Handler"},{"name":"iconClass","value":"bx bx-globe","type":"label"}]},{"id":"_help_d3fAXQ2diepH","title":"Custom Resource Providers","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Custom Resource Providers"},{"name":"iconClass","value":"bx bxs-file-plus","type":"label"}]},{"id":"_help_pgxEVkzLl1OP","title":"ETAPI (REST API)","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/ETAPI (REST API)"},{"name":"iconClass","value":"bx bx-extension","type":"label"}],"children":[{"id":"_help_9qPsTWBorUhQ","title":"API Reference","type":"webView","attributes":[{"type":"label","name":"webViewSrc","value":"https://docs.triliumnotes.org/rest-api/etapi/"},{"name":"iconClass","value":"bx bx-file","type":"label"}],"enforceAttributes":true}]},{"id":"_help_47ZrP6FNuoG8","title":"Default Note Title","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Default Note Title"},{"name":"iconClass","value":"bx bx-edit-alt","type":"label"}]},{"id":"_help_wX4HbRucYSDD","title":"Database","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Database"},{"name":"iconClass","value":"bx bx-data","type":"label"}],"children":[{"id":"_help_oyIAJ9PvvwHX","title":"Manually altering the database","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Database/Manually altering the database"},{"name":"iconClass","value":"bx bxs-edit","type":"label"}],"children":[{"id":"_help_YKWqdJhzi2VY","title":"SQL Console","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Database/Manually altering the database/SQL Console"},{"name":"iconClass","value":"bx bx-data","type":"label"}]}]},{"id":"_help_6tZeKvSHEUiB","title":"Demo Notes","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Database/Demo Notes"},{"name":"iconClass","value":"bx bx-package","type":"label"}]}]},{"id":"_help_Gzjqa934BdH4","title":"Configuration (config.ini or environment variables)","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Configuration (config.ini or e"},{"name":"iconClass","value":"bx bx-cog","type":"label"}],"children":[{"id":"_help_c5xB8m4g2IY6","title":"Trilium instance","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Configuration (config.ini or environment variables)/Trilium instance"},{"name":"iconClass","value":"bx bx-windows","type":"label"}]},{"id":"_help_LWtBjFej3wX3","title":"Cross-Origin Resource Sharing (CORS)","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Configuration (config.ini or environment variables)/Cross-Origin Resource Sharing "},{"name":"iconClass","value":"bx bx-lock","type":"label"}]}]},{"id":"_help_ivYnonVFBxbQ","title":"Bulk Actions","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Bulk Actions"},{"name":"iconClass","value":"bx bx-list-plus","type":"label"}]},{"id":"_help_4FahAwuGTAwC","title":"Note source","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Note source"},{"name":"iconClass","value":"bx bx-code","type":"label"}]},{"id":"_help_1YeN2MzFUluU","title":"Technologies used","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Technologies used"},{"name":"iconClass","value":"bx bx-pyramid","type":"label"}],"children":[{"id":"_help_MI26XDLSAlCD","title":"CKEditor","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Technologies used/CKEditor"},{"name":"iconClass","value":"bx bx-file","type":"label"}]},{"id":"_help_N4IDkixaDG9C","title":"MindElixir","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Technologies used/MindElixir"},{"name":"iconClass","value":"bx bx-sitemap","type":"label"}]},{"id":"_help_H0mM1lTxF9JI","title":"Excalidraw","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Technologies used/Excalidraw"},{"name":"iconClass","value":"bx bx-pen","type":"label"}]},{"id":"_help_MQHyy2dIFgxS","title":"Leaflet","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Technologies used/Leaflet"},{"name":"iconClass","value":"bx bx-map-alt","type":"label"}]}]},{"id":"_help_m1lbrzyKDaRB","title":"Note ID","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Note ID"},{"name":"iconClass","value":"bx bx-hash","type":"label"}]},{"id":"_help_0vTSyvhPTAOz","title":"Internal API","type":"book","attributes":[{"name":"iconClass","value":"bx bxs-component","type":"label"}],"children":[{"id":"_help_z8O2VG4ZZJD7","title":"API Reference","type":"webView","attributes":[{"type":"label","name":"webViewSrc","value":"https://docs.triliumnotes.org/rest-api/internal/"},{"name":"iconClass","value":"bx bx-file","type":"label"}],"enforceAttributes":true}]},{"id":"_help_2mUhVmZK8RF3","title":"Hidden Notes","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Hidden Notes"},{"name":"iconClass","value":"bx bx-hide","type":"label"}]},{"id":"_help_uYF7pmepw27K","title":"Metrics","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Metrics"},{"name":"iconClass","value":"bx bxs-data","type":"label"}],"children":[{"id":"_help_bOP3TB56fL1V","title":"grafana-dashboard.json","type":"doc","attributes":[{"name":"iconClass","value":"bx bx-file","type":"label"}]}]},{"id":"_help_64ZTlUPgEPtW","title":"Safe mode","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Safe mode"},{"name":"iconClass","value":"bx bxs-virus-block","type":"label"}]},{"id":"_help_HAIOFBoYIIdO","title":"Nightly release","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Nightly release"},{"name":"iconClass","value":"bx bx-moon","type":"label"}]},{"id":"_help_ZmT9ln8XJX2o","title":"Read-only database","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Read-only database"},{"name":"iconClass","value":"bx bx-book-reader","type":"label"}]}]},{"id":"_help_GBBMSlVSOIGP","title":"AI","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/AI"},{"name":"iconClass","value":"bx bx-bot","type":"label"}],"children":[{"id":"_help_WkM7gsEUyCXs","title":"Providers","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/AI/Providers"},{"name":"iconClass","value":"bx bx-select-multiple","type":"label"}],"children":[{"id":"_help_7EdTxPADv95W","title":"Ollama","type":"book","attributes":[{"name":"iconClass","value":"bx bx-message-dots","type":"label"}],"children":[{"id":"_help_vvUCN7FDkq7G","title":"Installing Ollama","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/AI/Providers/Ollama/Installing Ollama"},{"name":"iconClass","value":"bx bx-file","type":"label"}]}]},{"id":"_help_ZavFigBX9AwP","title":"OpenAI","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/AI/Providers/OpenAI"},{"name":"iconClass","value":"bx bx-message-dots","type":"label"}]},{"id":"_help_e0lkirXEiSNc","title":"Anthropic","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/AI/Providers/Anthropic"},{"name":"iconClass","value":"bx bx-message-dots","type":"label"}]}]}]},{"id":"_help_CdNpE2pqjmI6","title":"Scripting","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Scripting"},{"name":"iconClass","value":"bx bxs-file-js","type":"label"}],"children":[{"id":"_help_yIhgI5H7A2Sm","title":"Frontend Basics","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Scripting/Frontend Basics"},{"name":"iconClass","value":"bx bx-window","type":"label"}],"children":[{"id":"_help_MgibgPcfeuGz","title":"Custom Widgets","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Scripting/Frontend Basics/Custom Widgets"},{"name":"iconClass","value":"bx bxs-widget","type":"label"}],"children":[{"id":"_help_SynTBQiBsdYJ","title":"Widget Basics","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Scripting/Frontend Basics/Custom Widgets/Widget Basics"},{"name":"iconClass","value":"bx bx-file","type":"label"}]},{"id":"_help_GhurYZjh8e1V","title":"Note context aware widget","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Scripting/Frontend Basics/Custom Widgets/Note context aware widget"},{"name":"iconClass","value":"bx bx-file","type":"label"}]},{"id":"_help_M8IppdwVHSjG","title":"Right pane widget","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Scripting/Frontend Basics/Custom Widgets/Right pane widget"},{"name":"iconClass","value":"bx bx-file","type":"label"}]},{"id":"_help_YNxAqkI5Kg1M","title":"Word count widget","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Scripting/Frontend Basics/Custom Widgets/Word count widget"},{"name":"iconClass","value":"bx bx-file","type":"label"}]},{"id":"_help_VqGQnnPGnqAU","title":"CSS","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Scripting/Frontend Basics/Custom Widgets/CSS"},{"name":"iconClass","value":"bx bx-file","type":"label"}]},{"id":"_help_gMkgcLJ6jBkg","title":"Troubleshooting","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Scripting/Frontend Basics/Custom Widgets/Troubleshooting"},{"name":"iconClass","value":"bx bx-file","type":"label"}]}]},{"id":"_help_es8OU2GuguFU","title":"Examples","type":"book","attributes":[{"name":"iconClass","value":"bx bx-code-alt","type":"label"}],"children":[{"id":"_help_TjLYAo3JMO8X","title":"\"New Task\" launcher button","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Scripting/Frontend Basics/Examples/New Task launcher button"},{"name":"iconClass","value":"bx bx-task","type":"label"}]},{"id":"_help_7kZPMD0uFwkH","title":"Downloading responses from Google Forms","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Scripting/Frontend Basics/Examples/Downloading responses from Goo"},{"name":"iconClass","value":"bx bx-file","type":"label"}]},{"id":"_help_DL92EjAaXT26","title":"Using promoted attributes to configure scripts","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Scripting/Frontend Basics/Examples/Using promoted attributes to c"},{"name":"iconClass","value":"bx bx-file","type":"label"}]}]},{"id":"_help_4Gn3psZKsfSm","title":"Launch Bar Widgets","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Scripting/Frontend Basics/Launch Bar Widgets"},{"name":"iconClass","value":"bx bx-dock-left","type":"label"}],"children":[{"id":"_help_IPArqVfDQ4We","title":"Note Title Widget","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Scripting/Frontend Basics/Launch Bar Widgets/Note Title Widget"},{"name":"iconClass","value":"bx bx-file","type":"label"}]},{"id":"_help_gcI7RPbaNSh3","title":"Analog Watch","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Scripting/Frontend Basics/Launch Bar Widgets/Analog Watch"},{"name":"iconClass","value":"bx bx-file","type":"label"}]}]},{"id":"_help_KLsqhjaqh1QW","title":"Preact","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Scripting/Frontend Basics/Preact"},{"name":"iconClass","value":"bx bxl-react","type":"label"}],"children":[{"id":"_help_Bqde6BvPo05g","title":"Component libraries","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Scripting/Frontend Basics/Preact/Component libraries"},{"name":"iconClass","value":"bx bxs-component","type":"label"}]},{"id":"_help_ykYtbM9k3a7B","title":"Hooks","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Scripting/Frontend Basics/Preact/Hooks"},{"name":"iconClass","value":"bx bx-question-mark","type":"label"}]},{"id":"_help_Sg9GrCtyftZf","title":"CSS","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Scripting/Frontend Basics/Preact/CSS"},{"name":"iconClass","value":"bx bxs-file-css","type":"label"}]},{"id":"_help_RSssb9S3xgSr","title":"Built-in components","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Scripting/Frontend Basics/Preact/Built-in components"},{"name":"iconClass","value":"bx bxs-component","type":"label"}],"children":[{"id":"_help_i9B4IW7b6V6z","title":"Widget showcase","type":"doc","attributes":[{"name":"iconClass","value":"bx bx-file","type":"label"}]}]}]}]},{"id":"_help_SPirpZypehBG","title":"Backend scripts","type":"book","attributes":[{"name":"iconClass","value":"bx bx-server","type":"label"}],"children":[{"id":"_help_fZ2IGYFXjkEy","title":"Server-side imports","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Scripting/Backend scripts/Server-side imports"},{"name":"iconClass","value":"bx bx-file","type":"label"}]},{"id":"_help_GPERMystNGTB","title":"Events","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Scripting/Backend scripts/Events"},{"name":"iconClass","value":"bx bx-rss","type":"label"}]}]},{"id":"_help_wqXwKJl6VpNk","title":"Common concepts","type":"book","attributes":[{"name":"iconClass","value":"bx bxl-nodejs","type":"label"}],"children":[{"id":"_help_hA834UaHhSNn","title":"Script bundles","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Scripting/Common concepts/Script bundles"},{"name":"iconClass","value":"bx bx-package","type":"label"}]}]},{"id":"_help_GLks18SNjxmC","title":"Script API","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Scripting/Script API"},{"name":"iconClass","value":"bx bx-code-curly","type":"label"}],"children":[{"id":"_help_Q2z6av6JZVWm","title":"Frontend API","type":"webView","attributes":[{"type":"label","name":"webViewSrc","value":"https://docs.triliumnotes.org/script-api/frontend"},{"name":"iconClass","value":"bx bx-folder","type":"label"}],"enforceAttributes":true,"children":[{"id":"_help_habiZ3HU8Kw8","title":"FNote","type":"webView","attributes":[{"type":"label","name":"webViewSrc","value":"https://docs.triliumnotes.org/script-api/frontend/interfaces/FNote.html"},{"name":"iconClass","value":"bx bx-file","type":"label"}],"enforceAttributes":true}]},{"id":"_help_MEtfsqa5VwNi","title":"Backend API","type":"webView","attributes":[{"type":"label","name":"webViewSrc","value":"https://docs.triliumnotes.org/script-api/backend"},{"name":"iconClass","value":"bx bx-file","type":"label"}],"enforceAttributes":true},{"id":"_help_ApVHZ8JY5ofC","title":"Day.js","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Scripting/Script API/Day.js"},{"name":"iconClass","value":"bx bx-calendar","type":"label"}]}]},{"id":"_help_vElnKeDNPSVl","title":"Logging","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Scripting/Logging"},{"name":"iconClass","value":"bx bx-terminal","type":"label"}]}]},{"id":"_help_Fm0j45KqyHpU","title":"Miscellaneous","type":"book","attributes":[{"name":"iconClass","value":"bx bx-info-circle","type":"label"}],"children":[{"id":"_help_WFbFXrgnDyyU","title":"Privacy Policy","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Miscellaneous/Privacy Policy"},{"name":"iconClass","value":"bx bx-file","type":"label"}]},{"id":"_help_NcsmUYZRWEW4","title":"Patterns of personal knowledge","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Miscellaneous/Patterns of personal knowledge"},{"name":"iconClass","value":"bx bx-file","type":"label"}]}]}] \ No newline at end of file diff --git a/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Basic Concepts and Features/Import & Export/Evernote.html b/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Basic Concepts and Features/Import & Export/Evernote.html index edbaf53852..439cdab93d 100644 --- a/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Basic Concepts and Features/Import & Export/Evernote.html +++ b/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Basic Concepts and Features/Import & Export/Evernote.html @@ -1,16 +1,82 @@ -

Trilium can import ENEX files which are used by Evernote for backup/export. - One ENEX file represents content (notes and resources) of one notebook.

+

+ Trilium can import ENEX files, which are used by Evernote for backup/export. + One ENEX file represents the content (notes and resources) of one notebook.

Export ENEX from Evernote

-

To export ENEX file, you need to have a legacy desktop version - of Evernote (i.e. not web/mobile). Right click on notebook and select export - and follow the wizard.

+

To export ENEX files from Evernote, you can use:

+
    +
  • Evernote desktop application. See Evernote documentation. Note that + the limitation of this method is that you can only export 100 notes at + a time or one notebook at a time.
  • +
  • A third-party evernote-backup CLI tool. This tool can export all + of your notebooks in bulk.
  • +

Import ENEX in Trilium

-

Once you have ENEX file, you can import it to Trilium. Right click on - some note (to which you want to import the file), click on "Import" and - select the ENEX file.

-

After importing the ENEX file, go over the imported notes and resources - to be sure the import went well, and you didn't lose any data.

+

Once you have your ENEX files, do the following to import them in Trilium:

+
    +
  1. In the Trilium note tree, right-click the note under which you want to + import one or more of your ENEX files. The notes in the files will be imported + as child notes of the selected note.
  2. +
  3. Click Import into note.
  4. +
  5. Choose your ENEX file or files and click Import.
  6. +
  7. During the import, you will see "Import in progress" message. If the import + is successful, the message will change to “Import finished successfully” + and then disappear.
  8. +
  9. We recommend you to check the imported notes and their attachments to + verify that you haven’t lost any data.
  10. +
+

A non-exhaustive list of what the importer preserves:

+
    +
  • Attachments
  • +
  • The hierarchy of headings (these are shifted to start with H2 because + H1 is reserved for note title, see Headings)
  • +
  • Tables
  • +
  • Bulleted lists
  • +
  • Numbered lists
  • +
  • Bold
  • +
  • Italics
  • +
  • Strikethrough
  • +
  • Highlights
  • +
  • Font colors
  • +
  • Soft line breaks
  • +
  • External links
  • +
+

However, we do not guarantee that all of your formatting will be imported + 100% correctly.

Limitations

-

All resources (except for images) are created as note's attachments.

-

HTML inside ENEX files is not exactly valid so some formatting maybe broken - or lost. You can report major problems into Trilium issue tracker.

\ No newline at end of file +
    +
  • The size limit of one import is 250Mb. If the total size of your files + is larger, you can increase the upload limit, or divide your files, + and run the import as many times as necessary.
  • +
  • All resources (except for images) are created as notes’ attachments.
  • +
  • If you have HTML inside ENEX files, the HTML formatting may be broken + or lost after import in Trilium. You can report major problems at Trilium + issue tracker.
  • +
+

Internal links

+

The importer cannot transform Evernote internal links into Trilium internal + links because Evernote internal note IDs are not preserved in ENEX files.

+

If you want to restore the internal links in Trilium after you import + all of your ENEX files, you can use or adapt this custom script:  + Process internal links by title +

+

The script does the following:

+
    +
  1. It finds all Evernote internal links.
  2. +
  3. For each one, it checks if its link text matches a note title, and if + yes, it replaces the Evernote link with an internal Trilium link. If not, + it leaves the Evernote link in place.
  4. +
  5. If it finds more than one note with a matching note title, it leaves the + Evernote link in place.
  6. +
  7. It outputs the results in a log that you can see in the respective code + note in Trilium. 
  8. +
+

The script has the following limitations:

+
    +
  • It will not fix links to anchors and links to notes that you renamed in + Evernote after you created the links.
  • +
  • Some note titles might not be well identified, even if they exist. This + is especially the case if the note title contains some special characters. + Should this be problematic, consider Reporting issues.
  • +
\ No newline at end of file diff --git a/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Basic Concepts and Features/Import & Export/Evernote/Process internal links by titl.js b/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Basic Concepts and Features/Import & Export/Evernote/Process internal links by titl.js new file mode 100644 index 0000000000..03fba623ab --- /dev/null +++ b/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Basic Concepts and Features/Import & Export/Evernote/Process internal links by titl.js @@ -0,0 +1,35 @@ +const query = `note.type = "text" and note.content *=* "evernote:///view/"`; +const notes = api.searchForNotes(query); + +for (const note of notes) { + api.log(`Processing note ${note.title}...`); + + const content = note.getContent(); + const $ = api.cheerio.load(content); + + $("a").each((i, el) => { + const $el = $(el); + + const url = $el.attr("href"); + if (!url.startsWith("evernote:///")) return; + + const text = $el.text(); + const matchingNotes = api.searchForNotes(`note.title = "${text}"`); + if (matchingNotes.length === 0) { + api.log(`No matching notes for "${text}..."`); + return; + } + + if (matchingNotes.length > 1) { + api.log(`Found multiple matching notes for "${text}". Skipping.`); + return; + } + + const matchingNote = matchingNotes[0]; + + api.log(`Found matching note: ${matchingNote.title} ${matchingNote.noteId}`); + $el.attr("href", `#root/${matchingNote.noteId}`); + $el.addClass("reference-link"); + }); + note.setContent($("body").html()); +} \ No newline at end of file diff --git a/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Basic Concepts and Features/UI Elements/Note Tree/Hiding the subtree.html b/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Basic Concepts and Features/UI Elements/Note Tree/Hiding the subtree.html index c818f26ddd..174b5e0dea 100644 --- a/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Basic Concepts and Features/UI Elements/Note Tree/Hiding the subtree.html +++ b/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Basic Concepts and Features/UI Elements/Note Tree/Hiding the subtree.html @@ -8,39 +8,37 @@ the number of items stays small. When a note has a large number of notes (in the order of thousands or tens of thousands), two problems arise:

    -
  • Navigating between notes becomes cumbersome and the tree itself gets cluttered +
  • Navigating between notes becomes cumbersome and the tree itself gets cluttered with a large amount of notes.
  • -
  • The large amount of notes can slow down the application considerably.
  • +
  • The large amount of notes can slow down the application considerably.

Since v0.102.0, Trilium allows the tree to hide the child notes of particular - notes. This works for both Collections and + notes. This works for both Collections and normal notes.

Interaction

When the subtree of a note is hidden, there are a few subtle changes:

    -
  • To indicate that the subtree is hidden, the note will not have an expand +
  • To indicate that the subtree is hidden, the note will not have an expand button and it will display the number of children to the right.
  • -
  • It's not possible to add a new note directly from the tree. +
  • It's not possible to add a new note directly from the tree.
      -
    • For Collections, +
    • For Collections, it's best to use the built-in mechanism to create notes (for example by creating a new point on a geo-map, or by adding a new row in a table).
    • -
    • For normal notes, it's still possible to create children via other means - such as using the Internal (reference) links system.
    • +
    • For normal notes, it's still possible to create children via other means + such as using the Internal (reference) links system.
    -
  • -
  • Notes can be dragged from outside the note, case in which they will be - cloned into it. -
      -
    • Instead of switching to the child notes that were copied, the parent note - is highlighted instead.
    • -
    • A notification will indicate this behavior.
    • -
    -
  • -
  • Similarly, features such as cut/copy and then paste into the note will - also work.
  • + +
  • Notes can be dragged from outside the note, case in which they will be + cloned into it. +
      +
    • Instead of switching to the child notes that were copied, the parent note + is highlighted instead.
    • +
    • A notification will indicate this behavior.
    • +
    +
  • +
  • Similarly, features such as cut/copy and then paste into the note will + also work.

Spotlighting

@@ -52,12 +50,11 @@

During this state, the note remains under its normal hierarchy, so that its easy to tell its location. In addition, this means that:

    -
  • The note position is clearly visible when using the Search.
  • -
  • The note can still be operated on from the tree, such as adding a  +
  • The note position is clearly visible when using the Search.
  • +
  • The note can still be operated on from the tree, such as adding a  Branch prefix or moving it outside the collection.
  • + class="reference-link" href="#root/_help_TBwsyfadTA18">Branch prefix or moving it outside the collection.

The note appears in italics to indicate its temporary display. When switching to another note, the spotlighted note will disappear.

@@ -67,29 +64,27 @@ This is intentional to avoid displaying a partial state of the subtree.

Working with collections

-

By default, some of the Collections will +

By default, some of the Collections will automatically hide their child notes, for example the Kanban Board or - the Table.

+ href="#root/_help_CtBQqbwXDx1w">Kanban Board or the Table.

The reasoning behind this is that collections are generally opaque to the rest of the notes and they can generate a large amount of sub-notes since they intentionally lack structure (in order to allow easy swapping between views).

Some types of collections have the child notes intentionally shown, for example the legacy ones (Grid and List), but also the Presentation which - requires the tree structure in order to organize and edit the slides.

+ href="#root/_help_zP3PMqaG71Ct">Presentation which requires the tree + structure in order to organize and edit the slides.

To toggle this behavior:

    -
  • In the New Layout, +
  • In the New Layout, press the Options button underneath the title and uncheck Hide child notes in tree.
  • -
  • Right click the collection note in the Note Tree and - select AdvancedShow subtree.
  • +
  • Right click the collection note in the Note Tree and select AdvancedShow subtree.

Working with normal notes

It's possible to hide the subtree for normal notes as well, not just collections. - To do so, right click the note in the Note Tree and + To do so, right click the note in the Note Tree and select AdvancedHide subtree.

\ No newline at end of file diff --git a/docs/Developer Guide/!!!meta.json b/docs/Developer Guide/!!!meta.json index 1b5c0c10ea..d5bdbfd832 100644 --- a/docs/Developer Guide/!!!meta.json +++ b/docs/Developer Guide/!!!meta.json @@ -1,6 +1,6 @@ { "formatVersion": 2, - "appVersion": "0.101.1", + "appVersion": "0.101.3", "files": [ { "isClone": false, diff --git a/docs/Developer Guide/Developer Guide/Documentation.md b/docs/Developer Guide/Developer Guide/Documentation.md index ec8b903e08..4f833f93b5 100644 --- a/docs/Developer Guide/Developer Guide/Documentation.md +++ b/docs/Developer Guide/Developer Guide/Documentation.md @@ -1,5 +1,5 @@ # Documentation -There are multiple types of documentation for Trilium: +There are multiple types of documentation for Trilium: * The _User Guide_ represents the user-facing documentation. This documentation can be browsed by users directly from within Trilium, by pressing F1. * The _Developer's Guide_ represents a set of Markdown documents that present the internals of Trilium, for developers. diff --git a/docs/User Guide/!!!meta.json b/docs/User Guide/!!!meta.json index da318029bb..2c8eafa537 100644 --- a/docs/User Guide/!!!meta.json +++ b/docs/User Guide/!!!meta.json @@ -2445,37 +2445,51 @@ "mime": "text/html", "attributes": [ { - "type": "label", - "name": "shareAlias", - "value": "hiding-subtree", + "type": "relation", + "name": "internalLink", + "value": "GTwFsgaA0lCt", + "isInheritable": false, + "position": 10 + }, + { + "type": "relation", + "name": "internalLink", + "value": "hrZ1D00cLbal", + "isInheritable": false, + "position": 20 + }, + { + "type": "relation", + "name": "internalLink", + "value": "eIg8jdvaoNNd", "isInheritable": false, "position": 30 }, { - "type": "label", - "name": "iconClass", - "value": "bx bx-hide", + "type": "relation", + "name": "internalLink", + "value": "TBwsyfadTA18", "isInheritable": false, "position": 40 }, { "type": "relation", "name": "internalLink", - "value": "GTwFsgaA0lCt", + "value": "CtBQqbwXDx1w", "isInheritable": false, "position": 50 }, { "type": "relation", "name": "internalLink", - "value": "CtBQqbwXDx1w", + "value": "2FvYrpmOXm29", "isInheritable": false, "position": 60 }, { "type": "relation", "name": "internalLink", - "value": "2FvYrpmOXm29", + "value": "zP3PMqaG71Ct", "isInheritable": false, "position": 70 }, @@ -2494,32 +2508,18 @@ "position": 90 }, { - "type": "relation", - "name": "internalLink", - "value": "zP3PMqaG71Ct", + "type": "label", + "name": "shareAlias", + "value": "hiding-subtree", "isInheritable": false, - "position": 100 + "position": 30 }, { - "type": "relation", - "name": "internalLink", - "value": "hrZ1D00cLbal", + "type": "label", + "name": "iconClass", + "value": "bx bx-hide", "isInheritable": false, - "position": 110 - }, - { - "type": "relation", - "name": "internalLink", - "value": "eIg8jdvaoNNd", - "isInheritable": false, - "position": 120 - }, - { - "type": "relation", - "name": "internalLink", - "value": "TBwsyfadTA18", - "isInheritable": false, - "position": 130 + "position": 40 } ], "format": "markdown", @@ -6182,11 +6182,56 @@ "value": "bx bx-window-open", "isInheritable": false, "position": 30 + }, + { + "type": "relation", + "name": "internalLink", + "value": "dj3j8dG4th4l", + "isInheritable": false, + "position": 40 + }, + { + "type": "relation", + "name": "internalLink", + "value": "wy8So3yZZlH9", + "isInheritable": false, + "position": 50 } ], "format": "markdown", "dataFileName": "Evernote.md", - "attachments": [] + "attachments": [], + "dirFileName": "Evernote", + "children": [ + { + "isClone": false, + "noteId": "dj3j8dG4th4l", + "notePath": [ + "pOsGYCXsbNQG", + "gh7bpGYxajRS", + "mHbBMPDPkVV5", + "syuSEKf2rUGr", + "dj3j8dG4th4l" + ], + "title": "Process internal links by title", + "notePosition": 10, + "prefix": null, + "isExpanded": false, + "type": "code", + "mime": "application/javascript;env=frontend", + "attributes": [ + { + "type": "label", + "name": "shareAlias", + "value": "internal-links.js", + "isInheritable": false, + "position": 30 + } + ], + "dataFileName": "Process internal links by titl.js", + "attachments": [] + } + ] }, { "isClone": false, diff --git a/docs/User Guide/User Guide.md b/docs/User Guide/User Guide.md index 3e5537135c..d02f4ecc38 100644 --- a/docs/User Guide/User Guide.md +++ b/docs/User Guide/User Guide.md @@ -15,7 +15,7 @@ Trilium is an open-source solution for note-taking and organizing a personal kno * Desktop Installation * Server Installation -* Frontend API or Backend API +* [missing note] or [missing note] * [ETAPI reference](User%20Guide/Advanced%20Usage/ETAPI%20\(REST%20API\)/API%20Reference.dat) ## External links diff --git a/docs/User Guide/User Guide/Basic Concepts and Features/Import & Export/Evernote.md b/docs/User Guide/User Guide/Basic Concepts and Features/Import & Export/Evernote.md index 58df4cfe49..e095d30d89 100644 --- a/docs/User Guide/User Guide/Basic Concepts and Features/Import & Export/Evernote.md +++ b/docs/User Guide/User Guide/Basic Concepts and Features/Import & Export/Evernote.md @@ -1,18 +1,60 @@ # Evernote -Trilium can import ENEX files which are used by Evernote for backup/export. One ENEX file represents content (notes and resources) of one notebook. +Trilium can import ENEX files, which are used by Evernote for backup/export. One ENEX file represents the content (notes and resources) of one notebook. ## Export ENEX from Evernote -To export ENEX file, you need to have a _legacy_ desktop version of Evernote (i.e. not web/mobile). Right click on notebook and select export and follow the wizard. +To export ENEX files from Evernote, you can use: + +* Evernote desktop application. See Evernote documentation. Note that the limitation of this method is that you can only export 100 notes at a time or one notebook at a time. +* A third-party evernote-backup CLI tool. This tool can export all of your notebooks in bulk. ## Import ENEX in Trilium -Once you have ENEX file, you can import it to Trilium. Right click on some note (to which you want to import the file), click on "Import" and select the ENEX file. +Once you have your ENEX files, do the following to import them in Trilium: -After importing the ENEX file, go over the imported notes and resources to be sure the import went well, and you didn't lose any data. +1. In the Trilium note tree, right-click the note under which you want to import one or more of your ENEX files. The notes in the files will be imported as child notes of the selected note. +2. Click Import into note. +3. Choose your ENEX file or files and click Import. +4. During the import, you will see "Import in progress" message. If the import is successful, the message will change to “Import finished successfully” and then disappear. +5. We recommend you to check the imported notes and their attachments to verify that you haven’t lost any data. + +A non-exhaustive list of what the importer preserves: + +* Attachments +* The hierarchy of headings (these are shifted to start with H2 because H1 is reserved for note title, see Headings) +* Tables +* Bulleted lists +* Numbered lists +* Bold +* Italics +* Strikethrough +* Highlights +* Font colors +* Soft line breaks +* External links + +However, we do not guarantee that all of your formatting will be imported 100% correctly. ## Limitations -All resources (except for images) are created as note's attachments. +* The size limit of one import is 250Mb. If the total size of your files is larger, you can increase the upload limit, or divide your files, and run the import as many times as necessary. +* All resources (except for images) are created as notes’ attachments. +* If you have HTML inside ENEX files, the HTML formatting may be broken or lost after import in Trilium. You can report major problems at Trilium issue tracker. -HTML inside ENEX files is not exactly valid so some formatting maybe broken or lost. You can report major problems into [Trilium issue tracker](https://github.com/TriliumNext/Trilium/issues). \ No newline at end of file +### Internal links + +The importer cannot transform Evernote internal links into Trilium internal links because Evernote internal note IDs are not preserved in ENEX files. + +If you want to restore the internal links in Trilium after you import all of your ENEX files, you can use or adapt this custom script: Process internal links by title + +The script does the following: + +1. It finds all Evernote internal links. +2. For each one, it checks if its link text matches a note title, and if yes, it replaces the Evernote link with an internal Trilium link. If not, it leaves the Evernote link in place. +3. If it finds more than one note with a matching note title, it leaves the Evernote link in place. +4. It outputs the results in a log that you can see in the respective code note in Trilium. + +The script has the following limitations: + +* It will not fix links to anchors and links to notes that you renamed in Evernote after you created the links. +* Some note titles might not be well identified, even if they exist. This is especially the case if the note title contains some special characters. Should this be problematic, consider Reporting issues. \ No newline at end of file diff --git a/docs/User Guide/User Guide/Basic Concepts and Features/Import & Export/Evernote/Process internal links by titl.js b/docs/User Guide/User Guide/Basic Concepts and Features/Import & Export/Evernote/Process internal links by titl.js new file mode 100644 index 0000000000..03fba623ab --- /dev/null +++ b/docs/User Guide/User Guide/Basic Concepts and Features/Import & Export/Evernote/Process internal links by titl.js @@ -0,0 +1,35 @@ +const query = `note.type = "text" and note.content *=* "evernote:///view/"`; +const notes = api.searchForNotes(query); + +for (const note of notes) { + api.log(`Processing note ${note.title}...`); + + const content = note.getContent(); + const $ = api.cheerio.load(content); + + $("a").each((i, el) => { + const $el = $(el); + + const url = $el.attr("href"); + if (!url.startsWith("evernote:///")) return; + + const text = $el.text(); + const matchingNotes = api.searchForNotes(`note.title = "${text}"`); + if (matchingNotes.length === 0) { + api.log(`No matching notes for "${text}..."`); + return; + } + + if (matchingNotes.length > 1) { + api.log(`Found multiple matching notes for "${text}". Skipping.`); + return; + } + + const matchingNote = matchingNotes[0]; + + api.log(`Found matching note: ${matchingNote.title} ${matchingNote.noteId}`); + $el.attr("href", `#root/${matchingNote.noteId}`); + $el.addClass("reference-link"); + }); + note.setContent($("body").html()); +} \ No newline at end of file From cc4ceb975e475bf2697b3fcd14c13993d17e8b40 Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Wed, 14 Jan 2026 17:15:29 +0200 Subject: [PATCH 046/353] fix(tree): not reacting to note reordering (e.g. sort) --- apps/client/src/widgets/note_tree.ts | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/apps/client/src/widgets/note_tree.ts b/apps/client/src/widgets/note_tree.ts index d7ac85d6b8..68b0310684 100644 --- a/apps/client/src/widgets/note_tree.ts +++ b/apps/client/src/widgets/note_tree.ts @@ -1232,7 +1232,9 @@ export default class NoteTreeWidget extends NoteContextAwareWidget { refreshCtx.noteIdsToUpdate.add(noteId); } - if (refreshCtx.noteIdsToUpdate.size + refreshCtx.noteIdsToReload.size > 0) { + const hasNotesToUpdateOrReload = refreshCtx.noteIdsToUpdate.size + refreshCtx.noteIdsToReload.size > 0; + const hasNoteReorderingChange = loadResults.getNoteReorderings().length > 0; + if (hasNotesToUpdateOrReload || hasNoteReorderingChange) { await this.#executeTreeUpdates(refreshCtx, loadResults); } @@ -1393,6 +1395,7 @@ export default class NoteTreeWidget extends NoteContextAwareWidget { for (const parentNoteId of loadResults.getNoteReorderings()) { for (const node of this.getNodesByNoteId(parentNoteId)) { + console.log("Reordering ", node); if (node.isLoaded()) { this.sortChildren(node); } From c3a5705be03e1553e48be3650beef563e823bf51 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 14 Jan 2026 22:53:04 +0000 Subject: [PATCH 047/353] build(deps): bump diff from 4.0.2 to 8.0.3 Bumps [diff](https://github.com/kpdecker/jsdiff) from 4.0.2 to 8.0.3. - [Changelog](https://github.com/kpdecker/jsdiff/blob/master/release-notes.md) - [Commits](https://github.com/kpdecker/jsdiff/compare/v4.0.2...v8.0.3) --- updated-dependencies: - dependency-name: diff dependency-version: 8.0.3 dependency-type: indirect ... Signed-off-by: dependabot[bot] --- pnpm-lock.yaml | 241 +++++++++++++++++++++++++------------------------ 1 file changed, 122 insertions(+), 119 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index c5bee061f5..59833968de 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -2353,11 +2353,11 @@ packages: engines: {node: '>=14.14'} hasBin: true - '@emnapi/core@1.7.1': - resolution: {integrity: sha512-o1uhUASyo921r2XtHYOHy7gdkGLge8ghBEQHMWmyJFoXlpU58kIrhhN3w26lpQb6dspetweapMn2CSNwQ8I4wg==} + '@emnapi/core@1.8.1': + resolution: {integrity: sha512-AvT9QFpxK0Zd8J0jopedNm+w/2fIzvtPKPjqyw9jwvBaReTTqPBk9Hixaz7KbjimP+QNz605/XnjFcDAL2pqBg==} - '@emnapi/runtime@1.7.1': - resolution: {integrity: sha512-PVtJr5CmLwYAU9PZDMITZoR5iAOShYREoR45EyyLrbntV50mdePTgUn4AmOw90Ifcj+x2kRjdzr1HP3RrNiHGA==} + '@emnapi/runtime@1.8.1': + resolution: {integrity: sha512-mehfKSMWjjNol8659Z8KxEMrdSJDDot5SXMq00dM8BN4o+CLNXQ0xH2V7EchNHV4RmbZLmmPdEaXZc5H2FXmDg==} '@emnapi/wasi-threads@1.1.0': resolution: {integrity: sha512-WI0DdZ8xFSbgMjR1sFsKABJ/C5OnRrjT06JXbZKexJGrDuPTzZdDYfFlsgcCXCyf+suG5QU2e/y1Wo2V/OapLQ==} @@ -3726,8 +3726,8 @@ packages: resolution: {integrity: sha512-/p08f93LEbsL5mDZFQ3DBxcPv/I4QG9EDYRRq1WNlCOXVfAHBTHMSVMwxlqG/AtnSfUr9+vgfN7MKiyDo0+Weg==} engines: {node: '>= 10'} - '@napi-rs/wasm-runtime@1.1.0': - resolution: {integrity: sha512-Fq6DJW+Bb5jaWE69/qOE0D1TUN9+6uWhCeZpdnSBk14pjLcCWR7Q8n49PTSPHazM37JqrsdpEthXy2xn6jWWiA==} + '@napi-rs/wasm-runtime@1.1.1': + resolution: {integrity: sha512-p64ah1M1ld8xjWv3qbvFwHiFVWrq1yFvV4f7w+mzaqiR4IlSgkqhcRdHwsGgomwzBH51sRY4NEowLxnaBjcW/A==} '@nicolo-ribaudo/eslint-scope-5-internals@5.1.1-v1': resolution: {integrity: sha512-54/JRvkLIzzDWshCWfuhadfrfZVPiElY8Fcgmg1HroEly/EDSszzhBAsarCux+D/kOslTRquNzuyGSmUSTTHGg==} @@ -3901,86 +3901,86 @@ packages: '@paralleldrive/cuid2@2.2.2': resolution: {integrity: sha512-ZOBkgDwEdoYVlSeRbYYXs0S9MejQofiVYoTbKzy/6GQa39/q5tQU2IX46+shYnUkpEl3wc+J6wRlar7r2EK2xA==} - '@parcel/watcher-android-arm64@2.5.1': - resolution: {integrity: sha512-KF8+j9nNbUN8vzOFDpRMsaKBHZ/mcjEjMToVMJOhTozkDonQFFrRcfdLWn6yWKCmJKmdVxSgHiYvTCef4/qcBA==} + '@parcel/watcher-android-arm64@2.5.4': + resolution: {integrity: sha512-hoh0vx4v+b3BNI7Cjoy2/B0ARqcwVNrzN/n7DLq9ZB4I3lrsvhrkCViJyfTj/Qi5xM9YFiH4AmHGK6pgH1ss7g==} engines: {node: '>= 10.0.0'} cpu: [arm64] os: [android] - '@parcel/watcher-darwin-arm64@2.5.1': - resolution: {integrity: sha512-eAzPv5osDmZyBhou8PoF4i6RQXAfeKL9tjb3QzYuccXFMQU0ruIc/POh30ePnaOyD1UXdlKguHBmsTs53tVoPw==} + '@parcel/watcher-darwin-arm64@2.5.4': + resolution: {integrity: sha512-kphKy377pZiWpAOyTgQYPE5/XEKVMaj6VUjKT5VkNyUJlr2qZAn8gIc7CPzx+kbhvqHDT9d7EqdOqRXT6vk0zw==} engines: {node: '>= 10.0.0'} cpu: [arm64] os: [darwin] - '@parcel/watcher-darwin-x64@2.5.1': - resolution: {integrity: sha512-1ZXDthrnNmwv10A0/3AJNZ9JGlzrF82i3gNQcWOzd7nJ8aj+ILyW1MTxVk35Db0u91oD5Nlk9MBiujMlwmeXZg==} + '@parcel/watcher-darwin-x64@2.5.4': + resolution: {integrity: sha512-UKaQFhCtNJW1A9YyVz3Ju7ydf6QgrpNQfRZ35wNKUhTQ3dxJ/3MULXN5JN/0Z80V/KUBDGa3RZaKq1EQT2a2gg==} engines: {node: '>= 10.0.0'} cpu: [x64] os: [darwin] - '@parcel/watcher-freebsd-x64@2.5.1': - resolution: {integrity: sha512-SI4eljM7Flp9yPuKi8W0ird8TI/JK6CSxju3NojVI6BjHsTyK7zxA9urjVjEKJ5MBYC+bLmMcbAWlZ+rFkLpJQ==} + '@parcel/watcher-freebsd-x64@2.5.4': + resolution: {integrity: sha512-Dib0Wv3Ow/m2/ttvLdeI2DBXloO7t3Z0oCp4bAb2aqyqOjKPPGrg10pMJJAQ7tt8P4V2rwYwywkDhUia/FgS+Q==} engines: {node: '>= 10.0.0'} cpu: [x64] os: [freebsd] - '@parcel/watcher-linux-arm-glibc@2.5.1': - resolution: {integrity: sha512-RCdZlEyTs8geyBkkcnPWvtXLY44BCeZKmGYRtSgtwwnHR4dxfHRG3gR99XdMEdQ7KeiDdasJwwvNSF5jKtDwdA==} + '@parcel/watcher-linux-arm-glibc@2.5.4': + resolution: {integrity: sha512-I5Vb769pdf7Q7Sf4KNy8Pogl/URRCKu9ImMmnVKYayhynuyGYMzuI4UOWnegQNa2sGpsPSbzDsqbHNMyeyPCgw==} engines: {node: '>= 10.0.0'} cpu: [arm] os: [linux] - '@parcel/watcher-linux-arm-musl@2.5.1': - resolution: {integrity: sha512-6E+m/Mm1t1yhB8X412stiKFG3XykmgdIOqhjWj+VL8oHkKABfu/gjFj8DvLrYVHSBNC+/u5PeNrujiSQ1zwd1Q==} + '@parcel/watcher-linux-arm-musl@2.5.4': + resolution: {integrity: sha512-kGO8RPvVrcAotV4QcWh8kZuHr9bXi9a3bSZw7kFarYR0+fGliU7hd/zevhjw8fnvIKG3J9EO5G6sXNGCSNMYPQ==} engines: {node: '>= 10.0.0'} cpu: [arm] os: [linux] - '@parcel/watcher-linux-arm64-glibc@2.5.1': - resolution: {integrity: sha512-LrGp+f02yU3BN9A+DGuY3v3bmnFUggAITBGriZHUREfNEzZh/GO06FF5u2kx8x+GBEUYfyTGamol4j3m9ANe8w==} + '@parcel/watcher-linux-arm64-glibc@2.5.4': + resolution: {integrity: sha512-KU75aooXhqGFY2W5/p8DYYHt4hrjHZod8AhcGAmhzPn/etTa+lYCDB2b1sJy3sWJ8ahFVTdy+EbqSBvMx3iFlw==} engines: {node: '>= 10.0.0'} cpu: [arm64] os: [linux] - '@parcel/watcher-linux-arm64-musl@2.5.1': - resolution: {integrity: sha512-cFOjABi92pMYRXS7AcQv9/M1YuKRw8SZniCDw0ssQb/noPkRzA+HBDkwmyOJYp5wXcsTrhxO0zq1U11cK9jsFg==} + '@parcel/watcher-linux-arm64-musl@2.5.4': + resolution: {integrity: sha512-Qx8uNiIekVutnzbVdrgSanM+cbpDD3boB1f8vMtnuG5Zau4/bdDbXyKwIn0ToqFhIuob73bcxV9NwRm04/hzHQ==} engines: {node: '>= 10.0.0'} cpu: [arm64] os: [linux] - '@parcel/watcher-linux-x64-glibc@2.5.1': - resolution: {integrity: sha512-GcESn8NZySmfwlTsIur+49yDqSny2IhPeZfXunQi48DMugKeZ7uy1FX83pO0X22sHntJ4Ub+9k34XQCX+oHt2A==} + '@parcel/watcher-linux-x64-glibc@2.5.4': + resolution: {integrity: sha512-UYBQvhYmgAv61LNUn24qGQdjtycFBKSK3EXr72DbJqX9aaLbtCOO8+1SkKhD/GNiJ97ExgcHBrukcYhVjrnogA==} engines: {node: '>= 10.0.0'} cpu: [x64] os: [linux] - '@parcel/watcher-linux-x64-musl@2.5.1': - resolution: {integrity: sha512-n0E2EQbatQ3bXhcH2D1XIAANAcTZkQICBPVaxMeaCVBtOpBZpWJuf7LwyWPSBDITb7In8mqQgJ7gH8CILCURXg==} + '@parcel/watcher-linux-x64-musl@2.5.4': + resolution: {integrity: sha512-YoRWCVgxv8akZrMhdyVi6/TyoeeMkQ0PGGOf2E4omODrvd1wxniXP+DBynKoHryStks7l+fDAMUBRzqNHrVOpg==} engines: {node: '>= 10.0.0'} cpu: [x64] os: [linux] - '@parcel/watcher-win32-arm64@2.5.1': - resolution: {integrity: sha512-RFzklRvmc3PkjKjry3hLF9wD7ppR4AKcWNzH7kXR7GUe0Igb3Nz8fyPwtZCSquGrhU5HhUNDr/mKBqj7tqA2Vw==} + '@parcel/watcher-win32-arm64@2.5.4': + resolution: {integrity: sha512-iby+D/YNXWkiQNYcIhg8P5hSjzXEHaQrk2SLrWOUD7VeC4Ohu0WQvmV+HDJokZVJ2UjJ4AGXW3bx7Lls9Ln4TQ==} engines: {node: '>= 10.0.0'} cpu: [arm64] os: [win32] - '@parcel/watcher-win32-ia32@2.5.1': - resolution: {integrity: sha512-c2KkcVN+NJmuA7CGlaGD1qJh1cLfDnQsHjE89E60vUEMlqduHGCdCLJCID5geFVM0dOtA3ZiIO8BoEQmzQVfpQ==} + '@parcel/watcher-win32-ia32@2.5.4': + resolution: {integrity: sha512-vQN+KIReG0a2ZDpVv8cgddlf67J8hk1WfZMMP7sMeZmJRSmEax5xNDNWKdgqSe2brOKTQQAs3aCCUal2qBHAyg==} engines: {node: '>= 10.0.0'} cpu: [ia32] os: [win32] - '@parcel/watcher-win32-x64@2.5.1': - resolution: {integrity: sha512-9lHBdJITeNR++EvSQVUcaZoWupyHfXe1jZvGZ06O/5MflPcuPLtEphScIBL+AiCWBO46tDSHzWyD0uDmmZqsgA==} + '@parcel/watcher-win32-x64@2.5.4': + resolution: {integrity: sha512-3A6efb6BOKwyw7yk9ro2vus2YTt2nvcd56AuzxdMiVOxL9umDyN5PKkKfZ/gZ9row41SjVmTVQNWQhaRRGpOKw==} engines: {node: '>= 10.0.0'} cpu: [x64] os: [win32] - '@parcel/watcher@2.5.1': - resolution: {integrity: sha512-dfUnCxiN9H4ap84DvD2ubjw+3vUNpstxa0TneY/Paat8a3R4uQZDLSvWjmznAY/DoahqTHl9V46HF/Zs3F29pg==} + '@parcel/watcher@2.5.4': + resolution: {integrity: sha512-WYa2tUVV5HiArWPB3ydlOc4R2ivq0IDrlqhMi3l7mVsFEXNcTfxYFPIHXHXIh/ca/y/V5N4E1zecyxdIBjYnkQ==} engines: {node: '>= 10.0.0'} '@phosphor-icons/web@2.1.2': @@ -7637,11 +7637,6 @@ packages: detect-it@3.0.7: resolution: {integrity: sha512-RxpgcdbatUX6epJE09K16iJqF7x6iEcEdoL18FR2zpBO4JhnL7aMOAUoUEyexdtbWOSfTmoDWmeD6mwRBQyRXg==} - detect-libc@1.0.3: - resolution: {integrity: sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==} - engines: {node: '>=0.10'} - hasBin: true - detect-libc@2.1.1: resolution: {integrity: sha512-ecqj/sy1jcK1uWrwpR67UhYrIFQ+5WlGxth34WquCbamhFA6hkkwiu37o6J5xCHdo1oixJRfVRw+ywV+Hq/0Aw==} engines: {node: '>=8'} @@ -8298,8 +8293,8 @@ packages: fast-safe-stringify@2.1.1: resolution: {integrity: sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==} - fast-uri@3.0.6: - resolution: {integrity: sha512-Atfo14OibSv5wAp4VWNsFYE1AchQRTv9cBGWET4pZWHzYshFSS9NQI6I57rdKn9croWVMbYFbLhJ+yJvmZIIHw==} + fast-uri@3.1.0: + resolution: {integrity: sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==} fast-xml-parser@4.4.1: resolution: {integrity: sha512-xkjOecfnKGkSsOwtZ5Pz7Us/T6mrbPQrq0nh+aCO5V9nk5NLWmasAHumTKjiPJPWANe+kAZ84Jc8ooJkzZ88Sw==} @@ -8688,6 +8683,10 @@ packages: resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==} hasBin: true + glob@10.5.0: + resolution: {integrity: sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==} + hasBin: true + glob@11.0.3: resolution: {integrity: sha512-2Nim7dha1KVkaiF4q6Dj+ngPPMdfvLJEOpZk/jKiUAkqKebpGAWQXAq9z1xu9HKu5lWfqw/FASuccEjyznjPaA==} engines: {node: 20 || >=22} @@ -9216,6 +9215,10 @@ packages: resolution: {integrity: sha512-NWv9YLW4PoW2B7xtzaS3NCot75m6nK7Icdv0o3lfMceJVRfSoQwqD4wEH5rLwoKJwUiZ/rfpiVBhnaF0FK4HoA==} engines: {node: '>= 12'} + ip-address@10.1.0: + resolution: {integrity: sha512-XXADHxXmvT9+CRxhXg56LJovE+bmWnEWB78LB83VZTprKTmaC5QfruXocxzTZ2Kl0DNwKuBdlIhjL8LeY8Sf8Q==} + engines: {node: '>= 12'} + ip-address@9.0.5: resolution: {integrity: sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==} engines: {node: '>= 12'} @@ -10989,6 +10992,10 @@ packages: resolution: {integrity: sha512-VkndIv2fIB99swvQoA65bm+fsmt6UNdGeIB0oxBs+WhAhdh08QA04JXpI7rbB9r08/nkbysKoya9rtDERYOYMA==} engines: {node: '>=18'} + p-map@7.0.4: + resolution: {integrity: sha512-tkAQEw8ysMzmkhgw8k+1U/iPhWNhykKnSk4Rd5zLoPJCuJaGRPo6YposrZgaxHKzDHdDWWZvE/Sk7hsL2X/CpQ==} + engines: {node: '>=18'} + p-queue@6.6.2: resolution: {integrity: sha512-RwFpb72c/BhQLEXIZ5K2e+AhgNVmIejGlTgiB9MzZ0e93GRvqZ7uSi0dvRF7/XIXDeNkra2fNHBxTyPDGySpjQ==} engines: {node: '>=8'} @@ -15083,6 +15090,8 @@ snapshots: '@ckeditor/ckeditor5-core': 47.3.0 '@ckeditor/ckeditor5-upload': 47.3.0 ckeditor5: 47.3.0 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-ai@47.3.0(bufferutil@4.0.9)(utf-8-validate@6.0.5)': dependencies: @@ -15223,6 +15232,8 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.3.0 '@ckeditor/ckeditor5-widget': 47.3.0 es-toolkit: 1.39.5 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-cloud-services@47.3.0': dependencies: @@ -15296,6 +15307,8 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.3.0 '@ckeditor/ckeditor5-watchdog': 47.3.0 es-toolkit: 1.39.5 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-dev-build-tools@54.3.0(@swc/helpers@0.5.17)(tslib@2.8.1)(typescript@5.9.3)': dependencies: @@ -15421,6 +15434,8 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.3.0 ckeditor5: 47.3.0 es-toolkit: 1.39.5 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-editor-classic@47.3.0': dependencies: @@ -15430,6 +15445,8 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.3.0 ckeditor5: 47.3.0 es-toolkit: 1.39.5 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-editor-decoupled@47.3.0': dependencies: @@ -15439,6 +15456,8 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.3.0 ckeditor5: 47.3.0 es-toolkit: 1.39.5 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-editor-inline@47.3.0': dependencies: @@ -15448,6 +15467,8 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.3.0 ckeditor5: 47.3.0 es-toolkit: 1.39.5 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-editor-multi-root@47.3.0': dependencies: @@ -15470,8 +15491,6 @@ snapshots: '@ckeditor/ckeditor5-table': 47.3.0 '@ckeditor/ckeditor5-utils': 47.3.0 ckeditor5: 47.3.0 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-emoji@47.3.0': dependencies: @@ -15528,8 +15547,6 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.3.0 '@ckeditor/ckeditor5-utils': 47.3.0 ckeditor5: 47.3.0 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-export-word@47.3.0': dependencies: @@ -15554,6 +15571,8 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.3.0 ckeditor5: 47.3.0 es-toolkit: 1.39.5 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-font@47.3.0': dependencies: @@ -15628,6 +15647,8 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.3.0 '@ckeditor/ckeditor5-widget': 47.3.0 ckeditor5: 47.3.0 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-html-embed@47.3.0': dependencies: @@ -15687,8 +15708,6 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.3.0 '@ckeditor/ckeditor5-utils': 47.3.0 ckeditor5: 47.3.0 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-indent@47.3.0': dependencies: @@ -15737,8 +15756,6 @@ snapshots: '@ckeditor/ckeditor5-widget': 47.3.0 ckeditor5: 47.3.0 es-toolkit: 1.39.5 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-list-multi-level@47.3.0': dependencies: @@ -15801,8 +15818,6 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.3.0 '@ckeditor/ckeditor5-widget': 47.3.0 ckeditor5: 47.3.0 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-mention@47.3.0(patch_hash=5981fb59ba35829e4dff1d39cf771000f8a8fdfa7a34b51d8af9549541f2d62d)': dependencies: @@ -15812,8 +15827,6 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.3.0 ckeditor5: 47.3.0 es-toolkit: 1.39.5 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-merge-fields@47.3.0': dependencies: @@ -15826,8 +15839,6 @@ snapshots: '@ckeditor/ckeditor5-widget': 47.3.0 ckeditor5: 47.3.0 es-toolkit: 1.39.5 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-minimap@47.3.0': dependencies: @@ -15836,8 +15847,6 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.3.0 '@ckeditor/ckeditor5-utils': 47.3.0 ckeditor5: 47.3.0 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-operations-compressor@47.3.0': dependencies: @@ -15892,8 +15901,6 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.3.0 '@ckeditor/ckeditor5-widget': 47.3.0 ckeditor5: 47.3.0 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-pagination@47.3.0': dependencies: @@ -16001,8 +16008,6 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.3.0 '@ckeditor/ckeditor5-utils': 47.3.0 ckeditor5: 47.3.0 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-slash-command@47.3.0': dependencies: @@ -16015,8 +16020,6 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.3.0 '@ckeditor/ckeditor5-utils': 47.3.0 ckeditor5: 47.3.0 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-source-editing-enhanced@47.3.0': dependencies: @@ -16064,8 +16067,6 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.3.0 ckeditor5: 47.3.0 es-toolkit: 1.39.5 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-table@47.3.0': dependencies: @@ -16078,8 +16079,6 @@ snapshots: '@ckeditor/ckeditor5-widget': 47.3.0 ckeditor5: 47.3.0 es-toolkit: 1.39.5 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-template@47.3.0': dependencies: @@ -16190,8 +16189,6 @@ snapshots: '@ckeditor/ckeditor5-engine': 47.3.0 '@ckeditor/ckeditor5-utils': 47.3.0 es-toolkit: 1.39.5 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-widget@47.3.0': dependencies: @@ -16211,8 +16208,6 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.3.0 ckeditor5: 47.3.0 es-toolkit: 1.39.5 - transitivePeerDependencies: - - supports-color '@codemirror/autocomplete@6.18.6': dependencies: @@ -16829,13 +16824,13 @@ snapshots: transitivePeerDependencies: - supports-color - '@emnapi/core@1.7.1': + '@emnapi/core@1.8.1': dependencies: '@emnapi/wasi-threads': 1.1.0 tslib: 2.8.1 optional: true - '@emnapi/runtime@1.7.1': + '@emnapi/runtime@1.8.1': dependencies: tslib: 2.8.1 optional: true @@ -18170,10 +18165,10 @@ snapshots: '@napi-rs/canvas-win32-x64-msvc': 0.1.88 optional: true - '@napi-rs/wasm-runtime@1.1.0': + '@napi-rs/wasm-runtime@1.1.1': dependencies: - '@emnapi/core': 1.7.1 - '@emnapi/runtime': 1.7.1 + '@emnapi/core': 1.8.1 + '@emnapi/runtime': 1.8.1 '@tybys/wasm-util': 0.10.1 optional: true @@ -18386,65 +18381,65 @@ snapshots: dependencies: '@noble/hashes': 1.8.0 - '@parcel/watcher-android-arm64@2.5.1': + '@parcel/watcher-android-arm64@2.5.4': optional: true - '@parcel/watcher-darwin-arm64@2.5.1': + '@parcel/watcher-darwin-arm64@2.5.4': optional: true - '@parcel/watcher-darwin-x64@2.5.1': + '@parcel/watcher-darwin-x64@2.5.4': optional: true - '@parcel/watcher-freebsd-x64@2.5.1': + '@parcel/watcher-freebsd-x64@2.5.4': optional: true - '@parcel/watcher-linux-arm-glibc@2.5.1': + '@parcel/watcher-linux-arm-glibc@2.5.4': optional: true - '@parcel/watcher-linux-arm-musl@2.5.1': + '@parcel/watcher-linux-arm-musl@2.5.4': optional: true - '@parcel/watcher-linux-arm64-glibc@2.5.1': + '@parcel/watcher-linux-arm64-glibc@2.5.4': optional: true - '@parcel/watcher-linux-arm64-musl@2.5.1': + '@parcel/watcher-linux-arm64-musl@2.5.4': optional: true - '@parcel/watcher-linux-x64-glibc@2.5.1': + '@parcel/watcher-linux-x64-glibc@2.5.4': optional: true - '@parcel/watcher-linux-x64-musl@2.5.1': + '@parcel/watcher-linux-x64-musl@2.5.4': optional: true - '@parcel/watcher-win32-arm64@2.5.1': + '@parcel/watcher-win32-arm64@2.5.4': optional: true - '@parcel/watcher-win32-ia32@2.5.1': + '@parcel/watcher-win32-ia32@2.5.4': optional: true - '@parcel/watcher-win32-x64@2.5.1': + '@parcel/watcher-win32-x64@2.5.4': optional: true - '@parcel/watcher@2.5.1': + '@parcel/watcher@2.5.4': dependencies: - detect-libc: 1.0.3 + detect-libc: 2.1.2 is-glob: 4.0.3 - micromatch: 4.0.8 node-addon-api: 7.1.1 + picomatch: 4.0.3 optionalDependencies: - '@parcel/watcher-android-arm64': 2.5.1 - '@parcel/watcher-darwin-arm64': 2.5.1 - '@parcel/watcher-darwin-x64': 2.5.1 - '@parcel/watcher-freebsd-x64': 2.5.1 - '@parcel/watcher-linux-arm-glibc': 2.5.1 - '@parcel/watcher-linux-arm-musl': 2.5.1 - '@parcel/watcher-linux-arm64-glibc': 2.5.1 - '@parcel/watcher-linux-arm64-musl': 2.5.1 - '@parcel/watcher-linux-x64-glibc': 2.5.1 - '@parcel/watcher-linux-x64-musl': 2.5.1 - '@parcel/watcher-win32-arm64': 2.5.1 - '@parcel/watcher-win32-ia32': 2.5.1 - '@parcel/watcher-win32-x64': 2.5.1 + '@parcel/watcher-android-arm64': 2.5.4 + '@parcel/watcher-darwin-arm64': 2.5.4 + '@parcel/watcher-darwin-x64': 2.5.4 + '@parcel/watcher-freebsd-x64': 2.5.4 + '@parcel/watcher-linux-arm-glibc': 2.5.4 + '@parcel/watcher-linux-arm-musl': 2.5.4 + '@parcel/watcher-linux-arm64-glibc': 2.5.4 + '@parcel/watcher-linux-arm64-musl': 2.5.4 + '@parcel/watcher-linux-x64-glibc': 2.5.4 + '@parcel/watcher-linux-x64-musl': 2.5.4 + '@parcel/watcher-win32-arm64': 2.5.4 + '@parcel/watcher-win32-ia32': 2.5.4 + '@parcel/watcher-win32-x64': 2.5.4 optional: true '@phosphor-icons/web@2.1.2': {} @@ -18838,7 +18833,7 @@ snapshots: '@redocly/ajv@8.17.1': dependencies: fast-deep-equal: 3.1.3 - fast-uri: 3.0.6 + fast-uri: 3.1.0 json-schema-traverse: 1.0.0 require-from-string: 2.0.2 @@ -18984,7 +18979,7 @@ snapshots: '@rolldown/binding-wasm32-wasi@1.0.0-beta.29': dependencies: - '@napi-rs/wasm-runtime': 1.1.0 + '@napi-rs/wasm-runtime': 1.1.1 optional: true '@rolldown/binding-win32-arm64-msvc@1.0.0-beta.29': @@ -21091,7 +21086,7 @@ snapshots: ajv@8.17.1: dependencies: fast-deep-equal: 3.1.3 - fast-uri: 3.0.6 + fast-uri: 3.1.0 json-schema-traverse: 1.0.0 require-from-string: 2.0.2 @@ -21632,13 +21627,13 @@ snapshots: dependencies: '@npmcli/fs': 4.0.0 fs-minipass: 3.0.3 - glob: 10.4.5 + glob: 10.5.0 lru-cache: 10.4.3 minipass: 7.1.2 minipass-collect: 2.0.1 minipass-flush: 1.0.5 minipass-pipeline: 1.2.4 - p-map: 7.0.3 + p-map: 7.0.4 ssri: 12.0.0 tar: 7.4.3 unique-filename: 4.0.0 @@ -21653,7 +21648,7 @@ snapshots: minipass-collect: 2.0.1 minipass-flush: 1.0.5 minipass-pipeline: 1.2.4 - p-map: 7.0.3 + p-map: 7.0.4 ssri: 12.0.0 unique-filename: 4.0.0 @@ -21830,8 +21825,6 @@ snapshots: ckeditor5-collaboration@47.3.0: dependencies: '@ckeditor/ckeditor5-collaboration-core': 47.3.0 - transitivePeerDependencies: - - supports-color ckeditor5-premium-features@47.3.0(bufferutil@4.0.9)(ckeditor5@47.3.0)(utf-8-validate@6.0.5): dependencies: @@ -22876,9 +22869,6 @@ snapshots: detect-pointer: 1.0.3 detect-touch-events: 2.0.2 - detect-libc@1.0.3: - optional: true - detect-libc@2.1.1: {} detect-libc@2.1.2: {} @@ -23947,7 +23937,7 @@ snapshots: fast-safe-stringify@2.1.1: {} - fast-uri@3.0.6: {} + fast-uri@3.1.0: {} fast-xml-parser@4.4.1: dependencies: @@ -24411,6 +24401,15 @@ snapshots: package-json-from-dist: 1.0.1 path-scurry: 1.11.1 + glob@10.5.0: + dependencies: + foreground-child: 3.3.1 + jackspeak: 3.4.3 + minimatch: 9.0.5 + minipass: 7.1.2 + package-json-from-dist: 1.0.1 + path-scurry: 1.11.1 + glob@11.0.3: dependencies: foreground-child: 3.3.1 @@ -25059,6 +25058,8 @@ snapshots: ip-address@10.0.1: {} + ip-address@10.1.0: {} + ip-address@9.0.5: dependencies: jsbn: 1.1.0 @@ -27222,6 +27223,8 @@ snapshots: p-map@7.0.3: {} + p-map@7.0.4: {} + p-queue@6.6.2: dependencies: eventemitter3: 4.0.7 @@ -28836,7 +28839,7 @@ snapshots: immutable: 5.1.4 source-map-js: 1.2.1 optionalDependencies: - '@parcel/watcher': 2.5.1 + '@parcel/watcher': 2.5.4 optional: true sax@1.4.4: {} @@ -29258,7 +29261,7 @@ snapshots: socks@2.8.7: dependencies: - ip-address: 10.0.1 + ip-address: 10.1.0 smart-buffer: 4.2.0 sort-keys-length@1.0.1: From 9c61ce1835a412b07bdfae6b97baa631c38e9937 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 15 Jan 2026 01:59:39 +0000 Subject: [PATCH 048/353] fix(deps): update dependency @codemirror/view to v6.39.11 --- packages/codemirror/package.json | 2 +- pnpm-lock.yaml | 208 ++++++++++++++++--------------- 2 files changed, 110 insertions(+), 100 deletions(-) diff --git a/packages/codemirror/package.json b/packages/codemirror/package.json index 5dfd7c44c9..e3b832a4b8 100644 --- a/packages/codemirror/package.json +++ b/packages/codemirror/package.json @@ -16,7 +16,7 @@ "@codemirror/lang-xml": "6.1.0", "@codemirror/legacy-modes": "6.5.2", "@codemirror/search": "6.6.0", - "@codemirror/view": "6.39.10", + "@codemirror/view": "6.39.11", "@fsegurai/codemirror-theme-abcdef": "6.2.3", "@fsegurai/codemirror-theme-abyss": "6.2.3", "@fsegurai/codemirror-theme-android-studio": "6.2.3", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index c5bee061f5..886882795d 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1244,89 +1244,89 @@ importers: specifier: 6.6.0 version: 6.6.0 '@codemirror/view': - specifier: 6.39.10 - version: 6.39.10 + specifier: 6.39.11 + version: 6.39.11 '@fsegurai/codemirror-theme-abcdef': specifier: 6.2.3 - version: 6.2.3(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.39.10)(@lezer/highlight@1.2.1) + version: 6.2.3(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.39.11)(@lezer/highlight@1.2.1) '@fsegurai/codemirror-theme-abyss': specifier: 6.2.3 - version: 6.2.3(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.39.10)(@lezer/highlight@1.2.1) + version: 6.2.3(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.39.11)(@lezer/highlight@1.2.1) '@fsegurai/codemirror-theme-android-studio': specifier: 6.2.3 - version: 6.2.3(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.39.10)(@lezer/highlight@1.2.1) + version: 6.2.3(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.39.11)(@lezer/highlight@1.2.1) '@fsegurai/codemirror-theme-andromeda': specifier: 6.2.3 - version: 6.2.3(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.39.10)(@lezer/highlight@1.2.1) + version: 6.2.3(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.39.11)(@lezer/highlight@1.2.1) '@fsegurai/codemirror-theme-basic-dark': specifier: 6.2.3 - version: 6.2.3(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.39.10)(@lezer/highlight@1.2.1) + version: 6.2.3(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.39.11)(@lezer/highlight@1.2.1) '@fsegurai/codemirror-theme-basic-light': specifier: 6.2.3 - version: 6.2.3(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.39.10)(@lezer/highlight@1.2.1) + version: 6.2.3(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.39.11)(@lezer/highlight@1.2.1) '@fsegurai/codemirror-theme-cobalt2': specifier: 6.0.3 - version: 6.0.3(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.39.10)(@lezer/highlight@1.2.1) + version: 6.0.3(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.39.11)(@lezer/highlight@1.2.1) '@fsegurai/codemirror-theme-forest': specifier: 6.2.3 - version: 6.2.3(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.39.10)(@lezer/highlight@1.2.1) + version: 6.2.3(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.39.11)(@lezer/highlight@1.2.1) '@fsegurai/codemirror-theme-github-dark': specifier: 6.2.3 - version: 6.2.3(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.39.10)(@lezer/highlight@1.2.1) + version: 6.2.3(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.39.11)(@lezer/highlight@1.2.1) '@fsegurai/codemirror-theme-github-light': specifier: 6.2.3 - version: 6.2.3(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.39.10)(@lezer/highlight@1.2.1) + version: 6.2.3(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.39.11)(@lezer/highlight@1.2.1) '@fsegurai/codemirror-theme-gruvbox-dark': specifier: 6.2.3 - version: 6.2.3(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.39.10)(@lezer/highlight@1.2.1) + version: 6.2.3(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.39.11)(@lezer/highlight@1.2.1) '@fsegurai/codemirror-theme-gruvbox-light': specifier: 6.2.3 - version: 6.2.3(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.39.10)(@lezer/highlight@1.2.1) + version: 6.2.3(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.39.11)(@lezer/highlight@1.2.1) '@fsegurai/codemirror-theme-material-dark': specifier: 6.2.3 - version: 6.2.3(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.39.10)(@lezer/highlight@1.2.1) + version: 6.2.3(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.39.11)(@lezer/highlight@1.2.1) '@fsegurai/codemirror-theme-material-light': specifier: 6.2.3 - version: 6.2.3(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.39.10)(@lezer/highlight@1.2.1) + version: 6.2.3(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.39.11)(@lezer/highlight@1.2.1) '@fsegurai/codemirror-theme-monokai': specifier: 6.2.3 - version: 6.2.3(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.39.10)(@lezer/highlight@1.2.1) + version: 6.2.3(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.39.11)(@lezer/highlight@1.2.1) '@fsegurai/codemirror-theme-nord': specifier: 6.2.3 - version: 6.2.3(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.39.10)(@lezer/highlight@1.2.1) + version: 6.2.3(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.39.11)(@lezer/highlight@1.2.1) '@fsegurai/codemirror-theme-palenight': specifier: 6.2.3 - version: 6.2.3(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.39.10)(@lezer/highlight@1.2.1) + version: 6.2.3(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.39.11)(@lezer/highlight@1.2.1) '@fsegurai/codemirror-theme-solarized-dark': specifier: 6.2.3 - version: 6.2.3(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.39.10)(@lezer/highlight@1.2.1) + version: 6.2.3(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.39.11)(@lezer/highlight@1.2.1) '@fsegurai/codemirror-theme-solarized-light': specifier: 6.2.3 - version: 6.2.3(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.39.10)(@lezer/highlight@1.2.1) + version: 6.2.3(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.39.11)(@lezer/highlight@1.2.1) '@fsegurai/codemirror-theme-tokyo-night-day': specifier: 6.2.3 - version: 6.2.3(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.39.10)(@lezer/highlight@1.2.1) + version: 6.2.3(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.39.11)(@lezer/highlight@1.2.1) '@fsegurai/codemirror-theme-tokyo-night-storm': specifier: 6.2.3 - version: 6.2.3(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.39.10)(@lezer/highlight@1.2.1) + version: 6.2.3(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.39.11)(@lezer/highlight@1.2.1) '@fsegurai/codemirror-theme-volcano': specifier: 6.2.3 - version: 6.2.3(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.39.10)(@lezer/highlight@1.2.1) + version: 6.2.3(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.39.11)(@lezer/highlight@1.2.1) '@fsegurai/codemirror-theme-vscode-dark': specifier: 6.2.3 - version: 6.2.3(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.39.10)(@lezer/highlight@1.2.1) + version: 6.2.3(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.39.11)(@lezer/highlight@1.2.1) '@fsegurai/codemirror-theme-vscode-light': specifier: 6.2.3 - version: 6.2.3(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.39.10)(@lezer/highlight@1.2.1) + version: 6.2.3(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.39.11)(@lezer/highlight@1.2.1) '@replit/codemirror-indentation-markers': specifier: 6.5.3 - version: 6.5.3(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.39.10) + version: 6.5.3(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.39.11) '@replit/codemirror-lang-nix': specifier: 6.0.1 - version: 6.0.1(@codemirror/autocomplete@6.18.6)(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.39.10)(@lezer/common@1.2.3)(@lezer/highlight@1.2.1)(@lezer/lr@1.4.2) + version: 6.0.1(@codemirror/autocomplete@6.18.6)(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.39.11)(@lezer/common@1.2.3)(@lezer/highlight@1.2.1)(@lezer/lr@1.4.2) '@replit/codemirror-vim': specifier: 6.3.0 - version: 6.3.0(@codemirror/commands@6.10.1)(@codemirror/language@6.11.0)(@codemirror/search@6.6.0)(@codemirror/state@6.5.2)(@codemirror/view@6.39.10) + version: 6.3.0(@codemirror/commands@6.10.1)(@codemirror/language@6.11.0)(@codemirror/search@6.6.0)(@codemirror/state@6.5.2)(@codemirror/view@6.39.11) '@ssddanbrown/codemirror-lang-smarty': specifier: 1.0.0 version: 1.0.0 @@ -2131,8 +2131,8 @@ packages: '@codemirror/theme-one-dark@6.1.2': resolution: {integrity: sha512-F+sH0X16j/qFLMAfbciKTxVOwkdAS336b7AXTKOZhy8BR3eH/RelsnLgLFINrpST63mmN2OuwUt0W2ndUgYwUA==} - '@codemirror/view@6.39.10': - resolution: {integrity: sha512-QfT/PXhiiP76PxMnX0RQVPDQrqfRt9wr9QhInNHnEUu4PWoNS8QwwcIDEneXFChJv22y+Yu/Cz5lFMTPz+h16w==} + '@codemirror/view@6.39.11': + resolution: {integrity: sha512-bWdeR8gWM87l4DB/kYSF9A+dVackzDb/V56Tq7QVrQ7rn86W0rgZFtlL3g3pem6AeGcb9NQNoy3ao4WpW4h5tQ==} '@colors/colors@1.5.0': resolution: {integrity: sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==} @@ -15296,6 +15296,8 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.3.0 '@ckeditor/ckeditor5-watchdog': 47.3.0 es-toolkit: 1.39.5 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-dev-build-tools@54.3.0(@swc/helpers@0.5.17)(tslib@2.8.1)(typescript@5.9.3)': dependencies: @@ -15421,6 +15423,8 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.3.0 ckeditor5: 47.3.0 es-toolkit: 1.39.5 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-editor-classic@47.3.0': dependencies: @@ -15448,6 +15452,8 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.3.0 ckeditor5: 47.3.0 es-toolkit: 1.39.5 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-editor-multi-root@47.3.0': dependencies: @@ -15497,6 +15503,8 @@ snapshots: '@ckeditor/ckeditor5-core': 47.3.0 '@ckeditor/ckeditor5-engine': 47.3.0 '@ckeditor/ckeditor5-utils': 47.3.0 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-essentials@47.3.0': dependencies: @@ -15957,6 +15965,8 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.3.0 '@ckeditor/ckeditor5-utils': 47.3.0 ckeditor5: 47.3.0 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-restricted-editing@47.3.0': dependencies: @@ -16032,7 +16042,7 @@ snapshots: '@codemirror/language': 6.11.0 '@codemirror/state': 6.5.2 '@codemirror/theme-one-dark': 6.1.2 - '@codemirror/view': 6.39.10 + '@codemirror/view': 6.39.11 ckeditor5: 47.3.0 '@ckeditor/ckeditor5-source-editing@47.3.0': @@ -16218,21 +16228,21 @@ snapshots: dependencies: '@codemirror/language': 6.11.0 '@codemirror/state': 6.5.2 - '@codemirror/view': 6.39.10 + '@codemirror/view': 6.39.11 '@lezer/common': 1.2.3 '@codemirror/commands@6.10.1': dependencies: '@codemirror/language': 6.11.0 '@codemirror/state': 6.5.2 - '@codemirror/view': 6.39.10 + '@codemirror/view': 6.39.11 '@lezer/common': 1.2.3 '@codemirror/commands@6.8.1': dependencies: '@codemirror/language': 6.11.0 '@codemirror/state': 6.5.2 - '@codemirror/view': 6.39.10 + '@codemirror/view': 6.39.11 '@lezer/common': 1.2.3 '@codemirror/lang-css@6.3.1': @@ -16250,7 +16260,7 @@ snapshots: '@codemirror/lang-javascript': 6.2.4 '@codemirror/language': 6.11.0 '@codemirror/state': 6.5.2 - '@codemirror/view': 6.39.10 + '@codemirror/view': 6.39.11 '@lezer/common': 1.2.3 '@lezer/css': 1.1.11 '@lezer/html': 1.3.12 @@ -16261,7 +16271,7 @@ snapshots: '@codemirror/language': 6.11.0 '@codemirror/lint': 6.8.5 '@codemirror/state': 6.5.2 - '@codemirror/view': 6.39.10 + '@codemirror/view': 6.39.11 '@lezer/common': 1.2.3 '@lezer/javascript': 1.5.1 @@ -16276,7 +16286,7 @@ snapshots: '@codemirror/lang-html': 6.4.11 '@codemirror/language': 6.11.0 '@codemirror/state': 6.5.2 - '@codemirror/view': 6.39.10 + '@codemirror/view': 6.39.11 '@lezer/common': 1.2.3 '@lezer/markdown': 1.4.3 @@ -16286,7 +16296,7 @@ snapshots: '@codemirror/lang-html': 6.4.11 '@codemirror/language': 6.11.0 '@codemirror/state': 6.5.2 - '@codemirror/view': 6.39.10 + '@codemirror/view': 6.39.11 '@lezer/common': 1.2.3 '@lezer/markdown': 1.4.3 @@ -16312,14 +16322,14 @@ snapshots: '@codemirror/autocomplete': 6.18.6 '@codemirror/language': 6.11.0 '@codemirror/state': 6.5.2 - '@codemirror/view': 6.39.10 + '@codemirror/view': 6.39.11 '@lezer/common': 1.2.3 '@lezer/xml': 1.0.6 '@codemirror/language@6.11.0': dependencies: '@codemirror/state': 6.5.2 - '@codemirror/view': 6.39.10 + '@codemirror/view': 6.39.11 '@lezer/common': 1.2.3 '@lezer/highlight': 1.2.1 '@lezer/lr': 1.4.2 @@ -16332,13 +16342,13 @@ snapshots: '@codemirror/lint@6.8.5': dependencies: '@codemirror/state': 6.5.2 - '@codemirror/view': 6.39.10 + '@codemirror/view': 6.39.11 crelt: 1.0.6 '@codemirror/search@6.6.0': dependencies: '@codemirror/state': 6.5.2 - '@codemirror/view': 6.39.10 + '@codemirror/view': 6.39.11 crelt: 1.0.6 '@codemirror/state@6.5.2': @@ -16349,10 +16359,10 @@ snapshots: dependencies: '@codemirror/language': 6.11.0 '@codemirror/state': 6.5.2 - '@codemirror/view': 6.39.10 + '@codemirror/view': 6.39.11 '@lezer/highlight': 1.2.1 - '@codemirror/view@6.39.10': + '@codemirror/view@6.39.11': dependencies: '@codemirror/state': 6.5.2 crelt: 1.0.6 @@ -17268,172 +17278,172 @@ snapshots: '@floating-ui/utils@0.2.9': {} - '@fsegurai/codemirror-theme-abcdef@6.2.3(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.39.10)(@lezer/highlight@1.2.1)': + '@fsegurai/codemirror-theme-abcdef@6.2.3(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.39.11)(@lezer/highlight@1.2.1)': dependencies: '@codemirror/language': 6.11.0 '@codemirror/state': 6.5.2 - '@codemirror/view': 6.39.10 + '@codemirror/view': 6.39.11 '@lezer/highlight': 1.2.1 - '@fsegurai/codemirror-theme-abyss@6.2.3(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.39.10)(@lezer/highlight@1.2.1)': + '@fsegurai/codemirror-theme-abyss@6.2.3(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.39.11)(@lezer/highlight@1.2.1)': dependencies: '@codemirror/language': 6.11.0 '@codemirror/state': 6.5.2 - '@codemirror/view': 6.39.10 + '@codemirror/view': 6.39.11 '@lezer/highlight': 1.2.1 - '@fsegurai/codemirror-theme-android-studio@6.2.3(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.39.10)(@lezer/highlight@1.2.1)': + '@fsegurai/codemirror-theme-android-studio@6.2.3(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.39.11)(@lezer/highlight@1.2.1)': dependencies: '@codemirror/language': 6.11.0 '@codemirror/state': 6.5.2 - '@codemirror/view': 6.39.10 + '@codemirror/view': 6.39.11 '@lezer/highlight': 1.2.1 - '@fsegurai/codemirror-theme-andromeda@6.2.3(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.39.10)(@lezer/highlight@1.2.1)': + '@fsegurai/codemirror-theme-andromeda@6.2.3(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.39.11)(@lezer/highlight@1.2.1)': dependencies: '@codemirror/language': 6.11.0 '@codemirror/state': 6.5.2 - '@codemirror/view': 6.39.10 + '@codemirror/view': 6.39.11 '@lezer/highlight': 1.2.1 - '@fsegurai/codemirror-theme-basic-dark@6.2.3(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.39.10)(@lezer/highlight@1.2.1)': + '@fsegurai/codemirror-theme-basic-dark@6.2.3(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.39.11)(@lezer/highlight@1.2.1)': dependencies: '@codemirror/language': 6.11.0 '@codemirror/state': 6.5.2 - '@codemirror/view': 6.39.10 + '@codemirror/view': 6.39.11 '@lezer/highlight': 1.2.1 - '@fsegurai/codemirror-theme-basic-light@6.2.3(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.39.10)(@lezer/highlight@1.2.1)': + '@fsegurai/codemirror-theme-basic-light@6.2.3(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.39.11)(@lezer/highlight@1.2.1)': dependencies: '@codemirror/language': 6.11.0 '@codemirror/state': 6.5.2 - '@codemirror/view': 6.39.10 + '@codemirror/view': 6.39.11 '@lezer/highlight': 1.2.1 - '@fsegurai/codemirror-theme-cobalt2@6.0.3(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.39.10)(@lezer/highlight@1.2.1)': + '@fsegurai/codemirror-theme-cobalt2@6.0.3(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.39.11)(@lezer/highlight@1.2.1)': dependencies: '@codemirror/language': 6.11.0 '@codemirror/state': 6.5.2 - '@codemirror/view': 6.39.10 + '@codemirror/view': 6.39.11 '@lezer/highlight': 1.2.1 - '@fsegurai/codemirror-theme-forest@6.2.3(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.39.10)(@lezer/highlight@1.2.1)': + '@fsegurai/codemirror-theme-forest@6.2.3(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.39.11)(@lezer/highlight@1.2.1)': dependencies: '@codemirror/language': 6.11.0 '@codemirror/state': 6.5.2 - '@codemirror/view': 6.39.10 + '@codemirror/view': 6.39.11 '@lezer/highlight': 1.2.1 - '@fsegurai/codemirror-theme-github-dark@6.2.3(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.39.10)(@lezer/highlight@1.2.1)': + '@fsegurai/codemirror-theme-github-dark@6.2.3(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.39.11)(@lezer/highlight@1.2.1)': dependencies: '@codemirror/language': 6.11.0 '@codemirror/state': 6.5.2 - '@codemirror/view': 6.39.10 + '@codemirror/view': 6.39.11 '@lezer/highlight': 1.2.1 - '@fsegurai/codemirror-theme-github-light@6.2.3(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.39.10)(@lezer/highlight@1.2.1)': + '@fsegurai/codemirror-theme-github-light@6.2.3(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.39.11)(@lezer/highlight@1.2.1)': dependencies: '@codemirror/language': 6.11.0 '@codemirror/state': 6.5.2 - '@codemirror/view': 6.39.10 + '@codemirror/view': 6.39.11 '@lezer/highlight': 1.2.1 - '@fsegurai/codemirror-theme-gruvbox-dark@6.2.3(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.39.10)(@lezer/highlight@1.2.1)': + '@fsegurai/codemirror-theme-gruvbox-dark@6.2.3(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.39.11)(@lezer/highlight@1.2.1)': dependencies: '@codemirror/language': 6.11.0 '@codemirror/state': 6.5.2 - '@codemirror/view': 6.39.10 + '@codemirror/view': 6.39.11 '@lezer/highlight': 1.2.1 - '@fsegurai/codemirror-theme-gruvbox-light@6.2.3(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.39.10)(@lezer/highlight@1.2.1)': + '@fsegurai/codemirror-theme-gruvbox-light@6.2.3(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.39.11)(@lezer/highlight@1.2.1)': dependencies: '@codemirror/language': 6.11.0 '@codemirror/state': 6.5.2 - '@codemirror/view': 6.39.10 + '@codemirror/view': 6.39.11 '@lezer/highlight': 1.2.1 - '@fsegurai/codemirror-theme-material-dark@6.2.3(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.39.10)(@lezer/highlight@1.2.1)': + '@fsegurai/codemirror-theme-material-dark@6.2.3(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.39.11)(@lezer/highlight@1.2.1)': dependencies: '@codemirror/language': 6.11.0 '@codemirror/state': 6.5.2 - '@codemirror/view': 6.39.10 + '@codemirror/view': 6.39.11 '@lezer/highlight': 1.2.1 - '@fsegurai/codemirror-theme-material-light@6.2.3(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.39.10)(@lezer/highlight@1.2.1)': + '@fsegurai/codemirror-theme-material-light@6.2.3(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.39.11)(@lezer/highlight@1.2.1)': dependencies: '@codemirror/language': 6.11.0 '@codemirror/state': 6.5.2 - '@codemirror/view': 6.39.10 + '@codemirror/view': 6.39.11 '@lezer/highlight': 1.2.1 - '@fsegurai/codemirror-theme-monokai@6.2.3(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.39.10)(@lezer/highlight@1.2.1)': + '@fsegurai/codemirror-theme-monokai@6.2.3(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.39.11)(@lezer/highlight@1.2.1)': dependencies: '@codemirror/language': 6.11.0 '@codemirror/state': 6.5.2 - '@codemirror/view': 6.39.10 + '@codemirror/view': 6.39.11 '@lezer/highlight': 1.2.1 - '@fsegurai/codemirror-theme-nord@6.2.3(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.39.10)(@lezer/highlight@1.2.1)': + '@fsegurai/codemirror-theme-nord@6.2.3(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.39.11)(@lezer/highlight@1.2.1)': dependencies: '@codemirror/language': 6.11.0 '@codemirror/state': 6.5.2 - '@codemirror/view': 6.39.10 + '@codemirror/view': 6.39.11 '@lezer/highlight': 1.2.1 - '@fsegurai/codemirror-theme-palenight@6.2.3(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.39.10)(@lezer/highlight@1.2.1)': + '@fsegurai/codemirror-theme-palenight@6.2.3(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.39.11)(@lezer/highlight@1.2.1)': dependencies: '@codemirror/language': 6.11.0 '@codemirror/state': 6.5.2 - '@codemirror/view': 6.39.10 + '@codemirror/view': 6.39.11 '@lezer/highlight': 1.2.1 - '@fsegurai/codemirror-theme-solarized-dark@6.2.3(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.39.10)(@lezer/highlight@1.2.1)': + '@fsegurai/codemirror-theme-solarized-dark@6.2.3(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.39.11)(@lezer/highlight@1.2.1)': dependencies: '@codemirror/language': 6.11.0 '@codemirror/state': 6.5.2 - '@codemirror/view': 6.39.10 + '@codemirror/view': 6.39.11 '@lezer/highlight': 1.2.1 - '@fsegurai/codemirror-theme-solarized-light@6.2.3(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.39.10)(@lezer/highlight@1.2.1)': + '@fsegurai/codemirror-theme-solarized-light@6.2.3(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.39.11)(@lezer/highlight@1.2.1)': dependencies: '@codemirror/language': 6.11.0 '@codemirror/state': 6.5.2 - '@codemirror/view': 6.39.10 + '@codemirror/view': 6.39.11 '@lezer/highlight': 1.2.1 - '@fsegurai/codemirror-theme-tokyo-night-day@6.2.3(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.39.10)(@lezer/highlight@1.2.1)': + '@fsegurai/codemirror-theme-tokyo-night-day@6.2.3(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.39.11)(@lezer/highlight@1.2.1)': dependencies: '@codemirror/language': 6.11.0 '@codemirror/state': 6.5.2 - '@codemirror/view': 6.39.10 + '@codemirror/view': 6.39.11 '@lezer/highlight': 1.2.1 - '@fsegurai/codemirror-theme-tokyo-night-storm@6.2.3(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.39.10)(@lezer/highlight@1.2.1)': + '@fsegurai/codemirror-theme-tokyo-night-storm@6.2.3(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.39.11)(@lezer/highlight@1.2.1)': dependencies: '@codemirror/language': 6.11.0 '@codemirror/state': 6.5.2 - '@codemirror/view': 6.39.10 + '@codemirror/view': 6.39.11 '@lezer/highlight': 1.2.1 - '@fsegurai/codemirror-theme-volcano@6.2.3(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.39.10)(@lezer/highlight@1.2.1)': + '@fsegurai/codemirror-theme-volcano@6.2.3(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.39.11)(@lezer/highlight@1.2.1)': dependencies: '@codemirror/language': 6.11.0 '@codemirror/state': 6.5.2 - '@codemirror/view': 6.39.10 + '@codemirror/view': 6.39.11 '@lezer/highlight': 1.2.1 - '@fsegurai/codemirror-theme-vscode-dark@6.2.3(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.39.10)(@lezer/highlight@1.2.1)': + '@fsegurai/codemirror-theme-vscode-dark@6.2.3(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.39.11)(@lezer/highlight@1.2.1)': dependencies: '@codemirror/language': 6.11.0 '@codemirror/state': 6.5.2 - '@codemirror/view': 6.39.10 + '@codemirror/view': 6.39.11 '@lezer/highlight': 1.2.1 - '@fsegurai/codemirror-theme-vscode-light@6.2.3(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.39.10)(@lezer/highlight@1.2.1)': + '@fsegurai/codemirror-theme-vscode-light@6.2.3(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.39.11)(@lezer/highlight@1.2.1)': dependencies: '@codemirror/language': 6.11.0 '@codemirror/state': 6.5.2 - '@codemirror/view': 6.39.10 + '@codemirror/view': 6.39.11 '@lezer/highlight': 1.2.1 '@fullcalendar/core@6.1.20': @@ -18928,29 +18938,29 @@ snapshots: openapi-sampler: 1.6.2 outdent: 0.8.0 - '@replit/codemirror-indentation-markers@6.5.3(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.39.10)': + '@replit/codemirror-indentation-markers@6.5.3(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.39.11)': dependencies: '@codemirror/language': 6.11.0 '@codemirror/state': 6.5.2 - '@codemirror/view': 6.39.10 + '@codemirror/view': 6.39.11 - '@replit/codemirror-lang-nix@6.0.1(@codemirror/autocomplete@6.18.6)(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.39.10)(@lezer/common@1.2.3)(@lezer/highlight@1.2.1)(@lezer/lr@1.4.2)': + '@replit/codemirror-lang-nix@6.0.1(@codemirror/autocomplete@6.18.6)(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.39.11)(@lezer/common@1.2.3)(@lezer/highlight@1.2.1)(@lezer/lr@1.4.2)': dependencies: '@codemirror/autocomplete': 6.18.6 '@codemirror/language': 6.11.0 '@codemirror/state': 6.5.2 - '@codemirror/view': 6.39.10 + '@codemirror/view': 6.39.11 '@lezer/common': 1.2.3 '@lezer/highlight': 1.2.1 '@lezer/lr': 1.4.2 - '@replit/codemirror-vim@6.3.0(@codemirror/commands@6.10.1)(@codemirror/language@6.11.0)(@codemirror/search@6.6.0)(@codemirror/state@6.5.2)(@codemirror/view@6.39.10)': + '@replit/codemirror-vim@6.3.0(@codemirror/commands@6.10.1)(@codemirror/language@6.11.0)(@codemirror/search@6.6.0)(@codemirror/state@6.5.2)(@codemirror/view@6.39.11)': dependencies: '@codemirror/commands': 6.10.1 '@codemirror/language': 6.11.0 '@codemirror/search': 6.6.0 '@codemirror/state': 6.5.2 - '@codemirror/view': 6.39.10 + '@codemirror/view': 6.39.11 '@rolldown/binding-android-arm64@1.0.0-beta.29': optional: true From 98e1d0afd9994bb59787c032ba480a8c0558f32a Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 15 Jan 2026 02:00:27 +0000 Subject: [PATCH 049/353] chore(deps): update dependency happy-dom to v20.3.0 --- apps/client/package.json | 2 +- package.json | 2 +- pnpm-lock.yaml | 48 +++++++++++++++++++++------------------- 3 files changed, 27 insertions(+), 25 deletions(-) diff --git a/apps/client/package.json b/apps/client/package.json index 523d1919b4..e289700b2e 100644 --- a/apps/client/package.json +++ b/apps/client/package.json @@ -78,7 +78,7 @@ "@types/reveal.js": "5.2.2", "@types/tabulator-tables": "6.3.1", "copy-webpack-plugin": "13.0.1", - "happy-dom": "20.1.0", + "happy-dom": "20.3.0", "lightningcss": "1.30.2", "script-loader": "0.7.2", "vite-plugin-static-copy": "3.1.4" diff --git a/package.json b/package.json index 6c6acd24bc..683213d23b 100644 --- a/package.json +++ b/package.json @@ -63,7 +63,7 @@ "eslint-config-prettier": "10.1.8", "eslint-plugin-playwright": "2.5.0", "eslint-plugin-simple-import-sort": "12.1.1", - "happy-dom": "20.1.0", + "happy-dom": "20.3.0", "http-server": "14.1.1", "jiti": "2.6.1", "js-yaml": "4.1.1", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index c5bee061f5..0fff145af1 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -92,8 +92,8 @@ importers: specifier: 12.1.1 version: 12.1.1(eslint@9.39.2(jiti@2.6.1)) happy-dom: - specifier: 20.1.0 - version: 20.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5) + specifier: 20.3.0 + version: 20.3.0(bufferutil@4.0.9)(utf-8-validate@6.0.5) http-server: specifier: 14.1.1 version: 14.1.1 @@ -135,7 +135,7 @@ importers: version: 4.5.4(@types/node@24.10.8)(rollup@4.52.0)(typescript@5.9.3)(vite@7.3.1(@types/node@24.10.8)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1)) vitest: specifier: 4.0.17 - version: 4.0.17(@opentelemetry/api@1.9.0)(@types/node@24.10.8)(@vitest/browser-webdriverio@4.0.17)(@vitest/ui@4.0.17)(happy-dom@20.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.2)(msw@2.7.5(@types/node@24.10.8)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) + version: 4.0.17(@opentelemetry/api@1.9.0)(@types/node@24.10.8)(@vitest/browser-webdriverio@4.0.17)(@vitest/ui@4.0.17)(happy-dom@20.3.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.2)(msw@2.7.5(@types/node@24.10.8)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) apps/build-docs: devDependencies: @@ -345,8 +345,8 @@ importers: specifier: 13.0.1 version: 13.0.1(webpack@5.101.3(esbuild@0.27.2)) happy-dom: - specifier: 20.1.0 - version: 20.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5) + specifier: 20.3.0 + version: 20.3.0(bufferutil@4.0.9)(utf-8-validate@6.0.5) lightningcss: specifier: 1.30.2 version: 1.30.2 @@ -858,7 +858,7 @@ importers: version: 7.3.1(@types/node@24.10.8)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) vitest: specifier: 4.0.17 - version: 4.0.17(@opentelemetry/api@1.9.0)(@types/node@24.10.8)(@vitest/browser-webdriverio@4.0.17)(@vitest/ui@4.0.17)(happy-dom@20.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.2)(msw@2.7.5(@types/node@24.10.8)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) + version: 4.0.17(@opentelemetry/api@1.9.0)(@types/node@24.10.8)(@vitest/browser-webdriverio@4.0.17)(@vitest/ui@4.0.17)(happy-dom@20.3.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.2)(msw@2.7.5(@types/node@24.10.8)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) packages/ckeditor5: dependencies: @@ -949,7 +949,7 @@ importers: version: 2.0.0(typescript@5.9.3)(vite@7.3.1(@types/node@24.10.8)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1)) vitest: specifier: 4.0.17 - version: 4.0.17(@opentelemetry/api@1.9.0)(@types/node@24.10.8)(@vitest/browser-webdriverio@4.0.17)(@vitest/ui@4.0.17)(happy-dom@20.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.2)(msw@2.7.5(@types/node@24.10.8)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) + version: 4.0.17(@opentelemetry/api@1.9.0)(@types/node@24.10.8)(@vitest/browser-webdriverio@4.0.17)(@vitest/ui@4.0.17)(happy-dom@20.3.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.2)(msw@2.7.5(@types/node@24.10.8)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) webdriverio: specifier: 9.23.0 version: 9.23.0(bufferutil@4.0.9)(utf-8-validate@6.0.5) @@ -1009,7 +1009,7 @@ importers: version: 2.0.0(typescript@5.9.3)(vite@7.3.1(@types/node@24.10.8)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1)) vitest: specifier: 4.0.17 - version: 4.0.17(@opentelemetry/api@1.9.0)(@types/node@24.10.8)(@vitest/browser-webdriverio@4.0.17)(@vitest/ui@4.0.17)(happy-dom@20.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.2)(msw@2.7.5(@types/node@24.10.8)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) + version: 4.0.17(@opentelemetry/api@1.9.0)(@types/node@24.10.8)(@vitest/browser-webdriverio@4.0.17)(@vitest/ui@4.0.17)(happy-dom@20.3.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.2)(msw@2.7.5(@types/node@24.10.8)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) webdriverio: specifier: 9.23.0 version: 9.23.0(bufferutil@4.0.9)(utf-8-validate@6.0.5) @@ -1069,7 +1069,7 @@ importers: version: 2.0.0(typescript@5.9.3)(vite@7.3.1(@types/node@24.10.8)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1)) vitest: specifier: 4.0.17 - version: 4.0.17(@opentelemetry/api@1.9.0)(@types/node@24.10.8)(@vitest/browser-webdriverio@4.0.17)(@vitest/ui@4.0.17)(happy-dom@20.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.2)(msw@2.7.5(@types/node@24.10.8)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) + version: 4.0.17(@opentelemetry/api@1.9.0)(@types/node@24.10.8)(@vitest/browser-webdriverio@4.0.17)(@vitest/ui@4.0.17)(happy-dom@20.3.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.2)(msw@2.7.5(@types/node@24.10.8)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) webdriverio: specifier: 9.23.0 version: 9.23.0(bufferutil@4.0.9)(utf-8-validate@6.0.5) @@ -1136,7 +1136,7 @@ importers: version: 2.0.0(typescript@5.9.3)(vite@7.3.1(@types/node@24.10.8)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1)) vitest: specifier: 4.0.17 - version: 4.0.17(@opentelemetry/api@1.9.0)(@types/node@24.10.8)(@vitest/browser-webdriverio@4.0.17)(@vitest/ui@4.0.17)(happy-dom@20.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.2)(msw@2.7.5(@types/node@24.10.8)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) + version: 4.0.17(@opentelemetry/api@1.9.0)(@types/node@24.10.8)(@vitest/browser-webdriverio@4.0.17)(@vitest/ui@4.0.17)(happy-dom@20.3.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.2)(msw@2.7.5(@types/node@24.10.8)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) webdriverio: specifier: 9.23.0 version: 9.23.0(bufferutil@4.0.9)(utf-8-validate@6.0.5) @@ -1203,7 +1203,7 @@ importers: version: 2.0.0(typescript@5.9.3)(vite@7.3.1(@types/node@24.10.8)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1)) vitest: specifier: 4.0.17 - version: 4.0.17(@opentelemetry/api@1.9.0)(@types/node@24.10.8)(@vitest/browser-webdriverio@4.0.17)(@vitest/ui@4.0.17)(happy-dom@20.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.2)(msw@2.7.5(@types/node@24.10.8)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) + version: 4.0.17(@opentelemetry/api@1.9.0)(@types/node@24.10.8)(@vitest/browser-webdriverio@4.0.17)(@vitest/ui@4.0.17)(happy-dom@20.3.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.2)(msw@2.7.5(@types/node@24.10.8)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) webdriverio: specifier: 9.23.0 version: 9.23.0(bufferutil@4.0.9)(utf-8-validate@6.0.5) @@ -8792,8 +8792,8 @@ packages: engines: {node: '>=0.4.7'} hasBin: true - happy-dom@20.1.0: - resolution: {integrity: sha512-ebvqjBqzenBk2LjzNEAzoj7yhw7rW/R2/wVevMu6Mrq3MXtcI/RUz4+ozpcOcqVLEWPqLfg2v9EAU7fFXZUUJw==} + happy-dom@20.3.0: + resolution: {integrity: sha512-5qJbkqcvR8j/a4av5IWqqIWmEGf9dt6OhGMS6qxCgjSOBGzGa5XLoqg40OyD8XNzQ+g1g2zsXi10kjfpzYH55Q==} engines: {node: '>=20.0.0'} has-bigints@1.1.0: @@ -15229,8 +15229,6 @@ snapshots: '@ckeditor/ckeditor5-core': 47.3.0 '@ckeditor/ckeditor5-utils': 47.3.0 ckeditor5: 47.3.0 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-code-block@47.3.0(patch_hash=2361d8caad7d6b5bddacc3a3b4aa37dbfba260b1c1b22a450413a79c1bb1ce95)': dependencies: @@ -15296,6 +15294,8 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.3.0 '@ckeditor/ckeditor5-watchdog': 47.3.0 es-toolkit: 1.39.5 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-dev-build-tools@54.3.0(@swc/helpers@0.5.17)(tslib@2.8.1)(typescript@5.9.3)': dependencies: @@ -15448,6 +15448,8 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.3.0 ckeditor5: 47.3.0 es-toolkit: 1.39.5 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-editor-multi-root@47.3.0': dependencies: @@ -20675,7 +20677,7 @@ snapshots: '@vitest/browser-webdriverio@4.0.17(bufferutil@4.0.9)(msw@2.7.5(@types/node@24.10.8)(typescript@5.9.3))(utf-8-validate@6.0.5)(vite@7.3.1(@types/node@24.10.8)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1))(vitest@4.0.17)(webdriverio@9.23.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))': dependencies: '@vitest/browser': 4.0.17(bufferutil@4.0.9)(msw@2.7.5(@types/node@24.10.8)(typescript@5.9.3))(utf-8-validate@6.0.5)(vite@7.3.1(@types/node@24.10.8)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1))(vitest@4.0.17) - vitest: 4.0.17(@opentelemetry/api@1.9.0)(@types/node@24.10.8)(@vitest/browser-webdriverio@4.0.17)(@vitest/ui@4.0.17)(happy-dom@20.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.2)(msw@2.7.5(@types/node@24.10.8)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) + vitest: 4.0.17(@opentelemetry/api@1.9.0)(@types/node@24.10.8)(@vitest/browser-webdriverio@4.0.17)(@vitest/ui@4.0.17)(happy-dom@20.3.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.2)(msw@2.7.5(@types/node@24.10.8)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) webdriverio: 9.23.0(bufferutil@4.0.9)(utf-8-validate@6.0.5) transitivePeerDependencies: - bufferutil @@ -20692,7 +20694,7 @@ snapshots: pngjs: 7.0.0 sirv: 3.0.2 tinyrainbow: 3.0.3 - vitest: 4.0.17(@opentelemetry/api@1.9.0)(@types/node@24.10.8)(@vitest/browser-webdriverio@4.0.17)(@vitest/ui@4.0.17)(happy-dom@20.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.2)(msw@2.7.5(@types/node@24.10.8)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) + vitest: 4.0.17(@opentelemetry/api@1.9.0)(@types/node@24.10.8)(@vitest/browser-webdriverio@4.0.17)(@vitest/ui@4.0.17)(happy-dom@20.3.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.2)(msw@2.7.5(@types/node@24.10.8)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) ws: 8.19.0(bufferutil@4.0.9)(utf-8-validate@6.0.5) transitivePeerDependencies: - bufferutil @@ -20712,7 +20714,7 @@ snapshots: magicast: 0.5.1 obug: 2.1.1 tinyrainbow: 3.0.3 - vitest: 4.0.17(@opentelemetry/api@1.9.0)(@types/node@24.10.8)(@vitest/browser-webdriverio@4.0.17)(@vitest/ui@4.0.17)(happy-dom@20.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.2)(msw@2.7.5(@types/node@24.10.8)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) + vitest: 4.0.17(@opentelemetry/api@1.9.0)(@types/node@24.10.8)(@vitest/browser-webdriverio@4.0.17)(@vitest/ui@4.0.17)(happy-dom@20.3.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.2)(msw@2.7.5(@types/node@24.10.8)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) transitivePeerDependencies: - supports-color @@ -20728,7 +20730,7 @@ snapshots: obug: 2.1.1 std-env: 3.10.0 tinyrainbow: 3.0.3 - vitest: 4.0.17(@opentelemetry/api@1.9.0)(@types/node@24.10.8)(@vitest/browser-webdriverio@4.0.17)(@vitest/ui@4.0.17)(happy-dom@20.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.2)(msw@2.7.5(@types/node@24.10.8)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) + vitest: 4.0.17(@opentelemetry/api@1.9.0)(@types/node@24.10.8)(@vitest/browser-webdriverio@4.0.17)(@vitest/ui@4.0.17)(happy-dom@20.3.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.2)(msw@2.7.5(@types/node@24.10.8)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) optionalDependencies: '@vitest/browser': 4.0.17(bufferutil@4.0.9)(msw@2.7.5(@types/node@24.10.8)(typescript@5.9.3))(utf-8-validate@6.0.5)(vite@7.3.1(@types/node@24.10.8)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1))(vitest@4.0.17) @@ -20776,7 +20778,7 @@ snapshots: sirv: 3.0.2 tinyglobby: 0.2.15 tinyrainbow: 3.0.3 - vitest: 4.0.17(@opentelemetry/api@1.9.0)(@types/node@24.10.8)(@vitest/browser-webdriverio@4.0.17)(@vitest/ui@4.0.17)(happy-dom@20.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.2)(msw@2.7.5(@types/node@24.10.8)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) + vitest: 4.0.17(@opentelemetry/api@1.9.0)(@types/node@24.10.8)(@vitest/browser-webdriverio@4.0.17)(@vitest/ui@4.0.17)(happy-dom@20.3.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.2)(msw@2.7.5(@types/node@24.10.8)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) '@vitest/utils@4.0.17': dependencies: @@ -24546,7 +24548,7 @@ snapshots: optionalDependencies: uglify-js: 3.19.3 - happy-dom@20.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5): + happy-dom@20.3.0(bufferutil@4.0.9)(utf-8-validate@6.0.5): dependencies: '@types/node': 20.19.25 '@types/whatwg-mimetype': 3.0.2 @@ -30595,7 +30597,7 @@ snapshots: tsx: 4.21.0 yaml: 2.8.1 - vitest@4.0.17(@opentelemetry/api@1.9.0)(@types/node@24.10.8)(@vitest/browser-webdriverio@4.0.17)(@vitest/ui@4.0.17)(happy-dom@20.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.2)(msw@2.7.5(@types/node@24.10.8)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1): + vitest@4.0.17(@opentelemetry/api@1.9.0)(@types/node@24.10.8)(@vitest/browser-webdriverio@4.0.17)(@vitest/ui@4.0.17)(happy-dom@20.3.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.2)(msw@2.7.5(@types/node@24.10.8)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1): dependencies: '@vitest/expect': 4.0.17 '@vitest/mocker': 4.0.17(msw@2.7.5(@types/node@24.10.8)(typescript@5.9.3))(vite@7.3.1(@types/node@24.10.8)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1)) @@ -30622,7 +30624,7 @@ snapshots: '@types/node': 24.10.8 '@vitest/browser-webdriverio': 4.0.17(bufferutil@4.0.9)(msw@2.7.5(@types/node@24.10.8)(typescript@5.9.3))(utf-8-validate@6.0.5)(vite@7.3.1(@types/node@24.10.8)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1))(vitest@4.0.17)(webdriverio@9.23.0(bufferutil@4.0.9)(utf-8-validate@6.0.5)) '@vitest/ui': 4.0.17(vitest@4.0.17) - happy-dom: 20.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5) + happy-dom: 20.3.0(bufferutil@4.0.9)(utf-8-validate@6.0.5) jsdom: 26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5) transitivePeerDependencies: - jiti From 748fb0bf05548db6105b9b89928a89a01967eeac Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 15 Jan 2026 02:00:34 +0000 Subject: [PATCH 050/353] chore(deps): update node.js to v24.13.0 --- apps/server/Dockerfile | 4 ++-- apps/server/Dockerfile.alpine | 4 ++-- apps/server/Dockerfile.alpine.rootless | 4 ++-- apps/server/Dockerfile.rootless | 4 ++-- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/apps/server/Dockerfile b/apps/server/Dockerfile index a8194784fd..f8a196f624 100644 --- a/apps/server/Dockerfile +++ b/apps/server/Dockerfile @@ -1,4 +1,4 @@ -FROM node:24.12.0-bullseye-slim AS builder +FROM node:24.13.0-bullseye-slim AS builder RUN corepack enable # Install native dependencies since we might be building cross-platform. @@ -7,7 +7,7 @@ COPY ./docker/package.json ./docker/pnpm-workspace.yaml /usr/src/app/ # We have to use --no-frozen-lockfile due to CKEditor patches RUN pnpm install --no-frozen-lockfile --prod && pnpm rebuild -FROM node:24.12.0-bullseye-slim +FROM node:24.13.0-bullseye-slim # Install only runtime dependencies RUN apt-get update && \ apt-get install -y --no-install-recommends \ diff --git a/apps/server/Dockerfile.alpine b/apps/server/Dockerfile.alpine index fffd9b6154..483e719668 100644 --- a/apps/server/Dockerfile.alpine +++ b/apps/server/Dockerfile.alpine @@ -1,4 +1,4 @@ -FROM node:24.12.0-alpine AS builder +FROM node:24.13.0-alpine AS builder RUN corepack enable # Install native dependencies since we might be building cross-platform. @@ -7,7 +7,7 @@ COPY ./docker/package.json ./docker/pnpm-workspace.yaml /usr/src/app/ # We have to use --no-frozen-lockfile due to CKEditor patches RUN pnpm install --no-frozen-lockfile --prod && pnpm rebuild -FROM node:24.12.0-alpine +FROM node:24.13.0-alpine # Install runtime dependencies RUN apk add --no-cache su-exec shadow diff --git a/apps/server/Dockerfile.alpine.rootless b/apps/server/Dockerfile.alpine.rootless index 532cd217f5..de224febf2 100644 --- a/apps/server/Dockerfile.alpine.rootless +++ b/apps/server/Dockerfile.alpine.rootless @@ -1,4 +1,4 @@ -FROM node:24.12.0-alpine AS builder +FROM node:24.13.0-alpine AS builder RUN corepack enable # Install native dependencies since we might be building cross-platform. @@ -7,7 +7,7 @@ COPY ./docker/package.json ./docker/pnpm-workspace.yaml /usr/src/app/ # We have to use --no-frozen-lockfile due to CKEditor patches RUN pnpm install --no-frozen-lockfile --prod && pnpm rebuild -FROM node:24.12.0-alpine +FROM node:24.13.0-alpine # Create a non-root user with configurable UID/GID ARG USER=trilium ARG UID=1001 diff --git a/apps/server/Dockerfile.rootless b/apps/server/Dockerfile.rootless index 9e7ffd5edb..6199a0edd2 100644 --- a/apps/server/Dockerfile.rootless +++ b/apps/server/Dockerfile.rootless @@ -1,4 +1,4 @@ -FROM node:24.12.0-bullseye-slim AS builder +FROM node:24.13.0-bullseye-slim AS builder RUN corepack enable # Install native dependencies since we might be building cross-platform. @@ -7,7 +7,7 @@ COPY ./docker/package.json ./docker/pnpm-workspace.yaml /usr/src/app/ # We have to use --no-frozen-lockfile due to CKEditor patches RUN pnpm install --no-frozen-lockfile --prod && pnpm rebuild -FROM node:24.12.0-bullseye-slim +FROM node:24.13.0-bullseye-slim # Create a non-root user with configurable UID/GID ARG USER=trilium ARG UID=1001 From 28fd945e80315aac8cb9ec0bb9759b253935cca0 Mon Sep 17 00:00:00 2001 From: Hasan Kara Date: Wed, 14 Jan 2026 14:06:22 +0100 Subject: [PATCH 051/353] Translated using Weblate (Turkish) Currently translated at 3.6% (14 of 388 strings) Translation: Trilium Notes/Server Translate-URL: https://hosted.weblate.org/projects/trilium/server/tr/ --- apps/server/src/assets/translations/tr/server.json | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/apps/server/src/assets/translations/tr/server.json b/apps/server/src/assets/translations/tr/server.json index 3212670bf5..90d2457356 100644 --- a/apps/server/src/assets/translations/tr/server.json +++ b/apps/server/src/assets/translations/tr/server.json @@ -11,6 +11,8 @@ "move-note-up": "Notu bir üste taşı", "collapse-tree": "Tüm not ağacını daraltır", "collapse-subtree": "Geçerli notun alt ağacını daraltır", - "sort-child-notes": "Alt notları sırala" + "sort-child-notes": "Alt notları sırala", + "creating-and-moving-notes": "Notları oluşturma ve yerlerini değiştirme", + "create-note-into": "Aktif nota bağlı alt not oluştur" } } From 161aa625e6ad9ac40f8fe3a8ba84d32ac9b87e09 Mon Sep 17 00:00:00 2001 From: Hasan Kara Date: Wed, 14 Jan 2026 14:08:09 +0100 Subject: [PATCH 052/353] Translated using Weblate (Turkish) Currently translated at 9.2% (14 of 152 strings) Translation: Trilium Notes/Website Translate-URL: https://hosted.weblate.org/projects/trilium/website/tr/ --- apps/website/src/translations/tr/translation.json | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/apps/website/src/translations/tr/translation.json b/apps/website/src/translations/tr/translation.json index f554703497..f320e3116d 100644 --- a/apps/website/src/translations/tr/translation.json +++ b/apps/website/src/translations/tr/translation.json @@ -13,5 +13,10 @@ "github": "GitHub", "dockerhub": "Docker Hub", "screenshot_alt": "Trilium Notes masaüstü uygulamasının ekran görüntüsü" + }, + "organization_benefits": { + "title": "Organizasyon", + "note_structure_title": "Not yapısı", + "note_structure_description": "Notlar hiyerarşik olarak düzenlenebilir. Her not 'alt notlar' içerebildiği için klasörlere ihtiyaç duyulmaz. Tek bir not, hiyerarşinin birden fazla noktasına eklenebilir." } } From 4b78de6726de37c50045ad54296cd268613323f3 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 16 Jan 2026 00:51:08 +0000 Subject: [PATCH 053/353] chore(deps): update dependency @smithy/middleware-retry to v4.4.23 --- packages/ckeditor5/package.json | 2 +- pnpm-lock.yaml | 525 +++++++++++--------------------- 2 files changed, 178 insertions(+), 349 deletions(-) diff --git a/packages/ckeditor5/package.json b/packages/ckeditor5/package.json index f3c1097716..cf0369292a 100644 --- a/packages/ckeditor5/package.json +++ b/packages/ckeditor5/package.json @@ -16,7 +16,7 @@ "ckeditor5-premium-features": "47.3.0" }, "devDependencies": { - "@smithy/middleware-retry": "4.4.22", + "@smithy/middleware-retry": "4.4.23", "@types/jquery": "3.5.33" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 0fff145af1..611cf051ad 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -888,8 +888,8 @@ importers: version: 47.3.0(bufferutil@4.0.9)(ckeditor5@47.3.0)(utf-8-validate@6.0.5) devDependencies: '@smithy/middleware-retry': - specifier: 4.4.22 - version: 4.4.22 + specifier: 4.4.23 + version: 4.4.23 '@types/jquery': specifier: 3.5.33 version: 3.5.33 @@ -4756,10 +4756,6 @@ packages: resolution: {integrity: sha512-j7HwVkBw68YW8UmFRcjZOmssE77Rvk0GWAIN1oFBhsaovQmZWYCIcGa9/pwRB0ExI8Sk9MWNALTjftjHZea7VA==} engines: {node: '>=18.0.0'} - '@smithy/abort-controller@4.2.7': - resolution: {integrity: sha512-rzMY6CaKx2qxrbYbqjXWS0plqEy7LOdKHS0bg4ixJ6aoGDPNUcLWk/FRNuCILh7GKLG9TFUXYYeQQldMBBwuyw==} - engines: {node: '>=18.0.0'} - '@smithy/abort-controller@4.2.8': resolution: {integrity: sha512-peuVfkYHAmS5ybKxWcfraK7WBBP0J+rkfUcbHJJKQ4ir3UAUNQI+Y4Vt/PqSzGqgloJ5O1dk7+WzNL8wcCSXbw==} engines: {node: '>=18.0.0'} @@ -4768,14 +4764,14 @@ packages: resolution: {integrity: sha512-prmU+rDddxHOH0oNcwemL+SwnzcG65sBF2yXRO7aeXIn/xTlq2pX7JLVbkBnVLowHLg4/OL4+jBmv9hVrVGS+w==} engines: {node: '>=18.0.0'} - '@smithy/core@3.20.3': - resolution: {integrity: sha512-iwF1e0+H9vX+4reUA0WjKnc5ueg0Leinl5kI7wsie5bVXoYdzkpINz6NPYhpr/5InOv332a7wNV5AxJyFoVUsQ==} - engines: {node: '>=18.0.0'} - '@smithy/core@3.20.5': resolution: {integrity: sha512-0Tz77Td8ynHaowXfOdrD0F1IH4tgWGUhwmLwmpFyTbr+U9WHXNNp9u/k2VjBXGnSe7BwjBERRpXsokGTXzNjhA==} engines: {node: '>=18.0.0'} + '@smithy/core@3.20.6': + resolution: {integrity: sha512-BpAffW1mIyRZongoKBbh3RgHG+JDHJek/8hjA/9LnPunM+ejorO6axkxCgwxCe4K//g/JdPeR9vROHDYr/hfnQ==} + engines: {node: '>=18.0.0'} + '@smithy/credential-provider-imds@4.0.6': resolution: {integrity: sha512-hKMWcANhUiNbCJouYkZ9V3+/Qf9pteR1dnwgdyzR09R4ODEYx8BbUysHwRSyex4rZ9zapddZhLFTnT4ZijR4pw==} engines: {node: '>=18.0.0'} @@ -4804,10 +4800,6 @@ packages: resolution: {integrity: sha512-3+RG3EA6BBJ/ofZUeTFJA7mHfSYrZtQIrDP9dI8Lf7X6Jbos2jptuLrAAteDiFVrmbEmLSuRG/bUKzfAXk7dhg==} engines: {node: '>=18.0.0'} - '@smithy/fetch-http-handler@5.3.8': - resolution: {integrity: sha512-h/Fi+o7mti4n8wx1SR6UHWLaakwHRx29sizvp8OOm7iqwKGFneT06GCSFhml6Bha5BT6ot5pj3CYZnCHhGC2Rg==} - engines: {node: '>=18.0.0'} - '@smithy/fetch-http-handler@5.3.9': resolution: {integrity: sha512-I4UhmcTYXBrct03rwzQX1Y/iqQlzVQaPxWjCjula++5EmWq9YGBrx6bbGqluGc1f0XEfhSkiY4jhLgbsJUMKRA==} engines: {node: '>=18.0.0'} @@ -4832,42 +4824,30 @@ packages: resolution: {integrity: sha512-F7gDyfI2BB1Kc+4M6rpuOLne5LOcEknH1n6UQB69qv+HucXBR1rkzXBnQTB2q46sFy1PM/zuSJOB532yc8bg3w==} engines: {node: '>=18.0.0'} - '@smithy/middleware-endpoint@4.4.4': - resolution: {integrity: sha512-TFxS6C5bGSc4djD1SLVmstCpfYDjmMnBR4KRDge5HEEtgSINGPKuxLvaAGfSPx5FFoMaTJkj4jJLNFggeWpRoQ==} - engines: {node: '>=18.0.0'} - '@smithy/middleware-endpoint@4.4.6': resolution: {integrity: sha512-dpq3bHqbEOBqGBjRVHVFP3eUSPpX0BYtg1D5d5Irgk6orGGAuZfY22rC4sErhg+ZfY/Y0kPqm1XpAmDZg7DeuA==} engines: {node: '>=18.0.0'} - '@smithy/middleware-retry@4.4.22': - resolution: {integrity: sha512-vwWDMaObSMjw6WCC/3Ae9G7uul5Sk95jr07CDk1gkIMpaDic0phPS1MpVAZ6+YkF7PAzRlpsDjxPwRlh/S11FQ==} + '@smithy/middleware-endpoint@4.4.7': + resolution: {integrity: sha512-SCmhUG1UwtnEhF5Sxd8qk7bJwkj1BpFzFlHkXqKCEmDPLrRjJyTGM0EhqT7XBtDaDJjCfjRJQodgZcKDR843qg==} + engines: {node: '>=18.0.0'} + + '@smithy/middleware-retry@4.4.23': + resolution: {integrity: sha512-lLEmkQj7I7oKfvZ1wsnToGJouLOtfkMXDKRA1Hi6F+mMp5O1N8GcVWmVeNgTtgZtd0OTXDTI2vpVQmeutydGew==} engines: {node: '>=18.0.0'} '@smithy/middleware-serde@4.2.6': resolution: {integrity: sha512-VkLoE/z7e2g8pirwisLz8XJWedUSY8my/qrp81VmAdyrhi94T+riBfwP+AOEEFR9rFTSonC/5D2eWNmFabHyGQ==} engines: {node: '>=18.0.0'} - '@smithy/middleware-serde@4.2.8': - resolution: {integrity: sha512-8rDGYen5m5+NV9eHv9ry0sqm2gI6W7mc1VSFMtn6Igo25S507/HaOX9LTHAS2/J32VXD0xSzrY0H5FJtOMS4/w==} - engines: {node: '>=18.0.0'} - '@smithy/middleware-serde@4.2.9': resolution: {integrity: sha512-eMNiej0u/snzDvlqRGSN3Vl0ESn3838+nKyVfF2FKNXFbi4SERYT6PR392D39iczngbqqGG0Jl1DlCnp7tBbXQ==} engines: {node: '>=18.0.0'} - '@smithy/middleware-stack@4.2.7': - resolution: {integrity: sha512-bsOT0rJ+HHlZd9crHoS37mt8qRRN/h9jRve1SXUhVbkRzu0QaNYZp1i1jha4n098tsvROjcwfLlfvcFuJSXEsw==} - engines: {node: '>=18.0.0'} - '@smithy/middleware-stack@4.2.8': resolution: {integrity: sha512-w6LCfOviTYQjBctOKSwy6A8FIkQy7ICvglrZFl6Bw4FmcQ1Z420fUtIhxaUZZshRe0VCq4kvDiPiXrPZAe8oRA==} engines: {node: '>=18.0.0'} - '@smithy/node-config-provider@4.3.7': - resolution: {integrity: sha512-7r58wq8sdOcrwWe+klL9y3bc4GW1gnlfnFOuL7CXa7UzfhzhxKuzNdtqgzmTV+53lEp9NXh5hY/S4UgjLOzPfw==} - engines: {node: '>=18.0.0'} - '@smithy/node-config-provider@4.3.8': resolution: {integrity: sha512-aFP1ai4lrbVlWjfpAfRSL8KFcnJQYfTl5QxLJXY32vghJrDuFyPZ6LtUL+JEGYiFRG1PfPLHLoxj107ulncLIg==} engines: {node: '>=18.0.0'} @@ -4876,26 +4856,14 @@ packages: resolution: {integrity: sha512-CMnzM9R2WqlqXQGtIlsHMEZfXKJVTIrqCNoSd/QpAyp+Dw0a1Vps13l6ma1fH8g7zSPNsA59B/kWgeylFuA/lw==} engines: {node: '>=18.0.0'} - '@smithy/node-http-handler@4.4.7': - resolution: {integrity: sha512-NELpdmBOO6EpZtWgQiHjoShs1kmweaiNuETUpuup+cmm/xJYjT4eUjfhrXRP4jCOaAsS3c3yPsP3B+K+/fyPCQ==} - engines: {node: '>=18.0.0'} - '@smithy/node-http-handler@4.4.8': resolution: {integrity: sha512-q9u+MSbJVIJ1QmJ4+1u+cERXkrhuILCBDsJUBAW1MPE6sFonbCNaegFuwW9ll8kh5UdyY3jOkoOGlc7BesoLpg==} engines: {node: '>=18.0.0'} - '@smithy/property-provider@4.2.7': - resolution: {integrity: sha512-jmNYKe9MGGPoSl/D7JDDs1C8b3dC8f/w78LbaVfoTtWy4xAd5dfjaFG9c9PWPihY4ggMQNQSMtzU77CNgAJwmA==} - engines: {node: '>=18.0.0'} - '@smithy/property-provider@4.2.8': resolution: {integrity: sha512-EtCTbyIveCKeOXDSWSdze3k612yCPq1YbXsbqX3UHhkOSW8zKsM9NOJG5gTIya0vbY2DIaieG8pKo1rITHYL0w==} engines: {node: '>=18.0.0'} - '@smithy/protocol-http@5.3.7': - resolution: {integrity: sha512-1r07pb994I20dD/c2seaZhoCuNYm0rWrvBxhCQ70brNh11M5Ml2ew6qJVo0lclB3jMIXirD4s2XRXRe7QEi0xA==} - engines: {node: '>=18.0.0'} - '@smithy/protocol-http@5.3.8': resolution: {integrity: sha512-QNINVDhxpZ5QnP3aviNHQFlRogQZDfYlCkQT+7tJnErPQbDhysondEjhikuANxgMsZrkGeiAxXy4jguEGsDrWQ==} engines: {node: '>=18.0.0'} @@ -4904,10 +4872,6 @@ packages: resolution: {integrity: sha512-y98otMI1saoajeik2kLfGyRp11e5U/iJYH/wLCh3aTV/XutbGT9nziKGkgCaMD1ghK7p6htHMm6b6scl9JRUWg==} engines: {node: '>=18.0.0'} - '@smithy/querystring-builder@4.2.7': - resolution: {integrity: sha512-eKONSywHZxK4tBxe2lXEysh8wbBdvDWiA+RIuaxZSgCMmA0zMgoDpGLJhnyj+c0leOQprVnXOmcB4m+W9Rw7sg==} - engines: {node: '>=18.0.0'} - '@smithy/querystring-builder@4.2.8': resolution: {integrity: sha512-Xr83r31+DrE8CP3MqPgMJl+pQlLLmOfiEUnoyAlGzzJIrEsbKsPy1hqH0qySaQm4oWrCBlUqRt+idEgunKB+iw==} engines: {node: '>=18.0.0'} @@ -4916,26 +4880,14 @@ packages: resolution: {integrity: sha512-031WCTdPYgiQRYNPXznHXof2YM0GwL6SeaSyTH/P72M1Vz73TvCNH2Nq8Iu2IEPq9QP2yx0/nrw5YmSeAi/AjQ==} engines: {node: '>=18.0.0'} - '@smithy/querystring-parser@4.2.7': - resolution: {integrity: sha512-3X5ZvzUHmlSTHAXFlswrS6EGt8fMSIxX/c3Rm1Pni3+wYWB6cjGocmRIoqcQF9nU5OgGmL0u7l9m44tSUpfj9w==} - engines: {node: '>=18.0.0'} - '@smithy/querystring-parser@4.2.8': resolution: {integrity: sha512-vUurovluVy50CUlazOiXkPq40KGvGWSdmusa3130MwrR1UNnNgKAlj58wlOe61XSHRpUfIIh6cE0zZ8mzKaDPA==} engines: {node: '>=18.0.0'} - '@smithy/service-error-classification@4.2.7': - resolution: {integrity: sha512-YB7oCbukqEb2Dlh3340/8g8vNGbs/QsNNRms+gv3N2AtZz9/1vSBx6/6tpwQpZMEJFs7Uq8h4mmOn48ZZ72MkA==} - engines: {node: '>=18.0.0'} - '@smithy/service-error-classification@4.2.8': resolution: {integrity: sha512-mZ5xddodpJhEt3RkCjbmUQuXUOaPNTkbMGR0bcS8FE0bJDLMZlhmpgrvPNCYglVw5rsYTpSnv19womw9WWXKQQ==} engines: {node: '>=18.0.0'} - '@smithy/shared-ini-file-loader@4.4.2': - resolution: {integrity: sha512-M7iUUff/KwfNunmrgtqBfvZSzh3bmFgv/j/t1Y1dQ+8dNo34br1cqVEqy6v0mYEgi0DkGO7Xig0AnuOaEGVlcg==} - engines: {node: '>=18.0.0'} - '@smithy/shared-ini-file-loader@4.4.3': resolution: {integrity: sha512-DfQjxXQnzC5UbCUPeC3Ie8u+rIWZTvuDPAGU/BxzrOGhRvgUanaP68kDZA+jaT3ZI+djOf+4dERGlm9mWfFDrg==} engines: {node: '>=18.0.0'} @@ -4944,16 +4896,12 @@ packages: resolution: {integrity: sha512-d3+U/VpX7a60seHziWnVZOHuEgJlclufjkS6zhXvxcJgkJq4UWdH5eOBLzHRMx6gXjsdT9h6lfpmLzbrdupHgQ==} engines: {node: '>=18.0.0'} - '@smithy/smithy-client@4.10.5': - resolution: {integrity: sha512-uotYm3WDne01R0DxBqF9J8WZc8gSgdj+uC7Lv/R+GinH4rxcgRLxLDayYkyGAboZlYszly6maQA+NGQ5N4gLhQ==} - engines: {node: '>=18.0.0'} - '@smithy/smithy-client@4.10.7': resolution: {integrity: sha512-Uznt0I9z3os3Z+8pbXrOSCTXCA6vrjyN7Ub+8l2pRDum44vLv8qw0qGVkJN0/tZBZotaEFHrDPKUoPNueTr5Vg==} engines: {node: '>=18.0.0'} - '@smithy/types@4.11.0': - resolution: {integrity: sha512-mlrmL0DRDVe3mNrjTcVcZEgkFmufITfUAPBEA+AHYiIeYyJebso/He1qLbP3PssRe22KUzLRpQSdBPbXdgZ2VA==} + '@smithy/smithy-client@4.10.8': + resolution: {integrity: sha512-wcr3UEL26k7lLoyf9eVDZoD1nNY3Fa1gbNuOXvfxvVWLGkOVW+RYZgUUp/bXHryJfycIOQnBq9o1JAE00ax8HQ==} engines: {node: '>=18.0.0'} '@smithy/types@4.12.0': @@ -4964,10 +4912,6 @@ packages: resolution: {integrity: sha512-VaxMGsilqFnK1CeBX+LXnSuaMx4sTL/6znSZh2829txWieazdVxr54HmiyTsIbpOTLcf5nYpq9lpzmwRdxj6rQ==} engines: {node: '>=18.0.0'} - '@smithy/url-parser@4.2.7': - resolution: {integrity: sha512-/RLtVsRV4uY3qPWhBDsjwahAtt3x2IsMGnP5W1b2VZIe+qgCqkLxI1UOHDZp1Q1QSOrdOR32MF3Ph2JfWT1VHg==} - engines: {node: '>=18.0.0'} - '@smithy/url-parser@4.2.8': resolution: {integrity: sha512-NQho9U68TGMEU639YkXnVMV3GEFFULmmaWdlu1E9qzyIePOHsoSnagTGSDv1Zi8DCNN6btxOSdgmy5E/hsZwhA==} engines: {node: '>=18.0.0'} @@ -5012,18 +4956,10 @@ packages: resolution: {integrity: sha512-CCQBwJIvXMLKxVbO88IukazJD9a4kQ9ZN7/UMGBjBcJYvatpWk+9g870El4cB8/EJxfe+k+y0GmR9CAzkF+Nbw==} engines: {node: '>=18.0.0'} - '@smithy/util-middleware@4.2.7': - resolution: {integrity: sha512-i1IkpbOae6NvIKsEeLLM9/2q4X+M90KV3oCFgWQI4q0Qz+yUZvsr+gZPdAEAtFhWQhAHpTsJO8DRJPuwVyln+w==} - engines: {node: '>=18.0.0'} - '@smithy/util-middleware@4.2.8': resolution: {integrity: sha512-PMqfeJxLcNPMDgvPbbLl/2Vpin+luxqTGPpW3NAQVLbRrFRzTa4rNAASYeIGjRV9Ytuhzny39SpyU04EQreF+A==} engines: {node: '>=18.0.0'} - '@smithy/util-retry@4.2.7': - resolution: {integrity: sha512-SvDdsQyF5CIASa4EYVT02LukPHVzAgUA4kMAuZ97QJc2BpAqZfA4PINB8/KOoCXEw9tsuv/jQjMeaHFvxdLNGg==} - engines: {node: '>=18.0.0'} - '@smithy/util-retry@4.2.8': resolution: {integrity: sha512-CfJqwvoRY0kTGe5AkQokpURNCT1u/MkRzMTASWMPPo2hNSnKtF1D45dQl3DE2LKLr4m+PW9mCeBMJr5mCAVThg==} engines: {node: '>=18.0.0'} @@ -5032,10 +4968,6 @@ packages: resolution: {integrity: sha512-jbqemy51UFSZSp2y0ZmRfckmrzuKww95zT9BYMmuJ8v3altGcqjwoV1tzpOwuHaKrwQrCjIzOib499ymr2f98g==} engines: {node: '>=18.0.0'} - '@smithy/util-stream@4.5.8': - resolution: {integrity: sha512-ZnnBhTapjM0YPGUSmOs0Mcg/Gg87k503qG4zU2v/+Js2Gu+daKOJMeqcQns8ajepY8tgzzfYxl6kQyZKml6O2w==} - engines: {node: '>=18.0.0'} - '@smithy/util-uri-escape@4.2.0': resolution: {integrity: sha512-igZpCKV9+E/Mzrpq6YacdTQ0qTiLm85gD6N/IrmyDvQFA4UnU3d5g3m8tMT/6zG/vVkWSU+VxeUyGonL62DuxA==} engines: {node: '>=18.0.0'} @@ -14510,7 +14442,7 @@ snapshots: '@aws-sdk/util-user-agent-browser': 3.821.0 '@aws-sdk/util-user-agent-node': 3.823.0 '@smithy/config-resolver': 4.1.4 - '@smithy/core': 3.20.3 + '@smithy/core': 3.20.5 '@smithy/eventstream-serde-browser': 4.0.4 '@smithy/eventstream-serde-config-resolver': 4.1.2 '@smithy/eventstream-serde-node': 4.0.4 @@ -14518,15 +14450,15 @@ snapshots: '@smithy/hash-node': 4.0.4 '@smithy/invalid-dependency': 4.0.4 '@smithy/middleware-content-length': 4.0.4 - '@smithy/middleware-endpoint': 4.4.4 - '@smithy/middleware-retry': 4.4.22 + '@smithy/middleware-endpoint': 4.4.6 + '@smithy/middleware-retry': 4.4.23 '@smithy/middleware-serde': 4.2.6 - '@smithy/middleware-stack': 4.2.7 - '@smithy/node-config-provider': 4.3.7 + '@smithy/middleware-stack': 4.2.8 + '@smithy/node-config-provider': 4.3.8 '@smithy/node-http-handler': 4.4.5 - '@smithy/protocol-http': 5.3.7 - '@smithy/smithy-client': 4.10.5 - '@smithy/types': 4.11.0 + '@smithy/protocol-http': 5.3.8 + '@smithy/smithy-client': 4.10.7 + '@smithy/types': 4.12.0 '@smithy/url-parser': 4.2.5 '@smithy/util-base64': 4.3.0 '@smithy/util-body-length-browser': 4.2.0 @@ -14534,9 +14466,9 @@ snapshots: '@smithy/util-defaults-mode-browser': 4.0.22 '@smithy/util-defaults-mode-node': 4.0.22 '@smithy/util-endpoints': 3.0.6 - '@smithy/util-middleware': 4.2.7 - '@smithy/util-retry': 4.2.7 - '@smithy/util-stream': 4.5.8 + '@smithy/util-middleware': 4.2.8 + '@smithy/util-retry': 4.2.8 + '@smithy/util-stream': 4.5.10 '@smithy/util-utf8': 4.2.0 '@types/uuid': 9.0.8 tslib: 2.8.1 @@ -14559,29 +14491,29 @@ snapshots: '@aws-sdk/util-user-agent-browser': 3.821.0 '@aws-sdk/util-user-agent-node': 3.823.0 '@smithy/config-resolver': 4.1.4 - '@smithy/core': 3.20.3 - '@smithy/fetch-http-handler': 5.3.8 + '@smithy/core': 3.20.5 + '@smithy/fetch-http-handler': 5.3.9 '@smithy/hash-node': 4.0.4 '@smithy/invalid-dependency': 4.0.4 '@smithy/middleware-content-length': 4.0.4 - '@smithy/middleware-endpoint': 4.4.4 - '@smithy/middleware-retry': 4.4.22 - '@smithy/middleware-serde': 4.2.8 - '@smithy/middleware-stack': 4.2.7 - '@smithy/node-config-provider': 4.3.7 - '@smithy/node-http-handler': 4.4.7 - '@smithy/protocol-http': 5.3.7 - '@smithy/smithy-client': 4.10.5 - '@smithy/types': 4.11.0 - '@smithy/url-parser': 4.2.7 + '@smithy/middleware-endpoint': 4.4.6 + '@smithy/middleware-retry': 4.4.23 + '@smithy/middleware-serde': 4.2.9 + '@smithy/middleware-stack': 4.2.8 + '@smithy/node-config-provider': 4.3.8 + '@smithy/node-http-handler': 4.4.8 + '@smithy/protocol-http': 5.3.8 + '@smithy/smithy-client': 4.10.7 + '@smithy/types': 4.12.0 + '@smithy/url-parser': 4.2.8 '@smithy/util-base64': 4.3.0 '@smithy/util-body-length-browser': 4.2.0 '@smithy/util-body-length-node': 4.0.0 '@smithy/util-defaults-mode-browser': 4.0.22 '@smithy/util-defaults-mode-node': 4.0.22 '@smithy/util-endpoints': 3.0.6 - '@smithy/util-middleware': 4.2.7 - '@smithy/util-retry': 4.2.7 + '@smithy/util-middleware': 4.2.8 + '@smithy/util-retry': 4.2.8 '@smithy/util-utf8': 4.2.0 tslib: 2.8.1 transitivePeerDependencies: @@ -14591,16 +14523,16 @@ snapshots: dependencies: '@aws-sdk/types': 3.821.0 '@aws-sdk/xml-builder': 3.821.0 - '@smithy/core': 3.20.3 - '@smithy/node-config-provider': 4.3.7 - '@smithy/property-provider': 4.2.7 - '@smithy/protocol-http': 5.3.7 + '@smithy/core': 3.20.5 + '@smithy/node-config-provider': 4.3.8 + '@smithy/property-provider': 4.2.8 + '@smithy/protocol-http': 5.3.8 '@smithy/signature-v4': 5.1.2 - '@smithy/smithy-client': 4.10.5 - '@smithy/types': 4.11.0 + '@smithy/smithy-client': 4.10.7 + '@smithy/types': 4.12.0 '@smithy/util-base64': 4.3.0 '@smithy/util-body-length-browser': 4.2.0 - '@smithy/util-middleware': 4.2.7 + '@smithy/util-middleware': 4.2.8 '@smithy/util-utf8': 4.2.0 fast-xml-parser: 4.4.1 tslib: 2.8.1 @@ -14609,21 +14541,21 @@ snapshots: dependencies: '@aws-sdk/core': 3.823.0 '@aws-sdk/types': 3.821.0 - '@smithy/property-provider': 4.2.7 - '@smithy/types': 4.11.0 + '@smithy/property-provider': 4.2.8 + '@smithy/types': 4.12.0 tslib: 2.8.1 '@aws-sdk/credential-provider-http@3.823.0': dependencies: '@aws-sdk/core': 3.823.0 '@aws-sdk/types': 3.821.0 - '@smithy/fetch-http-handler': 5.3.8 - '@smithy/node-http-handler': 4.4.7 - '@smithy/property-provider': 4.2.7 - '@smithy/protocol-http': 5.3.7 - '@smithy/smithy-client': 4.10.5 - '@smithy/types': 4.11.0 - '@smithy/util-stream': 4.5.8 + '@smithy/fetch-http-handler': 5.3.9 + '@smithy/node-http-handler': 4.4.8 + '@smithy/property-provider': 4.2.8 + '@smithy/protocol-http': 5.3.8 + '@smithy/smithy-client': 4.10.7 + '@smithy/types': 4.12.0 + '@smithy/util-stream': 4.5.10 tslib: 2.8.1 '@aws-sdk/credential-provider-ini@3.823.0': @@ -14637,9 +14569,9 @@ snapshots: '@aws-sdk/nested-clients': 3.823.0 '@aws-sdk/types': 3.821.0 '@smithy/credential-provider-imds': 4.0.6 - '@smithy/property-provider': 4.2.7 - '@smithy/shared-ini-file-loader': 4.4.2 - '@smithy/types': 4.11.0 + '@smithy/property-provider': 4.2.8 + '@smithy/shared-ini-file-loader': 4.4.3 + '@smithy/types': 4.12.0 tslib: 2.8.1 transitivePeerDependencies: - aws-crt @@ -14654,9 +14586,9 @@ snapshots: '@aws-sdk/credential-provider-web-identity': 3.823.0 '@aws-sdk/types': 3.821.0 '@smithy/credential-provider-imds': 4.0.6 - '@smithy/property-provider': 4.2.7 - '@smithy/shared-ini-file-loader': 4.4.2 - '@smithy/types': 4.11.0 + '@smithy/property-provider': 4.2.8 + '@smithy/shared-ini-file-loader': 4.4.3 + '@smithy/types': 4.12.0 tslib: 2.8.1 transitivePeerDependencies: - aws-crt @@ -14665,9 +14597,9 @@ snapshots: dependencies: '@aws-sdk/core': 3.823.0 '@aws-sdk/types': 3.821.0 - '@smithy/property-provider': 4.2.7 - '@smithy/shared-ini-file-loader': 4.4.2 - '@smithy/types': 4.11.0 + '@smithy/property-provider': 4.2.8 + '@smithy/shared-ini-file-loader': 4.4.3 + '@smithy/types': 4.12.0 tslib: 2.8.1 '@aws-sdk/credential-provider-sso@3.823.0': @@ -14676,9 +14608,9 @@ snapshots: '@aws-sdk/core': 3.823.0 '@aws-sdk/token-providers': 3.823.0 '@aws-sdk/types': 3.821.0 - '@smithy/property-provider': 4.2.7 - '@smithy/shared-ini-file-loader': 4.4.2 - '@smithy/types': 4.11.0 + '@smithy/property-provider': 4.2.8 + '@smithy/shared-ini-file-loader': 4.4.3 + '@smithy/types': 4.12.0 tslib: 2.8.1 transitivePeerDependencies: - aws-crt @@ -14688,8 +14620,8 @@ snapshots: '@aws-sdk/core': 3.823.0 '@aws-sdk/nested-clients': 3.823.0 '@aws-sdk/types': 3.821.0 - '@smithy/property-provider': 4.2.7 - '@smithy/types': 4.11.0 + '@smithy/property-provider': 4.2.8 + '@smithy/types': 4.12.0 tslib: 2.8.1 transitivePeerDependencies: - aws-crt @@ -14698,34 +14630,34 @@ snapshots: dependencies: '@aws-sdk/types': 3.821.0 '@smithy/eventstream-codec': 4.0.4 - '@smithy/types': 4.11.0 + '@smithy/types': 4.12.0 tslib: 2.8.1 '@aws-sdk/middleware-eventstream@3.821.0': dependencies: '@aws-sdk/types': 3.821.0 - '@smithy/protocol-http': 5.3.7 - '@smithy/types': 4.11.0 + '@smithy/protocol-http': 5.3.8 + '@smithy/types': 4.12.0 tslib: 2.8.1 '@aws-sdk/middleware-host-header@3.821.0': dependencies: '@aws-sdk/types': 3.821.0 - '@smithy/protocol-http': 5.3.7 - '@smithy/types': 4.11.0 + '@smithy/protocol-http': 5.3.8 + '@smithy/types': 4.12.0 tslib: 2.8.1 '@aws-sdk/middleware-logger@3.821.0': dependencies: '@aws-sdk/types': 3.821.0 - '@smithy/types': 4.11.0 + '@smithy/types': 4.12.0 tslib: 2.8.1 '@aws-sdk/middleware-recursion-detection@3.821.0': dependencies: '@aws-sdk/types': 3.821.0 - '@smithy/protocol-http': 5.3.7 - '@smithy/types': 4.11.0 + '@smithy/protocol-http': 5.3.8 + '@smithy/types': 4.12.0 tslib: 2.8.1 '@aws-sdk/middleware-user-agent@3.823.0': @@ -14733,9 +14665,9 @@ snapshots: '@aws-sdk/core': 3.823.0 '@aws-sdk/types': 3.821.0 '@aws-sdk/util-endpoints': 3.821.0 - '@smithy/core': 3.20.3 - '@smithy/protocol-http': 5.3.7 - '@smithy/types': 4.11.0 + '@smithy/core': 3.20.5 + '@smithy/protocol-http': 5.3.8 + '@smithy/types': 4.12.0 tslib: 2.8.1 '@aws-sdk/nested-clients@3.823.0': @@ -14753,29 +14685,29 @@ snapshots: '@aws-sdk/util-user-agent-browser': 3.821.0 '@aws-sdk/util-user-agent-node': 3.823.0 '@smithy/config-resolver': 4.1.4 - '@smithy/core': 3.20.3 - '@smithy/fetch-http-handler': 5.3.8 + '@smithy/core': 3.20.5 + '@smithy/fetch-http-handler': 5.3.9 '@smithy/hash-node': 4.0.4 '@smithy/invalid-dependency': 4.0.4 '@smithy/middleware-content-length': 4.0.4 - '@smithy/middleware-endpoint': 4.4.4 - '@smithy/middleware-retry': 4.4.22 - '@smithy/middleware-serde': 4.2.8 - '@smithy/middleware-stack': 4.2.7 - '@smithy/node-config-provider': 4.3.7 - '@smithy/node-http-handler': 4.4.7 - '@smithy/protocol-http': 5.3.7 - '@smithy/smithy-client': 4.10.5 - '@smithy/types': 4.11.0 - '@smithy/url-parser': 4.2.7 + '@smithy/middleware-endpoint': 4.4.6 + '@smithy/middleware-retry': 4.4.23 + '@smithy/middleware-serde': 4.2.9 + '@smithy/middleware-stack': 4.2.8 + '@smithy/node-config-provider': 4.3.8 + '@smithy/node-http-handler': 4.4.8 + '@smithy/protocol-http': 5.3.8 + '@smithy/smithy-client': 4.10.7 + '@smithy/types': 4.12.0 + '@smithy/url-parser': 4.2.8 '@smithy/util-base64': 4.3.0 '@smithy/util-body-length-browser': 4.2.0 '@smithy/util-body-length-node': 4.0.0 '@smithy/util-defaults-mode-browser': 4.0.22 '@smithy/util-defaults-mode-node': 4.0.22 '@smithy/util-endpoints': 3.0.6 - '@smithy/util-middleware': 4.2.7 - '@smithy/util-retry': 4.2.7 + '@smithy/util-middleware': 4.2.8 + '@smithy/util-retry': 4.2.8 '@smithy/util-utf8': 4.2.0 tslib: 2.8.1 transitivePeerDependencies: @@ -14784,10 +14716,10 @@ snapshots: '@aws-sdk/region-config-resolver@3.821.0': dependencies: '@aws-sdk/types': 3.821.0 - '@smithy/node-config-provider': 4.3.7 - '@smithy/types': 4.11.0 + '@smithy/node-config-provider': 4.3.8 + '@smithy/types': 4.12.0 '@smithy/util-config-provider': 4.0.0 - '@smithy/util-middleware': 4.2.7 + '@smithy/util-middleware': 4.2.8 tslib: 2.8.1 '@aws-sdk/token-providers@3.823.0': @@ -14795,22 +14727,22 @@ snapshots: '@aws-sdk/core': 3.823.0 '@aws-sdk/nested-clients': 3.823.0 '@aws-sdk/types': 3.821.0 - '@smithy/property-provider': 4.2.7 - '@smithy/shared-ini-file-loader': 4.4.2 - '@smithy/types': 4.11.0 + '@smithy/property-provider': 4.2.8 + '@smithy/shared-ini-file-loader': 4.4.3 + '@smithy/types': 4.12.0 tslib: 2.8.1 transitivePeerDependencies: - aws-crt '@aws-sdk/types@3.821.0': dependencies: - '@smithy/types': 4.11.0 + '@smithy/types': 4.12.0 tslib: 2.8.1 '@aws-sdk/util-endpoints@3.821.0': dependencies: '@aws-sdk/types': 3.821.0 - '@smithy/types': 4.11.0 + '@smithy/types': 4.12.0 '@smithy/util-endpoints': 3.0.6 tslib: 2.8.1 @@ -14821,7 +14753,7 @@ snapshots: '@aws-sdk/util-user-agent-browser@3.821.0': dependencies: '@aws-sdk/types': 3.821.0 - '@smithy/types': 4.11.0 + '@smithy/types': 4.12.0 bowser: 2.11.0 tslib: 2.8.1 @@ -14829,13 +14761,13 @@ snapshots: dependencies: '@aws-sdk/middleware-user-agent': 3.823.0 '@aws-sdk/types': 3.821.0 - '@smithy/node-config-provider': 4.3.7 - '@smithy/types': 4.11.0 + '@smithy/node-config-provider': 4.3.8 + '@smithy/types': 4.12.0 tslib: 2.8.1 '@aws-sdk/xml-builder@3.821.0': dependencies: - '@smithy/types': 4.11.0 + '@smithy/types': 4.12.0 tslib: 2.8.1 '@babel/code-frame@7.27.1': @@ -15472,8 +15404,6 @@ snapshots: '@ckeditor/ckeditor5-table': 47.3.0 '@ckeditor/ckeditor5-utils': 47.3.0 ckeditor5: 47.3.0 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-emoji@47.3.0': dependencies: @@ -19244,12 +19174,7 @@ snapshots: '@smithy/abort-controller@4.2.5': dependencies: - '@smithy/types': 4.11.0 - tslib: 2.8.1 - - '@smithy/abort-controller@4.2.7': - dependencies: - '@smithy/types': 4.11.0 + '@smithy/types': 4.12.0 tslib: 2.8.1 '@smithy/abort-controller@4.2.8': @@ -19259,23 +19184,10 @@ snapshots: '@smithy/config-resolver@4.1.4': dependencies: - '@smithy/node-config-provider': 4.3.7 - '@smithy/types': 4.11.0 + '@smithy/node-config-provider': 4.3.8 + '@smithy/types': 4.12.0 '@smithy/util-config-provider': 4.0.0 - '@smithy/util-middleware': 4.2.7 - tslib: 2.8.1 - - '@smithy/core@3.20.3': - dependencies: - '@smithy/middleware-serde': 4.2.8 - '@smithy/protocol-http': 5.3.7 - '@smithy/types': 4.11.0 - '@smithy/util-base64': 4.3.0 - '@smithy/util-body-length-browser': 4.2.0 - '@smithy/util-middleware': 4.2.7 - '@smithy/util-stream': 4.5.8 - '@smithy/util-utf8': 4.2.0 - '@smithy/uuid': 1.1.0 + '@smithy/util-middleware': 4.2.8 tslib: 2.8.1 '@smithy/core@3.20.5': @@ -19291,57 +19203,62 @@ snapshots: '@smithy/uuid': 1.1.0 tslib: 2.8.1 + '@smithy/core@3.20.6': + dependencies: + '@smithy/middleware-serde': 4.2.9 + '@smithy/protocol-http': 5.3.8 + '@smithy/types': 4.12.0 + '@smithy/util-base64': 4.3.0 + '@smithy/util-body-length-browser': 4.2.0 + '@smithy/util-middleware': 4.2.8 + '@smithy/util-stream': 4.5.10 + '@smithy/util-utf8': 4.2.0 + '@smithy/uuid': 1.1.0 + tslib: 2.8.1 + '@smithy/credential-provider-imds@4.0.6': dependencies: - '@smithy/node-config-provider': 4.3.7 - '@smithy/property-provider': 4.2.7 - '@smithy/types': 4.11.0 - '@smithy/url-parser': 4.2.7 + '@smithy/node-config-provider': 4.3.8 + '@smithy/property-provider': 4.2.8 + '@smithy/types': 4.12.0 + '@smithy/url-parser': 4.2.8 tslib: 2.8.1 '@smithy/eventstream-codec@4.0.4': dependencies: '@aws-crypto/crc32': 5.2.0 - '@smithy/types': 4.11.0 + '@smithy/types': 4.12.0 '@smithy/util-hex-encoding': 4.2.0 tslib: 2.8.1 '@smithy/eventstream-serde-browser@4.0.4': dependencies: '@smithy/eventstream-serde-universal': 4.0.4 - '@smithy/types': 4.11.0 + '@smithy/types': 4.12.0 tslib: 2.8.1 '@smithy/eventstream-serde-config-resolver@4.1.2': dependencies: - '@smithy/types': 4.11.0 + '@smithy/types': 4.12.0 tslib: 2.8.1 '@smithy/eventstream-serde-node@4.0.4': dependencies: '@smithy/eventstream-serde-universal': 4.0.4 - '@smithy/types': 4.11.0 + '@smithy/types': 4.12.0 tslib: 2.8.1 '@smithy/eventstream-serde-universal@4.0.4': dependencies: '@smithy/eventstream-codec': 4.0.4 - '@smithy/types': 4.11.0 + '@smithy/types': 4.12.0 tslib: 2.8.1 '@smithy/fetch-http-handler@5.3.6': dependencies: - '@smithy/protocol-http': 5.3.7 + '@smithy/protocol-http': 5.3.8 '@smithy/querystring-builder': 4.2.5 - '@smithy/types': 4.11.0 - '@smithy/util-base64': 4.3.0 - tslib: 2.8.1 - - '@smithy/fetch-http-handler@5.3.8': - dependencies: - '@smithy/protocol-http': 5.3.7 - '@smithy/querystring-builder': 4.2.7 - '@smithy/types': 4.11.0 + '@smithy/types': 4.12.0 '@smithy/util-base64': 4.3.0 tslib: 2.8.1 @@ -19355,14 +19272,14 @@ snapshots: '@smithy/hash-node@4.0.4': dependencies: - '@smithy/types': 4.11.0 + '@smithy/types': 4.12.0 '@smithy/util-buffer-from': 4.2.0 '@smithy/util-utf8': 4.2.0 tslib: 2.8.1 '@smithy/invalid-dependency@4.0.4': dependencies: - '@smithy/types': 4.11.0 + '@smithy/types': 4.12.0 tslib: 2.8.1 '@smithy/is-array-buffer@2.2.0': @@ -19375,19 +19292,8 @@ snapshots: '@smithy/middleware-content-length@4.0.4': dependencies: - '@smithy/protocol-http': 5.3.7 - '@smithy/types': 4.11.0 - tslib: 2.8.1 - - '@smithy/middleware-endpoint@4.4.4': - dependencies: - '@smithy/core': 3.20.3 - '@smithy/middleware-serde': 4.2.8 - '@smithy/node-config-provider': 4.3.7 - '@smithy/shared-ini-file-loader': 4.4.2 - '@smithy/types': 4.11.0 - '@smithy/url-parser': 4.2.7 - '@smithy/util-middleware': 4.2.7 + '@smithy/protocol-http': 5.3.8 + '@smithy/types': 4.12.0 tslib: 2.8.1 '@smithy/middleware-endpoint@4.4.6': @@ -19401,12 +19307,23 @@ snapshots: '@smithy/util-middleware': 4.2.8 tslib: 2.8.1 - '@smithy/middleware-retry@4.4.22': + '@smithy/middleware-endpoint@4.4.7': + dependencies: + '@smithy/core': 3.20.6 + '@smithy/middleware-serde': 4.2.9 + '@smithy/node-config-provider': 4.3.8 + '@smithy/shared-ini-file-loader': 4.4.3 + '@smithy/types': 4.12.0 + '@smithy/url-parser': 4.2.8 + '@smithy/util-middleware': 4.2.8 + tslib: 2.8.1 + + '@smithy/middleware-retry@4.4.23': dependencies: '@smithy/node-config-provider': 4.3.8 '@smithy/protocol-http': 5.3.8 '@smithy/service-error-classification': 4.2.8 - '@smithy/smithy-client': 4.10.7 + '@smithy/smithy-client': 4.10.8 '@smithy/types': 4.12.0 '@smithy/util-middleware': 4.2.8 '@smithy/util-retry': 4.2.8 @@ -19415,14 +19332,8 @@ snapshots: '@smithy/middleware-serde@4.2.6': dependencies: - '@smithy/protocol-http': 5.3.7 - '@smithy/types': 4.11.0 - tslib: 2.8.1 - - '@smithy/middleware-serde@4.2.8': - dependencies: - '@smithy/protocol-http': 5.3.7 - '@smithy/types': 4.11.0 + '@smithy/protocol-http': 5.3.8 + '@smithy/types': 4.12.0 tslib: 2.8.1 '@smithy/middleware-serde@4.2.9': @@ -19431,23 +19342,11 @@ snapshots: '@smithy/types': 4.12.0 tslib: 2.8.1 - '@smithy/middleware-stack@4.2.7': - dependencies: - '@smithy/types': 4.11.0 - tslib: 2.8.1 - '@smithy/middleware-stack@4.2.8': dependencies: '@smithy/types': 4.12.0 tslib: 2.8.1 - '@smithy/node-config-provider@4.3.7': - dependencies: - '@smithy/property-provider': 4.2.7 - '@smithy/shared-ini-file-loader': 4.4.2 - '@smithy/types': 4.11.0 - tslib: 2.8.1 - '@smithy/node-config-provider@4.3.8': dependencies: '@smithy/property-provider': 4.2.8 @@ -19458,17 +19357,9 @@ snapshots: '@smithy/node-http-handler@4.4.5': dependencies: '@smithy/abort-controller': 4.2.5 - '@smithy/protocol-http': 5.3.7 + '@smithy/protocol-http': 5.3.8 '@smithy/querystring-builder': 4.2.5 - '@smithy/types': 4.11.0 - tslib: 2.8.1 - - '@smithy/node-http-handler@4.4.7': - dependencies: - '@smithy/abort-controller': 4.2.7 - '@smithy/protocol-http': 5.3.7 - '@smithy/querystring-builder': 4.2.7 - '@smithy/types': 4.11.0 + '@smithy/types': 4.12.0 tslib: 2.8.1 '@smithy/node-http-handler@4.4.8': @@ -19479,21 +19370,11 @@ snapshots: '@smithy/types': 4.12.0 tslib: 2.8.1 - '@smithy/property-provider@4.2.7': - dependencies: - '@smithy/types': 4.11.0 - tslib: 2.8.1 - '@smithy/property-provider@4.2.8': dependencies: '@smithy/types': 4.12.0 tslib: 2.8.1 - '@smithy/protocol-http@5.3.7': - dependencies: - '@smithy/types': 4.11.0 - tslib: 2.8.1 - '@smithy/protocol-http@5.3.8': dependencies: '@smithy/types': 4.12.0 @@ -19501,13 +19382,7 @@ snapshots: '@smithy/querystring-builder@4.2.5': dependencies: - '@smithy/types': 4.11.0 - '@smithy/util-uri-escape': 4.2.0 - tslib: 2.8.1 - - '@smithy/querystring-builder@4.2.7': - dependencies: - '@smithy/types': 4.11.0 + '@smithy/types': 4.12.0 '@smithy/util-uri-escape': 4.2.0 tslib: 2.8.1 @@ -19519,12 +19394,7 @@ snapshots: '@smithy/querystring-parser@4.2.5': dependencies: - '@smithy/types': 4.11.0 - tslib: 2.8.1 - - '@smithy/querystring-parser@4.2.7': - dependencies: - '@smithy/types': 4.11.0 + '@smithy/types': 4.12.0 tslib: 2.8.1 '@smithy/querystring-parser@4.2.8': @@ -19532,19 +19402,10 @@ snapshots: '@smithy/types': 4.12.0 tslib: 2.8.1 - '@smithy/service-error-classification@4.2.7': - dependencies: - '@smithy/types': 4.11.0 - '@smithy/service-error-classification@4.2.8': dependencies: '@smithy/types': 4.12.0 - '@smithy/shared-ini-file-loader@4.4.2': - dependencies: - '@smithy/types': 4.11.0 - tslib: 2.8.1 - '@smithy/shared-ini-file-loader@4.4.3': dependencies: '@smithy/types': 4.12.0 @@ -19553,24 +19414,14 @@ snapshots: '@smithy/signature-v4@5.1.2': dependencies: '@smithy/is-array-buffer': 4.2.0 - '@smithy/protocol-http': 5.3.7 - '@smithy/types': 4.11.0 + '@smithy/protocol-http': 5.3.8 + '@smithy/types': 4.12.0 '@smithy/util-hex-encoding': 4.2.0 - '@smithy/util-middleware': 4.2.7 + '@smithy/util-middleware': 4.2.8 '@smithy/util-uri-escape': 4.2.0 '@smithy/util-utf8': 4.2.0 tslib: 2.8.1 - '@smithy/smithy-client@4.10.5': - dependencies: - '@smithy/core': 3.20.3 - '@smithy/middleware-endpoint': 4.4.4 - '@smithy/middleware-stack': 4.2.7 - '@smithy/protocol-http': 5.3.7 - '@smithy/types': 4.11.0 - '@smithy/util-stream': 4.5.8 - tslib: 2.8.1 - '@smithy/smithy-client@4.10.7': dependencies: '@smithy/core': 3.20.5 @@ -19581,8 +19432,14 @@ snapshots: '@smithy/util-stream': 4.5.10 tslib: 2.8.1 - '@smithy/types@4.11.0': + '@smithy/smithy-client@4.10.8': dependencies: + '@smithy/core': 3.20.6 + '@smithy/middleware-endpoint': 4.4.7 + '@smithy/middleware-stack': 4.2.8 + '@smithy/protocol-http': 5.3.8 + '@smithy/types': 4.12.0 + '@smithy/util-stream': 4.5.10 tslib: 2.8.1 '@smithy/types@4.12.0': @@ -19592,13 +19449,7 @@ snapshots: '@smithy/url-parser@4.2.5': dependencies: '@smithy/querystring-parser': 4.2.5 - '@smithy/types': 4.11.0 - tslib: 2.8.1 - - '@smithy/url-parser@4.2.7': - dependencies: - '@smithy/querystring-parser': 4.2.7 - '@smithy/types': 4.11.0 + '@smithy/types': 4.12.0 tslib: 2.8.1 '@smithy/url-parser@4.2.8': @@ -19637,9 +19488,9 @@ snapshots: '@smithy/util-defaults-mode-browser@4.0.22': dependencies: - '@smithy/property-provider': 4.2.7 - '@smithy/smithy-client': 4.10.5 - '@smithy/types': 4.11.0 + '@smithy/property-provider': 4.2.8 + '@smithy/smithy-client': 4.10.7 + '@smithy/types': 4.12.0 bowser: 2.11.0 tslib: 2.8.1 @@ -19647,38 +19498,27 @@ snapshots: dependencies: '@smithy/config-resolver': 4.1.4 '@smithy/credential-provider-imds': 4.0.6 - '@smithy/node-config-provider': 4.3.7 - '@smithy/property-provider': 4.2.7 - '@smithy/smithy-client': 4.10.5 - '@smithy/types': 4.11.0 + '@smithy/node-config-provider': 4.3.8 + '@smithy/property-provider': 4.2.8 + '@smithy/smithy-client': 4.10.7 + '@smithy/types': 4.12.0 tslib: 2.8.1 '@smithy/util-endpoints@3.0.6': dependencies: - '@smithy/node-config-provider': 4.3.7 - '@smithy/types': 4.11.0 + '@smithy/node-config-provider': 4.3.8 + '@smithy/types': 4.12.0 tslib: 2.8.1 '@smithy/util-hex-encoding@4.2.0': dependencies: tslib: 2.8.1 - '@smithy/util-middleware@4.2.7': - dependencies: - '@smithy/types': 4.11.0 - tslib: 2.8.1 - '@smithy/util-middleware@4.2.8': dependencies: '@smithy/types': 4.12.0 tslib: 2.8.1 - '@smithy/util-retry@4.2.7': - dependencies: - '@smithy/service-error-classification': 4.2.7 - '@smithy/types': 4.11.0 - tslib: 2.8.1 - '@smithy/util-retry@4.2.8': dependencies: '@smithy/service-error-classification': 4.2.8 @@ -19696,17 +19536,6 @@ snapshots: '@smithy/util-utf8': 4.2.0 tslib: 2.8.1 - '@smithy/util-stream@4.5.8': - dependencies: - '@smithy/fetch-http-handler': 5.3.8 - '@smithy/node-http-handler': 4.4.7 - '@smithy/types': 4.11.0 - '@smithy/util-base64': 4.3.0 - '@smithy/util-buffer-from': 4.2.0 - '@smithy/util-hex-encoding': 4.2.0 - '@smithy/util-utf8': 4.2.0 - tslib: 2.8.1 - '@smithy/util-uri-escape@4.2.0': dependencies: tslib: 2.8.1 From 35b96a71fc5e8de0c28e0910705d88c571af3794 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 16 Jan 2026 00:51:41 +0000 Subject: [PATCH 054/353] chore(deps): update dependency @types/node to v24.10.9 --- package.json | 2 +- pnpm-lock.yaml | 282 ++++++++++++++++++++++++------------------------- 2 files changed, 142 insertions(+), 142 deletions(-) diff --git a/package.json b/package.json index 683213d23b..7b9209b635 100644 --- a/package.json +++ b/package.json @@ -50,7 +50,7 @@ "@triliumnext/server": "workspace:*", "@types/express": "5.0.6", "@types/js-yaml": "4.0.9", - "@types/node": "24.10.8", + "@types/node": "24.10.9", "@vitest/browser-webdriverio": "4.0.17", "@vitest/coverage-v8": "4.0.17", "@vitest/ui": "4.0.17", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 0fff145af1..7027848bb3 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -53,14 +53,14 @@ importers: specifier: 4.0.9 version: 4.0.9 '@types/node': - specifier: 24.10.8 - version: 24.10.8 + specifier: 24.10.9 + version: 24.10.9 '@vitest/browser-webdriverio': specifier: 4.0.17 - version: 4.0.17(bufferutil@4.0.9)(msw@2.7.5(@types/node@24.10.8)(typescript@5.9.3))(utf-8-validate@6.0.5)(vite@7.3.1(@types/node@24.10.8)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1))(vitest@4.0.17)(webdriverio@9.23.0(bufferutil@4.0.9)(utf-8-validate@6.0.5)) + version: 4.0.17(bufferutil@4.0.9)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(utf-8-validate@6.0.5)(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1))(vitest@4.0.17)(webdriverio@9.23.0(bufferutil@4.0.9)(utf-8-validate@6.0.5)) '@vitest/coverage-v8': specifier: 4.0.17 - version: 4.0.17(@vitest/browser@4.0.17(bufferutil@4.0.9)(msw@2.7.5(@types/node@24.10.8)(typescript@5.9.3))(utf-8-validate@6.0.5)(vite@7.3.1(@types/node@24.10.8)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1))(vitest@4.0.17))(vitest@4.0.17) + version: 4.0.17(@vitest/browser@4.0.17(bufferutil@4.0.9)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(utf-8-validate@6.0.5)(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1))(vitest@4.0.17))(vitest@4.0.17) '@vitest/ui': specifier: 4.0.17 version: 4.0.17(vitest@4.0.17) @@ -111,7 +111,7 @@ importers: version: 0.18.0 rollup-plugin-webpack-stats: specifier: 2.1.9 - version: 2.1.9(rolldown@1.0.0-beta.29)(rollup@4.52.0)(vite@7.3.1(@types/node@24.10.8)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1)) + version: 2.1.9(rolldown@1.0.0-beta.29)(rollup@4.52.0)(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1)) tslib: specifier: 2.8.1 version: 2.8.1 @@ -129,13 +129,13 @@ importers: version: 2.0.1 vite: specifier: 7.3.1 - version: 7.3.1(@types/node@24.10.8)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) + version: 7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) vite-plugin-dts: specifier: 4.5.4 - version: 4.5.4(@types/node@24.10.8)(rollup@4.52.0)(typescript@5.9.3)(vite@7.3.1(@types/node@24.10.8)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1)) + version: 4.5.4(@types/node@24.10.9)(rollup@4.52.0)(typescript@5.9.3)(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1)) vitest: specifier: 4.0.17 - version: 4.0.17(@opentelemetry/api@1.9.0)(@types/node@24.10.8)(@vitest/browser-webdriverio@4.0.17)(@vitest/ui@4.0.17)(happy-dom@20.3.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.2)(msw@2.7.5(@types/node@24.10.8)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) + version: 4.0.17(@opentelemetry/api@1.9.0)(@types/node@24.10.9)(@vitest/browser-webdriverio@4.0.17)(@vitest/ui@4.0.17)(happy-dom@20.3.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.2)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) apps/build-docs: devDependencies: @@ -319,7 +319,7 @@ importers: version: 5.0.0 '@prefresh/vite': specifier: 2.4.11 - version: 2.4.11(preact@10.28.2)(vite@7.3.1(@types/node@24.10.8)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1)) + version: 2.4.11(preact@10.28.2)(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1)) '@types/bootstrap': specifier: 5.2.10 version: 5.2.10 @@ -355,7 +355,7 @@ importers: version: 0.7.2 vite-plugin-static-copy: specifier: 3.1.4 - version: 3.1.4(vite@7.3.1(@types/node@24.10.8)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1)) + version: 3.1.4(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1)) apps/db-compare: dependencies: @@ -800,7 +800,7 @@ importers: version: 1.0.1 vite: specifier: 7.3.1 - version: 7.3.1(@types/node@24.10.8)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) + version: 7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) ws: specifier: 8.19.0 version: 8.19.0(bufferutil@4.0.9)(utf-8-validate@6.0.5) @@ -840,7 +840,7 @@ importers: devDependencies: '@preact/preset-vite': specifier: 2.10.2 - version: 2.10.2(@babel/core@7.28.0)(preact@10.28.2)(vite@7.3.1(@types/node@24.10.8)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1)) + version: 2.10.2(@babel/core@7.28.0)(preact@10.28.2)(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1)) eslint: specifier: 9.39.2 version: 9.39.2(jiti@2.6.1) @@ -855,10 +855,10 @@ importers: version: 0.4.2 vite: specifier: 7.3.1 - version: 7.3.1(@types/node@24.10.8)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) + version: 7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) vitest: specifier: 4.0.17 - version: 4.0.17(@opentelemetry/api@1.9.0)(@types/node@24.10.8)(@vitest/browser-webdriverio@4.0.17)(@vitest/ui@4.0.17)(happy-dom@20.3.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.2)(msw@2.7.5(@types/node@24.10.8)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) + version: 4.0.17(@opentelemetry/api@1.9.0)(@types/node@24.10.9)(@vitest/browser-webdriverio@4.0.17)(@vitest/ui@4.0.17)(happy-dom@20.3.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.2)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) packages/ckeditor5: dependencies: @@ -904,7 +904,7 @@ importers: version: 5.0.0 '@ckeditor/ckeditor5-package-tools': specifier: 5.0.1 - version: 5.0.1(@babel/core@7.28.0)(@swc/core@1.11.29(@swc/helpers@0.5.17))(@types/node@24.10.8)(bufferutil@4.0.9)(esbuild@0.27.2)(utf-8-validate@6.0.5) + version: 5.0.1(@babel/core@7.28.0)(@swc/core@1.11.29(@swc/helpers@0.5.17))(@types/node@24.10.9)(bufferutil@4.0.9)(esbuild@0.27.2)(utf-8-validate@6.0.5) '@typescript-eslint/eslint-plugin': specifier: 8.53.0 version: 8.53.0(@typescript-eslint/parser@8.53.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) @@ -913,7 +913,7 @@ importers: version: 8.53.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) '@vitest/browser': specifier: 4.0.17 - version: 4.0.17(bufferutil@4.0.9)(msw@2.7.5(@types/node@24.10.8)(typescript@5.9.3))(utf-8-validate@6.0.5)(vite@7.3.1(@types/node@24.10.8)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1))(vitest@4.0.17) + version: 4.0.17(bufferutil@4.0.9)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(utf-8-validate@6.0.5)(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1))(vitest@4.0.17) '@vitest/coverage-istanbul': specifier: 4.0.17 version: 4.0.17(vitest@4.0.17) @@ -940,16 +940,16 @@ importers: version: 13.0.0(stylelint@16.26.1(typescript@5.9.3)) ts-node: specifier: 10.9.2 - version: 10.9.2(@swc/core@1.11.29(@swc/helpers@0.5.17))(@types/node@24.10.8)(typescript@5.9.3) + version: 10.9.2(@swc/core@1.11.29(@swc/helpers@0.5.17))(@types/node@24.10.9)(typescript@5.9.3) typescript: specifier: 5.9.3 version: 5.9.3 vite-plugin-svgo: specifier: 2.0.0 - version: 2.0.0(typescript@5.9.3)(vite@7.3.1(@types/node@24.10.8)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1)) + version: 2.0.0(typescript@5.9.3)(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1)) vitest: specifier: 4.0.17 - version: 4.0.17(@opentelemetry/api@1.9.0)(@types/node@24.10.8)(@vitest/browser-webdriverio@4.0.17)(@vitest/ui@4.0.17)(happy-dom@20.3.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.2)(msw@2.7.5(@types/node@24.10.8)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) + version: 4.0.17(@opentelemetry/api@1.9.0)(@types/node@24.10.9)(@vitest/browser-webdriverio@4.0.17)(@vitest/ui@4.0.17)(happy-dom@20.3.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.2)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) webdriverio: specifier: 9.23.0 version: 9.23.0(bufferutil@4.0.9)(utf-8-validate@6.0.5) @@ -964,7 +964,7 @@ importers: version: 5.0.0 '@ckeditor/ckeditor5-package-tools': specifier: 5.0.1 - version: 5.0.1(@babel/core@7.28.0)(@swc/core@1.11.29(@swc/helpers@0.5.17))(@types/node@24.10.8)(bufferutil@4.0.9)(esbuild@0.27.2)(utf-8-validate@6.0.5) + version: 5.0.1(@babel/core@7.28.0)(@swc/core@1.11.29(@swc/helpers@0.5.17))(@types/node@24.10.9)(bufferutil@4.0.9)(esbuild@0.27.2)(utf-8-validate@6.0.5) '@typescript-eslint/eslint-plugin': specifier: 8.53.0 version: 8.53.0(@typescript-eslint/parser@8.53.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) @@ -973,7 +973,7 @@ importers: version: 8.53.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) '@vitest/browser': specifier: 4.0.17 - version: 4.0.17(bufferutil@4.0.9)(msw@2.7.5(@types/node@24.10.8)(typescript@5.9.3))(utf-8-validate@6.0.5)(vite@7.3.1(@types/node@24.10.8)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1))(vitest@4.0.17) + version: 4.0.17(bufferutil@4.0.9)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(utf-8-validate@6.0.5)(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1))(vitest@4.0.17) '@vitest/coverage-istanbul': specifier: 4.0.17 version: 4.0.17(vitest@4.0.17) @@ -1000,16 +1000,16 @@ importers: version: 13.0.0(stylelint@16.26.1(typescript@5.9.3)) ts-node: specifier: 10.9.2 - version: 10.9.2(@swc/core@1.11.29(@swc/helpers@0.5.17))(@types/node@24.10.8)(typescript@5.9.3) + version: 10.9.2(@swc/core@1.11.29(@swc/helpers@0.5.17))(@types/node@24.10.9)(typescript@5.9.3) typescript: specifier: 5.9.3 version: 5.9.3 vite-plugin-svgo: specifier: 2.0.0 - version: 2.0.0(typescript@5.9.3)(vite@7.3.1(@types/node@24.10.8)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1)) + version: 2.0.0(typescript@5.9.3)(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1)) vitest: specifier: 4.0.17 - version: 4.0.17(@opentelemetry/api@1.9.0)(@types/node@24.10.8)(@vitest/browser-webdriverio@4.0.17)(@vitest/ui@4.0.17)(happy-dom@20.3.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.2)(msw@2.7.5(@types/node@24.10.8)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) + version: 4.0.17(@opentelemetry/api@1.9.0)(@types/node@24.10.9)(@vitest/browser-webdriverio@4.0.17)(@vitest/ui@4.0.17)(happy-dom@20.3.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.2)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) webdriverio: specifier: 9.23.0 version: 9.23.0(bufferutil@4.0.9)(utf-8-validate@6.0.5) @@ -1024,7 +1024,7 @@ importers: version: 5.0.0 '@ckeditor/ckeditor5-package-tools': specifier: 5.0.1 - version: 5.0.1(@babel/core@7.28.0)(@swc/core@1.11.29(@swc/helpers@0.5.17))(@types/node@24.10.8)(bufferutil@4.0.9)(esbuild@0.27.2)(utf-8-validate@6.0.5) + version: 5.0.1(@babel/core@7.28.0)(@swc/core@1.11.29(@swc/helpers@0.5.17))(@types/node@24.10.9)(bufferutil@4.0.9)(esbuild@0.27.2)(utf-8-validate@6.0.5) '@typescript-eslint/eslint-plugin': specifier: 8.53.0 version: 8.53.0(@typescript-eslint/parser@8.53.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) @@ -1033,7 +1033,7 @@ importers: version: 8.53.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) '@vitest/browser': specifier: 4.0.17 - version: 4.0.17(bufferutil@4.0.9)(msw@2.7.5(@types/node@24.10.8)(typescript@5.9.3))(utf-8-validate@6.0.5)(vite@7.3.1(@types/node@24.10.8)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1))(vitest@4.0.17) + version: 4.0.17(bufferutil@4.0.9)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(utf-8-validate@6.0.5)(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1))(vitest@4.0.17) '@vitest/coverage-istanbul': specifier: 4.0.17 version: 4.0.17(vitest@4.0.17) @@ -1060,16 +1060,16 @@ importers: version: 13.0.0(stylelint@16.26.1(typescript@5.9.3)) ts-node: specifier: 10.9.2 - version: 10.9.2(@swc/core@1.11.29(@swc/helpers@0.5.17))(@types/node@24.10.8)(typescript@5.9.3) + version: 10.9.2(@swc/core@1.11.29(@swc/helpers@0.5.17))(@types/node@24.10.9)(typescript@5.9.3) typescript: specifier: 5.9.3 version: 5.9.3 vite-plugin-svgo: specifier: 2.0.0 - version: 2.0.0(typescript@5.9.3)(vite@7.3.1(@types/node@24.10.8)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1)) + version: 2.0.0(typescript@5.9.3)(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1)) vitest: specifier: 4.0.17 - version: 4.0.17(@opentelemetry/api@1.9.0)(@types/node@24.10.8)(@vitest/browser-webdriverio@4.0.17)(@vitest/ui@4.0.17)(happy-dom@20.3.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.2)(msw@2.7.5(@types/node@24.10.8)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) + version: 4.0.17(@opentelemetry/api@1.9.0)(@types/node@24.10.9)(@vitest/browser-webdriverio@4.0.17)(@vitest/ui@4.0.17)(happy-dom@20.3.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.2)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) webdriverio: specifier: 9.23.0 version: 9.23.0(bufferutil@4.0.9)(utf-8-validate@6.0.5) @@ -1091,7 +1091,7 @@ importers: version: 5.0.0 '@ckeditor/ckeditor5-package-tools': specifier: 5.0.1 - version: 5.0.1(@babel/core@7.28.0)(@swc/core@1.11.29(@swc/helpers@0.5.17))(@types/node@24.10.8)(bufferutil@4.0.9)(esbuild@0.27.2)(utf-8-validate@6.0.5) + version: 5.0.1(@babel/core@7.28.0)(@swc/core@1.11.29(@swc/helpers@0.5.17))(@types/node@24.10.9)(bufferutil@4.0.9)(esbuild@0.27.2)(utf-8-validate@6.0.5) '@typescript-eslint/eslint-plugin': specifier: 8.53.0 version: 8.53.0(@typescript-eslint/parser@8.53.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) @@ -1100,7 +1100,7 @@ importers: version: 8.53.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) '@vitest/browser': specifier: 4.0.17 - version: 4.0.17(bufferutil@4.0.9)(msw@2.7.5(@types/node@24.10.8)(typescript@5.9.3))(utf-8-validate@6.0.5)(vite@7.3.1(@types/node@24.10.8)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1))(vitest@4.0.17) + version: 4.0.17(bufferutil@4.0.9)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(utf-8-validate@6.0.5)(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1))(vitest@4.0.17) '@vitest/coverage-istanbul': specifier: 4.0.17 version: 4.0.17(vitest@4.0.17) @@ -1127,16 +1127,16 @@ importers: version: 13.0.0(stylelint@16.26.1(typescript@5.9.3)) ts-node: specifier: 10.9.2 - version: 10.9.2(@swc/core@1.11.29(@swc/helpers@0.5.17))(@types/node@24.10.8)(typescript@5.9.3) + version: 10.9.2(@swc/core@1.11.29(@swc/helpers@0.5.17))(@types/node@24.10.9)(typescript@5.9.3) typescript: specifier: 5.9.3 version: 5.9.3 vite-plugin-svgo: specifier: 2.0.0 - version: 2.0.0(typescript@5.9.3)(vite@7.3.1(@types/node@24.10.8)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1)) + version: 2.0.0(typescript@5.9.3)(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1)) vitest: specifier: 4.0.17 - version: 4.0.17(@opentelemetry/api@1.9.0)(@types/node@24.10.8)(@vitest/browser-webdriverio@4.0.17)(@vitest/ui@4.0.17)(happy-dom@20.3.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.2)(msw@2.7.5(@types/node@24.10.8)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) + version: 4.0.17(@opentelemetry/api@1.9.0)(@types/node@24.10.9)(@vitest/browser-webdriverio@4.0.17)(@vitest/ui@4.0.17)(happy-dom@20.3.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.2)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) webdriverio: specifier: 9.23.0 version: 9.23.0(bufferutil@4.0.9)(utf-8-validate@6.0.5) @@ -1158,7 +1158,7 @@ importers: version: 5.0.0 '@ckeditor/ckeditor5-package-tools': specifier: 5.0.1 - version: 5.0.1(@babel/core@7.28.0)(@swc/core@1.11.29(@swc/helpers@0.5.17))(@types/node@24.10.8)(bufferutil@4.0.9)(esbuild@0.27.2)(utf-8-validate@6.0.5) + version: 5.0.1(@babel/core@7.28.0)(@swc/core@1.11.29(@swc/helpers@0.5.17))(@types/node@24.10.9)(bufferutil@4.0.9)(esbuild@0.27.2)(utf-8-validate@6.0.5) '@typescript-eslint/eslint-plugin': specifier: 8.53.0 version: 8.53.0(@typescript-eslint/parser@8.53.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) @@ -1167,7 +1167,7 @@ importers: version: 8.53.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) '@vitest/browser': specifier: 4.0.17 - version: 4.0.17(bufferutil@4.0.9)(msw@2.7.5(@types/node@24.10.8)(typescript@5.9.3))(utf-8-validate@6.0.5)(vite@7.3.1(@types/node@24.10.8)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1))(vitest@4.0.17) + version: 4.0.17(bufferutil@4.0.9)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(utf-8-validate@6.0.5)(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1))(vitest@4.0.17) '@vitest/coverage-istanbul': specifier: 4.0.17 version: 4.0.17(vitest@4.0.17) @@ -1194,16 +1194,16 @@ importers: version: 13.0.0(stylelint@16.26.1(typescript@5.9.3)) ts-node: specifier: 10.9.2 - version: 10.9.2(@swc/core@1.11.29(@swc/helpers@0.5.17))(@types/node@24.10.8)(typescript@5.9.3) + version: 10.9.2(@swc/core@1.11.29(@swc/helpers@0.5.17))(@types/node@24.10.9)(typescript@5.9.3) typescript: specifier: 5.9.3 version: 5.9.3 vite-plugin-svgo: specifier: 2.0.0 - version: 2.0.0(typescript@5.9.3)(vite@7.3.1(@types/node@24.10.8)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1)) + version: 2.0.0(typescript@5.9.3)(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1)) vitest: specifier: 4.0.17 - version: 4.0.17(@opentelemetry/api@1.9.0)(@types/node@24.10.8)(@vitest/browser-webdriverio@4.0.17)(@vitest/ui@4.0.17)(happy-dom@20.3.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.2)(msw@2.7.5(@types/node@24.10.8)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) + version: 4.0.17(@opentelemetry/api@1.9.0)(@types/node@24.10.9)(@vitest/browser-webdriverio@4.0.17)(@vitest/ui@4.0.17)(happy-dom@20.3.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.2)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) webdriverio: specifier: 9.23.0 version: 9.23.0(bufferutil@4.0.9)(utf-8-validate@6.0.5) @@ -5527,8 +5527,8 @@ packages: '@types/node@22.19.1': resolution: {integrity: sha512-LCCV0HdSZZZb34qifBsyWlUmok6W7ouER+oQIGBScS8EsZsQbrtFTUrDX4hOl+CS6p7cnNC4td+qrSVGSCTUfQ==} - '@types/node@24.10.8': - resolution: {integrity: sha512-r0bBaXu5Swb05doFYO2kTWHMovJnNVbCsII0fhesM8bNRlLhXIuckley4a2DaD+vOdmm5G+zGkQZAPZsF80+YQ==} + '@types/node@24.10.9': + resolution: {integrity: sha512-ne4A0IpG3+2ETuREInjPNhUGis1SFjv1d5asp8MzEAGtOZeTeHVDOYqOgqfhvseqg/iXty2hjBf1zAOb7RNiNw==} '@types/parse-json@4.0.2': resolution: {integrity: sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==} @@ -15848,7 +15848,7 @@ snapshots: es-toolkit: 1.39.5 protobufjs: 7.5.0 - '@ckeditor/ckeditor5-package-tools@5.0.1(@babel/core@7.28.0)(@swc/core@1.11.29(@swc/helpers@0.5.17))(@types/node@24.10.8)(bufferutil@4.0.9)(esbuild@0.27.2)(utf-8-validate@6.0.5)': + '@ckeditor/ckeditor5-package-tools@5.0.1(@babel/core@7.28.0)(@swc/core@1.11.29(@swc/helpers@0.5.17))(@types/node@24.10.9)(bufferutil@4.0.9)(esbuild@0.27.2)(utf-8-validate@6.0.5)': dependencies: '@ckeditor/ckeditor5-dev-translations': 54.0.0(@babel/core@7.28.0)(@swc/core@1.11.29(@swc/helpers@0.5.17))(esbuild@0.27.2)(typescript@5.0.4)(webpack@5.101.3(@swc/core@1.11.29(@swc/helpers@0.5.17))(esbuild@0.27.2)) '@ckeditor/ckeditor5-dev-utils': 54.0.0(@babel/core@7.28.0)(@swc/core@1.11.29(@swc/helpers@0.5.17))(esbuild@0.27.2)(typescript@5.0.4)(webpack@5.101.3(@swc/core@1.11.29(@swc/helpers@0.5.17))(esbuild@0.27.2)) @@ -15867,7 +15867,7 @@ snapshots: stylelint-config-ckeditor5: 2.0.1(stylelint@16.26.1(typescript@5.9.3)) terser-webpack-plugin: 5.3.14(@swc/core@1.11.29(@swc/helpers@0.5.17))(esbuild@0.27.2)(webpack@5.101.3(@swc/core@1.11.29(@swc/helpers@0.5.17))(esbuild@0.27.2)) ts-loader: 9.5.4(typescript@5.0.4)(webpack@5.101.3(@swc/core@1.11.29(@swc/helpers@0.5.17))(esbuild@0.27.2)) - ts-node: 10.9.2(@swc/core@1.11.29(@swc/helpers@0.5.17))(@types/node@24.10.8)(typescript@5.0.4) + ts-node: 10.9.2(@swc/core@1.11.29(@swc/helpers@0.5.17))(@types/node@24.10.9)(typescript@5.0.4) typescript: 5.0.4 upath: 2.0.1 webpack: 5.101.3(@swc/core@1.11.29(@swc/helpers@0.5.17))(esbuild@0.27.2) @@ -17524,26 +17524,26 @@ snapshots: '@inquirer/core': 9.2.1 '@inquirer/type': 2.0.0 - '@inquirer/confirm@5.1.21(@types/node@24.10.8)': + '@inquirer/confirm@5.1.21(@types/node@24.10.9)': dependencies: - '@inquirer/core': 10.3.2(@types/node@24.10.8) - '@inquirer/type': 3.0.10(@types/node@24.10.8) + '@inquirer/core': 10.3.2(@types/node@24.10.9) + '@inquirer/type': 3.0.10(@types/node@24.10.9) optionalDependencies: - '@types/node': 24.10.8 + '@types/node': 24.10.9 optional: true - '@inquirer/core@10.3.2(@types/node@24.10.8)': + '@inquirer/core@10.3.2(@types/node@24.10.9)': dependencies: '@inquirer/ansi': 1.0.2 '@inquirer/figures': 1.0.15 - '@inquirer/type': 3.0.10(@types/node@24.10.8) + '@inquirer/type': 3.0.10(@types/node@24.10.9) cli-width: 4.1.0 mute-stream: 2.0.0 signal-exit: 4.1.0 wrap-ansi: 6.2.0 yoctocolors-cjs: 2.1.3 optionalDependencies: - '@types/node': 24.10.8 + '@types/node': 24.10.9 optional: true '@inquirer/core@9.2.1': @@ -17633,9 +17633,9 @@ snapshots: dependencies: mute-stream: 1.0.0 - '@inquirer/type@3.0.10(@types/node@24.10.8)': + '@inquirer/type@3.0.10(@types/node@24.10.9)': optionalDependencies: - '@types/node': 24.10.8 + '@types/node': 24.10.9 optional: true '@isaacs/balanced-match@4.0.1': {} @@ -18073,23 +18073,23 @@ snapshots: dependencies: langium: 3.3.1 - '@microsoft/api-extractor-model@7.30.6(@types/node@24.10.8)': + '@microsoft/api-extractor-model@7.30.6(@types/node@24.10.9)': dependencies: '@microsoft/tsdoc': 0.15.1 '@microsoft/tsdoc-config': 0.17.1 - '@rushstack/node-core-library': 5.13.1(@types/node@24.10.8) + '@rushstack/node-core-library': 5.13.1(@types/node@24.10.9) transitivePeerDependencies: - '@types/node' - '@microsoft/api-extractor@7.52.8(@types/node@24.10.8)': + '@microsoft/api-extractor@7.52.8(@types/node@24.10.9)': dependencies: - '@microsoft/api-extractor-model': 7.30.6(@types/node@24.10.8) + '@microsoft/api-extractor-model': 7.30.6(@types/node@24.10.9) '@microsoft/tsdoc': 0.15.1 '@microsoft/tsdoc-config': 0.17.1 - '@rushstack/node-core-library': 5.13.1(@types/node@24.10.8) + '@rushstack/node-core-library': 5.13.1(@types/node@24.10.9) '@rushstack/rig-package': 0.5.3 - '@rushstack/terminal': 0.15.3(@types/node@24.10.8) - '@rushstack/ts-command-line': 5.0.1(@types/node@24.10.8) + '@rushstack/terminal': 0.15.3(@types/node@24.10.9) + '@rushstack/ts-command-line': 5.0.1(@types/node@24.10.9) lodash: 4.17.21 minimatch: 3.0.8 resolve: 1.22.10 @@ -18462,18 +18462,18 @@ snapshots: '@popperjs/core@2.11.8': {} - '@preact/preset-vite@2.10.2(@babel/core@7.28.0)(preact@10.28.2)(vite@7.3.1(@types/node@24.10.8)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1))': + '@preact/preset-vite@2.10.2(@babel/core@7.28.0)(preact@10.28.2)(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1))': dependencies: '@babel/core': 7.28.0 '@babel/plugin-transform-react-jsx': 7.27.1(@babel/core@7.28.0) '@babel/plugin-transform-react-jsx-development': 7.27.1(@babel/core@7.28.0) - '@prefresh/vite': 2.4.8(preact@10.28.2)(vite@7.3.1(@types/node@24.10.8)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1)) + '@prefresh/vite': 2.4.8(preact@10.28.2)(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1)) '@rollup/pluginutils': 4.2.1 babel-plugin-transform-hook-names: 1.0.2(@babel/core@7.28.0) debug: 4.4.1 picocolors: 1.1.1 - vite: 7.3.1(@types/node@24.10.8)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) - vite-prerender-plugin: 0.5.11(vite@7.3.1(@types/node@24.10.8)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1)) + vite: 7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) + vite-prerender-plugin: 0.5.11(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1)) transitivePeerDependencies: - preact - supports-color @@ -18493,7 +18493,7 @@ snapshots: '@prefresh/utils@1.2.1': {} - '@prefresh/vite@2.4.11(preact@10.28.2)(vite@7.3.1(@types/node@24.10.8)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1))': + '@prefresh/vite@2.4.11(preact@10.28.2)(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1))': dependencies: '@babel/core': 7.28.0 '@prefresh/babel-plugin': 0.5.2 @@ -18501,11 +18501,11 @@ snapshots: '@prefresh/utils': 1.2.1 '@rollup/pluginutils': 4.2.1 preact: 10.28.2 - vite: 7.3.1(@types/node@24.10.8)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) + vite: 7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) transitivePeerDependencies: - supports-color - '@prefresh/vite@2.4.8(preact@10.28.2)(vite@7.3.1(@types/node@24.10.8)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1))': + '@prefresh/vite@2.4.8(preact@10.28.2)(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1))': dependencies: '@babel/core': 7.28.0 '@prefresh/babel-plugin': 0.5.2 @@ -18513,7 +18513,7 @@ snapshots: '@prefresh/utils': 1.2.1 '@rollup/pluginutils': 4.2.1 preact: 10.28.2 - vite: 7.3.1(@types/node@24.10.8)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) + vite: 7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) transitivePeerDependencies: - supports-color @@ -19141,7 +19141,7 @@ snapshots: '@rollup/rollup-win32-x64-msvc@4.52.0': optional: true - '@rushstack/node-core-library@5.13.1(@types/node@24.10.8)': + '@rushstack/node-core-library@5.13.1(@types/node@24.10.9)': dependencies: ajv: 8.13.0 ajv-draft-04: 1.0.0(ajv@8.13.0) @@ -19152,23 +19152,23 @@ snapshots: resolve: 1.22.10 semver: 7.5.4 optionalDependencies: - '@types/node': 24.10.8 + '@types/node': 24.10.9 '@rushstack/rig-package@0.5.3': dependencies: resolve: 1.22.10 strip-json-comments: 3.1.1 - '@rushstack/terminal@0.15.3(@types/node@24.10.8)': + '@rushstack/terminal@0.15.3(@types/node@24.10.9)': dependencies: - '@rushstack/node-core-library': 5.13.1(@types/node@24.10.8) + '@rushstack/node-core-library': 5.13.1(@types/node@24.10.9) supports-color: 8.1.1 optionalDependencies: - '@types/node': 24.10.8 + '@types/node': 24.10.9 - '@rushstack/ts-command-line@5.0.1(@types/node@24.10.8)': + '@rushstack/ts-command-line@5.0.1(@types/node@24.10.9)': dependencies: - '@rushstack/terminal': 0.15.3(@types/node@24.10.8) + '@rushstack/terminal': 0.15.3(@types/node@24.10.9) '@types/argparse': 1.0.38 argparse: 1.0.10 string-argv: 0.3.2 @@ -19867,7 +19867,7 @@ snapshots: '@types/appdmg@0.5.5': dependencies: - '@types/node': 24.10.8 + '@types/node': 24.10.9 optional: true '@types/archiver@7.0.0': @@ -19883,11 +19883,11 @@ snapshots: '@types/body-parser@1.19.6': dependencies: '@types/connect': 3.4.38 - '@types/node': 24.10.8 + '@types/node': 24.10.9 '@types/bonjour@3.5.13': dependencies: - '@types/node': 24.10.8 + '@types/node': 24.10.9 '@types/bootstrap@5.2.10': dependencies: @@ -19901,7 +19901,7 @@ snapshots: dependencies: '@types/http-cache-semantics': 4.0.4 '@types/keyv': 3.1.4 - '@types/node': 24.10.8 + '@types/node': 24.10.9 '@types/responselike': 1.0.3 '@types/chai@5.2.2': @@ -19926,11 +19926,11 @@ snapshots: '@types/connect-history-api-fallback@1.5.4': dependencies: '@types/express-serve-static-core': 5.1.0 - '@types/node': 24.10.8 + '@types/node': 24.10.9 '@types/connect@3.4.38': dependencies: - '@types/node': 24.10.8 + '@types/node': 24.10.9 '@types/cookie-parser@1.4.10(@types/express@5.0.6)': dependencies: @@ -19943,7 +19943,7 @@ snapshots: '@types/cors@2.8.19': dependencies: - '@types/node': 24.10.8 + '@types/node': 24.10.9 '@types/cssnano@5.1.3(postcss@8.5.6)': dependencies: @@ -20100,7 +20100,7 @@ snapshots: '@types/express-serve-static-core@5.1.0': dependencies: - '@types/node': 24.10.8 + '@types/node': 24.10.9 '@types/qs': 6.14.0 '@types/range-parser': 1.2.7 '@types/send': 0.17.5 @@ -20135,7 +20135,7 @@ snapshots: '@types/fs-extra@9.0.13': dependencies: - '@types/node': 24.10.8 + '@types/node': 24.10.9 optional: true '@types/geojson-vt@3.2.5': @@ -20156,7 +20156,7 @@ snapshots: '@types/http-proxy@1.17.16': dependencies: - '@types/node': 24.10.8 + '@types/node': 24.10.9 '@types/ini@4.1.1': {} @@ -20170,11 +20170,11 @@ snapshots: '@types/jsonfile@6.1.4': dependencies: - '@types/node': 24.10.8 + '@types/node': 24.10.9 '@types/keyv@3.1.4': dependencies: - '@types/node': 24.10.8 + '@types/node': 24.10.9 '@types/leaflet-gpx@1.3.8': dependencies: @@ -20222,11 +20222,11 @@ snapshots: '@types/mute-stream@0.0.4': dependencies: - '@types/node': 24.10.8 + '@types/node': 24.10.9 '@types/node-forge@1.3.14': dependencies: - '@types/node': 24.10.8 + '@types/node': 24.10.9 '@types/node@16.9.1': {} @@ -20254,7 +20254,7 @@ snapshots: dependencies: undici-types: 6.21.0 - '@types/node@24.10.8': + '@types/node@24.10.9': dependencies: undici-types: 7.16.0 @@ -20282,13 +20282,13 @@ snapshots: '@types/readdir-glob@1.1.5': dependencies: - '@types/node': 24.10.8 + '@types/node': 24.10.9 '@types/resolve@1.20.2': {} '@types/responselike@1.0.3': dependencies: - '@types/node': 24.10.8 + '@types/node': 24.10.9 '@types/retry@0.12.2': {} @@ -20307,7 +20307,7 @@ snapshots: '@types/send@0.17.5': dependencies: '@types/mime': 1.3.5 - '@types/node': 24.10.8 + '@types/node': 24.10.9 '@types/serve-favicon@2.5.7': dependencies: @@ -20320,7 +20320,7 @@ snapshots: '@types/serve-static@1.15.10': dependencies: '@types/http-errors': 2.0.4 - '@types/node': 24.10.8 + '@types/node': 24.10.9 '@types/send': 0.17.5 '@types/serve-static@2.2.0': @@ -20334,7 +20334,7 @@ snapshots: '@types/sockjs@0.3.36': dependencies: - '@types/node': 24.10.8 + '@types/node': 24.10.9 '@types/statuses@2.0.6': optional: true @@ -20349,7 +20349,7 @@ snapshots: dependencies: '@types/cookiejar': 2.1.5 '@types/methods': 1.1.4 - '@types/node': 24.10.8 + '@types/node': 24.10.9 form-data: 4.0.4 '@types/supercluster@7.1.3': @@ -20365,7 +20365,7 @@ snapshots: '@types/through2@2.0.41': dependencies: - '@types/node': 24.10.8 + '@types/node': 24.10.9 '@types/tmp@0.2.6': {} @@ -20403,7 +20403,7 @@ snapshots: '@types/yauzl@2.10.3': dependencies: - '@types/node': 24.10.8 + '@types/node': 24.10.9 optional: true '@typescript-eslint/eslint-plugin@8.46.4(@typescript-eslint/parser@8.46.4(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)': @@ -20674,10 +20674,10 @@ snapshots: - bufferutil - utf-8-validate - '@vitest/browser-webdriverio@4.0.17(bufferutil@4.0.9)(msw@2.7.5(@types/node@24.10.8)(typescript@5.9.3))(utf-8-validate@6.0.5)(vite@7.3.1(@types/node@24.10.8)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1))(vitest@4.0.17)(webdriverio@9.23.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))': + '@vitest/browser-webdriverio@4.0.17(bufferutil@4.0.9)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(utf-8-validate@6.0.5)(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1))(vitest@4.0.17)(webdriverio@9.23.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))': dependencies: - '@vitest/browser': 4.0.17(bufferutil@4.0.9)(msw@2.7.5(@types/node@24.10.8)(typescript@5.9.3))(utf-8-validate@6.0.5)(vite@7.3.1(@types/node@24.10.8)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1))(vitest@4.0.17) - vitest: 4.0.17(@opentelemetry/api@1.9.0)(@types/node@24.10.8)(@vitest/browser-webdriverio@4.0.17)(@vitest/ui@4.0.17)(happy-dom@20.3.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.2)(msw@2.7.5(@types/node@24.10.8)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) + '@vitest/browser': 4.0.17(bufferutil@4.0.9)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(utf-8-validate@6.0.5)(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1))(vitest@4.0.17) + vitest: 4.0.17(@opentelemetry/api@1.9.0)(@types/node@24.10.9)(@vitest/browser-webdriverio@4.0.17)(@vitest/ui@4.0.17)(happy-dom@20.3.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.2)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) webdriverio: 9.23.0(bufferutil@4.0.9)(utf-8-validate@6.0.5) transitivePeerDependencies: - bufferutil @@ -20685,16 +20685,16 @@ snapshots: - utf-8-validate - vite - '@vitest/browser@4.0.17(bufferutil@4.0.9)(msw@2.7.5(@types/node@24.10.8)(typescript@5.9.3))(utf-8-validate@6.0.5)(vite@7.3.1(@types/node@24.10.8)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1))(vitest@4.0.17)': + '@vitest/browser@4.0.17(bufferutil@4.0.9)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(utf-8-validate@6.0.5)(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1))(vitest@4.0.17)': dependencies: - '@vitest/mocker': 4.0.17(msw@2.7.5(@types/node@24.10.8)(typescript@5.9.3))(vite@7.3.1(@types/node@24.10.8)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1)) + '@vitest/mocker': 4.0.17(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1)) '@vitest/utils': 4.0.17 magic-string: 0.30.21 pixelmatch: 7.1.0 pngjs: 7.0.0 sirv: 3.0.2 tinyrainbow: 3.0.3 - vitest: 4.0.17(@opentelemetry/api@1.9.0)(@types/node@24.10.8)(@vitest/browser-webdriverio@4.0.17)(@vitest/ui@4.0.17)(happy-dom@20.3.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.2)(msw@2.7.5(@types/node@24.10.8)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) + vitest: 4.0.17(@opentelemetry/api@1.9.0)(@types/node@24.10.9)(@vitest/browser-webdriverio@4.0.17)(@vitest/ui@4.0.17)(happy-dom@20.3.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.2)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) ws: 8.19.0(bufferutil@4.0.9)(utf-8-validate@6.0.5) transitivePeerDependencies: - bufferutil @@ -20714,11 +20714,11 @@ snapshots: magicast: 0.5.1 obug: 2.1.1 tinyrainbow: 3.0.3 - vitest: 4.0.17(@opentelemetry/api@1.9.0)(@types/node@24.10.8)(@vitest/browser-webdriverio@4.0.17)(@vitest/ui@4.0.17)(happy-dom@20.3.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.2)(msw@2.7.5(@types/node@24.10.8)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) + vitest: 4.0.17(@opentelemetry/api@1.9.0)(@types/node@24.10.9)(@vitest/browser-webdriverio@4.0.17)(@vitest/ui@4.0.17)(happy-dom@20.3.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.2)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) transitivePeerDependencies: - supports-color - '@vitest/coverage-v8@4.0.17(@vitest/browser@4.0.17(bufferutil@4.0.9)(msw@2.7.5(@types/node@24.10.8)(typescript@5.9.3))(utf-8-validate@6.0.5)(vite@7.3.1(@types/node@24.10.8)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1))(vitest@4.0.17))(vitest@4.0.17)': + '@vitest/coverage-v8@4.0.17(@vitest/browser@4.0.17(bufferutil@4.0.9)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(utf-8-validate@6.0.5)(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1))(vitest@4.0.17))(vitest@4.0.17)': dependencies: '@bcoe/v8-coverage': 1.0.2 '@vitest/utils': 4.0.17 @@ -20730,9 +20730,9 @@ snapshots: obug: 2.1.1 std-env: 3.10.0 tinyrainbow: 3.0.3 - vitest: 4.0.17(@opentelemetry/api@1.9.0)(@types/node@24.10.8)(@vitest/browser-webdriverio@4.0.17)(@vitest/ui@4.0.17)(happy-dom@20.3.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.2)(msw@2.7.5(@types/node@24.10.8)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) + vitest: 4.0.17(@opentelemetry/api@1.9.0)(@types/node@24.10.9)(@vitest/browser-webdriverio@4.0.17)(@vitest/ui@4.0.17)(happy-dom@20.3.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.2)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) optionalDependencies: - '@vitest/browser': 4.0.17(bufferutil@4.0.9)(msw@2.7.5(@types/node@24.10.8)(typescript@5.9.3))(utf-8-validate@6.0.5)(vite@7.3.1(@types/node@24.10.8)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1))(vitest@4.0.17) + '@vitest/browser': 4.0.17(bufferutil@4.0.9)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(utf-8-validate@6.0.5)(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1))(vitest@4.0.17) '@vitest/expect@4.0.17': dependencies: @@ -20743,14 +20743,14 @@ snapshots: chai: 6.2.1 tinyrainbow: 3.0.3 - '@vitest/mocker@4.0.17(msw@2.7.5(@types/node@24.10.8)(typescript@5.9.3))(vite@7.3.1(@types/node@24.10.8)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1))': + '@vitest/mocker@4.0.17(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1))': dependencies: '@vitest/spy': 4.0.17 estree-walker: 3.0.3 magic-string: 0.30.21 optionalDependencies: - msw: 2.7.5(@types/node@24.10.8)(typescript@5.9.3) - vite: 7.3.1(@types/node@24.10.8)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) + msw: 2.7.5(@types/node@24.10.9)(typescript@5.9.3) + vite: 7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) '@vitest/pretty-format@4.0.17': dependencies: @@ -20778,7 +20778,7 @@ snapshots: sirv: 3.0.2 tinyglobby: 0.2.15 tinyrainbow: 3.0.3 - vitest: 4.0.17(@opentelemetry/api@1.9.0)(@types/node@24.10.8)(@vitest/browser-webdriverio@4.0.17)(@vitest/ui@4.0.17)(happy-dom@20.3.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.2)(msw@2.7.5(@types/node@24.10.8)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) + vitest: 4.0.17(@opentelemetry/api@1.9.0)(@types/node@24.10.9)(@vitest/browser-webdriverio@4.0.17)(@vitest/ui@4.0.17)(happy-dom@20.3.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.2)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) '@vitest/utils@4.0.17': dependencies: @@ -23216,7 +23216,7 @@ snapshots: engine.io@6.6.4(bufferutil@4.0.9)(utf-8-validate@6.0.5): dependencies: '@types/cors': 2.8.19 - '@types/node': 24.10.8 + '@types/node': 24.10.9 accepts: 1.3.8 base64id: 2.0.0 cookie: 0.7.2 @@ -25346,7 +25346,7 @@ snapshots: jest-worker@27.5.1: dependencies: - '@types/node': 24.10.8 + '@types/node': 24.10.9 merge-stream: 2.0.0 supports-color: 8.1.1 @@ -26721,12 +26721,12 @@ snapshots: ms@2.1.3: {} - msw@2.7.5(@types/node@24.10.8)(typescript@5.9.3): + msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3): dependencies: '@bundled-es-modules/cookie': 2.0.1 '@bundled-es-modules/statuses': 1.0.1 '@bundled-es-modules/tough-cookie': 0.1.6 - '@inquirer/confirm': 5.1.21(@types/node@24.10.8) + '@inquirer/confirm': 5.1.21(@types/node@24.10.9) '@mswjs/interceptors': 0.37.6 '@open-draft/deferred-promise': 2.2.0 '@open-draft/until': 2.1.0 @@ -28014,7 +28014,7 @@ snapshots: '@protobufjs/path': 1.1.2 '@protobufjs/pool': 1.1.0 '@protobufjs/utf8': 1.1.0 - '@types/node': 24.10.8 + '@types/node': 24.10.9 long: 5.3.2 protocol-buffers-schema@3.6.0: {} @@ -28587,11 +28587,11 @@ snapshots: '@rolldown/binding-win32-x64-msvc': 1.0.0-beta.29 optional: true - rollup-plugin-stats@1.5.4(rolldown@1.0.0-beta.29)(rollup@4.52.0)(vite@7.3.1(@types/node@24.10.8)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1)): + rollup-plugin-stats@1.5.4(rolldown@1.0.0-beta.29)(rollup@4.52.0)(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1)): optionalDependencies: rolldown: 1.0.0-beta.29 rollup: 4.52.0 - vite: 7.3.1(@types/node@24.10.8)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) + vite: 7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) rollup-plugin-styles@4.0.0(rollup@4.52.0): dependencies: @@ -28620,13 +28620,13 @@ snapshots: '@rollup/pluginutils': 5.1.4(rollup@4.52.0) rollup: 4.52.0 - rollup-plugin-webpack-stats@2.1.9(rolldown@1.0.0-beta.29)(rollup@4.52.0)(vite@7.3.1(@types/node@24.10.8)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1)): + rollup-plugin-webpack-stats@2.1.9(rolldown@1.0.0-beta.29)(rollup@4.52.0)(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1)): dependencies: - rollup-plugin-stats: 1.5.4(rolldown@1.0.0-beta.29)(rollup@4.52.0)(vite@7.3.1(@types/node@24.10.8)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1)) + rollup-plugin-stats: 1.5.4(rolldown@1.0.0-beta.29)(rollup@4.52.0)(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1)) optionalDependencies: rolldown: 1.0.0-beta.29 rollup: 4.52.0 - vite: 7.3.1(@types/node@24.10.8)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) + vite: 7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) rollup@4.52.0: dependencies: @@ -30102,14 +30102,14 @@ snapshots: typescript: 5.0.4 webpack: 5.101.3(@swc/core@1.11.29(@swc/helpers@0.5.17))(esbuild@0.27.2) - ts-node@10.9.2(@swc/core@1.11.29(@swc/helpers@0.5.17))(@types/node@24.10.8)(typescript@5.0.4): + ts-node@10.9.2(@swc/core@1.11.29(@swc/helpers@0.5.17))(@types/node@24.10.9)(typescript@5.0.4): dependencies: '@cspotcode/source-map-support': 0.8.1 '@tsconfig/node10': 1.0.11 '@tsconfig/node12': 1.0.11 '@tsconfig/node14': 1.0.3 '@tsconfig/node16': 1.0.4 - '@types/node': 24.10.8 + '@types/node': 24.10.9 acorn: 8.15.0 acorn-walk: 8.3.4 arg: 4.1.3 @@ -30122,14 +30122,14 @@ snapshots: optionalDependencies: '@swc/core': 1.11.29(@swc/helpers@0.5.17) - ts-node@10.9.2(@swc/core@1.11.29(@swc/helpers@0.5.17))(@types/node@24.10.8)(typescript@5.9.3): + ts-node@10.9.2(@swc/core@1.11.29(@swc/helpers@0.5.17))(@types/node@24.10.9)(typescript@5.9.3): dependencies: '@cspotcode/source-map-support': 0.8.1 '@tsconfig/node10': 1.0.11 '@tsconfig/node12': 1.0.11 '@tsconfig/node14': 1.0.3 '@tsconfig/node16': 1.0.4 - '@types/node': 24.10.8 + '@types/node': 24.10.9 acorn: 8.15.0 acorn-walk: 8.3.4 arg: 4.1.3 @@ -30534,9 +30534,9 @@ snapshots: '@types/unist': 3.0.3 vfile-message: 4.0.2 - vite-plugin-dts@4.5.4(@types/node@24.10.8)(rollup@4.52.0)(typescript@5.9.3)(vite@7.3.1(@types/node@24.10.8)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1)): + vite-plugin-dts@4.5.4(@types/node@24.10.9)(rollup@4.52.0)(typescript@5.9.3)(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1)): dependencies: - '@microsoft/api-extractor': 7.52.8(@types/node@24.10.8) + '@microsoft/api-extractor': 7.52.8(@types/node@24.10.9) '@rollup/pluginutils': 5.1.4(rollup@4.52.0) '@volar/typescript': 2.4.13 '@vue/language-core': 2.2.0(typescript@5.9.3) @@ -30547,27 +30547,27 @@ snapshots: magic-string: 0.30.21 typescript: 5.9.3 optionalDependencies: - vite: 7.3.1(@types/node@24.10.8)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) + vite: 7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) transitivePeerDependencies: - '@types/node' - rollup - supports-color - vite-plugin-static-copy@3.1.4(vite@7.3.1(@types/node@24.10.8)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1)): + vite-plugin-static-copy@3.1.4(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1)): dependencies: chokidar: 3.6.0 p-map: 7.0.3 picocolors: 1.1.1 tinyglobby: 0.2.15 - vite: 7.3.1(@types/node@24.10.8)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) + vite: 7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) - vite-plugin-svgo@2.0.0(typescript@5.9.3)(vite@7.3.1(@types/node@24.10.8)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1)): + vite-plugin-svgo@2.0.0(typescript@5.9.3)(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1)): dependencies: svgo: 3.3.2 typescript: 5.9.3 - vite: 7.3.1(@types/node@24.10.8)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) + vite: 7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) - vite-prerender-plugin@0.5.11(vite@7.3.1(@types/node@24.10.8)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1)): + vite-prerender-plugin@0.5.11(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1)): dependencies: kolorist: 1.8.0 magic-string: 0.30.21 @@ -30575,9 +30575,9 @@ snapshots: simple-code-frame: 1.3.0 source-map: 0.7.6 stack-trace: 1.0.0-pre2 - vite: 7.3.1(@types/node@24.10.8)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) + vite: 7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) - vite@7.3.1(@types/node@24.10.8)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1): + vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1): dependencies: esbuild: 0.27.2 fdir: 6.5.0(picomatch@4.0.3) @@ -30586,7 +30586,7 @@ snapshots: rollup: 4.52.0 tinyglobby: 0.2.15 optionalDependencies: - '@types/node': 24.10.8 + '@types/node': 24.10.9 fsevents: 2.3.3 jiti: 2.6.1 less: 4.1.3 @@ -30597,10 +30597,10 @@ snapshots: tsx: 4.21.0 yaml: 2.8.1 - vitest@4.0.17(@opentelemetry/api@1.9.0)(@types/node@24.10.8)(@vitest/browser-webdriverio@4.0.17)(@vitest/ui@4.0.17)(happy-dom@20.3.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.2)(msw@2.7.5(@types/node@24.10.8)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1): + vitest@4.0.17(@opentelemetry/api@1.9.0)(@types/node@24.10.9)(@vitest/browser-webdriverio@4.0.17)(@vitest/ui@4.0.17)(happy-dom@20.3.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.2)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1): dependencies: '@vitest/expect': 4.0.17 - '@vitest/mocker': 4.0.17(msw@2.7.5(@types/node@24.10.8)(typescript@5.9.3))(vite@7.3.1(@types/node@24.10.8)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1)) + '@vitest/mocker': 4.0.17(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1)) '@vitest/pretty-format': 4.0.17 '@vitest/runner': 4.0.17 '@vitest/snapshot': 4.0.17 @@ -30617,12 +30617,12 @@ snapshots: tinyexec: 1.0.2 tinyglobby: 0.2.15 tinyrainbow: 3.0.3 - vite: 7.3.1(@types/node@24.10.8)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) + vite: 7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) why-is-node-running: 2.3.0 optionalDependencies: '@opentelemetry/api': 1.9.0 - '@types/node': 24.10.8 - '@vitest/browser-webdriverio': 4.0.17(bufferutil@4.0.9)(msw@2.7.5(@types/node@24.10.8)(typescript@5.9.3))(utf-8-validate@6.0.5)(vite@7.3.1(@types/node@24.10.8)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1))(vitest@4.0.17)(webdriverio@9.23.0(bufferutil@4.0.9)(utf-8-validate@6.0.5)) + '@types/node': 24.10.9 + '@vitest/browser-webdriverio': 4.0.17(bufferutil@4.0.9)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(utf-8-validate@6.0.5)(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1))(vitest@4.0.17)(webdriverio@9.23.0(bufferutil@4.0.9)(utf-8-validate@6.0.5)) '@vitest/ui': 4.0.17(vitest@4.0.17) happy-dom: 20.3.0(bufferutil@4.0.9)(utf-8-validate@6.0.5) jsdom: 26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5) From 9e3e92669f1aca3315ce7649125ab97dd64c4e2d Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 16 Jan 2026 00:58:48 +0000 Subject: [PATCH 055/353] chore(deps): update dependency stylelint to v17 --- packages/ckeditor5-admonition/package.json | 2 +- packages/ckeditor5-footnotes/package.json | 2 +- .../ckeditor5-keyboard-marker/package.json | 2 +- packages/ckeditor5-math/package.json | 2 +- packages/ckeditor5-mermaid/package.json | 2 +- pnpm-lock.yaml | 257 ++++++++++++++---- 6 files changed, 212 insertions(+), 55 deletions(-) diff --git a/packages/ckeditor5-admonition/package.json b/packages/ckeditor5-admonition/package.json index 44f11e7647..39bebc67bb 100644 --- a/packages/ckeditor5-admonition/package.json +++ b/packages/ckeditor5-admonition/package.json @@ -33,7 +33,7 @@ "eslint-config-ckeditor5": ">=9.1.0", "http-server": "14.1.1", "lint-staged": "16.2.7", - "stylelint": "16.26.1", + "stylelint": "17.0.0", "stylelint-config-ckeditor5": ">=9.1.0", "ts-node": "10.9.2", "typescript": "5.9.3", diff --git a/packages/ckeditor5-footnotes/package.json b/packages/ckeditor5-footnotes/package.json index 8f5b034f4b..1616b30e67 100644 --- a/packages/ckeditor5-footnotes/package.json +++ b/packages/ckeditor5-footnotes/package.json @@ -34,7 +34,7 @@ "eslint-config-ckeditor5": ">=9.1.0", "http-server": "14.1.1", "lint-staged": "16.2.7", - "stylelint": "16.26.1", + "stylelint": "17.0.0", "stylelint-config-ckeditor5": ">=9.1.0", "ts-node": "10.9.2", "typescript": "5.9.3", diff --git a/packages/ckeditor5-keyboard-marker/package.json b/packages/ckeditor5-keyboard-marker/package.json index 17422ddc15..fab2b92216 100644 --- a/packages/ckeditor5-keyboard-marker/package.json +++ b/packages/ckeditor5-keyboard-marker/package.json @@ -36,7 +36,7 @@ "eslint-config-ckeditor5": ">=9.1.0", "http-server": "14.1.1", "lint-staged": "16.2.7", - "stylelint": "16.26.1", + "stylelint": "17.0.0", "stylelint-config-ckeditor5": ">=9.1.0", "ts-node": "10.9.2", "typescript": "5.9.3", diff --git a/packages/ckeditor5-math/package.json b/packages/ckeditor5-math/package.json index a74007774c..dfccd3b50c 100644 --- a/packages/ckeditor5-math/package.json +++ b/packages/ckeditor5-math/package.json @@ -36,7 +36,7 @@ "eslint-config-ckeditor5": ">=9.1.0", "http-server": "14.1.1", "lint-staged": "16.2.7", - "stylelint": "16.26.1", + "stylelint": "17.0.0", "stylelint-config-ckeditor5": ">=9.1.0", "ts-node": "10.9.2", "typescript": "5.9.3", diff --git a/packages/ckeditor5-mermaid/package.json b/packages/ckeditor5-mermaid/package.json index ac3e58cb70..683e2de02c 100644 --- a/packages/ckeditor5-mermaid/package.json +++ b/packages/ckeditor5-mermaid/package.json @@ -36,7 +36,7 @@ "eslint-config-ckeditor5": ">=9.1.0", "http-server": "14.1.1", "lint-staged": "16.2.7", - "stylelint": "16.26.1", + "stylelint": "17.0.0", "stylelint-config-ckeditor5": ">=9.1.0", "ts-node": "10.9.2", "typescript": "5.9.3", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 0fff145af1..03e64bc388 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -933,11 +933,11 @@ importers: specifier: 16.2.7 version: 16.2.7 stylelint: - specifier: 16.26.1 - version: 16.26.1(typescript@5.9.3) + specifier: 17.0.0 + version: 17.0.0(typescript@5.9.3) stylelint-config-ckeditor5: specifier: '>=9.1.0' - version: 13.0.0(stylelint@16.26.1(typescript@5.9.3)) + version: 13.0.0(stylelint@17.0.0(typescript@5.9.3)) ts-node: specifier: 10.9.2 version: 10.9.2(@swc/core@1.11.29(@swc/helpers@0.5.17))(@types/node@24.10.8)(typescript@5.9.3) @@ -993,11 +993,11 @@ importers: specifier: 16.2.7 version: 16.2.7 stylelint: - specifier: 16.26.1 - version: 16.26.1(typescript@5.9.3) + specifier: 17.0.0 + version: 17.0.0(typescript@5.9.3) stylelint-config-ckeditor5: specifier: '>=9.1.0' - version: 13.0.0(stylelint@16.26.1(typescript@5.9.3)) + version: 13.0.0(stylelint@17.0.0(typescript@5.9.3)) ts-node: specifier: 10.9.2 version: 10.9.2(@swc/core@1.11.29(@swc/helpers@0.5.17))(@types/node@24.10.8)(typescript@5.9.3) @@ -1053,11 +1053,11 @@ importers: specifier: 16.2.7 version: 16.2.7 stylelint: - specifier: 16.26.1 - version: 16.26.1(typescript@5.9.3) + specifier: 17.0.0 + version: 17.0.0(typescript@5.9.3) stylelint-config-ckeditor5: specifier: '>=9.1.0' - version: 13.0.0(stylelint@16.26.1(typescript@5.9.3)) + version: 13.0.0(stylelint@17.0.0(typescript@5.9.3)) ts-node: specifier: 10.9.2 version: 10.9.2(@swc/core@1.11.29(@swc/helpers@0.5.17))(@types/node@24.10.8)(typescript@5.9.3) @@ -1120,11 +1120,11 @@ importers: specifier: 16.2.7 version: 16.2.7 stylelint: - specifier: 16.26.1 - version: 16.26.1(typescript@5.9.3) + specifier: 17.0.0 + version: 17.0.0(typescript@5.9.3) stylelint-config-ckeditor5: specifier: '>=9.1.0' - version: 13.0.0(stylelint@16.26.1(typescript@5.9.3)) + version: 13.0.0(stylelint@17.0.0(typescript@5.9.3)) ts-node: specifier: 10.9.2 version: 10.9.2(@swc/core@1.11.29(@swc/helpers@0.5.17))(@types/node@24.10.8)(typescript@5.9.3) @@ -1187,11 +1187,11 @@ importers: specifier: 16.2.7 version: 16.2.7 stylelint: - specifier: 16.26.1 - version: 16.26.1(typescript@5.9.3) + specifier: 17.0.0 + version: 17.0.0(typescript@5.9.3) stylelint-config-ckeditor5: specifier: '>=9.1.0' - version: 13.0.0(stylelint@16.26.1(typescript@5.9.3)) + version: 13.0.0(stylelint@17.0.0(typescript@5.9.3)) ts-node: specifier: 10.9.2 version: 10.9.2(@swc/core@1.11.29(@swc/helpers@0.5.17))(@types/node@24.10.8)(typescript@5.9.3) @@ -2170,14 +2170,28 @@ packages: peerDependencies: '@csstools/css-tokenizer': ^3.0.4 + '@csstools/css-parser-algorithms@4.0.0': + resolution: {integrity: sha512-+B87qS7fIG3L5h3qwJ/IFbjoVoOe/bpOdh9hAjXbvx0o8ImEmUsGXN0inFOnk2ChCFgqkkGFQ+TpM5rbhkKe4w==} + engines: {node: '>=20.19.0'} + peerDependencies: + '@csstools/css-tokenizer': ^4.0.0 + '@csstools/css-syntax-patches-for-csstree@1.0.19': resolution: {integrity: sha512-QW5/SM2ARltEhoKcmRI1LoLf3/C7dHGswwCnfLcoMgqurBT4f8GvwXMgAbK/FwcxthmJRK5MGTtddj0yQn0J9g==} engines: {node: '>=18'} + '@csstools/css-syntax-patches-for-csstree@1.0.25': + resolution: {integrity: sha512-g0Kw9W3vjx5BEBAF8c5Fm2NcB/Fs8jJXh85aXqwEXiL+tqtOut07TWgyaGzAAfTM+gKckrrncyeGEZPcaRgm2Q==} + engines: {node: '>=18'} + '@csstools/css-tokenizer@3.0.4': resolution: {integrity: sha512-Vd/9EVDiu6PPJt9yAh6roZP6El1xHrdvIVGjyBsHR0RYwNHgL7FJPyIIW4fANJNG6FtyZfvlRPpFI4ZM/lubvw==} engines: {node: '>=18'} + '@csstools/css-tokenizer@4.0.0': + resolution: {integrity: sha512-QxULHAm7cNu72w97JUNCBFODFaXpbDg+dP8b/oWFAZ2MTRppA3U00Y2L1HqaS4J6yBqxwa/Y3nMBaxVKbB/NsA==} + engines: {node: '>=20.19.0'} + '@csstools/media-query-list-parser@3.0.1': resolution: {integrity: sha512-HNo8gGD02kHmcbX6PvCoUuOQvn4szyB9ca63vZHKX5A81QytgDG4oxG4IaEfHTlEZSZ6MjPEMWIVU+zF2PZcgw==} engines: {node: '>=18'} @@ -2192,18 +2206,37 @@ packages: '@csstools/css-parser-algorithms': ^3.0.5 '@csstools/css-tokenizer': ^3.0.4 + '@csstools/media-query-list-parser@5.0.0': + resolution: {integrity: sha512-T9lXmZOfnam3eMERPsszjY5NK0jX8RmThmmm99FZ8b7z8yMaFZWKwLWGZuTwdO3ddRY5fy13GmmEYZXB4I98Eg==} + engines: {node: '>=20.19.0'} + peerDependencies: + '@csstools/css-parser-algorithms': ^4.0.0 + '@csstools/css-tokenizer': ^4.0.0 + '@csstools/selector-resolve-nested@3.1.0': resolution: {integrity: sha512-mf1LEW0tJLKfWyvn5KdDrhpxHyuxpbNwTIwOYLIvsTffeyOf85j5oIzfG0yosxDgx/sswlqBnESYUcQH0vgZ0g==} engines: {node: '>=18'} peerDependencies: postcss-selector-parser: ^7.0.0 + '@csstools/selector-resolve-nested@4.0.0': + resolution: {integrity: sha512-9vAPxmp+Dx3wQBIUwc1v7Mdisw1kbbaGqXUM8QLTgWg7SoPGYtXBsMXvsFs/0Bn5yoFhcktzxNZGNaUt0VjgjA==} + engines: {node: '>=20.19.0'} + peerDependencies: + postcss-selector-parser: ^7.1.1 + '@csstools/selector-specificity@5.0.0': resolution: {integrity: sha512-PCqQV3c4CoVm3kdPhyeZ07VmBRdH2EpMFA/pd9OASpOEC3aXNGoqPDAZ80D0cLpMBxnmk0+yNhGsEx31hq7Gtw==} engines: {node: '>=18'} peerDependencies: postcss-selector-parser: ^7.0.0 + '@csstools/selector-specificity@6.0.0': + resolution: {integrity: sha512-4sSgl78OtOXEX/2d++8A83zHNTgwCJMaR24FvsYL7Uf/VS8HZk9PTwR51elTbGqMuwH3szLvvOXEaVnqn0Z3zA==} + engines: {node: '>=20.19.0'} + peerDependencies: + postcss-selector-parser: ^7.1.1 + '@digitak/esrun@3.2.26': resolution: {integrity: sha512-mL0bw7NhKVghp7mVsPwnAMhCn4NGAsk0KKFmAfnrYAZ/QCXR5xLXIYP82zLMjcsQag8DD6i1c+Yrm/57StYVzg==} engines: {node: '>=14.0'} @@ -4752,6 +4785,10 @@ packages: resolution: {integrity: sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==} engines: {node: '>=10'} + '@sindresorhus/merge-streams@4.0.0': + resolution: {integrity: sha512-tlqY9xq5ukxTUZBmoOp+m61cqwQD5pHJtFY3Mn8CA8ps6yghLH/Hw8UPdqg4OLmFW3IFlcXnQNmo/dh8HzXYIQ==} + engines: {node: '>=18'} + '@smithy/abort-controller@4.2.5': resolution: {integrity: sha512-j7HwVkBw68YW8UmFRcjZOmssE77Rvk0GWAIN1oFBhsaovQmZWYCIcGa9/pwRB0ExI8Sk9MWNALTjftjHZea7VA==} engines: {node: '>=18.0.0'} @@ -6378,6 +6415,10 @@ packages: balanced-match@2.0.0: resolution: {integrity: sha512-1ugUSr8BHXRnK23KfuYS+gVMC3LB8QGH9W1iGtDPsNWoQbgtXSExkBu2aDR4epiGWZOjZsj6lDl/N/AqqTC3UA==} + balanced-match@3.0.1: + resolution: {integrity: sha512-vjtV3hiLqYDNRoiAv0zC4QaGAMPomEoq83PRmYIofPswwZurCeWR5LByXm7SyoL0Zh5+2z0+HC7jG8gSZJUh0w==} + engines: {node: '>= 16'} + bare-events@2.7.0: resolution: {integrity: sha512-b3N5eTW1g7vXkw+0CXh/HazGTcO5KYuu/RCNaJbDMPI6LHDi+7qe8EmxKUVe1sUbY2KZOVZFyj62x0OEz9qyAA==} @@ -8754,6 +8795,10 @@ packages: resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} engines: {node: '>=10'} + globby@16.1.0: + resolution: {integrity: sha512-+A4Hq7m7Ze592k9gZRy4gJ27DrXRNnC1vPjxTt1qQxEY8RxagBkBxivkCwg7FxSTG0iLLEMaUx13oOr0R2/qcQ==} + engines: {node: '>=20'} + globjoin@0.1.4: resolution: {integrity: sha512-xYfnw62CKG8nLkZBfWbhWwDw02CHty86jfPcc2cr3ZfeuK9ysoVPPEUxf21bAD/rWAgk52SuBrLJlefNy8mvFg==} @@ -8808,6 +8853,10 @@ packages: resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} engines: {node: '>=8'} + has-flag@5.0.1: + resolution: {integrity: sha512-CsNUt5x9LUdx6hnk/E2SZLsDyvfqANZSUq4+D3D8RzDJ2M+HDTIkF60ibS1vHaK55vzgiZw1bEPFG9yH7l33wA==} + engines: {node: '>=12'} + has-property-descriptors@1.0.2: resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} @@ -8946,6 +8995,10 @@ packages: resolution: {integrity: sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ==} engines: {node: '>=8'} + html-tags@5.1.0: + resolution: {integrity: sha512-n6l5uca7/y5joxZ3LUePhzmBFUJ+U2YWzhMa8XUTecSeSlQiZdF5XAd/Q3/WUl0VsXgUwWi8I7CNIwdI5WN1SQ==} + engines: {node: '>=20.10'} + html-to-text@9.0.5: resolution: {integrity: sha512-qY60FjREgVZL03vJU6IfMV4GDjGBIoOyvuFdpBDIX9yTlDw0TjxVBQp+P8NvpdIXNJvfWBTNul7fsAQJq2FNpg==} engines: {node: '>=14'} @@ -9364,6 +9417,10 @@ packages: resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} engines: {node: '>=0.12.0'} + is-path-inside@4.0.0: + resolution: {integrity: sha512-lJJV/5dYS+RcL8uQdBDW9c9uWFLLBNRyFhnAKXw5tVqLlKZ4RMGZKv+YQ/IA3OhD+RpbJa1LLFM1FQPGyIXvOA==} + engines: {node: '>=12'} + is-plain-obj@1.1.0: resolution: {integrity: sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==} engines: {node: '>=0.10.0'} @@ -10146,6 +10203,9 @@ packages: mathml-tag-names@2.1.3: resolution: {integrity: sha512-APMBEanjybaPzUrfqU0IMU5I0AswKMH7k8OTLs0vvV4KZpExkTkY87nR/zpbuTPj+gARop7aGUbl11pnDfW6xg==} + mathml-tag-names@4.0.0: + resolution: {integrity: sha512-aa6AU2Pcx0VP/XWnh8IGL0SYSgQHDT6Ucror2j2mXeFAlN3ahaNs8EZtG1YiticMkSLj3Gt6VPFfZogt7G5iFQ==} + mdast-util-find-and-replace@3.0.2: resolution: {integrity: sha512-Tmd1Vg/m3Xz43afeNxDIhWRtFZgM2VLyaf4vSTYwudTyeuTneoL3qtWMA5jeLyz/O1vDJmmV4QuScFCA2tBPwg==} @@ -10223,6 +10283,10 @@ packages: resolution: {integrity: sha512-pxQJQzB6djGPXh08dacEloMFopsOqGVRKFPYvPOt9XDZ1HasbgDZA74CJGreSU4G3Ak7EFJGoiH2auq+yXISgA==} engines: {node: '>=18'} + meow@14.0.0: + resolution: {integrity: sha512-JhC3R1f6dbspVtmF3vKjAWz1EVIvwFrGGPLSdU6rK79xBwHWTuHoLnRX/t1/zHS1Ch1Y2UtIrih7DAHuH9JFJA==} + engines: {node: '>=20'} + merge-descriptors@1.0.3: resolution: {integrity: sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==} @@ -11681,6 +11745,10 @@ packages: resolution: {integrity: sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==} engines: {node: '>=4'} + postcss-selector-parser@7.1.1: + resolution: {integrity: sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg==} + engines: {node: '>=4'} + postcss-simple-vars@7.0.1: resolution: {integrity: sha512-5GLLXaS8qmzHMOjVxqkk1TZPf1jMqesiI7qLhnlyERalG0sMbHIbJqrcnrpmZdKCLglHnRHoEBB61RtGTsj++A==} engines: {node: '>=14.0'} @@ -12723,6 +12791,10 @@ packages: resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} engines: {node: '>=8'} + slash@5.1.0: + resolution: {integrity: sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==} + engines: {node: '>=14.16'} + slice-ansi@4.0.0: resolution: {integrity: sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==} engines: {node: '>=10'} @@ -13116,6 +13188,11 @@ packages: engines: {node: '>=18.12.0'} hasBin: true + stylelint@17.0.0: + resolution: {integrity: sha512-saMZ2mqdQre4AfouxcbTdpVglDRcROb4MIucKHvgsDb/0IX7ODhcaz+EOIyfxAsm8Zjl/7j4hJj6MgIYYM8Xwg==} + engines: {node: '>=20.19.0'} + hasBin: true + stylis@4.3.2: resolution: {integrity: sha512-bhtUjWd/z6ltJiQwg0dUfxEJ+W+jdqQd8TbWLWyeIJHlnsqmGLRFFd8e5mA0AZi/zx90smXRlN66YMTcaSFifg==} @@ -13148,6 +13225,10 @@ packages: resolution: {integrity: sha512-oK8WG9diS3DlhdUkcFn4tkNIiIbBx9lI2ClF8K+b2/m8Eyv47LSawxUzZQSNKUrVb2KsqeTDCcjAAVPYaSLVTA==} engines: {node: '>=14.18.0'} + supports-color@10.2.2: + resolution: {integrity: sha512-SS+jx45GF1QjgEXQx4NJZV9ImqmO2NPz5FNsIHrsDjh2YsHnawpan7SNQ1o8NuhrbHZy9AZhIoCUiCeaW/C80g==} + engines: {node: '>=18'} + supports-color@5.5.0: resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} engines: {node: '>=4'} @@ -13164,6 +13245,10 @@ packages: resolution: {integrity: sha512-zFObLMyZeEwzAoKCyu1B91U79K2t7ApXuQfo8OuxwXLDgcKxuwM+YvcbIhm6QWqz7mHUH1TVytR1PwVVjEuMig==} engines: {node: '>=14.18'} + supports-hyperlinks@4.4.0: + resolution: {integrity: sha512-UKbpT93hN5Nr9go5UY7bopIB9YQlMz9nm/ct4IXt/irb5YRkn9WaqrOBJGZ5Pwvsd5FQzSVeYlGdXoCAPQZrPg==} + engines: {node: '>=20'} + supports-preserve-symlinks-flag@1.0.0: resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} engines: {node: '>= 0.4'} @@ -13641,6 +13726,10 @@ packages: resolution: {integrity: sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg==} engines: {node: '>=4'} + unicorn-magic@0.4.0: + resolution: {integrity: sha512-wH590V9VNgYH9g3lH9wWjTrUoKsjLF6sGLjhR4sH1LWpLmCOH0Zf7PukhDA8BiS7KHe4oPNkcTHqYkj7SOGUOw==} + engines: {node: '>=20'} + unidragger@3.0.1: resolution: {integrity: sha512-RngbGSwBFmqGBWjkaH+yB677uzR95blSQyxq6hYbrQCejH3Mx1nm8DVOuh3M9k2fQyTstWUG5qlgCnNqV/9jVw==} @@ -14219,6 +14308,10 @@ packages: resolution: {integrity: sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + write-file-atomic@7.0.0: + resolution: {integrity: sha512-YnlPC6JqnZl6aO4uRc+dx5PHguiR9S6WeoLtpxNT9wIG+BDya7ZNE1q7KOjVgaA73hKhKLpVPgJ5QA9THQ5BRg==} + engines: {node: ^20.17.0 || >=22.9.0} + ws@7.5.10: resolution: {integrity: sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==} engines: {node: '>=8.3.0'} @@ -15864,7 +15957,7 @@ snapshots: raw-loader: 4.0.2(webpack@5.101.3(@swc/core@1.11.29(@swc/helpers@0.5.17))(esbuild@0.27.2)) style-loader: 2.0.0(webpack@5.101.3(@swc/core@1.11.29(@swc/helpers@0.5.17))(esbuild@0.27.2)) stylelint: 16.26.1(typescript@5.0.4) - stylelint-config-ckeditor5: 2.0.1(stylelint@16.26.1(typescript@5.9.3)) + stylelint-config-ckeditor5: 2.0.1(stylelint@16.26.1(typescript@5.0.4)) terser-webpack-plugin: 5.3.14(@swc/core@1.11.29(@swc/helpers@0.5.17))(esbuild@0.27.2)(webpack@5.101.3(@swc/core@1.11.29(@swc/helpers@0.5.17))(esbuild@0.27.2)) ts-loader: 9.5.4(typescript@5.0.4)(webpack@5.101.3(@swc/core@1.11.29(@swc/helpers@0.5.17))(esbuild@0.27.2)) ts-node: 10.9.2(@swc/core@1.11.29(@swc/helpers@0.5.17))(@types/node@24.10.8)(typescript@5.0.4) @@ -16393,10 +16486,18 @@ snapshots: dependencies: '@csstools/css-tokenizer': 3.0.4 + '@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0)': + dependencies: + '@csstools/css-tokenizer': 4.0.0 + '@csstools/css-syntax-patches-for-csstree@1.0.19': {} + '@csstools/css-syntax-patches-for-csstree@1.0.25': {} + '@csstools/css-tokenizer@3.0.4': {} + '@csstools/css-tokenizer@4.0.0': {} + '@csstools/media-query-list-parser@3.0.1(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4)': dependencies: '@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4) @@ -16407,14 +16508,27 @@ snapshots: '@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4) '@csstools/css-tokenizer': 3.0.4 + '@csstools/media-query-list-parser@5.0.0(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0)': + dependencies: + '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0) + '@csstools/css-tokenizer': 4.0.0 + '@csstools/selector-resolve-nested@3.1.0(postcss-selector-parser@7.1.0)': dependencies: postcss-selector-parser: 7.1.0 + '@csstools/selector-resolve-nested@4.0.0(postcss-selector-parser@7.1.1)': + dependencies: + postcss-selector-parser: 7.1.1 + '@csstools/selector-specificity@5.0.0(postcss-selector-parser@7.1.0)': dependencies: postcss-selector-parser: 7.1.0 + '@csstools/selector-specificity@6.0.0(postcss-selector-parser@7.1.1)': + dependencies: + postcss-selector-parser: 7.1.1 + '@digitak/esrun@3.2.26': dependencies: '@digitak/grubber': 3.1.4 @@ -19242,6 +19356,8 @@ snapshots: '@sindresorhus/is@4.6.0': {} + '@sindresorhus/merge-streams@4.0.0': {} + '@smithy/abort-controller@4.2.5': dependencies: '@smithy/types': 4.11.0 @@ -19749,7 +19865,7 @@ snapshots: - supports-color - typescript - '@stylistic/stylelint-plugin@3.1.3(stylelint@16.26.1(typescript@5.9.3))': + '@stylistic/stylelint-plugin@3.1.3(stylelint@17.0.0(typescript@5.9.3))': dependencies: '@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4) '@csstools/css-tokenizer': 3.0.4 @@ -19759,7 +19875,7 @@ snapshots: postcss-selector-parser: 6.1.2 postcss-value-parser: 4.2.0 style-search: 0.1.0 - stylelint: 16.26.1(typescript@5.9.3) + stylelint: 17.0.0(typescript@5.9.3) '@swc/core-darwin-arm64@1.11.29': optional: true @@ -21350,6 +21466,8 @@ snapshots: balanced-match@2.0.0: {} + balanced-match@3.0.1: {} + bare-events@2.7.0: {} bare-fs@4.4.5: @@ -24506,6 +24624,15 @@ snapshots: merge2: 1.4.1 slash: 3.0.0 + globby@16.1.0: + dependencies: + '@sindresorhus/merge-streams': 4.0.0 + fast-glob: 3.3.3 + ignore: 7.0.5 + is-path-inside: 4.0.0 + slash: 5.1.0 + unicorn-magic: 0.4.0 + globjoin@0.1.4: {} glur@1.1.2: {} @@ -24565,6 +24692,8 @@ snapshots: has-flag@4.0.0: {} + has-flag@5.0.1: {} + has-property-descriptors@1.0.2: dependencies: es-define-property: 1.0.1 @@ -24761,6 +24890,8 @@ snapshots: html-tags@3.3.1: {} + html-tags@5.1.0: {} + html-to-text@9.0.5: dependencies: '@selderee/plugin-htmlparser2': 0.11.0 @@ -25195,6 +25326,8 @@ snapshots: is-number@7.0.0: {} + is-path-inside@4.0.0: {} + is-plain-obj@1.1.0: {} is-plain-obj@2.1.0: {} @@ -26115,6 +26248,8 @@ snapshots: mathml-tag-names@2.1.3: {} + mathml-tag-names@4.0.0: {} + mdast-util-find-and-replace@3.0.2: dependencies: '@types/mdast': 4.0.4 @@ -26276,6 +26411,8 @@ snapshots: meow@13.2.0: {} + meow@14.0.0: {} + merge-descriptors@1.0.3: {} merge-descriptors@2.0.0: {} @@ -27891,6 +28028,11 @@ snapshots: cssesc: 3.0.0 util-deprecate: 1.0.2 + postcss-selector-parser@7.1.1: + dependencies: + cssesc: 3.0.0 + util-deprecate: 1.0.2 + postcss-simple-vars@7.0.1(postcss@8.5.6): dependencies: postcss: 8.5.6 @@ -29156,6 +29298,8 @@ snapshots: slash@3.0.0: {} + slash@5.1.0: {} + slice-ansi@4.0.0: dependencies: ansi-styles: 4.3.0 @@ -29582,29 +29726,29 @@ snapshots: postcss: 8.5.6 postcss-selector-parser: 7.1.0 - stylelint-config-ckeditor5@13.0.0(stylelint@16.26.1(typescript@5.9.3)): + stylelint-config-ckeditor5@13.0.0(stylelint@17.0.0(typescript@5.9.3)): dependencies: - '@stylistic/stylelint-plugin': 3.1.3(stylelint@16.26.1(typescript@5.9.3)) - stylelint: 16.26.1(typescript@5.9.3) - stylelint-config-recommended: 16.0.0(stylelint@16.26.1(typescript@5.9.3)) - stylelint-plugin-ckeditor5-rules: 13.0.0(stylelint@16.26.1(typescript@5.9.3)) + '@stylistic/stylelint-plugin': 3.1.3(stylelint@17.0.0(typescript@5.9.3)) + stylelint: 17.0.0(typescript@5.9.3) + stylelint-config-recommended: 16.0.0(stylelint@17.0.0(typescript@5.9.3)) + stylelint-plugin-ckeditor5-rules: 13.0.0(stylelint@17.0.0(typescript@5.9.3)) - stylelint-config-ckeditor5@2.0.1(stylelint@16.26.1(typescript@5.9.3)): + stylelint-config-ckeditor5@2.0.1(stylelint@16.26.1(typescript@5.0.4)): dependencies: - stylelint: 16.26.1(typescript@5.9.3) - stylelint-config-recommended: 3.0.0(stylelint@16.26.1(typescript@5.9.3)) + stylelint: 16.26.1(typescript@5.0.4) + stylelint-config-recommended: 3.0.0(stylelint@16.26.1(typescript@5.0.4)) - stylelint-config-recommended@16.0.0(stylelint@16.26.1(typescript@5.9.3)): + stylelint-config-recommended@16.0.0(stylelint@17.0.0(typescript@5.9.3)): dependencies: - stylelint: 16.26.1(typescript@5.9.3) + stylelint: 17.0.0(typescript@5.9.3) - stylelint-config-recommended@3.0.0(stylelint@16.26.1(typescript@5.9.3)): + stylelint-config-recommended@3.0.0(stylelint@16.26.1(typescript@5.0.4)): dependencies: - stylelint: 16.26.1(typescript@5.9.3) + stylelint: 16.26.1(typescript@5.0.4) - stylelint-plugin-ckeditor5-rules@13.0.0(stylelint@16.26.1(typescript@5.9.3)): + stylelint-plugin-ckeditor5-rules@13.0.0(stylelint@17.0.0(typescript@5.9.3)): dependencies: - stylelint: 16.26.1(typescript@5.9.3) + stylelint: 17.0.0(typescript@5.9.3) stylelint@16.26.1(typescript@5.0.4): dependencies: @@ -29651,15 +29795,15 @@ snapshots: - supports-color - typescript - stylelint@16.26.1(typescript@5.9.3): + stylelint@17.0.0(typescript@5.9.3): dependencies: - '@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4) - '@csstools/css-syntax-patches-for-csstree': 1.0.19 - '@csstools/css-tokenizer': 3.0.4 - '@csstools/media-query-list-parser': 4.0.3(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4) - '@csstools/selector-specificity': 5.0.0(postcss-selector-parser@7.1.0) - '@dual-bundle/import-meta-resolve': 4.2.1 - balanced-match: 2.0.0 + '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0) + '@csstools/css-syntax-patches-for-csstree': 1.0.25 + '@csstools/css-tokenizer': 4.0.0 + '@csstools/media-query-list-parser': 5.0.0(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) + '@csstools/selector-resolve-nested': 4.0.0(postcss-selector-parser@7.1.1) + '@csstools/selector-specificity': 6.0.0(postcss-selector-parser@7.1.1) + balanced-match: 3.0.1 colord: 2.9.3 cosmiconfig: 9.0.0(typescript@5.9.3) css-functions-list: 3.2.3 @@ -29669,29 +29813,28 @@ snapshots: fastest-levenshtein: 1.0.16 file-entry-cache: 11.1.1 global-modules: 2.0.0 - globby: 11.1.0 + globby: 16.1.0 globjoin: 0.1.4 - html-tags: 3.3.1 + html-tags: 5.1.0 ignore: 7.0.5 + import-meta-resolve: 4.2.0 imurmurhash: 0.1.4 is-plain-object: 5.0.0 known-css-properties: 0.37.0 - mathml-tag-names: 2.1.3 - meow: 13.2.0 + mathml-tag-names: 4.0.0 + meow: 14.0.0 micromatch: 4.0.8 normalize-path: 3.0.0 picocolors: 1.1.1 postcss: 8.5.6 - postcss-resolve-nested-selector: 0.1.6 postcss-safe-parser: 7.0.1(postcss@8.5.6) - postcss-selector-parser: 7.1.0 + postcss-selector-parser: 7.1.1 postcss-value-parser: 4.2.0 - resolve-from: 5.0.0 - string-width: 4.2.3 - supports-hyperlinks: 3.2.0 + string-width: 8.1.0 + supports-hyperlinks: 4.4.0 svg-tags: 1.0.0 table: 6.9.0 - write-file-atomic: 5.0.1 + write-file-atomic: 7.0.0 transitivePeerDependencies: - supports-color - typescript @@ -29746,6 +29889,8 @@ snapshots: transitivePeerDependencies: - supports-color + supports-color@10.2.2: {} + supports-color@5.5.0: dependencies: has-flag: 3.0.0 @@ -29763,6 +29908,11 @@ snapshots: has-flag: 4.0.0 supports-color: 7.2.0 + supports-hyperlinks@4.4.0: + dependencies: + has-flag: 5.0.1 + supports-color: 10.2.2 + supports-preserve-symlinks-flag@1.0.0: {} svg-pan-zoom@3.6.2: {} @@ -30338,6 +30488,8 @@ snapshots: unicode-property-aliases-ecmascript@1.1.0: {} + unicorn-magic@0.4.0: {} + unidragger@3.0.1: dependencies: ev-emitter: 2.1.2 @@ -31050,6 +31202,11 @@ snapshots: imurmurhash: 0.1.4 signal-exit: 4.1.0 + write-file-atomic@7.0.0: + dependencies: + imurmurhash: 0.1.4 + signal-exit: 4.1.0 + ws@7.5.10(bufferutil@4.0.9)(utf-8-validate@6.0.5): optionalDependencies: bufferutil: 4.0.9 From 33bbe994d7804d8d12b6cccfcaacfce0e6878816 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 16 Jan 2026 06:55:00 +0000 Subject: [PATCH 056/353] fix(deps): update ckeditor monorepo to v47.4.0 --- packages/ckeditor5-admonition/package.json | 4 +- packages/ckeditor5-footnotes/package.json | 4 +- .../ckeditor5-keyboard-marker/package.json | 4 +- packages/ckeditor5-math/package.json | 6 +- packages/ckeditor5-mermaid/package.json | 4 +- packages/ckeditor5/package.json | 4 +- pnpm-lock.yaml | 2236 ++++++++--------- 7 files changed, 1084 insertions(+), 1178 deletions(-) diff --git a/packages/ckeditor5-admonition/package.json b/packages/ckeditor5-admonition/package.json index 39bebc67bb..8a6aaa4a52 100644 --- a/packages/ckeditor5-admonition/package.json +++ b/packages/ckeditor5-admonition/package.json @@ -28,7 +28,7 @@ "@typescript-eslint/parser": "8.53.0", "@vitest/browser": "4.0.17", "@vitest/coverage-istanbul": "4.0.17", - "ckeditor5": "47.3.0", + "ckeditor5": "47.4.0", "eslint": "9.39.2", "eslint-config-ckeditor5": ">=9.1.0", "http-server": "14.1.1", @@ -42,7 +42,7 @@ "webdriverio": "9.23.0" }, "peerDependencies": { - "ckeditor5": "47.3.0" + "ckeditor5": "47.4.0" }, "author": "Elian Doran ", "license": "GPL-2.0-or-later", diff --git a/packages/ckeditor5-footnotes/package.json b/packages/ckeditor5-footnotes/package.json index 1616b30e67..b3f32618b9 100644 --- a/packages/ckeditor5-footnotes/package.json +++ b/packages/ckeditor5-footnotes/package.json @@ -29,7 +29,7 @@ "@typescript-eslint/parser": "8.53.0", "@vitest/browser": "4.0.17", "@vitest/coverage-istanbul": "4.0.17", - "ckeditor5": "47.3.0", + "ckeditor5": "47.4.0", "eslint": "9.39.2", "eslint-config-ckeditor5": ">=9.1.0", "http-server": "14.1.1", @@ -43,7 +43,7 @@ "webdriverio": "9.23.0" }, "peerDependencies": { - "ckeditor5": "47.3.0" + "ckeditor5": "47.4.0" }, "scripts": { "build": "node ./scripts/build-dist.mjs", diff --git a/packages/ckeditor5-keyboard-marker/package.json b/packages/ckeditor5-keyboard-marker/package.json index fab2b92216..e8b65485d7 100644 --- a/packages/ckeditor5-keyboard-marker/package.json +++ b/packages/ckeditor5-keyboard-marker/package.json @@ -31,7 +31,7 @@ "@typescript-eslint/parser": "8.53.0", "@vitest/browser": "4.0.17", "@vitest/coverage-istanbul": "4.0.17", - "ckeditor5": "47.3.0", + "ckeditor5": "47.4.0", "eslint": "9.39.2", "eslint-config-ckeditor5": ">=9.1.0", "http-server": "14.1.1", @@ -45,7 +45,7 @@ "webdriverio": "9.23.0" }, "peerDependencies": { - "ckeditor5": "47.3.0" + "ckeditor5": "47.4.0" }, "scripts": { "build": "node ./scripts/build-dist.mjs", diff --git a/packages/ckeditor5-math/package.json b/packages/ckeditor5-math/package.json index dfccd3b50c..43d6c9cbfe 100644 --- a/packages/ckeditor5-math/package.json +++ b/packages/ckeditor5-math/package.json @@ -31,7 +31,7 @@ "@typescript-eslint/parser": "8.53.0", "@vitest/browser": "4.0.17", "@vitest/coverage-istanbul": "4.0.17", - "ckeditor5": "47.3.0", + "ckeditor5": "47.4.0", "eslint": "9.39.2", "eslint-config-ckeditor5": ">=9.1.0", "http-server": "14.1.1", @@ -45,7 +45,7 @@ "webdriverio": "9.23.0" }, "peerDependencies": { - "ckeditor5": "47.3.0" + "ckeditor5": "47.4.0" }, "scripts": { "build": "node ./scripts/build-dist.mjs", @@ -70,7 +70,7 @@ ] }, "dependencies": { - "@ckeditor/ckeditor5-icons": "47.3.0", + "@ckeditor/ckeditor5-icons": "47.4.0", "mathlive": "0.108.2" } } diff --git a/packages/ckeditor5-mermaid/package.json b/packages/ckeditor5-mermaid/package.json index 683e2de02c..10b632874e 100644 --- a/packages/ckeditor5-mermaid/package.json +++ b/packages/ckeditor5-mermaid/package.json @@ -31,7 +31,7 @@ "@typescript-eslint/parser": "8.53.0", "@vitest/browser": "4.0.17", "@vitest/coverage-istanbul": "4.0.17", - "ckeditor5": "47.3.0", + "ckeditor5": "47.4.0", "eslint": "9.39.2", "eslint-config-ckeditor5": ">=9.1.0", "http-server": "14.1.1", @@ -45,7 +45,7 @@ "webdriverio": "9.23.0" }, "peerDependencies": { - "ckeditor5": "47.3.0" + "ckeditor5": "47.4.0" }, "scripts": { "build": "node ./scripts/build-dist.mjs", diff --git a/packages/ckeditor5/package.json b/packages/ckeditor5/package.json index cf0369292a..d912a96852 100644 --- a/packages/ckeditor5/package.json +++ b/packages/ckeditor5/package.json @@ -12,8 +12,8 @@ "@triliumnext/ckeditor5-keyboard-marker": "workspace:*", "@triliumnext/ckeditor5-math": "workspace:*", "@triliumnext/ckeditor5-mermaid": "workspace:*", - "ckeditor5": "47.3.0", - "ckeditor5-premium-features": "47.3.0" + "ckeditor5": "47.4.0", + "ckeditor5-premium-features": "47.4.0" }, "devDependencies": { "@smithy/middleware-retry": "4.4.23", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 18dfd0244e..2573fc1164 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -881,11 +881,11 @@ importers: specifier: workspace:* version: link:../commons ckeditor5: - specifier: 47.3.0 - version: 47.3.0 + specifier: 47.4.0 + version: 47.4.0 ckeditor5-premium-features: - specifier: 47.3.0 - version: 47.3.0(bufferutil@4.0.9)(ckeditor5@47.3.0)(utf-8-validate@6.0.5) + specifier: 47.4.0 + version: 47.4.0(bufferutil@4.0.9)(ckeditor5@47.4.0)(utf-8-validate@6.0.5) devDependencies: '@smithy/middleware-retry': specifier: 4.4.23 @@ -918,8 +918,8 @@ importers: specifier: 4.0.17 version: 4.0.17(vitest@4.0.17) ckeditor5: - specifier: 47.3.0 - version: 47.3.0 + specifier: 47.4.0 + version: 47.4.0 eslint: specifier: 9.39.2 version: 9.39.2(jiti@2.6.1) @@ -978,8 +978,8 @@ importers: specifier: 4.0.17 version: 4.0.17(vitest@4.0.17) ckeditor5: - specifier: 47.3.0 - version: 47.3.0 + specifier: 47.4.0 + version: 47.4.0 eslint: specifier: 9.39.2 version: 9.39.2(jiti@2.6.1) @@ -1038,8 +1038,8 @@ importers: specifier: 4.0.17 version: 4.0.17(vitest@4.0.17) ckeditor5: - specifier: 47.3.0 - version: 47.3.0 + specifier: 47.4.0 + version: 47.4.0 eslint: specifier: 9.39.2 version: 9.39.2(jiti@2.6.1) @@ -1077,8 +1077,8 @@ importers: packages/ckeditor5-math: dependencies: '@ckeditor/ckeditor5-icons': - specifier: 47.3.0 - version: 47.3.0 + specifier: 47.4.0 + version: 47.4.0 mathlive: specifier: 0.108.2 version: 0.108.2 @@ -1105,8 +1105,8 @@ importers: specifier: 4.0.17 version: 4.0.17(vitest@4.0.17) ckeditor5: - specifier: 47.3.0 - version: 47.3.0 + specifier: 47.4.0 + version: 47.4.0 eslint: specifier: 9.39.2 version: 9.39.2(jiti@2.6.1) @@ -1172,8 +1172,8 @@ importers: specifier: 4.0.17 version: 4.0.17(vitest@4.0.17) ckeditor5: - specifier: 47.3.0 - version: 47.3.0 + specifier: 47.4.0 + version: 47.4.0 eslint: specifier: 9.39.2 version: 9.39.2(jiti@2.6.1) @@ -1792,62 +1792,62 @@ packages: '@chevrotain/utils@11.0.3': resolution: {integrity: sha512-YslZMgtJUyuMbZ+aKvfF3x1f5liK4mWNxghFRv7jqRR9C3R3fAOGTTKvxXDa2Y1s9zSbcpuO0cAxDYsc9SrXoQ==} - '@ckeditor/ckeditor-cloud-services-collaboration@53.0.1': - resolution: {integrity: sha512-Em7T4xiwQjG9SJKSwLxxPOf33tDekOV3S1WoSBqi7Qp1icKedYwH3f7k2Zjfe/3XAC3EVNVhi18MhUjsEiO/Lw==} + '@ckeditor/ckeditor-cloud-services-collaboration@53.0.2': + resolution: {integrity: sha512-06yWDZ0w1vRA+G70qzLYEmGzrd4wo+Hci9YneyVOCI3LGnFa89E9GumzQPn7MHx2RFIS/EekDBhq5o89nC2/7A==} peerDependencies: - '@ckeditor/ckeditor5-utils': '>= 37.0' - ckeditor5: '>= 37.0' + '@ckeditor/ckeditor5-utils': '>= 37.0 || ^0.0.0-nightly || ^0.0.0-internal' + ckeditor5: '>= 37.0.0 || ^0.0.0-nightly || ^0.0.0-internal' - '@ckeditor/ckeditor5-adapter-ckfinder@47.3.0': - resolution: {integrity: sha512-I0oE2wuyGSwCirHRj5i+IvBRKUrlmGCP7HMGv7fzXcHS1MW43LV0t9L8PQ/aKQX3gNmiqlfj631y/S7s5nqR8A==} + '@ckeditor/ckeditor5-adapter-ckfinder@47.4.0': + resolution: {integrity: sha512-g90RXXOoyBL0hsUMo6/IsCKF6qlKtxYlwzeTch+XboZOxkvJmozETKY4mnkR+XI1xZeO1bqqzLe8sKiFRvG7Hg==} - '@ckeditor/ckeditor5-ai@47.3.0': - resolution: {integrity: sha512-XZgjRD0wSTijzDefnB7cr6pxbLaqkT/vwfG01JvGpSt6Hg42bFEqAUSf5NBVRTJ7S3L9p54GKhFdSVAfJZJfog==} + '@ckeditor/ckeditor5-ai@47.4.0': + resolution: {integrity: sha512-fcukYJTeV7TA5vSlRj81uAlzwAVRn6kXJukrdMuUuWh4YUPGmv4X1uzb8P+tMeo29yZHYoWURI8Xk2QDxe7uow==} - '@ckeditor/ckeditor5-alignment@47.3.0': - resolution: {integrity: sha512-T01xV7UsS4D1VbyRdWxc68Wl4NN/Ov/4+2EsbjYF7O0UA0pJs8dWZJOZ+yGFJ6p8Aask991eu91vy3r/nq3d+g==} + '@ckeditor/ckeditor5-alignment@47.4.0': + resolution: {integrity: sha512-MI4PrumF62HZ5kG824WOhqtntDS6oPhmlFwg2vOd8L8fW1Gn4SgigvhqxARLi/OIf0ExnNcXFunS30B6lz1Ciw==} - '@ckeditor/ckeditor5-autoformat@47.3.0': - resolution: {integrity: sha512-1Np63YOsNMddrVHtsAPZUQvVuhMyvmwPwnPO3EHudPPDg8c5p+fbSb7DSUSPCUmkIKS8RJ8tv/3eDpS7y+EEXg==} + '@ckeditor/ckeditor5-autoformat@47.4.0': + resolution: {integrity: sha512-dYjPpSaIt8z8d7em+I54+S6Y0m/4fXX27DF6gXMHG+79TIzZxakHK096RJBxj3cIjpzSjHI+v9FQ1Y+nO/M79Q==} - '@ckeditor/ckeditor5-autosave@47.3.0': - resolution: {integrity: sha512-ctYdlBcJ/CPUUcpRzCbCp3oG2HWn8gy7GZUL95C1BIZTH08cLKZgkX0TySSUHygMvVymgvWq3LrmwByWri9AvQ==} + '@ckeditor/ckeditor5-autosave@47.4.0': + resolution: {integrity: sha512-1DpjdGn+xXfYoeDd6SIcQbkUiOeHQbjN7qmjQWrd6JvowQ6loPtDPGL9OHmL4OFubrVn5GM4dS3E1+cU29SVHg==} - '@ckeditor/ckeditor5-basic-styles@47.3.0': - resolution: {integrity: sha512-KGDZLyhVc+sF9o8XTiupNRdroALhLpfOssWQv8zzyu7Ak2LFYXCrrr3abscbIX2whL/X92sted11ktLaLmgL0w==} + '@ckeditor/ckeditor5-basic-styles@47.4.0': + resolution: {integrity: sha512-nCVP7W5ryshBG7UfXuFRv58qb/HmSS9Gjb2UUM84ODLOjYPFxvzWgQ5bV5t+x1bYAT8z/Xqfv9Ycs9ywEwOA9A==} - '@ckeditor/ckeditor5-block-quote@47.3.0': - resolution: {integrity: sha512-Ik3buFYNpEYVkI5LnimDbHTOgHAYtkZ2qTwGT47wAvyScgQ9Jx0fcUBA6EjX2EuGr6w/snZfXkI4WsZqrMYp+g==} + '@ckeditor/ckeditor5-block-quote@47.4.0': + resolution: {integrity: sha512-B1iX0p5ByU/y7AVREgevr0Kfobt9uT1n9rtXToXbA9W4u4yZIVJULpceTgDw+/OJNU8lyKbq/S/6trjYFsyf0Q==} - '@ckeditor/ckeditor5-bookmark@47.3.0': - resolution: {integrity: sha512-Cn+O/Ayr9zcKk/v9dyP1SXbpFslLGCiinS6Nb8jQOS+pmxb1s32W/ycZBtAg0EYmTMskoVEkpwz6ugogNAzmaw==} + '@ckeditor/ckeditor5-bookmark@47.4.0': + resolution: {integrity: sha512-XBAOfYpy0TdVqAXsBgKSKCD46S7kR/oohqP9UKTGUGrNjojW6FS1k1IxvcpRVATn0xPHjZld58wkwizIdeJveg==} - '@ckeditor/ckeditor5-case-change@47.3.0': - resolution: {integrity: sha512-l0+4RWk2t2G9GbSSZMVQdTbhnN3L8pMshoSCDdR43lC+tkmx1zgRTTE04sibnVt6pSVynmVO2KQ5xVbMIAoHlw==} + '@ckeditor/ckeditor5-case-change@47.4.0': + resolution: {integrity: sha512-MgAbh3QHpU8yxCvtRQQP67av0NeglrG0zFfPZK5fGIOugcmeIMN/joGdvND6XL/WfY4J2a8PpODoYubbhrrXug==} - '@ckeditor/ckeditor5-ckbox@47.3.0': - resolution: {integrity: sha512-SVF3CGH7/DBSrsV/vMFIzyvSPAoD1Qg12A5dS+ySnG46XC8ou9uQXXAfIGzAvwajC8GF3LJf9nG4+vJx3tIE/A==} + '@ckeditor/ckeditor5-ckbox@47.4.0': + resolution: {integrity: sha512-Utk9nYwzVRLQXYVVR+oi3x4xN7C0lzt+ZUyPjBRf3k60ijP/OpA8lsJJWzonuEEsdELsLzaBNSivTa9hjLZLDA==} - '@ckeditor/ckeditor5-ckfinder@47.3.0': - resolution: {integrity: sha512-OIDpmoHsw+ZRbhso3EvnSDEKkXZBgZTq7TQT7+TAg264SWuGB7y6UCKMMoA5OWpuqDJh/Wp8wBubTWqA3OwYmw==} + '@ckeditor/ckeditor5-ckfinder@47.4.0': + resolution: {integrity: sha512-jXWwDfzFOn2S/oK84Io6cB7I0W9I7CwMyBfg5YbCEhYtv5aeNQBpRqwik/5cfmMrBMBXrPu1QRs60NIwegk/Eg==} - '@ckeditor/ckeditor5-clipboard@47.3.0': - resolution: {integrity: sha512-fVBBWyWIaLTTUZglvOz+ld0QfQR8yr9TVwgk0XFN90S3UxFiYYkxgDAeef/o51qBhBGotgw8hGYYbY4k4G10mA==} + '@ckeditor/ckeditor5-clipboard@47.4.0': + resolution: {integrity: sha512-LUR5yTXjHxLn8YLKrJj4/DBtqk6zdPg5SAVXkpNSz5UxU63aaj/L7jKCInr36Uy23Ov5TgT6FkgXPaBtakAqDA==} - '@ckeditor/ckeditor5-cloud-services@47.3.0': - resolution: {integrity: sha512-oFHz/Aavs6IDU6XwQD9NUgssJs3hSv4Vu2Np5rkZIyhabKRJcNma7fwM+gmmvQJupltv0uG/0ldMigjfEqHAQA==} + '@ckeditor/ckeditor5-cloud-services@47.4.0': + resolution: {integrity: sha512-6xUiyoMkcW8F/8OJrEGeKrMixRGLeQYHxij7tYyrXUqugdCJmZ5WNfvsoyVBwk7g3XQDSKnfKG28gSVBPirwBQ==} - '@ckeditor/ckeditor5-code-block@47.3.0': - resolution: {integrity: sha512-zgzlCFqqJxWRTvuIGl9jJ0KYGZIjsCOYHjj1s3+asXjuskRoSip6yzcPK/LPaQXkUYf9zTGJHQ9tqmiNbRQBiA==} + '@ckeditor/ckeditor5-code-block@47.4.0': + resolution: {integrity: sha512-lfZd1Zu6FvHbOEXa1yJnuRDK0jYXZR0OaV9ek6A2ZQ6Z169Brc+aH1sTakw7r6S8m1clTz+vRH3UuVk7ETsQGA==} - '@ckeditor/ckeditor5-collaboration-core@47.3.0': - resolution: {integrity: sha512-v/ndL/J1y5ISZrLR9F43ZRZfN98lejF7itMolKkPDbtJOIi+Vxbimp0KlFqbLzeCNO5GDT2uM8JXnShuU2H9Lw==} + '@ckeditor/ckeditor5-collaboration-core@47.4.0': + resolution: {integrity: sha512-YFitobi32yDHxLHUJuLBQzsxgDE0fiTCYnqBU8vrYUkqUCeCC20AZ6pOK8dMF/kORCh9znjjHiWVch0EoNYgkQ==} - '@ckeditor/ckeditor5-comments@47.3.0': - resolution: {integrity: sha512-hNSpNcbqISDnKwBbDmB+i8VBEb7F4b+l9wp68sbXmSSM91Eud+HiPwftwsH4zDXORlyXb6liNZTIEceayHR6Bg==} + '@ckeditor/ckeditor5-comments@47.4.0': + resolution: {integrity: sha512-7fNWs/Or10B7koS9rEQIS9fTkPi2S4TJO9QclHK+gddRD4Y8ZdD8iO2FtAmoGB5dy8dJG2gtr4f9BTvD1lhMpA==} - '@ckeditor/ckeditor5-core@47.3.0': - resolution: {integrity: sha512-jLawN3a8yL5lbwG8gZeJihcVKkDgq+rAFeXc+Rd+nw+c5uGCdkc5F7PCRjhw+JOGruXUhNsbiF/4iNv3hUcO/A==} + '@ckeditor/ckeditor5-core@47.4.0': + resolution: {integrity: sha512-upV/3x9fhgFWxVVtwR47zCOAvZKgP8a8N7UQOFwfs3Tr52+oE1gULWKTiS9079MBaXaIqtM/EbelNdvBh4gOGg==} '@ckeditor/ckeditor5-dev-build-tools@54.3.0': resolution: {integrity: sha512-46gPUhiSdDdFBsGewGgSnVq2E5vkwXBVN2L9dbQ3t9Wta3F4zjXxw+496mAq71hAVxfZmyACjaVT3pAJojUIRw==} @@ -1862,220 +1862,220 @@ packages: resolution: {integrity: sha512-Qz6VUUbYTuQ+pMfR9UNZ5hf0lriNducmDdSCEKh8u+UXP7s1DeS6SmrlhnGcEUD97mUTuU2o7RgpqkSy19kPBA==} engines: {node: '>=24.11.0', npm: '>=5.7.1'} - '@ckeditor/ckeditor5-document-outline@47.3.0': - resolution: {integrity: sha512-99kjWN+B+s36+aH3Vv+g24qan3VGbCuudz2H+4syw4xOSQ50/nLS90PcuH/PYaaXTzt+hB0T4Nide7OCky/uog==} + '@ckeditor/ckeditor5-document-outline@47.4.0': + resolution: {integrity: sha512-tFDStt2wwfQjV/4mUyxe6I69fMfRtrhyOnEh7Ou6q22X+e5290oPrCTSLN9KbmF6ISp6aRFKvQuawRPkN8er+A==} - '@ckeditor/ckeditor5-easy-image@47.3.0': - resolution: {integrity: sha512-pdQHtLBdkDuY59FzzgyTjS6XM5aJlSUW33sOSfN0I/iROl6LpSr1kHjf6ybJAAWEhSD6B+o6hv4+K+tx184UpA==} + '@ckeditor/ckeditor5-easy-image@47.4.0': + resolution: {integrity: sha512-YMxvD3Gh6kVux1OKdtdubvjtUHu4TIN7YgCThqsfnuumpnx94Dhq3+wy8o/dO73dRcq/iVvb/9LmkivT4+8uXg==} - '@ckeditor/ckeditor5-editor-balloon@47.3.0': - resolution: {integrity: sha512-8EzuV48gTuqrNd5rt58rp7eWf8B5q1PeRUS2f5fAF6RwDS6HsBDeqmEic8JPxOh+30pvAcR6UiylSYe6S+H9bg==} + '@ckeditor/ckeditor5-editor-balloon@47.4.0': + resolution: {integrity: sha512-FZuHy5EhzssTQZTuXQF7aVRJyvY0QaIOr6yj8fttRoWQgIDMzJNm+rVW9C9FRa1+j1i9tlrE21+GYIhCgEGyOg==} - '@ckeditor/ckeditor5-editor-classic@47.3.0': - resolution: {integrity: sha512-uCA8cr23LSJf8POkg2c403zS+xWjbE8Ucu521PQPcxrTMyTI6rYfjnuZ6vT/qzqAwZrLpiNZucJIQxRDFhLWGQ==} + '@ckeditor/ckeditor5-editor-classic@47.4.0': + resolution: {integrity: sha512-b698aEHRJSC4jMP0fYD78tdqMw5oQHtCpUL6lU8LFsysCe5M0cqgab4V0hEjeIsg4Ft/UmkgFd1aAleRCDftJg==} - '@ckeditor/ckeditor5-editor-decoupled@47.3.0': - resolution: {integrity: sha512-G4szgSWluqNG/wv+JQxiZv1lzwUzTxdPZWO/mL8pi3sc69vp30QYT+I4TOTLpfBdISBPkWajn/hfEXJPS1hCXw==} + '@ckeditor/ckeditor5-editor-decoupled@47.4.0': + resolution: {integrity: sha512-4Nk/fe5Sob9aUf8gf4K7GQjqI0XftDThGRjX1eKOSDs+OGXRyB4Fxtu+tHLCyCt8cITac/PAMWaO7dwqbAK8bA==} - '@ckeditor/ckeditor5-editor-inline@47.3.0': - resolution: {integrity: sha512-ie66wno1gbxNuoqGJ7iSDIz4gydPxJtSE5F9kb3NjfwecQxjj/0yBS+HsbZhqbFFNdJ01KZOtbAxNXQ0r1OW2g==} + '@ckeditor/ckeditor5-editor-inline@47.4.0': + resolution: {integrity: sha512-/xKtAwq0Pg3Zq7q9QcmrUnqc8XScrUlixWnl58gOxsdmflaSaK4qLtnId0FmSrax0tqVp1qihsUfvE5uUNnyGg==} - '@ckeditor/ckeditor5-editor-multi-root@47.3.0': - resolution: {integrity: sha512-PRxVNpoo7YiECugo9rPsUmuTL3f2xUwvHSUKh6FvPneQS4oFIdMNJrg/Hhn02sEOe6+ScFIi4X06ryK+/N6zOA==} + '@ckeditor/ckeditor5-editor-multi-root@47.4.0': + resolution: {integrity: sha512-gKYQeg2QI+9JM2gujYVBaLVlh7Dw4XfkX1g4jYMEqq4YG5E17Hpbc1A/IqUb0LLpAd1TG64AR4s/vxK0JrnY1g==} - '@ckeditor/ckeditor5-email@47.3.0': - resolution: {integrity: sha512-CPVdE6fmsI000YOHbfC3vxU0/VqZ+99EUv/bUkvgf71sVU3uzQkz72X/TVN3pPCihE1AZCQy0EXYvUcqPk+dLw==} + '@ckeditor/ckeditor5-email@47.4.0': + resolution: {integrity: sha512-4BiTX8bL2aM9+mU28HMZrFHVvCV5cJNNWUe0PON+mQUghxjCB4FqHaERVAoaIF2YRF71sUhz2uPUVmx97EdCxQ==} - '@ckeditor/ckeditor5-emoji@47.3.0': - resolution: {integrity: sha512-3xmB9VKShWmK2x1qZ7BecfqaxAGP6Ys1/UEPhBhoFyRK34UvtA9KrK0G+KWF4kwA5OgkoqnQRmVkMEO6mKXMnw==} + '@ckeditor/ckeditor5-emoji@47.4.0': + resolution: {integrity: sha512-PbTqvbBzMfvKaxTzAt72VskT8ifGoKRNKzskEmm74RCLu6a60rUaqL/4ChkTsF1FKPvB07VDbyDQx4XkvUOBIA==} - '@ckeditor/ckeditor5-engine@47.3.0': - resolution: {integrity: sha512-op/9TsJgFtWctfUd/QY41HYyFZd5hfSK6hBTJh0Xpz2XAfvpWsVim27FyWX0yIhyMLmtwDETDq8iBaH5kEZ15g==} + '@ckeditor/ckeditor5-engine@47.4.0': + resolution: {integrity: sha512-U3Zq3qZ86Si6L4BslJIXotK9oVXu59zAuDVWlx3prAUS5Mrz7MfVlWdz9HeWu9W1i2FmUGVksX+uoO/ng2CZUA==} - '@ckeditor/ckeditor5-enter@47.3.0': - resolution: {integrity: sha512-gBsT2ffLKUQclJpWkjn8mggtmoa3AfYH6vjsfMefN3yov1FoGY65kQDXl9KOfdG71E/tRtOZkMUPXqZUlYrBlA==} + '@ckeditor/ckeditor5-enter@47.4.0': + resolution: {integrity: sha512-BQjJ7CjXENoF8Inv8ydRl+luRMKQvw1ohkiYsTEruHjGKkAFyDTGrorzkoGp2IU98n5SVGJE+XwVxpKgjsKAVQ==} - '@ckeditor/ckeditor5-essentials@47.3.0': - resolution: {integrity: sha512-tLqgNXfdZJiBR56CHBNkrHWd7WCSPTIRxfqB9xoDvFD3AQngv1J3tIj3ye0WtTr8V23CCcXzz3v3NFZwtuDPBw==} + '@ckeditor/ckeditor5-essentials@47.4.0': + resolution: {integrity: sha512-M+8xGJF+PKEcTjTeqofNe6cjcTnsy6EomqwGrbHDHhyAXC4d8k/vRrptymjonW7H9IsuOcQ5t2eZj3d+yl03gg==} - '@ckeditor/ckeditor5-export-inline-styles@47.3.0': - resolution: {integrity: sha512-kwkXd4IwXQbSI7apR6lyClduOYiQ1sM1XeDjA/73zOsAVmGNAKLbwydaze3cCGQwhYTgZoe0/pdFqmeOnVStLw==} + '@ckeditor/ckeditor5-export-inline-styles@47.4.0': + resolution: {integrity: sha512-TK5KNrm17Jb1BjSPdB9UBjaHIoDmyBdESZuEZRvEFuDguLBGK0kTNTjeoYxp1xZ33sfq3nUVtjOyq77K3b5+9w==} - '@ckeditor/ckeditor5-export-pdf@47.3.0': - resolution: {integrity: sha512-XtSg/uBPzxz8hAVsKPgoe3ZyxYPVJpmIiO8za6c7pSU+BFZvp23g3uOXfSLUa4SOrC6Z/qKtZXjivb24/IKrFQ==} + '@ckeditor/ckeditor5-export-pdf@47.4.0': + resolution: {integrity: sha512-TIXl8ae/NUDv6COfyA1+KHaDWMSQzopTdYA4mRTF5zqzg1HbtQq0Lf6n9Cn2J3WhwXDIGBjbNxD0z55wpOBLWg==} - '@ckeditor/ckeditor5-export-word@47.3.0': - resolution: {integrity: sha512-bWiHFZTcAU3ZCfean5kniM6BtwOKbpEfnndGJC9rRe0E8U8ZUg6VBUgDIKeXmo34AiR79UpOMTwfj1CHQYbMsg==} + '@ckeditor/ckeditor5-export-word@47.4.0': + resolution: {integrity: sha512-a1YWBFV0suPme2uFPh28O/B7yPW/Te2JplC0/0XgeUZAXeYL+5u8Rh42cRoRmyqoUYzd/xev6mukgeCRv77/pg==} - '@ckeditor/ckeditor5-find-and-replace@47.3.0': - resolution: {integrity: sha512-jSbc4ss36ynQvyNYKNR4UXceoS8r2JE9fjedHZbMPpFRPlypCC2oc21WhWa/Fo+PcfAIV7q2izNDclcFtEFB/A==} + '@ckeditor/ckeditor5-find-and-replace@47.4.0': + resolution: {integrity: sha512-CZAX1XxrJcnOAwENfw4x4DiLyZ6uOHUHJqFXyyJdQC9qfEizvFYTXn3zO6fbViyDd/k4ugAoLBjpaZh6p9FyOQ==} - '@ckeditor/ckeditor5-font@47.3.0': - resolution: {integrity: sha512-J1QhW0Z6LfU0Mc3cITw21vPTIv1sGtlyO7JSFU9rQUkF1p2PCMQ/SvEja3bdz8LipidoDUh+QCeT2z9TSt1VDA==} + '@ckeditor/ckeditor5-font@47.4.0': + resolution: {integrity: sha512-QRIThyZg0kT1R4LTotD6cV9gm0NX3Z0Cq/IOQtuwTbRb3wa+kWXhVfKZPV9Qru5HifvrCrcWXMjkBRRIdfqp+Q==} - '@ckeditor/ckeditor5-footnotes@47.3.0': - resolution: {integrity: sha512-CjbxLjgdcKDb0rrE4LBXGjAM5eAAZfSqi9ZzfwmJz/6QDZoV/llDUXRsfN2VL7dymfsfLkVyvunXXRfa999RTQ==} + '@ckeditor/ckeditor5-footnotes@47.4.0': + resolution: {integrity: sha512-IWuAzPpnyup4ZFbUrMYRszGHSrndQVKi3q71NhsVxjCuWUt/i0iudqLQoB4bEV9as//Zl/x1c7aEpI8T8AUH0g==} - '@ckeditor/ckeditor5-format-painter@47.3.0': - resolution: {integrity: sha512-GoDEOr3XNXFFlFeFu80PpyUNXh65uQ4IAkV9lwobQsmZcdaWbmMgEdk9k+TGit07bpC9KJRjNUBZgmm9O1B9Hg==} + '@ckeditor/ckeditor5-format-painter@47.4.0': + resolution: {integrity: sha512-KG0niwdRBvx5AU5xT23X0cagXv06kkW5Wg3zxkeXmd2q3co6mjTzogQq+Ftiu30LryTmSJ+HuNVfDLw8g5enVw==} - '@ckeditor/ckeditor5-fullscreen@47.3.0': - resolution: {integrity: sha512-lSge/Lw30GYkztAWifZYOpc5Q9tjuT73gq0Hcs1tDpiIIt63CM7AfIS/sjiTUus0ZSG8fjLdd3ivSf4TiE/kOg==} + '@ckeditor/ckeditor5-fullscreen@47.4.0': + resolution: {integrity: sha512-DdroZD1cgNU3up74ZQq84vXyCDknQJJyyxQIXS5CKJy7qNR9YmixpVmyXpYJmZzdSVvp/p8Ej87VlOXfju3ilQ==} - '@ckeditor/ckeditor5-heading@47.3.0': - resolution: {integrity: sha512-sCBpuGTY+RGnE45r1cgFfe29cW6hmVQo+4HGppyErj7Sac5f1PCG84/DSTP1n+6LPiA51Yh2Z/VtQdYKMRNnmQ==} + '@ckeditor/ckeditor5-heading@47.4.0': + resolution: {integrity: sha512-VWBxQ2ngrT0x50Tb1klZyIOykgNPby8sw5rBq/nv/UXBb2Ql/crp50miC8pBCOvkbTP16qzVbl5HoiltJQkH/g==} - '@ckeditor/ckeditor5-highlight@47.3.0': - resolution: {integrity: sha512-wlT7R+7LVp0LmCyKIRN+U6+3FJqw6NpmfHhidSZnTRd9qzGnZ2EMxdEIkfOyCZd2CYH/gxtf/QFGik+DTjV/ow==} + '@ckeditor/ckeditor5-highlight@47.4.0': + resolution: {integrity: sha512-SHBkoMVu/uTkvE0/1zaehlvCpEqYuh/u1Rh7SHNysrD05Nacs1t5jw+l2lTFoyJnhTy+RA9IONYSDF+5tK3dqQ==} - '@ckeditor/ckeditor5-horizontal-line@47.3.0': - resolution: {integrity: sha512-F0QlRncwX/wvUN/LtZjpdsld9qT3jDxrniv4a/nz4LIotTVAsw2tMy9y8Sw2TNjIrOY5cCytxG91kzc+WNwUlA==} + '@ckeditor/ckeditor5-horizontal-line@47.4.0': + resolution: {integrity: sha512-UvL0x55QxRGiem8EPO9n/WQk6218TDNatKSCRueZkAYUrFC1bmtVs9g6GqvSl59RoRGcTxVcz0fXbsxrhZY6HA==} - '@ckeditor/ckeditor5-html-embed@47.3.0': - resolution: {integrity: sha512-B8xgh/4fUoccNhTKajBFlWWgz03G0QS41iXGtEoDY74Z1Ewx8zKccw4kPcyowIsrM7iq8w8tmo7uHJQaB5rhlA==} + '@ckeditor/ckeditor5-html-embed@47.4.0': + resolution: {integrity: sha512-SnidyadvuC0ohT2kZ0crsnFy8adQwhHcRaGUNXx5qAHRK7K1wGp3nxdnyOW5GdK2CIe8DTo+H3v8nXfvt7VgnQ==} - '@ckeditor/ckeditor5-html-support@47.3.0': - resolution: {integrity: sha512-sdqB2NPlCy4UC6Wgi1RzW/kzeWd9zIgf8s/bx4KzGbWekAvfnJWUVAYkkziM+7N6NhXTKDx8Wu2Zh/66pIo1XA==} + '@ckeditor/ckeditor5-html-support@47.4.0': + resolution: {integrity: sha512-SGd6wvPB9VGNqEWvoEdK1kQJ3lpvrTNfsA5Pg02V/Zr3gIxnAqajYEArWDYtsz3ajaUDs06i1tFdpCbFB7JRMg==} - '@ckeditor/ckeditor5-icons@47.3.0': - resolution: {integrity: sha512-erpbkXiPtA3Bu8a8ZLQjPYpX4W0WoT3OFZElHZgXOmVl8xQAefp2q+lFYKgzsqB757/zZO7i/B6U9czNv6lPmw==} + '@ckeditor/ckeditor5-icons@47.4.0': + resolution: {integrity: sha512-2THOymXou/dBR+Jk69+/DzE3lK3QVk8+9eSKdWQ4+kvYom9MXT9RwKJNe3BlvqUNxBymI8eVBjdaQjfv3AOT0Q==} - '@ckeditor/ckeditor5-image@47.3.0': - resolution: {integrity: sha512-KnsQUv1itQdKJIAlj3GSTETuaiyFq7ggMsK7UVJFTk0yCiIi+oSEkrIn5r+p1e98QYEYjArS2SwOIxDsxDM2sQ==} + '@ckeditor/ckeditor5-image@47.4.0': + resolution: {integrity: sha512-Z0q+cANAvzvW/3lIMg0rpvVHx4nlWbUsfPw78gM7/DmB4qpdbKsX07iTut84ZnWvOP+WU3XIrhinMXTvl6IqEw==} - '@ckeditor/ckeditor5-import-word@47.3.0': - resolution: {integrity: sha512-17oA8wSCEM1c7fm+2mqtaBbdWBXjA3uNhUXnhKOe8Hr5POGQmpn9BUvMd/zT7xER8PKe2xKzlqYSP6xO4326yA==} + '@ckeditor/ckeditor5-import-word@47.4.0': + resolution: {integrity: sha512-UHsSe7tegi2Be1axbDHescEw10rh3K/jgDlTuiHJvahmajB2vJUlZ7rMM9kilTl7w6IKK/UEo0GdvNzDrkQYsg==} - '@ckeditor/ckeditor5-indent@47.3.0': - resolution: {integrity: sha512-kIpuMrTrtf7YhOBYre2Ny7NnL/x6sqMzdaxy4LN+4Sa9+Cw+KR2QJij2d0VkwDzV+z2B8GZ1mNZvCzpEwWDUUA==} + '@ckeditor/ckeditor5-indent@47.4.0': + resolution: {integrity: sha512-lFPYPUSuByK6GHiTnkHeLkWHD5/SbXCQ5TJVzRJ3uaWvbqo0b0Hvoz92vtKueOwi1QsgXD38aYhMljs0h8eP5g==} '@ckeditor/ckeditor5-inspector@5.0.0': resolution: {integrity: sha512-WVCa1mtePJkLtI81Rn2E6orV0B2Az/+O7f+corJzYapoH5koVEe9TcVyoKRquKUWeBXMG+D1m72vmR2kuoLNhA==} - '@ckeditor/ckeditor5-language@47.3.0': - resolution: {integrity: sha512-sPAgbKYT3NpofS2FWphkgiPzD2YqbTpxpLyzHymDJo7s2LQWj5FUGacZiiddGPOdzicSasZ6qHvcHIMHCmLBpg==} + '@ckeditor/ckeditor5-language@47.4.0': + resolution: {integrity: sha512-3FEoS59ZOTm6m0m0O5qEpsf4tGX/r+r0LjkDrRjhIcaGJh0W4Ao2J6cSrXv7hikDpgBjbHIkEy0V6KkIWWAZpg==} - '@ckeditor/ckeditor5-line-height@47.3.0': - resolution: {integrity: sha512-zZbeKeEmXvbJ2SaEBON5/76hCH83HUbXgI3p0N6X8GvpXmJQPfJbFqpNTWL0iXvc/1gKfPfbUOXN9B3DMuz2PQ==} + '@ckeditor/ckeditor5-line-height@47.4.0': + resolution: {integrity: sha512-rJcz6ejZLrF5EZ23pKsl9LfVZNqjPm1vRdaxRiPbMjLmWSGgNc55MyLcX/tBBdf6ZNdSUR8cYnl2c5z4EmFTZg==} - '@ckeditor/ckeditor5-link@47.3.0': - resolution: {integrity: sha512-YbxZQHi36EF/O7deiDlrM8Xnw/J18x4dQgxaiHKTSHu7/4sZuVfJFAzF6afdt1uQ+8yeX3+q60jkJr2mm1zOEw==} + '@ckeditor/ckeditor5-link@47.4.0': + resolution: {integrity: sha512-AF7TVV64iOqia4x4psHakYYznPoS3I5j1Gijoa7jiTLGJZSaAL7xAc1qAajgWQ66o7DWuVGL7QkZwKIo1jlTPg==} - '@ckeditor/ckeditor5-list-multi-level@47.3.0': - resolution: {integrity: sha512-lG2QZb4iwig2TY6FxWT+DYbkbyfBikTM2T7FIflub4JcL4m0nwJ1Ybc9Fb6zFLqQd3FF/a1xEE2TbdmG4OlR2w==} + '@ckeditor/ckeditor5-list-multi-level@47.4.0': + resolution: {integrity: sha512-qmpjxT8Gn28OJDO7HjVmuBtO5oLu0AhWCCpdptMna4y/KpM1yej8suNhb3hXBJlqNgraCmOqsQvkzv+j0Pad8w==} - '@ckeditor/ckeditor5-list@47.3.0': - resolution: {integrity: sha512-iOJ4prpoqf1UamKztQ0If/k638+NGSPsFaGGjOqhGPcIJxTtscs4c34uNUH6yCXDNF1ZaET2FxFckAQvrb0DFQ==} + '@ckeditor/ckeditor5-list@47.4.0': + resolution: {integrity: sha512-OGvAgS+NB1dzrqhN1xEVfN8PTM73pjMnmDvQeQurwIfjQdJaO07jGPRqujQzNostckWvNPtQysXkbnp+QiCPOw==} - '@ckeditor/ckeditor5-markdown-gfm@47.3.0': - resolution: {integrity: sha512-PyRXnwnUmwW7pxe8DaV1sle/g45fp/e+1vzXgFIvLYWJO5i2Sych1yDbAU1RGbJr5R05eFS7Fov3bowzRE2ICA==} + '@ckeditor/ckeditor5-markdown-gfm@47.4.0': + resolution: {integrity: sha512-2W1dBzxPIdEsE0CiU19K4xQfBS2jSBruJh5XV924eyuJPh76CdXKDGPBwuVd6i1oK7x+ji0Griu9Y+R2F0jRIw==} - '@ckeditor/ckeditor5-media-embed@47.3.0': - resolution: {integrity: sha512-c0wP3VZp6409VMMRYL4z2ZiqCsP2p4RyHcfH8TZSy3g25pZnUbYpdMepHCxT0U5wLVdqhGMn7cW+k5Fq6Mp/hA==} + '@ckeditor/ckeditor5-media-embed@47.4.0': + resolution: {integrity: sha512-oL/In6Q3dtgj23FyyKbtYa704sl1eEx8JeO4ODRL3scCNI2/7qx9nGMexydiJi+Saulvs/3g7A8PbXiI+iArog==} - '@ckeditor/ckeditor5-mention@47.3.0': - resolution: {integrity: sha512-yIRbRSd0b66kUlur80kiskVMyymHvtg96endZ8FuGDjKgdLApFnkonNmpCNLAxGuwJDMfDyvyEikZy1i0bgWlg==} + '@ckeditor/ckeditor5-mention@47.4.0': + resolution: {integrity: sha512-1niRMaI5HxYbSTosxjU/6F5Uo+2hCEa3s18emwIBMTG1zOu0OViubuj+P8wCOqmSmpzvfkNybl4kk74MahGk0w==} - '@ckeditor/ckeditor5-merge-fields@47.3.0': - resolution: {integrity: sha512-pkkUqHK9Kbv6P1ElUgqOkTolHBFev0sFnSB2AQJAo996aL4Lr7HbK1u002vuJno3uK0OwtzH2Pq9mzcpIcEdPA==} + '@ckeditor/ckeditor5-merge-fields@47.4.0': + resolution: {integrity: sha512-meXLpFA1xa9Nq5WILE1fQeqk9+dgmHZShHaamI2hZaVIFv2GG/amAH3u/rhgSvvX+HvnDxMGCUU9db5yUQ/Y6g==} - '@ckeditor/ckeditor5-minimap@47.3.0': - resolution: {integrity: sha512-8JrmRwEMdIVoSp5Xms8sWHxlXcBPwhf7HjY35ptbS2sMQQ4RC9o5tbyLe8V2kGt8Qgmvx3F2H2VT9VFpQCUmFg==} + '@ckeditor/ckeditor5-minimap@47.4.0': + resolution: {integrity: sha512-j0bOrjhEB5U6wCrz8CgW8ueFgHJJORtgqkOiRfQd++SBHGULSRr/WJwvaObcrhhNrY4Mlme8Nws6s5YJxzlFhA==} - '@ckeditor/ckeditor5-operations-compressor@47.3.0': - resolution: {integrity: sha512-ke402PqaL7MSqxkrbyhS/hmjEuWBhzUuHR8KtoXvwJWhmNlcwtRi4Vn+b5vpJwh2VqaIoE7KJtoHhSZHkPoKJg==} + '@ckeditor/ckeditor5-operations-compressor@47.4.0': + resolution: {integrity: sha512-nHtjOR0fTrLygGF3wpihNfnw0eJ0Z8jbXtuoYRivWfiCptMsuXHG6CR9WNvQncleSlB5E1bS50hsyafHa2q2vw==} '@ckeditor/ckeditor5-package-tools@5.0.1': resolution: {integrity: sha512-9UN4qfHa4rgveBqyua9JQfqBWdL1KAsgn5veqJ8/GYTPnbkB7TjEm449B0c35dRoRRWJpWTu+P4eZHAieaXrUA==} engines: {node: '>=24.11.0'} hasBin: true - '@ckeditor/ckeditor5-page-break@47.3.0': - resolution: {integrity: sha512-ZvLfObeXnhYKs8+kcVBbjpAWQnGelVopnEIC0Ljds2cxyeUJ25pnLAZGKMcEOFvdm8Hh1OKnlfPWj3VRZMkrVw==} + '@ckeditor/ckeditor5-page-break@47.4.0': + resolution: {integrity: sha512-v4VR4OhLqj5Rp/Dwb9BSb9lSNAkGVF9n5ThvC0dFeHMikC4ENcqH8NpcbVnaua4tsM9tX0jZLHbcX+jMune4IQ==} - '@ckeditor/ckeditor5-pagination@47.3.0': - resolution: {integrity: sha512-cMEuXpKtbsTQJ5h3dAmsc+lOsPYb7Whofr0wHl1A7QOIbr8E+rUczepDwLGi22PL5SICEacTjnJwMJcotyfwXQ==} + '@ckeditor/ckeditor5-pagination@47.4.0': + resolution: {integrity: sha512-NH3jQpyKoB69HMrEuBSJszhcb417num35eUMcmQnfY1tfi5hxRwk/yk3okf2VUX9JPrmxEQiAitiof+PLK/3Xw==} - '@ckeditor/ckeditor5-paragraph@47.3.0': - resolution: {integrity: sha512-CCnCd57ySxYrb6XCocAzj49PH6jOc+YbsgVVQ4+4sMyOQR/d5VdgJAkQKO7m288nwvE+Ai9gMAl5rqiph+PcMg==} + '@ckeditor/ckeditor5-paragraph@47.4.0': + resolution: {integrity: sha512-epw82iXcK6togOeE/rolQBkyxCfz8m30VoH0bdq0YKkg8+HJ5uzB2FweFDH+l/cyoubdB2f1370G2dAMp6huBg==} - '@ckeditor/ckeditor5-paste-from-office-enhanced@47.3.0': - resolution: {integrity: sha512-u1pkLBhTo/Lubc/B8NdK0hF4VALed5ONf8oorBHZZpX0X0FkOi9jWgINydIPQIabWhxXylcitYkTsty4x1+5Wg==} + '@ckeditor/ckeditor5-paste-from-office-enhanced@47.4.0': + resolution: {integrity: sha512-8QhzqEQn7/MRmQoPzX+DV1Cx2IzrBubFPra8uZGbF2j8/nlFWP2vo3OwwkMu8xkfcKvHgJ6MIm76YN4Cbouffw==} - '@ckeditor/ckeditor5-paste-from-office@47.3.0': - resolution: {integrity: sha512-8M7pKMAI0cwviVx/QWYQRDfy9GLUUBVKrqBFuOu/lcxfsncL7BUJYVVvaOC+iN0I9Mi513XHz78FLi4PbRoC0A==} + '@ckeditor/ckeditor5-paste-from-office@47.4.0': + resolution: {integrity: sha512-yKOk+CDV0dAy+XeqUcP5Drur1u69h6UCdLwDUEbS/egSv/+o+tJwCGrTCRzPqBeUxIahUGBMk0obID7v6xT9IQ==} - '@ckeditor/ckeditor5-real-time-collaboration@47.3.0': - resolution: {integrity: sha512-X1xn1ZoOvl7+rLQvF7ex4tkYLrwsGIQtMm9ywxJC0nD49b0e0xAtaAquVSd/VgOxS+4M0ilXtQ8/f+nEDpgtXg==} + '@ckeditor/ckeditor5-real-time-collaboration@47.4.0': + resolution: {integrity: sha512-ZAwo6o+1WWLh6d8DVIOoI2+VyDDUAijWkqx09gTlXGPtOe3sJqYu3C/n+kbaoeCbEZGOWFKDUQvNpdxp8SRYIg==} - '@ckeditor/ckeditor5-remove-format@47.3.0': - resolution: {integrity: sha512-tGBSxVKu2fUO7oH2U4QyAb6+/47YFkEVwRPGvpwg4QUQn670qAJJenJBWqXEYFHK6V5mLDfD5xmKdTk79OXgTw==} + '@ckeditor/ckeditor5-remove-format@47.4.0': + resolution: {integrity: sha512-XD6LY76m3bZr/twRGTjNRnU4z0VU1akDC7evVMhRPaDruR71km00VT1YNPRChCDmdssEVeWEynHhLQ/kRjy+0w==} - '@ckeditor/ckeditor5-restricted-editing@47.3.0': - resolution: {integrity: sha512-DoJFgX7RXapubLnulcW6aFuTQD25jSPWMJA25EXHTHMq9ZQP69ey2kJgp2iioas0zpsKhnVzioUyIiGe28ufng==} + '@ckeditor/ckeditor5-restricted-editing@47.4.0': + resolution: {integrity: sha512-roywT2jKCs0NVd6TVhYlmrnP0oI4499M5L1mV8Vqq4wc9puVeEPSIKoZNdIF5YWXsHjpCUCMejpuigLTIbf9MQ==} - '@ckeditor/ckeditor5-revision-history@47.3.0': - resolution: {integrity: sha512-9w13dmn+Czp4Rou25BvxvzR43NqEUMdassu0NTSmQtIiDoMgMMGoqG2dzO/MZv9HQVuIaQ04sJm6uAe37Md1+w==} + '@ckeditor/ckeditor5-revision-history@47.4.0': + resolution: {integrity: sha512-kziSrEtya2mbqIKTruxAOOH+45X4lRKXkDFSqRO7nFV4Hcndwv/WpozOlz20h5gO8R7xclL+FoCOprsIQheV5Q==} - '@ckeditor/ckeditor5-select-all@47.3.0': - resolution: {integrity: sha512-pMWVdKDlLowiwnVGycJd0mW2jQ3HdlzzstfIhawhU2jspSY4Byk8XiPZ9Dyq6aAwEtdJOShLLau1dcVnB2OltA==} + '@ckeditor/ckeditor5-select-all@47.4.0': + resolution: {integrity: sha512-9fVsmNFmSj53kJKPKUmCkgpXUev2OeMJ5cFVKXvzEvsm6jFTO8/9iHRTbN/j/ZzWuK5MoO/I3gVn4wGOIX//zw==} - '@ckeditor/ckeditor5-show-blocks@47.3.0': - resolution: {integrity: sha512-vgmH/FqCHproRvVqXYLQrDeDgc5D+2iEK/MB7sRH75w+ZjP495XUYRtoZWud59yQ8P3kCgywycR74iyenxntlw==} + '@ckeditor/ckeditor5-show-blocks@47.4.0': + resolution: {integrity: sha512-uIFHsH2HMPYRWmK+heZoiXRVqbxFJZwYZY1WmNKjE5g7OM8y+PVowe0ZYICjauV2/Z2rwCWtodDKb1bnVnl+mQ==} - '@ckeditor/ckeditor5-slash-command@47.3.0': - resolution: {integrity: sha512-qXIJObofT5jWtM3bDJdDL/WdI8Q12Gbp7AGLrlv/QHRMEQSy+sYKqEC/n84Tr90xbgKn7vkX3jT4VVaCMjoBYQ==} + '@ckeditor/ckeditor5-slash-command@47.4.0': + resolution: {integrity: sha512-w9YeKsnHfGr6dG8kGyjLrUyZKlOrTCzxoquThw2okDKbs8ID6j6zIk6dEANFg4lDWWmV9Y17Y3Z0IX9wXqzbJw==} - '@ckeditor/ckeditor5-source-editing-enhanced@47.3.0': - resolution: {integrity: sha512-5ls3RduW8nod38RGABO68nV8N/f5bptpCPmrc2kQ9itxQtHzFWkVs0114sCSXPWfccw22f64kc/qaK0QCWf+hg==} + '@ckeditor/ckeditor5-source-editing-enhanced@47.4.0': + resolution: {integrity: sha512-0MPVCAOYTtn1QLkUK1O9YoQu5l+o9f6L6a9CANTEVvaXNJJeT5JxcbgdX/EIF91DHjIvhtY9q3s3ubN1oF2YCA==} - '@ckeditor/ckeditor5-source-editing@47.3.0': - resolution: {integrity: sha512-a2hFkyUzDJBpPh5jF3+LUO356PeQ84/Amqp9Y8oqzk6nKXlfr5IdPU1kQTkwDxee7F85EUNd2/wRZm4tLKL02A==} + '@ckeditor/ckeditor5-source-editing@47.4.0': + resolution: {integrity: sha512-AtamOK+Dya6abkuo9XYME05FYFigBRic5gr3/KzhyFfHh7qiFlZFLCDH0S/JEQ0AduFjfgUx4h0ST22RIhiYoA==} - '@ckeditor/ckeditor5-special-characters@47.3.0': - resolution: {integrity: sha512-kh9gONY8HqP1hQ5AImLzYyiecyVRHmyGE9xc1koyOV5HvZ3X+ogTWuAFqG5e3zjLaVCeKQKXkbuBS6/+Gi2NxQ==} + '@ckeditor/ckeditor5-special-characters@47.4.0': + resolution: {integrity: sha512-eYP23WZY8ayA0q8LNVCUcP85yf9J2gSpVE9E6LNIku4rbzox6mCf0sZF0ZhzvqHyXyj9Mn+S21IZpLOTuTUW0g==} - '@ckeditor/ckeditor5-style@47.3.0': - resolution: {integrity: sha512-EsQ3ZZccrsniKadcfjBI7HJgsNbZAl6NomQBKauvTQzmOoL90Ouffp6yIQTIQkIgm/xzIh2zVhGTcw84VoioJw==} + '@ckeditor/ckeditor5-style@47.4.0': + resolution: {integrity: sha512-R6kt9jX9FOnYRXKn7kX0ZdIdW5A3S7ZZBfcdwzG9O/t7r5IIkp+yhC1y6/uBAc2twvvqMhG7Gu5KH2o/TVVjSg==} - '@ckeditor/ckeditor5-table@47.3.0': - resolution: {integrity: sha512-YVupV2lEvE8tJi2tSnrthT1GCdzA0+zv4x0AQR5fBKfu82fux7vxKb222UnHkHhazrR3dGY5MSBRjIaDerY3TA==} + '@ckeditor/ckeditor5-table@47.4.0': + resolution: {integrity: sha512-gWraeB14YnpR+ELySu3xgSFlfur07ZBPN76rQuiIobrecKwhh1Az8rk7Qo4c1K/q/f4pHmqh87nhSprn7Mo7+w==} - '@ckeditor/ckeditor5-template@47.3.0': - resolution: {integrity: sha512-/e9aYr4n5pRca9ytfzUvNFbsZhQn4//bbZbLyosPxTccdjvoonROTYn4a/TqkE1Ff1JYhj2IN3N39vp2H3Eoqg==} + '@ckeditor/ckeditor5-template@47.4.0': + resolution: {integrity: sha512-zLL7mEqdAeSBSJ1LgacQ0OqPxOyz0PBcEOBD0xtHheomP5mHg7l2rF/w1dT3LQ8kSJoDq3KEIDaB6ErWfueX6g==} - '@ckeditor/ckeditor5-theme-lark@47.3.0': - resolution: {integrity: sha512-ovaRKQAVTqlmYlpo3y9q1iu+5SKmmdjBTFDRGRgZ9nXNuD2vmikJA4pG5A4aNKLl/d3/LIkPfbn2g2w9VIlb7Q==} + '@ckeditor/ckeditor5-theme-lark@47.4.0': + resolution: {integrity: sha512-kdtwV5HJ+8/oNcsGM8sdpULhXr2TfM7gEKlH/EAdycLDa6topcJuTl7iVSEu4hZzwVo2agiEMmdUIf3dvWweow==} - '@ckeditor/ckeditor5-track-changes@47.3.0': - resolution: {integrity: sha512-kAKEIlI3FiHuWa/FwZVaGxr+MwU2dBAy4yPuZChv7JgEr3GywdirUl3WKbSoDJoW1MWaAC3FwYaUCYMRQfo03Q==} + '@ckeditor/ckeditor5-track-changes@47.4.0': + resolution: {integrity: sha512-33pFlkjjsxGUXImdpfJJWWWZ4UlpKxIiLntt+buRDsj2pw1K34j5jtIEqAKpdMhSj5W2HXZiXsRrfI+mBd5lyg==} - '@ckeditor/ckeditor5-typing@47.3.0': - resolution: {integrity: sha512-hxwdd4hcCXLMFehS9/DLlcl+Bx+TlF+gG8f1DqNmpmqRbbVtfMFfMlHuqKC7+0c3TLJz7f0F5ih681s2H4t9RA==} + '@ckeditor/ckeditor5-typing@47.4.0': + resolution: {integrity: sha512-+YmCUTLVAryK5h68TgQ0qxDngs1MTCLKPDXxHzNqs0oXHai9YkJv/zg4zeb0/RQRIps7jh3bPapZoi2hP2iN3A==} - '@ckeditor/ckeditor5-ui@47.3.0': - resolution: {integrity: sha512-dDHvfIxNfo3z00KwDO6nHCx9ZC2vVEQ+lMmpjbMD8P3FzGRPRd7NqzRbPoieDKlgAiG6Sa2CLThqA+71C+RMfw==} + '@ckeditor/ckeditor5-ui@47.4.0': + resolution: {integrity: sha512-sL67wp2DX+P3zxeJLo2I7yLhBlX6Zhd0xfUAB6vX6SkjhMeC0L2gLOIr3kKq/OMKEuS+0iZ+qVvEN1j+2Flzlg==} - '@ckeditor/ckeditor5-undo@47.3.0': - resolution: {integrity: sha512-vO0WCOQBC1Cj7hCxh3+VhQNrANiBjj+8561XkLGhDpQt/lpzuEqXn11Rx4BXjSzpuDZvNnMNO9duzXfEfVjAzw==} + '@ckeditor/ckeditor5-undo@47.4.0': + resolution: {integrity: sha512-OnxpJb9glDwuSTl59Yb4+6bjWW5h4BA+94YhesKZXeIaXjyzwFmNGxM07nRyaX4KXwGVP5y5JZC2xv5bCOXKSQ==} - '@ckeditor/ckeditor5-upload@47.3.0': - resolution: {integrity: sha512-j4GngBlxg/tjztS/B67RD/OUrTYQhrwDYSpAjXV6shabwEbtEadsKLYgpXPR12ENB30mmrYKIRC/pgT5/wXc6Q==} + '@ckeditor/ckeditor5-upload@47.4.0': + resolution: {integrity: sha512-9gMfYltVNi5aYNs8IixTXww9kyU0+oEeY9pN8W6YLrhToVJdnN14pW3yNkQJKJPK7HS2RgM6L1Y+u50qu/IL2g==} - '@ckeditor/ckeditor5-uploadcare@47.3.0': - resolution: {integrity: sha512-U9M19IUhVbARfYCBv124o6OJ8Sevv5ZSQ4XoqyNylrPCulB0UmDbV92Y57uR20voBtmVGtY/LRGD07iHjLZ3fA==} + '@ckeditor/ckeditor5-uploadcare@47.4.0': + resolution: {integrity: sha512-sPw7UGZosBOMVMcshOYPNXkq3hSQA7LCFij4WrXvmnJSC9Qb9SabqhEDxoDeLrwy4I5ZWHWR2Xyut4O/uBWO5w==} - '@ckeditor/ckeditor5-utils@47.3.0': - resolution: {integrity: sha512-RF5iAkI7NpVYZW1Fo+BhIQmPNLqA6iRVNoqo43P7vE8QfvG0fYB1Ff3jsEeM4UVV/G6pABBhE+9UMpwJcBuxWw==} + '@ckeditor/ckeditor5-utils@47.4.0': + resolution: {integrity: sha512-+5v1k3+8Yr0VUnO+3GfP7MsDCqt5KD9f9Z5wUVRig/J61hPTv8cUQp0859K87IuOLdAP/rZ1iQpdi1psanQeIQ==} - '@ckeditor/ckeditor5-watchdog@47.3.0': - resolution: {integrity: sha512-gurXEgfiIvnmmd7u68PdffdAaYFuNuAE8fJoWeJFMzrrFGuG7TvGmulXG/Wom2D4D+eW7wQE93Sisx9wIfAcPQ==} + '@ckeditor/ckeditor5-watchdog@47.4.0': + resolution: {integrity: sha512-MEfHIVYV4SILXi++G00y3wREm/1gT5dO+pTGpQY+NNYw8wgi32rg1q8hO2P/upsVaPzbeD3WLURyqeIxKwY20Q==} - '@ckeditor/ckeditor5-widget@47.3.0': - resolution: {integrity: sha512-8IagE3JdKLM04KB3XR2SCDJTIlmtGOhkfWZBn9kwy7g8SIjI2bJARA/0wgXMGlzUV2AMbbxb0HdkMEK6Xxg/nQ==} + '@ckeditor/ckeditor5-widget@47.4.0': + resolution: {integrity: sha512-wffwrMQ6h+Hdu9IMG0H0QAf0YWWn+AGeJwPs69cRjRwB5pNOCUmMyM4h8MtNp15UEvGGARlhOjFf1TniMUkKrw==} - '@ckeditor/ckeditor5-word-count@47.3.0': - resolution: {integrity: sha512-VluTjPWaJnYS6uoJfi8XJZIBPzfrARH4RBEHOBto4SM1jNdSV0gltz6jfNSteGXm4Bl+VdBgltzRAXqsugi2Vg==} + '@ckeditor/ckeditor5-word-count@47.4.0': + resolution: {integrity: sha512-JeiwHJyBdlUCdzfW3K2KoGO/QhDe1qOKNPXiVXzExIyZpww+hm5HjV/zi5gX4xAvWg9ew0UaQRco5Dy7mBBfRQ==} '@codemirror/autocomplete@6.18.6': resolution: {integrity: sha512-PHHBXFomUs5DF+9tCOM/UoW6XQ4R44lLNNhRaW9PKPTU0D7lIjRg3ElxaJnTwsl/oHiR93WSXDBrekhoUGCPtg==} @@ -4789,10 +4789,6 @@ packages: resolution: {integrity: sha512-tlqY9xq5ukxTUZBmoOp+m61cqwQD5pHJtFY3Mn8CA8ps6yghLH/Hw8UPdqg4OLmFW3IFlcXnQNmo/dh8HzXYIQ==} engines: {node: '>=18'} - '@smithy/abort-controller@4.2.5': - resolution: {integrity: sha512-j7HwVkBw68YW8UmFRcjZOmssE77Rvk0GWAIN1oFBhsaovQmZWYCIcGa9/pwRB0ExI8Sk9MWNALTjftjHZea7VA==} - engines: {node: '>=18.0.0'} - '@smithy/abort-controller@4.2.8': resolution: {integrity: sha512-peuVfkYHAmS5ybKxWcfraK7WBBP0J+rkfUcbHJJKQ4ir3UAUNQI+Y4Vt/PqSzGqgloJ5O1dk7+WzNL8wcCSXbw==} engines: {node: '>=18.0.0'} @@ -4801,10 +4797,6 @@ packages: resolution: {integrity: sha512-prmU+rDddxHOH0oNcwemL+SwnzcG65sBF2yXRO7aeXIn/xTlq2pX7JLVbkBnVLowHLg4/OL4+jBmv9hVrVGS+w==} engines: {node: '>=18.0.0'} - '@smithy/core@3.20.5': - resolution: {integrity: sha512-0Tz77Td8ynHaowXfOdrD0F1IH4tgWGUhwmLwmpFyTbr+U9WHXNNp9u/k2VjBXGnSe7BwjBERRpXsokGTXzNjhA==} - engines: {node: '>=18.0.0'} - '@smithy/core@3.20.6': resolution: {integrity: sha512-BpAffW1mIyRZongoKBbh3RgHG+JDHJek/8hjA/9LnPunM+ejorO6axkxCgwxCe4K//g/JdPeR9vROHDYr/hfnQ==} engines: {node: '>=18.0.0'} @@ -4833,10 +4825,6 @@ packages: resolution: {integrity: sha512-UeJpOmLGhq1SLox79QWw/0n2PFX+oPRE1ZyRMxPIaFEfCqWaqpB7BU9C8kpPOGEhLF7AwEqfFbtwNxGy4ReENA==} engines: {node: '>=18.0.0'} - '@smithy/fetch-http-handler@5.3.6': - resolution: {integrity: sha512-3+RG3EA6BBJ/ofZUeTFJA7mHfSYrZtQIrDP9dI8Lf7X6Jbos2jptuLrAAteDiFVrmbEmLSuRG/bUKzfAXk7dhg==} - engines: {node: '>=18.0.0'} - '@smithy/fetch-http-handler@5.3.9': resolution: {integrity: sha512-I4UhmcTYXBrct03rwzQX1Y/iqQlzVQaPxWjCjula++5EmWq9YGBrx6bbGqluGc1f0XEfhSkiY4jhLgbsJUMKRA==} engines: {node: '>=18.0.0'} @@ -4861,10 +4849,6 @@ packages: resolution: {integrity: sha512-F7gDyfI2BB1Kc+4M6rpuOLne5LOcEknH1n6UQB69qv+HucXBR1rkzXBnQTB2q46sFy1PM/zuSJOB532yc8bg3w==} engines: {node: '>=18.0.0'} - '@smithy/middleware-endpoint@4.4.6': - resolution: {integrity: sha512-dpq3bHqbEOBqGBjRVHVFP3eUSPpX0BYtg1D5d5Irgk6orGGAuZfY22rC4sErhg+ZfY/Y0kPqm1XpAmDZg7DeuA==} - engines: {node: '>=18.0.0'} - '@smithy/middleware-endpoint@4.4.7': resolution: {integrity: sha512-SCmhUG1UwtnEhF5Sxd8qk7bJwkj1BpFzFlHkXqKCEmDPLrRjJyTGM0EhqT7XBtDaDJjCfjRJQodgZcKDR843qg==} engines: {node: '>=18.0.0'} @@ -4873,10 +4857,6 @@ packages: resolution: {integrity: sha512-lLEmkQj7I7oKfvZ1wsnToGJouLOtfkMXDKRA1Hi6F+mMp5O1N8GcVWmVeNgTtgZtd0OTXDTI2vpVQmeutydGew==} engines: {node: '>=18.0.0'} - '@smithy/middleware-serde@4.2.6': - resolution: {integrity: sha512-VkLoE/z7e2g8pirwisLz8XJWedUSY8my/qrp81VmAdyrhi94T+riBfwP+AOEEFR9rFTSonC/5D2eWNmFabHyGQ==} - engines: {node: '>=18.0.0'} - '@smithy/middleware-serde@4.2.9': resolution: {integrity: sha512-eMNiej0u/snzDvlqRGSN3Vl0ESn3838+nKyVfF2FKNXFbi4SERYT6PR392D39iczngbqqGG0Jl1DlCnp7tBbXQ==} engines: {node: '>=18.0.0'} @@ -4889,10 +4869,6 @@ packages: resolution: {integrity: sha512-aFP1ai4lrbVlWjfpAfRSL8KFcnJQYfTl5QxLJXY32vghJrDuFyPZ6LtUL+JEGYiFRG1PfPLHLoxj107ulncLIg==} engines: {node: '>=18.0.0'} - '@smithy/node-http-handler@4.4.5': - resolution: {integrity: sha512-CMnzM9R2WqlqXQGtIlsHMEZfXKJVTIrqCNoSd/QpAyp+Dw0a1Vps13l6ma1fH8g7zSPNsA59B/kWgeylFuA/lw==} - engines: {node: '>=18.0.0'} - '@smithy/node-http-handler@4.4.8': resolution: {integrity: sha512-q9u+MSbJVIJ1QmJ4+1u+cERXkrhuILCBDsJUBAW1MPE6sFonbCNaegFuwW9ll8kh5UdyY3jOkoOGlc7BesoLpg==} engines: {node: '>=18.0.0'} @@ -4905,18 +4881,10 @@ packages: resolution: {integrity: sha512-QNINVDhxpZ5QnP3aviNHQFlRogQZDfYlCkQT+7tJnErPQbDhysondEjhikuANxgMsZrkGeiAxXy4jguEGsDrWQ==} engines: {node: '>=18.0.0'} - '@smithy/querystring-builder@4.2.5': - resolution: {integrity: sha512-y98otMI1saoajeik2kLfGyRp11e5U/iJYH/wLCh3aTV/XutbGT9nziKGkgCaMD1ghK7p6htHMm6b6scl9JRUWg==} - engines: {node: '>=18.0.0'} - '@smithy/querystring-builder@4.2.8': resolution: {integrity: sha512-Xr83r31+DrE8CP3MqPgMJl+pQlLLmOfiEUnoyAlGzzJIrEsbKsPy1hqH0qySaQm4oWrCBlUqRt+idEgunKB+iw==} engines: {node: '>=18.0.0'} - '@smithy/querystring-parser@4.2.5': - resolution: {integrity: sha512-031WCTdPYgiQRYNPXznHXof2YM0GwL6SeaSyTH/P72M1Vz73TvCNH2Nq8Iu2IEPq9QP2yx0/nrw5YmSeAi/AjQ==} - engines: {node: '>=18.0.0'} - '@smithy/querystring-parser@4.2.8': resolution: {integrity: sha512-vUurovluVy50CUlazOiXkPq40KGvGWSdmusa3130MwrR1UNnNgKAlj58wlOe61XSHRpUfIIh6cE0zZ8mzKaDPA==} engines: {node: '>=18.0.0'} @@ -4933,10 +4901,6 @@ packages: resolution: {integrity: sha512-d3+U/VpX7a60seHziWnVZOHuEgJlclufjkS6zhXvxcJgkJq4UWdH5eOBLzHRMx6gXjsdT9h6lfpmLzbrdupHgQ==} engines: {node: '>=18.0.0'} - '@smithy/smithy-client@4.10.7': - resolution: {integrity: sha512-Uznt0I9z3os3Z+8pbXrOSCTXCA6vrjyN7Ub+8l2pRDum44vLv8qw0qGVkJN0/tZBZotaEFHrDPKUoPNueTr5Vg==} - engines: {node: '>=18.0.0'} - '@smithy/smithy-client@4.10.8': resolution: {integrity: sha512-wcr3UEL26k7lLoyf9eVDZoD1nNY3Fa1gbNuOXvfxvVWLGkOVW+RYZgUUp/bXHryJfycIOQnBq9o1JAE00ax8HQ==} engines: {node: '>=18.0.0'} @@ -4945,10 +4909,6 @@ packages: resolution: {integrity: sha512-9YcuJVTOBDjg9LWo23Qp0lTQ3D7fQsQtwle0jVfpbUHy9qBwCEgKuVH4FqFB3VYu0nwdHKiEMA+oXz7oV8X1kw==} engines: {node: '>=18.0.0'} - '@smithy/url-parser@4.2.5': - resolution: {integrity: sha512-VaxMGsilqFnK1CeBX+LXnSuaMx4sTL/6znSZh2829txWieazdVxr54HmiyTsIbpOTLcf5nYpq9lpzmwRdxj6rQ==} - engines: {node: '>=18.0.0'} - '@smithy/url-parser@4.2.8': resolution: {integrity: sha512-NQho9U68TGMEU639YkXnVMV3GEFFULmmaWdlu1E9qzyIePOHsoSnagTGSDv1Zi8DCNN6btxOSdgmy5E/hsZwhA==} engines: {node: '>=18.0.0'} @@ -5794,21 +5754,24 @@ packages: '@ungap/structured-clone@1.3.0': resolution: {integrity: sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==} - '@uploadcare/cname-prefix@6.17.0': - resolution: {integrity: sha512-UqomH1TtegTmltLhwnKTN4fPNzUlXx6LQZj0YNIkiA726ih+ao6oPS9ER1rvz/XX4e5EOl7/aj+AHHIscLPncQ==} + '@uploadcare/cname-prefix@6.18.3': + resolution: {integrity: sha512-LVmmjEEkGyvnHefhfXknfnebYTn12Unk2IqkYhfk1qV5LQfMvOT6Led6+Usw0rr1XME25h9fZv/GmF82rXkQOA==} - '@uploadcare/file-uploader@1.19.4': - resolution: {integrity: sha512-xCnXtQyvoujHEGEjZNNGiF/94PZ519nkp+hWovvn/w1WIRSwJ2finD214C54X50J4Yefw2f9KmkT8d8cqXnjtA==} + '@uploadcare/file-uploader@1.24.5': + resolution: {integrity: sha512-iPIZBydZtVBkjd3uZNUyLk6fo23Lh9I7Rmx5W6QjKrKBY6FEUuKDDM42EcnXvoFRZHSeobe7KC4oOTGQDEWbUQ==} - '@uploadcare/image-shrink@6.17.0': - resolution: {integrity: sha512-9ZIQR2Uad7BeSH0hqo7W/VenHCwnEqRjFpN6SGynTzG6BxoH/HK8NkuMKdJ8URFisW7dZSXpVMZrCL5kf7FfKA==} + '@uploadcare/image-shrink@6.18.3': + resolution: {integrity: sha512-w+Hao5vXpPFiJc5Z0IbajEo8SeF08BgwdgbFmRqHED0zsev5TCwFj5WSa/G4Jx3CPXu7JvFwbpiSMqpEciFjSA==} + + '@uploadcare/quality-insights@6.18.3': + resolution: {integrity: sha512-uJh3zFLOkR3fe/nUnxdu+xJpqY3GW8Y3tj3t7U41jhoZ1k5BH/U9M93gSAdmkxnTByNIms6/WtLI7X5jyXAy6Q==} '@uploadcare/upload-client@6.14.3': resolution: {integrity: sha512-uZDXb2IuFchpNQdHDxDowKgGPd+9UOy0PIykWEPedMbbBYxh7/UUQ+G53E4KhKe7cV7BV4zoFxUrNx+Ij0lyPw==} engines: {node: '>=16'} - '@uploadcare/upload-client@6.17.0': - resolution: {integrity: sha512-ir6xo6HLy3TVn4lVJ+9fOOcq8vvgMmcXoSP/mM+l1CTKKJmd0hzXqNkZ1CYyz7PiRhLPUC6fprmUuA7rnVC87g==} + '@uploadcare/upload-client@6.18.3': + resolution: {integrity: sha512-kUDV5J+DXUl1SnO0IccRseXOK6sZolMHBHHNH+UNVoA/Ubr3r/bOFw4QTcImdn6PFUmlt9MvYvQfCHswuGvJNA==} engines: {node: '>=16'} '@vitest/browser-webdriverio@4.0.17': @@ -6705,16 +6668,16 @@ packages: resolution: {integrity: sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==} engines: {node: '>=6.0'} - ckeditor5-collaboration@47.3.0: - resolution: {integrity: sha512-J7+6bKoMNtk+UeXEEBhOAieBf+X66rL6fGFXYMnUvo01KyqukAuRH0+pGRJn/CrJ5ulpjn77K1ddohHDooFWug==} + ckeditor5-collaboration@47.4.0: + resolution: {integrity: sha512-SNwRWFy6DcU1R9wHpRvXq6YLbpMExRoGwms+JF1bKZK9afHznGOouoMPSpHNrkE27OMem6r0SlXAryUPQh4Pfg==} - ckeditor5-premium-features@47.3.0: - resolution: {integrity: sha512-rI0OA9lQZQ0csoEWJnja/vXDdXbbnYzx75vRZYuTIl+czKM6be+nZValyYJym68SkTR6d0Z902G1zeXg1SFG9A==} + ckeditor5-premium-features@47.4.0: + resolution: {integrity: sha512-z9eRJZecNKu+D8YpCI7IttijZedhqeS6B+KyhuZrBRBtD3eqKyAUb6oiqE7EQvjwaRHrj9B5o9mtKlX51X5RPQ==} peerDependencies: - ckeditor5: 47.3.0 + ckeditor5: 47.4.0 - ckeditor5@47.3.0: - resolution: {integrity: sha512-3UDvnAi8TB/5i9flEFfOLIQAIWUoIbucvvFCqKWJqpfZy3F3k34GLEgDV/3VM6O6QV+UNHbzYaSTAl4yKVvoXg==} + ckeditor5@47.4.0: + resolution: {integrity: sha512-6RTRV2w6nhmBSLBnA0O9QzcBC/Cf74ogziaKHOK61H+PcM6aP3ltb/fNScGyy3NVw3+OzaxjbPF7NSykVmmMMw==} classnames@2.5.1: resolution: {integrity: sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow==} @@ -14542,24 +14505,24 @@ snapshots: '@aws-sdk/util-user-agent-browser': 3.821.0 '@aws-sdk/util-user-agent-node': 3.823.0 '@smithy/config-resolver': 4.1.4 - '@smithy/core': 3.20.5 + '@smithy/core': 3.20.6 '@smithy/eventstream-serde-browser': 4.0.4 '@smithy/eventstream-serde-config-resolver': 4.1.2 '@smithy/eventstream-serde-node': 4.0.4 - '@smithy/fetch-http-handler': 5.3.6 + '@smithy/fetch-http-handler': 5.3.9 '@smithy/hash-node': 4.0.4 '@smithy/invalid-dependency': 4.0.4 '@smithy/middleware-content-length': 4.0.4 - '@smithy/middleware-endpoint': 4.4.6 + '@smithy/middleware-endpoint': 4.4.7 '@smithy/middleware-retry': 4.4.23 - '@smithy/middleware-serde': 4.2.6 + '@smithy/middleware-serde': 4.2.9 '@smithy/middleware-stack': 4.2.8 '@smithy/node-config-provider': 4.3.8 - '@smithy/node-http-handler': 4.4.5 + '@smithy/node-http-handler': 4.4.8 '@smithy/protocol-http': 5.3.8 - '@smithy/smithy-client': 4.10.7 + '@smithy/smithy-client': 4.10.8 '@smithy/types': 4.12.0 - '@smithy/url-parser': 4.2.5 + '@smithy/url-parser': 4.2.8 '@smithy/util-base64': 4.3.0 '@smithy/util-body-length-browser': 4.2.0 '@smithy/util-body-length-node': 4.0.0 @@ -14591,19 +14554,19 @@ snapshots: '@aws-sdk/util-user-agent-browser': 3.821.0 '@aws-sdk/util-user-agent-node': 3.823.0 '@smithy/config-resolver': 4.1.4 - '@smithy/core': 3.20.5 + '@smithy/core': 3.20.6 '@smithy/fetch-http-handler': 5.3.9 '@smithy/hash-node': 4.0.4 '@smithy/invalid-dependency': 4.0.4 '@smithy/middleware-content-length': 4.0.4 - '@smithy/middleware-endpoint': 4.4.6 + '@smithy/middleware-endpoint': 4.4.7 '@smithy/middleware-retry': 4.4.23 '@smithy/middleware-serde': 4.2.9 '@smithy/middleware-stack': 4.2.8 '@smithy/node-config-provider': 4.3.8 '@smithy/node-http-handler': 4.4.8 '@smithy/protocol-http': 5.3.8 - '@smithy/smithy-client': 4.10.7 + '@smithy/smithy-client': 4.10.8 '@smithy/types': 4.12.0 '@smithy/url-parser': 4.2.8 '@smithy/util-base64': 4.3.0 @@ -14623,12 +14586,12 @@ snapshots: dependencies: '@aws-sdk/types': 3.821.0 '@aws-sdk/xml-builder': 3.821.0 - '@smithy/core': 3.20.5 + '@smithy/core': 3.20.6 '@smithy/node-config-provider': 4.3.8 '@smithy/property-provider': 4.2.8 '@smithy/protocol-http': 5.3.8 '@smithy/signature-v4': 5.1.2 - '@smithy/smithy-client': 4.10.7 + '@smithy/smithy-client': 4.10.8 '@smithy/types': 4.12.0 '@smithy/util-base64': 4.3.0 '@smithy/util-body-length-browser': 4.2.0 @@ -14653,7 +14616,7 @@ snapshots: '@smithy/node-http-handler': 4.4.8 '@smithy/property-provider': 4.2.8 '@smithy/protocol-http': 5.3.8 - '@smithy/smithy-client': 4.10.7 + '@smithy/smithy-client': 4.10.8 '@smithy/types': 4.12.0 '@smithy/util-stream': 4.5.10 tslib: 2.8.1 @@ -14765,7 +14728,7 @@ snapshots: '@aws-sdk/core': 3.823.0 '@aws-sdk/types': 3.821.0 '@aws-sdk/util-endpoints': 3.821.0 - '@smithy/core': 3.20.5 + '@smithy/core': 3.20.6 '@smithy/protocol-http': 5.3.8 '@smithy/types': 4.12.0 tslib: 2.8.1 @@ -14785,19 +14748,19 @@ snapshots: '@aws-sdk/util-user-agent-browser': 3.821.0 '@aws-sdk/util-user-agent-node': 3.823.0 '@smithy/config-resolver': 4.1.4 - '@smithy/core': 3.20.5 + '@smithy/core': 3.20.6 '@smithy/fetch-http-handler': 5.3.9 '@smithy/hash-node': 4.0.4 '@smithy/invalid-dependency': 4.0.4 '@smithy/middleware-content-length': 4.0.4 - '@smithy/middleware-endpoint': 4.4.6 + '@smithy/middleware-endpoint': 4.4.7 '@smithy/middleware-retry': 4.4.23 '@smithy/middleware-serde': 4.2.9 '@smithy/middleware-stack': 4.2.8 '@smithy/node-config-provider': 4.3.8 '@smithy/node-http-handler': 4.4.8 '@smithy/protocol-http': 5.3.8 - '@smithy/smithy-client': 4.10.7 + '@smithy/smithy-client': 4.10.8 '@smithy/types': 4.12.0 '@smithy/url-parser': 4.2.8 '@smithy/util-base64': 4.3.0 @@ -15096,10 +15059,10 @@ snapshots: '@chevrotain/utils@11.0.3': {} - '@ckeditor/ckeditor-cloud-services-collaboration@53.0.1(@ckeditor/ckeditor5-utils@47.3.0)(bufferutil@4.0.9)(ckeditor5@47.3.0)(utf-8-validate@6.0.5)': + '@ckeditor/ckeditor-cloud-services-collaboration@53.0.2(@ckeditor/ckeditor5-utils@47.4.0)(bufferutil@4.0.9)(ckeditor5@47.4.0)(utf-8-validate@6.0.5)': dependencies: - '@ckeditor/ckeditor5-utils': 47.3.0 - ckeditor5: 47.3.0 + '@ckeditor/ckeditor5-utils': 47.4.0 + ckeditor5: 47.4.0 protobufjs: 7.5.0 socket.io-client: 4.7.0(bufferutil@4.0.9)(utf-8-validate@6.0.5) socket.io-parser: 4.2.4 @@ -15110,31 +15073,29 @@ snapshots: - supports-color - utf-8-validate - '@ckeditor/ckeditor5-adapter-ckfinder@47.3.0': + '@ckeditor/ckeditor5-adapter-ckfinder@47.4.0': dependencies: - '@ckeditor/ckeditor5-core': 47.3.0 - '@ckeditor/ckeditor5-upload': 47.3.0 - ckeditor5: 47.3.0 - transitivePeerDependencies: - - supports-color + '@ckeditor/ckeditor5-core': 47.4.0 + '@ckeditor/ckeditor5-upload': 47.4.0 + ckeditor5: 47.4.0 - '@ckeditor/ckeditor5-ai@47.3.0(bufferutil@4.0.9)(utf-8-validate@6.0.5)': + '@ckeditor/ckeditor5-ai@47.4.0(bufferutil@4.0.9)(utf-8-validate@6.0.5)': dependencies: '@aws-sdk/client-bedrock-runtime': 3.823.0 - '@ckeditor/ckeditor5-clipboard': 47.3.0 - '@ckeditor/ckeditor5-cloud-services': 47.3.0 - '@ckeditor/ckeditor5-collaboration-core': 47.3.0 - '@ckeditor/ckeditor5-core': 47.3.0 - '@ckeditor/ckeditor5-engine': 47.3.0 - '@ckeditor/ckeditor5-icons': 47.3.0 - '@ckeditor/ckeditor5-markdown-gfm': 47.3.0 - '@ckeditor/ckeditor5-real-time-collaboration': 47.3.0(bufferutil@4.0.9)(utf-8-validate@6.0.5) - '@ckeditor/ckeditor5-table': 47.3.0 - '@ckeditor/ckeditor5-theme-lark': 47.3.0 - '@ckeditor/ckeditor5-ui': 47.3.0 - '@ckeditor/ckeditor5-utils': 47.3.0 - ckeditor5: 47.3.0 - ckeditor5-collaboration: 47.3.0 + '@ckeditor/ckeditor5-clipboard': 47.4.0 + '@ckeditor/ckeditor5-cloud-services': 47.4.0 + '@ckeditor/ckeditor5-collaboration-core': 47.4.0 + '@ckeditor/ckeditor5-core': 47.4.0 + '@ckeditor/ckeditor5-engine': 47.4.0 + '@ckeditor/ckeditor5-icons': 47.4.0 + '@ckeditor/ckeditor5-markdown-gfm': 47.4.0 + '@ckeditor/ckeditor5-real-time-collaboration': 47.4.0(bufferutil@4.0.9)(utf-8-validate@6.0.5) + '@ckeditor/ckeditor5-table': 47.4.0 + '@ckeditor/ckeditor5-theme-lark': 47.4.0 + '@ckeditor/ckeditor5-ui': 47.4.0 + '@ckeditor/ckeditor5-utils': 47.4.0 + ckeditor5: 47.4.0 + ckeditor5-collaboration: 47.4.0 diff: 8.0.2 dom-serializer: 2.0.0 domhandler: 5.0.3 @@ -15149,186 +15110,186 @@ snapshots: - supports-color - utf-8-validate - '@ckeditor/ckeditor5-alignment@47.3.0': + '@ckeditor/ckeditor5-alignment@47.4.0': dependencies: - '@ckeditor/ckeditor5-core': 47.3.0 - '@ckeditor/ckeditor5-icons': 47.3.0 - '@ckeditor/ckeditor5-ui': 47.3.0 - '@ckeditor/ckeditor5-utils': 47.3.0 - ckeditor5: 47.3.0 + '@ckeditor/ckeditor5-core': 47.4.0 + '@ckeditor/ckeditor5-icons': 47.4.0 + '@ckeditor/ckeditor5-ui': 47.4.0 + '@ckeditor/ckeditor5-utils': 47.4.0 + ckeditor5: 47.4.0 transitivePeerDependencies: - supports-color - '@ckeditor/ckeditor5-autoformat@47.3.0': + '@ckeditor/ckeditor5-autoformat@47.4.0': dependencies: - '@ckeditor/ckeditor5-core': 47.3.0 - '@ckeditor/ckeditor5-engine': 47.3.0 - '@ckeditor/ckeditor5-heading': 47.3.0 - '@ckeditor/ckeditor5-typing': 47.3.0 - '@ckeditor/ckeditor5-utils': 47.3.0 - ckeditor5: 47.3.0 + '@ckeditor/ckeditor5-core': 47.4.0 + '@ckeditor/ckeditor5-engine': 47.4.0 + '@ckeditor/ckeditor5-heading': 47.4.0 + '@ckeditor/ckeditor5-typing': 47.4.0 + '@ckeditor/ckeditor5-utils': 47.4.0 + ckeditor5: 47.4.0 transitivePeerDependencies: - supports-color - '@ckeditor/ckeditor5-autosave@47.3.0': + '@ckeditor/ckeditor5-autosave@47.4.0': dependencies: - '@ckeditor/ckeditor5-core': 47.3.0 - '@ckeditor/ckeditor5-utils': 47.3.0 - ckeditor5: 47.3.0 + '@ckeditor/ckeditor5-core': 47.4.0 + '@ckeditor/ckeditor5-utils': 47.4.0 + ckeditor5: 47.4.0 es-toolkit: 1.39.5 transitivePeerDependencies: - supports-color - '@ckeditor/ckeditor5-basic-styles@47.3.0': + '@ckeditor/ckeditor5-basic-styles@47.4.0': dependencies: - '@ckeditor/ckeditor5-core': 47.3.0 - '@ckeditor/ckeditor5-icons': 47.3.0 - '@ckeditor/ckeditor5-typing': 47.3.0 - '@ckeditor/ckeditor5-ui': 47.3.0 - '@ckeditor/ckeditor5-utils': 47.3.0 - ckeditor5: 47.3.0 + '@ckeditor/ckeditor5-core': 47.4.0 + '@ckeditor/ckeditor5-icons': 47.4.0 + '@ckeditor/ckeditor5-typing': 47.4.0 + '@ckeditor/ckeditor5-ui': 47.4.0 + '@ckeditor/ckeditor5-utils': 47.4.0 + ckeditor5: 47.4.0 transitivePeerDependencies: - supports-color - '@ckeditor/ckeditor5-block-quote@47.3.0': + '@ckeditor/ckeditor5-block-quote@47.4.0': dependencies: - '@ckeditor/ckeditor5-core': 47.3.0 - '@ckeditor/ckeditor5-enter': 47.3.0 - '@ckeditor/ckeditor5-icons': 47.3.0 - '@ckeditor/ckeditor5-typing': 47.3.0 - '@ckeditor/ckeditor5-ui': 47.3.0 - '@ckeditor/ckeditor5-utils': 47.3.0 - ckeditor5: 47.3.0 + '@ckeditor/ckeditor5-core': 47.4.0 + '@ckeditor/ckeditor5-enter': 47.4.0 + '@ckeditor/ckeditor5-icons': 47.4.0 + '@ckeditor/ckeditor5-typing': 47.4.0 + '@ckeditor/ckeditor5-ui': 47.4.0 + '@ckeditor/ckeditor5-utils': 47.4.0 + ckeditor5: 47.4.0 transitivePeerDependencies: - supports-color - '@ckeditor/ckeditor5-bookmark@47.3.0': + '@ckeditor/ckeditor5-bookmark@47.4.0': dependencies: - '@ckeditor/ckeditor5-core': 47.3.0 - '@ckeditor/ckeditor5-icons': 47.3.0 - '@ckeditor/ckeditor5-link': 47.3.0 - '@ckeditor/ckeditor5-ui': 47.3.0 - '@ckeditor/ckeditor5-utils': 47.3.0 - '@ckeditor/ckeditor5-widget': 47.3.0 - ckeditor5: 47.3.0 + '@ckeditor/ckeditor5-core': 47.4.0 + '@ckeditor/ckeditor5-icons': 47.4.0 + '@ckeditor/ckeditor5-link': 47.4.0 + '@ckeditor/ckeditor5-ui': 47.4.0 + '@ckeditor/ckeditor5-utils': 47.4.0 + '@ckeditor/ckeditor5-widget': 47.4.0 + ckeditor5: 47.4.0 transitivePeerDependencies: - supports-color - '@ckeditor/ckeditor5-case-change@47.3.0': + '@ckeditor/ckeditor5-case-change@47.4.0': dependencies: - '@ckeditor/ckeditor5-core': 47.3.0 - '@ckeditor/ckeditor5-icons': 47.3.0 - '@ckeditor/ckeditor5-ui': 47.3.0 - '@ckeditor/ckeditor5-utils': 47.3.0 - ckeditor5: 47.3.0 + '@ckeditor/ckeditor5-core': 47.4.0 + '@ckeditor/ckeditor5-icons': 47.4.0 + '@ckeditor/ckeditor5-ui': 47.4.0 + '@ckeditor/ckeditor5-utils': 47.4.0 + ckeditor5: 47.4.0 - '@ckeditor/ckeditor5-ckbox@47.3.0': + '@ckeditor/ckeditor5-ckbox@47.4.0': dependencies: - '@ckeditor/ckeditor5-cloud-services': 47.3.0 - '@ckeditor/ckeditor5-core': 47.3.0 - '@ckeditor/ckeditor5-engine': 47.3.0 - '@ckeditor/ckeditor5-icons': 47.3.0 - '@ckeditor/ckeditor5-image': 47.3.0 - '@ckeditor/ckeditor5-ui': 47.3.0 - '@ckeditor/ckeditor5-upload': 47.3.0 - '@ckeditor/ckeditor5-utils': 47.3.0 + '@ckeditor/ckeditor5-cloud-services': 47.4.0 + '@ckeditor/ckeditor5-core': 47.4.0 + '@ckeditor/ckeditor5-engine': 47.4.0 + '@ckeditor/ckeditor5-icons': 47.4.0 + '@ckeditor/ckeditor5-image': 47.4.0 + '@ckeditor/ckeditor5-ui': 47.4.0 + '@ckeditor/ckeditor5-upload': 47.4.0 + '@ckeditor/ckeditor5-utils': 47.4.0 blurhash: 2.0.5 - ckeditor5: 47.3.0 + ckeditor5: 47.4.0 es-toolkit: 1.39.5 transitivePeerDependencies: - supports-color - '@ckeditor/ckeditor5-ckfinder@47.3.0': + '@ckeditor/ckeditor5-ckfinder@47.4.0': dependencies: - '@ckeditor/ckeditor5-core': 47.3.0 - '@ckeditor/ckeditor5-icons': 47.3.0 - '@ckeditor/ckeditor5-image': 47.3.0 - '@ckeditor/ckeditor5-ui': 47.3.0 - '@ckeditor/ckeditor5-utils': 47.3.0 - ckeditor5: 47.3.0 + '@ckeditor/ckeditor5-core': 47.4.0 + '@ckeditor/ckeditor5-icons': 47.4.0 + '@ckeditor/ckeditor5-image': 47.4.0 + '@ckeditor/ckeditor5-ui': 47.4.0 + '@ckeditor/ckeditor5-utils': 47.4.0 + ckeditor5: 47.4.0 transitivePeerDependencies: - supports-color - '@ckeditor/ckeditor5-clipboard@47.3.0': + '@ckeditor/ckeditor5-clipboard@47.4.0': dependencies: - '@ckeditor/ckeditor5-core': 47.3.0 - '@ckeditor/ckeditor5-engine': 47.3.0 - '@ckeditor/ckeditor5-ui': 47.3.0 - '@ckeditor/ckeditor5-utils': 47.3.0 - '@ckeditor/ckeditor5-widget': 47.3.0 + '@ckeditor/ckeditor5-core': 47.4.0 + '@ckeditor/ckeditor5-engine': 47.4.0 + '@ckeditor/ckeditor5-ui': 47.4.0 + '@ckeditor/ckeditor5-utils': 47.4.0 + '@ckeditor/ckeditor5-widget': 47.4.0 es-toolkit: 1.39.5 + + '@ckeditor/ckeditor5-cloud-services@47.4.0': + dependencies: + '@ckeditor/ckeditor5-core': 47.4.0 + '@ckeditor/ckeditor5-utils': 47.4.0 + ckeditor5: 47.4.0 transitivePeerDependencies: - supports-color - '@ckeditor/ckeditor5-cloud-services@47.3.0': + '@ckeditor/ckeditor5-code-block@47.4.0(patch_hash=2361d8caad7d6b5bddacc3a3b4aa37dbfba260b1c1b22a450413a79c1bb1ce95)': dependencies: - '@ckeditor/ckeditor5-core': 47.3.0 - '@ckeditor/ckeditor5-utils': 47.3.0 - ckeditor5: 47.3.0 - - '@ckeditor/ckeditor5-code-block@47.3.0(patch_hash=2361d8caad7d6b5bddacc3a3b4aa37dbfba260b1c1b22a450413a79c1bb1ce95)': - dependencies: - '@ckeditor/ckeditor5-clipboard': 47.3.0 - '@ckeditor/ckeditor5-core': 47.3.0 - '@ckeditor/ckeditor5-engine': 47.3.0 - '@ckeditor/ckeditor5-enter': 47.3.0 - '@ckeditor/ckeditor5-icons': 47.3.0 - '@ckeditor/ckeditor5-ui': 47.3.0 - '@ckeditor/ckeditor5-utils': 47.3.0 - ckeditor5: 47.3.0 + '@ckeditor/ckeditor5-clipboard': 47.4.0 + '@ckeditor/ckeditor5-core': 47.4.0 + '@ckeditor/ckeditor5-engine': 47.4.0 + '@ckeditor/ckeditor5-enter': 47.4.0 + '@ckeditor/ckeditor5-icons': 47.4.0 + '@ckeditor/ckeditor5-ui': 47.4.0 + '@ckeditor/ckeditor5-utils': 47.4.0 + ckeditor5: 47.4.0 transitivePeerDependencies: - supports-color - '@ckeditor/ckeditor5-collaboration-core@47.3.0': + '@ckeditor/ckeditor5-collaboration-core@47.4.0': dependencies: - '@ckeditor/ckeditor5-comments': 47.3.0 - '@ckeditor/ckeditor5-core': 47.3.0 - '@ckeditor/ckeditor5-engine': 47.3.0 - '@ckeditor/ckeditor5-icons': 47.3.0 - '@ckeditor/ckeditor5-link': 47.3.0 - '@ckeditor/ckeditor5-list': 47.3.0 - '@ckeditor/ckeditor5-theme-lark': 47.3.0 - '@ckeditor/ckeditor5-track-changes': 47.3.0 - '@ckeditor/ckeditor5-ui': 47.3.0 - '@ckeditor/ckeditor5-utils': 47.3.0 - '@ckeditor/ckeditor5-widget': 47.3.0 + '@ckeditor/ckeditor5-comments': 47.4.0 + '@ckeditor/ckeditor5-core': 47.4.0 + '@ckeditor/ckeditor5-engine': 47.4.0 + '@ckeditor/ckeditor5-icons': 47.4.0 + '@ckeditor/ckeditor5-link': 47.4.0 + '@ckeditor/ckeditor5-list': 47.4.0 + '@ckeditor/ckeditor5-theme-lark': 47.4.0 + '@ckeditor/ckeditor5-track-changes': 47.4.0 + '@ckeditor/ckeditor5-ui': 47.4.0 + '@ckeditor/ckeditor5-utils': 47.4.0 + '@ckeditor/ckeditor5-widget': 47.4.0 '@types/luxon': 3.6.2 - ckeditor5: 47.3.0 + ckeditor5: 47.4.0 diff: 8.0.2 luxon: 3.6.1 transitivePeerDependencies: - supports-color - '@ckeditor/ckeditor5-comments@47.3.0': + '@ckeditor/ckeditor5-comments@47.4.0': dependencies: - '@ckeditor/ckeditor5-clipboard': 47.3.0 - '@ckeditor/ckeditor5-collaboration-core': 47.3.0 - '@ckeditor/ckeditor5-core': 47.3.0 - '@ckeditor/ckeditor5-engine': 47.3.0 - '@ckeditor/ckeditor5-enter': 47.3.0 - '@ckeditor/ckeditor5-icons': 47.3.0 - '@ckeditor/ckeditor5-paragraph': 47.3.0 - '@ckeditor/ckeditor5-revision-history': 47.3.0 - '@ckeditor/ckeditor5-select-all': 47.3.0 - '@ckeditor/ckeditor5-source-editing': 47.3.0 - '@ckeditor/ckeditor5-theme-lark': 47.3.0 - '@ckeditor/ckeditor5-typing': 47.3.0 - '@ckeditor/ckeditor5-ui': 47.3.0 - '@ckeditor/ckeditor5-undo': 47.3.0 - '@ckeditor/ckeditor5-utils': 47.3.0 - '@ckeditor/ckeditor5-widget': 47.3.0 - ckeditor5: 47.3.0 - ckeditor5-collaboration: 47.3.0 + '@ckeditor/ckeditor5-clipboard': 47.4.0 + '@ckeditor/ckeditor5-collaboration-core': 47.4.0 + '@ckeditor/ckeditor5-core': 47.4.0 + '@ckeditor/ckeditor5-engine': 47.4.0 + '@ckeditor/ckeditor5-enter': 47.4.0 + '@ckeditor/ckeditor5-icons': 47.4.0 + '@ckeditor/ckeditor5-paragraph': 47.4.0 + '@ckeditor/ckeditor5-revision-history': 47.4.0 + '@ckeditor/ckeditor5-select-all': 47.4.0 + '@ckeditor/ckeditor5-source-editing': 47.4.0 + '@ckeditor/ckeditor5-theme-lark': 47.4.0 + '@ckeditor/ckeditor5-typing': 47.4.0 + '@ckeditor/ckeditor5-ui': 47.4.0 + '@ckeditor/ckeditor5-undo': 47.4.0 + '@ckeditor/ckeditor5-utils': 47.4.0 + '@ckeditor/ckeditor5-widget': 47.4.0 + ckeditor5: 47.4.0 + ckeditor5-collaboration: 47.4.0 es-toolkit: 1.39.5 transitivePeerDependencies: - supports-color - '@ckeditor/ckeditor5-core@47.3.0': + '@ckeditor/ckeditor5-core@47.4.0': dependencies: - '@ckeditor/ckeditor5-engine': 47.3.0 - '@ckeditor/ckeditor5-ui': 47.3.0 - '@ckeditor/ckeditor5-utils': 47.3.0 - '@ckeditor/ckeditor5-watchdog': 47.3.0 + '@ckeditor/ckeditor5-engine': 47.4.0 + '@ckeditor/ckeditor5-ui': 47.4.0 + '@ckeditor/ckeditor5-utils': 47.4.0 + '@ckeditor/ckeditor5-watchdog': 47.4.0 es-toolkit: 1.39.5 transitivePeerDependencies: - supports-color @@ -15427,393 +15388,389 @@ snapshots: - uglify-js - webpack - '@ckeditor/ckeditor5-document-outline@47.3.0': + '@ckeditor/ckeditor5-document-outline@47.4.0': dependencies: - '@ckeditor/ckeditor5-core': 47.3.0 - '@ckeditor/ckeditor5-engine': 47.3.0 - '@ckeditor/ckeditor5-heading': 47.3.0 - '@ckeditor/ckeditor5-icons': 47.3.0 - '@ckeditor/ckeditor5-ui': 47.3.0 - '@ckeditor/ckeditor5-utils': 47.3.0 - '@ckeditor/ckeditor5-widget': 47.3.0 - ckeditor5: 47.3.0 + '@ckeditor/ckeditor5-core': 47.4.0 + '@ckeditor/ckeditor5-engine': 47.4.0 + '@ckeditor/ckeditor5-heading': 47.4.0 + '@ckeditor/ckeditor5-icons': 47.4.0 + '@ckeditor/ckeditor5-ui': 47.4.0 + '@ckeditor/ckeditor5-utils': 47.4.0 + '@ckeditor/ckeditor5-widget': 47.4.0 + ckeditor5: 47.4.0 es-toolkit: 1.39.5 - '@ckeditor/ckeditor5-easy-image@47.3.0': + '@ckeditor/ckeditor5-easy-image@47.4.0': dependencies: - '@ckeditor/ckeditor5-cloud-services': 47.3.0 - '@ckeditor/ckeditor5-core': 47.3.0 - '@ckeditor/ckeditor5-upload': 47.3.0 - '@ckeditor/ckeditor5-utils': 47.3.0 - ckeditor5: 47.3.0 + '@ckeditor/ckeditor5-cloud-services': 47.4.0 + '@ckeditor/ckeditor5-core': 47.4.0 + '@ckeditor/ckeditor5-upload': 47.4.0 + '@ckeditor/ckeditor5-utils': 47.4.0 + ckeditor5: 47.4.0 transitivePeerDependencies: - supports-color - '@ckeditor/ckeditor5-editor-balloon@47.3.0': + '@ckeditor/ckeditor5-editor-balloon@47.4.0': dependencies: - '@ckeditor/ckeditor5-core': 47.3.0 - '@ckeditor/ckeditor5-engine': 47.3.0 - '@ckeditor/ckeditor5-ui': 47.3.0 - '@ckeditor/ckeditor5-utils': 47.3.0 - ckeditor5: 47.3.0 + '@ckeditor/ckeditor5-core': 47.4.0 + '@ckeditor/ckeditor5-engine': 47.4.0 + '@ckeditor/ckeditor5-ui': 47.4.0 + '@ckeditor/ckeditor5-utils': 47.4.0 + ckeditor5: 47.4.0 + es-toolkit: 1.39.5 + + '@ckeditor/ckeditor5-editor-classic@47.4.0': + dependencies: + '@ckeditor/ckeditor5-core': 47.4.0 + '@ckeditor/ckeditor5-engine': 47.4.0 + '@ckeditor/ckeditor5-ui': 47.4.0 + '@ckeditor/ckeditor5-utils': 47.4.0 + ckeditor5: 47.4.0 + es-toolkit: 1.39.5 + + '@ckeditor/ckeditor5-editor-decoupled@47.4.0': + dependencies: + '@ckeditor/ckeditor5-core': 47.4.0 + '@ckeditor/ckeditor5-engine': 47.4.0 + '@ckeditor/ckeditor5-ui': 47.4.0 + '@ckeditor/ckeditor5-utils': 47.4.0 + ckeditor5: 47.4.0 + es-toolkit: 1.39.5 + + '@ckeditor/ckeditor5-editor-inline@47.4.0': + dependencies: + '@ckeditor/ckeditor5-core': 47.4.0 + '@ckeditor/ckeditor5-engine': 47.4.0 + '@ckeditor/ckeditor5-ui': 47.4.0 + '@ckeditor/ckeditor5-utils': 47.4.0 + ckeditor5: 47.4.0 es-toolkit: 1.39.5 transitivePeerDependencies: - supports-color - '@ckeditor/ckeditor5-editor-classic@47.3.0': + '@ckeditor/ckeditor5-editor-multi-root@47.4.0': dependencies: - '@ckeditor/ckeditor5-core': 47.3.0 - '@ckeditor/ckeditor5-engine': 47.3.0 - '@ckeditor/ckeditor5-ui': 47.3.0 - '@ckeditor/ckeditor5-utils': 47.3.0 - ckeditor5: 47.3.0 + '@ckeditor/ckeditor5-core': 47.4.0 + '@ckeditor/ckeditor5-engine': 47.4.0 + '@ckeditor/ckeditor5-ui': 47.4.0 + '@ckeditor/ckeditor5-utils': 47.4.0 + ckeditor5: 47.4.0 es-toolkit: 1.39.5 transitivePeerDependencies: - supports-color - '@ckeditor/ckeditor5-editor-decoupled@47.3.0': + '@ckeditor/ckeditor5-email@47.4.0': dependencies: - '@ckeditor/ckeditor5-core': 47.3.0 - '@ckeditor/ckeditor5-engine': 47.3.0 - '@ckeditor/ckeditor5-ui': 47.3.0 - '@ckeditor/ckeditor5-utils': 47.3.0 - ckeditor5: 47.3.0 - es-toolkit: 1.39.5 + '@ckeditor/ckeditor5-core': 47.4.0 + '@ckeditor/ckeditor5-export-inline-styles': 47.4.0 + '@ckeditor/ckeditor5-font': 47.4.0 + '@ckeditor/ckeditor5-html-support': 47.4.0 + '@ckeditor/ckeditor5-list': 47.4.0 + '@ckeditor/ckeditor5-table': 47.4.0 + '@ckeditor/ckeditor5-utils': 47.4.0 + ckeditor5: 47.4.0 transitivePeerDependencies: - supports-color - '@ckeditor/ckeditor5-editor-inline@47.3.0': + '@ckeditor/ckeditor5-emoji@47.4.0': dependencies: - '@ckeditor/ckeditor5-core': 47.3.0 - '@ckeditor/ckeditor5-engine': 47.3.0 - '@ckeditor/ckeditor5-ui': 47.3.0 - '@ckeditor/ckeditor5-utils': 47.3.0 - ckeditor5: 47.3.0 - es-toolkit: 1.39.5 - transitivePeerDependencies: - - supports-color - - '@ckeditor/ckeditor5-editor-multi-root@47.3.0': - dependencies: - '@ckeditor/ckeditor5-core': 47.3.0 - '@ckeditor/ckeditor5-engine': 47.3.0 - '@ckeditor/ckeditor5-ui': 47.3.0 - '@ckeditor/ckeditor5-utils': 47.3.0 - ckeditor5: 47.3.0 - es-toolkit: 1.39.5 - transitivePeerDependencies: - - supports-color - - '@ckeditor/ckeditor5-email@47.3.0': - dependencies: - '@ckeditor/ckeditor5-core': 47.3.0 - '@ckeditor/ckeditor5-export-inline-styles': 47.3.0 - '@ckeditor/ckeditor5-font': 47.3.0 - '@ckeditor/ckeditor5-html-support': 47.3.0 - '@ckeditor/ckeditor5-list': 47.3.0 - '@ckeditor/ckeditor5-table': 47.3.0 - '@ckeditor/ckeditor5-utils': 47.3.0 - ckeditor5: 47.3.0 - - '@ckeditor/ckeditor5-emoji@47.3.0': - dependencies: - '@ckeditor/ckeditor5-core': 47.3.0 - '@ckeditor/ckeditor5-icons': 47.3.0 - '@ckeditor/ckeditor5-mention': 47.3.0(patch_hash=5981fb59ba35829e4dff1d39cf771000f8a8fdfa7a34b51d8af9549541f2d62d) - '@ckeditor/ckeditor5-typing': 47.3.0 - '@ckeditor/ckeditor5-ui': 47.3.0 - '@ckeditor/ckeditor5-utils': 47.3.0 - ckeditor5: 47.3.0 + '@ckeditor/ckeditor5-core': 47.4.0 + '@ckeditor/ckeditor5-icons': 47.4.0 + '@ckeditor/ckeditor5-mention': 47.4.0(patch_hash=5981fb59ba35829e4dff1d39cf771000f8a8fdfa7a34b51d8af9549541f2d62d) + '@ckeditor/ckeditor5-typing': 47.4.0 + '@ckeditor/ckeditor5-ui': 47.4.0 + '@ckeditor/ckeditor5-utils': 47.4.0 + ckeditor5: 47.4.0 es-toolkit: 1.39.5 fuzzysort: 3.1.0 transitivePeerDependencies: - supports-color - '@ckeditor/ckeditor5-engine@47.3.0': + '@ckeditor/ckeditor5-engine@47.4.0': dependencies: - '@ckeditor/ckeditor5-utils': 47.3.0 + '@ckeditor/ckeditor5-utils': 47.4.0 es-toolkit: 1.39.5 - '@ckeditor/ckeditor5-enter@47.3.0': + '@ckeditor/ckeditor5-enter@47.4.0': dependencies: - '@ckeditor/ckeditor5-core': 47.3.0 - '@ckeditor/ckeditor5-engine': 47.3.0 - '@ckeditor/ckeditor5-utils': 47.3.0 + '@ckeditor/ckeditor5-core': 47.4.0 + '@ckeditor/ckeditor5-engine': 47.4.0 + '@ckeditor/ckeditor5-utils': 47.4.0 + + '@ckeditor/ckeditor5-essentials@47.4.0': + dependencies: + '@ckeditor/ckeditor5-clipboard': 47.4.0 + '@ckeditor/ckeditor5-core': 47.4.0 + '@ckeditor/ckeditor5-enter': 47.4.0 + '@ckeditor/ckeditor5-select-all': 47.4.0 + '@ckeditor/ckeditor5-typing': 47.4.0 + '@ckeditor/ckeditor5-ui': 47.4.0 + '@ckeditor/ckeditor5-undo': 47.4.0 + ckeditor5: 47.4.0 transitivePeerDependencies: - supports-color - '@ckeditor/ckeditor5-essentials@47.3.0': + '@ckeditor/ckeditor5-export-inline-styles@47.4.0': dependencies: - '@ckeditor/ckeditor5-clipboard': 47.3.0 - '@ckeditor/ckeditor5-core': 47.3.0 - '@ckeditor/ckeditor5-enter': 47.3.0 - '@ckeditor/ckeditor5-select-all': 47.3.0 - '@ckeditor/ckeditor5-typing': 47.3.0 - '@ckeditor/ckeditor5-ui': 47.3.0 - '@ckeditor/ckeditor5-undo': 47.3.0 - ckeditor5: 47.3.0 - transitivePeerDependencies: - - supports-color - - '@ckeditor/ckeditor5-export-inline-styles@47.3.0': - dependencies: - '@ckeditor/ckeditor5-core': 47.3.0 - '@ckeditor/ckeditor5-engine': 47.3.0 - '@ckeditor/ckeditor5-utils': 47.3.0 - ckeditor5: 47.3.0 + '@ckeditor/ckeditor5-core': 47.4.0 + '@ckeditor/ckeditor5-engine': 47.4.0 + '@ckeditor/ckeditor5-utils': 47.4.0 + ckeditor5: 47.4.0 specificity: 0.4.1 - '@ckeditor/ckeditor5-export-pdf@47.3.0': + '@ckeditor/ckeditor5-export-pdf@47.4.0': dependencies: - '@ckeditor/ckeditor5-cloud-services': 47.3.0 - '@ckeditor/ckeditor5-core': 47.3.0 - '@ckeditor/ckeditor5-icons': 47.3.0 - '@ckeditor/ckeditor5-merge-fields': 47.3.0 - '@ckeditor/ckeditor5-ui': 47.3.0 - '@ckeditor/ckeditor5-utils': 47.3.0 - ckeditor5: 47.3.0 - - '@ckeditor/ckeditor5-export-word@47.3.0': - dependencies: - '@ckeditor/ckeditor5-cloud-services': 47.3.0 - '@ckeditor/ckeditor5-collaboration-core': 47.3.0 - '@ckeditor/ckeditor5-comments': 47.3.0 - '@ckeditor/ckeditor5-core': 47.3.0 - '@ckeditor/ckeditor5-icons': 47.3.0 - '@ckeditor/ckeditor5-merge-fields': 47.3.0 - '@ckeditor/ckeditor5-track-changes': 47.3.0 - '@ckeditor/ckeditor5-ui': 47.3.0 - '@ckeditor/ckeditor5-utils': 47.3.0 - ckeditor5: 47.3.0 + '@ckeditor/ckeditor5-cloud-services': 47.4.0 + '@ckeditor/ckeditor5-core': 47.4.0 + '@ckeditor/ckeditor5-icons': 47.4.0 + '@ckeditor/ckeditor5-merge-fields': 47.4.0 + '@ckeditor/ckeditor5-ui': 47.4.0 + '@ckeditor/ckeditor5-utils': 47.4.0 + ckeditor5: 47.4.0 transitivePeerDependencies: - supports-color - '@ckeditor/ckeditor5-find-and-replace@47.3.0': + '@ckeditor/ckeditor5-export-word@47.4.0': dependencies: - '@ckeditor/ckeditor5-core': 47.3.0 - '@ckeditor/ckeditor5-icons': 47.3.0 - '@ckeditor/ckeditor5-ui': 47.3.0 - '@ckeditor/ckeditor5-utils': 47.3.0 - ckeditor5: 47.3.0 + '@ckeditor/ckeditor5-cloud-services': 47.4.0 + '@ckeditor/ckeditor5-collaboration-core': 47.4.0 + '@ckeditor/ckeditor5-comments': 47.4.0 + '@ckeditor/ckeditor5-core': 47.4.0 + '@ckeditor/ckeditor5-icons': 47.4.0 + '@ckeditor/ckeditor5-merge-fields': 47.4.0 + '@ckeditor/ckeditor5-track-changes': 47.4.0 + '@ckeditor/ckeditor5-ui': 47.4.0 + '@ckeditor/ckeditor5-utils': 47.4.0 + ckeditor5: 47.4.0 + transitivePeerDependencies: + - supports-color + + '@ckeditor/ckeditor5-find-and-replace@47.4.0': + dependencies: + '@ckeditor/ckeditor5-core': 47.4.0 + '@ckeditor/ckeditor5-icons': 47.4.0 + '@ckeditor/ckeditor5-ui': 47.4.0 + '@ckeditor/ckeditor5-utils': 47.4.0 + ckeditor5: 47.4.0 + es-toolkit: 1.39.5 + + '@ckeditor/ckeditor5-font@47.4.0': + dependencies: + '@ckeditor/ckeditor5-core': 47.4.0 + '@ckeditor/ckeditor5-engine': 47.4.0 + '@ckeditor/ckeditor5-icons': 47.4.0 + '@ckeditor/ckeditor5-ui': 47.4.0 + '@ckeditor/ckeditor5-utils': 47.4.0 + ckeditor5: 47.4.0 + transitivePeerDependencies: + - supports-color + + '@ckeditor/ckeditor5-footnotes@47.4.0': + dependencies: + '@ckeditor/ckeditor5-clipboard': 47.4.0 + '@ckeditor/ckeditor5-core': 47.4.0 + '@ckeditor/ckeditor5-engine': 47.4.0 + '@ckeditor/ckeditor5-icons': 47.4.0 + '@ckeditor/ckeditor5-ui': 47.4.0 + '@ckeditor/ckeditor5-utils': 47.4.0 + '@ckeditor/ckeditor5-widget': 47.4.0 + ckeditor5: 47.4.0 + + '@ckeditor/ckeditor5-format-painter@47.4.0': + dependencies: + '@ckeditor/ckeditor5-core': 47.4.0 + '@ckeditor/ckeditor5-engine': 47.4.0 + '@ckeditor/ckeditor5-icons': 47.4.0 + '@ckeditor/ckeditor5-ui': 47.4.0 + '@ckeditor/ckeditor5-utils': 47.4.0 + ckeditor5: 47.4.0 + + '@ckeditor/ckeditor5-fullscreen@47.4.0': + dependencies: + '@ckeditor/ckeditor5-core': 47.4.0 + '@ckeditor/ckeditor5-editor-classic': 47.4.0 + '@ckeditor/ckeditor5-editor-decoupled': 47.4.0 + '@ckeditor/ckeditor5-icons': 47.4.0 + '@ckeditor/ckeditor5-ui': 47.4.0 + '@ckeditor/ckeditor5-utils': 47.4.0 + ckeditor5: 47.4.0 + transitivePeerDependencies: + - supports-color + + '@ckeditor/ckeditor5-heading@47.4.0': + dependencies: + '@ckeditor/ckeditor5-core': 47.4.0 + '@ckeditor/ckeditor5-engine': 47.4.0 + '@ckeditor/ckeditor5-icons': 47.4.0 + '@ckeditor/ckeditor5-paragraph': 47.4.0 + '@ckeditor/ckeditor5-ui': 47.4.0 + '@ckeditor/ckeditor5-utils': 47.4.0 + ckeditor5: 47.4.0 + transitivePeerDependencies: + - supports-color + + '@ckeditor/ckeditor5-highlight@47.4.0': + dependencies: + '@ckeditor/ckeditor5-core': 47.4.0 + '@ckeditor/ckeditor5-icons': 47.4.0 + '@ckeditor/ckeditor5-ui': 47.4.0 + '@ckeditor/ckeditor5-utils': 47.4.0 + ckeditor5: 47.4.0 + transitivePeerDependencies: + - supports-color + + '@ckeditor/ckeditor5-horizontal-line@47.4.0': + dependencies: + '@ckeditor/ckeditor5-core': 47.4.0 + '@ckeditor/ckeditor5-icons': 47.4.0 + '@ckeditor/ckeditor5-ui': 47.4.0 + '@ckeditor/ckeditor5-utils': 47.4.0 + '@ckeditor/ckeditor5-widget': 47.4.0 + ckeditor5: 47.4.0 + + '@ckeditor/ckeditor5-html-embed@47.4.0': + dependencies: + '@ckeditor/ckeditor5-core': 47.4.0 + '@ckeditor/ckeditor5-icons': 47.4.0 + '@ckeditor/ckeditor5-ui': 47.4.0 + '@ckeditor/ckeditor5-utils': 47.4.0 + '@ckeditor/ckeditor5-widget': 47.4.0 + ckeditor5: 47.4.0 + transitivePeerDependencies: + - supports-color + + '@ckeditor/ckeditor5-html-support@47.4.0': + dependencies: + '@ckeditor/ckeditor5-core': 47.4.0 + '@ckeditor/ckeditor5-engine': 47.4.0 + '@ckeditor/ckeditor5-enter': 47.4.0 + '@ckeditor/ckeditor5-heading': 47.4.0 + '@ckeditor/ckeditor5-image': 47.4.0 + '@ckeditor/ckeditor5-list': 47.4.0 + '@ckeditor/ckeditor5-remove-format': 47.4.0 + '@ckeditor/ckeditor5-table': 47.4.0 + '@ckeditor/ckeditor5-utils': 47.4.0 + '@ckeditor/ckeditor5-widget': 47.4.0 + ckeditor5: 47.4.0 es-toolkit: 1.39.5 transitivePeerDependencies: - supports-color - '@ckeditor/ckeditor5-font@47.3.0': - dependencies: - '@ckeditor/ckeditor5-core': 47.3.0 - '@ckeditor/ckeditor5-engine': 47.3.0 - '@ckeditor/ckeditor5-icons': 47.3.0 - '@ckeditor/ckeditor5-ui': 47.3.0 - '@ckeditor/ckeditor5-utils': 47.3.0 - ckeditor5: 47.3.0 - transitivePeerDependencies: - - supports-color + '@ckeditor/ckeditor5-icons@47.4.0': {} - '@ckeditor/ckeditor5-footnotes@47.3.0': + '@ckeditor/ckeditor5-image@47.4.0': dependencies: - '@ckeditor/ckeditor5-clipboard': 47.3.0 - '@ckeditor/ckeditor5-core': 47.3.0 - '@ckeditor/ckeditor5-engine': 47.3.0 - '@ckeditor/ckeditor5-icons': 47.3.0 - '@ckeditor/ckeditor5-ui': 47.3.0 - '@ckeditor/ckeditor5-utils': 47.3.0 - '@ckeditor/ckeditor5-widget': 47.3.0 - ckeditor5: 47.3.0 - - '@ckeditor/ckeditor5-format-painter@47.3.0': - dependencies: - '@ckeditor/ckeditor5-core': 47.3.0 - '@ckeditor/ckeditor5-engine': 47.3.0 - '@ckeditor/ckeditor5-icons': 47.3.0 - '@ckeditor/ckeditor5-ui': 47.3.0 - '@ckeditor/ckeditor5-utils': 47.3.0 - ckeditor5: 47.3.0 - - '@ckeditor/ckeditor5-fullscreen@47.3.0': - dependencies: - '@ckeditor/ckeditor5-core': 47.3.0 - '@ckeditor/ckeditor5-editor-classic': 47.3.0 - '@ckeditor/ckeditor5-editor-decoupled': 47.3.0 - '@ckeditor/ckeditor5-icons': 47.3.0 - '@ckeditor/ckeditor5-ui': 47.3.0 - '@ckeditor/ckeditor5-utils': 47.3.0 - ckeditor5: 47.3.0 - transitivePeerDependencies: - - supports-color - - '@ckeditor/ckeditor5-heading@47.3.0': - dependencies: - '@ckeditor/ckeditor5-core': 47.3.0 - '@ckeditor/ckeditor5-engine': 47.3.0 - '@ckeditor/ckeditor5-icons': 47.3.0 - '@ckeditor/ckeditor5-paragraph': 47.3.0 - '@ckeditor/ckeditor5-ui': 47.3.0 - '@ckeditor/ckeditor5-utils': 47.3.0 - ckeditor5: 47.3.0 - transitivePeerDependencies: - - supports-color - - '@ckeditor/ckeditor5-highlight@47.3.0': - dependencies: - '@ckeditor/ckeditor5-core': 47.3.0 - '@ckeditor/ckeditor5-icons': 47.3.0 - '@ckeditor/ckeditor5-ui': 47.3.0 - '@ckeditor/ckeditor5-utils': 47.3.0 - ckeditor5: 47.3.0 - transitivePeerDependencies: - - supports-color - - '@ckeditor/ckeditor5-horizontal-line@47.3.0': - dependencies: - '@ckeditor/ckeditor5-core': 47.3.0 - '@ckeditor/ckeditor5-icons': 47.3.0 - '@ckeditor/ckeditor5-ui': 47.3.0 - '@ckeditor/ckeditor5-utils': 47.3.0 - '@ckeditor/ckeditor5-widget': 47.3.0 - ckeditor5: 47.3.0 - transitivePeerDependencies: - - supports-color - - '@ckeditor/ckeditor5-html-embed@47.3.0': - dependencies: - '@ckeditor/ckeditor5-core': 47.3.0 - '@ckeditor/ckeditor5-icons': 47.3.0 - '@ckeditor/ckeditor5-ui': 47.3.0 - '@ckeditor/ckeditor5-utils': 47.3.0 - '@ckeditor/ckeditor5-widget': 47.3.0 - ckeditor5: 47.3.0 - transitivePeerDependencies: - - supports-color - - '@ckeditor/ckeditor5-html-support@47.3.0': - dependencies: - '@ckeditor/ckeditor5-core': 47.3.0 - '@ckeditor/ckeditor5-engine': 47.3.0 - '@ckeditor/ckeditor5-enter': 47.3.0 - '@ckeditor/ckeditor5-heading': 47.3.0 - '@ckeditor/ckeditor5-image': 47.3.0 - '@ckeditor/ckeditor5-list': 47.3.0 - '@ckeditor/ckeditor5-remove-format': 47.3.0 - '@ckeditor/ckeditor5-table': 47.3.0 - '@ckeditor/ckeditor5-utils': 47.3.0 - '@ckeditor/ckeditor5-widget': 47.3.0 - ckeditor5: 47.3.0 + '@ckeditor/ckeditor5-clipboard': 47.4.0 + '@ckeditor/ckeditor5-core': 47.4.0 + '@ckeditor/ckeditor5-engine': 47.4.0 + '@ckeditor/ckeditor5-icons': 47.4.0 + '@ckeditor/ckeditor5-typing': 47.4.0 + '@ckeditor/ckeditor5-ui': 47.4.0 + '@ckeditor/ckeditor5-undo': 47.4.0 + '@ckeditor/ckeditor5-upload': 47.4.0 + '@ckeditor/ckeditor5-utils': 47.4.0 + '@ckeditor/ckeditor5-widget': 47.4.0 + ckeditor5: 47.4.0 es-toolkit: 1.39.5 transitivePeerDependencies: - supports-color - '@ckeditor/ckeditor5-icons@47.3.0': {} - - '@ckeditor/ckeditor5-image@47.3.0': + '@ckeditor/ckeditor5-import-word@47.4.0': dependencies: - '@ckeditor/ckeditor5-clipboard': 47.3.0 - '@ckeditor/ckeditor5-core': 47.3.0 - '@ckeditor/ckeditor5-engine': 47.3.0 - '@ckeditor/ckeditor5-icons': 47.3.0 - '@ckeditor/ckeditor5-typing': 47.3.0 - '@ckeditor/ckeditor5-ui': 47.3.0 - '@ckeditor/ckeditor5-undo': 47.3.0 - '@ckeditor/ckeditor5-upload': 47.3.0 - '@ckeditor/ckeditor5-utils': 47.3.0 - '@ckeditor/ckeditor5-widget': 47.3.0 - ckeditor5: 47.3.0 - es-toolkit: 1.39.5 + '@ckeditor/ckeditor5-clipboard': 47.4.0 + '@ckeditor/ckeditor5-cloud-services': 47.4.0 + '@ckeditor/ckeditor5-core': 47.4.0 + '@ckeditor/ckeditor5-engine': 47.4.0 + '@ckeditor/ckeditor5-icons': 47.4.0 + '@ckeditor/ckeditor5-merge-fields': 47.4.0 + '@ckeditor/ckeditor5-ui': 47.4.0 + '@ckeditor/ckeditor5-utils': 47.4.0 + ckeditor5: 47.4.0 transitivePeerDependencies: - supports-color - '@ckeditor/ckeditor5-import-word@47.3.0': + '@ckeditor/ckeditor5-indent@47.4.0': dependencies: - '@ckeditor/ckeditor5-clipboard': 47.3.0 - '@ckeditor/ckeditor5-cloud-services': 47.3.0 - '@ckeditor/ckeditor5-core': 47.3.0 - '@ckeditor/ckeditor5-engine': 47.3.0 - '@ckeditor/ckeditor5-icons': 47.3.0 - '@ckeditor/ckeditor5-merge-fields': 47.3.0 - '@ckeditor/ckeditor5-ui': 47.3.0 - '@ckeditor/ckeditor5-utils': 47.3.0 - ckeditor5: 47.3.0 - - '@ckeditor/ckeditor5-indent@47.3.0': - dependencies: - '@ckeditor/ckeditor5-core': 47.3.0 - '@ckeditor/ckeditor5-engine': 47.3.0 - '@ckeditor/ckeditor5-heading': 47.3.0 - '@ckeditor/ckeditor5-icons': 47.3.0 - '@ckeditor/ckeditor5-list': 47.3.0 - '@ckeditor/ckeditor5-ui': 47.3.0 - '@ckeditor/ckeditor5-utils': 47.3.0 - ckeditor5: 47.3.0 + '@ckeditor/ckeditor5-core': 47.4.0 + '@ckeditor/ckeditor5-engine': 47.4.0 + '@ckeditor/ckeditor5-heading': 47.4.0 + '@ckeditor/ckeditor5-icons': 47.4.0 + '@ckeditor/ckeditor5-list': 47.4.0 + '@ckeditor/ckeditor5-ui': 47.4.0 + '@ckeditor/ckeditor5-utils': 47.4.0 + ckeditor5: 47.4.0 transitivePeerDependencies: - supports-color '@ckeditor/ckeditor5-inspector@5.0.0': {} - '@ckeditor/ckeditor5-language@47.3.0': + '@ckeditor/ckeditor5-language@47.4.0': dependencies: - '@ckeditor/ckeditor5-core': 47.3.0 - '@ckeditor/ckeditor5-ui': 47.3.0 - '@ckeditor/ckeditor5-utils': 47.3.0 - ckeditor5: 47.3.0 + '@ckeditor/ckeditor5-core': 47.4.0 + '@ckeditor/ckeditor5-ui': 47.4.0 + '@ckeditor/ckeditor5-utils': 47.4.0 + ckeditor5: 47.4.0 transitivePeerDependencies: - supports-color - '@ckeditor/ckeditor5-line-height@47.3.0': + '@ckeditor/ckeditor5-line-height@47.4.0': dependencies: - '@ckeditor/ckeditor5-core': 47.3.0 - '@ckeditor/ckeditor5-engine': 47.3.0 - '@ckeditor/ckeditor5-icons': 47.3.0 - '@ckeditor/ckeditor5-list': 47.3.0 - '@ckeditor/ckeditor5-ui': 47.3.0 - '@ckeditor/ckeditor5-utils': 47.3.0 - ckeditor5: 47.3.0 + '@ckeditor/ckeditor5-core': 47.4.0 + '@ckeditor/ckeditor5-engine': 47.4.0 + '@ckeditor/ckeditor5-icons': 47.4.0 + '@ckeditor/ckeditor5-list': 47.4.0 + '@ckeditor/ckeditor5-ui': 47.4.0 + '@ckeditor/ckeditor5-utils': 47.4.0 + ckeditor5: 47.4.0 - '@ckeditor/ckeditor5-link@47.3.0': + '@ckeditor/ckeditor5-link@47.4.0': dependencies: - '@ckeditor/ckeditor5-clipboard': 47.3.0 - '@ckeditor/ckeditor5-core': 47.3.0 - '@ckeditor/ckeditor5-engine': 47.3.0 - '@ckeditor/ckeditor5-icons': 47.3.0 - '@ckeditor/ckeditor5-image': 47.3.0 - '@ckeditor/ckeditor5-typing': 47.3.0 - '@ckeditor/ckeditor5-ui': 47.3.0 - '@ckeditor/ckeditor5-utils': 47.3.0 - '@ckeditor/ckeditor5-widget': 47.3.0 - ckeditor5: 47.3.0 + '@ckeditor/ckeditor5-clipboard': 47.4.0 + '@ckeditor/ckeditor5-core': 47.4.0 + '@ckeditor/ckeditor5-engine': 47.4.0 + '@ckeditor/ckeditor5-icons': 47.4.0 + '@ckeditor/ckeditor5-image': 47.4.0 + '@ckeditor/ckeditor5-typing': 47.4.0 + '@ckeditor/ckeditor5-ui': 47.4.0 + '@ckeditor/ckeditor5-utils': 47.4.0 + '@ckeditor/ckeditor5-widget': 47.4.0 + ckeditor5: 47.4.0 es-toolkit: 1.39.5 - - '@ckeditor/ckeditor5-list-multi-level@47.3.0': - dependencies: - '@ckeditor/ckeditor5-core': 47.3.0 - '@ckeditor/ckeditor5-engine': 47.3.0 - '@ckeditor/ckeditor5-icons': 47.3.0 - '@ckeditor/ckeditor5-list': 47.3.0 - '@ckeditor/ckeditor5-ui': 47.3.0 - '@ckeditor/ckeditor5-utils': 47.3.0 - ckeditor5: 47.3.0 - - '@ckeditor/ckeditor5-list@47.3.0': - dependencies: - '@ckeditor/ckeditor5-clipboard': 47.3.0 - '@ckeditor/ckeditor5-core': 47.3.0 - '@ckeditor/ckeditor5-engine': 47.3.0 - '@ckeditor/ckeditor5-enter': 47.3.0 - '@ckeditor/ckeditor5-font': 47.3.0 - '@ckeditor/ckeditor5-icons': 47.3.0 - '@ckeditor/ckeditor5-typing': 47.3.0 - '@ckeditor/ckeditor5-ui': 47.3.0 - '@ckeditor/ckeditor5-utils': 47.3.0 - ckeditor5: 47.3.0 transitivePeerDependencies: - supports-color - '@ckeditor/ckeditor5-markdown-gfm@47.3.0': + '@ckeditor/ckeditor5-list-multi-level@47.4.0': dependencies: - '@ckeditor/ckeditor5-clipboard': 47.3.0 - '@ckeditor/ckeditor5-core': 47.3.0 - '@ckeditor/ckeditor5-engine': 47.3.0 + '@ckeditor/ckeditor5-core': 47.4.0 + '@ckeditor/ckeditor5-engine': 47.4.0 + '@ckeditor/ckeditor5-icons': 47.4.0 + '@ckeditor/ckeditor5-list': 47.4.0 + '@ckeditor/ckeditor5-ui': 47.4.0 + '@ckeditor/ckeditor5-utils': 47.4.0 + ckeditor5: 47.4.0 + + '@ckeditor/ckeditor5-list@47.4.0': + dependencies: + '@ckeditor/ckeditor5-clipboard': 47.4.0 + '@ckeditor/ckeditor5-core': 47.4.0 + '@ckeditor/ckeditor5-engine': 47.4.0 + '@ckeditor/ckeditor5-enter': 47.4.0 + '@ckeditor/ckeditor5-font': 47.4.0 + '@ckeditor/ckeditor5-icons': 47.4.0 + '@ckeditor/ckeditor5-typing': 47.4.0 + '@ckeditor/ckeditor5-ui': 47.4.0 + '@ckeditor/ckeditor5-utils': 47.4.0 + ckeditor5: 47.4.0 + transitivePeerDependencies: + - supports-color + + '@ckeditor/ckeditor5-markdown-gfm@47.4.0': + dependencies: + '@ckeditor/ckeditor5-clipboard': 47.4.0 + '@ckeditor/ckeditor5-core': 47.4.0 + '@ckeditor/ckeditor5-engine': 47.4.0 '@types/hast': 3.0.4 - ckeditor5: 47.3.0 + ckeditor5: 47.4.0 hast-util-from-dom: 5.0.1 hast-util-to-html: 9.0.5 hast-util-to-mdast: 10.1.2 @@ -15831,52 +15788,60 @@ snapshots: transitivePeerDependencies: - supports-color - '@ckeditor/ckeditor5-media-embed@47.3.0': + '@ckeditor/ckeditor5-media-embed@47.4.0': dependencies: - '@ckeditor/ckeditor5-clipboard': 47.3.0 - '@ckeditor/ckeditor5-core': 47.3.0 - '@ckeditor/ckeditor5-engine': 47.3.0 - '@ckeditor/ckeditor5-icons': 47.3.0 - '@ckeditor/ckeditor5-typing': 47.3.0 - '@ckeditor/ckeditor5-ui': 47.3.0 - '@ckeditor/ckeditor5-undo': 47.3.0 - '@ckeditor/ckeditor5-utils': 47.3.0 - '@ckeditor/ckeditor5-widget': 47.3.0 - ckeditor5: 47.3.0 + '@ckeditor/ckeditor5-clipboard': 47.4.0 + '@ckeditor/ckeditor5-core': 47.4.0 + '@ckeditor/ckeditor5-engine': 47.4.0 + '@ckeditor/ckeditor5-icons': 47.4.0 + '@ckeditor/ckeditor5-typing': 47.4.0 + '@ckeditor/ckeditor5-ui': 47.4.0 + '@ckeditor/ckeditor5-undo': 47.4.0 + '@ckeditor/ckeditor5-utils': 47.4.0 + '@ckeditor/ckeditor5-widget': 47.4.0 + ckeditor5: 47.4.0 + transitivePeerDependencies: + - supports-color - '@ckeditor/ckeditor5-mention@47.3.0(patch_hash=5981fb59ba35829e4dff1d39cf771000f8a8fdfa7a34b51d8af9549541f2d62d)': + '@ckeditor/ckeditor5-mention@47.4.0(patch_hash=5981fb59ba35829e4dff1d39cf771000f8a8fdfa7a34b51d8af9549541f2d62d)': dependencies: - '@ckeditor/ckeditor5-core': 47.3.0 - '@ckeditor/ckeditor5-typing': 47.3.0 - '@ckeditor/ckeditor5-ui': 47.3.0 - '@ckeditor/ckeditor5-utils': 47.3.0 - ckeditor5: 47.3.0 + '@ckeditor/ckeditor5-core': 47.4.0 + '@ckeditor/ckeditor5-typing': 47.4.0 + '@ckeditor/ckeditor5-ui': 47.4.0 + '@ckeditor/ckeditor5-utils': 47.4.0 + ckeditor5: 47.4.0 es-toolkit: 1.39.5 + transitivePeerDependencies: + - supports-color - '@ckeditor/ckeditor5-merge-fields@47.3.0': + '@ckeditor/ckeditor5-merge-fields@47.4.0': dependencies: - '@ckeditor/ckeditor5-core': 47.3.0 - '@ckeditor/ckeditor5-icons': 47.3.0 - '@ckeditor/ckeditor5-image': 47.3.0 - '@ckeditor/ckeditor5-mention': 47.3.0(patch_hash=5981fb59ba35829e4dff1d39cf771000f8a8fdfa7a34b51d8af9549541f2d62d) - '@ckeditor/ckeditor5-ui': 47.3.0 - '@ckeditor/ckeditor5-utils': 47.3.0 - '@ckeditor/ckeditor5-widget': 47.3.0 - ckeditor5: 47.3.0 + '@ckeditor/ckeditor5-core': 47.4.0 + '@ckeditor/ckeditor5-icons': 47.4.0 + '@ckeditor/ckeditor5-image': 47.4.0 + '@ckeditor/ckeditor5-mention': 47.4.0(patch_hash=5981fb59ba35829e4dff1d39cf771000f8a8fdfa7a34b51d8af9549541f2d62d) + '@ckeditor/ckeditor5-ui': 47.4.0 + '@ckeditor/ckeditor5-utils': 47.4.0 + '@ckeditor/ckeditor5-widget': 47.4.0 + ckeditor5: 47.4.0 es-toolkit: 1.39.5 + transitivePeerDependencies: + - supports-color - '@ckeditor/ckeditor5-minimap@47.3.0': + '@ckeditor/ckeditor5-minimap@47.4.0': dependencies: - '@ckeditor/ckeditor5-core': 47.3.0 - '@ckeditor/ckeditor5-engine': 47.3.0 - '@ckeditor/ckeditor5-ui': 47.3.0 - '@ckeditor/ckeditor5-utils': 47.3.0 - ckeditor5: 47.3.0 + '@ckeditor/ckeditor5-core': 47.4.0 + '@ckeditor/ckeditor5-engine': 47.4.0 + '@ckeditor/ckeditor5-ui': 47.4.0 + '@ckeditor/ckeditor5-utils': 47.4.0 + ckeditor5: 47.4.0 + transitivePeerDependencies: + - supports-color - '@ckeditor/ckeditor5-operations-compressor@47.3.0': + '@ckeditor/ckeditor5-operations-compressor@47.4.0': dependencies: - '@ckeditor/ckeditor5-utils': 47.3.0 - ckeditor5: 47.3.0 + '@ckeditor/ckeditor5-utils': 47.4.0 + ckeditor5: 47.4.0 es-toolkit: 1.39.5 protobufjs: 7.5.0 @@ -15918,143 +15883,149 @@ snapshots: - utf-8-validate - webpack-cli - '@ckeditor/ckeditor5-page-break@47.3.0': + '@ckeditor/ckeditor5-page-break@47.4.0': dependencies: - '@ckeditor/ckeditor5-core': 47.3.0 - '@ckeditor/ckeditor5-icons': 47.3.0 - '@ckeditor/ckeditor5-ui': 47.3.0 - '@ckeditor/ckeditor5-utils': 47.3.0 - '@ckeditor/ckeditor5-widget': 47.3.0 - ckeditor5: 47.3.0 + '@ckeditor/ckeditor5-core': 47.4.0 + '@ckeditor/ckeditor5-icons': 47.4.0 + '@ckeditor/ckeditor5-ui': 47.4.0 + '@ckeditor/ckeditor5-utils': 47.4.0 + '@ckeditor/ckeditor5-widget': 47.4.0 + ckeditor5: 47.4.0 + transitivePeerDependencies: + - supports-color - '@ckeditor/ckeditor5-pagination@47.3.0': + '@ckeditor/ckeditor5-pagination@47.4.0': dependencies: - '@ckeditor/ckeditor5-core': 47.3.0 - '@ckeditor/ckeditor5-icons': 47.3.0 - '@ckeditor/ckeditor5-theme-lark': 47.3.0 - '@ckeditor/ckeditor5-ui': 47.3.0 - '@ckeditor/ckeditor5-utils': 47.3.0 - ckeditor5: 47.3.0 + '@ckeditor/ckeditor5-core': 47.4.0 + '@ckeditor/ckeditor5-icons': 47.4.0 + '@ckeditor/ckeditor5-theme-lark': 47.4.0 + '@ckeditor/ckeditor5-ui': 47.4.0 + '@ckeditor/ckeditor5-utils': 47.4.0 + ckeditor5: 47.4.0 es-toolkit: 1.39.5 - '@ckeditor/ckeditor5-paragraph@47.3.0': + '@ckeditor/ckeditor5-paragraph@47.4.0': dependencies: - '@ckeditor/ckeditor5-core': 47.3.0 - '@ckeditor/ckeditor5-engine': 47.3.0 - '@ckeditor/ckeditor5-icons': 47.3.0 - '@ckeditor/ckeditor5-ui': 47.3.0 - '@ckeditor/ckeditor5-utils': 47.3.0 + '@ckeditor/ckeditor5-core': 47.4.0 + '@ckeditor/ckeditor5-engine': 47.4.0 + '@ckeditor/ckeditor5-icons': 47.4.0 + '@ckeditor/ckeditor5-ui': 47.4.0 + '@ckeditor/ckeditor5-utils': 47.4.0 - '@ckeditor/ckeditor5-paste-from-office-enhanced@47.3.0': + '@ckeditor/ckeditor5-paste-from-office-enhanced@47.4.0': dependencies: - '@ckeditor/ckeditor5-core': 47.3.0 - '@ckeditor/ckeditor5-engine': 47.3.0 - '@ckeditor/ckeditor5-paste-from-office': 47.3.0 - '@ckeditor/ckeditor5-utils': 47.3.0 - ckeditor5: 47.3.0 + '@ckeditor/ckeditor5-core': 47.4.0 + '@ckeditor/ckeditor5-engine': 47.4.0 + '@ckeditor/ckeditor5-paste-from-office': 47.4.0 + '@ckeditor/ckeditor5-utils': 47.4.0 + ckeditor5: 47.4.0 - '@ckeditor/ckeditor5-paste-from-office@47.3.0': + '@ckeditor/ckeditor5-paste-from-office@47.4.0': dependencies: - '@ckeditor/ckeditor5-clipboard': 47.3.0 - '@ckeditor/ckeditor5-core': 47.3.0 - '@ckeditor/ckeditor5-engine': 47.3.0 - ckeditor5: 47.3.0 + '@ckeditor/ckeditor5-clipboard': 47.4.0 + '@ckeditor/ckeditor5-core': 47.4.0 + '@ckeditor/ckeditor5-engine': 47.4.0 + ckeditor5: 47.4.0 - '@ckeditor/ckeditor5-real-time-collaboration@47.3.0(bufferutil@4.0.9)(utf-8-validate@6.0.5)': + '@ckeditor/ckeditor5-real-time-collaboration@47.4.0(bufferutil@4.0.9)(utf-8-validate@6.0.5)': dependencies: - '@ckeditor/ckeditor-cloud-services-collaboration': 53.0.1(@ckeditor/ckeditor5-utils@47.3.0)(bufferutil@4.0.9)(ckeditor5@47.3.0)(utf-8-validate@6.0.5) - '@ckeditor/ckeditor5-cloud-services': 47.3.0 - '@ckeditor/ckeditor5-comments': 47.3.0 - '@ckeditor/ckeditor5-core': 47.3.0 - '@ckeditor/ckeditor5-editor-multi-root': 47.3.0 - '@ckeditor/ckeditor5-engine': 47.3.0 - '@ckeditor/ckeditor5-operations-compressor': 47.3.0 - '@ckeditor/ckeditor5-revision-history': 47.3.0 - '@ckeditor/ckeditor5-theme-lark': 47.3.0 - '@ckeditor/ckeditor5-track-changes': 47.3.0 - '@ckeditor/ckeditor5-ui': 47.3.0 - '@ckeditor/ckeditor5-utils': 47.3.0 - ckeditor5: 47.3.0 - ckeditor5-collaboration: 47.3.0 + '@ckeditor/ckeditor-cloud-services-collaboration': 53.0.2(@ckeditor/ckeditor5-utils@47.4.0)(bufferutil@4.0.9)(ckeditor5@47.4.0)(utf-8-validate@6.0.5) + '@ckeditor/ckeditor5-cloud-services': 47.4.0 + '@ckeditor/ckeditor5-comments': 47.4.0 + '@ckeditor/ckeditor5-core': 47.4.0 + '@ckeditor/ckeditor5-editor-multi-root': 47.4.0 + '@ckeditor/ckeditor5-engine': 47.4.0 + '@ckeditor/ckeditor5-operations-compressor': 47.4.0 + '@ckeditor/ckeditor5-revision-history': 47.4.0 + '@ckeditor/ckeditor5-theme-lark': 47.4.0 + '@ckeditor/ckeditor5-track-changes': 47.4.0 + '@ckeditor/ckeditor5-ui': 47.4.0 + '@ckeditor/ckeditor5-utils': 47.4.0 + ckeditor5: 47.4.0 + ckeditor5-collaboration: 47.4.0 es-toolkit: 1.39.5 transitivePeerDependencies: - bufferutil - supports-color - utf-8-validate - '@ckeditor/ckeditor5-remove-format@47.3.0': + '@ckeditor/ckeditor5-remove-format@47.4.0': dependencies: - '@ckeditor/ckeditor5-core': 47.3.0 - '@ckeditor/ckeditor5-icons': 47.3.0 - '@ckeditor/ckeditor5-ui': 47.3.0 - '@ckeditor/ckeditor5-utils': 47.3.0 - ckeditor5: 47.3.0 + '@ckeditor/ckeditor5-core': 47.4.0 + '@ckeditor/ckeditor5-icons': 47.4.0 + '@ckeditor/ckeditor5-ui': 47.4.0 + '@ckeditor/ckeditor5-utils': 47.4.0 + ckeditor5: 47.4.0 transitivePeerDependencies: - supports-color - '@ckeditor/ckeditor5-restricted-editing@47.3.0': + '@ckeditor/ckeditor5-restricted-editing@47.4.0': dependencies: - '@ckeditor/ckeditor5-core': 47.3.0 - '@ckeditor/ckeditor5-engine': 47.3.0 - '@ckeditor/ckeditor5-icons': 47.3.0 - '@ckeditor/ckeditor5-ui': 47.3.0 - '@ckeditor/ckeditor5-utils': 47.3.0 - ckeditor5: 47.3.0 + '@ckeditor/ckeditor5-core': 47.4.0 + '@ckeditor/ckeditor5-engine': 47.4.0 + '@ckeditor/ckeditor5-icons': 47.4.0 + '@ckeditor/ckeditor5-ui': 47.4.0 + '@ckeditor/ckeditor5-utils': 47.4.0 + ckeditor5: 47.4.0 - '@ckeditor/ckeditor5-revision-history@47.3.0': + '@ckeditor/ckeditor5-revision-history@47.4.0': dependencies: - '@ckeditor/ckeditor5-autosave': 47.3.0 - '@ckeditor/ckeditor5-collaboration-core': 47.3.0 - '@ckeditor/ckeditor5-comments': 47.3.0 - '@ckeditor/ckeditor5-core': 47.3.0 - '@ckeditor/ckeditor5-editor-classic': 47.3.0 - '@ckeditor/ckeditor5-engine': 47.3.0 - '@ckeditor/ckeditor5-icons': 47.3.0 - '@ckeditor/ckeditor5-ui': 47.3.0 - '@ckeditor/ckeditor5-utils': 47.3.0 + '@ckeditor/ckeditor5-autosave': 47.4.0 + '@ckeditor/ckeditor5-collaboration-core': 47.4.0 + '@ckeditor/ckeditor5-comments': 47.4.0 + '@ckeditor/ckeditor5-core': 47.4.0 + '@ckeditor/ckeditor5-editor-classic': 47.4.0 + '@ckeditor/ckeditor5-engine': 47.4.0 + '@ckeditor/ckeditor5-icons': 47.4.0 + '@ckeditor/ckeditor5-ui': 47.4.0 + '@ckeditor/ckeditor5-utils': 47.4.0 '@types/luxon': 3.6.2 - ckeditor5: 47.3.0 - ckeditor5-collaboration: 47.3.0 + ckeditor5: 47.4.0 + ckeditor5-collaboration: 47.4.0 es-toolkit: 1.39.5 luxon: 3.6.1 transitivePeerDependencies: - supports-color - '@ckeditor/ckeditor5-select-all@47.3.0': + '@ckeditor/ckeditor5-select-all@47.4.0': dependencies: - '@ckeditor/ckeditor5-core': 47.3.0 - '@ckeditor/ckeditor5-engine': 47.3.0 - '@ckeditor/ckeditor5-icons': 47.3.0 - '@ckeditor/ckeditor5-ui': 47.3.0 - '@ckeditor/ckeditor5-utils': 47.3.0 + '@ckeditor/ckeditor5-core': 47.4.0 + '@ckeditor/ckeditor5-engine': 47.4.0 + '@ckeditor/ckeditor5-icons': 47.4.0 + '@ckeditor/ckeditor5-ui': 47.4.0 + '@ckeditor/ckeditor5-utils': 47.4.0 - '@ckeditor/ckeditor5-show-blocks@47.3.0': + '@ckeditor/ckeditor5-show-blocks@47.4.0': dependencies: - '@ckeditor/ckeditor5-core': 47.3.0 - '@ckeditor/ckeditor5-icons': 47.3.0 - '@ckeditor/ckeditor5-ui': 47.3.0 - '@ckeditor/ckeditor5-utils': 47.3.0 - ckeditor5: 47.3.0 + '@ckeditor/ckeditor5-core': 47.4.0 + '@ckeditor/ckeditor5-icons': 47.4.0 + '@ckeditor/ckeditor5-ui': 47.4.0 + '@ckeditor/ckeditor5-utils': 47.4.0 + ckeditor5: 47.4.0 + transitivePeerDependencies: + - supports-color - '@ckeditor/ckeditor5-slash-command@47.3.0': + '@ckeditor/ckeditor5-slash-command@47.4.0': dependencies: - '@ckeditor/ckeditor5-core': 47.3.0 - '@ckeditor/ckeditor5-heading': 47.3.0 - '@ckeditor/ckeditor5-icons': 47.3.0 - '@ckeditor/ckeditor5-mention': 47.3.0(patch_hash=5981fb59ba35829e4dff1d39cf771000f8a8fdfa7a34b51d8af9549541f2d62d) - '@ckeditor/ckeditor5-style': 47.3.0 - '@ckeditor/ckeditor5-template': 47.3.0 - '@ckeditor/ckeditor5-ui': 47.3.0 - '@ckeditor/ckeditor5-utils': 47.3.0 - ckeditor5: 47.3.0 + '@ckeditor/ckeditor5-core': 47.4.0 + '@ckeditor/ckeditor5-heading': 47.4.0 + '@ckeditor/ckeditor5-icons': 47.4.0 + '@ckeditor/ckeditor5-mention': 47.4.0(patch_hash=5981fb59ba35829e4dff1d39cf771000f8a8fdfa7a34b51d8af9549541f2d62d) + '@ckeditor/ckeditor5-style': 47.4.0 + '@ckeditor/ckeditor5-template': 47.4.0 + '@ckeditor/ckeditor5-ui': 47.4.0 + '@ckeditor/ckeditor5-utils': 47.4.0 + ckeditor5: 47.4.0 + transitivePeerDependencies: + - supports-color - '@ckeditor/ckeditor5-source-editing-enhanced@47.3.0': + '@ckeditor/ckeditor5-source-editing-enhanced@47.4.0': dependencies: - '@ckeditor/ckeditor5-core': 47.3.0 - '@ckeditor/ckeditor5-icons': 47.3.0 - '@ckeditor/ckeditor5-theme-lark': 47.3.0 - '@ckeditor/ckeditor5-ui': 47.3.0 - '@ckeditor/ckeditor5-utils': 47.3.0 + '@ckeditor/ckeditor5-core': 47.4.0 + '@ckeditor/ckeditor5-icons': 47.4.0 + '@ckeditor/ckeditor5-theme-lark': 47.4.0 + '@ckeditor/ckeditor5-ui': 47.4.0 + '@ckeditor/ckeditor5-utils': 47.4.0 '@codemirror/autocomplete': 6.18.6 '@codemirror/commands': 6.8.1 '@codemirror/lang-html': 6.4.11 @@ -16063,108 +16034,112 @@ snapshots: '@codemirror/state': 6.5.2 '@codemirror/theme-one-dark': 6.1.2 '@codemirror/view': 6.39.11 - ckeditor5: 47.3.0 + ckeditor5: 47.4.0 - '@ckeditor/ckeditor5-source-editing@47.3.0': + '@ckeditor/ckeditor5-source-editing@47.4.0': dependencies: - '@ckeditor/ckeditor5-core': 47.3.0 - '@ckeditor/ckeditor5-icons': 47.3.0 - '@ckeditor/ckeditor5-theme-lark': 47.3.0 - '@ckeditor/ckeditor5-ui': 47.3.0 - '@ckeditor/ckeditor5-utils': 47.3.0 - ckeditor5: 47.3.0 + '@ckeditor/ckeditor5-core': 47.4.0 + '@ckeditor/ckeditor5-icons': 47.4.0 + '@ckeditor/ckeditor5-theme-lark': 47.4.0 + '@ckeditor/ckeditor5-ui': 47.4.0 + '@ckeditor/ckeditor5-utils': 47.4.0 + ckeditor5: 47.4.0 - '@ckeditor/ckeditor5-special-characters@47.3.0': + '@ckeditor/ckeditor5-special-characters@47.4.0': dependencies: - '@ckeditor/ckeditor5-core': 47.3.0 - '@ckeditor/ckeditor5-icons': 47.3.0 - '@ckeditor/ckeditor5-typing': 47.3.0 - '@ckeditor/ckeditor5-ui': 47.3.0 - '@ckeditor/ckeditor5-utils': 47.3.0 - ckeditor5: 47.3.0 + '@ckeditor/ckeditor5-core': 47.4.0 + '@ckeditor/ckeditor5-icons': 47.4.0 + '@ckeditor/ckeditor5-typing': 47.4.0 + '@ckeditor/ckeditor5-ui': 47.4.0 + '@ckeditor/ckeditor5-utils': 47.4.0 + ckeditor5: 47.4.0 - '@ckeditor/ckeditor5-style@47.3.0': + '@ckeditor/ckeditor5-style@47.4.0': dependencies: - '@ckeditor/ckeditor5-core': 47.3.0 - '@ckeditor/ckeditor5-html-support': 47.3.0 - '@ckeditor/ckeditor5-list': 47.3.0 - '@ckeditor/ckeditor5-table': 47.3.0 - '@ckeditor/ckeditor5-typing': 47.3.0 - '@ckeditor/ckeditor5-ui': 47.3.0 - '@ckeditor/ckeditor5-utils': 47.3.0 - ckeditor5: 47.3.0 - es-toolkit: 1.39.5 - - '@ckeditor/ckeditor5-table@47.3.0': - dependencies: - '@ckeditor/ckeditor5-clipboard': 47.3.0 - '@ckeditor/ckeditor5-core': 47.3.0 - '@ckeditor/ckeditor5-engine': 47.3.0 - '@ckeditor/ckeditor5-icons': 47.3.0 - '@ckeditor/ckeditor5-ui': 47.3.0 - '@ckeditor/ckeditor5-utils': 47.3.0 - '@ckeditor/ckeditor5-widget': 47.3.0 - ckeditor5: 47.3.0 - es-toolkit: 1.39.5 - - '@ckeditor/ckeditor5-template@47.3.0': - dependencies: - '@ckeditor/ckeditor5-core': 47.3.0 - '@ckeditor/ckeditor5-icons': 47.3.0 - '@ckeditor/ckeditor5-ui': 47.3.0 - '@ckeditor/ckeditor5-utils': 47.3.0 - ckeditor5: 47.3.0 - - '@ckeditor/ckeditor5-theme-lark@47.3.0': - dependencies: - '@ckeditor/ckeditor5-ui': 47.3.0 - - '@ckeditor/ckeditor5-track-changes@47.3.0': - dependencies: - '@ckeditor/ckeditor5-clipboard': 47.3.0 - '@ckeditor/ckeditor5-code-block': 47.3.0(patch_hash=2361d8caad7d6b5bddacc3a3b4aa37dbfba260b1c1b22a450413a79c1bb1ce95) - '@ckeditor/ckeditor5-collaboration-core': 47.3.0 - '@ckeditor/ckeditor5-comments': 47.3.0 - '@ckeditor/ckeditor5-core': 47.3.0 - '@ckeditor/ckeditor5-editor-multi-root': 47.3.0 - '@ckeditor/ckeditor5-engine': 47.3.0 - '@ckeditor/ckeditor5-enter': 47.3.0 - '@ckeditor/ckeditor5-find-and-replace': 47.3.0 - '@ckeditor/ckeditor5-font': 47.3.0 - '@ckeditor/ckeditor5-heading': 47.3.0 - '@ckeditor/ckeditor5-highlight': 47.3.0 - '@ckeditor/ckeditor5-icons': 47.3.0 - '@ckeditor/ckeditor5-image': 47.3.0 - '@ckeditor/ckeditor5-link': 47.3.0 - '@ckeditor/ckeditor5-list': 47.3.0 - '@ckeditor/ckeditor5-media-embed': 47.3.0 - '@ckeditor/ckeditor5-merge-fields': 47.3.0 - '@ckeditor/ckeditor5-restricted-editing': 47.3.0 - '@ckeditor/ckeditor5-style': 47.3.0 - '@ckeditor/ckeditor5-table': 47.3.0 - '@ckeditor/ckeditor5-typing': 47.3.0 - '@ckeditor/ckeditor5-ui': 47.3.0 - '@ckeditor/ckeditor5-utils': 47.3.0 - ckeditor5: 47.3.0 - ckeditor5-collaboration: 47.3.0 + '@ckeditor/ckeditor5-core': 47.4.0 + '@ckeditor/ckeditor5-html-support': 47.4.0 + '@ckeditor/ckeditor5-list': 47.4.0 + '@ckeditor/ckeditor5-table': 47.4.0 + '@ckeditor/ckeditor5-typing': 47.4.0 + '@ckeditor/ckeditor5-ui': 47.4.0 + '@ckeditor/ckeditor5-utils': 47.4.0 + ckeditor5: 47.4.0 es-toolkit: 1.39.5 transitivePeerDependencies: - supports-color - '@ckeditor/ckeditor5-typing@47.3.0': + '@ckeditor/ckeditor5-table@47.4.0': dependencies: - '@ckeditor/ckeditor5-core': 47.3.0 - '@ckeditor/ckeditor5-engine': 47.3.0 - '@ckeditor/ckeditor5-utils': 47.3.0 + '@ckeditor/ckeditor5-clipboard': 47.4.0 + '@ckeditor/ckeditor5-core': 47.4.0 + '@ckeditor/ckeditor5-engine': 47.4.0 + '@ckeditor/ckeditor5-icons': 47.4.0 + '@ckeditor/ckeditor5-ui': 47.4.0 + '@ckeditor/ckeditor5-utils': 47.4.0 + '@ckeditor/ckeditor5-widget': 47.4.0 + ckeditor5: 47.4.0 + es-toolkit: 1.39.5 + transitivePeerDependencies: + - supports-color + + '@ckeditor/ckeditor5-template@47.4.0': + dependencies: + '@ckeditor/ckeditor5-core': 47.4.0 + '@ckeditor/ckeditor5-icons': 47.4.0 + '@ckeditor/ckeditor5-ui': 47.4.0 + '@ckeditor/ckeditor5-utils': 47.4.0 + ckeditor5: 47.4.0 + + '@ckeditor/ckeditor5-theme-lark@47.4.0': + dependencies: + '@ckeditor/ckeditor5-ui': 47.4.0 + + '@ckeditor/ckeditor5-track-changes@47.4.0': + dependencies: + '@ckeditor/ckeditor5-clipboard': 47.4.0 + '@ckeditor/ckeditor5-code-block': 47.4.0(patch_hash=2361d8caad7d6b5bddacc3a3b4aa37dbfba260b1c1b22a450413a79c1bb1ce95) + '@ckeditor/ckeditor5-collaboration-core': 47.4.0 + '@ckeditor/ckeditor5-comments': 47.4.0 + '@ckeditor/ckeditor5-core': 47.4.0 + '@ckeditor/ckeditor5-editor-multi-root': 47.4.0 + '@ckeditor/ckeditor5-engine': 47.4.0 + '@ckeditor/ckeditor5-enter': 47.4.0 + '@ckeditor/ckeditor5-find-and-replace': 47.4.0 + '@ckeditor/ckeditor5-font': 47.4.0 + '@ckeditor/ckeditor5-heading': 47.4.0 + '@ckeditor/ckeditor5-highlight': 47.4.0 + '@ckeditor/ckeditor5-icons': 47.4.0 + '@ckeditor/ckeditor5-image': 47.4.0 + '@ckeditor/ckeditor5-link': 47.4.0 + '@ckeditor/ckeditor5-list': 47.4.0 + '@ckeditor/ckeditor5-media-embed': 47.4.0 + '@ckeditor/ckeditor5-merge-fields': 47.4.0 + '@ckeditor/ckeditor5-restricted-editing': 47.4.0 + '@ckeditor/ckeditor5-style': 47.4.0 + '@ckeditor/ckeditor5-table': 47.4.0 + '@ckeditor/ckeditor5-typing': 47.4.0 + '@ckeditor/ckeditor5-ui': 47.4.0 + '@ckeditor/ckeditor5-utils': 47.4.0 + ckeditor5: 47.4.0 + ckeditor5-collaboration: 47.4.0 + es-toolkit: 1.39.5 + transitivePeerDependencies: + - supports-color + + '@ckeditor/ckeditor5-typing@47.4.0': + dependencies: + '@ckeditor/ckeditor5-core': 47.4.0 + '@ckeditor/ckeditor5-engine': 47.4.0 + '@ckeditor/ckeditor5-utils': 47.4.0 es-toolkit: 1.39.5 - '@ckeditor/ckeditor5-ui@47.3.0': + '@ckeditor/ckeditor5-ui@47.4.0': dependencies: - '@ckeditor/ckeditor5-core': 47.3.0 - '@ckeditor/ckeditor5-editor-multi-root': 47.3.0 - '@ckeditor/ckeditor5-engine': 47.3.0 - '@ckeditor/ckeditor5-icons': 47.3.0 - '@ckeditor/ckeditor5-utils': 47.3.0 + '@ckeditor/ckeditor5-core': 47.4.0 + '@ckeditor/ckeditor5-editor-multi-root': 47.4.0 + '@ckeditor/ckeditor5-engine': 47.4.0 + '@ckeditor/ckeditor5-icons': 47.4.0 + '@ckeditor/ckeditor5-utils': 47.4.0 '@types/color-convert': 2.0.4 color-convert: 3.1.0 color-parse: 2.0.2 @@ -16173,68 +16148,72 @@ snapshots: transitivePeerDependencies: - supports-color - '@ckeditor/ckeditor5-undo@47.3.0': + '@ckeditor/ckeditor5-undo@47.4.0': dependencies: - '@ckeditor/ckeditor5-core': 47.3.0 - '@ckeditor/ckeditor5-engine': 47.3.0 - '@ckeditor/ckeditor5-icons': 47.3.0 - '@ckeditor/ckeditor5-ui': 47.3.0 - '@ckeditor/ckeditor5-utils': 47.3.0 + '@ckeditor/ckeditor5-core': 47.4.0 + '@ckeditor/ckeditor5-engine': 47.4.0 + '@ckeditor/ckeditor5-icons': 47.4.0 + '@ckeditor/ckeditor5-ui': 47.4.0 + '@ckeditor/ckeditor5-utils': 47.4.0 - '@ckeditor/ckeditor5-upload@47.3.0': + '@ckeditor/ckeditor5-upload@47.4.0': dependencies: - '@ckeditor/ckeditor5-core': 47.3.0 - '@ckeditor/ckeditor5-utils': 47.3.0 + '@ckeditor/ckeditor5-core': 47.4.0 + '@ckeditor/ckeditor5-utils': 47.4.0 - '@ckeditor/ckeditor5-uploadcare@47.3.0(bufferutil@4.0.9)(utf-8-validate@6.0.5)': + '@ckeditor/ckeditor5-uploadcare@47.4.0(bufferutil@4.0.9)(utf-8-validate@6.0.5)': dependencies: - '@ckeditor/ckeditor5-core': 47.3.0 - '@ckeditor/ckeditor5-icons': 47.3.0 - '@ckeditor/ckeditor5-image': 47.3.0 - '@ckeditor/ckeditor5-theme-lark': 47.3.0 - '@ckeditor/ckeditor5-ui': 47.3.0 - '@ckeditor/ckeditor5-upload': 47.3.0 - '@ckeditor/ckeditor5-utils': 47.3.0 - '@uploadcare/file-uploader': 1.19.4(bufferutil@4.0.9)(utf-8-validate@6.0.5) + '@ckeditor/ckeditor5-core': 47.4.0 + '@ckeditor/ckeditor5-icons': 47.4.0 + '@ckeditor/ckeditor5-image': 47.4.0 + '@ckeditor/ckeditor5-theme-lark': 47.4.0 + '@ckeditor/ckeditor5-ui': 47.4.0 + '@ckeditor/ckeditor5-upload': 47.4.0 + '@ckeditor/ckeditor5-utils': 47.4.0 + '@uploadcare/file-uploader': 1.24.5(bufferutil@4.0.9)(utf-8-validate@6.0.5) '@uploadcare/upload-client': 6.14.3(bufferutil@4.0.9)(utf-8-validate@6.0.5) - ckeditor5: 47.3.0 + ckeditor5: 47.4.0 transitivePeerDependencies: - bufferutil - utf-8-validate - '@ckeditor/ckeditor5-utils@47.3.0': + '@ckeditor/ckeditor5-utils@47.4.0': dependencies: - '@ckeditor/ckeditor5-ui': 47.3.0 + '@ckeditor/ckeditor5-ui': 47.4.0 es-toolkit: 1.39.5 transitivePeerDependencies: - supports-color - '@ckeditor/ckeditor5-watchdog@47.3.0': + '@ckeditor/ckeditor5-watchdog@47.4.0': dependencies: - '@ckeditor/ckeditor5-core': 47.3.0 - '@ckeditor/ckeditor5-editor-multi-root': 47.3.0 - '@ckeditor/ckeditor5-engine': 47.3.0 - '@ckeditor/ckeditor5-utils': 47.3.0 + '@ckeditor/ckeditor5-core': 47.4.0 + '@ckeditor/ckeditor5-editor-multi-root': 47.4.0 + '@ckeditor/ckeditor5-engine': 47.4.0 + '@ckeditor/ckeditor5-utils': 47.4.0 + es-toolkit: 1.39.5 + transitivePeerDependencies: + - supports-color + + '@ckeditor/ckeditor5-widget@47.4.0': + dependencies: + '@ckeditor/ckeditor5-core': 47.4.0 + '@ckeditor/ckeditor5-engine': 47.4.0 + '@ckeditor/ckeditor5-enter': 47.4.0 + '@ckeditor/ckeditor5-icons': 47.4.0 + '@ckeditor/ckeditor5-typing': 47.4.0 + '@ckeditor/ckeditor5-ui': 47.4.0 + '@ckeditor/ckeditor5-utils': 47.4.0 es-toolkit: 1.39.5 - '@ckeditor/ckeditor5-widget@47.3.0': + '@ckeditor/ckeditor5-word-count@47.4.0': dependencies: - '@ckeditor/ckeditor5-core': 47.3.0 - '@ckeditor/ckeditor5-engine': 47.3.0 - '@ckeditor/ckeditor5-enter': 47.3.0 - '@ckeditor/ckeditor5-icons': 47.3.0 - '@ckeditor/ckeditor5-typing': 47.3.0 - '@ckeditor/ckeditor5-ui': 47.3.0 - '@ckeditor/ckeditor5-utils': 47.3.0 - es-toolkit: 1.39.5 - - '@ckeditor/ckeditor5-word-count@47.3.0': - dependencies: - '@ckeditor/ckeditor5-core': 47.3.0 - '@ckeditor/ckeditor5-ui': 47.3.0 - '@ckeditor/ckeditor5-utils': 47.3.0 - ckeditor5: 47.3.0 + '@ckeditor/ckeditor5-core': 47.4.0 + '@ckeditor/ckeditor5-ui': 47.4.0 + '@ckeditor/ckeditor5-utils': 47.4.0 + ckeditor5: 47.4.0 es-toolkit: 1.39.5 + transitivePeerDependencies: + - supports-color '@codemirror/autocomplete@6.18.6': dependencies: @@ -19285,11 +19264,6 @@ snapshots: '@sindresorhus/merge-streams@4.0.0': {} - '@smithy/abort-controller@4.2.5': - dependencies: - '@smithy/types': 4.12.0 - tslib: 2.8.1 - '@smithy/abort-controller@4.2.8': dependencies: '@smithy/types': 4.12.0 @@ -19303,19 +19277,6 @@ snapshots: '@smithy/util-middleware': 4.2.8 tslib: 2.8.1 - '@smithy/core@3.20.5': - dependencies: - '@smithy/middleware-serde': 4.2.9 - '@smithy/protocol-http': 5.3.8 - '@smithy/types': 4.12.0 - '@smithy/util-base64': 4.3.0 - '@smithy/util-body-length-browser': 4.2.0 - '@smithy/util-middleware': 4.2.8 - '@smithy/util-stream': 4.5.10 - '@smithy/util-utf8': 4.2.0 - '@smithy/uuid': 1.1.0 - tslib: 2.8.1 - '@smithy/core@3.20.6': dependencies: '@smithy/middleware-serde': 4.2.9 @@ -19367,14 +19328,6 @@ snapshots: '@smithy/types': 4.12.0 tslib: 2.8.1 - '@smithy/fetch-http-handler@5.3.6': - dependencies: - '@smithy/protocol-http': 5.3.8 - '@smithy/querystring-builder': 4.2.5 - '@smithy/types': 4.12.0 - '@smithy/util-base64': 4.3.0 - tslib: 2.8.1 - '@smithy/fetch-http-handler@5.3.9': dependencies: '@smithy/protocol-http': 5.3.8 @@ -19409,17 +19362,6 @@ snapshots: '@smithy/types': 4.12.0 tslib: 2.8.1 - '@smithy/middleware-endpoint@4.4.6': - dependencies: - '@smithy/core': 3.20.5 - '@smithy/middleware-serde': 4.2.9 - '@smithy/node-config-provider': 4.3.8 - '@smithy/shared-ini-file-loader': 4.4.3 - '@smithy/types': 4.12.0 - '@smithy/url-parser': 4.2.8 - '@smithy/util-middleware': 4.2.8 - tslib: 2.8.1 - '@smithy/middleware-endpoint@4.4.7': dependencies: '@smithy/core': 3.20.6 @@ -19443,12 +19385,6 @@ snapshots: '@smithy/uuid': 1.1.0 tslib: 2.8.1 - '@smithy/middleware-serde@4.2.6': - dependencies: - '@smithy/protocol-http': 5.3.8 - '@smithy/types': 4.12.0 - tslib: 2.8.1 - '@smithy/middleware-serde@4.2.9': dependencies: '@smithy/protocol-http': 5.3.8 @@ -19467,14 +19403,6 @@ snapshots: '@smithy/types': 4.12.0 tslib: 2.8.1 - '@smithy/node-http-handler@4.4.5': - dependencies: - '@smithy/abort-controller': 4.2.5 - '@smithy/protocol-http': 5.3.8 - '@smithy/querystring-builder': 4.2.5 - '@smithy/types': 4.12.0 - tslib: 2.8.1 - '@smithy/node-http-handler@4.4.8': dependencies: '@smithy/abort-controller': 4.2.8 @@ -19493,23 +19421,12 @@ snapshots: '@smithy/types': 4.12.0 tslib: 2.8.1 - '@smithy/querystring-builder@4.2.5': - dependencies: - '@smithy/types': 4.12.0 - '@smithy/util-uri-escape': 4.2.0 - tslib: 2.8.1 - '@smithy/querystring-builder@4.2.8': dependencies: '@smithy/types': 4.12.0 '@smithy/util-uri-escape': 4.2.0 tslib: 2.8.1 - '@smithy/querystring-parser@4.2.5': - dependencies: - '@smithy/types': 4.12.0 - tslib: 2.8.1 - '@smithy/querystring-parser@4.2.8': dependencies: '@smithy/types': 4.12.0 @@ -19535,16 +19452,6 @@ snapshots: '@smithy/util-utf8': 4.2.0 tslib: 2.8.1 - '@smithy/smithy-client@4.10.7': - dependencies: - '@smithy/core': 3.20.5 - '@smithy/middleware-endpoint': 4.4.6 - '@smithy/middleware-stack': 4.2.8 - '@smithy/protocol-http': 5.3.8 - '@smithy/types': 4.12.0 - '@smithy/util-stream': 4.5.10 - tslib: 2.8.1 - '@smithy/smithy-client@4.10.8': dependencies: '@smithy/core': 3.20.6 @@ -19559,12 +19466,6 @@ snapshots: dependencies: tslib: 2.8.1 - '@smithy/url-parser@4.2.5': - dependencies: - '@smithy/querystring-parser': 4.2.5 - '@smithy/types': 4.12.0 - tslib: 2.8.1 - '@smithy/url-parser@4.2.8': dependencies: '@smithy/querystring-parser': 4.2.8 @@ -19602,7 +19503,7 @@ snapshots: '@smithy/util-defaults-mode-browser@4.0.22': dependencies: '@smithy/property-provider': 4.2.8 - '@smithy/smithy-client': 4.10.7 + '@smithy/smithy-client': 4.10.8 '@smithy/types': 4.12.0 bowser: 2.11.0 tslib: 2.8.1 @@ -19613,7 +19514,7 @@ snapshots: '@smithy/credential-provider-imds': 4.0.6 '@smithy/node-config-provider': 4.3.8 '@smithy/property-provider': 4.2.8 - '@smithy/smithy-client': 4.10.7 + '@smithy/smithy-client': 4.10.8 '@smithy/types': 4.12.0 tslib: 2.8.1 @@ -20585,32 +20486,35 @@ snapshots: '@ungap/structured-clone@1.3.0': {} - '@uploadcare/cname-prefix@6.17.0': {} + '@uploadcare/cname-prefix@6.18.3': {} - '@uploadcare/file-uploader@1.19.4(bufferutil@4.0.9)(utf-8-validate@6.0.5)': + '@uploadcare/file-uploader@1.24.5(bufferutil@4.0.9)(utf-8-validate@6.0.5)': dependencies: '@symbiotejs/symbiote': 1.11.7 - '@uploadcare/cname-prefix': 6.17.0 - '@uploadcare/image-shrink': 6.17.0 - '@uploadcare/upload-client': 6.17.0(bufferutil@4.0.9)(utf-8-validate@6.0.5) + '@uploadcare/cname-prefix': 6.18.3 + '@uploadcare/image-shrink': 6.18.3 + '@uploadcare/quality-insights': 6.18.3 + '@uploadcare/upload-client': 6.18.3(bufferutil@4.0.9)(utf-8-validate@6.0.5) keyux: 0.7.2 transitivePeerDependencies: - bufferutil - utf-8-validate - '@uploadcare/image-shrink@6.17.0': {} + '@uploadcare/image-shrink@6.18.3': {} + + '@uploadcare/quality-insights@6.18.3': {} '@uploadcare/upload-client@6.14.3(bufferutil@4.0.9)(utf-8-validate@6.0.5)': dependencies: - form-data: 4.0.4 + form-data: 4.0.5 ws: 8.19.0(bufferutil@4.0.9)(utf-8-validate@6.0.5) transitivePeerDependencies: - bufferutil - utf-8-validate - '@uploadcare/upload-client@6.17.0(bufferutil@4.0.9)(utf-8-validate@6.0.5)': + '@uploadcare/upload-client@6.18.3(bufferutil@4.0.9)(utf-8-validate@6.0.5)': dependencies: - form-data: 4.0.4 + form-data: 4.0.5 ws: 8.19.0(bufferutil@4.0.9)(utf-8-validate@6.0.5) transitivePeerDependencies: - bufferutil @@ -21773,107 +21677,109 @@ snapshots: chrome-trace-event@1.0.4: {} - ckeditor5-collaboration@47.3.0: + ckeditor5-collaboration@47.4.0: dependencies: - '@ckeditor/ckeditor5-collaboration-core': 47.3.0 + '@ckeditor/ckeditor5-collaboration-core': 47.4.0 + transitivePeerDependencies: + - supports-color - ckeditor5-premium-features@47.3.0(bufferutil@4.0.9)(ckeditor5@47.3.0)(utf-8-validate@6.0.5): + ckeditor5-premium-features@47.4.0(bufferutil@4.0.9)(ckeditor5@47.4.0)(utf-8-validate@6.0.5): dependencies: - '@ckeditor/ckeditor5-ai': 47.3.0(bufferutil@4.0.9)(utf-8-validate@6.0.5) - '@ckeditor/ckeditor5-case-change': 47.3.0 - '@ckeditor/ckeditor5-collaboration-core': 47.3.0 - '@ckeditor/ckeditor5-comments': 47.3.0 - '@ckeditor/ckeditor5-document-outline': 47.3.0 - '@ckeditor/ckeditor5-email': 47.3.0 - '@ckeditor/ckeditor5-export-inline-styles': 47.3.0 - '@ckeditor/ckeditor5-export-pdf': 47.3.0 - '@ckeditor/ckeditor5-export-word': 47.3.0 - '@ckeditor/ckeditor5-footnotes': 47.3.0 - '@ckeditor/ckeditor5-format-painter': 47.3.0 - '@ckeditor/ckeditor5-import-word': 47.3.0 - '@ckeditor/ckeditor5-line-height': 47.3.0 - '@ckeditor/ckeditor5-list-multi-level': 47.3.0 - '@ckeditor/ckeditor5-merge-fields': 47.3.0 - '@ckeditor/ckeditor5-pagination': 47.3.0 - '@ckeditor/ckeditor5-paste-from-office-enhanced': 47.3.0 - '@ckeditor/ckeditor5-real-time-collaboration': 47.3.0(bufferutil@4.0.9)(utf-8-validate@6.0.5) - '@ckeditor/ckeditor5-revision-history': 47.3.0 - '@ckeditor/ckeditor5-slash-command': 47.3.0 - '@ckeditor/ckeditor5-source-editing-enhanced': 47.3.0 - '@ckeditor/ckeditor5-template': 47.3.0 - '@ckeditor/ckeditor5-track-changes': 47.3.0 - '@ckeditor/ckeditor5-uploadcare': 47.3.0(bufferutil@4.0.9)(utf-8-validate@6.0.5) - '@ckeditor/ckeditor5-utils': 47.3.0 - ckeditor5: 47.3.0 + '@ckeditor/ckeditor5-ai': 47.4.0(bufferutil@4.0.9)(utf-8-validate@6.0.5) + '@ckeditor/ckeditor5-case-change': 47.4.0 + '@ckeditor/ckeditor5-collaboration-core': 47.4.0 + '@ckeditor/ckeditor5-comments': 47.4.0 + '@ckeditor/ckeditor5-document-outline': 47.4.0 + '@ckeditor/ckeditor5-email': 47.4.0 + '@ckeditor/ckeditor5-export-inline-styles': 47.4.0 + '@ckeditor/ckeditor5-export-pdf': 47.4.0 + '@ckeditor/ckeditor5-export-word': 47.4.0 + '@ckeditor/ckeditor5-footnotes': 47.4.0 + '@ckeditor/ckeditor5-format-painter': 47.4.0 + '@ckeditor/ckeditor5-import-word': 47.4.0 + '@ckeditor/ckeditor5-line-height': 47.4.0 + '@ckeditor/ckeditor5-list-multi-level': 47.4.0 + '@ckeditor/ckeditor5-merge-fields': 47.4.0 + '@ckeditor/ckeditor5-pagination': 47.4.0 + '@ckeditor/ckeditor5-paste-from-office-enhanced': 47.4.0 + '@ckeditor/ckeditor5-real-time-collaboration': 47.4.0(bufferutil@4.0.9)(utf-8-validate@6.0.5) + '@ckeditor/ckeditor5-revision-history': 47.4.0 + '@ckeditor/ckeditor5-slash-command': 47.4.0 + '@ckeditor/ckeditor5-source-editing-enhanced': 47.4.0 + '@ckeditor/ckeditor5-template': 47.4.0 + '@ckeditor/ckeditor5-track-changes': 47.4.0 + '@ckeditor/ckeditor5-uploadcare': 47.4.0(bufferutil@4.0.9)(utf-8-validate@6.0.5) + '@ckeditor/ckeditor5-utils': 47.4.0 + ckeditor5: 47.4.0 transitivePeerDependencies: - aws-crt - bufferutil - supports-color - utf-8-validate - ckeditor5@47.3.0: + ckeditor5@47.4.0: dependencies: - '@ckeditor/ckeditor5-adapter-ckfinder': 47.3.0 - '@ckeditor/ckeditor5-alignment': 47.3.0 - '@ckeditor/ckeditor5-autoformat': 47.3.0 - '@ckeditor/ckeditor5-autosave': 47.3.0 - '@ckeditor/ckeditor5-basic-styles': 47.3.0 - '@ckeditor/ckeditor5-block-quote': 47.3.0 - '@ckeditor/ckeditor5-bookmark': 47.3.0 - '@ckeditor/ckeditor5-ckbox': 47.3.0 - '@ckeditor/ckeditor5-ckfinder': 47.3.0 - '@ckeditor/ckeditor5-clipboard': 47.3.0 - '@ckeditor/ckeditor5-cloud-services': 47.3.0 - '@ckeditor/ckeditor5-code-block': 47.3.0(patch_hash=2361d8caad7d6b5bddacc3a3b4aa37dbfba260b1c1b22a450413a79c1bb1ce95) - '@ckeditor/ckeditor5-core': 47.3.0 - '@ckeditor/ckeditor5-easy-image': 47.3.0 - '@ckeditor/ckeditor5-editor-balloon': 47.3.0 - '@ckeditor/ckeditor5-editor-classic': 47.3.0 - '@ckeditor/ckeditor5-editor-decoupled': 47.3.0 - '@ckeditor/ckeditor5-editor-inline': 47.3.0 - '@ckeditor/ckeditor5-editor-multi-root': 47.3.0 - '@ckeditor/ckeditor5-emoji': 47.3.0 - '@ckeditor/ckeditor5-engine': 47.3.0 - '@ckeditor/ckeditor5-enter': 47.3.0 - '@ckeditor/ckeditor5-essentials': 47.3.0 - '@ckeditor/ckeditor5-find-and-replace': 47.3.0 - '@ckeditor/ckeditor5-font': 47.3.0 - '@ckeditor/ckeditor5-fullscreen': 47.3.0 - '@ckeditor/ckeditor5-heading': 47.3.0 - '@ckeditor/ckeditor5-highlight': 47.3.0 - '@ckeditor/ckeditor5-horizontal-line': 47.3.0 - '@ckeditor/ckeditor5-html-embed': 47.3.0 - '@ckeditor/ckeditor5-html-support': 47.3.0 - '@ckeditor/ckeditor5-icons': 47.3.0 - '@ckeditor/ckeditor5-image': 47.3.0 - '@ckeditor/ckeditor5-indent': 47.3.0 - '@ckeditor/ckeditor5-language': 47.3.0 - '@ckeditor/ckeditor5-link': 47.3.0 - '@ckeditor/ckeditor5-list': 47.3.0 - '@ckeditor/ckeditor5-markdown-gfm': 47.3.0 - '@ckeditor/ckeditor5-media-embed': 47.3.0 - '@ckeditor/ckeditor5-mention': 47.3.0(patch_hash=5981fb59ba35829e4dff1d39cf771000f8a8fdfa7a34b51d8af9549541f2d62d) - '@ckeditor/ckeditor5-minimap': 47.3.0 - '@ckeditor/ckeditor5-page-break': 47.3.0 - '@ckeditor/ckeditor5-paragraph': 47.3.0 - '@ckeditor/ckeditor5-paste-from-office': 47.3.0 - '@ckeditor/ckeditor5-remove-format': 47.3.0 - '@ckeditor/ckeditor5-restricted-editing': 47.3.0 - '@ckeditor/ckeditor5-select-all': 47.3.0 - '@ckeditor/ckeditor5-show-blocks': 47.3.0 - '@ckeditor/ckeditor5-source-editing': 47.3.0 - '@ckeditor/ckeditor5-special-characters': 47.3.0 - '@ckeditor/ckeditor5-style': 47.3.0 - '@ckeditor/ckeditor5-table': 47.3.0 - '@ckeditor/ckeditor5-theme-lark': 47.3.0 - '@ckeditor/ckeditor5-typing': 47.3.0 - '@ckeditor/ckeditor5-ui': 47.3.0 - '@ckeditor/ckeditor5-undo': 47.3.0 - '@ckeditor/ckeditor5-upload': 47.3.0 - '@ckeditor/ckeditor5-utils': 47.3.0 - '@ckeditor/ckeditor5-watchdog': 47.3.0 - '@ckeditor/ckeditor5-widget': 47.3.0 - '@ckeditor/ckeditor5-word-count': 47.3.0 + '@ckeditor/ckeditor5-adapter-ckfinder': 47.4.0 + '@ckeditor/ckeditor5-alignment': 47.4.0 + '@ckeditor/ckeditor5-autoformat': 47.4.0 + '@ckeditor/ckeditor5-autosave': 47.4.0 + '@ckeditor/ckeditor5-basic-styles': 47.4.0 + '@ckeditor/ckeditor5-block-quote': 47.4.0 + '@ckeditor/ckeditor5-bookmark': 47.4.0 + '@ckeditor/ckeditor5-ckbox': 47.4.0 + '@ckeditor/ckeditor5-ckfinder': 47.4.0 + '@ckeditor/ckeditor5-clipboard': 47.4.0 + '@ckeditor/ckeditor5-cloud-services': 47.4.0 + '@ckeditor/ckeditor5-code-block': 47.4.0(patch_hash=2361d8caad7d6b5bddacc3a3b4aa37dbfba260b1c1b22a450413a79c1bb1ce95) + '@ckeditor/ckeditor5-core': 47.4.0 + '@ckeditor/ckeditor5-easy-image': 47.4.0 + '@ckeditor/ckeditor5-editor-balloon': 47.4.0 + '@ckeditor/ckeditor5-editor-classic': 47.4.0 + '@ckeditor/ckeditor5-editor-decoupled': 47.4.0 + '@ckeditor/ckeditor5-editor-inline': 47.4.0 + '@ckeditor/ckeditor5-editor-multi-root': 47.4.0 + '@ckeditor/ckeditor5-emoji': 47.4.0 + '@ckeditor/ckeditor5-engine': 47.4.0 + '@ckeditor/ckeditor5-enter': 47.4.0 + '@ckeditor/ckeditor5-essentials': 47.4.0 + '@ckeditor/ckeditor5-find-and-replace': 47.4.0 + '@ckeditor/ckeditor5-font': 47.4.0 + '@ckeditor/ckeditor5-fullscreen': 47.4.0 + '@ckeditor/ckeditor5-heading': 47.4.0 + '@ckeditor/ckeditor5-highlight': 47.4.0 + '@ckeditor/ckeditor5-horizontal-line': 47.4.0 + '@ckeditor/ckeditor5-html-embed': 47.4.0 + '@ckeditor/ckeditor5-html-support': 47.4.0 + '@ckeditor/ckeditor5-icons': 47.4.0 + '@ckeditor/ckeditor5-image': 47.4.0 + '@ckeditor/ckeditor5-indent': 47.4.0 + '@ckeditor/ckeditor5-language': 47.4.0 + '@ckeditor/ckeditor5-link': 47.4.0 + '@ckeditor/ckeditor5-list': 47.4.0 + '@ckeditor/ckeditor5-markdown-gfm': 47.4.0 + '@ckeditor/ckeditor5-media-embed': 47.4.0 + '@ckeditor/ckeditor5-mention': 47.4.0(patch_hash=5981fb59ba35829e4dff1d39cf771000f8a8fdfa7a34b51d8af9549541f2d62d) + '@ckeditor/ckeditor5-minimap': 47.4.0 + '@ckeditor/ckeditor5-page-break': 47.4.0 + '@ckeditor/ckeditor5-paragraph': 47.4.0 + '@ckeditor/ckeditor5-paste-from-office': 47.4.0 + '@ckeditor/ckeditor5-remove-format': 47.4.0 + '@ckeditor/ckeditor5-restricted-editing': 47.4.0 + '@ckeditor/ckeditor5-select-all': 47.4.0 + '@ckeditor/ckeditor5-show-blocks': 47.4.0 + '@ckeditor/ckeditor5-source-editing': 47.4.0 + '@ckeditor/ckeditor5-special-characters': 47.4.0 + '@ckeditor/ckeditor5-style': 47.4.0 + '@ckeditor/ckeditor5-table': 47.4.0 + '@ckeditor/ckeditor5-theme-lark': 47.4.0 + '@ckeditor/ckeditor5-typing': 47.4.0 + '@ckeditor/ckeditor5-ui': 47.4.0 + '@ckeditor/ckeditor5-undo': 47.4.0 + '@ckeditor/ckeditor5-upload': 47.4.0 + '@ckeditor/ckeditor5-utils': 47.4.0 + '@ckeditor/ckeditor5-watchdog': 47.4.0 + '@ckeditor/ckeditor5-widget': 47.4.0 + '@ckeditor/ckeditor5-word-count': 47.4.0 transitivePeerDependencies: - supports-color From 2a19be5ab692e338363c73466bf4bf15e1ec0cb5 Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Fri, 16 Jan 2026 09:35:51 +0200 Subject: [PATCH 057/353] refactor(client): extract fnote icon logic in commons --- apps/client/src/entities/fnote.ts | 53 ++++--------------- apps/client/src/widgets/layout/StatusBar.tsx | 4 +- packages/commons/src/index.ts | 1 + packages/commons/src/lib/notes.ts | 54 ++++++++++++++++++++ 4 files changed, 67 insertions(+), 45 deletions(-) create mode 100644 packages/commons/src/lib/notes.ts diff --git a/apps/client/src/entities/fnote.ts b/apps/client/src/entities/fnote.ts index 83255e4889..f161d7adb1 100644 --- a/apps/client/src/entities/fnote.ts +++ b/apps/client/src/entities/fnote.ts @@ -1,4 +1,4 @@ -import { MIME_TYPES_DICT } from "@triliumnext/commons"; +import { getNoteIcon } from "@triliumnext/commons"; import cssClassManager from "../services/css_class_manager.js"; import type { Froca } from "../services/froca-interface.js"; @@ -13,25 +13,6 @@ import type { AttributeType, default as FAttribute } from "./fattribute.js"; const LABEL = "label"; const RELATION = "relation"; -export const NOTE_TYPE_ICONS = { - file: "bx bx-file", - image: "bx bx-image", - code: "bx bx-code", - render: "bx bx-extension", - search: "bx bx-file-find", - relationMap: "bx bxs-network-chart", - book: "bx bx-book", - noteMap: "bx bxs-network-chart", - mermaid: "bx bx-selection", - canvas: "bx bx-pen", - webView: "bx bx-globe-alt", - launcher: "bx bx-link", - doc: "bx bxs-file-doc", - contentWidget: "bx bxs-widget", - mindMap: "bx bx-sitemap", - aiChat: "bx bx-bot" -}; - /** * There are many different Note types, some of which are entirely opaque to the * end user. Those types should be used only for checking against, they are @@ -582,32 +563,18 @@ export default class FNote { } getIcon() { - return `tn-icon ${this.#getIconInternal()}`; - } - - #getIconInternal() { const iconClassLabels = this.getLabels("iconClass"); const workspaceIconClass = this.getWorkspaceIconClass(); - if (iconClassLabels && iconClassLabels.length > 0) { - return iconClassLabels[0].value; - } else if (workspaceIconClass) { - return workspaceIconClass; - } else if (this.noteId === "root") { - return "bx bx-home-alt-2"; - } - if (this.noteId === "_share") { - return "bx bx-share-alt"; - } else if (this.type === "text") { - if (this.isFolder()) { - return "bx bx-folder"; - } - return "bx bx-note"; - } else if (this.type === "code") { - const correspondingMimeType = MIME_TYPES_DICT.find(m => m.mime === this.mime); - return correspondingMimeType?.icon ?? NOTE_TYPE_ICONS.code; - } - return NOTE_TYPE_ICONS[this.type]; + const icon = getNoteIcon({ + noteId: this.noteId, + type: this.type, + mime: this.mime, + iconClass: iconClassLabels.length > 0 ? iconClassLabels[0].value : undefined, + workspaceIconClass, + isFolder: this.isFolder.bind(this) + }); + return `tn-icon ${icon}`; } getColorClass() { diff --git a/apps/client/src/widgets/layout/StatusBar.tsx b/apps/client/src/widgets/layout/StatusBar.tsx index 82cbe013c6..903aeca3b2 100644 --- a/apps/client/src/widgets/layout/StatusBar.tsx +++ b/apps/client/src/widgets/layout/StatusBar.tsx @@ -1,6 +1,6 @@ import "./StatusBar.css"; -import { Locale, NoteType } from "@triliumnext/commons"; +import { Locale, NOTE_TYPE_ICONS, NoteType } from "@triliumnext/commons"; import { Dropdown as BootstrapDropdown } from "bootstrap"; import clsx from "clsx"; import { type ComponentChildren, RefObject } from "preact"; @@ -9,7 +9,7 @@ import { useCallback, useContext, useEffect, useMemo, useRef, useState } from "p import { CommandNames } from "../../components/app_context"; import NoteContext from "../../components/note_context"; -import FNote, { NOTE_TYPE_ICONS } from "../../entities/fnote"; +import FNote from "../../entities/fnote"; import attributes from "../../services/attributes"; import { t } from "../../services/i18n"; import { ViewScope } from "../../services/link"; diff --git a/packages/commons/src/index.ts b/packages/commons/src/index.ts index 6fb65baac4..1ae730a563 100644 --- a/packages/commons/src/index.ts +++ b/packages/commons/src/index.ts @@ -12,3 +12,4 @@ export * from "./lib/ws_api.js"; export * from "./lib/attribute_names.js"; export * from "./lib/utils.js"; export * from "./lib/dayjs.js"; +export * from "./lib/notes.js"; diff --git a/packages/commons/src/lib/notes.ts b/packages/commons/src/lib/notes.ts new file mode 100644 index 0000000000..315744dd56 --- /dev/null +++ b/packages/commons/src/lib/notes.ts @@ -0,0 +1,54 @@ +/** + * @module notes Common logic for notes (across front-end and back-end) + */ + +import { MIME_TYPES_DICT } from "./mime_type.js"; +import { NoteType } from "./rows.js"; + +export const NOTE_TYPE_ICONS = { + file: "bx bx-file", + image: "bx bx-image", + code: "bx bx-code", + render: "bx bx-extension", + search: "bx bx-file-find", + relationMap: "bx bxs-network-chart", + book: "bx bx-book", + noteMap: "bx bxs-network-chart", + mermaid: "bx bx-selection", + canvas: "bx bx-pen", + webView: "bx bx-globe-alt", + launcher: "bx bx-link", + doc: "bx bxs-file-doc", + contentWidget: "bx bxs-widget", + mindMap: "bx bx-sitemap", + aiChat: "bx bx-bot" +}; + +export function getNoteIcon({ noteId, type, mime, iconClass, workspaceIconClass, isFolder }: { + noteId: string; + type: NoteType; + mime: string; + iconClass: string | undefined; + workspaceIconClass: string | undefined; + isFolder: () => boolean; +}) { + if (iconClass) { + return iconClass; + } else if (workspaceIconClass) { + return workspaceIconClass; + } else if (noteId === "root") { + return "bx bx-home-alt-2"; + } + if (noteId === "_share") { + return "bx bx-share-alt"; + } else if (type === "text") { + if (isFolder()) { + return "bx bx-folder"; + } + return "bx bx-note"; + } else if (type === "code") { + const correspondingMimeType = MIME_TYPES_DICT.find(m => m.mime === mime); + return correspondingMimeType?.icon ?? NOTE_TYPE_ICONS.code; + } + return NOTE_TYPE_ICONS[type]; +} From d42679315e4d9efbe17e4766ecc4dce716054676 Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Fri, 16 Jan 2026 11:42:37 +0200 Subject: [PATCH 058/353] refactor(server): use common logic for icons --- apps/server/src/becca/entities/bnote.ts | 53 ++++--------------- apps/server/src/share/shaca/entities/snote.ts | 35 +++++------- 2 files changed, 22 insertions(+), 66 deletions(-) diff --git a/apps/server/src/becca/entities/bnote.ts b/apps/server/src/becca/entities/bnote.ts index 7f271e88cb..e67d8928be 100644 --- a/apps/server/src/becca/entities/bnote.ts +++ b/apps/server/src/becca/entities/bnote.ts @@ -1,5 +1,5 @@ import type { AttachmentRow, AttributeType, CloneResponse, NoteRow, NoteType, RevisionRow } from "@triliumnext/commons"; -import { dayjs } from "@triliumnext/commons"; +import { dayjs, getNoteIcon } from "@triliumnext/commons"; import cloningService from "../../services/cloning.js"; import dateUtils from "../../services/date_utils.js"; @@ -24,26 +24,6 @@ import BRevision from "./brevision.js"; const LABEL = "label"; const RELATION = "relation"; -// TODO: Deduplicate with fnote -export const NOTE_TYPE_ICONS = { - file: "bx bx-file", - image: "bx bx-image", - code: "bx bx-code", - render: "bx bx-extension", - search: "bx bx-file-find", - relationMap: "bx bxs-network-chart", - book: "bx bx-book", - noteMap: "bx bxs-network-chart", - mermaid: "bx bx-selection", - canvas: "bx bx-pen", - webView: "bx bx-globe-alt", - launcher: "bx bx-link", - doc: "bx bxs-file-doc", - contentWidget: "bx bxs-widget", - mindMap: "bx bx-sitemap", - geoMap: "bx bx-map-alt" -}; - interface NotePathRecord { isArchived: boolean; isInHoistedSubTree: boolean; @@ -1698,30 +1678,17 @@ class BNote extends AbstractBeccaEntity { } getIcon() { - return `tn-icon ${this.#getIconInternal()}`; - } - - // TODO: Deduplicate with fnote - #getIconInternal() { const iconClassLabels = this.getLabels("iconClass"); + const icon = getNoteIcon({ + noteId: this.noteId, + type: this.type, + mime: this.mime, + iconClass: iconClassLabels.length > 0 ? iconClassLabels[0].value : undefined, + workspaceIconClass: undefined, + isFolder: this.isFolder.bind(this) + }); - if (iconClassLabels && iconClassLabels.length > 0) { - return iconClassLabels[0].value; - } else if (this.noteId === "root") { - return "bx bx-home-alt-2"; - } - if (this.noteId === "_share") { - return "bx bx-share-alt"; - } else if (this.type === "text") { - if (this.isFolder()) { - return "bx bx-folder"; - } - return "bx bx-note"; - - } else if (this.type === "code" && this.mime.startsWith("text/x-sql")) { - return "bx bx-data"; - } - return NOTE_TYPE_ICONS[this.type]; + return `tn-icon ${icon}`; } // TODO: Deduplicate with fnote diff --git a/apps/server/src/share/shaca/entities/snote.ts b/apps/server/src/share/shaca/entities/snote.ts index da72cd419f..852c2b890d 100644 --- a/apps/server/src/share/shaca/entities/snote.ts +++ b/apps/server/src/share/shaca/entities/snote.ts @@ -1,6 +1,6 @@ +import { getNoteIcon, NoteType } from "@triliumnext/commons"; import escape from "escape-html"; -import { NOTE_TYPE_ICONS } from "../../../becca/entities/bnote.js"; import type { Blob } from "../../../services/blob-interface.js"; import utils from "../../../services/utils.js"; import sql from "../../sql.js"; @@ -19,7 +19,7 @@ const isCredentials = (attr: SAttribute) => attr.type === "label" && attr.name = class SNote extends AbstractShacaEntity { noteId: string; title: string; - type: string; + type: NoteType; mime: string; private blobId: string; utcDateModified: string; @@ -38,7 +38,7 @@ class SNote extends AbstractShacaEntity { this.noteId = noteId; this.title = isProtected ? "[protected]" : title; - this.type = type; + this.type = type as NoteType; this.mime = mime; this.blobId = blobId; this.utcDateModified = utcDateModified; // used for caching of images @@ -528,33 +528,22 @@ class SNote extends AbstractShacaEntity { } getIcon(filterByPrefix: string[] = []) { - return `tn-icon ${this.#getIconInternal(filterByPrefix)}`; - } - - #getIconInternal(filterByPrefix: string[] = []) { const iconClassLabels = this.getLabels("iconClass").filter(label => { if (filterByPrefix.length === 0) { return true; } return filterByPrefix.some(prefix => label.value.startsWith(prefix)); }); + const icon = getNoteIcon({ + noteId: this.noteId, + type: this.type, + mime: this.mime, + workspaceIconClass: undefined, + iconClass: iconClassLabels.length > 0 ? iconClassLabels[0].value : undefined, + isFolder: this.isFolder.bind(this) + }); - if (iconClassLabels && iconClassLabels.length > 0) { - return iconClassLabels[0].value; - } else if (this.noteId === "root") { - return "bx bx-home-alt-2"; - } - if (this.noteId === "_share") { - return "bx bx-share-alt"; - } else if (this.type === "text") { - if (this.isFolder()) { - return "bx bx-folder"; - } - return "bx bx-note"; - } else if (this.type === "code" && this.mime.startsWith("text/x-sql")) { - return "bx bx-data"; - } - return NOTE_TYPE_ICONS[this.type]; + return `tn-icon ${icon}`; } isFolder() { From df62dc87b2126d8a5818eb979df9f145eb96889a Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Fri, 16 Jan 2026 11:47:42 +0200 Subject: [PATCH 059/353] feat(notes): add default icon for PDFs --- packages/commons/src/lib/notes.ts | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/packages/commons/src/lib/notes.ts b/packages/commons/src/lib/notes.ts index 315744dd56..6be531b5eb 100644 --- a/packages/commons/src/lib/notes.ts +++ b/packages/commons/src/lib/notes.ts @@ -24,6 +24,10 @@ export const NOTE_TYPE_ICONS = { aiChat: "bx bx-bot" }; +const FILE_MIME_MAPPINGS = { + "application/pdf": "bx bxs-file-pdf", +}; + export function getNoteIcon({ noteId, type, mime, iconClass, workspaceIconClass, isFolder }: { noteId: string; type: NoteType; @@ -49,6 +53,8 @@ export function getNoteIcon({ noteId, type, mime, iconClass, workspaceIconClass, } else if (type === "code") { const correspondingMimeType = MIME_TYPES_DICT.find(m => m.mime === mime); return correspondingMimeType?.icon ?? NOTE_TYPE_ICONS.code; + } else if (type === "file") { + return FILE_MIME_MAPPINGS[mime] ?? NOTE_TYPE_ICONS.file; } return NOTE_TYPE_ICONS[type]; } From 3a0880fcd6636095a375b375924ebe02cdb23951 Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Fri, 16 Jan 2026 12:01:11 +0200 Subject: [PATCH 060/353] feat(import/single): remove extension from title for PDF imports --- apps/server/src/services/import/single.ts | 34 +++++++++++++++-------- 1 file changed, 22 insertions(+), 12 deletions(-) diff --git a/apps/server/src/services/import/single.ts b/apps/server/src/services/import/single.ts index ac52a43f49..5abb6008ab 100644 --- a/apps/server/src/services/import/single.ts +++ b/apps/server/src/services/import/single.ts @@ -1,18 +1,17 @@ -"use strict"; +import type { NoteType } from "@triliumnext/commons"; +import { extname } from "path"; import type BNote from "../../becca/entities/bnote.js"; -import type TaskContext from "../task_context.js"; - -import noteService from "../../services/notes.js"; import imageService from "../../services/image.js"; +import noteService from "../../services/notes.js"; +import { getNoteTitle, processStringOrBuffer } from "../../services/utils.js"; +import htmlSanitizer from "../html_sanitizer.js"; import protectedSessionService from "../protected_session.js"; +import type TaskContext from "../task_context.js"; +import type { File } from "./common.js"; import markdownService from "./markdown.js"; import mimeService from "./mime.js"; -import { getNoteTitle, processStringOrBuffer } from "../../services/utils.js"; import importUtils from "./utils.js"; -import htmlSanitizer from "../html_sanitizer.js"; -import type { File } from "./common.js"; -import type { NoteType } from "@triliumnext/commons"; function importSingleFile(taskContext: TaskContext<"importNotes">, file: File, parentNote: BNote) { const mime = mimeService.getMime(file.originalname) || file.mimetype; @@ -58,7 +57,7 @@ function importFile(taskContext: TaskContext<"importNotes">, file: File, parentN const { note } = noteService.createNewNote({ parentNoteId: parentNote.noteId, - title: originalName, + title: removeFileExtension(originalName), content: file.buffer, isProtected: parentNote.isProtected && protectedSessionService.isProtectedSessionAvailable(), type: "file", @@ -72,6 +71,17 @@ function importFile(taskContext: TaskContext<"importNotes">, file: File, parentN return note; } +function removeFileExtension(filename: string) { + const extension = extname(filename).toLowerCase(); + + switch (extension) { + case ".pdf": + return filename.substring(0, filename.length - extension.length); + default: + return filename; + } +} + function importCodeNote(taskContext: TaskContext<"importNotes">, file: File, parentNote: BNote) { const title = getNoteTitle(file.originalname, !!taskContext.data?.replaceUnderscoresWithSpaces); const content = processStringOrBuffer(file.buffer); @@ -88,7 +98,7 @@ function importCodeNote(taskContext: TaskContext<"importNotes">, file: File, par title, content, type, - mime: mime, + mime, isProtected: parentNote.isProtected && protectedSessionService.isProtectedSessionAvailable() }); @@ -106,7 +116,7 @@ function importCustomType(taskContext: TaskContext<"importNotes">, file: File, p title, content, type, - mime: mime, + mime, isProtected: parentNote.isProtected && protectedSessionService.isProtectedSessionAvailable() }); @@ -214,7 +224,7 @@ function importAttachment(taskContext: TaskContext<"importNotes">, file: File, p title: file.originalname, content: file.buffer, role: "file", - mime: mime + mime }); taskContext.increaseProgressCount(); From f6924d7fda98172f80965ea0756fe5ae936b38a6 Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Fri, 16 Jan 2026 16:25:15 +0200 Subject: [PATCH 061/353] feat(import/zip): remove extension from title for PDF imports --- apps/server/src/services/import/single.ts | 17 +---- apps/server/src/services/import/zip.ts | 89 ++++++++++++----------- apps/server/src/services/utils.spec.ts | 11 +-- apps/server/src/services/utils.ts | 48 ++++++------ 4 files changed, 79 insertions(+), 86 deletions(-) diff --git a/apps/server/src/services/import/single.ts b/apps/server/src/services/import/single.ts index 5abb6008ab..7200d17d57 100644 --- a/apps/server/src/services/import/single.ts +++ b/apps/server/src/services/import/single.ts @@ -1,5 +1,4 @@ import type { NoteType } from "@triliumnext/commons"; -import { extname } from "path"; import type BNote from "../../becca/entities/bnote.js"; import imageService from "../../services/image.js"; @@ -55,13 +54,14 @@ function importImage(file: File, parentNote: BNote, taskContext: TaskContext<"im function importFile(taskContext: TaskContext<"importNotes">, file: File, parentNote: BNote) { const originalName = file.originalname; + const mime = mimeService.getMime(originalName) || file.mimetype; const { note } = noteService.createNewNote({ parentNoteId: parentNote.noteId, - title: removeFileExtension(originalName), + title: getNoteTitle(originalName, mime === "application/pdf"), content: file.buffer, isProtected: parentNote.isProtected && protectedSessionService.isProtectedSessionAvailable(), type: "file", - mime: mimeService.getMime(originalName) || file.mimetype + mime }); note.addLabel("originalFileName", originalName); @@ -71,17 +71,6 @@ function importFile(taskContext: TaskContext<"importNotes">, file: File, parentN return note; } -function removeFileExtension(filename: string) { - const extension = extname(filename).toLowerCase(); - - switch (extension) { - case ".pdf": - return filename.substring(0, filename.length - extension.length); - default: - return filename; - } -} - function importCodeNote(taskContext: TaskContext<"importNotes">, file: File, parentNote: BNote) { const title = getNoteTitle(file.originalname, !!taskContext.data?.replaceUnderscoresWithSpaces); const content = processStringOrBuffer(file.buffer); diff --git a/apps/server/src/services/import/zip.ts b/apps/server/src/services/import/zip.ts index c1ac90b913..2d2251cb31 100644 --- a/apps/server/src/services/import/zip.ts +++ b/apps/server/src/services/import/zip.ts @@ -1,26 +1,27 @@ -"use strict"; -import BAttribute from "../../becca/entities/battribute.js"; -import { removeTextFileExtension, newEntityId, getNoteTitle, processStringOrBuffer, unescapeHtml } from "../../services/utils.js"; -import log from "../../services/log.js"; -import noteService from "../../services/notes.js"; -import attributeService from "../../services/attributes.js"; -import BBranch from "../../becca/entities/bbranch.js"; + +import { ALLOWED_NOTE_TYPES, type NoteType } from "@triliumnext/commons"; import path from "path"; -import protectedSessionService from "../protected_session.js"; -import mimeService from "./mime.js"; -import treeService from "../tree.js"; +import type { Stream } from "stream"; import yauzl from "yauzl"; -import htmlSanitizer from "../html_sanitizer.js"; + import becca from "../../becca/becca.js"; import BAttachment from "../../becca/entities/battachment.js"; -import markdownService from "./markdown.js"; -import type TaskContext from "../task_context.js"; +import BAttribute from "../../becca/entities/battribute.js"; +import BBranch from "../../becca/entities/bbranch.js"; import type BNote from "../../becca/entities/bnote.js"; -import type NoteMeta from "../meta/note_meta.js"; +import attributeService from "../../services/attributes.js"; +import log from "../../services/log.js"; +import noteService from "../../services/notes.js"; +import { getNoteTitle, newEntityId, processStringOrBuffer, removeFileExtension, unescapeHtml } from "../../services/utils.js"; +import htmlSanitizer from "../html_sanitizer.js"; import type AttributeMeta from "../meta/attribute_meta.js"; -import type { Stream } from "stream"; -import { ALLOWED_NOTE_TYPES, type NoteType } from "@triliumnext/commons"; +import type NoteMeta from "../meta/note_meta.js"; +import protectedSessionService from "../protected_session.js"; +import type TaskContext from "../task_context.js"; +import treeService from "../tree.js"; +import markdownService from "./markdown.js"; +import mimeService from "./mime.js"; interface MetaFile { files: NoteMeta[]; @@ -108,7 +109,7 @@ async function importZip(taskContext: TaskContext<"importNotes">, fileBuffer: Bu dataFileName: "" }; - let parent: NoteMeta | undefined = undefined; + let parent: NoteMeta | undefined; for (let segment of pathSegments) { if (!cursor?.children?.length) { @@ -161,7 +162,7 @@ async function importZip(taskContext: TaskContext<"importNotes">, fileBuffer: Bu // in case we lack metadata, we treat e.g. "Programming.html" and "Programming" as the same note // (one data file, the other directory for children) - const filePathNoExt = removeTextFileExtension(filePath); + const filePathNoExt = removeFileExtension(filePath); if (filePathNoExt in createdPaths) { return createdPaths[filePathNoExt]; @@ -241,10 +242,10 @@ async function importZip(taskContext: TaskContext<"importNotes">, fileBuffer: Bu } const { note } = noteService.createNewNote({ - parentNoteId: parentNoteId, + parentNoteId, title: noteTitle || "", content: "", - noteId: noteId, + noteId, type: resolveNoteType(noteMeta?.type), mime: noteMeta ? noteMeta.mime : "text/html", prefix: noteMeta?.prefix || "", @@ -294,12 +295,12 @@ async function importZip(taskContext: TaskContext<"importNotes">, fileBuffer: Bu attachmentId: getNewAttachmentId(attachmentMeta.attachmentId), noteId: getNewNoteId(noteMeta.noteId) }; - } else { - // don't check for noteMeta since it's not mandatory for notes - return { - noteId: getNoteId(noteMeta, absUrl) - }; - } + } + // don't check for noteMeta since it's not mandatory for notes + return { + noteId: getNoteId(noteMeta, absUrl) + }; + } function processTextNoteContent(content: string, noteTitle: string, filePath: string, noteMeta?: NoteMeta) { @@ -312,9 +313,9 @@ async function importZip(taskContext: TaskContext<"importNotes">, fileBuffer: Bu content = content.replace(/

([^<]*)<\/h1>/gi, (match, text) => { if (noteTitle.trim() === text.trim()) { return ""; // remove whole H1 tag - } else { - return `

${text}

`; - } + } + return `

${text}

`; + }); if (taskContext.data?.safeImport) { @@ -347,9 +348,9 @@ async function importZip(taskContext: TaskContext<"importNotes">, fileBuffer: Bu return `src="api/attachments/${target.attachmentId}/image/${path.basename(url)}"`; } else if (target.noteId) { return `src="api/images/${target.noteId}/${path.basename(url)}"`; - } else { - return match; - } + } + return match; + }); content = content.replace(/href="([^"]*)"/g, (match, url) => { @@ -373,9 +374,9 @@ async function importZip(taskContext: TaskContext<"importNotes">, fileBuffer: Bu return `href="#root/${target.noteId}?viewMode=attachments&attachmentId=${target.attachmentId}"`; } else if (target.noteId) { return `href="#root/${target.noteId}"`; - } else { - return match; - } + } + return match; + }); if (noteMeta) { @@ -525,9 +526,9 @@ async function importZip(taskContext: TaskContext<"importNotes">, fileBuffer: Bu } ({ note } = noteService.createNewNote({ - parentNoteId: parentNoteId, + parentNoteId, title: noteTitle || "", - content: content, + content, noteId, type, mime, @@ -536,7 +537,7 @@ async function importZip(taskContext: TaskContext<"importNotes">, fileBuffer: Bu // root notePosition should be ignored since it relates to the original document // now import root should be placed after existing notes into new parent notePosition: noteMeta && firstNote ? noteMeta.notePosition : undefined, - isProtected: isProtected + isProtected })); createdNoteIds.add(note.noteId); @@ -648,7 +649,7 @@ function streamToBuffer(stream: Stream): Promise { export function readContent(zipfile: yauzl.ZipFile, entry: yauzl.Entry): Promise { return new Promise((res, rej) => { - zipfile.openReadStream(entry, function (err, readStream) { + zipfile.openReadStream(entry, (err, readStream) => { if (err) rej(err); if (!readStream) throw new Error("Unable to read content."); @@ -659,7 +660,7 @@ export function readContent(zipfile: yauzl.ZipFile, entry: yauzl.Entry): Promise export function readZipFile(buffer: Buffer, processEntryCallback: (zipfile: yauzl.ZipFile, entry: yauzl.Entry) => Promise) { return new Promise((res, rej) => { - yauzl.fromBuffer(buffer, { lazyEntries: true, validateEntrySizes: false }, function (err, zipfile) { + yauzl.fromBuffer(buffer, { lazyEntries: true, validateEntrySizes: false }, (err, zipfile) => { if (err) rej(err); if (!zipfile) throw new Error("Unable to read zip file."); @@ -691,9 +692,9 @@ function resolveNoteType(type: string | undefined): NoteType { if (type && (ALLOWED_NOTE_TYPES as readonly string[]).includes(type)) { return type as NoteType; - } else { - return "text"; - } + } + return "text"; + } export function removeTriliumTags(content: string) { @@ -702,7 +703,7 @@ export function removeTriliumTags(content: string) { "([^<]*)<\/title>" ]; for (const tag of tagsToRemove) { - let re = new RegExp(tag, "gi"); + const re = new RegExp(tag, "gi"); content = content.replace(re, ""); } diff --git a/apps/server/src/services/utils.spec.ts b/apps/server/src/services/utils.spec.ts index d767d2d253..1a69d7dd17 100644 --- a/apps/server/src/services/utils.spec.ts +++ b/apps/server/src/services/utils.spec.ts @@ -1,4 +1,5 @@ -import { describe, it, expect } from "vitest"; +import { describe, expect,it } from "vitest"; + import utils from "./utils.js"; type TestCase<T extends (...args: any) => any> = [desc: string, fnParams: Parameters<T>, expected: ReturnType<T>]; @@ -120,7 +121,7 @@ describe("#toObject", () => { { testPropA: "keyA", testPropB: "valueA" }, { testPropA: "keyB", testPropB: "valueB" } ]; - const fn: TestListFn = (testListEntry: TestListEntry) => [ testListEntry.testPropA + "_fn", testListEntry.testPropB + "_fn" ]; + const fn: TestListFn = (testListEntry: TestListEntry) => [ `${testListEntry.testPropA }_fn`, `${testListEntry.testPropB }_fn` ]; const result = utils.toObject(testList, fn); expect(result).toStrictEqual({ @@ -240,8 +241,8 @@ describe.todo("#quoteRegex", () => {}); describe.todo("#replaceAll", () => {}); -describe("#removeTextFileExtension", () => { - const testCases: TestCase<typeof utils.removeTextFileExtension>[] = [ +describe("#removeFileExtension", () => { + const testCases: TestCase<typeof utils.removeFileExtension>[] = [ [ "w/ 'test.md' it should strip '.md'", [ "test.md" ], "test" ], [ "w/ 'test.markdown' it should strip '.markdown'", [ "test.markdown" ], "test" ], [ "w/ 'test.html' it should strip '.html'", [ "test.html" ], "test" ], @@ -252,7 +253,7 @@ describe("#removeTextFileExtension", () => { testCases.forEach((testCase) => { const [ desc, fnParams, expected ] = testCase; it(desc, () => { - const result = utils.removeTextFileExtension(...fnParams); + const result = utils.removeFileExtension(...fnParams); expect(result).toStrictEqual(expected); }); }); diff --git a/apps/server/src/services/utils.ts b/apps/server/src/services/utils.ts index 370f9297ff..a97b84a6c7 100644 --- a/apps/server/src/services/utils.ts +++ b/apps/server/src/services/utils.ts @@ -1,18 +1,19 @@ -"use strict"; + import chardet from "chardet"; -import stripBom from "strip-bom"; import crypto from "crypto"; -import { generator } from "rand-token"; -import unescape from "unescape"; import escape from "escape-html"; -import sanitize from "sanitize-filename"; -import mimeTypes from "mime-types"; -import path from "path"; -import type NoteMeta from "./meta/note_meta.js"; -import log from "./log.js"; import { t } from "i18next"; +import mimeTypes from "mime-types"; import { release as osRelease } from "os"; +import path from "path"; +import { generator } from "rand-token"; +import sanitize from "sanitize-filename"; +import stripBom from "strip-bom"; +import unescape from "unescape"; + +import log from "./log.js"; +import type NoteMeta from "./meta/note_meta.js"; const osVersion = osRelease().split('.').map(Number); @@ -204,7 +205,7 @@ export function formatDownloadTitle(fileName: string, type: string | null, mime: return `${fileNameBase}${getExtension()}`; } -export function removeTextFileExtension(filePath: string) { +export function removeFileExtension(filePath: string) { const extension = path.extname(filePath).toLowerCase(); switch (extension) { @@ -216,6 +217,7 @@ export function removeTextFileExtension(filePath: string) { case ".excalidraw": case ".mermaid": case ".mmd": + case ".pdf": return filePath.substring(0, filePath.length - extension.length); default: return filePath; @@ -226,7 +228,7 @@ export function getNoteTitle(filePath: string, replaceUnderscoresWithSpaces: boo const trimmedNoteMeta = noteMeta?.title?.trim(); if (trimmedNoteMeta) return trimmedNoteMeta; - const basename = path.basename(removeTextFileExtension(filePath)); + const basename = path.basename(removeFileExtension(filePath)); return replaceUnderscoresWithSpaces ? basename.replace(/_/g, " ").trim() : basename; } @@ -467,28 +469,28 @@ export function normalizeCustomHandlerPattern(pattern: string | null | undefined // If already ends with slash, create both versions if (basePattern.endsWith('/')) { - const withoutSlash = basePattern.slice(0, -1) + '$'; + const withoutSlash = `${basePattern.slice(0, -1) }$`; const withSlash = pattern; return [withoutSlash, withSlash]; - } else { - // Add optional trailing slash - const withSlash = basePattern + '/?$'; - return [withSlash]; } + // Add optional trailing slash + const withSlash = `${basePattern }/?$`; + return [withSlash]; + } // For patterns without $, add both versions if (pattern.endsWith('/')) { const withoutSlash = pattern.slice(0, -1); return [withoutSlash, pattern]; - } else { - const withSlash = pattern + '/'; - return [pattern, withSlash]; } + const withSlash = `${pattern }/`; + return [pattern, withSlash]; + } export function formatUtcTime(time: string) { - return time.replace("T", " ").substring(0, 19) + return time.replace("T", " ").substring(0, 19); } // TODO: Deduplicate with client utils @@ -501,9 +503,9 @@ export function formatSize(size: number | null | undefined) { if (size < 1024) { return `${size} KiB`; - } else { - return `${Math.round(size / 102.4) / 10} MiB`; } + return `${Math.round(size / 102.4) / 10} MiB`; + } function slugify(text: string) { @@ -544,7 +546,7 @@ export default { randomSecureToken, randomString, removeDiacritic, - removeTextFileExtension, + removeFileExtension, replaceAll, safeExtractMessageAndStackFromError, sanitizeSqlIdentifier, From c944762ef6a8270946f8a69e1c4dc59111ae6aaf Mon Sep 17 00:00:00 2001 From: Hosted Weblate <hosted@weblate.org> Date: Fri, 16 Jan 2026 15:25:34 +0100 Subject: [PATCH 062/353] Update translation files Updated by "Cleanup translation files" add-on in Weblate. Translation: Trilium Notes/README Translate-URL: https://hosted.weblate.org/projects/trilium/readme/ --- docs/README-nb_NO.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/README-nb_NO.md b/docs/README-nb_NO.md index bd0217934a..fc5ae268cc 100644 --- a/docs/README-nb_NO.md +++ b/docs/README-nb_NO.md @@ -28,8 +28,8 @@ script)](./README-ZH_TW.md) | [English](../README.md) | [French](./README-fr.md) [Spanish](./README-es.md) <!-- translate:on --> -Trilium Notes is a free and open-source, cross-platform hierarchical note taking -application with focus on building large personal knowledge bases. +Trilium Notes er et gratis og åpen kildekode-basert, plattformuavhengig +hierarkisk notatprogram med fokus på å bygge store personlige kunnskapsbaser. <img src="./app.png" alt="Trilium Screenshot" width="1000"> From ea8bd0136f7edd314b5716fa2dc950ddd1b886c7 Mon Sep 17 00:00:00 2001 From: Kf637 <mail@kf637.tech> Date: Fri, 16 Jan 2026 09:08:50 +0100 Subject: [PATCH 063/353] =?UTF-8?q?Translated=20using=20Weblate=20(Norwegi?= =?UTF-8?q?an=20Bokm=C3=A5l)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Currently translated at 100.0% (152 of 152 strings) Translation: Trilium Notes/Website Translate-URL: https://hosted.weblate.org/projects/trilium/website/nb_NO/ --- apps/website/src/translations/nb-NO/translation.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/website/src/translations/nb-NO/translation.json b/apps/website/src/translations/nb-NO/translation.json index 4da9a79f62..1d95d42604 100644 --- a/apps/website/src/translations/nb-NO/translation.json +++ b/apps/website/src/translations/nb-NO/translation.json @@ -26,7 +26,7 @@ "productivity_benefits": { "sync_title": "Synkronisering", "search_title": "Kraftig søk", - "web_clipper_title": "Web clipper", + "web_clipper_title": "Webklipper", "revisions_title": "Notatrevisjon", "protected_notes_title": "Beskyttede notater", "title": "Produktivitet og sikkerhet", @@ -87,7 +87,7 @@ "github": "GitHub", "matrix": "Matrix", "reddit": "Reddit", - "github_discussions": "GitHub Discussions" + "github_discussions": "GitHub-diskusjoner" }, "support_us": { "paypal": "PayPal", From f1946c1386b8624151b578b39db41933c33fb043 Mon Sep 17 00:00:00 2001 From: Kf637 <mail@kf637.tech> Date: Fri, 16 Jan 2026 09:11:12 +0100 Subject: [PATCH 064/353] =?UTF-8?q?Translated=20using=20Weblate=20(Norwegi?= =?UTF-8?q?an=20Bokm=C3=A5l)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Currently translated at 6.7% (26 of 388 strings) Translation: Trilium Notes/Server Translate-URL: https://hosted.weblate.org/projects/trilium/server/nb_NO/ --- apps/server/src/assets/translations/nb-NO/server.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/apps/server/src/assets/translations/nb-NO/server.json b/apps/server/src/assets/translations/nb-NO/server.json index b5a63a0bfb..4d2244f62b 100644 --- a/apps/server/src/assets/translations/nb-NO/server.json +++ b/apps/server/src/assets/translations/nb-NO/server.json @@ -9,7 +9,8 @@ "search-in-subtree": "Søk etter notater i det aktive notatets understruktur", "creating-and-moving-notes": "Lage og flytte notater", "dialogs": "Dialogbokser", - "other": "Andre" + "other": "Andre", + "expand-subtree": "Utvid undertre for gjeldende notat" }, "setup_sync-from-desktop": { "step6-here": "her" From f72929ca130eea6fe92503eb43d18b03e1ab2522 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sat, 17 Jan 2026 09:59:13 +0000 Subject: [PATCH 065/353] chore(deps): update dependency happy-dom to v20.3.1 --- apps/client/package.json | 2 +- package.json | 2 +- pnpm-lock.yaml | 46 ++++++++++++++++++---------------------- 3 files changed, 23 insertions(+), 27 deletions(-) diff --git a/apps/client/package.json b/apps/client/package.json index e289700b2e..c3886cc4ff 100644 --- a/apps/client/package.json +++ b/apps/client/package.json @@ -78,7 +78,7 @@ "@types/reveal.js": "5.2.2", "@types/tabulator-tables": "6.3.1", "copy-webpack-plugin": "13.0.1", - "happy-dom": "20.3.0", + "happy-dom": "20.3.1", "lightningcss": "1.30.2", "script-loader": "0.7.2", "vite-plugin-static-copy": "3.1.4" diff --git a/package.json b/package.json index 7b9209b635..3f97d31128 100644 --- a/package.json +++ b/package.json @@ -63,7 +63,7 @@ "eslint-config-prettier": "10.1.8", "eslint-plugin-playwright": "2.5.0", "eslint-plugin-simple-import-sort": "12.1.1", - "happy-dom": "20.3.0", + "happy-dom": "20.3.1", "http-server": "14.1.1", "jiti": "2.6.1", "js-yaml": "4.1.1", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 2573fc1164..415058b2c9 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -92,8 +92,8 @@ importers: specifier: 12.1.1 version: 12.1.1(eslint@9.39.2(jiti@2.6.1)) happy-dom: - specifier: 20.3.0 - version: 20.3.0(bufferutil@4.0.9)(utf-8-validate@6.0.5) + specifier: 20.3.1 + version: 20.3.1(bufferutil@4.0.9)(utf-8-validate@6.0.5) http-server: specifier: 14.1.1 version: 14.1.1 @@ -135,7 +135,7 @@ importers: version: 4.5.4(@types/node@24.10.9)(rollup@4.52.0)(typescript@5.9.3)(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1)) vitest: specifier: 4.0.17 - version: 4.0.17(@opentelemetry/api@1.9.0)(@types/node@24.10.9)(@vitest/browser-webdriverio@4.0.17)(@vitest/ui@4.0.17)(happy-dom@20.3.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.2)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) + version: 4.0.17(@opentelemetry/api@1.9.0)(@types/node@24.10.9)(@vitest/browser-webdriverio@4.0.17)(@vitest/ui@4.0.17)(happy-dom@20.3.1(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.2)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) apps/build-docs: devDependencies: @@ -345,8 +345,8 @@ importers: specifier: 13.0.1 version: 13.0.1(webpack@5.101.3(esbuild@0.27.2)) happy-dom: - specifier: 20.3.0 - version: 20.3.0(bufferutil@4.0.9)(utf-8-validate@6.0.5) + specifier: 20.3.1 + version: 20.3.1(bufferutil@4.0.9)(utf-8-validate@6.0.5) lightningcss: specifier: 1.30.2 version: 1.30.2 @@ -858,7 +858,7 @@ importers: version: 7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) vitest: specifier: 4.0.17 - version: 4.0.17(@opentelemetry/api@1.9.0)(@types/node@24.10.9)(@vitest/browser-webdriverio@4.0.17)(@vitest/ui@4.0.17)(happy-dom@20.3.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.2)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) + version: 4.0.17(@opentelemetry/api@1.9.0)(@types/node@24.10.9)(@vitest/browser-webdriverio@4.0.17)(@vitest/ui@4.0.17)(happy-dom@20.3.1(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.2)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) packages/ckeditor5: dependencies: @@ -949,7 +949,7 @@ importers: version: 2.0.0(typescript@5.9.3)(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1)) vitest: specifier: 4.0.17 - version: 4.0.17(@opentelemetry/api@1.9.0)(@types/node@24.10.9)(@vitest/browser-webdriverio@4.0.17)(@vitest/ui@4.0.17)(happy-dom@20.3.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.2)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) + version: 4.0.17(@opentelemetry/api@1.9.0)(@types/node@24.10.9)(@vitest/browser-webdriverio@4.0.17)(@vitest/ui@4.0.17)(happy-dom@20.3.1(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.2)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) webdriverio: specifier: 9.23.0 version: 9.23.0(bufferutil@4.0.9)(utf-8-validate@6.0.5) @@ -1009,7 +1009,7 @@ importers: version: 2.0.0(typescript@5.9.3)(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1)) vitest: specifier: 4.0.17 - version: 4.0.17(@opentelemetry/api@1.9.0)(@types/node@24.10.9)(@vitest/browser-webdriverio@4.0.17)(@vitest/ui@4.0.17)(happy-dom@20.3.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.2)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) + version: 4.0.17(@opentelemetry/api@1.9.0)(@types/node@24.10.9)(@vitest/browser-webdriverio@4.0.17)(@vitest/ui@4.0.17)(happy-dom@20.3.1(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.2)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) webdriverio: specifier: 9.23.0 version: 9.23.0(bufferutil@4.0.9)(utf-8-validate@6.0.5) @@ -1069,7 +1069,7 @@ importers: version: 2.0.0(typescript@5.9.3)(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1)) vitest: specifier: 4.0.17 - version: 4.0.17(@opentelemetry/api@1.9.0)(@types/node@24.10.9)(@vitest/browser-webdriverio@4.0.17)(@vitest/ui@4.0.17)(happy-dom@20.3.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.2)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) + version: 4.0.17(@opentelemetry/api@1.9.0)(@types/node@24.10.9)(@vitest/browser-webdriverio@4.0.17)(@vitest/ui@4.0.17)(happy-dom@20.3.1(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.2)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) webdriverio: specifier: 9.23.0 version: 9.23.0(bufferutil@4.0.9)(utf-8-validate@6.0.5) @@ -1136,7 +1136,7 @@ importers: version: 2.0.0(typescript@5.9.3)(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1)) vitest: specifier: 4.0.17 - version: 4.0.17(@opentelemetry/api@1.9.0)(@types/node@24.10.9)(@vitest/browser-webdriverio@4.0.17)(@vitest/ui@4.0.17)(happy-dom@20.3.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.2)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) + version: 4.0.17(@opentelemetry/api@1.9.0)(@types/node@24.10.9)(@vitest/browser-webdriverio@4.0.17)(@vitest/ui@4.0.17)(happy-dom@20.3.1(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.2)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) webdriverio: specifier: 9.23.0 version: 9.23.0(bufferutil@4.0.9)(utf-8-validate@6.0.5) @@ -1203,7 +1203,7 @@ importers: version: 2.0.0(typescript@5.9.3)(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1)) vitest: specifier: 4.0.17 - version: 4.0.17(@opentelemetry/api@1.9.0)(@types/node@24.10.9)(@vitest/browser-webdriverio@4.0.17)(@vitest/ui@4.0.17)(happy-dom@20.3.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.2)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) + version: 4.0.17(@opentelemetry/api@1.9.0)(@types/node@24.10.9)(@vitest/browser-webdriverio@4.0.17)(@vitest/ui@4.0.17)(happy-dom@20.3.1(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.2)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) webdriverio: specifier: 9.23.0 version: 9.23.0(bufferutil@4.0.9)(utf-8-validate@6.0.5) @@ -8731,8 +8731,8 @@ packages: engines: {node: '>=0.4.7'} hasBin: true - happy-dom@20.3.0: - resolution: {integrity: sha512-5qJbkqcvR8j/a4av5IWqqIWmEGf9dt6OhGMS6qxCgjSOBGzGa5XLoqg40OyD8XNzQ+g1g2zsXi10kjfpzYH55Q==} + happy-dom@20.3.1: + resolution: {integrity: sha512-tLvsizNno05Hij0PoB0QN/S8xf0YU2AGvO11/JlJDw5McA/gzyn0Ni1RwbTI1/zteUbOekJH0t6q8HFvjbxsGg==} engines: {node: '>=20.0.0'} has-bigints@1.1.0: @@ -15224,8 +15224,6 @@ snapshots: '@ckeditor/ckeditor5-core': 47.4.0 '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-code-block@47.4.0(patch_hash=2361d8caad7d6b5bddacc3a3b4aa37dbfba260b1c1b22a450413a79c1bb1ce95)': dependencies: @@ -15956,8 +15954,6 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.4.0 '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-restricted-editing@47.4.0': dependencies: @@ -20523,7 +20519,7 @@ snapshots: '@vitest/browser-webdriverio@4.0.17(bufferutil@4.0.9)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(utf-8-validate@6.0.5)(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1))(vitest@4.0.17)(webdriverio@9.23.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))': dependencies: '@vitest/browser': 4.0.17(bufferutil@4.0.9)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(utf-8-validate@6.0.5)(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1))(vitest@4.0.17) - vitest: 4.0.17(@opentelemetry/api@1.9.0)(@types/node@24.10.9)(@vitest/browser-webdriverio@4.0.17)(@vitest/ui@4.0.17)(happy-dom@20.3.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.2)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) + vitest: 4.0.17(@opentelemetry/api@1.9.0)(@types/node@24.10.9)(@vitest/browser-webdriverio@4.0.17)(@vitest/ui@4.0.17)(happy-dom@20.3.1(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.2)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) webdriverio: 9.23.0(bufferutil@4.0.9)(utf-8-validate@6.0.5) transitivePeerDependencies: - bufferutil @@ -20540,7 +20536,7 @@ snapshots: pngjs: 7.0.0 sirv: 3.0.2 tinyrainbow: 3.0.3 - vitest: 4.0.17(@opentelemetry/api@1.9.0)(@types/node@24.10.9)(@vitest/browser-webdriverio@4.0.17)(@vitest/ui@4.0.17)(happy-dom@20.3.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.2)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) + vitest: 4.0.17(@opentelemetry/api@1.9.0)(@types/node@24.10.9)(@vitest/browser-webdriverio@4.0.17)(@vitest/ui@4.0.17)(happy-dom@20.3.1(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.2)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) ws: 8.19.0(bufferutil@4.0.9)(utf-8-validate@6.0.5) transitivePeerDependencies: - bufferutil @@ -20560,7 +20556,7 @@ snapshots: magicast: 0.5.1 obug: 2.1.1 tinyrainbow: 3.0.3 - vitest: 4.0.17(@opentelemetry/api@1.9.0)(@types/node@24.10.9)(@vitest/browser-webdriverio@4.0.17)(@vitest/ui@4.0.17)(happy-dom@20.3.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.2)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) + vitest: 4.0.17(@opentelemetry/api@1.9.0)(@types/node@24.10.9)(@vitest/browser-webdriverio@4.0.17)(@vitest/ui@4.0.17)(happy-dom@20.3.1(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.2)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) transitivePeerDependencies: - supports-color @@ -20576,7 +20572,7 @@ snapshots: obug: 2.1.1 std-env: 3.10.0 tinyrainbow: 3.0.3 - vitest: 4.0.17(@opentelemetry/api@1.9.0)(@types/node@24.10.9)(@vitest/browser-webdriverio@4.0.17)(@vitest/ui@4.0.17)(happy-dom@20.3.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.2)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) + vitest: 4.0.17(@opentelemetry/api@1.9.0)(@types/node@24.10.9)(@vitest/browser-webdriverio@4.0.17)(@vitest/ui@4.0.17)(happy-dom@20.3.1(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.2)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) optionalDependencies: '@vitest/browser': 4.0.17(bufferutil@4.0.9)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(utf-8-validate@6.0.5)(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1))(vitest@4.0.17) @@ -20624,7 +20620,7 @@ snapshots: sirv: 3.0.2 tinyglobby: 0.2.15 tinyrainbow: 3.0.3 - vitest: 4.0.17(@opentelemetry/api@1.9.0)(@types/node@24.10.9)(@vitest/browser-webdriverio@4.0.17)(@vitest/ui@4.0.17)(happy-dom@20.3.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.2)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) + vitest: 4.0.17(@opentelemetry/api@1.9.0)(@types/node@24.10.9)(@vitest/browser-webdriverio@4.0.17)(@vitest/ui@4.0.17)(happy-dom@20.3.1(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.2)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) '@vitest/utils@4.0.17': dependencies: @@ -24411,7 +24407,7 @@ snapshots: optionalDependencies: uglify-js: 3.19.3 - happy-dom@20.3.0(bufferutil@4.0.9)(utf-8-validate@6.0.5): + happy-dom@20.3.1(bufferutil@4.0.9)(utf-8-validate@6.0.5): dependencies: '@types/node': 20.19.25 '@types/whatwg-mimetype': 3.0.2 @@ -30489,7 +30485,7 @@ snapshots: tsx: 4.21.0 yaml: 2.8.1 - vitest@4.0.17(@opentelemetry/api@1.9.0)(@types/node@24.10.9)(@vitest/browser-webdriverio@4.0.17)(@vitest/ui@4.0.17)(happy-dom@20.3.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.2)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1): + vitest@4.0.17(@opentelemetry/api@1.9.0)(@types/node@24.10.9)(@vitest/browser-webdriverio@4.0.17)(@vitest/ui@4.0.17)(happy-dom@20.3.1(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.2)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1): dependencies: '@vitest/expect': 4.0.17 '@vitest/mocker': 4.0.17(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1)) @@ -30516,7 +30512,7 @@ snapshots: '@types/node': 24.10.9 '@vitest/browser-webdriverio': 4.0.17(bufferutil@4.0.9)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(utf-8-validate@6.0.5)(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1))(vitest@4.0.17)(webdriverio@9.23.0(bufferutil@4.0.9)(utf-8-validate@6.0.5)) '@vitest/ui': 4.0.17(vitest@4.0.17) - happy-dom: 20.3.0(bufferutil@4.0.9)(utf-8-validate@6.0.5) + happy-dom: 20.3.1(bufferutil@4.0.9)(utf-8-validate@6.0.5) jsdom: 26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5) transitivePeerDependencies: - jiti From d148c9d1c6855c45f45d9fe2530a4989872002f3 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sat, 17 Jan 2026 10:00:12 +0000 Subject: [PATCH 066/353] chore(deps): update dependency node-abi to v4.25.0 --- package.json | 2 +- pnpm-lock.yaml | 18 +++++++----------- 2 files changed, 8 insertions(+), 12 deletions(-) diff --git a/package.json b/package.json index 7b9209b635..30ca10f538 100644 --- a/package.json +++ b/package.json @@ -115,7 +115,7 @@ "on-headers@<1.1.0": ">=1.1.0", "form-data@>=4.0.0 <4.0.4": ">=4.0.4", "form-data@>=3.0.0 <3.0.4": ">=3.0.4", - "node-abi": "4.24.0" + "node-abi": "4.25.0" }, "ignoredBuiltDependencies": [ "sqlite3" diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 2573fc1164..9b1b7e150b 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -20,7 +20,7 @@ overrides: on-headers@<1.1.0: '>=1.1.0' form-data@>=4.0.0 <4.0.4: '>=4.0.4' form-data@>=3.0.0 <3.0.4: '>=3.0.4' - node-abi: 4.24.0 + node-abi: 4.25.0 patchedDependencies: '@ckeditor/ckeditor5-code-block': @@ -10610,8 +10610,8 @@ packages: nice-try@1.0.5: resolution: {integrity: sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==} - node-abi@4.24.0: - resolution: {integrity: sha512-u2EC1CeNe25uVtX3EZbdQ275c74zdZmmpzrHEQh2aIYqoVjlglfUpOX9YY85x1nlBydEKDVaSmMNhR7N82Qj8A==} + node-abi@4.25.0: + resolution: {integrity: sha512-BRrQZc23ljOLms7EXVds3MOpB59/x7gaORodNuIwt96JKlflUmrOgv5hSJZEEM/WkW3uXpjZ4x1wcFu8V9mTpw==} engines: {node: '>=22.12.0'} node-addon-api@7.1.1: @@ -15224,8 +15224,6 @@ snapshots: '@ckeditor/ckeditor5-core': 47.4.0 '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-code-block@47.4.0(patch_hash=2361d8caad7d6b5bddacc3a3b4aa37dbfba260b1c1b22a450413a79c1bb1ce95)': dependencies: @@ -15956,8 +15954,6 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.4.0 '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-restricted-editing@47.4.0': dependencies: @@ -16796,7 +16792,7 @@ snapshots: detect-libc: 2.1.2 fs-extra: 10.1.0 got: 11.8.6 - node-abi: 4.24.0 + node-abi: 4.25.0 node-api-version: 0.2.1 ora: 5.4.1 read-binary-file-arch: 1.0.6 @@ -16814,7 +16810,7 @@ snapshots: detect-libc: 2.1.2 got: 11.8.6 graceful-fs: 4.2.11 - node-abi: 4.24.0 + node-abi: 4.25.0 node-api-version: 0.2.1 node-gyp: 11.4.2 ora: 5.4.1 @@ -26699,7 +26695,7 @@ snapshots: nice-try@1.0.5: {} - node-abi@4.24.0: + node-abi@4.25.0: dependencies: semver: 7.7.3 @@ -27844,7 +27840,7 @@ snapshots: minimist: 1.2.8 mkdirp-classic: 0.5.3 napi-build-utils: 2.0.0 - node-abi: 4.24.0 + node-abi: 4.25.0 pump: 3.0.3 rc: 1.2.8 simple-get: 4.0.1 From f63042ef8790d84d769dc43e812667a4e8be3ba9 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sat, 17 Jan 2026 10:01:09 +0000 Subject: [PATCH 067/353] chore(deps): update dependency ejs to v4 --- apps/server/package.json | 2 +- pnpm-lock.yaml | 18 ++++++++---------- 2 files changed, 9 insertions(+), 11 deletions(-) diff --git a/apps/server/package.json b/apps/server/package.json index bb099d98b0..ab6938a8f4 100644 --- a/apps/server/package.json +++ b/apps/server/package.json @@ -82,7 +82,7 @@ "csrf-csrf": "3.2.2", "debounce": "3.0.0", "debug": "4.4.3", - "ejs": "3.1.10", + "ejs": "4.0.1", "electron": "39.2.7", "electron-debug": "4.1.0", "electron-window-state": "5.0.3", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 2573fc1164..dd0b0616bc 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -661,8 +661,8 @@ importers: specifier: 4.4.3 version: 4.4.3(supports-color@8.1.1) ejs: - specifier: 3.1.10 - version: 3.1.10 + specifier: 4.0.1 + version: 4.0.1 electron: specifier: 39.2.7 version: 39.2.7 @@ -7718,9 +7718,9 @@ packages: ee-first@1.1.1: resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} - ejs@3.1.10: - resolution: {integrity: sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==} - engines: {node: '>=0.10.0'} + ejs@4.0.1: + resolution: {integrity: sha512-krvQtxc0btwSm/nvnt1UpnaFDFVJpJ0fdckmALpCgShsr/iGYHTnJiUliZTgmzq/UxTX33TtOQVKaNigMQp/6Q==} + engines: {node: '>=0.12.18'} hasBin: true electron-debug@4.1.0: @@ -15224,8 +15224,6 @@ snapshots: '@ckeditor/ckeditor5-core': 47.4.0 '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-code-block@47.4.0(patch_hash=2361d8caad7d6b5bddacc3a3b4aa37dbfba260b1c1b22a450413a79c1bb1ce95)': dependencies: @@ -15956,8 +15954,6 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.4.0 '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-restricted-editing@47.4.0': dependencies: @@ -16155,6 +16151,8 @@ snapshots: '@ckeditor/ckeditor5-icons': 47.4.0 '@ckeditor/ckeditor5-ui': 47.4.0 '@ckeditor/ckeditor5-utils': 47.4.0 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-upload@47.4.0': dependencies: @@ -22890,7 +22888,7 @@ snapshots: ee-first@1.1.1: {} - ejs@3.1.10: + ejs@4.0.1: dependencies: jake: 10.9.2 From a169db807c05f61e435b7f51835a824fbb00a606 Mon Sep 17 00:00:00 2001 From: Elian Doran <contact@eliandoran.me> Date: Sat, 17 Jan 2026 12:16:25 +0200 Subject: [PATCH 068/353] fix(server): crashing due to EJS handling --- apps/server/src/app.ts | 42 ++++++++++++++++++++++-------------------- 1 file changed, 22 insertions(+), 20 deletions(-) diff --git a/apps/server/src/app.ts b/apps/server/src/app.ts index 8023338c97..d3d09c5c70 100644 --- a/apps/server/src/app.ts +++ b/apps/server/src/app.ts @@ -1,25 +1,26 @@ -import express from "express"; -import path from "path"; -import favicon from "serve-favicon"; -import cookieParser from "cookie-parser"; -import helmet from "helmet"; -import compression from "compression"; -import config from "./services/config.js"; -import utils, { getResourceDir, isDev } from "./services/utils.js"; -import assets from "./routes/assets.js"; -import routes from "./routes/routes.js"; -import custom from "./routes/custom.js"; -import error_handlers from "./routes/error_handlers.js"; -import { startScheduledCleanup } from "./services/erase.js"; -import sql_init from "./services/sql_init.js"; -import { auth } from "express-openid-connect"; -import openID from "./services/open_id.js"; -import { t } from "i18next"; -import eventService from "./services/events.js"; -import log from "./services/log.js"; import "./services/handlers.js"; import "./becca/becca_loader.js"; + +import compression from "compression"; +import cookieParser from "cookie-parser"; +import express from "express"; +import { auth } from "express-openid-connect"; +import helmet from "helmet"; +import { t } from "i18next"; +import path from "path"; +import favicon from "serve-favicon"; + +import assets from "./routes/assets.js"; +import custom from "./routes/custom.js"; +import error_handlers from "./routes/error_handlers.js"; +import routes from "./routes/routes.js"; +import config from "./services/config.js"; +import { startScheduledCleanup } from "./services/erase.js"; +import log from "./services/log.js"; +import openID from "./services/open_id.js"; import { RESOURCE_DIR } from "./services/resource_dir.js"; +import sql_init from "./services/sql_init.js"; +import utils, { getResourceDir, isDev } from "./services/utils.js"; export default async function buildApp() { const app = express(); @@ -33,7 +34,8 @@ export default async function buildApp() { // view engine setup app.set("views", path.join(assetsDir, "views")); - app.engine("ejs", (await import("ejs")).renderFile); + const ejs = await import("ejs"); + app.engine("ejs", (filePath, options, callback) => ejs.renderFile(filePath, options, callback)); app.set("view engine", "ejs"); app.use((req, res, next) => { From aa01bc1457e120b9baf214b3a20e3627a243e554 Mon Sep 17 00:00:00 2001 From: Elian Doran <contact@eliandoran.me> Date: Sat, 17 Jan 2026 12:44:30 +0200 Subject: [PATCH 069/353] feat(markdown): switch to turnish instead of turndown --- apps/server/package.json | 2 +- .../src/services/export/markdown.spec.ts | 19 ++++ apps/server/src/services/export/markdown.ts | 89 +++++++++---------- .../src/services/import/markdown.spec.ts | 5 ++ pnpm-lock.yaml | 75 +++++++--------- 5 files changed, 101 insertions(+), 89 deletions(-) diff --git a/apps/server/package.json b/apps/server/package.json index bb099d98b0..6b2c56ca71 100644 --- a/apps/server/package.json +++ b/apps/server/package.json @@ -126,7 +126,7 @@ "swagger-jsdoc": "6.2.8", "time2fa": "1.4.2", "tmp": "0.2.5", - "turndown": "7.2.2", + "turnish": "1.7.1", "unescape": "1.0.1", "vite": "7.3.1", "ws": "8.19.0", diff --git a/apps/server/src/services/export/markdown.spec.ts b/apps/server/src/services/export/markdown.spec.ts index 4fa2913fca..c7370a84af 100644 --- a/apps/server/src/services/export/markdown.spec.ts +++ b/apps/server/src/services/export/markdown.spec.ts @@ -387,4 +387,23 @@ describe("Markdown export", () => { expect(markdownExportService.toMarkdown(html)).toBe(expected); }); + it("maintains escaped HTML tags", () => { + const html = /*html*/`<p><div>Hello World</div></p>`; + const expected = `\\<div\\>Hello World\\</div\\>`; + expect(markdownExportService.toMarkdown(html)).toBe(expected); + }); + + it("escapes HTML tags inside list", () => { + const html = trimIndentation/*html*/`\ + <ul> + <li data-list-item-id="e07fda078f7dd7103a3b9017f49eb1589"> + <note> is note. + </li> + </ul> + `; + const expected = trimIndentation`\ + * \\<note\\> is note.`; + expect(markdownExportService.toMarkdown(html)).toBe(expected); + }); + }); diff --git a/apps/server/src/services/export/markdown.ts b/apps/server/src/services/export/markdown.ts index ed16c6b30a..0d7a8deb4f 100644 --- a/apps/server/src/services/export/markdown.ts +++ b/apps/server/src/services/export/markdown.ts @@ -1,9 +1,7 @@ -"use strict"; - -import TurndownService, { type Rule } from "turndown"; import { gfm } from "@triliumnext/turndown-plugin-gfm"; +import Turnish, { type Rule } from "turnish"; -let instance: TurndownService | null = null; +let instance: Turnish | null = null; // TODO: Move this to a dedicated file someday. export const ADMONITION_TYPE_MAPPINGS: Record<string, string> = { @@ -16,12 +14,12 @@ export const ADMONITION_TYPE_MAPPINGS: Record<string, string> = { export const DEFAULT_ADMONITION_TYPE = ADMONITION_TYPE_MAPPINGS.note; -const fencedCodeBlockFilter: TurndownService.Rule = { - filter: function (node, options) { +const fencedCodeBlockFilter: Turnish.Rule = { + filter (node, options) { return options.codeBlockStyle === "fenced" && node.nodeName === "PRE" && node.firstChild !== null && node.firstChild.nodeName === "CODE"; }, - replacement: function (content, node, options) { + replacement (content, node, options) { if (!node.firstChild || !("getAttribute" in node.firstChild) || typeof node.firstChild.getAttribute !== "function") { return content; } @@ -29,14 +27,15 @@ const fencedCodeBlockFilter: TurndownService.Rule = { const className = node.firstChild.getAttribute("class") || ""; const language = rewriteLanguageTag((className.match(/language-(\S+)/) || [null, ""])[1]); - return "\n\n" + options.fence + language + "\n" + node.firstChild.textContent + "\n" + options.fence + "\n\n"; + return `\n\n${ options.fence }${language }\n${ node.firstChild.textContent }\n${ options.fence }\n\n`; } }; function toMarkdown(content: string) { if (instance === null) { - instance = new TurndownService({ + instance = new Turnish({ headingStyle: "atx", + bulletListMarker: "*", codeBlockStyle: "fenced", blankReplacement(content, node, options) { if (node.nodeName === "SECTION" && (node as HTMLElement).classList.contains("include-note")) { @@ -44,7 +43,7 @@ function toMarkdown(content: string) { } // Original implementation as per https://github.com/mixmark-io/turndown/blob/master/src/turndown.js. - return ("isBlock" in node && node.isBlock) ? '\n\n' : '' + return ("isBlock" in node && node.isBlock) ? '\n\n' : ''; } }); // Filter is heavily based on: https://github.com/mixmark-io/turndown/issues/274#issuecomment-458730974 @@ -59,7 +58,7 @@ function toMarkdown(content: string) { instance.keep([ "kbd", "sup", "sub" ]); } - return instance.turndown(content); + return instance.render(content); } function rewriteLanguageTag(source: string) { @@ -85,14 +84,14 @@ function buildImageFilter() { const ESCAPE_PATTERNS = { before: /([\\*`[\]_]|(?:^[-+>])|(?:^~~~)|(?:^#{1-6}))/g, after: /((?:^\d+(?=\.)))/ - } + }; - const escapePattern = new RegExp('(?:' + ESCAPE_PATTERNS.before.source + '|' + ESCAPE_PATTERNS.after.source + ')', 'g'); + const escapePattern = new RegExp(`(?:${ ESCAPE_PATTERNS.before.source }|${ ESCAPE_PATTERNS.after.source })`, 'g'); function escapeMarkdown (content: string) { - return content.replace(escapePattern, function (match, before, after) { - return before ? '\\' + before : after + '\\' - }) + return content.replace(escapePattern, (match, before, after) => { + return before ? `\\${ before}` : `${after }\\`; + }); } function escapeLinkDestination(destination: string) { @@ -102,10 +101,10 @@ function buildImageFilter() { } function escapeLinkTitle (title: string) { - return title.replace(/"/g, '\\"') + return title.replace(/"/g, '\\"'); } - const imageFilter: TurndownService.Rule = { + const imageFilter: Turnish.Rule = { filter: "img", replacement(content, _node) { const node = _node as HTMLElement; @@ -117,12 +116,12 @@ function buildImageFilter() { // TODO: Deduplicate with upstream. const untypedNode = (node as any); - const alt = escapeMarkdown(cleanAttribute(untypedNode.getAttribute('alt'))) - const src = escapeLinkDestination(untypedNode.getAttribute('src') || '') - const title = cleanAttribute(untypedNode.getAttribute('title')) - const titlePart = title ? ' "' + escapeLinkTitle(title) + '"' : '' + const alt = escapeMarkdown(cleanAttribute(untypedNode.getAttribute('alt'))); + const src = escapeLinkDestination(untypedNode.getAttribute('src') || ''); + const title = cleanAttribute(untypedNode.getAttribute('title')); + const titlePart = title ? ` "${ escapeLinkTitle(title) }"` : ''; - return src ? '![' + alt + ']' + '(' + src + titlePart + ')' : '' + return src ? `![${ alt }]` + `(${ src }${titlePart })` : ''; } }; return imageFilter; @@ -151,7 +150,7 @@ function buildAdmonitionFilter() { return DEFAULT_ADMONITION_TYPE; } - const admonitionFilter: TurndownService.Rule = { + const admonitionFilter: Turnish.Rule = { filter(node, options) { return node.nodeName === "ASIDE" && node.classList.contains("admonition"); }, @@ -161,11 +160,11 @@ function buildAdmonitionFilter() { content = content.replace(/^\n+|\n+$/g, ''); content = content.replace(/^/gm, '> '); - content = `> [!${admonitionType}]\n` + content; + content = `> [!${admonitionType}]\n${ content}`; - return "\n\n" + content + "\n\n"; + return `\n\n${ content }\n\n`; } - } + }; return admonitionFilter; } @@ -178,15 +177,15 @@ function buildAdmonitionFilter() { */ function buildInlineLinkFilter(): Rule { return { - filter: function (node, options) { + filter (node, options) { return ( options.linkStyle === 'inlined' && node.nodeName === 'A' && !!node.getAttribute('href') - ) + ); }, - replacement: function (content, _node) { + replacement (content, _node) { const node = _node as HTMLElement; // Return reference links verbatim. @@ -196,13 +195,13 @@ function buildInlineLinkFilter(): Rule { // Otherwise treat as normal. // TODO: Call super() somehow instead of duplicating the implementation. - let href = node.getAttribute('href') - if (href) href = href.replace(/([()])/g, '\\$1') - let title = cleanAttribute(node.getAttribute('title')) - if (title) title = ' "' + title.replace(/"/g, '\\"') + '"' - return '[' + content + '](' + href + title + ')' + let href = node.getAttribute('href'); + if (href) href = href.replace(/([()])/g, '\\$1'); + let title = cleanAttribute(node.getAttribute('title')); + if (title) title = ` "${ title.replace(/"/g, '\\"') }"`; + return `[${ content }](${ href }${title })`; } - } + }; } function buildFigureFilter(): Rule { @@ -214,7 +213,7 @@ function buildFigureFilter(): Rule { replacement(content, node) { return (node as HTMLElement).outerHTML; } - } + }; } // Keep in line with https://github.com/mixmark-io/turndown/blob/master/src/commonmark-rules.js. @@ -224,13 +223,13 @@ function buildListItemFilter(): Rule { replacement(content, node, options) { content = content .trim() - .replace(/\n/gm, '\n ') // indent - let prefix = options.bulletListMarker + ' ' + .replace(/\n/gm, '\n '); // indent + let prefix = `${options.bulletListMarker } `; const parent = node.parentNode as HTMLElement; if (parent.nodeName === 'OL') { - var start = parent.getAttribute('start') - var index = Array.prototype.indexOf.call(parent.children, node) - prefix = (start ? Number(start) + index : index + 1) + '. ' + const start = parent.getAttribute('start'); + const index = Array.prototype.indexOf.call(parent.children, node); + prefix = `${start ? Number(start) + index : index + 1 }. `; } else if (parent.classList.contains("todo-list")) { const isChecked = node.querySelector("input[type=checkbox]:checked"); prefix = (isChecked ? "- [x] " : "- [ ] "); @@ -239,7 +238,7 @@ function buildListItemFilter(): Rule { const result = prefix + content + (node.nextSibling && !/\n$/.test(content) ? '\n' : ''); return result; } - } + }; } function buildMathFilter(): Rule { @@ -270,13 +269,13 @@ function buildMathFilter(): Rule { // Unknown. return content; } - } + }; } // Taken from upstream since it's not exposed. // https://github.com/mixmark-io/turndown/blob/master/src/commonmark-rules.js function cleanAttribute(attribute: string | null | undefined) { - return attribute ? attribute.replace(/(\n+\s*)+/g, '\n') : '' + return attribute ? attribute.replace(/(\n+\s*)+/g, '\n') : ''; } export default { diff --git a/apps/server/src/services/import/markdown.spec.ts b/apps/server/src/services/import/markdown.spec.ts index 1ac49f6138..453db33b8a 100644 --- a/apps/server/src/services/import/markdown.spec.ts +++ b/apps/server/src/services/import/markdown.spec.ts @@ -314,4 +314,9 @@ $$`; expect(markdownService.renderToHtml(input, "Title")).toStrictEqual(expected); }); + it("doesn't unescape HTML in list", () => { + const input = `* <note> is note.`; + const expected = /*html*/`<ul><li><note> is note.</li></ul>`; + expect(markdownService.renderToHtml(input, "Title")).toStrictEqual(expected); + }); }); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index be475fc6d9..1c748bf83d 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -792,9 +792,9 @@ importers: tmp: specifier: 0.2.5 version: 0.2.5 - turndown: - specifier: 7.2.2 - version: 7.2.2 + turnish: + specifier: 1.7.1 + version: 1.7.1 unescape: specifier: 1.0.1 version: 1.0.1 @@ -1461,6 +1461,9 @@ importers: packages: + '@adobe/css-tools@4.4.4': + resolution: {integrity: sha512-Elp+iwUx5rN5+Y8xLt5/GRoG20WGoDCQ/1Fb+1LiGtvwbDavuSk0jhD/eZdckHAuzcDzccnkv+rEjyWfRx18gg==} + '@ampproject/remapping@2.3.0': resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} engines: {node: '>=6.0.0'} @@ -13466,6 +13469,9 @@ packages: turndown@7.2.2: resolution: {integrity: sha512-1F7db8BiExOKxjSMU2b7if62D/XOyQyZbPKq/nUwopfgnHlqXHqQ0lvfUTeUIr1lZJzOPFn43dODyMSIfvWRKQ==} + turnish@1.7.1: + resolution: {integrity: sha512-NgyY7pIDABjKyg2isRgZyFPav6tOyvmqpTx3HROsKrOaE3JccP4C1P2IhAtkAZ8DkQb/O1R7HOFAkxY8uaJmcQ==} + type-check@0.4.0: resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} engines: {node: '>= 0.8.0'} @@ -14407,6 +14413,8 @@ packages: snapshots: + '@adobe/css-tools@4.4.4': {} + '@ampproject/remapping@2.3.0': dependencies: '@jridgewell/gen-mapping': 0.3.13 @@ -15078,6 +15086,8 @@ snapshots: '@ckeditor/ckeditor5-core': 47.4.0 '@ckeditor/ckeditor5-upload': 47.4.0 ckeditor5: 47.4.0 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-ai@47.4.0(bufferutil@4.0.9)(utf-8-validate@6.0.5)': dependencies: @@ -15218,12 +15228,16 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.4.0 '@ckeditor/ckeditor5-widget': 47.4.0 es-toolkit: 1.39.5 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-cloud-services@47.4.0': dependencies: '@ckeditor/ckeditor5-core': 47.4.0 '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-code-block@47.4.0(patch_hash=2361d8caad7d6b5bddacc3a3b4aa37dbfba260b1c1b22a450413a79c1bb1ce95)': dependencies: @@ -15416,6 +15430,8 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 es-toolkit: 1.39.5 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-editor-classic@47.4.0': dependencies: @@ -15425,6 +15441,8 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 es-toolkit: 1.39.5 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-editor-decoupled@47.4.0': dependencies: @@ -15434,6 +15452,8 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 es-toolkit: 1.39.5 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-editor-inline@47.4.0': dependencies: @@ -15467,8 +15487,6 @@ snapshots: '@ckeditor/ckeditor5-table': 47.4.0 '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-emoji@47.4.0': dependencies: @@ -15525,8 +15543,6 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.4.0 '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-export-word@47.4.0': dependencies: @@ -15551,6 +15567,8 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 es-toolkit: 1.39.5 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-font@47.4.0': dependencies: @@ -15625,6 +15643,8 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.4.0 '@ckeditor/ckeditor5-widget': 47.4.0 ckeditor5: 47.4.0 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-html-embed@47.4.0': dependencies: @@ -15670,8 +15690,6 @@ snapshots: '@ckeditor/ckeditor5-widget': 47.4.0 ckeditor5: 47.4.0 es-toolkit: 1.39.5 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-import-word@47.4.0': dependencies: @@ -15684,8 +15702,6 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.4.0 '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-indent@47.4.0': dependencies: @@ -15697,8 +15713,6 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.4.0 '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-inspector@5.0.0': {} @@ -15708,8 +15722,6 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.4.0 '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-line-height@47.4.0': dependencies: @@ -15734,8 +15746,6 @@ snapshots: '@ckeditor/ckeditor5-widget': 47.4.0 ckeditor5: 47.4.0 es-toolkit: 1.39.5 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-list-multi-level@47.4.0': dependencies: @@ -15759,8 +15769,6 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.4.0 '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-markdown-gfm@47.4.0': dependencies: @@ -15798,8 +15806,6 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.4.0 '@ckeditor/ckeditor5-widget': 47.4.0 ckeditor5: 47.4.0 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-mention@47.4.0(patch_hash=5981fb59ba35829e4dff1d39cf771000f8a8fdfa7a34b51d8af9549541f2d62d)': dependencies: @@ -15809,8 +15815,6 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 es-toolkit: 1.39.5 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-merge-fields@47.4.0': dependencies: @@ -15823,8 +15827,6 @@ snapshots: '@ckeditor/ckeditor5-widget': 47.4.0 ckeditor5: 47.4.0 es-toolkit: 1.39.5 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-minimap@47.4.0': dependencies: @@ -15833,8 +15835,6 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.4.0 '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-operations-compressor@47.4.0': dependencies: @@ -15889,8 +15889,6 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.4.0 '@ckeditor/ckeditor5-widget': 47.4.0 ckeditor5: 47.4.0 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-pagination@47.4.0': dependencies: @@ -15998,8 +15996,6 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.4.0 '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-slash-command@47.4.0': dependencies: @@ -16012,8 +16008,6 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.4.0 '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-source-editing-enhanced@47.4.0': dependencies: @@ -16061,8 +16055,6 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 es-toolkit: 1.39.5 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-table@47.4.0': dependencies: @@ -16075,8 +16067,6 @@ snapshots: '@ckeditor/ckeditor5-widget': 47.4.0 ckeditor5: 47.4.0 es-toolkit: 1.39.5 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-template@47.4.0': dependencies: @@ -16187,8 +16177,6 @@ snapshots: '@ckeditor/ckeditor5-engine': 47.4.0 '@ckeditor/ckeditor5-utils': 47.4.0 es-toolkit: 1.39.5 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-widget@47.4.0': dependencies: @@ -16208,8 +16196,6 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 es-toolkit: 1.39.5 - transitivePeerDependencies: - - supports-color '@codemirror/autocomplete@6.18.6': dependencies: @@ -21676,8 +21662,6 @@ snapshots: ckeditor5-collaboration@47.4.0: dependencies: '@ckeditor/ckeditor5-collaboration-core': 47.4.0 - transitivePeerDependencies: - - supports-color ckeditor5-premium-features@47.4.0(bufferutil@4.0.9)(ckeditor5@47.4.0)(utf-8-validate@6.0.5): dependencies: @@ -30073,6 +30057,11 @@ snapshots: dependencies: '@mixmark-io/domino': 2.2.0 + turnish@1.7.1: + dependencies: + '@adobe/css-tools': 4.4.4 + '@mixmark-io/domino': 2.2.0 + type-check@0.4.0: dependencies: prelude-ls: 1.2.1 From bfb6d975ff0130670e2509be954508ca72712e35 Mon Sep 17 00:00:00 2001 From: Elian Doran <contact@eliandoran.me> Date: Sat, 17 Jan 2026 12:46:55 +0200 Subject: [PATCH 070/353] fix(export/markdown): type error due to blankReplacement signature change --- apps/server/src/services/export/markdown.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/apps/server/src/services/export/markdown.ts b/apps/server/src/services/export/markdown.ts index 0d7a8deb4f..93adb594e0 100644 --- a/apps/server/src/services/export/markdown.ts +++ b/apps/server/src/services/export/markdown.ts @@ -37,14 +37,14 @@ function toMarkdown(content: string) { headingStyle: "atx", bulletListMarker: "*", codeBlockStyle: "fenced", - blankReplacement(content, node, options) { - if (node.nodeName === "SECTION" && (node as HTMLElement).classList.contains("include-note")) { - return (node as HTMLElement).outerHTML; + blankReplacement(_content, node) { + if (node.nodeName === "SECTION" && node.classList.contains("include-note")) { + return node.outerHTML; } // Original implementation as per https://github.com/mixmark-io/turndown/blob/master/src/turndown.js. return ("isBlock" in node && node.isBlock) ? '\n\n' : ''; - } + }, }); // Filter is heavily based on: https://github.com/mixmark-io/turndown/issues/274#issuecomment-458730974 instance.addRule("fencedCodeBlock", fencedCodeBlockFilter); From 51157e19791a894bc8e2d74562457f79d82a2d9e Mon Sep 17 00:00:00 2001 From: Elian Doran <contact@eliandoran.me> Date: Sat, 17 Jan 2026 12:47:34 +0200 Subject: [PATCH 071/353] fix(export/markdown): error due to namespace usage --- apps/server/src/services/export/markdown.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/apps/server/src/services/export/markdown.ts b/apps/server/src/services/export/markdown.ts index 93adb594e0..4803de21dc 100644 --- a/apps/server/src/services/export/markdown.ts +++ b/apps/server/src/services/export/markdown.ts @@ -14,7 +14,7 @@ export const ADMONITION_TYPE_MAPPINGS: Record<string, string> = { export const DEFAULT_ADMONITION_TYPE = ADMONITION_TYPE_MAPPINGS.note; -const fencedCodeBlockFilter: Turnish.Rule = { +const fencedCodeBlockFilter: Rule = { filter (node, options) { return options.codeBlockStyle === "fenced" && node.nodeName === "PRE" && node.firstChild !== null && node.firstChild.nodeName === "CODE"; }, @@ -104,7 +104,7 @@ function buildImageFilter() { return title.replace(/"/g, '\\"'); } - const imageFilter: Turnish.Rule = { + const imageFilter: Rule = { filter: "img", replacement(content, _node) { const node = _node as HTMLElement; @@ -150,7 +150,7 @@ function buildAdmonitionFilter() { return DEFAULT_ADMONITION_TYPE; } - const admonitionFilter: Turnish.Rule = { + const admonitionFilter: Rule = { filter(node, options) { return node.nodeName === "ASIDE" && node.classList.contains("admonition"); }, From ccfda21413cd51712c3a20559e7ec9e6217397dd Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sat, 17 Jan 2026 10:53:59 +0000 Subject: [PATCH 072/353] chore(deps): update dependency electron to v40 --- apps/desktop/package.json | 2 +- apps/edit-docs/package.json | 2 +- apps/server/package.json | 2 +- pnpm-lock.yaml | 38 +++++++++++++++++++------------------ 4 files changed, 23 insertions(+), 21 deletions(-) diff --git a/apps/desktop/package.json b/apps/desktop/package.json index f83d2671e6..06a138a898 100644 --- a/apps/desktop/package.json +++ b/apps/desktop/package.json @@ -35,7 +35,7 @@ "@triliumnext/commons": "workspace:*", "@triliumnext/server": "workspace:*", "copy-webpack-plugin": "13.0.1", - "electron": "39.2.7", + "electron": "40.0.0", "@electron-forge/cli": "7.11.1", "@electron-forge/maker-deb": "7.11.1", "@electron-forge/maker-dmg": "7.11.1", diff --git a/apps/edit-docs/package.json b/apps/edit-docs/package.json index 2282522f74..b17afb35ed 100644 --- a/apps/edit-docs/package.json +++ b/apps/edit-docs/package.json @@ -12,7 +12,7 @@ "@triliumnext/desktop": "workspace:*", "@types/fs-extra": "11.0.4", "copy-webpack-plugin": "13.0.1", - "electron": "39.2.7", + "electron": "40.0.0", "fs-extra": "11.3.3" }, "scripts": { diff --git a/apps/server/package.json b/apps/server/package.json index ab6938a8f4..51eb249dc8 100644 --- a/apps/server/package.json +++ b/apps/server/package.json @@ -83,7 +83,7 @@ "debounce": "3.0.0", "debug": "4.4.3", "ejs": "4.0.1", - "electron": "39.2.7", + "electron": "40.0.0", "electron-debug": "4.1.0", "electron-window-state": "5.0.3", "escape-html": "1.0.3", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 4aab82cc01..e7cacbb740 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -376,7 +376,7 @@ importers: dependencies: '@electron/remote': specifier: 2.1.3 - version: 2.1.3(electron@39.2.7) + version: 2.1.3(electron@40.0.0) better-sqlite3: specifier: 12.6.0 version: 12.6.0 @@ -433,8 +433,8 @@ importers: specifier: 13.0.1 version: 13.0.1(webpack@5.101.3(esbuild@0.27.2)) electron: - specifier: 39.2.7 - version: 39.2.7 + specifier: 40.0.0 + version: 40.0.0 prebuild-install: specifier: 7.1.3 version: 7.1.3 @@ -489,8 +489,8 @@ importers: specifier: 13.0.1 version: 13.0.1(webpack@5.101.3(esbuild@0.27.2)) electron: - specifier: 39.2.7 - version: 39.2.7 + specifier: 40.0.0 + version: 40.0.0 fs-extra: specifier: 11.3.3 version: 11.3.3 @@ -527,7 +527,7 @@ importers: version: 7.1.1 '@electron/remote': specifier: 2.1.3 - version: 2.1.3(electron@39.2.7) + version: 2.1.3(electron@40.0.0) '@triliumnext/commons': specifier: workspace:* version: link:../../packages/commons @@ -664,8 +664,8 @@ importers: specifier: 4.0.1 version: 4.0.1 electron: - specifier: 39.2.7 - version: 39.2.7 + specifier: 40.0.0 + version: 40.0.0 electron-debug: specifier: 4.1.0 version: 4.1.0 @@ -7776,8 +7776,8 @@ packages: resolution: {integrity: sha512-bO3y10YikuUwUuDUQRM4KfwNkKhnpVO7IPdbsrejwN9/AABJzzTQ4GeHwyzNSrVO+tEH3/Np255a3sVZpZDjvg==} engines: {node: '>=8.0.0'} - electron@39.2.7: - resolution: {integrity: sha512-KU0uFS6LSTh4aOIC3miolcbizOFP7N1M46VTYVfqIgFiuA2ilfNaOHLDS9tCMvwwHRowAsvqBrh9NgMXcTOHCQ==} + electron@40.0.0: + resolution: {integrity: sha512-UyBy5yJ0/wm4gNugCtNPjvddjAknMTuXR2aCHioXicH7aKRKGDBPp4xqTEi/doVcB3R+MN3wfU9o8d/9pwgK2A==} engines: {node: '>= 12.20.55'} hasBin: true @@ -15224,6 +15224,8 @@ snapshots: '@ckeditor/ckeditor5-core': 47.4.0 '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-code-block@47.4.0(patch_hash=2361d8caad7d6b5bddacc3a3b4aa37dbfba260b1c1b22a450413a79c1bb1ce95)': dependencies: @@ -15443,8 +15445,6 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 es-toolkit: 1.39.5 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-editor-multi-root@47.4.0': dependencies: @@ -15494,6 +15494,8 @@ snapshots: '@ckeditor/ckeditor5-core': 47.4.0 '@ckeditor/ckeditor5-engine': 47.4.0 '@ckeditor/ckeditor5-utils': 47.4.0 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-essentials@47.4.0': dependencies: @@ -15954,6 +15956,8 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.4.0 '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-restricted-editing@47.4.0': dependencies: @@ -16151,8 +16155,6 @@ snapshots: '@ckeditor/ckeditor5-icons': 47.4.0 '@ckeditor/ckeditor5-ui': 47.4.0 '@ckeditor/ckeditor5-utils': 47.4.0 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-upload@47.4.0': dependencies: @@ -16823,9 +16825,9 @@ snapshots: transitivePeerDependencies: - supports-color - '@electron/remote@2.1.3(electron@39.2.7)': + '@electron/remote@2.1.3(electron@40.0.0)': dependencies: - electron: 39.2.7 + electron: 40.0.0 '@electron/universal@2.0.2': dependencies: @@ -22999,10 +23001,10 @@ snapshots: - supports-color optional: true - electron@39.2.7: + electron@40.0.0: dependencies: '@electron/get': 2.0.3 - '@types/node': 22.19.1 + '@types/node': 24.10.9 extract-zip: 2.0.1 transitivePeerDependencies: - supports-color From 3aacd255f4abeb5443e2ac567e602d126b4c4118 Mon Sep 17 00:00:00 2001 From: Elian Doran <contact@eliandoran.me> Date: Sat, 17 Jan 2026 12:58:24 +0200 Subject: [PATCH 073/353] chore(export/markdown): add test for jQuery-like text inside table --- .../src/services/export/markdown.spec.ts | 29 +++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/apps/server/src/services/export/markdown.spec.ts b/apps/server/src/services/export/markdown.spec.ts index c7370a84af..de8224c5a3 100644 --- a/apps/server/src/services/export/markdown.spec.ts +++ b/apps/server/src/services/export/markdown.spec.ts @@ -406,4 +406,33 @@ describe("Markdown export", () => { expect(markdownExportService.toMarkdown(html)).toBe(expected); }); + it("exports jQuery code in table properly", () => { + const html = trimIndentation`\ + <figure class="table"> + <table> + <thead> + <tr> + <th> + Code + </th> + </tr> + </thead> + <tbody> + <tr> + <td> + <pre> + <code class="language-text-x-trilium-auto">this.$widget = $("<div>");</code> + </pre> + </td> + </tr> + </tbody> + </table> + </figure> + `; + const expected = trimIndentation`\ + <table><thead><tr><th>Code</th></tr></thead><tbody><tr><td><pre><code class="language-text-x-trilium-auto">this.$widget = $("<div>");</code> + </pre></td></tr></tbody></table>`; + expect(markdownExportService.toMarkdown(html)).toBe(expected); + }); + }); From 67cc1113b14a1efc5cb531ef1c803ab77a12f060 Mon Sep 17 00:00:00 2001 From: Elian Doran <contact@eliandoran.me> Date: Sat, 17 Jan 2026 13:05:29 +0200 Subject: [PATCH 074/353] chore(export/markdown): render emphasis with underscore --- apps/server/src/services/export/markdown.spec.ts | 6 ++++++ apps/server/src/services/export/markdown.ts | 1 + 2 files changed, 7 insertions(+) diff --git a/apps/server/src/services/export/markdown.spec.ts b/apps/server/src/services/export/markdown.spec.ts index de8224c5a3..80827c2b13 100644 --- a/apps/server/src/services/export/markdown.spec.ts +++ b/apps/server/src/services/export/markdown.spec.ts @@ -435,4 +435,10 @@ describe("Markdown export", () => { expect(markdownExportService.toMarkdown(html)).toBe(expected); }); + it("renders underline with underscore", () => { + const html = /*html*/`<p>This is <em>underlined</em> text.</p>`; + const expected = `This is _underlined_ text.`; + expect(markdownExportService.toMarkdown(html)).toBe(expected); + }); + }); diff --git a/apps/server/src/services/export/markdown.ts b/apps/server/src/services/export/markdown.ts index 4803de21dc..7c90143e79 100644 --- a/apps/server/src/services/export/markdown.ts +++ b/apps/server/src/services/export/markdown.ts @@ -36,6 +36,7 @@ function toMarkdown(content: string) { instance = new Turnish({ headingStyle: "atx", bulletListMarker: "*", + emDelimiter: "_", codeBlockStyle: "fenced", blankReplacement(_content, node) { if (node.nodeName === "SECTION" && node.classList.contains("include-note")) { From 0c9c20c0c5900c0568a465a5d5e1a6e3049cbf3a Mon Sep 17 00:00:00 2001 From: Elian Doran <contact@eliandoran.me> Date: Sat, 17 Jan 2026 13:11:53 +0200 Subject: [PATCH 075/353] docs(user): fix escapes --- .../Import & Export/Evernote.html | 66 +++++++++---------- .../Developer Guide/Documentation.md | 2 +- docs/Release Notes/Release Notes/v0.101.2.md | 2 +- docs/User Guide/!!!meta.json | 28 ++++---- .../Notes/Sorting Notes.md | 2 +- 5 files changed, 49 insertions(+), 51 deletions(-) diff --git a/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Basic Concepts and Features/Import & Export/Evernote.html b/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Basic Concepts and Features/Import & Export/Evernote.html index 439cdab93d..30a170a9c6 100644 --- a/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Basic Concepts and Features/Import & Export/Evernote.html +++ b/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Basic Concepts and Features/Import & Export/Evernote.html @@ -1,55 +1,53 @@ -<p> - <meta>Trilium can import ENEX files, which are used by Evernote for backup/export. +<p>Trilium can import ENEX files, which are used by Evernote for backup/export. One ENEX file represents the content (notes and resources) of one notebook.</p> <h2>Export ENEX from Evernote</h2> <p>To export ENEX files from Evernote, you can use:</p> <ul> - <li data-list-item-id="eabf6814a75b1ddc665781ed732fa65ff">Evernote desktop application. See Evernote documentation. Note that + <li>Evernote desktop application. See Evernote documentation. Note that the limitation of this method is that you can only export 100 notes at a time or one notebook at a time.</li> - <li data-list-item-id="e7c66b50692c80eb3a325841ae5218eb7">A third-party evernote-backup CLI tool. This tool can export all + <li>A third-party evernote-backup CLI tool. This tool can export all of your notebooks in bulk.</li> </ul> <h2>Import ENEX in Trilium</h2> <p>Once you have your ENEX files, do the following to import them in Trilium:</p> <ol> - <li data-list-item-id="e86484b3caf72ef69321bc8639024a991">In the Trilium note tree, right-click the note under which you want to + <li>In the Trilium note tree, right-click the note under which you want to import one or more of your ENEX files. The notes in the files will be imported as child notes of the selected note.</li> - <li data-list-item-id="ec8593d763d8375e841f68731e454b548">Click Import into note.</li> - <li data-list-item-id="e1fb52a96a47f9d881342148ace1353ce">Choose your ENEX file or files and click Import.</li> - <li data-list-item-id="e44b2f10dc3fdd60956774647c440c9c3">During the import, you will see "Import in progress" message. If the import + <li>Click Import into note.</li> + <li>Choose your ENEX file or files and click Import.</li> + <li>During the import, you will see "Import in progress" message. If the import is successful, the message will change to “Import finished successfully” and then disappear.</li> - <li data-list-item-id="ebcec83cfa6d093376cd6fbcfff3db532">We recommend you to check the imported notes and their attachments to + <li>We recommend you to check the imported notes and their attachments to verify that you haven’t lost any data.</li> </ol> <p>A non-exhaustive list of what the importer preserves:</p> <ul> - <li data-list-item-id="e3180fcb6ac86b4543e514a9209c5e789">Attachments</li> - <li data-list-item-id="e7e9720e6bbadf04dde505b2ec56159ec">The hierarchy of headings (these are shifted to start with H2 because + <li>Attachments</li> + <li>The hierarchy of headings (these are shifted to start with H2 because H1 is reserved for note title, see Headings)</li> - <li data-list-item-id="e6798ed61930845577e1f0750378bc52c">Tables</li> - <li data-list-item-id="ef9ddc278d5a093dfd5488c2e07b6278d">Bulleted lists</li> - <li data-list-item-id="ed8ef6d14f74b4fffd08bd66d9c859d36">Numbered lists</li> - <li data-list-item-id="e989884d7888ef1d6ce062c4e71b68636">Bold</li> - <li data-list-item-id="e438a5188d95036c5bfa91def39b38259">Italics</li> - <li data-list-item-id="eda9f7b42b3e02ba4e54a805b2def949b">Strikethrough</li> - <li data-list-item-id="e095a40c46c7f8d1083e9d74258ee85e4">Highlights</li> - <li data-list-item-id="e822d52533a7e7876e0963e043de49e48">Font colors</li> - <li data-list-item-id="ece8974b757a014f25208911706a0462d">Soft line breaks</li> - <li data-list-item-id="eb22c11732fea1beee2976ede9d81ca5e">External links</li> + <li>Tables</li> + <li>Bulleted lists</li> + <li>Numbered lists</li> + <li>Bold</li> + <li>Italics</li> + <li>Strikethrough</li> + <li>Highlights</li> + <li>Font colors</li> + <li>Soft line breaks</li> + <li>External links</li> </ul> <p>However, we do not guarantee that all of your formatting will be imported 100% correctly.</p> <h2>Limitations</h2> <ul> - <li data-list-item-id="ece66c1841631b7250ddb6c101d28afd6">The size limit of one import is 250Mb. If the total size of your files + <li>The size limit of one import is 250Mb. If the total size of your files is larger, you can increase the upload limit, or divide your files, and run the import as many times as necessary.</li> - <li data-list-item-id="ece322cd2ca2b9332154a25f48c16309d">All resources (except for images) are created as notes’ attachments.</li> - <li - data-list-item-id="ee13e15fa378905573e13b348441be574">If you have HTML inside ENEX files, the HTML formatting may be broken + <li>All resources (except for images) are created as notes’ attachments.</li> + <li>If you have HTML inside ENEX files, the HTML formatting may be broken or lost after import in Trilium. You can report major problems at Trilium issue tracker.</li> </ul> @@ -59,24 +57,24 @@ <p>If you want to restore the internal links in Trilium after you import all of your ENEX files, you can use or adapt this custom script:  <a - class="reference-link" href="#root/pOsGYCXsbNQG/gh7bpGYxajRS/mHbBMPDPkVV5/syuSEKf2rUGr/_help_dj3j8dG4th4l">Process internal links by title</a> + class="reference-link" href="#root/_help_dj3j8dG4th4l">Process internal links by title</a> </p> <p>The script does the following:</p> <ol> - <li data-list-item-id="e6c3f7477c6a241ef97cb9bf15623a2c0">It finds all Evernote internal links.</li> - <li data-list-item-id="e928015e4a024f40ebdb85b2e5b77844f">For each one, it checks if its link text matches a note title, and if + <li>It finds all Evernote internal links.</li> + <li>For each one, it checks if its link text matches a note title, and if yes, it replaces the Evernote link with an internal Trilium link. If not, it leaves the Evernote link in place.</li> - <li data-list-item-id="e5fb070b954d7cba355c3c9065e8e4b1f">If it finds more than one note with a matching note title, it leaves the + <li>If it finds more than one note with a matching note title, it leaves the Evernote link in place.</li> - <li data-list-item-id="eea5e5efb229b5a731e3c980160de29f8">It outputs the results in a log that you can see in the respective code - note in Trilium. </li> + <li>It outputs the results in a log that you can see in the respective code + note in Trilium.</li> </ol> <p>The script has the following limitations:</p> <ul> - <li data-list-item-id="e467615aa997504c5aa55f2f169d0028f">It will not fix links to anchors and links to notes that you renamed in + <li>It will not fix links to anchors and links to notes that you renamed in Evernote after you created the links.</li> - <li data-list-item-id="e83d3745ce3531ae99a9619274ad42440">Some note titles might not be well identified, even if they exist. This + <li>Some note titles might not be well identified, even if they exist. This is especially the case if the note title contains some special characters. - Should this be problematic, consider <a class="reference-link" href="#root/pOsGYCXsbNQG/BgmBlOIl72jZ/_help_wy8So3yZZlH9">Reporting issues</a>.</li> + Should this be problematic, consider <a class="reference-link" href="#root/_help_wy8So3yZZlH9">Reporting issues</a>.</li> </ul> \ No newline at end of file diff --git a/docs/Developer Guide/Developer Guide/Documentation.md b/docs/Developer Guide/Developer Guide/Documentation.md index 4f833f93b5..73e47ab6bb 100644 --- a/docs/Developer Guide/Developer Guide/Documentation.md +++ b/docs/Developer Guide/Developer Guide/Documentation.md @@ -1,5 +1,5 @@ # Documentation -There are multiple types of documentation for Trilium:<img class="image-style-align-right" src="api/images/fX56iuus8ySW/Documentation_image.png" width="205" height="162"> +There are multiple types of documentation for Trilium:<img class="image-style-align-right" src="api/images/Fgny4aXwFFgV/Documentation_image.png" width="205" height="162"> * The _User Guide_ represents the user-facing documentation. This documentation can be browsed by users directly from within Trilium, by pressing <kbd>F1</kbd>. * The _Developer's Guide_ represents a set of Markdown documents that present the internals of Trilium, for developers. diff --git a/docs/Release Notes/Release Notes/v0.101.2.md b/docs/Release Notes/Release Notes/v0.101.2.md index 6942b2e8eb..d6baaabdea 100644 --- a/docs/Release Notes/Release Notes/v0.101.2.md +++ b/docs/Release Notes/Release Notes/v0.101.2.md @@ -18,5 +18,5 @@ * [Max content width is not respected when switching between note types in the same tab](https://github.com/TriliumNext/Trilium/issues/8065) * [Crash When a Note Includes Itself](https://github.com/TriliumNext/Trilium/issues/8294) * [Severe Performance Degradation and Crash Issues Due to Recursive Inclusion in Included Notes](https://github.com/TriliumNext/Trilium/issues/8017) -* [<note> is not a launcher even though it's in the launcher subtree](https://github.com/TriliumNext/Trilium/issues/8218) +* [\<note\> is not a launcher even though it's in the launcher subtree](https://github.com/TriliumNext/Trilium/issues/8218) * [Archived subnotes of direct children appear in grid view without #includeArchived](https://github.com/TriliumNext/Trilium/issues/8184) \ No newline at end of file diff --git a/docs/User Guide/!!!meta.json b/docs/User Guide/!!!meta.json index 2c8eafa537..9965fbda64 100644 --- a/docs/User Guide/!!!meta.json +++ b/docs/User Guide/!!!meta.json @@ -6169,6 +6169,20 @@ "type": "text", "mime": "text/markdown", "attributes": [ + { + "type": "relation", + "name": "internalLink", + "value": "dj3j8dG4th4l", + "isInheritable": false, + "position": 10 + }, + { + "type": "relation", + "name": "internalLink", + "value": "wy8So3yZZlH9", + "isInheritable": false, + "position": 20 + }, { "type": "label", "name": "shareAlias", @@ -6182,20 +6196,6 @@ "value": "bx bx-window-open", "isInheritable": false, "position": 30 - }, - { - "type": "relation", - "name": "internalLink", - "value": "dj3j8dG4th4l", - "isInheritable": false, - "position": 40 - }, - { - "type": "relation", - "name": "internalLink", - "value": "wy8So3yZZlH9", - "isInheritable": false, - "position": 50 } ], "format": "markdown", diff --git a/docs/User Guide/User Guide/Basic Concepts and Features/Notes/Sorting Notes.md b/docs/User Guide/User Guide/Basic Concepts and Features/Notes/Sorting Notes.md index 539f42ac07..7519e7be4d 100644 --- a/docs/User Guide/User Guide/Basic Concepts and Features/Notes/Sorting Notes.md +++ b/docs/User Guide/User Guide/Basic Concepts and Features/Notes/Sorting Notes.md @@ -28,4 +28,4 @@ Sorting is done by comparing note properties or specific labels on child notes. * **Label Sorting**: If `#sorted` has any other value, this value is treated as the name of a child note's label, and sorting is based on the values of this label. For example, setting `#sorted=myOrder` on the parent note and using `#myOrder=001`, `#myOrder=002`, etc., on child notes. 4. **Alphabetical Sorting**: Used as a last resort when other criteria result in equality. -All comparisons are made string-wise (e.g., "1" < "2" or "2020-10-10" < "2021-01-15", but also "2" > "10"). \ No newline at end of file +All comparisons are made string-wise (e.g., "1" \< "2" or "2020-10-10" < "2021-01-15", but also "2" \> "10"). \ No newline at end of file From fabab6abb120eeb46f671c90ef0767a4238fae16 Mon Sep 17 00:00:00 2001 From: Elian Doran <contact@eliandoran.me> Date: Sat, 17 Jan 2026 13:16:21 +0200 Subject: [PATCH 076/353] refactor(export/markdown): spacing issues --- apps/server/src/services/export/markdown.ts | 22 ++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/apps/server/src/services/export/markdown.ts b/apps/server/src/services/export/markdown.ts index 7c90143e79..35e08ee11f 100644 --- a/apps/server/src/services/export/markdown.ts +++ b/apps/server/src/services/export/markdown.ts @@ -27,7 +27,7 @@ const fencedCodeBlockFilter: Rule = { const className = node.firstChild.getAttribute("class") || ""; const language = rewriteLanguageTag((className.match(/language-(\S+)/) || [null, ""])[1]); - return `\n\n${ options.fence }${language }\n${ node.firstChild.textContent }\n${ options.fence }\n\n`; + return `\n\n${options.fence}${language}\n${node.firstChild.textContent}\n${options.fence}\n\n`; } }; @@ -87,11 +87,11 @@ function buildImageFilter() { after: /((?:^\d+(?=\.)))/ }; - const escapePattern = new RegExp(`(?:${ ESCAPE_PATTERNS.before.source }|${ ESCAPE_PATTERNS.after.source })`, 'g'); + const escapePattern = new RegExp(`(?:${ESCAPE_PATTERNS.before.source}|${ESCAPE_PATTERNS.after.source})`, 'g'); function escapeMarkdown (content: string) { return content.replace(escapePattern, (match, before, after) => { - return before ? `\\${ before}` : `${after }\\`; + return before ? `\\${before}` : `${after}\\`; }); } @@ -120,9 +120,9 @@ function buildImageFilter() { const alt = escapeMarkdown(cleanAttribute(untypedNode.getAttribute('alt'))); const src = escapeLinkDestination(untypedNode.getAttribute('src') || ''); const title = cleanAttribute(untypedNode.getAttribute('title')); - const titlePart = title ? ` "${ escapeLinkTitle(title) }"` : ''; + const titlePart = title ? ` "${escapeLinkTitle(title)}"` : ''; - return src ? `![${ alt }]` + `(${ src }${titlePart })` : ''; + return src ? `![${alt}](${src}${titlePart})` : ''; } }; return imageFilter; @@ -161,9 +161,9 @@ function buildAdmonitionFilter() { content = content.replace(/^\n+|\n+$/g, ''); content = content.replace(/^/gm, '> '); - content = `> [!${admonitionType}]\n${ content}`; + content = `> [!${admonitionType}]\n${content}`; - return `\n\n${ content }\n\n`; + return `\n\n${content}\n\n`; } }; return admonitionFilter; @@ -199,8 +199,8 @@ function buildInlineLinkFilter(): Rule { let href = node.getAttribute('href'); if (href) href = href.replace(/([()])/g, '\\$1'); let title = cleanAttribute(node.getAttribute('title')); - if (title) title = ` "${ title.replace(/"/g, '\\"') }"`; - return `[${ content }](${ href }${title })`; + if (title) title = ` "${title.replace(/"/g, '\\"')}"`; + return `[${content}](${href}${title})`; } }; } @@ -225,12 +225,12 @@ function buildListItemFilter(): Rule { content = content .trim() .replace(/\n/gm, '\n '); // indent - let prefix = `${options.bulletListMarker } `; + let prefix = `${options.bulletListMarker} `; const parent = node.parentNode as HTMLElement; if (parent.nodeName === 'OL') { const start = parent.getAttribute('start'); const index = Array.prototype.indexOf.call(parent.children, node); - prefix = `${start ? Number(start) + index : index + 1 }. `; + prefix = `${start ? Number(start) + index : index + 1}. `; } else if (parent.classList.contains("todo-list")) { const isChecked = node.querySelector("input[type=checkbox]:checked"); prefix = (isChecked ? "- [x] " : "- [ ] "); From 5a7fc1c8b696e39c6dfdfa890c629f707b5c131d Mon Sep 17 00:00:00 2001 From: Elian Doran <contact@eliandoran.me> Date: Sat, 17 Jan 2026 13:22:24 +0200 Subject: [PATCH 077/353] chore(markdown): address requested changes --- apps/server/src/services/export/markdown.spec.ts | 2 +- apps/server/src/services/import/markdown.spec.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/server/src/services/export/markdown.spec.ts b/apps/server/src/services/export/markdown.spec.ts index 80827c2b13..505d4b02d1 100644 --- a/apps/server/src/services/export/markdown.spec.ts +++ b/apps/server/src/services/export/markdown.spec.ts @@ -435,7 +435,7 @@ describe("Markdown export", () => { expect(markdownExportService.toMarkdown(html)).toBe(expected); }); - it("renders underline with underscore", () => { + it("renders emphasis with underscore", () => { const html = /*html*/`<p>This is <em>underlined</em> text.</p>`; const expected = `This is _underlined_ text.`; expect(markdownExportService.toMarkdown(html)).toBe(expected); diff --git a/apps/server/src/services/import/markdown.spec.ts b/apps/server/src/services/import/markdown.spec.ts index 453db33b8a..e692c7baa5 100644 --- a/apps/server/src/services/import/markdown.spec.ts +++ b/apps/server/src/services/import/markdown.spec.ts @@ -314,7 +314,7 @@ $$`; expect(markdownService.renderToHtml(input, "Title")).toStrictEqual(expected); }); - it("doesn't unescape HTML in list", () => { + it("preserves HTML entities in list", () => { const input = `* <note> is note.`; const expected = /*html*/`<ul><li><note> is note.</li></ul>`; expect(markdownService.renderToHtml(input, "Title")).toStrictEqual(expected); From fe4c3ffecb576172d5369f9c5a52b7e338e7d5f8 Mon Sep 17 00:00:00 2001 From: Hosted Weblate <hosted@weblate.org> Date: Sat, 17 Jan 2026 10:56:07 +0100 Subject: [PATCH 078/353] Update translation files Updated by "Cleanup translation files" add-on in Weblate. Translation: Trilium Notes/README Translate-URL: https://hosted.weblate.org/projects/trilium/readme/ --- docs/README-hi.md | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/docs/README-hi.md b/docs/README-hi.md index 216863fb04..d0b229deb4 100644 --- a/docs/README-hi.md +++ b/docs/README-hi.md @@ -69,12 +69,14 @@ application with focus on building large personal knowledge bases. ## 🎁 खासियतें -* Notes can be arranged into arbitrarily deep tree. Single note can be placed - into multiple places in the tree (see +* नोट्स को मनचाहे गहरे ट्री (tree) स्ट्रक्चर में व्यवस्थित किया जा सकता है। एक + ही नोट को ट्री में कई जगहों पर रखा जा सकता है (देखें [cloning](https://docs.triliumnotes.org/user-guide/concepts/notes/cloning)) -* Rich WYSIWYG note editor including e.g. tables, images and - [math](https://docs.triliumnotes.org/user-guide/note-types/text) with markdown +* बेहतरीन WYSIWYG नोट एडिटर, जिसमें टेबल, इमेज और + [math](https://docs.triliumnotes.org/user-guide/note-types/text) के साथ-साथ + मार्कडाउन [autoformat](https://docs.triliumnotes.org/user-guide/note-types/text/markdown-formatting) + की सुविधा शामिल है * [सोर्स कोड वाले नोट्स](https://docs.triliumnotes.org/user-guide/note-types/code) को एडिट करने की सुविधा, जिसमें सिंटैक्स हाइलाइटिंग (syntax highlighting) भी शामिल है From 11c8e5b3b234290d394d03c7bb95a0b4bf6ebbe0 Mon Sep 17 00:00:00 2001 From: Yatrik Patel <fallers_quieter0v@icloud.com> Date: Sat, 17 Jan 2026 04:50:26 +0100 Subject: [PATCH 079/353] Translated using Weblate (Hindi) Currently translated at 35.5% (54 of 152 strings) Translation: Trilium Notes/Website Translate-URL: https://hosted.weblate.org/projects/trilium/website/hi/ --- apps/website/src/translations/hi/translation.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/apps/website/src/translations/hi/translation.json b/apps/website/src/translations/hi/translation.json index af8bf586df..52211c7236 100644 --- a/apps/website/src/translations/hi/translation.json +++ b/apps/website/src/translations/hi/translation.json @@ -24,7 +24,8 @@ "mindmap_title": "माइंडमैप" }, "extensibility_benefits": { - "share_title": "वेब पर नोट्स शेयर करें" + "share_title": "वेब पर नोट्स शेयर करें", + "share_description": "अगर आपके पास सर्वर है, तो इसका उपयोग अपने नोट्स के एक हिस्से को अन्य लोगों के साथ शेयर करने के लिए किया जा सकता है।" }, "collections": { "calendar_title": "कैलेंडर", From 1d898d618e5c67b7bb37d86a60214dff3d69a51d Mon Sep 17 00:00:00 2001 From: Yatrik Patel <fallers_quieter0v@icloud.com> Date: Sat, 17 Jan 2026 04:28:05 +0100 Subject: [PATCH 080/353] Translated using Weblate (Hindi) Currently translated at 7.7% (30 of 388 strings) Translation: Trilium Notes/Server Translate-URL: https://hosted.weblate.org/projects/trilium/server/hi/ --- apps/server/src/assets/translations/hi/server.json | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/apps/server/src/assets/translations/hi/server.json b/apps/server/src/assets/translations/hi/server.json index 36b9e7829d..f7f0c608f7 100644 --- a/apps/server/src/assets/translations/hi/server.json +++ b/apps/server/src/assets/translations/hi/server.json @@ -27,6 +27,8 @@ "search-in-subtree": "एक्टिव नोट के सब-ट्री में नोट्स खोजें", "expand-subtree": "मौजूदा नोट के सब-ट्री को (subtree) एक्सपैंड करें", "delete-note": "नोट डिलीट करें", - "move-note-up-in-hierarchy": "नोट एक लेवल ऊपर मूव करें" + "move-note-up-in-hierarchy": "नोट एक लेवल ऊपर मूव करें", + "move-note-down-in-hierarchy": "नोट एक लेवल नीचे ले जाएँ", + "dialogs": "डायलॉग्स" } } From d2c6081537ff93a5669fb41bca9c34918fd3bba2 Mon Sep 17 00:00:00 2001 From: Elian Doran <contact@eliandoran.me> Date: Sat, 17 Jan 2026 17:54:10 +0200 Subject: [PATCH 081/353] feat(edit-docs): remove data-list-item-id --- apps/edit-docs/src/edit-docs.ts | 3 +++ 1 file changed, 3 insertions(+) diff --git a/apps/edit-docs/src/edit-docs.ts b/apps/edit-docs/src/edit-docs.ts index 8cb6b898dd..40163330d0 100644 --- a/apps/edit-docs/src/edit-docs.ts +++ b/apps/edit-docs/src/edit-docs.ts @@ -185,6 +185,9 @@ async function exportData(noteId: string, format: ExportFormat, outputPath: stri return components.join("/"); }); + // Remove data-list-item-id created by CKEditor for lists + content = content.replace(/ data-list-item-id="[^"]*"/g, ""); + return content; function findAttachment(targetAttachmentId: string) { From e0ccf30f4f1e225255d02da8f2f0065c6c80cb74 Mon Sep 17 00:00:00 2001 From: Elian Doran <contact@eliandoran.me> Date: Sat, 17 Jan 2026 17:59:30 +0200 Subject: [PATCH 082/353] docs(user): add missing links from Evernote documentation --- .../Import & Export/Evernote.html | 82 +++++++++---------- .../Import & Export/Evernote.md | 10 +-- 2 files changed, 46 insertions(+), 46 deletions(-) diff --git a/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Basic Concepts and Features/Import & Export/Evernote.html b/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Basic Concepts and Features/Import & Export/Evernote.html index 439cdab93d..e5a8231bab 100644 --- a/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Basic Concepts and Features/Import & Export/Evernote.html +++ b/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Basic Concepts and Features/Import & Export/Evernote.html @@ -1,57 +1,57 @@ -<p> - <meta>Trilium can import ENEX files, which are used by Evernote for backup/export. +<p>Trilium can import ENEX files, which are used by Evernote for backup/export. One ENEX file represents the content (notes and resources) of one notebook.</p> <h2>Export ENEX from Evernote</h2> <p>To export ENEX files from Evernote, you can use:</p> <ul> - <li data-list-item-id="eabf6814a75b1ddc665781ed732fa65ff">Evernote desktop application. See Evernote documentation. Note that - the limitation of this method is that you can only export 100 notes at - a time or one notebook at a time.</li> - <li data-list-item-id="e7c66b50692c80eb3a325841ae5218eb7">A third-party evernote-backup CLI tool. This tool can export all - of your notebooks in bulk.</li> + <li>Evernote desktop application. See Evernote <a href="https://help.evernote.com/hc/en-us/articles/209005557-Export-Notes-and-Notebooks-as-ENEX-or-HTML">documentation</a>. + Note that the limitation of this method is that you can only export 100 + notes at a time or one notebook at a time.</li> + <li>A third-party <a href="https://github.com/vzhd1701/evernote-backup">evernote-backup</a> CLI + tool. This tool can export all of your notebooks in bulk.</li> </ul> <h2>Import ENEX in Trilium</h2> <p>Once you have your ENEX files, do the following to import them in Trilium:</p> <ol> - <li data-list-item-id="e86484b3caf72ef69321bc8639024a991">In the Trilium note tree, right-click the note under which you want to + <li>In the Trilium note tree, right-click the note under which you want to import one or more of your ENEX files. The notes in the files will be imported as child notes of the selected note.</li> - <li data-list-item-id="ec8593d763d8375e841f68731e454b548">Click Import into note.</li> - <li data-list-item-id="e1fb52a96a47f9d881342148ace1353ce">Choose your ENEX file or files and click Import.</li> - <li data-list-item-id="e44b2f10dc3fdd60956774647c440c9c3">During the import, you will see "Import in progress" message. If the import + <li>Click Import into note.</li> + <li>Choose your ENEX file or files and click Import.</li> + <li>During the import, you will see "Import in progress" message. If the import is successful, the message will change to “Import finished successfully” and then disappear.</li> - <li data-list-item-id="ebcec83cfa6d093376cd6fbcfff3db532">We recommend you to check the imported notes and their attachments to + <li>We recommend you to check the imported notes and their attachments to verify that you haven’t lost any data.</li> </ol> <p>A non-exhaustive list of what the importer preserves:</p> <ul> - <li data-list-item-id="e3180fcb6ac86b4543e514a9209c5e789">Attachments</li> - <li data-list-item-id="e7e9720e6bbadf04dde505b2ec56159ec">The hierarchy of headings (these are shifted to start with H2 because - H1 is reserved for note title, see Headings)</li> - <li data-list-item-id="e6798ed61930845577e1f0750378bc52c">Tables</li> - <li data-list-item-id="ef9ddc278d5a093dfd5488c2e07b6278d">Bulleted lists</li> - <li data-list-item-id="ed8ef6d14f74b4fffd08bd66d9c859d36">Numbered lists</li> - <li data-list-item-id="e989884d7888ef1d6ce062c4e71b68636">Bold</li> - <li data-list-item-id="e438a5188d95036c5bfa91def39b38259">Italics</li> - <li data-list-item-id="eda9f7b42b3e02ba4e54a805b2def949b">Strikethrough</li> - <li data-list-item-id="e095a40c46c7f8d1083e9d74258ee85e4">Highlights</li> - <li data-list-item-id="e822d52533a7e7876e0963e043de49e48">Font colors</li> - <li data-list-item-id="ece8974b757a014f25208911706a0462d">Soft line breaks</li> - <li data-list-item-id="eb22c11732fea1beee2976ede9d81ca5e">External links</li> + <li>Attachments</li> + <li>The hierarchy of headings (these are shifted to start with H2 because + H1 is reserved for note title, see <a href="#root/pOsGYCXsbNQG/KSZ04uQ2D1St/iPIMuisry3hd/_help_Gr6xFaF6ioJ5">Headings</a>)</li> + <li + >Tables</li> + <li>Bulleted lists</li> + <li>Numbered lists</li> + <li>Bold</li> + <li>Italics</li> + <li>Strikethrough</li> + <li>Highlights</li> + <li>Font colors</li> + <li>Soft line breaks</li> + <li>External links</li> </ul> <p>However, we do not guarantee that all of your formatting will be imported 100% correctly.</p> <h2>Limitations</h2> <ul> - <li data-list-item-id="ece66c1841631b7250ddb6c101d28afd6">The size limit of one import is 250Mb. If the total size of your files - is larger, you can increase the upload limit, or divide your files, - and run the import as many times as necessary.</li> - <li data-list-item-id="ece322cd2ca2b9332154a25f48c16309d">All resources (except for images) are created as notes’ attachments.</li> + <li>The size limit of one import is 250Mb. If the total size of your files + is larger, you can increase the <a href="#root/pOsGYCXsbNQG/Otzi9La2YAUX/_help_WOcw2SLH6tbX">upload limit</a>, + or divide your files, and run the import as many times as necessary.</li> <li - data-list-item-id="ee13e15fa378905573e13b348441be574">If you have HTML inside ENEX files, the HTML formatting may be broken - or lost after import in Trilium. You can report major problems at Trilium - issue tracker.</li> + >All resources (except for images) are created as notes’ attachments.</li> + <li + >If you have HTML inside ENEX files, the HTML formatting may be broken + or lost after import in Trilium. See <a class="reference-link" href="#root/pOsGYCXsbNQG/BgmBlOIl72jZ/_help_wy8So3yZZlH9">Reporting issues</a>.</li> </ul> <h3>Internal links</h3> <p>The importer cannot transform Evernote internal links into Trilium internal @@ -59,24 +59,24 @@ <p>If you want to restore the internal links in Trilium after you import all of your ENEX files, you can use or adapt this custom script:  <a - class="reference-link" href="#root/pOsGYCXsbNQG/gh7bpGYxajRS/mHbBMPDPkVV5/syuSEKf2rUGr/_help_dj3j8dG4th4l">Process internal links by title</a> + class="reference-link" href="#root/_help_dj3j8dG4th4l">Process internal links by title</a> </p> <p>The script does the following:</p> <ol> - <li data-list-item-id="e6c3f7477c6a241ef97cb9bf15623a2c0">It finds all Evernote internal links.</li> - <li data-list-item-id="e928015e4a024f40ebdb85b2e5b77844f">For each one, it checks if its link text matches a note title, and if + <li>It finds all Evernote internal links.</li> + <li>For each one, it checks if its link text matches a note title, and if yes, it replaces the Evernote link with an internal Trilium link. If not, it leaves the Evernote link in place.</li> - <li data-list-item-id="e5fb070b954d7cba355c3c9065e8e4b1f">If it finds more than one note with a matching note title, it leaves the + <li>If it finds more than one note with a matching note title, it leaves the Evernote link in place.</li> - <li data-list-item-id="eea5e5efb229b5a731e3c980160de29f8">It outputs the results in a log that you can see in the respective code - note in Trilium. </li> + <li>It outputs the results in a log that you can see in the respective code + note in Trilium.</li> </ol> <p>The script has the following limitations:</p> <ul> - <li data-list-item-id="e467615aa997504c5aa55f2f169d0028f">It will not fix links to anchors and links to notes that you renamed in + <li>It will not fix links to anchors and links to notes that you renamed in Evernote after you created the links.</li> - <li data-list-item-id="e83d3745ce3531ae99a9619274ad42440">Some note titles might not be well identified, even if they exist. This + <li>Some note titles might not be well identified, even if they exist. This is especially the case if the note title contains some special characters. - Should this be problematic, consider <a class="reference-link" href="#root/pOsGYCXsbNQG/BgmBlOIl72jZ/_help_wy8So3yZZlH9">Reporting issues</a>.</li> + Should this be problematic, consider <a class="reference-link" href="#root/_help_wy8So3yZZlH9">Reporting issues</a>.</li> </ul> \ No newline at end of file diff --git a/docs/User Guide/User Guide/Basic Concepts and Features/Import & Export/Evernote.md b/docs/User Guide/User Guide/Basic Concepts and Features/Import & Export/Evernote.md index e095d30d89..19327abcee 100644 --- a/docs/User Guide/User Guide/Basic Concepts and Features/Import & Export/Evernote.md +++ b/docs/User Guide/User Guide/Basic Concepts and Features/Import & Export/Evernote.md @@ -5,8 +5,8 @@ Trilium can import ENEX files, which are used by Evernote for backup/export. One To export ENEX files from Evernote, you can use: -* Evernote desktop application. See Evernote documentation. Note that the limitation of this method is that you can only export 100 notes at a time or one notebook at a time. -* A third-party evernote-backup CLI tool. This tool can export all of your notebooks in bulk. +* Evernote desktop application. See Evernote [documentation](https://help.evernote.com/hc/en-us/articles/209005557-Export-Notes-and-Notebooks-as-ENEX-or-HTML). Note that the limitation of this method is that you can only export 100 notes at a time or one notebook at a time. +* A third-party [evernote-backup](https://github.com/vzhd1701/evernote-backup) CLI tool. This tool can export all of your notebooks in bulk. ## Import ENEX in Trilium @@ -21,7 +21,7 @@ Once you have your ENEX files, do the following to import them in Trilium: A non-exhaustive list of what the importer preserves: * Attachments -* The hierarchy of headings (these are shifted to start with H2 because H1 is reserved for note title, see Headings) +* The hierarchy of headings (these are shifted to start with H2 because H1 is reserved for note title, see [Headings](../../Note%20Types/Text/General%20formatting.md)) * Tables * Bulleted lists * Numbered lists @@ -37,9 +37,9 @@ However, we do not guarantee that all of your formatting will be imported 100% c ## Limitations -* The size limit of one import is 250Mb. If the total size of your files is larger, you can increase the upload limit, or divide your files, and run the import as many times as necessary. +* The size limit of one import is 250Mb. If the total size of your files is larger, you can increase the [upload limit](../../Installation%20%26%20Setup/Server%20Installation.md), or divide your files, and run the import as many times as necessary. * All resources (except for images) are created as notes’ attachments. -* If you have HTML inside ENEX files, the HTML formatting may be broken or lost after import in Trilium. You can report major problems at Trilium issue tracker. +* If you have HTML inside ENEX files, the HTML formatting may be broken or lost after import in Trilium. See <a class="reference-link" href="../../Troubleshooting/Reporting%20issues.md">Reporting issues</a>. ### Internal links From 74548d638e8f98d493f3d0448c615a9a82276686 Mon Sep 17 00:00:00 2001 From: Elian Doran <contact@eliandoran.me> Date: Sat, 17 Jan 2026 18:13:40 +0200 Subject: [PATCH 083/353] docs(user): sync --- .../User Guide/Advanced Usage/Sharing.html | 34 +++++----- .../User Guide/Collections/Calendar.html | 8 +-- .../Server Installation.html | 29 ++++---- .../User Guide/Note Types/Text.html | 68 +++++++++---------- .../Scripting/Backend scripts/Events.html | 10 +-- .../Frontend Basics/Custom Widgets.html | 6 +- .../Developer Guide/Documentation.md | 2 +- docs/User Guide/!!!meta.json | 18 ++++- 8 files changed, 95 insertions(+), 80 deletions(-) diff --git a/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Advanced Usage/Sharing.html b/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Advanced Usage/Sharing.html index 34371a7dd7..4877478001 100644 --- a/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Advanced Usage/Sharing.html +++ b/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Advanced Usage/Sharing.html @@ -38,17 +38,17 @@ class="image"> </th> <td> <ul> - <li data-list-item-id="e26b4ce9ba4e9dfe224d04e0f341925ed">Table of contents.</li> - <li data-list-item-id="e9707fdfa2c92d66690cf932f7e647253">Syntax highlight of code blocks, provided a language is selected (does + <li>Table of contents.</li> + <li>Syntax highlight of code blocks, provided a language is selected (does not work if “Auto-detected” is enabled).</li> - <li data-list-item-id="e84420a10c6d64bd107edb6e867c91d4b">Rendering for math equations.</li> - <li data-list-item-id="e10834dcd0619d77ae2e94d3695bedf58"><a href="#root/_help_nBAXQFj20hS1">Including notes</a> (only if the included + <li>Rendering for math equations.</li> + <li><a href="#root/_help_nBAXQFj20hS1">Including notes</a> (only if the included notes are also shared).</li> </ul> </td> <td> <ul> - <li data-list-item-id="e41cc4139377f9f88d653d1eb8ca47bb4">Inline Mermaid diagrams are not rendered.</li> + <li>Inline Mermaid diagrams are not rendered.</li> </ul> </td> </tr> @@ -57,12 +57,12 @@ class="image"> </th> <td> <ul> - <li data-list-item-id="e291ae6d5130677b4c99f7c3bdbe974b4">Basic support (displaying the contents of the note in a monospace font).</li> + <li>Basic support (displaying the contents of the note in a monospace font).</li> </ul> </td> <td> <ul> - <li data-list-item-id="e0270680bbdd7a129306e61e11691e36d">No syntax highlight.</li> + <li>No syntax highlight.</li> </ul> </td> </tr> @@ -95,12 +95,12 @@ class="image"> </th> <td> <ul> - <li data-list-item-id="ea031e1d4149eb443ace756234490c5a4">The child notes are displayed in a fixed format. </li> + <li>The child notes are displayed in a fixed format. </li> </ul> </td> <td> <ul> - <li data-list-item-id="ea4a9d424aec2afbaecc07bbf64b7bebd">More advanced view types such as the calendar view are not supported.</li> + <li>More advanced view types such as the calendar view are not supported.</li> </ul> </td> </tr> @@ -109,12 +109,12 @@ class="image"> </th> <td> <ul> - <li data-list-item-id="e582d283f2b1b30cbe5ae35d8e01b2bf2">The diagram is displayed as a vector image.</li> + <li>The diagram is displayed as a vector image.</li> </ul> </td> <td> <ul> - <li data-list-item-id="e33268686446e3c217077201bb5964364">No further interaction supported.</li> + <li>No further interaction supported.</li> </ul> </td> </tr> @@ -123,12 +123,12 @@ class="image"> </th> <td> <ul> - <li data-list-item-id="e443dd0e97c30cb12c77e8906a71569ea">The diagram is displayed as a vector image.</li> + <li>The diagram is displayed as a vector image.</li> </ul> </td> <td> <ul> - <li data-list-item-id="efe151ef3f3826c825416417525fb5fb2">No further interaction supported.</li> + <li>No further interaction supported.</li> </ul> </td> </tr> @@ -144,7 +144,7 @@ class="image"> <td>The diagram is displayed as a vector image.</td> <td> <ul> - <li data-list-item-id="ed3b4fb473042f6e32b4502d4fa11a767">No further interaction supported.</li> + <li>No further interaction supported.</li> </ul> </td> </tr> @@ -160,7 +160,7 @@ class="image"> <td>Basic interaction (downloading the file).</td> <td> <ul> - <li data-list-item-id="ed87e836a39d127ebcbb33e9e59045afb">No further interaction supported.</li> + <li>No further interaction supported.</li> </ul> </td> </tr> @@ -392,8 +392,8 @@ for (const attr of parentNote.attributes) { <p>Indicates to web crawlers that the page should not be indexed of this note by:</p> <ul> - <li data-list-item-id="e6baa9f60bf59d085fd31aa2cce07a0e7">Setting the <code>X-Robots-Tag: noindex</code> HTTP header.</li> - <li data-list-item-id="ec0d067db136ef9794e4f1033405880b7">Setting the <code>noindex, follow</code> meta tag.</li> + <li>Setting the <code>X-Robots-Tag: noindex</code> HTTP header.</li> + <li>Setting the <code>noindex, follow</code> meta tag.</li> </ul> </td> </tr> diff --git a/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Collections/Calendar.html b/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Collections/Calendar.html index 1a3474a594..45587606c9 100644 --- a/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Collections/Calendar.html +++ b/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Collections/Calendar.html @@ -148,10 +148,10 @@ <td> <p>Which view to display in the calendar:</p> <ul> - <li data-list-item-id="e2cd230dc41f41fe91ee74d7d1fa87372"><code>timeGridWeek</code> for the <em>week</em> view;</li> - <li data-list-item-id="eee1dba4c6cc51ebd53d0a0dd52044cd6"><code>dayGridMonth</code> for the <em>month</em> view;</li> - <li data-list-item-id="ed8721a76a1865dac882415f662ed45b9"><code>multiMonthYear</code> for the <em>year</em> view;</li> - <li data-list-item-id="edf09a13759102d98dac34c33eb690c05"><code>listMonth</code> for the <em>list</em> view.</li> + <li><code>timeGridWeek</code> for the <em>week</em> view;</li> + <li><code>dayGridMonth</code> for the <em>month</em> view;</li> + <li><code>multiMonthYear</code> for the <em>year</em> view;</li> + <li><code>listMonth</code> for the <em>list</em> view.</li> </ul> <p>Any other value will be dismissed and the default view (month) will be used instead.</p> diff --git a/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Installation & Setup/Server Installation.html b/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Installation & Setup/Server Installation.html index 7b3a54250e..cbf57c6cad 100644 --- a/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Installation & Setup/Server Installation.html +++ b/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Installation & Setup/Server Installation.html @@ -7,20 +7,21 @@ <ul> <li><strong>Recommended</strong>: <a href="#root/_help_rWX5eY045zbE">Docker Installation</a> - Available for <strong>AMD64</strong> and <strong>ARM</strong> architectures.</li> - <li><a href="#root/_help_3tW6mORuTHnB">Packaged Server Installation</a> - </li> - <li><a href="https://www.pikapods.com/pods?run=trilium-next">PikaPods managed hosting</a> - </li> - <li><a href="#root/_help_J1Bb6lVlwU5T">Manual Installation</a> - </li> - <li><a href="#root/_help_DCmT6e7clMoP">Kubernetes</a> - </li> - <li><a href="https://www.cloudron.io/store/com.github.trilium.cloudronapp.html">Cloudron</a> - </li> - <li><a href="https://homelabos.com/docs/software/trilium/">HomelabOS</a> - </li> - <li><a href="#root/_help_moVgBcoxE3EK">NixOS Module</a> - </li> + <li + ><a href="#root/_help_3tW6mORuTHnB">Packaged Server Installation</a> + </li> + <li><a href="https://www.pikapods.com/pods?run=trilium-next">PikaPods managed hosting</a> + </li> + <li><a href="#root/_help_J1Bb6lVlwU5T">Manual Installation</a> + </li> + <li><a href="#root/_help_DCmT6e7clMoP">Kubernetes</a> + </li> + <li><a href="https://www.cloudron.io/store/com.github.trilium.cloudronapp.html">Cloudron</a> + </li> + <li><a href="https://homelabos.com/docs/software/trilium/">HomelabOS</a> + </li> + <li><a href="#root/_help_moVgBcoxE3EK">NixOS Module</a> + </li> </ul> <p>The server installation includes both web and <a href="#root/_help_RDslemsQ6gCp">mobile frontends</a>.</p> <h2>Configuration</h2> diff --git a/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Note Types/Text.html b/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Note Types/Text.html index 008a783fcb..bdb79fc490 100644 --- a/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Note Types/Text.html +++ b/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Note Types/Text.html @@ -33,12 +33,12 @@ </td> <td> <ul> - <li data-list-item-id="e04c84d59d44645ee89b2a8541ed99f90">Headings (section titles, paragraph)</li> - <li data-list-item-id="e39d25bd3d8bd06185b9d259e5827d451">Font size</li> - <li data-list-item-id="e1f7e2a2f4b03449d82bdf5b5c6ea8d44">Bold, italic, underline, strike-through</li> - <li data-list-item-id="e3decae72884f65b4d538151b6a297072">Superscript, subscript</li> - <li data-list-item-id="e59adf00fef65304c163ae190fac5e92a">Font color & background color</li> - <li data-list-item-id="ed3f09156147a2769e91db111c76376e2">Remove formatting</li> + <li>Headings (section titles, paragraph)</li> + <li>Font size</li> + <li>Bold, italic, underline, strike-through</li> + <li>Superscript, subscript</li> + <li>Font color & background color</li> + <li>Remove formatting</li> </ul> </td> </tr> @@ -47,9 +47,9 @@ </td> <td> <ul> - <li data-list-item-id="ee87806a913900d85d8f018af81f41df8">Bulleted lists</li> - <li data-list-item-id="e3ae314e365fa418ca6e0f061d63834c5">Numbered lists</li> - <li data-list-item-id="ee84e08694165f95430046cb34f4cd123">To-do lists</li> + <li>Bulleted lists</li> + <li>Numbered lists</li> + <li>To-do lists</li> </ul> </td> </tr> @@ -58,8 +58,8 @@ </td> <td> <ul> - <li data-list-item-id="e2892dc35a0d4b7ad65daffb8f9404daa">Block quotes</li> - <li data-list-item-id="e7297e3ad1002f8de15aa0bd66c6f3f22">Admonitions</li> + <li>Block quotes</li> + <li>Admonitions</li> </ul> </td> </tr> @@ -68,10 +68,10 @@ </td> <td> <ul> - <li data-list-item-id="eb358a4567d93f66004f4195df2dda05a">Basic tables</li> - <li data-list-item-id="e6135a555d6c63c30e4b84806a4870830">Merging cells</li> - <li data-list-item-id="e29ac76563d0998b28fb1baf94dbdac8c">Styling tables and cells.</li> - <li data-list-item-id="e372446e81fdedada64b8bed89ca93d1a">Table captions</li> + <li>Basic tables</li> + <li>Merging cells</li> + <li>Styling tables and cells.</li> + <li>Table captions</li> </ul> </td> </tr> @@ -80,9 +80,9 @@ </td> <td> <ul> - <li data-list-item-id="eb260b76afcbc07bd9d4ceec4e000e8a0">Inline code</li> - <li data-list-item-id="e9864352286369ebe7b41c1599f498de8">Code blocks</li> - <li data-list-item-id="ee62fb9ed7f349178e8f2a2bd9ec8cd74">Keyboard shortcuts</li> + <li>Inline code</li> + <li>Code blocks</li> + <li>Keyboard shortcuts</li> </ul> </td> </tr> @@ -91,7 +91,7 @@ </td> <td> <ul> - <li data-list-item-id="edf62ec004eff35cfcb7e361deef19aaf">Footnotes</li> + <li>Footnotes</li> </ul> </td> </tr> @@ -100,7 +100,7 @@ </td> <td> <ul> - <li data-list-item-id="ebe6277e643041403489c3ceb30c36f7f">Images</li> + <li>Images</li> </ul> </td> </tr> @@ -109,8 +109,8 @@ </td> <td> <ul> - <li data-list-item-id="e3f988be2f259bb40607cb61541955395">External links</li> - <li data-list-item-id="e3f91cc4f0cccd2c077cc306bacd68ef2">Internal Trilium links</li> + <li>External links</li> + <li>Internal Trilium links</li> </ul> </td> </tr> @@ -119,7 +119,7 @@ </td> <td> <ul> - <li data-list-item-id="eac8015a64bce7b749cc67d1599062007">Include note</li> + <li>Include note</li> </ul> </td> </tr> @@ -128,12 +128,12 @@ </td> <td> <ul> - <li data-list-item-id="e5cdf5d3885ec0ea67f924b4b8fe5c483">Symbols</li> - <li data-list-item-id="e95082e6642ed5b1eec6e4e116b899a40"><a class="reference-link" href="#root/_help_YfYAtQBcfo5V">Math Equations</a> + <li>Symbols</li> + <li><a class="reference-link" href="#root/_help_YfYAtQBcfo5V">Math Equations</a> </li> - <li data-list-item-id="ecbef6a358a5b8d27f0d3e08bbc750aa9">Mermaid diagrams</li> - <li data-list-item-id="e6e97ee14dd29b7ccf53227107e5dc72d">Horizontal ruler</li> - <li data-list-item-id="e6198c7c535c249faec2e8906775f11de">Page break</li> + <li>Mermaid diagrams</li> + <li>Horizontal ruler</li> + <li>Page break</li> </ul> </td> </tr> @@ -142,12 +142,12 @@ </td> <td> <ul> - <li data-list-item-id="e0c14456cb83d483b07ea432ef9d4728e">Indentation + <li>Indentation <ul> - <li data-list-item-id="e2029812c5e105c595590f70ee227631e">Markdown import</li> + <li>Markdown import</li> </ul> </li> - <li data-list-item-id="ea1ee012286e05190c89c9f4e64cf2036"><a class="reference-link" href="#root/_help_2x0ZAX9ePtzV">Cut to subnote</a> + <li><a class="reference-link" href="#root/_help_2x0ZAX9ePtzV">Cut to subnote</a> </li> </ul> </td> @@ -157,11 +157,11 @@ </td> <td> <ul> - <li data-list-item-id="e1ab173193a533ccf33dccfd0cb916f1f"><a class="reference-link" href="#root/_help_ZlN4nump6EbW">Slash Commands</a> + <li><a class="reference-link" href="#root/_help_ZlN4nump6EbW">Slash Commands</a> </li> - <li data-list-item-id="e564b978c09fe5adf476b331b1e0640e3"><a class="reference-link" href="#root/_help_KC1HB96bqqHX">Templates</a> + <li><a class="reference-link" href="#root/_help_KC1HB96bqqHX">Templates</a> </li> - <li data-list-item-id="e756306c31d9beffbba3820b6d1b9bc61"><a class="reference-link" href="#root/_help_5wZallV2Qo1t">Format Painter</a> + <li><a class="reference-link" href="#root/_help_5wZallV2Qo1t">Format Painter</a> </li> </ul> </td> diff --git a/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Scripting/Backend scripts/Events.html b/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Scripting/Backend scripts/Events.html index 30e97babcf..d2866b0813 100644 --- a/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Scripting/Backend scripts/Events.html +++ b/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Scripting/Backend scripts/Events.html @@ -19,14 +19,14 @@ <td> <p>Defines on which events script should run. Possible values are:</p> <ul> - <li data-list-item-id="e244b14e102cf1b0d4954e8fd455ea77b"><code>frontendStartup</code> - when Trilium frontend starts up (or is refreshed), + <li><code>frontendStartup</code> - when Trilium frontend starts up (or is refreshed), but not on mobile.</li> - <li data-list-item-id="ea8f8ca86e7b351dd86108848ccb9103a"><code>mobileStartup</code> - when Trilium frontend starts up (or is refreshed), + <li><code>mobileStartup</code> - when Trilium frontend starts up (or is refreshed), on mobile.</li> - <li data-list-item-id="e658488cf1a0862603088ef384e41b8b6"><code>backendStartup</code> - when Trilium backend starts up</li> - <li data-list-item-id="ef40ba992fc450d33a18ca4cb031eca66"><code>hourly</code> - run once an hour. You can use additional label <code>runAtHour</code> to + <li><code>backendStartup</code> - when Trilium backend starts up</li> + <li><code>hourly</code> - run once an hour. You can use additional label <code>runAtHour</code> to specify at which hour, on the back-end.</li> - <li data-list-item-id="e07458d4f55b6eb42468a5535b8425c5f"><code>daily</code> - run once a day, on the back-end</li> + <li><code>daily</code> - run once a day, on the back-end</li> </ul> </td> </tr> diff --git a/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Scripting/Frontend Basics/Custom Widgets.html b/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Scripting/Frontend Basics/Custom Widgets.html index c6cfba5bd2..d46ac8b84f 100644 --- a/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Scripting/Frontend Basics/Custom Widgets.html +++ b/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Scripting/Frontend Basics/Custom Widgets.html @@ -107,10 +107,10 @@ class="ck-table-resized"> </td> <td> <ul> - <li data-list-item-id="ec06332efcc3039721606c052f0d913fa">The widget must export a <code>class</code> and not an instance of the class + <li>The widget must export a <code>class</code> and not an instance of the class (e.g. <code>no new</code>) because it needs to be multiplied for each note, so that splits work correctly.</li> - <li data-list-item-id="e8da690a2a8df148f6b5fc04ba1611688">Since the <code>class</code> is exported instead of an instance, the <code>parentWidget</code> getter + <li>Since the <code>class</code> is exported instead of an instance, the <code>parentWidget</code> getter must be <code>static</code>, otherwise the widget is ignored.</li> </ul> </td> @@ -124,7 +124,7 @@ class="ck-table-resized"> </td> <td> <ul> - <li data-list-item-id="efe008d361e224f422582552648e1afe7">Although not mandatory, it's best to use a <code>RightPanelWidget</code> instead + <li>Although not mandatory, it's best to use a <code>RightPanelWidget</code> instead of a <code>BasicWidget</code> or a <code>NoteContextAwareWidget</code>.</li> </ul> </td> diff --git a/docs/Developer Guide/Developer Guide/Documentation.md b/docs/Developer Guide/Developer Guide/Documentation.md index 4f833f93b5..4277ea4b98 100644 --- a/docs/Developer Guide/Developer Guide/Documentation.md +++ b/docs/Developer Guide/Developer Guide/Documentation.md @@ -1,5 +1,5 @@ # Documentation -There are multiple types of documentation for Trilium:<img class="image-style-align-right" src="api/images/fX56iuus8ySW/Documentation_image.png" width="205" height="162"> +There are multiple types of documentation for Trilium:<img class="image-style-align-right" src="api/images/5xrV36TRqPj6/Documentation_image.png" width="205" height="162"> * The _User Guide_ represents the user-facing documentation. This documentation can be browsed by users directly from within Trilium, by pressing <kbd>F1</kbd>. * The _Developer's Guide_ represents a set of Markdown documents that present the internals of Trilium, for developers. diff --git a/docs/User Guide/!!!meta.json b/docs/User Guide/!!!meta.json index 2c8eafa537..b7675da996 100644 --- a/docs/User Guide/!!!meta.json +++ b/docs/User Guide/!!!meta.json @@ -6169,6 +6169,20 @@ "type": "text", "mime": "text/markdown", "attributes": [ + { + "type": "relation", + "name": "internalLink", + "value": "dj3j8dG4th4l", + "isInheritable": false, + "position": 10 + }, + { + "type": "relation", + "name": "internalLink", + "value": "wy8So3yZZlH9", + "isInheritable": false, + "position": 20 + }, { "type": "label", "name": "shareAlias", @@ -6186,14 +6200,14 @@ { "type": "relation", "name": "internalLink", - "value": "dj3j8dG4th4l", + "value": "Gr6xFaF6ioJ5", "isInheritable": false, "position": 40 }, { "type": "relation", "name": "internalLink", - "value": "wy8So3yZZlH9", + "value": "WOcw2SLH6tbX", "isInheritable": false, "position": 50 } From 5a60fdad8ad43e0311fa058a7f731afa51beafb6 Mon Sep 17 00:00:00 2001 From: Elian Doran <contact@eliandoran.me> Date: Sat, 17 Jan 2026 20:08:53 +0200 Subject: [PATCH 084/353] chore(note_detail): map SQL console to own type widget --- apps/client/src/widgets/NoteDetail.tsx | 2 ++ apps/client/src/widgets/note_types.tsx | 7 ++++++- apps/client/src/widgets/type_widgets/SqlConsole.tsx | 5 +++++ 3 files changed, 13 insertions(+), 1 deletion(-) create mode 100644 apps/client/src/widgets/type_widgets/SqlConsole.tsx diff --git a/apps/client/src/widgets/NoteDetail.tsx b/apps/client/src/widgets/NoteDetail.tsx index ef9d68c992..2332dbf2d9 100644 --- a/apps/client/src/widgets/NoteDetail.tsx +++ b/apps/client/src/widgets/NoteDetail.tsx @@ -318,6 +318,8 @@ export async function getExtendedWidgetType(note: FNote | null | undefined, note resultingType = "noteMap"; } else if (type === "text" && (await noteContext?.isReadOnly())) { resultingType = "readOnlyText"; + } else if (note.isTriliumSqlite()) { + resultingType = "sqlConsole"; } else if ((type === "code" || type === "mermaid") && (await noteContext?.isReadOnly())) { resultingType = "readOnlyCode"; } else if (type === "text") { diff --git a/apps/client/src/widgets/note_types.tsx b/apps/client/src/widgets/note_types.tsx index 3f3ab5e6ff..e58960d708 100644 --- a/apps/client/src/widgets/note_types.tsx +++ b/apps/client/src/widgets/note_types.tsx @@ -12,7 +12,7 @@ import { TypeWidgetProps } from "./type_widgets/type_widget"; * A `NoteType` altered by the note detail widget, taking into consideration whether the note is editable or not and adding special note types such as an empty one, * for protected session or attachment information. */ -export type ExtendedNoteType = Exclude<NoteType, "launcher" | "text" | "code"> | "empty" | "readOnlyCode" | "readOnlyText" | "editableText" | "editableCode" | "attachmentDetail" | "attachmentList" | "protectedSession" | "aiChat"; +export type ExtendedNoteType = Exclude<NoteType, "launcher" | "text" | "code"> | "empty" | "readOnlyCode" | "readOnlyText" | "editableText" | "editableCode" | "attachmentDetail" | "attachmentList" | "protectedSession" | "aiChat" | "sqlConsole"; export type TypeWidget = ((props: TypeWidgetProps) => VNode | JSX.Element | undefined); type NoteTypeView = () => (Promise<{ default: TypeWidget } | TypeWidget> | TypeWidget); @@ -140,5 +140,10 @@ export const TYPE_MAPPINGS: Record<ExtendedNoteType, NoteTypeMapping> = { view: () => import("./type_widgets/AiChat"), className: "ai-chat-widget-container", isFullHeight: true + }, + sqlConsole: { + view: () => import("./type_widgets/SqlConsole"), + className: "sql-console-widget-container", + isFullHeight: true } }; diff --git a/apps/client/src/widgets/type_widgets/SqlConsole.tsx b/apps/client/src/widgets/type_widgets/SqlConsole.tsx new file mode 100644 index 0000000000..44a0023803 --- /dev/null +++ b/apps/client/src/widgets/type_widgets/SqlConsole.tsx @@ -0,0 +1,5 @@ +export default function SqlConsole() { + return ( + <div>SQL Console Widget</div> + ); +} From 3d8289d394c34843387eb87da17d54ddcede8eb1 Mon Sep 17 00:00:00 2001 From: Elian Doran <contact@eliandoran.me> Date: Sat, 17 Jan 2026 20:12:16 +0200 Subject: [PATCH 085/353] chore(note_detail): get code editor to show --- apps/client/src/widgets/type_widgets/SqlConsole.tsx | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/apps/client/src/widgets/type_widgets/SqlConsole.tsx b/apps/client/src/widgets/type_widgets/SqlConsole.tsx index 44a0023803..dcb025ad51 100644 --- a/apps/client/src/widgets/type_widgets/SqlConsole.tsx +++ b/apps/client/src/widgets/type_widgets/SqlConsole.tsx @@ -1,5 +1,11 @@ -export default function SqlConsole() { +import SplitEditor from "./helpers/SplitEditor"; +import { TypeWidgetProps } from "./type_widget"; + +export default function SqlConsole(props: TypeWidgetProps) { return ( - <div>SQL Console Widget</div> + <SplitEditor + noteType="code" + {...props} + /> ); } From 9bac07ce62e144cb1c228c0a43ced0cce935c5cc Mon Sep 17 00:00:00 2001 From: Elian Doran <contact@eliandoran.me> Date: Sat, 17 Jan 2026 20:29:15 +0200 Subject: [PATCH 086/353] chore(sql_console): integrate results into preview of split --- apps/client/src/layouts/desktop_layout.tsx | 2 - apps/client/src/widgets/sql_result.tsx | 63 ------------------- .../src/widgets/type_widgets/SqlConsole.tsx | 63 +++++++++++++++++++ 3 files changed, 63 insertions(+), 65 deletions(-) delete mode 100644 apps/client/src/widgets/sql_result.tsx diff --git a/apps/client/src/layouts/desktop_layout.tsx b/apps/client/src/layouts/desktop_layout.tsx index ffc94aec39..c0f43d46ce 100644 --- a/apps/client/src/layouts/desktop_layout.tsx +++ b/apps/client/src/layouts/desktop_layout.tsx @@ -46,7 +46,6 @@ import ScrollPadding from "../widgets/scroll_padding.js"; import SearchResult from "../widgets/search_result.jsx"; import SharedInfo from "../widgets/shared_info.jsx"; import RightPanelContainer from "../widgets/sidebar/RightPanelContainer.jsx"; -import SqlResults from "../widgets/sql_result.js"; import SqlTableSchemas from "../widgets/sql_table_schemas.js"; import TabRowWidget from "../widgets/tab_row.js"; import TabHistoryNavigationButtons from "../widgets/TabHistoryNavigationButtons.jsx"; @@ -167,7 +166,6 @@ export default class DesktopLayout { .child(<NoteDetail />) .child(<NoteList media="screen" />) .child(<SearchResult />) - .child(<SqlResults />) .child(<ScrollPadding />) ) .child(<ApiLog />) diff --git a/apps/client/src/widgets/sql_result.tsx b/apps/client/src/widgets/sql_result.tsx deleted file mode 100644 index 7aaa5739d3..0000000000 --- a/apps/client/src/widgets/sql_result.tsx +++ /dev/null @@ -1,63 +0,0 @@ -import { SqlExecuteResults } from "@triliumnext/commons"; -import { useNoteContext, useTriliumEvent } from "./react/hooks"; -import "./sql_result.css"; -import { useState } from "preact/hooks"; -import Alert from "./react/Alert"; -import { t } from "../services/i18n"; - -export default function SqlResults() { - const { note, ntxId } = useNoteContext(); - const [ results, setResults ] = useState<SqlExecuteResults>(); - - useTriliumEvent("sqlQueryResults", ({ ntxId: eventNtxId, results }) => { - if (eventNtxId !== ntxId) return; - setResults(results); - }) - - const isEnabled = note?.mime === "text/x-sqlite;schema=trilium"; - return ( - <div className={`sql-result-widget ${!isEnabled ? "hidden-ext" : ""}`}> - {isEnabled && ( - results?.length === 1 && Array.isArray(results[0]) && results[0].length === 0 ? ( - <Alert type="info"> - {t("sql_result.no_rows")} - </Alert> - ) : ( - <div className="sql-console-result-container selectable-text"> - {results?.map(rows => { - // inserts, updates - if (typeof rows === "object" && !Array.isArray(rows)) { - return <pre>{JSON.stringify(rows, null, "\t")}</pre> - } - - // selects - return <SqlResultTable rows={rows} /> - })} - </div> - ) - )} - </div> - ) -} - -function SqlResultTable({ rows }: { rows: object[] }) { - if (!rows.length) return; - - return ( - <table className="table table-striped"> - <thead> - <tr> - {Object.keys(rows[0]).map(key => <th>{key}</th>)} - </tr> - </thead> - - <tbody> - {rows.map(row => ( - <tr> - {Object.values(row).map(cell => <td>{cell}</td>)} - </tr> - ))} - </tbody> - </table> - ) -} diff --git a/apps/client/src/widgets/type_widgets/SqlConsole.tsx b/apps/client/src/widgets/type_widgets/SqlConsole.tsx index dcb025ad51..06b30c462c 100644 --- a/apps/client/src/widgets/type_widgets/SqlConsole.tsx +++ b/apps/client/src/widgets/type_widgets/SqlConsole.tsx @@ -1,3 +1,9 @@ +import { SqlExecuteResults } from "@triliumnext/commons"; +import { useState } from "preact/hooks"; + +import { t } from "../../services/i18n"; +import Alert from "../react/Alert"; +import { useTriliumEvent } from "../react/hooks"; import SplitEditor from "./helpers/SplitEditor"; import { TypeWidgetProps } from "./type_widget"; @@ -6,6 +12,63 @@ export default function SqlConsole(props: TypeWidgetProps) { <SplitEditor noteType="code" {...props} + previewContent={<SqlResults {...props} />} /> ); } + +function SqlResults({ note, ntxId }: TypeWidgetProps) { + const [ results, setResults ] = useState<SqlExecuteResults>(); + + useTriliumEvent("sqlQueryResults", ({ ntxId: eventNtxId, results }) => { + if (eventNtxId !== ntxId) return; + setResults(results); + }); + + const isEnabled = note?.mime === "text/x-sqlite;schema=trilium"; + return ( + <div className={`sql-result-widget ${!isEnabled ? "hidden-ext" : ""}`}> + {isEnabled && ( + results?.length === 1 && Array.isArray(results[0]) && results[0].length === 0 ? ( + <Alert type="info"> + {t("sql_result.no_rows")} + </Alert> + ) : ( + <div className="sql-console-result-container selectable-text"> + {results?.map(rows => { + // inserts, updates + if (typeof rows === "object" && !Array.isArray(rows)) { + return <pre>{JSON.stringify(rows, null, "\t")}</pre>; + } + + // selects + return <SqlResultTable rows={rows} />; + })} + </div> + ) + )} + </div> + ); +} + +function SqlResultTable({ rows }: { rows: object[] }) { + if (!rows.length) return; + + return ( + <table className="table table-striped"> + <thead> + <tr> + {Object.keys(rows[0]).map(key => <th>{key}</th>)} + </tr> + </thead> + + <tbody> + {rows.map(row => ( + <tr> + {Object.values(row).map(cell => <td>{cell}</td>)} + </tr> + ))} + </tbody> + </table> + ); +} From 0740788cc83b31da2f6edcbc1d08f890e00022d6 Mon Sep 17 00:00:00 2001 From: Elian Doran <contact@eliandoran.me> Date: Sat, 17 Jan 2026 20:32:28 +0200 Subject: [PATCH 087/353] chore(sql_console): link stylesheet --- .../widgets/{sql_result.css => type_widgets/SqlConsole.css} | 0 apps/client/src/widgets/type_widgets/SqlConsole.tsx | 2 ++ apps/server/src/app.ts | 4 ++-- 3 files changed, 4 insertions(+), 2 deletions(-) rename apps/client/src/widgets/{sql_result.css => type_widgets/SqlConsole.css} (100%) diff --git a/apps/client/src/widgets/sql_result.css b/apps/client/src/widgets/type_widgets/SqlConsole.css similarity index 100% rename from apps/client/src/widgets/sql_result.css rename to apps/client/src/widgets/type_widgets/SqlConsole.css diff --git a/apps/client/src/widgets/type_widgets/SqlConsole.tsx b/apps/client/src/widgets/type_widgets/SqlConsole.tsx index 06b30c462c..8c92002994 100644 --- a/apps/client/src/widgets/type_widgets/SqlConsole.tsx +++ b/apps/client/src/widgets/type_widgets/SqlConsole.tsx @@ -1,3 +1,5 @@ +import "./SqlConsole.css"; + import { SqlExecuteResults } from "@triliumnext/commons"; import { useState } from "preact/hooks"; diff --git a/apps/server/src/app.ts b/apps/server/src/app.ts index d3d09c5c70..0ab7a620c8 100644 --- a/apps/server/src/app.ts +++ b/apps/server/src/app.ts @@ -3,6 +3,7 @@ import "./becca/becca_loader.js"; import compression from "compression"; import cookieParser from "cookie-parser"; +import { renderFile } from "ejs"; import express from "express"; import { auth } from "express-openid-connect"; import helmet from "helmet"; @@ -34,8 +35,7 @@ export default async function buildApp() { // view engine setup app.set("views", path.join(assetsDir, "views")); - const ejs = await import("ejs"); - app.engine("ejs", (filePath, options, callback) => ejs.renderFile(filePath, options, callback)); + app.engine("ejs", (filePath, options, callback) => renderFile(filePath, options, callback)); app.set("view engine", "ejs"); app.use((req, res, next) => { From f29427684940e6b9f96528a834ce3dfa08de210c Mon Sep 17 00:00:00 2001 From: Elian Doran <contact@eliandoran.me> Date: Sat, 17 Jan 2026 20:38:44 +0200 Subject: [PATCH 088/353] fix(sql_console): full-height not respected --- apps/client/src/widgets/NoteDetail.tsx | 3 +-- apps/client/src/widgets/scroll_padding.tsx | 9 ++++++--- apps/client/src/widgets/type_widgets/SqlConsole.css | 13 ++++++++----- 3 files changed, 15 insertions(+), 10 deletions(-) diff --git a/apps/client/src/widgets/NoteDetail.tsx b/apps/client/src/widgets/NoteDetail.tsx index 2332dbf2d9..ebce85a0cd 100644 --- a/apps/client/src/widgets/NoteDetail.tsx +++ b/apps/client/src/widgets/NoteDetail.tsx @@ -344,9 +344,8 @@ export function checkFullHeight(noteContext: NoteContext | undefined, type: Exte // https://github.com/zadam/trilium/issues/2522 const isBackendNote = noteContext?.noteId === "_backendLog"; - const isSqlNote = noteContext.note?.mime === "text/x-sqlite;schema=trilium"; const isFullHeightNoteType = type && TYPE_MAPPINGS[type].isFullHeight; - return (!noteContext?.hasNoteList() && isFullHeightNoteType && !isSqlNote) + return (!noteContext?.hasNoteList() && isFullHeightNoteType) || noteContext?.viewScope?.viewMode === "attachments" || isBackendNote; } diff --git a/apps/client/src/widgets/scroll_padding.tsx b/apps/client/src/widgets/scroll_padding.tsx index d42098672b..549e53f441 100644 --- a/apps/client/src/widgets/scroll_padding.tsx +++ b/apps/client/src/widgets/scroll_padding.tsx @@ -1,11 +1,14 @@ import { useEffect, useRef, useState } from "preact/hooks"; + import { useNoteContext } from "./react/hooks"; export default function ScrollPadding() { const { note, parentComponent, ntxId, viewScope } = useNoteContext(); const ref = useRef<HTMLDivElement>(null); const [height, setHeight] = useState<number>(10); - const isEnabled = ["text", "code"].includes(note?.type ?? "") && viewScope?.viewMode === "default"; + const isEnabled = ["text", "code"].includes(note?.type ?? "") + && viewScope?.viewMode === "default" + && !note?.isTriliumSqlite(); const refreshHeight = () => { if (!ref.current) return; @@ -37,6 +40,6 @@ export default function ScrollPadding() { style={{ height }} onClick={() => parentComponent.triggerCommand("scrollToEnd", { ntxId })} /> - : <div></div> - ) + : <div /> + ); } diff --git a/apps/client/src/widgets/type_widgets/SqlConsole.css b/apps/client/src/widgets/type_widgets/SqlConsole.css index 63b5621edd..2d19e90982 100644 --- a/apps/client/src/widgets/type_widgets/SqlConsole.css +++ b/apps/client/src/widgets/type_widgets/SqlConsole.css @@ -1,7 +1,10 @@ -.sql-result-widget { - padding: 15px; +.sql-console-widget-container { + .note-detail-split-preview { + overflow: auto; + } + + .sql-console-result-container td { + white-space: preserve; + } } -.sql-console-result-container td { - white-space: preserve; -} \ No newline at end of file From 5053e744473356b963d8c8bd69e76723655d5c17 Mon Sep 17 00:00:00 2001 From: Elian Doran <contact@eliandoran.me> Date: Sat, 17 Jan 2026 20:41:45 +0200 Subject: [PATCH 089/353] fix(sql_console): note type switcher showing up --- apps/client/src/widgets/layout/InlineTitle.tsx | 6 ++++-- apps/client/src/widgets/layout/NoteTypeSwitcher.tsx | 2 +- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/apps/client/src/widgets/layout/InlineTitle.tsx b/apps/client/src/widgets/layout/InlineTitle.tsx index ce44681e66..b0e7e4e8a5 100644 --- a/apps/client/src/widgets/layout/InlineTitle.tsx +++ b/apps/client/src/widgets/layout/InlineTitle.tsx @@ -7,6 +7,7 @@ import { ComponentChild } from "preact"; import { useLayoutEffect, useMemo, useRef, useState } from "preact/hooks"; import { Trans } from "react-i18next"; +import FNote from "../../entities/fnote"; import { ViewScope } from "../../services/link"; import { formatDateTime } from "../../utils/formatters"; import NoteIcon from "../note_icon"; @@ -69,9 +70,10 @@ export default function InlineTitle() { ); } -function shouldShow(noteId: string | undefined, type: NoteType | undefined, viewScope: ViewScope | undefined) { +function shouldShow(note: FNote, type: NoteType | undefined, viewScope: ViewScope | undefined) { if (viewScope?.viewMode !== "default") return false; - if (noteId?.startsWith("_options")) return true; + if (note.noteId?.startsWith("_options")) return true; + if (note.isTriliumSqlite()) return false; return type && supportedNoteTypes.has(type); } diff --git a/apps/client/src/widgets/layout/NoteTypeSwitcher.tsx b/apps/client/src/widgets/layout/NoteTypeSwitcher.tsx index 8ac68ae833..e345249add 100644 --- a/apps/client/src/widgets/layout/NoteTypeSwitcher.tsx +++ b/apps/client/src/widgets/layout/NoteTypeSwitcher.tsx @@ -39,7 +39,7 @@ export default function NoteTypeSwitcher() { const currentNoteTypeData = useMemo(() => NOTE_TYPES.find(t => t.type === currentNoteType), [ currentNoteType ]); const { builtinTemplates, collectionTemplates } = useBuiltinTemplates(); - return (currentNoteType && supportedNoteTypes.has(currentNoteType) && + return (currentNoteType && supportedNoteTypes.has(currentNoteType) && !note?.isTriliumSqlite() && <div className="note-type-switcher" onWheel={onWheelHorizontalScroll} From 9010e0b1ce2b73ac2b9c5f233c34e215dced932e Mon Sep 17 00:00:00 2001 From: Elian Doran <contact@eliandoran.me> Date: Sat, 17 Jan 2026 20:44:03 +0200 Subject: [PATCH 090/353] chore(sql_console): reverse preview and code sections --- apps/client/src/widgets/type_widgets/SqlConsole.css | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/apps/client/src/widgets/type_widgets/SqlConsole.css b/apps/client/src/widgets/type_widgets/SqlConsole.css index 2d19e90982..15272c2bc8 100644 --- a/apps/client/src/widgets/type_widgets/SqlConsole.css +++ b/apps/client/src/widgets/type_widgets/SqlConsole.css @@ -1,4 +1,8 @@ .sql-console-widget-container { + .note-detail-split.split-vertical { + flex-direction: column-reverse; + } + .note-detail-split-preview { overflow: auto; } From 52ed1750ac53c482deae466caea1ff180c61ca1b Mon Sep 17 00:00:00 2001 From: Elian Doran <contact@eliandoran.me> Date: Sat, 17 Jan 2026 20:52:53 +0200 Subject: [PATCH 091/353] fix(sql_console): runtime error for inline title --- apps/client/src/widgets/layout/InlineTitle.tsx | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/apps/client/src/widgets/layout/InlineTitle.tsx b/apps/client/src/widgets/layout/InlineTitle.tsx index b0e7e4e8a5..9070902535 100644 --- a/apps/client/src/widgets/layout/InlineTitle.tsx +++ b/apps/client/src/widgets/layout/InlineTitle.tsx @@ -23,12 +23,12 @@ const supportedNoteTypes = new Set<NoteType>([ export default function InlineTitle() { const { note, parentComponent, viewScope } = useNoteContext(); const type = useNoteProperty(note, "type"); - const [ shown, setShown ] = useState(shouldShow(note?.noteId, type, viewScope)); + const [ shown, setShown ] = useState(shouldShow(note, type, viewScope)); const containerRef = useRef<HTMLDivElement>(null); const [ titleHidden, setTitleHidden ] = useState(false); useLayoutEffect(() => { - setShown(shouldShow(note?.noteId, type, viewScope)); + setShown(shouldShow(note, type, viewScope)); }, [ note, type, viewScope ]); useLayoutEffect(() => { @@ -70,10 +70,10 @@ export default function InlineTitle() { ); } -function shouldShow(note: FNote, type: NoteType | undefined, viewScope: ViewScope | undefined) { +function shouldShow(note: FNote | null | undefined, type: NoteType | undefined, viewScope: ViewScope | undefined) { if (viewScope?.viewMode !== "default") return false; - if (note.noteId?.startsWith("_options")) return true; - if (note.isTriliumSqlite()) return false; + if (note?.noteId?.startsWith("_options")) return true; + if (note?.isTriliumSqlite()) return false; return type && supportedNoteTypes.has(type); } From 6972a4b9011f5f8178c1ea4eb498e2435f52b307 Mon Sep 17 00:00:00 2001 From: Elian Doran <contact@eliandoran.me> Date: Sat, 17 Jan 2026 20:58:26 +0200 Subject: [PATCH 092/353] fix(note_detail): preview leaks between mermaid & SQL console --- apps/client/src/widgets/NoteDetail.tsx | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/apps/client/src/widgets/NoteDetail.tsx b/apps/client/src/widgets/NoteDetail.tsx index ebce85a0cd..bb47dc80c1 100644 --- a/apps/client/src/widgets/NoteDetail.tsx +++ b/apps/client/src/widgets/NoteDetail.tsx @@ -265,9 +265,13 @@ function useNoteInfo() { const [ note, setNote ] = useState<FNote | null | undefined>(); const [ type, setType ] = useState<ExtendedNoteType>(); const [ mime, setMime ] = useState<string>(); + const refreshIdRef = useRef(0); function refresh() { + const refreshId = ++refreshIdRef.current; + getExtendedWidgetType(actualNote, noteContext).then(type => { + if (refreshId !== refreshIdRef.current) return; setNote(actualNote); setType(type); setMime(actualNote?.mime); From 781de9a1fbc9830b58c511d52734bc468f6126bf Mon Sep 17 00:00:00 2001 From: Elian Doran <contact@eliandoran.me> Date: Sat, 17 Jan 2026 21:22:22 +0200 Subject: [PATCH 093/353] feat(sql_console): basic integration of Tabulator --- .../src/widgets/type_widgets/SqlConsole.tsx | 26 ++++++++----------- 1 file changed, 11 insertions(+), 15 deletions(-) diff --git a/apps/client/src/widgets/type_widgets/SqlConsole.tsx b/apps/client/src/widgets/type_widgets/SqlConsole.tsx index 8c92002994..0c6651d806 100644 --- a/apps/client/src/widgets/type_widgets/SqlConsole.tsx +++ b/apps/client/src/widgets/type_widgets/SqlConsole.tsx @@ -4,6 +4,7 @@ import { SqlExecuteResults } from "@triliumnext/commons"; import { useState } from "preact/hooks"; import { t } from "../../services/i18n"; +import Tabulator from "../collections/table/tabulator"; import Alert from "../react/Alert"; import { useTriliumEvent } from "../react/hooks"; import SplitEditor from "./helpers/SplitEditor"; @@ -57,20 +58,15 @@ function SqlResultTable({ rows }: { rows: object[] }) { if (!rows.length) return; return ( - <table className="table table-striped"> - <thead> - <tr> - {Object.keys(rows[0]).map(key => <th>{key}</th>)} - </tr> - </thead> - - <tbody> - {rows.map(row => ( - <tr> - {Object.values(row).map(cell => <td>{cell}</td>)} - </tr> - ))} - </tbody> - </table> + <Tabulator + layout="fitDataFill" + columns={[ + ...Object.keys(rows[0]).map(key => ({ + title: key, + field: key + })) + ]} + data={rows} + /> ); } From 2ecfbbf284f7e58b3b94560de715d69c3d823654 Mon Sep 17 00:00:00 2001 From: Elian Doran <contact@eliandoran.me> Date: Sat, 17 Jan 2026 21:26:28 +0200 Subject: [PATCH 094/353] feat(sql_console): improve fit & solve build error --- .../widgets/collections/table/tabulator.tsx | 24 +++++++++++-------- apps/client/src/widgets/sql_table_schemas.css | 11 +-------- .../src/widgets/type_widgets/SqlConsole.css | 8 +++++-- 3 files changed, 21 insertions(+), 22 deletions(-) diff --git a/apps/client/src/widgets/collections/table/tabulator.tsx b/apps/client/src/widgets/collections/table/tabulator.tsx index 31fb8d4f85..d908104cec 100644 --- a/apps/client/src/widgets/collections/table/tabulator.tsx +++ b/apps/client/src/widgets/collections/table/tabulator.tsx @@ -1,18 +1,20 @@ -import { useContext, useEffect, useLayoutEffect, useRef } from "preact/hooks"; -import { EventCallBackMethods, Module, Options, Tabulator as VanillaTabulator } from "tabulator-tables"; import "tabulator-tables/dist/css/tabulator.css"; import "../../../../src/stylesheets/table.css"; -import { ParentComponent, renderReactWidget } from "../../react/react_utils"; -import { JSX } from "preact/jsx-runtime"; + import { isValidElement, RefObject } from "preact"; +import { useContext, useEffect, useLayoutEffect, useRef } from "preact/hooks"; +import { JSX } from "preact/jsx-runtime"; +import { EventCallBackMethods, Module, Options, Tabulator as VanillaTabulator } from "tabulator-tables"; + +import { ParentComponent, renderReactWidget } from "../../react/react_utils"; interface TableProps<T> extends Omit<Options, "data" | "footerElement" | "index"> { - tabulatorRef: RefObject<VanillaTabulator>; + tabulatorRef?: RefObject<VanillaTabulator>; className?: string; data?: T[]; modules?: (new (table: VanillaTabulator) => Module)[]; events?: Partial<EventCallBackMethods>; - index: keyof T; + index?: keyof T; footerElement?: string | HTMLElement | JSX.Element; onReady?: () => void; } @@ -43,7 +45,9 @@ export default function Tabulator<T>({ className, columns, data, modules, tabula tabulator.on("tableBuilt", () => { tabulatorRef.current = tabulator; - externalTabulatorRef.current = tabulator; + if (externalTabulatorRef) { + externalTabulatorRef.current = tabulator; + } onReady?.(); }); @@ -62,12 +66,12 @@ export default function Tabulator<T>({ className, columns, data, modules, tabula for (const [ eventName, handler ] of Object.entries(events)) { tabulator.off(eventName as keyof EventCallBackMethods, handler); } - } + }; }, Object.values(events ?? {})); // Change in data. - useEffect(() => { tabulatorRef.current?.setData(data) }, [ data ]); - useEffect(() => { columns && tabulatorRef.current?.setColumns(columns)}, [ data]); + useEffect(() => { tabulatorRef.current?.setData(data); }, [ data ]); + useEffect(() => { columns && tabulatorRef.current?.setColumns(columns); }, [ data ]); return ( <div ref={containerRef} className={className} /> diff --git a/apps/client/src/widgets/sql_table_schemas.css b/apps/client/src/widgets/sql_table_schemas.css index d6c1c8f95e..1dcf3919fe 100644 --- a/apps/client/src/widgets/sql_table_schemas.css +++ b/apps/client/src/widgets/sql_table_schemas.css @@ -19,15 +19,6 @@ cursor: pointer; } -.sql-console-result-container { - width: 100%; - font-size: smaller; - margin-top: 10px; - flex-grow: 1; - overflow: auto; - min-height: 0; -} - .table-schema td { padding: 5px; } @@ -40,4 +31,4 @@ /* Data type */ .dropdown .table-schema td:nth-child(2) { color: var(--muted-text-color); -} \ No newline at end of file +} diff --git a/apps/client/src/widgets/type_widgets/SqlConsole.css b/apps/client/src/widgets/type_widgets/SqlConsole.css index 15272c2bc8..3f77b38f71 100644 --- a/apps/client/src/widgets/type_widgets/SqlConsole.css +++ b/apps/client/src/widgets/type_widgets/SqlConsole.css @@ -7,8 +7,12 @@ overflow: auto; } - .sql-console-result-container td { - white-space: preserve; + .sql-console-result-container { + width: 100%; + font-size: smaller; + flex-grow: 1; + overflow: auto; + min-height: 0; } } From 6ae74b3181356683aada977a8011328645c7b63b Mon Sep 17 00:00:00 2001 From: Elian Doran <contact@eliandoran.me> Date: Sat, 17 Jan 2026 21:35:58 +0200 Subject: [PATCH 095/353] feat(sql_console): make scrolls and headers always visible --- .../src/widgets/type_widgets/SqlConsole.css | 21 +++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/apps/client/src/widgets/type_widgets/SqlConsole.css b/apps/client/src/widgets/type_widgets/SqlConsole.css index 3f77b38f71..aad40abbba 100644 --- a/apps/client/src/widgets/type_widgets/SqlConsole.css +++ b/apps/client/src/widgets/type_widgets/SqlConsole.css @@ -7,12 +7,21 @@ overflow: auto; } - .sql-console-result-container { - width: 100%; - font-size: smaller; - flex-grow: 1; - overflow: auto; - min-height: 0; + .sql-result-widget { + height: 100%; + + > .sql-console-result-container { + width: 100%; + height: 100%; + font-size: smaller; + flex-grow: 1; + overflow: auto; + min-height: 0; + + > .tabulator { + height: 100%; + } + } } } From 7c18025098d1348820817f1c5036687fe29be64a Mon Sep 17 00:00:00 2001 From: Elian Doran <contact@eliandoran.me> Date: Sat, 17 Jan 2026 21:41:06 +0200 Subject: [PATCH 096/353] feat(sql_console): reduce spacing to fit more content --- apps/client/src/widgets/type_widgets/SqlConsole.css | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/apps/client/src/widgets/type_widgets/SqlConsole.css b/apps/client/src/widgets/type_widgets/SqlConsole.css index aad40abbba..24406999b9 100644 --- a/apps/client/src/widgets/type_widgets/SqlConsole.css +++ b/apps/client/src/widgets/type_widgets/SqlConsole.css @@ -20,6 +20,15 @@ > .tabulator { height: 100%; + --cell-vert-padding-size: 4px; + + > .tabulator-tableholder { + padding: 0; + } + + .tabulator-col-content { + padding: 4px !important; + } } } } From c6896a4b33bef171baf076410f992efd38c41f89 Mon Sep 17 00:00:00 2001 From: Elian Doran <contact@eliandoran.me> Date: Sat, 17 Jan 2026 21:43:21 +0200 Subject: [PATCH 097/353] feat(sql_console): reduce column width --- apps/client/src/widgets/type_widgets/SqlConsole.tsx | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/apps/client/src/widgets/type_widgets/SqlConsole.tsx b/apps/client/src/widgets/type_widgets/SqlConsole.tsx index 0c6651d806..c66473fb5d 100644 --- a/apps/client/src/widgets/type_widgets/SqlConsole.tsx +++ b/apps/client/src/widgets/type_widgets/SqlConsole.tsx @@ -63,7 +63,10 @@ function SqlResultTable({ rows }: { rows: object[] }) { columns={[ ...Object.keys(rows[0]).map(key => ({ title: key, - field: key + field: key, + minWidth: 100, + maxWidth: 400, + widthGrow: 1 })) ]} data={rows} From 769f3db21c8d8dc0ebe019bf1ffe74d7e657ec27 Mon Sep 17 00:00:00 2001 From: Elian Doran <contact@eliandoran.me> Date: Sat, 17 Jan 2026 21:45:10 +0200 Subject: [PATCH 098/353] feat(sql_console): make columns resizable --- apps/client/src/widgets/type_widgets/SqlConsole.tsx | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/apps/client/src/widgets/type_widgets/SqlConsole.tsx b/apps/client/src/widgets/type_widgets/SqlConsole.tsx index c66473fb5d..5042b09681 100644 --- a/apps/client/src/widgets/type_widgets/SqlConsole.tsx +++ b/apps/client/src/widgets/type_widgets/SqlConsole.tsx @@ -2,6 +2,7 @@ import "./SqlConsole.css"; import { SqlExecuteResults } from "@triliumnext/commons"; import { useState } from "preact/hooks"; +import { ResizeColumnsModule } from "tabulator-tables"; import { t } from "../../services/i18n"; import Tabulator from "../collections/table/tabulator"; @@ -60,13 +61,15 @@ function SqlResultTable({ rows }: { rows: object[] }) { return ( <Tabulator layout="fitDataFill" + modules={[ ResizeColumnsModule ]} columns={[ ...Object.keys(rows[0]).map(key => ({ title: key, field: key, + width: 250, minWidth: 100, - maxWidth: 400, - widthGrow: 1 + widthGrow: 1, + resizable: true })) ]} data={rows} From 630d16b722f2a3618af4228c9546514a6ee6c241 Mon Sep 17 00:00:00 2001 From: Elian Doran <contact@eliandoran.me> Date: Sat, 17 Jan 2026 21:47:02 +0200 Subject: [PATCH 099/353] feat(sql_console): enable sorting --- apps/client/src/widgets/type_widgets/SqlConsole.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/client/src/widgets/type_widgets/SqlConsole.tsx b/apps/client/src/widgets/type_widgets/SqlConsole.tsx index 5042b09681..e6682caa34 100644 --- a/apps/client/src/widgets/type_widgets/SqlConsole.tsx +++ b/apps/client/src/widgets/type_widgets/SqlConsole.tsx @@ -2,7 +2,7 @@ import "./SqlConsole.css"; import { SqlExecuteResults } from "@triliumnext/commons"; import { useState } from "preact/hooks"; -import { ResizeColumnsModule } from "tabulator-tables"; +import { ResizeColumnsModule, SortModule } from "tabulator-tables"; import { t } from "../../services/i18n"; import Tabulator from "../collections/table/tabulator"; @@ -61,7 +61,7 @@ function SqlResultTable({ rows }: { rows: object[] }) { return ( <Tabulator layout="fitDataFill" - modules={[ ResizeColumnsModule ]} + modules={[ ResizeColumnsModule, SortModule ]} columns={[ ...Object.keys(rows[0]).map(key => ({ title: key, From f10373d54f147a59c20002672e9c3578c7e71caf Mon Sep 17 00:00:00 2001 From: Elian Doran <contact@eliandoran.me> Date: Sat, 17 Jan 2026 22:02:47 +0200 Subject: [PATCH 100/353] feat(sql_console): add clipboard --- apps/client/src/widgets/type_widgets/SqlConsole.tsx | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/apps/client/src/widgets/type_widgets/SqlConsole.tsx b/apps/client/src/widgets/type_widgets/SqlConsole.tsx index e6682caa34..081ab7ad33 100644 --- a/apps/client/src/widgets/type_widgets/SqlConsole.tsx +++ b/apps/client/src/widgets/type_widgets/SqlConsole.tsx @@ -2,7 +2,7 @@ import "./SqlConsole.css"; import { SqlExecuteResults } from "@triliumnext/commons"; import { useState } from "preact/hooks"; -import { ResizeColumnsModule, SortModule } from "tabulator-tables"; +import { ClipboardModule, EditModule, ExportModule, KeybindingsModule, ResizeColumnsModule, SelectRangeModule, SelectRowModule, SortModule } from "tabulator-tables"; import { t } from "../../services/i18n"; import Tabulator from "../collections/table/tabulator"; @@ -61,7 +61,14 @@ function SqlResultTable({ rows }: { rows: object[] }) { return ( <Tabulator layout="fitDataFill" - modules={[ ResizeColumnsModule, SortModule ]} + modules={[ ResizeColumnsModule, SortModule, SelectRangeModule, ClipboardModule, KeybindingsModule, EditModule, ExportModule, SelectRowModule ]} + selectableRange + clipboard="copy" + clipboardCopyRowRange="range" + clipboardCopyConfig={{ + rowHeaders: false, + columnHeaders: false + }} columns={[ ...Object.keys(rows[0]).map(key => ({ title: key, From bc79ff684503ef982df484823d7e5d77de5ea8b7 Mon Sep 17 00:00:00 2001 From: Elian Doran <contact@eliandoran.me> Date: Sat, 17 Jan 2026 22:09:24 +0200 Subject: [PATCH 101/353] feat(sql_console): row numbers --- apps/client/src/widgets/type_widgets/SqlConsole.tsx | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/apps/client/src/widgets/type_widgets/SqlConsole.tsx b/apps/client/src/widgets/type_widgets/SqlConsole.tsx index 081ab7ad33..5fadec7093 100644 --- a/apps/client/src/widgets/type_widgets/SqlConsole.tsx +++ b/apps/client/src/widgets/type_widgets/SqlConsole.tsx @@ -2,7 +2,7 @@ import "./SqlConsole.css"; import { SqlExecuteResults } from "@triliumnext/commons"; import { useState } from "preact/hooks"; -import { ClipboardModule, EditModule, ExportModule, KeybindingsModule, ResizeColumnsModule, SelectRangeModule, SelectRowModule, SortModule } from "tabulator-tables"; +import { ClipboardModule, EditModule, ExportModule, FormatModule, FrozenColumnsModule, KeybindingsModule, ResizeColumnsModule, SelectRangeModule, SelectRowModule, SortModule } from "tabulator-tables"; import { t } from "../../services/i18n"; import Tabulator from "../collections/table/tabulator"; @@ -61,7 +61,7 @@ function SqlResultTable({ rows }: { rows: object[] }) { return ( <Tabulator layout="fitDataFill" - modules={[ ResizeColumnsModule, SortModule, SelectRangeModule, ClipboardModule, KeybindingsModule, EditModule, ExportModule, SelectRowModule ]} + modules={[ ResizeColumnsModule, SortModule, SelectRangeModule, ClipboardModule, KeybindingsModule, EditModule, ExportModule, SelectRowModule, FormatModule, FrozenColumnsModule ]} selectableRange clipboard="copy" clipboardCopyRowRange="range" @@ -70,6 +70,13 @@ function SqlResultTable({ rows }: { rows: object[] }) { columnHeaders: false }} columns={[ + { + title: "#", + formatter: "rownum", + width: 60, + hozAlign: "right", + frozen: true + }, ...Object.keys(rows[0]).map(key => ({ title: key, field: key, From 2c87f609f37e60643013c6920066c873ca004750 Mon Sep 17 00:00:00 2001 From: Elian Doran <contact@eliandoran.me> Date: Sat, 17 Jan 2026 22:13:13 +0200 Subject: [PATCH 102/353] feat(sql_console): add filter --- apps/client/src/widgets/type_widgets/SqlConsole.tsx | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/apps/client/src/widgets/type_widgets/SqlConsole.tsx b/apps/client/src/widgets/type_widgets/SqlConsole.tsx index 5fadec7093..9551f60b70 100644 --- a/apps/client/src/widgets/type_widgets/SqlConsole.tsx +++ b/apps/client/src/widgets/type_widgets/SqlConsole.tsx @@ -2,7 +2,7 @@ import "./SqlConsole.css"; import { SqlExecuteResults } from "@triliumnext/commons"; import { useState } from "preact/hooks"; -import { ClipboardModule, EditModule, ExportModule, FormatModule, FrozenColumnsModule, KeybindingsModule, ResizeColumnsModule, SelectRangeModule, SelectRowModule, SortModule } from "tabulator-tables"; +import { ClipboardModule, EditModule, ExportModule, FilterModule, FormatModule, FrozenColumnsModule, KeybindingsModule, ResizeColumnsModule, SelectRangeModule, SelectRowModule, SortModule } from "tabulator-tables"; import { t } from "../../services/i18n"; import Tabulator from "../collections/table/tabulator"; @@ -61,7 +61,7 @@ function SqlResultTable({ rows }: { rows: object[] }) { return ( <Tabulator layout="fitDataFill" - modules={[ ResizeColumnsModule, SortModule, SelectRangeModule, ClipboardModule, KeybindingsModule, EditModule, ExportModule, SelectRowModule, FormatModule, FrozenColumnsModule ]} + modules={[ ResizeColumnsModule, SortModule, SelectRangeModule, ClipboardModule, KeybindingsModule, EditModule, ExportModule, SelectRowModule, FormatModule, FrozenColumnsModule, FilterModule ]} selectableRange clipboard="copy" clipboardCopyRowRange="range" @@ -83,7 +83,8 @@ function SqlResultTable({ rows }: { rows: object[] }) { width: 250, minWidth: 100, widthGrow: 1, - resizable: true + resizable: true, + headerFilter: true })) ]} data={rows} From 476247beb51bdc5516089fa5cb23b0de24894397 Mon Sep 17 00:00:00 2001 From: Elian Doran <contact@eliandoran.me> Date: Sat, 17 Jan 2026 22:29:20 +0200 Subject: [PATCH 103/353] feat(sql_console): increase size for results --- apps/client/src/widgets/type_widgets/SqlConsole.tsx | 3 +++ 1 file changed, 3 insertions(+) diff --git a/apps/client/src/widgets/type_widgets/SqlConsole.tsx b/apps/client/src/widgets/type_widgets/SqlConsole.tsx index 9551f60b70..e68f1fb081 100644 --- a/apps/client/src/widgets/type_widgets/SqlConsole.tsx +++ b/apps/client/src/widgets/type_widgets/SqlConsole.tsx @@ -17,6 +17,9 @@ export default function SqlConsole(props: TypeWidgetProps) { noteType="code" {...props} previewContent={<SqlResults {...props} />} + splitOptions={{ + sizes: [ 90, 10 ] + }} /> ); } From 4c4e5b85e9b94fe89a89a70faeb34c67c14890fe Mon Sep 17 00:00:00 2001 From: Elian Doran <contact@eliandoran.me> Date: Sat, 17 Jan 2026 22:38:18 +0200 Subject: [PATCH 104/353] chore(sql_console): integrate table reference --- apps/client/src/layouts/desktop_layout.tsx | 2 - apps/client/src/widgets/sql_table_schemas.css | 34 ---------- apps/client/src/widgets/sql_table_schemas.tsx | 46 -------------- .../src/widgets/type_widgets/SqlConsole.css | 41 ++++++++++++ .../src/widgets/type_widgets/SqlConsole.tsx | 63 ++++++++++++++++--- .../type_widgets/helpers/SplitEditor.tsx | 26 ++++---- 6 files changed, 109 insertions(+), 103 deletions(-) delete mode 100644 apps/client/src/widgets/sql_table_schemas.css delete mode 100644 apps/client/src/widgets/sql_table_schemas.tsx diff --git a/apps/client/src/layouts/desktop_layout.tsx b/apps/client/src/layouts/desktop_layout.tsx index c0f43d46ce..511f6f9c00 100644 --- a/apps/client/src/layouts/desktop_layout.tsx +++ b/apps/client/src/layouts/desktop_layout.tsx @@ -46,7 +46,6 @@ import ScrollPadding from "../widgets/scroll_padding.js"; import SearchResult from "../widgets/search_result.jsx"; import SharedInfo from "../widgets/shared_info.jsx"; import RightPanelContainer from "../widgets/sidebar/RightPanelContainer.jsx"; -import SqlTableSchemas from "../widgets/sql_table_schemas.js"; import TabRowWidget from "../widgets/tab_row.js"; import TabHistoryNavigationButtons from "../widgets/TabHistoryNavigationButtons.jsx"; import TitleBarButtons from "../widgets/title_bar_buttons.jsx"; @@ -162,7 +161,6 @@ export default class DesktopLayout { .child(<SharedInfo />) ) .optChild(!isNewLayout, <PromotedAttributes />) - .child(<SqlTableSchemas />) .child(<NoteDetail />) .child(<NoteList media="screen" />) .child(<SearchResult />) diff --git a/apps/client/src/widgets/sql_table_schemas.css b/apps/client/src/widgets/sql_table_schemas.css deleted file mode 100644 index 1dcf3919fe..0000000000 --- a/apps/client/src/widgets/sql_table_schemas.css +++ /dev/null @@ -1,34 +0,0 @@ -.sql-table-schemas-widget { - padding: 12px; - padding-inline-end: 10%; - contain: none !important; -} - -.sql-table-schemas > .dropdown { - display: inline-block !important; -} - -.sql-table-schemas button.btn { - padding: 0.25rem 0.4rem; - font-size: 0.875rem; - line-height: 0.5; - border: 1px solid var(--button-border-color); - border-radius: var(--button-border-radius); - background: var(--button-background-color); - color: var(--button-text-color); - cursor: pointer; -} - -.table-schema td { - padding: 5px; -} - -.dropdown .table-schema { - font-family: var(--monospace-font-family); - font-size: .85em; -} - -/* Data type */ -.dropdown .table-schema td:nth-child(2) { - color: var(--muted-text-color); -} diff --git a/apps/client/src/widgets/sql_table_schemas.tsx b/apps/client/src/widgets/sql_table_schemas.tsx deleted file mode 100644 index 3605c2f956..0000000000 --- a/apps/client/src/widgets/sql_table_schemas.tsx +++ /dev/null @@ -1,46 +0,0 @@ -import { useEffect, useState } from "preact/hooks"; -import { t } from "../services/i18n"; -import { useNoteContext } from "./react/hooks"; -import "./sql_table_schemas.css"; -import { SchemaResponse } from "@triliumnext/commons"; -import server from "../services/server"; -import Dropdown from "./react/Dropdown"; - -export default function SqlTableSchemas() { - const { note } = useNoteContext(); - const [ schemas, setSchemas ] = useState<SchemaResponse[]>(); - - useEffect(() => { - server.get<SchemaResponse[]>("sql/schema").then(setSchemas); - }, []); - - const isEnabled = note?.mime === "text/x-sqlite;schema=trilium" && schemas; - return ( - <div className={`sql-table-schemas-widget ${!isEnabled ? "hidden-ext" : ""}`}> - {isEnabled && ( - <> - {t("sql_table_schemas.tables")}{": "} - - <span class="sql-table-schemas"> - {schemas.map(({ name, columns }) => ( - <> - <Dropdown text={name} noSelectButtonStyle hideToggleArrow - > - <table className="table-schema"> - {columns.map(column => ( - <tr> - <td>{column.name}</td> - <td>{column.type}</td> - </tr> - ))} - </table> - </Dropdown> - {" "} - </> - ))} - </span> - </> - )} - </div> - ) -} \ No newline at end of file diff --git a/apps/client/src/widgets/type_widgets/SqlConsole.css b/apps/client/src/widgets/type_widgets/SqlConsole.css index 24406999b9..2aec590703 100644 --- a/apps/client/src/widgets/type_widgets/SqlConsole.css +++ b/apps/client/src/widgets/type_widgets/SqlConsole.css @@ -32,5 +32,46 @@ } } } + + .sql-table-schemas-widget { + padding: 12px; + padding-inline-end: 10%; + contain: none !important; + + .sql-table-schemas { + display: flex; + flex-wrap: wrap; + gap: 0.25em; + } + + > .dropdown { + display: inline-block !important; + } + + button.btn { + padding: 0.25rem 0.4rem; + font-size: 0.875rem; + line-height: 0.5; + border: 1px solid var(--button-border-color); + border-radius: var(--button-border-radius); + background: var(--button-background-color); + color: var(--button-text-color); + cursor: pointer; + } + + .table-schema td { + padding: 5px; + } + + .dropdown .table-schema { + font-family: var(--monospace-font-family); + font-size: .85em; + } + + /* Data type */ + .dropdown .table-schema td:nth-child(2) { + color: var(--muted-text-color); + } + } } diff --git a/apps/client/src/widgets/type_widgets/SqlConsole.tsx b/apps/client/src/widgets/type_widgets/SqlConsole.tsx index e68f1fb081..4c5491d8d4 100644 --- a/apps/client/src/widgets/type_widgets/SqlConsole.tsx +++ b/apps/client/src/widgets/type_widgets/SqlConsole.tsx @@ -1,26 +1,31 @@ import "./SqlConsole.css"; -import { SqlExecuteResults } from "@triliumnext/commons"; -import { useState } from "preact/hooks"; +import { SchemaResponse, SqlExecuteResults } from "@triliumnext/commons"; +import { useEffect, useState } from "preact/hooks"; import { ClipboardModule, EditModule, ExportModule, FilterModule, FormatModule, FrozenColumnsModule, KeybindingsModule, ResizeColumnsModule, SelectRangeModule, SelectRowModule, SortModule } from "tabulator-tables"; import { t } from "../../services/i18n"; +import server from "../../services/server"; import Tabulator from "../collections/table/tabulator"; import Alert from "../react/Alert"; +import Dropdown from "../react/Dropdown"; import { useTriliumEvent } from "../react/hooks"; import SplitEditor from "./helpers/SplitEditor"; import { TypeWidgetProps } from "./type_widget"; export default function SqlConsole(props: TypeWidgetProps) { return ( - <SplitEditor - noteType="code" - {...props} - previewContent={<SqlResults {...props} />} - splitOptions={{ - sizes: [ 90, 10 ] - }} - /> + <> + <SplitEditor + noteType="code" + {...props} + editorBefore={<SqlTableSchemas {...props} />} + previewContent={<SqlResults {...props} />} + splitOptions={{ + sizes: [ 70, 30 ] + }} + /> + </> ); } @@ -94,3 +99,41 @@ function SqlResultTable({ rows }: { rows: object[] }) { /> ); } + +export function SqlTableSchemas({ note }: TypeWidgetProps) { + const [ schemas, setSchemas ] = useState<SchemaResponse[]>(); + + useEffect(() => { + server.get<SchemaResponse[]>("sql/schema").then(setSchemas); + }, []); + + const isEnabled = note?.mime === "text/x-sqlite;schema=trilium" && schemas; + return ( + <div className={`sql-table-schemas-widget ${!isEnabled ? "hidden-ext" : ""}`}> + {isEnabled && ( + <> + {t("sql_table_schemas.tables")}{": "} + + <span class="sql-table-schemas"> + {schemas.map(({ name, columns }) => ( + <> + <Dropdown text={name} noSelectButtonStyle hideToggleArrow + > + <table className="table-schema"> + {columns.map(column => ( + <tr> + <td>{column.name}</td> + <td>{column.type}</td> + </tr> + ))} + </table> + </Dropdown> + {" "} + </> + ))} + </span> + </> + )} + </div> + ); +} diff --git a/apps/client/src/widgets/type_widgets/helpers/SplitEditor.tsx b/apps/client/src/widgets/type_widgets/helpers/SplitEditor.tsx index e6d85cf7c9..0b45d85212 100644 --- a/apps/client/src/widgets/type_widgets/helpers/SplitEditor.tsx +++ b/apps/client/src/widgets/type_widgets/helpers/SplitEditor.tsx @@ -1,13 +1,15 @@ +import "./SplitEditor.css"; + +import Split from "@triliumnext/split.js"; +import { ComponentChildren } from "preact"; import { useEffect, useRef } from "preact/hooks"; + +import { DEFAULT_GUTTER_SIZE } from "../../../services/resizer"; import utils, { isMobile } from "../../../services/utils"; +import ActionButton, { ActionButtonProps } from "../../react/ActionButton"; import Admonition from "../../react/Admonition"; import { useNoteLabelBoolean, useTriliumOption } from "../../react/hooks"; -import "./SplitEditor.css"; -import Split from "@triliumnext/split.js"; -import { DEFAULT_GUTTER_SIZE } from "../../../services/resizer"; import { EditableCode, EditableCodeProps } from "../code/Code"; -import { ComponentChildren } from "preact"; -import ActionButton, { ActionButtonProps } from "../../react/ActionButton"; export interface SplitEditorProps extends EditableCodeProps { className?: string; @@ -15,6 +17,7 @@ export interface SplitEditorProps extends EditableCodeProps { splitOptions?: Split.Options; previewContent: ComponentChildren; previewButtons?: ComponentChildren; + editorBefore?: ComponentChildren; } /** @@ -26,13 +29,14 @@ export interface SplitEditorProps extends EditableCodeProps { * - Can display errors to the user via {@link setError}. * - Horizontal or vertical orientation for the editor/preview split, adjustable via the switch split orientation button floating button. */ -export default function SplitEditor({ note, error, splitOptions, previewContent, previewButtons, className, ...editorProps }: SplitEditorProps) { +export default function SplitEditor({ note, error, splitOptions, previewContent, previewButtons, className, editorBefore, ...editorProps }: SplitEditorProps) { const splitEditorOrientation = useSplitOrientation(); const [ readOnly ] = useNoteLabelBoolean(note, "readOnly"); const containerRef = useRef<HTMLDivElement>(null); const editor = (!readOnly && <div className="note-detail-split-editor-col"> + {editorBefore} <div className="note-detail-split-editor"> <EditableCode note={note} @@ -74,12 +78,12 @@ export default function SplitEditor({ note, error, splitOptions, previewContent, }, [ readOnly, splitEditorOrientation ]); return ( - <div ref={containerRef} className={`note-detail-split note-detail-printable ${"split-" + splitEditorOrientation} ${readOnly ? "split-read-only" : ""} ${className ?? ""}`}> + <div ref={containerRef} className={`note-detail-split note-detail-printable ${`split-${ splitEditorOrientation}`} ${readOnly ? "split-read-only" : ""} ${className ?? ""}`}> {splitEditorOrientation === "horizontal" - ? <>{editor}{preview}</> - : <>{preview}{editor}</>} + ? <>{editor}{preview}</> + : <>{preview}{editor}</>} </div> - ) + ); } export function PreviewButton(props: Omit<ActionButtonProps, "titlePosition">) { @@ -88,7 +92,7 @@ export function PreviewButton(props: Omit<ActionButtonProps, "titlePosition">) { className="tn-tool-button" noIconActionClass titlePosition="top" - /> + />; } function useSplitOrientation() { From fb0c7359f184271ccac23c264361a90f96ea2693 Mon Sep 17 00:00:00 2001 From: Elian Doran <contact@eliandoran.me> Date: Sat, 17 Jan 2026 22:39:32 +0200 Subject: [PATCH 105/353] chore(sql_console): fix typecheck issue --- apps/client/src/widgets/type_widgets/SqlConsole.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/client/src/widgets/type_widgets/SqlConsole.tsx b/apps/client/src/widgets/type_widgets/SqlConsole.tsx index 4c5491d8d4..24c6522be4 100644 --- a/apps/client/src/widgets/type_widgets/SqlConsole.tsx +++ b/apps/client/src/widgets/type_widgets/SqlConsole.tsx @@ -92,7 +92,7 @@ function SqlResultTable({ rows }: { rows: object[] }) { minWidth: 100, widthGrow: 1, resizable: true, - headerFilter: true + headerFilter: true as const })) ]} data={rows} From 56fcc7adcc85ec234b22c5a49b511955a352c598 Mon Sep 17 00:00:00 2001 From: Elian Doran <contact@eliandoran.me> Date: Sat, 17 Jan 2026 22:41:55 +0200 Subject: [PATCH 106/353] chore(sql_console): fix lint warnings --- apps/client/src/widgets/type_widgets/SqlConsole.tsx | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/apps/client/src/widgets/type_widgets/SqlConsole.tsx b/apps/client/src/widgets/type_widgets/SqlConsole.tsx index 24c6522be4..54e17647e0 100644 --- a/apps/client/src/widgets/type_widgets/SqlConsole.tsx +++ b/apps/client/src/widgets/type_widgets/SqlConsole.tsx @@ -2,6 +2,7 @@ import "./SqlConsole.css"; import { SchemaResponse, SqlExecuteResults } from "@triliumnext/commons"; import { useEffect, useState } from "preact/hooks"; +import { Fragment } from "preact/jsx-runtime"; import { ClipboardModule, EditModule, ExportModule, FilterModule, FormatModule, FrozenColumnsModule, KeybindingsModule, ResizeColumnsModule, SelectRangeModule, SelectRowModule, SortModule } from "tabulator-tables"; import { t } from "../../services/i18n"; @@ -47,14 +48,14 @@ function SqlResults({ note, ntxId }: TypeWidgetProps) { </Alert> ) : ( <div className="sql-console-result-container selectable-text"> - {results?.map(rows => { + {results?.map((rows, index) => { // inserts, updates if (typeof rows === "object" && !Array.isArray(rows)) { - return <pre>{JSON.stringify(rows, null, "\t")}</pre>; + return <pre key={index}>{JSON.stringify(rows, null, "\t")}</pre>; } // selects - return <SqlResultTable rows={rows} />; + return <SqlResultTable key={index} rows={rows} />; })} </div> ) @@ -116,12 +117,12 @@ export function SqlTableSchemas({ note }: TypeWidgetProps) { <span class="sql-table-schemas"> {schemas.map(({ name, columns }) => ( - <> + <Fragment key={name}> <Dropdown text={name} noSelectButtonStyle hideToggleArrow > <table className="table-schema"> {columns.map(column => ( - <tr> + <tr key={column.name}> <td>{column.name}</td> <td>{column.type}</td> </tr> @@ -129,7 +130,7 @@ export function SqlTableSchemas({ note }: TypeWidgetProps) { </table> </Dropdown> {" "} - </> + </Fragment> ))} </span> </> From 1b812f1886521f202e51fbe0b0208a1b950b446d Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sun, 18 Jan 2026 01:37:35 +0000 Subject: [PATCH 107/353] chore(deps): update dependency @smithy/middleware-retry to v4.4.24 --- packages/ckeditor5/package.json | 2 +- pnpm-lock.yaml | 120 ++++++++++++++++++++++++++------ 2 files changed, 98 insertions(+), 24 deletions(-) diff --git a/packages/ckeditor5/package.json b/packages/ckeditor5/package.json index d912a96852..6ccb19bf26 100644 --- a/packages/ckeditor5/package.json +++ b/packages/ckeditor5/package.json @@ -16,7 +16,7 @@ "ckeditor5-premium-features": "47.4.0" }, "devDependencies": { - "@smithy/middleware-retry": "4.4.23", + "@smithy/middleware-retry": "4.4.24", "@types/jquery": "3.5.33" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 5fb5adf9e8..f1bc120b68 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -888,8 +888,8 @@ importers: version: 47.4.0(bufferutil@4.0.9)(ckeditor5@47.4.0)(utf-8-validate@6.0.5) devDependencies: '@smithy/middleware-retry': - specifier: 4.4.23 - version: 4.4.23 + specifier: 4.4.24 + version: 4.4.24 '@types/jquery': specifier: 3.5.33 version: 3.5.33 @@ -4804,6 +4804,10 @@ packages: resolution: {integrity: sha512-BpAffW1mIyRZongoKBbh3RgHG+JDHJek/8hjA/9LnPunM+ejorO6axkxCgwxCe4K//g/JdPeR9vROHDYr/hfnQ==} engines: {node: '>=18.0.0'} + '@smithy/core@3.20.7': + resolution: {integrity: sha512-aO7jmh3CtrmPsIJxUwYIzI5WVlMK8BMCPQ4D4nTzqTqBhbzvxHNzBMGcEg13yg/z9R2Qsz49NUFl0F0lVbTVFw==} + engines: {node: '>=18.0.0'} + '@smithy/credential-provider-imds@4.0.6': resolution: {integrity: sha512-hKMWcANhUiNbCJouYkZ9V3+/Qf9pteR1dnwgdyzR09R4ODEYx8BbUysHwRSyex4rZ9zapddZhLFTnT4ZijR4pw==} engines: {node: '>=18.0.0'} @@ -4856,8 +4860,12 @@ packages: resolution: {integrity: sha512-SCmhUG1UwtnEhF5Sxd8qk7bJwkj1BpFzFlHkXqKCEmDPLrRjJyTGM0EhqT7XBtDaDJjCfjRJQodgZcKDR843qg==} engines: {node: '>=18.0.0'} - '@smithy/middleware-retry@4.4.23': - resolution: {integrity: sha512-lLEmkQj7I7oKfvZ1wsnToGJouLOtfkMXDKRA1Hi6F+mMp5O1N8GcVWmVeNgTtgZtd0OTXDTI2vpVQmeutydGew==} + '@smithy/middleware-endpoint@4.4.8': + resolution: {integrity: sha512-TV44qwB/T0OMMzjIuI+JeS0ort3bvlPJ8XIH0MSlGADraXpZqmyND27ueuAL3E14optleADWqtd7dUgc2w+qhQ==} + engines: {node: '>=18.0.0'} + + '@smithy/middleware-retry@4.4.24': + resolution: {integrity: sha512-yiUY1UvnbUFfP5izoKLtfxDSTRv724YRRwyiC/5HYY6vdsVDcDOXKSXmkJl/Hovcxt5r+8tZEUAdrOaCJwrl9Q==} engines: {node: '>=18.0.0'} '@smithy/middleware-serde@4.2.9': @@ -4908,6 +4916,10 @@ packages: resolution: {integrity: sha512-wcr3UEL26k7lLoyf9eVDZoD1nNY3Fa1gbNuOXvfxvVWLGkOVW+RYZgUUp/bXHryJfycIOQnBq9o1JAE00ax8HQ==} engines: {node: '>=18.0.0'} + '@smithy/smithy-client@4.10.9': + resolution: {integrity: sha512-Je0EvGXVJ0Vrrr2lsubq43JGRIluJ/hX17aN/W/A0WfE+JpoMdI8kwk2t9F0zTX9232sJDGcoH4zZre6m6f/sg==} + engines: {node: '>=18.0.0'} + '@smithy/types@4.12.0': resolution: {integrity: sha512-9YcuJVTOBDjg9LWo23Qp0lTQ3D7fQsQtwle0jVfpbUHy9qBwCEgKuVH4FqFB3VYu0nwdHKiEMA+oXz7oV8X1kw==} engines: {node: '>=18.0.0'} @@ -14522,7 +14534,7 @@ snapshots: '@smithy/invalid-dependency': 4.0.4 '@smithy/middleware-content-length': 4.0.4 '@smithy/middleware-endpoint': 4.4.7 - '@smithy/middleware-retry': 4.4.23 + '@smithy/middleware-retry': 4.4.24 '@smithy/middleware-serde': 4.2.9 '@smithy/middleware-stack': 4.2.8 '@smithy/node-config-provider': 4.3.8 @@ -14568,7 +14580,7 @@ snapshots: '@smithy/invalid-dependency': 4.0.4 '@smithy/middleware-content-length': 4.0.4 '@smithy/middleware-endpoint': 4.4.7 - '@smithy/middleware-retry': 4.4.23 + '@smithy/middleware-retry': 4.4.24 '@smithy/middleware-serde': 4.2.9 '@smithy/middleware-stack': 4.2.8 '@smithy/node-config-provider': 4.3.8 @@ -14762,7 +14774,7 @@ snapshots: '@smithy/invalid-dependency': 4.0.4 '@smithy/middleware-content-length': 4.0.4 '@smithy/middleware-endpoint': 4.4.7 - '@smithy/middleware-retry': 4.4.23 + '@smithy/middleware-retry': 4.4.24 '@smithy/middleware-serde': 4.2.9 '@smithy/middleware-stack': 4.2.8 '@smithy/node-config-provider': 4.3.8 @@ -15086,8 +15098,6 @@ snapshots: '@ckeditor/ckeditor5-core': 47.4.0 '@ckeditor/ckeditor5-upload': 47.4.0 ckeditor5: 47.4.0 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-ai@47.4.0(bufferutil@4.0.9)(utf-8-validate@6.0.5)': dependencies: @@ -15228,8 +15238,6 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.4.0 '@ckeditor/ckeditor5-widget': 47.4.0 es-toolkit: 1.39.5 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-cloud-services@47.4.0': dependencies: @@ -15441,8 +15449,6 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 es-toolkit: 1.39.5 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-editor-decoupled@47.4.0': dependencies: @@ -15452,8 +15458,6 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 es-toolkit: 1.39.5 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-editor-inline@47.4.0': dependencies: @@ -15463,6 +15467,8 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 es-toolkit: 1.39.5 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-editor-multi-root@47.4.0': dependencies: @@ -15485,6 +15491,8 @@ snapshots: '@ckeditor/ckeditor5-table': 47.4.0 '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-emoji@47.4.0': dependencies: @@ -15510,8 +15518,6 @@ snapshots: '@ckeditor/ckeditor5-core': 47.4.0 '@ckeditor/ckeditor5-engine': 47.4.0 '@ckeditor/ckeditor5-utils': 47.4.0 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-essentials@47.4.0': dependencies: @@ -15543,6 +15549,8 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.4.0 '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-export-word@47.4.0': dependencies: @@ -15567,8 +15575,6 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 es-toolkit: 1.39.5 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-font@47.4.0': dependencies: @@ -15643,8 +15649,6 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.4.0 '@ckeditor/ckeditor5-widget': 47.4.0 ckeditor5: 47.4.0 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-html-embed@47.4.0': dependencies: @@ -15690,6 +15694,8 @@ snapshots: '@ckeditor/ckeditor5-widget': 47.4.0 ckeditor5: 47.4.0 es-toolkit: 1.39.5 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-import-word@47.4.0': dependencies: @@ -15702,6 +15708,8 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.4.0 '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-indent@47.4.0': dependencies: @@ -15713,6 +15721,8 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.4.0 '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-inspector@5.0.0': {} @@ -15722,6 +15732,8 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.4.0 '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-line-height@47.4.0': dependencies: @@ -15746,6 +15758,8 @@ snapshots: '@ckeditor/ckeditor5-widget': 47.4.0 ckeditor5: 47.4.0 es-toolkit: 1.39.5 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-list-multi-level@47.4.0': dependencies: @@ -15769,6 +15783,8 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.4.0 '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-markdown-gfm@47.4.0': dependencies: @@ -15806,6 +15822,8 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.4.0 '@ckeditor/ckeditor5-widget': 47.4.0 ckeditor5: 47.4.0 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-mention@47.4.0(patch_hash=5981fb59ba35829e4dff1d39cf771000f8a8fdfa7a34b51d8af9549541f2d62d)': dependencies: @@ -15815,6 +15833,8 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 es-toolkit: 1.39.5 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-merge-fields@47.4.0': dependencies: @@ -15827,6 +15847,8 @@ snapshots: '@ckeditor/ckeditor5-widget': 47.4.0 ckeditor5: 47.4.0 es-toolkit: 1.39.5 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-minimap@47.4.0': dependencies: @@ -15835,6 +15857,8 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.4.0 '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-operations-compressor@47.4.0': dependencies: @@ -15889,6 +15913,8 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.4.0 '@ckeditor/ckeditor5-widget': 47.4.0 ckeditor5: 47.4.0 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-pagination@47.4.0': dependencies: @@ -15998,6 +16024,8 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.4.0 '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-slash-command@47.4.0': dependencies: @@ -16010,6 +16038,8 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.4.0 '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-source-editing-enhanced@47.4.0': dependencies: @@ -16057,6 +16087,8 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 es-toolkit: 1.39.5 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-table@47.4.0': dependencies: @@ -16069,6 +16101,8 @@ snapshots: '@ckeditor/ckeditor5-widget': 47.4.0 ckeditor5: 47.4.0 es-toolkit: 1.39.5 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-template@47.4.0': dependencies: @@ -16179,6 +16213,8 @@ snapshots: '@ckeditor/ckeditor5-engine': 47.4.0 '@ckeditor/ckeditor5-utils': 47.4.0 es-toolkit: 1.39.5 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-widget@47.4.0': dependencies: @@ -16198,6 +16234,8 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 es-toolkit: 1.39.5 + transitivePeerDependencies: + - supports-color '@codemirror/autocomplete@6.18.6': dependencies: @@ -19274,6 +19312,19 @@ snapshots: '@smithy/uuid': 1.1.0 tslib: 2.8.1 + '@smithy/core@3.20.7': + dependencies: + '@smithy/middleware-serde': 4.2.9 + '@smithy/protocol-http': 5.3.8 + '@smithy/types': 4.12.0 + '@smithy/util-base64': 4.3.0 + '@smithy/util-body-length-browser': 4.2.0 + '@smithy/util-middleware': 4.2.8 + '@smithy/util-stream': 4.5.10 + '@smithy/util-utf8': 4.2.0 + '@smithy/uuid': 1.1.0 + tslib: 2.8.1 + '@smithy/credential-provider-imds@4.0.6': dependencies: '@smithy/node-config-provider': 4.3.8 @@ -19357,12 +19408,23 @@ snapshots: '@smithy/util-middleware': 4.2.8 tslib: 2.8.1 - '@smithy/middleware-retry@4.4.23': + '@smithy/middleware-endpoint@4.4.8': + dependencies: + '@smithy/core': 3.20.7 + '@smithy/middleware-serde': 4.2.9 + '@smithy/node-config-provider': 4.3.8 + '@smithy/shared-ini-file-loader': 4.4.3 + '@smithy/types': 4.12.0 + '@smithy/url-parser': 4.2.8 + '@smithy/util-middleware': 4.2.8 + tslib: 2.8.1 + + '@smithy/middleware-retry@4.4.24': dependencies: '@smithy/node-config-provider': 4.3.8 '@smithy/protocol-http': 5.3.8 '@smithy/service-error-classification': 4.2.8 - '@smithy/smithy-client': 4.10.8 + '@smithy/smithy-client': 4.10.9 '@smithy/types': 4.12.0 '@smithy/util-middleware': 4.2.8 '@smithy/util-retry': 4.2.8 @@ -19446,6 +19508,16 @@ snapshots: '@smithy/util-stream': 4.5.10 tslib: 2.8.1 + '@smithy/smithy-client@4.10.9': + dependencies: + '@smithy/core': 3.20.7 + '@smithy/middleware-endpoint': 4.4.8 + '@smithy/middleware-stack': 4.2.8 + '@smithy/protocol-http': 5.3.8 + '@smithy/types': 4.12.0 + '@smithy/util-stream': 4.5.10 + tslib: 2.8.1 + '@smithy/types@4.12.0': dependencies: tslib: 2.8.1 @@ -21664,6 +21736,8 @@ snapshots: ckeditor5-collaboration@47.4.0: dependencies: '@ckeditor/ckeditor5-collaboration-core': 47.4.0 + transitivePeerDependencies: + - supports-color ckeditor5-premium-features@47.4.0(bufferutil@4.0.9)(ckeditor5@47.4.0)(utf-8-validate@6.0.5): dependencies: From d83d7ed106e7dee7e2caae8186665baf48b57f54 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sun, 18 Jan 2026 01:38:26 +0000 Subject: [PATCH 108/353] chore(deps): update dependency webdriverio to v9.23.2 --- packages/ckeditor5-admonition/package.json | 2 +- packages/ckeditor5-footnotes/package.json | 2 +- .../ckeditor5-keyboard-marker/package.json | 2 +- packages/ckeditor5-math/package.json | 2 +- packages/ckeditor5-mermaid/package.json | 2 +- pnpm-lock.yaml | 154 ++++++++++-------- 6 files changed, 93 insertions(+), 71 deletions(-) diff --git a/packages/ckeditor5-admonition/package.json b/packages/ckeditor5-admonition/package.json index 8a6aaa4a52..2364bd8514 100644 --- a/packages/ckeditor5-admonition/package.json +++ b/packages/ckeditor5-admonition/package.json @@ -39,7 +39,7 @@ "typescript": "5.9.3", "vite-plugin-svgo": "2.0.0", "vitest": "4.0.17", - "webdriverio": "9.23.0" + "webdriverio": "9.23.2" }, "peerDependencies": { "ckeditor5": "47.4.0" diff --git a/packages/ckeditor5-footnotes/package.json b/packages/ckeditor5-footnotes/package.json index b3f32618b9..e387a85184 100644 --- a/packages/ckeditor5-footnotes/package.json +++ b/packages/ckeditor5-footnotes/package.json @@ -40,7 +40,7 @@ "typescript": "5.9.3", "vite-plugin-svgo": "2.0.0", "vitest": "4.0.17", - "webdriverio": "9.23.0" + "webdriverio": "9.23.2" }, "peerDependencies": { "ckeditor5": "47.4.0" diff --git a/packages/ckeditor5-keyboard-marker/package.json b/packages/ckeditor5-keyboard-marker/package.json index e8b65485d7..e72036a08b 100644 --- a/packages/ckeditor5-keyboard-marker/package.json +++ b/packages/ckeditor5-keyboard-marker/package.json @@ -42,7 +42,7 @@ "typescript": "5.9.3", "vite-plugin-svgo": "2.0.0", "vitest": "4.0.17", - "webdriverio": "9.23.0" + "webdriverio": "9.23.2" }, "peerDependencies": { "ckeditor5": "47.4.0" diff --git a/packages/ckeditor5-math/package.json b/packages/ckeditor5-math/package.json index 43d6c9cbfe..259cee11d9 100644 --- a/packages/ckeditor5-math/package.json +++ b/packages/ckeditor5-math/package.json @@ -42,7 +42,7 @@ "typescript": "5.9.3", "vite-plugin-svgo": "2.0.0", "vitest": "4.0.17", - "webdriverio": "9.23.0" + "webdriverio": "9.23.2" }, "peerDependencies": { "ckeditor5": "47.4.0" diff --git a/packages/ckeditor5-mermaid/package.json b/packages/ckeditor5-mermaid/package.json index 10b632874e..34d580fff2 100644 --- a/packages/ckeditor5-mermaid/package.json +++ b/packages/ckeditor5-mermaid/package.json @@ -42,7 +42,7 @@ "typescript": "5.9.3", "vite-plugin-svgo": "2.0.0", "vitest": "4.0.17", - "webdriverio": "9.23.0" + "webdriverio": "9.23.2" }, "peerDependencies": { "ckeditor5": "47.4.0" diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 5fb5adf9e8..eac812f92f 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -57,7 +57,7 @@ importers: version: 24.10.9 '@vitest/browser-webdriverio': specifier: 4.0.17 - version: 4.0.17(bufferutil@4.0.9)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(utf-8-validate@6.0.5)(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1))(vitest@4.0.17)(webdriverio@9.23.0(bufferutil@4.0.9)(utf-8-validate@6.0.5)) + version: 4.0.17(bufferutil@4.0.9)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(utf-8-validate@6.0.5)(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1))(vitest@4.0.17)(webdriverio@9.23.2(bufferutil@4.0.9)(utf-8-validate@6.0.5)) '@vitest/coverage-v8': specifier: 4.0.17 version: 4.0.17(@vitest/browser@4.0.17(bufferutil@4.0.9)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(utf-8-validate@6.0.5)(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1))(vitest@4.0.17))(vitest@4.0.17) @@ -951,8 +951,8 @@ importers: specifier: 4.0.17 version: 4.0.17(@opentelemetry/api@1.9.0)(@types/node@24.10.9)(@vitest/browser-webdriverio@4.0.17)(@vitest/ui@4.0.17)(happy-dom@20.3.1(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.2)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) webdriverio: - specifier: 9.23.0 - version: 9.23.0(bufferutil@4.0.9)(utf-8-validate@6.0.5) + specifier: 9.23.2 + version: 9.23.2(bufferutil@4.0.9)(utf-8-validate@6.0.5) packages/ckeditor5-footnotes: devDependencies: @@ -1011,8 +1011,8 @@ importers: specifier: 4.0.17 version: 4.0.17(@opentelemetry/api@1.9.0)(@types/node@24.10.9)(@vitest/browser-webdriverio@4.0.17)(@vitest/ui@4.0.17)(happy-dom@20.3.1(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.2)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) webdriverio: - specifier: 9.23.0 - version: 9.23.0(bufferutil@4.0.9)(utf-8-validate@6.0.5) + specifier: 9.23.2 + version: 9.23.2(bufferutil@4.0.9)(utf-8-validate@6.0.5) packages/ckeditor5-keyboard-marker: devDependencies: @@ -1071,8 +1071,8 @@ importers: specifier: 4.0.17 version: 4.0.17(@opentelemetry/api@1.9.0)(@types/node@24.10.9)(@vitest/browser-webdriverio@4.0.17)(@vitest/ui@4.0.17)(happy-dom@20.3.1(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.2)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) webdriverio: - specifier: 9.23.0 - version: 9.23.0(bufferutil@4.0.9)(utf-8-validate@6.0.5) + specifier: 9.23.2 + version: 9.23.2(bufferutil@4.0.9)(utf-8-validate@6.0.5) packages/ckeditor5-math: dependencies: @@ -1138,8 +1138,8 @@ importers: specifier: 4.0.17 version: 4.0.17(@opentelemetry/api@1.9.0)(@types/node@24.10.9)(@vitest/browser-webdriverio@4.0.17)(@vitest/ui@4.0.17)(happy-dom@20.3.1(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.2)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) webdriverio: - specifier: 9.23.0 - version: 9.23.0(bufferutil@4.0.9)(utf-8-validate@6.0.5) + specifier: 9.23.2 + version: 9.23.2(bufferutil@4.0.9)(utf-8-validate@6.0.5) packages/ckeditor5-mermaid: dependencies: @@ -1205,8 +1205,8 @@ importers: specifier: 4.0.17 version: 4.0.17(@opentelemetry/api@1.9.0)(@types/node@24.10.9)(@vitest/browser-webdriverio@4.0.17)(@vitest/ui@4.0.17)(happy-dom@20.3.1(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.2)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) webdriverio: - specifier: 9.23.0 - version: 9.23.0(bufferutil@4.0.9)(utf-8-validate@6.0.5) + specifier: 9.23.2 + version: 9.23.2(bufferutil@4.0.9)(utf-8-validate@6.0.5) packages/codemirror: dependencies: @@ -5868,27 +5868,27 @@ packages: '@vue/shared@3.5.14': resolution: {integrity: sha512-oXTwNxVfc9EtP1zzXAlSlgARLXNC84frFYkS0HHz0h3E4WZSP9sywqjqzGCP9Y34M8ipNmd380pVgmMuwELDyQ==} - '@wdio/config@9.23.0': - resolution: {integrity: sha512-hhtngUG2uCxYmScSEor+k22EVlsTW3ARXgke8NPVeQA4p1+GC2CvRZi4P7nmhRTZubgLrENYYsveFcYR+1UXhQ==} + '@wdio/config@9.23.2': + resolution: {integrity: sha512-19Z+AIQ1NUpr6ncTumjSthm6A7c3DbaGTp+VCdcyN+vHYOK4WsWIomSk+uSbFosYFQVGRjCaHaeGSnC8GNPGYQ==} engines: {node: '>=18.20.0'} '@wdio/logger@9.18.0': resolution: {integrity: sha512-HdzDrRs+ywAqbXGKqe1i/bLtCv47plz4TvsHFH3j729OooT5VH38ctFn5aLXgECmiAKDkmH/A6kOq2Zh5DIxww==} engines: {node: '>=18.20.0'} - '@wdio/protocols@9.16.2': - resolution: {integrity: sha512-h3k97/lzmyw5MowqceAuY3HX/wGJojXHkiPXA3WlhGPCaa2h4+GovV2nJtRvknCKsE7UHA1xB5SWeI8MzloBew==} + '@wdio/protocols@9.23.2': + resolution: {integrity: sha512-pmCYOYI2N89QCC8IaiHwaWyP0mR8T1iKkEGpoTq2XVihp7VK/lfPvieyeZT5/e28MadYLJsDQ603pbu5J1NRDg==} '@wdio/repl@9.16.2': resolution: {integrity: sha512-FLTF0VL6+o5BSTCO7yLSXocm3kUnu31zYwzdsz4n9s5YWt83sCtzGZlZpt7TaTzb3jVUfxuHNQDTb8UMkCu0lQ==} engines: {node: '>=18.20.0'} - '@wdio/types@9.20.0': - resolution: {integrity: sha512-zMmAtse2UMCSOW76mvK3OejauAdcFGuKopNRH7crI0gwKTZtvV89yXWRziz9cVXpFgfmJCjf9edxKFWdhuF5yw==} + '@wdio/types@9.23.2': + resolution: {integrity: sha512-ryfrERGsNp+aCcrTE1rFU6cbmDj8GHZ04R9k52KNt2u1a6bv3Eh5A/cUA0hXuMdEUfsc8ePLYdwQyOLFydZ0ig==} engines: {node: '>=18.20.0'} - '@wdio/utils@9.23.0': - resolution: {integrity: sha512-WhXuVSxEvPw/i34bL1aCHAOi+4g29kRkIMyBShNSxH+Shxh2G91RJYsXm4IAiPMGcC4H6G8T2VcbZ32qnGPm5Q==} + '@wdio/utils@9.23.2': + resolution: {integrity: sha512-+QfgXUWeA940AXT5l5UlrBKoHBk9GLSQE3BA+7ra1zWuFvv6SHG6M2mwplcPlOlymJMqXy8e7ZgLEoLkXuvC1Q==} engines: {node: '>=18.20.0'} '@webassemblyjs/ast@1.14.1': @@ -14015,12 +14015,12 @@ packages: resolution: {integrity: sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==} engines: {node: '>= 8'} - webdriver@9.23.0: - resolution: {integrity: sha512-XkZOhjoBOY7maKI3BhDF2rNiDne4wBD6Gw6VUnt4X9b7j9NtfzcCrThBlT0hnA8W77bWNtMRCSpw9Ajy08HqKg==} + webdriver@9.23.2: + resolution: {integrity: sha512-HZy3eydZbmex0pbyLwHaDsAyZ+S+V4XQTdGK/nAOi4uPa74U6yT9vXqtb+3B+5/LDM7L8kTD6Z3b1y4gB4pmTw==} engines: {node: '>=18.20.0'} - webdriverio@9.23.0: - resolution: {integrity: sha512-Y5y4jpwHvuduUfup+gXTuCU6AROn/k6qOba3st0laFluKHY+q5SHOpQAJdS8acYLwE8caDQ2dXJhmXyxuJrm0Q==} + webdriverio@9.23.2: + resolution: {integrity: sha512-VjfTw1bRJdBrzjoCu7BGThxn1JK2V7mAGvxibaBrCNIayPPQjLhVDNJPOVEiR7txM6zmOUWxhkCDxHjhMYirfQ==} engines: {node: '>=18.20.0'} peerDependencies: puppeteer-core: '>=22.x || <=24.x' @@ -15086,8 +15086,6 @@ snapshots: '@ckeditor/ckeditor5-core': 47.4.0 '@ckeditor/ckeditor5-upload': 47.4.0 ckeditor5: 47.4.0 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-ai@47.4.0(bufferutil@4.0.9)(utf-8-validate@6.0.5)': dependencies: @@ -15228,16 +15226,12 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.4.0 '@ckeditor/ckeditor5-widget': 47.4.0 es-toolkit: 1.39.5 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-cloud-services@47.4.0': dependencies: '@ckeditor/ckeditor5-core': 47.4.0 '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-code-block@47.4.0(patch_hash=2361d8caad7d6b5bddacc3a3b4aa37dbfba260b1c1b22a450413a79c1bb1ce95)': dependencies: @@ -15430,8 +15424,6 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 es-toolkit: 1.39.5 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-editor-classic@47.4.0': dependencies: @@ -15441,8 +15433,6 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 es-toolkit: 1.39.5 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-editor-decoupled@47.4.0': dependencies: @@ -15452,8 +15442,6 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 es-toolkit: 1.39.5 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-editor-inline@47.4.0': dependencies: @@ -15463,6 +15451,8 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 es-toolkit: 1.39.5 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-editor-multi-root@47.4.0': dependencies: @@ -15485,6 +15475,8 @@ snapshots: '@ckeditor/ckeditor5-table': 47.4.0 '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-emoji@47.4.0': dependencies: @@ -15510,8 +15502,6 @@ snapshots: '@ckeditor/ckeditor5-core': 47.4.0 '@ckeditor/ckeditor5-engine': 47.4.0 '@ckeditor/ckeditor5-utils': 47.4.0 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-essentials@47.4.0': dependencies: @@ -15543,6 +15533,8 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.4.0 '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-export-word@47.4.0': dependencies: @@ -15567,8 +15559,6 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 es-toolkit: 1.39.5 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-font@47.4.0': dependencies: @@ -15643,8 +15633,6 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.4.0 '@ckeditor/ckeditor5-widget': 47.4.0 ckeditor5: 47.4.0 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-html-embed@47.4.0': dependencies: @@ -15690,6 +15678,8 @@ snapshots: '@ckeditor/ckeditor5-widget': 47.4.0 ckeditor5: 47.4.0 es-toolkit: 1.39.5 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-import-word@47.4.0': dependencies: @@ -15702,6 +15692,8 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.4.0 '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-indent@47.4.0': dependencies: @@ -15713,6 +15705,8 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.4.0 '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-inspector@5.0.0': {} @@ -15722,6 +15716,8 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.4.0 '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-line-height@47.4.0': dependencies: @@ -15746,6 +15742,8 @@ snapshots: '@ckeditor/ckeditor5-widget': 47.4.0 ckeditor5: 47.4.0 es-toolkit: 1.39.5 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-list-multi-level@47.4.0': dependencies: @@ -15769,6 +15767,8 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.4.0 '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-markdown-gfm@47.4.0': dependencies: @@ -15806,6 +15806,8 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.4.0 '@ckeditor/ckeditor5-widget': 47.4.0 ckeditor5: 47.4.0 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-mention@47.4.0(patch_hash=5981fb59ba35829e4dff1d39cf771000f8a8fdfa7a34b51d8af9549541f2d62d)': dependencies: @@ -15815,6 +15817,8 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 es-toolkit: 1.39.5 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-merge-fields@47.4.0': dependencies: @@ -15827,6 +15831,8 @@ snapshots: '@ckeditor/ckeditor5-widget': 47.4.0 ckeditor5: 47.4.0 es-toolkit: 1.39.5 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-minimap@47.4.0': dependencies: @@ -15835,6 +15841,8 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.4.0 '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-operations-compressor@47.4.0': dependencies: @@ -15889,6 +15897,8 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.4.0 '@ckeditor/ckeditor5-widget': 47.4.0 ckeditor5: 47.4.0 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-pagination@47.4.0': dependencies: @@ -15952,8 +15962,6 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.4.0 '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-restricted-editing@47.4.0': dependencies: @@ -15998,6 +16006,8 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.4.0 '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-slash-command@47.4.0': dependencies: @@ -16010,6 +16020,8 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.4.0 '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-source-editing-enhanced@47.4.0': dependencies: @@ -16057,6 +16069,8 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 es-toolkit: 1.39.5 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-table@47.4.0': dependencies: @@ -16069,6 +16083,8 @@ snapshots: '@ckeditor/ckeditor5-widget': 47.4.0 ckeditor5: 47.4.0 es-toolkit: 1.39.5 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-template@47.4.0': dependencies: @@ -16179,6 +16195,8 @@ snapshots: '@ckeditor/ckeditor5-engine': 47.4.0 '@ckeditor/ckeditor5-utils': 47.4.0 es-toolkit: 1.39.5 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-widget@47.4.0': dependencies: @@ -16198,6 +16216,8 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 es-toolkit: 1.39.5 + transitivePeerDependencies: + - supports-color '@codemirror/autocomplete@6.18.6': dependencies: @@ -20504,11 +20524,11 @@ snapshots: - bufferutil - utf-8-validate - '@vitest/browser-webdriverio@4.0.17(bufferutil@4.0.9)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(utf-8-validate@6.0.5)(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1))(vitest@4.0.17)(webdriverio@9.23.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))': + '@vitest/browser-webdriverio@4.0.17(bufferutil@4.0.9)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(utf-8-validate@6.0.5)(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1))(vitest@4.0.17)(webdriverio@9.23.2(bufferutil@4.0.9)(utf-8-validate@6.0.5))': dependencies: '@vitest/browser': 4.0.17(bufferutil@4.0.9)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(utf-8-validate@6.0.5)(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1))(vitest@4.0.17) vitest: 4.0.17(@opentelemetry/api@1.9.0)(@types/node@24.10.9)(@vitest/browser-webdriverio@4.0.17)(@vitest/ui@4.0.17)(happy-dom@20.3.1(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.2)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) - webdriverio: 9.23.0(bufferutil@4.0.9)(utf-8-validate@6.0.5) + webdriverio: 9.23.2(bufferutil@4.0.9)(utf-8-validate@6.0.5) transitivePeerDependencies: - bufferutil - msw @@ -20662,13 +20682,13 @@ snapshots: '@vue/shared@3.5.14': {} - '@wdio/config@9.23.0': + '@wdio/config@9.23.2': dependencies: '@wdio/logger': 9.18.0 - '@wdio/types': 9.20.0 - '@wdio/utils': 9.23.0 + '@wdio/types': 9.23.2 + '@wdio/utils': 9.23.2 deepmerge-ts: 7.1.5 - glob: 10.4.5 + glob: 10.5.0 import-meta-resolve: 4.2.0 transitivePeerDependencies: - bare-buffer @@ -20682,21 +20702,21 @@ snapshots: safe-regex2: 5.0.0 strip-ansi: 7.1.2 - '@wdio/protocols@9.16.2': {} + '@wdio/protocols@9.23.2': {} '@wdio/repl@9.16.2': dependencies: '@types/node': 20.19.25 - '@wdio/types@9.20.0': + '@wdio/types@9.23.2': dependencies: '@types/node': 20.19.25 - '@wdio/utils@9.23.0': + '@wdio/utils@9.23.2': dependencies: '@puppeteer/browsers': 2.10.10 '@wdio/logger': 9.18.0 - '@wdio/types': 9.20.0 + '@wdio/types': 9.23.2 decamelize: 6.0.1 deepmerge-ts: 7.1.5 edgedriver: 6.1.2 @@ -21664,6 +21684,8 @@ snapshots: ckeditor5-collaboration@47.4.0: dependencies: '@ckeditor/ckeditor5-collaboration-core': 47.4.0 + transitivePeerDependencies: + - supports-color ckeditor5-premium-features@47.4.0(bufferutil@4.0.9)(ckeditor5@47.4.0)(utf-8-validate@6.0.5): dependencies: @@ -26544,7 +26566,7 @@ snapshots: diff: 7.0.0 escape-string-regexp: 4.0.0 find-up: 5.0.0 - glob: 10.4.5 + glob: 10.5.0 he: 1.2.0 js-yaml: 4.1.1 log-symbols: 4.1.0 @@ -30501,7 +30523,7 @@ snapshots: optionalDependencies: '@opentelemetry/api': 1.9.0 '@types/node': 24.10.9 - '@vitest/browser-webdriverio': 4.0.17(bufferutil@4.0.9)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(utf-8-validate@6.0.5)(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1))(vitest@4.0.17)(webdriverio@9.23.0(bufferutil@4.0.9)(utf-8-validate@6.0.5)) + '@vitest/browser-webdriverio': 4.0.17(bufferutil@4.0.9)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(utf-8-validate@6.0.5)(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1))(vitest@4.0.17)(webdriverio@9.23.2(bufferutil@4.0.9)(utf-8-validate@6.0.5)) '@vitest/ui': 4.0.17(vitest@4.0.17) happy-dom: 20.3.1(bufferutil@4.0.9)(utf-8-validate@6.0.5) jsdom: 26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5) @@ -30591,15 +30613,15 @@ snapshots: web-streams-polyfill@3.3.3: {} - webdriver@9.23.0(bufferutil@4.0.9)(utf-8-validate@6.0.5): + webdriver@9.23.2(bufferutil@4.0.9)(utf-8-validate@6.0.5): dependencies: '@types/node': 20.19.25 '@types/ws': 8.18.1 - '@wdio/config': 9.23.0 + '@wdio/config': 9.23.2 '@wdio/logger': 9.18.0 - '@wdio/protocols': 9.16.2 - '@wdio/types': 9.20.0 - '@wdio/utils': 9.23.0 + '@wdio/protocols': 9.23.2 + '@wdio/types': 9.23.2 + '@wdio/utils': 9.23.2 deepmerge-ts: 7.1.5 https-proxy-agent: 7.0.6 undici: 6.21.3 @@ -30610,16 +30632,16 @@ snapshots: - supports-color - utf-8-validate - webdriverio@9.23.0(bufferutil@4.0.9)(utf-8-validate@6.0.5): + webdriverio@9.23.2(bufferutil@4.0.9)(utf-8-validate@6.0.5): dependencies: '@types/node': 20.19.25 '@types/sinonjs__fake-timers': 8.1.5 - '@wdio/config': 9.23.0 + '@wdio/config': 9.23.2 '@wdio/logger': 9.18.0 - '@wdio/protocols': 9.16.2 + '@wdio/protocols': 9.23.2 '@wdio/repl': 9.16.2 - '@wdio/types': 9.20.0 - '@wdio/utils': 9.23.0 + '@wdio/types': 9.23.2 + '@wdio/utils': 9.23.2 archiver: 7.0.1 aria-query: 5.3.2 cheerio: 1.1.2 @@ -30636,7 +30658,7 @@ snapshots: rgb2hex: 0.2.5 serialize-error: 12.0.0 urlpattern-polyfill: 10.1.0 - webdriver: 9.23.0(bufferutil@4.0.9)(utf-8-validate@6.0.5) + webdriver: 9.23.2(bufferutil@4.0.9)(utf-8-validate@6.0.5) transitivePeerDependencies: - bare-buffer - bufferutil From 3fce4fc66cc53d1496d1f3d0f6aaf8370e2a8518 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sun, 18 Jan 2026 01:39:14 +0000 Subject: [PATCH 109/353] fix(deps): update dependency better-sqlite3 to v12.6.2 --- apps/desktop/package.json | 2 +- apps/dump-db/package.json | 2 +- apps/edit-docs/package.json | 2 +- apps/server/docker/package.json | 2 +- apps/server/package.json | 2 +- pnpm-lock.yaml | 84 +++++++++++++++++++++------------ 6 files changed, 58 insertions(+), 36 deletions(-) diff --git a/apps/desktop/package.json b/apps/desktop/package.json index 06a138a898..3728e0082c 100644 --- a/apps/desktop/package.json +++ b/apps/desktop/package.json @@ -23,7 +23,7 @@ }, "dependencies": { "@electron/remote": "2.1.3", - "better-sqlite3": "12.6.0", + "better-sqlite3": "12.6.2", "electron-debug": "4.1.0", "electron-dl": "4.0.0", "electron-squirrel-startup": "1.0.1", diff --git a/apps/dump-db/package.json b/apps/dump-db/package.json index 752b93e939..58c3ca8488 100644 --- a/apps/dump-db/package.json +++ b/apps/dump-db/package.json @@ -4,7 +4,7 @@ "description": "Standalone tool to dump contents of Trilium document.db file into a directory tree of notes", "private": true, "dependencies": { - "better-sqlite3": "12.6.0", + "better-sqlite3": "12.6.2", "mime-types": "3.0.2", "sanitize-filename": "1.6.3", "tsx": "4.21.0", diff --git a/apps/edit-docs/package.json b/apps/edit-docs/package.json index b17afb35ed..107c25fb54 100644 --- a/apps/edit-docs/package.json +++ b/apps/edit-docs/package.json @@ -5,7 +5,7 @@ "description": "Desktop version of Trilium which imports the demo database (presented to new users at start-up) or the user guide and other documentation and saves the modifications for committing.", "dependencies": { "archiver": "7.0.1", - "better-sqlite3": "12.6.0" + "better-sqlite3": "12.6.2" }, "devDependencies": { "@triliumnext/client": "workspace:*", diff --git a/apps/server/docker/package.json b/apps/server/docker/package.json index a0212e8ab6..0d94a4972f 100644 --- a/apps/server/docker/package.json +++ b/apps/server/docker/package.json @@ -1,5 +1,5 @@ { "dependencies": { - "better-sqlite3": "12.6.0" + "better-sqlite3": "12.6.2" } } \ No newline at end of file diff --git a/apps/server/package.json b/apps/server/package.json index f3378a2414..5c46b0c6fe 100644 --- a/apps/server/package.json +++ b/apps/server/package.json @@ -29,7 +29,7 @@ "proxy-nginx-subdir": "docker run --name trilium-nginx-subdir --rm --network=host -v ./docker/nginx.conf:/etc/nginx/conf.d/default.conf:ro nginx:latest" }, "dependencies": { - "better-sqlite3": "12.6.0", + "better-sqlite3": "12.6.2", "html-to-text": "9.0.5", "node-html-parser": "7.0.2", "sucrase": "3.35.1" diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 5fb5adf9e8..5376c5bde9 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -378,8 +378,8 @@ importers: specifier: 2.1.3 version: 2.1.3(electron@40.0.0) better-sqlite3: - specifier: 12.6.0 - version: 12.6.0 + specifier: 12.6.2 + version: 12.6.2 electron-debug: specifier: 4.1.0 version: 4.1.0 @@ -442,8 +442,8 @@ importers: apps/dump-db: dependencies: better-sqlite3: - specifier: 12.6.0 - version: 12.6.0 + specifier: 12.6.2 + version: 12.6.2 mime-types: specifier: 3.0.2 version: 3.0.2 @@ -473,8 +473,8 @@ importers: specifier: 7.0.1 version: 7.0.1 better-sqlite3: - specifier: 12.6.0 - version: 12.6.0 + specifier: 12.6.2 + version: 12.6.2 devDependencies: '@triliumnext/client': specifier: workspace:* @@ -507,8 +507,8 @@ importers: apps/server: dependencies: better-sqlite3: - specifier: 12.6.0 - version: 12.6.0 + specifier: 12.6.2 + version: 12.6.2 html-to-text: specifier: 9.0.5 version: 9.0.5 @@ -6385,8 +6385,8 @@ packages: peerDependencies: ajv: 4.11.8 - 8 - better-sqlite3@12.6.0: - resolution: {integrity: sha512-FXI191x+D6UPWSze5IzZjhz+i9MK9nsuHsmTX9bXVl52k06AfZ2xql0lrgIUuzsMsJ7Vgl5kIptvDgBLIV3ZSQ==} + better-sqlite3@12.6.2: + resolution: {integrity: sha512-8VYKM3MjCa9WcaSAI3hzwhmyHVlH8tiGFwf0RlTsZPWJ1I5MkzjiudCo4KC4DxOaL/53A5B1sI/IbldNFDbsKA==} engines: {node: 20.x || 22.x || 23.x || 24.x || 25.x} bezier-easing@2.1.0: @@ -15086,8 +15086,6 @@ snapshots: '@ckeditor/ckeditor5-core': 47.4.0 '@ckeditor/ckeditor5-upload': 47.4.0 ckeditor5: 47.4.0 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-ai@47.4.0(bufferutil@4.0.9)(utf-8-validate@6.0.5)': dependencies: @@ -15228,16 +15226,12 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.4.0 '@ckeditor/ckeditor5-widget': 47.4.0 es-toolkit: 1.39.5 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-cloud-services@47.4.0': dependencies: '@ckeditor/ckeditor5-core': 47.4.0 '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-code-block@47.4.0(patch_hash=2361d8caad7d6b5bddacc3a3b4aa37dbfba260b1c1b22a450413a79c1bb1ce95)': dependencies: @@ -15430,8 +15424,6 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 es-toolkit: 1.39.5 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-editor-classic@47.4.0': dependencies: @@ -15441,8 +15433,6 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 es-toolkit: 1.39.5 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-editor-decoupled@47.4.0': dependencies: @@ -15452,8 +15442,6 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 es-toolkit: 1.39.5 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-editor-inline@47.4.0': dependencies: @@ -15463,6 +15451,8 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 es-toolkit: 1.39.5 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-editor-multi-root@47.4.0': dependencies: @@ -15485,6 +15475,8 @@ snapshots: '@ckeditor/ckeditor5-table': 47.4.0 '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-emoji@47.4.0': dependencies: @@ -15510,8 +15502,6 @@ snapshots: '@ckeditor/ckeditor5-core': 47.4.0 '@ckeditor/ckeditor5-engine': 47.4.0 '@ckeditor/ckeditor5-utils': 47.4.0 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-essentials@47.4.0': dependencies: @@ -15543,6 +15533,8 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.4.0 '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-export-word@47.4.0': dependencies: @@ -15567,8 +15559,6 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 es-toolkit: 1.39.5 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-font@47.4.0': dependencies: @@ -15643,8 +15633,6 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.4.0 '@ckeditor/ckeditor5-widget': 47.4.0 ckeditor5: 47.4.0 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-html-embed@47.4.0': dependencies: @@ -15690,6 +15678,8 @@ snapshots: '@ckeditor/ckeditor5-widget': 47.4.0 ckeditor5: 47.4.0 es-toolkit: 1.39.5 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-import-word@47.4.0': dependencies: @@ -15702,6 +15692,8 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.4.0 '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-indent@47.4.0': dependencies: @@ -15713,6 +15705,8 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.4.0 '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-inspector@5.0.0': {} @@ -15722,6 +15716,8 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.4.0 '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-line-height@47.4.0': dependencies: @@ -15746,6 +15742,8 @@ snapshots: '@ckeditor/ckeditor5-widget': 47.4.0 ckeditor5: 47.4.0 es-toolkit: 1.39.5 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-list-multi-level@47.4.0': dependencies: @@ -15769,6 +15767,8 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.4.0 '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-markdown-gfm@47.4.0': dependencies: @@ -15806,6 +15806,8 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.4.0 '@ckeditor/ckeditor5-widget': 47.4.0 ckeditor5: 47.4.0 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-mention@47.4.0(patch_hash=5981fb59ba35829e4dff1d39cf771000f8a8fdfa7a34b51d8af9549541f2d62d)': dependencies: @@ -15815,6 +15817,8 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 es-toolkit: 1.39.5 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-merge-fields@47.4.0': dependencies: @@ -15827,6 +15831,8 @@ snapshots: '@ckeditor/ckeditor5-widget': 47.4.0 ckeditor5: 47.4.0 es-toolkit: 1.39.5 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-minimap@47.4.0': dependencies: @@ -15835,6 +15841,8 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.4.0 '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-operations-compressor@47.4.0': dependencies: @@ -15889,6 +15897,8 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.4.0 '@ckeditor/ckeditor5-widget': 47.4.0 ckeditor5: 47.4.0 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-pagination@47.4.0': dependencies: @@ -15952,8 +15962,6 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.4.0 '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-restricted-editing@47.4.0': dependencies: @@ -15998,6 +16006,8 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.4.0 '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-slash-command@47.4.0': dependencies: @@ -16010,6 +16020,8 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.4.0 '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-source-editing-enhanced@47.4.0': dependencies: @@ -16057,6 +16069,8 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 es-toolkit: 1.39.5 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-table@47.4.0': dependencies: @@ -16069,6 +16083,8 @@ snapshots: '@ckeditor/ckeditor5-widget': 47.4.0 ckeditor5: 47.4.0 es-toolkit: 1.39.5 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-template@47.4.0': dependencies: @@ -16179,6 +16195,8 @@ snapshots: '@ckeditor/ckeditor5-engine': 47.4.0 '@ckeditor/ckeditor5-utils': 47.4.0 es-toolkit: 1.39.5 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-widget@47.4.0': dependencies: @@ -16198,6 +16216,8 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 es-toolkit: 1.39.5 + transitivePeerDependencies: + - supports-color '@codemirror/autocomplete@6.18.6': dependencies: @@ -21243,7 +21263,7 @@ snapshots: jsonpointer: 5.0.1 leven: 3.1.0 - better-sqlite3@12.6.0: + better-sqlite3@12.6.2: dependencies: bindings: 1.5.0 prebuild-install: 7.1.3 @@ -21664,6 +21684,8 @@ snapshots: ckeditor5-collaboration@47.4.0: dependencies: '@ckeditor/ckeditor5-collaboration-core': 47.4.0 + transitivePeerDependencies: + - supports-color ckeditor5-premium-features@47.4.0(bufferutil@4.0.9)(ckeditor5@47.4.0)(utf-8-validate@6.0.5): dependencies: From 8fdadb379854e811cac5ca937f72d550927c7137 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sun, 18 Jan 2026 01:40:46 +0000 Subject: [PATCH 110/353] fix(deps): update dependency jquery to v4 --- apps/client/package.json | 2 +- pnpm-lock.yaml | 80 +++++++++++++++++++++++++--------------- 2 files changed, 52 insertions(+), 30 deletions(-) diff --git a/apps/client/package.json b/apps/client/package.json index c3886cc4ff..aa25e71b1d 100644 --- a/apps/client/package.json +++ b/apps/client/package.json @@ -46,7 +46,7 @@ "globals": "17.0.0", "i18next": "25.7.4", "i18next-http-backend": "3.0.2", - "jquery": "3.7.1", + "jquery": "4.0.0", "jquery.fancytree": "2.38.5", "jsplumb": "2.15.6", "katex": "0.16.27", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 5fb5adf9e8..49524f6f1c 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -254,11 +254,11 @@ importers: specifier: 3.0.2 version: 3.0.2(encoding@0.1.13) jquery: - specifier: 3.7.1 - version: 3.7.1 + specifier: 4.0.0 + version: 4.0.0 jquery.fancytree: specifier: 2.38.5 - version: 2.38.5(jquery@3.7.1) + version: 2.38.5(jquery@4.0.0) jsplumb: specifier: 2.15.6 version: 2.15.6 @@ -394,7 +394,7 @@ importers: version: 0.2.2 jquery.fancytree: specifier: 2.38.5 - version: 2.38.5(jquery@3.7.1) + version: 2.38.5(jquery@4.0.0) devDependencies: '@electron-forge/cli': specifier: 7.11.1 @@ -9527,8 +9527,8 @@ packages: peerDependencies: jquery: '>=1.9' - jquery@3.7.1: - resolution: {integrity: sha512-m4avr8yL8kmFN8psrbFFFmB/If14iN5o9nw/NgnnM+kybDJpRsAynV2BsfpTYrTRysYUdADVD7CkUUizgkpLfg==} + jquery@4.0.0: + resolution: {integrity: sha512-TXCHVR3Lb6TZdtw1l3RTLf8RBWVGexdxL6AC8/e0xZKEpBflBsjh9/8LXw+dkNFuOyW9B7iB3O1sP7hS0Kiacg==} js-levenshtein@1.1.6: resolution: {integrity: sha512-X2BB11YZtrRqY4EnQcLX5Rh373zbK4alC1FW7D7MBhL2gtcC17cTnr6DmfHZeS0s2rTHjUTMMHfG7gO8SSdw+g==} @@ -15086,8 +15086,6 @@ snapshots: '@ckeditor/ckeditor5-core': 47.4.0 '@ckeditor/ckeditor5-upload': 47.4.0 ckeditor5: 47.4.0 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-ai@47.4.0(bufferutil@4.0.9)(utf-8-validate@6.0.5)': dependencies: @@ -15228,16 +15226,12 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.4.0 '@ckeditor/ckeditor5-widget': 47.4.0 es-toolkit: 1.39.5 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-cloud-services@47.4.0': dependencies: '@ckeditor/ckeditor5-core': 47.4.0 '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-code-block@47.4.0(patch_hash=2361d8caad7d6b5bddacc3a3b4aa37dbfba260b1c1b22a450413a79c1bb1ce95)': dependencies: @@ -15430,8 +15424,6 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 es-toolkit: 1.39.5 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-editor-classic@47.4.0': dependencies: @@ -15441,8 +15433,6 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 es-toolkit: 1.39.5 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-editor-decoupled@47.4.0': dependencies: @@ -15452,8 +15442,6 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 es-toolkit: 1.39.5 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-editor-inline@47.4.0': dependencies: @@ -15463,6 +15451,8 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 es-toolkit: 1.39.5 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-editor-multi-root@47.4.0': dependencies: @@ -15485,6 +15475,8 @@ snapshots: '@ckeditor/ckeditor5-table': 47.4.0 '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-emoji@47.4.0': dependencies: @@ -15510,8 +15502,6 @@ snapshots: '@ckeditor/ckeditor5-core': 47.4.0 '@ckeditor/ckeditor5-engine': 47.4.0 '@ckeditor/ckeditor5-utils': 47.4.0 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-essentials@47.4.0': dependencies: @@ -15543,6 +15533,8 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.4.0 '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-export-word@47.4.0': dependencies: @@ -15567,8 +15559,6 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 es-toolkit: 1.39.5 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-font@47.4.0': dependencies: @@ -15643,8 +15633,6 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.4.0 '@ckeditor/ckeditor5-widget': 47.4.0 ckeditor5: 47.4.0 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-html-embed@47.4.0': dependencies: @@ -15690,6 +15678,8 @@ snapshots: '@ckeditor/ckeditor5-widget': 47.4.0 ckeditor5: 47.4.0 es-toolkit: 1.39.5 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-import-word@47.4.0': dependencies: @@ -15702,6 +15692,8 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.4.0 '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-indent@47.4.0': dependencies: @@ -15713,6 +15705,8 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.4.0 '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-inspector@5.0.0': {} @@ -15722,6 +15716,8 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.4.0 '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-line-height@47.4.0': dependencies: @@ -15746,6 +15742,8 @@ snapshots: '@ckeditor/ckeditor5-widget': 47.4.0 ckeditor5: 47.4.0 es-toolkit: 1.39.5 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-list-multi-level@47.4.0': dependencies: @@ -15769,6 +15767,8 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.4.0 '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-markdown-gfm@47.4.0': dependencies: @@ -15806,6 +15806,8 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.4.0 '@ckeditor/ckeditor5-widget': 47.4.0 ckeditor5: 47.4.0 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-mention@47.4.0(patch_hash=5981fb59ba35829e4dff1d39cf771000f8a8fdfa7a34b51d8af9549541f2d62d)': dependencies: @@ -15815,6 +15817,8 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 es-toolkit: 1.39.5 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-merge-fields@47.4.0': dependencies: @@ -15827,6 +15831,8 @@ snapshots: '@ckeditor/ckeditor5-widget': 47.4.0 ckeditor5: 47.4.0 es-toolkit: 1.39.5 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-minimap@47.4.0': dependencies: @@ -15835,6 +15841,8 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.4.0 '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-operations-compressor@47.4.0': dependencies: @@ -15889,6 +15897,8 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.4.0 '@ckeditor/ckeditor5-widget': 47.4.0 ckeditor5: 47.4.0 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-pagination@47.4.0': dependencies: @@ -15952,8 +15962,6 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.4.0 '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-restricted-editing@47.4.0': dependencies: @@ -15998,6 +16006,8 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.4.0 '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-slash-command@47.4.0': dependencies: @@ -16010,6 +16020,8 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.4.0 '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-source-editing-enhanced@47.4.0': dependencies: @@ -16057,6 +16069,8 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 es-toolkit: 1.39.5 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-table@47.4.0': dependencies: @@ -16069,6 +16083,8 @@ snapshots: '@ckeditor/ckeditor5-widget': 47.4.0 ckeditor5: 47.4.0 es-toolkit: 1.39.5 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-template@47.4.0': dependencies: @@ -16179,6 +16195,8 @@ snapshots: '@ckeditor/ckeditor5-engine': 47.4.0 '@ckeditor/ckeditor5-utils': 47.4.0 es-toolkit: 1.39.5 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-widget@47.4.0': dependencies: @@ -16198,6 +16216,8 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 es-toolkit: 1.39.5 + transitivePeerDependencies: + - supports-color '@codemirror/autocomplete@6.18.6': dependencies: @@ -21664,6 +21684,8 @@ snapshots: ckeditor5-collaboration@47.4.0: dependencies: '@ckeditor/ckeditor5-collaboration-core': 47.4.0 + transitivePeerDependencies: + - supports-color ckeditor5-premium-features@47.4.0(bufferutil@4.0.9)(ckeditor5@47.4.0)(utf-8-validate@6.0.5): dependencies: @@ -25263,11 +25285,11 @@ snapshots: jquery-hotkeys@0.2.2: {} - jquery.fancytree@2.38.5(jquery@3.7.1): + jquery.fancytree@2.38.5(jquery@4.0.0): dependencies: - jquery: 3.7.1 + jquery: 4.0.0 - jquery@3.7.1: {} + jquery@4.0.0: {} js-levenshtein@1.1.6: {} From c287a2ae97768707719e7b0cfaf259d70379d5e7 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sun, 18 Jan 2026 05:39:59 +0000 Subject: [PATCH 111/353] fix(deps): update dependency mind-elixir to v5.6.1 --- apps/client/package.json | 2 +- pnpm-lock.yaml | 70 ++++++++++++++++++++++++++++------------ 2 files changed, 51 insertions(+), 21 deletions(-) diff --git a/apps/client/package.json b/apps/client/package.json index c3886cc4ff..87085ecbb2 100644 --- a/apps/client/package.json +++ b/apps/client/package.json @@ -56,7 +56,7 @@ "mark.js": "8.11.1", "marked": "17.0.1", "mermaid": "11.12.2", - "mind-elixir": "5.5.0", + "mind-elixir": "5.6.1", "normalize.css": "8.0.1", "panzoom": "9.4.3", "preact": "10.28.2", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 5fb5adf9e8..0157b5bb9b 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -192,7 +192,7 @@ importers: version: 0.2.0(mermaid@11.12.2) '@mind-elixir/node-menu': specifier: 5.0.1 - version: 5.0.1(mind-elixir@5.5.0) + version: 5.0.1(mind-elixir@5.6.1) '@popperjs/core': specifier: 2.11.8 version: 2.11.8 @@ -284,8 +284,8 @@ importers: specifier: 11.12.2 version: 11.12.2 mind-elixir: - specifier: 5.5.0 - version: 5.5.0 + specifier: 5.6.1 + version: 5.6.1 normalize.css: specifier: 8.0.1 version: 8.0.1 @@ -10347,8 +10347,8 @@ packages: resolution: {integrity: sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==} engines: {node: '>=10'} - mind-elixir@5.5.0: - resolution: {integrity: sha512-a/bOTp3wJrK/vTm2/Vn5+9kYL0fNqxWvm8SsVojJO/tltLPPU8yMPzFCZHzGRz1Aoj6bpLxN+ExfIbc28nrNxQ==} + mind-elixir@5.6.1: + resolution: {integrity: sha512-FTpP5yfyjqXxtHbUAcJVrzBgbU9en0dQIbYx4lQc1C7aWOnjHGHr9iVccgMqU4gh9jVIBpunm4++2DpN753mGg==} mini-css-extract-plugin@2.9.4: resolution: {integrity: sha512-ZWYT7ln73Hptxqxk2DxPU9MmapXRhxkJD6tkSR04dnQxm8BGu2hzgKLugK5yySD97u/8yy7Ma7E76k9ZdvtjkQ==} @@ -15228,8 +15228,6 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.4.0 '@ckeditor/ckeditor5-widget': 47.4.0 es-toolkit: 1.39.5 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-cloud-services@47.4.0': dependencies: @@ -15430,8 +15428,6 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 es-toolkit: 1.39.5 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-editor-classic@47.4.0': dependencies: @@ -15452,8 +15448,6 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 es-toolkit: 1.39.5 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-editor-inline@47.4.0': dependencies: @@ -15463,6 +15457,8 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 es-toolkit: 1.39.5 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-editor-multi-root@47.4.0': dependencies: @@ -15485,6 +15481,8 @@ snapshots: '@ckeditor/ckeditor5-table': 47.4.0 '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-emoji@47.4.0': dependencies: @@ -15510,8 +15508,6 @@ snapshots: '@ckeditor/ckeditor5-core': 47.4.0 '@ckeditor/ckeditor5-engine': 47.4.0 '@ckeditor/ckeditor5-utils': 47.4.0 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-essentials@47.4.0': dependencies: @@ -15543,6 +15539,8 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.4.0 '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-export-word@47.4.0': dependencies: @@ -15567,8 +15565,6 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 es-toolkit: 1.39.5 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-font@47.4.0': dependencies: @@ -15643,8 +15639,6 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.4.0 '@ckeditor/ckeditor5-widget': 47.4.0 ckeditor5: 47.4.0 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-html-embed@47.4.0': dependencies: @@ -15690,6 +15684,8 @@ snapshots: '@ckeditor/ckeditor5-widget': 47.4.0 ckeditor5: 47.4.0 es-toolkit: 1.39.5 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-import-word@47.4.0': dependencies: @@ -15702,6 +15698,8 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.4.0 '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-indent@47.4.0': dependencies: @@ -15713,6 +15711,8 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.4.0 '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-inspector@5.0.0': {} @@ -15722,6 +15722,8 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.4.0 '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-line-height@47.4.0': dependencies: @@ -15746,6 +15748,8 @@ snapshots: '@ckeditor/ckeditor5-widget': 47.4.0 ckeditor5: 47.4.0 es-toolkit: 1.39.5 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-list-multi-level@47.4.0': dependencies: @@ -15769,6 +15773,8 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.4.0 '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-markdown-gfm@47.4.0': dependencies: @@ -15806,6 +15812,8 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.4.0 '@ckeditor/ckeditor5-widget': 47.4.0 ckeditor5: 47.4.0 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-mention@47.4.0(patch_hash=5981fb59ba35829e4dff1d39cf771000f8a8fdfa7a34b51d8af9549541f2d62d)': dependencies: @@ -15815,6 +15823,8 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 es-toolkit: 1.39.5 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-merge-fields@47.4.0': dependencies: @@ -15827,6 +15837,8 @@ snapshots: '@ckeditor/ckeditor5-widget': 47.4.0 ckeditor5: 47.4.0 es-toolkit: 1.39.5 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-minimap@47.4.0': dependencies: @@ -15835,6 +15847,8 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.4.0 '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-operations-compressor@47.4.0': dependencies: @@ -15889,6 +15903,8 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.4.0 '@ckeditor/ckeditor5-widget': 47.4.0 ckeditor5: 47.4.0 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-pagination@47.4.0': dependencies: @@ -15998,6 +16014,8 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.4.0 '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-slash-command@47.4.0': dependencies: @@ -16010,6 +16028,8 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.4.0 '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-source-editing-enhanced@47.4.0': dependencies: @@ -16057,6 +16077,8 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 es-toolkit: 1.39.5 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-table@47.4.0': dependencies: @@ -16069,6 +16091,8 @@ snapshots: '@ckeditor/ckeditor5-widget': 47.4.0 ckeditor5: 47.4.0 es-toolkit: 1.39.5 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-template@47.4.0': dependencies: @@ -16179,6 +16203,8 @@ snapshots: '@ckeditor/ckeditor5-engine': 47.4.0 '@ckeditor/ckeditor5-utils': 47.4.0 es-toolkit: 1.39.5 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-widget@47.4.0': dependencies: @@ -16198,6 +16224,8 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 es-toolkit: 1.39.5 + transitivePeerDependencies: + - supports-color '@codemirror/autocomplete@6.18.6': dependencies: @@ -18112,9 +18140,9 @@ snapshots: '@microsoft/tsdoc@0.15.1': {} - '@mind-elixir/node-menu@5.0.1(mind-elixir@5.5.0)': + '@mind-elixir/node-menu@5.0.1(mind-elixir@5.6.1)': dependencies: - mind-elixir: 5.5.0 + mind-elixir: 5.6.1 '@mixmark-io/domino@2.2.0': {} @@ -21664,6 +21692,8 @@ snapshots: ckeditor5-collaboration@47.4.0: dependencies: '@ckeditor/ckeditor5-collaboration-core': 47.4.0 + transitivePeerDependencies: + - supports-color ckeditor5-premium-features@47.4.0(bufferutil@4.0.9)(ckeditor5@47.4.0)(utf-8-validate@6.0.5): dependencies: @@ -26397,7 +26427,7 @@ snapshots: mimic-response@3.1.0: {} - mind-elixir@5.5.0: {} + mind-elixir@5.6.1: {} mini-css-extract-plugin@2.9.4(webpack@5.101.3(@swc/core@1.11.29(@swc/helpers@0.5.17))(esbuild@0.27.2)): dependencies: From 432c054b68f2e6182339af5e04c278f457301930 Mon Sep 17 00:00:00 2001 From: Hosted Weblate <hosted@weblate.org> Date: Sun, 18 Jan 2026 07:25:40 +0100 Subject: [PATCH 112/353] Update translation files Updated by "Cleanup translation files" add-on in Weblate. Translation: Trilium Notes/README Translate-URL: https://hosted.weblate.org/projects/trilium/readme/ --- docs/README-nb_NO.md | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/docs/README-nb_NO.md b/docs/README-nb_NO.md index fc5ae268cc..f4ebb15319 100644 --- a/docs/README-nb_NO.md +++ b/docs/README-nb_NO.md @@ -62,8 +62,8 @@ Vår dokumentasjon er tilgjengelig i flere format: TriliumNext](https://docs.triliumnotes.org/user-guide/setup/upgrading) - [Grunnleggende konsepter og funksjoner](https://docs.triliumnotes.org/user-guide/concepts/notes) -- [Patterns of Personal Knowledge - Base](https://docs.triliumnotes.org/user-guide/misc/patterns-of-personal-knowledge) +- [Modeller for personlig + kunnskapsbase](https://docs.triliumnotes.org/user-guide/misc/patterns-of-personal-knowledge) ## 🎁 Funksjoner @@ -109,8 +109,8 @@ Vår dokumentasjon er tilgjengelig i flere format: * Mind maps, based on [Mind Elixir](https://docs.mind-elixir.com/) * [Geo maps](https://docs.triliumnotes.org/user-guide/collections/geomap) with location pins and GPX tracks -* [Scripting](https://docs.triliumnotes.org/user-guide/scripts) - see [Advanced - showcases](https://docs.triliumnotes.org/user-guide/advanced-usage/advanced-showcases) +* [Skripting](https://docs.triliumnotes.org/user-guide/scripts) - se [Avanserte + bruksområder](https://docs.triliumnotes.org/user-guide/advanced-usage/advanced-showcases) * [REST API](https://docs.triliumnotes.org/user-guide/advanced-usage/etapi) for automatisering * Scales well in both usability and performance upwards of 100 000 notes @@ -156,13 +156,13 @@ compatible with the latest zadam/trilium version of versions of TriliumNext/Trilium have their sync versions incremented which prevents direct migration. -## 💬 Discuss with us +## 💬Diskuter med oss Feel free to join our official conversations. We would love to hear what features, suggestions, or issues you may have! -- [Matrix](https://matrix.to/#/#triliumnext:matrix.org) (For synchronous - discussions.) +- [Matrix](https://matrix.to/#/#triliumnext:matrix.org) (For synkrone + diskusjoner.) - The `General` Matrix room is also bridged to [XMPP](xmpp:discuss@trilium.thisgreat.party?join) - [Github Discussions](https://github.com/TriliumNext/Trilium/discussions) (For @@ -322,7 +322,7 @@ Consider supporting the main developer - [GitHub Sponsors](https://github.com/sponsors/eliandoran) - [PayPal](https://paypal.me/eliandoran) -- [Buy Me a Coffee](https://buymeacoffee.com/eliandoran) +- [Spander en kaffe](https://buymeacoffee.com/eliandoran) ## 🔑 Lisens From ebadcfd844e4040504cdb49d06644eb0a0888b5e Mon Sep 17 00:00:00 2001 From: Elian Doran <contact@eliandoran.me> Date: Sun, 18 Jan 2026 10:14:55 +0200 Subject: [PATCH 113/353] feat(sql_console): enable pagination --- apps/client/src/widgets/type_widgets/SqlConsole.tsx | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/apps/client/src/widgets/type_widgets/SqlConsole.tsx b/apps/client/src/widgets/type_widgets/SqlConsole.tsx index 54e17647e0..24dd339801 100644 --- a/apps/client/src/widgets/type_widgets/SqlConsole.tsx +++ b/apps/client/src/widgets/type_widgets/SqlConsole.tsx @@ -3,7 +3,7 @@ import "./SqlConsole.css"; import { SchemaResponse, SqlExecuteResults } from "@triliumnext/commons"; import { useEffect, useState } from "preact/hooks"; import { Fragment } from "preact/jsx-runtime"; -import { ClipboardModule, EditModule, ExportModule, FilterModule, FormatModule, FrozenColumnsModule, KeybindingsModule, ResizeColumnsModule, SelectRangeModule, SelectRowModule, SortModule } from "tabulator-tables"; +import { ClipboardModule, EditModule, ExportModule, FilterModule, FormatModule, FrozenColumnsModule, KeybindingsModule, PageModule, ResizeColumnsModule, SelectRangeModule, SelectRowModule, SortModule } from "tabulator-tables"; import { t } from "../../services/i18n"; import server from "../../services/server"; @@ -70,7 +70,7 @@ function SqlResultTable({ rows }: { rows: object[] }) { return ( <Tabulator layout="fitDataFill" - modules={[ ResizeColumnsModule, SortModule, SelectRangeModule, ClipboardModule, KeybindingsModule, EditModule, ExportModule, SelectRowModule, FormatModule, FrozenColumnsModule, FilterModule ]} + modules={[ ResizeColumnsModule, SortModule, SelectRangeModule, ClipboardModule, KeybindingsModule, EditModule, ExportModule, SelectRowModule, FormatModule, FrozenColumnsModule, FilterModule, PageModule ]} selectableRange clipboard="copy" clipboardCopyRowRange="range" @@ -78,6 +78,9 @@ function SqlResultTable({ rows }: { rows: object[] }) { rowHeaders: false, columnHeaders: false }} + pagination + paginationSize={20} + paginationCounter="rows" columns={[ { title: "#", From 46c3f5296ad142b4ae84edebc38a7814dcfaf557 Mon Sep 17 00:00:00 2001 From: Elian Doran <contact@eliandoran.me> Date: Sun, 18 Jan 2026 10:20:15 +0200 Subject: [PATCH 114/353] chore(sql_console): full-height table --- apps/client/src/stylesheets/table.css | 9 ++++----- apps/client/src/widgets/collections/table/index.css | 6 +++++- apps/client/src/widgets/type_widgets/SqlConsole.css | 1 - apps/client/src/widgets/type_widgets/SqlConsole.tsx | 1 + 4 files changed, 10 insertions(+), 7 deletions(-) diff --git a/apps/client/src/stylesheets/table.css b/apps/client/src/stylesheets/table.css index 11e401fcb2..f5cd77f98b 100644 --- a/apps/client/src/stylesheets/table.css +++ b/apps/client/src/stylesheets/table.css @@ -14,13 +14,13 @@ --row-moving-background-color: var(--accented-background-color); --row-text-color: var(--main-text-color); --row-delimiter-color: var(--more-accented-background-color); - + --cell-horiz-padding-size: 8px; --cell-vert-padding-size: 8px; - + --cell-editable-hover-outline-color: var(--main-border-color); --cell-read-only-text-color: var(--muted-text-color); - + --cell-editing-border-color: var(--main-border-color); --cell-editing-border-width: 2px; --cell-editing-background-color: var(--ck-color-selector-focused-cell-background); @@ -80,7 +80,6 @@ .tabulator-tableholder { padding-top: 10px; - height: unset !important; /* Don't extend on the full height */ } /* Rows */ @@ -196,4 +195,4 @@ :root .tabulator .tabulator-footer { border-top: unset; padding: 10px 0; -} \ No newline at end of file +} diff --git a/apps/client/src/widgets/collections/table/index.css b/apps/client/src/widgets/collections/table/index.css index ff24dda261..897a87b512 100644 --- a/apps/client/src/widgets/collections/table/index.css +++ b/apps/client/src/widgets/collections/table/index.css @@ -4,6 +4,10 @@ height: 100%; user-select: none; padding: 0 5px 0 10px; + + .tabulator-tableholder { + height: unset !important; + } } .table-view-container { @@ -68,4 +72,4 @@ inset-inline-start: 0; font-size: 1.5em; transform: translateY(-50%); -} \ No newline at end of file +} diff --git a/apps/client/src/widgets/type_widgets/SqlConsole.css b/apps/client/src/widgets/type_widgets/SqlConsole.css index 2aec590703..c1871fad33 100644 --- a/apps/client/src/widgets/type_widgets/SqlConsole.css +++ b/apps/client/src/widgets/type_widgets/SqlConsole.css @@ -19,7 +19,6 @@ min-height: 0; > .tabulator { - height: 100%; --cell-vert-padding-size: 4px; > .tabulator-tableholder { diff --git a/apps/client/src/widgets/type_widgets/SqlConsole.tsx b/apps/client/src/widgets/type_widgets/SqlConsole.tsx index 24dd339801..34fd573a55 100644 --- a/apps/client/src/widgets/type_widgets/SqlConsole.tsx +++ b/apps/client/src/widgets/type_widgets/SqlConsole.tsx @@ -81,6 +81,7 @@ function SqlResultTable({ rows }: { rows: object[] }) { pagination paginationSize={20} paginationCounter="rows" + height="100%" columns={[ { title: "#", From 9c4163ad3aceb5fbb9b22da393551eed60c2c003 Mon Sep 17 00:00:00 2001 From: Elian Doran <contact@eliandoran.me> Date: Sun, 18 Jan 2026 10:24:55 +0200 Subject: [PATCH 115/353] feat(sql_console): page size selector --- apps/client/src/widgets/type_widgets/SqlConsole.tsx | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/apps/client/src/widgets/type_widgets/SqlConsole.tsx b/apps/client/src/widgets/type_widgets/SqlConsole.tsx index 34fd573a55..0c2741714c 100644 --- a/apps/client/src/widgets/type_widgets/SqlConsole.tsx +++ b/apps/client/src/widgets/type_widgets/SqlConsole.tsx @@ -79,7 +79,8 @@ function SqlResultTable({ rows }: { rows: object[] }) { columnHeaders: false }} pagination - paginationSize={20} + paginationSize={15} + paginationSizeSelector paginationCounter="rows" height="100%" columns={[ From af5061646c03e76a3cdec2e8252c591f43b54b32 Mon Sep 17 00:00:00 2001 From: Elian Doran <contact@eliandoran.me> Date: Sun, 18 Jan 2026 10:36:44 +0200 Subject: [PATCH 116/353] feat(sql_console): add not yet executed message --- .../src/translations/en/translation.json | 4 +- apps/client/src/widgets/react/NoItems.css | 18 ++++++ apps/client/src/widgets/react/NoItems.tsx | 21 +++++++ .../widgets/sidebar/RightPanelContainer.css | 18 ------ .../widgets/sidebar/RightPanelContainer.tsx | 12 ++-- .../src/widgets/type_widgets/SqlConsole.tsx | 55 ++++++++++++------- 6 files changed, 83 insertions(+), 45 deletions(-) create mode 100644 apps/client/src/widgets/react/NoItems.css create mode 100644 apps/client/src/widgets/react/NoItems.tsx diff --git a/apps/client/src/translations/en/translation.json b/apps/client/src/translations/en/translation.json index 652ad07257..4633b1a473 100644 --- a/apps/client/src/translations/en/translation.json +++ b/apps/client/src/translations/en/translation.json @@ -1815,7 +1815,9 @@ "configure_launchbar": "Configure Launchbar" }, "sql_result": { - "no_rows": "No rows have been returned for this query" + "not_executed": "The query has not been executed yet.", + "no_rows": "No rows have been returned for this query", + "execute_now": "Execute now" }, "sql_table_schemas": { "tables": "Tables" diff --git a/apps/client/src/widgets/react/NoItems.css b/apps/client/src/widgets/react/NoItems.css new file mode 100644 index 0000000000..f9876db6c4 --- /dev/null +++ b/apps/client/src/widgets/react/NoItems.css @@ -0,0 +1,18 @@ +.no-items { + display: flex; + align-items: center; + justify-content: center; + flex-grow: 1; + flex-direction: column; + padding: 0.75em; + color: var(--muted-text-color); + height: 100%; + + .tn-icon { + font-size: 3em; + } + + button { + margin-top: 1em; + } +} diff --git a/apps/client/src/widgets/react/NoItems.tsx b/apps/client/src/widgets/react/NoItems.tsx new file mode 100644 index 0000000000..d7a5a6270f --- /dev/null +++ b/apps/client/src/widgets/react/NoItems.tsx @@ -0,0 +1,21 @@ +import "./NoItems.css"; + +import { ComponentChildren } from "preact"; + +import Icon from "./Icon"; + +interface NoItemsProps { + icon: string; + text: string; + children?: ComponentChildren; +} + +export default function NoItems({ icon, text, children }: NoItemsProps) { + return ( + <div className="no-items"> + <Icon icon={icon} /> + {text} + {children} + </div> + ); +} diff --git a/apps/client/src/widgets/sidebar/RightPanelContainer.css b/apps/client/src/widgets/sidebar/RightPanelContainer.css index 4c097c3862..2000a20d75 100644 --- a/apps/client/src/widgets/sidebar/RightPanelContainer.css +++ b/apps/client/src/widgets/sidebar/RightPanelContainer.css @@ -40,22 +40,4 @@ body.experimental-feature-new-layout #right-pane { .gutter-vertical + .card .card-header { padding-top: 0; } - - .no-items { - display: flex; - align-items: center; - justify-content: center; - flex-grow: 1; - flex-direction: column; - padding: 0.75em; - color: var(--muted-text-color); - - .tn-icon { - font-size: 3em; - } - - button { - margin-top: 1em; - } - } } diff --git a/apps/client/src/widgets/sidebar/RightPanelContainer.tsx b/apps/client/src/widgets/sidebar/RightPanelContainer.tsx index d28887b9f4..f6f1784a51 100644 --- a/apps/client/src/widgets/sidebar/RightPanelContainer.tsx +++ b/apps/client/src/widgets/sidebar/RightPanelContainer.tsx @@ -3,7 +3,7 @@ import "./RightPanelContainer.css"; import Split from "@triliumnext/split.js"; import { VNode } from "preact"; -import { useState, useEffect, useRef, useCallback } from "preact/hooks"; +import { useCallback,useEffect, useRef, useState } from "preact/hooks"; import appContext from "../../components/app_context"; import { WidgetsByParent } from "../../services/bundle"; @@ -13,6 +13,7 @@ import { DEFAULT_GUTTER_SIZE } from "../../services/resizer"; import Button from "../react/Button"; import { useActiveNoteContext, useLegacyWidget, useNoteProperty, useTriliumEvent, useTriliumOptionJson } from "../react/hooks"; import Icon from "../react/Icon"; +import NoItems from "../react/NoItems"; import LegacyRightPanelWidget from "../right_panel_widget"; import HighlightsList from "./HighlightsList"; import PdfAttachments from "./pdf/PdfAttachments"; @@ -47,14 +48,15 @@ export default function RightPanelContainer({ widgetsByParent }: { widgetsByPare items.length > 0 ? ( items ) : ( - <div className="no-items"> - <Icon icon="bx bx-sidebar" /> - {t("right_pane.empty_message")} + <NoItems + icon="bx bx-sidebar" + text={t("right_pane.empty_message")} + > <Button text={t("right_pane.empty_button")} triggerCommand="toggleRightPane" /> - </div> + </NoItems> ) )} </div> diff --git a/apps/client/src/widgets/type_widgets/SqlConsole.tsx b/apps/client/src/widgets/type_widgets/SqlConsole.tsx index 0c2741714c..ad03f38a72 100644 --- a/apps/client/src/widgets/type_widgets/SqlConsole.tsx +++ b/apps/client/src/widgets/type_widgets/SqlConsole.tsx @@ -9,8 +9,10 @@ import { t } from "../../services/i18n"; import server from "../../services/server"; import Tabulator from "../collections/table/tabulator"; import Alert from "../react/Alert"; +import Button from "../react/Button"; import Dropdown from "../react/Dropdown"; import { useTriliumEvent } from "../react/hooks"; +import NoItems from "../react/NoItems"; import SplitEditor from "./helpers/SplitEditor"; import { TypeWidgetProps } from "./type_widget"; @@ -30,7 +32,7 @@ export default function SqlConsole(props: TypeWidgetProps) { ); } -function SqlResults({ note, ntxId }: TypeWidgetProps) { +function SqlResults({ ntxId }: TypeWidgetProps) { const [ results, setResults ] = useState<SqlExecuteResults>(); useTriliumEvent("sqlQueryResults", ({ ntxId: eventNtxId, results }) => { @@ -38,27 +40,38 @@ function SqlResults({ note, ntxId }: TypeWidgetProps) { setResults(results); }); - const isEnabled = note?.mime === "text/x-sqlite;schema=trilium"; - return ( - <div className={`sql-result-widget ${!isEnabled ? "hidden-ext" : ""}`}> - {isEnabled && ( - results?.length === 1 && Array.isArray(results[0]) && results[0].length === 0 ? ( - <Alert type="info"> - {t("sql_result.no_rows")} - </Alert> - ) : ( - <div className="sql-console-result-container selectable-text"> - {results?.map((rows, index) => { - // inserts, updates - if (typeof rows === "object" && !Array.isArray(rows)) { - return <pre key={index}>{JSON.stringify(rows, null, "\t")}</pre>; - } + if (results === undefined) { + return ( + <NoItems + icon="bx bx-data" + text={t("sql_result.not_executed")} + > + <Button + text={t("sql_result.execute_now")} + triggerCommand="runActiveNote" + /> + </NoItems> + ); + } - // selects - return <SqlResultTable key={index} rows={rows} />; - })} - </div> - ) + return ( + <div className="sql-result-widget"> + {results?.length === 1 && Array.isArray(results[0]) && results[0].length === 0 ? ( + <Alert type="info"> + {t("sql_result.no_rows")} + </Alert> + ) : ( + <div className="sql-console-result-container selectable-text"> + {results?.map((rows, index) => { + // inserts, updates + if (typeof rows === "object" && !Array.isArray(rows)) { + return <pre key={index}>{JSON.stringify(rows, null, "\t")}</pre>; + } + + // selects + return <SqlResultTable key={index} rows={rows} />; + })} + </div> )} </div> ); From 7179701e0f9c42111a1953a4638c33dd1e52fec5 Mon Sep 17 00:00:00 2001 From: Elian Doran <contact@eliandoran.me> Date: Sun, 18 Jan 2026 10:58:32 +0200 Subject: [PATCH 117/353] feat(sql_console): improve no results --- apps/client/src/widgets/type_widgets/SqlConsole.tsx | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/apps/client/src/widgets/type_widgets/SqlConsole.tsx b/apps/client/src/widgets/type_widgets/SqlConsole.tsx index ad03f38a72..42c19c62ea 100644 --- a/apps/client/src/widgets/type_widgets/SqlConsole.tsx +++ b/apps/client/src/widgets/type_widgets/SqlConsole.tsx @@ -57,9 +57,10 @@ function SqlResults({ ntxId }: TypeWidgetProps) { return ( <div className="sql-result-widget"> {results?.length === 1 && Array.isArray(results[0]) && results[0].length === 0 ? ( - <Alert type="info"> - {t("sql_result.no_rows")} - </Alert> + <NoItems + icon="bx bx-rectangle" + text={t("sql_result.no_rows")} + /> ) : ( <div className="sql-console-result-container selectable-text"> {results?.map((rows, index) => { From 94dca4cd87c7fa9e17a7e847aaa2ab2b64b959ce Mon Sep 17 00:00:00 2001 From: Elian Doran <contact@eliandoran.me> Date: Sun, 18 Jan 2026 11:13:31 +0200 Subject: [PATCH 118/353] feat(sql_console): report errors inline --- apps/client/src/components/app_context.ts | 4 +- apps/client/src/components/entrypoints.ts | 26 ++++---- .../src/translations/en/translation.json | 1 + .../src/widgets/type_widgets/SqlConsole.tsx | 61 ++++++++++++------- 4 files changed, 52 insertions(+), 40 deletions(-) diff --git a/apps/client/src/components/app_context.ts b/apps/client/src/components/app_context.ts index b5f203b245..8f6466e011 100644 --- a/apps/client/src/components/app_context.ts +++ b/apps/client/src/components/app_context.ts @@ -1,6 +1,6 @@ import type { CKTextEditor } from "@triliumnext/ckeditor5"; import type CodeMirror from "@triliumnext/codemirror"; -import { SqlExecuteResults } from "@triliumnext/commons"; +import { SqlExecuteResponse } from "@triliumnext/commons"; import type { NativeImage, TouchBar } from "electron"; import { ColumnComponent } from "tabulator-tables"; @@ -410,7 +410,7 @@ type EventMappings = { addNewLabel: CommandData; addNewRelation: CommandData; sqlQueryResults: CommandData & { - results: SqlExecuteResults; + response: SqlExecuteResponse; }; readOnlyTemporarilyDisabled: { noteContext: NoteContext; diff --git a/apps/client/src/components/entrypoints.ts b/apps/client/src/components/entrypoints.ts index 8a902666f9..8fc4e1b3d5 100644 --- a/apps/client/src/components/entrypoints.ts +++ b/apps/client/src/components/entrypoints.ts @@ -1,16 +1,17 @@ -import utils from "../services/utils.js"; +import { CreateChildrenResponse, SqlExecuteResponse } from "@triliumnext/commons"; + +import bundleService from "../services/bundle.js"; import dateNoteService from "../services/date_notes.js"; +import froca from "../services/froca.js"; +import { t } from "../services/i18n.js"; +import linkService from "../services/link.js"; import protectedSessionHolder from "../services/protected_session_holder.js"; import server from "../services/server.js"; +import toastService from "../services/toast.js"; +import utils from "../services/utils.js"; +import ws from "../services/ws.js"; import appContext, { type NoteCommandData } from "./app_context.js"; import Component from "./component.js"; -import toastService from "../services/toast.js"; -import ws from "../services/ws.js"; -import bundleService from "../services/bundle.js"; -import froca from "../services/froca.js"; -import linkService from "../services/link.js"; -import { t } from "../services/i18n.js"; -import { CreateChildrenResponse, SqlExecuteResponse } from "@triliumnext/commons"; export default class Entrypoints extends Component { constructor() { @@ -187,13 +188,8 @@ export default class Entrypoints extends Component { } else if (note.mime.endsWith("env=backend")) { await server.post(`script/run/${note.noteId}`); } else if (note.mime === "text/x-sqlite;schema=trilium") { - const resp = await server.post<SqlExecuteResponse>(`sql/execute/${note.noteId}`); - - if (!resp.success) { - toastService.showError(t("entrypoints.sql-error", { message: resp.error })); - } - - await appContext.triggerEvent("sqlQueryResults", { ntxId: ntxId, results: resp.results }); + const response = await server.post<SqlExecuteResponse>(`sql/execute/${note.noteId}`); + await appContext.triggerEvent("sqlQueryResults", { ntxId, response }); } toastService.showMessage(t("entrypoints.note-executed")); diff --git a/apps/client/src/translations/en/translation.json b/apps/client/src/translations/en/translation.json index 4633b1a473..19beceee38 100644 --- a/apps/client/src/translations/en/translation.json +++ b/apps/client/src/translations/en/translation.json @@ -1817,6 +1817,7 @@ "sql_result": { "not_executed": "The query has not been executed yet.", "no_rows": "No rows have been returned for this query", + "failed": "SQL query execution has failed", "execute_now": "Execute now" }, "sql_table_schemas": { diff --git a/apps/client/src/widgets/type_widgets/SqlConsole.tsx b/apps/client/src/widgets/type_widgets/SqlConsole.tsx index 42c19c62ea..2af9c8f0fc 100644 --- a/apps/client/src/widgets/type_widgets/SqlConsole.tsx +++ b/apps/client/src/widgets/type_widgets/SqlConsole.tsx @@ -1,6 +1,6 @@ import "./SqlConsole.css"; -import { SchemaResponse, SqlExecuteResults } from "@triliumnext/commons"; +import { SchemaResponse, SqlExecuteResponse } from "@triliumnext/commons"; import { useEffect, useState } from "preact/hooks"; import { Fragment } from "preact/jsx-runtime"; import { ClipboardModule, EditModule, ExportModule, FilterModule, FormatModule, FrozenColumnsModule, KeybindingsModule, PageModule, ResizeColumnsModule, SelectRangeModule, SelectRowModule, SortModule } from "tabulator-tables"; @@ -8,7 +8,6 @@ import { ClipboardModule, EditModule, ExportModule, FilterModule, FormatModule, import { t } from "../../services/i18n"; import server from "../../services/server"; import Tabulator from "../collections/table/tabulator"; -import Alert from "../react/Alert"; import Button from "../react/Button"; import Dropdown from "../react/Dropdown"; import { useTriliumEvent } from "../react/hooks"; @@ -33,14 +32,15 @@ export default function SqlConsole(props: TypeWidgetProps) { } function SqlResults({ ntxId }: TypeWidgetProps) { - const [ results, setResults ] = useState<SqlExecuteResults>(); + const [ response, setResponse ] = useState<SqlExecuteResponse>(); - useTriliumEvent("sqlQueryResults", ({ ntxId: eventNtxId, results }) => { + useTriliumEvent("sqlQueryResults", ({ ntxId: eventNtxId, response }) => { if (eventNtxId !== ntxId) return; - setResults(results); + setResponse(response); }); - if (results === undefined) { + // Not yet executed. + if (response === undefined) { return ( <NoItems icon="bx bx-data" @@ -54,26 +54,41 @@ function SqlResults({ ntxId }: TypeWidgetProps) { ); } + // Executed but failed. + if (response && !response.success) { + return ( + <NoItems + icon="bx bx-error" + text={t("sql_result.failed")} + > + <pre className="sql-error-message selectable-text">{response.error}</pre> + </NoItems> + ); + } + + // Zero results. + if (response?.results.length === 1 && Array.isArray(response.results[0]) && response.results[0].length === 0) { + return ( + <NoItems + icon="bx bx-rectangle" + text={t("sql_result.no_rows")} + /> + ); + } + return ( <div className="sql-result-widget"> - {results?.length === 1 && Array.isArray(results[0]) && results[0].length === 0 ? ( - <NoItems - icon="bx bx-rectangle" - text={t("sql_result.no_rows")} - /> - ) : ( - <div className="sql-console-result-container selectable-text"> - {results?.map((rows, index) => { - // inserts, updates - if (typeof rows === "object" && !Array.isArray(rows)) { - return <pre key={index}>{JSON.stringify(rows, null, "\t")}</pre>; - } + <div className="sql-console-result-container selectable-text"> + {response?.results.map((rows, index) => { + // inserts, updates + if (typeof rows === "object" && !Array.isArray(rows)) { + return <pre key={index}>{JSON.stringify(rows, null, "\t")}</pre>; + } - // selects - return <SqlResultTable key={index} rows={rows} />; - })} - </div> - )} + // selects + return <SqlResultTable key={index} rows={rows} />; + })} + </div> </div> ); } From 748b87da9af8b0c3c6e266c30312c5fa94e2be29 Mon Sep 17 00:00:00 2001 From: Elian Doran <contact@eliandoran.me> Date: Sun, 18 Jan 2026 11:34:31 +0200 Subject: [PATCH 119/353] feat(sql_console): improve display for statements --- apps/client/src/translations/en/translation.json | 1 + apps/client/src/widgets/type_widgets/SqlConsole.tsx | 10 +++++++++- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/apps/client/src/translations/en/translation.json b/apps/client/src/translations/en/translation.json index 19beceee38..f112508c1e 100644 --- a/apps/client/src/translations/en/translation.json +++ b/apps/client/src/translations/en/translation.json @@ -1818,6 +1818,7 @@ "not_executed": "The query has not been executed yet.", "no_rows": "No rows have been returned for this query", "failed": "SQL query execution has failed", + "statement_result": "Statement result", "execute_now": "Execute now" }, "sql_table_schemas": { diff --git a/apps/client/src/widgets/type_widgets/SqlConsole.tsx b/apps/client/src/widgets/type_widgets/SqlConsole.tsx index 2af9c8f0fc..d7cd02f0ed 100644 --- a/apps/client/src/widgets/type_widgets/SqlConsole.tsx +++ b/apps/client/src/widgets/type_widgets/SqlConsole.tsx @@ -82,7 +82,15 @@ function SqlResults({ ntxId }: TypeWidgetProps) { {response?.results.map((rows, index) => { // inserts, updates if (typeof rows === "object" && !Array.isArray(rows)) { - return <pre key={index}>{JSON.stringify(rows, null, "\t")}</pre>; + return ( + <NoItems + key={index} + icon="bx bx-play" + text={t("sql_result.statement_result")} + > + <pre key={index}>{JSON.stringify(rows, null, "\t")}</pre> + </NoItems> + ); } // selects From 69e88c1d9fc9a210a4d19d0e34d1934dbc8e60ca Mon Sep 17 00:00:00 2001 From: Elian Doran <contact@eliandoran.me> Date: Sun, 18 Jan 2026 11:48:34 +0200 Subject: [PATCH 120/353] chore(sql_console): set gutter color --- apps/client/src/widgets/type_widgets/SqlConsole.css | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/apps/client/src/widgets/type_widgets/SqlConsole.css b/apps/client/src/widgets/type_widgets/SqlConsole.css index c1871fad33..0ba53e8aaa 100644 --- a/apps/client/src/widgets/type_widgets/SqlConsole.css +++ b/apps/client/src/widgets/type_widgets/SqlConsole.css @@ -7,6 +7,10 @@ overflow: auto; } + .gutter { + background-color: var(--accented-background-color) !important; + } + .sql-result-widget { height: 100%; From 711828d6b485770e3e88ddbb0cf53fe781912bf8 Mon Sep 17 00:00:00 2001 From: Elian Doran <contact@eliandoran.me> Date: Sun, 18 Jan 2026 12:07:23 +0200 Subject: [PATCH 121/353] fix(shortcuts): triggering in bubbling phase, not capturing --- apps/client/src/services/shortcuts.ts | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/apps/client/src/services/shortcuts.ts b/apps/client/src/services/shortcuts.ts index 63db45302d..62c6b21ff4 100644 --- a/apps/client/src/services/shortcuts.ts +++ b/apps/client/src/services/shortcuts.ts @@ -110,8 +110,9 @@ function bindElShortcut($el: JQuery<ElementType | Element>, keyboardShortcut: st } }; - // Add the event listener - element.addEventListener('keydown', listener); + // Add the event listener in capture phase to intercept events before they reach + // child elements like CodeMirror + element.addEventListener('keydown', listener, true); // Store the binding for later cleanup const binding: ShortcutBinding = { @@ -138,15 +139,16 @@ export function removeIndividualBinding(binding: ShortcutBinding) { if (activeBindingsInNamespace) { activeBindings.set(key, activeBindingsInNamespace.filter(aBinding => aBinding.handler === binding.handler)); } - binding.element.removeEventListener("keydown", binding.listener); + // Remove listener with capture phase to match how it was added + binding.element.removeEventListener("keydown", binding.listener, true); } function removeNamespaceBindings(namespace: string) { const bindings = activeBindings.get(namespace); if (bindings) { - // Remove all event listeners for this namespace bindings.forEach(binding => { - binding.element.removeEventListener('keydown', binding.listener); + // Remove listener with capture phase to match how it was added + binding.element.removeEventListener('keydown', binding.listener, true); }); activeBindings.delete(namespace); } From 8182a04eaeb2f7a81228db555368b067c6057ca5 Mon Sep 17 00:00:00 2001 From: Elian Doran <contact@eliandoran.me> Date: Sun, 18 Jan 2026 12:09:01 +0200 Subject: [PATCH 122/353] fix(sql_console): not refreshing when switching between notes --- apps/client/src/widgets/type_widgets/SqlConsole.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/client/src/widgets/type_widgets/SqlConsole.tsx b/apps/client/src/widgets/type_widgets/SqlConsole.tsx index d7cd02f0ed..298ffa1bd0 100644 --- a/apps/client/src/widgets/type_widgets/SqlConsole.tsx +++ b/apps/client/src/widgets/type_widgets/SqlConsole.tsx @@ -22,7 +22,7 @@ export default function SqlConsole(props: TypeWidgetProps) { noteType="code" {...props} editorBefore={<SqlTableSchemas {...props} />} - previewContent={<SqlResults {...props} />} + previewContent={<SqlResults key={props.note.noteId} {...props} />} splitOptions={{ sizes: [ 70, 30 ] }} From 28d0bfd2295574c74f1576a8e3aa0d41715fa0a8 Mon Sep 17 00:00:00 2001 From: Elian Doran <contact@eliandoran.me> Date: Sun, 18 Jan 2026 12:11:03 +0200 Subject: [PATCH 123/353] chore(sql_console): reducing padding in footer --- apps/client/src/widgets/type_widgets/SqlConsole.css | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/apps/client/src/widgets/type_widgets/SqlConsole.css b/apps/client/src/widgets/type_widgets/SqlConsole.css index 0ba53e8aaa..346dd302af 100644 --- a/apps/client/src/widgets/type_widgets/SqlConsole.css +++ b/apps/client/src/widgets/type_widgets/SqlConsole.css @@ -32,6 +32,11 @@ .tabulator-col-content { padding: 4px !important; } + + > .tabulator-footer, + > .tabulator-footer .tabulator-footer-contents { + padding: 2px 4px; + } } } } From 791697369dffd6ae4963ec2256f612bfdd6383d8 Mon Sep 17 00:00:00 2001 From: Elian Doran <contact@eliandoran.me> Date: Sun, 18 Jan 2026 12:22:53 +0200 Subject: [PATCH 124/353] style(sql_console): remove background for footer --- apps/client/src/stylesheets/table.css | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/apps/client/src/stylesheets/table.css b/apps/client/src/stylesheets/table.css index f5cd77f98b..afd85857f1 100644 --- a/apps/client/src/stylesheets/table.css +++ b/apps/client/src/stylesheets/table.css @@ -98,6 +98,10 @@ border-top: none; border-bottom: 1px solid var(--row-delimiter-color); color: var(--row-text-color); + + &:last-of-type { + border-bottom: none; + } } .tabulator-row.tabulator-row-odd { @@ -173,10 +177,6 @@ margin: 0; } -.tabulator .tabulator-footer { - color: var(--main-text-color); -} - /* Context menus */ .tabulator-popup-container { @@ -191,8 +191,9 @@ } /* Footer */ - :root .tabulator .tabulator-footer { - border-top: unset; + background: transparent; + color: var(--main-text-color); + border-top: 1px solid var(--main-border-color); padding: 10px 0; } From 4491086c55b242bd935095a2c02def3b58df518b Mon Sep 17 00:00:00 2001 From: Elian Doran <contact@eliandoran.me> Date: Sun, 18 Jan 2026 12:34:00 +0200 Subject: [PATCH 125/353] style(sql_console): improve header & footer inputs --- apps/client/src/stylesheets/table.css | 47 +++++++++++++++++-- .../src/widgets/type_widgets/SqlConsole.css | 4 -- 2 files changed, 44 insertions(+), 7 deletions(-) diff --git a/apps/client/src/stylesheets/table.css b/apps/client/src/stylesheets/table.css index afd85857f1..3facb01e48 100644 --- a/apps/client/src/stylesheets/table.css +++ b/apps/client/src/stylesheets/table.css @@ -40,10 +40,33 @@ border-bottom: var(--col-header-bottom-border); background: var(--col-header-background-color); color: var(--col-header-text-color); -} -.tabulator .tabulator-col-content { - padding: 8px 4px !important; + .tabulator-col-content { + padding: 0 !important; + + .tabulator-col-title-holder { + padding: 8px 4px; + } + + &:has(.tabulator-header-filter) { + .tabulator-col-title-holder { + padding: 4px; + padding-bottom: 0; + } + } + + .tabulator-header-filter { + background: var(--main-background-color); + padding: 1px; + + input { + background: var(--input-background-color); + color: var(--input-text-color); + border: 1px solid var(--button-border-color); + outline: none; + } + } + } } @media (hover: hover) and (pointer: fine) { @@ -196,4 +219,22 @@ color: var(--main-text-color); border-top: 1px solid var(--main-border-color); padding: 10px 0; + + .tabulator-page { + background: var(--button-background-color); + color: var(--button-text-color); + border: 1px solid var(--button-border-color); + border-radius: var(--button-border-radius); + + &:hover { + border-color: var(--hover-item-border-color); + color: var(--button-text-color); + } + } + + select { + background: var(--button-background-color); + color: var(--input-text-color); + border: 1px solid var(--button-border-color); + } } diff --git a/apps/client/src/widgets/type_widgets/SqlConsole.css b/apps/client/src/widgets/type_widgets/SqlConsole.css index 346dd302af..85b8125546 100644 --- a/apps/client/src/widgets/type_widgets/SqlConsole.css +++ b/apps/client/src/widgets/type_widgets/SqlConsole.css @@ -29,10 +29,6 @@ padding: 0; } - .tabulator-col-content { - padding: 4px !important; - } - > .tabulator-footer, > .tabulator-footer .tabulator-footer-contents { padding: 2px 4px; From c376b0bbe2caf4de2baf45d21a4f92deb7e28ccc Mon Sep 17 00:00:00 2001 From: Elian Doran <contact@eliandoran.me> Date: Sun, 18 Jan 2026 12:35:42 +0200 Subject: [PATCH 126/353] style(sql_console): improve filter spacing --- apps/client/src/stylesheets/table.css | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/apps/client/src/stylesheets/table.css b/apps/client/src/stylesheets/table.css index 3facb01e48..b14a2edbc3 100644 --- a/apps/client/src/stylesheets/table.css +++ b/apps/client/src/stylesheets/table.css @@ -57,13 +57,15 @@ .tabulator-header-filter { background: var(--main-background-color); - padding: 1px; + padding: 2px 1px; input { - background: var(--input-background-color); - color: var(--input-text-color); + background: var(--main-background-color); + color: var(--main-text-color); border: 1px solid var(--button-border-color); + border-radius: 3px; outline: none; + padding: 2px; } } } From 0844914e1162f0f847c0345cc3f7edbb48051fa5 Mon Sep 17 00:00:00 2001 From: Elian Doran <contact@eliandoran.me> Date: Sun, 18 Jan 2026 13:05:18 +0200 Subject: [PATCH 127/353] style(sql_console): improve style for highlighted range --- apps/client/src/stylesheets/table.css | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/apps/client/src/stylesheets/table.css b/apps/client/src/stylesheets/table.css index b14a2edbc3..e39b771427 100644 --- a/apps/client/src/stylesheets/table.css +++ b/apps/client/src/stylesheets/table.css @@ -40,6 +40,13 @@ border-bottom: var(--col-header-bottom-border); background: var(--col-header-background-color); color: var(--col-header-text-color); + font-weight: normal; + + .tabulator-col.tabulator-range-highlight { + background: inherit; + color: inherit; + font-weight: bold; + } .tabulator-col-content { padding: 0 !important; From 197fa90176364c18e038bdd0619ad451eef3f27b Mon Sep 17 00:00:00 2001 From: Elian Doran <contact@eliandoran.me> Date: Sun, 18 Jan 2026 13:09:46 +0200 Subject: [PATCH 128/353] style(sql_console): improve style for frozen cell --- apps/client/src/stylesheets/table.css | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/apps/client/src/stylesheets/table.css b/apps/client/src/stylesheets/table.css index e39b771427..dace356a9c 100644 --- a/apps/client/src/stylesheets/table.css +++ b/apps/client/src/stylesheets/table.css @@ -134,6 +134,10 @@ &:last-of-type { border-bottom: none; } + + &.tabulator-range-highlight > .tabulator-cell.tabulator-frozen { + font-weight: bold; + } } .tabulator-row.tabulator-row-odd { @@ -155,11 +159,14 @@ margin-inline-end: var(--cell-editing-border-width); } -.tabulator-row .tabulator-cell.tabulator-frozen.tabulator-frozen-left, .tabulator-row .tabulator-cell { border-inline-end-color: transparent; } +.tabulator-row .tabulator-cell.tabulator-frozen.tabulator-frozen-left { + border-inline-end-color: var(--main-border-color); +} + .tabulator-row .tabulator-cell:not(.tabulator-editable) { color: var(--cell-read-only-text-color); } From bfc521fdc0ae66686d3bf7857ffebe213cfd6edd Mon Sep 17 00:00:00 2001 From: Elian Doran <contact@eliandoran.me> Date: Sun, 18 Jan 2026 17:11:03 +0200 Subject: [PATCH 129/353] fix(sql_console): enforce vertical layout --- apps/client/src/widgets/type_widgets/SqlConsole.tsx | 1 + .../src/widgets/type_widgets/helpers/SplitEditor.tsx | 8 +++++--- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/apps/client/src/widgets/type_widgets/SqlConsole.tsx b/apps/client/src/widgets/type_widgets/SqlConsole.tsx index 298ffa1bd0..8823f59abf 100644 --- a/apps/client/src/widgets/type_widgets/SqlConsole.tsx +++ b/apps/client/src/widgets/type_widgets/SqlConsole.tsx @@ -23,6 +23,7 @@ export default function SqlConsole(props: TypeWidgetProps) { {...props} editorBefore={<SqlTableSchemas {...props} />} previewContent={<SqlResults key={props.note.noteId} {...props} />} + forceOrientation="vertical" splitOptions={{ sizes: [ 70, 30 ] }} diff --git a/apps/client/src/widgets/type_widgets/helpers/SplitEditor.tsx b/apps/client/src/widgets/type_widgets/helpers/SplitEditor.tsx index 0b45d85212..5e4da905bb 100644 --- a/apps/client/src/widgets/type_widgets/helpers/SplitEditor.tsx +++ b/apps/client/src/widgets/type_widgets/helpers/SplitEditor.tsx @@ -18,6 +18,7 @@ export interface SplitEditorProps extends EditableCodeProps { previewContent: ComponentChildren; previewButtons?: ComponentChildren; editorBefore?: ComponentChildren; + forceOrientation?: "horizontal" | "vertical"; } /** @@ -29,8 +30,8 @@ export interface SplitEditorProps extends EditableCodeProps { * - Can display errors to the user via {@link setError}. * - Horizontal or vertical orientation for the editor/preview split, adjustable via the switch split orientation button floating button. */ -export default function SplitEditor({ note, error, splitOptions, previewContent, previewButtons, className, editorBefore, ...editorProps }: SplitEditorProps) { - const splitEditorOrientation = useSplitOrientation(); +export default function SplitEditor({ note, error, splitOptions, previewContent, previewButtons, className, editorBefore, forceOrientation, ...editorProps }: SplitEditorProps) { + const splitEditorOrientation = useSplitOrientation(forceOrientation); const [ readOnly ] = useNoteLabelBoolean(note, "readOnly"); const containerRef = useRef<HTMLDivElement>(null); @@ -95,8 +96,9 @@ export function PreviewButton(props: Omit<ActionButtonProps, "titlePosition">) { />; } -function useSplitOrientation() { +function useSplitOrientation(forceOrientation?: "horizontal" | "vertical") { const [ splitEditorOrientation ] = useTriliumOption("splitEditorOrientation"); + if (forceOrientation) return forceOrientation; if (isMobile()) return "vertical"; if (!splitEditorOrientation) return "horizontal"; return splitEditorOrientation as "horizontal" | "vertical"; From 97dfad419c1682cb4f047a5f99f7bf1b0a42e8f5 Mon Sep 17 00:00:00 2001 From: Elian Doran <contact@eliandoran.me> Date: Sun, 18 Jan 2026 17:35:01 +0200 Subject: [PATCH 130/353] docs(user): refresh photo for SQL console --- .../1_SQL Console_image.png | Bin 30610 -> 230 bytes .../2_SQL Console_image.png | Bin 230 -> 76220 bytes .../3_SQL Console_image.png | Bin 265 -> 0 bytes .../SQL Console.html | 34 ++++---- .../Import & Export/Evernote.html | 33 ++++---- .../Server Installation.html | 29 ++++--- .../Developer Guide/Documentation.md | 2 +- docs/Release Notes/Release Notes/v0.101.2.md | 2 +- docs/User Guide/!!!meta.json | 74 ++++++++---------- .../1_SQL Console_image.png | Bin 30610 -> 230 bytes .../2_SQL Console_image.png | Bin 230 -> 76220 bytes .../3_SQL Console_image.png | Bin 265 -> 0 bytes .../SQL Console.md | 10 +-- 13 files changed, 83 insertions(+), 101 deletions(-) delete mode 100644 apps/server/src/assets/doc_notes/en/User Guide/User Guide/Advanced Usage/Database/Manually altering the database/3_SQL Console_image.png delete mode 100644 docs/User Guide/User Guide/Advanced Usage/Database/Manually altering the database/3_SQL Console_image.png diff --git a/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Advanced Usage/Database/Manually altering the database/1_SQL Console_image.png b/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Advanced Usage/Database/Manually altering the database/1_SQL Console_image.png index 6f32f76ec97a50703e8775ff38053b61e949dde4..1b1834ba1fc25a9c47a42ed6611323294e72c426 100644 GIT binary patch literal 230 zcmeAS@N?(olHy`uVBq!ia0vp^!XV56BpAZ2GX;PYW3iKG2*)$7=$Syy0#6sm5Q)pl zKjL1$WMt=j|DT!BnU&dS!%sG$;-nXMlR2I=p72v;dw<`-kiCuhe{4gN!lwhef^9SE zIX147WplX3sn=H1BEcN-_P_5L9`OT7q5;|ZjJgF$77Sv}Y<d+(>dYMO$kxdyUgIb> z`d__chPCr`Ie`o57Chp`i8q+dxDPG!Im7wp@;6z91?*|^F5LDC59-c-SSzJDr%~a{ agL(#G))kA^YHm6X@_?tSpUXO@geCy8El%A4 literal 30610 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≪vU@{_wtbe$k2p!9f|rLWgqukh1V=-P!^ zNbTW1n{E)jhE`w4tqS`T{U5C7z}WmL@)ai>Khb;l&Bts{p7-rYR@aQRgu%8KYt6R- z0;|^Oqx2Lvl36>}rVC@-z>Ddk@BEYg@5kQyX-(fV#y~yF)%1p;fgnBtnf@8nJOA=t z+xri=25)qQ%`3f99g^ENDOb7IP6uJ&$!;ZvIPXIR*j7VUasm4Y?&a}@FAS0{41)s1 z1G*6K_&M{VjRm$Zu|l~0=H=cZZSr(ADQ3}6GcSh*BYH(AjbVZ65l$a5$4Gb0ql9nx zqyh*06I6iL)Q1j&o}lU4tw-2=;|%@ePOGPmNdVu6DNnD&{_(n)GA{0z<AM8)nFgK* z=Dt2VUKW8@u#eWBqN{yEQ)pjZgeaid`&gRikH^D8Dq`ig6A?0<0`RnJf5g(NlMqC( z@uDSDiw(cEZ>{stQa+_8Q?!CQQOsjA?X*2zDU-dD_tGzU$k_Mz3{VJ{(nqsxc$}#w zm5aGC43-meTqH@~z4s>Eua7Y_&XgR25q$0dQgt5Tz9FviZ1)OK&o9)MYzFNmX4D@I z*kZz$cug{C-i!hWP>=5O&ANS3aQ4LAbVs)@S#sb_y$CIL&YMlsYhz*pl-p@np6_Te zu1M9n7VdI!VX?F8b55OYX;j7U5jC|hX4EP(mRYaEzqfKIjc84>0#6Id+%YT4t(~)I zm$n(CnJ<Y1?L}6CNp!3IpSwOo?66ytep;k~<Xaa#f%)vO^k>ulJbamk*e{I{x$f2Z zMQ$wM$`_F#JVGEIsA%V^V>-vo&s&Ile`Q}9MJ_O;ZWMN=_LWbm(~Hm&emyOYkaqjX z8v7;K?(5;LTY}Xs8^e-?%akWs#T&_)=^4K_jL9^qg57_Iv!2#n#ZNeYn0a9yq{D3D z3Nxk=;BMnV*QF=^0~`SWSrz3EPP^lQbxUj-{=)P_lnQU^-Pcj$G}S)OqHE=n9|Xul z+WZS8J~5)DpHyBB&DRBpMP6Xq6RLeXd=oDOd{nmGG<#$qlY~Wg;eI)YcjY14OFW|i zY3lhlfr%^3Ac;fdOX8}Ru_D)7lBCKqE5bKx!;Gq*e!FIp{Wzmw`8Y49mgkd!pQBCU zu~{&6d%xwt4QR=Cg%{~IJ-@?WY<;<8Al?;ZSgP;UTs-524LLBa8EJ~H#{-FiId=a5 zFGAT3)J$Sg@i?2w09V0}n$!8xl3+0%=SmR)XQ{gj3}UAh45amr5_~LenwoGsGj=+B zYBf^)_X+zS9#~n><|jPwU<2l{F&^C4dfJ_vKX`rdZp$=IS`Wj^OKzz=*7Ql+y!+x; z8}Cc<2==uL>OF2|%~&b<MbibOt0l3|^P%ClTe2XXn$zNcq}V(amJJNpQa`}`5qz6t ztFhC6I*)qh&WHYv;OvndvtWffWOzS%Stt*Aik36Wv@_saAT}%twJPwXp*BRgymN_X zdHt-ggC0mHGjK!;uswZ~&;1-e|HTkPRopqtZBj78dpX&>Hu&aQTSh`{@DA8GczAzW zfeiOYRa!DF%;>#=Ai)on_T}Bm-BDggCa;>@ESW#V?J|EY&V^{~Hm>ugE61TkrV$g` zS7NwX*C)Qsx9ubPUE!a>axj7}|DSZY{x9^M%vRH=X{H*C$s`P-nQ!|Zx=_mH(xgYI z(M9;kh>*<vFR>N~$5H8cXT6?{K&(l;3cMS(_Bx8bmFHhS2&vqva=s<9WJ6d}f*fh` zCSJp4HAR{9c|tCDC=X%BTq*FHm4Ro0Yt}2hxMSzI<qq*E_8=9GZE(VYX5te|Sc8)z zgimg|LBL)8zhe(D-Z<BgK0Tp;`zVscv3Cd{|1HUQ<UzRGzYOC4ewj4!u%a)Uw^I)t z4x6+HgOwWPD-qoPv*-Eum$ItX#XQb)f2Ml5g5Vh3)EJH9XB0wwUbCdIN$+*?3wMLw e2i{%R0%!m=W0I+VfA{}OCo=tiAA<Xz#s30rIwsBl diff --git a/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Advanced Usage/Database/Manually altering the database/2_SQL Console_image.png b/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Advanced Usage/Database/Manually altering the database/2_SQL Console_image.png index 1b1834ba1fc25a9c47a42ed6611323294e72c426..a395a969b4499a689ea60465cf6adff6e3027c96 100644 GIT binary patch literal 76220 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 CDWUNI literal 230 zcmeAS@N?(olHy`uVBq!ia0vp^!XV56BpAZ2GX;PYW3iKG2*)$7=$Syy0#6sm5Q)pl zKjL1$WMt=j|DT!BnU&dS!%sG$;-nXMlR2I=p72v;dw<`-kiCuhe{4gN!lwhef^9SE zIX147WplX3sn=H1BEcN-_P_5L9`OT7q5;|ZjJgF$77Sv}Y<d+(>dYMO$kxdyUgIb> z`d__chPCr`Ie`o57Chp`i8q+dxDPG!Im7wp@;6z91?*|^F5LDC59-c-SSzJDr%~a{ agL(#G))kA^YHm6X@_?tSpUXO@geCy8El%A4 diff --git a/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Advanced Usage/Database/Manually altering the database/3_SQL Console_image.png b/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Advanced Usage/Database/Manually altering the database/3_SQL Console_image.png deleted file mode 100644 index ccef8f7aaf842172732a1f8c469c878d9b54d276..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 265 zcmeAS@N?(olHy`uVBq!ia0vp^f<P?90VEh^Ov>s2QjEn;o*^91xT0qQIfp%6977~7 zC;#YY_#dYG@9%$m=1Cs5%+6-3I@Fn)HCLT5^ShR6FwtK0o@ln*pZ|Y8+WRc&WMt`y z|JUBR=lS!!CXyOY_*3eW8zO?f+H)<@vUjo(*Vz>D`>dlv{UQeDW(UP9>+W0e@HqaL z*RlF9o>na%aI)?G|A%V->(8+pwH_|Aj!|h_SXl4B#7g<Q_lgsWY-{5ccC{v21uW@m zZ*QNPXdm&Cmo0sP$L_AKu6rgc&X>%HU-;w8|Nm@lGc%OJWz7DvGkkb`J7SVh^AC_8 NJzf1=);T3K0RSO!Y0Urt diff --git a/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Advanced Usage/Database/Manually altering the database/SQL Console.html b/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Advanced Usage/Database/Manually altering the database/SQL Console.html index 27e27dddbe..3b5c25ce61 100644 --- a/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Advanced Usage/Database/Manually altering the database/SQL Console.html +++ b/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Advanced Usage/Database/Manually altering the database/SQL Console.html @@ -1,36 +1,30 @@ <p>The SQL Console is Trilium's built-in database editor.</p> -<p>It can be accessed by going to the <a href="#root/_help_Vc8PjrjAGuOp">global menu</a> → +<p>It can be accessed by going to the <a class="reference-link" href="#root/pOsGYCXsbNQG/gh7bpGYxajRS/Vc8PjrjAGuOp/_help_x3i7MxGccDuM">Global menu</a> → Advanced → Open SQL Console.</p> <p> <img src="SQL Console_image.png"> </p> <h3>Interaction</h3> <ul> - <li> - <p>Hovering the mouse over one of the tables listed at the top of the document - will show the columns and their data type.</p> - </li> - <li> - <p>Only one SQL statement can be run at once.</p> - </li> - <li> - <p>To run the statement, press the - <img src="3_SQL Console_image.png">icon.</p> - </li> - <li> - <p>For queries that return a result, the data will displayed in a table.</p> - <p> - <img src="1_SQL Console_image.png"> - </p> - </li> + <li>Hovering the mouse over one of the tables listed at the top of the document + will show the columns and their data type.</li> + <li>Only one SQL statement can be run at once.</li> + <li>To run the statement, press the <em>Execute</em> icon.</li> + <li>For queries that return a result, the data will displayed in a table.</li> </ul> +<figure class="image"> + <img style="aspect-ratio:1124/571;" src="2_SQL Console_image.png" + width="1124" height="571"> +</figure> <h3>Saved SQL console</h3> <p>SQL queries or commands can be saved into a dedicated note.</p> <p>To do so, simply write the query and press the - <img src="2_SQL Console_image.png">button. Once saved, the note will appear in <a href="#root/_help_l0tKav7yLHGF">Day Notes</a>.</p> + <img src="1_SQL Console_image.png">button. Once saved, the note will appear in <a class="reference-link" + href="#root/pOsGYCXsbNQG/tC7s2alapj8V/5668rwcirq1t/_help_l0tKav7yLHGF">Day Notes</a>.</p> <ul> <li>The SQL expression will not be displayed by default, but it can still be viewed by going to the note context menu and selecting <em>Note source</em>.</li> - <li>The expression cannot be modified. If needed, recreate it by copying the + <li + >The expression cannot be modified. If needed, recreate it by copying the statement back into the SQL console and then saving it again.</li> </ul> \ No newline at end of file diff --git a/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Basic Concepts and Features/Import & Export/Evernote.html b/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Basic Concepts and Features/Import & Export/Evernote.html index e5a8231bab..3efd53a8f9 100644 --- a/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Basic Concepts and Features/Import & Export/Evernote.html +++ b/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Basic Concepts and Features/Import & Export/Evernote.html @@ -27,31 +27,28 @@ <ul> <li>Attachments</li> <li>The hierarchy of headings (these are shifted to start with H2 because - H1 is reserved for note title, see <a href="#root/pOsGYCXsbNQG/KSZ04uQ2D1St/iPIMuisry3hd/_help_Gr6xFaF6ioJ5">Headings</a>)</li> - <li - >Tables</li> - <li>Bulleted lists</li> - <li>Numbered lists</li> - <li>Bold</li> - <li>Italics</li> - <li>Strikethrough</li> - <li>Highlights</li> - <li>Font colors</li> - <li>Soft line breaks</li> - <li>External links</li> + H1 is reserved for note title, see <a href="#root/_help_Gr6xFaF6ioJ5">Headings</a>)</li> + <li>Tables</li> + <li>Bulleted lists</li> + <li>Numbered lists</li> + <li>Bold</li> + <li>Italics</li> + <li>Strikethrough</li> + <li>Highlights</li> + <li>Font colors</li> + <li>Soft line breaks</li> + <li>External links</li> </ul> <p>However, we do not guarantee that all of your formatting will be imported 100% correctly.</p> <h2>Limitations</h2> <ul> <li>The size limit of one import is 250Mb. If the total size of your files - is larger, you can increase the <a href="#root/pOsGYCXsbNQG/Otzi9La2YAUX/_help_WOcw2SLH6tbX">upload limit</a>, + is larger, you can increase the <a href="#root/_help_WOcw2SLH6tbX">upload limit</a>, or divide your files, and run the import as many times as necessary.</li> - <li - >All resources (except for images) are created as notes’ attachments.</li> - <li - >If you have HTML inside ENEX files, the HTML formatting may be broken - or lost after import in Trilium. See <a class="reference-link" href="#root/pOsGYCXsbNQG/BgmBlOIl72jZ/_help_wy8So3yZZlH9">Reporting issues</a>.</li> + <li>All resources (except for images) are created as notes’ attachments.</li> + <li>If you have HTML inside ENEX files, the HTML formatting may be broken + or lost after import in Trilium. See <a class="reference-link" href="#root/_help_wy8So3yZZlH9">Reporting issues</a>.</li> </ul> <h3>Internal links</h3> <p>The importer cannot transform Evernote internal links into Trilium internal diff --git a/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Installation & Setup/Server Installation.html b/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Installation & Setup/Server Installation.html index cbf57c6cad..7b3a54250e 100644 --- a/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Installation & Setup/Server Installation.html +++ b/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Installation & Setup/Server Installation.html @@ -7,21 +7,20 @@ <ul> <li><strong>Recommended</strong>: <a href="#root/_help_rWX5eY045zbE">Docker Installation</a> - Available for <strong>AMD64</strong> and <strong>ARM</strong> architectures.</li> - <li - ><a href="#root/_help_3tW6mORuTHnB">Packaged Server Installation</a> - </li> - <li><a href="https://www.pikapods.com/pods?run=trilium-next">PikaPods managed hosting</a> - </li> - <li><a href="#root/_help_J1Bb6lVlwU5T">Manual Installation</a> - </li> - <li><a href="#root/_help_DCmT6e7clMoP">Kubernetes</a> - </li> - <li><a href="https://www.cloudron.io/store/com.github.trilium.cloudronapp.html">Cloudron</a> - </li> - <li><a href="https://homelabos.com/docs/software/trilium/">HomelabOS</a> - </li> - <li><a href="#root/_help_moVgBcoxE3EK">NixOS Module</a> - </li> + <li><a href="#root/_help_3tW6mORuTHnB">Packaged Server Installation</a> + </li> + <li><a href="https://www.pikapods.com/pods?run=trilium-next">PikaPods managed hosting</a> + </li> + <li><a href="#root/_help_J1Bb6lVlwU5T">Manual Installation</a> + </li> + <li><a href="#root/_help_DCmT6e7clMoP">Kubernetes</a> + </li> + <li><a href="https://www.cloudron.io/store/com.github.trilium.cloudronapp.html">Cloudron</a> + </li> + <li><a href="https://homelabos.com/docs/software/trilium/">HomelabOS</a> + </li> + <li><a href="#root/_help_moVgBcoxE3EK">NixOS Module</a> + </li> </ul> <p>The server installation includes both web and <a href="#root/_help_RDslemsQ6gCp">mobile frontends</a>.</p> <h2>Configuration</h2> diff --git a/docs/Developer Guide/Developer Guide/Documentation.md b/docs/Developer Guide/Developer Guide/Documentation.md index 4277ea4b98..35f406a737 100644 --- a/docs/Developer Guide/Developer Guide/Documentation.md +++ b/docs/Developer Guide/Developer Guide/Documentation.md @@ -1,5 +1,5 @@ # Documentation -There are multiple types of documentation for Trilium:<img class="image-style-align-right" src="api/images/5xrV36TRqPj6/Documentation_image.png" width="205" height="162"> +There are multiple types of documentation for Trilium:<img class="image-style-align-right" src="api/images/caCZ9hC8HqQa/Documentation_image.png" width="205" height="162"> * The _User Guide_ represents the user-facing documentation. This documentation can be browsed by users directly from within Trilium, by pressing <kbd>F1</kbd>. * The _Developer's Guide_ represents a set of Markdown documents that present the internals of Trilium, for developers. diff --git a/docs/Release Notes/Release Notes/v0.101.2.md b/docs/Release Notes/Release Notes/v0.101.2.md index 6942b2e8eb..842f42c299 100644 --- a/docs/Release Notes/Release Notes/v0.101.2.md +++ b/docs/Release Notes/Release Notes/v0.101.2.md @@ -18,5 +18,5 @@ * [Max content width is not respected when switching between note types in the same tab](https://github.com/TriliumNext/Trilium/issues/8065) * [Crash When a Note Includes Itself](https://github.com/TriliumNext/Trilium/issues/8294) * [Severe Performance Degradation and Crash Issues Due to Recursive Inclusion in Included Notes](https://github.com/TriliumNext/Trilium/issues/8017) -* [<note> is not a launcher even though it's in the launcher subtree](https://github.com/TriliumNext/Trilium/issues/8218) +* [is not a launcher even though it's in the launcher subtree](https://github.com/TriliumNext/Trilium/issues/8218) * [Archived subnotes of direct children appear in grid view without #includeArchived](https://github.com/TriliumNext/Trilium/issues/8184) \ No newline at end of file diff --git a/docs/User Guide/!!!meta.json b/docs/User Guide/!!!meta.json index b7675da996..f7800ca551 100644 --- a/docs/User Guide/!!!meta.json +++ b/docs/User Guide/!!!meta.json @@ -6172,17 +6172,31 @@ { "type": "relation", "name": "internalLink", - "value": "dj3j8dG4th4l", + "value": "Gr6xFaF6ioJ5", "isInheritable": false, "position": 10 }, { "type": "relation", "name": "internalLink", - "value": "wy8So3yZZlH9", + "value": "WOcw2SLH6tbX", "isInheritable": false, "position": 20 }, + { + "type": "relation", + "name": "internalLink", + "value": "wy8So3yZZlH9", + "isInheritable": false, + "position": 30 + }, + { + "type": "relation", + "name": "internalLink", + "value": "dj3j8dG4th4l", + "isInheritable": false, + "position": 40 + }, { "type": "label", "name": "shareAlias", @@ -6196,20 +6210,6 @@ "value": "bx bx-window-open", "isInheritable": false, "position": 30 - }, - { - "type": "relation", - "name": "internalLink", - "value": "Gr6xFaF6ioJ5", - "isInheritable": false, - "position": 40 - }, - { - "type": "relation", - "name": "internalLink", - "value": "WOcw2SLH6tbX", - "isInheritable": false, - "position": 50 } ], "format": "markdown", @@ -14200,20 +14200,6 @@ "type": "text", "mime": "text/html", "attributes": [ - { - "type": "relation", - "name": "internalLink", - "value": "Vc8PjrjAGuOp", - "isInheritable": false, - "position": 10 - }, - { - "type": "relation", - "name": "internalLink", - "value": "l0tKav7yLHGF", - "isInheritable": false, - "position": 20 - }, { "type": "label", "name": "iconClass", @@ -14227,6 +14213,20 @@ "value": "sql-console", "isInheritable": false, "position": 40 + }, + { + "type": "relation", + "name": "internalLink", + "value": "l0tKav7yLHGF", + "isInheritable": false, + "position": 50 + }, + { + "type": "relation", + "name": "internalLink", + "value": "x3i7MxGccDuM", + "isInheritable": false, + "position": 60 } ], "format": "markdown", @@ -14240,29 +14240,21 @@ "position": 10, "dataFileName": "SQL Console_image.png" }, - { - "attachmentId": "827EgLgWhZWF", - "title": "image.png", - "role": "image", - "mime": "image/jpg", - "position": 10, - "dataFileName": "1_SQL Console_image.png" - }, { "attachmentId": "gIbK7NNLu3iZ", "title": "image.png", "role": "image", "mime": "image/png", "position": 10, - "dataFileName": "2_SQL Console_image.png" + "dataFileName": "1_SQL Console_image.png" }, { - "attachmentId": "pP87PB9ELjQn", + "attachmentId": "wdBs3e0MApgs", "title": "image.png", "role": "image", "mime": "image/png", "position": 10, - "dataFileName": "3_SQL Console_image.png" + "dataFileName": "2_SQL Console_image.png" } ] } diff --git a/docs/User Guide/User Guide/Advanced Usage/Database/Manually altering the database/1_SQL Console_image.png b/docs/User Guide/User Guide/Advanced Usage/Database/Manually altering the database/1_SQL Console_image.png index 6f32f76ec97a50703e8775ff38053b61e949dde4..1b1834ba1fc25a9c47a42ed6611323294e72c426 100644 GIT binary patch literal 230 zcmeAS@N?(olHy`uVBq!ia0vp^!XV56BpAZ2GX;PYW3iKG2*)$7=$Syy0#6sm5Q)pl zKjL1$WMt=j|DT!BnU&dS!%sG$;-nXMlR2I=p72v;dw<`-kiCuhe{4gN!lwhef^9SE zIX147WplX3sn=H1BEcN-_P_5L9`OT7q5;|ZjJgF$77Sv}Y<d+(>dYMO$kxdyUgIb> z`d__chPCr`Ie`o57Chp`i8q+dxDPG!Im7wp@;6z91?*|^F5LDC59-c-SSzJDr%~a{ agL(#G))kA^YHm6X@_?tSpUXO@geCy8El%A4 literal 30610 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≪vU@{_wtbe$k2p!9f|rLWgqukh1V=-P!^ zNbTW1n{E)jhE`w4tqS`T{U5C7z}WmL@)ai>Khb;l&Bts{p7-rYR@aQRgu%8KYt6R- z0;|^Oqx2Lvl36>}rVC@-z>Ddk@BEYg@5kQyX-(fV#y~yF)%1p;fgnBtnf@8nJOA=t z+xri=25)qQ%`3f99g^ENDOb7IP6uJ&$!;ZvIPXIR*j7VUasm4Y?&a}@FAS0{41)s1 z1G*6K_&M{VjRm$Zu|l~0=H=cZZSr(ADQ3}6GcSh*BYH(AjbVZ65l$a5$4Gb0ql9nx zqyh*06I6iL)Q1j&o}lU4tw-2=;|%@ePOGPmNdVu6DNnD&{_(n)GA{0z<AM8)nFgK* z=Dt2VUKW8@u#eWBqN{yEQ)pjZgeaid`&gRikH^D8Dq`ig6A?0<0`RnJf5g(NlMqC( z@uDSDiw(cEZ>{stQa+_8Q?!CQQOsjA?X*2zDU-dD_tGzU$k_Mz3{VJ{(nqsxc$}#w zm5aGC43-meTqH@~z4s>Eua7Y_&XgR25q$0dQgt5Tz9FviZ1)OK&o9)MYzFNmX4D@I z*kZz$cug{C-i!hWP>=5O&ANS3aQ4LAbVs)@S#sb_y$CIL&YMlsYhz*pl-p@np6_Te zu1M9n7VdI!VX?F8b55OYX;j7U5jC|hX4EP(mRYaEzqfKIjc84>0#6Id+%YT4t(~)I zm$n(CnJ<Y1?L}6CNp!3IpSwOo?66ytep;k~<Xaa#f%)vO^k>ulJbamk*e{I{x$f2Z zMQ$wM$`_F#JVGEIsA%V^V>-vo&s&Ile`Q}9MJ_O;ZWMN=_LWbm(~Hm&emyOYkaqjX z8v7;K?(5;LTY}Xs8^e-?%akWs#T&_)=^4K_jL9^qg57_Iv!2#n#ZNeYn0a9yq{D3D z3Nxk=;BMnV*QF=^0~`SWSrz3EPP^lQbxUj-{=)P_lnQU^-Pcj$G}S)OqHE=n9|Xul z+WZS8J~5)DpHyBB&DRBpMP6Xq6RLeXd=oDOd{nmGG<#$qlY~Wg;eI)YcjY14OFW|i zY3lhlfr%^3Ac;fdOX8}Ru_D)7lBCKqE5bKx!;Gq*e!FIp{Wzmw`8Y49mgkd!pQBCU zu~{&6d%xwt4QR=Cg%{~IJ-@?WY<;<8Al?;ZSgP;UTs-524LLBa8EJ~H#{-FiId=a5 zFGAT3)J$Sg@i?2w09V0}n$!8xl3+0%=SmR)XQ{gj3}UAh45amr5_~LenwoGsGj=+B zYBf^)_X+zS9#~n><|jPwU<2l{F&^C4dfJ_vKX`rdZp$=IS`Wj^OKzz=*7Ql+y!+x; z8}Cc<2==uL>OF2|%~&b<MbibOt0l3|^P%ClTe2XXn$zNcq}V(amJJNpQa`}`5qz6t ztFhC6I*)qh&WHYv;OvndvtWffWOzS%Stt*Aik36Wv@_saAT}%twJPwXp*BRgymN_X zdHt-ggC0mHGjK!;uswZ~&;1-e|HTkPRopqtZBj78dpX&>Hu&aQTSh`{@DA8GczAzW zfeiOYRa!DF%;>#=Ai)on_T}Bm-BDggCa;>@ESW#V?J|EY&V^{~Hm>ugE61TkrV$g` zS7NwX*C)Qsx9ubPUE!a>axj7}|DSZY{x9^M%vRH=X{H*C$s`P-nQ!|Zx=_mH(xgYI z(M9;kh>*<vFR>N~$5H8cXT6?{K&(l;3cMS(_Bx8bmFHhS2&vqva=s<9WJ6d}f*fh` zCSJp4HAR{9c|tCDC=X%BTq*FHm4Ro0Yt}2hxMSzI<qq*E_8=9GZE(VYX5te|Sc8)z zgimg|LBL)8zhe(D-Z<BgK0Tp;`zVscv3Cd{|1HUQ<UzRGzYOC4ewj4!u%a)Uw^I)t z4x6+HgOwWPD-qoPv*-Eum$ItX#XQb)f2Ml5g5Vh3)EJH9XB0wwUbCdIN$+*?3wMLw e2i{%R0%!m=W0I+VfA{}OCo=tiAA<Xz#s30rIwsBl diff --git a/docs/User Guide/User Guide/Advanced Usage/Database/Manually altering the database/2_SQL Console_image.png b/docs/User Guide/User Guide/Advanced Usage/Database/Manually altering the database/2_SQL Console_image.png index 1b1834ba1fc25a9c47a42ed6611323294e72c426..a395a969b4499a689ea60465cf6adff6e3027c96 100644 GIT binary patch literal 76220 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 CDWUNI literal 230 zcmeAS@N?(olHy`uVBq!ia0vp^!XV56BpAZ2GX;PYW3iKG2*)$7=$Syy0#6sm5Q)pl zKjL1$WMt=j|DT!BnU&dS!%sG$;-nXMlR2I=p72v;dw<`-kiCuhe{4gN!lwhef^9SE zIX147WplX3sn=H1BEcN-_P_5L9`OT7q5;|ZjJgF$77Sv}Y<d+(>dYMO$kxdyUgIb> z`d__chPCr`Ie`o57Chp`i8q+dxDPG!Im7wp@;6z91?*|^F5LDC59-c-SSzJDr%~a{ agL(#G))kA^YHm6X@_?tSpUXO@geCy8El%A4 diff --git a/docs/User Guide/User Guide/Advanced Usage/Database/Manually altering the database/3_SQL Console_image.png b/docs/User Guide/User Guide/Advanced Usage/Database/Manually altering the database/3_SQL Console_image.png deleted file mode 100644 index ccef8f7aaf842172732a1f8c469c878d9b54d276..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 265 zcmeAS@N?(olHy`uVBq!ia0vp^f<P?90VEh^Ov>s2QjEn;o*^91xT0qQIfp%6977~7 zC;#YY_#dYG@9%$m=1Cs5%+6-3I@Fn)HCLT5^ShR6FwtK0o@ln*pZ|Y8+WRc&WMt`y z|JUBR=lS!!CXyOY_*3eW8zO?f+H)<@vUjo(*Vz>D`>dlv{UQeDW(UP9>+W0e@HqaL z*RlF9o>na%aI)?G|A%V->(8+pwH_|Aj!|h_SXl4B#7g<Q_lgsWY-{5ccC{v21uW@m zZ*QNPXdm&Cmo0sP$L_AKu6rgc&X>%HU-;w8|Nm@lGc%OJWz7DvGkkb`J7SVh^AC_8 NJzf1=);T3K0RSO!Y0Urt diff --git a/docs/User Guide/User Guide/Advanced Usage/Database/Manually altering the database/SQL Console.md b/docs/User Guide/User Guide/Advanced Usage/Database/Manually altering the database/SQL Console.md index f5139a269b..6ba851ec63 100644 --- a/docs/User Guide/User Guide/Advanced Usage/Database/Manually altering the database/SQL Console.md +++ b/docs/User Guide/User Guide/Advanced Usage/Database/Manually altering the database/SQL Console.md @@ -1,7 +1,7 @@ # SQL Console The SQL Console is Trilium's built-in database editor. -It can be accessed by going to the [global menu](../../../Basic%20Concepts%20and%20Features/UI%20Elements) → Advanced → Open SQL Console. +It can be accessed by going to the <a class="reference-link" href="../../../Basic%20Concepts%20and%20Features/UI%20Elements/Global%20menu.md">Global menu</a> → Advanced → Open SQL Console. ![](SQL%20Console_image.png) @@ -9,16 +9,16 @@ It can be accessed by going to the [global menu](../../../Basic%20Concepts%20and * Hovering the mouse over one of the tables listed at the top of the document will show the columns and their data type. * Only one SQL statement can be run at once. -* To run the statement, press the ![](3_SQL%20Console_image.png)icon. +* To run the statement, press the _Execute_ icon. * For queries that return a result, the data will displayed in a table. - - ![](1_SQL%20Console_image.png) + +<figure class="image"><img style="aspect-ratio:1124/571;" src="2_SQL Console_image.png" width="1124" height="571"></figure> ### Saved SQL console SQL queries or commands can be saved into a dedicated note. -To do so, simply write the query and press the ![](2_SQL%20Console_image.png)button. Once saved, the note will appear in [Day Notes](../../Advanced%20Showcases/Day%20Notes.md). +To do so, simply write the query and press the ![](1_SQL%20Console_image.png) button. Once saved, the note will appear in <a class="reference-link" href="../../Advanced%20Showcases/Day%20Notes.md">Day Notes</a>. * The SQL expression will not be displayed by default, but it can still be viewed by going to the note context menu and selecting _Note source_. * The expression cannot be modified. If needed, recreate it by copying the statement back into the SQL console and then saving it again. \ No newline at end of file From 57d894e765f8eeb6c9d6632e869297703ea00485 Mon Sep 17 00:00:00 2001 From: Elian Doran <contact@eliandoran.me> Date: Sun, 18 Jan 2026 17:47:09 +0200 Subject: [PATCH 131/353] feat(sql_console): enable read-only for saved notes --- apps/client/src/widgets/FloatingButtonsDefinitions.tsx | 4 ++-- apps/client/src/widgets/ribbon/NoteActionsCustom.tsx | 3 ++- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/apps/client/src/widgets/FloatingButtonsDefinitions.tsx b/apps/client/src/widgets/FloatingButtonsDefinitions.tsx index 8bf02d96cc..4ad6c520ae 100644 --- a/apps/client/src/widgets/FloatingButtonsDefinitions.tsx +++ b/apps/client/src/widgets/FloatingButtonsDefinitions.tsx @@ -7,7 +7,6 @@ import Component from "../components/component"; import NoteContext from "../components/note_context"; import FNote from "../entities/fnote"; import attributes from "../services/attributes"; -import { isExperimentalFeatureEnabled } from "../services/experimental_features"; import froca from "../services/froca"; import { t } from "../services/i18n"; import { copyImageReferenceToClipboard } from "../services/image"; @@ -101,7 +100,8 @@ function SwitchSplitOrientationButton({ note, isReadOnly, isDefaultViewMode }: F function ToggleReadOnlyButton({ note, viewType, isDefaultViewMode }: FloatingButtonContext) { const [ isReadOnly, setReadOnly ] = useNoteLabelBoolean(note, "readOnly"); - const isEnabled = ([ "mermaid", "mindMap", "canvas" ].includes(note.type) || viewType === "geoMap") + const isSavedSqlite = note.isTriliumSqlite() && !note.isHiddenCompletely(); + const isEnabled = ([ "mermaid", "mindMap", "canvas" ].includes(note.type) || viewType === "geoMap" || isSavedSqlite) && note.isContentAvailable() && isDefaultViewMode; return isEnabled && <FloatingButton diff --git a/apps/client/src/widgets/ribbon/NoteActionsCustom.tsx b/apps/client/src/widgets/ribbon/NoteActionsCustom.tsx index cc36968d38..36b4b85431 100644 --- a/apps/client/src/widgets/ribbon/NoteActionsCustom.tsx +++ b/apps/client/src/widgets/ribbon/NoteActionsCustom.tsx @@ -184,7 +184,8 @@ function SwitchSplitOrientationButton({ note, isReadOnly, isDefaultViewMode }: N function ToggleReadOnlyButton({ note, viewType, isDefaultViewMode }: NoteActionsCustomInnerProps) { const [ isReadOnly, setReadOnly ] = useNoteLabelBoolean(note, "readOnly"); - const isEnabled = ([ "mermaid", "mindMap", "canvas" ].includes(note.type) || viewType === "geoMap") + const isSavedSqlite = note.isTriliumSqlite() && !note.isHiddenCompletely(); + const isEnabled = ([ "mermaid", "mindMap", "canvas" ].includes(note.type) || viewType === "geoMap" || isSavedSqlite) && note.isContentAvailable() && isDefaultViewMode; return isEnabled && <ActionButton From 4a82bbb035e8346451136efa29f9543fc54f9142 Mon Sep 17 00:00:00 2001 From: Elian Doran <contact@eliandoran.me> Date: Sun, 18 Jan 2026 18:06:30 +0200 Subject: [PATCH 132/353] docs(user): update SQL console based on new interaction --- .../SQL Console.html | 38 +++++++++++++++---- docs/User Guide/!!!meta.json | 14 +++++++ .../SQL Console.md | 14 ++++++- 3 files changed, 57 insertions(+), 9 deletions(-) diff --git a/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Advanced Usage/Database/Manually altering the database/SQL Console.html b/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Advanced Usage/Database/Manually altering the database/SQL Console.html index 3b5c25ce61..3549a96e9b 100644 --- a/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Advanced Usage/Database/Manually altering the database/SQL Console.html +++ b/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Advanced Usage/Database/Manually altering the database/SQL Console.html @@ -11,20 +11,44 @@ <li>Only one SQL statement can be run at once.</li> <li>To run the statement, press the <em>Execute</em> icon.</li> <li>For queries that return a result, the data will displayed in a table.</li> + <li + >For statements (e.g. <code spellcheck="false">INSERT</code>, <code spellcheck="false">UPDATE</code>), + the number of affected rows is displayed.</li> </ul> <figure class="image"> <img style="aspect-ratio:1124/571;" src="2_SQL Console_image.png" width="1124" height="571"> </figure> +<h3>Interacting with the table</h3> +<p>After executing a query, a table with the results will be displayed:</p> +<ul> + <li> + <p>Clicking on a column allows sorting ascending or descending.</p> + </li> + <li> + <p>Underneath each column there is an input field which allows filtering + by text.</p> + </li> + <li> + <p>Press <kbd>Ctrl</kbd>+<kbd>C</kbd> to copy the current cell to clipboard.</p> + </li> + <li> + <p>Multiple cells can be selected by dragging or by holding <kbd>Shift</kbd> + + arrow keys</p> + </li> + <li> + <p>Results are paginated for performance reasons. The controls at the bottom + of the table can be used to navigate through pages.</p> + </li> +</ul> <h3>Saved SQL console</h3> <p>SQL queries or commands can be saved into a dedicated note.</p> <p>To do so, simply write the query and press the <img src="1_SQL Console_image.png">button. Once saved, the note will appear in <a class="reference-link" href="#root/pOsGYCXsbNQG/tC7s2alapj8V/5668rwcirq1t/_help_l0tKav7yLHGF">Day Notes</a>.</p> -<ul> - <li>The SQL expression will not be displayed by default, but it can still - be viewed by going to the note context menu and selecting <em>Note source</em>.</li> - <li - >The expression cannot be modified. If needed, recreate it by copying the - statement back into the SQL console and then saving it again.</li> -</ul> \ No newline at end of file +<p>The note can be locked for editing by pressing the <em>Lock</em> button + in the note actions section near the title bar (on the <a class="reference-link" + href="#root/pOsGYCXsbNQG/gh7bpGYxajRS/Vc8PjrjAGuOp/_help_IjZS7iK5EXtb">New Layout</a>, + or in the <a class="reference-link" href="#root/pOsGYCXsbNQG/gh7bpGYxajRS/Vc8PjrjAGuOp/_help_XpOYSgsLkTJy">Floating buttons</a> area + if using the old layout). When editing is locked, the SQL statement is + hidden from view.</p> \ No newline at end of file diff --git a/docs/User Guide/!!!meta.json b/docs/User Guide/!!!meta.json index f7800ca551..6b0711f168 100644 --- a/docs/User Guide/!!!meta.json +++ b/docs/User Guide/!!!meta.json @@ -14227,6 +14227,20 @@ "value": "x3i7MxGccDuM", "isInheritable": false, "position": 60 + }, + { + "type": "relation", + "name": "internalLink", + "value": "IjZS7iK5EXtb", + "isInheritable": false, + "position": 70 + }, + { + "type": "relation", + "name": "internalLink", + "value": "XpOYSgsLkTJy", + "isInheritable": false, + "position": 80 } ], "format": "markdown", diff --git a/docs/User Guide/User Guide/Advanced Usage/Database/Manually altering the database/SQL Console.md b/docs/User Guide/User Guide/Advanced Usage/Database/Manually altering the database/SQL Console.md index 6ba851ec63..d9dfd8fb8f 100644 --- a/docs/User Guide/User Guide/Advanced Usage/Database/Manually altering the database/SQL Console.md +++ b/docs/User Guide/User Guide/Advanced Usage/Database/Manually altering the database/SQL Console.md @@ -11,14 +11,24 @@ It can be accessed by going to the <a class="reference-link" href="../../../Bas * Only one SQL statement can be run at once. * To run the statement, press the _Execute_ icon. * For queries that return a result, the data will displayed in a table. +* For statements (e.g. `INSERT`, `UPDATE`), the number of affected rows is displayed. <figure class="image"><img style="aspect-ratio:1124/571;" src="2_SQL Console_image.png" width="1124" height="571"></figure> +### Interacting with the table + +After executing a query, a table with the results will be displayed: + +* Clicking on a column allows sorting ascending or descending. +* Underneath each column there is an input field which allows filtering by text. +* Press <kbd>Ctrl</kbd>+<kbd>C</kbd> to copy the current cell to clipboard. +* Multiple cells can be selected by dragging or by holding <kbd>Shift</kbd> + arrow keys +* Results are paginated for performance reasons. The controls at the bottom of the table can be used to navigate through pages. + ### Saved SQL console SQL queries or commands can be saved into a dedicated note. To do so, simply write the query and press the ![](1_SQL%20Console_image.png) button. Once saved, the note will appear in <a class="reference-link" href="../../Advanced%20Showcases/Day%20Notes.md">Day Notes</a>. -* The SQL expression will not be displayed by default, but it can still be viewed by going to the note context menu and selecting _Note source_. -* The expression cannot be modified. If needed, recreate it by copying the statement back into the SQL console and then saving it again. \ No newline at end of file +The note can be locked for editing by pressing the _Lock_ button in the note actions section near the title bar (on the <a class="reference-link" href="../../../Basic%20Concepts%20and%20Features/UI%20Elements/New%20Layout.md">New Layout</a>, or in the <a class="reference-link" href="../../../Basic%20Concepts%20and%20Features/UI%20Elements/Floating%20buttons.md">Floating buttons</a> area if using the old layout). When editing is locked, the SQL statement is hidden from view. \ No newline at end of file From fc0ccbfcf5bf5beaa7b9e00ef3d358b9b1e7c939 Mon Sep 17 00:00:00 2001 From: Elian Doran <contact@eliandoran.me> Date: Sun, 18 Jan 2026 18:19:35 +0200 Subject: [PATCH 133/353] chore(sql_console): address requested changes --- .../widgets/collections/table/tabulator.tsx | 5 +++- .../src/widgets/type_widgets/SqlConsole.tsx | 24 ++++++++----------- 2 files changed, 14 insertions(+), 15 deletions(-) diff --git a/apps/client/src/widgets/collections/table/tabulator.tsx b/apps/client/src/widgets/collections/table/tabulator.tsx index d908104cec..62d7283b94 100644 --- a/apps/client/src/widgets/collections/table/tabulator.tsx +++ b/apps/client/src/widgets/collections/table/tabulator.tsx @@ -71,7 +71,10 @@ export default function Tabulator<T>({ className, columns, data, modules, tabula // Change in data. useEffect(() => { tabulatorRef.current?.setData(data); }, [ data ]); - useEffect(() => { columns && tabulatorRef.current?.setColumns(columns); }, [ data ]); + useEffect(() => { + if (!columns) return; + tabulatorRef.current?.setColumns(columns); + }, [ columns ]); return ( <div ref={containerRef} className={className} /> diff --git a/apps/client/src/widgets/type_widgets/SqlConsole.tsx b/apps/client/src/widgets/type_widgets/SqlConsole.tsx index 8823f59abf..6b8f79a5f0 100644 --- a/apps/client/src/widgets/type_widgets/SqlConsole.tsx +++ b/apps/client/src/widgets/type_widgets/SqlConsole.tsx @@ -160,20 +160,16 @@ export function SqlTableSchemas({ note }: TypeWidgetProps) { <span class="sql-table-schemas"> {schemas.map(({ name, columns }) => ( - <Fragment key={name}> - <Dropdown text={name} noSelectButtonStyle hideToggleArrow - > - <table className="table-schema"> - {columns.map(column => ( - <tr key={column.name}> - <td>{column.name}</td> - <td>{column.type}</td> - </tr> - ))} - </table> - </Dropdown> - {" "} - </Fragment> + <Dropdown key={name} text={name} noSelectButtonStyle hideToggleArrow> + <table className="table-schema"> + {columns.map(column => ( + <tr key={column.name}> + <td>{column.name}</td> + <td>{column.type}</td> + </tr> + ))} + </table> + </Dropdown> ))} </span> </> From e33950e0009dd20c27851c6ca21961c8f9d924da Mon Sep 17 00:00:00 2001 From: Elian Doran <contact@eliandoran.me> Date: Sun, 18 Jan 2026 18:22:21 +0200 Subject: [PATCH 134/353] test(client): fix broken tests after change in shortcut behaviour --- apps/client/src/services/shortcuts.spec.ts | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/apps/client/src/services/shortcuts.spec.ts b/apps/client/src/services/shortcuts.spec.ts index 6950c604cf..e73f4bcb5b 100644 --- a/apps/client/src/services/shortcuts.spec.ts +++ b/apps/client/src/services/shortcuts.spec.ts @@ -1,5 +1,6 @@ -import { describe, expect, it, vi, beforeEach, afterEach } from "vitest"; -import shortcuts, { keyMatches, matchesShortcut, isIMEComposing } from "./shortcuts.js"; +import { afterEach,beforeEach, describe, expect, it, vi } from "vitest"; + +import shortcuts, { isIMEComposing,keyMatches, matchesShortcut } from "./shortcuts.js"; // Mock utils module vi.mock("./utils.js", () => ({ @@ -248,7 +249,7 @@ describe("shortcuts", () => { const handler = vi.fn(); shortcuts.bindGlobalShortcut("ctrl+a", handler, "test-namespace"); - expect(mockElement.addEventListener).toHaveBeenCalledWith("keydown", expect.any(Function)); + expect(mockElement.addEventListener).toHaveBeenCalledWith("keydown", expect.any(Function), true); }); it("should not bind shortcuts when handler is null", () => { @@ -279,7 +280,7 @@ describe("shortcuts", () => { const handler = vi.fn(); shortcuts.bindElShortcut(mockJQueryEl, "ctrl+a", handler, "test-namespace"); - expect(mockEl.addEventListener).toHaveBeenCalledWith("keydown", expect.any(Function)); + expect(mockEl.addEventListener).toHaveBeenCalledWith("keydown", expect.any(Function), true); }); it("should fall back to document when element is empty", () => { @@ -289,7 +290,7 @@ describe("shortcuts", () => { const handler = vi.fn(); shortcuts.bindElShortcut(emptyJQuery, "ctrl+a", handler, "test-namespace"); - expect(mockElement.addEventListener).toHaveBeenCalledWith("keydown", expect.any(Function)); + expect(mockElement.addEventListener).toHaveBeenCalledWith("keydown", expect.any(Function), true); }); }); @@ -300,7 +301,7 @@ describe("shortcuts", () => { shortcuts.removeGlobalShortcut("test-namespace"); - expect(mockElement.removeEventListener).toHaveBeenCalledWith("keydown", expect.any(Function)); + expect(mockElement.removeEventListener).toHaveBeenCalledWith("keydown", expect.any(Function), true); }); }); From 4c55e857b88778b1ecfda12d78342e4d5565cd14 Mon Sep 17 00:00:00 2001 From: Elian Doran <contact@eliandoran.me> Date: Sun, 18 Jan 2026 18:33:48 +0200 Subject: [PATCH 135/353] fix(server): build failing due to import --- apps/server/src/app.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/server/src/app.ts b/apps/server/src/app.ts index 0ab7a620c8..f2f7cdff9e 100644 --- a/apps/server/src/app.ts +++ b/apps/server/src/app.ts @@ -3,7 +3,7 @@ import "./becca/becca_loader.js"; import compression from "compression"; import cookieParser from "cookie-parser"; -import { renderFile } from "ejs"; +import ejs from "ejs"; import express from "express"; import { auth } from "express-openid-connect"; import helmet from "helmet"; @@ -35,7 +35,7 @@ export default async function buildApp() { // view engine setup app.set("views", path.join(assetsDir, "views")); - app.engine("ejs", (filePath, options, callback) => renderFile(filePath, options, callback)); + app.engine("ejs", (filePath, options, callback) => ejs.renderFile(filePath, options, callback)); app.set("view engine", "ejs"); app.use((req, res, next) => { From eac7235199679c57c55cd634638adc9515e77d4c Mon Sep 17 00:00:00 2001 From: Elian Doran <contact@eliandoran.me> Date: Sun, 18 Jan 2026 18:38:14 +0200 Subject: [PATCH 136/353] chore(sql_console): address requested changes --- apps/client/src/services/shortcuts.spec.ts | 2 +- .../widgets/sidebar/RightPanelContainer.tsx | 3 +-- .../src/widgets/type_widgets/SqlConsole.tsx | 25 ++++++++----------- .../type_widgets/helpers/SplitEditor.tsx | 2 +- 4 files changed, 14 insertions(+), 18 deletions(-) diff --git a/apps/client/src/services/shortcuts.spec.ts b/apps/client/src/services/shortcuts.spec.ts index e73f4bcb5b..ed17dcd391 100644 --- a/apps/client/src/services/shortcuts.spec.ts +++ b/apps/client/src/services/shortcuts.spec.ts @@ -1,4 +1,4 @@ -import { afterEach,beforeEach, describe, expect, it, vi } from "vitest"; +import { afterEach, beforeEach, describe, expect, it, vi } from "vitest"; import shortcuts, { isIMEComposing,keyMatches, matchesShortcut } from "./shortcuts.js"; diff --git a/apps/client/src/widgets/sidebar/RightPanelContainer.tsx b/apps/client/src/widgets/sidebar/RightPanelContainer.tsx index f6f1784a51..082b0a66f0 100644 --- a/apps/client/src/widgets/sidebar/RightPanelContainer.tsx +++ b/apps/client/src/widgets/sidebar/RightPanelContainer.tsx @@ -3,7 +3,7 @@ import "./RightPanelContainer.css"; import Split from "@triliumnext/split.js"; import { VNode } from "preact"; -import { useCallback,useEffect, useRef, useState } from "preact/hooks"; +import { useCallback, useEffect, useRef, useState } from "preact/hooks"; import appContext from "../../components/app_context"; import { WidgetsByParent } from "../../services/bundle"; @@ -12,7 +12,6 @@ import options from "../../services/options"; import { DEFAULT_GUTTER_SIZE } from "../../services/resizer"; import Button from "../react/Button"; import { useActiveNoteContext, useLegacyWidget, useNoteProperty, useTriliumEvent, useTriliumOptionJson } from "../react/hooks"; -import Icon from "../react/Icon"; import NoItems from "../react/NoItems"; import LegacyRightPanelWidget from "../right_panel_widget"; import HighlightsList from "./HighlightsList"; diff --git a/apps/client/src/widgets/type_widgets/SqlConsole.tsx b/apps/client/src/widgets/type_widgets/SqlConsole.tsx index 6b8f79a5f0..9c4108003b 100644 --- a/apps/client/src/widgets/type_widgets/SqlConsole.tsx +++ b/apps/client/src/widgets/type_widgets/SqlConsole.tsx @@ -2,7 +2,6 @@ import "./SqlConsole.css"; import { SchemaResponse, SqlExecuteResponse } from "@triliumnext/commons"; import { useEffect, useState } from "preact/hooks"; -import { Fragment } from "preact/jsx-runtime"; import { ClipboardModule, EditModule, ExportModule, FilterModule, FormatModule, FrozenColumnsModule, KeybindingsModule, PageModule, ResizeColumnsModule, SelectRangeModule, SelectRowModule, SortModule } from "tabulator-tables"; import { t } from "../../services/i18n"; @@ -17,18 +16,16 @@ import { TypeWidgetProps } from "./type_widget"; export default function SqlConsole(props: TypeWidgetProps) { return ( - <> - <SplitEditor - noteType="code" - {...props} - editorBefore={<SqlTableSchemas {...props} />} - previewContent={<SqlResults key={props.note.noteId} {...props} />} - forceOrientation="vertical" - splitOptions={{ - sizes: [ 70, 30 ] - }} - /> - </> + <SplitEditor + noteType="code" + {...props} + editorBefore={<SqlTableSchemas {...props} />} + previewContent={<SqlResults key={props.note.noteId} {...props} />} + forceOrientation="vertical" + splitOptions={{ + sizes: [ 70, 30 ] + }} + /> ); } @@ -151,7 +148,7 @@ export function SqlTableSchemas({ note }: TypeWidgetProps) { server.get<SchemaResponse[]>("sql/schema").then(setSchemas); }, []); - const isEnabled = note?.mime === "text/x-sqlite;schema=trilium" && schemas; + const isEnabled = note.isTriliumSqlite() && schemas; return ( <div className={`sql-table-schemas-widget ${!isEnabled ? "hidden-ext" : ""}`}> {isEnabled && ( diff --git a/apps/client/src/widgets/type_widgets/helpers/SplitEditor.tsx b/apps/client/src/widgets/type_widgets/helpers/SplitEditor.tsx index 5e4da905bb..6553b650a9 100644 --- a/apps/client/src/widgets/type_widgets/helpers/SplitEditor.tsx +++ b/apps/client/src/widgets/type_widgets/helpers/SplitEditor.tsx @@ -79,7 +79,7 @@ export default function SplitEditor({ note, error, splitOptions, previewContent, }, [ readOnly, splitEditorOrientation ]); return ( - <div ref={containerRef} className={`note-detail-split note-detail-printable ${`split-${ splitEditorOrientation}`} ${readOnly ? "split-read-only" : ""} ${className ?? ""}`}> + <div ref={containerRef} className={`note-detail-split note-detail-printable ${`split-${splitEditorOrientation}`} ${readOnly ? "split-read-only" : ""} ${className ?? ""}`}> {splitEditorOrientation === "horizontal" ? <>{editor}{preview}</> : <>{preview}{editor}</>} From 1d3d214101ae6c674efad99fdf1bca0d307a96f8 Mon Sep 17 00:00:00 2001 From: Elian Doran <contact@eliandoran.me> Date: Sun, 18 Jan 2026 22:05:16 +0200 Subject: [PATCH 137/353] fix(print): not printing at all --- apps/client/src/index.ts | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/apps/client/src/index.ts b/apps/client/src/index.ts index 795adc8cfd..fa04369c9a 100644 --- a/apps/client/src/index.ts +++ b/apps/client/src/index.ts @@ -91,10 +91,17 @@ function setBodyAttributes() { } async function loadScripts() { - if (glob.device === "mobile") { - await import("./mobile.js"); - } else { - await import("./desktop.js"); + switch (glob.device) { + case "mobile": + await import("./mobile.js"); + break; + case "print": + await import("./print.js"); + break; + case "desktop": + default: + await import("./desktop.js"); + break; } } From e6380b87b69433387128d04227fe4f1de8463e90 Mon Sep 17 00:00:00 2001 From: Elian Doran <contact@eliandoran.me> Date: Sun, 18 Jan 2026 22:26:13 +0200 Subject: [PATCH 138/353] fix(print): some collections not rendered at all --- apps/client/src/widgets/collections/NoteList.tsx | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/apps/client/src/widgets/collections/NoteList.tsx b/apps/client/src/widgets/collections/NoteList.tsx index ec80e6b197..0b864ace25 100644 --- a/apps/client/src/widgets/collections/NoteList.tsx +++ b/apps/client/src/widgets/collections/NoteList.tsx @@ -1,7 +1,7 @@ import "./NoteList.css"; import { WebSocketMessage } from "@triliumnext/commons"; -import { VNode } from "preact"; +import { Component, VNode } from "preact"; import { lazy, Suspense } from "preact/compat"; import { useEffect, useRef, useState } from "preact/hooks"; @@ -120,7 +120,9 @@ export function CustomNoteList({ note, viewType, isEnabled: shouldEnable, notePa } const ComponentToRender = viewType && props && isEnabled && ( - props.media === "print" ? ViewComponents[viewType].print : ViewComponents[viewType].normal + props.media === "print" + ? ViewComponents[viewType].print ?? ViewComponents[viewType].normal + : ViewComponents[viewType].normal ); return ( From 418a5465832f3076b049f14ebba9454436cc6a02 Mon Sep 17 00:00:00 2001 From: Elian Doran <contact@eliandoran.me> Date: Sun, 18 Jan 2026 22:39:09 +0200 Subject: [PATCH 139/353] fix(print): clicking inside print preview hides it --- apps/client/src/print.tsx | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/apps/client/src/print.tsx b/apps/client/src/print.tsx index 16b41cd42a..96461db2dc 100644 --- a/apps/client/src/print.tsx +++ b/apps/client/src/print.tsx @@ -29,7 +29,9 @@ async function main() { const froca = (await import("./services/froca")).default; const note = await froca.getNote(noteId); - render(<App note={note} noteId={noteId} />, document.body); + const bodyWrapper = document.createElement("div"); + render(<App note={note} noteId={noteId} />, bodyWrapper); + document.body.appendChild(bodyWrapper); } function App({ note, noteId }: { note: FNote | null | undefined, noteId: string }) { From 60dbdbeb719bec4c6e19e45bd932061afb8c4e30 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 19 Jan 2026 02:05:32 +0000 Subject: [PATCH 140/353] chore(deps): update dependency happy-dom to v20.3.3 --- apps/client/package.json | 2 +- package.json | 2 +- pnpm-lock.yaml | 49 ++++++++++++++++++++++------------------ 3 files changed, 29 insertions(+), 24 deletions(-) diff --git a/apps/client/package.json b/apps/client/package.json index 87085ecbb2..20fa345b9a 100644 --- a/apps/client/package.json +++ b/apps/client/package.json @@ -78,7 +78,7 @@ "@types/reveal.js": "5.2.2", "@types/tabulator-tables": "6.3.1", "copy-webpack-plugin": "13.0.1", - "happy-dom": "20.3.1", + "happy-dom": "20.3.3", "lightningcss": "1.30.2", "script-loader": "0.7.2", "vite-plugin-static-copy": "3.1.4" diff --git a/package.json b/package.json index 667daea684..5d046f92ad 100644 --- a/package.json +++ b/package.json @@ -63,7 +63,7 @@ "eslint-config-prettier": "10.1.8", "eslint-plugin-playwright": "2.5.0", "eslint-plugin-simple-import-sort": "12.1.1", - "happy-dom": "20.3.1", + "happy-dom": "20.3.3", "http-server": "14.1.1", "jiti": "2.6.1", "js-yaml": "4.1.1", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 9f132aed00..352ce15a8d 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -92,8 +92,8 @@ importers: specifier: 12.1.1 version: 12.1.1(eslint@9.39.2(jiti@2.6.1)) happy-dom: - specifier: 20.3.1 - version: 20.3.1(bufferutil@4.0.9)(utf-8-validate@6.0.5) + specifier: 20.3.3 + version: 20.3.3(bufferutil@4.0.9)(utf-8-validate@6.0.5) http-server: specifier: 14.1.1 version: 14.1.1 @@ -135,7 +135,7 @@ importers: version: 4.5.4(@types/node@24.10.9)(rollup@4.52.0)(typescript@5.9.3)(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1)) vitest: specifier: 4.0.17 - version: 4.0.17(@opentelemetry/api@1.9.0)(@types/node@24.10.9)(@vitest/browser-webdriverio@4.0.17)(@vitest/ui@4.0.17)(happy-dom@20.3.1(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.2)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) + version: 4.0.17(@opentelemetry/api@1.9.0)(@types/node@24.10.9)(@vitest/browser-webdriverio@4.0.17)(@vitest/ui@4.0.17)(happy-dom@20.3.3(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.2)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) apps/build-docs: devDependencies: @@ -345,8 +345,8 @@ importers: specifier: 13.0.1 version: 13.0.1(webpack@5.101.3(esbuild@0.27.2)) happy-dom: - specifier: 20.3.1 - version: 20.3.1(bufferutil@4.0.9)(utf-8-validate@6.0.5) + specifier: 20.3.3 + version: 20.3.3(bufferutil@4.0.9)(utf-8-validate@6.0.5) lightningcss: specifier: 1.30.2 version: 1.30.2 @@ -858,7 +858,7 @@ importers: version: 7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) vitest: specifier: 4.0.17 - version: 4.0.17(@opentelemetry/api@1.9.0)(@types/node@24.10.9)(@vitest/browser-webdriverio@4.0.17)(@vitest/ui@4.0.17)(happy-dom@20.3.1(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.2)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) + version: 4.0.17(@opentelemetry/api@1.9.0)(@types/node@24.10.9)(@vitest/browser-webdriverio@4.0.17)(@vitest/ui@4.0.17)(happy-dom@20.3.3(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.2)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) packages/ckeditor5: dependencies: @@ -949,7 +949,7 @@ importers: version: 2.0.0(typescript@5.9.3)(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1)) vitest: specifier: 4.0.17 - version: 4.0.17(@opentelemetry/api@1.9.0)(@types/node@24.10.9)(@vitest/browser-webdriverio@4.0.17)(@vitest/ui@4.0.17)(happy-dom@20.3.1(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.2)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) + version: 4.0.17(@opentelemetry/api@1.9.0)(@types/node@24.10.9)(@vitest/browser-webdriverio@4.0.17)(@vitest/ui@4.0.17)(happy-dom@20.3.3(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.2)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) webdriverio: specifier: 9.23.2 version: 9.23.2(bufferutil@4.0.9)(utf-8-validate@6.0.5) @@ -1009,7 +1009,7 @@ importers: version: 2.0.0(typescript@5.9.3)(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1)) vitest: specifier: 4.0.17 - version: 4.0.17(@opentelemetry/api@1.9.0)(@types/node@24.10.9)(@vitest/browser-webdriverio@4.0.17)(@vitest/ui@4.0.17)(happy-dom@20.3.1(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.2)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) + version: 4.0.17(@opentelemetry/api@1.9.0)(@types/node@24.10.9)(@vitest/browser-webdriverio@4.0.17)(@vitest/ui@4.0.17)(happy-dom@20.3.3(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.2)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) webdriverio: specifier: 9.23.2 version: 9.23.2(bufferutil@4.0.9)(utf-8-validate@6.0.5) @@ -1069,7 +1069,7 @@ importers: version: 2.0.0(typescript@5.9.3)(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1)) vitest: specifier: 4.0.17 - version: 4.0.17(@opentelemetry/api@1.9.0)(@types/node@24.10.9)(@vitest/browser-webdriverio@4.0.17)(@vitest/ui@4.0.17)(happy-dom@20.3.1(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.2)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) + version: 4.0.17(@opentelemetry/api@1.9.0)(@types/node@24.10.9)(@vitest/browser-webdriverio@4.0.17)(@vitest/ui@4.0.17)(happy-dom@20.3.3(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.2)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) webdriverio: specifier: 9.23.2 version: 9.23.2(bufferutil@4.0.9)(utf-8-validate@6.0.5) @@ -1136,7 +1136,7 @@ importers: version: 2.0.0(typescript@5.9.3)(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1)) vitest: specifier: 4.0.17 - version: 4.0.17(@opentelemetry/api@1.9.0)(@types/node@24.10.9)(@vitest/browser-webdriverio@4.0.17)(@vitest/ui@4.0.17)(happy-dom@20.3.1(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.2)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) + version: 4.0.17(@opentelemetry/api@1.9.0)(@types/node@24.10.9)(@vitest/browser-webdriverio@4.0.17)(@vitest/ui@4.0.17)(happy-dom@20.3.3(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.2)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) webdriverio: specifier: 9.23.2 version: 9.23.2(bufferutil@4.0.9)(utf-8-validate@6.0.5) @@ -1203,7 +1203,7 @@ importers: version: 2.0.0(typescript@5.9.3)(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1)) vitest: specifier: 4.0.17 - version: 4.0.17(@opentelemetry/api@1.9.0)(@types/node@24.10.9)(@vitest/browser-webdriverio@4.0.17)(@vitest/ui@4.0.17)(happy-dom@20.3.1(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.2)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) + version: 4.0.17(@opentelemetry/api@1.9.0)(@types/node@24.10.9)(@vitest/browser-webdriverio@4.0.17)(@vitest/ui@4.0.17)(happy-dom@20.3.3(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.2)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) webdriverio: specifier: 9.23.2 version: 9.23.2(bufferutil@4.0.9)(utf-8-validate@6.0.5) @@ -8746,8 +8746,8 @@ packages: engines: {node: '>=0.4.7'} hasBin: true - happy-dom@20.3.1: - resolution: {integrity: sha512-tLvsizNno05Hij0PoB0QN/S8xf0YU2AGvO11/JlJDw5McA/gzyn0Ni1RwbTI1/zteUbOekJH0t6q8HFvjbxsGg==} + happy-dom@20.3.3: + resolution: {integrity: sha512-hM9gltmtQLfmWPqoPreUtRdP3nZCSzQEw7l/JC+up5CxquDykhYFKzIzoFFeVev3AGFEULNvsbE8fpZPgxUYEQ==} engines: {node: '>=20.0.0'} has-bigints@1.1.0: @@ -13239,10 +13239,12 @@ packages: tar@6.2.1: resolution: {integrity: sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==} engines: {node: '>=10'} + deprecated: Old versions of tar are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exhorbitant rates) by contacting i@izs.me tar@7.4.3: resolution: {integrity: sha512-5S7Va8hKfV7W5U6g3aYxXmlPoZVAwUMy9AOKyF2fVuZa2UD3qZjg578OrLRt8PcNN1PleVaL/5/yYATNL0ICUw==} engines: {node: '>=18'} + deprecated: Old versions of tar are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exhorbitant rates) by contacting i@izs.me temp@0.9.4: resolution: {integrity: sha512-yYrrsWnrXMcdsnu/7YMYAofM1ktpL5By7vZhf15CrXijWWrEYZks5AXBudalfSWJLlnen/QUJUB5aoB0kqZUGA==} @@ -15244,6 +15246,8 @@ snapshots: '@ckeditor/ckeditor5-core': 47.4.0 '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-code-block@47.4.0(patch_hash=2361d8caad7d6b5bddacc3a3b4aa37dbfba260b1c1b22a450413a79c1bb1ce95)': dependencies: @@ -20573,7 +20577,7 @@ snapshots: '@vitest/browser-webdriverio@4.0.17(bufferutil@4.0.9)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(utf-8-validate@6.0.5)(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1))(vitest@4.0.17)(webdriverio@9.23.2(bufferutil@4.0.9)(utf-8-validate@6.0.5))': dependencies: '@vitest/browser': 4.0.17(bufferutil@4.0.9)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(utf-8-validate@6.0.5)(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1))(vitest@4.0.17) - vitest: 4.0.17(@opentelemetry/api@1.9.0)(@types/node@24.10.9)(@vitest/browser-webdriverio@4.0.17)(@vitest/ui@4.0.17)(happy-dom@20.3.1(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.2)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) + vitest: 4.0.17(@opentelemetry/api@1.9.0)(@types/node@24.10.9)(@vitest/browser-webdriverio@4.0.17)(@vitest/ui@4.0.17)(happy-dom@20.3.3(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.2)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) webdriverio: 9.23.2(bufferutil@4.0.9)(utf-8-validate@6.0.5) transitivePeerDependencies: - bufferutil @@ -20590,7 +20594,7 @@ snapshots: pngjs: 7.0.0 sirv: 3.0.2 tinyrainbow: 3.0.3 - vitest: 4.0.17(@opentelemetry/api@1.9.0)(@types/node@24.10.9)(@vitest/browser-webdriverio@4.0.17)(@vitest/ui@4.0.17)(happy-dom@20.3.1(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.2)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) + vitest: 4.0.17(@opentelemetry/api@1.9.0)(@types/node@24.10.9)(@vitest/browser-webdriverio@4.0.17)(@vitest/ui@4.0.17)(happy-dom@20.3.3(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.2)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) ws: 8.19.0(bufferutil@4.0.9)(utf-8-validate@6.0.5) transitivePeerDependencies: - bufferutil @@ -20610,7 +20614,7 @@ snapshots: magicast: 0.5.1 obug: 2.1.1 tinyrainbow: 3.0.3 - vitest: 4.0.17(@opentelemetry/api@1.9.0)(@types/node@24.10.9)(@vitest/browser-webdriverio@4.0.17)(@vitest/ui@4.0.17)(happy-dom@20.3.1(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.2)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) + vitest: 4.0.17(@opentelemetry/api@1.9.0)(@types/node@24.10.9)(@vitest/browser-webdriverio@4.0.17)(@vitest/ui@4.0.17)(happy-dom@20.3.3(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.2)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) transitivePeerDependencies: - supports-color @@ -20626,7 +20630,7 @@ snapshots: obug: 2.1.1 std-env: 3.10.0 tinyrainbow: 3.0.3 - vitest: 4.0.17(@opentelemetry/api@1.9.0)(@types/node@24.10.9)(@vitest/browser-webdriverio@4.0.17)(@vitest/ui@4.0.17)(happy-dom@20.3.1(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.2)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) + vitest: 4.0.17(@opentelemetry/api@1.9.0)(@types/node@24.10.9)(@vitest/browser-webdriverio@4.0.17)(@vitest/ui@4.0.17)(happy-dom@20.3.3(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.2)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) optionalDependencies: '@vitest/browser': 4.0.17(bufferutil@4.0.9)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(utf-8-validate@6.0.5)(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1))(vitest@4.0.17) @@ -20674,7 +20678,7 @@ snapshots: sirv: 3.0.2 tinyglobby: 0.2.15 tinyrainbow: 3.0.3 - vitest: 4.0.17(@opentelemetry/api@1.9.0)(@types/node@24.10.9)(@vitest/browser-webdriverio@4.0.17)(@vitest/ui@4.0.17)(happy-dom@20.3.1(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.2)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) + vitest: 4.0.17(@opentelemetry/api@1.9.0)(@types/node@24.10.9)(@vitest/browser-webdriverio@4.0.17)(@vitest/ui@4.0.17)(happy-dom@20.3.3(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.2)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) '@vitest/utils@4.0.17': dependencies: @@ -24461,11 +24465,12 @@ snapshots: optionalDependencies: uglify-js: 3.19.3 - happy-dom@20.3.1(bufferutil@4.0.9)(utf-8-validate@6.0.5): + happy-dom@20.3.3(bufferutil@4.0.9)(utf-8-validate@6.0.5): dependencies: - '@types/node': 20.19.25 + '@types/node': 24.10.9 '@types/whatwg-mimetype': 3.0.2 '@types/ws': 8.18.1 + entities: 4.5.0 whatwg-mimetype: 3.0.0 ws: 8.19.0(bufferutil@4.0.9)(utf-8-validate@6.0.5) transitivePeerDependencies: @@ -30544,7 +30549,7 @@ snapshots: tsx: 4.21.0 yaml: 2.8.1 - vitest@4.0.17(@opentelemetry/api@1.9.0)(@types/node@24.10.9)(@vitest/browser-webdriverio@4.0.17)(@vitest/ui@4.0.17)(happy-dom@20.3.1(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.2)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1): + vitest@4.0.17(@opentelemetry/api@1.9.0)(@types/node@24.10.9)(@vitest/browser-webdriverio@4.0.17)(@vitest/ui@4.0.17)(happy-dom@20.3.3(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.2)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1): dependencies: '@vitest/expect': 4.0.17 '@vitest/mocker': 4.0.17(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1)) @@ -30571,7 +30576,7 @@ snapshots: '@types/node': 24.10.9 '@vitest/browser-webdriverio': 4.0.17(bufferutil@4.0.9)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(utf-8-validate@6.0.5)(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1))(vitest@4.0.17)(webdriverio@9.23.2(bufferutil@4.0.9)(utf-8-validate@6.0.5)) '@vitest/ui': 4.0.17(vitest@4.0.17) - happy-dom: 20.3.1(bufferutil@4.0.9)(utf-8-validate@6.0.5) + happy-dom: 20.3.3(bufferutil@4.0.9)(utf-8-validate@6.0.5) jsdom: 26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5) transitivePeerDependencies: - jiti From 84cf4ef4a3be287b11291b9dbffe6700cf949eb5 Mon Sep 17 00:00:00 2001 From: Elian Doran <contact@eliandoran.me> Date: Mon, 19 Jan 2026 13:51:27 +0200 Subject: [PATCH 141/353] fix(print): only first page is shown --- apps/client/src/index.ts | 31 +++++++++++++++++-------------- 1 file changed, 17 insertions(+), 14 deletions(-) diff --git a/apps/client/src/index.ts b/apps/client/src/index.ts index fa04369c9a..fb6c61774e 100644 --- a/apps/client/src/index.ts +++ b/apps/client/src/index.ts @@ -39,22 +39,25 @@ async function loadBootstrapCss() { } function loadStylesheets() { - const { assetPath, themeCssUrl, themeUseNextAsBase } = window.glob; + const { device, assetPath, themeCssUrl, themeUseNextAsBase } = window.glob; + const cssToLoad: string[] = []; - cssToLoad.push(`${assetPath}/stylesheets/ckeditor-theme.css`); - cssToLoad.push(`api/fonts`); - cssToLoad.push(`${assetPath}/stylesheets/theme-light.css`); - if (themeCssUrl) { - cssToLoad.push(themeCssUrl); + if (device !== "print") { + cssToLoad.push(`${assetPath}/stylesheets/ckeditor-theme.css`); + cssToLoad.push(`api/fonts`); + cssToLoad.push(`${assetPath}/stylesheets/theme-light.css`); + if (themeCssUrl) { + cssToLoad.push(themeCssUrl); + } + if (themeUseNextAsBase === "next") { + cssToLoad.push(`${assetPath}/stylesheets/theme-next.css`); + } else if (themeUseNextAsBase === "next-dark") { + cssToLoad.push(`${assetPath}/stylesheets/theme-next-dark.css`); + } else if (themeUseNextAsBase === "next-light") { + cssToLoad.push(`${assetPath}/stylesheets/theme-next-light.css`); + } + cssToLoad.push(`${assetPath}/stylesheets/style.css`); } - if (themeUseNextAsBase === "next") { - cssToLoad.push(`${assetPath}/stylesheets/theme-next.css`); - } else if (themeUseNextAsBase === "next-dark") { - cssToLoad.push(`${assetPath}/stylesheets/theme-next-dark.css`); - } else if (themeUseNextAsBase === "next-light") { - cssToLoad.push(`${assetPath}/stylesheets/theme-next-light.css`); - } - cssToLoad.push(`${assetPath}/stylesheets/style.css`); for (const href of cssToLoad) { const linkEl = document.createElement("link"); From 5d1a63bce070d56eb75422e88bf82cfbe4acbdd5 Mon Sep 17 00:00:00 2001 From: Elian Doran <contact@eliandoran.me> Date: Mon, 19 Jan 2026 14:55:33 +0200 Subject: [PATCH 142/353] fix(print): crash when printing presentation --- apps/client/src/widgets/NoteDetail.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/client/src/widgets/NoteDetail.tsx b/apps/client/src/widgets/NoteDetail.tsx index bb47dc80c1..64a485188e 100644 --- a/apps/client/src/widgets/NoteDetail.tsx +++ b/apps/client/src/widgets/NoteDetail.tsx @@ -363,8 +363,8 @@ function showToast(type: "printing" | "exporting_pdf", progress: number = 0) { }); } -function handlePrintReport(printReport: PrintReport) { - if (printReport.type === "collection" && printReport.ignoredNoteIds.length > 0) { +function handlePrintReport(printReport?: PrintReport) { + if (printReport?.type === "collection" && printReport.ignoredNoteIds.length > 0) { toast.showPersistent({ id: "print-report", icon: "bx bx-collection", From e0b3e41c9e386986adfe28e150ce9c9c2b89d9eb Mon Sep 17 00:00:00 2001 From: Hosted Weblate <hosted@weblate.org> Date: Mon, 19 Jan 2026 07:48:16 +0100 Subject: [PATCH 143/353] Update translation files Updated by "Cleanup translation files" add-on in Weblate. Translation: Trilium Notes/README Translate-URL: https://hosted.weblate.org/projects/trilium/readme/ --- docs/README-tr.md | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/docs/README-tr.md b/docs/README-tr.md index 2046da31da..bd52da803b 100644 --- a/docs/README-tr.md +++ b/docs/README-tr.md @@ -57,13 +57,10 @@ Dokümantasyonumuz birden fazla formatta mevcuttur: ### Hızlı linkler - [Başlangıç Kılavuzu](https://docs.triliumnotes.org/) -- [Installation Instructions](https://docs.triliumnotes.org/user-guide/setup) -- [Docker - Setup](https://docs.triliumnotes.org/user-guide/setup/server/installation/docker) -- [Upgrading - TriliumNext](https://docs.triliumnotes.org/user-guide/setup/upgrading) -- [Basic Concepts and - Features](https://docs.triliumnotes.org/user-guide/concepts/notes) +- Kurulum Klavuzu +- Docker kurulumu +- [TrilliumNext Güncelleme] +- Basit Kavramlar ve Özellikler - [Patterns of Personal Knowledge Base](https://docs.triliumnotes.org/user-guide/misc/patterns-of-personal-knowledge) From da59c14231120bcd9727beae12c1c2e1c252a8cd Mon Sep 17 00:00:00 2001 From: Toto Yullian <tox@sysadmin.id> Date: Mon, 19 Jan 2026 11:07:16 +0100 Subject: [PATCH 144/353] Translated using Weblate (Indonesian) Currently translated at 18.1% (21 of 116 strings) Translation: Trilium Notes/README Translate-URL: https://hosted.weblate.org/projects/trilium/readme/id/ --- docs/README-id.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/README-id.md b/docs/README-id.md index 0f0a9d1d26..3a74efc087 100644 --- a/docs/README-id.md +++ b/docs/README-id.md @@ -88,8 +88,8 @@ Dokumentasi kami tersedia dalam berbagai format: [attributes](https://docs.triliumnotes.org/user-guide/advanced-usage/attributes) can be used for note organization, querying and advanced [scripting](https://docs.triliumnotes.org/user-guide/scripts) -* UI available in English, German, Spanish, French, Romanian, and Chinese - (simplified and traditional) +* Antarmuka pengguna tersedia dalam bahasa Inggris, Jerman, Spanyol, Prancis, + Rumania, dan Tionghoa (sederhana dan tradisional) * Direct [OpenID and TOTP integration](https://docs.triliumnotes.org/user-guide/setup/server/mfa) for more secure login From c304753ffcfe583ddfdb1c4f36d9c7909258f687 Mon Sep 17 00:00:00 2001 From: Baris Konag <bariskonag@gmail.com> Date: Sun, 18 Jan 2026 22:50:02 +0100 Subject: [PATCH 145/353] Translated using Weblate (Turkish) Currently translated at 4.3% (17 of 388 strings) Translation: Trilium Notes/Server Translate-URL: https://hosted.weblate.org/projects/trilium/server/tr/ --- apps/server/src/assets/translations/tr/server.json | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/apps/server/src/assets/translations/tr/server.json b/apps/server/src/assets/translations/tr/server.json index 90d2457356..dcb1b624a2 100644 --- a/apps/server/src/assets/translations/tr/server.json +++ b/apps/server/src/assets/translations/tr/server.json @@ -13,6 +13,9 @@ "collapse-subtree": "Geçerli notun alt ağacını daraltır", "sort-child-notes": "Alt notları sırala", "creating-and-moving-notes": "Notları oluşturma ve yerlerini değiştirme", - "create-note-into": "Aktif nota bağlı alt not oluştur" + "create-note-into": "Aktif nota bağlı alt not oluştur", + "create-note-after": "Aktif nottan sonra yeni bir not oluştur", + "delete-note": "Notu sil", + "move-note-down": "Notu aşağıya kaydır" } } From c7cc702c4acb4c9ee2c619a458d49226096f65de Mon Sep 17 00:00:00 2001 From: Baris Konag <bariskonag@gmail.com> Date: Sun, 18 Jan 2026 22:51:07 +0100 Subject: [PATCH 146/353] Translated using Weblate (Turkish) Currently translated at 10.5% (16 of 152 strings) Translation: Trilium Notes/Website Translate-URL: https://hosted.weblate.org/projects/trilium/website/tr/ --- apps/website/src/translations/tr/translation.json | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/apps/website/src/translations/tr/translation.json b/apps/website/src/translations/tr/translation.json index f320e3116d..7c4b0822db 100644 --- a/apps/website/src/translations/tr/translation.json +++ b/apps/website/src/translations/tr/translation.json @@ -17,6 +17,8 @@ "organization_benefits": { "title": "Organizasyon", "note_structure_title": "Not yapısı", - "note_structure_description": "Notlar hiyerarşik olarak düzenlenebilir. Her not 'alt notlar' içerebildiği için klasörlere ihtiyaç duyulmaz. Tek bir not, hiyerarşinin birden fazla noktasına eklenebilir." + "note_structure_description": "Notlar hiyerarşik olarak düzenlenebilir. Her not 'alt notlar' içerebildiği için klasörlere ihtiyaç duyulmaz. Tek bir not, hiyerarşinin birden fazla noktasına eklenebilir.", + "attributes_description": "Notlar arasında ilişkiler kurun veya kolay kategorizasyon için etiketler ekleyin. Tablolarda ve panolarda kullanılabilen yapılandırılmış bilgileri eklemek için öne çıkan öznitelikleri kullanın.", + "hoisting_description": "Kişisel ve iş notlarınızı bir çalışma alanı altında gruplandırarak kolayca ayırın; bu sayede not ağacınız yalnızca belirli bir not kümesini gösterecek şekilde odaklanacaktır." } } From d43309947e26fcc8695bc95582c5789b4bf4098e Mon Sep 17 00:00:00 2001 From: Elian Doran <contact@eliandoran.me> Date: Mon, 19 Jan 2026 18:39:22 +0200 Subject: [PATCH 147/353] fix(client): polyfill removed jQuery methods --- apps/client/src/index.ts | 11 +++++++++++ apps/client/src/runtime.ts | 11 +++++++++++ 2 files changed, 22 insertions(+) diff --git a/apps/client/src/index.ts b/apps/client/src/index.ts index 795adc8cfd..f4560fa3aa 100644 --- a/apps/client/src/index.ts +++ b/apps/client/src/index.ts @@ -16,6 +16,17 @@ async function initJQuery() { const $ = (await import("jquery")).default; window.$ = $; window.jQuery = $; + + // Polyfill removed jQuery methods for autocomplete.js compatibility + ($ as any).isArray = Array.isArray; + ($ as any).isFunction = function(obj: any) { return typeof obj === 'function'; }; + ($ as any).isPlainObject = function(obj: any) { + if (obj == null || typeof obj !== 'object') { return false; } + const proto = Object.getPrototypeOf(obj); + if (proto === null) { return true; } + const Ctor = Object.prototype.hasOwnProperty.call(proto, 'constructor') && proto.constructor; + return typeof Ctor === 'function' && Ctor === Object; + }; } async function setupGlob() { diff --git a/apps/client/src/runtime.ts b/apps/client/src/runtime.ts index 4c82481b17..cab174a76d 100644 --- a/apps/client/src/runtime.ts +++ b/apps/client/src/runtime.ts @@ -8,6 +8,17 @@ async function loadBootstrap() { } } +// Polyfill removed jQuery methods for autocomplete.js compatibility +($ as any).isArray = Array.isArray; +($ as any).isFunction = function(obj: any) { return typeof obj === 'function'; }; +($ as any).isPlainObject = function(obj: any) { + if (obj == null || typeof obj !== 'object') { return false; } + const proto = Object.getPrototypeOf(obj); + if (proto === null) { return true; } + const Ctor = Object.prototype.hasOwnProperty.call(proto, 'constructor') && proto.constructor; + return typeof Ctor === 'function' && Ctor === Object; +}; + (window as any).$ = $; (window as any).jQuery = $; await loadBootstrap(); From c97f52da366f4b14703ee03cf804d8d28dfc09fc Mon Sep 17 00:00:00 2001 From: Elian Doran <contact@eliandoran.me> Date: Mon, 19 Jan 2026 19:02:54 +0200 Subject: [PATCH 148/353] docs(user): mention breaking change update for scripts --- .../doc_notes/en/User Guide/!!!meta.json | 2 +- .../SQL Console.html | 41 ++++----- .../Scripting/Breaking changes.html | 27 ++++++ .../Developer Guide/Documentation.md | 2 +- docs/User Guide/!!!meta.json | 90 +++++++++++++------ .../User Guide/Scripting/Breaking changes.md | 14 +++ 6 files changed, 120 insertions(+), 56 deletions(-) create mode 100644 apps/server/src/assets/doc_notes/en/User Guide/User Guide/Scripting/Breaking changes.html create mode 100644 docs/User Guide/User Guide/Scripting/Breaking changes.md diff --git a/apps/server/src/assets/doc_notes/en/User Guide/!!!meta.json b/apps/server/src/assets/doc_notes/en/User Guide/!!!meta.json index cab05610ef..b828947f2c 100644 --- a/apps/server/src/assets/doc_notes/en/User Guide/!!!meta.json +++ b/apps/server/src/assets/doc_notes/en/User Guide/!!!meta.json @@ -1 +1 @@ -[{"id":"_help_BOCnjTMBCoxW","title":"Feature Highlights","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Feature Highlights"},{"name":"iconClass","value":"bx bx-star","type":"label"}]},{"id":"_help_Otzi9La2YAUX","title":"Installation & Setup","type":"book","attributes":[{"name":"iconClass","value":"bx bx-cog","type":"label"}],"children":[{"id":"_help_poXkQfguuA0U","title":"Desktop Installation","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Desktop Installation"},{"name":"iconClass","value":"bx bx-desktop","type":"label"}],"children":[{"id":"_help_nRqcgfTb97uV","title":"Using the desktop application as a server","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Desktop Installation/Using the desktop application "},{"name":"iconClass","value":"bx bx-file","type":"label"}]},{"id":"_help_Rp0q8bSP6Ayl","title":"System Requirements","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Desktop Installation/System Requirements"},{"name":"iconClass","value":"bx bx-chip","type":"label"}]},{"id":"_help_Un4wj2Mak2Ky","title":"Nix flake","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Desktop Installation/Nix flake"},{"name":"iconClass","value":"bx bxl-tux","type":"label"}]}]},{"id":"_help_WOcw2SLH6tbX","title":"Server Installation","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Server Installation"},{"name":"iconClass","value":"bx bx-server","type":"label"}],"children":[{"id":"_help_Dgg7bR3b6K9j","title":"1. Installing the server","type":"book","attributes":[{"name":"iconClass","value":"bx bx-folder","type":"label"}],"children":[{"id":"_help_3tW6mORuTHnB","title":"Packaged version for Linux","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Server Installation/1. Installing the server/Packaged version for Linux"},{"name":"iconClass","value":"bx bxl-tux","type":"label"}]},{"id":"_help_rWX5eY045zbE","title":"Using Docker","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Server Installation/1. Installing the server/Using Docker"},{"name":"iconClass","value":"bx bxl-docker","type":"label"}]},{"id":"_help_moVgBcoxE3EK","title":"On NixOS","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Server Installation/1. Installing the server/On NixOS"},{"name":"iconClass","value":"bx bxl-tux","type":"label"}]},{"id":"_help_J1Bb6lVlwU5T","title":"Manually","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Server Installation/1. Installing the server/Manually"},{"name":"iconClass","value":"bx bx-code-alt","type":"label"}]},{"id":"_help_DCmT6e7clMoP","title":"Using Kubernetes","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Server Installation/1. Installing the server/Using Kubernetes"},{"name":"iconClass","value":"bx bxl-kubernetes","type":"label"}]},{"id":"_help_klCWNks3ReaQ","title":"Multiple server instances","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Server Installation/1. Installing the server/Multiple server instances"},{"name":"iconClass","value":"bx bxs-user-account","type":"label"}]}]},{"id":"_help_vcjrb3VVYPZI","title":"2. Reverse proxy","type":"book","attributes":[{"name":"iconClass","value":"bx bx-folder","type":"label"}],"children":[{"id":"_help_ud6MShXL4WpO","title":"Nginx","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Server Installation/2. Reverse proxy/Nginx"},{"name":"iconClass","value":"bx bx-file","type":"label"}]},{"id":"_help_fDLvzOx29Pfg","title":"Apache using Docker","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Server Installation/2. Reverse proxy/Apache using Docker"},{"name":"iconClass","value":"bx bx-file","type":"label"}]},{"id":"_help_LLzSMXACKhUs","title":"Trusted proxy","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Server Installation/2. Reverse proxy/Trusted proxy"},{"name":"iconClass","value":"bx bx-file","type":"label"}]},{"id":"_help_5ERVJb9s4FRD","title":"Traefik","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Server Installation/2. Reverse proxy/Traefik"},{"name":"iconClass","value":"bx bx-file","type":"label"}]}]},{"id":"_help_l2VkvOwUNfZj","title":"HTTPS (TLS)","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Server Installation/HTTPS (TLS)"},{"name":"iconClass","value":"bx bx-lock-alt","type":"label"}]},{"id":"_help_0hzsNCP31IAB","title":"Authentication","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Server Installation/Authentication"},{"name":"iconClass","value":"bx bx-user","type":"label"}]},{"id":"_help_7DAiwaf8Z7Rz","title":"Multi-Factor Authentication","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Server Installation/Multi-Factor Authentication"},{"name":"iconClass","value":"bx bx-stopwatch","type":"label"}]},{"id":"_help_Un4wj2Mak2Ky","title":"Nix flake","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Server Installation/Nix flake.clone"},{"name":"iconClass","value":"bx bx-file","type":"label"}]},{"id":"_help_yeEaYqosGLSh","title":"Third-party cloud hosting","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Server Installation/Third-party cloud hosting"},{"name":"iconClass","value":"bx bx-cloud","type":"label"}]},{"id":"_help_iGTnKjubbXkA","title":"System Requirements","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Server Installation/System Requirements"},{"name":"iconClass","value":"bx bx-chip","type":"label"}]}]},{"id":"_help_cbkrhQjrkKrh","title":"Synchronization","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Synchronization"},{"name":"iconClass","value":"bx bx-sync","type":"label"}]},{"id":"_help_RDslemsQ6gCp","title":"Mobile Frontend","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Mobile Frontend"},{"name":"iconClass","value":"bx bx-mobile-alt","type":"label"}]},{"id":"_help_MtPxeAWVAzMg","title":"Web Clipper","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Web Clipper"},{"name":"iconClass","value":"bx bx-paperclip","type":"label"}]},{"id":"_help_n1lujUxCwipy","title":"Upgrading TriliumNext","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Upgrading TriliumNext"},{"name":"iconClass","value":"bx bx-up-arrow-alt","type":"label"}]},{"id":"_help_ODY7qQn5m2FT","title":"Backup","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Backup"},{"name":"iconClass","value":"bx bx-hdd","type":"label"}]},{"id":"_help_tAassRL4RSQL","title":"Data directory","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Data directory"},{"name":"iconClass","value":"bx bx-folder-open","type":"label"}]}]},{"id":"_help_gh7bpGYxajRS","title":"Basic Concepts and Features","type":"book","attributes":[{"name":"iconClass","value":"bx bx-help-circle","type":"label"}],"children":[{"id":"_help_Vc8PjrjAGuOp","title":"UI Elements","type":"book","attributes":[{"name":"iconClass","value":"bx bx-window-alt","type":"label"}],"children":[{"id":"_help_x0JgW8UqGXvq","title":"Vertical and horizontal layout","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/Vertical and horizontal layout"},{"name":"iconClass","value":"bx bxs-layout","type":"label"}]},{"id":"_help_x3i7MxGccDuM","title":"Global menu","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/Global menu"},{"name":"iconClass","value":"bx bx-menu","type":"label"}]},{"id":"_help_oPVyFC7WL2Lp","title":"Note Tree","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/Note Tree"},{"name":"iconClass","value":"bx bxs-tree-alt","type":"label"}],"children":[{"id":"_help_YtSN43OrfzaA","title":"Note tree contextual menu","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/Note Tree/Note tree contextual menu"},{"name":"iconClass","value":"bx bx-menu","type":"label"}]},{"id":"_help_yTjUdsOi4CIE","title":"Multiple selection","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/Note Tree/Multiple selection"},{"name":"iconClass","value":"bx bx-list-plus","type":"label"}]},{"id":"_help_DvdZhoQZY9Yd","title":"Keyboard shortcuts","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/Note Tree/Keyboard shortcuts"},{"name":"iconClass","value":"bx bxs-keyboard","type":"label"}]},{"id":"_help_wyaGBBQrl4i3","title":"Hiding the subtree","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/Note Tree/Hiding the subtree"},{"name":"iconClass","value":"bx bx-hide","type":"label"}]}]},{"id":"_help_BlN9DFI679QC","title":"Ribbon","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/Ribbon"},{"name":"iconClass","value":"bx bx-dots-horizontal","type":"label"}]},{"id":"_help_3seOhtN8uLIY","title":"Tabs","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/Tabs"},{"name":"iconClass","value":"bx bx-dock-top","type":"label"}]},{"id":"_help_xYmIYSP6wE3F","title":"Launch Bar","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/Launch Bar"},{"name":"iconClass","value":"bx bx-sidebar","type":"label"}]},{"id":"_help_8YBEPzcpUgxw","title":"Note buttons","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/Note buttons"},{"name":"iconClass","value":"bx bx-dots-vertical-rounded","type":"label"}]},{"id":"_help_4TIF1oA4VQRO","title":"Options","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/Options"},{"name":"iconClass","value":"bx bx-cog","type":"label"}]},{"id":"_help_luNhaphA37EO","title":"Split View","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/Split View"},{"name":"iconClass","value":"bx bx-dock-right","type":"label"}]},{"id":"_help_XpOYSgsLkTJy","title":"Floating buttons","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/Floating buttons"},{"name":"iconClass","value":"bx bx-rectangle","type":"label"}]},{"id":"_help_RnaPdbciOfeq","title":"Right Sidebar","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/Right Sidebar"},{"name":"iconClass","value":"bx bxs-dock-right","type":"label"}]},{"id":"_help_r5JGHN99bVKn","title":"Recent Changes","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/Recent Changes"},{"name":"iconClass","value":"bx bx-history","type":"label"}]},{"id":"_help_ny318J39E5Z0","title":"Zoom","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/Zoom"},{"name":"iconClass","value":"bx bx-zoom-in","type":"label"}]},{"id":"_help_lgKX7r3aL30x","title":"Note Tooltip","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/Note Tooltip"},{"name":"iconClass","value":"bx bx-message-detail","type":"label"}]},{"id":"_help_IjZS7iK5EXtb","title":"New Layout","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/New Layout"},{"name":"iconClass","value":"bx bx-layout","type":"label"}],"children":[{"id":"_help_I6p2a06hdnL6","title":"Breadcrumb","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/New Layout/Breadcrumb"},{"name":"iconClass","value":"bx bx-chevron-right","type":"label"}]},{"id":"_help_AlJ73vBCjWDw","title":"Status bar","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/New Layout/Status bar"},{"name":"iconClass","value":"bx bx-dock-bottom","type":"label"}]}]}]},{"id":"_help_BFs8mudNFgCS","title":"Notes","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Notes"},{"name":"iconClass","value":"bx bx-notepad","type":"label"}],"children":[{"id":"_help_p9kXRFAkwN4o","title":"Note Icons","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Notes/Note Icons"},{"name":"iconClass","value":"bx bxs-grid","type":"label"}]},{"id":"_help_0vhv7lsOLy82","title":"Attachments","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Notes/Attachments"},{"name":"iconClass","value":"bx bx-paperclip","type":"label"}]},{"id":"_help_IakOLONlIfGI","title":"Cloning Notes","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Notes/Cloning Notes"},{"name":"iconClass","value":"bx bx-duplicate","type":"label"}],"children":[{"id":"_help_TBwsyfadTA18","title":"Branch prefix","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Notes/Cloning Notes/Branch prefix"},{"name":"iconClass","value":"bx bx-rename","type":"label"}]}]},{"id":"_help_bwg0e8ewQMak","title":"Protected Notes","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Notes/Protected Notes"},{"name":"iconClass","value":"bx bx-lock-alt","type":"label"}]},{"id":"_help_MKmLg5x6xkor","title":"Archived Notes","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Notes/Archived Notes"},{"name":"iconClass","value":"bx bx-box","type":"label"}]},{"id":"_help_vZWERwf8U3nx","title":"Note Revisions","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Notes/Note Revisions"},{"name":"iconClass","value":"bx bx-history","type":"label"}]},{"id":"_help_aGlEvb9hyDhS","title":"Sorting Notes","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Notes/Sorting Notes"},{"name":"iconClass","value":"bx bx-sort-up","type":"label"}]},{"id":"_help_NRnIZmSMc5sj","title":"Printing & Exporting as PDF","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Notes/Printing & Exporting as PDF"},{"name":"iconClass","value":"bx bx-printer","type":"label"}]},{"id":"_help_CoFPLs3dRlXc","title":"Read-Only Notes","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Notes/Read-Only Notes"},{"name":"iconClass","value":"bx bx-edit-alt","type":"label"}]},{"id":"_help_0ESUbbAxVnoK","title":"Note List","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Notes/Note List"},{"name":"iconClass","value":"bx bxs-grid","type":"label"}]}]},{"id":"_help_wArbEsdSae6g","title":"Navigation","type":"book","attributes":[{"name":"iconClass","value":"bx bx-navigation","type":"label"}],"children":[{"id":"_help_kBrnXNG3Hplm","title":"Tree Concepts","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Navigation/Tree Concepts"},{"name":"iconClass","value":"bx bx-pyramid","type":"label"}]},{"id":"_help_MMiBEQljMQh2","title":"Note Navigation","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Navigation/Note Navigation"},{"name":"iconClass","value":"bx bxs-navigation","type":"label"}]},{"id":"_help_Ms1nauBra7gq","title":"Quick search","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Navigation/Quick search"},{"name":"iconClass","value":"bx bx-search-alt-2","type":"label"}]},{"id":"_help_F1r9QtzQLZqm","title":"Jump to...","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Navigation/Jump to"},{"name":"iconClass","value":"bx bx-send","type":"label"}]},{"id":"_help_eIg8jdvaoNNd","title":"Search","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Navigation/Search"},{"name":"iconClass","value":"bx bx-search-alt-2","type":"label"}]},{"id":"_help_u3YFHC9tQlpm","title":"Bookmarks","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Navigation/Bookmarks"},{"name":"iconClass","value":"bx bx-bookmarks","type":"label"}]},{"id":"_help_OR8WJ7Iz9K4U","title":"Note Hoisting","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Navigation/Note Hoisting"},{"name":"iconClass","value":"bx bxs-chevrons-up","type":"label"}]},{"id":"_help_ZjLYv08Rp3qC","title":"Quick edit","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Navigation/Quick edit"},{"name":"iconClass","value":"bx bx-edit","type":"label"}]},{"id":"_help_9sRHySam5fXb","title":"Workspaces","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Navigation/Workspaces"},{"name":"iconClass","value":"bx bx-door-open","type":"label"}]},{"id":"_help_xWtq5NUHOwql","title":"Similar Notes","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Navigation/Similar Notes"},{"name":"iconClass","value":"bx bx-bar-chart","type":"label"}]},{"id":"_help_McngOG2jbUWX","title":"Search in note","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Navigation/Search in note"},{"name":"iconClass","value":"bx bx-search-alt-2","type":"label"}]}]},{"id":"_help_A9Oc6YKKc65v","title":"Keyboard Shortcuts","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Keyboard Shortcuts"},{"name":"iconClass","value":"bx bxs-keyboard","type":"label"}]},{"id":"_help_Wy267RK4M69c","title":"Themes","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Themes"},{"name":"iconClass","value":"bx bx-palette","type":"label"}],"children":[{"id":"_help_VbjZvtUek0Ln","title":"Theme Gallery","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Themes/Theme Gallery"},{"name":"iconClass","value":"bx bx-book-reader","type":"label"}]},{"id":"_help_gOKqSJgXLcIj","title":"Icon Packs","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Themes/Icon Packs"},{"name":"iconClass","value":"bx bx-package","type":"label"}]}]},{"id":"_help_mHbBMPDPkVV5","title":"Import & Export","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Import & Export"},{"name":"iconClass","value":"bx bx-import","type":"label"}],"children":[{"id":"_help_Oau6X9rCuegd","title":"Markdown","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Import & Export/Markdown"},{"name":"iconClass","value":"bx bxl-markdown","type":"label"}],"children":[{"id":"_help_rJ9grSgoExl9","title":"Supported syntax","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Import & Export/Markdown/Supported syntax"},{"name":"iconClass","value":"bx bx-code-alt","type":"label"}]}]},{"id":"_help_syuSEKf2rUGr","title":"Evernote","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Import & Export/Evernote"},{"name":"iconClass","value":"bx bx-window-open","type":"label"}],"children":[{"id":"_help_dj3j8dG4th4l","title":"Process internal links by title","type":"doc","attributes":[{"name":"iconClass","value":"bx bx-file","type":"label"}]}]},{"id":"_help_GnhlmrATVqcH","title":"OneNote","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Import & Export/OneNote"},{"name":"iconClass","value":"bx bx-window-open","type":"label"}]}]},{"id":"_help_rC3pL2aptaRE","title":"Zen mode","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Zen mode"},{"name":"iconClass","value":"bx bxs-yin-yang","type":"label"}]}]},{"id":"_help_s3YCWHBfmYuM","title":"Quick Start","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Quick Start"},{"name":"iconClass","value":"bx bx-run","type":"label"}]},{"id":"_help_i6dbnitykE5D","title":"FAQ","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/FAQ"},{"name":"iconClass","value":"bx bx-question-mark","type":"label"}]},{"id":"_help_KSZ04uQ2D1St","title":"Note Types","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types"},{"name":"iconClass","value":"bx bx-edit","type":"label"}],"children":[{"id":"_help_iPIMuisry3hd","title":"Text","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text"},{"name":"iconClass","value":"bx bx-note","type":"label"}],"children":[{"id":"_help_NwBbFdNZ9h7O","title":"Block quotes & admonitions","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Block quotes & admonitions"},{"name":"iconClass","value":"bx bx-info-circle","type":"label"}]},{"id":"_help_oSuaNgyyKnhu","title":"Bookmarks","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Bookmarks"},{"name":"iconClass","value":"bx bx-bookmark","type":"label"}]},{"id":"_help_veGu4faJErEM","title":"Content language & Right-to-left support","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Content language & Right-to-le"},{"name":"iconClass","value":"bx bx-align-right","type":"label"}]},{"id":"_help_2x0ZAX9ePtzV","title":"Cut to subnote","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Cut to subnote"},{"name":"iconClass","value":"bx bx-cut","type":"label"}]},{"id":"_help_UYuUB1ZekNQU","title":"Developer-specific formatting","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Developer-specific formatting"},{"name":"iconClass","value":"bx bx-code-alt","type":"label"}],"children":[{"id":"_help_QxEyIjRBizuC","title":"Code blocks","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Developer-specific formatting/Code blocks"},{"name":"iconClass","value":"bx bx-code","type":"label"}]}]},{"id":"_help_AgjCISero73a","title":"Footnotes","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Footnotes"},{"name":"iconClass","value":"bx bx-bracket","type":"label"}]},{"id":"_help_nRhnJkTT8cPs","title":"Formatting toolbar","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Formatting toolbar"},{"name":"iconClass","value":"bx bx-text","type":"label"}]},{"id":"_help_Gr6xFaF6ioJ5","title":"General formatting","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/General formatting"},{"name":"iconClass","value":"bx bx-bold","type":"label"}]},{"id":"_help_AxshuNRegLAv","title":"Highlights list","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Highlights list"},{"name":"iconClass","value":"bx bx-highlight","type":"label"}]},{"id":"_help_mT0HEkOsz6i1","title":"Images","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Images"},{"name":"iconClass","value":"bx bx-image-alt","type":"label"}],"children":[{"id":"_help_0Ofbk1aSuVRu","title":"Image references","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Images/Image references"},{"name":"iconClass","value":"bx bxs-file-image","type":"label"}]}]},{"id":"_help_nBAXQFj20hS1","title":"Include Note","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Include Note"},{"name":"iconClass","value":"bx bx-file","type":"label"}]},{"id":"_help_CohkqWQC1iBv","title":"Insert buttons","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Insert buttons"},{"name":"iconClass","value":"bx bx-plus","type":"label"}]},{"id":"_help_oiVPnW8QfnvS","title":"Keyboard shortcuts","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Keyboard shortcuts"},{"name":"iconClass","value":"bx bxs-keyboard","type":"label"}]},{"id":"_help_QEAPj01N5f7w","title":"Links","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Links"},{"name":"iconClass","value":"bx bx-link-alt","type":"label"}],"children":[{"id":"_help_3IDVtesTQ8ds","title":"External links","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Links/External links"},{"name":"iconClass","value":"bx bx-link-external","type":"label"}]},{"id":"_help_hrZ1D00cLbal","title":"Internal (reference) links","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Links/Internal (reference) links"},{"name":"iconClass","value":"bx bx-link","type":"label"}]}]},{"id":"_help_S6Xx8QIWTV66","title":"Lists","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Lists"},{"name":"iconClass","value":"bx bx-list-ul","type":"label"}]},{"id":"_help_QrtTYPmdd1qq","title":"Markdown-like formatting","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Markdown-like formatting"},{"name":"iconClass","value":"bx bxl-markdown","type":"label"}]},{"id":"_help_YfYAtQBcfo5V","title":"Math Equations","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Math Equations"},{"name":"iconClass","value":"bx bx-math","type":"label"}]},{"id":"_help_dEHYtoWWi8ct","title":"Other features","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Other features"},{"name":"iconClass","value":"bx bxs-grid","type":"label"}]},{"id":"_help_gLt3vA97tMcp","title":"Premium features","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Premium features"},{"name":"iconClass","value":"bx bx-star","type":"label"}],"children":[{"id":"_help_ZlN4nump6EbW","title":"Slash Commands","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Premium features/Slash Commands"},{"name":"iconClass","value":"bx bx-menu","type":"label"}]},{"id":"_help_pwc194wlRzcH","title":"Text Snippets","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Premium features/Text Snippets"},{"name":"iconClass","value":"bx bx-align-left","type":"label"}]},{"id":"_help_5wZallV2Qo1t","title":"Format Painter","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Premium features/Format Painter"},{"name":"iconClass","value":"bx bxs-paint-roll","type":"label"}]}]},{"id":"_help_BFvAtE74rbP6","title":"Table of contents","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Table of contents"},{"name":"iconClass","value":"bx bx-heading","type":"label"}]},{"id":"_help_NdowYOC1GFKS","title":"Tables","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Tables"},{"name":"iconClass","value":"bx bx-table","type":"label"}]}]},{"id":"_help_6f9hih2hXXZk","title":"Code","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Code"},{"name":"iconClass","value":"bx bx-code","type":"label"}]},{"id":"_help_m523cpzocqaD","title":"Saved Search","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Saved Search"},{"name":"iconClass","value":"bx bx-file-find","type":"label"}]},{"id":"_help_iRwzGnHPzonm","title":"Relation Map","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Relation Map"},{"name":"iconClass","value":"bx bxs-network-chart","type":"label"}]},{"id":"_help_bdUJEHsAPYQR","title":"Note Map","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Note Map"},{"name":"iconClass","value":"bx bxs-network-chart","type":"label"}]},{"id":"_help_HcABDtFCkbFN","title":"Render Note","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Render Note"},{"name":"iconClass","value":"bx bx-extension","type":"label"}]},{"id":"_help_s1aBHPd79XYj","title":"Mermaid Diagrams","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Mermaid Diagrams"},{"name":"iconClass","value":"bx bx-selection","type":"label"}],"children":[{"id":"_help_RH6yLjjWJHof","title":"ELK layout","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Mermaid Diagrams/ELK layout"},{"name":"iconClass","value":"bx bxs-network-chart","type":"label"}]},{"id":"_help_WWgeUaBb7UfC","title":"Syntax reference","type":"webView","attributes":[{"type":"label","name":"webViewSrc","value":"https://mermaid.js.org/intro/syntax-reference.html"},{"name":"iconClass","value":"bx bx-file","type":"label"}],"enforceAttributes":true}]},{"id":"_help_grjYqerjn243","title":"Canvas","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Canvas"},{"name":"iconClass","value":"bx bx-pen","type":"label"}]},{"id":"_help_1vHRoWCEjj0L","title":"Web View","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Web View"},{"name":"iconClass","value":"bx bx-globe-alt","type":"label"}]},{"id":"_help_gBbsAeiuUxI5","title":"Mind Map","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Mind Map"},{"name":"iconClass","value":"bx bx-sitemap","type":"label"}]},{"id":"_help_W8vYD3Q1zjCR","title":"File","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/File"},{"name":"iconClass","value":"bx bx-file-blank","type":"label"}],"children":[{"id":"_help_XJGJrpu7F9sh","title":"PDFs","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/File/PDFs"},{"name":"iconClass","value":"bx bxs-file-pdf","type":"label"}]}]}]},{"id":"_help_GTwFsgaA0lCt","title":"Collections","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Collections"},{"name":"iconClass","value":"bx bx-book","type":"label"}],"children":[{"id":"_help_xWbu3jpNWapp","title":"Calendar","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Collections/Calendar"},{"name":"iconClass","value":"bx bx-calendar","type":"label"}]},{"id":"_help_2FvYrpmOXm29","title":"Table","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Collections/Table"},{"name":"iconClass","value":"bx bx-table","type":"label"}]},{"id":"_help_CtBQqbwXDx1w","title":"Kanban Board","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Collections/Kanban Board"},{"name":"iconClass","value":"bx bx-columns","type":"label"}]},{"id":"_help_81SGnPGMk7Xc","title":"Geo Map","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Collections/Geo Map"},{"name":"iconClass","value":"bx bx-map-alt","type":"label"}]},{"id":"_help_zP3PMqaG71Ct","title":"Presentation","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Collections/Presentation"},{"name":"iconClass","value":"bx bx-slideshow","type":"label"}]},{"id":"_help_8QqnMzx393bx","title":"Grid View","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Collections/Grid View"},{"name":"iconClass","value":"bx bxs-grid","type":"label"}]},{"id":"_help_mULW0Q3VojwY","title":"List View","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Collections/List View"},{"name":"iconClass","value":"bx bx-list-ul","type":"label"}]}]},{"id":"_help_BgmBlOIl72jZ","title":"Troubleshooting","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Troubleshooting"},{"name":"iconClass","value":"bx bx-bug","type":"label"}],"children":[{"id":"_help_wy8So3yZZlH9","title":"Reporting issues","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Troubleshooting/Reporting issues"},{"name":"iconClass","value":"bx bx-bug-alt","type":"label"}]},{"id":"_help_x59R8J8KV5Bp","title":"Anonymized Database","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Troubleshooting/Anonymized Database"},{"name":"iconClass","value":"bx bx-low-vision","type":"label"}]},{"id":"_help_qzNzp9LYQyPT","title":"Error logs","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Troubleshooting/Error logs"},{"name":"iconClass","value":"bx bx-comment-error","type":"label"}],"children":[{"id":"_help_bnyigUA2UK7s","title":"Backend (server) logs","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Troubleshooting/Error logs/Backend (server) logs"},{"name":"iconClass","value":"bx bx-server","type":"label"}]},{"id":"_help_9yEHzMyFirZR","title":"Frontend logs","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Troubleshooting/Error logs/Frontend logs"},{"name":"iconClass","value":"bx bx-window-alt","type":"label"}]}]},{"id":"_help_vdlYGAcpXAgc","title":"Synchronization fails with 504 Gateway Timeout","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Troubleshooting/Synchronization fails with 504"},{"name":"iconClass","value":"bx bx-error","type":"label"}]},{"id":"_help_s8alTXmpFR61","title":"Refreshing the application","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Troubleshooting/Refreshing the application"},{"name":"iconClass","value":"bx bx-refresh","type":"label"}]}]},{"id":"_help_pKK96zzmvBGf","title":"Theme development","type":"book","attributes":[{"name":"iconClass","value":"bx bx-palette","type":"label"}],"children":[{"id":"_help_7NfNr5pZpVKV","title":"Creating a custom theme","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Theme development/Creating a custom theme"},{"name":"iconClass","value":"bx bxs-color","type":"label"}]},{"id":"_help_WFGzWeUK6arS","title":"Customize the Next theme","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Theme development/Customize the Next theme"},{"name":"iconClass","value":"bx bx-news","type":"label"}]},{"id":"_help_WN5z4M8ASACJ","title":"Reference","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Theme development/Reference"},{"name":"iconClass","value":"bx bx-book-open","type":"label"}]},{"id":"_help_AlhDUqhENtH7","title":"Custom app-wide CSS","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Theme development/Custom app-wide CSS"},{"name":"iconClass","value":"bx bxs-file-css","type":"label"}]},{"id":"_help_g1mlRoU8CsqC","title":"Creating an icon pack","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Theme development/Creating an icon pack"},{"name":"iconClass","value":"bx bx-package","type":"label"}]}]},{"id":"_help_tC7s2alapj8V","title":"Advanced Usage","type":"book","attributes":[{"name":"iconClass","value":"bx bx-rocket","type":"label"}],"children":[{"id":"_help_zEY4DaJG4YT5","title":"Attributes","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Attributes"},{"name":"iconClass","value":"bx bx-list-check","type":"label"}],"children":[{"id":"_help_HI6GBBIduIgv","title":"Labels","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Attributes/Labels"},{"name":"iconClass","value":"bx bx-hash","type":"label"}]},{"id":"_help_Cq5X6iKQop6R","title":"Relations","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Attributes/Relations"},{"name":"iconClass","value":"bx bx-transfer","type":"label"}]},{"id":"_help_bwZpz2ajCEwO","title":"Attribute Inheritance","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Attributes/Attribute Inheritance"},{"name":"iconClass","value":"bx bx-list-plus","type":"label"}]},{"id":"_help_OFXdgB2nNk1F","title":"Promoted Attributes","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Attributes/Promoted Attributes"},{"name":"iconClass","value":"bx bx-table","type":"label"}]}]},{"id":"_help_KC1HB96bqqHX","title":"Templates","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Templates"},{"name":"iconClass","value":"bx bx-copy","type":"label"}]},{"id":"_help_BCkXAVs63Ttv","title":"Note Map (Link map, Tree map)","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Note Map (Link map, Tree map)"},{"name":"iconClass","value":"bx bxs-network-chart","type":"label"}]},{"id":"_help_R9pX4DGra2Vt","title":"Sharing","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Sharing"},{"name":"iconClass","value":"bx bx-share-alt","type":"label"}],"children":[{"id":"_help_Qjt68inQ2bRj","title":"Serving directly the content of a note","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Sharing/Serving directly the content o"},{"name":"iconClass","value":"bx bx-code","type":"label"}]},{"id":"_help_ycBFjKrrwE9p","title":"Exporting static HTML for web publishing","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Sharing/Exporting static HTML for web "},{"name":"iconClass","value":"bx bxs-file-html","type":"label"}]},{"id":"_help_sLIJ6f1dkJYW","title":"Reverse proxy configuration","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Sharing/Reverse proxy configuration"},{"name":"iconClass","value":"bx bx-world","type":"label"}]}]},{"id":"_help_5668rwcirq1t","title":"Advanced Showcases","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Advanced Showcases"},{"name":"iconClass","value":"bx bxs-component","type":"label"}],"children":[{"id":"_help_l0tKav7yLHGF","title":"Day Notes","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Advanced Showcases/Day Notes"},{"name":"iconClass","value":"bx bx-calendar","type":"label"}]},{"id":"_help_R7abl2fc6Mxi","title":"Weight Tracker","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Advanced Showcases/Weight Tracker"},{"name":"iconClass","value":"bx bx-line-chart","type":"label"}]},{"id":"_help_xYjQUYhpbUEW","title":"Task Manager","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Advanced Showcases/Task Manager"},{"name":"iconClass","value":"bx bx-calendar-check","type":"label"}]}]},{"id":"_help_J5Ex1ZrMbyJ6","title":"Custom Request Handler","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Custom Request Handler"},{"name":"iconClass","value":"bx bx-globe","type":"label"}]},{"id":"_help_d3fAXQ2diepH","title":"Custom Resource Providers","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Custom Resource Providers"},{"name":"iconClass","value":"bx bxs-file-plus","type":"label"}]},{"id":"_help_pgxEVkzLl1OP","title":"ETAPI (REST API)","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/ETAPI (REST API)"},{"name":"iconClass","value":"bx bx-extension","type":"label"}],"children":[{"id":"_help_9qPsTWBorUhQ","title":"API Reference","type":"webView","attributes":[{"type":"label","name":"webViewSrc","value":"https://docs.triliumnotes.org/rest-api/etapi/"},{"name":"iconClass","value":"bx bx-file","type":"label"}],"enforceAttributes":true}]},{"id":"_help_47ZrP6FNuoG8","title":"Default Note Title","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Default Note Title"},{"name":"iconClass","value":"bx bx-edit-alt","type":"label"}]},{"id":"_help_wX4HbRucYSDD","title":"Database","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Database"},{"name":"iconClass","value":"bx bx-data","type":"label"}],"children":[{"id":"_help_oyIAJ9PvvwHX","title":"Manually altering the database","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Database/Manually altering the database"},{"name":"iconClass","value":"bx bxs-edit","type":"label"}],"children":[{"id":"_help_YKWqdJhzi2VY","title":"SQL Console","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Database/Manually altering the database/SQL Console"},{"name":"iconClass","value":"bx bx-data","type":"label"}]}]},{"id":"_help_6tZeKvSHEUiB","title":"Demo Notes","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Database/Demo Notes"},{"name":"iconClass","value":"bx bx-package","type":"label"}]}]},{"id":"_help_Gzjqa934BdH4","title":"Configuration (config.ini or environment variables)","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Configuration (config.ini or e"},{"name":"iconClass","value":"bx bx-cog","type":"label"}],"children":[{"id":"_help_c5xB8m4g2IY6","title":"Trilium instance","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Configuration (config.ini or environment variables)/Trilium instance"},{"name":"iconClass","value":"bx bx-windows","type":"label"}]},{"id":"_help_LWtBjFej3wX3","title":"Cross-Origin Resource Sharing (CORS)","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Configuration (config.ini or environment variables)/Cross-Origin Resource Sharing "},{"name":"iconClass","value":"bx bx-lock","type":"label"}]}]},{"id":"_help_ivYnonVFBxbQ","title":"Bulk Actions","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Bulk Actions"},{"name":"iconClass","value":"bx bx-list-plus","type":"label"}]},{"id":"_help_4FahAwuGTAwC","title":"Note source","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Note source"},{"name":"iconClass","value":"bx bx-code","type":"label"}]},{"id":"_help_1YeN2MzFUluU","title":"Technologies used","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Technologies used"},{"name":"iconClass","value":"bx bx-pyramid","type":"label"}],"children":[{"id":"_help_MI26XDLSAlCD","title":"CKEditor","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Technologies used/CKEditor"},{"name":"iconClass","value":"bx bx-file","type":"label"}]},{"id":"_help_N4IDkixaDG9C","title":"MindElixir","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Technologies used/MindElixir"},{"name":"iconClass","value":"bx bx-sitemap","type":"label"}]},{"id":"_help_H0mM1lTxF9JI","title":"Excalidraw","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Technologies used/Excalidraw"},{"name":"iconClass","value":"bx bx-pen","type":"label"}]},{"id":"_help_MQHyy2dIFgxS","title":"Leaflet","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Technologies used/Leaflet"},{"name":"iconClass","value":"bx bx-map-alt","type":"label"}]}]},{"id":"_help_m1lbrzyKDaRB","title":"Note ID","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Note ID"},{"name":"iconClass","value":"bx bx-hash","type":"label"}]},{"id":"_help_0vTSyvhPTAOz","title":"Internal API","type":"book","attributes":[{"name":"iconClass","value":"bx bxs-component","type":"label"}],"children":[{"id":"_help_z8O2VG4ZZJD7","title":"API Reference","type":"webView","attributes":[{"type":"label","name":"webViewSrc","value":"https://docs.triliumnotes.org/rest-api/internal/"},{"name":"iconClass","value":"bx bx-file","type":"label"}],"enforceAttributes":true}]},{"id":"_help_2mUhVmZK8RF3","title":"Hidden Notes","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Hidden Notes"},{"name":"iconClass","value":"bx bx-hide","type":"label"}]},{"id":"_help_uYF7pmepw27K","title":"Metrics","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Metrics"},{"name":"iconClass","value":"bx bxs-data","type":"label"}],"children":[{"id":"_help_bOP3TB56fL1V","title":"grafana-dashboard.json","type":"doc","attributes":[{"name":"iconClass","value":"bx bx-file","type":"label"}]}]},{"id":"_help_64ZTlUPgEPtW","title":"Safe mode","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Safe mode"},{"name":"iconClass","value":"bx bxs-virus-block","type":"label"}]},{"id":"_help_HAIOFBoYIIdO","title":"Nightly release","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Nightly release"},{"name":"iconClass","value":"bx bx-moon","type":"label"}]},{"id":"_help_ZmT9ln8XJX2o","title":"Read-only database","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Read-only database"},{"name":"iconClass","value":"bx bx-book-reader","type":"label"}]}]},{"id":"_help_GBBMSlVSOIGP","title":"AI","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/AI"},{"name":"iconClass","value":"bx bx-bot","type":"label"}],"children":[{"id":"_help_WkM7gsEUyCXs","title":"Providers","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/AI/Providers"},{"name":"iconClass","value":"bx bx-select-multiple","type":"label"}],"children":[{"id":"_help_7EdTxPADv95W","title":"Ollama","type":"book","attributes":[{"name":"iconClass","value":"bx bx-message-dots","type":"label"}],"children":[{"id":"_help_vvUCN7FDkq7G","title":"Installing Ollama","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/AI/Providers/Ollama/Installing Ollama"},{"name":"iconClass","value":"bx bx-file","type":"label"}]}]},{"id":"_help_ZavFigBX9AwP","title":"OpenAI","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/AI/Providers/OpenAI"},{"name":"iconClass","value":"bx bx-message-dots","type":"label"}]},{"id":"_help_e0lkirXEiSNc","title":"Anthropic","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/AI/Providers/Anthropic"},{"name":"iconClass","value":"bx bx-message-dots","type":"label"}]}]}]},{"id":"_help_CdNpE2pqjmI6","title":"Scripting","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Scripting"},{"name":"iconClass","value":"bx bxs-file-js","type":"label"}],"children":[{"id":"_help_yIhgI5H7A2Sm","title":"Frontend Basics","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Scripting/Frontend Basics"},{"name":"iconClass","value":"bx bx-window","type":"label"}],"children":[{"id":"_help_MgibgPcfeuGz","title":"Custom Widgets","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Scripting/Frontend Basics/Custom Widgets"},{"name":"iconClass","value":"bx bxs-widget","type":"label"}],"children":[{"id":"_help_SynTBQiBsdYJ","title":"Widget Basics","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Scripting/Frontend Basics/Custom Widgets/Widget Basics"},{"name":"iconClass","value":"bx bx-file","type":"label"}]},{"id":"_help_GhurYZjh8e1V","title":"Note context aware widget","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Scripting/Frontend Basics/Custom Widgets/Note context aware widget"},{"name":"iconClass","value":"bx bx-file","type":"label"}]},{"id":"_help_M8IppdwVHSjG","title":"Right pane widget","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Scripting/Frontend Basics/Custom Widgets/Right pane widget"},{"name":"iconClass","value":"bx bx-file","type":"label"}]},{"id":"_help_YNxAqkI5Kg1M","title":"Word count widget","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Scripting/Frontend Basics/Custom Widgets/Word count widget"},{"name":"iconClass","value":"bx bx-file","type":"label"}]},{"id":"_help_VqGQnnPGnqAU","title":"CSS","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Scripting/Frontend Basics/Custom Widgets/CSS"},{"name":"iconClass","value":"bx bx-file","type":"label"}]},{"id":"_help_gMkgcLJ6jBkg","title":"Troubleshooting","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Scripting/Frontend Basics/Custom Widgets/Troubleshooting"},{"name":"iconClass","value":"bx bx-file","type":"label"}]}]},{"id":"_help_es8OU2GuguFU","title":"Examples","type":"book","attributes":[{"name":"iconClass","value":"bx bx-code-alt","type":"label"}],"children":[{"id":"_help_TjLYAo3JMO8X","title":"\"New Task\" launcher button","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Scripting/Frontend Basics/Examples/New Task launcher button"},{"name":"iconClass","value":"bx bx-task","type":"label"}]},{"id":"_help_7kZPMD0uFwkH","title":"Downloading responses from Google Forms","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Scripting/Frontend Basics/Examples/Downloading responses from Goo"},{"name":"iconClass","value":"bx bx-file","type":"label"}]},{"id":"_help_DL92EjAaXT26","title":"Using promoted attributes to configure scripts","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Scripting/Frontend Basics/Examples/Using promoted attributes to c"},{"name":"iconClass","value":"bx bx-file","type":"label"}]}]},{"id":"_help_4Gn3psZKsfSm","title":"Launch Bar Widgets","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Scripting/Frontend Basics/Launch Bar Widgets"},{"name":"iconClass","value":"bx bx-dock-left","type":"label"}],"children":[{"id":"_help_IPArqVfDQ4We","title":"Note Title Widget","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Scripting/Frontend Basics/Launch Bar Widgets/Note Title Widget"},{"name":"iconClass","value":"bx bx-file","type":"label"}]},{"id":"_help_gcI7RPbaNSh3","title":"Analog Watch","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Scripting/Frontend Basics/Launch Bar Widgets/Analog Watch"},{"name":"iconClass","value":"bx bx-file","type":"label"}]}]},{"id":"_help_KLsqhjaqh1QW","title":"Preact","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Scripting/Frontend Basics/Preact"},{"name":"iconClass","value":"bx bxl-react","type":"label"}],"children":[{"id":"_help_Bqde6BvPo05g","title":"Component libraries","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Scripting/Frontend Basics/Preact/Component libraries"},{"name":"iconClass","value":"bx bxs-component","type":"label"}]},{"id":"_help_ykYtbM9k3a7B","title":"Hooks","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Scripting/Frontend Basics/Preact/Hooks"},{"name":"iconClass","value":"bx bx-question-mark","type":"label"}]},{"id":"_help_Sg9GrCtyftZf","title":"CSS","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Scripting/Frontend Basics/Preact/CSS"},{"name":"iconClass","value":"bx bxs-file-css","type":"label"}]},{"id":"_help_RSssb9S3xgSr","title":"Built-in components","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Scripting/Frontend Basics/Preact/Built-in components"},{"name":"iconClass","value":"bx bxs-component","type":"label"}],"children":[{"id":"_help_i9B4IW7b6V6z","title":"Widget showcase","type":"doc","attributes":[{"name":"iconClass","value":"bx bx-file","type":"label"}]}]}]}]},{"id":"_help_SPirpZypehBG","title":"Backend scripts","type":"book","attributes":[{"name":"iconClass","value":"bx bx-server","type":"label"}],"children":[{"id":"_help_fZ2IGYFXjkEy","title":"Server-side imports","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Scripting/Backend scripts/Server-side imports"},{"name":"iconClass","value":"bx bx-file","type":"label"}]},{"id":"_help_GPERMystNGTB","title":"Events","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Scripting/Backend scripts/Events"},{"name":"iconClass","value":"bx bx-rss","type":"label"}]}]},{"id":"_help_wqXwKJl6VpNk","title":"Common concepts","type":"book","attributes":[{"name":"iconClass","value":"bx bxl-nodejs","type":"label"}],"children":[{"id":"_help_hA834UaHhSNn","title":"Script bundles","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Scripting/Common concepts/Script bundles"},{"name":"iconClass","value":"bx bx-package","type":"label"}]}]},{"id":"_help_GLks18SNjxmC","title":"Script API","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Scripting/Script API"},{"name":"iconClass","value":"bx bx-code-curly","type":"label"}],"children":[{"id":"_help_Q2z6av6JZVWm","title":"Frontend API","type":"webView","attributes":[{"type":"label","name":"webViewSrc","value":"https://docs.triliumnotes.org/script-api/frontend"},{"name":"iconClass","value":"bx bx-folder","type":"label"}],"enforceAttributes":true,"children":[{"id":"_help_habiZ3HU8Kw8","title":"FNote","type":"webView","attributes":[{"type":"label","name":"webViewSrc","value":"https://docs.triliumnotes.org/script-api/frontend/interfaces/FNote.html"},{"name":"iconClass","value":"bx bx-file","type":"label"}],"enforceAttributes":true}]},{"id":"_help_MEtfsqa5VwNi","title":"Backend API","type":"webView","attributes":[{"type":"label","name":"webViewSrc","value":"https://docs.triliumnotes.org/script-api/backend"},{"name":"iconClass","value":"bx bx-file","type":"label"}],"enforceAttributes":true},{"id":"_help_ApVHZ8JY5ofC","title":"Day.js","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Scripting/Script API/Day.js"},{"name":"iconClass","value":"bx bx-calendar","type":"label"}]}]},{"id":"_help_vElnKeDNPSVl","title":"Logging","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Scripting/Logging"},{"name":"iconClass","value":"bx bx-terminal","type":"label"}]}]},{"id":"_help_Fm0j45KqyHpU","title":"Miscellaneous","type":"book","attributes":[{"name":"iconClass","value":"bx bx-info-circle","type":"label"}],"children":[{"id":"_help_WFbFXrgnDyyU","title":"Privacy Policy","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Miscellaneous/Privacy Policy"},{"name":"iconClass","value":"bx bx-file","type":"label"}]},{"id":"_help_NcsmUYZRWEW4","title":"Patterns of personal knowledge","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Miscellaneous/Patterns of personal knowledge"},{"name":"iconClass","value":"bx bx-file","type":"label"}]}]}] \ No newline at end of file +[{"id":"_help_BOCnjTMBCoxW","title":"Feature Highlights","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Feature Highlights"},{"name":"iconClass","value":"bx bx-star","type":"label"}]},{"id":"_help_Otzi9La2YAUX","title":"Installation & Setup","type":"book","attributes":[{"name":"iconClass","value":"bx bx-cog","type":"label"}],"children":[{"id":"_help_poXkQfguuA0U","title":"Desktop Installation","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Desktop Installation"},{"name":"iconClass","value":"bx bx-desktop","type":"label"}],"children":[{"id":"_help_nRqcgfTb97uV","title":"Using the desktop application as a server","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Desktop Installation/Using the desktop application "},{"name":"iconClass","value":"bx bx-file","type":"label"}]},{"id":"_help_Rp0q8bSP6Ayl","title":"System Requirements","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Desktop Installation/System Requirements"},{"name":"iconClass","value":"bx bx-chip","type":"label"}]},{"id":"_help_Un4wj2Mak2Ky","title":"Nix flake","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Desktop Installation/Nix flake"},{"name":"iconClass","value":"bx bxl-tux","type":"label"}]}]},{"id":"_help_WOcw2SLH6tbX","title":"Server Installation","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Server Installation"},{"name":"iconClass","value":"bx bx-server","type":"label"}],"children":[{"id":"_help_Dgg7bR3b6K9j","title":"1. Installing the server","type":"book","attributes":[{"name":"iconClass","value":"bx bx-folder","type":"label"}],"children":[{"id":"_help_3tW6mORuTHnB","title":"Packaged version for Linux","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Server Installation/1. Installing the server/Packaged version for Linux"},{"name":"iconClass","value":"bx bxl-tux","type":"label"}]},{"id":"_help_rWX5eY045zbE","title":"Using Docker","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Server Installation/1. Installing the server/Using Docker"},{"name":"iconClass","value":"bx bxl-docker","type":"label"}]},{"id":"_help_moVgBcoxE3EK","title":"On NixOS","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Server Installation/1. Installing the server/On NixOS"},{"name":"iconClass","value":"bx bxl-tux","type":"label"}]},{"id":"_help_J1Bb6lVlwU5T","title":"Manually","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Server Installation/1. Installing the server/Manually"},{"name":"iconClass","value":"bx bx-code-alt","type":"label"}]},{"id":"_help_DCmT6e7clMoP","title":"Using Kubernetes","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Server Installation/1. Installing the server/Using Kubernetes"},{"name":"iconClass","value":"bx bxl-kubernetes","type":"label"}]},{"id":"_help_klCWNks3ReaQ","title":"Multiple server instances","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Server Installation/1. Installing the server/Multiple server instances"},{"name":"iconClass","value":"bx bxs-user-account","type":"label"}]}]},{"id":"_help_vcjrb3VVYPZI","title":"2. Reverse proxy","type":"book","attributes":[{"name":"iconClass","value":"bx bx-folder","type":"label"}],"children":[{"id":"_help_ud6MShXL4WpO","title":"Nginx","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Server Installation/2. Reverse proxy/Nginx"},{"name":"iconClass","value":"bx bx-file","type":"label"}]},{"id":"_help_fDLvzOx29Pfg","title":"Apache using Docker","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Server Installation/2. Reverse proxy/Apache using Docker"},{"name":"iconClass","value":"bx bx-file","type":"label"}]},{"id":"_help_LLzSMXACKhUs","title":"Trusted proxy","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Server Installation/2. Reverse proxy/Trusted proxy"},{"name":"iconClass","value":"bx bx-file","type":"label"}]},{"id":"_help_5ERVJb9s4FRD","title":"Traefik","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Server Installation/2. Reverse proxy/Traefik"},{"name":"iconClass","value":"bx bx-file","type":"label"}]}]},{"id":"_help_l2VkvOwUNfZj","title":"HTTPS (TLS)","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Server Installation/HTTPS (TLS)"},{"name":"iconClass","value":"bx bx-lock-alt","type":"label"}]},{"id":"_help_0hzsNCP31IAB","title":"Authentication","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Server Installation/Authentication"},{"name":"iconClass","value":"bx bx-user","type":"label"}]},{"id":"_help_7DAiwaf8Z7Rz","title":"Multi-Factor Authentication","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Server Installation/Multi-Factor Authentication"},{"name":"iconClass","value":"bx bx-stopwatch","type":"label"}]},{"id":"_help_Un4wj2Mak2Ky","title":"Nix flake","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Server Installation/Nix flake.clone"},{"name":"iconClass","value":"bx bx-file","type":"label"}]},{"id":"_help_yeEaYqosGLSh","title":"Third-party cloud hosting","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Server Installation/Third-party cloud hosting"},{"name":"iconClass","value":"bx bx-cloud","type":"label"}]},{"id":"_help_iGTnKjubbXkA","title":"System Requirements","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Server Installation/System Requirements"},{"name":"iconClass","value":"bx bx-chip","type":"label"}]}]},{"id":"_help_cbkrhQjrkKrh","title":"Synchronization","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Synchronization"},{"name":"iconClass","value":"bx bx-sync","type":"label"}]},{"id":"_help_RDslemsQ6gCp","title":"Mobile Frontend","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Mobile Frontend"},{"name":"iconClass","value":"bx bx-mobile-alt","type":"label"}]},{"id":"_help_MtPxeAWVAzMg","title":"Web Clipper","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Web Clipper"},{"name":"iconClass","value":"bx bx-paperclip","type":"label"}]},{"id":"_help_n1lujUxCwipy","title":"Upgrading TriliumNext","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Upgrading TriliumNext"},{"name":"iconClass","value":"bx bx-up-arrow-alt","type":"label"}]},{"id":"_help_ODY7qQn5m2FT","title":"Backup","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Backup"},{"name":"iconClass","value":"bx bx-hdd","type":"label"}]},{"id":"_help_tAassRL4RSQL","title":"Data directory","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Data directory"},{"name":"iconClass","value":"bx bx-folder-open","type":"label"}]}]},{"id":"_help_gh7bpGYxajRS","title":"Basic Concepts and Features","type":"book","attributes":[{"name":"iconClass","value":"bx bx-help-circle","type":"label"}],"children":[{"id":"_help_Vc8PjrjAGuOp","title":"UI Elements","type":"book","attributes":[{"name":"iconClass","value":"bx bx-window-alt","type":"label"}],"children":[{"id":"_help_x0JgW8UqGXvq","title":"Vertical and horizontal layout","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/Vertical and horizontal layout"},{"name":"iconClass","value":"bx bxs-layout","type":"label"}]},{"id":"_help_x3i7MxGccDuM","title":"Global menu","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/Global menu"},{"name":"iconClass","value":"bx bx-menu","type":"label"}]},{"id":"_help_oPVyFC7WL2Lp","title":"Note Tree","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/Note Tree"},{"name":"iconClass","value":"bx bxs-tree-alt","type":"label"}],"children":[{"id":"_help_YtSN43OrfzaA","title":"Note tree contextual menu","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/Note Tree/Note tree contextual menu"},{"name":"iconClass","value":"bx bx-menu","type":"label"}]},{"id":"_help_yTjUdsOi4CIE","title":"Multiple selection","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/Note Tree/Multiple selection"},{"name":"iconClass","value":"bx bx-list-plus","type":"label"}]},{"id":"_help_DvdZhoQZY9Yd","title":"Keyboard shortcuts","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/Note Tree/Keyboard shortcuts"},{"name":"iconClass","value":"bx bxs-keyboard","type":"label"}]},{"id":"_help_wyaGBBQrl4i3","title":"Hiding the subtree","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/Note Tree/Hiding the subtree"},{"name":"iconClass","value":"bx bx-hide","type":"label"}]}]},{"id":"_help_BlN9DFI679QC","title":"Ribbon","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/Ribbon"},{"name":"iconClass","value":"bx bx-dots-horizontal","type":"label"}]},{"id":"_help_3seOhtN8uLIY","title":"Tabs","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/Tabs"},{"name":"iconClass","value":"bx bx-dock-top","type":"label"}]},{"id":"_help_xYmIYSP6wE3F","title":"Launch Bar","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/Launch Bar"},{"name":"iconClass","value":"bx bx-sidebar","type":"label"}]},{"id":"_help_8YBEPzcpUgxw","title":"Note buttons","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/Note buttons"},{"name":"iconClass","value":"bx bx-dots-vertical-rounded","type":"label"}]},{"id":"_help_4TIF1oA4VQRO","title":"Options","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/Options"},{"name":"iconClass","value":"bx bx-cog","type":"label"}]},{"id":"_help_luNhaphA37EO","title":"Split View","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/Split View"},{"name":"iconClass","value":"bx bx-dock-right","type":"label"}]},{"id":"_help_XpOYSgsLkTJy","title":"Floating buttons","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/Floating buttons"},{"name":"iconClass","value":"bx bx-rectangle","type":"label"}]},{"id":"_help_RnaPdbciOfeq","title":"Right Sidebar","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/Right Sidebar"},{"name":"iconClass","value":"bx bxs-dock-right","type":"label"}]},{"id":"_help_r5JGHN99bVKn","title":"Recent Changes","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/Recent Changes"},{"name":"iconClass","value":"bx bx-history","type":"label"}]},{"id":"_help_ny318J39E5Z0","title":"Zoom","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/Zoom"},{"name":"iconClass","value":"bx bx-zoom-in","type":"label"}]},{"id":"_help_lgKX7r3aL30x","title":"Note Tooltip","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/Note Tooltip"},{"name":"iconClass","value":"bx bx-message-detail","type":"label"}]},{"id":"_help_IjZS7iK5EXtb","title":"New Layout","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/New Layout"},{"name":"iconClass","value":"bx bx-layout","type":"label"}],"children":[{"id":"_help_I6p2a06hdnL6","title":"Breadcrumb","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/New Layout/Breadcrumb"},{"name":"iconClass","value":"bx bx-chevron-right","type":"label"}]},{"id":"_help_AlJ73vBCjWDw","title":"Status bar","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/New Layout/Status bar"},{"name":"iconClass","value":"bx bx-dock-bottom","type":"label"}]}]}]},{"id":"_help_BFs8mudNFgCS","title":"Notes","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Notes"},{"name":"iconClass","value":"bx bx-notepad","type":"label"}],"children":[{"id":"_help_p9kXRFAkwN4o","title":"Note Icons","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Notes/Note Icons"},{"name":"iconClass","value":"bx bxs-grid","type":"label"}]},{"id":"_help_0vhv7lsOLy82","title":"Attachments","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Notes/Attachments"},{"name":"iconClass","value":"bx bx-paperclip","type":"label"}]},{"id":"_help_IakOLONlIfGI","title":"Cloning Notes","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Notes/Cloning Notes"},{"name":"iconClass","value":"bx bx-duplicate","type":"label"}],"children":[{"id":"_help_TBwsyfadTA18","title":"Branch prefix","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Notes/Cloning Notes/Branch prefix"},{"name":"iconClass","value":"bx bx-rename","type":"label"}]}]},{"id":"_help_bwg0e8ewQMak","title":"Protected Notes","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Notes/Protected Notes"},{"name":"iconClass","value":"bx bx-lock-alt","type":"label"}]},{"id":"_help_MKmLg5x6xkor","title":"Archived Notes","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Notes/Archived Notes"},{"name":"iconClass","value":"bx bx-box","type":"label"}]},{"id":"_help_vZWERwf8U3nx","title":"Note Revisions","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Notes/Note Revisions"},{"name":"iconClass","value":"bx bx-history","type":"label"}]},{"id":"_help_aGlEvb9hyDhS","title":"Sorting Notes","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Notes/Sorting Notes"},{"name":"iconClass","value":"bx bx-sort-up","type":"label"}]},{"id":"_help_NRnIZmSMc5sj","title":"Printing & Exporting as PDF","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Notes/Printing & Exporting as PDF"},{"name":"iconClass","value":"bx bx-printer","type":"label"}]},{"id":"_help_CoFPLs3dRlXc","title":"Read-Only Notes","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Notes/Read-Only Notes"},{"name":"iconClass","value":"bx bx-edit-alt","type":"label"}]},{"id":"_help_0ESUbbAxVnoK","title":"Note List","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Notes/Note List"},{"name":"iconClass","value":"bx bxs-grid","type":"label"}]}]},{"id":"_help_wArbEsdSae6g","title":"Navigation","type":"book","attributes":[{"name":"iconClass","value":"bx bx-navigation","type":"label"}],"children":[{"id":"_help_kBrnXNG3Hplm","title":"Tree Concepts","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Navigation/Tree Concepts"},{"name":"iconClass","value":"bx bx-pyramid","type":"label"}]},{"id":"_help_MMiBEQljMQh2","title":"Note Navigation","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Navigation/Note Navigation"},{"name":"iconClass","value":"bx bxs-navigation","type":"label"}]},{"id":"_help_Ms1nauBra7gq","title":"Quick search","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Navigation/Quick search"},{"name":"iconClass","value":"bx bx-search-alt-2","type":"label"}]},{"id":"_help_F1r9QtzQLZqm","title":"Jump to...","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Navigation/Jump to"},{"name":"iconClass","value":"bx bx-send","type":"label"}]},{"id":"_help_eIg8jdvaoNNd","title":"Search","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Navigation/Search"},{"name":"iconClass","value":"bx bx-search-alt-2","type":"label"}]},{"id":"_help_u3YFHC9tQlpm","title":"Bookmarks","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Navigation/Bookmarks"},{"name":"iconClass","value":"bx bx-bookmarks","type":"label"}]},{"id":"_help_OR8WJ7Iz9K4U","title":"Note Hoisting","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Navigation/Note Hoisting"},{"name":"iconClass","value":"bx bxs-chevrons-up","type":"label"}]},{"id":"_help_ZjLYv08Rp3qC","title":"Quick edit","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Navigation/Quick edit"},{"name":"iconClass","value":"bx bx-edit","type":"label"}]},{"id":"_help_9sRHySam5fXb","title":"Workspaces","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Navigation/Workspaces"},{"name":"iconClass","value":"bx bx-door-open","type":"label"}]},{"id":"_help_xWtq5NUHOwql","title":"Similar Notes","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Navigation/Similar Notes"},{"name":"iconClass","value":"bx bx-bar-chart","type":"label"}]},{"id":"_help_McngOG2jbUWX","title":"Search in note","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Navigation/Search in note"},{"name":"iconClass","value":"bx bx-search-alt-2","type":"label"}]}]},{"id":"_help_A9Oc6YKKc65v","title":"Keyboard Shortcuts","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Keyboard Shortcuts"},{"name":"iconClass","value":"bx bxs-keyboard","type":"label"}]},{"id":"_help_Wy267RK4M69c","title":"Themes","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Themes"},{"name":"iconClass","value":"bx bx-palette","type":"label"}],"children":[{"id":"_help_VbjZvtUek0Ln","title":"Theme Gallery","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Themes/Theme Gallery"},{"name":"iconClass","value":"bx bx-book-reader","type":"label"}]},{"id":"_help_gOKqSJgXLcIj","title":"Icon Packs","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Themes/Icon Packs"},{"name":"iconClass","value":"bx bx-package","type":"label"}]}]},{"id":"_help_mHbBMPDPkVV5","title":"Import & Export","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Import & Export"},{"name":"iconClass","value":"bx bx-import","type":"label"}],"children":[{"id":"_help_Oau6X9rCuegd","title":"Markdown","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Import & Export/Markdown"},{"name":"iconClass","value":"bx bxl-markdown","type":"label"}],"children":[{"id":"_help_rJ9grSgoExl9","title":"Supported syntax","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Import & Export/Markdown/Supported syntax"},{"name":"iconClass","value":"bx bx-code-alt","type":"label"}]}]},{"id":"_help_syuSEKf2rUGr","title":"Evernote","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Import & Export/Evernote"},{"name":"iconClass","value":"bx bx-window-open","type":"label"}],"children":[{"id":"_help_dj3j8dG4th4l","title":"Process internal links by title","type":"doc","attributes":[{"name":"iconClass","value":"bx bx-file","type":"label"}]}]},{"id":"_help_GnhlmrATVqcH","title":"OneNote","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Import & Export/OneNote"},{"name":"iconClass","value":"bx bx-window-open","type":"label"}]}]},{"id":"_help_rC3pL2aptaRE","title":"Zen mode","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Zen mode"},{"name":"iconClass","value":"bx bxs-yin-yang","type":"label"}]}]},{"id":"_help_s3YCWHBfmYuM","title":"Quick Start","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Quick Start"},{"name":"iconClass","value":"bx bx-run","type":"label"}]},{"id":"_help_i6dbnitykE5D","title":"FAQ","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/FAQ"},{"name":"iconClass","value":"bx bx-question-mark","type":"label"}]},{"id":"_help_KSZ04uQ2D1St","title":"Note Types","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types"},{"name":"iconClass","value":"bx bx-edit","type":"label"}],"children":[{"id":"_help_iPIMuisry3hd","title":"Text","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text"},{"name":"iconClass","value":"bx bx-note","type":"label"}],"children":[{"id":"_help_NwBbFdNZ9h7O","title":"Block quotes & admonitions","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Block quotes & admonitions"},{"name":"iconClass","value":"bx bx-info-circle","type":"label"}]},{"id":"_help_oSuaNgyyKnhu","title":"Bookmarks","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Bookmarks"},{"name":"iconClass","value":"bx bx-bookmark","type":"label"}]},{"id":"_help_veGu4faJErEM","title":"Content language & Right-to-left support","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Content language & Right-to-le"},{"name":"iconClass","value":"bx bx-align-right","type":"label"}]},{"id":"_help_2x0ZAX9ePtzV","title":"Cut to subnote","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Cut to subnote"},{"name":"iconClass","value":"bx bx-cut","type":"label"}]},{"id":"_help_UYuUB1ZekNQU","title":"Developer-specific formatting","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Developer-specific formatting"},{"name":"iconClass","value":"bx bx-code-alt","type":"label"}],"children":[{"id":"_help_QxEyIjRBizuC","title":"Code blocks","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Developer-specific formatting/Code blocks"},{"name":"iconClass","value":"bx bx-code","type":"label"}]}]},{"id":"_help_AgjCISero73a","title":"Footnotes","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Footnotes"},{"name":"iconClass","value":"bx bx-bracket","type":"label"}]},{"id":"_help_nRhnJkTT8cPs","title":"Formatting toolbar","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Formatting toolbar"},{"name":"iconClass","value":"bx bx-text","type":"label"}]},{"id":"_help_Gr6xFaF6ioJ5","title":"General formatting","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/General formatting"},{"name":"iconClass","value":"bx bx-bold","type":"label"}]},{"id":"_help_AxshuNRegLAv","title":"Highlights list","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Highlights list"},{"name":"iconClass","value":"bx bx-highlight","type":"label"}]},{"id":"_help_mT0HEkOsz6i1","title":"Images","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Images"},{"name":"iconClass","value":"bx bx-image-alt","type":"label"}],"children":[{"id":"_help_0Ofbk1aSuVRu","title":"Image references","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Images/Image references"},{"name":"iconClass","value":"bx bxs-file-image","type":"label"}]}]},{"id":"_help_nBAXQFj20hS1","title":"Include Note","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Include Note"},{"name":"iconClass","value":"bx bx-file","type":"label"}]},{"id":"_help_CohkqWQC1iBv","title":"Insert buttons","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Insert buttons"},{"name":"iconClass","value":"bx bx-plus","type":"label"}]},{"id":"_help_oiVPnW8QfnvS","title":"Keyboard shortcuts","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Keyboard shortcuts"},{"name":"iconClass","value":"bx bxs-keyboard","type":"label"}]},{"id":"_help_QEAPj01N5f7w","title":"Links","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Links"},{"name":"iconClass","value":"bx bx-link-alt","type":"label"}],"children":[{"id":"_help_3IDVtesTQ8ds","title":"External links","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Links/External links"},{"name":"iconClass","value":"bx bx-link-external","type":"label"}]},{"id":"_help_hrZ1D00cLbal","title":"Internal (reference) links","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Links/Internal (reference) links"},{"name":"iconClass","value":"bx bx-link","type":"label"}]}]},{"id":"_help_S6Xx8QIWTV66","title":"Lists","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Lists"},{"name":"iconClass","value":"bx bx-list-ul","type":"label"}]},{"id":"_help_QrtTYPmdd1qq","title":"Markdown-like formatting","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Markdown-like formatting"},{"name":"iconClass","value":"bx bxl-markdown","type":"label"}]},{"id":"_help_YfYAtQBcfo5V","title":"Math Equations","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Math Equations"},{"name":"iconClass","value":"bx bx-math","type":"label"}]},{"id":"_help_dEHYtoWWi8ct","title":"Other features","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Other features"},{"name":"iconClass","value":"bx bxs-grid","type":"label"}]},{"id":"_help_gLt3vA97tMcp","title":"Premium features","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Premium features"},{"name":"iconClass","value":"bx bx-star","type":"label"}],"children":[{"id":"_help_ZlN4nump6EbW","title":"Slash Commands","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Premium features/Slash Commands"},{"name":"iconClass","value":"bx bx-menu","type":"label"}]},{"id":"_help_pwc194wlRzcH","title":"Text Snippets","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Premium features/Text Snippets"},{"name":"iconClass","value":"bx bx-align-left","type":"label"}]},{"id":"_help_5wZallV2Qo1t","title":"Format Painter","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Premium features/Format Painter"},{"name":"iconClass","value":"bx bxs-paint-roll","type":"label"}]}]},{"id":"_help_BFvAtE74rbP6","title":"Table of contents","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Table of contents"},{"name":"iconClass","value":"bx bx-heading","type":"label"}]},{"id":"_help_NdowYOC1GFKS","title":"Tables","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Tables"},{"name":"iconClass","value":"bx bx-table","type":"label"}]}]},{"id":"_help_6f9hih2hXXZk","title":"Code","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Code"},{"name":"iconClass","value":"bx bx-code","type":"label"}]},{"id":"_help_m523cpzocqaD","title":"Saved Search","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Saved Search"},{"name":"iconClass","value":"bx bx-file-find","type":"label"}]},{"id":"_help_iRwzGnHPzonm","title":"Relation Map","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Relation Map"},{"name":"iconClass","value":"bx bxs-network-chart","type":"label"}]},{"id":"_help_bdUJEHsAPYQR","title":"Note Map","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Note Map"},{"name":"iconClass","value":"bx bxs-network-chart","type":"label"}]},{"id":"_help_HcABDtFCkbFN","title":"Render Note","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Render Note"},{"name":"iconClass","value":"bx bx-extension","type":"label"}]},{"id":"_help_s1aBHPd79XYj","title":"Mermaid Diagrams","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Mermaid Diagrams"},{"name":"iconClass","value":"bx bx-selection","type":"label"}],"children":[{"id":"_help_RH6yLjjWJHof","title":"ELK layout","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Mermaid Diagrams/ELK layout"},{"name":"iconClass","value":"bx bxs-network-chart","type":"label"}]},{"id":"_help_WWgeUaBb7UfC","title":"Syntax reference","type":"webView","attributes":[{"type":"label","name":"webViewSrc","value":"https://mermaid.js.org/intro/syntax-reference.html"},{"name":"iconClass","value":"bx bx-file","type":"label"}],"enforceAttributes":true}]},{"id":"_help_grjYqerjn243","title":"Canvas","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Canvas"},{"name":"iconClass","value":"bx bx-pen","type":"label"}]},{"id":"_help_1vHRoWCEjj0L","title":"Web View","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Web View"},{"name":"iconClass","value":"bx bx-globe-alt","type":"label"}]},{"id":"_help_gBbsAeiuUxI5","title":"Mind Map","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Mind Map"},{"name":"iconClass","value":"bx bx-sitemap","type":"label"}]},{"id":"_help_W8vYD3Q1zjCR","title":"File","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/File"},{"name":"iconClass","value":"bx bx-file-blank","type":"label"}],"children":[{"id":"_help_XJGJrpu7F9sh","title":"PDFs","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/File/PDFs"},{"name":"iconClass","value":"bx bxs-file-pdf","type":"label"}]}]}]},{"id":"_help_GTwFsgaA0lCt","title":"Collections","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Collections"},{"name":"iconClass","value":"bx bx-book","type":"label"}],"children":[{"id":"_help_xWbu3jpNWapp","title":"Calendar","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Collections/Calendar"},{"name":"iconClass","value":"bx bx-calendar","type":"label"}]},{"id":"_help_2FvYrpmOXm29","title":"Table","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Collections/Table"},{"name":"iconClass","value":"bx bx-table","type":"label"}]},{"id":"_help_CtBQqbwXDx1w","title":"Kanban Board","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Collections/Kanban Board"},{"name":"iconClass","value":"bx bx-columns","type":"label"}]},{"id":"_help_81SGnPGMk7Xc","title":"Geo Map","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Collections/Geo Map"},{"name":"iconClass","value":"bx bx-map-alt","type":"label"}]},{"id":"_help_zP3PMqaG71Ct","title":"Presentation","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Collections/Presentation"},{"name":"iconClass","value":"bx bx-slideshow","type":"label"}]},{"id":"_help_8QqnMzx393bx","title":"Grid View","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Collections/Grid View"},{"name":"iconClass","value":"bx bxs-grid","type":"label"}]},{"id":"_help_mULW0Q3VojwY","title":"List View","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Collections/List View"},{"name":"iconClass","value":"bx bx-list-ul","type":"label"}]}]},{"id":"_help_BgmBlOIl72jZ","title":"Troubleshooting","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Troubleshooting"},{"name":"iconClass","value":"bx bx-bug","type":"label"}],"children":[{"id":"_help_wy8So3yZZlH9","title":"Reporting issues","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Troubleshooting/Reporting issues"},{"name":"iconClass","value":"bx bx-bug-alt","type":"label"}]},{"id":"_help_x59R8J8KV5Bp","title":"Anonymized Database","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Troubleshooting/Anonymized Database"},{"name":"iconClass","value":"bx bx-low-vision","type":"label"}]},{"id":"_help_qzNzp9LYQyPT","title":"Error logs","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Troubleshooting/Error logs"},{"name":"iconClass","value":"bx bx-comment-error","type":"label"}],"children":[{"id":"_help_bnyigUA2UK7s","title":"Backend (server) logs","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Troubleshooting/Error logs/Backend (server) logs"},{"name":"iconClass","value":"bx bx-server","type":"label"}]},{"id":"_help_9yEHzMyFirZR","title":"Frontend logs","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Troubleshooting/Error logs/Frontend logs"},{"name":"iconClass","value":"bx bx-window-alt","type":"label"}]}]},{"id":"_help_vdlYGAcpXAgc","title":"Synchronization fails with 504 Gateway Timeout","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Troubleshooting/Synchronization fails with 504"},{"name":"iconClass","value":"bx bx-error","type":"label"}]},{"id":"_help_s8alTXmpFR61","title":"Refreshing the application","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Troubleshooting/Refreshing the application"},{"name":"iconClass","value":"bx bx-refresh","type":"label"}]}]},{"id":"_help_pKK96zzmvBGf","title":"Theme development","type":"book","attributes":[{"name":"iconClass","value":"bx bx-palette","type":"label"}],"children":[{"id":"_help_7NfNr5pZpVKV","title":"Creating a custom theme","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Theme development/Creating a custom theme"},{"name":"iconClass","value":"bx bxs-color","type":"label"}]},{"id":"_help_WFGzWeUK6arS","title":"Customize the Next theme","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Theme development/Customize the Next theme"},{"name":"iconClass","value":"bx bx-news","type":"label"}]},{"id":"_help_WN5z4M8ASACJ","title":"Reference","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Theme development/Reference"},{"name":"iconClass","value":"bx bx-book-open","type":"label"}]},{"id":"_help_AlhDUqhENtH7","title":"Custom app-wide CSS","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Theme development/Custom app-wide CSS"},{"name":"iconClass","value":"bx bxs-file-css","type":"label"}]},{"id":"_help_g1mlRoU8CsqC","title":"Creating an icon pack","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Theme development/Creating an icon pack"},{"name":"iconClass","value":"bx bx-package","type":"label"}]}]},{"id":"_help_tC7s2alapj8V","title":"Advanced Usage","type":"book","attributes":[{"name":"iconClass","value":"bx bx-rocket","type":"label"}],"children":[{"id":"_help_zEY4DaJG4YT5","title":"Attributes","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Attributes"},{"name":"iconClass","value":"bx bx-list-check","type":"label"}],"children":[{"id":"_help_HI6GBBIduIgv","title":"Labels","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Attributes/Labels"},{"name":"iconClass","value":"bx bx-hash","type":"label"}]},{"id":"_help_Cq5X6iKQop6R","title":"Relations","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Attributes/Relations"},{"name":"iconClass","value":"bx bx-transfer","type":"label"}]},{"id":"_help_bwZpz2ajCEwO","title":"Attribute Inheritance","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Attributes/Attribute Inheritance"},{"name":"iconClass","value":"bx bx-list-plus","type":"label"}]},{"id":"_help_OFXdgB2nNk1F","title":"Promoted Attributes","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Attributes/Promoted Attributes"},{"name":"iconClass","value":"bx bx-table","type":"label"}]}]},{"id":"_help_KC1HB96bqqHX","title":"Templates","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Templates"},{"name":"iconClass","value":"bx bx-copy","type":"label"}]},{"id":"_help_BCkXAVs63Ttv","title":"Note Map (Link map, Tree map)","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Note Map (Link map, Tree map)"},{"name":"iconClass","value":"bx bxs-network-chart","type":"label"}]},{"id":"_help_R9pX4DGra2Vt","title":"Sharing","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Sharing"},{"name":"iconClass","value":"bx bx-share-alt","type":"label"}],"children":[{"id":"_help_Qjt68inQ2bRj","title":"Serving directly the content of a note","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Sharing/Serving directly the content o"},{"name":"iconClass","value":"bx bx-code","type":"label"}]},{"id":"_help_ycBFjKrrwE9p","title":"Exporting static HTML for web publishing","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Sharing/Exporting static HTML for web "},{"name":"iconClass","value":"bx bxs-file-html","type":"label"}]},{"id":"_help_sLIJ6f1dkJYW","title":"Reverse proxy configuration","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Sharing/Reverse proxy configuration"},{"name":"iconClass","value":"bx bx-world","type":"label"}]}]},{"id":"_help_5668rwcirq1t","title":"Advanced Showcases","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Advanced Showcases"},{"name":"iconClass","value":"bx bxs-component","type":"label"}],"children":[{"id":"_help_l0tKav7yLHGF","title":"Day Notes","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Advanced Showcases/Day Notes"},{"name":"iconClass","value":"bx bx-calendar","type":"label"}]},{"id":"_help_R7abl2fc6Mxi","title":"Weight Tracker","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Advanced Showcases/Weight Tracker"},{"name":"iconClass","value":"bx bx-line-chart","type":"label"}]},{"id":"_help_xYjQUYhpbUEW","title":"Task Manager","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Advanced Showcases/Task Manager"},{"name":"iconClass","value":"bx bx-calendar-check","type":"label"}]}]},{"id":"_help_J5Ex1ZrMbyJ6","title":"Custom Request Handler","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Custom Request Handler"},{"name":"iconClass","value":"bx bx-globe","type":"label"}]},{"id":"_help_d3fAXQ2diepH","title":"Custom Resource Providers","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Custom Resource Providers"},{"name":"iconClass","value":"bx bxs-file-plus","type":"label"}]},{"id":"_help_pgxEVkzLl1OP","title":"ETAPI (REST API)","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/ETAPI (REST API)"},{"name":"iconClass","value":"bx bx-extension","type":"label"}],"children":[{"id":"_help_9qPsTWBorUhQ","title":"API Reference","type":"webView","attributes":[{"type":"label","name":"webViewSrc","value":"https://docs.triliumnotes.org/rest-api/etapi/"},{"name":"iconClass","value":"bx bx-file","type":"label"}],"enforceAttributes":true}]},{"id":"_help_47ZrP6FNuoG8","title":"Default Note Title","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Default Note Title"},{"name":"iconClass","value":"bx bx-edit-alt","type":"label"}]},{"id":"_help_wX4HbRucYSDD","title":"Database","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Database"},{"name":"iconClass","value":"bx bx-data","type":"label"}],"children":[{"id":"_help_oyIAJ9PvvwHX","title":"Manually altering the database","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Database/Manually altering the database"},{"name":"iconClass","value":"bx bxs-edit","type":"label"}],"children":[{"id":"_help_YKWqdJhzi2VY","title":"SQL Console","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Database/Manually altering the database/SQL Console"},{"name":"iconClass","value":"bx bx-data","type":"label"}]}]},{"id":"_help_6tZeKvSHEUiB","title":"Demo Notes","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Database/Demo Notes"},{"name":"iconClass","value":"bx bx-package","type":"label"}]}]},{"id":"_help_Gzjqa934BdH4","title":"Configuration (config.ini or environment variables)","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Configuration (config.ini or e"},{"name":"iconClass","value":"bx bx-cog","type":"label"}],"children":[{"id":"_help_c5xB8m4g2IY6","title":"Trilium instance","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Configuration (config.ini or environment variables)/Trilium instance"},{"name":"iconClass","value":"bx bx-windows","type":"label"}]},{"id":"_help_LWtBjFej3wX3","title":"Cross-Origin Resource Sharing (CORS)","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Configuration (config.ini or environment variables)/Cross-Origin Resource Sharing "},{"name":"iconClass","value":"bx bx-lock","type":"label"}]}]},{"id":"_help_ivYnonVFBxbQ","title":"Bulk Actions","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Bulk Actions"},{"name":"iconClass","value":"bx bx-list-plus","type":"label"}]},{"id":"_help_4FahAwuGTAwC","title":"Note source","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Note source"},{"name":"iconClass","value":"bx bx-code","type":"label"}]},{"id":"_help_1YeN2MzFUluU","title":"Technologies used","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Technologies used"},{"name":"iconClass","value":"bx bx-pyramid","type":"label"}],"children":[{"id":"_help_MI26XDLSAlCD","title":"CKEditor","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Technologies used/CKEditor"},{"name":"iconClass","value":"bx bx-file","type":"label"}]},{"id":"_help_N4IDkixaDG9C","title":"MindElixir","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Technologies used/MindElixir"},{"name":"iconClass","value":"bx bx-sitemap","type":"label"}]},{"id":"_help_H0mM1lTxF9JI","title":"Excalidraw","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Technologies used/Excalidraw"},{"name":"iconClass","value":"bx bx-pen","type":"label"}]},{"id":"_help_MQHyy2dIFgxS","title":"Leaflet","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Technologies used/Leaflet"},{"name":"iconClass","value":"bx bx-map-alt","type":"label"}]}]},{"id":"_help_m1lbrzyKDaRB","title":"Note ID","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Note ID"},{"name":"iconClass","value":"bx bx-hash","type":"label"}]},{"id":"_help_0vTSyvhPTAOz","title":"Internal API","type":"book","attributes":[{"name":"iconClass","value":"bx bxs-component","type":"label"}],"children":[{"id":"_help_z8O2VG4ZZJD7","title":"API Reference","type":"webView","attributes":[{"type":"label","name":"webViewSrc","value":"https://docs.triliumnotes.org/rest-api/internal/"},{"name":"iconClass","value":"bx bx-file","type":"label"}],"enforceAttributes":true}]},{"id":"_help_2mUhVmZK8RF3","title":"Hidden Notes","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Hidden Notes"},{"name":"iconClass","value":"bx bx-hide","type":"label"}]},{"id":"_help_uYF7pmepw27K","title":"Metrics","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Metrics"},{"name":"iconClass","value":"bx bxs-data","type":"label"}],"children":[{"id":"_help_bOP3TB56fL1V","title":"grafana-dashboard.json","type":"doc","attributes":[{"name":"iconClass","value":"bx bx-file","type":"label"}]}]},{"id":"_help_64ZTlUPgEPtW","title":"Safe mode","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Safe mode"},{"name":"iconClass","value":"bx bxs-virus-block","type":"label"}]},{"id":"_help_HAIOFBoYIIdO","title":"Nightly release","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Nightly release"},{"name":"iconClass","value":"bx bx-moon","type":"label"}]},{"id":"_help_ZmT9ln8XJX2o","title":"Read-only database","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Read-only database"},{"name":"iconClass","value":"bx bx-book-reader","type":"label"}]}]},{"id":"_help_GBBMSlVSOIGP","title":"AI","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/AI"},{"name":"iconClass","value":"bx bx-bot","type":"label"}],"children":[{"id":"_help_WkM7gsEUyCXs","title":"Providers","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/AI/Providers"},{"name":"iconClass","value":"bx bx-select-multiple","type":"label"}],"children":[{"id":"_help_7EdTxPADv95W","title":"Ollama","type":"book","attributes":[{"name":"iconClass","value":"bx bx-message-dots","type":"label"}],"children":[{"id":"_help_vvUCN7FDkq7G","title":"Installing Ollama","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/AI/Providers/Ollama/Installing Ollama"},{"name":"iconClass","value":"bx bx-file","type":"label"}]}]},{"id":"_help_ZavFigBX9AwP","title":"OpenAI","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/AI/Providers/OpenAI"},{"name":"iconClass","value":"bx bx-message-dots","type":"label"}]},{"id":"_help_e0lkirXEiSNc","title":"Anthropic","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/AI/Providers/Anthropic"},{"name":"iconClass","value":"bx bx-message-dots","type":"label"}]}]}]},{"id":"_help_CdNpE2pqjmI6","title":"Scripting","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Scripting"},{"name":"iconClass","value":"bx bxs-file-js","type":"label"}],"children":[{"id":"_help_yIhgI5H7A2Sm","title":"Frontend Basics","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Scripting/Frontend Basics"},{"name":"iconClass","value":"bx bx-window","type":"label"}],"children":[{"id":"_help_MgibgPcfeuGz","title":"Custom Widgets","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Scripting/Frontend Basics/Custom Widgets"},{"name":"iconClass","value":"bx bxs-widget","type":"label"}],"children":[{"id":"_help_SynTBQiBsdYJ","title":"Widget Basics","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Scripting/Frontend Basics/Custom Widgets/Widget Basics"},{"name":"iconClass","value":"bx bx-file","type":"label"}]},{"id":"_help_GhurYZjh8e1V","title":"Note context aware widget","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Scripting/Frontend Basics/Custom Widgets/Note context aware widget"},{"name":"iconClass","value":"bx bx-file","type":"label"}]},{"id":"_help_M8IppdwVHSjG","title":"Right pane widget","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Scripting/Frontend Basics/Custom Widgets/Right pane widget"},{"name":"iconClass","value":"bx bx-file","type":"label"}]},{"id":"_help_YNxAqkI5Kg1M","title":"Word count widget","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Scripting/Frontend Basics/Custom Widgets/Word count widget"},{"name":"iconClass","value":"bx bx-file","type":"label"}]},{"id":"_help_VqGQnnPGnqAU","title":"CSS","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Scripting/Frontend Basics/Custom Widgets/CSS"},{"name":"iconClass","value":"bx bx-file","type":"label"}]},{"id":"_help_gMkgcLJ6jBkg","title":"Troubleshooting","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Scripting/Frontend Basics/Custom Widgets/Troubleshooting"},{"name":"iconClass","value":"bx bx-file","type":"label"}]}]},{"id":"_help_es8OU2GuguFU","title":"Examples","type":"book","attributes":[{"name":"iconClass","value":"bx bx-code-alt","type":"label"}],"children":[{"id":"_help_TjLYAo3JMO8X","title":"\"New Task\" launcher button","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Scripting/Frontend Basics/Examples/New Task launcher button"},{"name":"iconClass","value":"bx bx-task","type":"label"}]},{"id":"_help_7kZPMD0uFwkH","title":"Downloading responses from Google Forms","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Scripting/Frontend Basics/Examples/Downloading responses from Goo"},{"name":"iconClass","value":"bx bx-file","type":"label"}]},{"id":"_help_DL92EjAaXT26","title":"Using promoted attributes to configure scripts","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Scripting/Frontend Basics/Examples/Using promoted attributes to c"},{"name":"iconClass","value":"bx bx-file","type":"label"}]}]},{"id":"_help_4Gn3psZKsfSm","title":"Launch Bar Widgets","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Scripting/Frontend Basics/Launch Bar Widgets"},{"name":"iconClass","value":"bx bx-dock-left","type":"label"}],"children":[{"id":"_help_IPArqVfDQ4We","title":"Note Title Widget","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Scripting/Frontend Basics/Launch Bar Widgets/Note Title Widget"},{"name":"iconClass","value":"bx bx-file","type":"label"}]},{"id":"_help_gcI7RPbaNSh3","title":"Analog Watch","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Scripting/Frontend Basics/Launch Bar Widgets/Analog Watch"},{"name":"iconClass","value":"bx bx-file","type":"label"}]}]},{"id":"_help_KLsqhjaqh1QW","title":"Preact","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Scripting/Frontend Basics/Preact"},{"name":"iconClass","value":"bx bxl-react","type":"label"}],"children":[{"id":"_help_Bqde6BvPo05g","title":"Component libraries","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Scripting/Frontend Basics/Preact/Component libraries"},{"name":"iconClass","value":"bx bxs-component","type":"label"}]},{"id":"_help_ykYtbM9k3a7B","title":"Hooks","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Scripting/Frontend Basics/Preact/Hooks"},{"name":"iconClass","value":"bx bx-question-mark","type":"label"}]},{"id":"_help_Sg9GrCtyftZf","title":"CSS","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Scripting/Frontend Basics/Preact/CSS"},{"name":"iconClass","value":"bx bxs-file-css","type":"label"}]},{"id":"_help_RSssb9S3xgSr","title":"Built-in components","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Scripting/Frontend Basics/Preact/Built-in components"},{"name":"iconClass","value":"bx bxs-component","type":"label"}],"children":[{"id":"_help_i9B4IW7b6V6z","title":"Widget showcase","type":"doc","attributes":[{"name":"iconClass","value":"bx bx-file","type":"label"}]}]}]}]},{"id":"_help_SPirpZypehBG","title":"Backend scripts","type":"book","attributes":[{"name":"iconClass","value":"bx bx-server","type":"label"}],"children":[{"id":"_help_fZ2IGYFXjkEy","title":"Server-side imports","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Scripting/Backend scripts/Server-side imports"},{"name":"iconClass","value":"bx bx-file","type":"label"}]},{"id":"_help_GPERMystNGTB","title":"Events","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Scripting/Backend scripts/Events"},{"name":"iconClass","value":"bx bx-rss","type":"label"}]}]},{"id":"_help_wqXwKJl6VpNk","title":"Common concepts","type":"book","attributes":[{"name":"iconClass","value":"bx bxl-nodejs","type":"label"}],"children":[{"id":"_help_hA834UaHhSNn","title":"Script bundles","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Scripting/Common concepts/Script bundles"},{"name":"iconClass","value":"bx bx-package","type":"label"}]}]},{"id":"_help_GLks18SNjxmC","title":"Script API","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Scripting/Script API"},{"name":"iconClass","value":"bx bx-code-curly","type":"label"}],"children":[{"id":"_help_Q2z6av6JZVWm","title":"Frontend API","type":"webView","attributes":[{"type":"label","name":"webViewSrc","value":"https://docs.triliumnotes.org/script-api/frontend"},{"name":"iconClass","value":"bx bx-folder","type":"label"}],"enforceAttributes":true,"children":[{"id":"_help_habiZ3HU8Kw8","title":"FNote","type":"webView","attributes":[{"type":"label","name":"webViewSrc","value":"https://docs.triliumnotes.org/script-api/frontend/interfaces/FNote.html"},{"name":"iconClass","value":"bx bx-file","type":"label"}],"enforceAttributes":true}]},{"id":"_help_MEtfsqa5VwNi","title":"Backend API","type":"webView","attributes":[{"type":"label","name":"webViewSrc","value":"https://docs.triliumnotes.org/script-api/backend"},{"name":"iconClass","value":"bx bx-file","type":"label"}],"enforceAttributes":true},{"id":"_help_ApVHZ8JY5ofC","title":"Day.js","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Scripting/Script API/Day.js"},{"name":"iconClass","value":"bx bx-calendar","type":"label"}]}]},{"id":"_help_vElnKeDNPSVl","title":"Logging","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Scripting/Logging"},{"name":"iconClass","value":"bx bx-terminal","type":"label"}]},{"id":"_help_cNpC0ITcfX0N","title":"Breaking changes","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Scripting/Breaking changes"},{"name":"iconClass","value":"bx bx-up-arrow-alt","type":"label"}]}]},{"id":"_help_Fm0j45KqyHpU","title":"Miscellaneous","type":"book","attributes":[{"name":"iconClass","value":"bx bx-info-circle","type":"label"}],"children":[{"id":"_help_WFbFXrgnDyyU","title":"Privacy Policy","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Miscellaneous/Privacy Policy"},{"name":"iconClass","value":"bx bx-file","type":"label"}]},{"id":"_help_NcsmUYZRWEW4","title":"Patterns of personal knowledge","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Miscellaneous/Patterns of personal knowledge"},{"name":"iconClass","value":"bx bx-file","type":"label"}]}]}] \ No newline at end of file diff --git a/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Advanced Usage/Database/Manually altering the database/SQL Console.html b/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Advanced Usage/Database/Manually altering the database/SQL Console.html index 3549a96e9b..0a93b3b89a 100644 --- a/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Advanced Usage/Database/Manually altering the database/SQL Console.html +++ b/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Advanced Usage/Database/Manually altering the database/SQL Console.html @@ -1,5 +1,5 @@ <p>The SQL Console is Trilium's built-in database editor.</p> -<p>It can be accessed by going to the <a class="reference-link" href="#root/pOsGYCXsbNQG/gh7bpGYxajRS/Vc8PjrjAGuOp/_help_x3i7MxGccDuM">Global menu</a> → +<p>It can be accessed by going to the <a class="reference-link" href="#root/_help_x3i7MxGccDuM">Global menu</a> → Advanced → Open SQL Console.</p> <p> <img src="SQL Console_image.png"> @@ -11,44 +11,33 @@ <li>Only one SQL statement can be run at once.</li> <li>To run the statement, press the <em>Execute</em> icon.</li> <li>For queries that return a result, the data will displayed in a table.</li> - <li - >For statements (e.g. <code spellcheck="false">INSERT</code>, <code spellcheck="false">UPDATE</code>), + <li>For statements (e.g. <code spellcheck="false">INSERT</code>, <code spellcheck="false">UPDATE</code>), the number of affected rows is displayed.</li> </ul> <figure class="image"> <img style="aspect-ratio:1124/571;" src="2_SQL Console_image.png" width="1124" height="571"> </figure> + <h3>Interacting with the table</h3> <p>After executing a query, a table with the results will be displayed:</p> <ul> - <li> - <p>Clicking on a column allows sorting ascending or descending.</p> - </li> - <li> - <p>Underneath each column there is an input field which allows filtering - by text.</p> - </li> - <li> - <p>Press <kbd>Ctrl</kbd>+<kbd>C</kbd> to copy the current cell to clipboard.</p> - </li> - <li> - <p>Multiple cells can be selected by dragging or by holding <kbd>Shift</kbd> + - arrow keys</p> - </li> - <li> - <p>Results are paginated for performance reasons. The controls at the bottom - of the table can be used to navigate through pages.</p> - </li> + <li>Clicking on a column allows sorting ascending or descending.</li> + <li>Underneath each column there is an input field which allows filtering + by text.</li> + <li>Press <kbd>Ctrl</kbd>+<kbd>C</kbd> to copy the current cell to clipboard.</li> + <li>Multiple cells can be selected by dragging or by holding <kbd>Shift</kbd> + + arrow keys</li> + <li>Results are paginated for performance reasons. The controls at the bottom + of the table can be used to navigate through pages.</li> </ul> <h3>Saved SQL console</h3> <p>SQL queries or commands can be saved into a dedicated note.</p> <p>To do so, simply write the query and press the <img src="1_SQL Console_image.png">button. Once saved, the note will appear in <a class="reference-link" - href="#root/pOsGYCXsbNQG/tC7s2alapj8V/5668rwcirq1t/_help_l0tKav7yLHGF">Day Notes</a>.</p> + href="#root/_help_l0tKav7yLHGF">Day Notes</a>.</p> <p>The note can be locked for editing by pressing the <em>Lock</em> button in the note actions section near the title bar (on the <a class="reference-link" - href="#root/pOsGYCXsbNQG/gh7bpGYxajRS/Vc8PjrjAGuOp/_help_IjZS7iK5EXtb">New Layout</a>, - or in the <a class="reference-link" href="#root/pOsGYCXsbNQG/gh7bpGYxajRS/Vc8PjrjAGuOp/_help_XpOYSgsLkTJy">Floating buttons</a> area - if using the old layout). When editing is locked, the SQL statement is - hidden from view.</p> \ No newline at end of file + href="#root/_help_IjZS7iK5EXtb">New Layout</a>, or in the <a class="reference-link" + href="#root/_help_XpOYSgsLkTJy">Floating buttons</a> area if using the old + layout). When editing is locked, the SQL statement is hidden from view.</p> \ No newline at end of file diff --git a/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Scripting/Breaking changes.html b/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Scripting/Breaking changes.html new file mode 100644 index 0000000000..2acf6aa197 --- /dev/null +++ b/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Scripting/Breaking changes.html @@ -0,0 +1,27 @@ +<h2>v0.102.0: Upgrade to jQuery 4.0.0</h2> +<p>jQuery 4 removes legacy browser support (such as IE11 support), but it + also removes some APIs that are considered deprecated such as:</p> +<blockquote> + <p><code spellcheck="false">jQuery.isArray</code>, <code spellcheck="false">jQuery.parseJSON</code>, + <code + spellcheck="false">jQuery.trim</code>, <code spellcheck="false">jQuery.type</code>, <code spellcheck="false">jQuery.now</code>, + <code + spellcheck="false">jQuery.isNumeric</code>, <code spellcheck="false">jQuery.isFunction</code>, + <code + spellcheck="false">jQuery.isWindow</code>, <code spellcheck="false">jQuery.camelCase</code>, + <code + spellcheck="false">jQuery.nodeName</code>, <code spellcheck="false">jQuery.cssNumber</code>, + <code + spellcheck="false">jQuery.cssProps</code>, and <code spellcheck="false">jQuery.fx.interval</code>.</p> + <p>Use native equivalents like <code spellcheck="false">Array.isArray()</code>, + <code + spellcheck="false">JSON.parse()</code>, <code spellcheck="false">String.prototype.trim()</code>, + and <code spellcheck="false">Date.now()</code> instead.</p> +</blockquote> +<p>This may affect custom scripts if they (or the custom jQuery libraries + used) depend on the deprecated APIs.</p> +<p>Note that Trilium polyfills <code spellcheck="false">jQuery.isArray</code>, + <code + spellcheck="false">isFunction</code>and <code spellcheck="false">isPlainObject</code> because + they were required by one of our dependencies (the autocomplete).</p> +<p>For more information, consult <a href="https://blog.jquery.com/2026/01/17/jquery-4-0-0/">the official blog post</a>.</p> \ No newline at end of file diff --git a/docs/Developer Guide/Developer Guide/Documentation.md b/docs/Developer Guide/Developer Guide/Documentation.md index 35f406a737..ea5d135a22 100644 --- a/docs/Developer Guide/Developer Guide/Documentation.md +++ b/docs/Developer Guide/Developer Guide/Documentation.md @@ -1,5 +1,5 @@ # Documentation -There are multiple types of documentation for Trilium:<img class="image-style-align-right" src="api/images/caCZ9hC8HqQa/Documentation_image.png" width="205" height="162"> +There are multiple types of documentation for Trilium:<img class="image-style-align-right" src="api/images/TzNwfb67k5Dh/Documentation_image.png" width="205" height="162"> * The _User Guide_ represents the user-facing documentation. This documentation can be browsed by users directly from within Trilium, by pressing <kbd>F1</kbd>. * The _Developer's Guide_ represents a set of Markdown documents that present the internals of Trilium, for developers. diff --git a/docs/User Guide/!!!meta.json b/docs/User Guide/!!!meta.json index 6b0711f168..55cfaa0fab 100644 --- a/docs/User Guide/!!!meta.json +++ b/docs/User Guide/!!!meta.json @@ -14200,6 +14200,34 @@ "type": "text", "mime": "text/html", "attributes": [ + { + "type": "relation", + "name": "internalLink", + "value": "x3i7MxGccDuM", + "isInheritable": false, + "position": 10 + }, + { + "type": "relation", + "name": "internalLink", + "value": "l0tKav7yLHGF", + "isInheritable": false, + "position": 20 + }, + { + "type": "relation", + "name": "internalLink", + "value": "IjZS7iK5EXtb", + "isInheritable": false, + "position": 30 + }, + { + "type": "relation", + "name": "internalLink", + "value": "XpOYSgsLkTJy", + "isInheritable": false, + "position": 40 + }, { "type": "label", "name": "iconClass", @@ -14213,34 +14241,6 @@ "value": "sql-console", "isInheritable": false, "position": 40 - }, - { - "type": "relation", - "name": "internalLink", - "value": "l0tKav7yLHGF", - "isInheritable": false, - "position": 50 - }, - { - "type": "relation", - "name": "internalLink", - "value": "x3i7MxGccDuM", - "isInheritable": false, - "position": 60 - }, - { - "type": "relation", - "name": "internalLink", - "value": "IjZS7iK5EXtb", - "isInheritable": false, - "position": 70 - }, - { - "type": "relation", - "name": "internalLink", - "value": "XpOYSgsLkTJy", - "isInheritable": false, - "position": 80 } ], "format": "markdown", @@ -17586,6 +17586,40 @@ "dataFileName": "Logging_image.png" } ] + }, + { + "isClone": false, + "noteId": "cNpC0ITcfX0N", + "notePath": [ + "pOsGYCXsbNQG", + "CdNpE2pqjmI6", + "cNpC0ITcfX0N" + ], + "title": "Breaking changes", + "notePosition": 130, + "prefix": null, + "isExpanded": false, + "type": "text", + "mime": "text/html", + "attributes": [ + { + "type": "label", + "name": "iconClass", + "value": "bx bx-up-arrow-alt", + "isInheritable": false, + "position": 30 + }, + { + "type": "label", + "name": "shareAlias", + "value": "breaking-changes", + "isInheritable": false, + "position": 40 + } + ], + "format": "markdown", + "dataFileName": "Breaking changes.md", + "attachments": [] } ] }, diff --git a/docs/User Guide/User Guide/Scripting/Breaking changes.md b/docs/User Guide/User Guide/Scripting/Breaking changes.md new file mode 100644 index 0000000000..8b887aab99 --- /dev/null +++ b/docs/User Guide/User Guide/Scripting/Breaking changes.md @@ -0,0 +1,14 @@ +# Breaking changes +## v0.102.0: Upgrade to jQuery 4.0.0 + +jQuery 4 removes legacy browser support (such as IE11 support), but it also removes some APIs that are considered deprecated such as: + +> `jQuery.isArray`, `jQuery.parseJSON`, `jQuery.trim`, `jQuery.type`, `jQuery.now`, `jQuery.isNumeric`, `jQuery.isFunction`, `jQuery.isWindow`, `jQuery.camelCase`, `jQuery.nodeName`, `jQuery.cssNumber`, `jQuery.cssProps`, and `jQuery.fx.interval`. +> +> Use native equivalents like `Array.isArray()`, `JSON.parse()`, `String.prototype.trim()`, and `Date.now()` instead. + +This may affect custom scripts if they (or the custom jQuery libraries used) depend on the deprecated APIs. + +Note that Trilium polyfills `jQuery.isArray`, `isFunction` and `isPlainObject` because they were required by one of our dependencies (the autocomplete). + +For more information, consult [the official blog post](https://blog.jquery.com/2026/01/17/jquery-4-0-0/). \ No newline at end of file From e5bc416b466f5936dca24c94f8d71bde532d9c4a Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 20 Jan 2026 01:14:50 +0000 Subject: [PATCH 149/353] chore(deps): update dependency vite-plugin-static-copy to v3.1.5 --- apps/client/package.json | 2 +- pnpm-lock.yaml | 18 ++++++------------ 2 files changed, 7 insertions(+), 13 deletions(-) diff --git a/apps/client/package.json b/apps/client/package.json index 1e336f6c37..1eb7e79009 100644 --- a/apps/client/package.json +++ b/apps/client/package.json @@ -81,6 +81,6 @@ "happy-dom": "20.3.3", "lightningcss": "1.30.2", "script-loader": "0.7.2", - "vite-plugin-static-copy": "3.1.4" + "vite-plugin-static-copy": "3.1.5" } } \ No newline at end of file diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index bf90c7f1e6..ec0c7034aa 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -354,8 +354,8 @@ importers: specifier: 0.7.2 version: 0.7.2 vite-plugin-static-copy: - specifier: 3.1.4 - version: 3.1.4(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1)) + specifier: 3.1.5 + version: 3.1.5(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1)) apps/db-compare: dependencies: @@ -10962,10 +10962,6 @@ packages: resolution: {integrity: sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==} engines: {node: '>=10'} - p-map@7.0.3: - resolution: {integrity: sha512-VkndIv2fIB99swvQoA65bm+fsmt6UNdGeIB0oxBs+WhAhdh08QA04JXpI7rbB9r08/nkbysKoya9rtDERYOYMA==} - engines: {node: '>=18'} - p-map@7.0.4: resolution: {integrity: sha512-tkAQEw8ysMzmkhgw8k+1U/iPhWNhykKnSk4Rd5zLoPJCuJaGRPo6YposrZgaxHKzDHdDWWZvE/Sk7hsL2X/CpQ==} engines: {node: '>=18'} @@ -13864,8 +13860,8 @@ packages: vite: optional: true - vite-plugin-static-copy@3.1.4: - resolution: {integrity: sha512-iCmr4GSw4eSnaB+G8zc2f4dxSuDjbkjwpuBLLGvQYR9IW7rnDzftnUjOH5p4RYR+d4GsiBqXRvzuFhs5bnzVyw==} + vite-plugin-static-copy@3.1.5: + resolution: {integrity: sha512-9pbZn9Vb+uUNg/Tr/f2MXmGvfSfLeWjscS4zTA3v+sWqKN+AjJ/ipTFwaqdopJkNkxG5DfgYrZXD80ljbNDxbg==} engines: {node: ^18.0.0 || >=20.0.0} peerDependencies: vite: ^5.0.0 || ^6.0.0 || ^7.0.0 @@ -27150,8 +27146,6 @@ snapshots: dependencies: aggregate-error: 3.1.0 - p-map@7.0.3: {} - p-map@7.0.4: {} p-queue@6.6.2: @@ -30503,10 +30497,10 @@ snapshots: - rollup - supports-color - vite-plugin-static-copy@3.1.4(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1)): + vite-plugin-static-copy@3.1.5(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1)): dependencies: chokidar: 3.6.0 - p-map: 7.0.3 + p-map: 7.0.4 picocolors: 1.1.1 tinyglobby: 0.2.15 vite: 7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) From c043788b09901bfd293e04a8afc5b94e8cb73bb5 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 20 Jan 2026 01:15:00 +0000 Subject: [PATCH 150/353] chore(deps): update pnpm to v10.28.1 --- apps/build-docs/package.json | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/build-docs/package.json b/apps/build-docs/package.json index 80cdef54f3..1ab4c6bc56 100644 --- a/apps/build-docs/package.json +++ b/apps/build-docs/package.json @@ -9,7 +9,7 @@ "keywords": [], "author": "Elian Doran <contact@eliandoran.me>", "license": "AGPL-3.0-only", - "packageManager": "pnpm@10.28.0", + "packageManager": "pnpm@10.28.1", "devDependencies": { "@redocly/cli": "2.14.5", "archiver": "7.0.1", diff --git a/package.json b/package.json index 5d046f92ad..1bd68cc676 100644 --- a/package.json +++ b/package.json @@ -93,7 +93,7 @@ "url": "https://github.com/TriliumNext/Trilium/issues" }, "homepage": "https://triliumnotes.org", - "packageManager": "pnpm@10.28.0", + "packageManager": "pnpm@10.28.1", "pnpm": { "patchedDependencies": { "@ckeditor/ckeditor5-mention": "patches/@ckeditor__ckeditor5-mention.patch", From dad9578b83563463851cbde9f63ef539bfda4b16 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 20 Jan 2026 01:16:12 +0000 Subject: [PATCH 151/353] chore(deps): update dependency turnish to v1.8.0 --- apps/server/package.json | 2 +- pnpm-lock.yaml | 12 +++++------- 2 files changed, 6 insertions(+), 8 deletions(-) diff --git a/apps/server/package.json b/apps/server/package.json index 5c46b0c6fe..3c8f269935 100644 --- a/apps/server/package.json +++ b/apps/server/package.json @@ -126,7 +126,7 @@ "swagger-jsdoc": "6.2.8", "time2fa": "1.4.2", "tmp": "0.2.5", - "turnish": "1.7.1", + "turnish": "1.8.0", "unescape": "1.0.1", "vite": "7.3.1", "ws": "8.19.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index bf90c7f1e6..910de3c994 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -793,8 +793,8 @@ importers: specifier: 0.2.5 version: 0.2.5 turnish: - specifier: 1.7.1 - version: 1.7.1 + specifier: 1.8.0 + version: 1.8.0 unescape: specifier: 1.0.1 version: 1.0.1 @@ -13483,8 +13483,8 @@ packages: turndown@7.2.2: resolution: {integrity: sha512-1F7db8BiExOKxjSMU2b7if62D/XOyQyZbPKq/nUwopfgnHlqXHqQ0lvfUTeUIr1lZJzOPFn43dODyMSIfvWRKQ==} - turnish@1.7.1: - resolution: {integrity: sha512-NgyY7pIDABjKyg2isRgZyFPav6tOyvmqpTx3HROsKrOaE3JccP4C1P2IhAtkAZ8DkQb/O1R7HOFAkxY8uaJmcQ==} + turnish@1.8.0: + resolution: {integrity: sha512-r1K94mbU5FHwvHKsPrTejuxoQTyKrddeWNzxS53Dnu+33DJLZJzfAHmo7GhdxBvhrHYCfv/diYvpq2VCGSGa+w==} type-check@0.4.0: resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} @@ -15311,8 +15311,6 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.4.0 '@ckeditor/ckeditor5-watchdog': 47.4.0 es-toolkit: 1.39.5 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-dev-build-tools@54.3.0(@swc/helpers@0.5.17)(tslib@2.8.1)(typescript@5.9.3)': dependencies: @@ -30130,7 +30128,7 @@ snapshots: dependencies: '@mixmark-io/domino': 2.2.0 - turnish@1.7.1: + turnish@1.8.0: dependencies: '@adobe/css-tools': 4.4.4 '@mixmark-io/domino': 2.2.0 From 15396640268076766d4e81952c1c59ae8127203e Mon Sep 17 00:00:00 2001 From: Elian Doran <contact@eliandoran.me> Date: Tue, 20 Jan 2026 15:16:32 +0200 Subject: [PATCH 152/353] Revert "test(client): fix broken tests after change in shortcut behaviour" This reverts commit e33950e0009dd20c27851c6ca21961c8f9d924da. --- apps/client/src/services/shortcuts.spec.ts | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/apps/client/src/services/shortcuts.spec.ts b/apps/client/src/services/shortcuts.spec.ts index ed17dcd391..f2170da30d 100644 --- a/apps/client/src/services/shortcuts.spec.ts +++ b/apps/client/src/services/shortcuts.spec.ts @@ -1,6 +1,6 @@ import { afterEach, beforeEach, describe, expect, it, vi } from "vitest"; -import shortcuts, { isIMEComposing,keyMatches, matchesShortcut } from "./shortcuts.js"; +import shortcuts, { isIMEComposing, keyMatches, matchesShortcut } from "./shortcuts.js"; // Mock utils module vi.mock("./utils.js", () => ({ @@ -249,7 +249,7 @@ describe("shortcuts", () => { const handler = vi.fn(); shortcuts.bindGlobalShortcut("ctrl+a", handler, "test-namespace"); - expect(mockElement.addEventListener).toHaveBeenCalledWith("keydown", expect.any(Function), true); + expect(mockElement.addEventListener).toHaveBeenCalledWith("keydown", expect.any(Function)); }); it("should not bind shortcuts when handler is null", () => { @@ -280,7 +280,7 @@ describe("shortcuts", () => { const handler = vi.fn(); shortcuts.bindElShortcut(mockJQueryEl, "ctrl+a", handler, "test-namespace"); - expect(mockEl.addEventListener).toHaveBeenCalledWith("keydown", expect.any(Function), true); + expect(mockEl.addEventListener).toHaveBeenCalledWith("keydown", expect.any(Function)); }); it("should fall back to document when element is empty", () => { @@ -290,7 +290,7 @@ describe("shortcuts", () => { const handler = vi.fn(); shortcuts.bindElShortcut(emptyJQuery, "ctrl+a", handler, "test-namespace"); - expect(mockElement.addEventListener).toHaveBeenCalledWith("keydown", expect.any(Function), true); + expect(mockElement.addEventListener).toHaveBeenCalledWith("keydown", expect.any(Function)); }); }); @@ -301,7 +301,7 @@ describe("shortcuts", () => { shortcuts.removeGlobalShortcut("test-namespace"); - expect(mockElement.removeEventListener).toHaveBeenCalledWith("keydown", expect.any(Function), true); + expect(mockElement.removeEventListener).toHaveBeenCalledWith("keydown", expect.any(Function)); }); }); From f96ed0af2660b97b0c69c11595f004b7466ca409 Mon Sep 17 00:00:00 2001 From: Elian Doran <contact@eliandoran.me> Date: Tue, 20 Jan 2026 15:16:51 +0200 Subject: [PATCH 153/353] Revert "fix(shortcuts): triggering in bubbling phase, not capturing" This reverts commit 711828d6b485770e3e88ddbb0cf53fe781912bf8. --- apps/client/src/services/shortcuts.ts | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/apps/client/src/services/shortcuts.ts b/apps/client/src/services/shortcuts.ts index 62c6b21ff4..63db45302d 100644 --- a/apps/client/src/services/shortcuts.ts +++ b/apps/client/src/services/shortcuts.ts @@ -110,9 +110,8 @@ function bindElShortcut($el: JQuery<ElementType | Element>, keyboardShortcut: st } }; - // Add the event listener in capture phase to intercept events before they reach - // child elements like CodeMirror - element.addEventListener('keydown', listener, true); + // Add the event listener + element.addEventListener('keydown', listener); // Store the binding for later cleanup const binding: ShortcutBinding = { @@ -139,16 +138,15 @@ export function removeIndividualBinding(binding: ShortcutBinding) { if (activeBindingsInNamespace) { activeBindings.set(key, activeBindingsInNamespace.filter(aBinding => aBinding.handler === binding.handler)); } - // Remove listener with capture phase to match how it was added - binding.element.removeEventListener("keydown", binding.listener, true); + binding.element.removeEventListener("keydown", binding.listener); } function removeNamespaceBindings(namespace: string) { const bindings = activeBindings.get(namespace); if (bindings) { + // Remove all event listeners for this namespace bindings.forEach(binding => { - // Remove listener with capture phase to match how it was added - binding.element.removeEventListener('keydown', binding.listener, true); + binding.element.removeEventListener('keydown', binding.listener); }); activeBindings.delete(namespace); } From f83d95136dbbc1fc348a55b75fc37c31344c47b4 Mon Sep 17 00:00:00 2001 From: Elian Doran <contact@eliandoran.me> Date: Tue, 20 Jan 2026 16:11:40 +0200 Subject: [PATCH 154/353] fix(codemirror): ctrl+enter generates newline --- packages/codemirror/src/index.ts | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/packages/codemirror/src/index.ts b/packages/codemirror/src/index.ts index c86d37b12d..f77342455d 100644 --- a/packages/codemirror/src/index.ts +++ b/packages/codemirror/src/index.ts @@ -1,5 +1,5 @@ import { defaultKeymap, history, historyKeymap } from "@codemirror/commands"; -import { EditorView, highlightActiveLine, keymap, lineNumbers, placeholder, ViewPlugin, ViewUpdate, type EditorViewConfig } from "@codemirror/view"; +import { EditorView, highlightActiveLine, keymap, lineNumbers, placeholder, ViewPlugin, ViewUpdate, type EditorViewConfig, KeyBinding } from "@codemirror/view"; import { defaultHighlightStyle, StreamLanguage, syntaxHighlighting, indentUnit, bracketMatching, foldGutter, codeFolding } from "@codemirror/language"; import { Compartment, EditorSelection, EditorState, type Extension } from "@codemirror/state"; import { highlightSelectionMatches } from "@codemirror/search"; @@ -12,6 +12,17 @@ import { createSearchHighlighter, SearchHighlighter, searchMatchHighlightTheme } export { default as ColorThemes, type ThemeDefinition, getThemeById } from "./color_themes.js"; +// Custom keymap to prevent Ctrl+Enter from inserting a newline +// This allows the parent application to handle the shortcut (e.g., for "Run Active Note") +const preventCtrlEnterKeymap: readonly KeyBinding[] = [ + { + key: "Ctrl-Enter", + mac: "Cmd-Enter", + run: () => true, // Return true to mark event as handled, preventing default newline insertion + preventDefault: true + } +]; + type ContentChangedListener = () => void; export interface EditorConfig { @@ -59,6 +70,7 @@ export default class CodeMirror extends EditorView { lineNumbers(), indentUnit.of(" ".repeat(4)), keymap.of([ + ...preventCtrlEnterKeymap, ...defaultKeymap, ...historyKeymap, ...smartIndentWithTab From 60c789b6c7ffb3e93bb21f2b83f181164b66d530 Mon Sep 17 00:00:00 2001 From: Elian Doran <contact@eliandoran.me> Date: Tue, 20 Jan 2026 16:33:46 +0200 Subject: [PATCH 155/353] fix(client): production affected by cache of index JS --- apps/client/vite.config.mts | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/apps/client/vite.config.mts b/apps/client/vite.config.mts index c5c411a333..b76595d646 100644 --- a/apps/client/vite.config.mts +++ b/apps/client/vite.config.mts @@ -93,7 +93,15 @@ export default defineConfig(() => ({ print: join(__dirname, "src", "print.tsx") }, output: { - entryFileNames: "src/[name].js", + entryFileNames: (chunk) => { + // We enforce a hash in the main index file to avoid caching issues, this only works because we have the HTML entry point. + if (chunk.name === "index") { + return "src/[name]-[hash].js"; + } + + // For EJS-rendered pages (e.g. login) we need to have a stable name. + return "src/[name].js"; + }, chunkFileNames: "src/[name]-[hash].js", assetFileNames: "src/[name]-[hash].[ext]", manualChunks: { From 798efbc22fe3740231fbe1cb6380a84c6af286c7 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 21 Jan 2026 01:33:18 +0000 Subject: [PATCH 156/353] chore(deps): update dependency @smithy/middleware-retry to v4.4.26 --- packages/ckeditor5/package.json | 2 +- pnpm-lock.yaml | 80 +++++++++++++++++---------------- 2 files changed, 42 insertions(+), 40 deletions(-) diff --git a/packages/ckeditor5/package.json b/packages/ckeditor5/package.json index 6ccb19bf26..165787584d 100644 --- a/packages/ckeditor5/package.json +++ b/packages/ckeditor5/package.json @@ -16,7 +16,7 @@ "ckeditor5-premium-features": "47.4.0" }, "devDependencies": { - "@smithy/middleware-retry": "4.4.24", + "@smithy/middleware-retry": "4.4.26", "@types/jquery": "3.5.33" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 24521f0d5e..5a7cad1a5c 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -888,8 +888,8 @@ importers: version: 47.4.0(bufferutil@4.0.9)(ckeditor5@47.4.0)(utf-8-validate@6.0.5) devDependencies: '@smithy/middleware-retry': - specifier: 4.4.24 - version: 4.4.24 + specifier: 4.4.26 + version: 4.4.26 '@types/jquery': specifier: 3.5.33 version: 3.5.33 @@ -4800,14 +4800,14 @@ packages: resolution: {integrity: sha512-prmU+rDddxHOH0oNcwemL+SwnzcG65sBF2yXRO7aeXIn/xTlq2pX7JLVbkBnVLowHLg4/OL4+jBmv9hVrVGS+w==} engines: {node: '>=18.0.0'} - '@smithy/core@3.20.6': - resolution: {integrity: sha512-BpAffW1mIyRZongoKBbh3RgHG+JDHJek/8hjA/9LnPunM+ejorO6axkxCgwxCe4K//g/JdPeR9vROHDYr/hfnQ==} - engines: {node: '>=18.0.0'} - '@smithy/core@3.20.7': resolution: {integrity: sha512-aO7jmh3CtrmPsIJxUwYIzI5WVlMK8BMCPQ4D4nTzqTqBhbzvxHNzBMGcEg13yg/z9R2Qsz49NUFl0F0lVbTVFw==} engines: {node: '>=18.0.0'} + '@smithy/core@3.21.0': + resolution: {integrity: sha512-bg2TfzgsERyETAxc/Ims/eJX8eAnIeTi4r4LHpMpfF/2NyO6RsWis0rjKcCPaGksljmOb23BZRiCeT/3NvwkXw==} + engines: {node: '>=18.0.0'} + '@smithy/credential-provider-imds@4.0.6': resolution: {integrity: sha512-hKMWcANhUiNbCJouYkZ9V3+/Qf9pteR1dnwgdyzR09R4ODEYx8BbUysHwRSyex4rZ9zapddZhLFTnT4ZijR4pw==} engines: {node: '>=18.0.0'} @@ -4856,16 +4856,16 @@ packages: resolution: {integrity: sha512-F7gDyfI2BB1Kc+4M6rpuOLne5LOcEknH1n6UQB69qv+HucXBR1rkzXBnQTB2q46sFy1PM/zuSJOB532yc8bg3w==} engines: {node: '>=18.0.0'} - '@smithy/middleware-endpoint@4.4.7': - resolution: {integrity: sha512-SCmhUG1UwtnEhF5Sxd8qk7bJwkj1BpFzFlHkXqKCEmDPLrRjJyTGM0EhqT7XBtDaDJjCfjRJQodgZcKDR843qg==} + '@smithy/middleware-endpoint@4.4.10': + resolution: {integrity: sha512-kwWpNltpxrvPabnjEFvwSmA+66l6s2ReCvgVSzW/z92LU4T28fTdgZ18IdYRYOrisu2NMQ0jUndRScbO65A/zg==} engines: {node: '>=18.0.0'} '@smithy/middleware-endpoint@4.4.8': resolution: {integrity: sha512-TV44qwB/T0OMMzjIuI+JeS0ort3bvlPJ8XIH0MSlGADraXpZqmyND27ueuAL3E14optleADWqtd7dUgc2w+qhQ==} engines: {node: '>=18.0.0'} - '@smithy/middleware-retry@4.4.24': - resolution: {integrity: sha512-yiUY1UvnbUFfP5izoKLtfxDSTRv724YRRwyiC/5HYY6vdsVDcDOXKSXmkJl/Hovcxt5r+8tZEUAdrOaCJwrl9Q==} + '@smithy/middleware-retry@4.4.26': + resolution: {integrity: sha512-ozZMoTAr+B2aVYfLYfkssFvc8ZV3p/vLpVQ7/k277xxUOA9ykSPe5obL2j6yHfbdrM/SZV7qj0uk/hSqavHrLw==} engines: {node: '>=18.0.0'} '@smithy/middleware-serde@4.2.9': @@ -4912,8 +4912,8 @@ packages: resolution: {integrity: sha512-d3+U/VpX7a60seHziWnVZOHuEgJlclufjkS6zhXvxcJgkJq4UWdH5eOBLzHRMx6gXjsdT9h6lfpmLzbrdupHgQ==} engines: {node: '>=18.0.0'} - '@smithy/smithy-client@4.10.8': - resolution: {integrity: sha512-wcr3UEL26k7lLoyf9eVDZoD1nNY3Fa1gbNuOXvfxvVWLGkOVW+RYZgUUp/bXHryJfycIOQnBq9o1JAE00ax8HQ==} + '@smithy/smithy-client@4.10.11': + resolution: {integrity: sha512-6o804SCyHGMXAb5mFJ+iTy9kVKv7F91a9szN0J+9X6p8A0NrdpUxdaC57aye2ipQkP2C4IAqETEpGZ0Zj77Haw==} engines: {node: '>=18.0.0'} '@smithy/smithy-client@4.10.9': @@ -14523,7 +14523,7 @@ snapshots: '@aws-sdk/util-user-agent-browser': 3.821.0 '@aws-sdk/util-user-agent-node': 3.823.0 '@smithy/config-resolver': 4.1.4 - '@smithy/core': 3.20.6 + '@smithy/core': 3.20.7 '@smithy/eventstream-serde-browser': 4.0.4 '@smithy/eventstream-serde-config-resolver': 4.1.2 '@smithy/eventstream-serde-node': 4.0.4 @@ -14531,14 +14531,14 @@ snapshots: '@smithy/hash-node': 4.0.4 '@smithy/invalid-dependency': 4.0.4 '@smithy/middleware-content-length': 4.0.4 - '@smithy/middleware-endpoint': 4.4.7 - '@smithy/middleware-retry': 4.4.24 + '@smithy/middleware-endpoint': 4.4.8 + '@smithy/middleware-retry': 4.4.26 '@smithy/middleware-serde': 4.2.9 '@smithy/middleware-stack': 4.2.8 '@smithy/node-config-provider': 4.3.8 '@smithy/node-http-handler': 4.4.8 '@smithy/protocol-http': 5.3.8 - '@smithy/smithy-client': 4.10.8 + '@smithy/smithy-client': 4.10.9 '@smithy/types': 4.12.0 '@smithy/url-parser': 4.2.8 '@smithy/util-base64': 4.3.0 @@ -14572,19 +14572,19 @@ snapshots: '@aws-sdk/util-user-agent-browser': 3.821.0 '@aws-sdk/util-user-agent-node': 3.823.0 '@smithy/config-resolver': 4.1.4 - '@smithy/core': 3.20.6 + '@smithy/core': 3.20.7 '@smithy/fetch-http-handler': 5.3.9 '@smithy/hash-node': 4.0.4 '@smithy/invalid-dependency': 4.0.4 '@smithy/middleware-content-length': 4.0.4 - '@smithy/middleware-endpoint': 4.4.7 - '@smithy/middleware-retry': 4.4.24 + '@smithy/middleware-endpoint': 4.4.8 + '@smithy/middleware-retry': 4.4.26 '@smithy/middleware-serde': 4.2.9 '@smithy/middleware-stack': 4.2.8 '@smithy/node-config-provider': 4.3.8 '@smithy/node-http-handler': 4.4.8 '@smithy/protocol-http': 5.3.8 - '@smithy/smithy-client': 4.10.8 + '@smithy/smithy-client': 4.10.9 '@smithy/types': 4.12.0 '@smithy/url-parser': 4.2.8 '@smithy/util-base64': 4.3.0 @@ -14604,12 +14604,12 @@ snapshots: dependencies: '@aws-sdk/types': 3.821.0 '@aws-sdk/xml-builder': 3.821.0 - '@smithy/core': 3.20.6 + '@smithy/core': 3.20.7 '@smithy/node-config-provider': 4.3.8 '@smithy/property-provider': 4.2.8 '@smithy/protocol-http': 5.3.8 '@smithy/signature-v4': 5.1.2 - '@smithy/smithy-client': 4.10.8 + '@smithy/smithy-client': 4.10.9 '@smithy/types': 4.12.0 '@smithy/util-base64': 4.3.0 '@smithy/util-body-length-browser': 4.2.0 @@ -14634,7 +14634,7 @@ snapshots: '@smithy/node-http-handler': 4.4.8 '@smithy/property-provider': 4.2.8 '@smithy/protocol-http': 5.3.8 - '@smithy/smithy-client': 4.10.8 + '@smithy/smithy-client': 4.10.9 '@smithy/types': 4.12.0 '@smithy/util-stream': 4.5.10 tslib: 2.8.1 @@ -14746,7 +14746,7 @@ snapshots: '@aws-sdk/core': 3.823.0 '@aws-sdk/types': 3.821.0 '@aws-sdk/util-endpoints': 3.821.0 - '@smithy/core': 3.20.6 + '@smithy/core': 3.20.7 '@smithy/protocol-http': 5.3.8 '@smithy/types': 4.12.0 tslib: 2.8.1 @@ -14766,19 +14766,19 @@ snapshots: '@aws-sdk/util-user-agent-browser': 3.821.0 '@aws-sdk/util-user-agent-node': 3.823.0 '@smithy/config-resolver': 4.1.4 - '@smithy/core': 3.20.6 + '@smithy/core': 3.20.7 '@smithy/fetch-http-handler': 5.3.9 '@smithy/hash-node': 4.0.4 '@smithy/invalid-dependency': 4.0.4 '@smithy/middleware-content-length': 4.0.4 - '@smithy/middleware-endpoint': 4.4.7 - '@smithy/middleware-retry': 4.4.24 + '@smithy/middleware-endpoint': 4.4.8 + '@smithy/middleware-retry': 4.4.26 '@smithy/middleware-serde': 4.2.9 '@smithy/middleware-stack': 4.2.8 '@smithy/node-config-provider': 4.3.8 '@smithy/node-http-handler': 4.4.8 '@smithy/protocol-http': 5.3.8 - '@smithy/smithy-client': 4.10.8 + '@smithy/smithy-client': 4.10.9 '@smithy/types': 4.12.0 '@smithy/url-parser': 4.2.8 '@smithy/util-base64': 4.3.0 @@ -15307,6 +15307,8 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.4.0 '@ckeditor/ckeditor5-watchdog': 47.4.0 es-toolkit: 1.39.5 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-dev-build-tools@54.3.0(@swc/helpers@0.5.17)(tslib@2.8.1)(typescript@5.9.3)': dependencies: @@ -19289,7 +19291,7 @@ snapshots: '@smithy/util-middleware': 4.2.8 tslib: 2.8.1 - '@smithy/core@3.20.6': + '@smithy/core@3.20.7': dependencies: '@smithy/middleware-serde': 4.2.9 '@smithy/protocol-http': 5.3.8 @@ -19302,7 +19304,7 @@ snapshots: '@smithy/uuid': 1.1.0 tslib: 2.8.1 - '@smithy/core@3.20.7': + '@smithy/core@3.21.0': dependencies: '@smithy/middleware-serde': 4.2.9 '@smithy/protocol-http': 5.3.8 @@ -19387,9 +19389,9 @@ snapshots: '@smithy/types': 4.12.0 tslib: 2.8.1 - '@smithy/middleware-endpoint@4.4.7': + '@smithy/middleware-endpoint@4.4.10': dependencies: - '@smithy/core': 3.20.6 + '@smithy/core': 3.21.0 '@smithy/middleware-serde': 4.2.9 '@smithy/node-config-provider': 4.3.8 '@smithy/shared-ini-file-loader': 4.4.3 @@ -19409,12 +19411,12 @@ snapshots: '@smithy/util-middleware': 4.2.8 tslib: 2.8.1 - '@smithy/middleware-retry@4.4.24': + '@smithy/middleware-retry@4.4.26': dependencies: '@smithy/node-config-provider': 4.3.8 '@smithy/protocol-http': 5.3.8 '@smithy/service-error-classification': 4.2.8 - '@smithy/smithy-client': 4.10.9 + '@smithy/smithy-client': 4.10.11 '@smithy/types': 4.12.0 '@smithy/util-middleware': 4.2.8 '@smithy/util-retry': 4.2.8 @@ -19488,10 +19490,10 @@ snapshots: '@smithy/util-utf8': 4.2.0 tslib: 2.8.1 - '@smithy/smithy-client@4.10.8': + '@smithy/smithy-client@4.10.11': dependencies: - '@smithy/core': 3.20.6 - '@smithy/middleware-endpoint': 4.4.7 + '@smithy/core': 3.21.0 + '@smithy/middleware-endpoint': 4.4.10 '@smithy/middleware-stack': 4.2.8 '@smithy/protocol-http': 5.3.8 '@smithy/types': 4.12.0 @@ -19549,7 +19551,7 @@ snapshots: '@smithy/util-defaults-mode-browser@4.0.22': dependencies: '@smithy/property-provider': 4.2.8 - '@smithy/smithy-client': 4.10.8 + '@smithy/smithy-client': 4.10.9 '@smithy/types': 4.12.0 bowser: 2.11.0 tslib: 2.8.1 @@ -19560,7 +19562,7 @@ snapshots: '@smithy/credential-provider-imds': 4.0.6 '@smithy/node-config-provider': 4.3.8 '@smithy/property-provider': 4.2.8 - '@smithy/smithy-client': 4.10.8 + '@smithy/smithy-client': 4.10.9 '@smithy/types': 4.12.0 tslib: 2.8.1 From 16ed9a7e8e89a09a685bde4eeb5ac15171cd5b28 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 21 Jan 2026 01:34:07 +0000 Subject: [PATCH 157/353] fix(deps): update dependency @zumer/snapdom to v2.0.2 --- apps/client/package.json | 2 +- pnpm-lock.yaml | 12 +++++++----- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/apps/client/package.json b/apps/client/package.json index 1eb7e79009..66eae322ab 100644 --- a/apps/client/package.json +++ b/apps/client/package.json @@ -34,7 +34,7 @@ "@triliumnext/highlightjs": "workspace:*", "@triliumnext/share-theme": "workspace:*", "@triliumnext/split.js": "workspace:*", - "@zumer/snapdom": "2.0.1", + "@zumer/snapdom": "2.0.2", "autocomplete.js": "0.38.1", "bootstrap": "5.3.8", "boxicons": "2.1.4", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 24521f0d5e..e13bf7e6cb 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -218,8 +218,8 @@ importers: specifier: workspace:* version: link:../../packages/splitjs '@zumer/snapdom': - specifier: 2.0.1 - version: 2.0.1 + specifier: 2.0.2 + version: 2.0.2 autocomplete.js: specifier: 0.38.1 version: 0.38.1 @@ -5965,8 +5965,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.0.1': - resolution: {integrity: sha512-78/qbYl2FTv4H6qaXcNfAujfIOSzdvs83NW63VbyC9QA3sqNPfPvhn4xYMO6Gy11hXwJUEhd0z65yKiNzDwy9w==} + '@zumer/snapdom@2.0.2': + resolution: {integrity: sha512-W6quT4lMcPu8Q9O/Q6witSfc6/+xuY8C8yDoHug/+o7zYKCNE/e0I3//XsWDkyq9C0mDE0TAWF/8bwCR7x3gHQ==} abab@2.0.6: resolution: {integrity: sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==} @@ -15307,6 +15307,8 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.4.0 '@ckeditor/ckeditor5-watchdog': 47.4.0 es-toolkit: 1.39.5 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-dev-build-tools@54.3.0(@swc/helpers@0.5.17)(tslib@2.8.1)(typescript@5.9.3)': dependencies: @@ -20860,7 +20862,7 @@ snapshots: '@zip.js/zip.js@2.8.11': {} - '@zumer/snapdom@2.0.1': {} + '@zumer/snapdom@2.0.2': {} abab@2.0.6: {} From 4da6294ef27e253ebf0eabfefe1865e7c426bd5c Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 21 Jan 2026 01:35:35 +0000 Subject: [PATCH 158/353] chore(deps): update dependency node-abi to v4.26.0 --- package.json | 2 +- pnpm-lock.yaml | 16 +++++++++------- 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/package.json b/package.json index 1bd68cc676..381cca4bdd 100644 --- a/package.json +++ b/package.json @@ -115,7 +115,7 @@ "on-headers@<1.1.0": ">=1.1.0", "form-data@>=4.0.0 <4.0.4": ">=4.0.4", "form-data@>=3.0.0 <3.0.4": ">=3.0.4", - "node-abi": "4.25.0" + "node-abi": "4.26.0" }, "ignoredBuiltDependencies": [ "sqlite3" diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 24521f0d5e..d8bcbd322c 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -20,7 +20,7 @@ overrides: on-headers@<1.1.0: '>=1.1.0' form-data@>=4.0.0 <4.0.4: '>=4.0.4' form-data@>=3.0.0 <3.0.4: '>=3.0.4' - node-abi: 4.25.0 + node-abi: 4.26.0 patchedDependencies: '@ckeditor/ckeditor5-code-block': @@ -10625,8 +10625,8 @@ packages: nice-try@1.0.5: resolution: {integrity: sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==} - node-abi@4.25.0: - resolution: {integrity: sha512-BRrQZc23ljOLms7EXVds3MOpB59/x7gaORodNuIwt96JKlflUmrOgv5hSJZEEM/WkW3uXpjZ4x1wcFu8V9mTpw==} + node-abi@4.26.0: + resolution: {integrity: sha512-8QwIZqikRvDIkXS2S93LjzhsSPJuIbfaMETWH+Bx8oOT9Sa9UsUtBFQlc3gBNd1+QINjaTloitXr1W3dQLi9Iw==} engines: {node: '>=22.12.0'} node-addon-api@7.1.1: @@ -15307,6 +15307,8 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.4.0 '@ckeditor/ckeditor5-watchdog': 47.4.0 es-toolkit: 1.39.5 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-dev-build-tools@54.3.0(@swc/helpers@0.5.17)(tslib@2.8.1)(typescript@5.9.3)': dependencies: @@ -16808,7 +16810,7 @@ snapshots: detect-libc: 2.1.2 fs-extra: 10.1.0 got: 11.8.6 - node-abi: 4.25.0 + node-abi: 4.26.0 node-api-version: 0.2.1 ora: 5.4.1 read-binary-file-arch: 1.0.6 @@ -16826,7 +16828,7 @@ snapshots: detect-libc: 2.1.2 got: 11.8.6 graceful-fs: 4.2.11 - node-abi: 4.25.0 + node-abi: 4.26.0 node-api-version: 0.2.1 node-gyp: 11.4.2 ora: 5.4.1 @@ -26746,7 +26748,7 @@ snapshots: nice-try@1.0.5: {} - node-abi@4.25.0: + node-abi@4.26.0: dependencies: semver: 7.7.3 @@ -27889,7 +27891,7 @@ snapshots: minimist: 1.2.8 mkdirp-classic: 0.5.3 napi-build-utils: 2.0.0 - node-abi: 4.25.0 + node-abi: 4.26.0 pump: 3.0.3 rc: 1.2.8 simple-get: 4.0.1 From a285c46b97173d17fd32bea548f82e34382bb1ba Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 21 Jan 2026 01:36:23 +0000 Subject: [PATCH 159/353] fix(deps): update dependency @preact/signals to v2.6.0 --- apps/client/package.json | 2 +- pnpm-lock.yaml | 20 +++++++++++--------- 2 files changed, 12 insertions(+), 10 deletions(-) diff --git a/apps/client/package.json b/apps/client/package.json index 1eb7e79009..f7630da16a 100644 --- a/apps/client/package.json +++ b/apps/client/package.json @@ -27,7 +27,7 @@ "@mermaid-js/layout-elk": "0.2.0", "@mind-elixir/node-menu": "5.0.1", "@popperjs/core": "2.11.8", - "@preact/signals": "2.5.1", + "@preact/signals": "2.6.0", "@triliumnext/ckeditor5": "workspace:*", "@triliumnext/codemirror": "workspace:*", "@triliumnext/commons": "workspace:*", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 24521f0d5e..e440398aa5 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -197,8 +197,8 @@ importers: specifier: 2.11.8 version: 2.11.8 '@preact/signals': - specifier: 2.5.1 - version: 2.5.1(preact@10.28.2) + specifier: 2.6.0 + version: 2.6.0(preact@10.28.2) '@triliumnext/ckeditor5': specifier: workspace:* version: link:../../packages/ckeditor5 @@ -4043,11 +4043,11 @@ packages: '@babel/core': 7.x vite: 2.x || 3.x || 4.x || 5.x || 6.x || 7.x - '@preact/signals-core@1.12.1': - resolution: {integrity: sha512-BwbTXpj+9QutoZLQvbttRg5x3l5468qaV2kufh+51yha1c53ep5dY4kTuZR35+3pAZxpfQerGJiQqg34ZNZ6uA==} + '@preact/signals-core@1.12.2': + resolution: {integrity: sha512-5Yf8h1Ke3SMHr15xl630KtwPTW4sYDFkkxS0vQ8UiQLWwZQnrF9IKaVG1mN5VcJz52EcWs2acsc/Npjha/7ysA==} - '@preact/signals@2.5.1': - resolution: {integrity: sha512-VPjk5YFt7i11Fi4UK0tzaEe5xLwfhUxXL3l89ocxQ5aPz7bRo8M5+N73LjBMPklyXKYKz6YsNo4Smp8n6nplng==} + '@preact/signals@2.6.0': + resolution: {integrity: sha512-a22Mh1CCA+PaqobdV2YfeZ30PGywp/QnhCBNVDIsHUdkuqpYcbxt0vgC78JYaicBqWxAOGXLoExj5WHaZ/VKvg==} peerDependencies: preact: 10.28.2 @@ -15307,6 +15307,8 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.4.0 '@ckeditor/ckeditor5-watchdog': 47.4.0 es-toolkit: 1.39.5 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-dev-build-tools@54.3.0(@swc/helpers@0.5.17)(tslib@2.8.1)(typescript@5.9.3)': dependencies: @@ -18510,11 +18512,11 @@ snapshots: - preact - supports-color - '@preact/signals-core@1.12.1': {} + '@preact/signals-core@1.12.2': {} - '@preact/signals@2.5.1(preact@10.28.2)': + '@preact/signals@2.6.0(preact@10.28.2)': dependencies: - '@preact/signals-core': 1.12.1 + '@preact/signals-core': 1.12.2 preact: 10.28.2 '@prefresh/babel-plugin@0.5.2': {} From 794e03b2cb023a33f9beaa2629cab084ac9164c4 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 21 Jan 2026 01:37:06 +0000 Subject: [PATCH 160/353] fix(deps): update dependency i18next to v25.8.0 --- apps/client/package.json | 2 +- apps/server/package.json | 2 +- apps/website/package.json | 2 +- pnpm-lock.yaml | 28 +++++++++++++++------------- 4 files changed, 18 insertions(+), 16 deletions(-) diff --git a/apps/client/package.json b/apps/client/package.json index 1eb7e79009..317ce2e50c 100644 --- a/apps/client/package.json +++ b/apps/client/package.json @@ -44,7 +44,7 @@ "draggabilly": "3.0.0", "force-graph": "1.51.0", "globals": "17.0.0", - "i18next": "25.7.4", + "i18next": "25.8.0", "i18next-http-backend": "3.0.2", "jquery": "4.0.0", "jquery.fancytree": "2.38.5", diff --git a/apps/server/package.json b/apps/server/package.json index 3c8f269935..482f608dac 100644 --- a/apps/server/package.json +++ b/apps/server/package.json @@ -99,7 +99,7 @@ "html2plaintext": "2.1.4", "http-proxy-agent": "7.0.2", "https-proxy-agent": "7.0.6", - "i18next": "25.7.4", + "i18next": "25.8.0", "i18next-fs-backend": "2.6.1", "image-type": "6.0.0", "ini": "6.0.0", diff --git a/apps/website/package.json b/apps/website/package.json index 304563fcb4..b478eec643 100644 --- a/apps/website/package.json +++ b/apps/website/package.json @@ -9,7 +9,7 @@ "preview": "pnpm build && vite preview" }, "dependencies": { - "i18next": "25.7.4", + "i18next": "25.8.0", "i18next-http-backend": "3.0.2", "preact": "10.28.2", "preact-iso": "2.11.1", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 24521f0d5e..9604bc7151 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -248,8 +248,8 @@ importers: specifier: 17.0.0 version: 17.0.0 i18next: - specifier: 25.7.4 - version: 25.7.4(typescript@5.9.3) + specifier: 25.8.0 + version: 25.8.0(typescript@5.9.3) i18next-http-backend: specifier: 3.0.2 version: 3.0.2(encoding@0.1.13) @@ -297,7 +297,7 @@ importers: version: 10.28.2 react-i18next: specifier: 16.5.3 - version: 16.5.3(i18next@25.7.4(typescript@5.9.3))(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(typescript@5.9.3) + version: 16.5.3(i18next@25.8.0(typescript@5.9.3))(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(typescript@5.9.3) react-window: specifier: 2.2.5 version: 2.2.5(react-dom@19.2.3(react@19.2.3))(react@19.2.3) @@ -712,8 +712,8 @@ importers: specifier: 7.0.6 version: 7.0.6 i18next: - specifier: 25.7.4 - version: 25.7.4(typescript@5.9.3) + specifier: 25.8.0 + version: 25.8.0(typescript@5.9.3) i18next-fs-backend: specifier: 2.6.1 version: 2.6.1 @@ -820,8 +820,8 @@ importers: apps/website: dependencies: i18next: - specifier: 25.7.4 - version: 25.7.4(typescript@5.9.3) + specifier: 25.8.0 + version: 25.8.0(typescript@5.9.3) i18next-http-backend: specifier: 3.0.2 version: 3.0.2(encoding@0.1.13) @@ -836,7 +836,7 @@ importers: version: 6.6.5(preact@10.28.2) react-i18next: specifier: 16.5.3 - version: 16.5.3(i18next@25.7.4(typescript@5.9.3))(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(typescript@5.9.3) + version: 16.5.3(i18next@25.8.0(typescript@5.9.3))(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(typescript@5.9.3) devDependencies: '@preact/preset-vite': specifier: 2.10.2 @@ -9024,8 +9024,8 @@ packages: i18next-http-backend@3.0.2: resolution: {integrity: sha512-PdlvPnvIp4E1sYi46Ik4tBYh/v/NbYfFFgTjkwFl0is8A18s7/bx9aXqsrOax9WUbeNS6mD2oix7Z0yGGf6m5g==} - i18next@25.7.4: - resolution: {integrity: sha512-hRkpEblXXcXSNbw8mBNq9042OEetgyB/ahc/X17uV/khPwzV+uB8RHceHh3qavyrkPJvmXFKXME2Sy1E0KjAfw==} + i18next@25.8.0: + resolution: {integrity: sha512-urrg4HMFFMQZ2bbKRK7IZ8/CTE7D8H4JRlAwqA2ZwDRFfdd0K/4cdbNNLgfn9mo+I/h9wJu61qJzH7jCFAhUZQ==} peerDependencies: typescript: ^5 peerDependenciesMeta: @@ -15307,6 +15307,8 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.4.0 '@ckeditor/ckeditor5-watchdog': 47.4.0 es-toolkit: 1.39.5 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-dev-build-tools@54.3.0(@swc/helpers@0.5.17)(tslib@2.8.1)(typescript@5.9.3)': dependencies: @@ -24857,7 +24859,7 @@ snapshots: transitivePeerDependencies: - encoding - i18next@25.7.4(typescript@5.9.3): + i18next@25.8.0(typescript@5.9.3): dependencies: '@babel/runtime': 7.28.4 optionalDependencies: @@ -28092,11 +28094,11 @@ snapshots: react: 19.2.3 scheduler: 0.27.0 - react-i18next@16.5.3(i18next@25.7.4(typescript@5.9.3))(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(typescript@5.9.3): + react-i18next@16.5.3(i18next@25.8.0(typescript@5.9.3))(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(typescript@5.9.3): dependencies: '@babel/runtime': 7.28.4 html-parse-stringify: 3.0.1 - i18next: 25.7.4(typescript@5.9.3) + i18next: 25.8.0(typescript@5.9.3) react: 19.2.3 use-sync-external-store: 1.6.0(react@19.2.3) optionalDependencies: From 96b1efcfdc9a9417ed5cbd6eae6a36f3dd75b2c4 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 21 Jan 2026 06:17:33 +0000 Subject: [PATCH 161/353] chore(deps): update dependency lightningcss to v1.31.1 --- apps/client/package.json | 2 +- pnpm-lock.yaml | 236 +++++++++++++++++++-------------------- 2 files changed, 119 insertions(+), 119 deletions(-) diff --git a/apps/client/package.json b/apps/client/package.json index 1eb7e79009..8f5990b69d 100644 --- a/apps/client/package.json +++ b/apps/client/package.json @@ -79,7 +79,7 @@ "@types/tabulator-tables": "6.3.1", "copy-webpack-plugin": "13.0.1", "happy-dom": "20.3.3", - "lightningcss": "1.30.2", + "lightningcss": "1.31.1", "script-loader": "0.7.2", "vite-plugin-static-copy": "3.1.5" } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 24521f0d5e..31033f4299 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -57,10 +57,10 @@ importers: version: 24.10.9 '@vitest/browser-webdriverio': specifier: 4.0.17 - version: 4.0.17(bufferutil@4.0.9)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(utf-8-validate@6.0.5)(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1))(vitest@4.0.17)(webdriverio@9.23.2(bufferutil@4.0.9)(utf-8-validate@6.0.5)) + version: 4.0.17(bufferutil@4.0.9)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(utf-8-validate@6.0.5)(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.31.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1))(vitest@4.0.17)(webdriverio@9.23.2(bufferutil@4.0.9)(utf-8-validate@6.0.5)) '@vitest/coverage-v8': specifier: 4.0.17 - version: 4.0.17(@vitest/browser@4.0.17(bufferutil@4.0.9)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(utf-8-validate@6.0.5)(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1))(vitest@4.0.17))(vitest@4.0.17) + version: 4.0.17(@vitest/browser@4.0.17(bufferutil@4.0.9)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(utf-8-validate@6.0.5)(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.31.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1))(vitest@4.0.17))(vitest@4.0.17) '@vitest/ui': specifier: 4.0.17 version: 4.0.17(vitest@4.0.17) @@ -111,7 +111,7 @@ importers: version: 0.18.0 rollup-plugin-webpack-stats: specifier: 2.1.9 - version: 2.1.9(rolldown@1.0.0-beta.29)(rollup@4.52.0)(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1)) + version: 2.1.9(rolldown@1.0.0-beta.29)(rollup@4.52.0)(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.31.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1)) tslib: specifier: 2.8.1 version: 2.8.1 @@ -129,13 +129,13 @@ importers: version: 2.0.1 vite: specifier: 7.3.1 - version: 7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) + version: 7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.31.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) vite-plugin-dts: specifier: 4.5.4 - version: 4.5.4(@types/node@24.10.9)(rollup@4.52.0)(typescript@5.9.3)(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1)) + version: 4.5.4(@types/node@24.10.9)(rollup@4.52.0)(typescript@5.9.3)(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.31.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1)) vitest: specifier: 4.0.17 - version: 4.0.17(@opentelemetry/api@1.9.0)(@types/node@24.10.9)(@vitest/browser-webdriverio@4.0.17)(@vitest/ui@4.0.17)(happy-dom@20.3.3(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.2)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) + version: 4.0.17(@opentelemetry/api@1.9.0)(@types/node@24.10.9)(@vitest/browser-webdriverio@4.0.17)(@vitest/ui@4.0.17)(happy-dom@20.3.3(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.31.1)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) apps/build-docs: devDependencies: @@ -319,7 +319,7 @@ importers: version: 5.0.0 '@prefresh/vite': specifier: 2.4.11 - version: 2.4.11(preact@10.28.2)(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1)) + version: 2.4.11(preact@10.28.2)(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.31.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1)) '@types/bootstrap': specifier: 5.2.10 version: 5.2.10 @@ -348,14 +348,14 @@ importers: specifier: 20.3.3 version: 20.3.3(bufferutil@4.0.9)(utf-8-validate@6.0.5) lightningcss: - specifier: 1.30.2 - version: 1.30.2 + specifier: 1.31.1 + version: 1.31.1 script-loader: specifier: 0.7.2 version: 0.7.2 vite-plugin-static-copy: specifier: 3.1.5 - version: 3.1.5(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1)) + version: 3.1.5(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.31.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1)) apps/db-compare: dependencies: @@ -800,7 +800,7 @@ importers: version: 1.0.1 vite: specifier: 7.3.1 - version: 7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) + version: 7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.31.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) ws: specifier: 8.19.0 version: 8.19.0(bufferutil@4.0.9)(utf-8-validate@6.0.5) @@ -840,7 +840,7 @@ importers: devDependencies: '@preact/preset-vite': specifier: 2.10.2 - version: 2.10.2(@babel/core@7.28.0)(preact@10.28.2)(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1)) + version: 2.10.2(@babel/core@7.28.0)(preact@10.28.2)(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.31.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1)) eslint: specifier: 9.39.2 version: 9.39.2(jiti@2.6.1) @@ -855,10 +855,10 @@ importers: version: 0.4.2 vite: specifier: 7.3.1 - version: 7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) + version: 7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.31.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) vitest: specifier: 4.0.17 - version: 4.0.17(@opentelemetry/api@1.9.0)(@types/node@24.10.9)(@vitest/browser-webdriverio@4.0.17)(@vitest/ui@4.0.17)(happy-dom@20.3.3(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.2)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) + version: 4.0.17(@opentelemetry/api@1.9.0)(@types/node@24.10.9)(@vitest/browser-webdriverio@4.0.17)(@vitest/ui@4.0.17)(happy-dom@20.3.3(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.31.1)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) packages/ckeditor5: dependencies: @@ -913,7 +913,7 @@ importers: version: 8.53.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) '@vitest/browser': specifier: 4.0.17 - version: 4.0.17(bufferutil@4.0.9)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(utf-8-validate@6.0.5)(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1))(vitest@4.0.17) + version: 4.0.17(bufferutil@4.0.9)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(utf-8-validate@6.0.5)(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.31.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1))(vitest@4.0.17) '@vitest/coverage-istanbul': specifier: 4.0.17 version: 4.0.17(vitest@4.0.17) @@ -946,10 +946,10 @@ importers: version: 5.9.3 vite-plugin-svgo: specifier: 2.0.0 - version: 2.0.0(typescript@5.9.3)(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1)) + version: 2.0.0(typescript@5.9.3)(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.31.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1)) vitest: specifier: 4.0.17 - version: 4.0.17(@opentelemetry/api@1.9.0)(@types/node@24.10.9)(@vitest/browser-webdriverio@4.0.17)(@vitest/ui@4.0.17)(happy-dom@20.3.3(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.2)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) + version: 4.0.17(@opentelemetry/api@1.9.0)(@types/node@24.10.9)(@vitest/browser-webdriverio@4.0.17)(@vitest/ui@4.0.17)(happy-dom@20.3.3(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.31.1)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) webdriverio: specifier: 9.23.2 version: 9.23.2(bufferutil@4.0.9)(utf-8-validate@6.0.5) @@ -973,7 +973,7 @@ importers: version: 8.53.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) '@vitest/browser': specifier: 4.0.17 - version: 4.0.17(bufferutil@4.0.9)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(utf-8-validate@6.0.5)(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1))(vitest@4.0.17) + version: 4.0.17(bufferutil@4.0.9)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(utf-8-validate@6.0.5)(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.31.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1))(vitest@4.0.17) '@vitest/coverage-istanbul': specifier: 4.0.17 version: 4.0.17(vitest@4.0.17) @@ -1006,10 +1006,10 @@ importers: version: 5.9.3 vite-plugin-svgo: specifier: 2.0.0 - version: 2.0.0(typescript@5.9.3)(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1)) + version: 2.0.0(typescript@5.9.3)(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.31.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1)) vitest: specifier: 4.0.17 - version: 4.0.17(@opentelemetry/api@1.9.0)(@types/node@24.10.9)(@vitest/browser-webdriverio@4.0.17)(@vitest/ui@4.0.17)(happy-dom@20.3.3(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.2)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) + version: 4.0.17(@opentelemetry/api@1.9.0)(@types/node@24.10.9)(@vitest/browser-webdriverio@4.0.17)(@vitest/ui@4.0.17)(happy-dom@20.3.3(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.31.1)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) webdriverio: specifier: 9.23.2 version: 9.23.2(bufferutil@4.0.9)(utf-8-validate@6.0.5) @@ -1033,7 +1033,7 @@ importers: version: 8.53.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) '@vitest/browser': specifier: 4.0.17 - version: 4.0.17(bufferutil@4.0.9)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(utf-8-validate@6.0.5)(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1))(vitest@4.0.17) + version: 4.0.17(bufferutil@4.0.9)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(utf-8-validate@6.0.5)(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.31.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1))(vitest@4.0.17) '@vitest/coverage-istanbul': specifier: 4.0.17 version: 4.0.17(vitest@4.0.17) @@ -1066,10 +1066,10 @@ importers: version: 5.9.3 vite-plugin-svgo: specifier: 2.0.0 - version: 2.0.0(typescript@5.9.3)(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1)) + version: 2.0.0(typescript@5.9.3)(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.31.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1)) vitest: specifier: 4.0.17 - version: 4.0.17(@opentelemetry/api@1.9.0)(@types/node@24.10.9)(@vitest/browser-webdriverio@4.0.17)(@vitest/ui@4.0.17)(happy-dom@20.3.3(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.2)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) + version: 4.0.17(@opentelemetry/api@1.9.0)(@types/node@24.10.9)(@vitest/browser-webdriverio@4.0.17)(@vitest/ui@4.0.17)(happy-dom@20.3.3(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.31.1)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) webdriverio: specifier: 9.23.2 version: 9.23.2(bufferutil@4.0.9)(utf-8-validate@6.0.5) @@ -1100,7 +1100,7 @@ importers: version: 8.53.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) '@vitest/browser': specifier: 4.0.17 - version: 4.0.17(bufferutil@4.0.9)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(utf-8-validate@6.0.5)(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1))(vitest@4.0.17) + version: 4.0.17(bufferutil@4.0.9)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(utf-8-validate@6.0.5)(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.31.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1))(vitest@4.0.17) '@vitest/coverage-istanbul': specifier: 4.0.17 version: 4.0.17(vitest@4.0.17) @@ -1133,10 +1133,10 @@ importers: version: 5.9.3 vite-plugin-svgo: specifier: 2.0.0 - version: 2.0.0(typescript@5.9.3)(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1)) + version: 2.0.0(typescript@5.9.3)(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.31.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1)) vitest: specifier: 4.0.17 - version: 4.0.17(@opentelemetry/api@1.9.0)(@types/node@24.10.9)(@vitest/browser-webdriverio@4.0.17)(@vitest/ui@4.0.17)(happy-dom@20.3.3(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.2)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) + version: 4.0.17(@opentelemetry/api@1.9.0)(@types/node@24.10.9)(@vitest/browser-webdriverio@4.0.17)(@vitest/ui@4.0.17)(happy-dom@20.3.3(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.31.1)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) webdriverio: specifier: 9.23.2 version: 9.23.2(bufferutil@4.0.9)(utf-8-validate@6.0.5) @@ -1167,7 +1167,7 @@ importers: version: 8.53.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) '@vitest/browser': specifier: 4.0.17 - version: 4.0.17(bufferutil@4.0.9)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(utf-8-validate@6.0.5)(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1))(vitest@4.0.17) + version: 4.0.17(bufferutil@4.0.9)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(utf-8-validate@6.0.5)(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.31.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1))(vitest@4.0.17) '@vitest/coverage-istanbul': specifier: 4.0.17 version: 4.0.17(vitest@4.0.17) @@ -1200,10 +1200,10 @@ importers: version: 5.9.3 vite-plugin-svgo: specifier: 2.0.0 - version: 2.0.0(typescript@5.9.3)(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1)) + version: 2.0.0(typescript@5.9.3)(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.31.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1)) vitest: specifier: 4.0.17 - version: 4.0.17(@opentelemetry/api@1.9.0)(@types/node@24.10.9)(@vitest/browser-webdriverio@4.0.17)(@vitest/ui@4.0.17)(happy-dom@20.3.3(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.2)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) + version: 4.0.17(@opentelemetry/api@1.9.0)(@types/node@24.10.9)(@vitest/browser-webdriverio@4.0.17)(@vitest/ui@4.0.17)(happy-dom@20.3.3(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.31.1)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) webdriverio: specifier: 9.23.2 version: 9.23.2(bufferutil@4.0.9)(utf-8-validate@6.0.5) @@ -9776,74 +9776,74 @@ packages: lie@3.3.0: resolution: {integrity: sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==} - lightningcss-android-arm64@1.30.2: - resolution: {integrity: sha512-BH9sEdOCahSgmkVhBLeU7Hc9DWeZ1Eb6wNS6Da8igvUwAe0sqROHddIlvU06q3WyXVEOYDZ6ykBZQnjTbmo4+A==} + lightningcss-android-arm64@1.31.1: + resolution: {integrity: sha512-HXJF3x8w9nQ4jbXRiNppBCqeZPIAfUo8zE/kOEGbW5NZvGc/K7nMxbhIr+YlFlHW5mpbg/YFPdbnCh1wAXCKFg==} engines: {node: '>= 12.0.0'} cpu: [arm64] os: [android] - lightningcss-darwin-arm64@1.30.2: - resolution: {integrity: sha512-ylTcDJBN3Hp21TdhRT5zBOIi73P6/W0qwvlFEk22fkdXchtNTOU4Qc37SkzV+EKYxLouZ6M4LG9NfZ1qkhhBWA==} + lightningcss-darwin-arm64@1.31.1: + resolution: {integrity: sha512-02uTEqf3vIfNMq3h/z2cJfcOXnQ0GRwQrkmPafhueLb2h7mqEidiCzkE4gBMEH65abHRiQvhdcQ+aP0D0g67sg==} engines: {node: '>= 12.0.0'} cpu: [arm64] os: [darwin] - lightningcss-darwin-x64@1.30.2: - resolution: {integrity: sha512-oBZgKchomuDYxr7ilwLcyms6BCyLn0z8J0+ZZmfpjwg9fRVZIR5/GMXd7r9RH94iDhld3UmSjBM6nXWM2TfZTQ==} + lightningcss-darwin-x64@1.31.1: + resolution: {integrity: sha512-1ObhyoCY+tGxtsz1lSx5NXCj3nirk0Y0kB/g8B8DT+sSx4G9djitg9ejFnjb3gJNWo7qXH4DIy2SUHvpoFwfTA==} engines: {node: '>= 12.0.0'} cpu: [x64] os: [darwin] - lightningcss-freebsd-x64@1.30.2: - resolution: {integrity: sha512-c2bH6xTrf4BDpK8MoGG4Bd6zAMZDAXS569UxCAGcA7IKbHNMlhGQ89eRmvpIUGfKWNVdbhSbkQaWhEoMGmGslA==} + lightningcss-freebsd-x64@1.31.1: + resolution: {integrity: sha512-1RINmQKAItO6ISxYgPwszQE1BrsVU5aB45ho6O42mu96UiZBxEXsuQ7cJW4zs4CEodPUioj/QrXW1r9pLUM74A==} engines: {node: '>= 12.0.0'} cpu: [x64] os: [freebsd] - lightningcss-linux-arm-gnueabihf@1.30.2: - resolution: {integrity: sha512-eVdpxh4wYcm0PofJIZVuYuLiqBIakQ9uFZmipf6LF/HRj5Bgm0eb3qL/mr1smyXIS1twwOxNWndd8z0E374hiA==} + lightningcss-linux-arm-gnueabihf@1.31.1: + resolution: {integrity: sha512-OOCm2//MZJ87CdDK62rZIu+aw9gBv4azMJuA8/KB74wmfS3lnC4yoPHm0uXZ/dvNNHmnZnB8XLAZzObeG0nS1g==} engines: {node: '>= 12.0.0'} cpu: [arm] os: [linux] - lightningcss-linux-arm64-gnu@1.30.2: - resolution: {integrity: sha512-UK65WJAbwIJbiBFXpxrbTNArtfuznvxAJw4Q2ZGlU8kPeDIWEX1dg3rn2veBVUylA2Ezg89ktszWbaQnxD/e3A==} + lightningcss-linux-arm64-gnu@1.31.1: + resolution: {integrity: sha512-WKyLWztD71rTnou4xAD5kQT+982wvca7E6QoLpoawZ1gP9JM0GJj4Tp5jMUh9B3AitHbRZ2/H3W5xQmdEOUlLg==} engines: {node: '>= 12.0.0'} cpu: [arm64] os: [linux] - lightningcss-linux-arm64-musl@1.30.2: - resolution: {integrity: sha512-5Vh9dGeblpTxWHpOx8iauV02popZDsCYMPIgiuw97OJ5uaDsL86cnqSFs5LZkG3ghHoX5isLgWzMs+eD1YzrnA==} + lightningcss-linux-arm64-musl@1.31.1: + resolution: {integrity: sha512-mVZ7Pg2zIbe3XlNbZJdjs86YViQFoJSpc41CbVmKBPiGmC4YrfeOyz65ms2qpAobVd7WQsbW4PdsSJEMymyIMg==} engines: {node: '>= 12.0.0'} cpu: [arm64] os: [linux] - lightningcss-linux-x64-gnu@1.30.2: - resolution: {integrity: sha512-Cfd46gdmj1vQ+lR6VRTTadNHu6ALuw2pKR9lYq4FnhvgBc4zWY1EtZcAc6EffShbb1MFrIPfLDXD6Xprbnni4w==} + lightningcss-linux-x64-gnu@1.31.1: + resolution: {integrity: sha512-xGlFWRMl+0KvUhgySdIaReQdB4FNudfUTARn7q0hh/V67PVGCs3ADFjw+6++kG1RNd0zdGRlEKa+T13/tQjPMA==} engines: {node: '>= 12.0.0'} cpu: [x64] os: [linux] - lightningcss-linux-x64-musl@1.30.2: - resolution: {integrity: sha512-XJaLUUFXb6/QG2lGIW6aIk6jKdtjtcffUT0NKvIqhSBY3hh9Ch+1LCeH80dR9q9LBjG3ewbDjnumefsLsP6aiA==} + lightningcss-linux-x64-musl@1.31.1: + resolution: {integrity: sha512-eowF8PrKHw9LpoZii5tdZwnBcYDxRw2rRCyvAXLi34iyeYfqCQNA9rmUM0ce62NlPhCvof1+9ivRaTY6pSKDaA==} engines: {node: '>= 12.0.0'} cpu: [x64] os: [linux] - lightningcss-win32-arm64-msvc@1.30.2: - resolution: {integrity: sha512-FZn+vaj7zLv//D/192WFFVA0RgHawIcHqLX9xuWiQt7P0PtdFEVaxgF9rjM/IRYHQXNnk61/H/gb2Ei+kUQ4xQ==} + lightningcss-win32-arm64-msvc@1.31.1: + resolution: {integrity: sha512-aJReEbSEQzx1uBlQizAOBSjcmr9dCdL3XuC/6HLXAxmtErsj2ICo5yYggg1qOODQMtnjNQv2UHb9NpOuFtYe4w==} engines: {node: '>= 12.0.0'} cpu: [arm64] os: [win32] - lightningcss-win32-x64-msvc@1.30.2: - resolution: {integrity: sha512-5g1yc73p+iAkid5phb4oVFMB45417DkRevRbt/El/gKXJk4jid+vPFF/AXbxn05Aky8PapwzZrdJShv5C0avjw==} + lightningcss-win32-x64-msvc@1.31.1: + resolution: {integrity: sha512-I9aiFrbd7oYHwlnQDqr1Roz+fTz61oDDJX7n9tYF9FJymH1cIN1DtKw3iYt6b8WZgEjoNwVSncwF4wx/ZedMhw==} engines: {node: '>= 12.0.0'} cpu: [x64] os: [win32] - lightningcss@1.30.2: - resolution: {integrity: sha512-utfs7Pr5uJyyvDETitgsaqSyjCb2qNRAtuqUeWIAKztsOYdcACf2KtARYXg2pSvhkt+9NfoaNY7fxjl6nuMjIQ==} + lightningcss@1.31.1: + resolution: {integrity: sha512-l51N2r93WmGUye3WuFoN5k10zyvrVs0qfKBhyC5ogUQ6Ew6JUSswh78mbSO+IU3nTWsyOArqPCcShdQSadghBQ==} engines: {node: '>= 12.0.0'} lilconfig@2.1.0: @@ -15307,6 +15307,8 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.4.0 '@ckeditor/ckeditor5-watchdog': 47.4.0 es-toolkit: 1.39.5 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-dev-build-tools@54.3.0(@swc/helpers@0.5.17)(tslib@2.8.1)(typescript@5.9.3)': dependencies: @@ -16014,8 +16016,6 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.4.0 '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-slash-command@47.4.0': dependencies: @@ -18494,18 +18494,18 @@ snapshots: '@popperjs/core@2.11.8': {} - '@preact/preset-vite@2.10.2(@babel/core@7.28.0)(preact@10.28.2)(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1))': + '@preact/preset-vite@2.10.2(@babel/core@7.28.0)(preact@10.28.2)(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.31.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1))': dependencies: '@babel/core': 7.28.0 '@babel/plugin-transform-react-jsx': 7.27.1(@babel/core@7.28.0) '@babel/plugin-transform-react-jsx-development': 7.27.1(@babel/core@7.28.0) - '@prefresh/vite': 2.4.8(preact@10.28.2)(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1)) + '@prefresh/vite': 2.4.8(preact@10.28.2)(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.31.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1)) '@rollup/pluginutils': 4.2.1 babel-plugin-transform-hook-names: 1.0.2(@babel/core@7.28.0) debug: 4.4.1 picocolors: 1.1.1 - vite: 7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) - vite-prerender-plugin: 0.5.11(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1)) + vite: 7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.31.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) + vite-prerender-plugin: 0.5.11(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.31.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1)) transitivePeerDependencies: - preact - supports-color @@ -18525,7 +18525,7 @@ snapshots: '@prefresh/utils@1.2.1': {} - '@prefresh/vite@2.4.11(preact@10.28.2)(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1))': + '@prefresh/vite@2.4.11(preact@10.28.2)(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.31.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1))': dependencies: '@babel/core': 7.28.0 '@prefresh/babel-plugin': 0.5.2 @@ -18533,11 +18533,11 @@ snapshots: '@prefresh/utils': 1.2.1 '@rollup/pluginutils': 4.2.1 preact: 10.28.2 - vite: 7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) + vite: 7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.31.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) transitivePeerDependencies: - supports-color - '@prefresh/vite@2.4.8(preact@10.28.2)(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1))': + '@prefresh/vite@2.4.8(preact@10.28.2)(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.31.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1))': dependencies: '@babel/core': 7.28.0 '@prefresh/babel-plugin': 0.5.2 @@ -18545,7 +18545,7 @@ snapshots: '@prefresh/utils': 1.2.1 '@rollup/pluginutils': 4.2.1 preact: 10.28.2 - vite: 7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) + vite: 7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.31.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) transitivePeerDependencies: - supports-color @@ -20566,10 +20566,10 @@ snapshots: - bufferutil - utf-8-validate - '@vitest/browser-webdriverio@4.0.17(bufferutil@4.0.9)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(utf-8-validate@6.0.5)(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1))(vitest@4.0.17)(webdriverio@9.23.2(bufferutil@4.0.9)(utf-8-validate@6.0.5))': + '@vitest/browser-webdriverio@4.0.17(bufferutil@4.0.9)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(utf-8-validate@6.0.5)(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.31.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1))(vitest@4.0.17)(webdriverio@9.23.2(bufferutil@4.0.9)(utf-8-validate@6.0.5))': dependencies: - '@vitest/browser': 4.0.17(bufferutil@4.0.9)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(utf-8-validate@6.0.5)(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1))(vitest@4.0.17) - vitest: 4.0.17(@opentelemetry/api@1.9.0)(@types/node@24.10.9)(@vitest/browser-webdriverio@4.0.17)(@vitest/ui@4.0.17)(happy-dom@20.3.3(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.2)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) + '@vitest/browser': 4.0.17(bufferutil@4.0.9)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(utf-8-validate@6.0.5)(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.31.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1))(vitest@4.0.17) + vitest: 4.0.17(@opentelemetry/api@1.9.0)(@types/node@24.10.9)(@vitest/browser-webdriverio@4.0.17)(@vitest/ui@4.0.17)(happy-dom@20.3.3(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.31.1)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) webdriverio: 9.23.2(bufferutil@4.0.9)(utf-8-validate@6.0.5) transitivePeerDependencies: - bufferutil @@ -20577,16 +20577,16 @@ snapshots: - utf-8-validate - vite - '@vitest/browser@4.0.17(bufferutil@4.0.9)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(utf-8-validate@6.0.5)(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1))(vitest@4.0.17)': + '@vitest/browser@4.0.17(bufferutil@4.0.9)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(utf-8-validate@6.0.5)(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.31.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1))(vitest@4.0.17)': dependencies: - '@vitest/mocker': 4.0.17(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1)) + '@vitest/mocker': 4.0.17(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.31.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1)) '@vitest/utils': 4.0.17 magic-string: 0.30.21 pixelmatch: 7.1.0 pngjs: 7.0.0 sirv: 3.0.2 tinyrainbow: 3.0.3 - vitest: 4.0.17(@opentelemetry/api@1.9.0)(@types/node@24.10.9)(@vitest/browser-webdriverio@4.0.17)(@vitest/ui@4.0.17)(happy-dom@20.3.3(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.2)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) + vitest: 4.0.17(@opentelemetry/api@1.9.0)(@types/node@24.10.9)(@vitest/browser-webdriverio@4.0.17)(@vitest/ui@4.0.17)(happy-dom@20.3.3(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.31.1)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) ws: 8.19.0(bufferutil@4.0.9)(utf-8-validate@6.0.5) transitivePeerDependencies: - bufferutil @@ -20606,11 +20606,11 @@ snapshots: magicast: 0.5.1 obug: 2.1.1 tinyrainbow: 3.0.3 - vitest: 4.0.17(@opentelemetry/api@1.9.0)(@types/node@24.10.9)(@vitest/browser-webdriverio@4.0.17)(@vitest/ui@4.0.17)(happy-dom@20.3.3(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.2)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) + vitest: 4.0.17(@opentelemetry/api@1.9.0)(@types/node@24.10.9)(@vitest/browser-webdriverio@4.0.17)(@vitest/ui@4.0.17)(happy-dom@20.3.3(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.31.1)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) transitivePeerDependencies: - supports-color - '@vitest/coverage-v8@4.0.17(@vitest/browser@4.0.17(bufferutil@4.0.9)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(utf-8-validate@6.0.5)(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1))(vitest@4.0.17))(vitest@4.0.17)': + '@vitest/coverage-v8@4.0.17(@vitest/browser@4.0.17(bufferutil@4.0.9)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(utf-8-validate@6.0.5)(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.31.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1))(vitest@4.0.17))(vitest@4.0.17)': dependencies: '@bcoe/v8-coverage': 1.0.2 '@vitest/utils': 4.0.17 @@ -20622,9 +20622,9 @@ snapshots: obug: 2.1.1 std-env: 3.10.0 tinyrainbow: 3.0.3 - vitest: 4.0.17(@opentelemetry/api@1.9.0)(@types/node@24.10.9)(@vitest/browser-webdriverio@4.0.17)(@vitest/ui@4.0.17)(happy-dom@20.3.3(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.2)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) + vitest: 4.0.17(@opentelemetry/api@1.9.0)(@types/node@24.10.9)(@vitest/browser-webdriverio@4.0.17)(@vitest/ui@4.0.17)(happy-dom@20.3.3(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.31.1)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) optionalDependencies: - '@vitest/browser': 4.0.17(bufferutil@4.0.9)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(utf-8-validate@6.0.5)(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1))(vitest@4.0.17) + '@vitest/browser': 4.0.17(bufferutil@4.0.9)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(utf-8-validate@6.0.5)(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.31.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1))(vitest@4.0.17) '@vitest/expect@4.0.17': dependencies: @@ -20635,14 +20635,14 @@ snapshots: chai: 6.2.1 tinyrainbow: 3.0.3 - '@vitest/mocker@4.0.17(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1))': + '@vitest/mocker@4.0.17(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.31.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1))': dependencies: '@vitest/spy': 4.0.17 estree-walker: 3.0.3 magic-string: 0.30.21 optionalDependencies: msw: 2.7.5(@types/node@24.10.9)(typescript@5.9.3) - vite: 7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) + vite: 7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.31.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) '@vitest/pretty-format@4.0.17': dependencies: @@ -20670,7 +20670,7 @@ snapshots: sirv: 3.0.2 tinyglobby: 0.2.15 tinyrainbow: 3.0.3 - vitest: 4.0.17(@opentelemetry/api@1.9.0)(@types/node@24.10.9)(@vitest/browser-webdriverio@4.0.17)(@vitest/ui@4.0.17)(happy-dom@20.3.3(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.2)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) + vitest: 4.0.17(@opentelemetry/api@1.9.0)(@types/node@24.10.9)(@vitest/browser-webdriverio@4.0.17)(@vitest/ui@4.0.17)(happy-dom@20.3.3(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.31.1)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) '@vitest/utils@4.0.17': dependencies: @@ -25630,54 +25630,54 @@ snapshots: dependencies: immediate: 3.0.6 - lightningcss-android-arm64@1.30.2: + lightningcss-android-arm64@1.31.1: optional: true - lightningcss-darwin-arm64@1.30.2: + lightningcss-darwin-arm64@1.31.1: optional: true - lightningcss-darwin-x64@1.30.2: + lightningcss-darwin-x64@1.31.1: optional: true - lightningcss-freebsd-x64@1.30.2: + lightningcss-freebsd-x64@1.31.1: optional: true - lightningcss-linux-arm-gnueabihf@1.30.2: + lightningcss-linux-arm-gnueabihf@1.31.1: optional: true - lightningcss-linux-arm64-gnu@1.30.2: + lightningcss-linux-arm64-gnu@1.31.1: optional: true - lightningcss-linux-arm64-musl@1.30.2: + lightningcss-linux-arm64-musl@1.31.1: optional: true - lightningcss-linux-x64-gnu@1.30.2: + lightningcss-linux-x64-gnu@1.31.1: optional: true - lightningcss-linux-x64-musl@1.30.2: + lightningcss-linux-x64-musl@1.31.1: optional: true - lightningcss-win32-arm64-msvc@1.30.2: + lightningcss-win32-arm64-msvc@1.31.1: optional: true - lightningcss-win32-x64-msvc@1.30.2: + lightningcss-win32-x64-msvc@1.31.1: optional: true - lightningcss@1.30.2: + lightningcss@1.31.1: dependencies: detect-libc: 2.1.2 optionalDependencies: - lightningcss-android-arm64: 1.30.2 - lightningcss-darwin-arm64: 1.30.2 - lightningcss-darwin-x64: 1.30.2 - lightningcss-freebsd-x64: 1.30.2 - lightningcss-linux-arm-gnueabihf: 1.30.2 - lightningcss-linux-arm64-gnu: 1.30.2 - lightningcss-linux-arm64-musl: 1.30.2 - lightningcss-linux-x64-gnu: 1.30.2 - lightningcss-linux-x64-musl: 1.30.2 - lightningcss-win32-arm64-msvc: 1.30.2 - lightningcss-win32-x64-msvc: 1.30.2 + lightningcss-android-arm64: 1.31.1 + lightningcss-darwin-arm64: 1.31.1 + lightningcss-darwin-x64: 1.31.1 + lightningcss-freebsd-x64: 1.31.1 + lightningcss-linux-arm-gnueabihf: 1.31.1 + lightningcss-linux-arm64-gnu: 1.31.1 + lightningcss-linux-arm64-musl: 1.31.1 + lightningcss-linux-x64-gnu: 1.31.1 + lightningcss-linux-x64-musl: 1.31.1 + lightningcss-win32-arm64-msvc: 1.31.1 + lightningcss-win32-x64-msvc: 1.31.1 lilconfig@2.1.0: {} @@ -28514,11 +28514,11 @@ snapshots: '@rolldown/binding-win32-x64-msvc': 1.0.0-beta.29 optional: true - rollup-plugin-stats@1.5.4(rolldown@1.0.0-beta.29)(rollup@4.52.0)(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1)): + rollup-plugin-stats@1.5.4(rolldown@1.0.0-beta.29)(rollup@4.52.0)(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.31.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1)): optionalDependencies: rolldown: 1.0.0-beta.29 rollup: 4.52.0 - vite: 7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) + vite: 7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.31.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) rollup-plugin-styles@4.0.0(rollup@4.52.0): dependencies: @@ -28547,13 +28547,13 @@ snapshots: '@rollup/pluginutils': 5.1.4(rollup@4.52.0) rollup: 4.52.0 - rollup-plugin-webpack-stats@2.1.9(rolldown@1.0.0-beta.29)(rollup@4.52.0)(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1)): + rollup-plugin-webpack-stats@2.1.9(rolldown@1.0.0-beta.29)(rollup@4.52.0)(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.31.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1)): dependencies: - rollup-plugin-stats: 1.5.4(rolldown@1.0.0-beta.29)(rollup@4.52.0)(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1)) + rollup-plugin-stats: 1.5.4(rolldown@1.0.0-beta.29)(rollup@4.52.0)(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.31.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1)) optionalDependencies: rolldown: 1.0.0-beta.29 rollup: 4.52.0 - vite: 7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) + vite: 7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.31.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) rollup@4.52.0: dependencies: @@ -30476,7 +30476,7 @@ snapshots: '@types/unist': 3.0.3 vfile-message: 4.0.2 - vite-plugin-dts@4.5.4(@types/node@24.10.9)(rollup@4.52.0)(typescript@5.9.3)(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1)): + vite-plugin-dts@4.5.4(@types/node@24.10.9)(rollup@4.52.0)(typescript@5.9.3)(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.31.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1)): dependencies: '@microsoft/api-extractor': 7.52.8(@types/node@24.10.9) '@rollup/pluginutils': 5.1.4(rollup@4.52.0) @@ -30489,27 +30489,27 @@ snapshots: magic-string: 0.30.21 typescript: 5.9.3 optionalDependencies: - vite: 7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) + vite: 7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.31.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) transitivePeerDependencies: - '@types/node' - rollup - supports-color - vite-plugin-static-copy@3.1.5(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1)): + vite-plugin-static-copy@3.1.5(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.31.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1)): dependencies: chokidar: 3.6.0 p-map: 7.0.4 picocolors: 1.1.1 tinyglobby: 0.2.15 - vite: 7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) + vite: 7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.31.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) - vite-plugin-svgo@2.0.0(typescript@5.9.3)(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1)): + vite-plugin-svgo@2.0.0(typescript@5.9.3)(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.31.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1)): dependencies: svgo: 3.3.2 typescript: 5.9.3 - vite: 7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) + vite: 7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.31.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) - vite-prerender-plugin@0.5.11(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1)): + vite-prerender-plugin@0.5.11(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.31.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1)): dependencies: kolorist: 1.8.0 magic-string: 0.30.21 @@ -30517,9 +30517,9 @@ snapshots: simple-code-frame: 1.3.0 source-map: 0.7.6 stack-trace: 1.0.0-pre2 - vite: 7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) + vite: 7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.31.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) - vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1): + vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.31.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1): dependencies: esbuild: 0.27.2 fdir: 6.5.0(picomatch@4.0.3) @@ -30532,17 +30532,17 @@ snapshots: fsevents: 2.3.3 jiti: 2.6.1 less: 4.1.3 - lightningcss: 1.30.2 + lightningcss: 1.31.1 sass: 1.91.0 sass-embedded: 1.91.0 terser: 5.44.0 tsx: 4.21.0 yaml: 2.8.1 - vitest@4.0.17(@opentelemetry/api@1.9.0)(@types/node@24.10.9)(@vitest/browser-webdriverio@4.0.17)(@vitest/ui@4.0.17)(happy-dom@20.3.3(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.2)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1): + vitest@4.0.17(@opentelemetry/api@1.9.0)(@types/node@24.10.9)(@vitest/browser-webdriverio@4.0.17)(@vitest/ui@4.0.17)(happy-dom@20.3.3(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.31.1)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1): dependencies: '@vitest/expect': 4.0.17 - '@vitest/mocker': 4.0.17(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1)) + '@vitest/mocker': 4.0.17(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.31.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1)) '@vitest/pretty-format': 4.0.17 '@vitest/runner': 4.0.17 '@vitest/snapshot': 4.0.17 @@ -30559,12 +30559,12 @@ snapshots: tinyexec: 1.0.2 tinyglobby: 0.2.15 tinyrainbow: 3.0.3 - vite: 7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) + vite: 7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.31.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) why-is-node-running: 2.3.0 optionalDependencies: '@opentelemetry/api': 1.9.0 '@types/node': 24.10.9 - '@vitest/browser-webdriverio': 4.0.17(bufferutil@4.0.9)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(utf-8-validate@6.0.5)(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.2)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1))(vitest@4.0.17)(webdriverio@9.23.2(bufferutil@4.0.9)(utf-8-validate@6.0.5)) + '@vitest/browser-webdriverio': 4.0.17(bufferutil@4.0.9)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(utf-8-validate@6.0.5)(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.31.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1))(vitest@4.0.17)(webdriverio@9.23.2(bufferutil@4.0.9)(utf-8-validate@6.0.5)) '@vitest/ui': 4.0.17(vitest@4.0.17) happy-dom: 20.3.3(bufferutil@4.0.9)(utf-8-validate@6.0.5) jsdom: 26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5) From 917e881faaca14180656ce3be2571e3db1147aa1 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 21 Jan 2026 10:43:23 +0000 Subject: [PATCH 162/353] chore(deps): update dependency @ckeditor/ckeditor5-dev-build-tools to v54.3.2 --- packages/ckeditor5-admonition/package.json | 2 +- packages/ckeditor5-footnotes/package.json | 2 +- .../ckeditor5-keyboard-marker/package.json | 2 +- packages/ckeditor5-math/package.json | 2 +- packages/ckeditor5-mermaid/package.json | 2 +- pnpm-lock.yaml | 64 +++++++++++-------- 6 files changed, 43 insertions(+), 31 deletions(-) diff --git a/packages/ckeditor5-admonition/package.json b/packages/ckeditor5-admonition/package.json index 2364bd8514..6e8907497f 100644 --- a/packages/ckeditor5-admonition/package.json +++ b/packages/ckeditor5-admonition/package.json @@ -21,7 +21,7 @@ "ckeditor5-metadata.json" ], "devDependencies": { - "@ckeditor/ckeditor5-dev-build-tools": "54.3.0", + "@ckeditor/ckeditor5-dev-build-tools": "54.3.2", "@ckeditor/ckeditor5-inspector": ">=4.1.0", "@ckeditor/ckeditor5-package-tools": "5.0.1", "@typescript-eslint/eslint-plugin": "8.53.0", diff --git a/packages/ckeditor5-footnotes/package.json b/packages/ckeditor5-footnotes/package.json index e387a85184..0bec430bff 100644 --- a/packages/ckeditor5-footnotes/package.json +++ b/packages/ckeditor5-footnotes/package.json @@ -22,7 +22,7 @@ "ckeditor5-metadata.json" ], "devDependencies": { - "@ckeditor/ckeditor5-dev-build-tools": "54.3.0", + "@ckeditor/ckeditor5-dev-build-tools": "54.3.2", "@ckeditor/ckeditor5-inspector": ">=4.1.0", "@ckeditor/ckeditor5-package-tools": "5.0.1", "@typescript-eslint/eslint-plugin": "8.53.0", diff --git a/packages/ckeditor5-keyboard-marker/package.json b/packages/ckeditor5-keyboard-marker/package.json index e72036a08b..590f80fc68 100644 --- a/packages/ckeditor5-keyboard-marker/package.json +++ b/packages/ckeditor5-keyboard-marker/package.json @@ -24,7 +24,7 @@ "ckeditor5-metadata.json" ], "devDependencies": { - "@ckeditor/ckeditor5-dev-build-tools": "54.3.0", + "@ckeditor/ckeditor5-dev-build-tools": "54.3.2", "@ckeditor/ckeditor5-inspector": ">=4.1.0", "@ckeditor/ckeditor5-package-tools": "5.0.1", "@typescript-eslint/eslint-plugin": "8.53.0", diff --git a/packages/ckeditor5-math/package.json b/packages/ckeditor5-math/package.json index 259cee11d9..e6088e757f 100644 --- a/packages/ckeditor5-math/package.json +++ b/packages/ckeditor5-math/package.json @@ -24,7 +24,7 @@ "ckeditor5-metadata.json" ], "devDependencies": { - "@ckeditor/ckeditor5-dev-build-tools": "54.3.0", + "@ckeditor/ckeditor5-dev-build-tools": "54.3.2", "@ckeditor/ckeditor5-inspector": ">=4.1.0", "@ckeditor/ckeditor5-package-tools": "5.0.1", "@typescript-eslint/eslint-plugin": "8.53.0", diff --git a/packages/ckeditor5-mermaid/package.json b/packages/ckeditor5-mermaid/package.json index 34d580fff2..1274dbd0d6 100644 --- a/packages/ckeditor5-mermaid/package.json +++ b/packages/ckeditor5-mermaid/package.json @@ -24,7 +24,7 @@ "ckeditor5-metadata.json" ], "devDependencies": { - "@ckeditor/ckeditor5-dev-build-tools": "54.3.0", + "@ckeditor/ckeditor5-dev-build-tools": "54.3.2", "@ckeditor/ckeditor5-inspector": ">=4.1.0", "@ckeditor/ckeditor5-package-tools": "5.0.1", "@typescript-eslint/eslint-plugin": "8.53.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 24521f0d5e..935b33b9f0 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -897,8 +897,8 @@ importers: packages/ckeditor5-admonition: devDependencies: '@ckeditor/ckeditor5-dev-build-tools': - specifier: 54.3.0 - version: 54.3.0(@swc/helpers@0.5.17)(tslib@2.8.1)(typescript@5.9.3) + specifier: 54.3.2 + version: 54.3.2(@swc/helpers@0.5.17)(tslib@2.8.1)(typescript@5.9.3) '@ckeditor/ckeditor5-inspector': specifier: '>=4.1.0' version: 5.0.0 @@ -957,8 +957,8 @@ importers: packages/ckeditor5-footnotes: devDependencies: '@ckeditor/ckeditor5-dev-build-tools': - specifier: 54.3.0 - version: 54.3.0(@swc/helpers@0.5.17)(tslib@2.8.1)(typescript@5.9.3) + specifier: 54.3.2 + version: 54.3.2(@swc/helpers@0.5.17)(tslib@2.8.1)(typescript@5.9.3) '@ckeditor/ckeditor5-inspector': specifier: '>=4.1.0' version: 5.0.0 @@ -1017,8 +1017,8 @@ importers: packages/ckeditor5-keyboard-marker: devDependencies: '@ckeditor/ckeditor5-dev-build-tools': - specifier: 54.3.0 - version: 54.3.0(@swc/helpers@0.5.17)(tslib@2.8.1)(typescript@5.9.3) + specifier: 54.3.2 + version: 54.3.2(@swc/helpers@0.5.17)(tslib@2.8.1)(typescript@5.9.3) '@ckeditor/ckeditor5-inspector': specifier: '>=4.1.0' version: 5.0.0 @@ -1084,8 +1084,8 @@ importers: version: 0.108.2 devDependencies: '@ckeditor/ckeditor5-dev-build-tools': - specifier: 54.3.0 - version: 54.3.0(@swc/helpers@0.5.17)(tslib@2.8.1)(typescript@5.9.3) + specifier: 54.3.2 + version: 54.3.2(@swc/helpers@0.5.17)(tslib@2.8.1)(typescript@5.9.3) '@ckeditor/ckeditor5-inspector': specifier: '>=4.1.0' version: 5.0.0 @@ -1151,8 +1151,8 @@ importers: version: 4.17.22 devDependencies: '@ckeditor/ckeditor5-dev-build-tools': - specifier: 54.3.0 - version: 54.3.0(@swc/helpers@0.5.17)(tslib@2.8.1)(typescript@5.9.3) + specifier: 54.3.2 + version: 54.3.2(@swc/helpers@0.5.17)(tslib@2.8.1)(typescript@5.9.3) '@ckeditor/ckeditor5-inspector': specifier: '>=4.1.0' version: 5.0.0 @@ -1852,8 +1852,8 @@ packages: '@ckeditor/ckeditor5-core@47.4.0': resolution: {integrity: sha512-upV/3x9fhgFWxVVtwR47zCOAvZKgP8a8N7UQOFwfs3Tr52+oE1gULWKTiS9079MBaXaIqtM/EbelNdvBh4gOGg==} - '@ckeditor/ckeditor5-dev-build-tools@54.3.0': - resolution: {integrity: sha512-46gPUhiSdDdFBsGewGgSnVq2E5vkwXBVN2L9dbQ3t9Wta3F4zjXxw+496mAq71hAVxfZmyACjaVT3pAJojUIRw==} + '@ckeditor/ckeditor5-dev-build-tools@54.3.2': + resolution: {integrity: sha512-xmK8/vbx5uVvkLwZ5kpW5A55LKYDRFQxYvh8rcybYG/B3yNgKrq7oJXvjVPTIqWiMT3JpjJ4J/NttIYDaXZhCw==} engines: {node: '>=24.11.0', npm: '>=5.7.1'} hasBin: true @@ -15242,6 +15242,8 @@ snapshots: '@ckeditor/ckeditor5-core': 47.4.0 '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-code-block@47.4.0(patch_hash=2361d8caad7d6b5bddacc3a3b4aa37dbfba260b1c1b22a450413a79c1bb1ce95)': dependencies: @@ -15307,8 +15309,10 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.4.0 '@ckeditor/ckeditor5-watchdog': 47.4.0 es-toolkit: 1.39.5 + transitivePeerDependencies: + - supports-color - '@ckeditor/ckeditor5-dev-build-tools@54.3.0(@swc/helpers@0.5.17)(tslib@2.8.1)(typescript@5.9.3)': + '@ckeditor/ckeditor5-dev-build-tools@54.3.2(@swc/helpers@0.5.17)(tslib@2.8.1)(typescript@5.9.3)': dependencies: '@rollup/plugin-commonjs': 28.0.9(rollup@4.52.0) '@rollup/plugin-json': 6.1.0(rollup@4.52.0) @@ -15432,6 +15436,8 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 es-toolkit: 1.39.5 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-editor-classic@47.4.0': dependencies: @@ -15970,6 +15976,8 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.4.0 '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-restricted-editing@47.4.0': dependencies: @@ -16431,9 +16439,9 @@ snapshots: '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0) '@csstools/css-tokenizer': 4.0.0 - '@csstools/selector-resolve-nested@3.1.0(postcss-selector-parser@7.1.0)': + '@csstools/selector-resolve-nested@3.1.0(postcss-selector-parser@7.1.1)': dependencies: - postcss-selector-parser: 7.1.0 + postcss-selector-parser: 7.1.1 '@csstools/selector-resolve-nested@4.0.0(postcss-selector-parser@7.1.1)': dependencies: @@ -16443,6 +16451,10 @@ snapshots: dependencies: postcss-selector-parser: 7.1.0 + '@csstools/selector-specificity@5.0.0(postcss-selector-parser@7.1.1)': + dependencies: + postcss-selector-parser: 7.1.1 + '@csstools/selector-specificity@6.0.0(postcss-selector-parser@7.1.1)': dependencies: postcss-selector-parser: 7.1.1 @@ -27456,7 +27468,7 @@ snapshots: postcss-calc@10.1.1(postcss@8.5.6): dependencies: postcss: 8.5.6 - postcss-selector-parser: 7.1.0 + postcss-selector-parser: 7.1.1 postcss-value-parser: 4.2.0 postcss-calc@8.2.4(postcss@8.5.6): @@ -27500,7 +27512,7 @@ snapshots: postcss-discard-comments@7.0.4(postcss@8.5.6): dependencies: postcss: 8.5.6 - postcss-selector-parser: 7.1.0 + postcss-selector-parser: 7.1.1 postcss-discard-duplicates@5.1.0(postcss@8.5.6): dependencies: @@ -27585,7 +27597,7 @@ snapshots: caniuse-api: 3.0.0 cssnano-utils: 5.0.1(postcss@8.5.6) postcss: 8.5.6 - postcss-selector-parser: 7.1.0 + postcss-selector-parser: 7.1.1 postcss-minify-font-values@5.1.0(postcss@8.5.6): dependencies: @@ -27634,7 +27646,7 @@ snapshots: dependencies: cssesc: 3.0.0 postcss: 8.5.6 - postcss-selector-parser: 7.1.0 + postcss-selector-parser: 7.1.1 postcss-mixins@11.0.3(postcss@8.5.6): dependencies: @@ -27652,13 +27664,13 @@ snapshots: dependencies: icss-utils: 5.1.0(postcss@8.5.6) postcss: 8.5.6 - postcss-selector-parser: 7.1.0 + postcss-selector-parser: 7.1.1 postcss-value-parser: 4.2.0 postcss-modules-scope@3.2.1(postcss@8.5.6): dependencies: postcss: 8.5.6 - postcss-selector-parser: 7.1.0 + postcss-selector-parser: 7.1.1 postcss-modules-values@4.0.0(postcss@8.5.6): dependencies: @@ -27667,10 +27679,10 @@ snapshots: postcss-nesting@13.0.2(postcss@8.5.6): dependencies: - '@csstools/selector-resolve-nested': 3.1.0(postcss-selector-parser@7.1.0) - '@csstools/selector-specificity': 5.0.0(postcss-selector-parser@7.1.0) + '@csstools/selector-resolve-nested': 3.1.0(postcss-selector-parser@7.1.1) + '@csstools/selector-specificity': 5.0.0(postcss-selector-parser@7.1.1) postcss: 8.5.6 - postcss-selector-parser: 7.1.0 + postcss-selector-parser: 7.1.1 postcss-normalize-charset@5.1.0(postcss@8.5.6): dependencies: @@ -27842,7 +27854,7 @@ snapshots: postcss-unique-selectors@7.0.4(postcss@8.5.6): dependencies: postcss: 8.5.6 - postcss-selector-parser: 7.1.0 + postcss-selector-parser: 7.1.1 postcss-value-parser@4.2.0: {} @@ -29509,7 +29521,7 @@ snapshots: dependencies: browserslist: 4.26.2 postcss: 8.5.6 - postcss-selector-parser: 7.1.0 + postcss-selector-parser: 7.1.1 stylelint-config-ckeditor5@13.0.0(stylelint@17.0.0(typescript@5.9.3)): dependencies: From 8a280c2f9dbbb922e910f10324a6c4fbe0258c1d Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 21 Jan 2026 17:07:19 +0000 Subject: [PATCH 163/353] chore(deps): update dependency happy-dom to v20.3.4 --- apps/client/package.json | 2 +- package.json | 2 +- pnpm-lock.yaml | 50 +++++++++++++++++++++++----------------- 3 files changed, 31 insertions(+), 23 deletions(-) diff --git a/apps/client/package.json b/apps/client/package.json index 0f3bd99479..f8c2e98227 100644 --- a/apps/client/package.json +++ b/apps/client/package.json @@ -78,7 +78,7 @@ "@types/reveal.js": "5.2.2", "@types/tabulator-tables": "6.3.1", "copy-webpack-plugin": "13.0.1", - "happy-dom": "20.3.3", + "happy-dom": "20.3.4", "lightningcss": "1.31.1", "script-loader": "0.7.2", "vite-plugin-static-copy": "3.1.5" diff --git a/package.json b/package.json index 381cca4bdd..8bb9583147 100644 --- a/package.json +++ b/package.json @@ -63,7 +63,7 @@ "eslint-config-prettier": "10.1.8", "eslint-plugin-playwright": "2.5.0", "eslint-plugin-simple-import-sort": "12.1.1", - "happy-dom": "20.3.3", + "happy-dom": "20.3.4", "http-server": "14.1.1", "jiti": "2.6.1", "js-yaml": "4.1.1", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 80b8e9659b..69981a1a36 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -92,8 +92,8 @@ importers: specifier: 12.1.1 version: 12.1.1(eslint@9.39.2(jiti@2.6.1)) happy-dom: - specifier: 20.3.3 - version: 20.3.3(bufferutil@4.0.9)(utf-8-validate@6.0.5) + specifier: 20.3.4 + version: 20.3.4(bufferutil@4.0.9)(utf-8-validate@6.0.5) http-server: specifier: 14.1.1 version: 14.1.1 @@ -135,7 +135,7 @@ importers: version: 4.5.4(@types/node@24.10.9)(rollup@4.52.0)(typescript@5.9.3)(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.31.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1)) vitest: specifier: 4.0.17 - version: 4.0.17(@opentelemetry/api@1.9.0)(@types/node@24.10.9)(@vitest/browser-webdriverio@4.0.17)(@vitest/ui@4.0.17)(happy-dom@20.3.3(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.31.1)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) + version: 4.0.17(@opentelemetry/api@1.9.0)(@types/node@24.10.9)(@vitest/browser-webdriverio@4.0.17)(@vitest/ui@4.0.17)(happy-dom@20.3.4(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.31.1)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) apps/build-docs: devDependencies: @@ -345,8 +345,8 @@ importers: specifier: 13.0.1 version: 13.0.1(webpack@5.101.3(esbuild@0.27.2)) happy-dom: - specifier: 20.3.3 - version: 20.3.3(bufferutil@4.0.9)(utf-8-validate@6.0.5) + specifier: 20.3.4 + version: 20.3.4(bufferutil@4.0.9)(utf-8-validate@6.0.5) lightningcss: specifier: 1.31.1 version: 1.31.1 @@ -858,7 +858,7 @@ importers: version: 7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.31.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) vitest: specifier: 4.0.17 - version: 4.0.17(@opentelemetry/api@1.9.0)(@types/node@24.10.9)(@vitest/browser-webdriverio@4.0.17)(@vitest/ui@4.0.17)(happy-dom@20.3.3(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.31.1)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) + version: 4.0.17(@opentelemetry/api@1.9.0)(@types/node@24.10.9)(@vitest/browser-webdriverio@4.0.17)(@vitest/ui@4.0.17)(happy-dom@20.3.4(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.31.1)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) packages/ckeditor5: dependencies: @@ -949,7 +949,7 @@ importers: version: 2.0.0(typescript@5.9.3)(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.31.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1)) vitest: specifier: 4.0.17 - version: 4.0.17(@opentelemetry/api@1.9.0)(@types/node@24.10.9)(@vitest/browser-webdriverio@4.0.17)(@vitest/ui@4.0.17)(happy-dom@20.3.3(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.31.1)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) + version: 4.0.17(@opentelemetry/api@1.9.0)(@types/node@24.10.9)(@vitest/browser-webdriverio@4.0.17)(@vitest/ui@4.0.17)(happy-dom@20.3.4(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.31.1)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) webdriverio: specifier: 9.23.2 version: 9.23.2(bufferutil@4.0.9)(utf-8-validate@6.0.5) @@ -1009,7 +1009,7 @@ importers: version: 2.0.0(typescript@5.9.3)(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.31.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1)) vitest: specifier: 4.0.17 - version: 4.0.17(@opentelemetry/api@1.9.0)(@types/node@24.10.9)(@vitest/browser-webdriverio@4.0.17)(@vitest/ui@4.0.17)(happy-dom@20.3.3(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.31.1)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) + version: 4.0.17(@opentelemetry/api@1.9.0)(@types/node@24.10.9)(@vitest/browser-webdriverio@4.0.17)(@vitest/ui@4.0.17)(happy-dom@20.3.4(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.31.1)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) webdriverio: specifier: 9.23.2 version: 9.23.2(bufferutil@4.0.9)(utf-8-validate@6.0.5) @@ -1069,7 +1069,7 @@ importers: version: 2.0.0(typescript@5.9.3)(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.31.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1)) vitest: specifier: 4.0.17 - version: 4.0.17(@opentelemetry/api@1.9.0)(@types/node@24.10.9)(@vitest/browser-webdriverio@4.0.17)(@vitest/ui@4.0.17)(happy-dom@20.3.3(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.31.1)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) + version: 4.0.17(@opentelemetry/api@1.9.0)(@types/node@24.10.9)(@vitest/browser-webdriverio@4.0.17)(@vitest/ui@4.0.17)(happy-dom@20.3.4(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.31.1)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) webdriverio: specifier: 9.23.2 version: 9.23.2(bufferutil@4.0.9)(utf-8-validate@6.0.5) @@ -1136,7 +1136,7 @@ importers: version: 2.0.0(typescript@5.9.3)(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.31.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1)) vitest: specifier: 4.0.17 - version: 4.0.17(@opentelemetry/api@1.9.0)(@types/node@24.10.9)(@vitest/browser-webdriverio@4.0.17)(@vitest/ui@4.0.17)(happy-dom@20.3.3(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.31.1)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) + version: 4.0.17(@opentelemetry/api@1.9.0)(@types/node@24.10.9)(@vitest/browser-webdriverio@4.0.17)(@vitest/ui@4.0.17)(happy-dom@20.3.4(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.31.1)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) webdriverio: specifier: 9.23.2 version: 9.23.2(bufferutil@4.0.9)(utf-8-validate@6.0.5) @@ -1203,7 +1203,7 @@ importers: version: 2.0.0(typescript@5.9.3)(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.31.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1)) vitest: specifier: 4.0.17 - version: 4.0.17(@opentelemetry/api@1.9.0)(@types/node@24.10.9)(@vitest/browser-webdriverio@4.0.17)(@vitest/ui@4.0.17)(happy-dom@20.3.3(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.31.1)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) + version: 4.0.17(@opentelemetry/api@1.9.0)(@types/node@24.10.9)(@vitest/browser-webdriverio@4.0.17)(@vitest/ui@4.0.17)(happy-dom@20.3.4(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.31.1)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) webdriverio: specifier: 9.23.2 version: 9.23.2(bufferutil@4.0.9)(utf-8-validate@6.0.5) @@ -8746,8 +8746,8 @@ packages: engines: {node: '>=0.4.7'} hasBin: true - happy-dom@20.3.3: - resolution: {integrity: sha512-hM9gltmtQLfmWPqoPreUtRdP3nZCSzQEw7l/JC+up5CxquDykhYFKzIzoFFeVev3AGFEULNvsbE8fpZPgxUYEQ==} + happy-dom@20.3.4: + resolution: {integrity: sha512-rfbiwB6OKxZFIFQ7SRnCPB2WL9WhyXsFoTfecYgeCeFSOBxvkWLaXsdv5ehzJrfqwXQmDephAKWLRQoFoJwrew==} engines: {node: '>=20.0.0'} has-bigints@1.1.0: @@ -15242,6 +15242,8 @@ snapshots: '@ckeditor/ckeditor5-core': 47.4.0 '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-code-block@47.4.0(patch_hash=2361d8caad7d6b5bddacc3a3b4aa37dbfba260b1c1b22a450413a79c1bb1ce95)': dependencies: @@ -15443,6 +15445,8 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 es-toolkit: 1.39.5 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-editor-decoupled@47.4.0': dependencies: @@ -15972,6 +15976,8 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.4.0 '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-restricted-editing@47.4.0': dependencies: @@ -16016,6 +16022,8 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.4.0 '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-slash-command@47.4.0': dependencies: @@ -20569,7 +20577,7 @@ snapshots: '@vitest/browser-webdriverio@4.0.17(bufferutil@4.0.9)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(utf-8-validate@6.0.5)(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.31.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1))(vitest@4.0.17)(webdriverio@9.23.2(bufferutil@4.0.9)(utf-8-validate@6.0.5))': dependencies: '@vitest/browser': 4.0.17(bufferutil@4.0.9)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(utf-8-validate@6.0.5)(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.31.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1))(vitest@4.0.17) - vitest: 4.0.17(@opentelemetry/api@1.9.0)(@types/node@24.10.9)(@vitest/browser-webdriverio@4.0.17)(@vitest/ui@4.0.17)(happy-dom@20.3.3(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.31.1)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) + vitest: 4.0.17(@opentelemetry/api@1.9.0)(@types/node@24.10.9)(@vitest/browser-webdriverio@4.0.17)(@vitest/ui@4.0.17)(happy-dom@20.3.4(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.31.1)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) webdriverio: 9.23.2(bufferutil@4.0.9)(utf-8-validate@6.0.5) transitivePeerDependencies: - bufferutil @@ -20586,7 +20594,7 @@ snapshots: pngjs: 7.0.0 sirv: 3.0.2 tinyrainbow: 3.0.3 - vitest: 4.0.17(@opentelemetry/api@1.9.0)(@types/node@24.10.9)(@vitest/browser-webdriverio@4.0.17)(@vitest/ui@4.0.17)(happy-dom@20.3.3(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.31.1)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) + vitest: 4.0.17(@opentelemetry/api@1.9.0)(@types/node@24.10.9)(@vitest/browser-webdriverio@4.0.17)(@vitest/ui@4.0.17)(happy-dom@20.3.4(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.31.1)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) ws: 8.19.0(bufferutil@4.0.9)(utf-8-validate@6.0.5) transitivePeerDependencies: - bufferutil @@ -20606,7 +20614,7 @@ snapshots: magicast: 0.5.1 obug: 2.1.1 tinyrainbow: 3.0.3 - vitest: 4.0.17(@opentelemetry/api@1.9.0)(@types/node@24.10.9)(@vitest/browser-webdriverio@4.0.17)(@vitest/ui@4.0.17)(happy-dom@20.3.3(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.31.1)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) + vitest: 4.0.17(@opentelemetry/api@1.9.0)(@types/node@24.10.9)(@vitest/browser-webdriverio@4.0.17)(@vitest/ui@4.0.17)(happy-dom@20.3.4(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.31.1)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) transitivePeerDependencies: - supports-color @@ -20622,7 +20630,7 @@ snapshots: obug: 2.1.1 std-env: 3.10.0 tinyrainbow: 3.0.3 - vitest: 4.0.17(@opentelemetry/api@1.9.0)(@types/node@24.10.9)(@vitest/browser-webdriverio@4.0.17)(@vitest/ui@4.0.17)(happy-dom@20.3.3(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.31.1)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) + vitest: 4.0.17(@opentelemetry/api@1.9.0)(@types/node@24.10.9)(@vitest/browser-webdriverio@4.0.17)(@vitest/ui@4.0.17)(happy-dom@20.3.4(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.31.1)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) optionalDependencies: '@vitest/browser': 4.0.17(bufferutil@4.0.9)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(utf-8-validate@6.0.5)(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.31.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1))(vitest@4.0.17) @@ -20670,7 +20678,7 @@ snapshots: sirv: 3.0.2 tinyglobby: 0.2.15 tinyrainbow: 3.0.3 - vitest: 4.0.17(@opentelemetry/api@1.9.0)(@types/node@24.10.9)(@vitest/browser-webdriverio@4.0.17)(@vitest/ui@4.0.17)(happy-dom@20.3.3(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.31.1)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) + vitest: 4.0.17(@opentelemetry/api@1.9.0)(@types/node@24.10.9)(@vitest/browser-webdriverio@4.0.17)(@vitest/ui@4.0.17)(happy-dom@20.3.4(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.31.1)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) '@vitest/utils@4.0.17': dependencies: @@ -24457,7 +24465,7 @@ snapshots: optionalDependencies: uglify-js: 3.19.3 - happy-dom@20.3.3(bufferutil@4.0.9)(utf-8-validate@6.0.5): + happy-dom@20.3.4(bufferutil@4.0.9)(utf-8-validate@6.0.5): dependencies: '@types/node': 24.10.9 '@types/whatwg-mimetype': 3.0.2 @@ -30539,7 +30547,7 @@ snapshots: tsx: 4.21.0 yaml: 2.8.1 - vitest@4.0.17(@opentelemetry/api@1.9.0)(@types/node@24.10.9)(@vitest/browser-webdriverio@4.0.17)(@vitest/ui@4.0.17)(happy-dom@20.3.3(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.31.1)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1): + vitest@4.0.17(@opentelemetry/api@1.9.0)(@types/node@24.10.9)(@vitest/browser-webdriverio@4.0.17)(@vitest/ui@4.0.17)(happy-dom@20.3.4(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.31.1)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1): dependencies: '@vitest/expect': 4.0.17 '@vitest/mocker': 4.0.17(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.31.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1)) @@ -30566,7 +30574,7 @@ snapshots: '@types/node': 24.10.9 '@vitest/browser-webdriverio': 4.0.17(bufferutil@4.0.9)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(utf-8-validate@6.0.5)(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.31.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1))(vitest@4.0.17)(webdriverio@9.23.2(bufferutil@4.0.9)(utf-8-validate@6.0.5)) '@vitest/ui': 4.0.17(vitest@4.0.17) - happy-dom: 20.3.3(bufferutil@4.0.9)(utf-8-validate@6.0.5) + happy-dom: 20.3.4(bufferutil@4.0.9)(utf-8-validate@6.0.5) jsdom: 26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5) transitivePeerDependencies: - jiti From 227be184ac0a13c55d4e3cba302a43ea40ffb224 Mon Sep 17 00:00:00 2001 From: Elian Doran <contact@eliandoran.me> Date: Wed, 21 Jan 2026 22:34:36 +0200 Subject: [PATCH 164/353] fix(shortcuts): overlap on azerty due to key matches --- apps/client/src/services/shortcuts.spec.ts | 26 +++++++++++++++++----- apps/client/src/services/shortcuts.ts | 9 +++++--- 2 files changed, 27 insertions(+), 8 deletions(-) diff --git a/apps/client/src/services/shortcuts.spec.ts b/apps/client/src/services/shortcuts.spec.ts index f2170da30d..c8f2d9b643 100644 --- a/apps/client/src/services/shortcuts.spec.ts +++ b/apps/client/src/services/shortcuts.spec.ts @@ -62,9 +62,10 @@ describe("shortcuts", () => { }); describe("keyMatches", () => { - const createKeyboardEvent = (key: string, code?: string) => ({ + const createKeyboardEvent = (key: string, code?: string, extraProps: Partial<KeyboardEvent> = {}) => ({ key, - code: code || `Key${key.toUpperCase()}` + code: code || `Key${key.toUpperCase()}`, + ...extraProps } as KeyboardEvent); it("should match regular letter keys using key code", () => { @@ -102,17 +103,23 @@ describe("shortcuts", () => { consoleSpy.mockRestore(); }); + it("should match azerty keys", () => { + const event = createKeyboardEvent("A", "KeyQ"); + expect(keyMatches(event, "a")).toBe(true); + expect(keyMatches(event, "q")).toBe(false); + }); + it("should match letter keys using code when key is a special character (macOS Alt behavior)", () => { // On macOS, pressing Option/Alt + A produces 'å' as the key, but code is still 'KeyA' - const macOSAltAEvent = createKeyboardEvent("å", "KeyA"); + const macOSAltAEvent = createKeyboardEvent("å", "KeyA", { altKey: true }); expect(keyMatches(macOSAltAEvent, "a")).toBe(true); // Option + H produces '˙' - const macOSAltHEvent = createKeyboardEvent("˙", "KeyH"); + const macOSAltHEvent = createKeyboardEvent("˙", "KeyH", { altKey: true }); expect(keyMatches(macOSAltHEvent, "h")).toBe(true); // Option + S produces 'ß' - const macOSAltSEvent = createKeyboardEvent("ß", "KeyS"); + const macOSAltSEvent = createKeyboardEvent("ß", "KeyS", { altKey: true }); expect(keyMatches(macOSAltSEvent, "s")).toBe(true); }); }); @@ -216,6 +223,15 @@ describe("shortcuts", () => { consoleSpy.mockRestore(); }); + it("matches azerty", () => { + const event = createKeyboardEvent({ + key: "a", + code: "KeyQ", + ctrlKey: true + }); + expect(matchesShortcut(event, "Ctrl+A")).toBe(true); + }); + it("should match Alt+letter shortcuts on macOS where key is a special character", () => { // On macOS, pressing Option/Alt + A produces 'å' but code remains 'KeyA' const macOSAltAEvent = createKeyboardEvent({ diff --git a/apps/client/src/services/shortcuts.ts b/apps/client/src/services/shortcuts.ts index 63db45302d..c367ecac31 100644 --- a/apps/client/src/services/shortcuts.ts +++ b/apps/client/src/services/shortcuts.ts @@ -215,9 +215,12 @@ export function keyMatches(e: KeyboardEvent, key: string): boolean { // For letter keys, use the physical key code for consistency // On macOS, Option/Alt key produces special characters, so we must use e.code if (key.length === 1 && key >= 'a' && key <= 'z') { - // e.code is like "KeyA", "KeyB", etc. - const expectedCode = `Key${key.toUpperCase()}`; - return e.code === expectedCode || e.key.toLowerCase() === key.toLowerCase(); + if (e.altKey) { + // e.code is like "KeyA", "KeyB", etc. + const expectedCode = `Key${key.toUpperCase()}`; + return e.code === expectedCode || e.key.toLowerCase() === key.toLowerCase(); + } + return e.key.toLowerCase() === key.toLowerCase(); } // For regular keys, check both key and code as fallback From 9577aa2abe243be9187be8d60fb725bb821cf7b6 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 22 Jan 2026 01:45:37 +0000 Subject: [PATCH 165/353] fix(deps): update dependency @preact/signals to v2.6.1 --- apps/client/package.json | 2 +- pnpm-lock.yaml | 20 +++++--------------- 2 files changed, 6 insertions(+), 16 deletions(-) diff --git a/apps/client/package.json b/apps/client/package.json index f429465319..b9fa4406fa 100644 --- a/apps/client/package.json +++ b/apps/client/package.json @@ -27,7 +27,7 @@ "@mermaid-js/layout-elk": "0.2.0", "@mind-elixir/node-menu": "5.0.1", "@popperjs/core": "2.11.8", - "@preact/signals": "2.6.0", + "@preact/signals": "2.6.1", "@triliumnext/ckeditor5": "workspace:*", "@triliumnext/codemirror": "workspace:*", "@triliumnext/commons": "workspace:*", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index f9cc1a8dc8..cd23092264 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -197,8 +197,8 @@ importers: specifier: 2.11.8 version: 2.11.8 '@preact/signals': - specifier: 2.6.0 - version: 2.6.0(preact@10.28.2) + specifier: 2.6.1 + version: 2.6.1(preact@10.28.2) '@triliumnext/ckeditor5': specifier: workspace:* version: link:../../packages/ckeditor5 @@ -4046,8 +4046,8 @@ packages: '@preact/signals-core@1.12.2': resolution: {integrity: sha512-5Yf8h1Ke3SMHr15xl630KtwPTW4sYDFkkxS0vQ8UiQLWwZQnrF9IKaVG1mN5VcJz52EcWs2acsc/Npjha/7ysA==} - '@preact/signals@2.6.0': - resolution: {integrity: sha512-a22Mh1CCA+PaqobdV2YfeZ30PGywp/QnhCBNVDIsHUdkuqpYcbxt0vgC78JYaicBqWxAOGXLoExj5WHaZ/VKvg==} + '@preact/signals@2.6.1': + resolution: {integrity: sha512-Gp3DI1T/0YyirwJnImR8l9xyVJgKiVzJXmEhic1/7SPw3zStrsvuBpwKnD609CzsIdzxprWa6yTNXN+VLLZPGQ==} peerDependencies: preact: 10.28.2 @@ -15242,8 +15242,6 @@ snapshots: '@ckeditor/ckeditor5-core': 47.4.0 '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-code-block@47.4.0(patch_hash=2361d8caad7d6b5bddacc3a3b4aa37dbfba260b1c1b22a450413a79c1bb1ce95)': dependencies: @@ -15445,8 +15443,6 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 es-toolkit: 1.39.5 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-editor-decoupled@47.4.0': dependencies: @@ -15465,8 +15461,6 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 es-toolkit: 1.39.5 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-editor-multi-root@47.4.0': dependencies: @@ -15489,8 +15483,6 @@ snapshots: '@ckeditor/ckeditor5-table': 47.4.0 '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-emoji@47.4.0': dependencies: @@ -15673,8 +15665,6 @@ snapshots: '@ckeditor/ckeditor5-widget': 47.4.0 ckeditor5: 47.4.0 es-toolkit: 1.39.5 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-icons@47.4.0': {} @@ -18520,7 +18510,7 @@ snapshots: '@preact/signals-core@1.12.2': {} - '@preact/signals@2.6.0(preact@10.28.2)': + '@preact/signals@2.6.1(preact@10.28.2)': dependencies: '@preact/signals-core': 1.12.2 preact: 10.28.2 From 8ca84d183c72aad0101019d9e89d2050987be1aa Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 22 Jan 2026 02:03:34 +0000 Subject: [PATCH 166/353] fix(deps): update dependency lodash-es to v4.17.23 [security] --- packages/ckeditor5-mermaid/package.json | 2 +- pnpm-lock.yaml | 24 ++++++++++-------------- 2 files changed, 11 insertions(+), 15 deletions(-) diff --git a/packages/ckeditor5-mermaid/package.json b/packages/ckeditor5-mermaid/package.json index 34d580fff2..3a2600cbea 100644 --- a/packages/ckeditor5-mermaid/package.json +++ b/packages/ckeditor5-mermaid/package.json @@ -71,6 +71,6 @@ }, "dependencies": { "@types/lodash-es": "4.17.12", - "lodash-es": "4.17.22" + "lodash-es": "4.17.23" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index f9cc1a8dc8..b77882ff6b 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1147,8 +1147,8 @@ importers: specifier: 4.17.12 version: 4.17.12 lodash-es: - specifier: 4.17.22 - version: 4.17.22 + specifier: 4.17.23 + version: 4.17.23 devDependencies: '@ckeditor/ckeditor5-dev-build-tools': specifier: 54.3.0 @@ -9906,8 +9906,8 @@ packages: lodash-es@4.17.21: resolution: {integrity: sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==} - lodash-es@4.17.22: - resolution: {integrity: sha512-XEawp1t0gxSi9x01glktRZ5HDy0HXqrM0x5pXQM98EaI0NxO6jVM7omDOxsuEo5UIASAnm2bRp1Jt/e0a2XU8Q==} + lodash-es@4.17.23: + resolution: {integrity: sha512-kVI48u3PZr38HdYz98UmfPnXl2DXrpdctLrFLCd3kOx1xUkOmpFPx7gCWWM5MPkL/fD8zb+Ph0QzjGFs4+hHWg==} lodash.clonedeep@4.5.0: resolution: {integrity: sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ==} @@ -15445,8 +15445,6 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 es-toolkit: 1.39.5 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-editor-decoupled@47.4.0': dependencies: @@ -15489,8 +15487,6 @@ snapshots: '@ckeditor/ckeditor5-table': 47.4.0 '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-emoji@47.4.0': dependencies: @@ -15976,8 +15972,6 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.4.0 '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-restricted-editing@47.4.0': dependencies: @@ -16175,6 +16169,8 @@ snapshots: '@ckeditor/ckeditor5-icons': 47.4.0 '@ckeditor/ckeditor5-ui': 47.4.0 '@ckeditor/ckeditor5-utils': 47.4.0 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-upload@47.4.0': dependencies: @@ -21694,7 +21690,7 @@ snapshots: chevrotain-allstar@0.3.1(chevrotain@11.0.3): dependencies: chevrotain: 11.0.3 - lodash-es: 4.17.22 + lodash-es: 4.17.23 chevrotain@11.0.3: dependencies: @@ -22618,7 +22614,7 @@ snapshots: dagre-d3-es@7.0.13: dependencies: d3: 7.9.0 - lodash-es: 4.17.22 + lodash-es: 4.17.23 data-uri-to-buffer@4.0.1: {} @@ -25500,7 +25496,7 @@ snapshots: kapsule@1.16.3: dependencies: - lodash-es: 4.17.22 + lodash-es: 4.17.23 karma-chrome-launcher@3.2.0: dependencies: @@ -25765,7 +25761,7 @@ snapshots: lodash-es@4.17.21: {} - lodash-es@4.17.22: {} + lodash-es@4.17.23: {} lodash.clonedeep@4.5.0: {} From 673c39d798f2c6e65ae45eb46159f1d73efec554 Mon Sep 17 00:00:00 2001 From: Elian Doran <contact@eliandoran.me> Date: Thu, 22 Jan 2026 08:05:49 +0200 Subject: [PATCH 167/353] Revert "feat(options/advanced): add description for experimental" This reverts commit fc2ab91280b6697a0138c3889894b6ce7276f4a8. --- .../widgets/type_widgets/options/advanced.tsx | 1 - .../options/components/CheckboxList.tsx | 30 +++++++++---------- 2 files changed, 15 insertions(+), 16 deletions(-) diff --git a/apps/client/src/widgets/type_widgets/options/advanced.tsx b/apps/client/src/widgets/type_widgets/options/advanced.tsx index c9d9b4a4ff..2959c5a1cc 100644 --- a/apps/client/src/widgets/type_widgets/options/advanced.tsx +++ b/apps/client/src/widgets/type_widgets/options/advanced.tsx @@ -191,7 +191,6 @@ function ExperimentalOptions() { values={filteredExperimentalFeatures} keyProperty="id" titleProperty="name" - descriptionProperty="description" currentValue={enabledExperimentalFeatures} onChange={setEnabledExperimentalFeatures} /> </OptionsSection> diff --git a/apps/client/src/widgets/type_widgets/options/components/CheckboxList.tsx b/apps/client/src/widgets/type_widgets/options/components/CheckboxList.tsx index baa37baf5f..a2f48a04fd 100644 --- a/apps/client/src/widgets/type_widgets/options/components/CheckboxList.tsx +++ b/apps/client/src/widgets/type_widgets/options/components/CheckboxList.tsx @@ -1,17 +1,14 @@ -import FormCheckbox from "../../../react/FormCheckbox"; - interface CheckboxListProps<T> { values: T[]; keyProperty: keyof T; titleProperty?: keyof T; disabledProperty?: keyof T; - descriptionProperty?: keyof T; currentValue: string[]; onChange: (newValues: string[]) => void; columnWidth?: string; } -export default function CheckboxList<T>({ values, keyProperty, titleProperty, disabledProperty, descriptionProperty, currentValue, onChange, columnWidth }: CheckboxListProps<T>) { +export default function CheckboxList<T>({ values, keyProperty, titleProperty, disabledProperty, currentValue, onChange, columnWidth }: CheckboxListProps<T>) { function toggleValue(value: string) { if (currentValue.includes(value)) { // Already there, needs removing. @@ -25,17 +22,20 @@ export default function CheckboxList<T>({ values, keyProperty, titleProperty, di return ( <ul style={{ listStyleType: "none", marginBottom: 0, columnWidth: columnWidth ?? "400px" }}> {values.map(value => ( - <li key={String(value[keyProperty])}> - <FormCheckbox - label={String(value[titleProperty ?? keyProperty] ?? value[keyProperty])} - name={String(value[keyProperty])} - currentValue={currentValue.includes(String(value[keyProperty]))} - disabled={!!(disabledProperty && value[disabledProperty])} - hint={value && (descriptionProperty ? String(value[descriptionProperty]) : undefined)} - onChange={() => toggleValue(String(value[keyProperty]))} - /> + <li> + <label className="tn-checkbox"> + <input + type="checkbox" + className="form-check-input" + value={String(value[keyProperty])} + checked={currentValue.includes(String(value[keyProperty]))} + disabled={!!(disabledProperty && value[disabledProperty])} + onChange={e => toggleValue((e.target as HTMLInputElement).value)} + /> + {String(value[titleProperty ?? keyProperty] ?? value[keyProperty])} + </label> </li> ))} </ul> - ); -} + ) +} \ No newline at end of file From 9dfc1cdc4cb84fa6da68be59115593fdf066b2ac Mon Sep 17 00:00:00 2001 From: Elian Doran <contact@eliandoran.me> Date: Thu, 22 Jan 2026 08:10:29 +0200 Subject: [PATCH 168/353] fix(render): not refreshing on attribute change (closes #8321) --- .../src/widgets/type_widgets/Render.tsx | 22 ++++++++++++++----- 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/apps/client/src/widgets/type_widgets/Render.tsx b/apps/client/src/widgets/type_widgets/Render.tsx index 6cc7197571..f47e58f2de 100644 --- a/apps/client/src/widgets/type_widgets/Render.tsx +++ b/apps/client/src/widgets/type_widgets/Render.tsx @@ -1,12 +1,15 @@ -import { useEffect, useRef, useState } from "preact/hooks"; -import { TypeWidgetProps } from "./type_widget"; -import render from "../../services/render"; -import { refToJQuerySelector } from "../react/react_utils"; -import Alert from "../react/Alert"; import "./Render.css"; + +import { useEffect, useRef, useState } from "preact/hooks"; + +import attributes from "../../services/attributes"; import { t } from "../../services/i18n"; -import RawHtml from "../react/RawHtml"; +import render from "../../services/render"; +import Alert from "../react/Alert"; import { useTriliumEvent } from "../react/hooks"; +import RawHtml from "../react/RawHtml"; +import { refToJQuerySelector } from "../react/react_utils"; +import { TypeWidgetProps } from "./type_widget"; export default function Render({ note, noteContext, ntxId }: TypeWidgetProps) { const contentRef = useRef<HTMLDivElement>(null); @@ -31,6 +34,13 @@ export default function Render({ note, noteContext, ntxId }: TypeWidgetProps) { refresh(); }); + // Refresh on attribute change. + useTriliumEvent("entitiesReloaded", ({ loadResults }) => { + if (loadResults.getAttributeRows().some(a => a.type === "relation" && a.name === "renderNote" && attributes.isAffecting(a, note))) { + refresh(); + } + }); + // Integration with search. useTriliumEvent("executeWithContentElement", ({ resolve, ntxId: eventNtxId }) => { if (eventNtxId !== ntxId) return; From d6b6832a1dfd5d54ed59365228c5e98a606c87df Mon Sep 17 00:00:00 2001 From: Elian Doran <contact@eliandoran.me> Date: Thu, 22 Jan 2026 08:15:40 +0200 Subject: [PATCH 169/353] fix(promoted_attributes): checkbox not displaying initial value properly (closes #8062) --- apps/client/src/widgets/PromotedAttributes.tsx | 1 + 1 file changed, 1 insertion(+) diff --git a/apps/client/src/widgets/PromotedAttributes.tsx b/apps/client/src/widgets/PromotedAttributes.tsx index 0ec79725a0..a9618d3a63 100644 --- a/apps/client/src/widgets/PromotedAttributes.tsx +++ b/apps/client/src/widgets/PromotedAttributes.tsx @@ -217,6 +217,7 @@ function LabelInput({ inputId, ...props }: CellProps & { inputId: string }) { id={inputId} type={LABEL_MAPPINGS[definition.labelType ?? "text"]} value={valueAttr.value} + checked={definition.labelType === "boolean" ? valueAttr.value === "true" : undefined} placeholder={t("promoted_attributes.unset-field-placeholder")} data-attribute-id={valueAttr.attributeId} data-attribute-type={valueAttr.type} From 8b86e17ac87e18ffb0690597f1eb1ba25d690b94 Mon Sep 17 00:00:00 2001 From: Elian Doran <contact@eliandoran.me> Date: Thu, 22 Jan 2026 20:03:46 +0200 Subject: [PATCH 170/353] fix(client): race condition in syntax highlight (closes #8464) --- apps/client/src/services/syntax_highlight.ts | 23 +++++++++++--------- packages/highlightjs/src/index.ts | 2 +- 2 files changed, 14 insertions(+), 11 deletions(-) diff --git a/apps/client/src/services/syntax_highlight.ts b/apps/client/src/services/syntax_highlight.ts index dd2bd48b47..3b2c35f682 100644 --- a/apps/client/src/services/syntax_highlight.ts +++ b/apps/client/src/services/syntax_highlight.ts @@ -1,10 +1,11 @@ -import { ensureMimeTypes, highlight, highlightAuto, loadTheme, Themes, type AutoHighlightResult, type HighlightResult, type Theme } from "@triliumnext/highlightjs"; +import { MimeType } from "@triliumnext/commons"; +import { type AutoHighlightResult, ensureMimeTypes, highlight, highlightAuto, type HighlightResult, loadTheme, type Theme,Themes } from "@triliumnext/highlightjs"; + +import { copyText, copyTextWithToast } from "./clipboard_ext.js"; +import { t } from "./i18n.js"; import mime_types from "./mime_types.js"; import options from "./options.js"; -import { t } from "./i18n.js"; -import { copyText, copyTextWithToast } from "./clipboard_ext.js"; import { isShare } from "./utils.js"; -import { MimeType } from "@triliumnext/commons"; let highlightingLoaded = false; @@ -76,13 +77,15 @@ export async function applySingleBlockSyntaxHighlight($codeBlock: JQuery<HTMLEle } export async function ensureMimeTypesForHighlighting(mimeTypeHint?: string) { - if (highlightingLoaded) { + if (!mimeTypeHint && highlightingLoaded) { return; } // Load theme. - const currentThemeName = String(options.get("codeBlockTheme")); - await loadHighlightingTheme(currentThemeName); + if (!highlightingLoaded) { + const currentThemeName = String(options.get("codeBlockTheme")); + await loadHighlightingTheme(currentThemeName); + } // Load mime types. let mimeTypes: MimeType[]; @@ -94,7 +97,7 @@ export async function ensureMimeTypesForHighlighting(mimeTypeHint?: string) { enabled: true, mime: mimeTypeHint.replace("-", "/") } - ] + ]; } else { mimeTypes = mime_types.getMimeTypes(); } @@ -124,9 +127,9 @@ export function isSyntaxHighlightEnabled() { if (!isShare) { const theme = options.get("codeBlockTheme"); return !!theme && theme !== "none"; - } else { - return true; } + return true; + } /** diff --git a/packages/highlightjs/src/index.ts b/packages/highlightjs/src/index.ts index 6638a4b04e..3016869b73 100644 --- a/packages/highlightjs/src/index.ts +++ b/packages/highlightjs/src/index.ts @@ -22,7 +22,6 @@ export async function ensureMimeTypes(mimeTypes: MimeType[]) { continue; } - registeredMimeTypes.add(mime); const loader = syntaxDefinitions[mime]; if (!loader) { unsupportedMimeTypes.add(mime); @@ -31,6 +30,7 @@ export async function ensureMimeTypes(mimeTypes: MimeType[]) { const language = (await loader()).default; hljs.registerLanguage(mime, language); + registeredMimeTypes.add(mime); } } From 17f3ffd00cb120ebe5d634e8dad97f85fc391144 Mon Sep 17 00:00:00 2001 From: Elian Doran <contact@eliandoran.me> Date: Thu, 22 Jan 2026 20:56:58 +0200 Subject: [PATCH 171/353] fix(mermaid): preview not rendering when read-only (closes #8419) --- .../type_widgets/helpers/SplitEditor.tsx | 80 ++++++++++++++----- .../type_widgets/helpers/SvgSplitEditor.tsx | 21 ++--- 2 files changed, 72 insertions(+), 29 deletions(-) diff --git a/apps/client/src/widgets/type_widgets/helpers/SplitEditor.tsx b/apps/client/src/widgets/type_widgets/helpers/SplitEditor.tsx index 6553b650a9..237556b5e7 100644 --- a/apps/client/src/widgets/type_widgets/helpers/SplitEditor.tsx +++ b/apps/client/src/widgets/type_widgets/helpers/SplitEditor.tsx @@ -8,7 +8,7 @@ import { DEFAULT_GUTTER_SIZE } from "../../../services/resizer"; import utils, { isMobile } from "../../../services/utils"; import ActionButton, { ActionButtonProps } from "../../react/ActionButton"; import Admonition from "../../react/Admonition"; -import { useNoteLabelBoolean, useTriliumOption } from "../../react/hooks"; +import { useNoteBlob, useNoteLabelBoolean, useTriliumOption } from "../../react/hooks"; import { EditableCode, EditableCodeProps } from "../code/Code"; export interface SplitEditorProps extends EditableCodeProps { @@ -30,12 +30,22 @@ export interface SplitEditorProps extends EditableCodeProps { * - Can display errors to the user via {@link setError}. * - Horizontal or vertical orientation for the editor/preview split, adjustable via the switch split orientation button floating button. */ -export default function SplitEditor({ note, error, splitOptions, previewContent, previewButtons, className, editorBefore, forceOrientation, ...editorProps }: SplitEditorProps) { - const splitEditorOrientation = useSplitOrientation(forceOrientation); - const [ readOnly ] = useNoteLabelBoolean(note, "readOnly"); - const containerRef = useRef<HTMLDivElement>(null); +export default function SplitEditor(props: SplitEditorProps) { + const [ readOnly ] = useNoteLabelBoolean(props.note, "readOnly"); - const editor = (!readOnly && + if (readOnly) { + return <ReadOnlyView {...props} />; + } + + return <EditorWithSplit {...props} />; + +} + +function EditorWithSplit({ note, error, splitOptions, previewContent, previewButtons, className, editorBefore, forceOrientation, ...editorProps }: SplitEditorProps) { + const containerRef = useRef<HTMLDivElement>(null); + const splitEditorOrientation = useSplitOrientation(forceOrientation); + + const editor = ( <div className="note-detail-split-editor-col"> {editorBefore} <div className="note-detail-split-editor"> @@ -53,19 +63,14 @@ export default function SplitEditor({ note, error, splitOptions, previewContent, </div> ); - const preview = ( - <div className="note-detail-split-preview-col"> - <div className={`note-detail-split-preview ${error ? "on-error" : ""}`}> - {previewContent} - </div> - <div className="btn-group btn-group-sm map-type-switcher content-floating-buttons preview-buttons bottom-right" role="group"> - {previewButtons} - </div> - </div> - ); + const preview = <PreviewContainer + error={error} + previewContent={previewContent} + previewButtons={previewButtons} + />; useEffect(() => { - if (!utils.isDesktop() || !containerRef.current || readOnly) return; + if (!utils.isDesktop() || !containerRef.current) return; const elements = Array.from(containerRef.current?.children) as HTMLElement[]; const splitInstance = Split(elements, { rtl: glob.isRtl, @@ -76,10 +81,10 @@ export default function SplitEditor({ note, error, splitOptions, previewContent, }); return () => splitInstance.destroy(); - }, [ readOnly, splitEditorOrientation ]); + }, [ splitEditorOrientation ]); return ( - <div ref={containerRef} className={`note-detail-split note-detail-printable ${`split-${splitEditorOrientation}`} ${readOnly ? "split-read-only" : ""} ${className ?? ""}`}> + <div ref={containerRef} className={`note-detail-split note-detail-printable ${`split-${splitEditorOrientation}`} ${className ?? ""}`}> {splitEditorOrientation === "horizontal" ? <>{editor}{preview}</> : <>{preview}{editor}</>} @@ -87,6 +92,43 @@ export default function SplitEditor({ note, error, splitOptions, previewContent, ); } +function ReadOnlyView({ ...props }: SplitEditorProps) { + const { note, onContentChanged } = props; + const content = useNoteBlob(note); + const onContentChangedRef = useRef(onContentChanged); + + useEffect(() => { + onContentChangedRef.current = onContentChanged; + }); + + useEffect(() => { + onContentChangedRef.current?.(content?.content ?? ""); + }, [ content ]); + + return ( + <div className={`note-detail-split note-detail-printable ${props.className} split-read-only`}> + <PreviewContainer {...props} /> + </div> + ); +} + +function PreviewContainer({ error, previewContent, previewButtons }: { + error?: string | null; + previewContent: ComponentChildren; + previewButtons?: ComponentChildren; +}) { + return ( + <div className="note-detail-split-preview-col"> + <div className={`note-detail-split-preview ${error ? "on-error" : ""}`}> + {previewContent} + </div> + <div className="btn-group btn-group-sm map-type-switcher content-floating-buttons preview-buttons bottom-right" role="group"> + {previewButtons} + </div> + </div> + ); +} + export function PreviewButton(props: Omit<ActionButtonProps, "titlePosition">) { return <ActionButton {...props} diff --git a/apps/client/src/widgets/type_widgets/helpers/SvgSplitEditor.tsx b/apps/client/src/widgets/type_widgets/helpers/SvgSplitEditor.tsx index 9a1c1dd4e7..a587eba63a 100644 --- a/apps/client/src/widgets/type_widgets/helpers/SvgSplitEditor.tsx +++ b/apps/client/src/widgets/type_widgets/helpers/SvgSplitEditor.tsx @@ -1,13 +1,14 @@ -import { useCallback, useEffect, useRef, useState } from "preact/hooks"; -import { t } from "../../../services/i18n"; -import SplitEditor, { PreviewButton, SplitEditorProps } from "./SplitEditor"; -import { RawHtmlBlock } from "../../react/RawHtml"; -import server from "../../../services/server"; -import svgPanZoom from "svg-pan-zoom"; import { RefObject } from "preact"; -import { useElementSize, useTriliumEvent } from "../../react/hooks"; -import utils from "../../../services/utils"; +import { useCallback, useEffect, useRef, useState } from "preact/hooks"; +import svgPanZoom from "svg-pan-zoom"; + +import { t } from "../../../services/i18n"; +import server from "../../../services/server"; import toast from "../../../services/toast"; +import utils from "../../../services/utils"; +import { useElementSize, useTriliumEvent } from "../../react/hooks"; +import { RawHtmlBlock } from "../../react/RawHtml"; +import SplitEditor, { PreviewButton, SplitEditorProps } from "./SplitEditor"; interface SvgSplitEditorProps extends Omit<SplitEditorProps, "previewContent"> { /** @@ -144,7 +145,7 @@ export default function SvgSplitEditor({ ntxId, note, attachmentName, renderSvg, } {...props} /> - ) + ); } function useResizer(containerRef: RefObject<HTMLDivElement>, noteId: string, svg: string | undefined) { @@ -181,7 +182,7 @@ function useResizer(containerRef: RefObject<HTMLDivElement>, noteId: string, svg lastPanZoom.current = { pan: zoomInstance.getPan(), zoom: zoomInstance.getZoom() - } + }; zoomRef.current = undefined; zoomInstance.destroy(); }; From 907853bbba88db8ba204fff1e22aad3dd3559962 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 23 Jan 2026 00:39:32 +0000 Subject: [PATCH 172/353] chore(deps): update dependency @redocly/cli to v2.14.7 --- apps/build-docs/package.json | 2 +- pnpm-lock.yaml | 58 +++++++++++++++++++++++------------- 2 files changed, 39 insertions(+), 21 deletions(-) diff --git a/apps/build-docs/package.json b/apps/build-docs/package.json index 1ab4c6bc56..30b15663a6 100644 --- a/apps/build-docs/package.json +++ b/apps/build-docs/package.json @@ -11,7 +11,7 @@ "license": "AGPL-3.0-only", "packageManager": "pnpm@10.28.1", "devDependencies": { - "@redocly/cli": "2.14.5", + "@redocly/cli": "2.14.7", "archiver": "7.0.1", "fs-extra": "11.3.3", "react": "19.2.3", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index f9cc1a8dc8..5933ef7a66 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -140,8 +140,8 @@ importers: apps/build-docs: devDependencies: '@redocly/cli': - specifier: 2.14.5 - version: 2.14.5(@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.14.7 + version: 2.14.7(@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 @@ -4397,8 +4397,11 @@ packages: '@redocly/ajv@8.17.1': resolution: {integrity: sha512-EDtsGZS964mf9zAUXAl9Ew16eYbeyAFWhsPr0fX6oaJxgd8rApYlPBf0joyhnUHz88WxrigyFtTaqqzXNzPgqw==} - '@redocly/cli@2.14.5': - resolution: {integrity: sha512-02Zz7YS7UwfBpbHbF64ApUkspr8Ar2XytgZ7JUljVwz+VjzCRcxkGMGE82BVYYQNKkw/YwlNOIX+lYYNbowTcw==} + '@redocly/ajv@8.17.2': + resolution: {integrity: sha512-rcbDZOfXAgGEJeJ30aWCVVJvxV9ooevb/m1/SFblO2qHs4cqTk178gx7T/vdslf57EA4lTofrwsq5K8rxK9g+g==} + + '@redocly/cli@2.14.7': + resolution: {integrity: sha512-EO1sXTaFgk95/BLQ1rThCMbiWgJomm7nnKitysQxX6iv4Ie2FipIRus1oF0z0a6ADqPtyGBJQQUIoqCG1KJAuw==} engines: {node: '>=22.12.0 || >=20.19.0 <21.0.0', npm: '>=10'} hasBin: true @@ -4412,12 +4415,12 @@ packages: resolution: {integrity: sha512-0EbE8LRbkogtcCXU7liAyC00n9uNG9hJ+eMyHFdUsy9lB/WGqnEBgwjA9q2cyzAVcdTkQqTBBU1XePNnN3OijA==} engines: {node: '>=18.17.0', npm: '>=9.5.0'} - '@redocly/openapi-core@2.14.5': - resolution: {integrity: sha512-MQQR+RCG0V+jZV6msgKv1CNi/+TZUXmjMAAuTEktaTOYIsQWTCV9GYSD/2n94eMDZwxI4olr05OPzOZo9z0EMg==} + '@redocly/openapi-core@2.14.7': + resolution: {integrity: sha512-urtiy9H09gecAqpHa5dRG739UBMFrpEZ8zG29FB4LKJNIfhQRSR+8XWzoXSTuGL5zRBSzJx6WvpOCwT6GMKXcg==} engines: {node: '>=22.12.0 || >=20.19.0 <21.0.0', npm: '>=10'} - '@redocly/respect-core@2.14.5': - resolution: {integrity: sha512-zZKYwBZYfRi4/Iv2V7hq9xOYhpO3+IuzYjk8/V0CZjoHCnoW8jgGGhvoXMn/BfedZS9/3fV9n4SEskIbmCPl8Q==} + '@redocly/respect-core@2.14.7': + resolution: {integrity: sha512-nNLqrYnVo8Mpd0+CmKbDaUG1xd0PcrRj/NNgIuR7tcjPQGkdassKB2kFTOq9E9JkHWUdfqawRjT3PPrn/y4kaA==} engines: {node: '>=22.12.0 || >=20.19.0 <21.0.0', npm: '>=10'} '@replit/codemirror-indentation-markers@6.5.3': @@ -15096,6 +15099,8 @@ snapshots: '@ckeditor/ckeditor5-core': 47.4.0 '@ckeditor/ckeditor5-upload': 47.4.0 ckeditor5: 47.4.0 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-ai@47.4.0(bufferutil@4.0.9)(utf-8-validate@6.0.5)': dependencies: @@ -15436,6 +15441,8 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 es-toolkit: 1.39.5 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-editor-classic@47.4.0': dependencies: @@ -15445,8 +15452,6 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 es-toolkit: 1.39.5 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-editor-decoupled@47.4.0': dependencies: @@ -16064,6 +16069,8 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.4.0 '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-special-characters@47.4.0': dependencies: @@ -18884,14 +18891,21 @@ snapshots: json-schema-traverse: 1.0.0 require-from-string: 2.0.2 - '@redocly/cli@2.14.5(@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/ajv@8.17.2': + dependencies: + fast-deep-equal: 3.1.3 + fast-uri: 3.1.0 + json-schema-traverse: 1.0.0 + require-from-string: 2.0.2 + + '@redocly/cli@2.14.7(@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/openapi-core': 2.14.5 - '@redocly/respect-core': 2.14.5 + '@redocly/openapi-core': 2.14.7 + '@redocly/respect-core': 2.14.7 abort-controller: 3.0.0 ajv: '@redocly/ajv@8.17.1' ajv-formats: 3.0.1(@redocly/ajv@8.17.1) @@ -18943,12 +18957,12 @@ snapshots: transitivePeerDependencies: - supports-color - '@redocly/openapi-core@2.14.5': + '@redocly/openapi-core@2.14.7': dependencies: - '@redocly/ajv': 8.17.1 + '@redocly/ajv': 8.17.2 '@redocly/config': 0.41.2 - ajv: '@redocly/ajv@8.17.1' - ajv-formats: 3.0.1(@redocly/ajv@8.17.1) + ajv: '@redocly/ajv@8.17.2' + ajv-formats: 3.0.1(@redocly/ajv@8.17.2) colorette: 1.4.0 js-levenshtein: 1.1.6 js-yaml: 4.1.1 @@ -18956,12 +18970,12 @@ snapshots: pluralize: 8.0.0 yaml-ast-parser: 0.0.43 - '@redocly/respect-core@2.14.5': + '@redocly/respect-core@2.14.7': dependencies: '@faker-js/faker': 7.6.0 '@noble/hashes': 1.8.0 '@redocly/ajv': 8.17.1 - '@redocly/openapi-core': 2.14.5 + '@redocly/openapi-core': 2.14.7 ajv: '@redocly/ajv@8.17.1' better-ajv-errors: 1.2.0(@redocly/ajv@8.17.1) colorette: 2.0.20 @@ -20956,6 +20970,10 @@ snapshots: optionalDependencies: ajv: '@redocly/ajv@8.17.1' + ajv-formats@3.0.1(@redocly/ajv@8.17.2): + optionalDependencies: + ajv: '@redocly/ajv@8.17.2' + ajv-formats@3.0.1(ajv@8.13.0): optionalDependencies: ajv: 8.13.0 @@ -21065,7 +21083,7 @@ snapshots: archiver-utils@5.0.2: dependencies: - glob: 10.4.5 + glob: 10.5.0 graceful-fs: 4.2.11 is-stream: 2.0.1 lazystream: 1.0.1 From b45eef91402027730a9556eca0e3a7d4233e87bf Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 23 Jan 2026 00:40:10 +0000 Subject: [PATCH 173/353] chore(deps): update dependency @smithy/middleware-retry to v4.4.27 --- packages/ckeditor5/package.json | 2 +- pnpm-lock.yaml | 84 +++++++++++++++------------------ 2 files changed, 40 insertions(+), 46 deletions(-) diff --git a/packages/ckeditor5/package.json b/packages/ckeditor5/package.json index 165787584d..8b16b2d86f 100644 --- a/packages/ckeditor5/package.json +++ b/packages/ckeditor5/package.json @@ -16,7 +16,7 @@ "ckeditor5-premium-features": "47.4.0" }, "devDependencies": { - "@smithy/middleware-retry": "4.4.26", + "@smithy/middleware-retry": "4.4.27", "@types/jquery": "3.5.33" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index f9cc1a8dc8..887c4b7c9b 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -888,8 +888,8 @@ importers: version: 47.4.0(bufferutil@4.0.9)(ckeditor5@47.4.0)(utf-8-validate@6.0.5) devDependencies: '@smithy/middleware-retry': - specifier: 4.4.26 - version: 4.4.26 + specifier: 4.4.27 + version: 4.4.27 '@types/jquery': specifier: 3.5.33 version: 3.5.33 @@ -4800,14 +4800,14 @@ packages: resolution: {integrity: sha512-prmU+rDddxHOH0oNcwemL+SwnzcG65sBF2yXRO7aeXIn/xTlq2pX7JLVbkBnVLowHLg4/OL4+jBmv9hVrVGS+w==} engines: {node: '>=18.0.0'} - '@smithy/core@3.20.7': - resolution: {integrity: sha512-aO7jmh3CtrmPsIJxUwYIzI5WVlMK8BMCPQ4D4nTzqTqBhbzvxHNzBMGcEg13yg/z9R2Qsz49NUFl0F0lVbTVFw==} - engines: {node: '>=18.0.0'} - '@smithy/core@3.21.0': resolution: {integrity: sha512-bg2TfzgsERyETAxc/Ims/eJX8eAnIeTi4r4LHpMpfF/2NyO6RsWis0rjKcCPaGksljmOb23BZRiCeT/3NvwkXw==} engines: {node: '>=18.0.0'} + '@smithy/core@3.21.1': + resolution: {integrity: sha512-NUH8R4O6FkN8HKMojzbGg/5pNjsfTjlMmeFclyPfPaXXUrbr5TzhWgbf7t92wfrpCHRgpjyz7ffASIS3wX28aA==} + engines: {node: '>=18.0.0'} + '@smithy/credential-provider-imds@4.0.6': resolution: {integrity: sha512-hKMWcANhUiNbCJouYkZ9V3+/Qf9pteR1dnwgdyzR09R4ODEYx8BbUysHwRSyex4rZ9zapddZhLFTnT4ZijR4pw==} engines: {node: '>=18.0.0'} @@ -4860,12 +4860,12 @@ packages: resolution: {integrity: sha512-kwWpNltpxrvPabnjEFvwSmA+66l6s2ReCvgVSzW/z92LU4T28fTdgZ18IdYRYOrisu2NMQ0jUndRScbO65A/zg==} engines: {node: '>=18.0.0'} - '@smithy/middleware-endpoint@4.4.8': - resolution: {integrity: sha512-TV44qwB/T0OMMzjIuI+JeS0ort3bvlPJ8XIH0MSlGADraXpZqmyND27ueuAL3E14optleADWqtd7dUgc2w+qhQ==} + '@smithy/middleware-endpoint@4.4.11': + resolution: {integrity: sha512-/WqsrycweGGfb9sSzME4CrsuayjJF6BueBmkKlcbeU5q18OhxRrvvKlmfw3tpDsK5ilx2XUJvoukwxHB0nHs/Q==} engines: {node: '>=18.0.0'} - '@smithy/middleware-retry@4.4.26': - resolution: {integrity: sha512-ozZMoTAr+B2aVYfLYfkssFvc8ZV3p/vLpVQ7/k277xxUOA9ykSPe5obL2j6yHfbdrM/SZV7qj0uk/hSqavHrLw==} + '@smithy/middleware-retry@4.4.27': + resolution: {integrity: sha512-xFUYCGRVsfgiN5EjsJJSzih9+yjStgMTCLANPlf0LVQkPDYCe0hz97qbdTZosFOiYlGBlHYityGRxrQ/hxhfVQ==} engines: {node: '>=18.0.0'} '@smithy/middleware-serde@4.2.9': @@ -4916,8 +4916,8 @@ packages: resolution: {integrity: sha512-6o804SCyHGMXAb5mFJ+iTy9kVKv7F91a9szN0J+9X6p8A0NrdpUxdaC57aye2ipQkP2C4IAqETEpGZ0Zj77Haw==} engines: {node: '>=18.0.0'} - '@smithy/smithy-client@4.10.9': - resolution: {integrity: sha512-Je0EvGXVJ0Vrrr2lsubq43JGRIluJ/hX17aN/W/A0WfE+JpoMdI8kwk2t9F0zTX9232sJDGcoH4zZre6m6f/sg==} + '@smithy/smithy-client@4.10.12': + resolution: {integrity: sha512-VKO/HKoQ5OrSHW6AJUmEnUKeXI1/5LfCwO9cwyao7CmLvGnZeM1i36Lyful3LK1XU7HwTVieTqO1y2C/6t3qtA==} engines: {node: '>=18.0.0'} '@smithy/types@4.12.0': @@ -14523,7 +14523,7 @@ snapshots: '@aws-sdk/util-user-agent-browser': 3.821.0 '@aws-sdk/util-user-agent-node': 3.823.0 '@smithy/config-resolver': 4.1.4 - '@smithy/core': 3.20.7 + '@smithy/core': 3.21.0 '@smithy/eventstream-serde-browser': 4.0.4 '@smithy/eventstream-serde-config-resolver': 4.1.2 '@smithy/eventstream-serde-node': 4.0.4 @@ -14531,14 +14531,14 @@ snapshots: '@smithy/hash-node': 4.0.4 '@smithy/invalid-dependency': 4.0.4 '@smithy/middleware-content-length': 4.0.4 - '@smithy/middleware-endpoint': 4.4.8 - '@smithy/middleware-retry': 4.4.26 + '@smithy/middleware-endpoint': 4.4.10 + '@smithy/middleware-retry': 4.4.27 '@smithy/middleware-serde': 4.2.9 '@smithy/middleware-stack': 4.2.8 '@smithy/node-config-provider': 4.3.8 '@smithy/node-http-handler': 4.4.8 '@smithy/protocol-http': 5.3.8 - '@smithy/smithy-client': 4.10.9 + '@smithy/smithy-client': 4.10.11 '@smithy/types': 4.12.0 '@smithy/url-parser': 4.2.8 '@smithy/util-base64': 4.3.0 @@ -14572,19 +14572,19 @@ snapshots: '@aws-sdk/util-user-agent-browser': 3.821.0 '@aws-sdk/util-user-agent-node': 3.823.0 '@smithy/config-resolver': 4.1.4 - '@smithy/core': 3.20.7 + '@smithy/core': 3.21.0 '@smithy/fetch-http-handler': 5.3.9 '@smithy/hash-node': 4.0.4 '@smithy/invalid-dependency': 4.0.4 '@smithy/middleware-content-length': 4.0.4 - '@smithy/middleware-endpoint': 4.4.8 - '@smithy/middleware-retry': 4.4.26 + '@smithy/middleware-endpoint': 4.4.10 + '@smithy/middleware-retry': 4.4.27 '@smithy/middleware-serde': 4.2.9 '@smithy/middleware-stack': 4.2.8 '@smithy/node-config-provider': 4.3.8 '@smithy/node-http-handler': 4.4.8 '@smithy/protocol-http': 5.3.8 - '@smithy/smithy-client': 4.10.9 + '@smithy/smithy-client': 4.10.11 '@smithy/types': 4.12.0 '@smithy/url-parser': 4.2.8 '@smithy/util-base64': 4.3.0 @@ -14604,12 +14604,12 @@ snapshots: dependencies: '@aws-sdk/types': 3.821.0 '@aws-sdk/xml-builder': 3.821.0 - '@smithy/core': 3.20.7 + '@smithy/core': 3.21.0 '@smithy/node-config-provider': 4.3.8 '@smithy/property-provider': 4.2.8 '@smithy/protocol-http': 5.3.8 '@smithy/signature-v4': 5.1.2 - '@smithy/smithy-client': 4.10.9 + '@smithy/smithy-client': 4.10.11 '@smithy/types': 4.12.0 '@smithy/util-base64': 4.3.0 '@smithy/util-body-length-browser': 4.2.0 @@ -14634,7 +14634,7 @@ snapshots: '@smithy/node-http-handler': 4.4.8 '@smithy/property-provider': 4.2.8 '@smithy/protocol-http': 5.3.8 - '@smithy/smithy-client': 4.10.9 + '@smithy/smithy-client': 4.10.11 '@smithy/types': 4.12.0 '@smithy/util-stream': 4.5.10 tslib: 2.8.1 @@ -14746,7 +14746,7 @@ snapshots: '@aws-sdk/core': 3.823.0 '@aws-sdk/types': 3.821.0 '@aws-sdk/util-endpoints': 3.821.0 - '@smithy/core': 3.20.7 + '@smithy/core': 3.21.0 '@smithy/protocol-http': 5.3.8 '@smithy/types': 4.12.0 tslib: 2.8.1 @@ -14766,19 +14766,19 @@ snapshots: '@aws-sdk/util-user-agent-browser': 3.821.0 '@aws-sdk/util-user-agent-node': 3.823.0 '@smithy/config-resolver': 4.1.4 - '@smithy/core': 3.20.7 + '@smithy/core': 3.21.0 '@smithy/fetch-http-handler': 5.3.9 '@smithy/hash-node': 4.0.4 '@smithy/invalid-dependency': 4.0.4 '@smithy/middleware-content-length': 4.0.4 - '@smithy/middleware-endpoint': 4.4.8 - '@smithy/middleware-retry': 4.4.26 + '@smithy/middleware-endpoint': 4.4.10 + '@smithy/middleware-retry': 4.4.27 '@smithy/middleware-serde': 4.2.9 '@smithy/middleware-stack': 4.2.8 '@smithy/node-config-provider': 4.3.8 '@smithy/node-http-handler': 4.4.8 '@smithy/protocol-http': 5.3.8 - '@smithy/smithy-client': 4.10.9 + '@smithy/smithy-client': 4.10.11 '@smithy/types': 4.12.0 '@smithy/url-parser': 4.2.8 '@smithy/util-base64': 4.3.0 @@ -15242,8 +15242,6 @@ snapshots: '@ckeditor/ckeditor5-core': 47.4.0 '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-code-block@47.4.0(patch_hash=2361d8caad7d6b5bddacc3a3b4aa37dbfba260b1c1b22a450413a79c1bb1ce95)': dependencies: @@ -15445,8 +15443,6 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 es-toolkit: 1.39.5 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-editor-decoupled@47.4.0': dependencies: @@ -15976,8 +15972,6 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.4.0 '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-restricted-editing@47.4.0': dependencies: @@ -19297,7 +19291,7 @@ snapshots: '@smithy/util-middleware': 4.2.8 tslib: 2.8.1 - '@smithy/core@3.20.7': + '@smithy/core@3.21.0': dependencies: '@smithy/middleware-serde': 4.2.9 '@smithy/protocol-http': 5.3.8 @@ -19310,7 +19304,7 @@ snapshots: '@smithy/uuid': 1.1.0 tslib: 2.8.1 - '@smithy/core@3.21.0': + '@smithy/core@3.21.1': dependencies: '@smithy/middleware-serde': 4.2.9 '@smithy/protocol-http': 5.3.8 @@ -19406,9 +19400,9 @@ snapshots: '@smithy/util-middleware': 4.2.8 tslib: 2.8.1 - '@smithy/middleware-endpoint@4.4.8': + '@smithy/middleware-endpoint@4.4.11': dependencies: - '@smithy/core': 3.20.7 + '@smithy/core': 3.21.1 '@smithy/middleware-serde': 4.2.9 '@smithy/node-config-provider': 4.3.8 '@smithy/shared-ini-file-loader': 4.4.3 @@ -19417,12 +19411,12 @@ snapshots: '@smithy/util-middleware': 4.2.8 tslib: 2.8.1 - '@smithy/middleware-retry@4.4.26': + '@smithy/middleware-retry@4.4.27': dependencies: '@smithy/node-config-provider': 4.3.8 '@smithy/protocol-http': 5.3.8 '@smithy/service-error-classification': 4.2.8 - '@smithy/smithy-client': 4.10.11 + '@smithy/smithy-client': 4.10.12 '@smithy/types': 4.12.0 '@smithy/util-middleware': 4.2.8 '@smithy/util-retry': 4.2.8 @@ -19506,10 +19500,10 @@ snapshots: '@smithy/util-stream': 4.5.10 tslib: 2.8.1 - '@smithy/smithy-client@4.10.9': + '@smithy/smithy-client@4.10.12': dependencies: - '@smithy/core': 3.20.7 - '@smithy/middleware-endpoint': 4.4.8 + '@smithy/core': 3.21.1 + '@smithy/middleware-endpoint': 4.4.11 '@smithy/middleware-stack': 4.2.8 '@smithy/protocol-http': 5.3.8 '@smithy/types': 4.12.0 @@ -19557,7 +19551,7 @@ snapshots: '@smithy/util-defaults-mode-browser@4.0.22': dependencies: '@smithy/property-provider': 4.2.8 - '@smithy/smithy-client': 4.10.9 + '@smithy/smithy-client': 4.10.11 '@smithy/types': 4.12.0 bowser: 2.11.0 tslib: 2.8.1 @@ -19568,7 +19562,7 @@ snapshots: '@smithy/credential-provider-imds': 4.0.6 '@smithy/node-config-provider': 4.3.8 '@smithy/property-provider': 4.2.8 - '@smithy/smithy-client': 4.10.9 + '@smithy/smithy-client': 4.10.11 '@smithy/types': 4.12.0 tslib: 2.8.1 From 577780cb90ceb197026dcfd1f74bb31ea0d3bfc8 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 23 Jan 2026 00:41:33 +0000 Subject: [PATCH 174/353] chore(deps): update vitest monorepo to v4.0.18 --- apps/website/package.json | 2 +- package.json | 8 +- packages/ckeditor5-admonition/package.json | 6 +- packages/ckeditor5-footnotes/package.json | 6 +- .../ckeditor5-keyboard-marker/package.json | 6 +- packages/ckeditor5-math/package.json | 6 +- packages/ckeditor5-mermaid/package.json | 6 +- pnpm-lock.yaml | 236 +++++++++--------- 8 files changed, 135 insertions(+), 141 deletions(-) diff --git a/apps/website/package.json b/apps/website/package.json index b478eec643..5b98d62e92 100644 --- a/apps/website/package.json +++ b/apps/website/package.json @@ -23,7 +23,7 @@ "typescript": "5.9.3", "user-agent-data-types": "0.4.2", "vite": "7.3.1", - "vitest": "4.0.17" + "vitest": "4.0.18" }, "eslintConfig": { "extends": "preact" diff --git a/package.json b/package.json index 8bb9583147..10c1a22808 100644 --- a/package.json +++ b/package.json @@ -51,9 +51,9 @@ "@types/express": "5.0.6", "@types/js-yaml": "4.0.9", "@types/node": "24.10.9", - "@vitest/browser-webdriverio": "4.0.17", - "@vitest/coverage-v8": "4.0.17", - "@vitest/ui": "4.0.17", + "@vitest/browser-webdriverio": "4.0.18", + "@vitest/coverage-v8": "4.0.18", + "@vitest/ui": "4.0.18", "chalk": "5.6.2", "cross-env": "10.1.0", "dpdm": "3.14.0", @@ -77,7 +77,7 @@ "upath": "2.0.1", "vite": "7.3.1", "vite-plugin-dts": "4.5.4", - "vitest": "4.0.17" + "vitest": "4.0.18" }, "license": "AGPL-3.0-only", "author": { diff --git a/packages/ckeditor5-admonition/package.json b/packages/ckeditor5-admonition/package.json index 2364bd8514..26714f10c6 100644 --- a/packages/ckeditor5-admonition/package.json +++ b/packages/ckeditor5-admonition/package.json @@ -26,8 +26,8 @@ "@ckeditor/ckeditor5-package-tools": "5.0.1", "@typescript-eslint/eslint-plugin": "8.53.0", "@typescript-eslint/parser": "8.53.0", - "@vitest/browser": "4.0.17", - "@vitest/coverage-istanbul": "4.0.17", + "@vitest/browser": "4.0.18", + "@vitest/coverage-istanbul": "4.0.18", "ckeditor5": "47.4.0", "eslint": "9.39.2", "eslint-config-ckeditor5": ">=9.1.0", @@ -38,7 +38,7 @@ "ts-node": "10.9.2", "typescript": "5.9.3", "vite-plugin-svgo": "2.0.0", - "vitest": "4.0.17", + "vitest": "4.0.18", "webdriverio": "9.23.2" }, "peerDependencies": { diff --git a/packages/ckeditor5-footnotes/package.json b/packages/ckeditor5-footnotes/package.json index e387a85184..b9af9cc183 100644 --- a/packages/ckeditor5-footnotes/package.json +++ b/packages/ckeditor5-footnotes/package.json @@ -27,8 +27,8 @@ "@ckeditor/ckeditor5-package-tools": "5.0.1", "@typescript-eslint/eslint-plugin": "8.53.0", "@typescript-eslint/parser": "8.53.0", - "@vitest/browser": "4.0.17", - "@vitest/coverage-istanbul": "4.0.17", + "@vitest/browser": "4.0.18", + "@vitest/coverage-istanbul": "4.0.18", "ckeditor5": "47.4.0", "eslint": "9.39.2", "eslint-config-ckeditor5": ">=9.1.0", @@ -39,7 +39,7 @@ "ts-node": "10.9.2", "typescript": "5.9.3", "vite-plugin-svgo": "2.0.0", - "vitest": "4.0.17", + "vitest": "4.0.18", "webdriverio": "9.23.2" }, "peerDependencies": { diff --git a/packages/ckeditor5-keyboard-marker/package.json b/packages/ckeditor5-keyboard-marker/package.json index e72036a08b..cd53f5eadb 100644 --- a/packages/ckeditor5-keyboard-marker/package.json +++ b/packages/ckeditor5-keyboard-marker/package.json @@ -29,8 +29,8 @@ "@ckeditor/ckeditor5-package-tools": "5.0.1", "@typescript-eslint/eslint-plugin": "8.53.0", "@typescript-eslint/parser": "8.53.0", - "@vitest/browser": "4.0.17", - "@vitest/coverage-istanbul": "4.0.17", + "@vitest/browser": "4.0.18", + "@vitest/coverage-istanbul": "4.0.18", "ckeditor5": "47.4.0", "eslint": "9.39.2", "eslint-config-ckeditor5": ">=9.1.0", @@ -41,7 +41,7 @@ "ts-node": "10.9.2", "typescript": "5.9.3", "vite-plugin-svgo": "2.0.0", - "vitest": "4.0.17", + "vitest": "4.0.18", "webdriverio": "9.23.2" }, "peerDependencies": { diff --git a/packages/ckeditor5-math/package.json b/packages/ckeditor5-math/package.json index 259cee11d9..4bc2e55a90 100644 --- a/packages/ckeditor5-math/package.json +++ b/packages/ckeditor5-math/package.json @@ -29,8 +29,8 @@ "@ckeditor/ckeditor5-package-tools": "5.0.1", "@typescript-eslint/eslint-plugin": "8.53.0", "@typescript-eslint/parser": "8.53.0", - "@vitest/browser": "4.0.17", - "@vitest/coverage-istanbul": "4.0.17", + "@vitest/browser": "4.0.18", + "@vitest/coverage-istanbul": "4.0.18", "ckeditor5": "47.4.0", "eslint": "9.39.2", "eslint-config-ckeditor5": ">=9.1.0", @@ -41,7 +41,7 @@ "ts-node": "10.9.2", "typescript": "5.9.3", "vite-plugin-svgo": "2.0.0", - "vitest": "4.0.17", + "vitest": "4.0.18", "webdriverio": "9.23.2" }, "peerDependencies": { diff --git a/packages/ckeditor5-mermaid/package.json b/packages/ckeditor5-mermaid/package.json index 34d580fff2..8842b7dac9 100644 --- a/packages/ckeditor5-mermaid/package.json +++ b/packages/ckeditor5-mermaid/package.json @@ -29,8 +29,8 @@ "@ckeditor/ckeditor5-package-tools": "5.0.1", "@typescript-eslint/eslint-plugin": "8.53.0", "@typescript-eslint/parser": "8.53.0", - "@vitest/browser": "4.0.17", - "@vitest/coverage-istanbul": "4.0.17", + "@vitest/browser": "4.0.18", + "@vitest/coverage-istanbul": "4.0.18", "ckeditor5": "47.4.0", "eslint": "9.39.2", "eslint-config-ckeditor5": ">=9.1.0", @@ -41,7 +41,7 @@ "ts-node": "10.9.2", "typescript": "5.9.3", "vite-plugin-svgo": "2.0.0", - "vitest": "4.0.17", + "vitest": "4.0.18", "webdriverio": "9.23.2" }, "peerDependencies": { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index f9cc1a8dc8..0dd254ac38 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -56,14 +56,14 @@ importers: specifier: 24.10.9 version: 24.10.9 '@vitest/browser-webdriverio': - specifier: 4.0.17 - version: 4.0.17(bufferutil@4.0.9)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(utf-8-validate@6.0.5)(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.31.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1))(vitest@4.0.17)(webdriverio@9.23.2(bufferutil@4.0.9)(utf-8-validate@6.0.5)) + specifier: 4.0.18 + version: 4.0.18(bufferutil@4.0.9)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(utf-8-validate@6.0.5)(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.31.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1))(vitest@4.0.18)(webdriverio@9.23.2(bufferutil@4.0.9)(utf-8-validate@6.0.5)) '@vitest/coverage-v8': - specifier: 4.0.17 - version: 4.0.17(@vitest/browser@4.0.17(bufferutil@4.0.9)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(utf-8-validate@6.0.5)(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.31.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1))(vitest@4.0.17))(vitest@4.0.17) + specifier: 4.0.18 + version: 4.0.18(@vitest/browser@4.0.18(bufferutil@4.0.9)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(utf-8-validate@6.0.5)(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.31.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1))(vitest@4.0.18))(vitest@4.0.18) '@vitest/ui': - specifier: 4.0.17 - version: 4.0.17(vitest@4.0.17) + specifier: 4.0.18 + version: 4.0.18(vitest@4.0.18) chalk: specifier: 5.6.2 version: 5.6.2 @@ -134,8 +134,8 @@ importers: specifier: 4.5.4 version: 4.5.4(@types/node@24.10.9)(rollup@4.52.0)(typescript@5.9.3)(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.31.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1)) vitest: - specifier: 4.0.17 - version: 4.0.17(@opentelemetry/api@1.9.0)(@types/node@24.10.9)(@vitest/browser-webdriverio@4.0.17)(@vitest/ui@4.0.17)(happy-dom@20.3.4(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.31.1)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) + specifier: 4.0.18 + version: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@24.10.9)(@vitest/browser-webdriverio@4.0.18)(@vitest/ui@4.0.18)(happy-dom@20.3.4(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.31.1)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) apps/build-docs: devDependencies: @@ -857,8 +857,8 @@ importers: specifier: 7.3.1 version: 7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.31.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) vitest: - specifier: 4.0.17 - version: 4.0.17(@opentelemetry/api@1.9.0)(@types/node@24.10.9)(@vitest/browser-webdriverio@4.0.17)(@vitest/ui@4.0.17)(happy-dom@20.3.4(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.31.1)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) + specifier: 4.0.18 + version: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@24.10.9)(@vitest/browser-webdriverio@4.0.18)(@vitest/ui@4.0.18)(happy-dom@20.3.4(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.31.1)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) packages/ckeditor5: dependencies: @@ -912,11 +912,11 @@ importers: specifier: 8.53.0 version: 8.53.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) '@vitest/browser': - specifier: 4.0.17 - version: 4.0.17(bufferutil@4.0.9)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(utf-8-validate@6.0.5)(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.31.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1))(vitest@4.0.17) + specifier: 4.0.18 + version: 4.0.18(bufferutil@4.0.9)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(utf-8-validate@6.0.5)(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.31.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1))(vitest@4.0.18) '@vitest/coverage-istanbul': - specifier: 4.0.17 - version: 4.0.17(vitest@4.0.17) + specifier: 4.0.18 + version: 4.0.18(vitest@4.0.18) ckeditor5: specifier: 47.4.0 version: 47.4.0 @@ -948,8 +948,8 @@ importers: specifier: 2.0.0 version: 2.0.0(typescript@5.9.3)(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.31.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1)) vitest: - specifier: 4.0.17 - version: 4.0.17(@opentelemetry/api@1.9.0)(@types/node@24.10.9)(@vitest/browser-webdriverio@4.0.17)(@vitest/ui@4.0.17)(happy-dom@20.3.4(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.31.1)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) + specifier: 4.0.18 + version: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@24.10.9)(@vitest/browser-webdriverio@4.0.18)(@vitest/ui@4.0.18)(happy-dom@20.3.4(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.31.1)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) webdriverio: specifier: 9.23.2 version: 9.23.2(bufferutil@4.0.9)(utf-8-validate@6.0.5) @@ -972,11 +972,11 @@ importers: specifier: 8.53.0 version: 8.53.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) '@vitest/browser': - specifier: 4.0.17 - version: 4.0.17(bufferutil@4.0.9)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(utf-8-validate@6.0.5)(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.31.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1))(vitest@4.0.17) + specifier: 4.0.18 + version: 4.0.18(bufferutil@4.0.9)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(utf-8-validate@6.0.5)(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.31.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1))(vitest@4.0.18) '@vitest/coverage-istanbul': - specifier: 4.0.17 - version: 4.0.17(vitest@4.0.17) + specifier: 4.0.18 + version: 4.0.18(vitest@4.0.18) ckeditor5: specifier: 47.4.0 version: 47.4.0 @@ -1008,8 +1008,8 @@ importers: specifier: 2.0.0 version: 2.0.0(typescript@5.9.3)(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.31.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1)) vitest: - specifier: 4.0.17 - version: 4.0.17(@opentelemetry/api@1.9.0)(@types/node@24.10.9)(@vitest/browser-webdriverio@4.0.17)(@vitest/ui@4.0.17)(happy-dom@20.3.4(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.31.1)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) + specifier: 4.0.18 + version: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@24.10.9)(@vitest/browser-webdriverio@4.0.18)(@vitest/ui@4.0.18)(happy-dom@20.3.4(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.31.1)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) webdriverio: specifier: 9.23.2 version: 9.23.2(bufferutil@4.0.9)(utf-8-validate@6.0.5) @@ -1032,11 +1032,11 @@ importers: specifier: 8.53.0 version: 8.53.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) '@vitest/browser': - specifier: 4.0.17 - version: 4.0.17(bufferutil@4.0.9)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(utf-8-validate@6.0.5)(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.31.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1))(vitest@4.0.17) + specifier: 4.0.18 + version: 4.0.18(bufferutil@4.0.9)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(utf-8-validate@6.0.5)(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.31.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1))(vitest@4.0.18) '@vitest/coverage-istanbul': - specifier: 4.0.17 - version: 4.0.17(vitest@4.0.17) + specifier: 4.0.18 + version: 4.0.18(vitest@4.0.18) ckeditor5: specifier: 47.4.0 version: 47.4.0 @@ -1068,8 +1068,8 @@ importers: specifier: 2.0.0 version: 2.0.0(typescript@5.9.3)(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.31.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1)) vitest: - specifier: 4.0.17 - version: 4.0.17(@opentelemetry/api@1.9.0)(@types/node@24.10.9)(@vitest/browser-webdriverio@4.0.17)(@vitest/ui@4.0.17)(happy-dom@20.3.4(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.31.1)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) + specifier: 4.0.18 + version: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@24.10.9)(@vitest/browser-webdriverio@4.0.18)(@vitest/ui@4.0.18)(happy-dom@20.3.4(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.31.1)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) webdriverio: specifier: 9.23.2 version: 9.23.2(bufferutil@4.0.9)(utf-8-validate@6.0.5) @@ -1099,11 +1099,11 @@ importers: specifier: 8.53.0 version: 8.53.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) '@vitest/browser': - specifier: 4.0.17 - version: 4.0.17(bufferutil@4.0.9)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(utf-8-validate@6.0.5)(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.31.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1))(vitest@4.0.17) + specifier: 4.0.18 + version: 4.0.18(bufferutil@4.0.9)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(utf-8-validate@6.0.5)(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.31.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1))(vitest@4.0.18) '@vitest/coverage-istanbul': - specifier: 4.0.17 - version: 4.0.17(vitest@4.0.17) + specifier: 4.0.18 + version: 4.0.18(vitest@4.0.18) ckeditor5: specifier: 47.4.0 version: 47.4.0 @@ -1135,8 +1135,8 @@ importers: specifier: 2.0.0 version: 2.0.0(typescript@5.9.3)(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.31.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1)) vitest: - specifier: 4.0.17 - version: 4.0.17(@opentelemetry/api@1.9.0)(@types/node@24.10.9)(@vitest/browser-webdriverio@4.0.17)(@vitest/ui@4.0.17)(happy-dom@20.3.4(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.31.1)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) + specifier: 4.0.18 + version: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@24.10.9)(@vitest/browser-webdriverio@4.0.18)(@vitest/ui@4.0.18)(happy-dom@20.3.4(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.31.1)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) webdriverio: specifier: 9.23.2 version: 9.23.2(bufferutil@4.0.9)(utf-8-validate@6.0.5) @@ -1166,11 +1166,11 @@ importers: specifier: 8.53.0 version: 8.53.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) '@vitest/browser': - specifier: 4.0.17 - version: 4.0.17(bufferutil@4.0.9)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(utf-8-validate@6.0.5)(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.31.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1))(vitest@4.0.17) + specifier: 4.0.18 + version: 4.0.18(bufferutil@4.0.9)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(utf-8-validate@6.0.5)(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.31.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1))(vitest@4.0.18) '@vitest/coverage-istanbul': - specifier: 4.0.17 - version: 4.0.17(vitest@4.0.17) + specifier: 4.0.18 + version: 4.0.18(vitest@4.0.18) ckeditor5: specifier: 47.4.0 version: 47.4.0 @@ -1202,8 +1202,8 @@ importers: specifier: 2.0.0 version: 2.0.0(typescript@5.9.3)(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.31.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1)) vitest: - specifier: 4.0.17 - version: 4.0.17(@opentelemetry/api@1.9.0)(@types/node@24.10.9)(@vitest/browser-webdriverio@4.0.17)(@vitest/ui@4.0.17)(happy-dom@20.3.4(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.31.1)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) + specifier: 4.0.18 + version: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@24.10.9)(@vitest/browser-webdriverio@4.0.18)(@vitest/ui@4.0.18)(happy-dom@20.3.4(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.31.1)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) webdriverio: specifier: 9.23.2 version: 9.23.2(bufferutil@4.0.9)(utf-8-validate@6.0.5) @@ -5789,36 +5789,36 @@ packages: resolution: {integrity: sha512-kUDV5J+DXUl1SnO0IccRseXOK6sZolMHBHHNH+UNVoA/Ubr3r/bOFw4QTcImdn6PFUmlt9MvYvQfCHswuGvJNA==} engines: {node: '>=16'} - '@vitest/browser-webdriverio@4.0.17': - resolution: {integrity: sha512-0u1C2yW5J9wt7vrkZ5+VTj6+Ckz4LKV3SBWjk55clK5Earqh24c1tv+VdRW1ZSxlzJ6gjeAm/YoFM7MMq6tFHw==} + '@vitest/browser-webdriverio@4.0.18': + resolution: {integrity: sha512-dKn4kBq6gFk+wT5DMjPTvivXptz9MaN7CONoP+bA0bZxWofNsZtf9R4oPwQakuB95WBQ3j5kZ/9SXvB9i+XYQw==} peerDependencies: - vitest: 4.0.17 + vitest: 4.0.18 webdriverio: '*' - '@vitest/browser@4.0.17': - resolution: {integrity: sha512-cgf2JZk2fv5or3efmOrRJe1V9Md89BPgz4ntzbf84yAb+z2hW6niaGFinl9aFzPZ1q3TGfWZQWZ9gXTFThs2Qw==} + '@vitest/browser@4.0.18': + resolution: {integrity: sha512-gVQqh7paBz3gC+ZdcCmNSWJMk70IUjDeVqi+5m5vYpEHsIwRgw3Y545jljtajhkekIpIp5Gg8oK7bctgY0E2Ng==} peerDependencies: - vitest: 4.0.17 + vitest: 4.0.18 - '@vitest/coverage-istanbul@4.0.17': - resolution: {integrity: sha512-ayJXDFjASfKRwe4MlBxnC55busMQNxlWQu8i13q2V7/DT1KKUIfIqLgAphnBclqLmi/oAIC4JHcBF6GWZ3/EeQ==} + '@vitest/coverage-istanbul@4.0.18': + resolution: {integrity: sha512-0OhjP30owEDihYTZGWuq20rNtV1RjjJs1Mv4MaZIKcFBmiLUXX7HJLX4fU7wE+Mrc3lQxI2HKq6WrSXi5FGuCQ==} peerDependencies: - vitest: 4.0.17 + vitest: 4.0.18 - '@vitest/coverage-v8@4.0.17': - resolution: {integrity: sha512-/6zU2FLGg0jsd+ePZcwHRy3+WpNTBBhDY56P4JTRqUN/Dp6CvOEa9HrikcQ4KfV2b2kAHUFB4dl1SuocWXSFEw==} + '@vitest/coverage-v8@4.0.18': + resolution: {integrity: sha512-7i+N2i0+ME+2JFZhfuz7Tg/FqKtilHjGyGvoHYQ6iLV0zahbsJ9sljC9OcFcPDbhYKCet+sG8SsVqlyGvPflZg==} peerDependencies: - '@vitest/browser': 4.0.17 - vitest: 4.0.17 + '@vitest/browser': 4.0.18 + vitest: 4.0.18 peerDependenciesMeta: '@vitest/browser': optional: true - '@vitest/expect@4.0.17': - resolution: {integrity: sha512-mEoqP3RqhKlbmUmntNDDCJeTDavDR+fVYkSOw8qRwJFaW/0/5zA9zFeTrHqNtcmwh6j26yMmwx2PqUDPzt5ZAQ==} + '@vitest/expect@4.0.18': + resolution: {integrity: sha512-8sCWUyckXXYvx4opfzVY03EOiYVxyNrHS5QxX3DAIi5dpJAAkyJezHCP77VMX4HKA2LDT/Jpfo8i2r5BE3GnQQ==} - '@vitest/mocker@4.0.17': - resolution: {integrity: sha512-+ZtQhLA3lDh1tI2wxe3yMsGzbp7uuJSWBM1iTIKCbppWTSBN09PUC+L+fyNlQApQoR+Ps8twt2pbSSXg2fQVEQ==} + '@vitest/mocker@4.0.18': + resolution: {integrity: sha512-HhVd0MDnzzsgevnOWCBj5Otnzobjy5wLBe4EdeeFGv8luMsGcYqDuFRMcttKWZA5vVO8RFjexVovXvAM4JoJDQ==} peerDependencies: msw: ^2.4.9 vite: ^6.0.0 || ^7.0.0-0 @@ -5828,25 +5828,25 @@ packages: vite: optional: true - '@vitest/pretty-format@4.0.17': - resolution: {integrity: sha512-Ah3VAYmjcEdHg6+MwFE17qyLqBHZ+ni2ScKCiW2XrlSBV4H3Z7vYfPfz7CWQ33gyu76oc0Ai36+kgLU3rfF4nw==} + '@vitest/pretty-format@4.0.18': + resolution: {integrity: sha512-P24GK3GulZWC5tz87ux0m8OADrQIUVDPIjjj65vBXYG17ZeU3qD7r+MNZ1RNv4l8CGU2vtTRqixrOi9fYk/yKw==} - '@vitest/runner@4.0.17': - resolution: {integrity: sha512-JmuQyf8aMWoo/LmNFppdpkfRVHJcsgzkbCA+/Bk7VfNH7RE6Ut2qxegeyx2j3ojtJtKIbIGy3h+KxGfYfk28YQ==} + '@vitest/runner@4.0.18': + resolution: {integrity: sha512-rpk9y12PGa22Jg6g5M3UVVnTS7+zycIGk9ZNGN+m6tZHKQb7jrP7/77WfZy13Y/EUDd52NDsLRQhYKtv7XfPQw==} - '@vitest/snapshot@4.0.17': - resolution: {integrity: sha512-npPelD7oyL+YQM2gbIYvlavlMVWUfNNGZPcu0aEUQXt7FXTuqhmgiYupPnAanhKvyP6Srs2pIbWo30K0RbDtRQ==} + '@vitest/snapshot@4.0.18': + resolution: {integrity: sha512-PCiV0rcl7jKQjbgYqjtakly6T1uwv/5BQ9SwBLekVg/EaYeQFPiXcgrC2Y7vDMA8dM1SUEAEV82kgSQIlXNMvA==} - '@vitest/spy@4.0.17': - resolution: {integrity: sha512-I1bQo8QaP6tZlTomQNWKJE6ym4SHf3oLS7ceNjozxxgzavRAgZDc06T7kD8gb9bXKEgcLNt00Z+kZO6KaJ62Ew==} + '@vitest/spy@4.0.18': + resolution: {integrity: sha512-cbQt3PTSD7P2OARdVW3qWER5EGq7PHlvE+QfzSC0lbwO+xnt7+XH06ZzFjFRgzUX//JmpxrCu92VdwvEPlWSNw==} - '@vitest/ui@4.0.17': - resolution: {integrity: sha512-hRDjg6dlDz7JlZAvjbiCdAJ3SDG+NH8tjZe21vjxfvT2ssYAn72SRXMge3dKKABm3bIJ3C+3wdunIdur8PHEAw==} + '@vitest/ui@4.0.18': + resolution: {integrity: sha512-CGJ25bc8fRi8Lod/3GHSvXRKi7nBo3kxh0ApW4yCjmrWmRmlT53B5E08XRSZRliygG0aVNxLrBEqPYdz/KcCtQ==} peerDependencies: - vitest: 4.0.17 + vitest: 4.0.18 - '@vitest/utils@4.0.17': - resolution: {integrity: sha512-RG6iy+IzQpa9SB8HAFHJ9Y+pTzI+h8553MrciN9eC6TFBErqrQaTas4vG+MVj8S4uKk8uTT2p0vgZPnTdxd96w==} + '@vitest/utils@4.0.18': + resolution: {integrity: sha512-msMRKLMVLWygpK3u2Hybgi4MNjcYJvwTb0Ru09+fOyCXIgT5raYP041DRRdiJiI3k/2U6SEbAETB3YtBrUkCFA==} '@volar/language-core@2.4.13': resolution: {integrity: sha512-MnQJ7eKchJx5Oz+YdbqyFUk8BN6jasdJv31n/7r6/WwlOOv7qzvot6B66887l2ST3bUW4Mewml54euzpJWA6bg==} @@ -13917,18 +13917,18 @@ packages: yaml: optional: true - vitest@4.0.17: - resolution: {integrity: sha512-FQMeF0DJdWY0iOnbv466n/0BudNdKj1l5jYgl5JVTwjSsZSlqyXFt/9+1sEyhR6CLowbZpV7O1sCHrzBhucKKg==} + vitest@4.0.18: + resolution: {integrity: sha512-hOQuK7h0FGKgBAas7v0mSAsnvrIgAvWmRFjmzpJ7SwFHH3g1k2u37JtYwOwmEKhK6ZO3v9ggDBBm0La1LCK4uQ==} engines: {node: ^20.0.0 || ^22.0.0 || >=24.0.0} hasBin: true peerDependencies: '@edge-runtime/vm': '*' '@opentelemetry/api': ^1.9.0 '@types/node': ^20.0.0 || ^22.0.0 || >=24.0.0 - '@vitest/browser-playwright': 4.0.17 - '@vitest/browser-preview': 4.0.17 - '@vitest/browser-webdriverio': 4.0.17 - '@vitest/ui': 4.0.17 + '@vitest/browser-playwright': 4.0.18 + '@vitest/browser-preview': 4.0.18 + '@vitest/browser-webdriverio': 4.0.18 + '@vitest/ui': 4.0.18 happy-dom: '*' jsdom: '*' peerDependenciesMeta: @@ -15242,8 +15242,6 @@ snapshots: '@ckeditor/ckeditor5-core': 47.4.0 '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-code-block@47.4.0(patch_hash=2361d8caad7d6b5bddacc3a3b4aa37dbfba260b1c1b22a450413a79c1bb1ce95)': dependencies: @@ -15445,8 +15443,6 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 es-toolkit: 1.39.5 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-editor-decoupled@47.4.0': dependencies: @@ -15976,8 +15972,6 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.4.0 '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-restricted-editing@47.4.0': dependencies: @@ -20574,10 +20568,10 @@ snapshots: - bufferutil - utf-8-validate - '@vitest/browser-webdriverio@4.0.17(bufferutil@4.0.9)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(utf-8-validate@6.0.5)(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.31.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1))(vitest@4.0.17)(webdriverio@9.23.2(bufferutil@4.0.9)(utf-8-validate@6.0.5))': + '@vitest/browser-webdriverio@4.0.18(bufferutil@4.0.9)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(utf-8-validate@6.0.5)(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.31.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1))(vitest@4.0.18)(webdriverio@9.23.2(bufferutil@4.0.9)(utf-8-validate@6.0.5))': dependencies: - '@vitest/browser': 4.0.17(bufferutil@4.0.9)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(utf-8-validate@6.0.5)(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.31.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1))(vitest@4.0.17) - vitest: 4.0.17(@opentelemetry/api@1.9.0)(@types/node@24.10.9)(@vitest/browser-webdriverio@4.0.17)(@vitest/ui@4.0.17)(happy-dom@20.3.4(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.31.1)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) + '@vitest/browser': 4.0.18(bufferutil@4.0.9)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(utf-8-validate@6.0.5)(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.31.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1))(vitest@4.0.18) + vitest: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@24.10.9)(@vitest/browser-webdriverio@4.0.18)(@vitest/ui@4.0.18)(happy-dom@20.3.4(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.31.1)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) webdriverio: 9.23.2(bufferutil@4.0.9)(utf-8-validate@6.0.5) transitivePeerDependencies: - bufferutil @@ -20585,16 +20579,16 @@ snapshots: - utf-8-validate - vite - '@vitest/browser@4.0.17(bufferutil@4.0.9)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(utf-8-validate@6.0.5)(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.31.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1))(vitest@4.0.17)': + '@vitest/browser@4.0.18(bufferutil@4.0.9)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(utf-8-validate@6.0.5)(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.31.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1))(vitest@4.0.18)': dependencies: - '@vitest/mocker': 4.0.17(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.31.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1)) - '@vitest/utils': 4.0.17 + '@vitest/mocker': 4.0.18(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.31.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1)) + '@vitest/utils': 4.0.18 magic-string: 0.30.21 pixelmatch: 7.1.0 pngjs: 7.0.0 sirv: 3.0.2 tinyrainbow: 3.0.3 - vitest: 4.0.17(@opentelemetry/api@1.9.0)(@types/node@24.10.9)(@vitest/browser-webdriverio@4.0.17)(@vitest/ui@4.0.17)(happy-dom@20.3.4(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.31.1)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) + vitest: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@24.10.9)(@vitest/browser-webdriverio@4.0.18)(@vitest/ui@4.0.18)(happy-dom@20.3.4(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.31.1)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) ws: 8.19.0(bufferutil@4.0.9)(utf-8-validate@6.0.5) transitivePeerDependencies: - bufferutil @@ -20602,7 +20596,7 @@ snapshots: - utf-8-validate - vite - '@vitest/coverage-istanbul@4.0.17(vitest@4.0.17)': + '@vitest/coverage-istanbul@4.0.18(vitest@4.0.18)': dependencies: '@istanbuljs/schema': 0.1.3 '@jridgewell/gen-mapping': 0.3.13 @@ -20614,14 +20608,14 @@ snapshots: magicast: 0.5.1 obug: 2.1.1 tinyrainbow: 3.0.3 - vitest: 4.0.17(@opentelemetry/api@1.9.0)(@types/node@24.10.9)(@vitest/browser-webdriverio@4.0.17)(@vitest/ui@4.0.17)(happy-dom@20.3.4(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.31.1)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) + vitest: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@24.10.9)(@vitest/browser-webdriverio@4.0.18)(@vitest/ui@4.0.18)(happy-dom@20.3.4(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.31.1)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) transitivePeerDependencies: - supports-color - '@vitest/coverage-v8@4.0.17(@vitest/browser@4.0.17(bufferutil@4.0.9)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(utf-8-validate@6.0.5)(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.31.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1))(vitest@4.0.17))(vitest@4.0.17)': + '@vitest/coverage-v8@4.0.18(@vitest/browser@4.0.18(bufferutil@4.0.9)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(utf-8-validate@6.0.5)(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.31.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1))(vitest@4.0.18))(vitest@4.0.18)': dependencies: '@bcoe/v8-coverage': 1.0.2 - '@vitest/utils': 4.0.17 + '@vitest/utils': 4.0.18 ast-v8-to-istanbul: 0.3.10 istanbul-lib-coverage: 3.2.2 istanbul-lib-report: 3.0.1 @@ -20630,59 +20624,59 @@ snapshots: obug: 2.1.1 std-env: 3.10.0 tinyrainbow: 3.0.3 - vitest: 4.0.17(@opentelemetry/api@1.9.0)(@types/node@24.10.9)(@vitest/browser-webdriverio@4.0.17)(@vitest/ui@4.0.17)(happy-dom@20.3.4(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.31.1)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) + vitest: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@24.10.9)(@vitest/browser-webdriverio@4.0.18)(@vitest/ui@4.0.18)(happy-dom@20.3.4(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.31.1)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) optionalDependencies: - '@vitest/browser': 4.0.17(bufferutil@4.0.9)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(utf-8-validate@6.0.5)(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.31.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1))(vitest@4.0.17) + '@vitest/browser': 4.0.18(bufferutil@4.0.9)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(utf-8-validate@6.0.5)(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.31.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1))(vitest@4.0.18) - '@vitest/expect@4.0.17': + '@vitest/expect@4.0.18': dependencies: '@standard-schema/spec': 1.0.0 '@types/chai': 5.2.2 - '@vitest/spy': 4.0.17 - '@vitest/utils': 4.0.17 + '@vitest/spy': 4.0.18 + '@vitest/utils': 4.0.18 chai: 6.2.1 tinyrainbow: 3.0.3 - '@vitest/mocker@4.0.17(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.31.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1))': + '@vitest/mocker@4.0.18(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.31.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1))': dependencies: - '@vitest/spy': 4.0.17 + '@vitest/spy': 4.0.18 estree-walker: 3.0.3 magic-string: 0.30.21 optionalDependencies: msw: 2.7.5(@types/node@24.10.9)(typescript@5.9.3) vite: 7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.31.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) - '@vitest/pretty-format@4.0.17': + '@vitest/pretty-format@4.0.18': dependencies: tinyrainbow: 3.0.3 - '@vitest/runner@4.0.17': + '@vitest/runner@4.0.18': dependencies: - '@vitest/utils': 4.0.17 + '@vitest/utils': 4.0.18 pathe: 2.0.3 - '@vitest/snapshot@4.0.17': + '@vitest/snapshot@4.0.18': dependencies: - '@vitest/pretty-format': 4.0.17 + '@vitest/pretty-format': 4.0.18 magic-string: 0.30.21 pathe: 2.0.3 - '@vitest/spy@4.0.17': {} + '@vitest/spy@4.0.18': {} - '@vitest/ui@4.0.17(vitest@4.0.17)': + '@vitest/ui@4.0.18(vitest@4.0.18)': dependencies: - '@vitest/utils': 4.0.17 + '@vitest/utils': 4.0.18 fflate: 0.8.2 flatted: 3.3.3 pathe: 2.0.3 sirv: 3.0.2 tinyglobby: 0.2.15 tinyrainbow: 3.0.3 - vitest: 4.0.17(@opentelemetry/api@1.9.0)(@types/node@24.10.9)(@vitest/browser-webdriverio@4.0.17)(@vitest/ui@4.0.17)(happy-dom@20.3.4(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.31.1)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) + vitest: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@24.10.9)(@vitest/browser-webdriverio@4.0.18)(@vitest/ui@4.0.18)(happy-dom@20.3.4(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.31.1)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) - '@vitest/utils@4.0.17': + '@vitest/utils@4.0.18': dependencies: - '@vitest/pretty-format': 4.0.17 + '@vitest/pretty-format': 4.0.18 tinyrainbow: 3.0.3 '@volar/language-core@2.4.13': @@ -30547,15 +30541,15 @@ snapshots: tsx: 4.21.0 yaml: 2.8.1 - vitest@4.0.17(@opentelemetry/api@1.9.0)(@types/node@24.10.9)(@vitest/browser-webdriverio@4.0.17)(@vitest/ui@4.0.17)(happy-dom@20.3.4(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.31.1)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1): + vitest@4.0.18(@opentelemetry/api@1.9.0)(@types/node@24.10.9)(@vitest/browser-webdriverio@4.0.18)(@vitest/ui@4.0.18)(happy-dom@20.3.4(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.31.1)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1): dependencies: - '@vitest/expect': 4.0.17 - '@vitest/mocker': 4.0.17(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.31.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1)) - '@vitest/pretty-format': 4.0.17 - '@vitest/runner': 4.0.17 - '@vitest/snapshot': 4.0.17 - '@vitest/spy': 4.0.17 - '@vitest/utils': 4.0.17 + '@vitest/expect': 4.0.18 + '@vitest/mocker': 4.0.18(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.31.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1)) + '@vitest/pretty-format': 4.0.18 + '@vitest/runner': 4.0.18 + '@vitest/snapshot': 4.0.18 + '@vitest/spy': 4.0.18 + '@vitest/utils': 4.0.18 es-module-lexer: 1.7.0 expect-type: 1.2.2 magic-string: 0.30.21 @@ -30572,8 +30566,8 @@ snapshots: optionalDependencies: '@opentelemetry/api': 1.9.0 '@types/node': 24.10.9 - '@vitest/browser-webdriverio': 4.0.17(bufferutil@4.0.9)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(utf-8-validate@6.0.5)(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.31.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1))(vitest@4.0.17)(webdriverio@9.23.2(bufferutil@4.0.9)(utf-8-validate@6.0.5)) - '@vitest/ui': 4.0.17(vitest@4.0.17) + '@vitest/browser-webdriverio': 4.0.18(bufferutil@4.0.9)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(utf-8-validate@6.0.5)(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.31.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1))(vitest@4.0.18)(webdriverio@9.23.2(bufferutil@4.0.9)(utf-8-validate@6.0.5)) + '@vitest/ui': 4.0.18(vitest@4.0.18) happy-dom: 20.3.4(bufferutil@4.0.9)(utf-8-validate@6.0.5) jsdom: 26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5) transitivePeerDependencies: From a57a1dfc475f24b757212cc45afd3f39c9208791 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 23 Jan 2026 00:42:22 +0000 Subject: [PATCH 175/353] chore(deps): update dependency express-session to v1.19.0 --- apps/server/package.json | 2 +- pnpm-lock.yaml | 16 +++++----------- 2 files changed, 6 insertions(+), 12 deletions(-) diff --git a/apps/server/package.json b/apps/server/package.json index 482f608dac..5edc905be4 100644 --- a/apps/server/package.json +++ b/apps/server/package.json @@ -91,7 +91,7 @@ "express-http-proxy": "2.1.2", "express-openid-connect": "2.19.4", "express-rate-limit": "8.2.1", - "express-session": "1.18.2", + "express-session": "1.19.0", "file-uri-to-path": "2.0.0", "fs-extra": "11.3.3", "helmet": "8.1.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index f9cc1a8dc8..f202e1c5de 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -688,8 +688,8 @@ importers: specifier: 8.2.1 version: 8.2.1(express@5.2.1) express-session: - specifier: 1.18.2 - version: 1.18.2 + specifier: 1.19.0 + version: 1.19.0 file-uri-to-path: specifier: 2.0.0 version: 2.0.0 @@ -8183,8 +8183,8 @@ packages: peerDependencies: express: '>= 4.11' - express-session@1.18.2: - resolution: {integrity: sha512-SZjssGQC7TzTs9rpPDuUrR23GNZ9+2+IkA/+IJWmvQilTr5OSliEHGF+D9scbIpdC6yGtTI0/VhaHoVes2AN/A==} + express-session@1.19.0: + resolution: {integrity: sha512-0csaMkGq+vaiZTmSMMGkfdCOabYv192VbytFypcvI0MANrp+4i/7yEkJ0sbAEhycQjntaKGzYfjfXQyVb7BHMA==} engines: {node: '>= 0.8.0'} express@4.21.2: @@ -15242,8 +15242,6 @@ snapshots: '@ckeditor/ckeditor5-core': 47.4.0 '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-code-block@47.4.0(patch_hash=2361d8caad7d6b5bddacc3a3b4aa37dbfba260b1c1b22a450413a79c1bb1ce95)': dependencies: @@ -15445,8 +15443,6 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 es-toolkit: 1.39.5 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-editor-decoupled@47.4.0': dependencies: @@ -15976,8 +15972,6 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.4.0 '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-restricted-editing@47.4.0': dependencies: @@ -23713,7 +23707,7 @@ snapshots: express: 5.2.1 ip-address: 10.0.1 - express-session@1.18.2: + express-session@1.19.0: dependencies: cookie: 0.7.2 cookie-signature: 1.0.7 From 901201a7af6eefcd086e12efc7cc6f29fb3ee333 Mon Sep 17 00:00:00 2001 From: Wael Nasreddine <wael.nasreddine@gmail.com> Date: Thu, 22 Jan 2026 18:59:03 -0800 Subject: [PATCH 176/353] chore: pnpm2nix to use our copy of flake-utils --- flake.lock | 37 +++---------------------------------- flake.nix | 5 ++++- 2 files changed, 7 insertions(+), 35 deletions(-) diff --git a/flake.lock b/flake.lock index 447d1e1b02..9603cb3c6d 100644 --- a/flake.lock +++ b/flake.lock @@ -18,24 +18,6 @@ "type": "github" } }, - "flake-utils_2": { - "inputs": { - "systems": "systems_2" - }, - "locked": { - "lastModified": 1701680307, - "narHash": "sha256-kAuep2h5ajznlPMD9rnQyffWG8EM/C73lejGofXvdM8=", - "owner": "numtide", - "repo": "flake-utils", - "rev": "4022d587cbbfd70fe950c1e2083a02621806a725", - "type": "github" - }, - "original": { - "owner": "numtide", - "repo": "flake-utils", - "type": "github" - } - }, "nixpkgs": { "locked": { "lastModified": 1765701828, @@ -54,7 +36,9 @@ }, "pnpm2nix": { "inputs": { - "flake-utils": "flake-utils_2", + "flake-utils": [ + "flake-utils" + ], "nixpkgs": [ "nixpkgs" ] @@ -94,21 +78,6 @@ "repo": "default", "type": "github" } - }, - "systems_2": { - "locked": { - "lastModified": 1681028828, - "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", - "owner": "nix-systems", - "repo": "default", - "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", - "type": "github" - }, - "original": { - "owner": "nix-systems", - "repo": "default", - "type": "github" - } } }, "root": "root", diff --git a/flake.nix b/flake.nix index ed1548b9ee..2434a8d5db 100644 --- a/flake.nix +++ b/flake.nix @@ -6,7 +6,10 @@ flake-utils.url = "github:numtide/flake-utils"; pnpm2nix = { url = "github:FliegendeWurst/pnpm2nix-nzbr"; - inputs.nixpkgs.follows = "nixpkgs"; + inputs = { + flake-utils.follows = "flake-utils"; + nixpkgs.follows = "nixpkgs"; + }; }; }; From 9a912c16ada632e18e39d57943ee8a16439ea647 Mon Sep 17 00:00:00 2001 From: Hosted Weblate <hosted@weblate.org> Date: Fri, 23 Jan 2026 07:51:58 +0100 Subject: [PATCH 177/353] Update translation files Updated by "Cleanup translation files" add-on in Weblate. Translation: Trilium Notes/README Translate-URL: https://hosted.weblate.org/projects/trilium/readme/ --- docs/README-hi.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/README-hi.md b/docs/README-hi.md index d0b229deb4..b8e1901420 100644 --- a/docs/README-hi.md +++ b/docs/README-hi.md @@ -114,8 +114,8 @@ application with focus on building large personal knowledge bases. location pins and GPX tracks * [Scripting](https://docs.triliumnotes.org/user-guide/scripts) - see [Advanced showcases](https://docs.triliumnotes.org/user-guide/advanced-usage/advanced-showcases) -* [REST API](https://docs.triliumnotes.org/user-guide/advanced-usage/etapi) for - automation +* ऑटोमेशन के लिए [REST + API](https://docs.triliumnotes.org/user-guide/advanced-usage/etapi) * Scales well in both usability and performance upwards of 100 000 notes * Touch optimized [mobile frontend](https://docs.triliumnotes.org/user-guide/setup/mobile-frontend) for From 36429da6da87c2b4fa1e357dff36a30021d5cb81 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 23 Jan 2026 07:09:50 +0000 Subject: [PATCH 178/353] chore(deps): update dependency happy-dom to v20.3.7 --- apps/client/package.json | 2 +- package.json | 2 +- pnpm-lock.yaml | 48 +++++++++++++++++++++------------------- 3 files changed, 27 insertions(+), 25 deletions(-) diff --git a/apps/client/package.json b/apps/client/package.json index f429465319..d14478f5c1 100644 --- a/apps/client/package.json +++ b/apps/client/package.json @@ -78,7 +78,7 @@ "@types/reveal.js": "5.2.2", "@types/tabulator-tables": "6.3.1", "copy-webpack-plugin": "13.0.1", - "happy-dom": "20.3.4", + "happy-dom": "20.3.7", "lightningcss": "1.31.1", "script-loader": "0.7.2", "vite-plugin-static-copy": "3.1.5" diff --git a/package.json b/package.json index 10c1a22808..e71d37e9bd 100644 --- a/package.json +++ b/package.json @@ -63,7 +63,7 @@ "eslint-config-prettier": "10.1.8", "eslint-plugin-playwright": "2.5.0", "eslint-plugin-simple-import-sort": "12.1.1", - "happy-dom": "20.3.4", + "happy-dom": "20.3.7", "http-server": "14.1.1", "jiti": "2.6.1", "js-yaml": "4.1.1", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 950a4e4a35..e6810837eb 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -92,8 +92,8 @@ importers: specifier: 12.1.1 version: 12.1.1(eslint@9.39.2(jiti@2.6.1)) happy-dom: - specifier: 20.3.4 - version: 20.3.4(bufferutil@4.0.9)(utf-8-validate@6.0.5) + specifier: 20.3.7 + version: 20.3.7(bufferutil@4.0.9)(utf-8-validate@6.0.5) http-server: specifier: 14.1.1 version: 14.1.1 @@ -135,7 +135,7 @@ importers: version: 4.5.4(@types/node@24.10.9)(rollup@4.52.0)(typescript@5.9.3)(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.31.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1)) vitest: specifier: 4.0.18 - version: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@24.10.9)(@vitest/browser-webdriverio@4.0.18)(@vitest/ui@4.0.18)(happy-dom@20.3.4(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.31.1)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) + version: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@24.10.9)(@vitest/browser-webdriverio@4.0.18)(@vitest/ui@4.0.18)(happy-dom@20.3.7(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.31.1)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) apps/build-docs: devDependencies: @@ -345,8 +345,8 @@ importers: specifier: 13.0.1 version: 13.0.1(webpack@5.101.3(esbuild@0.27.2)) happy-dom: - specifier: 20.3.4 - version: 20.3.4(bufferutil@4.0.9)(utf-8-validate@6.0.5) + specifier: 20.3.7 + version: 20.3.7(bufferutil@4.0.9)(utf-8-validate@6.0.5) lightningcss: specifier: 1.31.1 version: 1.31.1 @@ -858,7 +858,7 @@ importers: version: 7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.31.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) vitest: specifier: 4.0.18 - version: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@24.10.9)(@vitest/browser-webdriverio@4.0.18)(@vitest/ui@4.0.18)(happy-dom@20.3.4(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.31.1)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) + version: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@24.10.9)(@vitest/browser-webdriverio@4.0.18)(@vitest/ui@4.0.18)(happy-dom@20.3.7(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.31.1)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) packages/ckeditor5: dependencies: @@ -949,7 +949,7 @@ importers: version: 2.0.0(typescript@5.9.3)(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.31.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1)) vitest: specifier: 4.0.18 - version: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@24.10.9)(@vitest/browser-webdriverio@4.0.18)(@vitest/ui@4.0.18)(happy-dom@20.3.4(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.31.1)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) + version: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@24.10.9)(@vitest/browser-webdriverio@4.0.18)(@vitest/ui@4.0.18)(happy-dom@20.3.7(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.31.1)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) webdriverio: specifier: 9.23.2 version: 9.23.2(bufferutil@4.0.9)(utf-8-validate@6.0.5) @@ -1009,7 +1009,7 @@ importers: version: 2.0.0(typescript@5.9.3)(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.31.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1)) vitest: specifier: 4.0.18 - version: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@24.10.9)(@vitest/browser-webdriverio@4.0.18)(@vitest/ui@4.0.18)(happy-dom@20.3.4(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.31.1)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) + version: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@24.10.9)(@vitest/browser-webdriverio@4.0.18)(@vitest/ui@4.0.18)(happy-dom@20.3.7(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.31.1)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) webdriverio: specifier: 9.23.2 version: 9.23.2(bufferutil@4.0.9)(utf-8-validate@6.0.5) @@ -1069,7 +1069,7 @@ importers: version: 2.0.0(typescript@5.9.3)(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.31.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1)) vitest: specifier: 4.0.18 - version: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@24.10.9)(@vitest/browser-webdriverio@4.0.18)(@vitest/ui@4.0.18)(happy-dom@20.3.4(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.31.1)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) + version: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@24.10.9)(@vitest/browser-webdriverio@4.0.18)(@vitest/ui@4.0.18)(happy-dom@20.3.7(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.31.1)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) webdriverio: specifier: 9.23.2 version: 9.23.2(bufferutil@4.0.9)(utf-8-validate@6.0.5) @@ -1136,7 +1136,7 @@ importers: version: 2.0.0(typescript@5.9.3)(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.31.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1)) vitest: specifier: 4.0.18 - version: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@24.10.9)(@vitest/browser-webdriverio@4.0.18)(@vitest/ui@4.0.18)(happy-dom@20.3.4(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.31.1)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) + version: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@24.10.9)(@vitest/browser-webdriverio@4.0.18)(@vitest/ui@4.0.18)(happy-dom@20.3.7(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.31.1)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) webdriverio: specifier: 9.23.2 version: 9.23.2(bufferutil@4.0.9)(utf-8-validate@6.0.5) @@ -1203,7 +1203,7 @@ importers: version: 2.0.0(typescript@5.9.3)(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.31.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1)) vitest: specifier: 4.0.18 - version: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@24.10.9)(@vitest/browser-webdriverio@4.0.18)(@vitest/ui@4.0.18)(happy-dom@20.3.4(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.31.1)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) + version: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@24.10.9)(@vitest/browser-webdriverio@4.0.18)(@vitest/ui@4.0.18)(happy-dom@20.3.7(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.31.1)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) webdriverio: specifier: 9.23.2 version: 9.23.2(bufferutil@4.0.9)(utf-8-validate@6.0.5) @@ -8746,8 +8746,8 @@ packages: engines: {node: '>=0.4.7'} hasBin: true - happy-dom@20.3.4: - resolution: {integrity: sha512-rfbiwB6OKxZFIFQ7SRnCPB2WL9WhyXsFoTfecYgeCeFSOBxvkWLaXsdv5ehzJrfqwXQmDephAKWLRQoFoJwrew==} + happy-dom@20.3.7: + resolution: {integrity: sha512-sb5IzoRl1WJKsUSRe+IloJf3z1iDq5PQ7Yk/ULMsZ5IAQEs9ZL7RsFfiKBXU7nK9QmO+iz0e59EH8r8jexTZ/g==} engines: {node: '>=20.0.0'} has-bigints@1.1.0: @@ -15242,6 +15242,8 @@ snapshots: '@ckeditor/ckeditor5-core': 47.4.0 '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-code-block@47.4.0(patch_hash=2361d8caad7d6b5bddacc3a3b4aa37dbfba260b1c1b22a450413a79c1bb1ce95)': dependencies: @@ -15461,8 +15463,6 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 es-toolkit: 1.39.5 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-editor-multi-root@47.4.0': dependencies: @@ -15512,6 +15512,8 @@ snapshots: '@ckeditor/ckeditor5-core': 47.4.0 '@ckeditor/ckeditor5-engine': 47.4.0 '@ckeditor/ckeditor5-utils': 47.4.0 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-essentials@47.4.0': dependencies: @@ -20571,7 +20573,7 @@ snapshots: '@vitest/browser-webdriverio@4.0.18(bufferutil@4.0.9)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(utf-8-validate@6.0.5)(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.31.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1))(vitest@4.0.18)(webdriverio@9.23.2(bufferutil@4.0.9)(utf-8-validate@6.0.5))': dependencies: '@vitest/browser': 4.0.18(bufferutil@4.0.9)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(utf-8-validate@6.0.5)(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.31.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1))(vitest@4.0.18) - vitest: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@24.10.9)(@vitest/browser-webdriverio@4.0.18)(@vitest/ui@4.0.18)(happy-dom@20.3.4(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.31.1)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) + vitest: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@24.10.9)(@vitest/browser-webdriverio@4.0.18)(@vitest/ui@4.0.18)(happy-dom@20.3.7(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.31.1)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) webdriverio: 9.23.2(bufferutil@4.0.9)(utf-8-validate@6.0.5) transitivePeerDependencies: - bufferutil @@ -20588,7 +20590,7 @@ snapshots: pngjs: 7.0.0 sirv: 3.0.2 tinyrainbow: 3.0.3 - vitest: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@24.10.9)(@vitest/browser-webdriverio@4.0.18)(@vitest/ui@4.0.18)(happy-dom@20.3.4(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.31.1)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) + vitest: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@24.10.9)(@vitest/browser-webdriverio@4.0.18)(@vitest/ui@4.0.18)(happy-dom@20.3.7(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.31.1)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) ws: 8.19.0(bufferutil@4.0.9)(utf-8-validate@6.0.5) transitivePeerDependencies: - bufferutil @@ -20608,7 +20610,7 @@ snapshots: magicast: 0.5.1 obug: 2.1.1 tinyrainbow: 3.0.3 - vitest: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@24.10.9)(@vitest/browser-webdriverio@4.0.18)(@vitest/ui@4.0.18)(happy-dom@20.3.4(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.31.1)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) + vitest: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@24.10.9)(@vitest/browser-webdriverio@4.0.18)(@vitest/ui@4.0.18)(happy-dom@20.3.7(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.31.1)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) transitivePeerDependencies: - supports-color @@ -20624,7 +20626,7 @@ snapshots: obug: 2.1.1 std-env: 3.10.0 tinyrainbow: 3.0.3 - vitest: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@24.10.9)(@vitest/browser-webdriverio@4.0.18)(@vitest/ui@4.0.18)(happy-dom@20.3.4(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.31.1)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) + vitest: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@24.10.9)(@vitest/browser-webdriverio@4.0.18)(@vitest/ui@4.0.18)(happy-dom@20.3.7(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.31.1)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) optionalDependencies: '@vitest/browser': 4.0.18(bufferutil@4.0.9)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(utf-8-validate@6.0.5)(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.31.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1))(vitest@4.0.18) @@ -20672,7 +20674,7 @@ snapshots: sirv: 3.0.2 tinyglobby: 0.2.15 tinyrainbow: 3.0.3 - vitest: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@24.10.9)(@vitest/browser-webdriverio@4.0.18)(@vitest/ui@4.0.18)(happy-dom@20.3.4(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.31.1)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) + vitest: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@24.10.9)(@vitest/browser-webdriverio@4.0.18)(@vitest/ui@4.0.18)(happy-dom@20.3.7(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.31.1)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) '@vitest/utils@4.0.18': dependencies: @@ -24459,7 +24461,7 @@ snapshots: optionalDependencies: uglify-js: 3.19.3 - happy-dom@20.3.4(bufferutil@4.0.9)(utf-8-validate@6.0.5): + happy-dom@20.3.7(bufferutil@4.0.9)(utf-8-validate@6.0.5): dependencies: '@types/node': 24.10.9 '@types/whatwg-mimetype': 3.0.2 @@ -30541,7 +30543,7 @@ snapshots: tsx: 4.21.0 yaml: 2.8.1 - vitest@4.0.18(@opentelemetry/api@1.9.0)(@types/node@24.10.9)(@vitest/browser-webdriverio@4.0.18)(@vitest/ui@4.0.18)(happy-dom@20.3.4(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.31.1)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1): + vitest@4.0.18(@opentelemetry/api@1.9.0)(@types/node@24.10.9)(@vitest/browser-webdriverio@4.0.18)(@vitest/ui@4.0.18)(happy-dom@20.3.7(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.31.1)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1): dependencies: '@vitest/expect': 4.0.18 '@vitest/mocker': 4.0.18(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.31.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1)) @@ -30568,7 +30570,7 @@ snapshots: '@types/node': 24.10.9 '@vitest/browser-webdriverio': 4.0.18(bufferutil@4.0.9)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(utf-8-validate@6.0.5)(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.31.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1))(vitest@4.0.18)(webdriverio@9.23.2(bufferutil@4.0.9)(utf-8-validate@6.0.5)) '@vitest/ui': 4.0.18(vitest@4.0.18) - happy-dom: 20.3.4(bufferutil@4.0.9)(utf-8-validate@6.0.5) + happy-dom: 20.3.7(bufferutil@4.0.9)(utf-8-validate@6.0.5) jsdom: 26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5) transitivePeerDependencies: - jiti From 3e3c3e3bb4bdbddaa1f6f41bcb381f0ca3531243 Mon Sep 17 00:00:00 2001 From: Elian Doran <contact@eliandoran.me> Date: Fri, 23 Jan 2026 11:38:18 +0200 Subject: [PATCH 179/353] fix(calendar): redundant refresh when adding new item --- apps/client/src/services/attributes.ts | 6 +++--- .../src/widgets/collections/calendar/api.ts | 17 +++++++++-------- .../src/widgets/collections/calendar/index.tsx | 18 ++++++++++-------- 3 files changed, 22 insertions(+), 19 deletions(-) diff --git a/apps/client/src/services/attributes.ts b/apps/client/src/services/attributes.ts index 0b156dcf3a..728ff515c6 100644 --- a/apps/client/src/services/attributes.ts +++ b/apps/client/src/services/attributes.ts @@ -14,13 +14,13 @@ async function addLabel(noteId: string, name: string, value: string = "", isInhe }); } -export async function setLabel(noteId: string, name: string, value: string = "", isInheritable = false) { +export async function setLabel(noteId: string, name: string, value: string = "", isInheritable = false, componentId?: string) { await server.put(`notes/${noteId}/set-attribute`, { type: "label", name, value, - isInheritable - }); + isInheritable, + }, componentId); } export async function setRelation(noteId: string, name: string, value: string = "", isInheritable = false) { diff --git a/apps/client/src/widgets/collections/calendar/api.ts b/apps/client/src/widgets/collections/calendar/api.ts index eef391108d..65f8905e4c 100644 --- a/apps/client/src/widgets/collections/calendar/api.ts +++ b/apps/client/src/widgets/collections/calendar/api.ts @@ -1,8 +1,8 @@ import { CreateChildrenResponse } from "@triliumnext/commons"; -import server from "../../../services/server"; + import FNote from "../../../entities/fnote"; import { setAttribute, setLabel } from "../../../services/attributes"; -import froca from "../../../services/froca"; +import server from "../../../services/server"; interface NewEventOpts { title: string; @@ -10,6 +10,7 @@ interface NewEventOpts { endDate?: string | null; startTime?: string | null; endTime?: string | null; + componentId?: string; } interface ChangeEventOpts { @@ -19,24 +20,24 @@ interface ChangeEventOpts { endTime?: string | null; } -export async function newEvent(parentNote: FNote, { title, startDate, endDate, startTime, endTime }: NewEventOpts) { +export async function newEvent(parentNote: FNote, { title, startDate, endDate, startTime, endTime, componentId }: NewEventOpts) { // Create the note. const { note } = await server.post<CreateChildrenResponse>(`notes/${parentNote.noteId}/children?target=into`, { title, content: "", type: "text" - }); + }, componentId); // Set the attributes. - setLabel(note.noteId, "startDate", startDate); + setLabel(note.noteId, "startDate", startDate, false, componentId); if (endDate) { - setLabel(note.noteId, "endDate", endDate); + setLabel(note.noteId, "endDate", endDate, false, componentId); } if (startTime) { - setLabel(note.noteId, "startTime", startTime); + setLabel(note.noteId, "startTime", startTime, false, componentId); } if (endTime) { - setLabel(note.noteId, "endTime", endTime); + setLabel(note.noteId, "endTime", endTime, false, componentId); } } diff --git a/apps/client/src/widgets/collections/calendar/index.tsx b/apps/client/src/widgets/collections/calendar/index.tsx index 9d1721a97a..fd7669646e 100644 --- a/apps/client/src/widgets/collections/calendar/index.tsx +++ b/apps/client/src/widgets/collections/calendar/index.tsx @@ -5,7 +5,7 @@ import { DateSelectArg, EventChangeArg, EventMountArg, EventSourceFuncArg, Local import { DateClickArg } from "@fullcalendar/interaction"; import { DISPLAYABLE_LOCALE_IDS } from "@triliumnext/commons"; import { RefObject } from "preact"; -import { useCallback, useEffect, useMemo, useRef, useState } from "preact/hooks"; +import { useCallback, useContext, useEffect, useMemo, useRef, useState } from "preact/hooks"; import appContext from "../../../components/app_context"; import FNote from "../../../entities/fnote"; @@ -17,6 +17,7 @@ import { isMobile } from "../../../services/utils"; import ActionButton from "../../react/ActionButton"; import Button, { ButtonGroup } from "../../react/Button"; import { useNoteLabel, useNoteLabelBoolean, useResizeObserver, useSpacedUpdate, useTriliumEvent, useTriliumOption, useTriliumOptionInt } from "../../react/hooks"; +import { ParentComponent } from "../../react/react_utils"; import TouchBar, { TouchBarButton, TouchBarLabel, TouchBarSegmentedControl, TouchBarSpacer } from "../../react/TouchBar"; import { ViewModeProps } from "../interface"; import { changeEvent, newEvent } from "./api"; @@ -87,6 +88,7 @@ export const LOCALE_MAPPINGS: Record<DISPLAYABLE_LOCALE_IDS, (() => Promise<{ de }; export default function CalendarView({ note, noteIds }: ViewModeProps<CalendarViewData>) { + const parentComponent = useContext(ParentComponent); const containerRef = useRef<HTMLDivElement>(null); const calendarRef = useRef<FullCalendar>(null); @@ -105,24 +107,24 @@ export default function CalendarView({ note, noteIds }: ViewModeProps<CalendarVi const eventBuilder = useMemo(() => { if (!isCalendarRoot) { return async () => await buildEvents(noteIds); - } + } return async (e: EventSourceFuncArg) => await buildEventsForCalendar(note, e); - }, [isCalendarRoot, noteIds]); const plugins = usePlugins(isEditable, isCalendarRoot); const locale = useLocale(); const { eventDidMount } = useEventDisplayCustomization(note); - const editingProps = useEditing(note, isEditable, isCalendarRoot); + const editingProps = useEditing(note, isEditable, isCalendarRoot, parentComponent?.componentId); // React to changes. useTriliumEvent("entitiesReloaded", ({ loadResults }) => { if (loadResults.getNoteIds().some(noteId => noteIds.includes(noteId)) // note title change. - || loadResults.getAttributeRows().some((a) => noteIds.includes(a.noteId ?? ""))) // subnote change. + || loadResults.getAttributeRows(parentComponent?.componentId).some((a) => noteIds.includes(a.noteId ?? ""))) // subnote change. { // Defer execution after the load results are processed so that the event builder has the updated data to work with. setTimeout(() => { + console.log("Refresh"); calendarRef.current?.refetchEvents(); }, 0); } @@ -222,7 +224,7 @@ function useLocale() { return calendarLocale; } -function useEditing(note: FNote, isEditable: boolean, isCalendarRoot: boolean) { +function useEditing(note: FNote, isEditable: boolean, isCalendarRoot: boolean, componentId: string | undefined) { const onCalendarSelection = useCallback(async (e: DateSelectArg) => { const { startDate, endDate } = parseStartEndDateFromEvent(e); if (!startDate) return; @@ -234,8 +236,8 @@ function useEditing(note: FNote, isEditable: boolean, isCalendarRoot: boolean) { return; } - newEvent(note, { title, startDate, endDate, startTime, endTime }); - }, [ note ]); + newEvent(note, { title, startDate, endDate, startTime, endTime, componentId }); + }, [ note, componentId ]); const onEventChange = useCallback(async (e: EventChangeArg) => { const { startDate, endDate } = parseStartEndDateFromEvent(e.event); From 2a61f51e06ecb476260bf45895245c8a9f68d710 Mon Sep 17 00:00:00 2001 From: Elian Doran <contact@eliandoran.me> Date: Fri, 23 Jan 2026 11:58:57 +0200 Subject: [PATCH 180/353] chore(calendar): remove automatic fetching on note creation --- apps/client/src/widgets/collections/calendar/index.tsx | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/apps/client/src/widgets/collections/calendar/index.tsx b/apps/client/src/widgets/collections/calendar/index.tsx index fd7669646e..103c64d637 100644 --- a/apps/client/src/widgets/collections/calendar/index.tsx +++ b/apps/client/src/widgets/collections/calendar/index.tsx @@ -104,12 +104,17 @@ export default function CalendarView({ note, noteIds }: ViewModeProps<CalendarVi useResizeObserver(containerRef, () => calendarRef.current?.updateSize()); const isCalendarRoot = (calendarRoot || workspaceCalendarRoot); const isEditable = !isCalendarRoot; + const noteIdsRef = useRef(noteIds); + useEffect(() => { + noteIdsRef.current = noteIds; + }, [ noteIds ]); + const eventBuilder = useMemo(() => { if (!isCalendarRoot) { - return async () => await buildEvents(noteIds); + return async () => await buildEvents(noteIdsRef.current); } return async (e: EventSourceFuncArg) => await buildEventsForCalendar(note, e); - }, [isCalendarRoot, noteIds]); + }, [isCalendarRoot, note]); const plugins = usePlugins(isEditable, isCalendarRoot); const locale = useLocale(); From 2eae8bbb644772d35361f9bc8c3e274136a02ba7 Mon Sep 17 00:00:00 2001 From: Elian Doran <contact@eliandoran.me> Date: Fri, 23 Jan 2026 12:05:12 +0200 Subject: [PATCH 181/353] Revert "chore(calendar): remove automatic fetching on note creation" This reverts commit 2a61f51e06ecb476260bf45895245c8a9f68d710. --- apps/client/src/widgets/collections/calendar/index.tsx | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/apps/client/src/widgets/collections/calendar/index.tsx b/apps/client/src/widgets/collections/calendar/index.tsx index 103c64d637..fd7669646e 100644 --- a/apps/client/src/widgets/collections/calendar/index.tsx +++ b/apps/client/src/widgets/collections/calendar/index.tsx @@ -104,17 +104,12 @@ export default function CalendarView({ note, noteIds }: ViewModeProps<CalendarVi useResizeObserver(containerRef, () => calendarRef.current?.updateSize()); const isCalendarRoot = (calendarRoot || workspaceCalendarRoot); const isEditable = !isCalendarRoot; - const noteIdsRef = useRef(noteIds); - useEffect(() => { - noteIdsRef.current = noteIds; - }, [ noteIds ]); - const eventBuilder = useMemo(() => { if (!isCalendarRoot) { - return async () => await buildEvents(noteIdsRef.current); + return async () => await buildEvents(noteIds); } return async (e: EventSourceFuncArg) => await buildEventsForCalendar(note, e); - }, [isCalendarRoot, note]); + }, [isCalendarRoot, noteIds]); const plugins = usePlugins(isEditable, isCalendarRoot); const locale = useLocale(); From 81c85d712ea42e571f3ab28630d001e67f05cb63 Mon Sep 17 00:00:00 2001 From: Elian Doran <contact@eliandoran.me> Date: Fri, 23 Jan 2026 12:11:06 +0200 Subject: [PATCH 182/353] chore(calendar): create note with attributes atomically --- .../src/widgets/collections/calendar/api.ts | 43 +++++--- apps/server/src/services/note-interface.ts | 4 +- apps/server/src/services/notes.ts | 98 ++++++++++--------- 3 files changed, 85 insertions(+), 60 deletions(-) diff --git a/apps/client/src/widgets/collections/calendar/api.ts b/apps/client/src/widgets/collections/calendar/api.ts index 65f8905e4c..fde9a26501 100644 --- a/apps/client/src/widgets/collections/calendar/api.ts +++ b/apps/client/src/widgets/collections/calendar/api.ts @@ -1,4 +1,4 @@ -import { CreateChildrenResponse } from "@triliumnext/commons"; +import { AttributeRow, CreateChildrenResponse } from "@triliumnext/commons"; import FNote from "../../../entities/fnote"; import { setAttribute, setLabel } from "../../../services/attributes"; @@ -21,24 +21,41 @@ interface ChangeEventOpts { } export async function newEvent(parentNote: FNote, { title, startDate, endDate, startTime, endTime, componentId }: NewEventOpts) { - // Create the note. - const { note } = await server.post<CreateChildrenResponse>(`notes/${parentNote.noteId}/children?target=into`, { - title, - content: "", - type: "text" - }, componentId); - - // Set the attributes. - setLabel(note.noteId, "startDate", startDate, false, componentId); + const attributes: Omit<AttributeRow, "noteId" | "attributeId">[] = []; + attributes.push({ + type: "label", + name: "startDate", + value: startDate + }); if (endDate) { - setLabel(note.noteId, "endDate", endDate, false, componentId); + attributes.push({ + type: "label", + name: "endDate", + value: endDate + }); } if (startTime) { - setLabel(note.noteId, "startTime", startTime, false, componentId); + attributes.push({ + type: "label", + name: "startTime", + value: startTime + }); } if (endTime) { - setLabel(note.noteId, "endTime", endTime, false, componentId); + attributes.push({ + type: "label", + name: "endTime", + value: endTime + }); } + + // Create the note. + await server.post<CreateChildrenResponse>(`notes/${parentNote.noteId}/children?target=into`, { + title, + content: "", + type: "text", + attributes + }, componentId); } export async function changeEvent(note: FNote, { startDate, endDate, startTime, endTime }: ChangeEventOpts) { diff --git a/apps/server/src/services/note-interface.ts b/apps/server/src/services/note-interface.ts index 5ebaa6dfa7..d7b7c9b4fa 100644 --- a/apps/server/src/services/note-interface.ts +++ b/apps/server/src/services/note-interface.ts @@ -1,4 +1,4 @@ -import type { NoteType } from "@triliumnext/commons"; +import type { AttributeRow, NoteType } from "@triliumnext/commons"; export interface NoteParams { /** optionally can force specific noteId */ @@ -24,4 +24,6 @@ export interface NoteParams { utcDateCreated?: string; ignoreForbiddenParents?: boolean; target?: "into"; + /** Attributes to be set on the note. These are set atomically on note creation, so entity changes are not sent for attributes defined here. */ + attributes?: Omit<AttributeRow, "noteId" | "attributeId">[]; } diff --git a/apps/server/src/services/notes.ts b/apps/server/src/services/notes.ts index 4964a57976..a54f9e6340 100644 --- a/apps/server/src/services/notes.ts +++ b/apps/server/src/services/notes.ts @@ -1,33 +1,34 @@ -import sql from "./sql.js"; -import optionService from "./options.js"; +import type { AttachmentRow, AttributeRow, BranchRow, NoteRow } from "@triliumnext/commons"; +import { dayjs } from "@triliumnext/commons"; +import fs from "fs"; +import html2plaintext from "html2plaintext"; +import { t } from "i18next"; +import path from "path"; +import url from "url"; + +import becca from "../becca/becca.js"; +import BAttachment from "../becca/entities/battachment.js"; +import BAttribute from "../becca/entities/battribute.js"; +import BBranch from "../becca/entities/bbranch.js"; +import BNote from "../becca/entities/bnote.js"; +import ValidationError from "../errors/validation_error.js"; +import cls from "../services/cls.js"; +import log from "../services/log.js"; +import protectedSessionService from "../services/protected_session.js"; +import { newEntityId, quoteRegex, toMap,unescapeHtml } from "../services/utils.js"; import dateUtils from "./date_utils.js"; import entityChangesService from "./entity_changes.js"; import eventService from "./events.js"; -import cls from "../services/cls.js"; -import protectedSessionService from "../services/protected_session.js"; -import log from "../services/log.js"; -import { newEntityId, unescapeHtml, quoteRegex, toMap } from "../services/utils.js"; -import revisionService from "./revisions.js"; -import request from "./request.js"; -import path from "path"; -import url from "url"; -import becca from "../becca/becca.js"; -import BBranch from "../becca/entities/bbranch.js"; -import BNote from "../becca/entities/bnote.js"; -import BAttribute from "../becca/entities/battribute.js"; -import BAttachment from "../becca/entities/battachment.js"; -import { dayjs } from "@triliumnext/commons"; import htmlSanitizer from "./html_sanitizer.js"; -import ValidationError from "../errors/validation_error.js"; -import noteTypesService from "./note_types.js"; -import fs from "fs"; -import ws from "./ws.js"; -import html2plaintext from "html2plaintext"; -import type { AttachmentRow, AttributeRow, BranchRow, NoteRow } from "@triliumnext/commons"; -import type TaskContext from "./task_context.js"; -import type { NoteParams } from "./note-interface.js"; import imageService from "./image.js"; -import { t } from "i18next"; +import noteTypesService from "./note_types.js"; +import type { NoteParams } from "./note-interface.js"; +import optionService from "./options.js"; +import request from "./request.js"; +import revisionService from "./revisions.js"; +import sql from "./sql.js"; +import type TaskContext from "./task_context.js"; +import ws from "./ws.js"; interface FoundLink { name: "imageLink" | "internalLink" | "includeNoteLink" | "relationMapLink"; @@ -47,14 +48,13 @@ function getNewNotePosition(parentNote: BNote) { .reduce((min, note) => Math.min(min, note?.notePosition || 0), 0); return minNotePos - 10; - } else { - const maxNotePos = parentNote - .getChildBranches() - .filter((branch) => branch?.noteId !== "_hidden") // has "always last" note position - .reduce((max, note) => Math.max(max, note?.notePosition || 0), 0); - - return maxNotePos + 10; } + const maxNotePos = parentNote + .getChildBranches() + .filter((branch) => branch?.noteId !== "_hidden") // has "always last" note position + .reduce((max, note) => Math.max(max, note?.notePosition || 0), 0); + + return maxNotePos + 10; } function triggerNoteTitleChanged(note: BNote) { @@ -88,7 +88,7 @@ function copyChildAttributes(parentNote: BNote, childNote: BNote) { new BAttribute({ noteId: childNote.noteId, type: attr.type, - name: name, + name, value: attr.value, position: attr.position, isInheritable: attr.isInheritable @@ -222,6 +222,14 @@ function createNewNote(params: NoteParams): { utcDateCreated: params.utcDateCreated }).save(); + // Create attributes atomically. + for (const attribute of params.attributes || []) { + new BAttribute({ + ...attribute, + noteId: note.noteId + }).save(); + } + note.setContent(params.content); branch = new BBranch({ @@ -260,7 +268,7 @@ function createNewNote(params: NoteParams): { eventService.emit(eventService.ENTITY_CHANGED, { entityName: "blobs", entity: note }); eventService.emit(eventService.ENTITY_CREATED, { entityName: "branches", entity: branch }); eventService.emit(eventService.ENTITY_CHANGED, { entityName: "branches", entity: branch }); - eventService.emit(eventService.CHILD_NOTE_CREATED, { childNote: note, parentNote: parentNote }); + eventService.emit(eventService.CHILD_NOTE_CREATED, { childNote: note, parentNote }); log.info(`Created new note '${note.noteId}', branch '${branch.branchId}' of type '${note.type}', mime '${note.mime}'`); @@ -308,9 +316,8 @@ function createNewNoteWithTarget(target: "into" | "after" | "before", targetBran entityChangesService.putNoteReorderingEntityChange(params.parentNoteId); return retObject; - } else { - throw new Error(`Unknown target '${target}'`); } + throw new Error(`Unknown target '${target}'`); } function protectNoteRecursively(note: BNote, protect: boolean, includingSubTree: boolean, taskContext: TaskContext<"protectNotes">) { @@ -488,7 +495,7 @@ function findRelationMapLinks(content: string, foundLinks: FoundLink[]) { }); } } catch (e: any) { - log.error("Could not scan for relation map links: " + e.message); + log.error(`Could not scan for relation map links: ${e.message}`); } } @@ -656,8 +663,8 @@ function saveAttachments(note: BNote, content: string) { const attachment = note.saveAttachment({ role: "file", - mime: mime, - title: title, + mime, + title, content: buffer }); @@ -953,7 +960,7 @@ function duplicateSubtree(origNoteId: string, newParentNoteId: string) { const duplicateNoteSuffix = t("notes.duplicate-note-suffix"); if (!res.note.title.endsWith(duplicateNoteSuffix) && !res.note.title.startsWith(duplicateNoteSuffix)) { - res.note.title = t("notes.duplicate-note-title", { noteTitle: res.note.title, duplicateNoteSuffix: duplicateNoteSuffix }); + res.note.title = t("notes.duplicate-note-title", { noteTitle: res.note.title, duplicateNoteSuffix }); } res.note.save(); @@ -1050,13 +1057,12 @@ function duplicateSubtreeInner(origNote: BNote, origBranch: BBranch | null | und note: existingNote, branch: createDuplicatedBranch() }; - } else { - return { - // order here is important, note needs to be created first to not mess up the becca - note: createDuplicatedNote(), - branch: createDuplicatedBranch() - }; } + return { + // order here is important, note needs to be created first to not mess up the becca + note: createDuplicatedNote(), + branch: createDuplicatedBranch() + }; } function getNoteIdMapping(origNote: BNote) { From 17b1f599ff9ade1ce9794b1aa4f0c843724867da Mon Sep 17 00:00:00 2001 From: Elian Doran <contact@eliandoran.me> Date: Fri, 23 Jan 2026 12:24:35 +0200 Subject: [PATCH 183/353] feat(calendar): don't trigger refresh on event change --- apps/client/src/services/attributes.ts | 6 +++--- apps/client/src/widgets/collections/calendar/api.ts | 11 ++++++----- .../client/src/widgets/collections/calendar/index.tsx | 4 ++-- 3 files changed, 11 insertions(+), 10 deletions(-) diff --git a/apps/client/src/services/attributes.ts b/apps/client/src/services/attributes.ts index 728ff515c6..2bff933244 100644 --- a/apps/client/src/services/attributes.ts +++ b/apps/client/src/services/attributes.ts @@ -117,15 +117,15 @@ function removeOwnedRelationByName(note: FNote, relationName: string) { * @param name the name of the attribute to set. * @param value the value of the attribute to set. */ -export async function setAttribute(note: FNote, type: "label" | "relation", name: string, value: string | null | undefined) { +export async function setAttribute(note: FNote, type: "label" | "relation", name: string, value: string | null | undefined, componentId?: string) { if (value !== null && value !== undefined) { // Create or update the attribute. - await server.put(`notes/${note.noteId}/set-attribute`, { type, name, value }); + await server.put(`notes/${note.noteId}/set-attribute`, { type, name, value }, componentId); } else { // Remove the attribute if it exists on the server but we don't define a value for it. const attributeId = note.getAttribute(type, name)?.attributeId; if (attributeId) { - await server.remove(`notes/${note.noteId}/attributes/${attributeId}`); + await server.remove(`notes/${note.noteId}/attributes/${attributeId}`, componentId); } } } diff --git a/apps/client/src/widgets/collections/calendar/api.ts b/apps/client/src/widgets/collections/calendar/api.ts index fde9a26501..79df65e4c1 100644 --- a/apps/client/src/widgets/collections/calendar/api.ts +++ b/apps/client/src/widgets/collections/calendar/api.ts @@ -18,6 +18,7 @@ interface ChangeEventOpts { endDate?: string | null; startTime?: string | null; endTime?: string | null; + componentId?: string; } export async function newEvent(parentNote: FNote, { title, startDate, endDate, startTime, endTime, componentId }: NewEventOpts) { @@ -58,7 +59,7 @@ export async function newEvent(parentNote: FNote, { title, startDate, endDate, s }, componentId); } -export async function changeEvent(note: FNote, { startDate, endDate, startTime, endTime }: ChangeEventOpts) { +export async function changeEvent(note: FNote, { startDate, endDate, startTime, endTime, componentId }: ChangeEventOpts) { // Don't store the end date if it's empty. if (endDate === startDate) { endDate = undefined; @@ -70,12 +71,12 @@ export async function changeEvent(note: FNote, { startDate, endDate, startTime, let endAttribute = note.getAttributes("label").filter(attr => attr.name == "calendar:endDate").shift()?.value||"endDate"; const noteId = note.noteId; - setLabel(noteId, startAttribute, startDate); - setAttribute(note, "label", endAttribute, endDate); + setLabel(noteId, startAttribute, startDate, false, componentId); + setAttribute(note, "label", endAttribute, endDate, componentId); startAttribute = note.getAttributes("label").filter(attr => attr.name == "calendar:startTime").shift()?.value||"startTime"; endAttribute = note.getAttributes("label").filter(attr => attr.name == "calendar:endTime").shift()?.value||"endTime"; - setAttribute(note, "label", startAttribute, startTime); - setAttribute(note, "label", endAttribute, endTime); + setAttribute(note, "label", startAttribute, startTime, componentId); + setAttribute(note, "label", endAttribute, endTime, componentId); } diff --git a/apps/client/src/widgets/collections/calendar/index.tsx b/apps/client/src/widgets/collections/calendar/index.tsx index fd7669646e..0f14ee1552 100644 --- a/apps/client/src/widgets/collections/calendar/index.tsx +++ b/apps/client/src/widgets/collections/calendar/index.tsx @@ -246,8 +246,8 @@ function useEditing(note: FNote, isEditable: boolean, isCalendarRoot: boolean, c const { startTime, endTime } = parseStartEndTimeFromEvent(e.event); const note = await froca.getNote(e.event.extendedProps.noteId); if (!note) return; - changeEvent(note, { startDate, endDate, startTime, endTime }); - }, []); + changeEvent(note, { startDate, endDate, startTime, endTime, componentId }); + }, [ componentId ]); // Called upon when clicking the day number in the calendar, opens or creates the day note but only if in a calendar root. const onDateClick = useCallback(async (e: DateClickArg) => { From d7409bec494f72295abf9abfae0ae4da35f0c258 Mon Sep 17 00:00:00 2001 From: Elian Doran <contact@eliandoran.me> Date: Fri, 23 Jan 2026 12:35:08 +0200 Subject: [PATCH 184/353] feat(calendar): don't trigger refresh on rename --- .../collections/calendar/event_builder.ts | 16 +++++++++------- .../src/widgets/collections/calendar/index.tsx | 17 ++++++++++++++--- 2 files changed, 23 insertions(+), 10 deletions(-) diff --git a/apps/client/src/widgets/collections/calendar/event_builder.ts b/apps/client/src/widgets/collections/calendar/event_builder.ts index b2665b7883..f4611ccd7e 100644 --- a/apps/client/src/widgets/collections/calendar/event_builder.ts +++ b/apps/client/src/widgets/collections/calendar/event_builder.ts @@ -1,10 +1,11 @@ import { EventInput, EventSourceFuncArg, EventSourceInput } from "@fullcalendar/core/index.js"; -import froca from "../../../services/froca"; -import { formatDateToLocalISO, getCustomisableLabel, getMonthsInDateRange, offsetDate } from "./utils"; -import FNote from "../../../entities/fnote"; -import server from "../../../services/server"; import clsx from "clsx"; +import FNote from "../../../entities/fnote"; +import froca from "../../../services/froca"; +import server from "../../../services/server"; +import { formatDateToLocalISO, getCustomisableLabel, getMonthsInDateRange, offsetDate } from "./utils"; + interface Event { startDate: string, endDate?: string | null, @@ -105,7 +106,8 @@ export async function buildEvent(note: FNote, { startDate, endDate, startTime, e endDate = (endTime ? `${endDate}T${endTime}:00` : endDate); const eventData: EventInput = { - title: title, + id: note.noteId, + title, start: startDate, url: `#${note.noteId}?popup`, noteId: note.noteId, @@ -148,12 +150,12 @@ async function parseCustomTitle(customTitlettributeName: string | null, note: FN } async function buildDisplayedAttributes(note: FNote, calendarDisplayedAttributes: string[]) { - const filteredDisplayedAttributes = note.getAttributes().filter((attr): boolean => calendarDisplayedAttributes.includes(attr.name)) + const filteredDisplayedAttributes = note.getAttributes().filter((attr): boolean => calendarDisplayedAttributes.includes(attr.name)); const result: Array<[string, string]> = []; for (const attribute of filteredDisplayedAttributes) { if (attribute.type === "label") result.push([attribute.name, attribute.value]); - else result.push([attribute.name, (await attribute.getTargetNote())?.title || ""]) + else result.push([attribute.name, (await attribute.getTargetNote())?.title || ""]); } return result; diff --git a/apps/client/src/widgets/collections/calendar/index.tsx b/apps/client/src/widgets/collections/calendar/index.tsx index 0f14ee1552..7eb201b0c1 100644 --- a/apps/client/src/widgets/collections/calendar/index.tsx +++ b/apps/client/src/widgets/collections/calendar/index.tsx @@ -119,14 +119,25 @@ export default function CalendarView({ note, noteIds }: ViewModeProps<CalendarVi // React to changes. useTriliumEvent("entitiesReloaded", ({ loadResults }) => { - if (loadResults.getNoteIds().some(noteId => noteIds.includes(noteId)) // note title change. - || loadResults.getAttributeRows(parentComponent?.componentId).some((a) => noteIds.includes(a.noteId ?? ""))) // subnote change. - { + const api = calendarRef.current; + if (!api) return; + + // Subnote attribute change. + if (loadResults.getAttributeRows(parentComponent?.componentId).some((a) => noteIds.includes(a.noteId ?? ""))) { // Defer execution after the load results are processed so that the event builder has the updated data to work with. setTimeout(() => { console.log("Refresh"); calendarRef.current?.refetchEvents(); }, 0); + return; // early return since we'll refresh the events anyway + } + + // Title change. + for (const noteId of loadResults.getNoteIds().filter(noteId => noteIds.includes(noteId))) { + const event = api.getEventById(noteId); + const note = froca.getNoteFromCache(noteId); + if (!event || !note) continue; + event.setProp("title", note.title); } }); From e51cea88bf593d779a2e261afda02b84c4ebc413 Mon Sep 17 00:00:00 2001 From: Elian Doran <contact@eliandoran.me> Date: Fri, 23 Jan 2026 12:47:02 +0200 Subject: [PATCH 185/353] feat(calendar): don't trigger refresh on delete --- apps/client/src/services/branches.ts | 6 +++--- .../src/widgets/collections/calendar/context_menu.ts | 12 ++++++------ .../src/widgets/collections/calendar/index.tsx | 7 +++---- 3 files changed, 12 insertions(+), 13 deletions(-) diff --git a/apps/client/src/services/branches.ts b/apps/client/src/services/branches.ts index cd1f5c6e70..8f31060242 100644 --- a/apps/client/src/services/branches.ts +++ b/apps/client/src/services/branches.ts @@ -103,7 +103,7 @@ async function moveToParentNote(branchIdsToMove: string[], newParentBranchId: st * @param moveToParent whether to automatically go to the parent note path after a succesful delete. Usually makes sense if deleting the active note(s). * @returns promise that returns false if the operation was cancelled or there was nothing to delete, true if the operation succeeded. */ -async function deleteNotes(branchIdsToDelete: string[], forceDeleteAllClones = false, moveToParent = true) { +async function deleteNotes(branchIdsToDelete: string[], forceDeleteAllClones = false, moveToParent = true, componentId?: string) { branchIdsToDelete = filterRootNote(branchIdsToDelete); if (branchIdsToDelete.length === 0) { @@ -139,9 +139,9 @@ async function deleteNotes(branchIdsToDelete: string[], forceDeleteAllClones = f const branch = froca.getBranch(branchIdToDelete); if (deleteAllClones && branch) { - await server.remove(`notes/${branch.noteId}${query}`); + await server.remove(`notes/${branch.noteId}${query}`, componentId); } else { - await server.remove(`branches/${branchIdToDelete}${query}`); + await server.remove(`branches/${branchIdToDelete}${query}`, componentId); } } diff --git a/apps/client/src/widgets/collections/calendar/context_menu.ts b/apps/client/src/widgets/collections/calendar/context_menu.ts index 5b157567ed..8c3511c363 100644 --- a/apps/client/src/widgets/collections/calendar/context_menu.ts +++ b/apps/client/src/widgets/collections/calendar/context_menu.ts @@ -1,12 +1,12 @@ -import NoteColorPicker from "../../../menus/custom-items/NoteColorPicker"; import FNote from "../../../entities/fnote"; import contextMenu, { ContextMenuEvent } from "../../../menus/context_menu"; +import { getArchiveMenuItem } from "../../../menus/context_menu_utils"; +import NoteColorPicker from "../../../menus/custom-items/NoteColorPicker"; import link_context_menu from "../../../menus/link_context_menu"; import branches from "../../../services/branches"; -import { getArchiveMenuItem } from "../../../menus/context_menu_utils"; import { t } from "../../../services/i18n"; -export function openCalendarContextMenu(e: ContextMenuEvent, note: FNote, parentNote: FNote) { +export function openCalendarContextMenu(e: ContextMenuEvent, note: FNote, parentNote: FNote, componentId?: string) { e.preventDefault(); e.stopPropagation(); @@ -30,16 +30,16 @@ export function openCalendarContextMenu(e: ContextMenuEvent, note: FNote, parent } if (branchIdToDelete) { - await branches.deleteNotes([ branchIdToDelete ], false, false); + await branches.deleteNotes([ branchIdToDelete ], false, false, componentId); } } }, { kind: "separator" }, { kind: "custom", - componentFn: () => NoteColorPicker({note: note}) + componentFn: () => NoteColorPicker({note}) } ], selectMenuItemHandler: ({ command }) => link_context_menu.handleLinkContextMenuItem(command, e, note.noteId), - }) + }); } diff --git a/apps/client/src/widgets/collections/calendar/index.tsx b/apps/client/src/widgets/collections/calendar/index.tsx index 7eb201b0c1..0bfaaf5b5b 100644 --- a/apps/client/src/widgets/collections/calendar/index.tsx +++ b/apps/client/src/widgets/collections/calendar/index.tsx @@ -114,7 +114,7 @@ export default function CalendarView({ note, noteIds }: ViewModeProps<CalendarVi const plugins = usePlugins(isEditable, isCalendarRoot); const locale = useLocale(); - const { eventDidMount } = useEventDisplayCustomization(note); + const { eventDidMount } = useEventDisplayCustomization(note, parentComponent?.componentId); const editingProps = useEditing(note, isEditable, isCalendarRoot, parentComponent?.componentId); // React to changes. @@ -126,7 +126,6 @@ export default function CalendarView({ note, noteIds }: ViewModeProps<CalendarVi if (loadResults.getAttributeRows(parentComponent?.componentId).some((a) => noteIds.includes(a.noteId ?? ""))) { // Defer execution after the load results are processed so that the event builder has the updated data to work with. setTimeout(() => { - console.log("Refresh"); calendarRef.current?.refetchEvents(); }, 0); return; // early return since we'll refresh the events anyway @@ -277,7 +276,7 @@ function useEditing(note: FNote, isEditable: boolean, isCalendarRoot: boolean, c }; } -function useEventDisplayCustomization(parentNote: FNote) { +function useEventDisplayCustomization(parentNote: FNote, componentId: string | undefined) { const eventDidMount = useCallback((e: EventMountArg) => { const { iconClass, promotedAttributes } = e.event.extendedProps; @@ -334,7 +333,7 @@ function useEventDisplayCustomization(parentNote: FNote) { const note = await froca.getNote(e.event.extendedProps.noteId); if (!note) return; - openCalendarContextMenu(contextMenuEvent, note, parentNote); + openCalendarContextMenu(contextMenuEvent, note, parentNote, componentId); } if (isMobile()) { From 78c62be823143b88ce99b05c6af90a6768d61757 Mon Sep 17 00:00:00 2001 From: Elian Doran <contact@eliandoran.me> Date: Fri, 23 Jan 2026 14:57:33 +0200 Subject: [PATCH 186/353] test(client): fix broken tests after change in attributes --- apps/client/src/services/attributes.spec.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/apps/client/src/services/attributes.spec.ts b/apps/client/src/services/attributes.spec.ts index 724f53a36a..7a949eebc6 100644 --- a/apps/client/src/services/attributes.spec.ts +++ b/apps/client/src/services/attributes.spec.ts @@ -42,7 +42,7 @@ describe("Set boolean with inheritance", () => { name: "foo", value: "", isInheritable: false - }); + }, undefined); }); it("removes boolean normally without inheritance", async () => { @@ -91,7 +91,7 @@ describe("Set boolean with inheritance", () => { name: "foo", value: "false", isInheritable: false - }); + }, undefined); }); it("overrides boolean with inherited false", async () => { @@ -112,7 +112,7 @@ describe("Set boolean with inheritance", () => { name: "foo", value: "", isInheritable: false - }); + }, undefined); }); it("deletes override boolean with inherited false with already existing value", async () => { @@ -134,6 +134,6 @@ describe("Set boolean with inheritance", () => { name: "foo", value: "", isInheritable: false - }); + }, undefined); }); }); From e3fdae8932d7ed18cbc69873bff91b166b56f9cc Mon Sep 17 00:00:00 2001 From: Elian Doran <contact@eliandoran.me> Date: Fri, 23 Jan 2026 15:02:33 +0200 Subject: [PATCH 187/353] chore: address requested changes --- apps/client/src/widgets/collections/calendar/index.tsx | 4 +--- apps/server/src/services/notes.ts | 5 ++--- 2 files changed, 3 insertions(+), 6 deletions(-) diff --git a/apps/client/src/widgets/collections/calendar/index.tsx b/apps/client/src/widgets/collections/calendar/index.tsx index 0bfaaf5b5b..d9195a3c5e 100644 --- a/apps/client/src/widgets/collections/calendar/index.tsx +++ b/apps/client/src/widgets/collections/calendar/index.tsx @@ -125,9 +125,7 @@ export default function CalendarView({ note, noteIds }: ViewModeProps<CalendarVi // Subnote attribute change. if (loadResults.getAttributeRows(parentComponent?.componentId).some((a) => noteIds.includes(a.noteId ?? ""))) { // Defer execution after the load results are processed so that the event builder has the updated data to work with. - setTimeout(() => { - calendarRef.current?.refetchEvents(); - }, 0); + setTimeout(() => api.refetchEvents(), 0); return; // early return since we'll refresh the events anyway } diff --git a/apps/server/src/services/notes.ts b/apps/server/src/services/notes.ts index a54f9e6340..f4eb40579a 100644 --- a/apps/server/src/services/notes.ts +++ b/apps/server/src/services/notes.ts @@ -1,5 +1,4 @@ -import type { AttachmentRow, AttributeRow, BranchRow, NoteRow } from "@triliumnext/commons"; -import { dayjs } from "@triliumnext/commons"; +import { type AttachmentRow, type AttributeRow, type BranchRow, dayjs, type NoteRow } from "@triliumnext/commons"; import fs from "fs"; import html2plaintext from "html2plaintext"; import { t } from "i18next"; @@ -15,7 +14,7 @@ import ValidationError from "../errors/validation_error.js"; import cls from "../services/cls.js"; import log from "../services/log.js"; import protectedSessionService from "../services/protected_session.js"; -import { newEntityId, quoteRegex, toMap,unescapeHtml } from "../services/utils.js"; +import { newEntityId, quoteRegex, toMap, unescapeHtml } from "../services/utils.js"; import dateUtils from "./date_utils.js"; import entityChangesService from "./entity_changes.js"; import eventService from "./events.js"; From 44142e980d909af3d8c1672c92a073df9fc8d69e Mon Sep 17 00:00:00 2001 From: Elian Doran <contact@eliandoran.me> Date: Fri, 23 Jan 2026 17:17:41 +0200 Subject: [PATCH 188/353] fix(quick_edit): not working when content is centered (closes #8371) --- apps/client/src/widgets/dialogs/PopupEditor.css | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/apps/client/src/widgets/dialogs/PopupEditor.css b/apps/client/src/widgets/dialogs/PopupEditor.css index 68172e6290..197ed94065 100644 --- a/apps/client/src/widgets/dialogs/PopupEditor.css +++ b/apps/client/src/widgets/dialogs/PopupEditor.css @@ -82,6 +82,10 @@ body.mobile .modal.popup-editor-dialog .modal-dialog { align-items: flex-start; } +.modal.popup-editor-dialog .note-detail { + width: 100%; +} + .modal.popup-editor-dialog .note-detail.full-height { flex-grow: 0; height: 100%; @@ -106,4 +110,4 @@ body.mobile .modal.popup-editor-dialog .modal-dialog { margin: 0; border-radius: 0; } -} \ No newline at end of file +} From a51a831fe80d9271e62f045a41a53ec8be9da4bf Mon Sep 17 00:00:00 2001 From: Elian Doran <contact@eliandoran.me> Date: Fri, 23 Jan 2026 17:56:04 +0200 Subject: [PATCH 189/353] fix(canvas): background color not saved (closes #8325) --- .../type_widgets/canvas/persistence.ts | 33 ++++++++++++++++--- 1 file changed, 29 insertions(+), 4 deletions(-) diff --git a/apps/client/src/widgets/type_widgets/canvas/persistence.ts b/apps/client/src/widgets/type_widgets/canvas/persistence.ts index 28c10e7523..e4714e7146 100644 --- a/apps/client/src/widgets/type_widgets/canvas/persistence.ts +++ b/apps/client/src/widgets/type_widgets/canvas/persistence.ts @@ -20,6 +20,9 @@ export interface CanvasContent { appState: Partial<AppState>; } +/** Subset of the app state that should be persisted whenever they change. This explicitly excludes transient state like the current selection or zoom level. */ +type ImportantAppState = Pick<AppState, "gridModeEnabled" | "viewBackgroundColor">; + export default function useCanvasPersistence(note: FNote, noteContext: NoteContext | null | undefined, apiRef: RefObject<ExcalidrawImperativeAPI>, theme: AppState["theme"], isReadOnly: boolean): Partial<ExcalidrawProps> { const libraryChanged = useRef(false); @@ -37,6 +40,8 @@ export default function useCanvasPersistence(note: FNote, noteContext: NoteConte const libraryCache = useRef<LibraryItem[]>([]); const attachmentMetadata = useRef<AttachmentMetadata[]>([]); + const appStateToCompare = useRef<Partial<ImportantAppState>>({}); + const spacedUpdate = useEditorSpacedUpdate({ note, noteContext, @@ -78,7 +83,7 @@ export default function useCanvasPersistence(note: FNote, noteContext: NoteConte async getData() { const api = apiRef.current; if (!api) return; - const { content, svg } = await getData(api); + const { content, svg } = await getData(api, appStateToCompare); const attachments: SavedData["attachments"] = [{ role: "image", title: "canvas-export.svg", mime: "image/svg+xml", content: svg, position: 0 }]; // libraryChanged is unset in dataSaved() @@ -149,7 +154,21 @@ export default function useCanvasPersistence(note: FNote, noteContext: NoteConte const oldSceneVersion = currentSceneVersion.current; const newSceneVersion = getSceneVersion(apiRef.current.getSceneElements()); - if (newSceneVersion !== oldSceneVersion) { + let hasChanges = (newSceneVersion !== oldSceneVersion); + + // There are cases where the scene version does not change, but appState did. + if (!hasChanges) { + const importantAppState = appStateToCompare.current; + const currentAppState = apiRef.current.getAppState(); + for (const key in importantAppState) { + if (importantAppState[key as keyof ImportantAppState] !== currentAppState[key as keyof ImportantAppState]) { + hasChanges = true; + break; + } + } + } + + if (hasChanges) { spacedUpdate.resetUpdateTimer(); spacedUpdate.scheduleUpdate(); currentSceneVersion.current = newSceneVersion; @@ -163,7 +182,7 @@ export default function useCanvasPersistence(note: FNote, noteContext: NoteConte }; } -async function getData(api: ExcalidrawImperativeAPI) { +async function getData(api: ExcalidrawImperativeAPI, appStateToCompare: RefObject<Partial<ImportantAppState>>) { const elements = api.getSceneElements(); const appState = api.getAppState(); @@ -188,6 +207,12 @@ async function getData(api: ExcalidrawImperativeAPI) { } }); + const importantAppState: ImportantAppState = { + gridModeEnabled: appState.gridModeEnabled, + viewBackgroundColor: appState.viewBackgroundColor + }; + appStateToCompare.current = importantAppState; + const content = { type: "excalidraw", version: 2, @@ -197,7 +222,7 @@ async function getData(api: ExcalidrawImperativeAPI) { scrollX: appState.scrollX, scrollY: appState.scrollY, zoom: appState.zoom, - gridModeEnabled: appState.gridModeEnabled + ...importantAppState } }; From dba985b308ade6e1981f49719e95cd117fe65e8e Mon Sep 17 00:00:00 2001 From: Elian Doran <contact@eliandoran.me> Date: Fri, 23 Jan 2026 18:07:11 +0200 Subject: [PATCH 190/353] fix(canvas): saving on start due to mismatch in version number --- apps/client/src/widgets/type_widgets/canvas/persistence.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/apps/client/src/widgets/type_widgets/canvas/persistence.ts b/apps/client/src/widgets/type_widgets/canvas/persistence.ts index e4714e7146..545a3d8564 100644 --- a/apps/client/src/widgets/type_widgets/canvas/persistence.ts +++ b/apps/client/src/widgets/type_widgets/canvas/persistence.ts @@ -52,7 +52,6 @@ export default function useCanvasPersistence(note: FNote, noteContext: NoteConte libraryCache.current = []; attachmentMetadata.current = []; - currentSceneVersion.current = -1; // load saved content into excalidraw canvas let content: CanvasContent = { @@ -70,6 +69,9 @@ export default function useCanvasPersistence(note: FNote, noteContext: NoteConte loadData(api, content, theme); + // Initialize tracking state after loading to prevent redundant updates from initial onChange events + currentSceneVersion.current = getSceneVersion(api.getSceneElements()); + // load the library state loadLibrary(note).then(({ libraryItems, metadata }) => { // Update the library and save to independent variables From c48bd9a5c35705ffbab992c6413dd84dcfcda882 Mon Sep 17 00:00:00 2001 From: Elian Doran <contact@eliandoran.me> Date: Fri, 23 Jan 2026 18:12:11 +0200 Subject: [PATCH 191/353] fix(canvas): saving on start due to library change --- .../type_widgets/canvas/persistence.ts | 20 +++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/apps/client/src/widgets/type_widgets/canvas/persistence.ts b/apps/client/src/widgets/type_widgets/canvas/persistence.ts index 545a3d8564..4b31d826b6 100644 --- a/apps/client/src/widgets/type_widgets/canvas/persistence.ts +++ b/apps/client/src/widgets/type_widgets/canvas/persistence.ts @@ -176,10 +176,22 @@ export default function useCanvasPersistence(note: FNote, noteContext: NoteConte currentSceneVersion.current = newSceneVersion; } }, - onLibraryChange: () => { - libraryChanged.current = true; - spacedUpdate.resetUpdateTimer(); - spacedUpdate.scheduleUpdate(); + onLibraryChange: (libraryItems) => { + if (!apiRef.current || isReadOnly) return; + + // Check if library actually changed by comparing with cached state + const hasChanges = + libraryItems.length !== libraryCache.current.length || + libraryItems.some(item => { + const cachedItem = libraryCache.current.find(cached => cached.id === item.id); + return !cachedItem || cachedItem.name !== item.name; + }); + + if (hasChanges) { + libraryChanged.current = true; + spacedUpdate.resetUpdateTimer(); + spacedUpdate.scheduleUpdate(); + } } }; } From 8611d4a67a4858b5e6db5230ab11ae4b3679b4c7 Mon Sep 17 00:00:00 2001 From: Wael Nasreddine <wael.nasreddine@gmail.com> Date: Thu, 22 Jan 2026 19:15:16 -0800 Subject: [PATCH 192/353] fix: update nixpkgs to grab elector v40 --- flake.lock | 11 +++++------ flake.nix | 2 +- 2 files changed, 6 insertions(+), 7 deletions(-) diff --git a/flake.lock b/flake.lock index 9603cb3c6d..056cc08655 100644 --- a/flake.lock +++ b/flake.lock @@ -20,16 +20,15 @@ }, "nixpkgs": { "locked": { - "lastModified": 1765701828, - "narHash": "sha256-bUqeCi+mdqXt6Ag0n+9QAqyvFiQPZdSCzTI70Nn3HhA=", - "owner": "nixos", + "lastModified": 1769184885, + "narHash": "sha256-wVX5Cqpz66SINNsmt3Bv/Ijzzfl8EPUISq5rKK129K0=", + "owner": "NixOS", "repo": "nixpkgs", - "rev": "62996354316ef041b26c36e998a9ef193ede2864", + "rev": "12689597ba7a6d776c3c979f393896be095269d4", "type": "github" }, "original": { - "owner": "nixos", - "ref": "master", + "owner": "NixOS", "repo": "nixpkgs", "type": "github" } diff --git a/flake.nix b/flake.nix index 2434a8d5db..23a7a38cf4 100644 --- a/flake.nix +++ b/flake.nix @@ -2,7 +2,7 @@ description = "Trilium Notes (experimental flake)"; inputs = { - nixpkgs.url = "github:nixos/nixpkgs/master"; + nixpkgs.url = "github:NixOS/nixpkgs"; flake-utils.url = "github:numtide/flake-utils"; pnpm2nix = { url = "github:FliegendeWurst/pnpm2nix-nzbr"; From 1520c696a3cb1e38c58676ad2d1692c03274f8c2 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sat, 24 Jan 2026 01:39:45 +0000 Subject: [PATCH 193/353] chore(deps): update dependency cheerio to v1.2.0 --- apps/server/package.json | 2 +- pnpm-lock.yaml | 68 ++++++++++++++++++++-------------------- 2 files changed, 35 insertions(+), 35 deletions(-) diff --git a/apps/server/package.json b/apps/server/package.json index 5edc905be4..e44311d48b 100644 --- a/apps/server/package.json +++ b/apps/server/package.json @@ -74,7 +74,7 @@ "bindings": "1.5.0", "bootstrap": "5.3.8", "chardet": "2.1.1", - "cheerio": "1.1.2", + "cheerio": "1.2.0", "chokidar": "5.0.0", "cls-hooked": "4.2.2", "compression": "1.8.1", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index f92cdc4907..b66963f228 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -637,8 +637,8 @@ importers: specifier: 2.1.1 version: 2.1.1 cheerio: - specifier: 1.1.2 - version: 1.1.2 + specifier: 1.2.0 + version: 1.2.0 chokidar: specifier: 5.0.0 version: 5.0.0 @@ -6650,8 +6650,8 @@ packages: resolution: {integrity: sha512-g0J0q/O6mW8z5zxQ3A8E8J1hUgp4SMOvEoW/x84OwyHKe/Zccz83PVT4y5Crcr530FV6NgmKI1qvGTKVl9XXVw==} engines: {node: '>= 6'} - cheerio@1.1.2: - resolution: {integrity: sha512-IkxPpb5rS/d1IiLbHMgfPuS0FgiWTtFIm/Nj+2woXDLTZ7fOT2eqzgYbdMlLweqlHbsZjxEChoVK+7iph7jyQg==} + cheerio@1.2.0: + resolution: {integrity: sha512-WDrybc/gKFpTYQutKIK6UvfcuxijIZfMfXaYm8NMsPQxSYvf+13fXUJ4rztGGbJcBQ/GF55gvrZ0Bc0bj/mqvg==} engines: {node: '>=20.18.1'} chevrotain-allstar@0.3.1: @@ -7146,10 +7146,6 @@ packages: css-value@0.0.1: resolution: {integrity: sha512-FUV3xaJ63buRLgHrLQVlVgQnQdR4yqdLGaDu7g8CQcWjInDfM9plBTPI9FRfpahju1UBSaMckeb2/46ApS/V1Q==} - css-what@6.1.0: - resolution: {integrity: sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==} - engines: {node: '>= 6'} - css-what@6.2.2: resolution: {integrity: sha512-u/O3vwbptzhMs3L1fQE82ZSLHQQfto5gyZzwteVIEyeaY5Fc7R4dapF/BvRoSYFeqfBk4m0V1Vafq5Pjv25wvA==} engines: {node: '>= 6'} @@ -7868,6 +7864,10 @@ packages: resolution: {integrity: sha512-aKstq2TDOndCn4diEyp9Uq/Flu2i1GlLkc6XIDQSDMuaFE3OPW5OphLCyQ5SpSJZTb4reN+kTcYru5yIfXoRPw==} engines: {node: '>=0.12'} + entities@7.0.1: + resolution: {integrity: sha512-TWrgLOFUQTH994YUyl1yT4uyavY5nNB5muff+RtWaqNVCAK408b5ZnnbNAUEWLTCpum9w6arT70i1XdQ4UeOPA==} + engines: {node: '>=0.12'} + env-paths@2.2.1: resolution: {integrity: sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==} engines: {node: '>=6'} @@ -8931,6 +8931,9 @@ packages: htmlparser2@10.0.0: resolution: {integrity: sha512-TwAZM+zE5Tq3lrEHvOlvwgj1XLWQCtaaibSN11Q+gGBAS7Y1uZSWwXXRe4iF6OXnaq1riyQAPFOBtYc77Mxq0g==} + htmlparser2@10.1.0: + resolution: {integrity: sha512-VTZkM9GWRAtEpveh7MSF6SjjrpNVNNVJfFup7xTY3UpFtm67foy9HDVXneLtFVt4pMz5kZtgNcvCniNFb1hlEQ==} + htmlparser2@6.1.0: resolution: {integrity: sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==} @@ -13623,8 +13626,8 @@ packages: resolution: {integrity: sha512-gBLkYIlEnSp8pFbT64yFgGE6UIB9tAkhukC23PmMDCe5Nd+cRqKxSjw5y54MK2AZMgZfJWMaNE4nYUHgi1XEOw==} engines: {node: '>=18.17'} - undici@7.12.0: - resolution: {integrity: sha512-GrKEsc3ughskmGA9jevVlIOPMiiAHJ4OFUtaAH+NhfTUSiZ1wMPIQqQvAJUrJspFXJt3EBWgpAeoHEDVT1IBug==} + undici@7.19.0: + resolution: {integrity: sha512-Heho1hJD81YChi+uS2RkSjcVO+EQLmLSyUlHyp7Y/wFbxQaGb4WXVKD073JytrjXJVkSZVzoE2MCSOKugFGtOQ==} engines: {node: '>=20.18.1'} unescape@1.0.1: @@ -15099,8 +15102,6 @@ snapshots: '@ckeditor/ckeditor5-core': 47.4.0 '@ckeditor/ckeditor5-upload': 47.4.0 ckeditor5: 47.4.0 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-ai@47.4.0(bufferutil@4.0.9)(utf-8-validate@6.0.5)': dependencies: @@ -15247,8 +15248,6 @@ snapshots: '@ckeditor/ckeditor5-core': 47.4.0 '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-code-block@47.4.0(patch_hash=2361d8caad7d6b5bddacc3a3b4aa37dbfba260b1c1b22a450413a79c1bb1ce95)': dependencies: @@ -15314,8 +15313,6 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.4.0 '@ckeditor/ckeditor5-watchdog': 47.4.0 es-toolkit: 1.39.5 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-dev-build-tools@54.3.2(@swc/helpers@0.5.17)(tslib@2.8.1)(typescript@5.9.3)': dependencies: @@ -15441,8 +15438,6 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 es-toolkit: 1.39.5 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-editor-classic@47.4.0': dependencies: @@ -15470,6 +15465,8 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 es-toolkit: 1.39.5 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-editor-multi-root@47.4.0': dependencies: @@ -15492,6 +15489,8 @@ snapshots: '@ckeditor/ckeditor5-table': 47.4.0 '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-emoji@47.4.0': dependencies: @@ -15517,8 +15516,6 @@ snapshots: '@ckeditor/ckeditor5-core': 47.4.0 '@ckeditor/ckeditor5-engine': 47.4.0 '@ckeditor/ckeditor5-utils': 47.4.0 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-essentials@47.4.0': dependencies: @@ -15676,6 +15673,8 @@ snapshots: '@ckeditor/ckeditor5-widget': 47.4.0 ckeditor5: 47.4.0 es-toolkit: 1.39.5 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-icons@47.4.0': {} @@ -15977,8 +15976,6 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.4.0 '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-restricted-editing@47.4.0': dependencies: @@ -16065,8 +16062,6 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.4.0 '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-special-characters@47.4.0': dependencies: @@ -16178,8 +16173,6 @@ snapshots: '@ckeditor/ckeditor5-icons': 47.4.0 '@ckeditor/ckeditor5-ui': 47.4.0 '@ckeditor/ckeditor5-utils': 47.4.0 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-upload@47.4.0': dependencies: @@ -21682,7 +21675,7 @@ snapshots: dependencies: boolbase: 1.0.0 css-select: 5.2.2 - css-what: 6.1.0 + css-what: 6.2.2 domelementtype: 2.3.0 domhandler: 5.0.3 domutils: 3.2.2 @@ -21697,18 +21690,18 @@ snapshots: parse5-htmlparser2-tree-adapter: 6.0.1 tslib: 2.8.1 - cheerio@1.1.2: + cheerio@1.2.0: dependencies: cheerio-select: 2.1.0 dom-serializer: 2.0.0 domhandler: 5.0.3 domutils: 3.2.2 encoding-sniffer: 0.2.1 - htmlparser2: 10.0.0 + htmlparser2: 10.1.0 parse5: 7.3.0 parse5-htmlparser2-tree-adapter: 7.1.0 parse5-parser-stream: 7.1.2 - undici: 7.12.0 + undici: 7.19.0 whatwg-mimetype: 4.0.0 chevrotain-allstar@0.3.1(chevrotain@11.0.3): @@ -22313,8 +22306,6 @@ snapshots: css-value@0.0.1: {} - css-what@6.1.0: {} - css-what@6.2.2: {} cssesc@3.0.0: {} @@ -23166,6 +23157,8 @@ snapshots: entities@6.0.0: {} + entities@7.0.1: {} + env-paths@2.2.1: {} environment@1.1.0: {} @@ -24732,6 +24725,13 @@ snapshots: domutils: 3.2.2 entities: 6.0.0 + htmlparser2@10.1.0: + dependencies: + domelementtype: 2.3.0 + domhandler: 5.0.3 + domutils: 3.2.2 + entities: 7.0.1 + htmlparser2@6.1.0: dependencies: domelementtype: 2.3.0 @@ -30289,7 +30289,7 @@ snapshots: undici@6.21.3: {} - undici@7.12.0: {} + undici@7.19.0: {} unescape@1.0.1: dependencies: @@ -30713,7 +30713,7 @@ snapshots: '@wdio/utils': 9.23.2 archiver: 7.0.1 aria-query: 5.3.2 - cheerio: 1.1.2 + cheerio: 1.2.0 css-shorthand-properties: 1.1.2 css-value: 0.0.1 grapheme-splitter: 1.0.4 From cd7daee7719eaaacf034778a7e4e96e8301c78c7 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sat, 24 Jan 2026 06:31:00 +0000 Subject: [PATCH 194/353] chore(deps): update dependency @redocly/cli to v2.14.9 --- apps/build-docs/package.json | 2 +- pnpm-lock.yaml | 52 +++++++++++++++++++++++++----------- 2 files changed, 37 insertions(+), 17 deletions(-) diff --git a/apps/build-docs/package.json b/apps/build-docs/package.json index 30b15663a6..126a4feac9 100644 --- a/apps/build-docs/package.json +++ b/apps/build-docs/package.json @@ -11,7 +11,7 @@ "license": "AGPL-3.0-only", "packageManager": "pnpm@10.28.1", "devDependencies": { - "@redocly/cli": "2.14.7", + "@redocly/cli": "2.14.9", "archiver": "7.0.1", "fs-extra": "11.3.3", "react": "19.2.3", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index b66963f228..fdc078d354 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -140,8 +140,8 @@ importers: apps/build-docs: devDependencies: '@redocly/cli': - specifier: 2.14.7 - version: 2.14.7(@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.14.9 + version: 2.14.9(@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 @@ -4400,8 +4400,8 @@ packages: '@redocly/ajv@8.17.2': resolution: {integrity: sha512-rcbDZOfXAgGEJeJ30aWCVVJvxV9ooevb/m1/SFblO2qHs4cqTk178gx7T/vdslf57EA4lTofrwsq5K8rxK9g+g==} - '@redocly/cli@2.14.7': - resolution: {integrity: sha512-EO1sXTaFgk95/BLQ1rThCMbiWgJomm7nnKitysQxX6iv4Ie2FipIRus1oF0z0a6ADqPtyGBJQQUIoqCG1KJAuw==} + '@redocly/cli@2.14.9': + resolution: {integrity: sha512-eueSFzydep5jwOHxlYW6rFOSRP1b5vY7gVOzQBd2/I6XQJnG31hgrDACqx/heD4vv3hhdpoumopz24erxLe0zQ==} engines: {node: '>=22.12.0 || >=20.19.0 <21.0.0', npm: '>=10'} hasBin: true @@ -4415,12 +4415,12 @@ packages: resolution: {integrity: sha512-0EbE8LRbkogtcCXU7liAyC00n9uNG9hJ+eMyHFdUsy9lB/WGqnEBgwjA9q2cyzAVcdTkQqTBBU1XePNnN3OijA==} engines: {node: '>=18.17.0', npm: '>=9.5.0'} - '@redocly/openapi-core@2.14.7': - resolution: {integrity: sha512-urtiy9H09gecAqpHa5dRG739UBMFrpEZ8zG29FB4LKJNIfhQRSR+8XWzoXSTuGL5zRBSzJx6WvpOCwT6GMKXcg==} + '@redocly/openapi-core@2.14.9': + resolution: {integrity: sha512-PIWVxm7Os3U276XMhLIh+qftaA6TxVwOuoyDaobGSkd609fp25tp57G2k/uzzKjrhUD4g2QzeJ4lfCoaBgEjhg==} engines: {node: '>=22.12.0 || >=20.19.0 <21.0.0', npm: '>=10'} - '@redocly/respect-core@2.14.7': - resolution: {integrity: sha512-nNLqrYnVo8Mpd0+CmKbDaUG1xd0PcrRj/NNgIuR7tcjPQGkdassKB2kFTOq9E9JkHWUdfqawRjT3PPrn/y4kaA==} + '@redocly/respect-core@2.14.9': + resolution: {integrity: sha512-kP3rylB04NZV52IoEa1t8ObkSxpRZy3zpkRAxYOiLtggRETOnLdcDbYep4ipbk6t0suZamznOLOgiAeBYHo/ig==} engines: {node: '>=22.12.0 || >=20.19.0 <21.0.0', npm: '>=10'} '@replit/codemirror-indentation-markers@6.5.3': @@ -13626,6 +13626,10 @@ packages: resolution: {integrity: sha512-gBLkYIlEnSp8pFbT64yFgGE6UIB9tAkhukC23PmMDCe5Nd+cRqKxSjw5y54MK2AZMgZfJWMaNE4nYUHgi1XEOw==} engines: {node: '>=18.17'} + undici@6.23.0: + resolution: {integrity: sha512-VfQPToRA5FZs/qJxLIinmU59u0r7LXqoJkCzinq3ckNJp3vKEh7jTWN589YQ5+aoAC/TGRLyJLCPKcLQbM8r9g==} + engines: {node: '>=18.17'} + undici@7.19.0: resolution: {integrity: sha512-Heho1hJD81YChi+uS2RkSjcVO+EQLmLSyUlHyp7Y/wFbxQaGb4WXVKD073JytrjXJVkSZVzoE2MCSOKugFGtOQ==} engines: {node: '>=20.18.1'} @@ -15248,6 +15252,8 @@ snapshots: '@ckeditor/ckeditor5-core': 47.4.0 '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-code-block@47.4.0(patch_hash=2361d8caad7d6b5bddacc3a3b4aa37dbfba260b1c1b22a450413a79c1bb1ce95)': dependencies: @@ -15313,6 +15319,8 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.4.0 '@ckeditor/ckeditor5-watchdog': 47.4.0 es-toolkit: 1.39.5 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-dev-build-tools@54.3.2(@swc/helpers@0.5.17)(tslib@2.8.1)(typescript@5.9.3)': dependencies: @@ -15438,6 +15446,8 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 es-toolkit: 1.39.5 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-editor-classic@47.4.0': dependencies: @@ -15447,6 +15457,8 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 es-toolkit: 1.39.5 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-editor-decoupled@47.4.0': dependencies: @@ -15647,6 +15659,8 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.4.0 '@ckeditor/ckeditor5-widget': 47.4.0 ckeditor5: 47.4.0 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-html-embed@47.4.0': dependencies: @@ -15976,6 +15990,8 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.4.0 '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-restricted-editing@47.4.0': dependencies: @@ -16062,6 +16078,8 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.4.0 '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-special-characters@47.4.0': dependencies: @@ -18893,14 +18911,14 @@ snapshots: json-schema-traverse: 1.0.0 require-from-string: 2.0.2 - '@redocly/cli@2.14.7(@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.14.9(@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/openapi-core': 2.14.7 - '@redocly/respect-core': 2.14.7 + '@redocly/openapi-core': 2.14.9 + '@redocly/respect-core': 2.14.9 abort-controller: 3.0.0 ajv: '@redocly/ajv@8.17.1' ajv-formats: 3.0.1(@redocly/ajv@8.17.1) @@ -18921,7 +18939,7 @@ snapshots: simple-websocket: 9.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5) styled-components: 6.1.19(react-dom@19.2.3(react@19.2.3))(react@19.2.3) ulid: 3.0.2 - undici: 6.21.3 + undici: 6.23.0 yargs: 17.0.1 transitivePeerDependencies: - '@opentelemetry/api' @@ -18940,7 +18958,7 @@ snapshots: '@redocly/openapi-core@1.34.5': dependencies: - '@redocly/ajv': 8.17.1 + '@redocly/ajv': 8.17.2 '@redocly/config': 0.22.2 colorette: 1.4.0 https-proxy-agent: 7.0.6 @@ -18952,7 +18970,7 @@ snapshots: transitivePeerDependencies: - supports-color - '@redocly/openapi-core@2.14.7': + '@redocly/openapi-core@2.14.9': dependencies: '@redocly/ajv': 8.17.2 '@redocly/config': 0.41.2 @@ -18965,12 +18983,12 @@ snapshots: pluralize: 8.0.0 yaml-ast-parser: 0.0.43 - '@redocly/respect-core@2.14.7': + '@redocly/respect-core@2.14.9': dependencies: '@faker-js/faker': 7.6.0 '@noble/hashes': 1.8.0 '@redocly/ajv': 8.17.1 - '@redocly/openapi-core': 2.14.7 + '@redocly/openapi-core': 2.14.9 ajv: '@redocly/ajv@8.17.1' better-ajv-errors: 1.2.0(@redocly/ajv@8.17.1) colorette: 2.0.20 @@ -30289,6 +30307,8 @@ snapshots: undici@6.21.3: {} + undici@6.23.0: {} + undici@7.19.0: {} unescape@1.0.1: From 430ef62a2dcc1d03e9b257225e4cf6d189f719bd Mon Sep 17 00:00:00 2001 From: Elian Doran <contact@eliandoran.me> Date: Sat, 24 Jan 2026 09:24:35 +0200 Subject: [PATCH 195/353] feat(notes): add default icon for GIF --- packages/commons/src/lib/notes.ts | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/packages/commons/src/lib/notes.ts b/packages/commons/src/lib/notes.ts index 6be531b5eb..e9fe892d1e 100644 --- a/packages/commons/src/lib/notes.ts +++ b/packages/commons/src/lib/notes.ts @@ -28,6 +28,10 @@ const FILE_MIME_MAPPINGS = { "application/pdf": "bx bxs-file-pdf", }; +const IMAGE_MIME_MAPPINGS = { + "image/gif": "bx bxs-file-gif", +}; + export function getNoteIcon({ noteId, type, mime, iconClass, workspaceIconClass, isFolder }: { noteId: string; type: NoteType; @@ -55,6 +59,9 @@ export function getNoteIcon({ noteId, type, mime, iconClass, workspaceIconClass, return correspondingMimeType?.icon ?? NOTE_TYPE_ICONS.code; } else if (type === "file") { return FILE_MIME_MAPPINGS[mime] ?? NOTE_TYPE_ICONS.file; + } else if (type === "image") { + return IMAGE_MIME_MAPPINGS[mime] ?? NOTE_TYPE_ICONS.image; } + return NOTE_TYPE_ICONS[type]; } From 1b0a53a441c4f5eac51c4130d1e43f36c73b9605 Mon Sep 17 00:00:00 2001 From: Elian Doran <contact@eliandoran.me> Date: Sat, 24 Jan 2026 09:29:11 +0200 Subject: [PATCH 196/353] feat(notes): add default icon for doc files --- packages/commons/src/lib/notes.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/commons/src/lib/notes.ts b/packages/commons/src/lib/notes.ts index e9fe892d1e..15b9c8e41b 100644 --- a/packages/commons/src/lib/notes.ts +++ b/packages/commons/src/lib/notes.ts @@ -26,6 +26,8 @@ export const NOTE_TYPE_ICONS = { const FILE_MIME_MAPPINGS = { "application/pdf": "bx bxs-file-pdf", + "application/vnd.oasis.opendocument.text": "bx bxs-file-doc", + "application/vnd.openxmlformats-officedocument.wordprocessingml.document": "bx bxs-file-doc", }; const IMAGE_MIME_MAPPINGS = { From 6ae1cc18e20fe35643281f5f6493562598647167 Mon Sep 17 00:00:00 2001 From: Elian Doran <contact@eliandoran.me> Date: Sat, 24 Jan 2026 09:37:03 +0200 Subject: [PATCH 197/353] chore(web-clipper): remove IDEA file --- apps/web-clipper/trilium-web-clipper.iml | 11 ----------- 1 file changed, 11 deletions(-) delete mode 100644 apps/web-clipper/trilium-web-clipper.iml diff --git a/apps/web-clipper/trilium-web-clipper.iml b/apps/web-clipper/trilium-web-clipper.iml deleted file mode 100644 index c3e779f973..0000000000 --- a/apps/web-clipper/trilium-web-clipper.iml +++ /dev/null @@ -1,11 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<module type="WEB_MODULE" version="4"> - <component name="NewModuleRootManager" inherit-compiler-output="true"> - <exclude-output /> - <content url="file://$MODULE_DIR$"> - <excludeFolder url="file://$MODULE_DIR$/dist" /> - </content> - <orderEntry type="inheritedJdk" /> - <orderEntry type="sourceFolder" forTests="false" /> - </component> -</module> \ No newline at end of file From 5113e2ab975508369ed6816bb3c0d6e44c191081 Mon Sep 17 00:00:00 2001 From: Elian Doran <contact@eliandoran.me> Date: Sat, 24 Jan 2026 09:42:02 +0200 Subject: [PATCH 198/353] chore(web-clipper): create package JSON --- apps/web-clipper/package.json | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 apps/web-clipper/package.json diff --git a/apps/web-clipper/package.json b/apps/web-clipper/package.json new file mode 100644 index 0000000000..86fe91e973 --- /dev/null +++ b/apps/web-clipper/package.json @@ -0,0 +1,11 @@ +{ + "name": "@triliumnext/web-clipper", + "version": "1.0.0", + "description": "", + "main": "index.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "keywords": [], + "packageManager": "pnpm@10.28.1" +} From f8e5f31970a0a32fab71a325a303c22758d8c602 Mon Sep 17 00:00:00 2001 From: Elian Doran <contact@eliandoran.me> Date: Sat, 24 Jan 2026 09:45:05 +0200 Subject: [PATCH 199/353] chore(web-clipper): install WXT --- apps/web-clipper/.wxt/tsconfig.json | 1 + apps/web-clipper/package.json | 13 +- pnpm-lock.yaml | 1346 +++++++++++++++++++++++++-- 3 files changed, 1299 insertions(+), 61 deletions(-) create mode 100644 apps/web-clipper/.wxt/tsconfig.json diff --git a/apps/web-clipper/.wxt/tsconfig.json b/apps/web-clipper/.wxt/tsconfig.json new file mode 100644 index 0000000000..0967ef424b --- /dev/null +++ b/apps/web-clipper/.wxt/tsconfig.json @@ -0,0 +1 @@ +{} diff --git a/apps/web-clipper/package.json b/apps/web-clipper/package.json index 86fe91e973..e7ebd634a9 100644 --- a/apps/web-clipper/package.json +++ b/apps/web-clipper/package.json @@ -4,8 +4,17 @@ "description": "", "main": "index.js", "scripts": { - "test": "echo \"Error: no test specified\" && exit 1" + "dev": "wxt", + "dev:firefox": "wxt -b firefox", + "build": "wxt build", + "build:firefox": "wxt build -b firefox", + "zip": "wxt zip", + "zip:firefox": "wxt zip -b firefox", + "postinstall": "wxt prepare" }, "keywords": [], - "packageManager": "pnpm@10.28.1" + "packageManager": "pnpm@10.28.1", + "devDependencies": { + "wxt": "0.20.13" + } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index b66963f228..cddc67cb8d 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -817,6 +817,12 @@ importers: specifier: 17.2.3 version: 17.2.3 + apps/web-clipper: + devDependencies: + wxt: + specifier: 0.20.13 + version: 0.20.13(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.31.1)(rollup@4.52.0)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) + apps/website: dependencies: i18next: @@ -1461,9 +1467,22 @@ importers: packages: + '@1natsu/wait-element@4.1.2': + resolution: {integrity: sha512-qWxSJD+Q5b8bKOvESFifvfZ92DuMsY+03SBNjTO34ipJLP6mZ9yK4bQz/vlh48aEQXoJfaZBqUwKL5BdI5iiWw==} + '@adobe/css-tools@4.4.4': resolution: {integrity: sha512-Elp+iwUx5rN5+Y8xLt5/GRoG20WGoDCQ/1Fb+1LiGtvwbDavuSk0jhD/eZdckHAuzcDzccnkv+rEjyWfRx18gg==} + '@aklinker1/rollup-plugin-visualizer@5.12.0': + resolution: {integrity: sha512-X24LvEGw6UFmy0lpGJDmXsMyBD58XmX1bbwsaMLhNoM+UMQfQ3b2RtC+nz4b/NoRK5r6QJSKJHBNVeUdwqybaQ==} + engines: {node: '>=14'} + hasBin: true + peerDependencies: + rollup: 2.x || 3.x || 4.x + peerDependenciesMeta: + rollup: + optional: true + '@ampproject/remapping@2.3.0': resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} engines: {node: '>=6.0.0'} @@ -1724,6 +1743,10 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 + '@babel/runtime@7.28.2': + resolution: {integrity: sha512-KHp2IflsnGywDjBWDkR9iEqiWSpc8GIi0lgTT3mOElT0PP1tG26P4tmFI2YvAdzgq9RGyoHZQEIEdZy6Ec5xCA==} + engines: {node: '>=6.9.0'} + '@babel/runtime@7.28.4': resolution: {integrity: sha512-Q/N6JNWvIvPnLDvjlE1OUBLPQHH6l3CltCEsHIujp45zQUSSh8K+gHnaEX45yAT1nyngnINhvWtzN+Nb9D8RAQ==} engines: {node: '>=6.9.0'} @@ -2240,6 +2263,19 @@ packages: peerDependencies: postcss-selector-parser: ^7.1.1 + '@devicefarmer/adbkit-logcat@2.1.3': + resolution: {integrity: sha512-yeaGFjNBc/6+svbDeul1tNHtNChw6h8pSHAt5D+JsedUrMTN7tla7B15WLDyekxsuS2XlZHRxpuC6m92wiwCNw==} + engines: {node: '>= 4'} + + '@devicefarmer/adbkit-monkey@1.2.1': + resolution: {integrity: sha512-ZzZY/b66W2Jd6NHbAhLyDWOEIBWC11VizGFk7Wx7M61JZRz7HR9Cq5P+65RKWUU7u6wgsE8Lmh9nE4Mz+U2eTg==} + engines: {node: '>= 0.10.4'} + + '@devicefarmer/adbkit@3.3.8': + resolution: {integrity: sha512-7rBLLzWQnBwutH2WZ0EWUkQdihqrnLYCUMaB44hSol9e0/cdIhuNFcqZO0xNheAU6qqHVA8sMiLofkYTgb+lmw==} + engines: {node: '>= 0.10.4'} + hasBin: true + '@digitak/esrun@3.2.26': resolution: {integrity: sha512-mL0bw7NhKVghp7mVsPwnAMhCn4NGAsk0KKFmAfnrYAZ/QCXR5xLXIYP82zLMjcsQag8DD6i1c+Yrm/57StYVzg==} engines: {node: '>=14.0'} @@ -3480,6 +3516,9 @@ packages: '@jridgewell/gen-mapping@0.3.13': resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==} + '@jridgewell/remapping@2.3.5': + resolution: {integrity: sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==} + '@jridgewell/resolve-uri@3.1.2': resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} engines: {node: '>=6.0.0'} @@ -4031,6 +4070,18 @@ packages: engines: {node: '>=18'} hasBin: true + '@pnpm/config.env-replace@1.1.0': + resolution: {integrity: sha512-htyl8TWnKL7K/ESFa1oW2UB5lVDxuF5DpM7tBi6Hu2LNL3mWkIzNLG6N4zoCUP1lCKNxWy/3iu8mS8MvToGd6w==} + engines: {node: '>=12.22.0'} + + '@pnpm/network.ca-file@1.0.2': + resolution: {integrity: sha512-YcPQ8a0jwYU9bTdJDpXjMi7Brhkr1mXsXrUJvjqM2mQDgkRiz8jFaQGOdaLxgjtUfQgZhKy/O3cG/YwmgKaxLA==} + engines: {node: '>=12.22.0'} + + '@pnpm/npm-conf@3.0.2': + resolution: {integrity: sha512-h104Kh26rR8tm+a3Qkc5S4VLYint3FE48as7+/5oCEcKR2idC/pF1G6AhIXKI+eHPJa/3J9i5z0Al47IeGHPkA==} + engines: {node: '>=12'} + '@polka/url@1.0.0-next.29': resolution: {integrity: sha512-wwQAWhWSuHaag8c4q/KN/vCoeOJYshAIvMQwD4GpSb3OiZklFfvAgmj0VCBBImRpuF/aFgIRzllXlVX93Jevww==} @@ -5360,6 +5411,12 @@ packages: '@types/express@5.0.6': resolution: {integrity: sha512-sKYVuV7Sv9fbPIt/442koC7+IIwK5olP1KWeD88e/idgoJqDm3JV/YUiPwkoKK92ylff2MGxSz1CSjsXelx0YA==} + '@types/filesystem@0.0.36': + resolution: {integrity: sha512-vPDXOZuannb9FZdxgHnqSwAG/jvdGM8Wq+6N4D/d80z+D4HWH+bItqsZaVRQykAn6WEVeEkLm2oQigyHtgb0RA==} + + '@types/filewriter@0.0.33': + resolution: {integrity: sha512-xFU8ZXTw4gd358lb2jw25nxY9QAgqn2+bKKjKOYfNCzN4DKCFetK7sPtrlpg66Ywe3vWY9FNxprZawAh9wfJ3g==} + '@types/fs-extra@11.0.4': resolution: {integrity: sha512-yTbItCNreRooED33qjunPthRcSjERP1r4MqCZc7wv0u2sUkzTFp45tgUfS5+r7FrZPdmCCNflLhVSP/o+SemsQ==} @@ -5372,6 +5429,9 @@ packages: '@types/geojson@7946.0.16': resolution: {integrity: sha512-6C8nqWur3j98U6+lXDfTUWIfgvZU+EumvpHKcYjujKH7woYyLj2sUmff0tRhrqM7BohUw7Pz3ZB1jj2gW9Fvmg==} + '@types/har-format@1.2.16': + resolution: {integrity: sha512-fluxdy7ryD3MV6h8pTfTYpy/xQzCFC7m89nOH9y94cNqJ1mDIDPut7MnRHI3F6qRmh/cT2fUjG1MLdCNb4hE9A==} + '@types/hast@3.0.4': resolution: {integrity: sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==} @@ -5441,6 +5501,9 @@ packages: '@types/mime@1.3.5': resolution: {integrity: sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==} + '@types/minimatch@3.0.5': + resolution: {integrity: sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==} + '@types/ms@2.1.0': resolution: {integrity: sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==} @@ -5954,6 +6017,21 @@ packages: '@webcomponents/webcomponentsjs@2.8.0': resolution: {integrity: sha512-loGD63sacRzOzSJgQnB9ZAhaQGkN7wl2Zuw7tsphI5Isa0irijrRo6EnJii/GgjGefIFO8AIO7UivzRhFaEk9w==} + '@webext-core/fake-browser@1.3.4': + resolution: {integrity: sha512-nZcVWr3JpwpS5E6hKpbAwAMBM/AXZShnfW0F76udW8oLd6Kv0nbW6vFS07md4Na/0ntQonk3hFnlQYGYBAlTrA==} + + '@webext-core/isolated-element@1.1.3': + resolution: {integrity: sha512-rbtnReIGdiVQb2UhK3MiECU6JqsiIo2K/luWvOdOw57Ot770Iw4KLCEPXUQMITIH5V5er2jfVK8hSWXaEOQGNQ==} + + '@webext-core/match-patterns@1.0.3': + resolution: {integrity: sha512-NY39ACqCxdKBmHgw361M9pfJma8e4AZo20w9AY+5ZjIj1W2dvXC8J31G5fjfOGbulW9w4WKpT8fPooi0mLkn9A==} + + '@wxt-dev/browser@0.1.32': + resolution: {integrity: sha512-jvfSppeLzlH4sOkIvMBJoA1pKoI+U5gTkjDwMKdkTWh0P/fj+KDyze3lzo3S6372viCm8tXUKNez+VKyVz2ZDw==} + + '@wxt-dev/storage@1.2.6': + resolution: {integrity: sha512-f6AknnpJvhNHW4s0WqwSGCuZAj0fjP3EVNPBO5kB30pY+3Zt/nqZGqJN6FgBLCSkYjPJ8VL1hNX5LMVmvxQoDw==} + '@xmldom/xmldom@0.8.10': resolution: {integrity: sha512-2WALfTl4xo2SkGCYRt6rDTFfk9R1czmBvUQy12gK2KuRKIpWEhcbbzy8EZXtz/jkRqHX8bFEc6FC1HjX4TUWYw==} engines: {node: '>=10.0.0'} @@ -6041,6 +6119,10 @@ packages: engines: {node: '>=0.4.0'} hasBin: true + adm-zip@0.5.16: + resolution: {integrity: sha512-TGw5yVi4saajsSEgz25grObGHEUaDrniwvA2qwSC060KfqGPdglhvPMA2lPIoxs3PQIItj2iag35fONcQqgUaQ==} + engines: {node: '>=12.0'} + agent-base@6.0.2: resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} engines: {node: '>= 6.0.0'} @@ -6113,6 +6195,9 @@ packages: amator@1.1.0: resolution: {integrity: sha512-V5+aH8pe+Z3u/UG3L3pG3BaFQGXAyXHVQDroRwjPHdh08bcUEchAVsU1MCuJSCaU5o60wTK6KaE6te5memzgYw==} + ansi-align@3.0.1: + resolution: {integrity: sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==} + ansi-escapes@4.3.2: resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} engines: {node: '>=8'} @@ -6210,6 +6295,10 @@ packages: resolution: {integrity: sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==} engines: {node: '>= 0.4'} + array-differ@4.0.0: + resolution: {integrity: sha512-Q6VPTLMsmXZ47ENG3V+wQyZS1ZxXMxFyYzA+Z/GMrJ6yIutAIEf9wTyroTzmGjNfox9/h3GdGBCVh43GVFx4Uw==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + array-flatten@1.1.1: resolution: {integrity: sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==} @@ -6221,6 +6310,10 @@ packages: resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} engines: {node: '>=8'} + array-union@3.0.1: + resolution: {integrity: sha512-1OvF9IbWwaeiM9VhzYXVQacMibxpXOMYVNIvMtKRyX9SImBXpKcFr8XvFDeEslCyuH/t6KRt7HEO94AlP8Iatw==} + engines: {node: '>=12'} + array.prototype.findlast@1.2.5: resolution: {integrity: sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==} engines: {node: '>= 0.4'} @@ -6286,6 +6379,13 @@ packages: resolution: {integrity: sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==} engines: {node: '>= 4.0.0'} + atomic-sleep@1.0.0: + resolution: {integrity: sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==} + engines: {node: '>=8.0.0'} + + atomically@2.1.0: + resolution: {integrity: sha512-+gDffFXRW6sl/HCwbta7zK4uNqbPjv4YJEAdz7Vu+FLQHe77eZ4bvbJGi4hE0QPeJlMYMA3piXEr1UL3dAwx7Q==} + author-regex@1.0.0: resolution: {integrity: sha512-KbWgR8wOYRAPekEmMXrYYdc7BRyhn2Ftk7KWfMUnQ43hFdojWEFRxhhRUm3/OFEdPa1r0KAvTTg9YQK57xTe0g==} engines: {node: '>=0.8'} @@ -6458,6 +6558,10 @@ packages: bowser@2.11.0: resolution: {integrity: sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA==} + boxen@8.0.1: + resolution: {integrity: sha512-F3PH5k5juxom4xktynS7MoFY+NUWH5LC4CnH11YB8NPew+HLpmBLCybSAEyb2F+4pRXhuhWqFesoQd6DAyc2hw==} + engines: {node: '>=18'} + boxicons@2.1.4: resolution: {integrity: sha512-BvJNfYfnE4g9WQ7GL91fftxMOTwAleWlPFwvQJPYb/Ju7aLjlQ/Eu55AH9JLNk/OR82z+ZSq4TbKzbV/e5Rr0A==} @@ -6536,6 +6640,18 @@ packages: resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==} engines: {node: '>= 0.8'} + c12@3.3.3: + resolution: {integrity: sha512-750hTRvgBy5kcMNPdh95Qo+XUBeGo8C7nsKSmedDmaQI+E0r82DwHeM6vBewDe4rGFbnxoa4V9pw+sPh5+Iz8Q==} + peerDependencies: + magicast: '*' + peerDependenciesMeta: + magicast: + optional: true + + cac@6.7.14: + resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} + engines: {node: '>=8'} + cacache@15.3.0: resolution: {integrity: sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ==} engines: {node: '>= 10'} @@ -6590,6 +6706,10 @@ packages: resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} engines: {node: '>=10'} + camelcase@8.0.0: + resolution: {integrity: sha512-8WB3Jcas3swSvjIeA2yvCJ+Miyz5l1ZmB6HFb9R1317dt9LCQoswg/BGrmAmkWVEszSrrg4RwmO46qIm2OEnSA==} + engines: {node: '>=16'} + camelize@1.0.1: resolution: {integrity: sha512-dU+Tx2fsypxTgtLoE36npi3UqcjSSMNYfkqgmoEhtZrraP5VWq0K7FkWVTYa8eMPtnU/G2txVsfdCJTn9uzpuQ==} @@ -6682,10 +6802,25 @@ packages: resolution: {integrity: sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==} engines: {node: '>=18'} + chrome-launcher@1.2.0: + resolution: {integrity: sha512-JbuGuBNss258bvGil7FT4HKdC3SC2K7UAEUqiPy3ACS3Yxo3hAW6bvFpCu2HsIJLgTqxgEX6BkujvzZfLpUD0Q==} + engines: {node: '>=12.13.0'} + hasBin: true + chrome-trace-event@1.0.4: resolution: {integrity: sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==} engines: {node: '>=6.0'} + ci-info@4.3.1: + resolution: {integrity: sha512-Wdy2Igu8OcBpI2pZePZ5oWjPC38tmDVx5WKUXKwlLYkA0ozo85sLsLvkBbBn/sZaSCMFOGZJ14fvW9t5/d7kdA==} + engines: {node: '>=8'} + + citty@0.1.6: + resolution: {integrity: sha512-tskPPKEs8D2KPafUypv2gxwJP8h/OaJmC82QQGGDQcHvXX43xF2VDACcJVmZ0EuSxkpO9Kc4MlrA3q0+FG58AQ==} + + citty@0.2.0: + resolution: {integrity: sha512-8csy5IBFI2ex2hTVpaHN2j+LNE199AgiI7y4dMintrr8i0lQiFn+0AWMZrWdHKIgMOer65f8IThysYhoReqjWA==} + ckeditor5-collaboration@47.4.0: resolution: {integrity: sha512-SNwRWFy6DcU1R9wHpRvXq6YLbpMExRoGwms+JF1bKZK9afHznGOouoMPSpHNrkE27OMem6r0SlXAryUPQh4Pfg==} @@ -6704,6 +6839,10 @@ packages: resolution: {integrity: sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==} engines: {node: '>=6'} + cli-boxes@3.0.0: + resolution: {integrity: sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g==} + engines: {node: '>=10'} + cli-cursor@3.1.0: resolution: {integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==} engines: {node: '>=8'} @@ -6728,6 +6867,10 @@ packages: resolution: {integrity: sha512-wfOBkjXteqSnI59oPcJkcPl/ZmwvMMOj340qUIY1SKZCv0B9Cf4D4fAucRkIKQmsIuYK3x1rrgU7MeGRruiuiA==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + cli-truncate@4.0.0: + resolution: {integrity: sha512-nPdaFdQ0h/GEigbPClz11D0v/ZJEwxmeVZGeMo3Z5StPtUTkA9o1lD6QwoirYiSDzbcwn2XcjwmCp68W1IS4TA==} + engines: {node: '>=18'} + cli-truncate@5.1.0: resolution: {integrity: sha512-7JDGG+4Zp0CsknDCedl0DYdaeOhc46QNpXi3NLQblkZpXXgA6LncLDUUyvrjSvZeF3VRQa+KiMGomazQrC1V8g==} engines: {node: '>=20'} @@ -6860,6 +7003,10 @@ packages: commander@2.20.3: resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} + commander@2.9.0: + resolution: {integrity: sha512-bmkUukX8wAOjHdN26xj5c4ctEV22TQ7dQYhSmuckKhToXrkUn0iIaolHdIxYYqD55nhpSPA9zPQ1yP57GdXP2A==} + engines: {node: '>= 0.6.x'} + commander@4.1.1: resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} engines: {node: '>= 6'} @@ -6934,6 +7081,13 @@ packages: confbox@0.2.2: resolution: {integrity: sha512-1NB+BKqhtNipMsov4xI/NnhCKp9XG9NamYp5PVm9klAT0fsrNPjaFICsCFhNhwZJKNh7zB/3q8qXz0E9oaMNtQ==} + config-chain@1.1.13: + resolution: {integrity: sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==} + + configstore@7.1.0: + resolution: {integrity: sha512-N4oog6YJWbR9kGyXvS7jEykLDXIE2C0ILYqNBZBp9iwiJpoCBWYsuAdW6PPFn6w06jjnC+3JstVvWHO4cZqvRg==} + engines: {node: '>=18'} + connect-history-api-fallback@2.0.0: resolution: {integrity: sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==} engines: {node: '>=0.8'} @@ -6942,6 +7096,10 @@ packages: resolution: {integrity: sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==} engines: {node: '>= 0.10.0'} + consola@3.4.2: + resolution: {integrity: sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA==} + engines: {node: ^14.18.0 || >=16.10.0} + console-control-strings@1.1.0: resolution: {integrity: sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==} @@ -7211,6 +7369,9 @@ packages: cssom@0.4.4: resolution: {integrity: sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==} + cssom@0.5.0: + resolution: {integrity: sha512-iKuQcq+NdHqlAcwUY0o/HL69XQrUaQdMjmStJ8JFmUaiiQErlhrmuigkg/CU4E2J0IyUKUrMAgl36TvN67MqTw==} + cssstyle@2.3.0: resolution: {integrity: sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==} engines: {node: '>=8'} @@ -7435,6 +7596,9 @@ packages: de-indent@1.0.2: resolution: {integrity: sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg==} + debounce@1.2.1: + resolution: {integrity: sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug==} + debounce@3.0.0: resolution: {integrity: sha512-64byRbF0/AirwbuHqB3/ZpMG9/nckDa6ZA0yd6UnaQNwbbemCOwvz2sL5sjXLHhZHADyiwLm0M5qMhltUUx+TA==} engines: {node: '>=20'} @@ -7540,6 +7704,10 @@ packages: resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} engines: {node: '>= 0.4'} + define-lazy-prop@2.0.0: + resolution: {integrity: sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==} + engines: {node: '>=8'} + define-lazy-prop@3.0.0: resolution: {integrity: sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==} engines: {node: '>=12'} @@ -7551,6 +7719,9 @@ packages: defined@1.0.1: resolution: {integrity: sha512-hsBd2qSVCRE+5PmNdHt1uzyrFu5d3RwmFDKzyNZMFq/EwDNJF7Ee5+D5oEKF0hU6LhtoUF1macFvOe4AskQC1Q==} + defu@6.1.4: + resolution: {integrity: sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==} + degenerator@5.0.1: resolution: {integrity: sha512-TllpMR/t0M5sqCXfj85i4XaAzxmS5tVA16dqvdkMwGmzI+dXLXnw3J+3Vdv7VKw+ThlTMboK6i9rnZ6Nntj5CQ==} engines: {node: '>= 14'} @@ -7577,6 +7748,9 @@ packages: resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} engines: {node: '>=6'} + destr@2.0.5: + resolution: {integrity: sha512-ugFTXCtDZunbzasqBxrK93Ik/DRYsO6S/fedkWEMKqt04xZ4csmnmwGDBAb07QWNaGMAmnTIemsYZCksjATwsA==} + destroy@1.2.0: resolution: {integrity: sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==} engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} @@ -7688,6 +7862,14 @@ packages: domutils@3.2.2: resolution: {integrity: sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==} + dot-prop@9.0.0: + resolution: {integrity: sha512-1gxPBJpI/pcjQhKgIU91II6Wkay+dLcN3M6rf2uwP8hRur3HtQXjVrdAK3sjC0piaEuxzMwjXChcETiJl47lAQ==} + engines: {node: '>=18'} + + dotenv-expand@12.0.3: + resolution: {integrity: sha512-uc47g4b+4k/M/SeaW1y4OApx+mtLWl92l5LMPP0GNXctZqELk+YGgOPIIC5elYmUH4OuoK3JLhuRUYegeySiFA==} + engines: {node: '>=12'} + dotenv@16.4.7: resolution: {integrity: sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ==} engines: {node: '>=12'} @@ -7912,6 +8094,9 @@ packages: es-module-lexer@1.7.0: resolution: {integrity: sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==} + es-module-lexer@2.0.0: + resolution: {integrity: sha512-5POEcUuZybH7IdmGsD8wlf0AI55wMecM9rVBTI/qEAy2c1kTOm3DjFYjrBdI2K3BaJjJYfYFeRtM0t9ssnRuxw==} + es-object-atoms@1.1.1: resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==} engines: {node: '>= 0.4'} @@ -8201,6 +8386,9 @@ packages: exsolve@1.0.5: resolution: {integrity: sha512-pz5dvkYYKQ1AHVrgOzBKWeP4u4FRb3a6DNK2ucr0OoNwYIU4QWsJ+NM36LLzORT+z845MzKHHhpXiUF5nvQoJg==} + exsolve@1.0.8: + resolution: {integrity: sha512-LmDxfWXwcTArk8fUEnOfSZpHOJ6zOMUJKOtFLFqJLoKJetuQG874Uc7/Kki7zFLzYybmZhp1M7+98pfMqeX8yA==} + ext-list@2.2.2: resolution: {integrity: sha512-u+SQgsubraE6zItfVA0tBuCBhfU9ogSRnsvygI7wht9TS510oLkBRXBsqopeUG/GBOIQyKZO9wjTqIu/sf5zFA==} engines: {node: '>=0.10.0'} @@ -8244,6 +8432,10 @@ packages: fast-levenshtein@2.0.6: resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} + fast-redact@3.5.0: + resolution: {integrity: sha512-dwsoQlS7h9hMeYUq1W++23NDcBLV4KqONnITDV9DjfS3q1SgDGVrBdvvTLUotWtPSD7asWDV9/CmsZPy8Hf70A==} + engines: {node: '>=6'} + fast-safe-stringify@2.1.1: resolution: {integrity: sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==} @@ -8328,6 +8520,10 @@ packages: resolution: {integrity: sha512-hcFKyUG57yWGAzu1CMt/dPzYZuv+jAJUT85bL8mrXvNe6hWj6yEHEc4EdcgiA6Z3oi1/9wXJdZPXF2dZNgwgOg==} engines: {node: '>=8'} + filesize@11.0.13: + resolution: {integrity: sha512-mYJ/qXKvREuO0uH8LTQJ6v7GsUvVOguqxg2VTwQUkyTPXXRRWPdjuUPVqdBrJQhvci48OHlNGRnux+Slr2Rnvw==} + engines: {node: '>= 10.8.0'} + fill-range@7.1.1: resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} engines: {node: '>=8'} @@ -8356,6 +8552,11 @@ packages: resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} engines: {node: '>=10'} + firefox-profile@4.7.0: + resolution: {integrity: sha512-aGApEu5bfCNbA4PGUZiRJAIU6jKmghV2UVdklXAofnNtiDjqYw0czLS46W7IfFqVKgKhFB8Ao2YoNGHY4BoIMQ==} + engines: {node: '>=18'} + hasBin: true + flat-cache@4.0.1: resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==} engines: {node: '>=16'} @@ -8405,6 +8606,10 @@ packages: resolution: {integrity: sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==} engines: {node: '>=14'} + form-data-encoder@4.1.0: + resolution: {integrity: sha512-G6NsmEW15s0Uw9XnCg+33H3ViYRyiM0hMrMhhqQOR8NFc5GhYrI+6I3u7OTw7b91J2g8rtvMBZJDbcGb2YUniw==} + engines: {node: '>= 18'} + form-data@4.0.4: resolution: {integrity: sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow==} engines: {node: '>= 6'} @@ -8417,6 +8622,10 @@ packages: resolution: {integrity: sha512-wzsgA6WOq+09wrU1tsJ09udeR/YZRaeArL9e1wPbFg3GG2yDnC2ldKpxs4xunpFF9DgqCqOIra3bc1HWrJ37Ww==} engines: {node: '>=0.4.x'} + formdata-node@6.0.3: + resolution: {integrity: sha512-8e1++BCiTzUno9v5IZ2J6bv4RU+3UKDmqWUQD0MIMVCd9AdhWkO1gw57oo1mNEX1dMq2EGI+FbWz4B92pscSQg==} + engines: {node: '>= 18'} + formdata-polyfill@4.0.10: resolution: {integrity: sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==} engines: {node: '>=12.20.0'} @@ -8515,6 +8724,10 @@ packages: fuzzysort@3.1.0: resolution: {integrity: sha512-sR9BNCjBg6LNgwvxlBd0sBABvQitkLzoVY9MYYROQVX/FvfJ4Mai9LsGhDgd8qYdds0bY77VzYd5iuB+v5rwQQ==} + fx-runner@1.4.0: + resolution: {integrity: sha512-rci1g6U0rdTg6bAaBboP7XdRu01dzTAaKXxFf+PUqGuCv6Xu7o8NZdY1D5MvKGIjb6EdS1g3VlXOgksir1uGkg==} + hasBin: true + galactus@1.0.0: resolution: {integrity: sha512-R1fam6D4CyKQGNlvJne4dkNF+PvUUl7TAJInvTGa9fti9qAv95quQz29GXapA4d8Ec266mJJxFVh82M4GIIGDQ==} engines: {node: '>= 12'} @@ -8570,6 +8783,9 @@ packages: resolution: {integrity: sha512-SCbprXGAPdIhKAXiG+Mk6yeoFH61JlYunqdFQFHDtLjJlDjFf6x07dsS8acO+xWt52jpdVo49AlVDnUVK1sDNw==} engines: {node: '>= 4.0'} + get-port-please@3.2.0: + resolution: {integrity: sha512-I9QVvBw5U/hw3RmWpYKRumUeaDgxTPd401x364rLmWBJcOQ753eov1eTgzDqRG9bqFIfDc7gfzcQEWrUri3o1A==} + get-port@7.1.0: resolution: {integrity: sha512-QB9NKEeDg3xxVwCCwJQ9+xycaz6pBB6iQ76wiWMl1927n0Kir6alPiP+yuiICLLU4jpMe08dXfpebuQppFA2zw==} engines: {node: '>=16'} @@ -8607,6 +8823,10 @@ packages: gifwrap@0.10.1: resolution: {integrity: sha512-2760b1vpJHNmLzZ/ubTtNnEx5WApN/PYWJvXvgS+tL1egTTthayFYIQQNi136FLEDcN/IyEY2EcGpIITD6eYUw==} + giget@2.0.0: + resolution: {integrity: sha512-L5bGsVkxJbJgdnwyuheIunkGatUF/zssUoxxjACCseZYAVbaqdh9Tsmmlkl8vYan09H7sbvKt4pS8GqKLBrEzA==} + hasBin: true + github-from-package@0.0.0: resolution: {integrity: sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==} @@ -8667,6 +8887,10 @@ packages: resolution: {integrity: sha512-PT6XReJ+D07JvGoxQMkT6qji/jVNfX/h364XHZOWeRzy64sSFr+xJ5OX7LI3b4MPQzdL4H8Y8M0xzPpsVMwA8Q==} engines: {node: '>=10.0'} + global-directory@4.0.1: + resolution: {integrity: sha512-wHTUcDUoZ1H5/0iVqEudYW4/kAlN5cZ3j/bXn0Dpbizl9iaUVeWSHqiOjsgk6OW2bkLclbBjzewBz6weQ1zA2Q==} + engines: {node: '>=18'} + global-dirs@3.0.1: resolution: {integrity: sha512-NBcGGFbBA9s1VzD41QXDG+3++t9Mn5t1FpLdhESY6oKY4gYTFpX4wO3sqGUa0Srjtbfj3szX0RnemmrVRUdULA==} engines: {node: '>=10'} @@ -8725,9 +8949,15 @@ packages: resolution: {integrity: sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g==} engines: {node: '>=10.19.0'} + graceful-fs@4.2.10: + resolution: {integrity: sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==} + graceful-fs@4.2.11: resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} + graceful-readlink@1.0.1: + resolution: {integrity: sha512-8tLu60LgxF6XpdbK8OW3FA+IfTNBn1ZHGHKF4KQbEeSkajYw5PlYJcKluntgegDPTg8UkHjpet1T82vk6TQ68w==} + grapheme-splitter@1.0.4: resolution: {integrity: sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==} @@ -8738,6 +8968,9 @@ packages: resolution: {integrity: sha512-DKKrynuQRne0PNpEbzuEdHlYOMksHSUI8Zc9Unei5gTsMNA2/vMpoMz/yKba50pejK56qj98qM0SjYxAKi13gQ==} engines: {node: ^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0} + growly@1.3.0: + resolution: {integrity: sha512-+xGQY0YyAWCnqy7Cd++hc2JqMYzlm0dG30Jd0beaA64sROr8C4nt8Yc9V5Ro3avlSUDTN0ulqP/VBKi1/lLygw==} + hachure-fill@0.5.2: resolution: {integrity: sha512-3GKBOn+m2LX9iq+JC1064cSFprJY4jL1jCXTcpnfER5HYE2l/4EfWSGzkPa/ZDBmYI0ZOEj5VHV/eKnPGkHuOg==} @@ -8868,6 +9101,9 @@ packages: hoist-non-react-statics@2.5.5: resolution: {integrity: sha512-rqcy4pJo55FTTLWt+bU8ukscqHeE/e9KWvsOW2b/a3afxQZhwkQdT1rPPCJ0rYXdj4vNcasY8zHTH+jF/qStxw==} + hookable@5.5.3: + resolution: {integrity: sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ==} + hookified@1.13.0: resolution: {integrity: sha512-6sPYUY8olshgM/1LDNW4QZQN0IqgKhtl/1C8koNZBJrKLBk3AZl6chQtNwpNztvfiApHMEwMHek5rv993PRbWw==} @@ -8900,6 +9136,9 @@ packages: html-escaper@2.0.2: resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} + html-escaper@3.0.3: + resolution: {integrity: sha512-RuMffC89BOWQoY0WKGpIhn5gX3iI54O6nRA0yC124NYVtzjmFWBIiFd8M0x+ZdX0P9R4lADg1mgP8C7PxGOWuQ==} + html-parse-stringify@3.0.1: resolution: {integrity: sha512-KknJ50kTInJ7qIScF3jeaFRpMpE8/lfiTdzf/twXyPBLAGrLRTmkz3AdTnKeh40X8k9L2fdYwEp/42WGXIRGcg==} @@ -9150,6 +9389,10 @@ packages: resolution: {integrity: sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==} engines: {node: '>=10'} + ini@4.1.1: + resolution: {integrity: sha512-QQnnxNyfvmHFIsj7gkPcYymR8Jdw/o7mp5ZFihxn6h8Ci6fh3Dx4E1gPjpQEpIuPo9XVNY/ZUwh4BPMjGyL01g==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + ini@4.1.3: resolution: {integrity: sha512-X7rqawQBvfdjS10YU1y1YVreA3SsLrW9dX2CewP2EbBJM4ypVNLDkO5y04gejPwKIY9lR+7r9gn3rFPt/kmWFg==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} @@ -9200,6 +9443,10 @@ packages: resolution: {integrity: sha512-Ag3wB2o37wslZS19hZqorUnrnzSkpOVy+IiiDEiTqNubEYpYuHWIf6K4psgN2ZWKExS4xhVCrRVfb/wfW8fWJA==} engines: {node: '>= 10'} + is-absolute@0.1.7: + resolution: {integrity: sha512-Xi9/ZSn4NFapG8RP98iNPMOeaV3mXPisxKxzKtHVqr3g56j/fBn+yZmnxSVAA8lmZbl2J9b/a4kJvfU3hqQYgA==} + engines: {node: '>=0.10.0'} + is-animated@2.0.2: resolution: {integrity: sha512-+Hi3UdXHV/3ZgxdO9Ik45ciNhDlYrDOIdGz7Cj7ybddWnYBi4kwBuGMn79Xa2Js4VldgX5e3943Djsr/KYSPbA==} @@ -9288,11 +9535,20 @@ packages: resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} engines: {node: '>=0.10.0'} + is-in-ci@1.0.0: + resolution: {integrity: sha512-eUuAjybVTHMYWm/U+vBO1sY/JOCgoPCXRxzdju0K+K0BiGW0SChEL1MLC0PoCIR1OlPo5YAp8HuQoUlsWEICwg==} + engines: {node: '>=18'} + hasBin: true + is-inside-container@1.0.0: resolution: {integrity: sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==} engines: {node: '>=14.16'} hasBin: true + is-installed-globally@1.0.0: + resolution: {integrity: sha512-K55T22lfpQ63N4KEN57jZUAaAYqYHEe8veb/TycJRk9DdSCLLcovXz/mL6mOnhQaZsQGwPhuFopdQIlqGSEjiQ==} + engines: {node: '>=18'} + is-interactive@1.0.0: resolution: {integrity: sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==} engines: {node: '>=8'} @@ -9328,6 +9584,10 @@ packages: is-node-process@1.2.0: resolution: {integrity: sha512-Vg4o6/fqPxIjtxgUH5QLJhwZ7gW5diGCVlXpuUfELC62CuxM1iHcRe51f2W1FDy04Ai4KJkagKjx3XaqyfRKXw==} + is-npm@6.1.0: + resolution: {integrity: sha512-O2z4/kNgyjhQwVR1Wpkbfc19JIhggF97NZNCpWTnjH7kVcZMUrnut9XSN7txI7VdyIYk5ZatOq3zvSuWpU8hoA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + is-number-object@1.1.1: resolution: {integrity: sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==} engines: {node: '>= 0.4'} @@ -9356,6 +9616,10 @@ packages: resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==} engines: {node: '>=12'} + is-plain-object@2.0.4: + resolution: {integrity: sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==} + engines: {node: '>=0.10.0'} + is-plain-object@5.0.0: resolution: {integrity: sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==} engines: {node: '>=0.10.0'} @@ -9363,6 +9627,10 @@ packages: is-potential-custom-element-name@1.0.1: resolution: {integrity: sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==} + is-primitive@3.0.1: + resolution: {integrity: sha512-GljRxhWvlCNRfZyORiH77FwdFwGcMO620o37EOYC0ORWdq+WYNVqW0w2Juzew4M+L81l6/QS3t5gkkihyRqv9w==} + engines: {node: '>=0.10.0'} + is-promise@4.0.0: resolution: {integrity: sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==} @@ -9380,6 +9648,10 @@ packages: resolution: {integrity: sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==} engines: {node: '>= 0.4'} + is-relative@0.1.3: + resolution: {integrity: sha512-wBOr+rNM4gkAZqoLRJI4myw5WzzIdQosFAAbnvfXP5z1LyzgAI3ivOKehC5KfqlQJZoihVhirgtCBj378Eg8GA==} + engines: {node: '>=0.10.0'} + is-set@2.0.3: resolution: {integrity: sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==} engines: {node: '>= 0.4'} @@ -9416,6 +9688,14 @@ packages: resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==} engines: {node: '>=10'} + is-unicode-supported@1.3.0: + resolution: {integrity: sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ==} + engines: {node: '>=12'} + + is-unicode-supported@2.1.0: + resolution: {integrity: sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ==} + engines: {node: '>=18'} + is-weakmap@2.0.2: resolution: {integrity: sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==} engines: {node: '>= 0.4'} @@ -9452,6 +9732,9 @@ packages: resolution: {integrity: sha512-iHrqe5shvBUcFbmZq9zOQHBoeOhZJu6RQGrDpBgenUm/Am+F3JM2MgQj+rK3Z601fzrL5gLZWtAPH2OBaSVcyw==} engines: {node: '>= 8.0.0'} + isexe@1.1.2: + resolution: {integrity: sha512-d2eJzK691yZwPHcv1LbeAOa91yMJ9QmfTgSO1oXB65ezVhXQsxBac2vEB4bMVms9cGzaA99n6V2viHMq82VLDw==} + isexe@2.0.0: resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} @@ -9459,6 +9742,10 @@ packages: resolution: {integrity: sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==} engines: {node: '>=16'} + isobject@3.0.1: + resolution: {integrity: sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==} + engines: {node: '>=0.10.0'} + istanbul-lib-coverage@3.2.2: resolution: {integrity: sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==} engines: {node: '>=8'} @@ -9602,6 +9889,10 @@ packages: json-parse-even-better-errors@2.3.1: resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} + json-parse-even-better-errors@3.0.2: + resolution: {integrity: sha512-fi0NG4bPjCHunUJffmLd0gxssIgkNmArMvis4iNah6Owg1MCJjWhEcDLmsK6iGkJq3tHwbDkTlce70/tmXN4cQ==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + json-parse-even-better-errors@4.0.0: resolution: {integrity: sha512-lR4MXjGNgkJc7tkQ97kb2nuEMnNCyU//XYVH0MKTGcXEiSudQ5MKGKen3C5QubYy0vmq+JGitUg92uuywGEwIA==} engines: {node: ^18.17.0 || >=20.5.0} @@ -9724,6 +10015,10 @@ packages: resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==} engines: {node: '>=0.10.0'} + kleur@3.0.3: + resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==} + engines: {node: '>=6'} + klona@2.0.6: resolution: {integrity: sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA==} engines: {node: '>= 8'} @@ -9737,10 +10032,18 @@ packages: kolorist@1.8.0: resolution: {integrity: sha512-Y+60/zizpJ3HRH8DCss+q95yr6145JXZo46OTpFvDZWLfRCE4qChOyk1b26nMaNpfHHgxagk9dXT5OP0Tfe+dQ==} + ky@1.14.2: + resolution: {integrity: sha512-q3RBbsO5A5zrPhB6CaCS8ZUv+NWCXv6JJT4Em0i264G9W0fdPB8YRfnnEi7Dm7X7omAkBIPojzYJ2D1oHTHqug==} + engines: {node: '>=18'} + langium@3.3.1: resolution: {integrity: sha512-QJv/h939gDpvT+9SiLVlY7tZC3xB2qK57v0J04Sh9wpMb6MP1q8gB21L3WIo8T5P1MSMg3Ep14L7KkDCFG3y4w==} engines: {node: '>=16.0.0'} + latest-version@9.0.0: + resolution: {integrity: sha512-7W0vV3rqv5tokqkBAFV1LbR7HPOWzXQDpDgEuib/aJ1jsZZx6x3c2mBI+TJhJzOhkGeaLbCKEHXEXLfirtG2JA==} + engines: {node: '>=18'} + launch-editor@2.11.1: resolution: {integrity: sha512-SEET7oNfgSaB6Ym0jufAdCeo3meJVeCaaDyzRygy0xsp2BFKCprcfHljTq4QkzTLUxEKkFK6OK4811YM2oSrRg==} @@ -9782,6 +10085,9 @@ packages: lie@3.3.0: resolution: {integrity: sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==} + lighthouse-logger@2.0.2: + resolution: {integrity: sha512-vWl2+u5jgOQuZR55Z1WM0XDdrJT6mzMP8zHUct7xTlWhuQs+eV0g+QL0RQdFjT54zVmbhLCP8vIVpy1wGn/gCg==} + lightningcss-android-arm64@1.31.1: resolution: {integrity: sha512-HXJF3x8w9nQ4jbXRiNppBCqeZPIAfUo8zE/kOEGbW5NZvGc/K7nMxbhIr+YlFlHW5mpbg/YFPdbnCh1wAXCKFg==} engines: {node: '>= 12.0.0'} @@ -9866,6 +10172,19 @@ packages: lines-and-columns@1.2.4: resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} + lines-and-columns@2.0.4: + resolution: {integrity: sha512-wM1+Z03eypVAVUCE7QdSqpVIvelbOakn1M0bPDoA4SGWPx3sNDVUiMo3L6To6WWGClB7VyXnhQ4Sn7gxiJbE6A==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + linkedom@0.18.12: + resolution: {integrity: sha512-jalJsOwIKuQJSeTvsgzPe9iJzyfVaEJiEXl+25EkKevsULHvMJzpNqwvj1jOESWdmgKDiXObyjOYwlUqG7wo1Q==} + engines: {node: '>=16'} + peerDependencies: + canvas: '>= 2' + peerDependenciesMeta: + canvas: + optional: true + linkify-it@5.0.0: resolution: {integrity: sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ==} @@ -9878,6 +10197,10 @@ packages: resolution: {integrity: sha512-rJysbR9GKIalhTbVL2tYbF2hVyDnrf7pFUZBwjPaMIdadYHmeT+EVi/Bu3qd7ETQPahTotg2WRCatXwRBW554g==} engines: {node: '>=16.0.0'} + listr2@8.3.3: + resolution: {integrity: sha512-LWzX2KsqcB1wqQ4AHgYb4RsDXauQiqhjLk+6hjbaeHG4zpjjVAB6wC/gz6X0l+Du1cN3pUB5ZlrvTbhGSNnUQQ==} + engines: {node: '>=18.0.0'} + listr2@9.0.5: resolution: {integrity: sha512-ME4Fb83LgEgwNw96RKNvKV4VTLuXfoKudAmm2lP8Kk87KaMK0/Xrx/aAkMWmT8mDb+3MlFDspfbCs7adjRxA2g==} engines: {node: '>=20.0.0'} @@ -9898,6 +10221,10 @@ packages: resolution: {integrity: sha512-WunYko2W1NcdfAFpuLUoucsgULmgDBRkdxHxWQ7mK0cQqwPiy8E1enjuRBrhLtZkB5iScJ1XIPdhVEFK8aOLSg==} engines: {node: '>=14'} + local-pkg@1.1.2: + resolution: {integrity: sha512-arhlxbFRmoQHl33a0Zkle/YWlmNwoyt6QNZEIJcqNbdrsix5Lvc4HyyI3EnwxTYlZYc32EbYrQ8SzEZ7dqgg9A==} + engines: {node: '>=14'} + locate-app@2.5.0: resolution: {integrity: sha512-xIqbzPMBYArJRmPGUZD9CzV9wOqmVtQnaAn3wrj3s6WYW0bQvPI7x+sPYUGmDTYMHefVK//zc6HEYZ1qnxIK+Q==} @@ -9972,6 +10299,10 @@ packages: resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==} engines: {node: '>=10'} + log-symbols@6.0.0: + resolution: {integrity: sha512-i24m8rpwhmPIS4zscNzK6MSEhk0DUWa/8iYQWxhffV8jkI4Phvs3F+quL5xvS0gdQR0FyTCMMH33Y78dDTzzIw==} + engines: {node: '>=18'} + log-update@5.0.1: resolution: {integrity: sha512-5UtUDQ/6edw4ofyljDNcOVJQ4c7OjDro4h3y8e1GQL5iYElYclVHJ3zeWchylvMaKnDbDilC8irOVyexnA/Slw==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} @@ -10045,6 +10376,9 @@ packages: magic-string@0.30.21: resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==} + magicast@0.3.5: + resolution: {integrity: sha512-L0WhttDl+2BOsybvEOLK7fW3UA0OQ0IQ2d6Zl2x/a6vVRs3bAY0ECOSHHeL5jD+SbOpOCUEi0y1DgHEn9Qn1AQ==} + magicast@0.5.1: resolution: {integrity: sha512-xrHS24IxaLrvuo613F719wvOIv9xPHFWQHuvGUBmPnCA/3MQxKI3b+r7n1jAoDHmsbC5bRhTZYR77invLAxVnw==} @@ -10075,6 +10409,9 @@ packages: resolution: {integrity: sha512-+zopwDy7DNknmwPQplem5lAZX/eCOzSvSNNcSKm5eVwTkOBzoktEfXsa9L23J/GIRhxRsaxzkPEhrJEpE2F4Gg==} engines: {node: '>= 10'} + many-keys-map@2.0.1: + resolution: {integrity: sha512-DHnZAD4phTbZ+qnJdjoNEVU1NecYoSdbOOoVmTDH46AuxDkEVh3MxTVpXq10GtcTC6mndN9dkv1rNfpjRcLnOw==} + map-age-cleaner@0.1.3: resolution: {integrity: sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==} engines: {node: '>=6'} @@ -10108,6 +10445,9 @@ packages: engines: {node: '>= 12'} hasBin: true + marky@1.3.0: + resolution: {integrity: sha512-ocnPZQLNpvbedwTy9kNrQEsknEfgvcLMvOtz3sFeWApDq1MXH1TqkCIx58xlpESsfwQOnuBO9beyQuNGzVvuhQ==} + matcher@3.0.0: resolution: {integrity: sha512-OkeDaAZ/bQCxeFAozM55PKcKU0yJMPGifLwV4Qgjitu+5MoAfSQN4lsLJeXZ1b8w0x+/Emda6MZgXS1jvsapng==} engines: {node: '>=10'} @@ -10477,6 +10817,9 @@ packages: mlly@1.7.4: resolution: {integrity: sha512-qmdSIPC4bDJXgZTCR7XosJiNKySV7O215tsPtDN9iEO/7q/76b/ijtgRu/+epFXSJhijtTCCGp3DWS549P3xKw==} + mlly@1.8.0: + resolution: {integrity: sha512-l8D9ODSRWLe2KHJSifWGwBqpTZXIXTeo8mlKjY+E2HAakaTeNpqAyBZ8GSqLzHgw4XmHmC8whvpjJNMbFZN7/g==} + mobx-react-lite@4.1.1: resolution: {integrity: sha512-iUxiMpsvNraCKXU+yPotsOncNNmyeS2B5DKL+TL6Tar/xm+wwNJAubJmtRSeAoYawdZqwv8Z/+5nPRHeQxTiXg==} peerDependencies: @@ -10553,6 +10896,10 @@ packages: resolution: {integrity: sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==} hasBin: true + multimatch@6.0.0: + resolution: {integrity: sha512-I7tSVxHGPlmPN/enE3mS1aOSo6bWBfls+3HmuEeCUBCE7gWnm3cBXCBkpurzFjVRwC6Kld8lLaZ1Iv5vOcjvcQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + multimath@2.0.0: resolution: {integrity: sha512-toRx66cAMJ+Ccz7pMIg38xSIrtnbozk0dchXezwQDMgQmbGpfxjtv68H+L00iFL8hxDaVjrmwAFSb3I6bg8Q2g==} @@ -10576,6 +10923,10 @@ packages: nan@2.22.2: resolution: {integrity: sha512-DANghxFkS1plDdRsX0X9pm0Z6SJNN6gBdtXfanwoZ8hooC5gosGFSBGRYHUVPz1asKA/kMRqDRdHrluZ61SpBQ==} + nano-spawn@1.0.3: + resolution: {integrity: sha512-jtpsQDetTnvS2Ts1fiRdci5rx0VYws5jGyC+4IYOTnIQ/wwdf6JdomlHBwqC3bJYOvaKu0C2GSZ1A60anrYpaA==} + engines: {node: '>=20.17'} + nano-spawn@2.0.0: resolution: {integrity: sha512-tacvGzUY5o2D8CBh2rrwxyNojUsZNU2zjNTzKQrkgGJQTbGAfArVWXSKMBokBeeg6C7OLRGUEyoFlYbfeWQIqw==} engines: {node: '>=20.17'} @@ -10650,6 +11001,9 @@ packages: resolution: {integrity: sha512-ofRW94Ab0T4AOh5Fk8t0h8OBWrmjb0SSB20xh1H8YnPV9EJ+f5AMoYSUQ2zgJ4Iq2HAK0I2l5/Nequ8YzFS3Hg==} engines: {node: 4.x || >=6.0.0} + node-fetch-native@1.6.7: + resolution: {integrity: sha512-g9yhqoedzIUm0nTnTqAQvueMPVOuIY16bqgAJJC8XOOubYFNwz6IER9qs0Gq2Xd0+CecCKFjtdDTMA4u4xG06Q==} + node-fetch@2.7.0: resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==} engines: {node: 4.x || >=6.0.0} @@ -10687,6 +11041,9 @@ packages: node-html-parser@7.0.2: resolution: {integrity: sha512-DxodLVh7a6JMkYzWyc8nBX9MaF4M0lLFYkJHlWOiu7+9/I6mwNK9u5TbAMC7qfqDJEPX9OIoWA2A9t4C2l1mUQ==} + node-notifier@10.0.1: + resolution: {integrity: sha512-YX7TSyDukOZ0g+gmzjB6abKu+hTGvO8+8+gIFDsRCU2t8fLV/P2unmt+LGFaIa4y64aX98Qksa97rgz4vMNeLQ==} + node-readfiles@0.2.0: resolution: {integrity: sha512-SU00ZarexNlE4Rjdm83vglt5Y9yiQ+XI1XpflWlb7q7UTN1JUItm69xMeiQCTxtTfnzt+83T8Cx+vI2ED++VDA==} @@ -10779,6 +11136,11 @@ packages: nwsapi@2.2.23: resolution: {integrity: sha512-7wfH4sLbt4M0gCDzGE6vzQBo0bfTKjU7Sfpqy/7gs1qBfYz2vEJH6vXcBKpO3+6Yu1telwd0t9HpyOoLEQQbIQ==} + nypm@0.6.4: + resolution: {integrity: sha512-1TvCKjZyyklN+JJj2TS3P4uSQEInrM/HkkuSXsEzm1ApPgBffOn8gFguNnZf07r/1X6vlryfIqMUkJKQMzlZiw==} + engines: {node: '>=18'} + hasBin: true + oas-kit-common@1.0.8: resolution: {integrity: sha512-pJTS2+T0oGIwgjGpw7sIRU8RQMcUoKCDWFLdBqKB2BNmGpbBMH2sdqAaOXUg8OzonZHU0L7vfJu1mJFEiYDWOQ==} @@ -10844,6 +11206,12 @@ packages: obug@2.1.1: resolution: {integrity: sha512-uTqF9MuPraAQ+IsnPf366RG4cP9RtUi7MLO1N3KEc+wb0a6yKpeL0lmk2IB1jY5KHPAlTc6T/JRdC/YqxHNwkQ==} + ofetch@1.5.1: + resolution: {integrity: sha512-2W4oUZlVaqAPAil6FUg/difl6YhqhUR7x2eZY4bQCko22UXg3hptq9KLQdqFClV+Wu85UX7hNtdGTngi/1BxcA==} + + ohash@2.0.11: + resolution: {integrity: sha512-RdR9FQrFwNBNXAr4GixM8YaRZRJ5PUWbKYbE5eOsrwAjJW0q2REGcf79oYPsLyskQCZG1PLN+S/K1V00joZAoQ==} + oidc-token-hash@5.1.0: resolution: {integrity: sha512-y0W+X7Ppo7oZX6eovsRkuzcSM40Bicg2JEJkDJ4irIt1wsYAP5MLSNv+QAogO8xivMffw/9OvV3um1pxXgt1uA==} engines: {node: ^10.13.0 || >=12.0.0} @@ -10854,6 +11222,10 @@ packages: omggif@1.0.10: resolution: {integrity: sha512-LMJTtvgc/nugXj0Vcrrs68Mn2D1r0zf630VNtqtpI1FEO7e+O9FP4gqs9AcnBaSEeoHIPm28u6qgPR0oyEpGSw==} + on-exit-leak-free@2.1.2: + resolution: {integrity: sha512-0eJJY6hXLGf1udHwfNftBqH+g73EU4B504nZeKpz1sYRKafAghwxEJunB2O7rDZkL4PGfsMVnTXZ2EjibbqcsA==} + engines: {node: '>=14.0.0'} + on-finished@2.3.0: resolution: {integrity: sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==} engines: {node: '>= 0.8'} @@ -10884,6 +11256,10 @@ packages: resolution: {integrity: sha512-YgBpdJHPyQ2UE5x+hlSXcnejzAvD0b22U2OuAP+8OnlJT+PjWPxtgmGqKKc+RgTM63U9gN0YzrYc71R2WT/hTA==} engines: {node: '>=18'} + open@8.4.2: + resolution: {integrity: sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==} + engines: {node: '>=12'} + openai@6.16.0: resolution: {integrity: sha512-fZ1uBqjFUjXzbGc35fFtYKEOxd20kd9fDpFeqWtsOZWiubY8CZ1NAlXHW3iathaFvqmNtCWMIsosCuyeI7Joxg==} hasBin: true @@ -10918,6 +11294,14 @@ packages: resolution: {integrity: sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==} engines: {node: '>=10'} + ora@8.2.0: + resolution: {integrity: sha512-weP+BZ8MVNnlCm8c0Qdc1WSWq4Qn7I+9CJGm7Qali6g44e/PUzbjNqJX5NJ9ljlNMosfJvg1fKEGILklK9cwnw==} + engines: {node: '>=18'} + + os-shim@0.1.3: + resolution: {integrity: sha512-jd0cvB8qQ5uVt0lvCIexBaROw1KyKm5sbulg2fWOHjETisuCzWyt+eTZKEMs8v6HwzoGs8xik26jg7eCM6pS+A==} + engines: {node: '>= 0.4.0'} + os-tmpdir@1.0.2: resolution: {integrity: sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==} engines: {node: '>=0.10.0'} @@ -10999,6 +11383,10 @@ packages: package-json-from-dist@1.0.1: resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==} + package-json@10.0.1: + resolution: {integrity: sha512-ua1L4OgXSBdsu1FPb7F3tYH0F48a6kxvod4pLUlGY9COeJAJQNX/sNH2IiEmsxw7lqYiAwrdHMjz1FctOsyDQg==} + engines: {node: '>=18'} + package-manager-detector@1.3.0: resolution: {integrity: sha512-ZsEbbZORsyHuO00lY1kV3/t72yp6Ysay6Pd17ZAlNGuGwmWDLCJxFpRs0IzfXfj1o4icJOkUEioexFHzyPurSQ==} @@ -11044,6 +11432,10 @@ packages: resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} engines: {node: '>=8'} + parse-json@7.1.1: + resolution: {integrity: sha512-SgOTCX/EZXtZxBE5eJ97P4yGM5n37BwRU+YMsH4vNzFqJV/oWFXXCmwFlgWUM4PrakybVOueJJ6pwHqSVhTFDw==} + engines: {node: '>=16'} + parse-node-version@1.0.1: resolution: {integrity: sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==} engines: {node: '>= 0.10'} @@ -11164,6 +11556,9 @@ packages: pend@1.2.0: resolution: {integrity: sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==} + perfect-debounce@2.1.0: + resolution: {integrity: sha512-LjgdTytVFXeUgtHZr9WYViYSM/g8MkcTPYDlPa3cDqMirHjKiSZPYd6DoL7pK8AJQr+uWkQvCjHNdiMqsrJs+g==} + perfect-freehand@1.2.0: resolution: {integrity: sha512-h/0ikF1M3phW7CwpZ5MMvKnfpHficWoOEyr//KVNTxV4F6deRK1eYMtHyBKEAKFK0aXIEUK9oBvlF6PNXMDsAw==} @@ -11197,6 +11592,16 @@ packages: resolution: {integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==} engines: {node: '>=6'} + pino-abstract-transport@2.0.0: + resolution: {integrity: sha512-F63x5tizV6WCh4R6RHyi2Ml+M70DNRXt/+HANowMflpgGFMAym/VKm6G7ZOQRjqN7XbGxK1Lg9t6ZrtzOaivMw==} + + pino-std-serializers@7.1.0: + resolution: {integrity: sha512-BndPH67/JxGExRgiX1dX0w1FvZck5Wa4aal9198SrRhZjH3GxKQUKIBnYJTdj2HDN3UQAS06HlfcSbQj2OHmaw==} + + pino@9.7.0: + resolution: {integrity: sha512-vnMCM6xZTb1WDmLvtG2lE/2p+t9hDEIvTWJsu6FejkE62vB7gDhvzrpFR4Cw2to+9JNQxVnkAKVPA1KPB98vWg==} + hasBin: true + pirates@4.0.7: resolution: {integrity: sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==} engines: {node: '>= 6'} @@ -11215,6 +11620,9 @@ packages: pkg-types@2.1.0: resolution: {integrity: sha512-wmJwA+8ihJixSoHKxZJRBQG1oY8Yr9pGLzRmSsNms0iNWyHHAlZCa7mmKiFR10YPZuz/2k169JiS/inOjBCZ2A==} + pkg-types@2.3.0: + resolution: {integrity: sha512-SIqCzDRg0s9npO5XQ3tNZioRY1uK06lA41ynBC1YmFTmnY6FjUjVt6s4LoADmwoig1qqD0oK8h1p/8mlMx8Oig==} + playwright-core@1.57.0: resolution: {integrity: sha512-agTcKlMw/mjBWOnD6kFZttAAGHgi/Nw0CZ2o6JqWSbMlI219lAFLZZCyqByTsvVAJq5XA5H8cA6PrvBRpBWEuQ==} engines: {node: '>=18'} @@ -11763,6 +12171,9 @@ packages: process-nextick-args@2.0.1: resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} + process-warning@5.0.0: + resolution: {integrity: sha512-a39t9ApHNx2L4+HBnQKqxxHNs1r7KF+Intd8Q/g1bUh6q0WIp9voPXJ/x0j+ZL45KF1pJd9+q2jLIRMfvEshkA==} + process@0.11.10: resolution: {integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==} engines: {node: '>= 0.6.0'} @@ -11783,12 +12194,23 @@ packages: resolution: {integrity: sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==} engines: {node: '>=10'} + promise-toolbox@0.21.0: + resolution: {integrity: sha512-NV8aTmpwrZv+Iys54sSFOBx3tuVaOBvvrft5PNppnxy9xpU/akHbaWIril22AB22zaPgrgwKdD0KsrM0ptUtpg==} + engines: {node: '>=6'} + + prompts@2.4.2: + resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==} + engines: {node: '>= 6'} + prop-types@15.8.1: resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==} property-information@7.1.0: resolution: {integrity: sha512-TwEZ+X+yCJmYfL7TPUOcvBZ4QfoT5YenQiJuX//0th53DE6w0xxLEtfK3iyryQFddXuvkIk51EEgrJQ0WJkOmQ==} + proto-list@1.2.4: + resolution: {integrity: sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==} + protobufjs@7.5.0: resolution: {integrity: sha512-Z2E/kOY1QjoMlCytmexzYfDm/w5fKAiRwpSzGtdnXW1zC88Z2yXazHHrOtwCzn+7wSxyE8PYM4rvVcMphF9sOA==} engines: {node: '>=12.0.0'} @@ -11813,6 +12235,10 @@ packages: psl@1.15.0: resolution: {integrity: sha512-JZd3gMVBAVQkSs6HdNZo9Sdo0LNcQeMNP3CozBJb3JYC/QUYZTnKxP+f8oWRX4rHP5EurWxqAHTSwUCjlNKa1w==} + publish-browser-extension@3.0.3: + resolution: {integrity: sha512-cBINZCkLo7YQaGoUvEHthZ0sDzgJQht28IS+SFMT2omSNhGsPiVNRkWir3qLiTrhGhW9Ci2KVHpA1QAMoBdL2g==} + hasBin: true + pump@3.0.3: resolution: {integrity: sha512-todwxLMY7/heScKmntwQG8CXVkWUOdYxIvY2s0VWAAMh/nd8SoYiRaKjlr7+iCs984f2P8zvrfWcDDYVb73NfA==} @@ -11861,6 +12287,9 @@ packages: quansync@0.2.10: resolution: {integrity: sha512-t41VRkMYbkHyCYmOvx/6URnN80H7k4X0lLdBMGsz+maAwrJQYB1djpV6vHrQIBE0WBSGqhtEHrK9U3DWWH8v7A==} + quansync@0.2.11: + resolution: {integrity: sha512-AifT7QEbW9Nri4tAwR5M/uzpBuqfZf+zwaEM/QkzEjj7NBuFD2rBuy0K3dE+8wltbezDV7JMA0WfnCPYRSYbXA==} + query-selector-shadow-dom@1.0.1: resolution: {integrity: sha512-lT5yCqEBgfoMYpf3F2xQRK7zEr1rhIIZuceDK6+xRkJQ4NMbHTwXqk4NkwDwQMNqXgG9r9fyHnzwNVs6zV5KRw==} @@ -11874,6 +12303,9 @@ packages: queue-microtask@1.2.3: resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} + quick-format-unescaped@4.0.4: + resolution: {integrity: sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg==} + quick-lru@5.1.1: resolution: {integrity: sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==} engines: {node: '>=10'} @@ -11916,6 +12348,9 @@ packages: peerDependencies: webpack: ^4.0.0 || ^5.0.0 + rc9@2.1.2: + resolution: {integrity: sha512-btXCnMmRIBINM2LDZoEmOogIZU7Qe7zn4BpomSKZ/ykbLObuBdvG+mFq11DL6fjH1DRwHhrlgtYWG96bJiC7Cg==} + rc@1.2.8: resolution: {integrity: sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==} hasBin: true @@ -12062,6 +12497,10 @@ packages: resolution: {integrity: sha512-9u/XQ1pvrQtYyMpZe7DXKv2p5CNvyVwzUB6uhLAnQwHMSgKMBR62lc7AHljaeteeHXn11XTAaLLUVZYVZyuRBQ==} engines: {node: '>= 20.19.0'} + real-require@0.2.0: + resolution: {integrity: sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg==} + engines: {node: '>= 12.13.0'} + rechoir@0.8.0: resolution: {integrity: sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ==} engines: {node: '>= 10.13.0'} @@ -12098,6 +12537,14 @@ packages: resolution: {integrity: sha512-BtizvGtFQKGPUcTy56o3nk1bGRp4SZOTYrDtGNlqCQufptV5IkkLN6Emw+yunAJjzf+C9FQFtvq7IoA3+oMYHQ==} engines: {node: '>=4'} + registry-auth-token@5.1.1: + resolution: {integrity: sha512-P7B4+jq8DeD2nMsAcdfaqHbssgHtZ7Z5+++a5ask90fvmJ8p5je4mOa+wzu+DB4vQ5tdJV/xywY+UnVFeQLV5Q==} + engines: {node: '>=14'} + + registry-url@6.0.1: + resolution: {integrity: sha512-+crtS5QjFRqFCoQmvGduwYWEBng99ZvmFvF+cUJkGYF1L1BfU8C6Zp9T7f5vPAwyLkUExpvK+ANVZmGU49qi4Q==} + engines: {node: '>=12'} + regjsgen@0.5.2: resolution: {integrity: sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A==} @@ -12352,6 +12799,10 @@ packages: safe-regex2@5.0.0: resolution: {integrity: sha512-YwJwe5a51WlK7KbOJREPdjNrpViQBI3p4T50lfwPuDhZnE3XGVTlGvi+aolc5+RvxDD6bnUmjVsU9n1eboLUYw==} + safe-stable-stringify@2.5.0: + resolution: {integrity: sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA==} + engines: {node: '>=10'} + safer-buffer@2.1.2: resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} @@ -12509,6 +12960,9 @@ packages: script-loader@0.7.2: resolution: {integrity: sha512-UMNLEvgOAQuzK8ji8qIscM3GIrRCWN6MmMXGD4SD5l6cSycgGsCo0tX5xRnfQcoghqct0tjHjcykgI1PyBE2aA==} + scule@1.3.0: + resolution: {integrity: sha512-6FtHJEvt+pVMIB9IBY+IcCJ6Z5f1iQnytgyfKMhDKgmzYG+TeH/wx1y3l27rshSbLiSanrR9ffZDrEsmjlQF2g==} + secure-compare@3.0.1: resolution: {integrity: sha512-AckIIV90rPDcBcglUwXPF3kg0P0qmPsPXAj6BBEENQE1p5yA1xfmDJzfi1Tappj37Pv2mVbKpL3Z1T+Nn7k1Qw==} @@ -12596,6 +13050,10 @@ packages: resolution: {integrity: sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==} engines: {node: '>= 0.4'} + set-value@4.1.0: + resolution: {integrity: sha512-zTEg4HL0RwVrqcWs3ztF+x1vkxfm0lP+MQQFPiMJTKVceBwEV0A569Ou8l9IYQG8jOZdMVI1hGsc0tmeD2o/Lw==} + engines: {node: '>=11.0'} + setimmediate@1.0.5: resolution: {integrity: sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==} @@ -12624,6 +13082,9 @@ packages: resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} engines: {node: '>=8'} + shell-quote@1.7.3: + resolution: {integrity: sha512-Vpfqwm4EnqGdlsBFNmHhxhElJYrdfcxPThu+ryKS5J8L/fhAwLazFZtq+S+TWZ9ANj2piSQLGj6NQg+lKPmxrw==} + shell-quote@1.8.3: resolution: {integrity: sha512-ObmnIF4hXNg1BqhnHmgbDETF8dLPCggZWBjkQfhZpbszZnYur5DUljTcCHii5LC3J5E0yeO/1LIMyH+UvHQgyw==} engines: {node: '>= 0.4'} @@ -12632,6 +13093,9 @@ packages: resolution: {integrity: sha512-Jex+xw5Mg2qMZL3qnzXIfaxEtBaC4n7xifqaqtrZDdlheR70OGkydrPJWT0V1cA1k3nanC86x9FwAmQl6w3Klw==} engines: {node: '>=18'} + shellwords@0.1.1: + resolution: {integrity: sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww==} + shimmer@1.2.1: resolution: {integrity: sha512-sQTKC1Re/rM6XyFM6fIAGHRPVGvyXfgzIDvzoq608vM+jeyVD0Tu1E6Np0Kc2zAIFWIj963V2800iF/9LPieQw==} @@ -12706,6 +13170,9 @@ packages: resolution: {integrity: sha512-2wcC/oGxHis/BoHkkPwldgiPSYcpZK3JU28WoMVv55yHJgcZ8rlXvuG9iZggz+sU1d4bRgIGASwyWqjxu3FM0g==} engines: {node: '>=18'} + sisteransi@1.0.5: + resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} + slash@3.0.0: resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} engines: {node: '>=8'} @@ -12778,6 +13245,9 @@ packages: resolution: {integrity: sha512-HLpt+uLy/pxB+bum/9DzAgiKS8CX1EvbWxI4zlmgGCExImLdiad2iCwXT5Z4c9c3Eq8rP2318mPW2c+QbtjK8A==} engines: {node: '>= 10.0.0', npm: '>= 3.0.0'} + sonic-boom@4.2.0: + resolution: {integrity: sha512-INb7TM37/mAcsGmc9hyyI6+QR3rR1zVRu36B0NeGXKnOOLiZOfER5SA+N7X7k3yUYRzLWafduTDvJAfDswwEww==} + sort-keys-length@1.0.1: resolution: {integrity: sha512-GRbEOUqCxemTAk/b32F2xa8wDTs+Z1QHOkbhJDQTvv/6G3ZkbJ+frYWsTcc7cBB3Fu4wy4XlLCuNtJuMn7Gsvw==} engines: {node: '>=0.10.0'} @@ -12814,6 +13284,9 @@ packages: spacetrim@0.11.59: resolution: {integrity: sha512-lLYsktklSRKprreOm7NXReW8YiX2VBjbgmXYEziOoGf/qsJqAEACaDvoTtUOycwjpaSh+bT8eu0KrJn7UNxiCg==} + spawn-sync@1.0.15: + resolution: {integrity: sha512-9DWBgrgYZzNghseho0JOuh+5fg9u6QWhAWa51QC7+U5rCheZ/j1DrEZnyE0RBBRqZ9uEXGPgSSM0nky6burpVw==} + spdx-correct@3.2.0: resolution: {integrity: sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==} @@ -12845,6 +13318,9 @@ packages: resolution: {integrity: sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==} engines: {node: '>= 10.x'} + split@1.0.1: + resolution: {integrity: sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==} + sprintf-js@1.0.3: resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} @@ -12902,6 +13378,10 @@ packages: std-env@3.10.0: resolution: {integrity: sha512-5GS12FdOZNliM5mAOxFRg7Ir0pWz8MdpYm6AY6VPkGpbA7ZzmbzNcBJQ0GPvvyWgcY7QAhCgf9Uy89I03faLkg==} + stdin-discarder@0.2.2: + resolution: {integrity: sha512-UhDfHmA92YAlNnCfhmq0VeNL5bDbiZGg7sZ2IvPsXubGkiNa9EC+tUTsjBRsYUAz87btI6/1wf4XoVvQ3uRnmQ==} + engines: {node: '>=18'} + stickyfill@1.1.1: resolution: {integrity: sha512-GCp7vHAfpao+Qh/3Flh9DXEJ/qSi0KJwJw6zYlZOtRYXWUIpMM6mC2rIep/dK8RQqwW0KxGJIllmjPIBOGN8AA==} @@ -13016,6 +13496,13 @@ packages: resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} engines: {node: '>=8'} + strip-json-comments@5.0.2: + resolution: {integrity: sha512-4X2FR3UwhNUE9G49aIsJW5hRRR3GXGTBTZRMfv568O60ojM8HcWjV/VxAxCDW3SUND33O6ZY66ZuRcdkj73q2g==} + engines: {node: '>=14.16'} + + strip-literal@3.1.0: + resolution: {integrity: sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg==} + strip-outer@1.0.1: resolution: {integrity: sha512-k55yxKHwaXnpYGsOzg4Vl8+tDrWylxDEpknGjhTiZB8dFRU5rTo9CAzeycivxV3s+zlTKwrs6WxMxR95n26kwg==} engines: {node: '>=0.10.0'} @@ -13037,6 +13524,12 @@ packages: resolution: {integrity: sha512-fZtbhtvI9I48xDSywd/somNqgUHl2L2cstmXCCif0itOf96jeW18MBSyrLuNicYQVkvpOxkZtkzujiTJ9LW5Jw==} engines: {node: '>=10'} + stubborn-fs@2.0.0: + resolution: {integrity: sha512-Y0AvSwDw8y+nlSNFXMm2g6L51rBGdAQT20J3YSOqxC53Lo3bjWRtr2BKcfYoAf352WYpsZSTURrA0tqhfgudPA==} + + stubborn-utils@1.0.2: + resolution: {integrity: sha512-zOh9jPYI+xrNOyisSelgym4tolKTJCQd5GBhK0+0xJvcYDcwlOoxF/rnFKQ2KRZknXSG9jWAp66fwP6AxN9STg==} + style-loader@2.0.0: resolution: {integrity: sha512-Z0gYUJmzZ6ZdRUqpg1r8GsaFKypE+3xAzuFeMuoHgjc9KZv3wMyCRjQIWEbhoFSq7+7yoHXySDJyyWQaPajeiQ==} engines: {node: '>= 10.13.0'} @@ -13289,9 +13782,15 @@ packages: peerDependencies: tslib: ^2 + thread-stream@3.1.0: + resolution: {integrity: sha512-OqyPZ9u96VohAyMfJykzmivOrY2wfMSf3C5TtFJVgN+Hm6aj+voFhlK+kZEIv2FBh1X6Xp3DlnCOfEQ3B2J86A==} + through2@4.0.2: resolution: {integrity: sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==} + through@2.3.8: + resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} + thunky@1.1.0: resolution: {integrity: sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==} @@ -13504,6 +14003,10 @@ packages: resolution: {integrity: sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==} engines: {node: '>=10'} + type-fest@3.13.1: + resolution: {integrity: sha512-tLq3bSNx+xSpwvAJnzrK0Ep5CLNWjvFTOp71URMaAEWBfRb9nnJiBoUe0tF8bI4ZFO3omgBR6NvnbzVUT3Ly4g==} + engines: {node: '>=14.16'} + type-fest@4.26.0: resolution: {integrity: sha512-OduNjVJsFbifKb57UqZ2EMP1i4u64Xwow3NYXUtBbD4vIwJdQd4+xl8YDou1dlm4DVrtwT/7Ky8z8WyCULVfxw==} engines: {node: '>=16'} @@ -13600,6 +14103,9 @@ packages: engines: {node: '>=0.8.0'} hasBin: true + uhyphen@0.2.0: + resolution: {integrity: sha512-qz3o9CHXmJJPGBdqzab7qAYuW8kQGKNEuoHFYrBwV6hWIMcpAmxDLXojcHfFr9US1Pe6zUswEIJIbLI610fuqA==} + uid-safe@2.1.5: resolution: {integrity: sha512-KPHm4VL5dDXKz01UuEd88Df+KzynaohSL9fBh096KWAxSKZQDI2uBrVqtvRM4rwrIrRRKsdLNML/lnaaVSRioA==} engines: {node: '>= 0.8'} @@ -13660,6 +14166,10 @@ packages: unified@11.0.5: resolution: {integrity: sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==} + unimport@5.6.0: + resolution: {integrity: sha512-8rqAmtJV8o60x46kBAJKtHpJDJWkA2xcBqWKPI14MgUb05o1pnpnCnXSxedUXyeq7p8fR5g3pTo2BaswZ9lD9A==} + engines: {node: '>=18.12.0'} + union@0.5.0: resolution: {integrity: sha512-N6uOhuW6zO95P3Mel2I2zMsbsanvvtgn6jVqJv4vbVcz/JN0OkL9suomjQGmWtxJQXOCqUJvquc1sMeNz/IwlA==} engines: {node: '>= 0.8.0'} @@ -13724,6 +14234,14 @@ packages: resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==} engines: {node: '>= 0.8'} + unplugin-utils@0.3.1: + resolution: {integrity: sha512-5lWVjgi6vuHhJ526bI4nlCOmkCIF3nnfXkCMDeMJrtdvxTs6ZFCM8oNufGTsDbKv/tJ/xj8RpvXjRuPBZJuJog==} + engines: {node: '>=20.19.0'} + + unplugin@2.3.11: + resolution: {integrity: sha512-5uKD0nqiYVzlmCRs01Fhs2BdkEgBS3SAVP6ndrBsuK42iC2+JHyxM05Rm9G8+5mkmRtzMZGY8Ct5+mliZxU/Ww==} + engines: {node: '>=18.12.0'} + unused-filename@4.0.1: resolution: {integrity: sha512-ZX6U1J04K1FoSUeoX1OicAhw4d0aro2qo+L8RhJkiGTNtBNkd/Fi1Wxoc9HzcVu6HfOzm0si/N15JjxFmD1z6A==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} @@ -13738,6 +14256,10 @@ packages: peerDependencies: browserslist: '>= 4.21.0' + update-notifier@7.3.1: + resolution: {integrity: sha512-+dwUY4L35XFYEzE+OAL3sarJdUioVovq+8f7lcIJ7wnmnYQV5UD1Y/lcwaMSyaQ6Bj3JMj1XSTjZbNLHn/19yA==} + engines: {node: '>=18'} + uri-js@4.4.1: resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} @@ -13857,6 +14379,11 @@ packages: vfile@6.0.3: resolution: {integrity: sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==} + vite-node@5.3.0: + resolution: {integrity: sha512-8f20COPYJujc3OKPX6OuyBy3ZIv2det4eRRU4GY1y2MjbeGSUmPjedxg1b72KnTagCofwvZ65ThzjxDW2AtQFQ==} + engines: {node: ^20.19.0 || >=22.12.0} + hasBin: true + vite-plugin-dts@4.5.4: resolution: {integrity: sha512-d4sOM8M/8z7vRXHHq/ebbblfaxENjogAAekcfcDCCwAyvGqnPrc7f4NZbvItS+g4WTgerW0xDwSz5qz11JT3vg==} peerDependencies: @@ -14024,6 +14551,10 @@ packages: wcwidth@1.0.1: resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} + web-ext-run@0.2.4: + resolution: {integrity: sha512-rQicL7OwuqWdQWI33JkSXKcp7cuv1mJG8u3jRQwx/8aDsmhbTHs9ZRmNYOL+LX0wX8edIEQX8jj4bB60GoXtKA==} + engines: {node: '>=18.0.0', npm: '>=8.0.0'} + web-namespaces@2.0.1: resolution: {integrity: sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ==} @@ -14088,6 +14619,9 @@ packages: resolution: {integrity: sha512-yd1RBzSGanHkitROoPFd6qsrxt+oFhg/129YzheDGqeustzX0vTZJZsSsQjVQC4yzBQ56K55XU8gaNCtIzOnTg==} engines: {node: '>=10.13.0'} + webpack-virtual-modules@0.6.2: + resolution: {integrity: sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ==} + webpack@5.101.3: resolution: {integrity: sha512-7b0dTKR3Ed//AD/6kkx/o7duS8H3f1a4w3BYpIriX4BzIhjkn4teo05cptsxvLesHFKK5KObnadmCHBwGc+51A==} engines: {node: '>=10.13.0'} @@ -14151,6 +14685,12 @@ packages: wheel@1.0.0: resolution: {integrity: sha512-XiCMHibOiqalCQ+BaNSwRoZ9FDTAvOsXxGHXChBugewDj7HC8VBIER71dEOiRH1fSdLbRCQzngKTSiZ06ZQzeA==} + when-exit@2.1.5: + resolution: {integrity: sha512-VGkKJ564kzt6Ms1dbgPP/yuIoQCrsFAnRbptpC5wOEsDaNsbCB2bnfnaA8i/vRs5tjUSEOtIuvl9/MyVsvQZCg==} + + when@3.7.7: + resolution: {integrity: sha512-9lFZp/KHoqH6bPKjbWqa+3Dg/K/r2v0X/3/G2x4DBGchVS2QX2VXL3cZV994WQVnTM1/PD71Az25nAzryEUugw==} + which-boxed-primitive@1.1.1: resolution: {integrity: sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==} engines: {node: '>= 0.4'} @@ -14167,6 +14707,10 @@ packages: resolution: {integrity: sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw==} engines: {node: '>= 0.4'} + which@1.2.4: + resolution: {integrity: sha512-zDRAqDSBudazdfM9zpiI30Fu9ve47htYXcGi3ln0wfKu2a7SmrT6F3VDoYONu//48V8Vz4TdCRNPjtvyRO3yBA==} + hasBin: true + which@1.3.1: resolution: {integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==} hasBin: true @@ -14199,6 +14743,13 @@ packages: wide-align@1.1.5: resolution: {integrity: sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==} + widest-line@5.0.0: + resolution: {integrity: sha512-c9bZp7b5YtRj2wOe6dlj32MK+Bx/M/d+9VB2SHM1OtsUHR0aV0tdP6DWh/iMt0kWi1t5g1Iudu6hQRNd1A4PVA==} + engines: {node: '>=18'} + + winreg@0.0.12: + resolution: {integrity: sha512-typ/+JRmi7RqP1NanzFULK36vczznSNN8kWVA9vIqXyv8GhghUlwhGp1Xj3Nms1FsPcNnsQrJOR10N58/nQ9hQ==} + word-wrap@1.2.5: resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} engines: {node: '>=0.10.0'} @@ -14276,6 +14827,14 @@ packages: resolution: {integrity: sha512-h3Fbisa2nKGPxCpm89Hk33lBLsnaGBvctQopaBSOW/uIs6FTe1ATyAnKFJrzVs9vpGdsTe73WF3V4lIsk4Gacw==} engines: {node: '>=18'} + wxt@0.20.13: + resolution: {integrity: sha512-FwQEk+0a4/pYha6rTKGl5iicU6kRYDBDiElJf55CFEfoJKqvGzBTZpphafurQfqU1X0hvAm9w5GEWC0thXI6wQ==} + hasBin: true + + xdg-basedir@5.1.0: + resolution: {integrity: sha512-GCPAHLvrIH13+c0SuacwvRYj2SxJXQ4kaVTT5xgL3kPrz56XxkF21IGhjSE1+W0aw7gpBWRGXLCPnPby6lSpmQ==} + engines: {node: '>=12'} + xml-name-validator@3.0.0: resolution: {integrity: sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==} @@ -14399,6 +14958,9 @@ packages: engines: {node: '>=8.0.0'} hasBin: true + zip-dir@2.0.0: + resolution: {integrity: sha512-uhlsJZWz26FLYXOD6WVuq+fIcZ3aBPGo/cFdiLlv3KNwpa52IF3ISV8fLhQLiqVu5No3VhlqlgthN6gehil1Dg==} + zip-stream@6.0.1: resolution: {integrity: sha512-zK7YHHz4ZXpW89AHXUPbQVGKI7uvkd3hzusTdotCg1UxyaVtg0zFJSTfW/Dq5f7OBBVnq6cZIaC8Ti4hb6dtCA==} engines: {node: '>= 14'} @@ -14429,8 +14991,22 @@ packages: snapshots: + '@1natsu/wait-element@4.1.2': + dependencies: + defu: 6.1.4 + many-keys-map: 2.0.1 + '@adobe/css-tools@4.4.4': {} + '@aklinker1/rollup-plugin-visualizer@5.12.0(rollup@4.52.0)': + dependencies: + open: 8.4.2 + picomatch: 2.3.1 + source-map: 0.7.6 + yargs: 17.7.2 + optionalDependencies: + rollup: 4.52.0 + '@ampproject/remapping@2.3.0': dependencies: '@jridgewell/gen-mapping': 0.3.13 @@ -14982,6 +15558,8 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/runtime@7.28.2': {} + '@babel/runtime@7.28.4': {} '@babel/template@7.27.2': @@ -15102,6 +15680,8 @@ snapshots: '@ckeditor/ckeditor5-core': 47.4.0 '@ckeditor/ckeditor5-upload': 47.4.0 ckeditor5: 47.4.0 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-ai@47.4.0(bufferutil@4.0.9)(utf-8-validate@6.0.5)': dependencies: @@ -15242,12 +15822,16 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.4.0 '@ckeditor/ckeditor5-widget': 47.4.0 es-toolkit: 1.39.5 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-cloud-services@47.4.0': dependencies: '@ckeditor/ckeditor5-core': 47.4.0 '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-code-block@47.4.0(patch_hash=2361d8caad7d6b5bddacc3a3b4aa37dbfba260b1c1b22a450413a79c1bb1ce95)': dependencies: @@ -15313,6 +15897,8 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.4.0 '@ckeditor/ckeditor5-watchdog': 47.4.0 es-toolkit: 1.39.5 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-dev-build-tools@54.3.2(@swc/helpers@0.5.17)(tslib@2.8.1)(typescript@5.9.3)': dependencies: @@ -15438,6 +16024,8 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 es-toolkit: 1.39.5 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-editor-classic@47.4.0': dependencies: @@ -15447,6 +16035,8 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 es-toolkit: 1.39.5 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-editor-decoupled@47.4.0': dependencies: @@ -15456,6 +16046,8 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 es-toolkit: 1.39.5 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-editor-inline@47.4.0': dependencies: @@ -15489,8 +16081,6 @@ snapshots: '@ckeditor/ckeditor5-table': 47.4.0 '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-emoji@47.4.0': dependencies: @@ -15503,8 +16093,6 @@ snapshots: ckeditor5: 47.4.0 es-toolkit: 1.39.5 fuzzysort: 3.1.0 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-engine@47.4.0': dependencies: @@ -15547,8 +16135,6 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.4.0 '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-export-word@47.4.0': dependencies: @@ -15582,8 +16168,6 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.4.0 '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-footnotes@47.4.0': dependencies: @@ -15614,8 +16198,6 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.4.0 '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-heading@47.4.0': dependencies: @@ -15626,8 +16208,6 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.4.0 '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-highlight@47.4.0': dependencies: @@ -15636,8 +16216,6 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.4.0 '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-horizontal-line@47.4.0': dependencies: @@ -15647,6 +16225,8 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.4.0 '@ckeditor/ckeditor5-widget': 47.4.0 ckeditor5: 47.4.0 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-html-embed@47.4.0': dependencies: @@ -15656,8 +16236,6 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.4.0 '@ckeditor/ckeditor5-widget': 47.4.0 ckeditor5: 47.4.0 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-html-support@47.4.0': dependencies: @@ -15673,8 +16251,6 @@ snapshots: '@ckeditor/ckeditor5-widget': 47.4.0 ckeditor5: 47.4.0 es-toolkit: 1.39.5 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-icons@47.4.0': {} @@ -15692,8 +16268,6 @@ snapshots: '@ckeditor/ckeditor5-widget': 47.4.0 ckeditor5: 47.4.0 es-toolkit: 1.39.5 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-import-word@47.4.0': dependencies: @@ -15706,8 +16280,6 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.4.0 '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-indent@47.4.0': dependencies: @@ -15719,8 +16291,6 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.4.0 '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-inspector@5.0.0': {} @@ -15730,8 +16300,6 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.4.0 '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-line-height@47.4.0': dependencies: @@ -15756,8 +16324,6 @@ snapshots: '@ckeditor/ckeditor5-widget': 47.4.0 ckeditor5: 47.4.0 es-toolkit: 1.39.5 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-list-multi-level@47.4.0': dependencies: @@ -15781,8 +16347,6 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.4.0 '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-markdown-gfm@47.4.0': dependencies: @@ -15820,8 +16384,6 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.4.0 '@ckeditor/ckeditor5-widget': 47.4.0 ckeditor5: 47.4.0 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-mention@47.4.0(patch_hash=5981fb59ba35829e4dff1d39cf771000f8a8fdfa7a34b51d8af9549541f2d62d)': dependencies: @@ -15831,8 +16393,6 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 es-toolkit: 1.39.5 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-merge-fields@47.4.0': dependencies: @@ -15845,8 +16405,6 @@ snapshots: '@ckeditor/ckeditor5-widget': 47.4.0 ckeditor5: 47.4.0 es-toolkit: 1.39.5 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-minimap@47.4.0': dependencies: @@ -15855,8 +16413,6 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.4.0 '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-operations-compressor@47.4.0': dependencies: @@ -15911,8 +16467,6 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.4.0 '@ckeditor/ckeditor5-widget': 47.4.0 ckeditor5: 47.4.0 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-pagination@47.4.0': dependencies: @@ -16020,8 +16574,6 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.4.0 '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-slash-command@47.4.0': dependencies: @@ -16034,8 +16586,6 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.4.0 '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-source-editing-enhanced@47.4.0': dependencies: @@ -16083,8 +16633,6 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 es-toolkit: 1.39.5 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-table@47.4.0': dependencies: @@ -16097,8 +16645,6 @@ snapshots: '@ckeditor/ckeditor5-widget': 47.4.0 ckeditor5: 47.4.0 es-toolkit: 1.39.5 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-template@47.4.0': dependencies: @@ -16209,8 +16755,6 @@ snapshots: '@ckeditor/ckeditor5-engine': 47.4.0 '@ckeditor/ckeditor5-utils': 47.4.0 es-toolkit: 1.39.5 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-widget@47.4.0': dependencies: @@ -16230,8 +16774,6 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 es-toolkit: 1.39.5 - transitivePeerDependencies: - - supports-color '@codemirror/autocomplete@6.18.6': dependencies: @@ -16457,6 +16999,22 @@ snapshots: dependencies: postcss-selector-parser: 7.1.1 + '@devicefarmer/adbkit-logcat@2.1.3': {} + + '@devicefarmer/adbkit-monkey@1.2.1': {} + + '@devicefarmer/adbkit@3.3.8': + dependencies: + '@devicefarmer/adbkit-logcat': 2.1.3 + '@devicefarmer/adbkit-monkey': 1.2.1 + bluebird: 3.7.2 + commander: 9.5.0 + debug: 4.3.7 + node-forge: 1.3.1 + split: 1.0.1 + transitivePeerDependencies: + - supports-color + '@digitak/esrun@3.2.26': dependencies: '@digitak/grubber': 3.1.4 @@ -17895,6 +18453,11 @@ snapshots: '@jridgewell/sourcemap-codec': 1.5.5 '@jridgewell/trace-mapping': 0.3.31 + '@jridgewell/remapping@2.3.5': + dependencies: + '@jridgewell/gen-mapping': 0.3.13 + '@jridgewell/trace-mapping': 0.3.31 + '@jridgewell/resolve-uri@3.1.2': {} '@jridgewell/source-map@0.3.11': @@ -18500,6 +19063,18 @@ snapshots: dependencies: playwright: 1.57.0 + '@pnpm/config.env-replace@1.1.0': {} + + '@pnpm/network.ca-file@1.0.2': + dependencies: + graceful-fs: 4.2.10 + + '@pnpm/npm-conf@3.0.2': + dependencies: + '@pnpm/config.env-replace': 1.1.0 + '@pnpm/network.ca-file': 1.0.2 + config-chain: 1.1.13 + '@polka/url@1.0.0-next.29': {} '@popperjs/core@2.11.8': {} @@ -20034,6 +20609,12 @@ snapshots: '@types/express-serve-static-core': 5.1.0 '@types/serve-static': 2.2.0 + '@types/filesystem@0.0.36': + dependencies: + '@types/filewriter': 0.0.33 + + '@types/filewriter@0.0.33': {} + '@types/fs-extra@11.0.4': dependencies: '@types/jsonfile': 6.1.4 @@ -20050,6 +20631,8 @@ snapshots: '@types/geojson@7946.0.16': {} + '@types/har-format@1.2.16': {} + '@types/hast@3.0.4': dependencies: '@types/unist': 3.0.3 @@ -20120,6 +20703,8 @@ snapshots: '@types/mime@1.3.5': {} + '@types/minimatch@3.0.5': {} + '@types/ms@2.1.0': {} '@types/multer@2.0.0': @@ -20869,6 +21454,27 @@ snapshots: '@webcomponents/webcomponentsjs@2.8.0': {} + '@webext-core/fake-browser@1.3.4': + dependencies: + lodash.merge: 4.6.2 + + '@webext-core/isolated-element@1.1.3': + dependencies: + is-potential-custom-element-name: 1.0.1 + + '@webext-core/match-patterns@1.0.3': {} + + '@wxt-dev/browser@0.1.32': + dependencies: + '@types/filesystem': 0.0.36 + '@types/har-format': 1.2.16 + + '@wxt-dev/storage@1.2.6': + dependencies: + '@wxt-dev/browser': 0.1.32 + async-mutex: 0.5.0 + dequal: 2.0.3 + '@xmldom/xmldom@0.8.10': {} '@xtuc/ieee754@1.2.0': {} @@ -20934,6 +21540,8 @@ snapshots: acorn@8.15.0: {} + adm-zip@0.5.16: {} + agent-base@6.0.2: dependencies: debug: 4.4.3(supports-color@8.1.1) @@ -21016,6 +21624,10 @@ snapshots: dependencies: bezier-easing: 2.1.0 + ansi-align@3.0.1: + dependencies: + string-width: 4.2.3 + ansi-escapes@4.3.2: dependencies: type-fest: 0.21.3 @@ -21121,6 +21733,8 @@ snapshots: call-bound: 1.0.4 is-array-buffer: 3.0.5 + array-differ@4.0.0: {} + array-flatten@1.1.1: {} array-includes@3.1.9: @@ -21136,6 +21750,8 @@ snapshots: array-union@2.1.0: {} + array-union@3.0.1: {} + array.prototype.findlast@1.2.5: dependencies: call-bind: 1.0.8 @@ -21225,6 +21841,13 @@ snapshots: at-least-node@1.0.0: {} + atomic-sleep@1.0.0: {} + + atomically@2.1.0: + dependencies: + stubborn-fs: 2.0.0 + when-exit: 2.1.5 + author-regex@1.0.0: {} autocomplete.js@0.38.1: @@ -21404,6 +22027,17 @@ snapshots: bowser@2.11.0: {} + boxen@8.0.1: + dependencies: + ansi-align: 3.0.1 + camelcase: 8.0.0 + chalk: 5.6.2 + cli-boxes: 3.0.0 + string-width: 7.2.0 + type-fest: 4.41.0 + widest-line: 5.0.0 + wrap-ansi: 9.0.2 + boxicons@2.1.4: dependencies: '@webcomponents/webcomponentsjs': 2.8.0 @@ -21498,6 +22132,25 @@ snapshots: bytes@3.1.2: {} + c12@3.3.3(magicast@0.3.5): + dependencies: + chokidar: 5.0.0 + confbox: 0.2.2 + defu: 6.1.4 + dotenv: 17.2.3 + exsolve: 1.0.8 + giget: 2.0.0 + jiti: 2.6.1 + ohash: 2.0.11 + pathe: 2.0.3 + perfect-debounce: 2.1.0 + pkg-types: 2.3.0 + rc9: 2.1.2 + optionalDependencies: + magicast: 0.3.5 + + cac@6.7.14: {} + cacache@15.3.0: dependencies: '@npmcli/fs': 1.1.1 @@ -21619,6 +22272,8 @@ snapshots: camelcase@6.3.0: {} + camelcase@8.0.0: {} + camelize@1.0.1: {} caniuse-api@3.0.0: @@ -21742,13 +22397,28 @@ snapshots: chownr@3.0.0: {} + chrome-launcher@1.2.0: + dependencies: + '@types/node': 24.10.9 + escape-string-regexp: 4.0.0 + is-wsl: 2.2.0 + lighthouse-logger: 2.0.2 + transitivePeerDependencies: + - supports-color + chrome-trace-event@1.0.4: {} + ci-info@4.3.1: {} + + citty@0.1.6: + dependencies: + consola: 3.4.2 + + citty@0.2.0: {} + ckeditor5-collaboration@47.4.0: dependencies: '@ckeditor/ckeditor5-collaboration-core': 47.4.0 - transitivePeerDependencies: - - supports-color ckeditor5-premium-features@47.4.0(bufferutil@4.0.9)(ckeditor5@47.4.0)(utf-8-validate@6.0.5): dependencies: @@ -21854,6 +22524,8 @@ snapshots: clean-stack@2.2.0: {} + cli-boxes@3.0.0: {} + cli-cursor@3.1.0: dependencies: restore-cursor: 3.1.0 @@ -21875,6 +22547,11 @@ snapshots: slice-ansi: 5.0.0 string-width: 5.1.2 + cli-truncate@4.0.0: + dependencies: + slice-ansi: 5.0.0 + string-width: 7.2.0 + cli-truncate@5.1.0: dependencies: slice-ansi: 7.1.2 @@ -22001,6 +22678,10 @@ snapshots: commander@2.20.3: {} + commander@2.9.0: + dependencies: + graceful-readlink: 1.0.1 + commander@4.1.1: {} commander@5.1.0: {} @@ -22069,6 +22750,18 @@ snapshots: confbox@0.2.2: {} + config-chain@1.1.13: + dependencies: + ini: 1.3.8 + proto-list: 1.2.4 + + configstore@7.1.0: + dependencies: + atomically: 2.1.0 + dot-prop: 9.0.0 + graceful-fs: 4.2.11 + xdg-basedir: 5.1.0 + connect-history-api-fallback@2.0.0: {} connect@3.7.0: @@ -22080,6 +22773,8 @@ snapshots: transitivePeerDependencies: - supports-color + consola@3.4.2: {} + console-control-strings@1.1.0: optional: true @@ -22418,6 +23113,8 @@ snapshots: cssom@0.4.4: {} + cssom@0.5.0: {} + cssstyle@2.3.0: dependencies: cssom: 0.3.8 @@ -22673,6 +23370,8 @@ snapshots: de-indent@1.0.2: {} + debounce@1.2.1: {} + debounce@3.0.0: {} debug@2.6.9: @@ -22749,6 +23448,8 @@ snapshots: es-errors: 1.3.0 gopd: 1.2.0 + define-lazy-prop@2.0.0: {} + define-lazy-prop@3.0.0: {} define-properties@1.2.1: @@ -22759,6 +23460,8 @@ snapshots: defined@1.0.1: {} + defu@6.1.4: {} + degenerator@5.0.1: dependencies: ast-types: 0.13.4 @@ -22780,6 +23483,8 @@ snapshots: dequal@2.0.3: {} + destr@2.0.5: {} + destroy@1.2.0: {} detect-hover@1.0.3: {} @@ -22894,6 +23599,14 @@ snapshots: domelementtype: 2.3.0 domhandler: 5.0.3 + dot-prop@9.0.0: + dependencies: + type-fest: 4.41.0 + + dotenv-expand@12.0.3: + dependencies: + dotenv: 16.4.7 + dotenv@16.4.7: {} dotenv@17.2.3: {} @@ -23312,6 +24025,8 @@ snapshots: es-module-lexer@1.7.0: {} + es-module-lexer@2.0.0: {} + es-object-atoms@1.1.1: dependencies: es-errors: 1.3.0 @@ -23335,8 +24050,7 @@ snapshots: es-toolkit@1.39.5: {} - es6-error@4.1.1: - optional: true + es6-error@4.1.1: {} es6-promise-pool@2.5.0: {} @@ -23810,6 +24524,8 @@ snapshots: exsolve@1.0.5: {} + exsolve@1.0.8: {} + ext-list@2.2.2: dependencies: mime-db: 1.54.0 @@ -23859,6 +24575,8 @@ snapshots: fast-levenshtein@2.0.6: {} + fast-redact@3.5.0: {} + fast-safe-stringify@2.1.1: {} fast-uri@3.1.0: {} @@ -23943,6 +24661,8 @@ snapshots: strip-outer: 1.0.1 trim-repeated: 1.0.0 + filesize@11.0.13: {} + fill-range@7.1.1: dependencies: to-regex-range: 5.0.1 @@ -23993,6 +24713,14 @@ snapshots: locate-path: 6.0.0 path-exists: 4.0.0 + firefox-profile@4.7.0: + dependencies: + adm-zip: 0.5.16 + fs-extra: 11.3.3 + ini: 4.1.3 + minimist: 1.2.8 + xml2js: 0.6.2 + flat-cache@4.0.1: dependencies: flatted: 3.3.3 @@ -24059,6 +24787,8 @@ snapshots: cross-spawn: 7.0.6 signal-exit: 4.1.0 + form-data-encoder@4.1.0: {} + form-data@4.0.4: dependencies: asynckit: 0.4.0 @@ -24077,6 +24807,8 @@ snapshots: format@0.2.2: {} + formdata-node@6.0.3: {} + formdata-polyfill@4.0.10: dependencies: fetch-blob: 3.2.0 @@ -24172,6 +24904,15 @@ snapshots: fuzzysort@3.1.0: {} + fx-runner@1.4.0: + dependencies: + commander: 2.9.0 + shell-quote: 1.7.3 + spawn-sync: 1.0.15 + when: 3.7.7 + which: 1.2.4 + winreg: 0.0.12 + galactus@1.0.0: dependencies: debug: 4.4.3(supports-color@8.1.1) @@ -24254,6 +24995,8 @@ snapshots: transitivePeerDependencies: - supports-color + get-port-please@3.2.0: {} + get-port@7.1.0: {} get-proto@1.0.1: @@ -24296,6 +25039,15 @@ snapshots: image-q: 4.0.0 omggif: 1.0.10 + giget@2.0.0: + dependencies: + citty: 0.1.6 + consola: 3.4.2 + defu: 6.1.4 + node-fetch-native: 1.6.7 + nypm: 0.6.4 + pathe: 2.0.3 + github-from-package@0.0.0: {} github-slugger@2.0.0: {} @@ -24385,6 +25137,10 @@ snapshots: serialize-error: 7.0.1 optional: true + global-directory@4.0.1: + dependencies: + ini: 4.1.1 + global-dirs@3.0.1: dependencies: ini: 2.0.0 @@ -24456,8 +25212,12 @@ snapshots: p-cancelable: 2.1.1 responselike: 2.0.1 + graceful-fs@4.2.10: {} + graceful-fs@4.2.11: {} + graceful-readlink@1.0.1: {} + grapheme-splitter@1.0.4: {} graphemer@1.4.0: {} @@ -24465,6 +25225,8 @@ snapshots: graphql@16.12.0: optional: true + growly@1.3.0: {} + hachure-fill@0.5.2: {} handle-thing@2.0.1: {} @@ -24654,6 +25416,8 @@ snapshots: hoist-non-react-statics@2.5.5: {} + hookable@5.5.3: {} + hookified@1.13.0: {} hosted-git-info@2.8.9: {} @@ -24688,6 +25452,8 @@ snapshots: html-escaper@2.0.2: {} + html-escaper@3.0.3: {} + html-parse-stringify@3.0.1: dependencies: void-elements: 3.1.0 @@ -24979,6 +25745,8 @@ snapshots: ini@2.0.0: {} + ini@4.1.1: {} + ini@4.1.3: {} ini@5.0.0: {} @@ -25015,6 +25783,10 @@ snapshots: ipaddr.js@2.2.0: {} + is-absolute@0.1.7: + dependencies: + is-relative: 0.1.3 + is-animated@2.0.2: {} is-arguments@1.2.0: @@ -25099,10 +25871,17 @@ snapshots: dependencies: is-extglob: 2.1.1 + is-in-ci@1.0.0: {} + is-inside-container@1.0.0: dependencies: is-docker: 3.0.0 + is-installed-globally@1.0.0: + dependencies: + global-directory: 4.0.1 + is-path-inside: 4.0.0 + is-interactive@1.0.0: {} is-interactive@2.0.0: {} @@ -25132,6 +25911,8 @@ snapshots: is-node-process@1.2.0: optional: true + is-npm@6.1.0: {} + is-number-object@1.1.1: dependencies: call-bound: 1.0.4 @@ -25149,10 +25930,16 @@ snapshots: is-plain-obj@4.1.0: {} + is-plain-object@2.0.4: + dependencies: + isobject: 3.0.1 + is-plain-object@5.0.0: {} is-potential-custom-element-name@1.0.1: {} + is-primitive@3.0.1: {} + is-promise@4.0.0: {} is-property@1.0.2: @@ -25174,6 +25961,8 @@ snapshots: has-tostringtag: 1.0.2 hasown: 2.0.2 + is-relative@0.1.3: {} + is-set@2.0.3: {} is-shared-array-buffer@1.0.4: @@ -25205,6 +25994,10 @@ snapshots: is-unicode-supported@0.1.0: {} + is-unicode-supported@1.3.0: {} + + is-unicode-supported@2.1.0: {} + is-weakmap@2.0.2: {} is-weakref@1.1.1: @@ -25235,10 +26028,14 @@ snapshots: isbinaryfile@4.0.10: {} + isexe@1.1.2: {} + isexe@2.0.0: {} isexe@3.1.1: {} + isobject@3.0.1: {} + istanbul-lib-coverage@3.2.2: {} istanbul-lib-instrument@6.0.3: @@ -25447,6 +26244,8 @@ snapshots: json-parse-even-better-errors@2.3.1: {} + json-parse-even-better-errors@3.0.2: {} + json-parse-even-better-errors@4.0.0: {} json-pointer@0.6.2: @@ -25592,6 +26391,8 @@ snapshots: kind-of@6.0.3: {} + kleur@3.0.3: {} + klona@2.0.6: {} knockout@3.5.1: {} @@ -25600,6 +26401,8 @@ snapshots: kolorist@1.8.0: {} + ky@1.14.2: {} + langium@3.3.1: dependencies: chevrotain: 11.0.3 @@ -25608,6 +26411,10 @@ snapshots: vscode-languageserver-textdocument: 1.0.12 vscode-uri: 3.0.8 + latest-version@9.0.0: + dependencies: + package-json: 10.0.1 + launch-editor@2.11.1: dependencies: picocolors: 1.1.1 @@ -25658,6 +26465,13 @@ snapshots: dependencies: immediate: 3.0.6 + lighthouse-logger@2.0.2: + dependencies: + debug: 4.4.3(supports-color@8.1.1) + marky: 1.3.0 + transitivePeerDependencies: + - supports-color + lightningcss-android-arm64@1.31.1: optional: true @@ -25715,6 +26529,16 @@ snapshots: lines-and-columns@1.2.4: {} + lines-and-columns@2.0.4: {} + + linkedom@0.18.12: + dependencies: + css-select: 5.2.2 + cssom: 0.5.0 + html-escaper: 3.0.3 + htmlparser2: 10.1.0 + uhyphen: 0.2.0 + linkify-it@5.0.0: dependencies: uc.micro: 2.1.0 @@ -25738,6 +26562,15 @@ snapshots: rfdc: 1.4.1 wrap-ansi: 8.1.0 + listr2@8.3.3: + dependencies: + cli-truncate: 4.0.0 + colorette: 2.0.20 + eventemitter3: 5.0.1 + log-update: 6.1.0 + rfdc: 1.4.1 + wrap-ansi: 9.0.2 + listr2@9.0.5: dependencies: cli-truncate: 5.1.0 @@ -25768,6 +26601,12 @@ snapshots: pkg-types: 2.1.0 quansync: 0.2.10 + local-pkg@1.1.2: + dependencies: + mlly: 1.8.0 + pkg-types: 2.3.0 + quansync: 0.2.11 + locate-app@2.5.0: dependencies: '@promptbook/utils': 0.69.5 @@ -25826,6 +26665,11 @@ snapshots: chalk: 4.1.2 is-unicode-supported: 0.1.0 + log-symbols@6.0.0: + dependencies: + chalk: 5.6.2 + is-unicode-supported: 1.3.0 + log-update@5.0.1: dependencies: ansi-escapes: 5.0.0 @@ -25901,6 +26745,12 @@ snapshots: dependencies: '@jridgewell/sourcemap-codec': 1.5.5 + magicast@0.3.5: + dependencies: + '@babel/parser': 7.28.5 + '@babel/types': 7.28.5 + source-map-js: 1.2.1 + magicast@0.5.1: dependencies: '@babel/parser': 7.28.5 @@ -25996,6 +26846,8 @@ snapshots: - supports-color optional: true + many-keys-map@2.0.1: {} + map-age-cleaner@0.1.3: dependencies: p-defer: 1.0.0 @@ -26048,6 +26900,8 @@ snapshots: marked@4.3.0: {} + marky@1.3.0: {} + matcher@3.0.0: dependencies: escape-string-regexp: 4.0.0 @@ -26611,6 +27465,13 @@ snapshots: pkg-types: 1.3.1 ufo: 1.6.1 + mlly@1.8.0: + dependencies: + acorn: 8.15.0 + pathe: 2.0.3 + pkg-types: 1.3.1 + ufo: 1.6.1 + mobx-react-lite@4.1.1(mobx@6.15.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3): dependencies: mobx: 6.15.0 @@ -26714,6 +27575,13 @@ snapshots: dns-packet: 5.6.1 thunky: 1.1.0 + multimatch@6.0.0: + dependencies: + '@types/minimatch': 3.0.5 + array-differ: 4.0.0 + array-union: 3.0.1 + minimatch: 3.1.2 + multimath@2.0.0: dependencies: glur: 1.1.2 @@ -26742,6 +27610,8 @@ snapshots: nan@2.22.2: optional: true + nano-spawn@1.0.3: {} + nano-spawn@2.0.0: {} nanoid@3.3.11: {} @@ -26790,6 +27660,8 @@ snapshots: dependencies: http2-client: 1.3.5 + node-fetch-native@1.6.7: {} + node-fetch@2.7.0(encoding@0.1.13): dependencies: whatwg-url: 5.0.0 @@ -26849,6 +27721,15 @@ snapshots: css-select: 5.2.2 he: 1.2.0 + node-notifier@10.0.1: + dependencies: + growly: 1.3.0 + is-wsl: 2.2.0 + semver: 7.7.3 + shellwords: 0.1.1 + uuid: 8.3.2 + which: 2.0.2 + node-readfiles@0.2.0: dependencies: es6-promise: 3.3.1 @@ -26956,6 +27837,12 @@ snapshots: nwsapi@2.2.23: optional: true + nypm@0.6.4: + dependencies: + citty: 0.2.0 + pathe: 2.0.3 + tinyexec: 1.0.2 + oas-kit-common@1.0.8: dependencies: fast-safe-stringify: 2.1.1 @@ -27046,6 +27933,14 @@ snapshots: obug@2.1.1: {} + ofetch@1.5.1: + dependencies: + destr: 2.0.5 + node-fetch-native: 1.6.7 + ufo: 1.6.1 + + ohash@2.0.11: {} + oidc-token-hash@5.1.0: {} ollama@0.6.3: @@ -27054,6 +27949,8 @@ snapshots: omggif@1.0.10: {} + on-exit-leak-free@2.1.2: {} + on-finished@2.3.0: dependencies: ee-first: 1.1.1 @@ -27085,6 +27982,12 @@ snapshots: is-inside-container: 1.0.0 wsl-utils: 0.1.0 + open@8.4.2: + dependencies: + define-lazy-prop: 2.0.0 + is-docker: 2.2.1 + is-wsl: 2.2.0 + openai@6.16.0(ws@8.19.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(zod@4.1.12): optionalDependencies: ws: 8.19.0(bufferutil@4.0.9)(utf-8-validate@6.0.5) @@ -27131,6 +28034,20 @@ snapshots: strip-ansi: 6.0.1 wcwidth: 1.0.1 + ora@8.2.0: + dependencies: + chalk: 5.6.2 + cli-cursor: 5.0.0 + cli-spinners: 2.9.2 + is-interactive: 2.0.0 + is-unicode-supported: 2.1.0 + log-symbols: 6.0.0 + stdin-discarder: 0.2.2 + string-width: 7.2.0 + strip-ansi: 7.1.2 + + os-shim@0.1.3: {} + os-tmpdir@1.0.2: {} outdent@0.8.0: {} @@ -27211,6 +28128,13 @@ snapshots: package-json-from-dist@1.0.1: {} + package-json@10.0.1: + dependencies: + ky: 1.14.2 + registry-auth-token: 5.1.1 + registry-url: 6.0.1 + semver: 7.7.3 + package-manager-detector@1.3.0: {} pacote@21.0.1: @@ -27278,6 +28202,14 @@ snapshots: json-parse-even-better-errors: 2.3.1 lines-and-columns: 1.2.4 + parse-json@7.1.1: + dependencies: + '@babel/code-frame': 7.27.1 + error-ex: 1.3.2 + json-parse-even-better-errors: 3.0.2 + lines-and-columns: 2.0.4 + type-fest: 3.13.1 + parse-node-version@1.0.1: optional: true @@ -27375,6 +28307,8 @@ snapshots: pend@1.2.0: {} + perfect-debounce@2.1.0: {} + perfect-freehand@1.2.0: {} perfect-scrollbar@1.5.6: {} @@ -27400,6 +28334,26 @@ snapshots: pify@4.0.1: optional: true + pino-abstract-transport@2.0.0: + dependencies: + split2: 4.2.0 + + pino-std-serializers@7.1.0: {} + + pino@9.7.0: + dependencies: + atomic-sleep: 1.0.0 + fast-redact: 3.5.0 + on-exit-leak-free: 2.1.2 + pino-abstract-transport: 2.0.0 + pino-std-serializers: 7.1.0 + process-warning: 5.0.0 + quick-format-unescaped: 4.0.4 + real-require: 0.2.0 + safe-stable-stringify: 2.5.0 + sonic-boom: 4.2.0 + thread-stream: 3.1.0 + pirates@4.0.7: {} pixelmatch@5.3.0: @@ -27413,7 +28367,7 @@ snapshots: pkg-types@1.3.1: dependencies: confbox: 0.1.8 - mlly: 1.7.4 + mlly: 1.8.0 pathe: 2.0.3 pkg-types@2.1.0: @@ -27422,6 +28376,12 @@ snapshots: exsolve: 1.0.5 pathe: 2.0.3 + pkg-types@2.3.0: + dependencies: + confbox: 0.2.2 + exsolve: 1.0.8 + pathe: 2.0.3 + playwright-core@1.57.0: {} playwright@1.57.0: @@ -27938,6 +28898,8 @@ snapshots: process-nextick-args@2.0.1: {} + process-warning@5.0.0: {} + process@0.11.10: {} progress@2.0.3: {} @@ -27949,6 +28911,15 @@ snapshots: err-code: 2.0.3 retry: 0.12.0 + promise-toolbox@0.21.0: + dependencies: + make-error: 1.3.6 + + prompts@2.4.2: + dependencies: + kleur: 3.0.3 + sisteransi: 1.0.5 + prop-types@15.8.1: dependencies: loose-envify: 1.4.0 @@ -27957,6 +28928,8 @@ snapshots: property-information@7.1.0: {} + proto-list@1.2.4: {} + protobufjs@7.5.0: dependencies: '@protobufjs/aspromise': 1.1.2 @@ -28001,6 +28974,17 @@ snapshots: dependencies: punycode: 2.3.1 + publish-browser-extension@3.0.3: + dependencies: + cac: 6.7.14 + consola: 3.4.2 + dotenv: 17.2.3 + form-data-encoder: 4.1.0 + formdata-node: 6.0.3 + listr2: 8.3.3 + ofetch: 1.5.1 + zod: 4.1.12 + pump@3.0.3: dependencies: end-of-stream: 1.4.5 @@ -28045,6 +29029,8 @@ snapshots: quansync@0.2.10: {} + quansync@0.2.11: {} + query-selector-shadow-dom@1.0.1: {} query-string@7.1.3: @@ -28058,6 +29044,8 @@ snapshots: queue-microtask@1.2.3: {} + quick-format-unescaped@4.0.4: {} + quick-lru@5.1.1: {} quickselect@3.0.0: {} @@ -28100,6 +29088,11 @@ snapshots: schema-utils: 3.3.0 webpack: 5.101.3(@swc/core@1.11.29(@swc/helpers@0.5.17))(esbuild@0.27.2) + rc9@2.1.2: + dependencies: + defu: 6.1.4 + destr: 2.0.5 + rc@1.2.8: dependencies: deep-extend: 0.6.0 @@ -28270,6 +29263,8 @@ snapshots: readdirp@5.0.0: {} + real-require@0.2.0: {} + rechoir@0.8.0: dependencies: resolve: 1.22.10 @@ -28344,6 +29339,14 @@ snapshots: unicode-match-property-ecmascript: 1.0.4 unicode-match-property-value-ecmascript: 1.2.0 + registry-auth-token@5.1.1: + dependencies: + '@pnpm/npm-conf': 3.0.2 + + registry-url@6.0.1: + dependencies: + rc: 1.2.8 + regjsgen@0.5.2: {} regjsparser@0.6.9: @@ -28677,6 +29680,8 @@ snapshots: dependencies: ret: 0.5.0 + safe-stable-stringify@2.5.0: {} + safer-buffer@2.1.2: {} sanitize-filename@1.6.3: @@ -28831,6 +29836,8 @@ snapshots: dependencies: raw-loader: 0.5.1 + scule@1.3.0: {} + secure-compare@3.0.1: {} selderee@0.11.0: @@ -28969,6 +29976,11 @@ snapshots: es-errors: 1.3.0 es-object-atoms: 1.1.1 + set-value@4.1.0: + dependencies: + is-plain-object: 2.0.4 + is-primitive: 3.0.1 + setimmediate@1.0.5: {} setprototypeof@1.1.0: {} @@ -28989,6 +30001,8 @@ snapshots: shebang-regex@3.0.0: {} + shell-quote@1.7.3: {} + shell-quote@1.8.3: {} shelljs@0.10.0: @@ -28996,6 +30010,8 @@ snapshots: execa: 5.1.1 fast-glob: 3.3.3 + shellwords@0.1.1: {} + shimmer@1.2.1: {} should-equal@2.0.0: @@ -29109,6 +30125,8 @@ snapshots: mrmime: 2.0.1 totalist: 3.0.1 + sisteransi@1.0.5: {} + slash@3.0.0: {} slash@5.1.0: {} @@ -29220,6 +30238,10 @@ snapshots: ip-address: 10.1.0 smart-buffer: 4.2.0 + sonic-boom@4.2.0: + dependencies: + atomic-sleep: 1.0.0 + sort-keys-length@1.0.1: dependencies: sort-keys: 1.1.2 @@ -29247,6 +30269,11 @@ snapshots: spacetrim@0.11.59: {} + spawn-sync@1.0.15: + dependencies: + concat-stream: 1.6.2 + os-shim: 0.1.3 + spdx-correct@3.2.0: dependencies: spdx-expression-parse: 3.0.1 @@ -29288,6 +30315,10 @@ snapshots: split2@4.2.0: {} + split@1.0.1: + dependencies: + through: 2.3.8 + sprintf-js@1.0.3: {} sprintf-js@1.1.3: @@ -29341,6 +30372,8 @@ snapshots: std-env@3.10.0: {} + stdin-discarder@0.2.2: {} + stickyfill@1.1.1: {} stop-iteration-iterator@1.1.0: @@ -29479,6 +30512,12 @@ snapshots: strip-json-comments@3.1.1: {} + strip-json-comments@5.0.2: {} + + strip-literal@3.1.0: + dependencies: + js-tokens: 9.0.1 + strip-outer@1.0.1: dependencies: escape-string-regexp: 1.0.5 @@ -29499,6 +30538,12 @@ snapshots: '@tokenizer/token': 0.3.0 peek-readable: 4.1.0 + stubborn-fs@2.0.0: + dependencies: + stubborn-utils: 1.0.2 + + stubborn-utils@1.0.2: {} + style-loader@2.0.0(webpack@5.101.3(@swc/core@1.11.29(@swc/helpers@0.5.17))(esbuild@0.27.2)): dependencies: loader-utils: 2.0.4 @@ -29922,10 +30967,16 @@ snapshots: dependencies: tslib: 2.8.1 + thread-stream@3.1.0: + dependencies: + real-require: 0.2.0 + through2@4.0.2: dependencies: readable-stream: 3.6.2 + through@2.3.8: {} + thunky@1.1.0: {} time2fa@1.4.2: {} @@ -30166,6 +31217,8 @@ snapshots: type-fest@1.4.0: {} + type-fest@3.13.1: {} + type-fest@4.26.0: {} type-fest@4.41.0: {} @@ -30268,6 +31321,8 @@ snapshots: uglify-js@3.19.3: optional: true + uhyphen@0.2.0: {} + uid-safe@2.1.5: dependencies: random-bytes: 1.0.0 @@ -30322,6 +31377,23 @@ snapshots: trough: 2.2.0 vfile: 6.0.3 + unimport@5.6.0: + dependencies: + acorn: 8.15.0 + escape-string-regexp: 5.0.0 + estree-walker: 3.0.3 + local-pkg: 1.1.2 + magic-string: 0.30.21 + mlly: 1.8.0 + pathe: 2.0.3 + picomatch: 4.0.3 + pkg-types: 2.3.0 + scule: 1.3.0 + strip-literal: 3.1.0 + tinyglobby: 0.2.15 + unplugin: 2.3.11 + unplugin-utils: 0.3.1 + union@0.5.0: dependencies: qs: 6.14.0 @@ -30391,6 +31463,18 @@ snapshots: unpipe@1.0.0: {} + unplugin-utils@0.3.1: + dependencies: + pathe: 2.0.3 + picomatch: 4.0.3 + + unplugin@2.3.11: + dependencies: + '@jridgewell/remapping': 2.3.5 + acorn: 8.15.0 + picomatch: 4.0.3 + webpack-virtual-modules: 0.6.2 + unused-filename@4.0.1: dependencies: escape-string-regexp: 5.0.0 @@ -30404,6 +31488,19 @@ snapshots: escalade: 3.2.0 picocolors: 1.1.1 + update-notifier@7.3.1: + dependencies: + boxen: 8.0.1 + chalk: 5.6.2 + configstore: 7.1.0 + is-in-ci: 1.0.0 + is-installed-globally: 1.0.0 + is-npm: 6.1.0 + latest-version: 9.0.0 + pupa: 3.1.0 + semver: 7.7.3 + xdg-basedir: 5.1.0 + uri-js@4.4.1: dependencies: punycode: 2.3.1 @@ -30504,6 +31601,26 @@ snapshots: '@types/unist': 3.0.3 vfile-message: 4.0.2 + vite-node@5.3.0(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.31.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1): + dependencies: + cac: 6.7.14 + es-module-lexer: 2.0.0 + obug: 2.1.1 + pathe: 2.0.3 + vite: 7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.31.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) + transitivePeerDependencies: + - '@types/node' + - jiti + - less + - lightningcss + - sass + - sass-embedded + - stylus + - sugarss + - terser + - tsx + - yaml + vite-plugin-dts@4.5.4(@types/node@24.10.9)(rollup@4.52.0)(typescript@5.9.3)(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.31.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1)): dependencies: '@microsoft/api-extractor': 7.52.8(@types/node@24.10.9) @@ -30678,6 +31795,31 @@ snapshots: dependencies: defaults: 1.0.4 + web-ext-run@0.2.4: + dependencies: + '@babel/runtime': 7.28.2 + '@devicefarmer/adbkit': 3.3.8 + chrome-launcher: 1.2.0 + debounce: 1.2.1 + es6-error: 4.1.1 + firefox-profile: 4.7.0 + fx-runner: 1.4.0 + multimatch: 6.0.0 + node-notifier: 10.0.1 + parse-json: 7.1.1 + pino: 9.7.0 + promise-toolbox: 0.21.0 + set-value: 4.1.0 + source-map-support: 0.5.21 + strip-bom: 5.0.0 + strip-json-comments: 5.0.2 + tmp: 0.2.5 + update-notifier: 7.3.1 + watchpack: 2.4.4 + zip-dir: 2.0.0 + transitivePeerDependencies: + - supports-color + web-namespaces@2.0.1: {} web-streams-polyfill@3.3.3: {} @@ -30799,6 +31941,8 @@ snapshots: webpack-sources@3.3.3: {} + webpack-virtual-modules@0.6.2: {} + webpack@5.101.3(@swc/core@1.11.29(@swc/helpers@0.5.17))(esbuild@0.27.2): dependencies: '@types/eslint-scope': 3.7.7 @@ -30912,6 +32056,10 @@ snapshots: wheel@1.0.0: {} + when-exit@2.1.5: {} + + when@3.7.7: {} + which-boxed-primitive@1.1.1: dependencies: is-bigint: 1.1.0 @@ -30953,6 +32101,11 @@ snapshots: gopd: 1.2.0 has-tostringtag: 1.0.2 + which@1.2.4: + dependencies: + is-absolute: 0.1.7 + isexe: 1.1.2 + which@1.3.1: dependencies: isexe: 2.0.0 @@ -30983,6 +32136,12 @@ snapshots: string-width: 4.2.3 optional: true + widest-line@5.0.0: + dependencies: + string-width: 7.2.0 + + winreg@0.0.12: {} + word-wrap@1.2.5: {} wordwrap@1.0.0: {} @@ -31044,6 +32203,71 @@ snapshots: dependencies: is-wsl: 3.1.0 + wxt@0.20.13(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.31.1)(rollup@4.52.0)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1): + dependencies: + '@1natsu/wait-element': 4.1.2 + '@aklinker1/rollup-plugin-visualizer': 5.12.0(rollup@4.52.0) + '@webext-core/fake-browser': 1.3.4 + '@webext-core/isolated-element': 1.1.3 + '@webext-core/match-patterns': 1.0.3 + '@wxt-dev/browser': 0.1.32 + '@wxt-dev/storage': 1.2.6 + async-mutex: 0.5.0 + c12: 3.3.3(magicast@0.3.5) + cac: 6.7.14 + chokidar: 4.0.3 + ci-info: 4.3.1 + consola: 3.4.2 + defu: 6.1.4 + dotenv: 17.2.3 + dotenv-expand: 12.0.3 + esbuild: 0.27.2 + fast-glob: 3.3.3 + filesize: 11.0.13 + fs-extra: 11.3.3 + get-port-please: 3.2.0 + giget: 2.0.0 + hookable: 5.5.3 + import-meta-resolve: 4.2.0 + is-wsl: 3.1.0 + json5: 2.2.3 + jszip: 3.10.1 + linkedom: 0.18.12 + magicast: 0.3.5 + minimatch: 10.1.1 + nano-spawn: 1.0.3 + normalize-path: 3.0.0 + nypm: 0.6.4 + ohash: 2.0.11 + open: 10.2.0 + ora: 8.2.0 + perfect-debounce: 2.1.0 + picocolors: 1.1.1 + prompts: 2.4.2 + publish-browser-extension: 3.0.3 + scule: 1.3.0 + unimport: 5.6.0 + vite: 7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.31.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) + vite-node: 5.3.0(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.31.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) + web-ext-run: 0.2.4 + transitivePeerDependencies: + - '@types/node' + - canvas + - jiti + - less + - lightningcss + - rollup + - sass + - sass-embedded + - stylus + - sugarss + - supports-color + - terser + - tsx + - yaml + + xdg-basedir@5.1.0: {} + xml-name-validator@3.0.0: {} xml-name-validator@5.0.0: @@ -31163,6 +32387,11 @@ snapshots: optionalDependencies: commander: 9.5.0 + zip-dir@2.0.0: + dependencies: + async: 3.2.6 + jszip: 3.10.1 + zip-stream@6.0.1: dependencies: archiver-utils: 5.0.2 @@ -31171,8 +32400,7 @@ snapshots: zod@3.24.4: {} - zod@4.1.12: - optional: true + zod@4.1.12: {} zustand@4.5.6(@types/react@19.1.7)(react@19.2.3): dependencies: From e4d319c7a183a2af62bfccabb46e6789069b4988 Mon Sep 17 00:00:00 2001 From: Elian Doran <contact@eliandoran.me> Date: Sat, 24 Jan 2026 09:50:25 +0200 Subject: [PATCH 200/353] chore(web-clipper): define entrypoints --- .../{background.js => entrypoints/background/index.js} | 0 .../{content.js => entrypoints/content/index.js} | 0 .../options.html => entrypoints/options/index.html} | 0 .../{options/options.js => entrypoints/options/index.js} | 0 .../{popup/popup.html => entrypoints/popup/index.html} | 0 apps/web-clipper/{ => entrypoints}/popup/popup.css | 0 apps/web-clipper/{ => entrypoints}/popup/popup.js | 0 apps/web-clipper/manifest.json | 9 ++------- 8 files changed, 2 insertions(+), 7 deletions(-) rename apps/web-clipper/{background.js => entrypoints/background/index.js} (100%) rename apps/web-clipper/{content.js => entrypoints/content/index.js} (100%) rename apps/web-clipper/{options/options.html => entrypoints/options/index.html} (100%) rename apps/web-clipper/{options/options.js => entrypoints/options/index.js} (100%) rename apps/web-clipper/{popup/popup.html => entrypoints/popup/index.html} (100%) rename apps/web-clipper/{ => entrypoints}/popup/popup.css (100%) rename apps/web-clipper/{ => entrypoints}/popup/popup.js (100%) diff --git a/apps/web-clipper/background.js b/apps/web-clipper/entrypoints/background/index.js similarity index 100% rename from apps/web-clipper/background.js rename to apps/web-clipper/entrypoints/background/index.js diff --git a/apps/web-clipper/content.js b/apps/web-clipper/entrypoints/content/index.js similarity index 100% rename from apps/web-clipper/content.js rename to apps/web-clipper/entrypoints/content/index.js diff --git a/apps/web-clipper/options/options.html b/apps/web-clipper/entrypoints/options/index.html similarity index 100% rename from apps/web-clipper/options/options.html rename to apps/web-clipper/entrypoints/options/index.html diff --git a/apps/web-clipper/options/options.js b/apps/web-clipper/entrypoints/options/index.js similarity index 100% rename from apps/web-clipper/options/options.js rename to apps/web-clipper/entrypoints/options/index.js diff --git a/apps/web-clipper/popup/popup.html b/apps/web-clipper/entrypoints/popup/index.html similarity index 100% rename from apps/web-clipper/popup/popup.html rename to apps/web-clipper/entrypoints/popup/index.html diff --git a/apps/web-clipper/popup/popup.css b/apps/web-clipper/entrypoints/popup/popup.css similarity index 100% rename from apps/web-clipper/popup/popup.css rename to apps/web-clipper/entrypoints/popup/popup.css diff --git a/apps/web-clipper/popup/popup.js b/apps/web-clipper/entrypoints/popup/popup.js similarity index 100% rename from apps/web-clipper/popup/popup.js rename to apps/web-clipper/entrypoints/popup/popup.js diff --git a/apps/web-clipper/manifest.json b/apps/web-clipper/manifest.json index fe3b983023..8e0c1ba2bc 100644 --- a/apps/web-clipper/manifest.json +++ b/apps/web-clipper/manifest.json @@ -31,8 +31,7 @@ ], "js": [ "lib/browser-polyfill.js", - "utils.js", - "content.js" + "utils.js" ] } ], @@ -40,13 +39,9 @@ "scripts": [ "lib/browser-polyfill.js", "utils.js", - "trilium_server_facade.js", - "background.js" + "trilium_server_facade.js" ] }, - "options_ui": { - "page": "options/options.html" - }, "commands": { "saveSelection": { "description": "Save the selected text into a note", From cb8b9686373d0cd1df67a7904fe6005ec3709d98 Mon Sep 17 00:00:00 2001 From: Elian Doran <contact@eliandoran.me> Date: Sat, 24 Jan 2026 09:59:36 +0200 Subject: [PATCH 201/353] chore(web-clipper): make entrypoints actually run --- apps/web-clipper/.gitignore | 3 +- apps/web-clipper/.wxt/tsconfig.json | 1 - .../entrypoints/background/index.js | 896 +++++++++--------- apps/web-clipper/entrypoints/content/index.js | 709 +++++++------- apps/web-clipper/manifest.json | 3 - 5 files changed, 809 insertions(+), 803 deletions(-) delete mode 100644 apps/web-clipper/.wxt/tsconfig.json diff --git a/apps/web-clipper/.gitignore b/apps/web-clipper/.gitignore index 77738287f0..3e99175bf8 100644 --- a/apps/web-clipper/.gitignore +++ b/apps/web-clipper/.gitignore @@ -1 +1,2 @@ -dist/ \ No newline at end of file +.output +.wxt \ No newline at end of file diff --git a/apps/web-clipper/.wxt/tsconfig.json b/apps/web-clipper/.wxt/tsconfig.json deleted file mode 100644 index 0967ef424b..0000000000 --- a/apps/web-clipper/.wxt/tsconfig.json +++ /dev/null @@ -1 +0,0 @@ -{} diff --git a/apps/web-clipper/entrypoints/background/index.js b/apps/web-clipper/entrypoints/background/index.js index 4074987abb..ee92f709a5 100644 --- a/apps/web-clipper/entrypoints/background/index.js +++ b/apps/web-clipper/entrypoints/background/index.js @@ -1,451 +1,453 @@ -// Keyboard shortcuts -chrome.commands.onCommand.addListener(async function (command) { - if (command == "saveSelection") { - await saveSelection(); - } else if (command == "saveWholePage") { - await saveWholePage(); - } else if (command == "saveTabs") { - await saveTabs(); - } else if (command == "saveCroppedScreenshot") { +export default defineBackground(() => { + // Keyboard shortcuts + chrome.commands.onCommand.addListener(async function (command) { + if (command == "saveSelection") { + await saveSelection(); + } else if (command == "saveWholePage") { + await saveWholePage(); + } else if (command == "saveTabs") { + await saveTabs(); + } else if (command == "saveCroppedScreenshot") { + const activeTab = await getActiveTab(); + + await saveCroppedScreenshot(activeTab.url); + } else { + console.log("Unrecognized command", command); + } + }); + + function cropImage(newArea, dataUrl) { + return new Promise((resolve, reject) => { + const img = new Image(); + + img.onload = function () { + const canvas = document.createElement('canvas'); + canvas.width = newArea.width; + canvas.height = newArea.height; + + const ctx = canvas.getContext('2d'); + + ctx.drawImage(img, newArea.x, newArea.y, newArea.width, newArea.height, 0, 0, newArea.width, newArea.height); + + resolve(canvas.toDataURL()); + }; + + img.src = dataUrl; + }); + } + + async function takeCroppedScreenshot(cropRect) { + const activeTab = await getActiveTab(); + const zoom = await browser.tabs.getZoom(activeTab.id) * window.devicePixelRatio; + + const newArea = Object.assign({}, cropRect); + newArea.x *= zoom; + newArea.y *= zoom; + newArea.width *= zoom; + newArea.height *= zoom; + + const dataUrl = await browser.tabs.captureVisibleTab(null, { format: 'png' }); + + return await cropImage(newArea, dataUrl); + } + + async function takeWholeScreenshot() { + // this saves only visible portion of the page + // workaround to save the whole page is to scroll & stitch + // example in https://github.com/mrcoles/full-page-screen-capture-chrome-extension + // see page.js and popup.js + return await browser.tabs.captureVisibleTab(null, { format: 'png' }); + } + + browser.runtime.onInstalled.addListener(() => { + if (isDevEnv()) { + browser.browserAction.setIcon({ + path: 'icons/32-dev.png', + }); + } + }); + + browser.contextMenus.create({ + id: "trilium-save-selection", + title: "Save selection to Trilium", + contexts: ["selection"] + }); + + browser.contextMenus.create({ + id: "trilium-save-cropped-screenshot", + title: "Clip screenshot to Trilium", + contexts: ["page"] + }); + + browser.contextMenus.create({ + id: "trilium-save-cropped-screenshot", + title: "Crop screen shot to Trilium", + contexts: ["page"] + }); + + browser.contextMenus.create({ + id: "trilium-save-whole-screenshot", + title: "Save whole screen shot to Trilium", + contexts: ["page"] + }); + + browser.contextMenus.create({ + id: "trilium-save-page", + title: "Save whole page to Trilium", + contexts: ["page"] + }); + + browser.contextMenus.create({ + id: "trilium-save-link", + title: "Save link to Trilium", + contexts: ["link"] + }); + + browser.contextMenus.create({ + id: "trilium-save-image", + title: "Save image to Trilium", + contexts: ["image"] + }); + + async function getActiveTab() { + const tabs = await browser.tabs.query({ + active: true, + currentWindow: true + }); + + return tabs[0]; + } + + async function getWindowTabs() { + const tabs = await browser.tabs.query({ + currentWindow: true + }); + + return tabs; + } + + async function sendMessageToActiveTab(message) { const activeTab = await getActiveTab(); - await saveCroppedScreenshot(activeTab.url); - } else { - console.log("Unrecognized command", command); + if (!activeTab) { + throw new Error("No active tab."); + } + + try { + return await browser.tabs.sendMessage(activeTab.id, message); + } + catch (e) { + throw e; + } } -}); - -function cropImage(newArea, dataUrl) { - return new Promise((resolve, reject) => { - const img = new Image(); - - img.onload = function () { - const canvas = document.createElement('canvas'); - canvas.width = newArea.width; - canvas.height = newArea.height; - - const ctx = canvas.getContext('2d'); - - ctx.drawImage(img, newArea.x, newArea.y, newArea.width, newArea.height, 0, 0, newArea.width, newArea.height); - - resolve(canvas.toDataURL()); - }; - - img.src = dataUrl; - }); -} - -async function takeCroppedScreenshot(cropRect) { - const activeTab = await getActiveTab(); - const zoom = await browser.tabs.getZoom(activeTab.id) * window.devicePixelRatio; - - const newArea = Object.assign({}, cropRect); - newArea.x *= zoom; - newArea.y *= zoom; - newArea.width *= zoom; - newArea.height *= zoom; - - const dataUrl = await browser.tabs.captureVisibleTab(null, { format: 'png' }); - - return await cropImage(newArea, dataUrl); -} - -async function takeWholeScreenshot() { - // this saves only visible portion of the page - // workaround to save the whole page is to scroll & stitch - // example in https://github.com/mrcoles/full-page-screen-capture-chrome-extension - // see page.js and popup.js - return await browser.tabs.captureVisibleTab(null, { format: 'png' }); -} - -browser.runtime.onInstalled.addListener(() => { - if (isDevEnv()) { - browser.browserAction.setIcon({ - path: 'icons/32-dev.png', - }); - } -}); - -browser.contextMenus.create({ - id: "trilium-save-selection", - title: "Save selection to Trilium", - contexts: ["selection"] -}); - -browser.contextMenus.create({ - id: "trilium-save-cropped-screenshot", - title: "Clip screenshot to Trilium", - contexts: ["page"] -}); - -browser.contextMenus.create({ - id: "trilium-save-cropped-screenshot", - title: "Crop screen shot to Trilium", - contexts: ["page"] -}); - -browser.contextMenus.create({ - id: "trilium-save-whole-screenshot", - title: "Save whole screen shot to Trilium", - contexts: ["page"] -}); - -browser.contextMenus.create({ - id: "trilium-save-page", - title: "Save whole page to Trilium", - contexts: ["page"] -}); - -browser.contextMenus.create({ - id: "trilium-save-link", - title: "Save link to Trilium", - contexts: ["link"] -}); - -browser.contextMenus.create({ - id: "trilium-save-image", - title: "Save image to Trilium", - contexts: ["image"] -}); - -async function getActiveTab() { - const tabs = await browser.tabs.query({ - active: true, - currentWindow: true - }); - - return tabs[0]; -} - -async function getWindowTabs() { - const tabs = await browser.tabs.query({ - currentWindow: true - }); - - return tabs; -} - -async function sendMessageToActiveTab(message) { - const activeTab = await getActiveTab(); - - if (!activeTab) { - throw new Error("No active tab."); - } - - try { - return await browser.tabs.sendMessage(activeTab.id, message); - } - catch (e) { - throw e; - } -} - -function toast(message, noteId = null, tabIds = null) { - sendMessageToActiveTab({ - name: 'toast', - message: message, - noteId: noteId, - tabIds: tabIds - }); -} - -function blob2base64(blob) { - return new Promise(resolve => { - const reader = new FileReader(); - reader.onloadend = function() { - resolve(reader.result); - }; - reader.readAsDataURL(blob); - }); -} - -async function fetchImage(url) { - const resp = await fetch(url); - const blob = await resp.blob(); - - return await blob2base64(blob); -} - -async function postProcessImage(image) { - if (image.src.startsWith("data:image/")) { - image.dataUrl = image.src; - image.src = "inline." + image.src.substr(11, 3); // this should extract file type - png/jpg - } - else { - try { - image.dataUrl = await fetchImage(image.src, image); - } - catch (e) { - console.log(`Cannot fetch image from ${image.src}`); - } - } -} - -async function postProcessImages(resp) { - if (resp.images) { - for (const image of resp.images) { - await postProcessImage(image); - } - } -} - -async function saveSelection() { - const payload = await sendMessageToActiveTab({name: 'trilium-save-selection'}); - - await postProcessImages(payload); - - const resp = await triliumServerFacade.callService('POST', 'clippings', payload); - - if (!resp) { - return; - } - - toast("Selection has been saved to Trilium.", resp.noteId); -} - -async function getImagePayloadFromSrc(src, pageUrl) { - const image = { - imageId: randomString(20), - src: src - }; - - await postProcessImage(image); - - const activeTab = await getActiveTab(); - - return { - title: activeTab.title, - content: `<img src="${image.imageId}">`, - images: [image], - pageUrl: pageUrl - }; -} - -async function saveCroppedScreenshot(pageUrl) { - const cropRect = await sendMessageToActiveTab({name: 'trilium-get-rectangle-for-screenshot'}); - - const src = await takeCroppedScreenshot(cropRect); - - const payload = await getImagePayloadFromSrc(src, pageUrl); - - const resp = await triliumServerFacade.callService("POST", "clippings", payload); - - if (!resp) { - return; - } - - toast("Screenshot has been saved to Trilium.", resp.noteId); -} - -async function saveWholeScreenshot(pageUrl) { - const src = await takeWholeScreenshot(); - - const payload = await getImagePayloadFromSrc(src, pageUrl); - - const resp = await triliumServerFacade.callService("POST", "clippings", payload); - - if (!resp) { - return; - } - - toast("Screenshot has been saved to Trilium.", resp.noteId); -} - -async function saveImage(srcUrl, pageUrl) { - const payload = await getImagePayloadFromSrc(srcUrl, pageUrl); - - const resp = await triliumServerFacade.callService("POST", "clippings", payload); - - if (!resp) { - return; - } - - toast("Image has been saved to Trilium.", resp.noteId); -} - -async function saveWholePage() { - const payload = await sendMessageToActiveTab({name: 'trilium-save-page'}); - - await postProcessImages(payload); - - const resp = await triliumServerFacade.callService('POST', 'notes', payload); - - if (!resp) { - return; - } - - toast("Page has been saved to Trilium.", resp.noteId); -} - -async function saveLinkWithNote(title, content) { - const activeTab = await getActiveTab(); - - if (!title.trim()) { - title = activeTab.title; - } - - const resp = await triliumServerFacade.callService('POST', 'notes', { - title: title, - content: content, - clipType: 'note', - pageUrl: activeTab.url - }); - - if (!resp) { - return false; - } - - toast("Link with note has been saved to Trilium.", resp.noteId); - - return true; -} - -async function getTabsPayload(tabs) { - let content = '<ul>'; - tabs.forEach(tab => { - content += `<li><a href="${tab.url}">${tab.title}</a></li>` - }); - content += '</ul>'; - - const domainsCount = tabs.map(tab => tab.url) - .reduce((acc, url) => { - const hostname = new URL(url).hostname - return acc.set(hostname, (acc.get(hostname) || 0) + 1) - }, new Map()); - - let topDomains = [...domainsCount] - .sort((a, b) => {return b[1]-a[1]}) - .slice(0,3) - .map(domain=>domain[0]) - .join(', ') - - if (tabs.length > 3) { topDomains += '...' } - - return { - title: `${tabs.length} browser tabs: ${topDomains}`, - content: content, - clipType: 'tabs' - }; -} - -async function saveTabs() { - const tabs = await getWindowTabs(); - - const payload = await getTabsPayload(tabs); - - const resp = await triliumServerFacade.callService('POST', 'notes', payload); - - if (!resp) { - return; - } - - const tabIds = tabs.map(tab=>{return tab.id}); - - toast(`${tabs.length} links have been saved to Trilium.`, resp.noteId, tabIds); -} - -browser.contextMenus.onClicked.addListener(async function(info, tab) { - if (info.menuItemId === 'trilium-save-selection') { - await saveSelection(); - } - else if (info.menuItemId === 'trilium-save-cropped-screenshot') { - await saveCroppedScreenshot(info.pageUrl); - } - else if (info.menuItemId === 'trilium-save-whole-screenshot') { - await saveWholeScreenshot(info.pageUrl); - } - else if (info.menuItemId === 'trilium-save-image') { - await saveImage(info.srcUrl, info.pageUrl); - } - else if (info.menuItemId === 'trilium-save-link') { - const link = document.createElement("a"); - link.href = info.linkUrl; - // linkText might be available only in firefox - link.appendChild(document.createTextNode(info.linkText || info.linkUrl)); - - const activeTab = await getActiveTab(); - - const resp = await triliumServerFacade.callService('POST', 'clippings', { - title: activeTab.title, - content: link.outerHTML, - pageUrl: info.pageUrl - }); - - if (!resp) { - return; - } - - toast("Link has been saved to Trilium.", resp.noteId); - } - else if (info.menuItemId === 'trilium-save-page') { - await saveWholePage(); - } - else { - console.log("Unrecognized menuItemId", info.menuItemId); - } -}); - -browser.runtime.onMessage.addListener(async request => { - console.log("Received", request); - - if (request.name === 'openNoteInTrilium') { - const resp = await triliumServerFacade.callService('POST', 'open/' + request.noteId); - - if (!resp) { - return; - } - - // desktop app is not available so we need to open in browser - if (resp.result === 'open-in-browser') { - const {triliumServerUrl} = await browser.storage.sync.get("triliumServerUrl"); - - if (triliumServerUrl) { - const noteUrl = triliumServerUrl + '/#' + request.noteId; - - console.log("Opening new tab in browser", noteUrl); - - browser.tabs.create({ - url: noteUrl - }); - } - else { - console.error("triliumServerUrl not found in local storage."); - } - } - } - else if (request.name === 'closeTabs') { - return await browser.tabs.remove(request.tabIds) - } - else if (request.name === 'load-script') { - return await browser.tabs.executeScript({file: request.file}); - } - else if (request.name === 'save-cropped-screenshot') { - const activeTab = await getActiveTab(); - - return await saveCroppedScreenshot(activeTab.url); - } - else if (request.name === 'save-whole-screenshot') { - const activeTab = await getActiveTab(); - - return await saveWholeScreenshot(activeTab.url); - } - else if (request.name === 'save-whole-page') { - return await saveWholePage(); - } - else if (request.name === 'save-link-with-note') { - return await saveLinkWithNote(request.title, request.content); - } - else if (request.name === 'save-tabs') { - return await saveTabs(); - } - else if (request.name === 'trigger-trilium-search') { - triliumServerFacade.triggerSearchForTrilium(); - } - else if (request.name === 'send-trilium-search-status') { - triliumServerFacade.sendTriliumSearchStatusToPopup(); - } - else if (request.name === 'trigger-trilium-search-note-url') { - const activeTab = await getActiveTab(); - triliumServerFacade.triggerSearchNoteByUrl(activeTab.url); - } + + function toast(message, noteId = null, tabIds = null) { + sendMessageToActiveTab({ + name: 'toast', + message: message, + noteId: noteId, + tabIds: tabIds + }); + } + + function blob2base64(blob) { + return new Promise(resolve => { + const reader = new FileReader(); + reader.onloadend = function() { + resolve(reader.result); + }; + reader.readAsDataURL(blob); + }); + } + + async function fetchImage(url) { + const resp = await fetch(url); + const blob = await resp.blob(); + + return await blob2base64(blob); + } + + async function postProcessImage(image) { + if (image.src.startsWith("data:image/")) { + image.dataUrl = image.src; + image.src = "inline." + image.src.substr(11, 3); // this should extract file type - png/jpg + } + else { + try { + image.dataUrl = await fetchImage(image.src, image); + } + catch (e) { + console.log(`Cannot fetch image from ${image.src}`); + } + } + } + + async function postProcessImages(resp) { + if (resp.images) { + for (const image of resp.images) { + await postProcessImage(image); + } + } + } + + async function saveSelection() { + const payload = await sendMessageToActiveTab({name: 'trilium-save-selection'}); + + await postProcessImages(payload); + + const resp = await triliumServerFacade.callService('POST', 'clippings', payload); + + if (!resp) { + return; + } + + toast("Selection has been saved to Trilium.", resp.noteId); + } + + async function getImagePayloadFromSrc(src, pageUrl) { + const image = { + imageId: randomString(20), + src: src + }; + + await postProcessImage(image); + + const activeTab = await getActiveTab(); + + return { + title: activeTab.title, + content: `<img src="${image.imageId}">`, + images: [image], + pageUrl: pageUrl + }; + } + + async function saveCroppedScreenshot(pageUrl) { + const cropRect = await sendMessageToActiveTab({name: 'trilium-get-rectangle-for-screenshot'}); + + const src = await takeCroppedScreenshot(cropRect); + + const payload = await getImagePayloadFromSrc(src, pageUrl); + + const resp = await triliumServerFacade.callService("POST", "clippings", payload); + + if (!resp) { + return; + } + + toast("Screenshot has been saved to Trilium.", resp.noteId); + } + + async function saveWholeScreenshot(pageUrl) { + const src = await takeWholeScreenshot(); + + const payload = await getImagePayloadFromSrc(src, pageUrl); + + const resp = await triliumServerFacade.callService("POST", "clippings", payload); + + if (!resp) { + return; + } + + toast("Screenshot has been saved to Trilium.", resp.noteId); + } + + async function saveImage(srcUrl, pageUrl) { + const payload = await getImagePayloadFromSrc(srcUrl, pageUrl); + + const resp = await triliumServerFacade.callService("POST", "clippings", payload); + + if (!resp) { + return; + } + + toast("Image has been saved to Trilium.", resp.noteId); + } + + async function saveWholePage() { + const payload = await sendMessageToActiveTab({name: 'trilium-save-page'}); + + await postProcessImages(payload); + + const resp = await triliumServerFacade.callService('POST', 'notes', payload); + + if (!resp) { + return; + } + + toast("Page has been saved to Trilium.", resp.noteId); + } + + async function saveLinkWithNote(title, content) { + const activeTab = await getActiveTab(); + + if (!title.trim()) { + title = activeTab.title; + } + + const resp = await triliumServerFacade.callService('POST', 'notes', { + title: title, + content: content, + clipType: 'note', + pageUrl: activeTab.url + }); + + if (!resp) { + return false; + } + + toast("Link with note has been saved to Trilium.", resp.noteId); + + return true; + } + + async function getTabsPayload(tabs) { + let content = '<ul>'; + tabs.forEach(tab => { + content += `<li><a href="${tab.url}">${tab.title}</a></li>` + }); + content += '</ul>'; + + const domainsCount = tabs.map(tab => tab.url) + .reduce((acc, url) => { + const hostname = new URL(url).hostname + return acc.set(hostname, (acc.get(hostname) || 0) + 1) + }, new Map()); + + let topDomains = [...domainsCount] + .sort((a, b) => {return b[1]-a[1]}) + .slice(0,3) + .map(domain=>domain[0]) + .join(', ') + + if (tabs.length > 3) { topDomains += '...' } + + return { + title: `${tabs.length} browser tabs: ${topDomains}`, + content: content, + clipType: 'tabs' + }; + } + + async function saveTabs() { + const tabs = await getWindowTabs(); + + const payload = await getTabsPayload(tabs); + + const resp = await triliumServerFacade.callService('POST', 'notes', payload); + + if (!resp) { + return; + } + + const tabIds = tabs.map(tab=>{return tab.id}); + + toast(`${tabs.length} links have been saved to Trilium.`, resp.noteId, tabIds); + } + + browser.contextMenus.onClicked.addListener(async function(info, tab) { + if (info.menuItemId === 'trilium-save-selection') { + await saveSelection(); + } + else if (info.menuItemId === 'trilium-save-cropped-screenshot') { + await saveCroppedScreenshot(info.pageUrl); + } + else if (info.menuItemId === 'trilium-save-whole-screenshot') { + await saveWholeScreenshot(info.pageUrl); + } + else if (info.menuItemId === 'trilium-save-image') { + await saveImage(info.srcUrl, info.pageUrl); + } + else if (info.menuItemId === 'trilium-save-link') { + const link = document.createElement("a"); + link.href = info.linkUrl; + // linkText might be available only in firefox + link.appendChild(document.createTextNode(info.linkText || info.linkUrl)); + + const activeTab = await getActiveTab(); + + const resp = await triliumServerFacade.callService('POST', 'clippings', { + title: activeTab.title, + content: link.outerHTML, + pageUrl: info.pageUrl + }); + + if (!resp) { + return; + } + + toast("Link has been saved to Trilium.", resp.noteId); + } + else if (info.menuItemId === 'trilium-save-page') { + await saveWholePage(); + } + else { + console.log("Unrecognized menuItemId", info.menuItemId); + } + }); + + browser.runtime.onMessage.addListener(async request => { + console.log("Received", request); + + if (request.name === 'openNoteInTrilium') { + const resp = await triliumServerFacade.callService('POST', 'open/' + request.noteId); + + if (!resp) { + return; + } + + // desktop app is not available so we need to open in browser + if (resp.result === 'open-in-browser') { + const {triliumServerUrl} = await browser.storage.sync.get("triliumServerUrl"); + + if (triliumServerUrl) { + const noteUrl = triliumServerUrl + '/#' + request.noteId; + + console.log("Opening new tab in browser", noteUrl); + + browser.tabs.create({ + url: noteUrl + }); + } + else { + console.error("triliumServerUrl not found in local storage."); + } + } + } + else if (request.name === 'closeTabs') { + return await browser.tabs.remove(request.tabIds) + } + else if (request.name === 'load-script') { + return await browser.tabs.executeScript({file: request.file}); + } + else if (request.name === 'save-cropped-screenshot') { + const activeTab = await getActiveTab(); + + return await saveCroppedScreenshot(activeTab.url); + } + else if (request.name === 'save-whole-screenshot') { + const activeTab = await getActiveTab(); + + return await saveWholeScreenshot(activeTab.url); + } + else if (request.name === 'save-whole-page') { + return await saveWholePage(); + } + else if (request.name === 'save-link-with-note') { + return await saveLinkWithNote(request.title, request.content); + } + else if (request.name === 'save-tabs') { + return await saveTabs(); + } + else if (request.name === 'trigger-trilium-search') { + triliumServerFacade.triggerSearchForTrilium(); + } + else if (request.name === 'send-trilium-search-status') { + triliumServerFacade.sendTriliumSearchStatusToPopup(); + } + else if (request.name === 'trigger-trilium-search-note-url') { + const activeTab = await getActiveTab(); + triliumServerFacade.triggerSearchNoteByUrl(activeTab.url); + } + }); }); diff --git a/apps/web-clipper/entrypoints/content/index.js b/apps/web-clipper/entrypoints/content/index.js index faacfa5464..c6ba6c438c 100644 --- a/apps/web-clipper/entrypoints/content/index.js +++ b/apps/web-clipper/entrypoints/content/index.js @@ -1,351 +1,358 @@ -function absoluteUrl(url) { - if (!url) { - return url; - } - - const protocol = url.toLowerCase().split(':')[0]; - if (['http', 'https', 'file'].indexOf(protocol) >= 0) { - return url; - } - - if (url.indexOf('//') === 0) { - return location.protocol + url; - } else if (url[0] === '/') { - return location.protocol + '//' + location.host + url; - } else { - return getBaseUrl() + '/' + url; - } -} - -function pageTitle() { - const titleElements = document.getElementsByTagName("title"); - - return titleElements.length ? titleElements[0].text.trim() : document.title.trim(); -} - -function getReadableDocument() { - // Readability directly change the passed document, so clone to preserve the original web page. - const documentCopy = document.cloneNode(true); - const readability = new Readability(documentCopy, { - serializer: el => el // so that .content is returned as DOM element instead of HTML - }); - - const article = readability.parse(); - - if (!article) { - throw new Error('Could not parse HTML document with Readability'); - } - - return { - title: article.title, - body: article.content, - } -} - -function getDocumentDates() { - var dates = { - publishedDate: null, - modifiedDate: null, - }; - - const articlePublishedTime = document.querySelector("meta[property='article:published_time']"); - if (articlePublishedTime && articlePublishedTime.getAttribute('content')) { - dates.publishedDate = new Date(articlePublishedTime.getAttribute('content')); - } - - const articleModifiedTime = document.querySelector("meta[property='article:modified_time']"); - if (articleModifiedTime && articleModifiedTime.getAttribute('content')) { - dates.modifiedDate = new Date(articleModifiedTime.getAttribute('content')); - } - - // TODO: if we didn't get dates from meta, then try to get them from JSON-LD - - return dates; -} - -function getRectangleArea() { - return new Promise((resolve, reject) => { - const overlay = document.createElement('div'); - overlay.style.opacity = '0.6'; - overlay.style.background = 'black'; - overlay.style.width = '100%'; - overlay.style.height = '100%'; - overlay.style.zIndex = 99999999; - overlay.style.top = 0; - overlay.style.left = 0; - overlay.style.position = 'fixed'; - - document.body.appendChild(overlay); - - const messageComp = document.createElement('div'); - - const messageCompWidth = 300; - messageComp.setAttribute("tabindex", "0"); // so that it can be focused - messageComp.style.position = 'fixed'; - messageComp.style.opacity = '0.95'; - messageComp.style.fontSize = '14px'; - messageComp.style.width = messageCompWidth + 'px'; - messageComp.style.maxWidth = messageCompWidth + 'px'; - messageComp.style.border = '1px solid black'; - messageComp.style.background = 'white'; - messageComp.style.color = 'black'; - messageComp.style.top = '10px'; - messageComp.style.textAlign = 'center'; - messageComp.style.padding = '10px'; - messageComp.style.left = Math.round(document.body.clientWidth / 2 - messageCompWidth / 2) + 'px'; - messageComp.style.zIndex = overlay.style.zIndex + 1; - - messageComp.textContent = 'Drag and release to capture a screenshot'; - - document.body.appendChild(messageComp); - - const selection = document.createElement('div'); - selection.style.opacity = '0.5'; - selection.style.border = '1px solid red'; - selection.style.background = 'white'; - selection.style.border = '2px solid black'; - selection.style.zIndex = overlay.style.zIndex - 1; - selection.style.top = 0; - selection.style.left = 0; - selection.style.position = 'fixed'; - - document.body.appendChild(selection); - - messageComp.focus(); // we listen on keypresses on this element to cancel on escape - - let isDragging = false; - let draggingStartPos = null; - let selectionArea = {}; - - function updateSelection() { - selection.style.left = selectionArea.x + 'px'; - selection.style.top = selectionArea.y + 'px'; - selection.style.width = selectionArea.width + 'px'; - selection.style.height = selectionArea.height + 'px'; - } - - function setSelectionSizeFromMouse(event) { - if (event.clientX < draggingStartPos.x) { - selectionArea.x = event.clientX; - } - - if (event.clientY < draggingStartPos.y) { - selectionArea.y = event.clientY; - } - - selectionArea.width = Math.max(1, Math.abs(event.clientX - draggingStartPos.x)); - selectionArea.height = Math.max(1, Math.abs(event.clientY - draggingStartPos.y)); - updateSelection(); - } - - function selection_mouseDown(event) { - selectionArea = {x: event.clientX, y: event.clientY, width: 0, height: 0}; - draggingStartPos = {x: event.clientX, y: event.clientY}; - isDragging = true; - updateSelection(); - } - - function selection_mouseMove(event) { - if (!isDragging) return; - setSelectionSizeFromMouse(event); - } - - function removeOverlay() { - isDragging = false; - - overlay.removeEventListener('mousedown', selection_mouseDown); - overlay.removeEventListener('mousemove', selection_mouseMove); - overlay.removeEventListener('mouseup', selection_mouseUp); - - document.body.removeChild(overlay); - document.body.removeChild(selection); - document.body.removeChild(messageComp); - } - - function selection_mouseUp(event) { - setSelectionSizeFromMouse(event); - - removeOverlay(); - - console.info('selectionArea:', selectionArea); - - if (!selectionArea || !selectionArea.width || !selectionArea.height) { - return; - } - - // Need to wait a bit before taking the screenshot to make sure - // the overlays have been removed and don't appear in the - // screenshot. 10ms is not enough. - setTimeout(() => resolve(selectionArea), 100); - } - - function cancel(event) { - if (event.key === "Escape") { - removeOverlay(); - } - } - - overlay.addEventListener('mousedown', selection_mouseDown); - overlay.addEventListener('mousemove', selection_mouseMove); - overlay.addEventListener('mouseup', selection_mouseUp); - overlay.addEventListener('mouseup', selection_mouseUp); - messageComp.addEventListener('keydown', cancel); - }); -} - -function makeLinksAbsolute(container) { - for (const link of container.getElementsByTagName('a')) { - if (link.href) { - link.href = absoluteUrl(link.href); - } - } -} - -function getImages(container) { - const images = []; - - for (const img of container.getElementsByTagName('img')) { - if (!img.src) { - continue; - } - - const existingImage = images.find(image => image.src === img.src); - - if (existingImage) { - img.src = existingImage.imageId; - } - else { - const imageId = randomString(20); - - images.push({ - imageId: imageId, - src: img.src - }); - - img.src = imageId; - } - } - - return images; -} - -function createLink(clickAction, text, color = "lightskyblue") { - const link = document.createElement('a'); - link.href = "javascript:"; - link.style.color = color; - link.appendChild(document.createTextNode(text)); - link.addEventListener("click", () => { - browser.runtime.sendMessage(null, clickAction) - }); - - return link -} - -async function prepareMessageResponse(message) { - console.info('Message: ' + message.name); - - if (message.name === "toast") { - let messageText; - - if (message.noteId) { - messageText = document.createElement('p'); - messageText.setAttribute("style", "padding: 0; margin: 0; font-size: larger;") - messageText.appendChild(document.createTextNode(message.message + " ")); - messageText.appendChild(createLink( - {name: 'openNoteInTrilium', noteId: message.noteId}, - "Open in Trilium." - )); - - // only after saving tabs - if (message.tabIds) { - messageText.appendChild(document.createElement("br")); - messageText.appendChild(createLink( - {name: 'closeTabs', tabIds: message.tabIds}, - "Close saved tabs.", - "tomato" - )); - } - } - else { - messageText = message.message; - } - - await requireLib('/lib/toast.js'); - - showToast(messageText, { - settings: { - duration: 7000 - } - }); - } - else if (message.name === "trilium-save-selection") { - const container = document.createElement('div'); - - const selection = window.getSelection(); - - for (let i = 0; i < selection.rangeCount; i++) { - const range = selection.getRangeAt(i); - - container.appendChild(range.cloneContents()); - } - - makeLinksAbsolute(container); - - const images = getImages(container); - - return { - title: pageTitle(), - content: container.innerHTML, - images: images, - pageUrl: getPageLocationOrigin() + location.pathname + location.search + location.hash - }; - - } - else if (message.name === 'trilium-get-rectangle-for-screenshot') { - return getRectangleArea(); - } - else if (message.name === "trilium-save-page") { - await requireLib("/lib/JSDOMParser.js"); - await requireLib("/lib/Readability.js"); - await requireLib("/lib/Readability-readerable.js"); - - const {title, body} = getReadableDocument(); - - makeLinksAbsolute(body); - - const images = getImages(body); - - var labels = {}; - const dates = getDocumentDates(); - if (dates.publishedDate) { - labels['publishedDate'] = dates.publishedDate.toISOString().substring(0, 10); - } - if (dates.modifiedDate) { - labels['modifiedDate'] = dates.publishedDate.toISOString().substring(0, 10); - } - - return { - title: title, - content: body.innerHTML, - images: images, - pageUrl: getPageLocationOrigin() + location.pathname + location.search, - clipType: 'page', - labels: labels - }; - } - else { - throw new Error('Unknown command: ' + JSON.stringify(message)); - } -} - -browser.runtime.onMessage.addListener(prepareMessageResponse); - -const loadedLibs = []; - -async function requireLib(libPath) { - if (!loadedLibs.includes(libPath)) { - loadedLibs.push(libPath); - - await browser.runtime.sendMessage({name: 'load-script', file: libPath}); - } -} +export default defineContentScript({ + matches: [ + "<all_urls>" + ], + main: () => { + function absoluteUrl(url) { + if (!url) { + return url; + } + + const protocol = url.toLowerCase().split(':')[0]; + if (['http', 'https', 'file'].indexOf(protocol) >= 0) { + return url; + } + + if (url.indexOf('//') === 0) { + return location.protocol + url; + } else if (url[0] === '/') { + return location.protocol + '//' + location.host + url; + } else { + return getBaseUrl() + '/' + url; + } + } + + function pageTitle() { + const titleElements = document.getElementsByTagName("title"); + + return titleElements.length ? titleElements[0].text.trim() : document.title.trim(); + } + + function getReadableDocument() { + // Readability directly change the passed document, so clone to preserve the original web page. + const documentCopy = document.cloneNode(true); + const readability = new Readability(documentCopy, { + serializer: el => el // so that .content is returned as DOM element instead of HTML + }); + + const article = readability.parse(); + + if (!article) { + throw new Error('Could not parse HTML document with Readability'); + } + + return { + title: article.title, + body: article.content, + } + } + + function getDocumentDates() { + var dates = { + publishedDate: null, + modifiedDate: null, + }; + + const articlePublishedTime = document.querySelector("meta[property='article:published_time']"); + if (articlePublishedTime && articlePublishedTime.getAttribute('content')) { + dates.publishedDate = new Date(articlePublishedTime.getAttribute('content')); + } + + const articleModifiedTime = document.querySelector("meta[property='article:modified_time']"); + if (articleModifiedTime && articleModifiedTime.getAttribute('content')) { + dates.modifiedDate = new Date(articleModifiedTime.getAttribute('content')); + } + + // TODO: if we didn't get dates from meta, then try to get them from JSON-LD + + return dates; + } + + function getRectangleArea() { + return new Promise((resolve, reject) => { + const overlay = document.createElement('div'); + overlay.style.opacity = '0.6'; + overlay.style.background = 'black'; + overlay.style.width = '100%'; + overlay.style.height = '100%'; + overlay.style.zIndex = 99999999; + overlay.style.top = 0; + overlay.style.left = 0; + overlay.style.position = 'fixed'; + + document.body.appendChild(overlay); + + const messageComp = document.createElement('div'); + + const messageCompWidth = 300; + messageComp.setAttribute("tabindex", "0"); // so that it can be focused + messageComp.style.position = 'fixed'; + messageComp.style.opacity = '0.95'; + messageComp.style.fontSize = '14px'; + messageComp.style.width = messageCompWidth + 'px'; + messageComp.style.maxWidth = messageCompWidth + 'px'; + messageComp.style.border = '1px solid black'; + messageComp.style.background = 'white'; + messageComp.style.color = 'black'; + messageComp.style.top = '10px'; + messageComp.style.textAlign = 'center'; + messageComp.style.padding = '10px'; + messageComp.style.left = Math.round(document.body.clientWidth / 2 - messageCompWidth / 2) + 'px'; + messageComp.style.zIndex = overlay.style.zIndex + 1; + + messageComp.textContent = 'Drag and release to capture a screenshot'; + + document.body.appendChild(messageComp); + + const selection = document.createElement('div'); + selection.style.opacity = '0.5'; + selection.style.border = '1px solid red'; + selection.style.background = 'white'; + selection.style.border = '2px solid black'; + selection.style.zIndex = overlay.style.zIndex - 1; + selection.style.top = 0; + selection.style.left = 0; + selection.style.position = 'fixed'; + + document.body.appendChild(selection); + + messageComp.focus(); // we listen on keypresses on this element to cancel on escape + + let isDragging = false; + let draggingStartPos = null; + let selectionArea = {}; + + function updateSelection() { + selection.style.left = selectionArea.x + 'px'; + selection.style.top = selectionArea.y + 'px'; + selection.style.width = selectionArea.width + 'px'; + selection.style.height = selectionArea.height + 'px'; + } + + function setSelectionSizeFromMouse(event) { + if (event.clientX < draggingStartPos.x) { + selectionArea.x = event.clientX; + } + + if (event.clientY < draggingStartPos.y) { + selectionArea.y = event.clientY; + } + + selectionArea.width = Math.max(1, Math.abs(event.clientX - draggingStartPos.x)); + selectionArea.height = Math.max(1, Math.abs(event.clientY - draggingStartPos.y)); + updateSelection(); + } + + function selection_mouseDown(event) { + selectionArea = {x: event.clientX, y: event.clientY, width: 0, height: 0}; + draggingStartPos = {x: event.clientX, y: event.clientY}; + isDragging = true; + updateSelection(); + } + + function selection_mouseMove(event) { + if (!isDragging) return; + setSelectionSizeFromMouse(event); + } + + function removeOverlay() { + isDragging = false; + + overlay.removeEventListener('mousedown', selection_mouseDown); + overlay.removeEventListener('mousemove', selection_mouseMove); + overlay.removeEventListener('mouseup', selection_mouseUp); + + document.body.removeChild(overlay); + document.body.removeChild(selection); + document.body.removeChild(messageComp); + } + + function selection_mouseUp(event) { + setSelectionSizeFromMouse(event); + + removeOverlay(); + + console.info('selectionArea:', selectionArea); + + if (!selectionArea || !selectionArea.width || !selectionArea.height) { + return; + } + + // Need to wait a bit before taking the screenshot to make sure + // the overlays have been removed and don't appear in the + // screenshot. 10ms is not enough. + setTimeout(() => resolve(selectionArea), 100); + } + + function cancel(event) { + if (event.key === "Escape") { + removeOverlay(); + } + } + + overlay.addEventListener('mousedown', selection_mouseDown); + overlay.addEventListener('mousemove', selection_mouseMove); + overlay.addEventListener('mouseup', selection_mouseUp); + overlay.addEventListener('mouseup', selection_mouseUp); + messageComp.addEventListener('keydown', cancel); + }); + } + + function makeLinksAbsolute(container) { + for (const link of container.getElementsByTagName('a')) { + if (link.href) { + link.href = absoluteUrl(link.href); + } + } + } + + function getImages(container) { + const images = []; + + for (const img of container.getElementsByTagName('img')) { + if (!img.src) { + continue; + } + + const existingImage = images.find(image => image.src === img.src); + + if (existingImage) { + img.src = existingImage.imageId; + } + else { + const imageId = randomString(20); + + images.push({ + imageId: imageId, + src: img.src + }); + + img.src = imageId; + } + } + + return images; + } + + function createLink(clickAction, text, color = "lightskyblue") { + const link = document.createElement('a'); + link.href = "javascript:"; + link.style.color = color; + link.appendChild(document.createTextNode(text)); + link.addEventListener("click", () => { + browser.runtime.sendMessage(null, clickAction) + }); + + return link + } + + async function prepareMessageResponse(message) { + console.info('Message: ' + message.name); + + if (message.name === "toast") { + let messageText; + + if (message.noteId) { + messageText = document.createElement('p'); + messageText.setAttribute("style", "padding: 0; margin: 0; font-size: larger;") + messageText.appendChild(document.createTextNode(message.message + " ")); + messageText.appendChild(createLink( + {name: 'openNoteInTrilium', noteId: message.noteId}, + "Open in Trilium." + )); + + // only after saving tabs + if (message.tabIds) { + messageText.appendChild(document.createElement("br")); + messageText.appendChild(createLink( + {name: 'closeTabs', tabIds: message.tabIds}, + "Close saved tabs.", + "tomato" + )); + } + } + else { + messageText = message.message; + } + + await requireLib('/lib/toast.js'); + + showToast(messageText, { + settings: { + duration: 7000 + } + }); + } + else if (message.name === "trilium-save-selection") { + const container = document.createElement('div'); + + const selection = window.getSelection(); + + for (let i = 0; i < selection.rangeCount; i++) { + const range = selection.getRangeAt(i); + + container.appendChild(range.cloneContents()); + } + + makeLinksAbsolute(container); + + const images = getImages(container); + + return { + title: pageTitle(), + content: container.innerHTML, + images: images, + pageUrl: getPageLocationOrigin() + location.pathname + location.search + location.hash + }; + + } + else if (message.name === 'trilium-get-rectangle-for-screenshot') { + return getRectangleArea(); + } + else if (message.name === "trilium-save-page") { + await requireLib("/lib/JSDOMParser.js"); + await requireLib("/lib/Readability.js"); + await requireLib("/lib/Readability-readerable.js"); + + const {title, body} = getReadableDocument(); + + makeLinksAbsolute(body); + + const images = getImages(body); + + var labels = {}; + const dates = getDocumentDates(); + if (dates.publishedDate) { + labels['publishedDate'] = dates.publishedDate.toISOString().substring(0, 10); + } + if (dates.modifiedDate) { + labels['modifiedDate'] = dates.publishedDate.toISOString().substring(0, 10); + } + + return { + title: title, + content: body.innerHTML, + images: images, + pageUrl: getPageLocationOrigin() + location.pathname + location.search, + clipType: 'page', + labels: labels + }; + } + else { + throw new Error('Unknown command: ' + JSON.stringify(message)); + } + } + + const loadedLibs = []; + + async function requireLib(libPath) { + if (!loadedLibs.includes(libPath)) { + loadedLibs.push(libPath); + + await browser.runtime.sendMessage({name: 'load-script', file: libPath}); + } + } + + browser.runtime.onMessage.addListener(prepareMessageResponse); + } +}); diff --git a/apps/web-clipper/manifest.json b/apps/web-clipper/manifest.json index 8e0c1ba2bc..70da3d1b1b 100644 --- a/apps/web-clipper/manifest.json +++ b/apps/web-clipper/manifest.json @@ -26,9 +26,6 @@ }, "content_scripts": [ { - "matches": [ - "<all_urls>" - ], "js": [ "lib/browser-polyfill.js", "utils.js" From ab95f6dcc2e086ad08367f28ecd03fbbcb0dea1c Mon Sep 17 00:00:00 2001 From: Elian Doran <contact@eliandoran.me> Date: Sat, 24 Jan 2026 10:08:29 +0200 Subject: [PATCH 202/353] fix(web-clipper): script imports --- apps/web-clipper/entrypoints/options/index.html | 6 +++--- apps/web-clipper/entrypoints/popup/index.html | 10 +++++----- apps/web-clipper/entrypoints/popup/popup.js | 4 +++- 3 files changed, 11 insertions(+), 9 deletions(-) diff --git a/apps/web-clipper/entrypoints/options/index.html b/apps/web-clipper/entrypoints/options/index.html index 2363567a5e..16e084ded9 100644 --- a/apps/web-clipper/entrypoints/options/index.html +++ b/apps/web-clipper/entrypoints/options/index.html @@ -54,9 +54,9 @@ <p>Note that the entered password is not stored anywhere, it will be only used to retrieve an authorization token from the server instance which will be then used to send the clipped notes.</p> </form> -<script src="../lib/cash.min.js"></script> -<script src="../lib/browser-polyfill.js"></script> -<script src="options.js"></script> +<script type="module" src="../../lib/cash.min.js"></script> +<script type="module" src="../../lib/browser-polyfill.js"></script> +<script type="module" src="index.js"></script> </body> diff --git a/apps/web-clipper/entrypoints/popup/index.html b/apps/web-clipper/entrypoints/popup/index.html index be415744ca..7bd985801f 100644 --- a/apps/web-clipper/entrypoints/popup/index.html +++ b/apps/web-clipper/entrypoints/popup/index.html @@ -46,11 +46,11 @@ <div>Status: <span id="connection-status">unknown</span></div> </div> - <script src="../lib/browser-polyfill.js"></script> - <script src="../lib/cash.min.js"></script> - <script src="popup.js"></script> - <script src="../utils.js"></script> - <script src="../content.js"></script> + <script type="module" src="../../lib/browser-polyfill.js"></script> + <script type="module" src="../../lib/cash.min.js"></script> + <script type="module" src="popup.js"></script> + <script type="module" src="../../utils.js"></script> + <script type="module" src="../../content.js"></script> </body> </html> diff --git a/apps/web-clipper/entrypoints/popup/popup.js b/apps/web-clipper/entrypoints/popup/popup.js index adac36126e..eca8d790e1 100644 --- a/apps/web-clipper/entrypoints/popup/popup.js +++ b/apps/web-clipper/entrypoints/popup/popup.js @@ -1,3 +1,5 @@ +console.log("Popup script loaded"); + async function sendMessage(message) { try { return await browser.runtime.sendMessage(message); @@ -164,7 +166,7 @@ browser.runtime.onMessage.addListener(request => { }else{ $alreadyVisited.html(''); } - + } }); From 22308a101e9b6511cc02a7957d6dca7e955119ed Mon Sep 17 00:00:00 2001 From: Elian Doran <contact@eliandoran.me> Date: Sat, 24 Jan 2026 10:18:59 +0200 Subject: [PATCH 203/353] fix(web-clipper): missing permissions --- apps/web-clipper/manifest.json | 9 --------- apps/web-clipper/wxt.config.js | 15 +++++++++++++++ 2 files changed, 15 insertions(+), 9 deletions(-) create mode 100644 apps/web-clipper/wxt.config.js diff --git a/apps/web-clipper/manifest.json b/apps/web-clipper/manifest.json index 70da3d1b1b..fc7e5b9213 100644 --- a/apps/web-clipper/manifest.json +++ b/apps/web-clipper/manifest.json @@ -10,15 +10,6 @@ "48": "icons/48.png", "96": "icons/96.png" }, - "permissions": [ - "activeTab", - "tabs", - "http://*/", - "https://*/", - "<all_urls>", - "storage", - "contextMenus" - ], "browser_action": { "default_icon": "icons/32.png", "default_title": "Trilium Web Clipper", diff --git a/apps/web-clipper/wxt.config.js b/apps/web-clipper/wxt.config.js new file mode 100644 index 0000000000..5dd59801a1 --- /dev/null +++ b/apps/web-clipper/wxt.config.js @@ -0,0 +1,15 @@ +import { defineConfig } from "vite"; + +export default defineConfig({ + manifest: { + permissions: [ + "activeTab", + "tabs", + "http://*/", + "https://*/", + "<all_urls>", + "storage", + "contextMenus" + ] + } +}); From 957590523c3e16a8dd77958d21d2a07eb47475e2 Mon Sep 17 00:00:00 2001 From: Elian Doran <contact@eliandoran.me> Date: Sat, 24 Jan 2026 10:23:56 +0200 Subject: [PATCH 204/353] fix(web-clipper): integrate trilium server facade --- apps/web-clipper/entrypoints/background/index.js | 4 ++++ .../{ => entrypoints/background}/trilium_server_facade.js | 6 ++---- apps/web-clipper/entrypoints/popup/popup.js | 1 + apps/web-clipper/manifest.json | 3 +-- 4 files changed, 8 insertions(+), 6 deletions(-) rename apps/web-clipper/{ => entrypoints/background}/trilium_server_facade.js (98%) diff --git a/apps/web-clipper/entrypoints/background/index.js b/apps/web-clipper/entrypoints/background/index.js index ee92f709a5..b92bfdb724 100644 --- a/apps/web-clipper/entrypoints/background/index.js +++ b/apps/web-clipper/entrypoints/background/index.js @@ -1,4 +1,8 @@ +import TriliumServerFacade, { isDevEnv } from "./trilium_server_facade"; + export default defineBackground(() => { + const triliumServerFacade = new TriliumServerFacade(); + // Keyboard shortcuts chrome.commands.onCommand.addListener(async function (command) { if (command == "saveSelection") { diff --git a/apps/web-clipper/trilium_server_facade.js b/apps/web-clipper/entrypoints/background/trilium_server_facade.js similarity index 98% rename from apps/web-clipper/trilium_server_facade.js rename to apps/web-clipper/entrypoints/background/trilium_server_facade.js index 6f46893e50..b53b548475 100644 --- a/apps/web-clipper/trilium_server_facade.js +++ b/apps/web-clipper/entrypoints/background/trilium_server_facade.js @@ -1,12 +1,12 @@ const PROTOCOL_VERSION_MAJOR = 1; -function isDevEnv() { +export function isDevEnv() { const manifest = browser.runtime.getManifest(); return manifest.name.endsWith('(dev)'); } -class TriliumServerFacade { +export default class TriliumServerFacade { constructor() { this.triggerSearchForTrilium(); @@ -221,5 +221,3 @@ class TriliumServerFacade { (absoff % 60).toString().padStart(2,'0')); } } - -window.triliumServerFacade = new TriliumServerFacade(); diff --git a/apps/web-clipper/entrypoints/popup/popup.js b/apps/web-clipper/entrypoints/popup/popup.js index eca8d790e1..be571e428a 100644 --- a/apps/web-clipper/entrypoints/popup/popup.js +++ b/apps/web-clipper/entrypoints/popup/popup.js @@ -2,6 +2,7 @@ console.log("Popup script loaded"); async function sendMessage(message) { try { + console.log("Sending message", message); return await browser.runtime.sendMessage(message); } catch (e) { diff --git a/apps/web-clipper/manifest.json b/apps/web-clipper/manifest.json index fc7e5b9213..2a7b80fb41 100644 --- a/apps/web-clipper/manifest.json +++ b/apps/web-clipper/manifest.json @@ -26,8 +26,7 @@ "background": { "scripts": [ "lib/browser-polyfill.js", - "utils.js", - "trilium_server_facade.js" + "utils.js" ] }, "commands": { From a9218960e964dcb7baf7da68858ebe3129f43dc7 Mon Sep 17 00:00:00 2001 From: Elian Doran <contact@eliandoran.me> Date: Sat, 24 Jan 2026 10:40:16 +0200 Subject: [PATCH 205/353] fix(web-clipper): the storage API will not work with a temporary addon ID --- apps/web-clipper/manifest.json | 7 +------ apps/web-clipper/wxt.config.js | 7 ++++++- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/apps/web-clipper/manifest.json b/apps/web-clipper/manifest.json index 2a7b80fb41..59a693e370 100644 --- a/apps/web-clipper/manifest.json +++ b/apps/web-clipper/manifest.json @@ -48,10 +48,5 @@ "default": "Ctrl+Shift+E" } } - }, - "browser_specific_settings": { - "gecko": { - "id": "{1410742d-b377-40e7-a9db-63dc9c6ec99c}" - } - } + } } diff --git a/apps/web-clipper/wxt.config.js b/apps/web-clipper/wxt.config.js index 5dd59801a1..f33731423a 100644 --- a/apps/web-clipper/wxt.config.js +++ b/apps/web-clipper/wxt.config.js @@ -10,6 +10,11 @@ export default defineConfig({ "<all_urls>", "storage", "contextMenus" - ] + ], + browser_specific_settings: { + gecko: { + id: "{1410742d-b377-40e7-a9db-63dc9c6ec99c}" + } + } } }); From 276b3f834bd38a5d4df3391d0943290b6b51b5ad Mon Sep 17 00:00:00 2001 From: Elian Doran <contact@eliandoran.me> Date: Sat, 24 Jan 2026 10:47:41 +0200 Subject: [PATCH 206/353] fix(web-clipper): triliumServerFacade is not defined --- .../web-clipper/entrypoints/background/trilium_server_facade.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/web-clipper/entrypoints/background/trilium_server_facade.js b/apps/web-clipper/entrypoints/background/trilium_server_facade.js index b53b548475..b1a56a7ec4 100644 --- a/apps/web-clipper/entrypoints/background/trilium_server_facade.js +++ b/apps/web-clipper/entrypoints/background/trilium_server_facade.js @@ -132,7 +132,7 @@ export default class TriliumServerFacade { } async triggerSearchNoteByUrl(noteUrl) { - const resp = await triliumServerFacade.callService('GET', 'notes-by-url/' + encodeURIComponent(noteUrl)) + const resp = await this.callService('GET', 'notes-by-url/' + encodeURIComponent(noteUrl)) let newStatus = { status: 'not-found', noteId: null From 17f906fb65e3eaf729fd2b423e98790e65078f4d Mon Sep 17 00:00:00 2001 From: Elian Doran <contact@eliandoran.me> Date: Sat, 24 Jan 2026 10:58:20 +0200 Subject: [PATCH 207/353] chore(web-clipper): reintegrate icon --- .../{icons/96.png => assets/icon.png} | Bin apps/web-clipper/icons/32-dev.png | Bin 6518 -> 0 bytes apps/web-clipper/icons/32.png | Bin 1153 -> 0 bytes apps/web-clipper/icons/48.png | Bin 1654 -> 0 bytes apps/web-clipper/wxt.config.js | 1 + pnpm-lock.yaml | 299 +++++++++++++++++- 6 files changed, 298 insertions(+), 2 deletions(-) rename apps/web-clipper/{icons/96.png => assets/icon.png} (100%) delete mode 100644 apps/web-clipper/icons/32-dev.png delete mode 100644 apps/web-clipper/icons/32.png delete mode 100644 apps/web-clipper/icons/48.png diff --git a/apps/web-clipper/icons/96.png b/apps/web-clipper/assets/icon.png similarity index 100% rename from apps/web-clipper/icons/96.png rename to apps/web-clipper/assets/icon.png diff --git a/apps/web-clipper/icons/32-dev.png b/apps/web-clipper/icons/32-dev.png deleted file mode 100644 index d280a31bbd185a74c85c57fc1becaa380bb13219..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6518 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 diff --git a/apps/web-clipper/icons/32.png b/apps/web-clipper/icons/32.png deleted file mode 100644 index 9aeeb66fe96a83e3abce5748ac88862bccd738b8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1153 zcmV-{1b+L8P)<h;3K|Lk000e1NJLTq001BW001Be1^@s6b9#F80004mX+uL$Nkc;* zaB^>EX>4Tx04R}tkv&MmKpe$i(@Onlaj=7kLx$>PK~%(1t5Adrp;l<s!Q|2}Xws0R zxHt-~1qVMCs}3&Cx;nTDg5U>;o12rOi<J1kq|hSPgX4a@yZ5+z2MF~t)2zTapy{@m zO2oxXc2x|%q6Y!=K|ok$mN6$uNpu`v_we!cF2=JupZjx!)ttoupGZ8*4AUmwAfDc| z4bJ<-5muB{;&b9LlP*a7$aTfzH_io@1)do()2Vsl2(egbW2KE*(bR~ih@+~eQ@)V# zSmnIMSu0mr^Pc>Lp`5<5%ypW>NMI35kRU=q6(y8mBSx!EiiH&I$2<6kT)#vvg<K^t zax9<%4YKP8|AXJ%TKUNdFDVoUx?UXTV+0890*#vEd>=bb;{@<O16O*>U#SB#pQP7X zTJ#9$-v%zOTbi;5T<!paPljyDuH>gF<nzG$8GTb07`O#`*Sy}E`#607($rP*1~@nb zMhld^-r?Qd?Y;ebrrF;Q&N6aku^Uf<00006VoOIv0Pz4=08oX~>}~)6010qNS#tmY z4c7nw4c7reD4Tcy000McNliru<p~EB0UwlPCw2e;02y>eSad^gZEa<4bO1wgWnpw> zWFU8GbZ8()Nlj2!fese{00LP_L_t(o!|j((XcIvc#(xRb3KrBHl(oA^(FjdYC`C{s z1`pMX5<$em3f`np^i=e)2p)_FwI>gvUIYzZJh-0xb6V<3!O(-ah()22)xFe{wpbE~ zmx&D1-Hn87MCgNsnR##C_syF(^LAiO{;{OG?XXnI9|7(II~CP)V8S-NFNqK+Rr2G& z<G(b&VVmCNt`R6z^6!Cs2UGW@y8wQ-4ft&l{#9a|UbQbw;age?xC)#B)(Hof^m4Ei zVtzgXcm#L`T!_#QuG#|M(z3wExUJF4K}uTvO<+nfxdqGuPhz4nWt-kKKw1L-3e305 z3*XY3vLi*E1%}#y&$Yn+5D-qc15Mx)@D#9si@;(CiE4=BZNPQlR1El%ZF-~fK%Z}E z8<k_ZOMEA#@o``aa7Xk<6~{+`G2nCzc*8cmfyj%<x3qZ?!YFBqgj@i0U~Dp%c_kt? z4Ak4Kd>~AbmXd3C$jVf*4d5^^1MCIrw&`Vo<(PS|qrf9CBHz;900&~6?g08HbD3oz z1H6l{%h{&)p`%(La$^zL5TgF3mxDoZ6i0xn6wU9zaohA}yH<>ROB)7`0Y8BUdO2v+ ziiH=z3BWfTcWY0pVXatb0s-(6I0s-jZb!b-9f1E5&FL1n7@tX;K&@CXfc{o?E9yhN zh=3!t>mdX;Crw~TYVQfF&WY!MBoiTHo029lC$;wjD~kR{(gY4F{VPg8NR)u#xGUl> zrzO`ElZC`{z;N6W@K$u!i)z@C&pmq=)QW|(z(a*xs%NLbaNI`%@ZQ?{?!T7b6bqo- Tw838S00000NkvXXu0mjfOh^kB diff --git a/apps/web-clipper/icons/48.png b/apps/web-clipper/icons/48.png deleted file mode 100644 index da66c56f64aacdda06c4d181e9b2ee1cb174f19c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1654 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 AF8}}l diff --git a/apps/web-clipper/wxt.config.js b/apps/web-clipper/wxt.config.js index f33731423a..298165d8c5 100644 --- a/apps/web-clipper/wxt.config.js +++ b/apps/web-clipper/wxt.config.js @@ -1,6 +1,7 @@ import { defineConfig } from "vite"; export default defineConfig({ + modules: ['@wxt-dev/auto-icons'], manifest: { permissions: [ "activeTab", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index cddc67cb8d..d170e3d26d 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -819,6 +819,9 @@ importers: apps/web-clipper: devDependencies: + '@wxt-dev/auto-icons': + specifier: 1.1.0 + version: 1.1.0(wxt@0.20.13(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.31.1)(rollup@4.52.0)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1)) wxt: specifier: 0.20.13 version: 0.20.13(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.31.1)(rollup@4.52.0)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) @@ -3290,6 +3293,143 @@ packages: '@iconify/utils@3.0.1': resolution: {integrity: sha512-A78CUEnFGX8I/WlILxJCuIJXloL0j/OJ9PSchPAfCargEIKmUBWvvEMmKWB5oONwiUqlNt+5eRufdkLxeHIWYw==} + '@img/colour@1.0.0': + resolution: {integrity: sha512-A5P/LfWGFSl6nsckYtjw9da+19jB8hkJ6ACTGcDfEJ0aE+l2n2El7dsVM7UVHZQ9s2lmYMWlrS21YLy2IR1LUw==} + engines: {node: '>=18'} + + '@img/sharp-darwin-arm64@0.34.5': + resolution: {integrity: sha512-imtQ3WMJXbMY4fxb/Ndp6HBTNVtWCUI0WdobyheGf5+ad6xX8VIDO8u2xE4qc/fr08CKG/7dDseFtn6M6g/r3w==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [arm64] + os: [darwin] + + '@img/sharp-darwin-x64@0.34.5': + resolution: {integrity: sha512-YNEFAF/4KQ/PeW0N+r+aVVsoIY0/qxxikF2SWdp+NRkmMB7y9LBZAVqQ4yhGCm/H3H270OSykqmQMKLBhBJDEw==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [x64] + os: [darwin] + + '@img/sharp-libvips-darwin-arm64@1.2.4': + resolution: {integrity: sha512-zqjjo7RatFfFoP0MkQ51jfuFZBnVE2pRiaydKJ1G/rHZvnsrHAOcQALIi9sA5co5xenQdTugCvtb1cuf78Vf4g==} + cpu: [arm64] + os: [darwin] + + '@img/sharp-libvips-darwin-x64@1.2.4': + resolution: {integrity: sha512-1IOd5xfVhlGwX+zXv2N93k0yMONvUlANylbJw1eTah8K/Jtpi15KC+WSiaX/nBmbm2HxRM1gZ0nSdjSsrZbGKg==} + cpu: [x64] + os: [darwin] + + '@img/sharp-libvips-linux-arm64@1.2.4': + resolution: {integrity: sha512-excjX8DfsIcJ10x1Kzr4RcWe1edC9PquDRRPx3YVCvQv+U5p7Yin2s32ftzikXojb1PIFc/9Mt28/y+iRklkrw==} + cpu: [arm64] + os: [linux] + + '@img/sharp-libvips-linux-arm@1.2.4': + resolution: {integrity: sha512-bFI7xcKFELdiNCVov8e44Ia4u2byA+l3XtsAj+Q8tfCwO6BQ8iDojYdvoPMqsKDkuoOo+X6HZA0s0q11ANMQ8A==} + cpu: [arm] + os: [linux] + + '@img/sharp-libvips-linux-ppc64@1.2.4': + resolution: {integrity: sha512-FMuvGijLDYG6lW+b/UvyilUWu5Ayu+3r2d1S8notiGCIyYU/76eig1UfMmkZ7vwgOrzKzlQbFSuQfgm7GYUPpA==} + cpu: [ppc64] + os: [linux] + + '@img/sharp-libvips-linux-riscv64@1.2.4': + resolution: {integrity: sha512-oVDbcR4zUC0ce82teubSm+x6ETixtKZBh/qbREIOcI3cULzDyb18Sr/Wcyx7NRQeQzOiHTNbZFF1UwPS2scyGA==} + cpu: [riscv64] + os: [linux] + + '@img/sharp-libvips-linux-s390x@1.2.4': + resolution: {integrity: sha512-qmp9VrzgPgMoGZyPvrQHqk02uyjA0/QrTO26Tqk6l4ZV0MPWIW6LTkqOIov+J1yEu7MbFQaDpwdwJKhbJvuRxQ==} + cpu: [s390x] + os: [linux] + + '@img/sharp-libvips-linux-x64@1.2.4': + resolution: {integrity: sha512-tJxiiLsmHc9Ax1bz3oaOYBURTXGIRDODBqhveVHonrHJ9/+k89qbLl0bcJns+e4t4rvaNBxaEZsFtSfAdquPrw==} + cpu: [x64] + os: [linux] + + '@img/sharp-libvips-linuxmusl-arm64@1.2.4': + resolution: {integrity: sha512-FVQHuwx1IIuNow9QAbYUzJ+En8KcVm9Lk5+uGUQJHaZmMECZmOlix9HnH7n1TRkXMS0pGxIJokIVB9SuqZGGXw==} + cpu: [arm64] + os: [linux] + + '@img/sharp-libvips-linuxmusl-x64@1.2.4': + resolution: {integrity: sha512-+LpyBk7L44ZIXwz/VYfglaX/okxezESc6UxDSoyo2Ks6Jxc4Y7sGjpgU9s4PMgqgjj1gZCylTieNamqA1MF7Dg==} + cpu: [x64] + os: [linux] + + '@img/sharp-linux-arm64@0.34.5': + resolution: {integrity: sha512-bKQzaJRY/bkPOXyKx5EVup7qkaojECG6NLYswgktOZjaXecSAeCWiZwwiFf3/Y+O1HrauiE3FVsGxFg8c24rZg==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [arm64] + os: [linux] + + '@img/sharp-linux-arm@0.34.5': + resolution: {integrity: sha512-9dLqsvwtg1uuXBGZKsxem9595+ujv0sJ6Vi8wcTANSFpwV/GONat5eCkzQo/1O6zRIkh0m/8+5BjrRr7jDUSZw==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [arm] + os: [linux] + + '@img/sharp-linux-ppc64@0.34.5': + resolution: {integrity: sha512-7zznwNaqW6YtsfrGGDA6BRkISKAAE1Jo0QdpNYXNMHu2+0dTrPflTLNkpc8l7MUP5M16ZJcUvysVWWrMefZquA==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [ppc64] + os: [linux] + + '@img/sharp-linux-riscv64@0.34.5': + resolution: {integrity: sha512-51gJuLPTKa7piYPaVs8GmByo7/U7/7TZOq+cnXJIHZKavIRHAP77e3N2HEl3dgiqdD/w0yUfiJnII77PuDDFdw==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [riscv64] + os: [linux] + + '@img/sharp-linux-s390x@0.34.5': + resolution: {integrity: sha512-nQtCk0PdKfho3eC5MrbQoigJ2gd1CgddUMkabUj+rBevs8tZ2cULOx46E7oyX+04WGfABgIwmMC0VqieTiR4jg==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [s390x] + os: [linux] + + '@img/sharp-linux-x64@0.34.5': + resolution: {integrity: sha512-MEzd8HPKxVxVenwAa+JRPwEC7QFjoPWuS5NZnBt6B3pu7EG2Ge0id1oLHZpPJdn3OQK+BQDiw9zStiHBTJQQQQ==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [x64] + os: [linux] + + '@img/sharp-linuxmusl-arm64@0.34.5': + resolution: {integrity: sha512-fprJR6GtRsMt6Kyfq44IsChVZeGN97gTD331weR1ex1c1rypDEABN6Tm2xa1wE6lYb5DdEnk03NZPqA7Id21yg==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [arm64] + os: [linux] + + '@img/sharp-linuxmusl-x64@0.34.5': + resolution: {integrity: sha512-Jg8wNT1MUzIvhBFxViqrEhWDGzqymo3sV7z7ZsaWbZNDLXRJZoRGrjulp60YYtV4wfY8VIKcWidjojlLcWrd8Q==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [x64] + os: [linux] + + '@img/sharp-wasm32@0.34.5': + resolution: {integrity: sha512-OdWTEiVkY2PHwqkbBI8frFxQQFekHaSSkUIJkwzclWZe64O1X4UlUjqqqLaPbUpMOQk6FBu/HtlGXNblIs0huw==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [wasm32] + + '@img/sharp-win32-arm64@0.34.5': + resolution: {integrity: sha512-WQ3AgWCWYSb2yt+IG8mnC6Jdk9Whs7O0gxphblsLvdhSpSTtmu69ZG1Gkb6NuvxsNACwiPV6cNSZNzt0KPsw7g==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [arm64] + os: [win32] + + '@img/sharp-win32-ia32@0.34.5': + resolution: {integrity: sha512-FV9m/7NmeCmSHDD5j4+4pNI8Cp3aW+JvLoXcTUo0IqyjSfAZJ8dIUmijx1qaJsIiU+Hosw6xM5KijAWRJCSgNg==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [ia32] + os: [win32] + + '@img/sharp-win32-x64@0.34.5': + resolution: {integrity: sha512-+29YMsqY2/9eFEiW93eqWnuLcWcufowXewwSNIT6UwZdUUCrM3oFjMWH/Z6/TMmb4hlFenmfAVbpWeup2jryCw==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [x64] + os: [win32] + '@inquirer/ansi@1.0.2': resolution: {integrity: sha512-S8qNSZiYzFd0wAcyG5AXCvUHC5Sr7xpZ9wZ2py9XR88jUz8wooStVx5M6dRzczbBWjic9NP7+rY0Xi7qqK/aMQ==} engines: {node: '>=18'} @@ -6026,6 +6166,11 @@ packages: '@webext-core/match-patterns@1.0.3': resolution: {integrity: sha512-NY39ACqCxdKBmHgw361M9pfJma8e4AZo20w9AY+5ZjIj1W2dvXC8J31G5fjfOGbulW9w4WKpT8fPooi0mLkn9A==} + '@wxt-dev/auto-icons@1.1.0': + resolution: {integrity: sha512-lDFZjDbrY5gDaapUuUOYTPudE88oB3Z7rTdg0N7iq2WIWga1h0bhzCJDaqNqMvPN2DCYvHFfA0cnqA12vEJjiA==} + peerDependencies: + wxt: '>=0.19.0' + '@wxt-dev/browser@0.1.32': resolution: {integrity: sha512-jvfSppeLzlH4sOkIvMBJoA1pKoI+U5gTkjDwMKdkTWh0P/fj+KDyze3lzo3S6372viCm8tXUKNez+VKyVz2ZDw==} @@ -13066,6 +13211,10 @@ packages: shallowequal@1.1.0: resolution: {integrity: sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==} + sharp@0.34.5: + resolution: {integrity: sha512-Ou9I5Ft9WNcCbXrU9cMgPBcCK8LiwLqcbywW3t4oDV37n1pzpuNLsYiAV8eODnjbtQlSDwZ2cUEeQz4E54Hltg==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + shebang-command@1.2.0: resolution: {integrity: sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==} engines: {node: '>=0.10.0'} @@ -16093,6 +16242,8 @@ snapshots: ckeditor5: 47.4.0 es-toolkit: 1.39.5 fuzzysort: 3.1.0 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-engine@47.4.0': dependencies: @@ -16135,6 +16286,8 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.4.0 '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-export-word@47.4.0': dependencies: @@ -16225,8 +16378,6 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.4.0 '@ckeditor/ckeditor5-widget': 47.4.0 ckeditor5: 47.4.0 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-html-embed@47.4.0': dependencies: @@ -16280,6 +16431,8 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.4.0 '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-indent@47.4.0': dependencies: @@ -16393,6 +16546,8 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 es-toolkit: 1.39.5 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-merge-fields@47.4.0': dependencies: @@ -16405,6 +16560,8 @@ snapshots: '@ckeditor/ckeditor5-widget': 47.4.0 ckeditor5: 47.4.0 es-toolkit: 1.39.5 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-minimap@47.4.0': dependencies: @@ -16413,6 +16570,8 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.4.0 '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-operations-compressor@47.4.0': dependencies: @@ -16586,6 +16745,8 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.4.0 '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-source-editing-enhanced@47.4.0': dependencies: @@ -18108,6 +18269,102 @@ snapshots: transitivePeerDependencies: - supports-color + '@img/colour@1.0.0': {} + + '@img/sharp-darwin-arm64@0.34.5': + optionalDependencies: + '@img/sharp-libvips-darwin-arm64': 1.2.4 + optional: true + + '@img/sharp-darwin-x64@0.34.5': + optionalDependencies: + '@img/sharp-libvips-darwin-x64': 1.2.4 + optional: true + + '@img/sharp-libvips-darwin-arm64@1.2.4': + optional: true + + '@img/sharp-libvips-darwin-x64@1.2.4': + optional: true + + '@img/sharp-libvips-linux-arm64@1.2.4': + optional: true + + '@img/sharp-libvips-linux-arm@1.2.4': + optional: true + + '@img/sharp-libvips-linux-ppc64@1.2.4': + optional: true + + '@img/sharp-libvips-linux-riscv64@1.2.4': + optional: true + + '@img/sharp-libvips-linux-s390x@1.2.4': + optional: true + + '@img/sharp-libvips-linux-x64@1.2.4': + optional: true + + '@img/sharp-libvips-linuxmusl-arm64@1.2.4': + optional: true + + '@img/sharp-libvips-linuxmusl-x64@1.2.4': + optional: true + + '@img/sharp-linux-arm64@0.34.5': + optionalDependencies: + '@img/sharp-libvips-linux-arm64': 1.2.4 + optional: true + + '@img/sharp-linux-arm@0.34.5': + optionalDependencies: + '@img/sharp-libvips-linux-arm': 1.2.4 + optional: true + + '@img/sharp-linux-ppc64@0.34.5': + optionalDependencies: + '@img/sharp-libvips-linux-ppc64': 1.2.4 + optional: true + + '@img/sharp-linux-riscv64@0.34.5': + optionalDependencies: + '@img/sharp-libvips-linux-riscv64': 1.2.4 + optional: true + + '@img/sharp-linux-s390x@0.34.5': + optionalDependencies: + '@img/sharp-libvips-linux-s390x': 1.2.4 + optional: true + + '@img/sharp-linux-x64@0.34.5': + optionalDependencies: + '@img/sharp-libvips-linux-x64': 1.2.4 + optional: true + + '@img/sharp-linuxmusl-arm64@0.34.5': + optionalDependencies: + '@img/sharp-libvips-linuxmusl-arm64': 1.2.4 + optional: true + + '@img/sharp-linuxmusl-x64@0.34.5': + optionalDependencies: + '@img/sharp-libvips-linuxmusl-x64': 1.2.4 + optional: true + + '@img/sharp-wasm32@0.34.5': + dependencies: + '@emnapi/runtime': 1.8.1 + optional: true + + '@img/sharp-win32-arm64@0.34.5': + optional: true + + '@img/sharp-win32-ia32@0.34.5': + optional: true + + '@img/sharp-win32-x64@0.34.5': + optional: true + '@inquirer/ansi@1.0.2': optional: true @@ -21464,6 +21721,13 @@ snapshots: '@webext-core/match-patterns@1.0.3': {} + '@wxt-dev/auto-icons@1.1.0(wxt@0.20.13(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.31.1)(rollup@4.52.0)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1))': + dependencies: + defu: 6.1.4 + fs-extra: 11.3.3 + sharp: 0.34.5 + wxt: 0.20.13(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.31.1)(rollup@4.52.0)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) + '@wxt-dev/browser@0.1.32': dependencies: '@types/filesystem': 0.0.36 @@ -29989,6 +30253,37 @@ snapshots: shallowequal@1.1.0: {} + sharp@0.34.5: + dependencies: + '@img/colour': 1.0.0 + detect-libc: 2.1.2 + semver: 7.7.3 + optionalDependencies: + '@img/sharp-darwin-arm64': 0.34.5 + '@img/sharp-darwin-x64': 0.34.5 + '@img/sharp-libvips-darwin-arm64': 1.2.4 + '@img/sharp-libvips-darwin-x64': 1.2.4 + '@img/sharp-libvips-linux-arm': 1.2.4 + '@img/sharp-libvips-linux-arm64': 1.2.4 + '@img/sharp-libvips-linux-ppc64': 1.2.4 + '@img/sharp-libvips-linux-riscv64': 1.2.4 + '@img/sharp-libvips-linux-s390x': 1.2.4 + '@img/sharp-libvips-linux-x64': 1.2.4 + '@img/sharp-libvips-linuxmusl-arm64': 1.2.4 + '@img/sharp-libvips-linuxmusl-x64': 1.2.4 + '@img/sharp-linux-arm': 0.34.5 + '@img/sharp-linux-arm64': 0.34.5 + '@img/sharp-linux-ppc64': 0.34.5 + '@img/sharp-linux-riscv64': 0.34.5 + '@img/sharp-linux-s390x': 0.34.5 + '@img/sharp-linux-x64': 0.34.5 + '@img/sharp-linuxmusl-arm64': 0.34.5 + '@img/sharp-linuxmusl-x64': 0.34.5 + '@img/sharp-wasm32': 0.34.5 + '@img/sharp-win32-arm64': 0.34.5 + '@img/sharp-win32-ia32': 0.34.5 + '@img/sharp-win32-x64': 0.34.5 + shebang-command@1.2.0: dependencies: shebang-regex: 1.0.0 From 5600a707d321363cc7b39288081b713cebf83bee Mon Sep 17 00:00:00 2001 From: Elian Doran <contact@eliandoran.me> Date: Sat, 24 Jan 2026 10:59:51 +0200 Subject: [PATCH 208/353] chore(web-clipper): reintegrate name and description --- apps/web-clipper/manifest.json | 2 -- apps/web-clipper/wxt.config.js | 2 ++ 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/web-clipper/manifest.json b/apps/web-clipper/manifest.json index 59a693e370..282d5230ab 100644 --- a/apps/web-clipper/manifest.json +++ b/apps/web-clipper/manifest.json @@ -1,8 +1,6 @@ { "manifest_version": 2, - "name": "Trilium Web Clipper (dev)", "version": "1.0.1", - "description": "Save web clippings to Trilium Notes.", "homepage_url": "https://github.com/zadam/trilium-web-clipper", "content_security_policy": "script-src 'self' 'unsafe-eval'; object-src 'self'", "icons": { diff --git a/apps/web-clipper/wxt.config.js b/apps/web-clipper/wxt.config.js index 298165d8c5..ec61bac134 100644 --- a/apps/web-clipper/wxt.config.js +++ b/apps/web-clipper/wxt.config.js @@ -3,6 +3,8 @@ import { defineConfig } from "vite"; export default defineConfig({ modules: ['@wxt-dev/auto-icons'], manifest: { + name: "Trilium Web Clipper", + description: "Save web clippings to Trilium Notes.", permissions: [ "activeTab", "tabs", From c0a2ae99cf3d592b059de7826a98685b47afa254 Mon Sep 17 00:00:00 2001 From: Elian Doran <contact@eliandoran.me> Date: Sat, 24 Jan 2026 11:13:17 +0200 Subject: [PATCH 209/353] fix(web-clipper): toast not working --- apps/web-clipper/entrypoints/background/index.js | 3 --- apps/web-clipper/entrypoints/content/index.js | 12 +----------- 2 files changed, 1 insertion(+), 14 deletions(-) diff --git a/apps/web-clipper/entrypoints/background/index.js b/apps/web-clipper/entrypoints/background/index.js index b92bfdb724..4492e862b6 100644 --- a/apps/web-clipper/entrypoints/background/index.js +++ b/apps/web-clipper/entrypoints/background/index.js @@ -421,9 +421,6 @@ export default defineBackground(() => { else if (request.name === 'closeTabs') { return await browser.tabs.remove(request.tabIds) } - else if (request.name === 'load-script') { - return await browser.tabs.executeScript({file: request.file}); - } else if (request.name === 'save-cropped-screenshot') { const activeTab = await getActiveTab(); diff --git a/apps/web-clipper/entrypoints/content/index.js b/apps/web-clipper/entrypoints/content/index.js index c6ba6c438c..99d30ae6a2 100644 --- a/apps/web-clipper/entrypoints/content/index.js +++ b/apps/web-clipper/entrypoints/content/index.js @@ -275,7 +275,7 @@ export default defineContentScript({ messageText = message.message; } - await requireLib('/lib/toast.js'); + await import("../../lib/toast"); showToast(messageText, { settings: { @@ -343,16 +343,6 @@ export default defineContentScript({ } } - const loadedLibs = []; - - async function requireLib(libPath) { - if (!loadedLibs.includes(libPath)) { - loadedLibs.push(libPath); - - await browser.runtime.sendMessage({name: 'load-script', file: libPath}); - } - } - browser.runtime.onMessage.addListener(prepareMessageResponse); } }); From b5ff71b1a03acbd300554daa9780ba0750c7eb93 Mon Sep 17 00:00:00 2001 From: Elian Doran <contact@eliandoran.me> Date: Sat, 24 Jan 2026 11:25:32 +0200 Subject: [PATCH 210/353] fix(web-clipper): missing utils import --- apps/web-clipper/entrypoints/background/index.js | 1 + apps/web-clipper/entrypoints/content/index.js | 2 ++ apps/web-clipper/manifest.json | 6 ++---- apps/web-clipper/utils.js | 6 +++--- 4 files changed, 8 insertions(+), 7 deletions(-) diff --git a/apps/web-clipper/entrypoints/background/index.js b/apps/web-clipper/entrypoints/background/index.js index 4492e862b6..e8d3c6d038 100644 --- a/apps/web-clipper/entrypoints/background/index.js +++ b/apps/web-clipper/entrypoints/background/index.js @@ -1,3 +1,4 @@ +import { randomString } from "../../utils"; import TriliumServerFacade, { isDevEnv } from "./trilium_server_facade"; export default defineBackground(() => { diff --git a/apps/web-clipper/entrypoints/content/index.js b/apps/web-clipper/entrypoints/content/index.js index 99d30ae6a2..6711223841 100644 --- a/apps/web-clipper/entrypoints/content/index.js +++ b/apps/web-clipper/entrypoints/content/index.js @@ -1,3 +1,5 @@ +import { getBaseUrl, getPageLocationOrigin, randomString } from "../../utils.js"; + export default defineContentScript({ matches: [ "<all_urls>" diff --git a/apps/web-clipper/manifest.json b/apps/web-clipper/manifest.json index 282d5230ab..12694338c9 100644 --- a/apps/web-clipper/manifest.json +++ b/apps/web-clipper/manifest.json @@ -16,15 +16,13 @@ "content_scripts": [ { "js": [ - "lib/browser-polyfill.js", - "utils.js" + "lib/browser-polyfill.js" ] } ], "background": { "scripts": [ - "lib/browser-polyfill.js", - "utils.js" + "lib/browser-polyfill.js" ] }, "commands": { diff --git a/apps/web-clipper/utils.js b/apps/web-clipper/utils.js index 9ec82b2c23..aab69e12cd 100644 --- a/apps/web-clipper/utils.js +++ b/apps/web-clipper/utils.js @@ -1,4 +1,4 @@ -function randomString(len) { +export function randomString(len) { let text = ""; const possible = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"; @@ -9,7 +9,7 @@ function randomString(len) { return text; } -function getBaseUrl() { +export function getBaseUrl() { let output = getPageLocationOrigin() + location.pathname; if (output[output.length - 1] !== '/') { @@ -21,7 +21,7 @@ function getBaseUrl() { return output; } -function getPageLocationOrigin() { +export function getPageLocationOrigin() { // location.origin normally returns the protocol + domain + port (eg. https://example.com:8080) // but for file:// protocol this is browser dependant and in particular Firefox returns "null" in this case. return location.protocol === 'file:' ? 'file://' : location.origin; From 5d07a079efa1d57bc20d917ba92a4ec79f3247c7 Mon Sep 17 00:00:00 2001 From: Elian Doran <contact@eliandoran.me> Date: Sat, 24 Jan 2026 11:46:07 +0200 Subject: [PATCH 211/353] feat(web-clipper): improve error handling for content entrypoint --- apps/web-clipper/entrypoints/content/index.js | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/apps/web-clipper/entrypoints/content/index.js b/apps/web-clipper/entrypoints/content/index.js index 6711223841..72e4815ce6 100644 --- a/apps/web-clipper/entrypoints/content/index.js +++ b/apps/web-clipper/entrypoints/content/index.js @@ -312,10 +312,6 @@ export default defineContentScript({ return getRectangleArea(); } else if (message.name === "trilium-save-page") { - await requireLib("/lib/JSDOMParser.js"); - await requireLib("/lib/Readability.js"); - await requireLib("/lib/Readability-readerable.js"); - const {title, body} = getReadableDocument(); makeLinksAbsolute(body); @@ -345,6 +341,14 @@ export default defineContentScript({ } } - browser.runtime.onMessage.addListener(prepareMessageResponse); + browser.runtime.onMessage.addListener(async (message) => { + try { + const response = await prepareMessageResponse(message); + return response; + } catch (err) { + console.error(err); + throw err; + } + }); } }); From 59f2fc8d033641dbe4b5e8df561c5c26ab38cfa4 Mon Sep 17 00:00:00 2001 From: Elian Doran <contact@eliandoran.me> Date: Sat, 24 Jan 2026 11:53:26 +0200 Subject: [PATCH 212/353] fix(web-clipper): clipping whole page not working --- apps/web-clipper/entrypoints/content/index.js | 1 + apps/web-clipper/lib/Readability.js | 6 +----- 2 files changed, 2 insertions(+), 5 deletions(-) diff --git a/apps/web-clipper/entrypoints/content/index.js b/apps/web-clipper/entrypoints/content/index.js index 72e4815ce6..973172b4e3 100644 --- a/apps/web-clipper/entrypoints/content/index.js +++ b/apps/web-clipper/entrypoints/content/index.js @@ -1,4 +1,5 @@ import { getBaseUrl, getPageLocationOrigin, randomString } from "../../utils.js"; +import Readability from "../../lib/Readability.js"; export default defineContentScript({ matches: [ diff --git a/apps/web-clipper/lib/Readability.js b/apps/web-clipper/lib/Readability.js index ce06df459d..c5335f80b3 100644 --- a/apps/web-clipper/lib/Readability.js +++ b/apps/web-clipper/lib/Readability.js @@ -25,7 +25,7 @@ * @param {HTMLDocument} doc The document to parse. * @param {Object} options The options object. */ -function Readability(doc, options) { +export default function Readability(doc, options) { // In some older versions, people passed a URI as the first argument. Cope: if (options && options.documentElement) { doc = options; @@ -2277,7 +2277,3 @@ Readability.prototype = { }; } }; - -if (typeof module === "object") { - module.exports = Readability; -} From f0b1319f959a76005e2727dc03db00eef6e854a0 Mon Sep 17 00:00:00 2001 From: Elian Doran <contact@eliandoran.me> Date: Sat, 24 Jan 2026 11:54:00 +0200 Subject: [PATCH 213/353] refactor(web-clipper): remove unnecessary libraries --- apps/web-clipper/lib/JSDOMParser.js | 1196 ----------------- .../web-clipper/lib/Readability-readerable.js | 108 -- 2 files changed, 1304 deletions(-) delete mode 100644 apps/web-clipper/lib/JSDOMParser.js delete mode 100644 apps/web-clipper/lib/Readability-readerable.js diff --git a/apps/web-clipper/lib/JSDOMParser.js b/apps/web-clipper/lib/JSDOMParser.js deleted file mode 100644 index 7bfa2acf5b..0000000000 --- a/apps/web-clipper/lib/JSDOMParser.js +++ /dev/null @@ -1,1196 +0,0 @@ -/*eslint-env es6:false*/ -/* This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this file, - * You can obtain one at http://mozilla.org/MPL/2.0/. */ - -/** - * This is a relatively lightweight DOMParser that is safe to use in a web - * worker. This is far from a complete DOM implementation; however, it should - * contain the minimal set of functionality necessary for Readability.js. - * - * Aside from not implementing the full DOM API, there are other quirks to be - * aware of when using the JSDOMParser: - * - * 1) Properly formed HTML/XML must be used. This means you should be extra - * careful when using this parser on anything received directly from an - * XMLHttpRequest. Providing a serialized string from an XMLSerializer, - * however, should be safe (since the browser's XMLSerializer should - * generate valid HTML/XML). Therefore, if parsing a document from an XHR, - * the recommended approach is to do the XHR in the main thread, use - * XMLSerializer.serializeToString() on the responseXML, and pass the - * resulting string to the worker. - * - * 2) Live NodeLists are not supported. DOM methods and properties such as - * getElementsByTagName() and childNodes return standard arrays. If you - * want these lists to be updated when nodes are removed or added to the - * document, you must take care to manually update them yourself. - */ -(function (global) { - - // XML only defines these and the numeric ones: - - var entityTable = { - "lt": "<", - "gt": ">", - "amp": "&", - "quot": '"', - "apos": "'", - }; - - var reverseEntityTable = { - "<": "<", - ">": ">", - "&": "&", - '"': """, - "'": "'", - }; - - function encodeTextContentHTML(s) { - return s.replace(/[&<>]/g, function(x) { - return reverseEntityTable[x]; - }); - } - - function encodeHTML(s) { - return s.replace(/[&<>'"]/g, function(x) { - return reverseEntityTable[x]; - }); - } - - function decodeHTML(str) { - return str.replace(/&(quot|amp|apos|lt|gt);/g, function(match, tag) { - return entityTable[tag]; - }).replace(/&#(?:x([0-9a-z]{1,4})|([0-9]{1,4}));/gi, function(match, hex, numStr) { - var num = parseInt(hex || numStr, hex ? 16 : 10); // read num - return String.fromCharCode(num); - }); - } - - // When a style is set in JS, map it to the corresponding CSS attribute - var styleMap = { - "alignmentBaseline": "alignment-baseline", - "background": "background", - "backgroundAttachment": "background-attachment", - "backgroundClip": "background-clip", - "backgroundColor": "background-color", - "backgroundImage": "background-image", - "backgroundOrigin": "background-origin", - "backgroundPosition": "background-position", - "backgroundPositionX": "background-position-x", - "backgroundPositionY": "background-position-y", - "backgroundRepeat": "background-repeat", - "backgroundRepeatX": "background-repeat-x", - "backgroundRepeatY": "background-repeat-y", - "backgroundSize": "background-size", - "baselineShift": "baseline-shift", - "border": "border", - "borderBottom": "border-bottom", - "borderBottomColor": "border-bottom-color", - "borderBottomLeftRadius": "border-bottom-left-radius", - "borderBottomRightRadius": "border-bottom-right-radius", - "borderBottomStyle": "border-bottom-style", - "borderBottomWidth": "border-bottom-width", - "borderCollapse": "border-collapse", - "borderColor": "border-color", - "borderImage": "border-image", - "borderImageOutset": "border-image-outset", - "borderImageRepeat": "border-image-repeat", - "borderImageSlice": "border-image-slice", - "borderImageSource": "border-image-source", - "borderImageWidth": "border-image-width", - "borderLeft": "border-left", - "borderLeftColor": "border-left-color", - "borderLeftStyle": "border-left-style", - "borderLeftWidth": "border-left-width", - "borderRadius": "border-radius", - "borderRight": "border-right", - "borderRightColor": "border-right-color", - "borderRightStyle": "border-right-style", - "borderRightWidth": "border-right-width", - "borderSpacing": "border-spacing", - "borderStyle": "border-style", - "borderTop": "border-top", - "borderTopColor": "border-top-color", - "borderTopLeftRadius": "border-top-left-radius", - "borderTopRightRadius": "border-top-right-radius", - "borderTopStyle": "border-top-style", - "borderTopWidth": "border-top-width", - "borderWidth": "border-width", - "bottom": "bottom", - "boxShadow": "box-shadow", - "boxSizing": "box-sizing", - "captionSide": "caption-side", - "clear": "clear", - "clip": "clip", - "clipPath": "clip-path", - "clipRule": "clip-rule", - "color": "color", - "colorInterpolation": "color-interpolation", - "colorInterpolationFilters": "color-interpolation-filters", - "colorProfile": "color-profile", - "colorRendering": "color-rendering", - "content": "content", - "counterIncrement": "counter-increment", - "counterReset": "counter-reset", - "cursor": "cursor", - "direction": "direction", - "display": "display", - "dominantBaseline": "dominant-baseline", - "emptyCells": "empty-cells", - "enableBackground": "enable-background", - "fill": "fill", - "fillOpacity": "fill-opacity", - "fillRule": "fill-rule", - "filter": "filter", - "cssFloat": "float", - "floodColor": "flood-color", - "floodOpacity": "flood-opacity", - "font": "font", - "fontFamily": "font-family", - "fontSize": "font-size", - "fontStretch": "font-stretch", - "fontStyle": "font-style", - "fontVariant": "font-variant", - "fontWeight": "font-weight", - "glyphOrientationHorizontal": "glyph-orientation-horizontal", - "glyphOrientationVertical": "glyph-orientation-vertical", - "height": "height", - "imageRendering": "image-rendering", - "kerning": "kerning", - "left": "left", - "letterSpacing": "letter-spacing", - "lightingColor": "lighting-color", - "lineHeight": "line-height", - "listStyle": "list-style", - "listStyleImage": "list-style-image", - "listStylePosition": "list-style-position", - "listStyleType": "list-style-type", - "margin": "margin", - "marginBottom": "margin-bottom", - "marginLeft": "margin-left", - "marginRight": "margin-right", - "marginTop": "margin-top", - "marker": "marker", - "markerEnd": "marker-end", - "markerMid": "marker-mid", - "markerStart": "marker-start", - "mask": "mask", - "maxHeight": "max-height", - "maxWidth": "max-width", - "minHeight": "min-height", - "minWidth": "min-width", - "opacity": "opacity", - "orphans": "orphans", - "outline": "outline", - "outlineColor": "outline-color", - "outlineOffset": "outline-offset", - "outlineStyle": "outline-style", - "outlineWidth": "outline-width", - "overflow": "overflow", - "overflowX": "overflow-x", - "overflowY": "overflow-y", - "padding": "padding", - "paddingBottom": "padding-bottom", - "paddingLeft": "padding-left", - "paddingRight": "padding-right", - "paddingTop": "padding-top", - "page": "page", - "pageBreakAfter": "page-break-after", - "pageBreakBefore": "page-break-before", - "pageBreakInside": "page-break-inside", - "pointerEvents": "pointer-events", - "position": "position", - "quotes": "quotes", - "resize": "resize", - "right": "right", - "shapeRendering": "shape-rendering", - "size": "size", - "speak": "speak", - "src": "src", - "stopColor": "stop-color", - "stopOpacity": "stop-opacity", - "stroke": "stroke", - "strokeDasharray": "stroke-dasharray", - "strokeDashoffset": "stroke-dashoffset", - "strokeLinecap": "stroke-linecap", - "strokeLinejoin": "stroke-linejoin", - "strokeMiterlimit": "stroke-miterlimit", - "strokeOpacity": "stroke-opacity", - "strokeWidth": "stroke-width", - "tableLayout": "table-layout", - "textAlign": "text-align", - "textAnchor": "text-anchor", - "textDecoration": "text-decoration", - "textIndent": "text-indent", - "textLineThrough": "text-line-through", - "textLineThroughColor": "text-line-through-color", - "textLineThroughMode": "text-line-through-mode", - "textLineThroughStyle": "text-line-through-style", - "textLineThroughWidth": "text-line-through-width", - "textOverflow": "text-overflow", - "textOverline": "text-overline", - "textOverlineColor": "text-overline-color", - "textOverlineMode": "text-overline-mode", - "textOverlineStyle": "text-overline-style", - "textOverlineWidth": "text-overline-width", - "textRendering": "text-rendering", - "textShadow": "text-shadow", - "textTransform": "text-transform", - "textUnderline": "text-underline", - "textUnderlineColor": "text-underline-color", - "textUnderlineMode": "text-underline-mode", - "textUnderlineStyle": "text-underline-style", - "textUnderlineWidth": "text-underline-width", - "top": "top", - "unicodeBidi": "unicode-bidi", - "unicodeRange": "unicode-range", - "vectorEffect": "vector-effect", - "verticalAlign": "vertical-align", - "visibility": "visibility", - "whiteSpace": "white-space", - "widows": "widows", - "width": "width", - "wordBreak": "word-break", - "wordSpacing": "word-spacing", - "wordWrap": "word-wrap", - "writingMode": "writing-mode", - "zIndex": "z-index", - "zoom": "zoom", - }; - - // Elements that can be self-closing - var voidElems = { - "area": true, - "base": true, - "br": true, - "col": true, - "command": true, - "embed": true, - "hr": true, - "img": true, - "input": true, - "link": true, - "meta": true, - "param": true, - "source": true, - "wbr": true - }; - - var whitespace = [" ", "\t", "\n", "\r"]; - - // See https://developer.mozilla.org/en-US/docs/Web/API/Node/nodeType - var nodeTypes = { - ELEMENT_NODE: 1, - ATTRIBUTE_NODE: 2, - TEXT_NODE: 3, - CDATA_SECTION_NODE: 4, - ENTITY_REFERENCE_NODE: 5, - ENTITY_NODE: 6, - PROCESSING_INSTRUCTION_NODE: 7, - COMMENT_NODE: 8, - DOCUMENT_NODE: 9, - DOCUMENT_TYPE_NODE: 10, - DOCUMENT_FRAGMENT_NODE: 11, - NOTATION_NODE: 12 - }; - - function getElementsByTagName(tag) { - tag = tag.toUpperCase(); - var elems = []; - var allTags = (tag === "*"); - function getElems(node) { - var length = node.children.length; - for (var i = 0; i < length; i++) { - var child = node.children[i]; - if (allTags || (child.tagName === tag)) - elems.push(child); - getElems(child); - } - } - getElems(this); - elems._isLiveNodeList = true; - return elems; - } - - var Node = function () {}; - - Node.prototype = { - attributes: null, - childNodes: null, - localName: null, - nodeName: null, - parentNode: null, - textContent: null, - nextSibling: null, - previousSibling: null, - - get firstChild() { - return this.childNodes[0] || null; - }, - - get firstElementChild() { - return this.children[0] || null; - }, - - get lastChild() { - return this.childNodes[this.childNodes.length - 1] || null; - }, - - get lastElementChild() { - return this.children[this.children.length - 1] || null; - }, - - appendChild: function (child) { - if (child.parentNode) { - child.parentNode.removeChild(child); - } - - var last = this.lastChild; - if (last) - last.nextSibling = child; - child.previousSibling = last; - - if (child.nodeType === Node.ELEMENT_NODE) { - child.previousElementSibling = this.children[this.children.length - 1] || null; - this.children.push(child); - child.previousElementSibling && (child.previousElementSibling.nextElementSibling = child); - } - this.childNodes.push(child); - child.parentNode = this; - }, - - removeChild: function (child) { - var childNodes = this.childNodes; - var childIndex = childNodes.indexOf(child); - if (childIndex === -1) { - throw "removeChild: node not found"; - } else { - child.parentNode = null; - var prev = child.previousSibling; - var next = child.nextSibling; - if (prev) - prev.nextSibling = next; - if (next) - next.previousSibling = prev; - - if (child.nodeType === Node.ELEMENT_NODE) { - prev = child.previousElementSibling; - next = child.nextElementSibling; - if (prev) - prev.nextElementSibling = next; - if (next) - next.previousElementSibling = prev; - this.children.splice(this.children.indexOf(child), 1); - } - - child.previousSibling = child.nextSibling = null; - child.previousElementSibling = child.nextElementSibling = null; - - return childNodes.splice(childIndex, 1)[0]; - } - }, - - replaceChild: function (newNode, oldNode) { - var childNodes = this.childNodes; - var childIndex = childNodes.indexOf(oldNode); - if (childIndex === -1) { - throw "replaceChild: node not found"; - } else { - // This will take care of updating the new node if it was somewhere else before: - if (newNode.parentNode) - newNode.parentNode.removeChild(newNode); - - childNodes[childIndex] = newNode; - - // update the new node's sibling properties, and its new siblings' sibling properties - newNode.nextSibling = oldNode.nextSibling; - newNode.previousSibling = oldNode.previousSibling; - if (newNode.nextSibling) - newNode.nextSibling.previousSibling = newNode; - if (newNode.previousSibling) - newNode.previousSibling.nextSibling = newNode; - - newNode.parentNode = this; - - // Now deal with elements before we clear out those values for the old node, - // because it can help us take shortcuts here: - if (newNode.nodeType === Node.ELEMENT_NODE) { - if (oldNode.nodeType === Node.ELEMENT_NODE) { - // Both were elements, which makes this easier, we just swap things out: - newNode.previousElementSibling = oldNode.previousElementSibling; - newNode.nextElementSibling = oldNode.nextElementSibling; - if (newNode.previousElementSibling) - newNode.previousElementSibling.nextElementSibling = newNode; - if (newNode.nextElementSibling) - newNode.nextElementSibling.previousElementSibling = newNode; - this.children[this.children.indexOf(oldNode)] = newNode; - } else { - // Hard way: - newNode.previousElementSibling = (function() { - for (var i = childIndex - 1; i >= 0; i--) { - if (childNodes[i].nodeType === Node.ELEMENT_NODE) - return childNodes[i]; - } - return null; - })(); - if (newNode.previousElementSibling) { - newNode.nextElementSibling = newNode.previousElementSibling.nextElementSibling; - } else { - newNode.nextElementSibling = (function() { - for (var i = childIndex + 1; i < childNodes.length; i++) { - if (childNodes[i].nodeType === Node.ELEMENT_NODE) - return childNodes[i]; - } - return null; - })(); - } - if (newNode.previousElementSibling) - newNode.previousElementSibling.nextElementSibling = newNode; - if (newNode.nextElementSibling) - newNode.nextElementSibling.previousElementSibling = newNode; - - if (newNode.nextElementSibling) - this.children.splice(this.children.indexOf(newNode.nextElementSibling), 0, newNode); - else - this.children.push(newNode); - } - } else if (oldNode.nodeType === Node.ELEMENT_NODE) { - // new node is not an element node. - // if the old one was, update its element siblings: - if (oldNode.previousElementSibling) - oldNode.previousElementSibling.nextElementSibling = oldNode.nextElementSibling; - if (oldNode.nextElementSibling) - oldNode.nextElementSibling.previousElementSibling = oldNode.previousElementSibling; - this.children.splice(this.children.indexOf(oldNode), 1); - - // If the old node wasn't an element, neither the new nor the old node was an element, - // and the children array and its members shouldn't need any updating. - } - - - oldNode.parentNode = null; - oldNode.previousSibling = null; - oldNode.nextSibling = null; - if (oldNode.nodeType === Node.ELEMENT_NODE) { - oldNode.previousElementSibling = null; - oldNode.nextElementSibling = null; - } - return oldNode; - } - }, - - __JSDOMParser__: true, - }; - - for (var nodeType in nodeTypes) { - Node[nodeType] = Node.prototype[nodeType] = nodeTypes[nodeType]; - } - - var Attribute = function (name, value) { - this.name = name; - this._value = value; - }; - - Attribute.prototype = { - get value() { - return this._value; - }, - setValue: function(newValue) { - this._value = newValue; - }, - getEncodedValue: function() { - return encodeHTML(this._value); - }, - }; - - var Comment = function () { - this.childNodes = []; - }; - - Comment.prototype = { - __proto__: Node.prototype, - - nodeName: "#comment", - nodeType: Node.COMMENT_NODE - }; - - var Text = function () { - this.childNodes = []; - }; - - Text.prototype = { - __proto__: Node.prototype, - - nodeName: "#text", - nodeType: Node.TEXT_NODE, - get textContent() { - if (typeof this._textContent === "undefined") { - this._textContent = decodeHTML(this._innerHTML || ""); - } - return this._textContent; - }, - get innerHTML() { - if (typeof this._innerHTML === "undefined") { - this._innerHTML = encodeTextContentHTML(this._textContent || ""); - } - return this._innerHTML; - }, - - set innerHTML(newHTML) { - this._innerHTML = newHTML; - delete this._textContent; - }, - set textContent(newText) { - this._textContent = newText; - delete this._innerHTML; - }, - }; - - var Document = function (url) { - this.documentURI = url; - this.styleSheets = []; - this.childNodes = []; - this.children = []; - }; - - Document.prototype = { - __proto__: Node.prototype, - - nodeName: "#document", - nodeType: Node.DOCUMENT_NODE, - title: "", - - getElementsByTagName: getElementsByTagName, - - getElementById: function (id) { - function getElem(node) { - var length = node.children.length; - if (node.id === id) - return node; - for (var i = 0; i < length; i++) { - var el = getElem(node.children[i]); - if (el) - return el; - } - return null; - } - return getElem(this); - }, - - createElement: function (tag) { - var node = new Element(tag); - return node; - }, - - createTextNode: function (text) { - var node = new Text(); - node.textContent = text; - return node; - }, - - get baseURI() { - if (!this.hasOwnProperty("_baseURI")) { - this._baseURI = this.documentURI; - var baseElements = this.getElementsByTagName("base"); - var href = baseElements[0] && baseElements[0].getAttribute("href"); - if (href) { - try { - this._baseURI = (new URL(href, this._baseURI)).href; - } catch (ex) {/* Just fall back to documentURI */} - } - } - return this._baseURI; - }, - }; - - var Element = function (tag) { - // We use this to find the closing tag. - this._matchingTag = tag; - // We're explicitly a non-namespace aware parser, we just pretend it's all HTML. - var lastColonIndex = tag.lastIndexOf(":"); - if (lastColonIndex != -1) { - tag = tag.substring(lastColonIndex + 1); - } - this.attributes = []; - this.childNodes = []; - this.children = []; - this.nextElementSibling = this.previousElementSibling = null; - this.localName = tag.toLowerCase(); - this.tagName = tag.toUpperCase(); - this.style = new Style(this); - }; - - Element.prototype = { - __proto__: Node.prototype, - - nodeType: Node.ELEMENT_NODE, - - getElementsByTagName: getElementsByTagName, - - get className() { - return this.getAttribute("class") || ""; - }, - - set className(str) { - this.setAttribute("class", str); - }, - - get id() { - return this.getAttribute("id") || ""; - }, - - set id(str) { - this.setAttribute("id", str); - }, - - get href() { - return this.getAttribute("href") || ""; - }, - - set href(str) { - this.setAttribute("href", str); - }, - - get src() { - return this.getAttribute("src") || ""; - }, - - set src(str) { - this.setAttribute("src", str); - }, - - get srcset() { - return this.getAttribute("srcset") || ""; - }, - - set srcset(str) { - this.setAttribute("srcset", str); - }, - - get nodeName() { - return this.tagName; - }, - - get innerHTML() { - function getHTML(node) { - var i = 0; - for (i = 0; i < node.childNodes.length; i++) { - var child = node.childNodes[i]; - if (child.localName) { - arr.push("<" + child.localName); - - // serialize attribute list - for (var j = 0; j < child.attributes.length; j++) { - var attr = child.attributes[j]; - // the attribute value will be HTML escaped. - var val = attr.getEncodedValue(); - var quote = (val.indexOf('"') === -1 ? '"' : "'"); - arr.push(" " + attr.name + "=" + quote + val + quote); - } - - if (child.localName in voidElems && !child.childNodes.length) { - // if this is a self-closing element, end it here - arr.push("/>"); - } else { - // otherwise, add its children - arr.push(">"); - getHTML(child); - arr.push("</" + child.localName + ">"); - } - } else { - // This is a text node, so asking for innerHTML won't recurse. - arr.push(child.innerHTML); - } - } - } - - // Using Array.join() avoids the overhead from lazy string concatenation. - var arr = []; - getHTML(this); - return arr.join(""); - }, - - set innerHTML(html) { - var parser = new JSDOMParser(); - var node = parser.parse(html); - var i; - for (i = this.childNodes.length; --i >= 0;) { - this.childNodes[i].parentNode = null; - } - this.childNodes = node.childNodes; - this.children = node.children; - for (i = this.childNodes.length; --i >= 0;) { - this.childNodes[i].parentNode = this; - } - }, - - set textContent(text) { - // clear parentNodes for existing children - for (var i = this.childNodes.length; --i >= 0;) { - this.childNodes[i].parentNode = null; - } - - var node = new Text(); - this.childNodes = [ node ]; - this.children = []; - node.textContent = text; - node.parentNode = this; - }, - - get textContent() { - function getText(node) { - var nodes = node.childNodes; - for (var i = 0; i < nodes.length; i++) { - var child = nodes[i]; - if (child.nodeType === 3) { - text.push(child.textContent); - } else { - getText(child); - } - } - } - - // Using Array.join() avoids the overhead from lazy string concatenation. - // See http://blog.cdleary.com/2012/01/string-representation-in-spidermonkey/#ropes - var text = []; - getText(this); - return text.join(""); - }, - - getAttribute: function (name) { - for (var i = this.attributes.length; --i >= 0;) { - var attr = this.attributes[i]; - if (attr.name === name) { - return attr.value; - } - } - return undefined; - }, - - setAttribute: function (name, value) { - for (var i = this.attributes.length; --i >= 0;) { - var attr = this.attributes[i]; - if (attr.name === name) { - attr.setValue(value); - return; - } - } - this.attributes.push(new Attribute(name, value)); - }, - - removeAttribute: function (name) { - for (var i = this.attributes.length; --i >= 0;) { - var attr = this.attributes[i]; - if (attr.name === name) { - this.attributes.splice(i, 1); - break; - } - } - }, - - hasAttribute: function (name) { - return this.attributes.some(function (attr) { - return attr.name == name; - }); - }, - }; - - var Style = function (node) { - this.node = node; - }; - - // getStyle() and setStyle() use the style attribute string directly. This - // won't be very efficient if there are a lot of style manipulations, but - // it's the easiest way to make sure the style attribute string and the JS - // style property stay in sync. Readability.js doesn't do many style - // manipulations, so this should be okay. - Style.prototype = { - getStyle: function (styleName) { - var attr = this.node.getAttribute("style"); - if (!attr) - return undefined; - - var styles = attr.split(";"); - for (var i = 0; i < styles.length; i++) { - var style = styles[i].split(":"); - var name = style[0].trim(); - if (name === styleName) - return style[1].trim(); - } - - return undefined; - }, - - setStyle: function (styleName, styleValue) { - var value = this.node.getAttribute("style") || ""; - var index = 0; - do { - var next = value.indexOf(";", index) + 1; - var length = next - index - 1; - var style = (length > 0 ? value.substr(index, length) : value.substr(index)); - if (style.substr(0, style.indexOf(":")).trim() === styleName) { - value = value.substr(0, index).trim() + (next ? " " + value.substr(next).trim() : ""); - break; - } - index = next; - } while (index); - - value += " " + styleName + ": " + styleValue + ";"; - this.node.setAttribute("style", value.trim()); - } - }; - - // For each item in styleMap, define a getter and setter on the style - // property. - for (var jsName in styleMap) { - (function (cssName) { - Style.prototype.__defineGetter__(jsName, function () { - return this.getStyle(cssName); - }); - Style.prototype.__defineSetter__(jsName, function (value) { - this.setStyle(cssName, value); - }); - })(styleMap[jsName]); - } - - var JSDOMParser = function () { - this.currentChar = 0; - - // In makeElementNode() we build up many strings one char at a time. Using - // += for this results in lots of short-lived intermediate strings. It's - // better to build an array of single-char strings and then join() them - // together at the end. And reusing a single array (i.e. |this.strBuf|) - // over and over for this purpose uses less memory than using a new array - // for each string. - this.strBuf = []; - - // Similarly, we reuse this array to return the two arguments from - // makeElementNode(), which saves us from having to allocate a new array - // every time. - this.retPair = []; - - this.errorState = ""; - }; - - JSDOMParser.prototype = { - error: function(m) { - if (typeof dump !== "undefined") { - dump("JSDOMParser error: " + m + "\n"); - } else if (typeof console !== "undefined") { - console.log("JSDOMParser error: " + m + "\n"); - } - this.errorState += m + "\n"; - }, - - /** - * Look at the next character without advancing the index. - */ - peekNext: function () { - return this.html[this.currentChar]; - }, - - /** - * Get the next character and advance the index. - */ - nextChar: function () { - return this.html[this.currentChar++]; - }, - - /** - * Called after a quote character is read. This finds the next quote - * character and returns the text string in between. - */ - readString: function (quote) { - var str; - var n = this.html.indexOf(quote, this.currentChar); - if (n === -1) { - this.currentChar = this.html.length; - str = null; - } else { - str = this.html.substring(this.currentChar, n); - this.currentChar = n + 1; - } - - return str; - }, - - /** - * Called when parsing a node. This finds the next name/value attribute - * pair and adds the result to the attributes list. - */ - readAttribute: function (node) { - var name = ""; - - var n = this.html.indexOf("=", this.currentChar); - if (n === -1) { - this.currentChar = this.html.length; - } else { - // Read until a '=' character is hit; this will be the attribute key - name = this.html.substring(this.currentChar, n); - this.currentChar = n + 1; - } - - if (!name) - return; - - // After a '=', we should see a '"' for the attribute value - var c = this.nextChar(); - if (c !== '"' && c !== "'") { - this.error("Error reading attribute " + name + ", expecting '\"'"); - return; - } - - // Read the attribute value (and consume the matching quote) - var value = this.readString(c); - - node.attributes.push(new Attribute(name, decodeHTML(value))); - - return; - }, - - /** - * Parses and returns an Element node. This is called after a '<' has been - * read. - * - * @returns an array; the first index of the array is the parsed node; - * the second index is a boolean indicating whether this is a void - * Element - */ - makeElementNode: function (retPair) { - var c = this.nextChar(); - - // Read the Element tag name - var strBuf = this.strBuf; - strBuf.length = 0; - while (whitespace.indexOf(c) == -1 && c !== ">" && c !== "/") { - if (c === undefined) - return false; - strBuf.push(c); - c = this.nextChar(); - } - var tag = strBuf.join(""); - - if (!tag) - return false; - - var node = new Element(tag); - - // Read Element attributes - while (c !== "/" && c !== ">") { - if (c === undefined) - return false; - while (whitespace.indexOf(this.html[this.currentChar++]) != -1) { - // Advance cursor to first non-whitespace char. - } - this.currentChar--; - c = this.nextChar(); - if (c !== "/" && c !== ">") { - --this.currentChar; - this.readAttribute(node); - } - } - - // If this is a self-closing tag, read '/>' - var closed = false; - if (c === "/") { - closed = true; - c = this.nextChar(); - if (c !== ">") { - this.error("expected '>' to close " + tag); - return false; - } - } - - retPair[0] = node; - retPair[1] = closed; - return true; - }, - - /** - * If the current input matches this string, advance the input index; - * otherwise, do nothing. - * - * @returns whether input matched string - */ - match: function (str) { - var strlen = str.length; - if (this.html.substr(this.currentChar, strlen).toLowerCase() === str.toLowerCase()) { - this.currentChar += strlen; - return true; - } - return false; - }, - - /** - * Searches the input until a string is found and discards all input up to - * and including the matched string. - */ - discardTo: function (str) { - var index = this.html.indexOf(str, this.currentChar) + str.length; - if (index === -1) - this.currentChar = this.html.length; - this.currentChar = index; - }, - - /** - * Reads child nodes for the given node. - */ - readChildren: function (node) { - var child; - while ((child = this.readNode())) { - // Don't keep Comment nodes - if (child.nodeType !== 8) { - node.appendChild(child); - } - } - }, - - discardNextComment: function() { - if (this.match("--")) { - this.discardTo("-->"); - } else { - var c = this.nextChar(); - while (c !== ">") { - if (c === undefined) - return null; - if (c === '"' || c === "'") - this.readString(c); - c = this.nextChar(); - } - } - return new Comment(); - }, - - - /** - * Reads the next child node from the input. If we're reading a closing - * tag, or if we've reached the end of input, return null. - * - * @returns the node - */ - readNode: function () { - var c = this.nextChar(); - - if (c === undefined) - return null; - - // Read any text as Text node - var textNode; - if (c !== "<") { - --this.currentChar; - textNode = new Text(); - var n = this.html.indexOf("<", this.currentChar); - if (n === -1) { - textNode.innerHTML = this.html.substring(this.currentChar, this.html.length); - this.currentChar = this.html.length; - } else { - textNode.innerHTML = this.html.substring(this.currentChar, n); - this.currentChar = n; - } - return textNode; - } - - if (this.match("![CDATA[")) { - var endChar = this.html.indexOf("]]>", this.currentChar); - if (endChar === -1) { - this.error("unclosed CDATA section"); - return null; - } - textNode = new Text(); - textNode.textContent = this.html.substring(this.currentChar, endChar); - this.currentChar = endChar + ("]]>").length; - return textNode; - } - - c = this.peekNext(); - - // Read Comment node. Normally, Comment nodes know their inner - // textContent, but we don't really care about Comment nodes (we throw - // them away in readChildren()). So just returning an empty Comment node - // here is sufficient. - if (c === "!" || c === "?") { - // We're still before the ! or ? that is starting this comment: - this.currentChar++; - return this.discardNextComment(); - } - - // If we're reading a closing tag, return null. This means we've reached - // the end of this set of child nodes. - if (c === "/") { - --this.currentChar; - return null; - } - - // Otherwise, we're looking at an Element node - var result = this.makeElementNode(this.retPair); - if (!result) - return null; - - var node = this.retPair[0]; - var closed = this.retPair[1]; - var localName = node.localName; - - // If this isn't a void Element, read its child nodes - if (!closed) { - this.readChildren(node); - var closingTag = "</" + node._matchingTag + ">"; - if (!this.match(closingTag)) { - this.error("expected '" + closingTag + "' and got " + this.html.substr(this.currentChar, closingTag.length)); - return null; - } - } - - // Only use the first title, because SVG might have other - // title elements which we don't care about (medium.com - // does this, at least). - if (localName === "title" && !this.doc.title) { - this.doc.title = node.textContent.trim(); - } else if (localName === "head") { - this.doc.head = node; - } else if (localName === "body") { - this.doc.body = node; - } else if (localName === "html") { - this.doc.documentElement = node; - } - - return node; - }, - - /** - * Parses an HTML string and returns a JS implementation of the Document. - */ - parse: function (html, url) { - this.html = html; - var doc = this.doc = new Document(url); - this.readChildren(doc); - - // If this is an HTML document, remove root-level children except for the - // <html> node - if (doc.documentElement) { - for (var i = doc.childNodes.length; --i >= 0;) { - var child = doc.childNodes[i]; - if (child !== doc.documentElement) { - doc.removeChild(child); - } - } - } - - return doc; - } - }; - - // Attach the standard DOM types to the global scope - global.Node = Node; - global.Comment = Comment; - global.Document = Document; - global.Element = Element; - global.Text = Text; - - // Attach JSDOMParser to the global scope - global.JSDOMParser = JSDOMParser; - -})(this); - -if (typeof module === "object") { - module.exports = this.JSDOMParser; -} diff --git a/apps/web-clipper/lib/Readability-readerable.js b/apps/web-clipper/lib/Readability-readerable.js deleted file mode 100644 index 64be5e15e8..0000000000 --- a/apps/web-clipper/lib/Readability-readerable.js +++ /dev/null @@ -1,108 +0,0 @@ -/* eslint-env es6:false */ -/* - * Copyright (c) 2010 Arc90 Inc - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* - * This code is heavily based on Arc90's readability.js (1.7.1) script - * available at: http://code.google.com/p/arc90labs-readability - */ - -var REGEXPS = { - // NOTE: These two regular expressions are duplicated in - // Readability.js. Please keep both copies in sync. - unlikelyCandidates: /-ad-|ai2html|banner|breadcrumbs|combx|comment|community|cover-wrap|disqus|extra|footer|gdpr|header|legends|menu|related|remark|replies|rss|shoutbox|sidebar|skyscraper|social|sponsor|supplemental|ad-break|agegate|pagination|pager|popup|yom-remote/i, - okMaybeItsACandidate: /and|article|body|column|content|main|shadow/i, -}; - -function isNodeVisible(node) { - // Have to null-check node.style and node.className.indexOf to deal with SVG and MathML nodes. - return (!node.style || node.style.display != "none") - && !node.hasAttribute("hidden") - //check for "fallback-image" so that wikimedia math images are displayed - && (!node.hasAttribute("aria-hidden") || node.getAttribute("aria-hidden") != "true" || (node.className && node.className.indexOf && node.className.indexOf("fallback-image") !== -1)); -} - -/** - * Decides whether or not the document is reader-able without parsing the whole thing. - * @param {Object} options Configuration object. - * @param {number} [options.minContentLength=140] The minimum node content length used to decide if the document is readerable. - * @param {number} [options.minScore=20] The minumum cumulated 'score' used to determine if the document is readerable. - * @param {Function} [options.visibilityChecker=isNodeVisible] The function used to determine if a node is visible. - * @return {boolean} Whether or not we suspect Readability.parse() will suceeed at returning an article object. - */ -function isProbablyReaderable(doc, options = {}) { - // For backward compatibility reasons 'options' can either be a configuration object or the function used - // to determine if a node is visible. - if (typeof options == "function") { - options = { visibilityChecker: options }; - } - - var defaultOptions = { minScore: 20, minContentLength: 140, visibilityChecker: isNodeVisible }; - options = Object.assign(defaultOptions, options); - - var nodes = doc.querySelectorAll("p, pre, article"); - - // Get <div> nodes which have <br> node(s) and append them into the `nodes` variable. - // Some articles' DOM structures might look like - // <div> - // Sentences<br> - // <br> - // Sentences<br> - // </div> - var brNodes = doc.querySelectorAll("div > br"); - if (brNodes.length) { - var set = new Set(nodes); - [].forEach.call(brNodes, function (node) { - set.add(node.parentNode); - }); - nodes = Array.from(set); - } - - var score = 0; - // This is a little cheeky, we use the accumulator 'score' to decide what to return from - // this callback: - return [].some.call(nodes, function (node) { - if (!options.visibilityChecker(node)) { - return false; - } - - var matchString = node.className + " " + node.id; - if (REGEXPS.unlikelyCandidates.test(matchString) && - !REGEXPS.okMaybeItsACandidate.test(matchString)) { - return false; - } - - if (node.matches("li p")) { - return false; - } - - var textContentLength = node.textContent.trim().length; - if (textContentLength < options.minContentLength) { - return false; - } - - score += Math.sqrt(textContentLength - options.minContentLength); - - if (score > options.minScore) { - return true; - } - return false; - }); -} - -if (typeof module === "object") { - module.exports = isProbablyReaderable; -} From 75e88c69bd0648fb2f587832b18873153dc3db45 Mon Sep 17 00:00:00 2001 From: Elian Doran <contact@eliandoran.me> Date: Sat, 24 Jan 2026 12:12:07 +0200 Subject: [PATCH 214/353] fix(web-clipper): createLink not defined in popup --- apps/web-clipper/entrypoints/content/index.js | 14 +------------- apps/web-clipper/entrypoints/popup/index.html | 1 - apps/web-clipper/entrypoints/popup/popup.js | 2 +- apps/web-clipper/utils.js | 12 ++++++++++++ 4 files changed, 14 insertions(+), 15 deletions(-) diff --git a/apps/web-clipper/entrypoints/content/index.js b/apps/web-clipper/entrypoints/content/index.js index 973172b4e3..e5c3642479 100644 --- a/apps/web-clipper/entrypoints/content/index.js +++ b/apps/web-clipper/entrypoints/content/index.js @@ -1,4 +1,4 @@ -import { getBaseUrl, getPageLocationOrigin, randomString } from "../../utils.js"; +import { createLink, getBaseUrl, getPageLocationOrigin, randomString } from "../../utils.js"; import Readability from "../../lib/Readability.js"; export default defineContentScript({ @@ -237,18 +237,6 @@ export default defineContentScript({ return images; } - function createLink(clickAction, text, color = "lightskyblue") { - const link = document.createElement('a'); - link.href = "javascript:"; - link.style.color = color; - link.appendChild(document.createTextNode(text)); - link.addEventListener("click", () => { - browser.runtime.sendMessage(null, clickAction) - }); - - return link - } - async function prepareMessageResponse(message) { console.info('Message: ' + message.name); diff --git a/apps/web-clipper/entrypoints/popup/index.html b/apps/web-clipper/entrypoints/popup/index.html index 7bd985801f..0479588e73 100644 --- a/apps/web-clipper/entrypoints/popup/index.html +++ b/apps/web-clipper/entrypoints/popup/index.html @@ -50,7 +50,6 @@ <script type="module" src="../../lib/cash.min.js"></script> <script type="module" src="popup.js"></script> <script type="module" src="../../utils.js"></script> - <script type="module" src="../../content.js"></script> </body> </html> diff --git a/apps/web-clipper/entrypoints/popup/popup.js b/apps/web-clipper/entrypoints/popup/popup.js index be571e428a..775a3ec0c8 100644 --- a/apps/web-clipper/entrypoints/popup/popup.js +++ b/apps/web-clipper/entrypoints/popup/popup.js @@ -1,4 +1,4 @@ -console.log("Popup script loaded"); +import { createLink } from "../../utils"; async function sendMessage(message) { try { diff --git a/apps/web-clipper/utils.js b/apps/web-clipper/utils.js index aab69e12cd..a69a00dbab 100644 --- a/apps/web-clipper/utils.js +++ b/apps/web-clipper/utils.js @@ -26,3 +26,15 @@ export function getPageLocationOrigin() { // but for file:// protocol this is browser dependant and in particular Firefox returns "null" in this case. return location.protocol === 'file:' ? 'file://' : location.origin; } + +export function createLink(clickAction, text, color = "lightskyblue") { + const link = document.createElement('a'); + link.href = "javascript:"; + link.style.color = color; + link.appendChild(document.createTextNode(text)); + link.addEventListener("click", () => { + browser.runtime.sendMessage(null, clickAction) + }); + + return link +} From 423038100e151c826a3bf8b00889d413900c60a1 Mon Sep 17 00:00:00 2001 From: Elian Doran <contact@eliandoran.me> Date: Sat, 24 Jan 2026 12:12:51 +0200 Subject: [PATCH 215/353] fix(web-clipper): undefined variable in popup --- apps/web-clipper/entrypoints/popup/popup.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/apps/web-clipper/entrypoints/popup/popup.js b/apps/web-clipper/entrypoints/popup/popup.js index 775a3ec0c8..ec5ee67f82 100644 --- a/apps/web-clipper/entrypoints/popup/popup.js +++ b/apps/web-clipper/entrypoints/popup/popup.js @@ -161,8 +161,7 @@ browser.runtime.onMessage.addListener(request => { if (searchNote.status === 'found'){ const a = createLink({name: 'openNoteInTrilium', noteId: searchNote.noteId}, "Open in Trilium.") - noteFound = `Already visited website!`; - $alreadyVisited.html(noteFound); + $alreadyVisited.text(`Already visited website!`); $alreadyVisited[0].appendChild(a); }else{ $alreadyVisited.html(''); From 2e144fac5eb8b94ccbc1c124bfe4065ae412f091 Mon Sep 17 00:00:00 2001 From: Elian Doran <contact@eliandoran.me> Date: Sat, 24 Jan 2026 12:35:31 +0200 Subject: [PATCH 216/353] chore(web-clipper): set up for TypeScript --- apps/web-clipper/tsconfig.json | 6 ++++++ apps/web-clipper/{wxt.config.js => wxt.config.ts} | 2 +- package.json | 2 +- tsconfig.json | 3 +++ 4 files changed, 11 insertions(+), 2 deletions(-) create mode 100644 apps/web-clipper/tsconfig.json rename apps/web-clipper/{wxt.config.js => wxt.config.ts} (93%) diff --git a/apps/web-clipper/tsconfig.json b/apps/web-clipper/tsconfig.json new file mode 100644 index 0000000000..bed55354b9 --- /dev/null +++ b/apps/web-clipper/tsconfig.json @@ -0,0 +1,6 @@ +{ + "extends": [ + "../../tsconfig.base.json", + "./.wxt/tsconfig.json" + ] +} \ No newline at end of file diff --git a/apps/web-clipper/wxt.config.js b/apps/web-clipper/wxt.config.ts similarity index 93% rename from apps/web-clipper/wxt.config.js rename to apps/web-clipper/wxt.config.ts index ec61bac134..7a3ec383c9 100644 --- a/apps/web-clipper/wxt.config.js +++ b/apps/web-clipper/wxt.config.ts @@ -1,4 +1,4 @@ -import { defineConfig } from "vite"; +import { defineConfig } from "wxt"; export default defineConfig({ modules: ['@wxt-dev/auto-icons'], diff --git a/package.json b/package.json index e71d37e9bd..7ec68ed23f 100644 --- a/package.json +++ b/package.json @@ -40,7 +40,7 @@ "dev:linter-check": "cross-env NODE_OPTIONS=--max_old_space_size=4096 eslint .", "dev:linter-fix": "cross-env NODE_OPTIONS=--max_old_space_size=4096 eslint . --fix", "postinstall": "tsx scripts/electron-rebuild.mts && pnpm prepare", - "prepare": "pnpm run --filter pdfjs-viewer --filter share-theme build" + "prepare": "pnpm run --filter pdfjs-viewer --filter share-theme build && pnpm run --filter web-clipper postinstall" }, "private": true, "devDependencies": { diff --git a/tsconfig.json b/tsconfig.json index fb9d2774aa..9fc01bb4d7 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -24,6 +24,9 @@ { "path": "./apps/website" }, + { + "path": "./apps/web-clipper" + }, { "path": "./apps/dump-db" }, From 266494ba8c54aea831e79b15ff6a46901baa96e8 Mon Sep 17 00:00:00 2001 From: Elian Doran <contact@eliandoran.me> Date: Sat, 24 Jan 2026 13:20:27 +0200 Subject: [PATCH 217/353] chore(web-clipper): port most files to TypeScript --- .../background/trilium_server_facade.js | 223 --------------- .../background/trilium_server_facade.ts | 253 ++++++++++++++++++ .../content/{index.js => index.ts} | 98 +++---- .../entrypoints/options/index.html | 2 +- .../options/{index.js => index.ts} | 22 +- apps/web-clipper/entrypoints/popup/index.html | 2 +- .../entrypoints/popup/{popup.js => popup.ts} | 12 +- apps/web-clipper/types.d.ts | 7 + 8 files changed, 329 insertions(+), 290 deletions(-) delete mode 100644 apps/web-clipper/entrypoints/background/trilium_server_facade.js create mode 100644 apps/web-clipper/entrypoints/background/trilium_server_facade.ts rename apps/web-clipper/entrypoints/content/{index.js => index.ts} (79%) rename apps/web-clipper/entrypoints/options/{index.js => index.ts} (77%) rename apps/web-clipper/entrypoints/popup/{popup.js => popup.ts} (95%) create mode 100644 apps/web-clipper/types.d.ts diff --git a/apps/web-clipper/entrypoints/background/trilium_server_facade.js b/apps/web-clipper/entrypoints/background/trilium_server_facade.js deleted file mode 100644 index b1a56a7ec4..0000000000 --- a/apps/web-clipper/entrypoints/background/trilium_server_facade.js +++ /dev/null @@ -1,223 +0,0 @@ -const PROTOCOL_VERSION_MAJOR = 1; - -export function isDevEnv() { - const manifest = browser.runtime.getManifest(); - - return manifest.name.endsWith('(dev)'); -} - -export default class TriliumServerFacade { - constructor() { - this.triggerSearchForTrilium(); - - // continually scan for changes (if e.g. desktop app is started after browser) - setInterval(() => this.triggerSearchForTrilium(), 60 * 1000); - } - - async sendTriliumSearchStatusToPopup() { - try { - await browser.runtime.sendMessage({ - name: "trilium-search-status", - triliumSearch: this.triliumSearch - }); - } - catch (e) {} // nothing might be listening - } - async sendTriliumSearchNoteToPopup(){ - try{ - await browser.runtime.sendMessage({ - name: "trilium-previously-visited", - searchNote: this.triliumSearchNote - }) - - } - catch (e) {} // nothing might be listening - } - - setTriliumSearchNote(st){ - this.triliumSearchNote = st; - this.sendTriliumSearchNoteToPopup(); - } - - setTriliumSearch(ts) { - this.triliumSearch = ts; - - this.sendTriliumSearchStatusToPopup(); - } - - setTriliumSearchWithVersionCheck(json, resp) { - const [major, minor] = json.protocolVersion - .split(".") - .map(chunk => parseInt(chunk)); - - // minor version is intended to be used to dynamically limit features provided by extension - // if some specific Trilium API is not supported. So far not needed. - - if (major !== PROTOCOL_VERSION_MAJOR) { - this.setTriliumSearch({ - status: 'version-mismatch', - extensionMajor: PROTOCOL_VERSION_MAJOR, - triliumMajor: major - }); - } - else { - this.setTriliumSearch(resp); - } - } - - async triggerSearchForTrilium() { - this.setTriliumSearch({ status: 'searching' }); - - try { - const port = await this.getPort(); - - console.debug('Trying port ' + port); - - const resp = await fetch(`http://127.0.0.1:${port}/api/clipper/handshake`); - - const text = await resp.text(); - - console.log("Received response:", text); - - const json = JSON.parse(text); - - if (json.appName === 'trilium') { - this.setTriliumSearchWithVersionCheck(json, { - status: 'found-desktop', - port: port, - url: 'http://127.0.0.1:' + port - }); - - return; - } - } - catch (error) { - // continue - } - - const {triliumServerUrl} = await browser.storage.sync.get("triliumServerUrl"); - const {authToken} = await browser.storage.sync.get("authToken"); - - if (triliumServerUrl && authToken) { - try { - const resp = await fetch(triliumServerUrl + '/api/clipper/handshake', { - headers: { - Authorization: authToken - } - }); - - const text = await resp.text(); - - console.log("Received response:", text); - - const json = JSON.parse(text); - - if (json.appName === 'trilium') { - this.setTriliumSearchWithVersionCheck(json, { - status: 'found-server', - url: triliumServerUrl, - token: authToken - }); - - return; - } - } - catch (e) { - console.log("Request to the configured server instance failed with:", e); - } - } - - // if all above fails it's not found - this.setTriliumSearch({ status: 'not-found' }); - } - - async triggerSearchNoteByUrl(noteUrl) { - const resp = await this.callService('GET', 'notes-by-url/' + encodeURIComponent(noteUrl)) - let newStatus = { - status: 'not-found', - noteId: null - } - if (resp && resp.noteId) { - newStatus.noteId = resp.noteId; - newStatus.status = 'found'; - } - this.setTriliumSearchNote(newStatus); - } - async waitForTriliumSearch() { - return new Promise((res, rej) => { - const checkStatus = () => { - if (this.triliumSearch.status === "searching") { - setTimeout(checkStatus, 500); - } - else if (this.triliumSearch.status === 'not-found') { - rej(new Error("Trilium instance has not been found.")); - } - else { - res(); - } - }; - - checkStatus(); - }); - } - - async getPort() { - const {triliumDesktopPort} = await browser.storage.sync.get("triliumDesktopPort"); - - if (triliumDesktopPort) { - return parseInt(triliumDesktopPort); - } - else { - return isDevEnv() ? 37740 : 37840; - } - } - - async callService(method, path, body) { - const fetchOptions = { - method: method, - headers: { - 'Content-Type': 'application/json' - }, - }; - - if (body) { - fetchOptions.body = typeof body === 'string' ? body : JSON.stringify(body); - } - - try { - await this.waitForTriliumSearch(); - - fetchOptions.headers.Authorization = this.triliumSearch.token || ""; - fetchOptions.headers['trilium-local-now-datetime'] = this.localNowDateTime(); - - const url = this.triliumSearch.url + "/api/clipper/" + path; - - console.log(`Sending ${method} request to ${url}`); - - const response = await fetch(url, fetchOptions); - - if (!response.ok) { - throw new Error(await response.text()); - } - - return await response.json(); - } - catch (e) { - console.log("Sending request to trilium failed", e); - - toast('Your request failed because we could not contact Trilium instance. Please make sure Trilium is running and is accessible.'); - - return null; - } - } - - localNowDateTime() { - const date = new Date(); - const off = date.getTimezoneOffset(); - const absoff = Math.abs(off); - return (new Date(date.getTime() - off * 60 * 1000).toISOString().substr(0,23).replace("T", " ") + - (off > 0 ? '-' : '+') + - (absoff / 60).toFixed(0).padStart(2,'0') + ':' + - (absoff % 60).toString().padStart(2,'0')); - } -} diff --git a/apps/web-clipper/entrypoints/background/trilium_server_facade.ts b/apps/web-clipper/entrypoints/background/trilium_server_facade.ts new file mode 100644 index 0000000000..f9854437f4 --- /dev/null +++ b/apps/web-clipper/entrypoints/background/trilium_server_facade.ts @@ -0,0 +1,253 @@ +const PROTOCOL_VERSION_MAJOR = 1; + +export function isDevEnv() { + const manifest = browser.runtime.getManifest(); + + return manifest.name.endsWith('(dev)'); +} + +type TriliumSearchStatus = { + status: "searching"; +} | { + status: "not-found" +} | { + status: "found-desktop", + port: number; + url: string; +} | { + status: "found-server", + url: string; + token: string; +} | { + status: "version-mismatch"; + extensionMajor: number; + triliumMajor: number; +}; + +type TriliumSearchNoteStatus = { + status: "not-found", + noteId: null +} | { + status: "found", + noteId: string +}; + +export default class TriliumServerFacade { + private triliumSearch?: TriliumSearchStatus; + private triliumSearchNote?: TriliumSearchNoteStatus; + + constructor() { + this.triggerSearchForTrilium(); + + // continually scan for changes (if e.g. desktop app is started after browser) + setInterval(() => this.triggerSearchForTrilium(), 60 * 1000); + } + + async sendTriliumSearchStatusToPopup() { + try { + await browser.runtime.sendMessage({ + name: "trilium-search-status", + triliumSearch: this.triliumSearch + }); + } + catch (e) {} // nothing might be listening + } + async sendTriliumSearchNoteToPopup(){ + try{ + await browser.runtime.sendMessage({ + name: "trilium-previously-visited", + searchNote: this.triliumSearchNote + }); + + } + catch (e) {} // nothing might be listening + } + + setTriliumSearchNote(st){ + this.triliumSearchNote = st; + this.sendTriliumSearchNoteToPopup(); + } + + setTriliumSearch(ts: TriliumSearchStatus) { + this.triliumSearch = ts; + + this.sendTriliumSearchStatusToPopup(); + } + + setTriliumSearchWithVersionCheck(json: { protocolVersion: string }, resp: TriliumSearchStatus) { + const [major, minor] = json.protocolVersion + .split(".") + .map(chunk => parseInt(chunk, 10)); + + // minor version is intended to be used to dynamically limit features provided by extension + // if some specific Trilium API is not supported. So far not needed. + + if (major !== PROTOCOL_VERSION_MAJOR) { + this.setTriliumSearch({ + status: 'version-mismatch', + extensionMajor: PROTOCOL_VERSION_MAJOR, + triliumMajor: major + }); + } + else { + this.setTriliumSearch(resp); + } + } + + async triggerSearchForTrilium() { + this.setTriliumSearch({ status: 'searching' }); + + try { + const port = await this.getPort(); + + console.debug(`Trying port ${ port}`); + + const resp = await fetch(`http://127.0.0.1:${port}/api/clipper/handshake`); + + const text = await resp.text(); + + console.log("Received response:", text); + + const json = JSON.parse(text); + + if (json.appName === 'trilium') { + this.setTriliumSearchWithVersionCheck(json, { + status: 'found-desktop', + port, + url: `http://127.0.0.1:${port}` + }); + + return; + } + } + catch (error) { + // continue + } + + const {triliumServerUrl} = await browser.storage.sync.get<{ triliumServerUrl: string }>("triliumServerUrl"); + const {authToken} = await browser.storage.sync.get<{ authToken: string }>("authToken"); + + if (triliumServerUrl && authToken) { + try { + const resp = await fetch(`${triliumServerUrl }/api/clipper/handshake`, { + headers: { + Authorization: authToken + } + }); + + const text = await resp.text(); + + console.log("Received response:", text); + + const json = JSON.parse(text); + + if (json.appName === 'trilium') { + this.setTriliumSearchWithVersionCheck(json, { + status: 'found-server', + url: triliumServerUrl, + token: authToken + }); + + return; + } + } + catch (e) { + console.log("Request to the configured server instance failed with:", e); + } + } + + // if all above fails it's not found + this.setTriliumSearch({ status: 'not-found' }); + } + + async triggerSearchNoteByUrl(noteUrl) { + const resp = await this.callService('GET', `notes-by-url/${encodeURIComponent(noteUrl)}`); + let newStatus: TriliumSearchNoteStatus; + if (resp && resp.noteId) { + newStatus = { + status: 'found', + noteId: resp.noteId, + }; + } else { + newStatus = { + status: 'not-found', + noteId: null + }; + } + this.setTriliumSearchNote(newStatus); + } + async waitForTriliumSearch() { + return new Promise<void>((res, rej) => { + const checkStatus = () => { + if (this.triliumSearch?.status === "searching") { + setTimeout(checkStatus, 500); + } else if (this.triliumSearch?.status === 'not-found') { + rej(new Error("Trilium instance has not been found.")); + } else { + res(); + } + }; + + checkStatus(); + }); + } + + async getPort() { + const {triliumDesktopPort} = await browser.storage.sync.get<{ triliumDesktopPort: string }>("triliumDesktopPort"); + + if (triliumDesktopPort) { + return parseInt(triliumDesktopPort, 10); + } + + return isDevEnv() ? 37740 : 37840; + } + + async callService(method: string, path: string, body?: string | object) { + await this.waitForTriliumSearch(); + if (!this.triliumSearch || (this.triliumSearch.status !== 'found-desktop' && this.triliumSearch.status !== 'found-server')) return; + + try { + const fetchOptions: RequestInit = { + method, + headers: { + Authorization: "token" in this.triliumSearch ? this.triliumSearch.token ?? "" : "", + 'Content-Type': 'application/json', + 'trilium-local-now-datetime': this.localNowDateTime() + }, + }; + + if (body) { + fetchOptions.body = typeof body === 'string' ? body : JSON.stringify(body); + } + + const url = `${this.triliumSearch.url}/api/clipper/${path}`; + + console.log(`Sending ${method} request to ${url}`); + + const response = await fetch(url, fetchOptions); + + if (!response.ok) { + throw new Error(await response.text()); + } + + return await response.json(); + } + catch (e) { + console.log("Sending request to trilium failed", e); + + window.showToast('Your request failed because we could not contact Trilium instance. Please make sure Trilium is running and is accessible.'); + + return null; + } + } + + localNowDateTime() { + const date = new Date(); + const off = date.getTimezoneOffset(); + const absoff = Math.abs(off); + return (`${new Date(date.getTime() - off * 60 * 1000).toISOString().substr(0,23).replace("T", " ") + + (off > 0 ? '-' : '+') + + (absoff / 60).toFixed(0).padStart(2,'0') }:${ + (absoff % 60).toString().padStart(2,'0')}`); + } +} diff --git a/apps/web-clipper/entrypoints/content/index.js b/apps/web-clipper/entrypoints/content/index.ts similarity index 79% rename from apps/web-clipper/entrypoints/content/index.js rename to apps/web-clipper/entrypoints/content/index.ts index e5c3642479..0ee35ef0d8 100644 --- a/apps/web-clipper/entrypoints/content/index.js +++ b/apps/web-clipper/entrypoints/content/index.ts @@ -1,5 +1,5 @@ -import { createLink, getBaseUrl, getPageLocationOrigin, randomString } from "../../utils.js"; import Readability from "../../lib/Readability.js"; +import { createLink, getBaseUrl, getPageLocationOrigin, randomString } from "../../utils.js"; export default defineContentScript({ matches: [ @@ -19,10 +19,10 @@ export default defineContentScript({ if (url.indexOf('//') === 0) { return location.protocol + url; } else if (url[0] === '/') { - return location.protocol + '//' + location.host + url; - } else { - return getBaseUrl() + '/' + url; + return `${location.protocol}//${location.host}${url}`; } + return `${getBaseUrl()}/${url}`; + } function pageTitle() { @@ -47,40 +47,37 @@ export default defineContentScript({ return { title: article.title, body: article.content, - } + }; } function getDocumentDates() { - var dates = { - publishedDate: null, - modifiedDate: null, - }; + let publishedDate: Date | null = null; + let modifiedDate: Date | null = null; - const articlePublishedTime = document.querySelector("meta[property='article:published_time']"); - if (articlePublishedTime && articlePublishedTime.getAttribute('content')) { - dates.publishedDate = new Date(articlePublishedTime.getAttribute('content')); + const articlePublishedTime = document.querySelector("meta[property='article:published_time']")?.getAttribute('content'); + if (articlePublishedTime && articlePublishedTime) { + publishedDate = new Date(articlePublishedTime); } - const articleModifiedTime = document.querySelector("meta[property='article:modified_time']"); - if (articleModifiedTime && articleModifiedTime.getAttribute('content')) { - dates.modifiedDate = new Date(articleModifiedTime.getAttribute('content')); + const articleModifiedTime = document.querySelector("meta[property='article:modified_time']")?.getAttribute('content'); + if (articleModifiedTime && articleModifiedTime) { + modifiedDate = new Date(articleModifiedTime); } // TODO: if we didn't get dates from meta, then try to get them from JSON-LD - - return dates; + return { publishedDate, modifiedDate }; } function getRectangleArea() { - return new Promise((resolve, reject) => { + return new Promise((resolve) => { const overlay = document.createElement('div'); overlay.style.opacity = '0.6'; overlay.style.background = 'black'; overlay.style.width = '100%'; overlay.style.height = '100%'; - overlay.style.zIndex = 99999999; - overlay.style.top = 0; - overlay.style.left = 0; + overlay.style.zIndex = "99999999"; + overlay.style.top = "0"; + overlay.style.left = "0"; overlay.style.position = 'fixed'; document.body.appendChild(overlay); @@ -92,15 +89,15 @@ export default defineContentScript({ messageComp.style.position = 'fixed'; messageComp.style.opacity = '0.95'; messageComp.style.fontSize = '14px'; - messageComp.style.width = messageCompWidth + 'px'; - messageComp.style.maxWidth = messageCompWidth + 'px'; + messageComp.style.width = `${messageCompWidth }px`; + messageComp.style.maxWidth = `${messageCompWidth }px`; messageComp.style.border = '1px solid black'; messageComp.style.background = 'white'; messageComp.style.color = 'black'; messageComp.style.top = '10px'; messageComp.style.textAlign = 'center'; messageComp.style.padding = '10px'; - messageComp.style.left = Math.round(document.body.clientWidth / 2 - messageCompWidth / 2) + 'px'; + messageComp.style.left = `${Math.round(document.body.clientWidth / 2 - messageCompWidth / 2) }px`; messageComp.style.zIndex = overlay.style.zIndex + 1; messageComp.textContent = 'Drag and release to capture a screenshot'; @@ -112,9 +109,9 @@ export default defineContentScript({ selection.style.border = '1px solid red'; selection.style.background = 'white'; selection.style.border = '2px solid black'; - selection.style.zIndex = overlay.style.zIndex - 1; - selection.style.top = 0; - selection.style.left = 0; + selection.style.zIndex = String(parseInt(overlay.style.zIndex, 10) - 1); + selection.style.top = "0"; + selection.style.left = "0"; selection.style.position = 'fixed'; document.body.appendChild(selection); @@ -122,17 +119,19 @@ export default defineContentScript({ messageComp.focus(); // we listen on keypresses on this element to cancel on escape let isDragging = false; - let draggingStartPos = null; - let selectionArea = {}; + let draggingStartPos: {x: number, y: number} | null = null; + let selectionArea: {x?: number, y?: number, width?: number, height?: number} = {}; function updateSelection() { - selection.style.left = selectionArea.x + 'px'; - selection.style.top = selectionArea.y + 'px'; - selection.style.width = selectionArea.width + 'px'; - selection.style.height = selectionArea.height + 'px'; + selection.style.left = `${selectionArea.x}px`; + selection.style.top = `${selectionArea.y}px`; + selection.style.width = `${selectionArea.width}px`; + selection.style.height = `${selectionArea.height}px`; } function setSelectionSizeFromMouse(event) { + if (!draggingStartPos) return; + if (event.clientX < draggingStartPos.x) { selectionArea.x = event.clientX; } @@ -209,8 +208,8 @@ export default defineContentScript({ } } - function getImages(container) { - const images = []; + function getImages(container: HTMLElement) { + const images: {imageId: string, src: string}[] = []; for (const img of container.getElementsByTagName('img')) { if (!img.src) { @@ -226,7 +225,7 @@ export default defineContentScript({ const imageId = randomString(20); images.push({ - imageId: imageId, + imageId, src: img.src }); @@ -237,16 +236,16 @@ export default defineContentScript({ return images; } - async function prepareMessageResponse(message) { - console.info('Message: ' + message.name); + async function prepareMessageResponse(message: {name: string, noteId?: string, message?: string, tabIds?: string[]}) { + console.info(`Message: ${ message.name}`); if (message.name === "toast") { let messageText; if (message.noteId) { messageText = document.createElement('p'); - messageText.setAttribute("style", "padding: 0; margin: 0; font-size: larger;") - messageText.appendChild(document.createTextNode(message.message + " ")); + messageText.setAttribute("style", "padding: 0; margin: 0; font-size: larger;"); + messageText.appendChild(document.createTextNode(`${message.message } `)); messageText.appendChild(createLink( {name: 'openNoteInTrilium', noteId: message.noteId}, "Open in Trilium." @@ -268,7 +267,7 @@ export default defineContentScript({ await import("../../lib/toast"); - showToast(messageText, { + window.showToast(messageText, { settings: { duration: 7000 } @@ -278,6 +277,9 @@ export default defineContentScript({ const container = document.createElement('div'); const selection = window.getSelection(); + if (!selection || selection.rangeCount === 0) { + throw new Error('No selection available to clip'); + } for (let i = 0; i < selection.rangeCount; i++) { const range = selection.getRangeAt(i); @@ -292,7 +294,7 @@ export default defineContentScript({ return { title: pageTitle(), content: container.innerHTML, - images: images, + images, pageUrl: getPageLocationOrigin() + location.pathname + location.search + location.hash }; @@ -307,26 +309,26 @@ export default defineContentScript({ const images = getImages(body); - var labels = {}; + const labels = {}; const dates = getDocumentDates(); if (dates.publishedDate) { labels['publishedDate'] = dates.publishedDate.toISOString().substring(0, 10); } if (dates.modifiedDate) { - labels['modifiedDate'] = dates.publishedDate.toISOString().substring(0, 10); + labels['modifiedDate'] = dates.modifiedDate.toISOString().substring(0, 10); } return { - title: title, + title, content: body.innerHTML, - images: images, + images, pageUrl: getPageLocationOrigin() + location.pathname + location.search, clipType: 'page', - labels: labels + labels }; } else { - throw new Error('Unknown command: ' + JSON.stringify(message)); + throw new Error(`Unknown command: ${ JSON.stringify(message)}`); } } diff --git a/apps/web-clipper/entrypoints/options/index.html b/apps/web-clipper/entrypoints/options/index.html index 16e084ded9..4aa2969c22 100644 --- a/apps/web-clipper/entrypoints/options/index.html +++ b/apps/web-clipper/entrypoints/options/index.html @@ -56,7 +56,7 @@ <script type="module" src="../../lib/cash.min.js"></script> <script type="module" src="../../lib/browser-polyfill.js"></script> -<script type="module" src="index.js"></script> +<script type="module" src="index.ts"></script> </body> diff --git a/apps/web-clipper/entrypoints/options/index.js b/apps/web-clipper/entrypoints/options/index.ts similarity index 77% rename from apps/web-clipper/entrypoints/options/index.js rename to apps/web-clipper/entrypoints/options/index.ts index 03c05822ca..da8fa1850a 100644 --- a/apps/web-clipper/entrypoints/options/index.js +++ b/apps/web-clipper/entrypoints/options/index.ts @@ -17,8 +17,8 @@ function showSuccess(message) { async function saveTriliumServerSetup(e) { e.preventDefault(); - if ($triliumServerUrl.val().trim().length === 0 - || $triliumServerPassword.val().trim().length === 0) { + if (($triliumServerUrl.val() as string | undefined)?.trim().length === 0 + || ($triliumServerPassword.val() as string | undefined)?.trim().length === 0) { showError("One or more mandatory inputs are missing. Please fill in server URL and password."); return; @@ -27,7 +27,7 @@ async function saveTriliumServerSetup(e) { let resp; try { - resp = await fetch($triliumServerUrl.val() + '/api/login/token', { + resp = await fetch(`${$triliumServerUrl.val() }/api/login/token`, { method: "POST", headers: { 'Accept': 'application/json', @@ -39,7 +39,8 @@ async function saveTriliumServerSetup(e) { }); } catch (e) { - showError("Unknown error: " + e.message); + const message = e instanceof Error ? e.message : String(e); + showError(`Unknown error: ${message}`); return; } @@ -47,7 +48,7 @@ async function saveTriliumServerSetup(e) { showError("Incorrect credentials."); } else if (resp.status !== 200) { - showError("Unrecognised response with status code " + resp.status); + showError(`Unrecognised response with status code ${ resp.status}`); } else { const json = await resp.json(); @@ -89,8 +90,8 @@ const $triilumDesktopSetupForm = $("#trilium-desktop-setup-form"); $triilumDesktopSetupForm.on("submit", e => { e.preventDefault(); - const port = $triliumDesktopPort.val().trim(); - const portNum = parseInt(port); + const port = ($triliumDesktopPort.val() as string | undefined ?? "").trim(); + const portNum = parseInt(port, 10); if (port && (isNaN(portNum) || portNum <= 0 || portNum >= 65536)) { showError(`Please enter valid port number.`); @@ -105,8 +106,8 @@ $triilumDesktopSetupForm.on("submit", e => { }); async function restoreOptions() { - const {triliumServerUrl} = await browser.storage.sync.get("triliumServerUrl"); - const {authToken} = await browser.storage.sync.get("authToken"); + const {triliumServerUrl} = await browser.storage.sync.get<{ triliumServerUrl: string }>("triliumServerUrl"); + const {authToken} = await browser.storage.sync.get<{ authToken: string }>("authToken"); $errorMessage.hide(); $successMessage.hide(); @@ -127,8 +128,7 @@ async function restoreOptions() { $triliumServerConfiguredDiv.hide(); } - const {triliumDesktopPort} = await browser.storage.sync.get("triliumDesktopPort"); - + const {triliumDesktopPort} = await browser.storage.sync.get<{ triliumDesktopPort: string }>("triliumDesktopPort"); $triliumDesktopPort.val(triliumDesktopPort); } diff --git a/apps/web-clipper/entrypoints/popup/index.html b/apps/web-clipper/entrypoints/popup/index.html index 0479588e73..a1051659f3 100644 --- a/apps/web-clipper/entrypoints/popup/index.html +++ b/apps/web-clipper/entrypoints/popup/index.html @@ -48,7 +48,7 @@ <script type="module" src="../../lib/browser-polyfill.js"></script> <script type="module" src="../../lib/cash.min.js"></script> - <script type="module" src="popup.js"></script> + <script type="module" src="popup.ts"></script> <script type="module" src="../../utils.js"></script> </body> diff --git a/apps/web-clipper/entrypoints/popup/popup.js b/apps/web-clipper/entrypoints/popup/popup.ts similarity index 95% rename from apps/web-clipper/entrypoints/popup/popup.js rename to apps/web-clipper/entrypoints/popup/popup.ts index ec5ee67f82..8f8220de1f 100644 --- a/apps/web-clipper/entrypoints/popup/popup.js +++ b/apps/web-clipper/entrypoints/popup/popup.ts @@ -38,9 +38,9 @@ $saveTabsButton.on("click", () => sendMessage({name: 'save-tabs'})); const $saveLinkWithNoteWrapper = $("#save-link-with-note-wrapper"); const $textNote = $("#save-link-with-note-textarea"); -const $keepTitle = $("#keep-title-checkbox"); +const $keepTitle = $<HTMLInputElement>("#keep-title-checkbox"); -$textNote.on('keypress', function (event) { +$textNote.on('keypress', (event) => { if ((event.which === 10 || event.which === 13) && event.ctrlKey) { saveLinkWithNote(); return false; @@ -63,7 +63,7 @@ $("#cancel-button").on("click", () => { }); async function saveLinkWithNote() { - const textNoteVal = $textNote.val().trim(); + const textNoteVal = ($textNote.val() as string | undefined ?? "").trim(); let title, content; if (!textNoteVal) { @@ -111,7 +111,7 @@ function escapeHtml(string) { const htmlWithPars = pre.innerHTML.replace(/\n/g, "</p><p>"); - return '<p>' + htmlWithPars + '</p>'; + return `<p>${ htmlWithPars }</p>`; } const $connectionStatus = $("#connection-status"); @@ -160,7 +160,7 @@ browser.runtime.onMessage.addListener(request => { const {searchNote} = request; if (searchNote.status === 'found'){ const a = createLink({name: 'openNoteInTrilium', noteId: searchNote.noteId}, - "Open in Trilium.") + "Open in Trilium."); $alreadyVisited.text(`Already visited website!`); $alreadyVisited[0].appendChild(a); }else{ @@ -176,7 +176,7 @@ const $checkConnectionButton = $("#check-connection-button"); $checkConnectionButton.on("click", () => { browser.runtime.sendMessage({ name: "trigger-trilium-search" - }) + }); }); $(() => browser.runtime.sendMessage({name: "send-trilium-search-status"})); diff --git a/apps/web-clipper/types.d.ts b/apps/web-clipper/types.d.ts new file mode 100644 index 0000000000..4d83d0f28e --- /dev/null +++ b/apps/web-clipper/types.d.ts @@ -0,0 +1,7 @@ +interface Window { + showToast(message: string, opts?: { + settings?: { + duration: number; + } + }): void; +} From 4011771b64e3deae02b6d6ef067b7749abcea6ea Mon Sep 17 00:00:00 2001 From: Elian Doran <contact@eliandoran.me> Date: Sat, 24 Jan 2026 13:58:23 +0200 Subject: [PATCH 218/353] chore(web-clipper): port the remaining files to TypeScript --- apps/web-clipper/build.js | 1 - apps/web-clipper/build.ts | 1 + .../background/{index.js => index.ts} | 93 +++++++++---------- apps/web-clipper/entrypoints/popup/index.html | 1 - apps/web-clipper/{utils.js => utils.ts} | 14 +-- 5 files changed, 51 insertions(+), 59 deletions(-) delete mode 100644 apps/web-clipper/build.js create mode 100644 apps/web-clipper/build.ts rename apps/web-clipper/entrypoints/background/{index.js => index.ts} (83%) rename apps/web-clipper/{utils.js => utils.ts} (75%) diff --git a/apps/web-clipper/build.js b/apps/web-clipper/build.js deleted file mode 100644 index 3826b25246..0000000000 --- a/apps/web-clipper/build.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = { buildDate:"2022-10-29T15:25:37+02:00", buildRevision: "c9c10a90aa9b94efdf150b0b2fd57f9df5bf2d0a" }; diff --git a/apps/web-clipper/build.ts b/apps/web-clipper/build.ts new file mode 100644 index 0000000000..2f5056d477 --- /dev/null +++ b/apps/web-clipper/build.ts @@ -0,0 +1 @@ +export default { buildDate:"2022-10-29T15:25:37+02:00", buildRevision: "c9c10a90aa9b94efdf150b0b2fd57f9df5bf2d0a" }; diff --git a/apps/web-clipper/entrypoints/background/index.js b/apps/web-clipper/entrypoints/background/index.ts similarity index 83% rename from apps/web-clipper/entrypoints/background/index.js rename to apps/web-clipper/entrypoints/background/index.ts index e8d3c6d038..c36aa48994 100644 --- a/apps/web-clipper/entrypoints/background/index.js +++ b/apps/web-clipper/entrypoints/background/index.ts @@ -1,11 +1,13 @@ import { randomString } from "../../utils"; import TriliumServerFacade, { isDevEnv } from "./trilium_server_facade"; +type Rect = { x: number, y: number, width: number, height: number }; + export default defineBackground(() => { const triliumServerFacade = new TriliumServerFacade(); // Keyboard shortcuts - chrome.commands.onCommand.addListener(async function (command) { + browser.commands.onCommand.addListener(async (command) => { if (command == "saveSelection") { await saveSelection(); } else if (command == "saveWholePage") { @@ -21,8 +23,8 @@ export default defineBackground(() => { } }); - function cropImage(newArea, dataUrl) { - return new Promise((resolve, reject) => { + function cropImage(newArea: Rect, dataUrl: string) { + return new Promise<string>((resolve) => { const img = new Image(); img.onload = function () { @@ -31,8 +33,7 @@ export default defineBackground(() => { canvas.height = newArea.height; const ctx = canvas.getContext('2d'); - - ctx.drawImage(img, newArea.x, newArea.y, newArea.width, newArea.height, 0, 0, newArea.width, newArea.height); + ctx?.drawImage(img, newArea.x, newArea.y, newArea.width, newArea.height, 0, 0, newArea.width, newArea.height); resolve(canvas.toDataURL()); }; @@ -41,17 +42,17 @@ export default defineBackground(() => { }); } - async function takeCroppedScreenshot(cropRect) { + async function takeCroppedScreenshot(cropRect: Rect) { const activeTab = await getActiveTab(); const zoom = await browser.tabs.getZoom(activeTab.id) * window.devicePixelRatio; - const newArea = Object.assign({}, cropRect); + const newArea: Rect = Object.assign({}, cropRect); newArea.x *= zoom; newArea.y *= zoom; newArea.width *= zoom; newArea.height *= zoom; - const dataUrl = await browser.tabs.captureVisibleTab(null, { format: 'png' }); + const dataUrl = await browser.tabs.captureVisibleTab({ format: 'png' }); return await cropImage(newArea, dataUrl); } @@ -61,7 +62,7 @@ export default defineBackground(() => { // workaround to save the whole page is to scroll & stitch // example in https://github.com/mrcoles/full-page-screen-capture-chrome-extension // see page.js and popup.js - return await browser.tabs.captureVisibleTab(null, { format: 'png' }); + return await browser.tabs.captureVisibleTab({ format: 'png' }); } browser.runtime.onInstalled.addListener(() => { @@ -134,52 +135,47 @@ export default defineBackground(() => { async function sendMessageToActiveTab(message) { const activeTab = await getActiveTab(); - if (!activeTab) { + if (!activeTab?.id) { throw new Error("No active tab."); } - try { - return await browser.tabs.sendMessage(activeTab.id, message); - } - catch (e) { - throw e; - } + return await browser.tabs.sendMessage(activeTab.id, message); } - function toast(message, noteId = null, tabIds = null) { + function toast(message: string, noteId: string | null = null, tabIds: number[] | null = null) { sendMessageToActiveTab({ name: 'toast', - message: message, - noteId: noteId, - tabIds: tabIds + message, + noteId, + tabIds }); } - function blob2base64(blob) { - return new Promise(resolve => { + function blob2base64(blob: Blob) { + return new Promise<string | null>(resolve => { const reader = new FileReader(); reader.onloadend = function() { - resolve(reader.result); + resolve(reader.result as string | null); }; reader.readAsDataURL(blob); }); } - async function fetchImage(url) { + async function fetchImage(url: string) { const resp = await fetch(url); const blob = await resp.blob(); return await blob2base64(blob); } - async function postProcessImage(image) { + async function postProcessImage(image: { src: string, dataUrl?: string | null }) { if (image.src.startsWith("data:image/")) { image.dataUrl = image.src; - image.src = "inline." + image.src.substr(11, 3); // this should extract file type - png/jpg + image.src = `inline.${ image.src.substr(11, 3)}`; // this should extract file type - png/jpg } else { try { - image.dataUrl = await fetchImage(image.src, image); + image.dataUrl = await fetchImage(image.src); } catch (e) { console.log(`Cannot fetch image from ${image.src}`); @@ -187,7 +183,7 @@ export default defineBackground(() => { } } - async function postProcessImages(resp) { + async function postProcessImages(resp: { images?: { src: string, dataUrl?: string }[] }) { if (resp.images) { for (const image of resp.images) { await postProcessImage(image); @@ -212,7 +208,7 @@ export default defineBackground(() => { async function getImagePayloadFromSrc(src, pageUrl) { const image = { imageId: randomString(20), - src: src + src }; await postProcessImage(image); @@ -223,7 +219,7 @@ export default defineBackground(() => { title: activeTab.title, content: `<img src="${image.imageId}">`, images: [image], - pageUrl: pageUrl + pageUrl }; } @@ -291,8 +287,8 @@ export default defineBackground(() => { } const resp = await triliumServerFacade.callService('POST', 'notes', { - title: title, - content: content, + title, + content, clipType: 'note', pageUrl: activeTab.url }); @@ -309,27 +305,27 @@ export default defineBackground(() => { async function getTabsPayload(tabs) { let content = '<ul>'; tabs.forEach(tab => { - content += `<li><a href="${tab.url}">${tab.title}</a></li>` + content += `<li><a href="${tab.url}">${tab.title}</a></li>`; }); content += '</ul>'; const domainsCount = tabs.map(tab => tab.url) .reduce((acc, url) => { - const hostname = new URL(url).hostname - return acc.set(hostname, (acc.get(hostname) || 0) + 1) + const hostname = new URL(url).hostname; + return acc.set(hostname, (acc.get(hostname) || 0) + 1); }, new Map()); let topDomains = [...domainsCount] - .sort((a, b) => {return b[1]-a[1]}) + .sort((a, b) => {return b[1]-a[1];}) .slice(0,3) .map(domain=>domain[0]) - .join(', ') + .join(', '); - if (tabs.length > 3) { topDomains += '...' } + if (tabs.length > 3) { topDomains += '...'; } return { title: `${tabs.length} browser tabs: ${topDomains}`, - content: content, + content, clipType: 'tabs' }; } @@ -340,17 +336,13 @@ export default defineBackground(() => { const payload = await getTabsPayload(tabs); const resp = await triliumServerFacade.callService('POST', 'notes', payload); + if (!resp) return; - if (!resp) { - return; - } - - const tabIds = tabs.map(tab=>{return tab.id}); - + const tabIds = tabs.map(tab => tab.id!).filter(id => id !== undefined) as number[]; toast(`${tabs.length} links have been saved to Trilium.`, resp.noteId, tabIds); } - browser.contextMenus.onClicked.addListener(async function(info, tab) { + browser.contextMenus.onClicked.addListener(async (info, tab) => { if (info.menuItemId === 'trilium-save-selection') { await saveSelection(); } @@ -365,8 +357,9 @@ export default defineBackground(() => { } else if (info.menuItemId === 'trilium-save-link') { const link = document.createElement("a"); + if (!info.linkUrl) return; link.href = info.linkUrl; - // linkText might be available only in firefox + // linkText is not supported in Chrome/Edge; fallback to selected text or URL link.appendChild(document.createTextNode(info.linkText || info.linkUrl)); const activeTab = await getActiveTab(); @@ -395,7 +388,7 @@ export default defineBackground(() => { console.log("Received", request); if (request.name === 'openNoteInTrilium') { - const resp = await triliumServerFacade.callService('POST', 'open/' + request.noteId); + const resp = await triliumServerFacade.callService('POST', `open/${ request.noteId}`); if (!resp) { return; @@ -406,7 +399,7 @@ export default defineBackground(() => { const {triliumServerUrl} = await browser.storage.sync.get("triliumServerUrl"); if (triliumServerUrl) { - const noteUrl = triliumServerUrl + '/#' + request.noteId; + const noteUrl = `${triliumServerUrl }/#${ request.noteId}`; console.log("Opening new tab in browser", noteUrl); @@ -420,7 +413,7 @@ export default defineBackground(() => { } } else if (request.name === 'closeTabs') { - return await browser.tabs.remove(request.tabIds) + return await browser.tabs.remove(request.tabIds); } else if (request.name === 'save-cropped-screenshot') { const activeTab = await getActiveTab(); diff --git a/apps/web-clipper/entrypoints/popup/index.html b/apps/web-clipper/entrypoints/popup/index.html index a1051659f3..ee4b13871b 100644 --- a/apps/web-clipper/entrypoints/popup/index.html +++ b/apps/web-clipper/entrypoints/popup/index.html @@ -49,7 +49,6 @@ <script type="module" src="../../lib/browser-polyfill.js"></script> <script type="module" src="../../lib/cash.min.js"></script> <script type="module" src="popup.ts"></script> - <script type="module" src="../../utils.js"></script> </body> </html> diff --git a/apps/web-clipper/utils.js b/apps/web-clipper/utils.ts similarity index 75% rename from apps/web-clipper/utils.js rename to apps/web-clipper/utils.ts index a69a00dbab..5c1b3efd6a 100644 --- a/apps/web-clipper/utils.js +++ b/apps/web-clipper/utils.ts @@ -1,4 +1,4 @@ -export function randomString(len) { +export function randomString(len: number) { let text = ""; const possible = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"; @@ -13,9 +13,9 @@ export function getBaseUrl() { let output = getPageLocationOrigin() + location.pathname; if (output[output.length - 1] !== '/') { - output = output.split('/'); - output.pop(); - output = output.join('/'); + const outputArr = output.split('/'); + outputArr.pop(); + output = outputArr.join('/'); } return output; @@ -27,14 +27,14 @@ export function getPageLocationOrigin() { return location.protocol === 'file:' ? 'file://' : location.origin; } -export function createLink(clickAction, text, color = "lightskyblue") { +export function createLink(clickAction: object, text: string, color = "lightskyblue") { const link = document.createElement('a'); link.href = "javascript:"; link.style.color = color; link.appendChild(document.createTextNode(text)); link.addEventListener("click", () => { - browser.runtime.sendMessage(null, clickAction) + browser.runtime.sendMessage(null, clickAction); }); - return link + return link; } From a9b8ffd94ce271c1987d93d1f47ab8c58a2f92f2 Mon Sep 17 00:00:00 2001 From: Elian Doran <contact@eliandoran.me> Date: Sat, 24 Jan 2026 14:26:05 +0200 Subject: [PATCH 219/353] chore(web-clipper): fix package lock --- apps/web-clipper/package.json | 13 +++++++------ pnpm-lock.yaml | 10 ---------- 2 files changed, 7 insertions(+), 16 deletions(-) diff --git a/apps/web-clipper/package.json b/apps/web-clipper/package.json index e7ebd634a9..8dcc7ec6c6 100644 --- a/apps/web-clipper/package.json +++ b/apps/web-clipper/package.json @@ -4,17 +4,18 @@ "description": "", "main": "index.js", "scripts": { - "dev": "wxt", - "dev:firefox": "wxt -b firefox", - "build": "wxt build", - "build:firefox": "wxt build -b firefox", - "zip": "wxt zip", - "zip:firefox": "wxt zip -b firefox", + "dev": "wxt", + "dev:firefox": "wxt -b firefox", + "build": "wxt build", + "build:firefox": "wxt build -b firefox", + "zip": "wxt zip", + "zip:firefox": "wxt zip -b firefox", "postinstall": "wxt prepare" }, "keywords": [], "packageManager": "pnpm@10.28.1", "devDependencies": { + "@wxt-dev/auto-icons": "1.1.0", "wxt": "0.20.13" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index d170e3d26d..f4fde97a4f 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -16286,8 +16286,6 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.4.0 '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-export-word@47.4.0': dependencies: @@ -16431,8 +16429,6 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.4.0 '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-indent@47.4.0': dependencies: @@ -16560,8 +16556,6 @@ snapshots: '@ckeditor/ckeditor5-widget': 47.4.0 ckeditor5: 47.4.0 es-toolkit: 1.39.5 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-minimap@47.4.0': dependencies: @@ -16570,8 +16564,6 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.4.0 '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-operations-compressor@47.4.0': dependencies: @@ -16745,8 +16737,6 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.4.0 '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-source-editing-enhanced@47.4.0': dependencies: From e37487a1cfaa447fc5464b778a9760f3e38c30b6 Mon Sep 17 00:00:00 2001 From: Elian Doran <contact@eliandoran.me> Date: Sat, 24 Jan 2026 15:28:47 +0200 Subject: [PATCH 220/353] feat(web-clipper): handle manifest V3 --- .../entrypoints/background/index.ts | 71 ++++++++++--------- apps/web-clipper/entrypoints/content/index.ts | 11 ++- .../entrypoints/offscreen/index.html | 9 +++ .../entrypoints/offscreen/index.ts | 24 +++++++ apps/web-clipper/utils.ts | 2 + apps/web-clipper/wxt.config.ts | 3 +- 6 files changed, 84 insertions(+), 36 deletions(-) create mode 100644 apps/web-clipper/entrypoints/offscreen/index.html create mode 100644 apps/web-clipper/entrypoints/offscreen/index.ts diff --git a/apps/web-clipper/entrypoints/background/index.ts b/apps/web-clipper/entrypoints/background/index.ts index c36aa48994..a27571884c 100644 --- a/apps/web-clipper/entrypoints/background/index.ts +++ b/apps/web-clipper/entrypoints/background/index.ts @@ -1,7 +1,6 @@ -import { randomString } from "../../utils"; -import TriliumServerFacade, { isDevEnv } from "./trilium_server_facade"; +import { randomString, Rect } from "@/utils"; -type Rect = { x: number, y: number, width: number, height: number }; +import TriliumServerFacade, { isDevEnv } from "./trilium_server_facade"; export default defineBackground(() => { const triliumServerFacade = new TriliumServerFacade(); @@ -23,38 +22,46 @@ export default defineBackground(() => { } }); - function cropImage(newArea: Rect, dataUrl: string) { - return new Promise<string>((resolve) => { - const img = new Image(); - - img.onload = function () { - const canvas = document.createElement('canvas'); - canvas.width = newArea.width; - canvas.height = newArea.height; - - const ctx = canvas.getContext('2d'); - ctx?.drawImage(img, newArea.x, newArea.y, newArea.width, newArea.height, 0, 0, newArea.width, newArea.height); - - resolve(canvas.toDataURL()); - }; - - img.src = dataUrl; - }); - } - - async function takeCroppedScreenshot(cropRect: Rect) { + async function takeCroppedScreenshot(cropRect: Rect, devicePixelRatio: number = 1) { const activeTab = await getActiveTab(); - const zoom = await browser.tabs.getZoom(activeTab.id) * window.devicePixelRatio; + const zoom = await browser.tabs.getZoom(activeTab.id) * devicePixelRatio; - const newArea: Rect = Object.assign({}, cropRect); - newArea.x *= zoom; - newArea.y *= zoom; - newArea.width *= zoom; - newArea.height *= zoom; + const newArea: Rect = { + x: cropRect.x * zoom, + y: cropRect.y * zoom, + width: cropRect.width * zoom, + height: cropRect.height * zoom + }; const dataUrl = await browser.tabs.captureVisibleTab({ format: 'png' }); - return await cropImage(newArea, dataUrl); + // Create offscreen document if it doesn't exist + await ensureOffscreenDocument(); + + // Send cropping task to offscreen document + const croppedDataUrl = await browser.runtime.sendMessage({ + type: 'CROP_IMAGE', + dataUrl, + cropRect: newArea + }); + + return croppedDataUrl; + } + + async function ensureOffscreenDocument() { + const existingContexts = await browser.runtime.getContexts({ + contextTypes: ['OFFSCREEN_DOCUMENT'] + }); + + if (existingContexts.length > 0) { + return; // Already exists + } + + await browser.offscreen.createDocument({ + url: browser.runtime.getURL('/offscreen.html'), + reasons: ['DOM_SCRAPING'], // or 'DISPLAY_MEDIA' depending on browser support + justification: 'Image cropping requires canvas API' + }); } async function takeWholeScreenshot() { @@ -224,9 +231,9 @@ export default defineBackground(() => { } async function saveCroppedScreenshot(pageUrl) { - const cropRect = await sendMessageToActiveTab({name: 'trilium-get-rectangle-for-screenshot'}); + const { rect, devicePixelRatio } = await sendMessageToActiveTab({name: 'trilium-get-rectangle-for-screenshot'}); - const src = await takeCroppedScreenshot(cropRect); + const src = await takeCroppedScreenshot(rect, devicePixelRatio); const payload = await getImagePayloadFromSrc(src, pageUrl); diff --git a/apps/web-clipper/entrypoints/content/index.ts b/apps/web-clipper/entrypoints/content/index.ts index 0ee35ef0d8..c085dd8673 100644 --- a/apps/web-clipper/entrypoints/content/index.ts +++ b/apps/web-clipper/entrypoints/content/index.ts @@ -1,3 +1,5 @@ +import { Rect } from "@/utils.js"; + import Readability from "../../lib/Readability.js"; import { createLink, getBaseUrl, getPageLocationOrigin, randomString } from "../../utils.js"; @@ -69,7 +71,7 @@ export default defineContentScript({ } function getRectangleArea() { - return new Promise((resolve) => { + return new Promise<Rect>((resolve) => { const overlay = document.createElement('div'); overlay.style.opacity = '0.6'; overlay.style.background = 'black'; @@ -120,7 +122,7 @@ export default defineContentScript({ let isDragging = false; let draggingStartPos: {x: number, y: number} | null = null; - let selectionArea: {x?: number, y?: number, width?: number, height?: number} = {}; + let selectionArea: Rect; function updateSelection() { selection.style.left = `${selectionArea.x}px`; @@ -300,7 +302,10 @@ export default defineContentScript({ } else if (message.name === 'trilium-get-rectangle-for-screenshot') { - return getRectangleArea(); + return { + rect: await getRectangleArea(), + devicePixelRatio: window.devicePixelRatio + }; } else if (message.name === "trilium-save-page") { const {title, body} = getReadableDocument(); diff --git a/apps/web-clipper/entrypoints/offscreen/index.html b/apps/web-clipper/entrypoints/offscreen/index.html new file mode 100644 index 0000000000..b6a07c8d24 --- /dev/null +++ b/apps/web-clipper/entrypoints/offscreen/index.html @@ -0,0 +1,9 @@ +<!DOCTYPE html> +<html> +<head> + <meta charset="UTF-8"> +</head> +<body> + <script type="module" src="./index.ts"></script> +</body> +</html> \ No newline at end of file diff --git a/apps/web-clipper/entrypoints/offscreen/index.ts b/apps/web-clipper/entrypoints/offscreen/index.ts new file mode 100644 index 0000000000..6c63f5f4cd --- /dev/null +++ b/apps/web-clipper/entrypoints/offscreen/index.ts @@ -0,0 +1,24 @@ +browser.runtime.onMessage.addListener((message, _sender, sendResponse) => { + if (message.type === 'CROP_IMAGE') { + cropImage(message.cropRect, message.dataUrl).then(sendResponse); + return true; // Keep channel open for async response + } +}); + +function cropImage(newArea: { x: number, y: number, width: number, height: number }, dataUrl: string) { + return new Promise<string>((resolve) => { + const img = new Image(); + img.onload = () => { + const canvas = document.createElement('canvas'); + canvas.width = newArea.width; + canvas.height = newArea.height; + const ctx = canvas.getContext('2d'); + if (ctx) { + ctx.drawImage(img, newArea.x, newArea.y, newArea.width, newArea.height, + 0, 0, newArea.width, newArea.height); + } + resolve(canvas.toDataURL()); + }; + img.src = dataUrl; + }); +} diff --git a/apps/web-clipper/utils.ts b/apps/web-clipper/utils.ts index 5c1b3efd6a..7dbbafd038 100644 --- a/apps/web-clipper/utils.ts +++ b/apps/web-clipper/utils.ts @@ -1,3 +1,5 @@ +export type Rect = { x: number, y: number, width: number, height: number }; + export function randomString(len: number) { let text = ""; const possible = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"; diff --git a/apps/web-clipper/wxt.config.ts b/apps/web-clipper/wxt.config.ts index 7a3ec383c9..f824eb64c9 100644 --- a/apps/web-clipper/wxt.config.ts +++ b/apps/web-clipper/wxt.config.ts @@ -12,7 +12,8 @@ export default defineConfig({ "https://*/", "<all_urls>", "storage", - "contextMenus" + "contextMenus", + "offscreen" ], browser_specific_settings: { gecko: { From 1e820439992197fbe66d4ee1912af70875139bef Mon Sep 17 00:00:00 2001 From: Elian Doran <contact@eliandoran.me> Date: Sat, 24 Jan 2026 15:42:04 +0200 Subject: [PATCH 221/353] fix(web-clipper): saving links not working under MV3 --- apps/web-clipper/entrypoints/background/index.ts | 14 ++++---------- 1 file changed, 4 insertions(+), 10 deletions(-) diff --git a/apps/web-clipper/entrypoints/background/index.ts b/apps/web-clipper/entrypoints/background/index.ts index a27571884c..acc0460c39 100644 --- a/apps/web-clipper/entrypoints/background/index.ts +++ b/apps/web-clipper/entrypoints/background/index.ts @@ -363,24 +363,18 @@ export default defineBackground(() => { await saveImage(info.srcUrl, info.pageUrl); } else if (info.menuItemId === 'trilium-save-link') { - const link = document.createElement("a"); if (!info.linkUrl) return; - link.href = info.linkUrl; - // linkText is not supported in Chrome/Edge; fallback to selected text or URL - link.appendChild(document.createTextNode(info.linkText || info.linkUrl)); - + const linkText = info.linkText || info.linkUrl; + const content = `<a href="${info.linkUrl}">${linkText}</a>`; const activeTab = await getActiveTab(); const resp = await triliumServerFacade.callService('POST', 'clippings', { title: activeTab.title, - content: link.outerHTML, + content, pageUrl: info.pageUrl }); - if (!resp) { - return; - } - + if (!resp) return; toast("Link has been saved to Trilium.", resp.noteId); } else if (info.menuItemId === 'trilium-save-page') { From ac109c2ece75230efba6ba76307531e53febe94b Mon Sep 17 00:00:00 2001 From: Elian Doran <contact@eliandoran.me> Date: Sat, 24 Jan 2026 16:07:15 +0200 Subject: [PATCH 222/353] feat(web-clipper): support manifest V2 for Firefox --- .../entrypoints/background/index.ts | 48 ++++++++++++++----- 1 file changed, 36 insertions(+), 12 deletions(-) diff --git a/apps/web-clipper/entrypoints/background/index.ts b/apps/web-clipper/entrypoints/background/index.ts index acc0460c39..953ba552f4 100644 --- a/apps/web-clipper/entrypoints/background/index.ts +++ b/apps/web-clipper/entrypoints/background/index.ts @@ -22,6 +22,40 @@ export default defineBackground(() => { } }); + function cropImageManifestV2(newArea: Rect, dataUrl: string) { + return new Promise((resolve, reject) => { + const img = new Image(); + + img.onload = function () { + const canvas = document.createElement('canvas'); + canvas.width = newArea.width; + canvas.height = newArea.height; + + const ctx = canvas.getContext('2d'); + if (!ctx) { + reject(); + return; + } + ctx.drawImage(img, newArea.x, newArea.y, newArea.width, newArea.height, 0, 0, newArea.width, newArea.height); + resolve(canvas.toDataURL()); + }; + + img.src = dataUrl; + }); + } + + async function cropImageManifestV3(newArea: Rect, dataUrl: string) { + // Create offscreen document if it doesn't exist + await ensureOffscreenDocument(); + + // Send cropping task to offscreen document + return await browser.runtime.sendMessage({ + type: 'CROP_IMAGE', + dataUrl, + cropRect: newArea + }); + } + async function takeCroppedScreenshot(cropRect: Rect, devicePixelRatio: number = 1) { const activeTab = await getActiveTab(); const zoom = await browser.tabs.getZoom(activeTab.id) * devicePixelRatio; @@ -34,18 +68,8 @@ export default defineBackground(() => { }; const dataUrl = await browser.tabs.captureVisibleTab({ format: 'png' }); - - // Create offscreen document if it doesn't exist - await ensureOffscreenDocument(); - - // Send cropping task to offscreen document - const croppedDataUrl = await browser.runtime.sendMessage({ - type: 'CROP_IMAGE', - dataUrl, - cropRect: newArea - }); - - return croppedDataUrl; + const cropImage = (import.meta.env.MANIFEST_VERSION === 3 ? cropImageManifestV3 : cropImageManifestV2); + return await cropImage(newArea, dataUrl); } async function ensureOffscreenDocument() { From 785ace64addcd1a7c86746af8b9766e31d01759f Mon Sep 17 00:00:00 2001 From: Elian Doran <contact@eliandoran.me> Date: Sat, 24 Jan 2026 16:20:36 +0200 Subject: [PATCH 223/353] feat(web-clipper): use new Trilium icon for now --- apps/web-clipper/assets/icon.png | Bin 12869 -> 10710 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/apps/web-clipper/assets/icon.png b/apps/web-clipper/assets/icon.png index f4783da589bfb1b777e943d71bdf3552264b2ffa..2d4da35c43a20974961be21d9535ae5c8f995eb3 100644 GIT binary patch literal 10710 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 BD8~Q* literal 12869 zcmeHsWmr`07WNDs(jm=A2m(V7J#<QU3&SvU$ABmj(x4!qfOLnXv~-DtbV*33l(c~G zjlS=B&wH-#{5jwCoquPpYtQVxp0)1vtb48f%wErq)Y4EQz@xzf000Ck%JMp>U&~(y z4i@TrCD}&=03Z+X(=+nYf%$;kJX~$;oe&_e$8HD^!q?sg0PvlyeQS$c6L}MQ3#X{Y z@U5ns@wCCNzW%}eN$W$&&hCDR-b0ccWn$kA8s5R1wp-{%z(vyg;rj(To&#Twc<N@J zZmQP~x48$1(H;z6@w5f3oHM>mt&s91#C+6s?09_e{j>Ymrt|Z&uigGbw|7n+uZkUv z)k~e+Ffd9nFdhW9-bjpyKVQlapF4eYNJxGyo_ldExk$ZkFhHbgdfejqlxWg*k&ir6 z7s+}g;Ai^KrMcqkM_Gxa`+hsNitCS$MGt@c^enN}c!qtKOUgfDnCp3~`PS2KY;Cl+ zqKUH0g#_DJU*jKE$e2HIo!B$vZHxU}PxZ5}ZP9qj^nU%F*7s+SGtJZQr~8FR>_4Fl z8LNv}{T3Bcd8eN9`I#@nE9Nd3ZS>j}z640+l1fF^pKX?ARPTshWjI;Ira(4*v@`SP zebPk8%bpl-ygN+ywb(aYeK+gER&VlAL(Jh&)iZ;R@$Q1h0)73#H?M>Tif#VOlUFKH z-lg%;8*IkNdpiRStEzUe(1+A&4y<l70iSyouIipNZF6|H(b@X-TE66LZ5=#syB4-+ zyW{oJ@1v+`n^jM9^M^QlcF)T`<Gl8C;R5T4dE%xD>400!NCIo#1ztnSnLXbysy_dB zWmyvMuE;D#B~_4!7Ib2!{q*EJKgrWSbF(C+gTLP0jDWLBrKgMsJ`)j0SMB4m*@ok! ztc_sKr#eP8ZC<Wrc4e_eD&HG_{TjnNo&uip^kHcj&CY|oWS#!vytgJhqSoF<L#+5= zPjFe^=y^QIe`DZB0GZPB1lLX(JUIqaS&Bg}t0t#R4(4kFJT`ZRs9T7nIwP20Nc0!w zzL0#7Np1V~@f%~?RR13ogE_AZA0Z|u4HjK=ABykS9CJ7A*Ii{#Xo!5zOVAWOtr>57 ze`a&qTlzDtv2Ez>lj;rEoZw}pAN@4psz2^5W3Z`+GQ%as_#Y(#@n$(~>poDm@C$Fz zpdXA-^a%{)t#K8`yy|F3*X;FQ-#6X3;dQ+~b<6I0vpGnezkl#4O?&5A|9r*ctLLTQ zR~^mNP3CqkTFzNNMPSqWj(1<&%vEeiwHz|iMX-OYp#!Qo4$3N%h<yf^$Wq~`KYBzh zv@3)6)T1~NHV2Y>_dOo(bZk%zY3rk`D%w~miZhw~gkDE~nyM$P)#oj(wB$f6-({VD z4GruFK^E>=oclIqXv;t8;d+6;B9klU^edG`2l5UR81kXQ(n=9E02g3Bp5DDofcZk< zOG=GB<JNusD9dxd5#X~@-XY{*Zcxc`$a^mx<CZOo6?WUpQKQ>z#Utuo-pC>;mrSJs zX-a8d!56%?<v+WB&SQsWzZ*827!zwOeqxw|HGuTQ^7K%#9p*Dxp33Le*y(u@Uk`OB zA?RGC63hG0WKo*z)3RCXWB;U4e!>8F?|@!rfmn&L1raspy!2sgqcYQ~TKFvxA<L!+ zXgcK^H*py$JsB%6LF-y-y`lG(ugDG}4dSHEC|DmmlRXx7OoJM1L1v-aCY&$2PBLO# z;{5#c$wRLDiycX{I5}fS3`)o*L>ELCZO)wAb#k4RH0v_3m4&2VuZ3&2p!-i!-(^>_ zng`-w$Pz?8QJ73L4{bf*ke!G=7%XC`H&E9Iz~0~W$F4c*diqtO;>-H0hVPX=`OnT5 zjL*zD#@OB)dB<#)d)>iBCoIeopkmF^$8dDVBrmm<Vopa~nH?ynv<Y6t2(G@=XKq{w z9G@eAknHNLX2=j+Z3M7+?<NEUz{{@593O(-ST=rrts;J=^T40u?sXHdNBlzXS*q$2 z3m?XbyO-L`<BcT7f@E2${)!bMjgd;(FVC|@?LXNekKsp2>!~+NBN_LDp}6OrN^~_T zSeSNQIpwPy-$8vIiftW~cBe*N4q<&7s@^(fW%WX%Na;kPP?sT$9hOC-(&3*N>?<dE z8p^P{8<I#U2z!$Oe(d7-L>P(TsQ68dk3;GE72T;KJT$ozqgmpqg7BqWkjqlIvXE<_ z+$`oNlkjTjiDJ4BN3^JDSrPKm;d4*oeDb7ff=v~|s}w?M^hO1N&T*O(X1y>_f=1&P z397BaJ;2eVG}_zay6?{sr^Cb!<V9oYN!kc=PiG#Pd4yjJ)l3r=S!Y7TPvoS&b5ByM zC$ErgNl$To4NXsRd6iNK;V~<M6jS)#*sCQ;j}o$|$Gh7p&b@UQh3^?)mf104HplJS zbQ%R0^$R}?se4N#q^Eaz5RBs^7ASQOOHh@NV!}ei)rcV~qM=l<>wb4FNYf)rGL`0& z93)K>z3h(N%NQp6ty~A&-SK_9NEuz8lII)9z<#WpE(z939K%S&=(^7sI?z(!^r3q9 zk{X@zYc%SDXAla4k9$P*7X924ih5MwvUoc>3)`%MFw+nm=)|TSIqY45cay$A{rzaW zBq@11LU=u61d>7XY@0QrMB1^aQ0^=H6aYIpNq;-3*?pc2ye@DeN@U*3*~p!6M>kHs zJT4x1?mc&JX3a7Cco+=nvf9KUeY)s<>!1J5fLSAvdhxlzSb7T1b;fk_Q$l-nE|Ek8 z-U$aX*vJ5D*Nmm6IwJ+M?gVU(cG6E9uAGG79eMe+Ks!yr+t-q0P_ZSy^Tk-0KcCVX zRf?~SJ<r>yN{U-EG22|kbPFX`XlL&bK>GU=4KjdOLp~9Jw}>CTx~ieWzdhFbZR#Op zQWsl7+(RM9A^Wg%OO5B<SCF;<Ewim^HbA+pB2gOJ53{vL?7)3;p9Wsv`M!PpMZ5Jp zov5!onWtD)OF{2pd~$zbwwmKm?ibngD`tuJ_sF~z0!A(X0&6034l%F7?1pkXBFKZI zN_P`SS(-uMMADfR?%C@fC2gi&yA;U;@%xiylwkoji}2={<Wfkcu-z4SAdq$|G0;>m zAdO8cfZUgZ90G}@3zjlsm6rq&<xx%QnW_}bBe(eEupepITCozv$v(LIk+6vKl9N+o zLRo2X*^1KS-d?&r&kP!OgiW5AU#>@#e4gfNKC*-<N2^;gkY8&RaG*+5*7rj&QOOzI z#?H%d&PISbk+os`vd=(B^FH0vWU!ha8==|5sv44?m@o`-8A=J_#}{!sN&}^E<pHlq z4E`Zdq2u`22sLbTR*`}+v_h&%Z|Bl5uq^;0MW-ynzQe3_k%gBK^o=GC7b#!ZXKBg+ zDCLzrq5y26e~&A5qFkTnMPl3s&9ronNH7hNPJDmV>9LAL-**O$chK<bZJ!<5kpjRe zYwlR+Rnf5B^5>N7sl_6Q+a(24v>4N>a#@2rm3D(+k2smfSF;p>ia3Occqd&DBJAJ* z5(=_Z39PISS%>{g9aHeax{LO$1i`z6K|!StXuAOr47s6)%5t_J+l@}S?%aap&3g^E zFeVC2$2;s+bVfc#gqzLNsCo9lo@Ej=b#GyYZ@u!c>;il+5_#5ZDtCX0E3mfpJ)MN@ zk1Fg5%xb9@$+{}+Um!!+_ePGSVAab6&!q$-u@sG@1aXs3tt{T|J`Ph&pp-l_GHCq{ zWQ%rfFJF2unr69>xA#me9kLQn4CcZqM9yZg+CHG4=*s@O*jMIP-1T%Lyzjk^{ZH}N zN^oiP^1d&+aj~D6gZO<2a-v4~?x5}Vz6_Jks|$1*A|*|)Ok6$WwoFlDwd8x;(a+qR zR0n1+i6IUA8oN^x7vAzb^5u$&9-*4QyjXI@2F@f!YRwCwN+P^6ys(m_tmlOp(ZTPZ ziY}&z=5MjXvtL>A!8ZzuqL3PQ_9GYS#O>>IoF8UkOgj!kKWSP%|G1|Y)FwW9Gd6-7 z;n0+ejObzle=3e~ErHgRI6Exk`?C{=bi4&(XA-(3^|!nCLwMqezI{*nCJYS1{Gc_D z+y0pe-DKd&u2>p0E`5&0>vh7&(@1%>ui>9O8n`^?jJIVGmIGM4qVJIX?z5G$&LYln zCt3?w!$Y67ztm$Vv(1Mp_uff-P9eUf<JEB|oHT1dSsYrd&gM}6BEzn=AET_1kT!fy zOQ)tEtq!^xS+{NBN<u$_?C+NX2acQ+{ru8=!HjlHdms{AMG!fSg+@S+ajlZTPd(Ss zK9OO$T$8p%<k&I+Q6_k=;W@LMy)8{uXFuPNHC^mfv7S?+aXS4?HNt0bBrIBt`&PRu zqRQg)Nqe~?c6&Hgs}SJGhZgXC4y*mr3DB?_q8Q@9FgBXs)yb!~HB)gD3}Y8HuRL2S zty($Z=gT9*Y&^u?LVTE+CIc<l%Chx^rC5+J##VfKGbewCE@EX){w5Wk`-*Md^N!v^ zoqE1z1E8-CErT2hWyiw6l?ahX<J#Wy`auVK#TXhbp)}nXdFSLaaps8~q}@h@k3x)< zRXH+OZT^O#HJK;y6&|y4sjOC@rM4m48yU{-pMtdoi4zlvg3!H*@tsxuU>RM#U{@um zox++S!#!!YSl?XR)^(aZ4f4o-il&%8(;3XurH*#y8h)lO9(hrbpqAnY_jb;S7cW1J zP1hHa&;%;tOb!rq1{aP=heSzo`_fr?rRF`<Xc|hiG6;1`#njhyHp;FO8MAPewyh!2 zV-EhvB%^`pB_}``cTlnuc!H~jJ4b$c`0h(&gZCKzEcUm;B;3>bVAnkRD`i#5W(Da< zF10aPd89S{-umcH^h4!Y0ERDdP$`)!Jy5&itqNeZ`ON*a7|L9mhkiXxXf+e5R%*%$ zZ{tZ(LfhaIwH=F?b{YSw_qYIifSrev`u4-7jZ|vDZ~<M8YO04ps>cKERA}f|!bZow zGc>v2Os}7I)R?AjN+Ke!qr4<(d=G^7(#baoqq%a1aKJKo9wcEYLj_gUfV&EzkE}Xy zFib-50?ye()5d+KEQ&89mt?NnD+V;P-1naRAj-K&y)V=jWi=R@OhrCjF3zeINR~Iq zIcAz3U|s*2@#<i4???T*rwP__M0ike)M`2On+iaAY9!p5U@womsoV@ZzbMSnZR<gc z#`5)oS8dmpXz*9kOiZ=?<1exKt1`nZsw#+39KZ4^b|<x0LU^L?b`~}m8jPd!?$79Y zUSAA#+iNDB)f`C7+A<KdYMcvi9Bd6f9|-G>z%@2~sI62e)JGCsa5`L^=qP8X^C91^ z;tc3PoMxpvjd?n&$L99V_$`C~)~iFVd5VOpSu~EQ!W}+C4@2q1)iE&VVn0%+F@6t6 z__-9$>=K>%k>1l!dL?!D3RVMiOR#iVaNW?;Wmrc!aivTI4n3g7)wU_2Mf3#K?WE8f zirH=D7v<QHnN5**XCWI(vy_qLDL4ggSiuFidK8mfRJy8DiWA{cc20w(#E7M}rW*lC zhe-ZL$uGux4*hIRO`MU!ygD*XcEU~fc<up3AfTIKg>8{EOb(WUl5{$&6iVgvbOxev zGNaO{!lEgCfige*CsB=A-XPp?v+)FeF?m|hsyxOT?u?H_)u5ZF7$!66+SB0>^I^Uc z{Eg<@QtE&`g_DkSyKc<DUD`Qm5zHIE{jkgFXAkm%Uet)<`1marcJ-EN5tAhLU}Xzu z$2XbZx&wP|$%bEIfy32LXb)-L!|X`+Y}RaryM9)t%E&qQ&wu?WgIIV38L4D5px=xA zCY>uHzIDA!!oVeSDS(p@_`P?6v~ZH+k-ph`^fLi#{)aI+r8)sR4(o|7itl`L&L10y z)o1XZu5AlW_{0=1s7p3r4!!3$*w|9h9@CW>lfrw$YZC>t+w^+AM2$5uaaEm}dH8`k z+}BSH6wt4Kq?O9GaP{DD=yDeyxqQrymRj;zo&80cIaO{DM<xH^A$I2{!w6m9!fjYK zPzf9w^GSM!2x=$6RhG|IyH)pQuZ<XfK6(9)?3wR+LA=WBd!sRZ*DbxoiyJm1#>>Nn znMQwer2C~Z0b24$@C-CY2`|L_^q%AK!%yleH4i9%L`s{CoqcL#B;GOTOlG#j#4FYP z<_3kzR35q{r>mXcHR}%pRRt|HtsZxeAB>b+1HTB=hBo>5k+Q{PTtrp!jY<Yga4lb# z&RstXyt$mjQFzaQ&j8M!&tGdw<bphhex&?b1}Zr{!s-V)iOvxBsW;bQ`o(^)*WFiK zoo~1m-v+o`Nh#AHugKcsU9XQ`FdA95j|#U6F4J0=kMAGH(!!g+VU$Kt>bEdWhJWsC zKNPB&u9l0NyQOD8N{FCJtjnMh9d>>Y3-r{0Hee3qI{-1+ai*sBV?RZdcTaVCb*ME@ zPECCXX}QVfJ{V7v9!DqtW(RM<`SJbB&^i^j+I$(9vzQ|h+2;fzxD9$N{w4H7<>>5+ z2~V6*QX92vo<ob~OX9j?J#Kl~Rf@Ytwh=e$HEDo~g+Ql7ezS=KmkFcJsPf)~dvK{x z3Zm}CGEAw(2W6HlQa&<qo&xSrK@4&*^x4SqoTvp|mWt0s^k(Ho+rYG+c2>^JA!aZz z1dLWOgpK(YeK!Oxe;}kI(o*ncsCNa}_+_+0lLV2c<AG4BDxpt0?Q*gQ017nyqQyRS zzu0Gj*@~5<&5f~qL{z}eu0wm``C>YO8w)OXG;xD0xw3VO(-Q`I1pU#^7$dAVER(S} z-#V!I5B>YeYXlrad^(}dGII;1LXFzyk2~)Y>zufwaWyH~DU6|WSP@1vfVSP&fNm%E zQkHwa@Q&m2R|=tDA7_q@Buur3)T%s1J@zx{$EOys9-T+3DopZ2_B1J>Q_-KWjg<xM zu&eD$J0kOy99)b@f4p%l4|jmLHp<FmdiWzd^DHbOV|}##I>AiE&!dm}hkFUN@ckr+ z55hxoUWt%H4~kw4mlLRPjgA&NmhX&9p35}t68hU!+)m&-pKMj~SECcOI11ud%$$zW z4wm_#-^K(dcA0j=VCVu{+6x`D%b$%P44%?oLYr8u1gE=ar=5v=bb5}T%~V0(WPG|m zeG<YIEeb$OlHMpsTA)R-b(osI%#=uOL#My}5(Emhxnaa)E;Txv(n4)H0&M>6ex$vd z7yQ?LBs8jtB#`%x+!M_XoVs;ODz>D&tX#`mxdv&m+Y_$opLf1ItipeJC<1pFX`6R0 zVs1pDIw(ol<m0>adEc0~?1I;{YW#|D9`Kw3?!u(-f&KshFvMO?PD@2j?jJj#C_icb zub|3Z(o|uKbq^Id32lhoag5TrBBDebD5A9PP2iP@C7WGhtJB1j-&N|UU0NEpn(XK? zHpDiRA-)E>dwS}4y&`Q>#RFS4uQr6Ax1O)>i-U}K1U~OjVGAw@=|(mr_mxL28=gpK zi9Uy=7=KJ-VO<t)-6vVPGLNzSG5u52Z!)bXFi=@y;LiB{ub_;tH3UOf-DsTs9N$I1 zC#&3LdA9ap<vZ<W@PJIlgXHZAi7II>%2^|OxPc&K<-tl($#x>+pl_+i*Ok)O?@AwQ z-gGK!SQu}JmEB{hj9^tJ&d!P=?XM)sHD~LQjT%~&ypfsad8K;K5I2SnzexJ|?q$dA zl8<ZI^;$?0c_ex|&&y*zv=E;l#n0}ovGj%RXdxLvoGt4W6G17OV~$|3AI6C@`rT=; z`WJL=pTHnCIU$50-YDM2ar+guzb@rg8|H`U=2pnC`z0W+*szawX^EH$tabKbxT$IO z>daNWIzVbT#$%ApPGknPQ@vx4+L1O=R}+J~I&;IUU9Aw@zRqr_(f|M?q<r0Aa7Tm} z$O>U=?*e5yXli2u*;_-I3?b^g>TYrfJ9}k64}`9th92C{5iV-YBqfO_;VXs$a7K8+ zK)%jSE}mk(P^RCwVyN?9Vjd>YZxt^`D3g)87D&$30|64`7UbpyEBM+Y`I#i~KoTC- zHex#Rihn|&uAoeIUS4iuJUl)=KHNS6+^!zBJba>}qCC9(JpBA%lm^)Iv5ObX7wqE6 z{0rg_40(hn+yhn5_O33VUzji}S8p#U6BBA2^pE*DyQ!=H1@GedCkrS(czj`QJbc`| zJkHKMf4A`TQb3|W{+!UiweZwKZS3>tAUs{YJ>UohB*Mju`R@?c@W1Tcygi(Lhhq)r zK{z3tQL3IOuYCXFQb|Q!>o1F66xiB3yZyF8k^L{4UiLQsB<o-1_G{#KIDelA%KR_f zf6@L&?7x*!TI%Xz@~&|2U(-{Ohcf;0FJ|oux3?DieQIT64M*6Bz`!;FLI|)Rzm+vu z)Y^&{jFJgJAXW$%zo5<Epj2Euy<jeI#4jimIJZ3t$BIu7W{p5tgN1)t3&MB>!7w2! zA+V?rFE2053c-i4w*DK0riVSMDq&84pVcoYYZR0ST+rIuhF=&gENUYF7KB^F!6Mc| z0$>;)KSG3;SJavhA@m!{8ZM^j>fsDSrPJOSW{co)bFuwB@QZLU87&nk6F)caKP6gD zFfSXF0hCG2-o@MZp96aK&InyE*e^Eugam{I1^Gk-1o$8VqPznCR5Cz#c%mxt7bYJs zH^1QTkzZ*MLj{8(7WS)7Q2@W?s9410JP<H1R}Vc`S0^abuPK3kS^h3>ki;KJQMUI) zX*~W_@qgC5F2enft3Pf5C;Q(+Akgo!6@$V5aN-F=BL1KgW%tJr+z#eqi$LAqe-_j~ z<o5q2S-gA#f(UC7VK4-ay8Q$pe80%G;s=XBgy0A`ieEwgKN$WC-P6^^%LnFxkg-KY zii!qRK)<5_vHzy>!SA5|()O`KpqSv~<rm}SW#ako#{)-*AQ1e#0$^b))KVhICkh9P zB18nh{K8gNBGwQQUQsyYUuXFL5)VHwKOdNn56sW2$ImAQ5f<YU;N<1|TZj@ozgDS# zWKe?V|H|<n3V&PHP}KY(LoJu6)tBe5<@Zm{P>lXJKY!NNf71mB^gk#65x@VV>wk3p zM-2Q&%Kxjb|IzgyG4LNL|F63KztM&F&jt?Rf_kd+LA7V~l*#g_)(*=`RY@N39bg2| z3LW2dK}m4kl#M-6{owSk11QU$>WdO$d#R`^V6WqolZz6l>~gN6MATjiMqYBR&cFHq z!0*RXgf+;=-pda3>+#eui1027fK^3aM$dP4Fa1d(*(80hR8#x@k(==wr4$4c6PoNq z4*R6JSCv)mMFf(fjM++iBFf~nXof7&fVRw}OsOnm%ApogSIaS|9mTGrdk2rQXT|RE zMc@l8J?RX5e5cFapZPKN_fsS&(Ff1d(yS9wQ&Jbtzb<~e**8C2>UfS##314O$H^0N zL<SCs_{;}$2f#Q&wuQ&VN8qUaWU*=W8ONc9G`bs>8=4#Y$mc0*TwaseH|W^FE&#z6 zniKXE8fOqukaq!$wV683{16+E1T;j$78jhuiAkJJ0@|Yg4Dtv+D{Jp<m#`G#?G-Go zkU(qYzTjV?TY97|kmAOpg>Q!A)xU~N4Ki+L42hw?f&ham+XM~)Zjl3vb7)@NV|z(J zA~en9u-eCM%+h*8p6z{$ZibTR`&iFxX$%IQ$ppqct;Ps(?e$o?->ycpcjRxhDYYwm z;TY7-usaJ{dTgl(+Ldz4WI}~!_~nL<NX?Cph78joXm2H|{LQoreWpOr92zXZxYu9) zq9u?vFclpZpt)pdjL{^6LzTK(){2%ReP;{v1f5Vd^4|PXZ2LMY+OyZvy9|~^&8=8l zd$NE8vq$2Dg8-(LP9b0+8vW6hEm{L(!>C}X`BexBVaU&3^jqRvQ|zz9E8i+G3ecx* z?5fc(#1EfXQn+DS0wyuNyzdfY?AIxM-s4BNk|{HLy3LX5x{wpT63K+$M%SRK2#4?v zDP*0RM&hRBEcFJ3cT0XnOUtyCenVrb#!tXG@6woMr1cKH9PK3#E1IS#F18++`7wAF zZ3%Np0ZQ)rpwqb*t#>wNF1EU65!j3yqVshTO@c|=jgwcuTwgy#vK;GUN*IJ^A-v}# z*g$p7hs!N%Fp%(Qiz6=vI|KNpH+Xgph0i`R+5A8O^+xHa)+bQ1?w|%303=LugyfLA zPgAH|;0MCfLo$;HA~0(S+ufF)9L;NnTw@+)#Jo>+&XppgM7z74eKD4|GbZ<4C<%iO zv-$NZ=(6@sVpAYRyY&*qcqM62<*jnxBAv!Yw`n8(=TVN2$hY=Jb5Zg5QJA$3mP{OS zA~g{Lw)7);;VTtA!L#y~uNb1*z6A$j2fp)cp3W~CwBfOgvNuXagWX2TcGJ1@4FIKh ziMQ@m*Ryd@Kml8+GA`oUkqxHmT_(Fi?4RymXtb|ebzE(1`#EELu(hiu5z*f5<q6b1 z)q1LpwQLAr?Asl{ECjfwhMne99exWGcdCW}onGJU5<@2Fiv~RwrsWR>)VfUGsD}4f z;{=HCTJZb%AJZ)(j(nNrW-P$1Ke(yW1>iEy%3+Q#KgnI(Vtu7pHjEPX(u^wMN+79- zr2n=mdjU`y*xll)E9ON*<z9kvqMT%z(HsM!OF+kjHH`brof+7QsTPY_%RuPdyXJfQ zMLO5s$dN@(%zQ$-Y9-5sl#>h4YEBHS%9=8c8U0Dl!}GEsAH6#6(0uM&c6(P<)*B7w z-gUP{DRkg?Wh-9DPe^-o`}y1h?&hAdeN9^I?qCxzM}VZ*bH)}-Bc30Ld;C#i=#U(q zCL5e_r6^hx9$g8F;ze=IF+hMiZtF|8A6GXRW>z#)FQrit@_i~olHTZ&Dy@}fCUhQv z!>r}8;2-ouT6HsoBTefc#+#}J*^IvHT0<>d3I{A-4$#k4k`J&xx5NC{TeWeDNRot8 zIWL6UiI;t3$_QfY*_PV~(@@}3W^FUtAr{Pyu_VTyb~uQ{!}8sG4A4A-QsVPVDT(q_ zCI+$NwI|F^M%i3e(vRvlm`Khvm#j#hVJ}rlge>mxzo`mjTw{LPL_l><s+4Mr{ll~P zqFDX*J*E=@tx24B3c^i2lPJb|Y(@mAhlzqbozZ?Yu6fSiAAAFFUFB|TqoZ=9nY#M} z?;V{qQI7>huCP8@u2l}!#VZU^?J9K6^+&5gw+#(pVJ6+5-n7l)rP<O<ZPuOJph+cA zx61AsM$f#5v|EiX)<>J{V$osJ#pP?N1}30NML)u=f6P~=g;lzdU-dANhm@3Tz9@X< z7%o$$lk+VzyI&@aSB|J>7`19J_bjN2>#BA6DLeH5sPz~RPbuC##I5w}ccKe2`B3V! zeayBni?7zj;am9zfz#=yqIh^D5zHVwgDZh|tw+=&tSodYqjyj5!?QB%o%=-ZCRw+W zW;a-u1jj39Sw`Nnz4Gqd;B}JAe?vq(44$@L6RJ}1v3Ym?AQ?bQqHopyvEOc+`D1ap zvOE_y_k`T{(3NA&_&nnzLFd?HiPAIXrGZ4Jbw$etdn3kytu}K#Gd|lr&US(V82G^k z`yd;wUkueqkiu>+|B?ul+=A_#3Rhy_mZw}$oxwod{G?*>?B;U;Y=N~?%4EK?pXubC zdO3xxeq$|#DM8{U`?a5n1OeArkqMp|Pf3miSCRQ$e23Slnjsc>WQ8Su`N`vvV9&S5 z(jkku7wRM-i%}*N;&@cfG*bh6_nsb&1i4079DLkd2ra>Rf?bPOOYBSGs}mxLcacrZ zr#riVom`b=kQ=_jsc_n2+hoI*YMapQT<1_7xyxM&#-M2LDe_(&jrU)tWkV&O%#Zyh z0*5D+dl!UU!AaqxI1-U>&M<Cg8a>Z->X>}czH6lQEkAt4y>IR*OQv(&rs#?+xB5pi z)ZbXRuTGDwu%7d%0(t9wvl{9+mKFLX@uGSEXnZEWT!Z14N|Wo1Z&|ZwaGS~T9iXRL z5?B~o5YbG4a@;AqTia*a#*Ay-jqO9~k{rJrdn41?=)mCds;Vp@oMf!DZ~R`vn8(`D z0;yIqdtR2$#<Z|IZ%nc#1xr7pT*p!!S#^WOSwKxaf~B=J0#OEcQ7+K6Y6Wcj?RchY zAVHodT2BjgpG(gK(3XVcX~o)7@<OH)JyeJ-nRC=~2ALHWGh=75^l)VT*d-@rF6eu- zh#s`BJ_hO!HGme&6j|j0Uqm=W(o|$s9wn8vV?fCRgu3n&p%*B-6o;!4?U_eHGK2^m zSr>_C698>gAFJQ5`SQa^+(H?mZU@v?rDqli^yd-;PyBnhYa^y>WckyNgEY@i>=tt| zW+JwNOMIy~J4IPkvuYHML}FFY_5(h&HCAPtN#uFADtj4w!n^w786HpFjV!n1>1N;= zdVyJ+QS<^2T`T%PKR)@&OtA=+658EGdlx5mGPJ^M{xtNbueOptzaa1oOz8H+Mb|}L zZZZHB<UQeXniDQbp80LVKbS^6-_p`vss!5j_`{_Wcu36~>WQ@;t#mSSJ<fEm>o`i2 z$b55ue<Ua=m6rD9F%G-gg`C#6emNbpkA~~D<NI&++mBH$T3dnw-;+{2bJe5qb?aA( z)~4>qL%NcAbaJ*Aw<_0sP6amNwwdVwpN~Jie#1km{;729^|}sQ?oN~hMI!V4$|pcc zioQFga~^&6C^QNN;J#7-5pw!Augl{xG8IXMmWFyM!yxr)rkyV)Zc{vv&8@!gQfC;a ziT3A0cZJWa)oj?T+4lzy`ui$NXnLez-TZmvQo9bp$U}Q9!B>w14!B8dFdfz%tK^3a zaYZ$X<edwT^t33cj3qTAvK(3cv$J=u-)XVEvhGx20H#c8f|~|D*4u75D(Mx&b-a=C zuR|(iz}Mp0UztGyI||7}E6p>DK>bqv6sxBA)Y?oL*3(_1a50knwzWhFG`f+y`oTwj zSd0O-Sa8!Ij@+lB>p#njIHDcxGsUKZwK>AQB{rhv$$q6qpeBWhK`UU4Q9uBvmN(NO zu=k2-)DbEy*hF6>^Ex<hE=dT#R$WDI&*Ewjc6Q(Vv*ej7IyOotJp->lrh~B4RRLTl z5%aLSthbS$XQ57q-n$^yHl(_}7~|RfojY0FR*cBLBBboOVD-~PC26Ec8CeC~r^Pnl zadYNsZMYwXb+1tPIadCO&z%wzrn?i5F&Zkn2y>;pH4lwf$~S_!8Gv7^$ZKDGdbx(> zCaximP?)YJ%Cg2eRLDuyPL<kKHe5Ggt+sR_Oj_I_S>gwIe%a^OV;TZa`C&A4sp)N7 z3ej=c<JJe8?~yEN5bVjXJMU`08%K^fYT-7h<=%kx@SeO@3VcGkkxi&08{s>ay^W&+ z6(P~Xzb35(y15jSYL$4)q|5gbDLIq9Js6qRWMTK@81o}5O46Zp#aiRVM`j_lB%jZk zZ`Z)rLH7zKmyh8r9%u6-63R0e^Ptzx^($sTKCDf2DY3Y@Z4(CI1D2XE&AGkwZ@p#H zTi3lLH??8|J0q2|hH%pNM)I&W>EBAm2Cl@71dFMx7t;l(GNP{Hd4aVzO{4464yr$d z_iAsYvKp(FLEn#4KQ-4m1H+R_I6q9^5K&vOTt@PcLK$m~j=iv$=O<HvPizz?vV}rp z6WB#XIi~>L`5(05nO9O)?{jsO=wnl^mD1TRm`2V2>`DG;PULWx+8n;tkEMV69*63x O04fR^^5wFY!T$%<5MZ|e From 28ed93dcdc0ab2aa22f75efdce361dfcb99d08b6 Mon Sep 17 00:00:00 2001 From: Elian Doran <contact@eliandoran.me> Date: Sat, 24 Jan 2026 16:22:43 +0200 Subject: [PATCH 224/353] refactor(web-clipper): use @-imports --- apps/web-clipper/entrypoints/content/index.ts | 8 +++----- apps/web-clipper/entrypoints/popup/popup.ts | 4 ++-- 2 files changed, 5 insertions(+), 7 deletions(-) diff --git a/apps/web-clipper/entrypoints/content/index.ts b/apps/web-clipper/entrypoints/content/index.ts index c085dd8673..618ad11e16 100644 --- a/apps/web-clipper/entrypoints/content/index.ts +++ b/apps/web-clipper/entrypoints/content/index.ts @@ -1,7 +1,5 @@ -import { Rect } from "@/utils.js"; - -import Readability from "../../lib/Readability.js"; -import { createLink, getBaseUrl, getPageLocationOrigin, randomString } from "../../utils.js"; +import Readability from "@/lib/Readability.js"; +import { createLink, getBaseUrl, getPageLocationOrigin, randomString, Rect } from "@/utils.js"; export default defineContentScript({ matches: [ @@ -267,7 +265,7 @@ export default defineContentScript({ messageText = message.message; } - await import("../../lib/toast"); + await import("@/lib/toast"); window.showToast(messageText, { settings: { diff --git a/apps/web-clipper/entrypoints/popup/popup.ts b/apps/web-clipper/entrypoints/popup/popup.ts index 8f8220de1f..40ca451a8f 100644 --- a/apps/web-clipper/entrypoints/popup/popup.ts +++ b/apps/web-clipper/entrypoints/popup/popup.ts @@ -1,6 +1,6 @@ -import { createLink } from "../../utils"; +import { createLink } from "@/utils"; -async function sendMessage(message) { +async function sendMessage(message: object) { try { console.log("Sending message", message); return await browser.runtime.sendMessage(message); From bf736977ab1427a73ba76026f61a7f349987c845 Mon Sep 17 00:00:00 2001 From: Elian Doran <contact@eliandoran.me> Date: Sat, 24 Jan 2026 16:26:16 +0200 Subject: [PATCH 225/353] chore(web-clipper): don't render offscreen for MV2 --- apps/web-clipper/entrypoints/offscreen/index.html | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/apps/web-clipper/entrypoints/offscreen/index.html b/apps/web-clipper/entrypoints/offscreen/index.html index b6a07c8d24..232bb63907 100644 --- a/apps/web-clipper/entrypoints/offscreen/index.html +++ b/apps/web-clipper/entrypoints/offscreen/index.html @@ -1,7 +1,8 @@ <!DOCTYPE html> <html> <head> - <meta charset="UTF-8"> + <meta charset="UTF-8" /> + <meta name="manifest.exclude" content="['safari','firefox']" /> </head> <body> <script type="module" src="./index.ts"></script> From 680817d81cf0c240a656771fe2e214a2bb4ee1e9 Mon Sep 17 00:00:00 2001 From: Elian Doran <contact@eliandoran.me> Date: Sat, 24 Jan 2026 16:39:00 +0200 Subject: [PATCH 226/353] fix(web-clipper): duplicate context menu entry --- apps/web-clipper/entrypoints/background/index.ts | 6 ------ 1 file changed, 6 deletions(-) diff --git a/apps/web-clipper/entrypoints/background/index.ts b/apps/web-clipper/entrypoints/background/index.ts index 953ba552f4..5aa2642e84 100644 --- a/apps/web-clipper/entrypoints/background/index.ts +++ b/apps/web-clipper/entrypoints/background/index.ts @@ -110,12 +110,6 @@ export default defineBackground(() => { contexts: ["selection"] }); - browser.contextMenus.create({ - id: "trilium-save-cropped-screenshot", - title: "Clip screenshot to Trilium", - contexts: ["page"] - }); - browser.contextMenus.create({ id: "trilium-save-cropped-screenshot", title: "Crop screen shot to Trilium", From 1fb360e34fc9e263a73df665e17507d6ee26c584 Mon Sep 17 00:00:00 2001 From: Elian Doran <contact@eliandoran.me> Date: Sat, 24 Jan 2026 16:40:00 +0200 Subject: [PATCH 227/353] chore(web-clipper): remove polyfill --- .../entrypoints/options/index.html | 1 - apps/web-clipper/entrypoints/popup/index.html | 1 - apps/web-clipper/lib/browser-polyfill.js | 1224 ----------------- apps/web-clipper/manifest.json | 12 - 4 files changed, 1238 deletions(-) delete mode 100644 apps/web-clipper/lib/browser-polyfill.js diff --git a/apps/web-clipper/entrypoints/options/index.html b/apps/web-clipper/entrypoints/options/index.html index 4aa2969c22..331a36a02e 100644 --- a/apps/web-clipper/entrypoints/options/index.html +++ b/apps/web-clipper/entrypoints/options/index.html @@ -55,7 +55,6 @@ </form> <script type="module" src="../../lib/cash.min.js"></script> -<script type="module" src="../../lib/browser-polyfill.js"></script> <script type="module" src="index.ts"></script> </body> diff --git a/apps/web-clipper/entrypoints/popup/index.html b/apps/web-clipper/entrypoints/popup/index.html index ee4b13871b..cdf2241cff 100644 --- a/apps/web-clipper/entrypoints/popup/index.html +++ b/apps/web-clipper/entrypoints/popup/index.html @@ -46,7 +46,6 @@ <div>Status: <span id="connection-status">unknown</span></div> </div> - <script type="module" src="../../lib/browser-polyfill.js"></script> <script type="module" src="../../lib/cash.min.js"></script> <script type="module" src="popup.ts"></script> </body> diff --git a/apps/web-clipper/lib/browser-polyfill.js b/apps/web-clipper/lib/browser-polyfill.js deleted file mode 100644 index c0b5dfd077..0000000000 --- a/apps/web-clipper/lib/browser-polyfill.js +++ /dev/null @@ -1,1224 +0,0 @@ -(function (global, factory) { - if (typeof define === "function" && define.amd) { - define("webextension-polyfill", ["module"], factory); - } else if (typeof exports !== "undefined") { - factory(module); - } else { - var mod = { - exports: {} - }; - factory(mod); - global.browser = mod.exports; - } -})(typeof globalThis !== "undefined" ? globalThis : typeof self !== "undefined" ? self : this, function (module) { - /* webextension-polyfill - v0.6.0 - Mon Dec 23 2019 12:32:53 */ - - /* -*- Mode: indent-tabs-mode: nil; js-indent-level: 2 -*- */ - - /* vim: set sts=2 sw=2 et tw=80: */ - - /* This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ - "use strict"; - - if (typeof browser === "undefined" || Object.getPrototypeOf(browser) !== Object.prototype) { - const CHROME_SEND_MESSAGE_CALLBACK_NO_RESPONSE_MESSAGE = "The message port closed before a response was received."; - const SEND_RESPONSE_DEPRECATION_WARNING = "Returning a Promise is the preferred way to send a reply from an onMessage/onMessageExternal listener, as the sendResponse will be removed from the specs (See https://developer.mozilla.org/docs/Mozilla/Add-ons/WebExtensions/API/runtime/onMessage)"; // Wrapping the bulk of this polyfill in a one-time-use function is a minor - // optimization for Firefox. Since Spidermonkey does not fully parse the - // contents of a function until the first time it's called, and since it will - // never actually need to be called, this allows the polyfill to be included - // in Firefox nearly for free. - - const wrapAPIs = extensionAPIs => { - // NOTE: apiMetadata is associated to the content of the api-metadata.json file - // at build time by replacing the following "include" with the content of the - // JSON file. - const apiMetadata = { - "alarms": { - "clear": { - "minArgs": 0, - "maxArgs": 1 - }, - "clearAll": { - "minArgs": 0, - "maxArgs": 0 - }, - "get": { - "minArgs": 0, - "maxArgs": 1 - }, - "getAll": { - "minArgs": 0, - "maxArgs": 0 - } - }, - "bookmarks": { - "create": { - "minArgs": 1, - "maxArgs": 1 - }, - "get": { - "minArgs": 1, - "maxArgs": 1 - }, - "getChildren": { - "minArgs": 1, - "maxArgs": 1 - }, - "getRecent": { - "minArgs": 1, - "maxArgs": 1 - }, - "getSubTree": { - "minArgs": 1, - "maxArgs": 1 - }, - "getTree": { - "minArgs": 0, - "maxArgs": 0 - }, - "move": { - "minArgs": 2, - "maxArgs": 2 - }, - "remove": { - "minArgs": 1, - "maxArgs": 1 - }, - "removeTree": { - "minArgs": 1, - "maxArgs": 1 - }, - "search": { - "minArgs": 1, - "maxArgs": 1 - }, - "update": { - "minArgs": 2, - "maxArgs": 2 - } - }, - "browserAction": { - "disable": { - "minArgs": 0, - "maxArgs": 1, - "fallbackToNoCallback": true - }, - "enable": { - "minArgs": 0, - "maxArgs": 1, - "fallbackToNoCallback": true - }, - "getBadgeBackgroundColor": { - "minArgs": 1, - "maxArgs": 1 - }, - "getBadgeText": { - "minArgs": 1, - "maxArgs": 1 - }, - "getPopup": { - "minArgs": 1, - "maxArgs": 1 - }, - "getTitle": { - "minArgs": 1, - "maxArgs": 1 - }, - "openPopup": { - "minArgs": 0, - "maxArgs": 0 - }, - "setBadgeBackgroundColor": { - "minArgs": 1, - "maxArgs": 1, - "fallbackToNoCallback": true - }, - "setBadgeText": { - "minArgs": 1, - "maxArgs": 1, - "fallbackToNoCallback": true - }, - "setIcon": { - "minArgs": 1, - "maxArgs": 1 - }, - "setPopup": { - "minArgs": 1, - "maxArgs": 1, - "fallbackToNoCallback": true - }, - "setTitle": { - "minArgs": 1, - "maxArgs": 1, - "fallbackToNoCallback": true - } - }, - "browsingData": { - "remove": { - "minArgs": 2, - "maxArgs": 2 - }, - "removeCache": { - "minArgs": 1, - "maxArgs": 1 - }, - "removeCookies": { - "minArgs": 1, - "maxArgs": 1 - }, - "removeDownloads": { - "minArgs": 1, - "maxArgs": 1 - }, - "removeFormData": { - "minArgs": 1, - "maxArgs": 1 - }, - "removeHistory": { - "minArgs": 1, - "maxArgs": 1 - }, - "removeLocalStorage": { - "minArgs": 1, - "maxArgs": 1 - }, - "removePasswords": { - "minArgs": 1, - "maxArgs": 1 - }, - "removePluginData": { - "minArgs": 1, - "maxArgs": 1 - }, - "settings": { - "minArgs": 0, - "maxArgs": 0 - } - }, - "commands": { - "getAll": { - "minArgs": 0, - "maxArgs": 0 - } - }, - "contextMenus": { - "remove": { - "minArgs": 1, - "maxArgs": 1 - }, - "removeAll": { - "minArgs": 0, - "maxArgs": 0 - }, - "update": { - "minArgs": 2, - "maxArgs": 2 - } - }, - "cookies": { - "get": { - "minArgs": 1, - "maxArgs": 1 - }, - "getAll": { - "minArgs": 1, - "maxArgs": 1 - }, - "getAllCookieStores": { - "minArgs": 0, - "maxArgs": 0 - }, - "remove": { - "minArgs": 1, - "maxArgs": 1 - }, - "set": { - "minArgs": 1, - "maxArgs": 1 - } - }, - "devtools": { - "inspectedWindow": { - "eval": { - "minArgs": 1, - "maxArgs": 2, - "singleCallbackArg": false - } - }, - "panels": { - "create": { - "minArgs": 3, - "maxArgs": 3, - "singleCallbackArg": true - } - } - }, - "downloads": { - "cancel": { - "minArgs": 1, - "maxArgs": 1 - }, - "download": { - "minArgs": 1, - "maxArgs": 1 - }, - "erase": { - "minArgs": 1, - "maxArgs": 1 - }, - "getFileIcon": { - "minArgs": 1, - "maxArgs": 2 - }, - "open": { - "minArgs": 1, - "maxArgs": 1, - "fallbackToNoCallback": true - }, - "pause": { - "minArgs": 1, - "maxArgs": 1 - }, - "removeFile": { - "minArgs": 1, - "maxArgs": 1 - }, - "resume": { - "minArgs": 1, - "maxArgs": 1 - }, - "search": { - "minArgs": 1, - "maxArgs": 1 - }, - "show": { - "minArgs": 1, - "maxArgs": 1, - "fallbackToNoCallback": true - } - }, - "extension": { - "isAllowedFileSchemeAccess": { - "minArgs": 0, - "maxArgs": 0 - }, - "isAllowedIncognitoAccess": { - "minArgs": 0, - "maxArgs": 0 - } - }, - "history": { - "addUrl": { - "minArgs": 1, - "maxArgs": 1 - }, - "deleteAll": { - "minArgs": 0, - "maxArgs": 0 - }, - "deleteRange": { - "minArgs": 1, - "maxArgs": 1 - }, - "deleteUrl": { - "minArgs": 1, - "maxArgs": 1 - }, - "getVisits": { - "minArgs": 1, - "maxArgs": 1 - }, - "search": { - "minArgs": 1, - "maxArgs": 1 - } - }, - "i18n": { - "detectLanguage": { - "minArgs": 1, - "maxArgs": 1 - }, - "getAcceptLanguages": { - "minArgs": 0, - "maxArgs": 0 - } - }, - "identity": { - "launchWebAuthFlow": { - "minArgs": 1, - "maxArgs": 1 - } - }, - "idle": { - "queryState": { - "minArgs": 1, - "maxArgs": 1 - } - }, - "management": { - "get": { - "minArgs": 1, - "maxArgs": 1 - }, - "getAll": { - "minArgs": 0, - "maxArgs": 0 - }, - "getSelf": { - "minArgs": 0, - "maxArgs": 0 - }, - "setEnabled": { - "minArgs": 2, - "maxArgs": 2 - }, - "uninstallSelf": { - "minArgs": 0, - "maxArgs": 1 - } - }, - "notifications": { - "clear": { - "minArgs": 1, - "maxArgs": 1 - }, - "create": { - "minArgs": 1, - "maxArgs": 2 - }, - "getAll": { - "minArgs": 0, - "maxArgs": 0 - }, - "getPermissionLevel": { - "minArgs": 0, - "maxArgs": 0 - }, - "update": { - "minArgs": 2, - "maxArgs": 2 - } - }, - "pageAction": { - "getPopup": { - "minArgs": 1, - "maxArgs": 1 - }, - "getTitle": { - "minArgs": 1, - "maxArgs": 1 - }, - "hide": { - "minArgs": 1, - "maxArgs": 1, - "fallbackToNoCallback": true - }, - "setIcon": { - "minArgs": 1, - "maxArgs": 1 - }, - "setPopup": { - "minArgs": 1, - "maxArgs": 1, - "fallbackToNoCallback": true - }, - "setTitle": { - "minArgs": 1, - "maxArgs": 1, - "fallbackToNoCallback": true - }, - "show": { - "minArgs": 1, - "maxArgs": 1, - "fallbackToNoCallback": true - } - }, - "permissions": { - "contains": { - "minArgs": 1, - "maxArgs": 1 - }, - "getAll": { - "minArgs": 0, - "maxArgs": 0 - }, - "remove": { - "minArgs": 1, - "maxArgs": 1 - }, - "request": { - "minArgs": 1, - "maxArgs": 1 - } - }, - "runtime": { - "getBackgroundPage": { - "minArgs": 0, - "maxArgs": 0 - }, - "getPlatformInfo": { - "minArgs": 0, - "maxArgs": 0 - }, - "openOptionsPage": { - "minArgs": 0, - "maxArgs": 0 - }, - "requestUpdateCheck": { - "minArgs": 0, - "maxArgs": 0 - }, - "sendMessage": { - "minArgs": 1, - "maxArgs": 3 - }, - "sendNativeMessage": { - "minArgs": 2, - "maxArgs": 2 - }, - "setUninstallURL": { - "minArgs": 1, - "maxArgs": 1 - } - }, - "sessions": { - "getDevices": { - "minArgs": 0, - "maxArgs": 1 - }, - "getRecentlyClosed": { - "minArgs": 0, - "maxArgs": 1 - }, - "restore": { - "minArgs": 0, - "maxArgs": 1 - } - }, - "storage": { - "local": { - "clear": { - "minArgs": 0, - "maxArgs": 0 - }, - "get": { - "minArgs": 0, - "maxArgs": 1 - }, - "getBytesInUse": { - "minArgs": 0, - "maxArgs": 1 - }, - "remove": { - "minArgs": 1, - "maxArgs": 1 - }, - "set": { - "minArgs": 1, - "maxArgs": 1 - } - }, - "managed": { - "get": { - "minArgs": 0, - "maxArgs": 1 - }, - "getBytesInUse": { - "minArgs": 0, - "maxArgs": 1 - } - }, - "sync": { - "clear": { - "minArgs": 0, - "maxArgs": 0 - }, - "get": { - "minArgs": 0, - "maxArgs": 1 - }, - "getBytesInUse": { - "minArgs": 0, - "maxArgs": 1 - }, - "remove": { - "minArgs": 1, - "maxArgs": 1 - }, - "set": { - "minArgs": 1, - "maxArgs": 1 - } - } - }, - "tabs": { - "captureVisibleTab": { - "minArgs": 0, - "maxArgs": 2 - }, - "create": { - "minArgs": 1, - "maxArgs": 1 - }, - "detectLanguage": { - "minArgs": 0, - "maxArgs": 1 - }, - "discard": { - "minArgs": 0, - "maxArgs": 1 - }, - "duplicate": { - "minArgs": 1, - "maxArgs": 1 - }, - "executeScript": { - "minArgs": 1, - "maxArgs": 2 - }, - "get": { - "minArgs": 1, - "maxArgs": 1 - }, - "getCurrent": { - "minArgs": 0, - "maxArgs": 0 - }, - "getZoom": { - "minArgs": 0, - "maxArgs": 1 - }, - "getZoomSettings": { - "minArgs": 0, - "maxArgs": 1 - }, - "highlight": { - "minArgs": 1, - "maxArgs": 1 - }, - "insertCSS": { - "minArgs": 1, - "maxArgs": 2 - }, - "move": { - "minArgs": 2, - "maxArgs": 2 - }, - "query": { - "minArgs": 1, - "maxArgs": 1 - }, - "reload": { - "minArgs": 0, - "maxArgs": 2 - }, - "remove": { - "minArgs": 1, - "maxArgs": 1 - }, - "removeCSS": { - "minArgs": 1, - "maxArgs": 2 - }, - "sendMessage": { - "minArgs": 2, - "maxArgs": 3 - }, - "setZoom": { - "minArgs": 1, - "maxArgs": 2 - }, - "setZoomSettings": { - "minArgs": 1, - "maxArgs": 2 - }, - "update": { - "minArgs": 1, - "maxArgs": 2 - } - }, - "topSites": { - "get": { - "minArgs": 0, - "maxArgs": 0 - } - }, - "webNavigation": { - "getAllFrames": { - "minArgs": 1, - "maxArgs": 1 - }, - "getFrame": { - "minArgs": 1, - "maxArgs": 1 - } - }, - "webRequest": { - "handlerBehaviorChanged": { - "minArgs": 0, - "maxArgs": 0 - } - }, - "windows": { - "create": { - "minArgs": 0, - "maxArgs": 1 - }, - "get": { - "minArgs": 1, - "maxArgs": 2 - }, - "getAll": { - "minArgs": 0, - "maxArgs": 1 - }, - "getCurrent": { - "minArgs": 0, - "maxArgs": 1 - }, - "getLastFocused": { - "minArgs": 0, - "maxArgs": 1 - }, - "remove": { - "minArgs": 1, - "maxArgs": 1 - }, - "update": { - "minArgs": 2, - "maxArgs": 2 - } - } - }; - - if (Object.keys(apiMetadata).length === 0) { - throw new Error("api-metadata.json has not been included in browser-polyfill"); - } - /** - * A WeakMap subclass which creates and stores a value for any key which does - * not exist when accessed, but behaves exactly as an ordinary WeakMap - * otherwise. - * - * @param {function} createItem - * A function which will be called in order to create the value for any - * key which does not exist, the first time it is accessed. The - * function receives, as its only argument, the key being created. - */ - - - class DefaultWeakMap extends WeakMap { - constructor(createItem, items = undefined) { - super(items); - this.createItem = createItem; - } - - get(key) { - if (!this.has(key)) { - this.set(key, this.createItem(key)); - } - - return super.get(key); - } - - } - /** - * Returns true if the given object is an object with a `then` method, and can - * therefore be assumed to behave as a Promise. - * - * @param {*} value The value to test. - * @returns {boolean} True if the value is thenable. - */ - - - const isThenable = value => { - return value && typeof value === "object" && typeof value.then === "function"; - }; - /** - * Creates and returns a function which, when called, will resolve or reject - * the given promise based on how it is called: - * - * - If, when called, `chrome.runtime.lastError` contains a non-null object, - * the promise is rejected with that value. - * - If the function is called with exactly one argument, the promise is - * resolved to that value. - * - Otherwise, the promise is resolved to an array containing all of the - * function's arguments. - * - * @param {object} promise - * An object containing the resolution and rejection functions of a - * promise. - * @param {function} promise.resolve - * The promise's resolution function. - * @param {function} promise.rejection - * The promise's rejection function. - * @param {object} metadata - * Metadata about the wrapped method which has created the callback. - * @param {integer} metadata.maxResolvedArgs - * The maximum number of arguments which may be passed to the - * callback created by the wrapped async function. - * - * @returns {function} - * The generated callback function. - */ - - - const makeCallback = (promise, metadata) => { - return (...callbackArgs) => { - if (extensionAPIs.runtime.lastError) { - promise.reject(extensionAPIs.runtime.lastError); - } else if (metadata.singleCallbackArg || callbackArgs.length <= 1 && metadata.singleCallbackArg !== false) { - promise.resolve(callbackArgs[0]); - } else { - promise.resolve(callbackArgs); - } - }; - }; - - const pluralizeArguments = numArgs => numArgs == 1 ? "argument" : "arguments"; - /** - * Creates a wrapper function for a method with the given name and metadata. - * - * @param {string} name - * The name of the method which is being wrapped. - * @param {object} metadata - * Metadata about the method being wrapped. - * @param {integer} metadata.minArgs - * The minimum number of arguments which must be passed to the - * function. If called with fewer than this number of arguments, the - * wrapper will raise an exception. - * @param {integer} metadata.maxArgs - * The maximum number of arguments which may be passed to the - * function. If called with more than this number of arguments, the - * wrapper will raise an exception. - * @param {integer} metadata.maxResolvedArgs - * The maximum number of arguments which may be passed to the - * callback created by the wrapped async function. - * - * @returns {function(object, ...*)} - * The generated wrapper function. - */ - - - const wrapAsyncFunction = (name, metadata) => { - return function asyncFunctionWrapper(target, ...args) { - if (args.length < metadata.minArgs) { - throw new Error(`Expected at least ${metadata.minArgs} ${pluralizeArguments(metadata.minArgs)} for ${name}(), got ${args.length}`); - } - - if (args.length > metadata.maxArgs) { - throw new Error(`Expected at most ${metadata.maxArgs} ${pluralizeArguments(metadata.maxArgs)} for ${name}(), got ${args.length}`); - } - - return new Promise((resolve, reject) => { - if (metadata.fallbackToNoCallback) { - // This API method has currently no callback on Chrome, but it return a promise on Firefox, - // and so the polyfill will try to call it with a callback first, and it will fallback - // to not passing the callback if the first call fails. - try { - target[name](...args, makeCallback({ - resolve, - reject - }, metadata)); - } catch (cbError) { - console.warn(`${name} API method doesn't seem to support the callback parameter, ` + "falling back to call it without a callback: ", cbError); - target[name](...args); // Update the API method metadata, so that the next API calls will not try to - // use the unsupported callback anymore. - - metadata.fallbackToNoCallback = false; - metadata.noCallback = true; - resolve(); - } - } else if (metadata.noCallback) { - target[name](...args); - resolve(); - } else { - target[name](...args, makeCallback({ - resolve, - reject - }, metadata)); - } - }); - }; - }; - /** - * Wraps an existing method of the target object, so that calls to it are - * intercepted by the given wrapper function. The wrapper function receives, - * as its first argument, the original `target` object, followed by each of - * the arguments passed to the original method. - * - * @param {object} target - * The original target object that the wrapped method belongs to. - * @param {function} method - * The method being wrapped. This is used as the target of the Proxy - * object which is created to wrap the method. - * @param {function} wrapper - * The wrapper function which is called in place of a direct invocation - * of the wrapped method. - * - * @returns {Proxy<function>} - * A Proxy object for the given method, which invokes the given wrapper - * method in its place. - */ - - - const wrapMethod = (target, method, wrapper) => { - return new Proxy(method, { - apply(targetMethod, thisObj, args) { - return wrapper.call(thisObj, target, ...args); - } - - }); - }; - - let hasOwnProperty = Function.call.bind(Object.prototype.hasOwnProperty); - /** - * Wraps an object in a Proxy which intercepts and wraps certain methods - * based on the given `wrappers` and `metadata` objects. - * - * @param {object} target - * The target object to wrap. - * - * @param {object} [wrappers = {}] - * An object tree containing wrapper functions for special cases. Any - * function present in this object tree is called in place of the - * method in the same location in the `target` object tree. These - * wrapper methods are invoked as described in {@see wrapMethod}. - * - * @param {object} [metadata = {}] - * An object tree containing metadata used to automatically generate - * Promise-based wrapper functions for asynchronous. Any function in - * the `target` object tree which has a corresponding metadata object - * in the same location in the `metadata` tree is replaced with an - * automatically-generated wrapper function, as described in - * {@see wrapAsyncFunction} - * - * @returns {Proxy<object>} - */ - - const wrapObject = (target, wrappers = {}, metadata = {}) => { - let cache = Object.create(null); - let handlers = { - has(proxyTarget, prop) { - return prop in target || prop in cache; - }, - - get(proxyTarget, prop, receiver) { - if (prop in cache) { - return cache[prop]; - } - - if (!(prop in target)) { - return undefined; - } - - let value = target[prop]; - - if (typeof value === "function") { - // This is a method on the underlying object. Check if we need to do - // any wrapping. - if (typeof wrappers[prop] === "function") { - // We have a special-case wrapper for this method. - value = wrapMethod(target, target[prop], wrappers[prop]); - } else if (hasOwnProperty(metadata, prop)) { - // This is an async method that we have metadata for. Create a - // Promise wrapper for it. - let wrapper = wrapAsyncFunction(prop, metadata[prop]); - value = wrapMethod(target, target[prop], wrapper); - } else { - // This is a method that we don't know or care about. Return the - // original method, bound to the underlying object. - value = value.bind(target); - } - } else if (typeof value === "object" && value !== null && (hasOwnProperty(wrappers, prop) || hasOwnProperty(metadata, prop))) { - // This is an object that we need to do some wrapping for the children - // of. Create a sub-object wrapper for it with the appropriate child - // metadata. - value = wrapObject(value, wrappers[prop], metadata[prop]); - } else if (hasOwnProperty(metadata, "*")) { - // Wrap all properties in * namespace. - value = wrapObject(value, wrappers[prop], metadata["*"]); - } else { - // We don't need to do any wrapping for this property, - // so just forward all access to the underlying object. - Object.defineProperty(cache, prop, { - configurable: true, - enumerable: true, - - get() { - return target[prop]; - }, - - set(value) { - target[prop] = value; - } - - }); - return value; - } - - cache[prop] = value; - return value; - }, - - set(proxyTarget, prop, value, receiver) { - if (prop in cache) { - cache[prop] = value; - } else { - target[prop] = value; - } - - return true; - }, - - defineProperty(proxyTarget, prop, desc) { - return Reflect.defineProperty(cache, prop, desc); - }, - - deleteProperty(proxyTarget, prop) { - return Reflect.deleteProperty(cache, prop); - } - - }; // Per contract of the Proxy API, the "get" proxy handler must return the - // original value of the target if that value is declared read-only and - // non-configurable. For this reason, we create an object with the - // prototype set to `target` instead of using `target` directly. - // Otherwise we cannot return a custom object for APIs that - // are declared read-only and non-configurable, such as `chrome.devtools`. - // - // The proxy handlers themselves will still use the original `target` - // instead of the `proxyTarget`, so that the methods and properties are - // dereferenced via the original targets. - - let proxyTarget = Object.create(target); - return new Proxy(proxyTarget, handlers); - }; - /** - * Creates a set of wrapper functions for an event object, which handles - * wrapping of listener functions that those messages are passed. - * - * A single wrapper is created for each listener function, and stored in a - * map. Subsequent calls to `addListener`, `hasListener`, or `removeListener` - * retrieve the original wrapper, so that attempts to remove a - * previously-added listener work as expected. - * - * @param {DefaultWeakMap<function, function>} wrapperMap - * A DefaultWeakMap object which will create the appropriate wrapper - * for a given listener function when one does not exist, and retrieve - * an existing one when it does. - * - * @returns {object} - */ - - - const wrapEvent = wrapperMap => ({ - addListener(target, listener, ...args) { - target.addListener(wrapperMap.get(listener), ...args); - }, - - hasListener(target, listener) { - return target.hasListener(wrapperMap.get(listener)); - }, - - removeListener(target, listener) { - target.removeListener(wrapperMap.get(listener)); - } - - }); // Keep track if the deprecation warning has been logged at least once. - - - let loggedSendResponseDeprecationWarning = false; - const onMessageWrappers = new DefaultWeakMap(listener => { - if (typeof listener !== "function") { - return listener; - } - /** - * Wraps a message listener function so that it may send responses based on - * its return value, rather than by returning a sentinel value and calling a - * callback. If the listener function returns a Promise, the response is - * sent when the promise either resolves or rejects. - * - * @param {*} message - * The message sent by the other end of the channel. - * @param {object} sender - * Details about the sender of the message. - * @param {function(*)} sendResponse - * A callback which, when called with an arbitrary argument, sends - * that value as a response. - * @returns {boolean} - * True if the wrapped listener returned a Promise, which will later - * yield a response. False otherwise. - */ - - - return function onMessage(message, sender, sendResponse) { - let didCallSendResponse = false; - let wrappedSendResponse; - let sendResponsePromise = new Promise(resolve => { - wrappedSendResponse = function (response) { - if (!loggedSendResponseDeprecationWarning) { - console.warn(SEND_RESPONSE_DEPRECATION_WARNING, new Error().stack); - loggedSendResponseDeprecationWarning = true; - } - - didCallSendResponse = true; - resolve(response); - }; - }); - let result; - - try { - result = listener(message, sender, wrappedSendResponse); - } catch (err) { - result = Promise.reject(err); - } - - const isResultThenable = result !== true && isThenable(result); // If the listener didn't returned true or a Promise, or called - // wrappedSendResponse synchronously, we can exit earlier - // because there will be no response sent from this listener. - - if (result !== true && !isResultThenable && !didCallSendResponse) { - return false; - } // A small helper to send the message if the promise resolves - // and an error if the promise rejects (a wrapped sendMessage has - // to translate the message into a resolved promise or a rejected - // promise). - - - const sendPromisedResult = promise => { - promise.then(msg => { - // send the message value. - sendResponse(msg); - }, error => { - // Send a JSON representation of the error if the rejected value - // is an instance of error, or the object itself otherwise. - let message; - - if (error && (error instanceof Error || typeof error.message === "string")) { - message = error.message; - } else { - message = "An unexpected error occurred"; - } - - sendResponse({ - __mozWebExtensionPolyfillReject__: true, - message - }); - }).catch(err => { - // Print an error on the console if unable to send the response. - console.error("Failed to send onMessage rejected reply", err); - }); - }; // If the listener returned a Promise, send the resolved value as a - // result, otherwise wait the promise related to the wrappedSendResponse - // callback to resolve and send it as a response. - - - if (isResultThenable) { - sendPromisedResult(result); - } else { - sendPromisedResult(sendResponsePromise); - } // Let Chrome know that the listener is replying. - - - return true; - }; - }); - - const wrappedSendMessageCallback = ({ - reject, - resolve - }, reply) => { - if (extensionAPIs.runtime.lastError) { - // Detect when none of the listeners replied to the sendMessage call and resolve - // the promise to undefined as in Firefox. - // See https://github.com/mozilla/webextension-polyfill/issues/130 - if (extensionAPIs.runtime.lastError.message === CHROME_SEND_MESSAGE_CALLBACK_NO_RESPONSE_MESSAGE) { - resolve(); - } else { - reject(extensionAPIs.runtime.lastError); - } - } else if (reply && reply.__mozWebExtensionPolyfillReject__) { - // Convert back the JSON representation of the error into - // an Error instance. - reject(new Error(reply.message)); - } else { - resolve(reply); - } - }; - - const wrappedSendMessage = (name, metadata, apiNamespaceObj, ...args) => { - if (args.length < metadata.minArgs) { - throw new Error(`Expected at least ${metadata.minArgs} ${pluralizeArguments(metadata.minArgs)} for ${name}(), got ${args.length}`); - } - - if (args.length > metadata.maxArgs) { - throw new Error(`Expected at most ${metadata.maxArgs} ${pluralizeArguments(metadata.maxArgs)} for ${name}(), got ${args.length}`); - } - - return new Promise((resolve, reject) => { - const wrappedCb = wrappedSendMessageCallback.bind(null, { - resolve, - reject - }); - args.push(wrappedCb); - apiNamespaceObj.sendMessage(...args); - }); - }; - - const staticWrappers = { - runtime: { - onMessage: wrapEvent(onMessageWrappers), - onMessageExternal: wrapEvent(onMessageWrappers), - sendMessage: wrappedSendMessage.bind(null, "sendMessage", { - minArgs: 1, - maxArgs: 3 - }) - }, - tabs: { - sendMessage: wrappedSendMessage.bind(null, "sendMessage", { - minArgs: 2, - maxArgs: 3 - }) - } - }; - const settingMetadata = { - clear: { - minArgs: 1, - maxArgs: 1 - }, - get: { - minArgs: 1, - maxArgs: 1 - }, - set: { - minArgs: 1, - maxArgs: 1 - } - }; - apiMetadata.privacy = { - network: { - "*": settingMetadata - }, - services: { - "*": settingMetadata - }, - websites: { - "*": settingMetadata - } - }; - return wrapObject(extensionAPIs, staticWrappers, apiMetadata); - }; - - if (typeof chrome != "object" || !chrome || !chrome.runtime || !chrome.runtime.id) { - throw new Error("This script should only be loaded in a browser extension."); - } // The build process adds a UMD wrapper around this file, which makes the - // `module` variable available. - - - module.exports = wrapAPIs(chrome); - } else { - module.exports = browser; - } -}); -//# sourceMappingURL=browser-polyfill.js.map diff --git a/apps/web-clipper/manifest.json b/apps/web-clipper/manifest.json index 12694338c9..8c7754a064 100644 --- a/apps/web-clipper/manifest.json +++ b/apps/web-clipper/manifest.json @@ -13,18 +13,6 @@ "default_title": "Trilium Web Clipper", "default_popup": "popup/popup.html" }, - "content_scripts": [ - { - "js": [ - "lib/browser-polyfill.js" - ] - } - ], - "background": { - "scripts": [ - "lib/browser-polyfill.js" - ] - }, "commands": { "saveSelection": { "description": "Save the selected text into a note", From a2a37a0b54302ebf605adb910ddc4c4d29fbdc68 Mon Sep 17 00:00:00 2001 From: Elian Doran <contact@eliandoran.me> Date: Sat, 24 Jan 2026 16:45:58 +0200 Subject: [PATCH 228/353] chore(web-clipper): integrate old manifest --- apps/web-clipper/manifest.json | 36 ---------------------------------- apps/web-clipper/package.json | 2 +- apps/web-clipper/wxt.config.ts | 21 ++++++++++++++++++++ 3 files changed, 22 insertions(+), 37 deletions(-) delete mode 100644 apps/web-clipper/manifest.json diff --git a/apps/web-clipper/manifest.json b/apps/web-clipper/manifest.json deleted file mode 100644 index 8c7754a064..0000000000 --- a/apps/web-clipper/manifest.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "manifest_version": 2, - "version": "1.0.1", - "homepage_url": "https://github.com/zadam/trilium-web-clipper", - "content_security_policy": "script-src 'self' 'unsafe-eval'; object-src 'self'", - "icons": { - "32": "icons/32.png", - "48": "icons/48.png", - "96": "icons/96.png" - }, - "browser_action": { - "default_icon": "icons/32.png", - "default_title": "Trilium Web Clipper", - "default_popup": "popup/popup.html" - }, - "commands": { - "saveSelection": { - "description": "Save the selected text into a note", - "suggested_key": { - "default": "Ctrl+Shift+S" - } - }, - "saveWholePage": { - "description": "Save the current page", - "suggested_key": { - "default": "Alt+Shift+S" - } - }, - "saveCroppedScreenshot": { - "description": "Take a cropped screenshot of the current page", - "suggested_key": { - "default": "Ctrl+Shift+E" - } - } - } -} diff --git a/apps/web-clipper/package.json b/apps/web-clipper/package.json index 8dcc7ec6c6..e975e1ac42 100644 --- a/apps/web-clipper/package.json +++ b/apps/web-clipper/package.json @@ -1,6 +1,6 @@ { "name": "@triliumnext/web-clipper", - "version": "1.0.0", + "version": "1.0.1", "description": "", "main": "index.js", "scripts": { diff --git a/apps/web-clipper/wxt.config.ts b/apps/web-clipper/wxt.config.ts index f824eb64c9..98932d7463 100644 --- a/apps/web-clipper/wxt.config.ts +++ b/apps/web-clipper/wxt.config.ts @@ -5,6 +5,7 @@ export default defineConfig({ manifest: { name: "Trilium Web Clipper", description: "Save web clippings to Trilium Notes.", + homepage_url: "https://docs.triliumnotes.org/user-guide/setup/web-clipper", permissions: [ "activeTab", "tabs", @@ -19,6 +20,26 @@ export default defineConfig({ gecko: { id: "{1410742d-b377-40e7-a9db-63dc9c6ec99c}" } + }, + commands: { + saveSelection: { + description: "Save the selected text into a note", + suggested_key: { + default: "Ctrl+Shift+S" + } + }, + saveWholePage: { + description: "Save the current page", + suggested_key: { + default: "Alt+Shift+S" + } + }, + saveCroppedScreenshot: { + description: "Take a cropped screenshot of the current page", + suggested_key: { + default: "Ctrl+Shift+E" + } + } } } }); From 53e3d65c52b984b664944f7ee9a43058e268835e Mon Sep 17 00:00:00 2001 From: Elian Doran <contact@eliandoran.me> Date: Sat, 24 Jan 2026 17:01:03 +0200 Subject: [PATCH 229/353] fix(web-clipper): handling of dev port --- apps/web-clipper/entrypoints/background/index.ts | 10 +--------- .../entrypoints/background/trilium_server_facade.ts | 8 +------- 2 files changed, 2 insertions(+), 16 deletions(-) diff --git a/apps/web-clipper/entrypoints/background/index.ts b/apps/web-clipper/entrypoints/background/index.ts index 5aa2642e84..7ca94f21e7 100644 --- a/apps/web-clipper/entrypoints/background/index.ts +++ b/apps/web-clipper/entrypoints/background/index.ts @@ -1,6 +1,6 @@ import { randomString, Rect } from "@/utils"; -import TriliumServerFacade, { isDevEnv } from "./trilium_server_facade"; +import TriliumServerFacade from "./trilium_server_facade"; export default defineBackground(() => { const triliumServerFacade = new TriliumServerFacade(); @@ -96,14 +96,6 @@ export default defineBackground(() => { return await browser.tabs.captureVisibleTab({ format: 'png' }); } - browser.runtime.onInstalled.addListener(() => { - if (isDevEnv()) { - browser.browserAction.setIcon({ - path: 'icons/32-dev.png', - }); - } - }); - browser.contextMenus.create({ id: "trilium-save-selection", title: "Save selection to Trilium", diff --git a/apps/web-clipper/entrypoints/background/trilium_server_facade.ts b/apps/web-clipper/entrypoints/background/trilium_server_facade.ts index f9854437f4..3e65b849df 100644 --- a/apps/web-clipper/entrypoints/background/trilium_server_facade.ts +++ b/apps/web-clipper/entrypoints/background/trilium_server_facade.ts @@ -1,11 +1,5 @@ const PROTOCOL_VERSION_MAJOR = 1; -export function isDevEnv() { - const manifest = browser.runtime.getManifest(); - - return manifest.name.endsWith('(dev)'); -} - type TriliumSearchStatus = { status: "searching"; } | { @@ -199,7 +193,7 @@ export default class TriliumServerFacade { return parseInt(triliumDesktopPort, 10); } - return isDevEnv() ? 37740 : 37840; + return import.meta.env.DEV ? 37742 : 37840; } async callService(method: string, path: string, body?: string | object) { From bba69e98aef5d1ff73ca60bf102a1a01d00396ec Mon Sep 17 00:00:00 2001 From: Elian Doran <contact@eliandoran.me> Date: Sat, 24 Jan 2026 17:07:53 +0200 Subject: [PATCH 230/353] fix(web-clipper): warning about offscreen permission in MV2 --- apps/web-clipper/wxt.config.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/apps/web-clipper/wxt.config.ts b/apps/web-clipper/wxt.config.ts index 98932d7463..9c41b98108 100644 --- a/apps/web-clipper/wxt.config.ts +++ b/apps/web-clipper/wxt.config.ts @@ -2,7 +2,7 @@ import { defineConfig } from "wxt"; export default defineConfig({ modules: ['@wxt-dev/auto-icons'], - manifest: { + manifest: ({ manifestVersion }) => ({ name: "Trilium Web Clipper", description: "Save web clippings to Trilium Notes.", homepage_url: "https://docs.triliumnotes.org/user-guide/setup/web-clipper", @@ -14,8 +14,8 @@ export default defineConfig({ "<all_urls>", "storage", "contextMenus", - "offscreen" - ], + manifestVersion === 3 && "offscreen" + ].filter(Boolean), browser_specific_settings: { gecko: { id: "{1410742d-b377-40e7-a9db-63dc9c6ec99c}" @@ -41,5 +41,5 @@ export default defineConfig({ } } } - } + }) }); From c2a758dd4af3f5c81ec07c343546d180f5f18684 Mon Sep 17 00:00:00 2001 From: Elian Doran <contact@eliandoran.me> Date: Sat, 24 Jan 2026 17:23:06 +0200 Subject: [PATCH 231/353] chore(web-clipper): address requested changes --- .../entrypoints/background/index.ts | 39 +++++++++++-------- .../background/trilium_server_facade.ts | 4 +- apps/web-clipper/entrypoints/content/index.ts | 15 ++++--- 3 files changed, 31 insertions(+), 27 deletions(-) diff --git a/apps/web-clipper/entrypoints/background/index.ts b/apps/web-clipper/entrypoints/background/index.ts index 7ca94f21e7..5ac45ba92f 100644 --- a/apps/web-clipper/entrypoints/background/index.ts +++ b/apps/web-clipper/entrypoints/background/index.ts @@ -7,18 +7,23 @@ export default defineBackground(() => { // Keyboard shortcuts browser.commands.onCommand.addListener(async (command) => { - if (command == "saveSelection") { - await saveSelection(); - } else if (command == "saveWholePage") { - await saveWholePage(); - } else if (command == "saveTabs") { - await saveTabs(); - } else if (command == "saveCroppedScreenshot") { - const activeTab = await getActiveTab(); - - await saveCroppedScreenshot(activeTab.url); - } else { - console.log("Unrecognized command", command); + switch (command) { + case "saveSelection": + await saveSelection(); + break; + case "saveWholePage": + await saveWholePage(); + break; + case "saveTabs": + await saveTabs(); + break; + case "saveCroppedScreenshot": { + const activeTab = await getActiveTab(); + await saveCroppedScreenshot(activeTab.url); + break; + } + default: + console.log("Unrecognized command", command); } }); @@ -39,6 +44,7 @@ export default defineBackground(() => { ctx.drawImage(img, newArea.x, newArea.y, newArea.width, newArea.height, 0, 0, newArea.width, newArea.height); resolve(canvas.toDataURL()); }; + img.onerror = reject; img.src = dataUrl; }); @@ -188,14 +194,15 @@ export default defineBackground(() => { async function postProcessImage(image: { src: string, dataUrl?: string | null }) { if (image.src.startsWith("data:image/")) { image.dataUrl = image.src; - image.src = `inline.${ image.src.substr(11, 3)}`; // this should extract file type - png/jpg + const mimeSubtype = image.src.match(/data:image\/(.*?);/)?.[1]; + if (!mimeSubtype) return; + image.src = `inline.${mimeSubtype}`; // this should extract file type - png/jpg } else { try { image.dataUrl = await fetchImage(image.src); - } - catch (e) { - console.log(`Cannot fetch image from ${image.src}`); + } catch (e) { + console.error(`Cannot fetch image from ${image.src}`, e); } } } diff --git a/apps/web-clipper/entrypoints/background/trilium_server_facade.ts b/apps/web-clipper/entrypoints/background/trilium_server_facade.ts index 3e65b849df..43247a9e79 100644 --- a/apps/web-clipper/entrypoints/background/trilium_server_facade.ts +++ b/apps/web-clipper/entrypoints/background/trilium_server_facade.ts @@ -154,7 +154,7 @@ export default class TriliumServerFacade { this.setTriliumSearch({ status: 'not-found' }); } - async triggerSearchNoteByUrl(noteUrl) { + async triggerSearchNoteByUrl(noteUrl: string) { const resp = await this.callService('GET', `notes-by-url/${encodeURIComponent(noteUrl)}`); let newStatus: TriliumSearchNoteStatus; if (resp && resp.noteId) { @@ -229,8 +229,6 @@ export default class TriliumServerFacade { catch (e) { console.log("Sending request to trilium failed", e); - window.showToast('Your request failed because we could not contact Trilium instance. Please make sure Trilium is running and is accessible.'); - return null; } } diff --git a/apps/web-clipper/entrypoints/content/index.ts b/apps/web-clipper/entrypoints/content/index.ts index 618ad11e16..b708bd6393 100644 --- a/apps/web-clipper/entrypoints/content/index.ts +++ b/apps/web-clipper/entrypoints/content/index.ts @@ -55,12 +55,12 @@ export default defineContentScript({ let modifiedDate: Date | null = null; const articlePublishedTime = document.querySelector("meta[property='article:published_time']")?.getAttribute('content'); - if (articlePublishedTime && articlePublishedTime) { + if (articlePublishedTime) { publishedDate = new Date(articlePublishedTime); } const articleModifiedTime = document.querySelector("meta[property='article:modified_time']")?.getAttribute('content'); - if (articleModifiedTime && articleModifiedTime) { + if (articleModifiedTime) { modifiedDate = new Date(articleModifiedTime); } @@ -129,7 +129,7 @@ export default defineContentScript({ selection.style.height = `${selectionArea.height}px`; } - function setSelectionSizeFromMouse(event) { + function setSelectionSizeFromMouse(event: MouseEvent) { if (!draggingStartPos) return; if (event.clientX < draggingStartPos.x) { @@ -145,14 +145,14 @@ export default defineContentScript({ updateSelection(); } - function selection_mouseDown(event) { + function selection_mouseDown(event: MouseEvent) { selectionArea = {x: event.clientX, y: event.clientY, width: 0, height: 0}; draggingStartPos = {x: event.clientX, y: event.clientY}; isDragging = true; updateSelection(); } - function selection_mouseMove(event) { + function selection_mouseMove(event: MouseEvent) { if (!isDragging) return; setSelectionSizeFromMouse(event); } @@ -169,7 +169,7 @@ export default defineContentScript({ document.body.removeChild(messageComp); } - function selection_mouseUp(event) { + function selection_mouseUp(event: MouseEvent) { setSelectionSizeFromMouse(event); removeOverlay(); @@ -186,7 +186,7 @@ export default defineContentScript({ setTimeout(() => resolve(selectionArea), 100); } - function cancel(event) { + function cancel(event: KeyboardEvent) { if (event.key === "Escape") { removeOverlay(); } @@ -195,7 +195,6 @@ export default defineContentScript({ overlay.addEventListener('mousedown', selection_mouseDown); overlay.addEventListener('mousemove', selection_mouseMove); overlay.addEventListener('mouseup', selection_mouseUp); - overlay.addEventListener('mouseup', selection_mouseUp); messageComp.addEventListener('keydown', cancel); }); } From 9d347ff3d9a2bc856ce462b3dab9a0bf3d6f47d1 Mon Sep 17 00:00:00 2001 From: Elian Doran <contact@eliandoran.me> Date: Sat, 24 Jan 2026 17:25:09 +0200 Subject: [PATCH 232/353] chore(web-clipper): update help URL --- apps/web-clipper/entrypoints/popup/popup.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/web-clipper/entrypoints/popup/popup.ts b/apps/web-clipper/entrypoints/popup/popup.ts index 40ca451a8f..273fe5c5b5 100644 --- a/apps/web-clipper/entrypoints/popup/popup.ts +++ b/apps/web-clipper/entrypoints/popup/popup.ts @@ -101,7 +101,7 @@ async function saveLinkWithNote() { $("#save-button").on("click", saveLinkWithNote); $("#show-help-button").on("click", () => { - window.open("https://github.com/zadam/trilium/wiki/Web-clipper", '_blank'); + window.open("https://docs.triliumnotes.org/user-guide/setup/web-clipper", '_blank'); }); function escapeHtml(string) { From d0f441ec7492b60aa1852f511afebe4c618b7395 Mon Sep 17 00:00:00 2001 From: Elian Doran <contact@eliandoran.me> Date: Sat, 24 Jan 2026 17:38:36 +0200 Subject: [PATCH 233/353] ci(web-clipper): generate .zip files on change --- .github/workflows/web-clipper.yml | 44 +++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 .github/workflows/web-clipper.yml diff --git a/.github/workflows/web-clipper.yml b/.github/workflows/web-clipper.yml new file mode 100644 index 0000000000..412b2ad6f6 --- /dev/null +++ b/.github/workflows/web-clipper.yml @@ -0,0 +1,44 @@ +name: Deploy web clipper extension + +on: + push: + branches: + - main + paths: + - "apps/web-clipper/**" + + pull_request: + paths: + - "apps/web-clipper/**" + +jobs: + build: + runs-on: ubuntu-latest + name: Build web clipper extension + + permissions: + contents: read + deployments: write + + steps: + - uses: actions/checkout@v6 + - uses: pnpm/action-setup@v4 + - name: Set up node & dependencies + uses: actions/setup-node@v6 + with: + node-version: 24 + cache: "pnpm" + + - name: Install dependencies + run: pnpm install --filter web-clipper --frozen-lockfile --ignore-scripts + + - name: Build the web clipper extension + run: | + pnpm --filter web-clipper zip + pnpm --filter web-clipper zip:firefox + + - name: Upload build artifacts + uses: actions/upload-artifact@v6 + with: + name: web-clipper-extension + path: .output/*.zip From 4c978d8622e53f1a208cda79c8cb74fc76c2a639 Mon Sep 17 00:00:00 2001 From: Elian Doran <contact@eliandoran.me> Date: Sat, 24 Jan 2026 17:41:51 +0200 Subject: [PATCH 234/353] ci(web-clipper): fail if no files found --- .github/workflows/web-clipper.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/web-clipper.yml b/.github/workflows/web-clipper.yml index 412b2ad6f6..f12fdb11d7 100644 --- a/.github/workflows/web-clipper.yml +++ b/.github/workflows/web-clipper.yml @@ -42,3 +42,4 @@ jobs: with: name: web-clipper-extension path: .output/*.zip + if-no-files-found: error From cb0fabf273f14dfdccf0312c102123e3a0802c08 Mon Sep 17 00:00:00 2001 From: Elian Doran <contact@eliandoran.me> Date: Sat, 24 Jan 2026 17:43:11 +0200 Subject: [PATCH 235/353] ci(web-clipper): fail if no files found --- .github/workflows/web-clipper.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/web-clipper.yml b/.github/workflows/web-clipper.yml index f12fdb11d7..cd9de9a798 100644 --- a/.github/workflows/web-clipper.yml +++ b/.github/workflows/web-clipper.yml @@ -41,5 +41,5 @@ jobs: uses: actions/upload-artifact@v6 with: name: web-clipper-extension - path: .output/*.zip + path: apps/web-clipper/.output/*.zip if-no-files-found: error From 625062a2683324e1d1860ba82f36d538c7a6f3c0 Mon Sep 17 00:00:00 2001 From: Elian Doran <contact@eliandoran.me> Date: Sat, 24 Jan 2026 17:46:48 +0200 Subject: [PATCH 236/353] ci(web-clipper): no files uploaded --- .github/workflows/web-clipper.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/web-clipper.yml b/.github/workflows/web-clipper.yml index cd9de9a798..ad16ee972b 100644 --- a/.github/workflows/web-clipper.yml +++ b/.github/workflows/web-clipper.yml @@ -42,4 +42,5 @@ jobs: with: name: web-clipper-extension path: apps/web-clipper/.output/*.zip + include-hidden-files: true if-no-files-found: error From 743a6f3466c18688e8b05caa3369c8fb94cc9165 Mon Sep 17 00:00:00 2001 From: Elian Doran <contact@eliandoran.me> Date: Sat, 24 Jan 2026 18:12:02 +0200 Subject: [PATCH 237/353] ci(web-clipper): disable compression level for artifact --- .github/workflows/web-clipper.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/web-clipper.yml b/.github/workflows/web-clipper.yml index ad16ee972b..ef360a5a93 100644 --- a/.github/workflows/web-clipper.yml +++ b/.github/workflows/web-clipper.yml @@ -44,3 +44,4 @@ jobs: path: apps/web-clipper/.output/*.zip include-hidden-files: true if-no-files-found: error + compression-level: 0 From 199962233b372838b750b81584c9034a77ccf7da Mon Sep 17 00:00:00 2001 From: Elian Doran <contact@eliandoran.me> Date: Sat, 24 Jan 2026 19:04:38 +0200 Subject: [PATCH 238/353] chore(web-clipper): use friendly ID for Firefox --- apps/web-clipper/wxt.config.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/apps/web-clipper/wxt.config.ts b/apps/web-clipper/wxt.config.ts index 9c41b98108..f3389c1efe 100644 --- a/apps/web-clipper/wxt.config.ts +++ b/apps/web-clipper/wxt.config.ts @@ -18,7 +18,8 @@ export default defineConfig({ ].filter(Boolean), browser_specific_settings: { gecko: { - id: "{1410742d-b377-40e7-a9db-63dc9c6ec99c}" + // See https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/browser_specific_settings#id. + id: "web-clipper@triliumnotes.org" } }, commands: { From 1cf93ff0dec89ee1a80654934cb30fad74920043 Mon Sep 17 00:00:00 2001 From: Elian Doran <contact@eliandoran.me> Date: Sat, 24 Jan 2026 19:25:16 +0200 Subject: [PATCH 239/353] chore(web-clipper): add data_collection_permissions for Firefox --- apps/web-clipper/wxt.config.ts | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/apps/web-clipper/wxt.config.ts b/apps/web-clipper/wxt.config.ts index f3389c1efe..71f7df37a8 100644 --- a/apps/web-clipper/wxt.config.ts +++ b/apps/web-clipper/wxt.config.ts @@ -19,7 +19,14 @@ export default defineConfig({ browser_specific_settings: { gecko: { // See https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/browser_specific_settings#id. - id: "web-clipper@triliumnotes.org" + id: "web-clipper@triliumnotes.org", + // Firefox built-in data collection consent + // See https://extensionworkshop.com/documentation/develop/firefox-builtin-data-consent/ + // This extension only communicates with a user-configured Trilium instance + // and does not collect telemetry or send data to remote servers. + data_collection_permissions: { + required: ["none"] + } } }, commands: { From ada22e496679ea366b16704327d67b6577cc6b51 Mon Sep 17 00:00:00 2001 From: Elian Doran <contact@eliandoran.me> Date: Sat, 24 Jan 2026 21:24:14 +0200 Subject: [PATCH 240/353] docs(user): update web clipper --- .../Installation & Setup/Web Clipper.html | 55 ++++++++++++++----- apps/web-clipper/README.md | 24 -------- .../Developer Guide/Documentation.md | 2 +- .../Installation & Setup/Web Clipper.md | 37 ++++++++++--- 4 files changed, 73 insertions(+), 45 deletions(-) delete mode 100644 apps/web-clipper/README.md diff --git a/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Installation & Setup/Web Clipper.html b/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Installation & Setup/Web Clipper.html index b406c7b3ce..effb6e395b 100644 --- a/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Installation & Setup/Web Clipper.html +++ b/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Installation & Setup/Web Clipper.html @@ -4,17 +4,34 @@ <p>Trilium Web Clipper is a web browser extension which allows user to clip text, screenshots, whole pages and short notes and save them directly to Trilium Notes.</p> -<p>Project is hosted <a href="https://github.com/TriliumNext/web-clipper">here</a>.</p> -<p>Firefox and Chrome are supported browsers, but the chrome build should - work on other chromium based browsers as well.</p> +<h2>Supported browsers</h2> +<p>Trilium Web Clipper officially supports the following web browsers:</p> +<ul> + <li> + <p>Mozilla Firefox, using Manifest v2.</p> + </li> + <li> + <p>Google Chrome, using Manifest v3. Theoretically the extension should work + on other Chromium-based browsers as well, but they are not officially supported.</p> + </li> +</ul> +<h2>Obtaining the extension</h2> +<aside class="admonition warning"> + <p>The extension is currently under development. A preview with unsigned + extensions is available on <a href="https://github.com/TriliumNext/Trilium/actions/runs/21318809414">GitHub Actions</a>.</p> + <p>We have already submitted the extension to both Chrome and Firefox web + stores, but they are pending validation.</p> +</aside> <h2>Functionality</h2> <ul> <li>select text and clip it with the right-click context menu</li> <li>click on an image or link and save it through context menu</li> <li>save whole page from the popup or context menu</li> <li>save screenshot (with crop tool) from either popup or context menu</li> - <li>create short text note from popup</li> + <li + >create short text note from popup</li> </ul> +<h2>Location of clippings</h2> <p>Trilium will save these clippings as a new child note under a "clipper inbox" note.</p> <p>By default, that's the <a href="#root/_help_l0tKav7yLHGF">day note</a> but you @@ -23,21 +40,33 @@ spellcheck="false">clipperInbox</code>, on any other note.</p> <p>If there's multiple clippings from the same page (and on the same day), then they will be added to the same note.</p> -<p><strong>Extension is available from:</strong> -</p> +<h2>Keyboard shortcuts</h2> +<p>Keyboard shortcuts are available for most functions:</p> <ul> - <li><a href="https://github.com/TriliumNext/web-clipper/releases">Project release page</a> - - .xpi for Firefox and .zip for Chromium based browsers.</li> - <li><a href="https://chromewebstore.google.com/detail/trilium-web-clipper/dfhgmnfclbebfobmblelddiejjcijbjm">Chrome Web Store</a> + <li>Save selected text: <kbd>Ctrl</kbd>+<kbd>Shift</kbd>+<kbd>S</kbd> (Mac: <kbd>⌘</kbd>+<kbd>⇧</kbd>+<kbd>S</kbd>)</li> + <li + >Save whole page: <kbd>Alt</kbd>+<kbd>Shift</kbd>+<kbd>S</kbd> (Mac: <kbd>⌥</kbd>+<kbd>⇧</kbd>+<kbd>S</kbd>)</li> + <li + >Save screenshot: <kbd>Ctrl</kbd>+<kbd>Shift</kbd>+<kbd>E</kbd> (Mac: <kbd>⌘</kbd>+<kbd>⇧</kbd>+<kbd>E</kbd>)</li> +</ul> +<p>To set custom shortcuts, follow the directions for your browser.</p> +<ul> + <li><strong>Firefox</strong>: <code spellcheck="false">about:addons</code> → + Gear icon ⚙️ → Manage extension shortcuts</li> + <li><strong>Chrome</strong>: <code spellcheck="false">chrome://extensions/shortcuts</code> </li> </ul> +<aside class="admonition note"> + <p>On Firefox, the default shortcuts interfere with some browser features. + As such, the keyboard combinations will not trigger the Web Clipper action. + To fix this, simply change the keyboard shortcut to something that works. + The defaults will be adjusted in future versions.</p> +</aside> <h2>Configuration</h2> <p>The extension needs to connect to a running Trilium instance. By default, it scans a port range on the local computer to find a desktop Trilium instance.</p> <p>It's also possible to configure the <a href="#root/_help_WOcw2SLH6tbX">server</a> address if you don't run the desktop application, or want it to work without the desktop application running.</p> -<h2>Username</h2> -<p>Older versions of Trilium (before 0.50) required username & password - to authenticate, but this is no longer the case. You may enter anything - in that field, it will not have any effect.</p> \ No newline at end of file +<h2>Credits</h2> +<p>Some parts of the code are based on the <a href="https://github.com/laurent22/joplin/tree/master/Clipper">Joplin Notes browser extension</a>.</p> \ No newline at end of file diff --git a/apps/web-clipper/README.md b/apps/web-clipper/README.md deleted file mode 100644 index a37d0e1817..0000000000 --- a/apps/web-clipper/README.md +++ /dev/null @@ -1,24 +0,0 @@ -# Trilium Web Clipper - -## This repo is dead - -**Trilium is in maintenance mode and Web Clipper is not likely to get new releases.** - -Trilium Web Clipper is a web browser extension which allows user to clip text, screenshots, whole pages and short notes and save them directly to [Trilium Notes](https://github.com/zadam/trilium). - -For more details, see the [wiki page](https://github.com/zadam/trilium/wiki/Web-clipper). - -## Keyboard shortcuts -Keyboard shortcuts are available for most functions: -* Save selected text: `Ctrl+Shift+S` (Mac: `Cmd+Shift+S`) -* Save whole page: `Alt+Shift+S` (Mac: `Opt+Shift+S`) -* Save screenshot: `Ctrl+Shift+E` (Mac: `Cmd+Shift+E`) - -To set custom shortcuts, follow the directions for your browser. - -**Firefox**: `about:addons` > Gear icon ⚙️ > Manage extension shortcuts - -**Chrome**: `chrome://extensions/shortcuts` - -## Credits -Some parts of the code are based on the [Joplin Notes browser extension](https://github.com/laurent22/joplin/tree/master/Clipper). diff --git a/docs/Developer Guide/Developer Guide/Documentation.md b/docs/Developer Guide/Developer Guide/Documentation.md index ea5d135a22..d840ffd46a 100644 --- a/docs/Developer Guide/Developer Guide/Documentation.md +++ b/docs/Developer Guide/Developer Guide/Documentation.md @@ -1,5 +1,5 @@ # Documentation -There are multiple types of documentation for Trilium:<img class="image-style-align-right" src="api/images/TzNwfb67k5Dh/Documentation_image.png" width="205" height="162"> +There are multiple types of documentation for Trilium:<img class="image-style-align-right" src="api/images/rFcOjCdtKSRx/Documentation_image.png" width="205" height="162"> * The _User Guide_ represents the user-facing documentation. This documentation can be browsed by users directly from within Trilium, by pressing <kbd>F1</kbd>. * The _Developer's Guide_ represents a set of Markdown documents that present the internals of Trilium, for developers. diff --git a/docs/User Guide/User Guide/Installation & Setup/Web Clipper.md b/docs/User Guide/User Guide/Installation & Setup/Web Clipper.md index bd5731d34f..a74fb72d05 100644 --- a/docs/User Guide/User Guide/Installation & Setup/Web Clipper.md +++ b/docs/User Guide/User Guide/Installation & Setup/Web Clipper.md @@ -3,9 +3,19 @@ Trilium Web Clipper is a web browser extension which allows user to clip text, screenshots, whole pages and short notes and save them directly to Trilium Notes. -Project is hosted [here](https://github.com/TriliumNext/web-clipper). +## Supported browsers -Firefox and Chrome are supported browsers, but the chrome build should work on other chromium based browsers as well. +Trilium Web Clipper officially supports the following web browsers: + +* Mozilla Firefox, using Manifest v2. +* Google Chrome, using Manifest v3. Theoretically the extension should work on other Chromium-based browsers as well, but they are not officially supported. + +## Obtaining the extension + +> [!WARNING] +> The extension is currently under development. A preview with unsigned extensions is available on [GitHub Actions](https://github.com/TriliumNext/Trilium/actions/runs/21318809414). +> +> We have already submitted the extension to both Chrome and Firefox web stores, but they are pending validation. ## Functionality @@ -15,16 +25,29 @@ Firefox and Chrome are supported browsers, but the chrome build should work on o * save screenshot (with crop tool) from either popup or context menu * create short text note from popup +## Location of clippings + Trilium will save these clippings as a new child note under a "clipper inbox" note. By default, that's the [day note](../Advanced%20Usage/Advanced%20Showcases/Day%20Notes.md) but you can override that by setting the [label](../Advanced%20Usage/Attributes.md) `clipperInbox`, on any other note. If there's multiple clippings from the same page (and on the same day), then they will be added to the same note. -**Extension is available from:** +## Keyboard shortcuts -* [Project release page](https://github.com/TriliumNext/web-clipper/releases) - .xpi for Firefox and .zip for Chromium based browsers. -* [Chrome Web Store](https://chromewebstore.google.com/detail/trilium-web-clipper/dfhgmnfclbebfobmblelddiejjcijbjm) +Keyboard shortcuts are available for most functions: + +* Save selected text: <kbd>Ctrl</kbd>+<kbd>Shift</kbd>+<kbd>S</kbd> (Mac: <kbd>⌘</kbd>+<kbd>⇧</kbd>+<kbd>S</kbd>) +* Save whole page: <kbd>Alt</kbd>+<kbd>Shift</kbd>+<kbd>S</kbd> (Mac: <kbd>⌥</kbd>+<kbd>⇧</kbd>+<kbd>S</kbd>) +* Save screenshot: <kbd>Ctrl</kbd>+<kbd>Shift</kbd>+<kbd>E</kbd> (Mac: <kbd>⌘</kbd>+<kbd>⇧</kbd>+<kbd>E</kbd>) + +To set custom shortcuts, follow the directions for your browser. + +* **Firefox**: `about:addons` → Gear icon ⚙️ → Manage extension shortcuts +* **Chrome**: `chrome://extensions/shortcuts` + +> [!NOTE] +> On Firefox, the default shortcuts interfere with some browser features. As such, the keyboard combinations will not trigger the Web Clipper action. To fix this, simply change the keyboard shortcut to something that works. The defaults will be adjusted in future versions. ## Configuration @@ -32,6 +55,6 @@ The extension needs to connect to a running Trilium instance. By default, it sca It's also possible to configure the [server](Server%20Installation.md) address if you don't run the desktop application, or want it to work without the desktop application running. -## Username +## Credits -Older versions of Trilium (before 0.50) required username & password to authenticate, but this is no longer the case. You may enter anything in that field, it will not have any effect. \ No newline at end of file +Some parts of the code are based on the [Joplin Notes browser extension](https://github.com/laurent22/joplin/tree/master/Clipper). \ No newline at end of file From e2e5d485d7281e091fd65b0bddfd760bb99c5c5f Mon Sep 17 00:00:00 2001 From: Elian Doran <contact@eliandoran.me> Date: Sat, 24 Jan 2026 21:35:54 +0200 Subject: [PATCH 241/353] docs(dev): add some information on web clipper --- docs/Developer Guide/!!!meta.json | 34 ++++++++++++++++++ .../Developer Guide/Concepts/Web Clipper.md | 35 +++++++++++++++++++ .../Developer Guide/Project Structure.md | 1 + 3 files changed, 70 insertions(+) create mode 100644 docs/Developer Guide/Developer Guide/Concepts/Web Clipper.md diff --git a/docs/Developer Guide/!!!meta.json b/docs/Developer Guide/!!!meta.json index d5bdbfd832..3d865230e9 100644 --- a/docs/Developer Guide/!!!meta.json +++ b/docs/Developer Guide/!!!meta.json @@ -2839,6 +2839,40 @@ "format": "markdown", "dataFileName": "Themes.md", "attachments": [] + }, + { + "isClone": false, + "noteId": "YTAxJMA3uWwn", + "notePath": [ + "jdjRLhLV3TtI", + "yeqU0zo0ZQ83", + "YTAxJMA3uWwn" + ], + "title": "Web Clipper", + "notePosition": 210, + "prefix": null, + "isExpanded": false, + "type": "text", + "mime": "text/html", + "attributes": [ + { + "type": "label", + "name": "shareAlias", + "value": "web-clipper", + "isInheritable": false, + "position": 20 + }, + { + "type": "label", + "name": "iconClass", + "value": "bx bx-paperclip", + "isInheritable": false, + "position": 30 + } + ], + "format": "markdown", + "dataFileName": "Web Clipper.md", + "attachments": [] } ] }, diff --git a/docs/Developer Guide/Developer Guide/Concepts/Web Clipper.md b/docs/Developer Guide/Developer Guide/Concepts/Web Clipper.md new file mode 100644 index 0000000000..b36bfd1303 --- /dev/null +++ b/docs/Developer Guide/Developer Guide/Concepts/Web Clipper.md @@ -0,0 +1,35 @@ +# Web Clipper +The Web Clipper is present in the monorepo in `apps/web-clipper`. It's based on [WXT](https://wxt.dev/guide/introduction.html), a framework for building web extensions that allows very easy development and publishing. + +## Manifest version + +Originally the Web Clipper supported only Manifest v2, which made the extension incompatible with Google Chrome. [#8494](https://github.com/TriliumNext/Trilium/pull/8494) introduces Manifest v3 support for Google Chrome, alongside with Manifest v2 for Firefox. + +Although Firefox does support Manifest v3, we are still using Manifest v2 for it because WXT dev mode doesn't work for the Firefox / Manifest v3 combination and there were some mentions about Manifest v3 not being well supported on Firefox Mobile (and we plan to have support for it). + +## Dev mode + +WXT allows easy development of the plugin, with full TypeScript support and live reload. To enter dev mode: + +* Run `pnpm --filter web-clipper dev` to enter dev mode for Chrome (with manifest v3). +* Run `pnpm --filter web-clipper dev:firefox` to enter dev mode for Firefox (with manifest v2). + +This will open a separate browser instance in which the extension is automatically injected. + +## Port + +The default port is: + +* `37742` if in development mode. This makes it possible to use `pnpm desktop:start` to spin up a desktop instance to use the Clipper with. +* `37840` in production, the default Trilium port. + +## Building + +* Run `build` (Chrome) or `build:firefox` to generate the output files, which will be in `.output/[browser]`. +* Run `zip` or `zip:firefox` to generate the ZIP files. + +## CI + +`.github/workflows/web-clipper.yml` handles the building of the web clipper. Whenever the web clipper is modified, it generates the ZIPs and uploads them as artifacts. + +There is currently no automatic publishing to the app stores. \ No newline at end of file diff --git a/docs/Developer Guide/Developer Guide/Project Structure.md b/docs/Developer Guide/Developer Guide/Project Structure.md index 82688cf2ac..2e2a5438d4 100644 --- a/docs/Developer Guide/Developer Guide/Project Structure.md +++ b/docs/Developer Guide/Developer Guide/Project Structure.md @@ -9,6 +9,7 @@ The mono-repo is mainly structured in: * `client`, representing the front-end that is used both by the server and the desktop application. * `server`, representing the Node.js / server version of the application. * `desktop`, representing the Electron-based desktop application. + * `web-clipper`, representing the browser extension to easily clip web pages into Trilium, with support for both Firefox and Chrome (manifest V3). * `packages`, containing dependencies used by one or more `apps`. * `commons`, containing shared code for all the apps. From 4927b01d9634c7af98e54ec17b9dc341a9c8b437 Mon Sep 17 00:00:00 2001 From: Elian Doran <contact@eliandoran.me> Date: Sat, 24 Jan 2026 23:13:27 +0200 Subject: [PATCH 242/353] chore(webclipper): fix typecheck --- apps/web-clipper/entrypoints/background/index.ts | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/apps/web-clipper/entrypoints/background/index.ts b/apps/web-clipper/entrypoints/background/index.ts index 5ac45ba92f..31ee608f53 100644 --- a/apps/web-clipper/entrypoints/background/index.ts +++ b/apps/web-clipper/entrypoints/background/index.ts @@ -366,7 +366,7 @@ export default defineBackground(() => { toast(`${tabs.length} links have been saved to Trilium.`, resp.noteId, tabIds); } - browser.contextMenus.onClicked.addListener(async (info, tab) => { + browser.contextMenus.onClicked.addListener(async (info: globalThis.Browser.contextMenus.OnClickData & { linkText?: string; }) => { if (info.menuItemId === 'trilium-save-selection') { await saveSelection(); } @@ -381,6 +381,7 @@ export default defineBackground(() => { } else if (info.menuItemId === 'trilium-save-link') { if (!info.linkUrl) return; + // Link text is only available on Firefox. const linkText = info.linkText || info.linkUrl; const content = `<a href="${info.linkUrl}">${linkText}</a>`; const activeTab = await getActiveTab(); @@ -460,7 +461,9 @@ export default defineBackground(() => { } else if (request.name === 'trigger-trilium-search-note-url') { const activeTab = await getActiveTab(); - triliumServerFacade.triggerSearchNoteByUrl(activeTab.url); + if (activeTab.url) { + triliumServerFacade.triggerSearchNoteByUrl(activeTab.url); + } } }); }); From b7b367b5a3449225f0469d97ea128a351d6e8065 Mon Sep 17 00:00:00 2001 From: Elian Doran <contact@eliandoran.me> Date: Sat, 24 Jan 2026 23:54:26 +0200 Subject: [PATCH 243/353] chore(webclipper): address requested changes --- .../entrypoints/background/index.ts | 36 +++++++++++++------ .../background/trilium_server_facade.ts | 6 ++-- apps/web-clipper/entrypoints/content/index.ts | 12 ++++--- apps/web-clipper/entrypoints/options/index.ts | 2 +- apps/web-clipper/entrypoints/popup/popup.ts | 2 +- 5 files changed, 37 insertions(+), 21 deletions(-) diff --git a/apps/web-clipper/entrypoints/background/index.ts b/apps/web-clipper/entrypoints/background/index.ts index 31ee608f53..8657ee5117 100644 --- a/apps/web-clipper/entrypoints/background/index.ts +++ b/apps/web-clipper/entrypoints/background/index.ts @@ -2,6 +2,19 @@ import { randomString, Rect } from "@/utils"; import TriliumServerFacade from "./trilium_server_facade"; +type BackgroundMessage = { + name: "toast"; + message: string; + noteId: string | null; + tabIds: number[] | null; +} | { + name: "trilium-save-selection"; +} | { + name: "trilium-get-rectangle-for-screenshot"; +} | { + name: "trilium-save-page"; +}; + export default defineBackground(() => { const triliumServerFacade = new TriliumServerFacade(); @@ -155,7 +168,7 @@ export default defineBackground(() => { return tabs; } - async function sendMessageToActiveTab(message) { + async function sendMessageToActiveTab(message: BackgroundMessage) { const activeTab = await getActiveTab(); if (!activeTab?.id) { @@ -229,7 +242,7 @@ export default defineBackground(() => { toast("Selection has been saved to Trilium.", resp.noteId); } - async function getImagePayloadFromSrc(src, pageUrl) { + async function getImagePayloadFromSrc(src: string, pageUrl: string | null | undefined) { const image = { imageId: randomString(20), src @@ -247,7 +260,7 @@ export default defineBackground(() => { }; } - async function saveCroppedScreenshot(pageUrl) { + async function saveCroppedScreenshot(pageUrl: string | null | undefined) { const { rect, devicePixelRatio } = await sendMessageToActiveTab({name: 'trilium-get-rectangle-for-screenshot'}); const src = await takeCroppedScreenshot(rect, devicePixelRatio); @@ -263,7 +276,7 @@ export default defineBackground(() => { toast("Screenshot has been saved to Trilium.", resp.noteId); } - async function saveWholeScreenshot(pageUrl) { + async function saveWholeScreenshot(pageUrl: string | null | undefined) { const src = await takeWholeScreenshot(); const payload = await getImagePayloadFromSrc(src, pageUrl); @@ -277,7 +290,7 @@ export default defineBackground(() => { toast("Screenshot has been saved to Trilium.", resp.noteId); } - async function saveImage(srcUrl, pageUrl) { + async function saveImage(srcUrl: string, pageUrl: string | null | undefined) { const payload = await getImagePayloadFromSrc(srcUrl, pageUrl); const resp = await triliumServerFacade.callService("POST", "clippings", payload); @@ -303,11 +316,11 @@ export default defineBackground(() => { toast("Page has been saved to Trilium.", resp.noteId); } - async function saveLinkWithNote(title, content) { + async function saveLinkWithNote(title: string, content: string) { const activeTab = await getActiveTab(); if (!title.trim()) { - title = activeTab.title; + title = activeTab.title ?? ""; } const resp = await triliumServerFacade.callService('POST', 'notes', { @@ -326,7 +339,7 @@ export default defineBackground(() => { return true; } - async function getTabsPayload(tabs) { + async function getTabsPayload(tabs: Browser.tabs.Tab[]) { let content = '<ul>'; tabs.forEach(tab => { content += `<li><a href="${tab.url}">${tab.title}</a></li>`; @@ -335,7 +348,7 @@ export default defineBackground(() => { const domainsCount = tabs.map(tab => tab.url) .reduce((acc, url) => { - const hostname = new URL(url).hostname; + const hostname = new URL(url ?? "").hostname; return acc.set(hostname, (acc.get(hostname) || 0) + 1); }, new Map()); @@ -362,7 +375,7 @@ export default defineBackground(() => { const resp = await triliumServerFacade.callService('POST', 'notes', payload); if (!resp) return; - const tabIds = tabs.map(tab => tab.id!).filter(id => id !== undefined) as number[]; + const tabIds = tabs.map(tab => tab.id).filter(id => id !== undefined) as number[]; toast(`${tabs.length} links have been saved to Trilium.`, resp.noteId, tabIds); } @@ -377,6 +390,7 @@ export default defineBackground(() => { await saveWholeScreenshot(info.pageUrl); } else if (info.menuItemId === 'trilium-save-image') { + if (!info.srcUrl) return; await saveImage(info.srcUrl, info.pageUrl); } else if (info.menuItemId === 'trilium-save-link') { @@ -407,7 +421,7 @@ export default defineBackground(() => { console.log("Received", request); if (request.name === 'openNoteInTrilium') { - const resp = await triliumServerFacade.callService('POST', `open/${ request.noteId}`); + const resp = await triliumServerFacade.callService('POST', `open/${request.noteId}`); if (!resp) { return; diff --git a/apps/web-clipper/entrypoints/background/trilium_server_facade.ts b/apps/web-clipper/entrypoints/background/trilium_server_facade.ts index 43247a9e79..da553cec29 100644 --- a/apps/web-clipper/entrypoints/background/trilium_server_facade.ts +++ b/apps/web-clipper/entrypoints/background/trilium_server_facade.ts @@ -57,7 +57,7 @@ export default class TriliumServerFacade { catch (e) {} // nothing might be listening } - setTriliumSearchNote(st){ + setTriliumSearchNote(st: TriliumSearchNoteStatus){ this.triliumSearchNote = st; this.sendTriliumSearchNoteToPopup(); } @@ -69,7 +69,7 @@ export default class TriliumServerFacade { } setTriliumSearchWithVersionCheck(json: { protocolVersion: string }, resp: TriliumSearchStatus) { - const [major, minor] = json.protocolVersion + const [ major ] = json.protocolVersion .split(".") .map(chunk => parseInt(chunk, 10)); @@ -94,7 +94,7 @@ export default class TriliumServerFacade { try { const port = await this.getPort(); - console.debug(`Trying port ${ port}`); + console.debug(`Trying port ${port}`); const resp = await fetch(`http://127.0.0.1:${port}/api/clipper/handshake`); diff --git a/apps/web-clipper/entrypoints/content/index.ts b/apps/web-clipper/entrypoints/content/index.ts index b708bd6393..d35f3d8970 100644 --- a/apps/web-clipper/entrypoints/content/index.ts +++ b/apps/web-clipper/entrypoints/content/index.ts @@ -6,7 +6,7 @@ export default defineContentScript({ "<all_urls>" ], main: () => { - function absoluteUrl(url) { + function absoluteUrl(url: string | undefined) { if (!url) { return url; } @@ -89,8 +89,8 @@ export default defineContentScript({ messageComp.style.position = 'fixed'; messageComp.style.opacity = '0.95'; messageComp.style.fontSize = '14px'; - messageComp.style.width = `${messageCompWidth }px`; - messageComp.style.maxWidth = `${messageCompWidth }px`; + messageComp.style.width = `${messageCompWidth}px`; + messageComp.style.maxWidth = `${messageCompWidth}px`; messageComp.style.border = '1px solid black'; messageComp.style.background = 'white'; messageComp.style.color = 'black'; @@ -199,10 +199,12 @@ export default defineContentScript({ }); } - function makeLinksAbsolute(container) { + function makeLinksAbsolute(container: HTMLElement) { for (const link of container.getElementsByTagName('a')) { if (link.href) { - link.href = absoluteUrl(link.href); + const newUrl = absoluteUrl(link.href); + if (!newUrl) continue; + link.href = newUrl; } } } diff --git a/apps/web-clipper/entrypoints/options/index.ts b/apps/web-clipper/entrypoints/options/index.ts index da8fa1850a..c7cb3d4bdf 100644 --- a/apps/web-clipper/entrypoints/options/index.ts +++ b/apps/web-clipper/entrypoints/options/index.ts @@ -27,7 +27,7 @@ async function saveTriliumServerSetup(e) { let resp; try { - resp = await fetch(`${$triliumServerUrl.val() }/api/login/token`, { + resp = await fetch(`${$triliumServerUrl.val()}/api/login/token`, { method: "POST", headers: { 'Accept': 'application/json', diff --git a/apps/web-clipper/entrypoints/popup/popup.ts b/apps/web-clipper/entrypoints/popup/popup.ts index 273fe5c5b5..0e4613b794 100644 --- a/apps/web-clipper/entrypoints/popup/popup.ts +++ b/apps/web-clipper/entrypoints/popup/popup.ts @@ -111,7 +111,7 @@ function escapeHtml(string) { const htmlWithPars = pre.innerHTML.replace(/\n/g, "</p><p>"); - return `<p>${ htmlWithPars }</p>`; + return `<p>${htmlWithPars}</p>`; } const $connectionStatus = $("#connection-status"); From 99e22a5636ffcf1e85339c5673e4fa1dcbb6a16e Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sun, 25 Jan 2026 01:58:44 +0000 Subject: [PATCH 244/353] fix(deps): update codemirror themes to v6.2.4 --- packages/codemirror/package.json | 4 ++-- pnpm-lock.yaml | 24 ++++++++++++++---------- 2 files changed, 16 insertions(+), 12 deletions(-) diff --git a/packages/codemirror/package.json b/packages/codemirror/package.json index e3b832a4b8..397676b5df 100644 --- a/packages/codemirror/package.json +++ b/packages/codemirror/package.json @@ -39,8 +39,8 @@ "@fsegurai/codemirror-theme-tokyo-night-day": "6.2.3", "@fsegurai/codemirror-theme-tokyo-night-storm": "6.2.3", "@fsegurai/codemirror-theme-volcano": "6.2.3", - "@fsegurai/codemirror-theme-vscode-dark": "6.2.3", - "@fsegurai/codemirror-theme-vscode-light": "6.2.3", + "@fsegurai/codemirror-theme-vscode-dark": "6.2.4", + "@fsegurai/codemirror-theme-vscode-light": "6.2.4", "@replit/codemirror-indentation-markers": "6.5.3", "@replit/codemirror-lang-nix": "6.0.1", "@replit/codemirror-vim": "6.3.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index b66963f228..ac8955c806 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1313,11 +1313,11 @@ importers: specifier: 6.2.3 version: 6.2.3(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.39.11)(@lezer/highlight@1.2.1) '@fsegurai/codemirror-theme-vscode-dark': - specifier: 6.2.3 - version: 6.2.3(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.39.11)(@lezer/highlight@1.2.1) + specifier: 6.2.4 + version: 6.2.4(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.39.11)(@lezer/highlight@1.2.1) '@fsegurai/codemirror-theme-vscode-light': - specifier: 6.2.3 - version: 6.2.3(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.39.11)(@lezer/highlight@1.2.1) + specifier: 6.2.4 + version: 6.2.4(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.39.11)(@lezer/highlight@1.2.1) '@replit/codemirror-indentation-markers': specifier: 6.5.3 version: 6.5.3(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.39.11) @@ -3172,16 +3172,16 @@ packages: '@codemirror/view': ^6.0.0 '@lezer/highlight': ^1.0.0 - '@fsegurai/codemirror-theme-vscode-dark@6.2.3': - resolution: {integrity: sha512-702b/C3fdTQEfAXiXNewHuvyht83volDFQPR7/uF3S+F6xJ94nUHh4xaffLEFZskvuNVQErX477mq/hnYRdRbA==} + '@fsegurai/codemirror-theme-vscode-dark@6.2.4': + resolution: {integrity: sha512-Vjr1658LIYgvC3ALVeqMhSMLA1ljoLmQpdAq8JuFdH8HkENfCXPmLX498Lnab3UYyn/b3qZAbHtAF+wQ64iMkg==} peerDependencies: '@codemirror/language': ^6.0.0 '@codemirror/state': ^6.0.0 '@codemirror/view': ^6.0.0 '@lezer/highlight': ^1.0.0 - '@fsegurai/codemirror-theme-vscode-light@6.2.3': - resolution: {integrity: sha512-/5xU4EGFfH8zOiw6tIFAhWUx7meuw3rX+OOKY0yu0uM8DFU+nXpepzdBwFlaTorJqdTjxw75EHxSxpRoxrgBkw==} + '@fsegurai/codemirror-theme-vscode-light@6.2.4': + resolution: {integrity: sha512-to840rPueVX6UV4YLEymGhUzzyuunY15LfGgm4Vq6hY2NmCfwYhQ/KfTcJ3XrZXiE80MrHjOq1FDcXl17UgvIQ==} peerDependencies: '@codemirror/language': ^6.0.0 '@codemirror/state': ^6.0.0 @@ -15313,6 +15313,8 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.4.0 '@ckeditor/ckeditor5-watchdog': 47.4.0 es-toolkit: 1.39.5 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-dev-build-tools@54.3.2(@swc/helpers@0.5.17)(tslib@2.8.1)(typescript@5.9.3)': dependencies: @@ -16173,6 +16175,8 @@ snapshots: '@ckeditor/ckeditor5-icons': 47.4.0 '@ckeditor/ckeditor5-ui': 47.4.0 '@ckeditor/ckeditor5-utils': 47.4.0 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-upload@47.4.0': dependencies: @@ -17466,14 +17470,14 @@ snapshots: '@codemirror/view': 6.39.11 '@lezer/highlight': 1.2.1 - '@fsegurai/codemirror-theme-vscode-dark@6.2.3(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.39.11)(@lezer/highlight@1.2.1)': + '@fsegurai/codemirror-theme-vscode-dark@6.2.4(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.39.11)(@lezer/highlight@1.2.1)': dependencies: '@codemirror/language': 6.11.0 '@codemirror/state': 6.5.2 '@codemirror/view': 6.39.11 '@lezer/highlight': 1.2.1 - '@fsegurai/codemirror-theme-vscode-light@6.2.3(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.39.11)(@lezer/highlight@1.2.1)': + '@fsegurai/codemirror-theme-vscode-light@6.2.4(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.39.11)(@lezer/highlight@1.2.1)': dependencies: '@codemirror/language': 6.11.0 '@codemirror/state': 6.5.2 From cb0eeee8cc834a593fcd98ad56a417ade084cc37 Mon Sep 17 00:00:00 2001 From: pythaac <pythaac@gmail.com> Date: Sat, 24 Jan 2026 16:33:37 +0100 Subject: [PATCH 245/353] Translated using Weblate (Korean) Currently translated at 100.0% (152 of 152 strings) Translation: Trilium Notes/Website Translate-URL: https://hosted.weblate.org/projects/trilium/website/ko/ --- .../src/translations/ko/translation.json | 54 +++++++++++++++++-- 1 file changed, 51 insertions(+), 3 deletions(-) diff --git a/apps/website/src/translations/ko/translation.json b/apps/website/src/translations/ko/translation.json index b65d463022..3504047426 100644 --- a/apps/website/src/translations/ko/translation.json +++ b/apps/website/src/translations/ko/translation.json @@ -48,7 +48,8 @@ }, "header": { "get-started": "시작하기", - "documentation": "문서" + "documentation": "문서", + "support-us": "후원하기" }, "support_us": { "financial_donations_title": "금전적 기부", @@ -56,7 +57,8 @@ "financial_donations_cta": "애플리케이션의 주요 개발자 (<Link>eliandoran</Link>)을 다음 방법으로 후원하는 것을 고려해 주십시오.", "github_sponsors": "GitHub Sponsors", "paypal": "페이팔", - "buy_me_a_coffee": "Buy Me A Coffee" + "buy_me_a_coffee": "Buy Me A Coffee", + "title": "후원하기" }, "contribute": { "title": "기여할 수 있는 다른 방법", @@ -84,7 +86,14 @@ "title_x64": "리눅스 64비트", "title_arm64": "ARM 기반 리눅스", "description_x64": "대부분의 리눅스 배포판에서 x86_64 아키텍처와 호환됩니다.", - "description_arm64": "ARM 기반 리눅스 배포판에서 aarch64 아키텍처와 호환됩니다." + "description_arm64": "ARM 기반 리눅스 배포판에서 aarch64 아키텍처와 호환됩니다.", + "quick_start": "사용하시는 배포판에 따라 적절한 패키지 형식을 선택해주세요:", + "download_deb": ".deb", + "download_rpm": ".rpm", + "download_flatpak": ".flatpak", + "download_zip": "포터블 (.zip)", + "download_nixpkgs": "nixpkgs", + "download_aur": "AUR" }, "note_types": { "text_title": "텍스트 노트", @@ -148,5 +157,44 @@ }, "components": { "link_learn_more": "자세히 알아보기..." + }, + "footer": { + "copyright_and_the": " 그리고 ", + "copyright_community": "커뮤니티" + }, + "social_buttons": { + "github": "GitHub", + "github_discussions": "GitHub Discussions", + "matrix": "Matrix", + "reddit": "Reddit" + }, + "download_helper_desktop_macos": { + "title_x64": "macOS (Intel)", + "title_arm64": "macOS (Apple Silicon)", + "description_x64": "Intel Mac은 Monterey 버전 이상 macOS에서 지원합니다.", + "description_arm64": "M1, M2 칩과 같은 Apple Silicon이 탑재된 Macs 전용.", + "quick_start": "Homebrew로 설치하는 경우:", + "download_dmg": "설치 프로그램 내려받기 (.dmg)", + "download_homebrew_cask": "Homebrew Cask", + "download_zip": "포터블 (.zip)" + }, + "download_helper_server_docker": { + "title": "Docker를 사용한 셀프 호스팅", + "description": "Docker 컨테이너를 사용하여 Windows, Linux 또는 macOS에 간편하게 배포할 수 있습니다.", + "download_dockerhub": "도커 허브", + "download_ghcr": "ghcr.io" + }, + "download_helper_server_linux": { + "title": "리눅스에서 셀프 호스팅", + "description": "Trilium Notes를 자체 서버 또는 VPS에 배포하세요. 대부분의 배포판과 호환됩니다.", + "download_tar_x64": "x64 (.tar.xz)", + "download_tar_arm64": "ARM (.tar.xz)", + "download_nixos": "NixOS 모듈" + }, + "download_helper_server_hosted": { + "title": "유료 호스팅", + "description": "Trilium Notes는 간편한 접근 및 관리를 위해 유료 서비스인 PikaPods에서 호스팅할 수 있습니다. Trilium 팀과 직접 제휴되어있지는 않습니다.", + "download_pikapod": "PikaPods에서 설치하기", + "download_triliumcc": "또는 trilium.cc를 참조하세요" } } From 554aa1cd645cfdee585914a4bc542d9eaad8abf6 Mon Sep 17 00:00:00 2001 From: Elian Doran <online@eliandoran.me> Date: Sun, 25 Jan 2026 10:01:12 +0100 Subject: [PATCH 246/353] Translated using Weblate (Romanian) Currently translated at 94.6% (1669 of 1763 strings) Translation: Trilium Notes/Client Translate-URL: https://hosted.weblate.org/projects/trilium/client/ro/ --- .../src/translations/ro/translation.json | 24 +++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) diff --git a/apps/client/src/translations/ro/translation.json b/apps/client/src/translations/ro/translation.json index 94286ea2a6..67fb2a4f9c 100644 --- a/apps/client/src/translations/ro/translation.json +++ b/apps/client/src/translations/ro/translation.json @@ -880,7 +880,11 @@ "convert_into_attachment_prompt": "Doriți convertirea notiței „{{title}}” într-un atașament al notiței părinte?", "print_pdf": "Exportare ca PDF...", "open_note_on_server": "Deschide notița pe server", - "view_revisions": "Revizii ale notițelor..." + "view_revisions": "Revizii ale notițelor...", + "export_as_image": "Exportează ca imagine", + "export_as_image_png": "PNG (bitmap)", + "export_as_image_svg": "SVG (vectorial)", + "note_map": "Harta notițelor" }, "note_erasure_timeout": { "deleted_notes_erased": "Notițele șterse au fost eliminate permanent.", @@ -1309,8 +1313,17 @@ }, "bundle-error": { "title": "Eroare la încărcarea unui script personalizat", - "message": "Scriptul din notița cu ID-ul „{{id}}”, întitulată „{{title}}” nu a putut fi executată din cauza:\n\n{{message}}" - } + "message": "Scriptul nu a putut fi executat din cauza:\n\n{{message}}" + }, + "widget-list-error": { + "title": "Nu s-a putut obține lista de widget-uri de la server" + }, + "widget-render-error": { + "title": "Nu s-a putut randa un widget React" + }, + "widget-missing-parent": "Widget-ul personalizat nu are definită proprietatea necesară „{{property}}“.\n\nDacă acest script este menit să ruleze fără interfață grafică, folosiți '#run=frontendStartup'.", + "open-script-note": "Deschide notița scriptului", + "scripting-error": "Eroare script personalizat: {{title}}" }, "tray": { "enable_tray": "Activează system tray-ul (este necesară repornirea aplicației pentru a avea efect)", @@ -1483,7 +1496,10 @@ "note_icon": { "change_note_icon": "Schimbă iconița notiței", "reset-default": "Resetează la iconița implicită", - "search": "Căutare:" + "search": "Căutare:", + "search_placeholder_one": "Caută printre {{number}} iconițe dintr-un pachet", + "search_placeholder_few": "Caută printre {{number}} iconițe din {{count}} pachete", + "search_placeholder_other": "Caută printre {{number}} iconițe din {{count}} de pachete" }, "show_highlights_list_widget_button": { "show_highlights_list": "Afișează lista de evidențieri" From 41a85a78dbdc61d2fbcb7fa0095027978b427d59 Mon Sep 17 00:00:00 2001 From: Toto Yullian <tox@sysadmin.id> Date: Sun, 25 Jan 2026 10:02:09 +0100 Subject: [PATCH 247/353] Translated using Weblate (Indonesian) Currently translated at 1.0% (19 of 1763 strings) Translation: Trilium Notes/Client Translate-URL: https://hosted.weblate.org/projects/trilium/client/id/ --- apps/client/src/translations/id/translation.json | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/apps/client/src/translations/id/translation.json b/apps/client/src/translations/id/translation.json index 9cb3e2e4de..2e21886371 100644 --- a/apps/client/src/translations/id/translation.json +++ b/apps/client/src/translations/id/translation.json @@ -21,7 +21,10 @@ }, "bundle-error": { "title": "Gagal memuat skrip kustom", - "message": "Skrip dari catatan dengan ID \"{{id}}\", berjudul \"{{title}}\" tidak dapat dijalankan karena:\n\n{{message}}" + "message": "Skrip tidak dapat dijalankan karena:\n\n{{message}}" + }, + "widget-list-error": { + "title": "Gagal mendapatkan daftar widget dari server" } }, "add_link": { From aaaf8c1e2b90882b671f4b49ca18cdc116ec4ef1 Mon Sep 17 00:00:00 2001 From: green <g6163746@gmail.com> Date: Sun, 25 Jan 2026 11:12:14 +0100 Subject: [PATCH 248/353] Translated using Weblate (Japanese) Currently translated at 100.0% (1763 of 1763 strings) Translation: Trilium Notes/Client Translate-URL: https://hosted.weblate.org/projects/trilium/client/ja/ --- apps/client/src/translations/ja/translation.json | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/apps/client/src/translations/ja/translation.json b/apps/client/src/translations/ja/translation.json index cf6611c980..4f3e972dcf 100644 --- a/apps/client/src/translations/ja/translation.json +++ b/apps/client/src/translations/ja/translation.json @@ -1288,7 +1288,11 @@ "search_not_executed": "検索はまだ実行されていません。上の「検索」ボタンをクリックすると、検索結果が表示されます。" }, "sql_result": { - "no_rows": "このクエリでは行が返されませんでした" + "no_rows": "このクエリでは行が返されませんでした", + "not_executed": "クエリはまだ実行されていません。", + "failed": "SQLクエリの実行に失敗しました", + "statement_result": "ステートメント結果", + "execute_now": "今すぐ実行" }, "sql_table_schemas": { "tables": "テーブル" From e348a9b907e3da69c7e2ace38e15f9904f313641 Mon Sep 17 00:00:00 2001 From: noobhjy <hellothenbye@outlook.com> Date: Sun, 25 Jan 2026 13:39:07 +0100 Subject: [PATCH 249/353] Translated using Weblate (Chinese (Simplified Han script)) Currently translated at 100.0% (1763 of 1763 strings) Translation: Trilium Notes/Client Translate-URL: https://hosted.weblate.org/projects/trilium/client/zh_Hans/ --- apps/client/src/translations/cn/translation.json | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/apps/client/src/translations/cn/translation.json b/apps/client/src/translations/cn/translation.json index 47c3d491f7..9dd25e5984 100644 --- a/apps/client/src/translations/cn/translation.json +++ b/apps/client/src/translations/cn/translation.json @@ -1639,7 +1639,11 @@ "configure_launchbar": "配置启动栏" }, "sql_result": { - "no_rows": "此查询没有返回任何数据" + "no_rows": "此查询没有返回任何数据", + "not_executed": "查询尚未执行。", + "failed": "SQL 查询执行失败", + "execute_now": "立即执行", + "statement_result": "执行结果" }, "sql_table_schemas": { "tables": "表" From ba46ba77b4cf592ff844e40d89ee11c082cb82f6 Mon Sep 17 00:00:00 2001 From: Toto Yullian <tox@sysadmin.id> Date: Sun, 25 Jan 2026 12:26:57 +0100 Subject: [PATCH 250/353] Translated using Weblate (Indonesian) Currently translated at 1.1% (20 of 1763 strings) Translation: Trilium Notes/Client Translate-URL: https://hosted.weblate.org/projects/trilium/client/id/ --- apps/client/src/translations/id/translation.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/apps/client/src/translations/id/translation.json b/apps/client/src/translations/id/translation.json index 2e21886371..3b63a0c24f 100644 --- a/apps/client/src/translations/id/translation.json +++ b/apps/client/src/translations/id/translation.json @@ -25,7 +25,8 @@ }, "widget-list-error": { "title": "Gagal mendapatkan daftar widget dari server" - } + }, + "open-script-note": "Buka skrip catatan" }, "add_link": { "add_link": "Tambah tautan", From 46057fa03bf8c90ff505cab187c3b438a7e1eccf Mon Sep 17 00:00:00 2001 From: Vitalii Hlas <1998vitaliu@gmail.com> Date: Sun, 25 Jan 2026 17:30:16 +0100 Subject: [PATCH 251/353] Translated using Weblate (Ukrainian) Currently translated at 40.5% (47 of 116 strings) Translation: Trilium Notes/README Translate-URL: https://hosted.weblate.org/projects/trilium/readme/uk/ --- docs/README-uk.md | 53 +++++++++++++++++++++++++---------------------- 1 file changed, 28 insertions(+), 25 deletions(-) diff --git a/docs/README-uk.md b/docs/README-uk.md index e6b7667f42..73b35ff30b 100644 --- a/docs/README-uk.md +++ b/docs/README-uk.md @@ -112,38 +112,41 @@ Trilium Notes — це безкоштовний кросплатформний * Інтелект-карти, засновані на [Mind Elixir](https://docs.mind-elixir.com/) * [Геокарти](https://docs.triliumnotes.org/user-guide/collections/geomap) з географічними позначками та GPX-треками -* [Scripting](https://docs.triliumnotes.org/user-guide/scripts) - see [Advanced - showcases](https://docs.triliumnotes.org/user-guide/advanced-usage/advanced-showcases) -* [REST API](https://docs.triliumnotes.org/user-guide/advanced-usage/etapi) for - automation -* Scales well in both usability and performance upwards of 100 000 notes -* Touch optimized [mobile - frontend](https://docs.triliumnotes.org/user-guide/setup/mobile-frontend) for - smartphones and tablets -* Built-in [dark - theme](https://docs.triliumnotes.org/user-guide/concepts/themes), support for - user themes +* [Сценарії](https://docs.triliumnotes.org/user-guide/scripts) – див. [Розширені + демонстрації](https://docs.triliumnotes.org/user-guide/advanced-usage/advanced-showcases) +* [REST API](https://docs.triliumnotes.org/user-guide/advanced-usage/etapi) для + автоматизації +* Добре масштабується як за зручністю використання, так і за продуктивністю до + 100 000 нотаток +* Оптимізовано для сенсорного керування [мобільний + інтерфейс](https://docs.triliumnotes.org/user-guide/setup/mobile-frontend) для + смартфонів і планшетів +* Вбудована [темна + тема](https://docs.triliumnotes.org/user-guide/concepts/themes), підтримка тем + користувача * [Evernote](https://docs.triliumnotes.org/user-guide/concepts/import-export/evernote) and [Markdown import & export](https://docs.triliumnotes.org/user-guide/concepts/import-export/markdown) -* [Web Clipper](https://docs.triliumnotes.org/user-guide/setup/web-clipper) for - easy saving of web content -* Customizable UI (sidebar buttons, user-defined widgets, ...) -* [Metrics](https://docs.triliumnotes.org/user-guide/advanced-usage/metrics), - along with a Grafana Dashboard. +* [Web Clipper](https://docs.triliumnotes.org/user-guide/setup/web-clipper) для + легкого збереження веб-контенту +* Настроюваний інтерфейс користувача (кнопки бічної панелі, віджети, що + визначаються користувачем, ...) +* [Метрики](https://docs.triliumnotes.org/user-guide/advanced-usage/metrics), а + також панель інструментів Grafana. -✨ Check out the following third-party resources/communities for more TriliumNext -related goodies: +✨ Перегляньте наступні сторонні ресурси/спільноти, щоб дізнатися більше про +TriliumNext: -- [awesome-trilium](https://github.com/Nriver/awesome-trilium) for 3rd party - themes, scripts, plugins and more. -- [TriliumRocks!](https://trilium.rocks/) for tutorials, guides, and much more. +- [awesome-trilium](https://github.com/Nriver/awesome-trilium) для тем, + скриптів, плагінів тощо від сторонніх розробників. +- [TriliumRocks!](https://trilium.rocks/) для навчальних посібників, інструкцій + та багато іншого. -## ❓Why TriliumNext? +## ❓Чому TriliumNext? -The original Trilium developer ([Zadam](https://github.com/zadam)) has -graciously given the Trilium repository to the community project which resides -at https://github.com/TriliumNext +Оригінальний розробник Trilium ([Zadam](https://github.com/zadam)) люб'язно +надав репозиторій Trilium спільнотному проекту, який знаходиться за адресою +https://github.com/TriliumNext ### ⬆️Migrating from Zadam/Trilium? From 5ca0830b88dc44a65ea9b0a5e8990adc245d8f72 Mon Sep 17 00:00:00 2001 From: Vitalii Hlas <1998vitaliu@gmail.com> Date: Sun, 25 Jan 2026 17:29:58 +0100 Subject: [PATCH 252/353] Translated using Weblate (Ukrainian) Currently translated at 29.6% (45 of 152 strings) Translation: Trilium Notes/Website Translate-URL: https://hosted.weblate.org/projects/trilium/website/uk/ --- apps/website/src/translations/uk/translation.json | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/apps/website/src/translations/uk/translation.json b/apps/website/src/translations/uk/translation.json index 0c9995069a..7f4f913cea 100644 --- a/apps/website/src/translations/uk/translation.json +++ b/apps/website/src/translations/uk/translation.json @@ -45,6 +45,16 @@ "code_description": "Великі зразки вихідного коду або скриптів використовують спеціальний редактор із підсвічуванням синтаксису для багатьох мов програмування та різними колірними темами.", "file_title": "Файлові нотатки", "file_description": "Вбудовуйте мультимедійні файли, такі як PDF-файли, зображення, відео, з попереднім переглядом у програмі.", - "canvas_title": "Полотно" + "canvas_title": "Полотно", + "title": "Кілька способів представлення вашої інформації", + "canvas_description": "Розташовуйте фігури, зображення та текст на нескінченному полотні, використовуючи ту саму технологію, що й excalidraw.com. Ідеально підходить для діаграм, ескізів та візуального планування.", + "mermaid_description": "Створюйте діаграми, такі як блок-схеми, діаграми класів та послідовностей, діаграми Ганта та багато іншого, використовуючи синтаксис Mermaid.", + "others_list": "та інші: <0>карта нотаток</0>, <1>карта зв'язків</1>, <2>збережені пошуки</2>, <3>візуалізація нотаток</3> та <4>веб-перегляди</4>." + }, + "extensibility_benefits": { + "title": "Спільне використання та розширюваність", + "import_export_title": "Імпорт/експорт", + "import_export_description": "Легко взаємодійте з іншими програмами, використовуючи формати Markdown, ENEX, OML.", + "share_title": "Діліться нотатками в Інтернеті" } } From 836b5feaae43c6c78bf76fb4a87cf430350be7da Mon Sep 17 00:00:00 2001 From: Vitalii Hlas <1998vitaliu@gmail.com> Date: Sun, 25 Jan 2026 17:52:40 +0100 Subject: [PATCH 253/353] Translated using Weblate (Ukrainian) Currently translated at 91.3% (1611 of 1763 strings) Translation: Trilium Notes/Client Translate-URL: https://hosted.weblate.org/projects/trilium/client/uk/ --- .../src/translations/uk/translation.json | 79 ++++++++++++++++--- 1 file changed, 67 insertions(+), 12 deletions(-) diff --git a/apps/client/src/translations/uk/translation.json b/apps/client/src/translations/uk/translation.json index 8fa5dfd62a..36985a1943 100644 --- a/apps/client/src/translations/uk/translation.json +++ b/apps/client/src/translations/uk/translation.json @@ -14,7 +14,10 @@ "edit_branch_prefix": "Редагувати префікс гілки", "help_on_tree_prefix": "Довідка щодо префіксу дерева", "prefix": "Префікс: ", - "branch_prefix_saved": "Префікс гілки збережено." + "branch_prefix_saved": "Префікс гілки збережено.", + "edit_branch_prefix_multiple": "Редагувати префікс гілки для {{count}} гілок", + "branch_prefix_saved_multiple": "Префікс гілки збережено для {{count}} гілок.", + "affected_branches": "Уражені гілки ({{count}}):" }, "about": { "app_version": "Версія програми:", @@ -70,8 +73,17 @@ }, "bundle-error": { "title": "Не вдалося завантажити користувацький скрипт", - "message": "Скрипт з нотатки ID \"{{id}}\" з заголовком \"{{title}}\" не вдалося виконати через:\n\n{{message}}" - } + "message": "Скрипт не вдалося виконати через:\n\n{{message}}" + }, + "widget-list-error": { + "title": "Не вдалося отримати список віджетів з сервера" + }, + "widget-render-error": { + "title": "Не вдалося відобразити користувацький віджет" + }, + "widget-missing-parent": "Для власного віджета не визначено {{property}} обов'язкову властивість\n\nЯкщо цей скрипт призначений для запуску без елемента інтерфейсу користувача, використовуйте замість нього '#run=frontendStartup'.", + "open-script-note": "Відкрити нотатку сценарію", + "scripting-error": "Помилка користувацького скрипта: {{title}}" }, "bulk_actions": { "bulk_actions": "Масові дії", @@ -849,7 +861,10 @@ "note_icon": { "change_note_icon": "Змінити значок нотатки", "search": "Пошук:", - "reset-default": "Скинути значок до стандартного значення" + "reset-default": "Скинути значок до стандартного значення", + "search_placeholder_one": "Пошук {{number}} значка у {{count}} пакеті", + "search_placeholder_few": "Пошук {{number}} значків у {{count}} пакетах", + "search_placeholder_many": "Пошук {{number}} значків у {{count}} пакетах" }, "basic_properties": { "note_type": "Тип нотатки", @@ -884,7 +899,7 @@ "file_type": "Тип файлу", "file_size": "Розмір файлу", "download": "Завантажити", - "open": "Відкрити", + "open": "Відкрити зовні", "upload_new_revision": "Завантажити нову версію", "upload_success": "Завантажено нову версію файлу.", "upload_failed": "Не вдалося завантажити нову версію файлу.", @@ -1589,13 +1604,19 @@ "refresh-saved-search-results": "Оновити збережені результати пошуку", "create-child-note": "Створити дочірню нотатку", "unhoist": "Відкріпити", - "toggle-sidebar": "Перемикання бічної панелі" + "toggle-sidebar": "Перемикання бічної панелі", + "subtree-hidden-tooltip_one": "{{count}} дочірня нотатка, прихована від дерев", + "subtree-hidden-tooltip_few": "{{count}} дочірніх нотатки, прихованих від дерев", + "subtree-hidden-tooltip_many": "{{count}} дочірніх нотаток, прихованих від дерев" }, "title_bar_buttons": { "window-on-top": "Тримати вікно зверху" }, "note_detail": { - "could_not_find_typewidget": "Не вдалося знайти typeWidget для типу '{{type}}'" + "could_not_find_typewidget": "Не вдалося знайти typeWidget для типу '{{type}}'", + "print_report_collection_content_one": "{{count}} нотатку з колекції не вдалося роздрукувати, тому що вони не підтримуються або захищені.", + "print_report_collection_content_few": "{{count}} нотатки з колекції не вдалося роздрукувати, тому що вони не підтримуються або захищені.", + "print_report_collection_content_many": "{{count}} нотаток з колекції не вдалося роздрукувати, тому що вони не підтримуються або захищені." }, "note_title": { "placeholder": "введіть тут заголовок нотатки..." @@ -1743,7 +1764,7 @@ "unknown_widget": "Невідомий віджет для \"{{id}}\"." }, "note_language": { - "not_set": "Не встановлено", + "not_set": "Мову не встановлено", "configure-languages": "Налаштувати мови..." }, "content_language": { @@ -1810,7 +1831,7 @@ "book_properties_config": { "hide-weekends": "Приховати вихідні", "display-week-numbers": "Відображення номерів тижнів", - "map-style": "Стиль карти:", + "map-style": "Стиль карти", "max-nesting-depth": "Максимальна глибина вкладення:", "raster": "Растр", "vector_light": "Вектор (Світла)", @@ -1863,7 +1884,7 @@ "will_be_deleted_in": "Це вкладення буде автоматично видалено через {{time}}", "will_be_deleted_soon": "Це вкладення незабаром буде автоматично видалено", "deletion_reason": ", оскільки вкладення не має посилання у вмісті нотатки. Щоб запобігти видаленню, додайте посилання на вкладення назад у вміст або перетворіть вкладення на нотатку.", - "role_and_size": "Роль: {{role}}, Розмір: {{size}}", + "role_and_size": "Роль: {{role}}, розмір: {{size}}, формат даних: {{- mimeType}}", "link_copied": "Посилання на вкладення скопійовано в буфер обміну.", "unrecognized_role": "Нерозпізнана роль вкладення '{{role}}'." }, @@ -1914,7 +1935,7 @@ "import-into-note": "Імпортувати в нотатку", "apply-bulk-actions": "Застосувати масові дії", "converted-to-attachments": "({{count}}) нотаток перетворено на вкладення.", - "convert-to-attachment-confirm": "Ви впевнені, що хочете конвертувати вибрані нотатки у вкладення до їхніх батьківських нотаток?", + "convert-to-attachment-confirm": "Ви впевнені, що хочете конвертувати вибрані нотатки у вкладення до їхніх батьківських нотаток? Ця операція застосовується лише до нотаток із зображеннями, інші нотатки будуть пропущені.", "open-in-popup": "Швидке редагування", "archive": "Архівувати", "unarchive": "Розархівувати" @@ -1978,7 +1999,10 @@ }, "highlights_list_2": { "title": "Список основних моментів", - "options": "Параметри" + "options": "Параметри", + "title_with_count_one": "{{count}} виділення", + "title_with_count_few": "{{count}} виділення", + "title_with_count_many": "{{count}} виділень" }, "table_context_menu": { "delete_row": "Видалити рядок" @@ -2051,5 +2075,36 @@ }, "collections": { "rendering_error": "Не вдалося показати вміст через помилку." + }, + "status_bar": { + "backlinks_one": "{{count}} зворотне посилання", + "backlinks_few": "{{count}} зворотні посилання", + "backlinks_many": "{{count}} зворотних посилань", + "backlinks_title_one": "Переглянути зворотне посилання", + "backlinks_title_few": "Переглянути зворотні посилання", + "backlinks_title_many": "Переглянути зворотніх посилань", + "attachments_one": "{{count}} вкладення", + "attachments_few": "{{count}} вкладення", + "attachments_many": "{{count}} вкладень", + "attachments_title_one": "Переглянути вкладення в новій вкладці", + "attachments_title_few": "Переглянути вкладення в новій вкладці", + "attachments_title_many": "Переглянути вкладень в новій вкладці", + "attributes_one": "{{count}} атрибут", + "attributes_few": "{{count}} атрибути", + "attributes_many": "{{count}} атрибутів", + "note_paths_one": "{{count}} шлях", + "note_paths_few": "{{count}} шляхи", + "note_paths_many": "{{count}} шляхів" + }, + "pdf": { + "attachments_one": "{{count}} вкладення", + "attachments_few": "{{count}} вкладення", + "attachments_many": "{{count}} вкладень", + "layers_one": "{{count}} шар", + "layers_few": "{{count}} шари", + "layers_many": "{{count}} шарів", + "pages_one": "{{count}} сторінка", + "pages_few": "{{count}} сторінки", + "pages_many": "{{count}} сторінок" } } From 595d30feb76eb51c882c63cd09f170efbf0c4b24 Mon Sep 17 00:00:00 2001 From: Vitalii Hlas <1998vitaliu@gmail.com> Date: Sun, 25 Jan 2026 17:32:24 +0100 Subject: [PATCH 254/353] Translated using Weblate (Ukrainian) Currently translated at 97.9% (380 of 388 strings) Translation: Trilium Notes/Server Translate-URL: https://hosted.weblate.org/projects/trilium/server/uk/ --- apps/server/src/assets/translations/uk/server.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/apps/server/src/assets/translations/uk/server.json b/apps/server/src/assets/translations/uk/server.json index 3c34c72a4b..63dd0510f6 100644 --- a/apps/server/src/assets/translations/uk/server.json +++ b/apps/server/src/assets/translations/uk/server.json @@ -233,7 +233,7 @@ "setup_sync-from-desktop": { "heading": "Синхронізація з ПК", "description": "Це налаштування потрібно ініціювати з екземпляра ПК:", - "step1": "Відкрийте екземпляр Trilium Notes на ПК.", + "step1": "Відкрийте свій екземпляр Trilium Notes на ПК.", "step2": "У меню Trilium натисніть Параметри.", "step3": "Натисніть на Категорія Синхронізації.", "step4": "Змініть адресу екземпляра сервера на: {{- host}} та натисніть кнопку Зберегти.", @@ -249,7 +249,7 @@ "proxy-server": "Проксі-сервер (необов'язково)", "proxy-server-placeholder": "https://<hostname>:<port>", "note": "Нотатка:", - "proxy-instruction": "Якщо залишити налаштування проксі-сервера порожнім, використовуватиметься системний проксі-сервер (стосується лише ПК програми)", + "proxy-instruction": "Якщо залишити налаштування проксі-сервера порожнім, використовуватиметься системний проксі-сервер (стосується лише програми на ПК)", "password": "Пароль", "password-placeholder": "Пароль", "back": "Назад", @@ -415,7 +415,7 @@ "end-time": "Час завершення", "geolocation": "Геолокація", "built-in-templates": "Вбудовані шаблони", - "board": "Дошка", + "board": "Kanban Дошка", "status": "Статус", "board_note_first": "Перша нотатка", "board_note_second": "Друга нотатка", From 9eb24c6fc2360603bdcf29f637be786fd71f1e08 Mon Sep 17 00:00:00 2001 From: Elian Doran <online@eliandoran.me> Date: Sun, 25 Jan 2026 17:40:11 +0100 Subject: [PATCH 255/353] Translated using Weblate (Romanian) Currently translated at 99.9% (1762 of 1763 strings) Translation: Trilium Notes/Client Translate-URL: https://hosted.weblate.org/projects/trilium/client/ro/ --- .../src/translations/ro/translation.json | 160 ++++++++++++++++-- 1 file changed, 142 insertions(+), 18 deletions(-) diff --git a/apps/client/src/translations/ro/translation.json b/apps/client/src/translations/ro/translation.json index 67fb2a4f9c..4823db67d3 100644 --- a/apps/client/src/translations/ro/translation.json +++ b/apps/client/src/translations/ro/translation.json @@ -68,7 +68,7 @@ "attachment_detail_2": { "deletion_reason": ", deoarece nu există o legătură către atașament în conținutul notiței. Pentru a preveni ștergerea, trebuie adăugată înapoi o legătură către atașament în conținut sau atașamentul trebuie convertit în notiță.", "link_copied": "O legătură către atașament a fost copiată în clipboard.", - "role_and_size": "Rol: {{role}}, dimensiune: {{size}}", + "role_and_size": "Rol: {{role}}, dimensiune: {{size}}, MIME: {{- mimeType}}", "unrecognized_role": "Rol atașament necunoscut: „{{role}}”.", "will_be_deleted_in": "Acest atașament va fi șters automat în {{time}}", "will_be_deleted_soon": "Acest atașament va fi șters automat în curând" @@ -293,7 +293,8 @@ "expand_tooltip": "Expandează subnotițele directe ale acestei colecții (un singur nivel de adâncime). Pentru mai multe opțiuni, apăsați săgeata din dreapta.", "expand_first_level": "Expandează subnotițele directe", "expand_nth_level": "Expandează pe {{depth}} nivele", - "expand_all_levels": "Expandează pe toate nivelele" + "expand_all_levels": "Expandează pe toate nivelele", + "hide_child_notes": "Ascunde subnotițele din arbore" }, "bookmark_switch": { "bookmark": "Semn de carte", @@ -569,7 +570,7 @@ "file_size": "Dimensiunea fișierului", "file_type": "Tipul fișierului", "note_id": "ID-ul notiței", - "open": "Deschide", + "open": "Deschide în exterior", "original_file_name": "Denumirea originală a fișierului", "title": "Fișier", "upload_failed": "Încărcarea a unei noi revizii ale fișierului a eșuat.", @@ -795,7 +796,8 @@ }, "inherited_attribute_list": { "no_inherited_attributes": "Niciun atribut moștenit.", - "title": "Atribute moștenite" + "title": "Atribute moștenite", + "none": "niciunul" }, "jump_to_note": { "search_button": "Caută în întregul conținut", @@ -903,7 +905,9 @@ "note_size_info": "Dimensiunea notiței reprezintă o aproximare a cerințelor de stocare ale acestei notițe. Ia în considerare conținutul notiței dar și ale reviziilor sale.", "subtree_size": "(dimensiunea sub-arborelui: {{size}} în {{count}} notițe)", "title": "Informații despre notiță", - "type": "Tip" + "type": "Tip", + "mime": "Tip MIME", + "show_similar_notes": "Afișează notițe similare" }, "note_launcher": { "this_launcher_doesnt_define_target_note": "Acesată scurtătură nu definește o notiță-destinație." @@ -1161,7 +1165,8 @@ "search_parameters": "Parametrii de căutare", "search_script": "script de căutare", "search_string": "șir de căutat", - "unknown_search_option": "Opțiune de căutare necunoscută „{{searchOptionName}}”" + "unknown_search_option": "Opțiune de căutare necunoscută „{{searchOptionName}}”", + "view_options": "Opțiuni de afișare:" }, "search_engine": { "baidu": "Baidu", @@ -1430,7 +1435,10 @@ "convert-to-attachment-confirm": "Doriți convertirea notițelor selectate în atașamente ale notiței părinte? Această operațiune se aplică doar notițelor de tip imagine, celelalte vor fi ignorate.", "open-in-popup": "Editare rapidă", "archive": "Arhivează", - "unarchive": "Dezarhivează" + "unarchive": "Dezarhivează", + "open-in-a-new-window": "Deschide în fereastră nouă", + "hide-subtree": "Ascunde subnotițele", + "show-subtree": "Afișează subnotițele" }, "shared_info": { "help_link": "Pentru informații vizitați <a href=\"https://triliumnext.github.io/Docs/Wiki/sharing.html\">wiki-ul</a>.", @@ -1491,7 +1499,13 @@ }, "highlights_list_2": { "options": "Setări", - "title": "Listă de evidențieri" + "title": "Listă de evidențieri", + "title_with_count_one": "{{count}} evidențiere", + "title_with_count_few": "{{count}} evidențieri", + "title_with_count_other": "{{count}} de evidențieri", + "modal_title": "Configurează lista de evidențieri", + "menu_configure": "Configurează lista de evidențieri...", + "no_highlights": "Nu există nicio evidențiere." }, "note_icon": { "change_note_icon": "Schimbă iconița notiței", @@ -1499,7 +1513,13 @@ "search": "Căutare:", "search_placeholder_one": "Caută printre {{number}} iconițe dintr-un pachet", "search_placeholder_few": "Caută printre {{number}} iconițe din {{count}} pachete", - "search_placeholder_other": "Caută printre {{number}} iconițe din {{count}} de pachete" + "search_placeholder_other": "Caută printre {{number}} iconițe din {{count}} de pachete", + "search_placeholder_filtered": "Căutați printre {{number}} iconițe în {{name}}", + "filter": "Filtrează", + "filter-none": "Toate iconițele", + "filter-default": "Iconițele implicite", + "icon_tooltip": "{{name}}\nPachet iconițe: {{iconPack}}", + "no_results": "Nu s-a găsit nicio iconiță." }, "show_highlights_list_widget_button": { "show_highlights_list": "Afișează lista de evidențieri" @@ -1537,7 +1557,17 @@ "refresh-saved-search-results": "Reîmprospătează căutarea salvată", "unhoist": "Defocalizează notița", "toggle-sidebar": "Comută bara laterală", - "dropping-not-allowed": "Aici nu este permisă plasarea notițelor." + "dropping-not-allowed": "Aici nu este permisă plasarea notițelor.", + "clone-indicator-tooltip": "Această notiță are {{- count}} părinți: {{- parents}}", + "clone-indicator-tooltip-single": "Această notiță este clonată (un singur părinte: {{- parent}})", + "shared-indicator-tooltip": "Această notiță este partajată public", + "shared-indicator-tooltip-with-url": "Această notiță este partajată public la: {{- url}}", + "subtree-hidden-tooltip_one": "{{count}} subnotiță ascunsă din arbore", + "subtree-hidden-tooltip_few": "{{count}} subnotițe ascunse din arbore", + "subtree-hidden-tooltip_other": "{{count}} de subnotițe ascunse din arbore", + "subtree-hidden-moved-title": "Adăugat în {{title}}", + "subtree-hidden-moved-description-collection": "Subnotițele din această colecție sunt ascunse din arbore.", + "subtree-hidden-moved-description-other": "Subnotițele din această notiță sunt ascunse." }, "title_bar_buttons": { "window-on-top": "Menține fereastra mereu vizibilă" @@ -1545,12 +1575,24 @@ "note_detail": { "could_not_find_typewidget": "Nu s-a putut găsi widget-ul corespunzător tipului „{{type}}”", "printing": "Imprimare în curs...", - "printing_pdf": "Exportare ca PDF în curs..." + "printing_pdf": "Exportare ca PDF în curs...", + "print_report_title": "Raport de imprimare", + "print_report_collection_content_one": "{{count}} notiță din colecție nu a putut fi imprimată deoarece nu este suportată sau este protejată.", + "print_report_collection_content_few": "{{count}} notițe din colecție nu au putut fi imprimate deoarece nu sunt suportate sau sunt protejate.", + "print_report_collection_content_other": "{{count}} de notițe din colecție nu au putut fi imprimate deoarece nu sunt suportate sau sunt protejate.", + "print_report_collection_details_button": "Afișează detalii", + "print_report_collection_details_ignored_notes": "Notițe ignorate" }, "note_title": { "placeholder": "introduceți titlul notiței aici...", "created_on": "Creată la <Value />", - "last_modified": "Modificată la <Value />" + "last_modified": "Modificată la <Value />", + "note_type_switcher_label": "Schimbă din {{type}} la:", + "note_type_switcher_others": "Mai multe tipuri de notițe", + "note_type_switcher_templates": "Șablon", + "note_type_switcher_collection": "Colecție", + "edited_notes": "Notițe editate în această zi", + "promoted_attributes": "Atribute promovate" }, "revisions_snapshot_limit": { "erase_excess_revision_snapshots": "Șterge acum reviziile excesive", @@ -1571,7 +1613,11 @@ "configure_launchbar": "Configurează bara de lansare" }, "sql_result": { - "no_rows": "Nu s-a găsit niciun rând pentru această interogare" + "no_rows": "Nu s-a găsit niciun rând pentru această interogare", + "not_executed": "Această interogare nu a fost executată încă.", + "failed": "Interogarea SQL a eșuat", + "statement_result": "Rezultatul comenzii SQL", + "execute_now": "Execută acum" }, "sql_table_schemas": { "tables": "Tabele" @@ -1593,7 +1639,8 @@ }, "toc": { "options": "Setări", - "table_of_contents": "Cuprins" + "table_of_contents": "Cuprins", + "no_headings": "Niciun titlu." }, "watched_file_update_status": { "file_last_modified": "Fișierul <code class=\"file-path\"></code> a fost ultima oară modificat la data de <span class=\"file-last-modified\"></span>.", @@ -2028,7 +2075,7 @@ "book_properties_config": { "hide-weekends": "Ascunde weekend-urile", "display-week-numbers": "Afișează numărul săptămânii", - "map-style": "Stil hartă:", + "map-style": "Stil hartă", "max-nesting-depth": "Nivel maxim de imbricare:", "raster": "Raster", "vector_light": "Vectorial (culoare deschisă)", @@ -2085,7 +2132,10 @@ "next_theme_title": "Încercați noua temă Trilium", "next_theme_message": "Utilizați tema clasică, doriți să încercați noua temă?", "next_theme_button": "Testează noua temă", - "dismiss": "Treci peste" + "dismiss": "Treci peste", + "new_layout_title": "Aspect nou", + "new_layout_message": "Am introdus un aspect modernizat pentru Trilium. Panglică a fost integrată în restul interfeței, cu o bară de stare nouă și secțiuni expandabile (precum atributele promovate) ce preiau funcționalitatea de bază.\n\nNoul aspect este activat în mod implicit, și se poate dezactiva momentan din Opțiuni → Aspect.", + "new_layout_button": "Mai multe informații" }, "ui-performance": { "title": "Setări de performanță", @@ -2100,7 +2150,10 @@ }, "settings_appearance": { "related_code_blocks": "Tema de culori pentru blocuri de cod în notițe de tip text", - "related_code_notes": "Tema de culori pentru notițele de tip cod" + "related_code_notes": "Tema de culori pentru notițele de tip cod", + "ui": "Interfață grafică", + "ui_old_layout": "Aspect vechi", + "ui_new_layout": "Aspect nou" }, "units": { "percentage": "%" @@ -2156,6 +2209,77 @@ "read_only_temporarily_disabled": "Editabilă temporar", "read_only_temporarily_disabled_description": "Această notiță se poate modifica, deși în mod normal ea este doar în citire. Notița va reveni la modul doar în citire imediat ce navigați către altă notiță.\n\nClick pentru a re-activa modul doar în citire.", "shared_publicly": "Partajată public", - "shared_locally": "Partajată local" + "shared_locally": "Partajată local", + "shared_copy_to_clipboard": "Copiază legătură în clipboard", + "shared_open_in_browser": "Deschide legătura în browser", + "shared_unshare": "Înlătură partajarea", + "clipped_note": "Decupare web", + "clipped_note_description": "Această notiță a fost preluată de la {{url}}.\n\nClic pentru a naviga la pagina web sursă.", + "execute_script": "Rulează script", + "execute_script_description": "Această notiță este un script. Clic pentru a executa scriptul.", + "execute_sql": "Rulează SQL", + "execute_sql_description": "Această notiță este de tip SQL. Clic pentru a executa interogarea SQL.", + "save_status_saved": "Salvat", + "save_status_saving": "Se salvează...", + "save_status_unsaved": "Nesalvat", + "save_status_error": "Salvarea a eșuat", + "save_status_saving_tooltip": "Modificările sunt în curs de salvare.", + "save_status_unsaved_tooltip": "Există schimbări ce nu au fost încă salvate. Acestea vor fi salvate automat într-un moment.", + "save_status_error_tooltip": "A intervenit o eroare la salvarea notiței. Dacă este posibil, încercați să copiați conținutul notiței într-un alt loc și să reîmprospătați aplicația." + }, + "breadcrumb": { + "hoisted_badge": "Focalizat", + "hoisted_badge_title": "Defocalizează", + "workspace_badge": "Spațiu de lucru", + "scroll_to_top_title": "Sari la începutul notiței", + "create_new_note": "Crează subnotiță", + "empty_hide_archived_notes": "Ascunde notițele arhivate" + }, + "status_bar": { + "language_title": "Schimbă limba conținutului", + "note_info_title": "Afișează informații despre notiță precum data modificării și dimensiunea", + "backlinks_one": "{{count}} legătură de retur", + "backlinks_few": "{{count}} legături de retur", + "backlinks_other": "{{count}} de legături de retur", + "backlinks_title_one": "Afișează legătura de retur", + "backlinks_title_few": "Afișează legăturile de retur", + "backlinks_title_other": "Afișează legăturile de retur", + "attachments_one": "{{count}} atașament", + "attachments_few": "{{count}} atașamente", + "attachments_other": "{{count}} de atașamente", + "attachments_title_one": "Deschide atașamentul într-un tab nou", + "attachments_title_few": "Deschide atașamentele într-un tab nou", + "attachments_title_other": "Deschide atașamentele într-un tab nou", + "attributes_one": "{{count}} atribut", + "attributes_few": "{{count}} atribute", + "attributes_other": "{{count}} de atribute", + "attributes_title": "Atribute proprii și moștenite", + "note_paths_one": "O cale", + "note_paths_few": "{{count}} căi", + "note_paths_other": "{{count}} de căi", + "note_paths_title": "Căi ale notiței", + "code_note_switcher": "Schimbă limbajul" + }, + "attributes_panel": { + "title": "Atributele notiței" + }, + "right_pane": { + "empty_message": "Nimic de afișat pentru această notiță", + "empty_button": "Ascunde panoul", + "toggle": "Comută panoul din dreapta", + "custom_widget_go_to_source": "Mergi la codul sursă" + }, + "pdf": { + "attachments_one": "{{count}} atașament", + "attachments_few": "{{count}} atașamente", + "attachments_other": "{{count}} de atașamente", + "layers_one": "{{count}} strat", + "layers_few": "{{count}} straturi", + "layers_other": "{{count}} de straturi", + "pages_one": "{{count}} pagină", + "pages_few": "{{count}} pagini", + "pages_other": "{{count}} de pagini", + "pages_alt": "Pagina {{pageNumber}}", + "pages_loading": "Încărcare..." } } From 7439b9ca65cf41e6eaf8a718d0e50f6dd1aac626 Mon Sep 17 00:00:00 2001 From: Vitalii Hlas <1998vitaliu@gmail.com> Date: Sun, 25 Jan 2026 19:23:12 +0100 Subject: [PATCH 256/353] Translated using Weblate (Ukrainian) Currently translated at 50.0% (58 of 116 strings) Translation: Trilium Notes/README Translate-URL: https://hosted.weblate.org/projects/trilium/readme/uk/ --- docs/README-uk.md | 41 +++++++++++++++++++++-------------------- 1 file changed, 21 insertions(+), 20 deletions(-) diff --git a/docs/README-uk.md b/docs/README-uk.md index 73b35ff30b..834b2e94fc 100644 --- a/docs/README-uk.md +++ b/docs/README-uk.md @@ -164,41 +164,42 @@ prevents direct migration. ## 💬 Discuss with us -Feel free to join our official conversations. We would love to hear what -features, suggestions, or issues you may have! +Не соромтеся приєднуватися до наших офіційних обговорень. Ми будемо раді почути +про ваші функції, пропозиції чи проблеми! -- [Matrix](https://matrix.to/#/#triliumnext:matrix.org) (For synchronous - discussions.) - - The `General` Matrix room is also bridged to +- [Матриця](https://matrix.to/#/#triliumnext:matrix.org) (Для синхронних + обговорень.) + - Кімната матриці `Загальні` також підключена до [XMPP](xmpp:discuss@trilium.thisgreat.party?join) -- [Github Discussions](https://github.com/TriliumNext/Trilium/discussions) (For - asynchronous discussions.) -- [Github Issues](https://github.com/TriliumNext/Trilium/issues) (For bug - reports and feature requests.) +- [Обговорення на Github](https://github.com/TriliumNext/Trilium/discussions) + (Для асинхронних обговорень.) +- [Проблеми Github](https://github.com/TriliumNext/Trilium/issues) (Для звітів + про помилки та запитів на нові функції.) -## 🏗 Installation +## 🏗 Встановлення ### Windows / MacOS -Download the binary release for your platform from the [latest release -page](https://github.com/TriliumNext/Trilium/releases/latest), unzip the package -and run the `trilium` executable. +Завантажте бінарний реліз для вашої платформи зі сторінки [останнього +релізу](https://github.com/TriliumNext/Trilium/releases/latest), розпакуйте +пакет і запустіть виконуваний файл `trilium`. ### Linux -If your distribution is listed in the table below, use your distribution's -package. +Якщо ваш дистрибутив зазначено в таблиці нижче, використовуйте пакет вашого +дистрибутива. [![Packaging status](https://repology.org/badge/vertical-allrepos/triliumnext.svg)](https://repology.org/project/triliumnext/versions) -You may also download the binary release for your platform from the [latest -release page](https://github.com/TriliumNext/Trilium/releases/latest), unzip the -package and run the `trilium` executable. +Ви також можете завантажити бінарний реліз для вашої платформи зі сторінки +[останнього релізу](https://github.com/TriliumNext/Trilium/releases/latest), +розпакувати пакет і запустити виконуваний файл `trilium`. -TriliumNext is also provided as a Flatpak, but not yet published on FlatHub. +TriliumNext також доступний у форматі Flatpak, але ще не опублікований на +FlatHub. -### Browser (any OS) +### Браузер (будь-яка ОС) If you use a server installation (see below), you can directly access the web interface (which is almost identical to the desktop app). From 96acd7f9213b72d9815a9ec9683ace5d9db3144c Mon Sep 17 00:00:00 2001 From: Vitalii Hlas <1998vitaliu@gmail.com> Date: Sun, 25 Jan 2026 19:24:30 +0100 Subject: [PATCH 257/353] Translated using Weblate (Ukrainian) Currently translated at 38.8% (59 of 152 strings) Translation: Trilium Notes/Website Translate-URL: https://hosted.weblate.org/projects/trilium/website/uk/ --- .../src/translations/uk/translation.json | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/apps/website/src/translations/uk/translation.json b/apps/website/src/translations/uk/translation.json index 7f4f913cea..d5f99d866f 100644 --- a/apps/website/src/translations/uk/translation.json +++ b/apps/website/src/translations/uk/translation.json @@ -56,5 +56,23 @@ "import_export_title": "Імпорт/експорт", "import_export_description": "Легко взаємодійте з іншими програмами, використовуючи формати Markdown, ENEX, OML.", "share_title": "Діліться нотатками в Інтернеті" + }, + "collections": { + "title": "Колекції", + "calendar_title": "Календар", + "calendar_description": "Організовуйте свої особисті або професійні події за допомогою календаря з підтримкою цілоденних та багатоденних подій. Переглядайте свої події з першого погляду завдяки тижневому, місячному та річному переглядам. Легке додавання або перетягування подій.", + "table_title": "Таблиця", + "table_description": "Відображайте та редагуйте інформацію про нотатки в табличній структурі з різними типами стовпців, такими як текст, число, прапорці, дата й час, посилання та кольори, а також підтримка зв'язків. За потреби відображайте нотатки в деревоподібній ієрархії всередині таблиці.", + "board_title": "Дошка Kanban", + "board_description": "Організуйте свої завдання або статуси проектів на дошці Kanbanза допомогою простого способу створення нових елементів і стовпців, а також простої зміни їх статусу шляхом перетягування по дошці.", + "geomap_title": "Геокарта", + "geomap_description": "Плануйте свою відпустку або позначайте цікаві місця безпосередньо на географічній карті за допомогою налаштовуваних маркерів. Відображайте записані GPX-треки для відстеження маршрутів.", + "presentation_title": "Презентація", + "presentation_description": "Упорядкуйте інформацію у слайди та презентуйте їх у повноекранному режимі з плавними переходами. Слайди також можна експортувати у PDF для зручного обміну." + }, + "faq": { + "title": "Часті запитання", + "mobile_question": "Чи є мобільний додаток?", + "mobile_answer": "Наразі офіційного мобільного застосунку немає. Однак, якщо у вас є серверний екземпляр, ви можете отримати до нього доступ за допомогою веббраузера та навіть встановити його як PWA. Для Android існує неофіційний застосунок під назвою TriliumDroid, який працює навіть офлайн (так само, як і клієнт для настільних комп’ютерів)." } } From 34d3c318d6085b24f2e4353c21e00cb20c1182e5 Mon Sep 17 00:00:00 2001 From: Hosted Weblate <hosted@weblate.org> Date: Sun, 25 Jan 2026 19:27:22 +0100 Subject: [PATCH 258/353] Update translation files Updated by "Cleanup translation files" add-on in Weblate. Translation: Trilium Notes/README Translate-URL: https://hosted.weblate.org/projects/trilium/readme/ --- docs/README-uk.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/docs/README-uk.md b/docs/README-uk.md index 834b2e94fc..7f1c5d6e56 100644 --- a/docs/README-uk.md +++ b/docs/README-uk.md @@ -201,8 +201,9 @@ FlatHub. ### Браузер (будь-яка ОС) -If you use a server installation (see below), you can directly access the web -interface (which is almost identical to the desktop app). +Якщо ви використовуєте серверну інсталяцію (див. нижче), ви можете отримати +безпосередній доступ до веб-інтерфейсу (який майже ідентичний десктопному +додатку). Currently only the latest versions of Chrome & Firefox are supported (and tested). From b26d9c0303c3cff1c2bd729186a499c80cd1bb74 Mon Sep 17 00:00:00 2001 From: Hosted Weblate <hosted@weblate.org> Date: Sun, 25 Jan 2026 19:33:42 +0100 Subject: [PATCH 259/353] Update translation files Updated by "Cleanup translation files" add-on in Weblate. Translation: Trilium Notes/README Translate-URL: https://hosted.weblate.org/projects/trilium/readme/ --- docs/README-uk.md | 34 ++++++++++++++++++---------------- 1 file changed, 18 insertions(+), 16 deletions(-) diff --git a/docs/README-uk.md b/docs/README-uk.md index 7f1c5d6e56..7784c3c031 100644 --- a/docs/README-uk.md +++ b/docs/README-uk.md @@ -205,29 +205,31 @@ FlatHub. безпосередній доступ до веб-інтерфейсу (який майже ідентичний десктопному додатку). -Currently only the latest versions of Chrome & Firefox are supported (and -tested). +Наразі підтримуються (і протестовані) лише найновіші версії Chrome та Firefox. -### Mobile +### Мобільний -To use TriliumNext on a mobile device, you can use a mobile web browser to -access the mobile interface of a server installation (see below). +Щоб використовувати TriliumNext на мобільному пристрої, ви можете скористатися +мобільним веб-браузером для доступу до мобільного інтерфейсу серверної +інсталяції (див. нижче). -See issue https://github.com/TriliumNext/Trilium/issues/4962 for more -information on mobile app support. +Див. випуск https://github.com/TriliumNext/Trilium/issues/4962 для отримання +додаткової інформації про підтримку мобільних додатків. -If you prefer a native Android app, you can use +Якщо ви надаєте перевагу рідному додатку для Android, ви можете скористатися [TriliumDroid](https://apt.izzysoft.de/fdroid/index/apk/eu.fliegendewurst.triliumdroid). -Report bugs and missing features at [their -repository](https://github.com/FliegendeWurst/TriliumDroid). Note: It is best to -disable automatic updates on your server installation (see below) when using -TriliumDroid since the sync version must match between Trilium and TriliumDroid. +Повідомляйте про помилки та відсутні функції на [їхньому +репозиторії](https://github.com/FliegendeWurst/TriliumDroid). Примітка: Найкраще +вимкнути автоматичні оновлення на вашому сервері (див. нижче) під час +використання TriliumDroid, оскільки версія синхронізації має збігатися між +Trilium та TriliumDroid. -### Server +### Сервер -To install TriliumNext on your own server (including via Docker from -[Dockerhub](https://hub.docker.com/r/triliumnext/trilium)) follow [the server -installation docs](https://docs.triliumnotes.org/user-guide/setup/server). +Щоб встановити TriliumNext на власний сервер (зокрема через Docker з +[Dockerhub](https://hub.docker.com/r/triliumnext/trilium)), дотримуйтесь +інструкцій [документації щодо встановлення +сервера](https://docs.triliumnotes.org/user-guide/setup/server). ## 💻 Contribute From 4b70bb677828b810c9978499fcde6c9e2bd91907 Mon Sep 17 00:00:00 2001 From: Elian Doran <contact@eliandoran.me> Date: Sun, 25 Jan 2026 20:45:06 +0200 Subject: [PATCH 260/353] chore(web-clipper): bump version to v1.1.0 --- apps/web-clipper/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/web-clipper/package.json b/apps/web-clipper/package.json index e975e1ac42..2853dcb900 100644 --- a/apps/web-clipper/package.json +++ b/apps/web-clipper/package.json @@ -1,6 +1,6 @@ { "name": "@triliumnext/web-clipper", - "version": "1.0.1", + "version": "1.1.0", "description": "", "main": "index.js", "scripts": { From 18d1b8cbfe0f9fae4d6997d1bf55f3a71f7d526f Mon Sep 17 00:00:00 2001 From: Elian Doran <contact@eliandoran.me> Date: Sun, 25 Jan 2026 21:19:43 +0200 Subject: [PATCH 261/353] chore(web-clipper): add README for Firefox submission --- apps/web-clipper/README.md | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 apps/web-clipper/README.md diff --git a/apps/web-clipper/README.md b/apps/web-clipper/README.md new file mode 100644 index 0000000000..e1258a8cd8 --- /dev/null +++ b/apps/web-clipper/README.md @@ -0,0 +1,31 @@ +# Trilium Web Clipper + +## Context + +The Web Clipper is an extension for the Trilium Notes application, an open-source note-taking application that can be used either in standalone mode via the desktop application or connected to a server. + +The source is extracted from the official monorepo, where it can be found under `apps/web-clipper`. The only change made to the provided source code is to have `tsconfig.base.json` in the same directory as the Web Clipper. The submitted source code is a snapshot of the following commit: [https://github.com/TriliumNext/Trilium/commit/1cf93ff0dec89ee1a80654934cb30fad74920043](https://github.com/TriliumNext/Trilium/commit/1cf93ff0dec89ee1a80654934cb30fad74920043)  + +There are some warnings regarding the use of `innerHTML` but they come from a third-party library (Readability). We plan to update to a newer version of that library soon, but we would like to publish the extension first (if possible). + +## Building from source + +To build from the provided sources: + +1. `pnpm i` to install the dependencies. +2. `pnpm build:firefox` to trigger the Firefox build. +3. The output will be available in `.output/firefox-mv2`. + +> [!NOTE] +> To generate the ZIP instead that can be imported into Firefox, run `pnpm zip;firefox` which will generate `.output\triliumnextweb-clipper-1.0.1-sources.zip`. + +## Testing + +To test it, a functional Trilium Notes desktop application is required: + +1. Download the latest version of Trilium Notes from [https://triliumnotes.org/](https://triliumnotes.org/) (top-right bottom automatically detects the platform). +2. During the first setup, create a new database. +3. Allow the Firewall port if asked. +4. Install the Web Clipper extension into the browser. +5. The extension should be able to see the Trilium instance and become active. +6. Web pages can now be clipped and they will appear in the local Trilium instance. \ No newline at end of file From 411c06246337a4682f92f780153c56509f302f6e Mon Sep 17 00:00:00 2001 From: Elian Doran <contact@eliandoran.me> Date: Sun, 25 Jan 2026 21:20:07 +0200 Subject: [PATCH 262/353] chore(web-clipper): rewire TS config for sources ZIP --- apps/web-clipper/wxt.config.ts | 31 ++++++++++++++++++++++++++++++- 1 file changed, 30 insertions(+), 1 deletion(-) diff --git a/apps/web-clipper/wxt.config.ts b/apps/web-clipper/wxt.config.ts index 71f7df37a8..145af8ec5a 100644 --- a/apps/web-clipper/wxt.config.ts +++ b/apps/web-clipper/wxt.config.ts @@ -1,5 +1,8 @@ +import { copyFile, readFile, rm, writeFile } from "fs/promises"; import { defineConfig } from "wxt"; +let originalTsConfig: object; + export default defineConfig({ modules: ['@wxt-dev/auto-icons'], manifest: ({ manifestVersion }) => ({ @@ -49,5 +52,31 @@ export default defineConfig({ } } } - }) + }), + zip: { + includeSources: [ + "../../tsconfig.base.json" + ] + }, + hooks: { + 'zip:sources:start': async () => { + // Rewrite tsconfig.base.json into the web-clipper app folder + await copyFile("../../tsconfig.base.json", "./tsconfig.base.json"); + + originalTsConfig = JSON.parse(await readFile("./tsconfig.json", "utf-8")); + const adjustedTsConfig = { + ...originalTsConfig, + extends: ["./tsconfig.base.json", "./.wxt/tsconfig.json"] + }; + + await writeFile("./tsconfig.json", JSON.stringify(adjustedTsConfig, null, 4), 'utf-8'); + }, + "zip:sources:done": async () => { + // Restore original tsconfig.json + await writeFile("./tsconfig.json", JSON.stringify(originalTsConfig, null, 4), 'utf-8'); + + // Remove the copied tsconfig.base.json + await rm("./tsconfig.base.json"); + } + } }); From 1a92eeac69f24712b17c66233a6689ba201fef78 Mon Sep 17 00:00:00 2001 From: Hosted Weblate <hosted@weblate.org> Date: Sun, 25 Jan 2026 19:44:48 +0100 Subject: [PATCH 263/353] Update translation files Updated by "Cleanup translation files" add-on in Weblate. Translation: Trilium Notes/README Translate-URL: https://hosted.weblate.org/projects/trilium/readme/ --- docs/README-uk.md | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/docs/README-uk.md b/docs/README-uk.md index 7784c3c031..b9bfe4aa1e 100644 --- a/docs/README-uk.md +++ b/docs/README-uk.md @@ -232,22 +232,22 @@ Trilium та TriliumDroid. сервера](https://docs.triliumnotes.org/user-guide/setup/server). -## 💻 Contribute +## 💻 Зробіть свій внесок -### Translations +### Переклади -If you are a native speaker, help us translate Trilium by heading over to our -[Weblate page](https://hosted.weblate.org/engage/trilium/). +Якщо ви носій мови, допоможіть нам перекласти Trilium, перейшовши на нашу +[сторінку Weblate](https://hosted.weblate.org/engage/trilium/). -Here's the language coverage we have so far: +Ось мовне висвітлення, яке ми маємо наразі: -[![Translation -status](https://hosted.weblate.org/widget/trilium/multi-auto.svg)](https://hosted.weblate.org/engage/trilium/) +[![Стан +перекладу](https://hosted.weblate.org/widget/trilium/multi-auto.svg)](https://hosted.weblate.org/engage/trilium/) -### Code +### Код -Download the repository, install dependencies using `pnpm` and then run the -server (available at http://localhost:8080): +Завантажте репозиторій, встановіть залежності за допомогою `pnpm`, а потім +запустіть сервер (доступний за адресою http://localhost:8080): ```shell git clone https://github.com/TriliumNext/Trilium.git cd Trilium @@ -255,10 +255,10 @@ pnpm install pnpm run server:start ``` -### Documentation +### Документація -Download the repository, install dependencies using `pnpm` and then run the -environment required to edit the documentation: +Завантажте репозиторій, встановіть залежності за допомогою `pnpm`, а потім +запустіть середовище, необхідне для редагування документації: ```shell git clone https://github.com/TriliumNext/Trilium.git cd Trilium @@ -266,9 +266,9 @@ pnpm install pnpm edit-docs:edit-docs ``` -### Building the Executable -Download the repository, install dependencies using `pnpm` and then build the -desktop app for Windows: +### Створення виконуваного файлу +Завантажте репозиторій, встановіть залежності за допомогою `pnpm`, а потім +зберіть настільний додаток для Windows: ```shell git clone https://github.com/TriliumNext/Trilium.git cd Trilium From 28368a3e0d6f63e42a5c4071dd0451fb75a4854a Mon Sep 17 00:00:00 2001 From: Hosted Weblate <hosted@weblate.org> Date: Sun, 25 Jan 2026 20:23:25 +0100 Subject: [PATCH 264/353] Update translation files Updated by "Cleanup translation files" add-on in Weblate. Translation: Trilium Notes/README Translate-URL: https://hosted.weblate.org/projects/trilium/readme/ --- docs/README-uk.md | 99 ++++++++++++++++++++++++----------------------- 1 file changed, 50 insertions(+), 49 deletions(-) diff --git a/docs/README-uk.md b/docs/README-uk.md index b9bfe4aa1e..96763a1427 100644 --- a/docs/README-uk.md +++ b/docs/README-uk.md @@ -276,71 +276,72 @@ pnpm install pnpm run --filter desktop electron-forge:make --arch=x64 --platform=win32 ``` -For more details, see the [development -docs](https://github.com/TriliumNext/Trilium/tree/main/docs/Developer%20Guide/Developer%20Guide). +Для отримання додаткової інформації див. [документацію +розробника](https://github.com/TriliumNext/Trilium/tree/main/docs/Developer%20Guide/Developer%20Guide). -### Developer Documentation +### Документація розробника Please view the [documentation guide](https://github.com/TriliumNext/Trilium/blob/main/docs/Developer%20Guide/Developer%20Guide/Environment%20Setup.md) for details. If you have more questions, feel free to reach out via the links described in the "Discuss with us" section above. -## 👏 Shoutouts +## 👏 Привітання -* [zadam](https://github.com/zadam) for the original concept and implementation - of the application. -* [Sarah Hussein](https://github.com/Sarah-Hussein) for designing the - application icon. -* [nriver](https://github.com/nriver) for his work on internationalization. -* [Thomas Frei](https://github.com/thfrei) for his original work on the Canvas. -* [antoniotejada](https://github.com/nriver) for the original syntax highlight - widget. -* [Dosu](https://dosu.dev/) for providing us with the automated responses to - GitHub issues and discussions. -* [Tabler Icons](https://tabler.io/icons) for the system tray icons. +* [zadam](https://github.com/zadam) за оригінальну концепцію та реалізацію + застосунку. +* [Sarah Hussein](https://github.com/Sarah-Hussein) за розробку піктограми + програми. +* [nriver](https://github.com/nriver) за його роботу з інтернаціоналізації. +* [Thomas Frei](https://github.com/thfrei) за його оригінальну роботу на Canvas. +* [antoniotejada](https://github.com/nriver) для оригінального віджета + підсвічування синтаксису. +* [Dosu](https://dosu.dev/) за надання нам автоматичних відповідей на проблеми + та обговорення GitHub. +* [Tabler Icons](https://tabler.io/icons) для значків у системному треї. -Trilium would not be possible without the technologies behind it: +Trilium був би неможливим без технологій, що лежать в його основі: -* [CKEditor 5](https://github.com/ckeditor/ckeditor5) - the visual editor behind - text notes. We are grateful for being offered a set of the premium features. -* [CodeMirror](https://github.com/codemirror/CodeMirror) - code editor with - support for huge amount of languages. -* [Excalidraw](https://github.com/excalidraw/excalidraw) - the infinite - whiteboard used in Canvas notes. -* [Mind Elixir](https://github.com/SSShooter/mind-elixir-core) - providing the - mind map functionality. -* [Leaflet](https://github.com/Leaflet/Leaflet) - for rendering geographical - maps. -* [Tabulator](https://github.com/olifolkerd/tabulator) - for the interactive - table used in collections. -* [FancyTree](https://github.com/mar10/fancytree) - feature-rich tree library - without real competition. -* [jsPlumb](https://github.com/jsplumb/jsplumb) - visual connectivity library. - Used in [relation - maps](https://docs.triliumnotes.org/user-guide/note-types/relation-map) and - [link - maps](https://docs.triliumnotes.org/user-guide/advanced-usage/note-map#link-map) +* [CKEditor 5](https://github.com/ckeditor/ckeditor5) – візуальний редактор + текстових нотаток. Ми вдячні за те, що нам запропонували набір + преміум-функцій. +* [CodeMirror](https://github.com/codemirror/CodeMirror) – редактор коду з + підтримкою величезної кількості мов програмування. +* [Excalidraw](https://github.com/excalidraw/excalidraw) – нескінченна дошка, що + використовується в нотатках Canvas. +* [Mind Elixir](https://github.com/SSShooter/mind-elixir-core) – забезпечує + функціональність карти розуму. +* [Leaflet](https://github.com/Leaflet/Leaflet) – для візуалізації географічних + карт. +* [Tabulator](https://github.com/olifolkerd/tabulator) – для інтерактивної + таблиці, що використовується в колекціях. +* [FancyTree](https://github.com/mar10/fancytree) – багатофункціональна + бібліотека дерев без реальної конкуренції. +* [jsPlumb](https://github.com/jsplumb/jsplumb) – бібліотека візуальної + зв’язності. Використовується в [картах + зв’язків](https://docs.triliumnotes.org/user-guide/note-types/relation-map) та + [картах + посилань](https://docs.triliumnotes.org/user-guide/advanced-usage/note-map#link-map) -## 🤝 Support +## 🤝 Підтримка -Trilium is built and maintained with [hundreds of hours of -work](https://github.com/TriliumNext/Trilium/graphs/commit-activity). Your -support keeps it open-source, improves features, and covers costs such as -hosting. +Trilium створено та підтримується [сотнями годин +роботи](https://github.com/TriliumNext/Trilium/graphs/commit-activity). Ваша +підтримка забезпечує його відкритий вихідний код, покращує функції та покриває +витрати, такі як хостинг. -Consider supporting the main developer -([eliandoran](https://github.com/eliandoran)) of the application via: +Розгляньте можливість підтримки головного розробника +([eliandoran](https://github.com/eliandoran)) програми через: -- [GitHub Sponsors](https://github.com/sponsors/eliandoran) +- [Спонсори GitHub](https://github.com/sponsors/eliandoran) - [PayPal](https://paypal.me/eliandoran) - [Buy Me a Coffee](https://buymeacoffee.com/eliandoran) -## 🔑 License +## 🔑 Ліцензія -Copyright 2017-2025 zadam, Elian Doran, and other contributors +Авторське право 2017-2025 належить zadam, Elian Doran та іншим авторам -This program is free software: you can redistribute it and/or modify it under -the terms of the GNU Affero General Public License as published by the Free -Software Foundation, either version 3 of the License, or (at your option) any -later version. +Ця програма є вільним програмним забезпеченням: ви можете розповсюджувати її +та/або змінювати відповідно до умов Загальної публічної ліцензії GNU Affero, +опублікованої Фондом вільного програмного забезпечення, або версії 3 Ліцензії, +або (на ваш вибір) будь-якої пізнішої версії. From 44bf83731043e5271711ff845394fbeead650b7e Mon Sep 17 00:00:00 2001 From: Vitalii Hlas <1998vitaliu@gmail.com> Date: Sun, 25 Jan 2026 20:00:03 +0100 Subject: [PATCH 265/353] Translated using Weblate (Ukrainian) Currently translated at 76.3% (116 of 152 strings) Translation: Trilium Notes/Website Translate-URL: https://hosted.weblate.org/projects/trilium/website/uk/ --- .../src/translations/uk/translation.json | 81 ++++++++++++++++++- 1 file changed, 80 insertions(+), 1 deletion(-) diff --git a/apps/website/src/translations/uk/translation.json b/apps/website/src/translations/uk/translation.json index d5f99d866f..94442b2930 100644 --- a/apps/website/src/translations/uk/translation.json +++ b/apps/website/src/translations/uk/translation.json @@ -73,6 +73,85 @@ "faq": { "title": "Часті запитання", "mobile_question": "Чи є мобільний додаток?", - "mobile_answer": "Наразі офіційного мобільного застосунку немає. Однак, якщо у вас є серверний екземпляр, ви можете отримати до нього доступ за допомогою веббраузера та навіть встановити його як PWA. Для Android існує неофіційний застосунок під назвою TriliumDroid, який працює навіть офлайн (так само, як і клієнт для настільних комп’ютерів)." + "mobile_answer": "Наразі офіційного мобільного застосунку немає. Однак, якщо у вас є серверний екземпляр, ви можете отримати до нього доступ за допомогою веббраузера та навіть встановити його як PWA. Для Android існує неофіційний застосунок під назвою TriliumDroid, який працює навіть офлайн (так само, як і клієнт для настільних комп’ютерів).", + "database_question": "Де зберігаються дані?", + "database_answer": "Усі ваші нотатки зберігатимуться в базі даних SQLite в папці програми. Причина, чому Trilium використовує базу даних замість звичайних текстових файлів, пов'язана як з продуктивністю, так і з тим, що деякі функції було б набагато складніше реалізувати, такі як клони (одна й та сама нотатка в кількох місцях дерева). Щоб знайти папку програми, просто перейдіть до вікна «Про систему».", + "server_question": "Чи потрібен мені сервер для використання Trilium?", + "server_answer": "Ні, сервер дозволяє доступ через веббраузер і керує синхронізацією, якщо у вас кілька пристроїв. Щоб розпочати, достатньо завантажити десктопний застосунок і почати ним користуватися.", + "scaling_question": "Наскільки добре масштабується застосунок з великою кількістю нотаток?", + "scaling_answer": "Залежно від використання, програма має бути здатною без проблем обробляти щонайменше 100 000 нотаток. Зверніть увагу, що процес синхронізації іноді може завершитися невдачею, якщо завантажувати багато великих файлів (1 ГБ на файл), оскільки Trilium призначений радше як програма бази знань, ніж як сховище файлів (наприклад, NextCloud).", + "network_share_question": "Чи можна надати спільний доступ до бази даних через мережевий диск?", + "network_share_answer": "Ні, зазвичай не рекомендується використовувати спільний доступ до бази даних SQLite через мережевий диск. Хоча іноді це може спрацювати, існує ймовірність пошкодження бази даних через недосконале блокування файлів у мережі.", + "security_question": "Як захищені мої дані?", + "security_answer": "За замовчуванням нотатки не шифруються та їх можна зчитувати безпосередньо з бази даних. Після того, як нотатку позначено як зашифровану, вона шифрується за допомогою AES-128-CBC." + }, + "final_cta": { + "title": "Готові розпочати роботу з Trilium Notes?", + "description": "Створіть свою особисту базу знань за допомогою потужних функцій та повної конфіденційності.", + "get_started": "Почати" + }, + "components": { + "link_learn_more": "Дізнатися більше..." + }, + "download_now": { + "text": "Завантажити зараз ", + "platform_big": "v{{version}} для {{platform}}", + "platform_small": "для {{platform}}", + "linux_big": "v{{version}} для Linux", + "linux_small": "для Linux", + "more_platforms": "Більше платформ та налаштування серверів" + }, + "header": { + "get-started": "Почати", + "documentation": "Документація", + "support-us": "Підтримайте нас" + }, + "footer": { + "copyright_and_the": " і ", + "copyright_community": "спільнота" + }, + "social_buttons": { + "github": "GitHub", + "github_discussions": "Обговорення на GitHub", + "matrix": "Матриця", + "reddit": "Reddit" + }, + "support_us": { + "title": "Підтримайте нас", + "financial_donations_title": "Фінансова підтримка", + "financial_donations_description": "Trilium створено та підтримується завдяки <Link>сотням годин роботи</Link>. Ваша підтримка забезпечує його відкритий вихідний код, покращує функції та покриває витрати, такі як хостинг.", + "financial_donations_cta": "Розгляньте можливість підтримки головного розробника (<Link>eliandoran</Link>) програми через:", + "github_sponsors": "GitHub Спонсори", + "paypal": "PayPal", + "buy_me_a_coffee": "Купи мені кави" + }, + "contribute": { + "title": "Інші способи зробити внесок", + "way_translate": "Перекладіть програму вашою рідною мовою за допомогою <Link>Weblate</Link>.", + "way_community": "Взаємодійте зі спільнотою на <Discussions>GitHub Обговорення</Discussions> або на <Matrix>Matrix</Matrix>.", + "way_reports": "Повідомляйте про помилки через <Link>Проблеми GitHub</Link>.", + "way_document": "Покращуйте документацію, повідомляючи нас про прогалини в ній або надаючи посібники, відповіді на поширені запитання чи навчальні посібники.", + "way_market": "Поширте інформацію: поділіться нотатками Trilium з друзями або в блогах і соціальних мережах." + }, + "404": { + "title": "404: Не знайдено", + "description": "Сторінку, яку ви шукали, не знайдено. Можливо, її видалили або URL-адреса неправильна." + }, + "download_helper_desktop_windows": { + "title_x64": "Windows 64-bit", + "title_arm64": "Windows на ARM", + "description_x64": "Сумісний з пристроями Intel або AMD під управлінням Windows 10 та 11.", + "description_arm64": "Сумісний з пристроями ARM (наприклад, з Qualcomm Snapdragon).", + "quick_start": "Щоб встановити через Winget:", + "download_exe": "Завантажити інсталятор (.exe)", + "download_zip": "Портативний (.zip)" + }, + "download_helper_desktop_linux": { + "title_x64": "Linux 64-bit", + "title_arm64": "Linux на ARM", + "description_x64": "Для більшості дистрибутивів Linux, сумісних з архітектурою x86_64.", + "description_arm64": "Для дистрибутивів Linux на базі ARM, сумісних з архітектурою aarch64.", + "quick_start": "Виберіть відповідний формат пакета, залежно від вашого дистрибутива:", + "download_deb": ".deb" } } From 7159ea592785050c13748f9b9c566bcaa27f3f91 Mon Sep 17 00:00:00 2001 From: Vitalii Hlas <1998vitaliu@gmail.com> Date: Sun, 25 Jan 2026 19:47:39 +0100 Subject: [PATCH 266/353] Translated using Weblate (Ukrainian) Currently translated at 91.4% (1613 of 1763 strings) Translation: Trilium Notes/Client Translate-URL: https://hosted.weblate.org/projects/trilium/client/uk/ --- apps/client/src/translations/uk/translation.json | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/apps/client/src/translations/uk/translation.json b/apps/client/src/translations/uk/translation.json index 36985a1943..3d0614fdfe 100644 --- a/apps/client/src/translations/uk/translation.json +++ b/apps/client/src/translations/uk/translation.json @@ -211,7 +211,8 @@ "export_status": "Статус експорту", "export_in_progress": "Триває експорт: {{progressCount}}", "export_finished_successfully": "Експорт успішно завершено.", - "format_pdf": "PDF – для друку або спільного використання." + "format_pdf": "PDF – для друку або спільного використання.", + "share-format": "HTML для веб-публікацій – використовує ту саму тему, що й для спільних нотаток, але може бути опублікований як статичний веб-сайт." }, "help": { "title": "Шпаргалка", @@ -265,7 +266,8 @@ "showSQLConsole": "показати консоль SQL", "other": "Інше", "quickSearch": "фокус на швидкому введенні пошуку", - "inPageSearch": "пошук на сторінці" + "inPageSearch": "пошук на сторінці", + "editShortcuts": "Редагувати комбінації клавіш" }, "import": { "importIntoNote": "Імпортувати в нотатку", From c2c9b6819cd55d4f2a00142f15975d0547d69251 Mon Sep 17 00:00:00 2001 From: MarcelWie <marcel.wiechmann@gmail.com> Date: Sun, 25 Jan 2026 19:32:49 +0100 Subject: [PATCH 267/353] Translated using Weblate (German) Currently translated at 100.0% (1763 of 1763 strings) Translation: Trilium Notes/Client Translate-URL: https://hosted.weblate.org/projects/trilium/client/de/ --- apps/client/src/translations/de/translation.json | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/apps/client/src/translations/de/translation.json b/apps/client/src/translations/de/translation.json index 10df8f772e..fa1cd4b8a7 100644 --- a/apps/client/src/translations/de/translation.json +++ b/apps/client/src/translations/de/translation.json @@ -1608,7 +1608,11 @@ "configure_launchbar": "Startleiste konfigurieren" }, "sql_result": { - "no_rows": "Es wurden keine Zeilen für diese Abfrage zurückgegeben" + "no_rows": "Es wurden keine Zeilen für diese Abfrage zurückgegeben", + "not_executed": "Die Abfrage wurde noch nicht ausgeführt.", + "failed": "SQL-Abfrage ist fehlgeschlagen", + "execute_now": "Jetzt ausführen", + "statement_result": "Anweisung Ergebnis" }, "sql_table_schemas": { "tables": "Tabellen" From 7aec858ade1f5b27b027c58cc41ad3c223ed1111 Mon Sep 17 00:00:00 2001 From: Elian Doran <contact@eliandoran.me> Date: Sun, 25 Jan 2026 21:37:49 +0200 Subject: [PATCH 268/353] chore(web-clipper): missing offscreen.html in sources --- apps/web-clipper/wxt.config.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/web-clipper/wxt.config.ts b/apps/web-clipper/wxt.config.ts index 145af8ec5a..1ca4460a1e 100644 --- a/apps/web-clipper/wxt.config.ts +++ b/apps/web-clipper/wxt.config.ts @@ -55,7 +55,7 @@ export default defineConfig({ }), zip: { includeSources: [ - "../../tsconfig.base.json" + "entrypoints/offscreen/index.html" ] }, hooks: { From 2d126c9cec112feef24f27e87f0b12d1c229ec30 Mon Sep 17 00:00:00 2001 From: Elian Doran <contact@eliandoran.me> Date: Sun, 25 Jan 2026 21:38:01 +0200 Subject: [PATCH 269/353] feat(ci): create release for web-clipper --- .github/workflows/web-clipper.yml | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/.github/workflows/web-clipper.yml b/.github/workflows/web-clipper.yml index ef360a5a93..a8110cf34b 100644 --- a/.github/workflows/web-clipper.yml +++ b/.github/workflows/web-clipper.yml @@ -6,11 +6,21 @@ on: - main paths: - "apps/web-clipper/**" + tags: + - "web-clipper-v*" pull_request: paths: - "apps/web-clipper/**" +permissions: + contents: write + discussions: write + +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + jobs: build: runs-on: ubuntu-latest @@ -39,9 +49,22 @@ jobs: - name: Upload build artifacts uses: actions/upload-artifact@v6 + if: ${{ !startsWith(github.ref, 'refs/tags/v') }} with: name: web-clipper-extension path: apps/web-clipper/.output/*.zip include-hidden-files: true if-no-files-found: error compression-level: 0 + + - name: Release web clipper extension + uses: softprops/action-gh-release@v2.5.0 + if: ${{ startsWith(github.ref, 'refs/tags/web-clipper-v') }} + with: + draft: false + fail_on_unmatched_files: true + files: apps/web-clipper/.output/*.zip + discussion_category_name: Releases + make_latest: false + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} From 241147c7626b8e8548136679f4d6321cccbaee55 Mon Sep 17 00:00:00 2001 From: Elian Doran <contact@eliandoran.me> Date: Sun, 25 Jan 2026 21:40:19 +0200 Subject: [PATCH 270/353] fix(ci): token for web-clipper release --- .github/workflows/web-clipper.yml | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/.github/workflows/web-clipper.yml b/.github/workflows/web-clipper.yml index a8110cf34b..e2fb90326b 100644 --- a/.github/workflows/web-clipper.yml +++ b/.github/workflows/web-clipper.yml @@ -49,7 +49,7 @@ jobs: - name: Upload build artifacts uses: actions/upload-artifact@v6 - if: ${{ !startsWith(github.ref, 'refs/tags/v') }} + if: ${{ !startsWith(github.ref, 'refs/tags/web-clipper-v') }} with: name: web-clipper-extension path: apps/web-clipper/.output/*.zip @@ -66,5 +66,4 @@ jobs: files: apps/web-clipper/.output/*.zip discussion_category_name: Releases make_latest: false - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + token: ${{ secrets.RELEASE_PAT }} From 0cf34fb8745851449571075d0f6f9aa36a6da612 Mon Sep 17 00:00:00 2001 From: MarcelWie <marcel.wiechmann@gmail.com> Date: Sun, 25 Jan 2026 21:36:10 +0100 Subject: [PATCH 271/353] Translated using Weblate (German) Currently translated at 100.0% (1763 of 1763 strings) Translation: Trilium Notes/Client Translate-URL: https://hosted.weblate.org/projects/trilium/client/de/ --- apps/client/src/translations/de/translation.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/client/src/translations/de/translation.json b/apps/client/src/translations/de/translation.json index fa1cd4b8a7..7ecf415a40 100644 --- a/apps/client/src/translations/de/translation.json +++ b/apps/client/src/translations/de/translation.json @@ -2243,14 +2243,14 @@ "attachments_title_other": "Anhänge in einem neuen Tab öffnen", "attributes_one": "{{count}} Eigenschaft", "attributes_other": "{{count}} Eigenschaften", - "attributes_title": "Eigene und gererbte Eigenschaften", + "attributes_title": "Eigene und geerbte Attribute", "note_paths_one": "{{count}} Pfad", "note_paths_other": "{{count}} Pfade", "note_paths_title": "Notizpfade", "code_note_switcher": "Sprachmodus ändern" }, "attributes_panel": { - "title": "Notizeigenschaften" + "title": "Notizattribute" }, "right_pane": { "empty_message": "Für diese Notiz gibt es nichts anzuzeigen", From 4ce841dc8a5b118f9c3ed7c14ef7482c1090494d Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 26 Jan 2026 01:15:19 +0000 Subject: [PATCH 272/353] chore(deps): update dependency axios to v1.13.3 --- apps/server/package.json | 2 +- pnpm-lock.yaml | 96 ++++++++++++++++++++++++---------------- 2 files changed, 59 insertions(+), 39 deletions(-) diff --git a/apps/server/package.json b/apps/server/package.json index e44311d48b..bd0beeed83 100644 --- a/apps/server/package.json +++ b/apps/server/package.json @@ -70,7 +70,7 @@ "@types/xml2js": "0.4.14", "archiver": "7.0.1", "async-mutex": "0.5.0", - "axios": "1.13.2", + "axios": "1.13.3", "bindings": "1.5.0", "bootstrap": "5.3.8", "chardet": "2.1.1", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index eee164a724..7dad20aaf1 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -625,8 +625,8 @@ importers: specifier: 0.5.0 version: 0.5.0 axios: - specifier: 1.13.2 - version: 1.13.2(debug@4.4.3) + specifier: 1.13.3 + version: 1.13.3(debug@4.4.3) bindings: specifier: 1.5.0 version: 1.5.0 @@ -6546,8 +6546,8 @@ packages: resolution: {integrity: sha512-zJAaP9zxTcvTHRlejau3ZOY4V7SRpiByf3/dxx2uyKxxor19tpmpV2QRsTKikckwhaPmr2dVpxxMr7jOCYVp5g==} engines: {node: '>=6.0.0'} - axios@1.13.2: - resolution: {integrity: sha512-VPk9ebNqPcy5lRGuSlKx752IlDatOjT9paPlm8A7yOuW2Fbvp4X3JznJtT4f0GzGLLiWE9W8onz51SqLYwzGaA==} + axios@1.13.3: + resolution: {integrity: sha512-ERT8kdX7DZjtUm7IitEyV7InTHAF42iJuMArIiDIV5YtPanJkgw4hw5Dyg9fh0mihdWNn1GKaeIWErfe56UQ1g==} b4a@1.6.7: resolution: {integrity: sha512-OnAYlL5b7LEkALw87fUVafQw5rVR9RjwGd4KUwNQ6DrrNmaVaUCgLipfVlzrPQ4tWOR9P0IXGNOx50jYCCdSJg==} @@ -8755,10 +8755,6 @@ packages: resolution: {integrity: sha512-G6NsmEW15s0Uw9XnCg+33H3ViYRyiM0hMrMhhqQOR8NFc5GhYrI+6I3u7OTw7b91J2g8rtvMBZJDbcGb2YUniw==} engines: {node: '>= 18'} - form-data@4.0.4: - resolution: {integrity: sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow==} - engines: {node: '>= 6'} - form-data@4.0.5: resolution: {integrity: sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==} engines: {node: '>= 6'} @@ -15833,8 +15829,6 @@ snapshots: '@ckeditor/ckeditor5-core': 47.4.0 '@ckeditor/ckeditor5-upload': 47.4.0 ckeditor5: 47.4.0 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-ai@47.4.0(bufferutil@4.0.9)(utf-8-validate@6.0.5)': dependencies: @@ -15975,8 +15969,6 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.4.0 '@ckeditor/ckeditor5-widget': 47.4.0 es-toolkit: 1.39.5 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-cloud-services@47.4.0': dependencies: @@ -16177,8 +16169,6 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 es-toolkit: 1.39.5 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-editor-classic@47.4.0': dependencies: @@ -16188,8 +16178,6 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 es-toolkit: 1.39.5 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-editor-decoupled@47.4.0': dependencies: @@ -16199,8 +16187,6 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 es-toolkit: 1.39.5 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-editor-inline@47.4.0': dependencies: @@ -16210,8 +16196,6 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 es-toolkit: 1.39.5 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-editor-multi-root@47.4.0': dependencies: @@ -16234,6 +16218,8 @@ snapshots: '@ckeditor/ckeditor5-table': 47.4.0 '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-emoji@47.4.0': dependencies: @@ -16290,6 +16276,8 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.4.0 '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-export-word@47.4.0': dependencies: @@ -16323,6 +16311,8 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.4.0 '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-footnotes@47.4.0': dependencies: @@ -16353,6 +16343,8 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.4.0 '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-heading@47.4.0': dependencies: @@ -16363,6 +16355,8 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.4.0 '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-highlight@47.4.0': dependencies: @@ -16371,6 +16365,8 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.4.0 '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-horizontal-line@47.4.0': dependencies: @@ -16380,8 +16376,6 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.4.0 '@ckeditor/ckeditor5-widget': 47.4.0 ckeditor5: 47.4.0 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-html-embed@47.4.0': dependencies: @@ -16391,6 +16385,8 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.4.0 '@ckeditor/ckeditor5-widget': 47.4.0 ckeditor5: 47.4.0 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-html-support@47.4.0': dependencies: @@ -16406,6 +16402,8 @@ snapshots: '@ckeditor/ckeditor5-widget': 47.4.0 ckeditor5: 47.4.0 es-toolkit: 1.39.5 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-icons@47.4.0': {} @@ -16423,6 +16421,8 @@ snapshots: '@ckeditor/ckeditor5-widget': 47.4.0 ckeditor5: 47.4.0 es-toolkit: 1.39.5 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-import-word@47.4.0': dependencies: @@ -16435,6 +16435,8 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.4.0 '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-indent@47.4.0': dependencies: @@ -16446,6 +16448,8 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.4.0 '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-inspector@5.0.0': {} @@ -16455,6 +16459,8 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.4.0 '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-line-height@47.4.0': dependencies: @@ -16479,6 +16485,8 @@ snapshots: '@ckeditor/ckeditor5-widget': 47.4.0 ckeditor5: 47.4.0 es-toolkit: 1.39.5 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-list-multi-level@47.4.0': dependencies: @@ -16502,6 +16510,8 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.4.0 '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-markdown-gfm@47.4.0': dependencies: @@ -16539,6 +16549,8 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.4.0 '@ckeditor/ckeditor5-widget': 47.4.0 ckeditor5: 47.4.0 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-mention@47.4.0(patch_hash=5981fb59ba35829e4dff1d39cf771000f8a8fdfa7a34b51d8af9549541f2d62d)': dependencies: @@ -16562,6 +16574,8 @@ snapshots: '@ckeditor/ckeditor5-widget': 47.4.0 ckeditor5: 47.4.0 es-toolkit: 1.39.5 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-minimap@47.4.0': dependencies: @@ -16570,6 +16584,8 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.4.0 '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-operations-compressor@47.4.0': dependencies: @@ -16624,6 +16640,8 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.4.0 '@ckeditor/ckeditor5-widget': 47.4.0 ckeditor5: 47.4.0 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-pagination@47.4.0': dependencies: @@ -16733,6 +16751,8 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.4.0 '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-slash-command@47.4.0': dependencies: @@ -16745,6 +16765,8 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.4.0 '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-source-editing-enhanced@47.4.0': dependencies: @@ -16771,8 +16793,6 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.4.0 '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-special-characters@47.4.0': dependencies: @@ -16794,6 +16814,8 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 es-toolkit: 1.39.5 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-table@47.4.0': dependencies: @@ -16806,6 +16828,8 @@ snapshots: '@ckeditor/ckeditor5-widget': 47.4.0 ckeditor5: 47.4.0 es-toolkit: 1.39.5 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-template@47.4.0': dependencies: @@ -16880,8 +16904,6 @@ snapshots: '@ckeditor/ckeditor5-icons': 47.4.0 '@ckeditor/ckeditor5-ui': 47.4.0 '@ckeditor/ckeditor5-utils': 47.4.0 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-upload@47.4.0': dependencies: @@ -16918,6 +16940,8 @@ snapshots: '@ckeditor/ckeditor5-engine': 47.4.0 '@ckeditor/ckeditor5-utils': 47.4.0 es-toolkit: 1.39.5 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-widget@47.4.0': dependencies: @@ -16937,6 +16961,8 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 es-toolkit: 1.39.5 + transitivePeerDependencies: + - supports-color '@codemirror/autocomplete@6.18.6': dependencies: @@ -21100,7 +21126,7 @@ snapshots: '@types/cookiejar': 2.1.5 '@types/methods': 1.1.4 '@types/node': 24.10.9 - form-data: 4.0.4 + form-data: 4.0.5 '@types/supercluster@7.1.3': dependencies: @@ -22126,10 +22152,10 @@ snapshots: await-to-js@3.0.0: {} - axios@1.13.2(debug@4.4.3): + axios@1.13.3(debug@4.4.3): dependencies: follow-redirects: 1.15.9(debug@4.4.3) - form-data: 4.0.4 + form-data: 4.0.5 proxy-from-env: 1.1.0 transitivePeerDependencies: - debug @@ -22685,6 +22711,8 @@ snapshots: ckeditor5-collaboration@47.4.0: dependencies: '@ckeditor/ckeditor5-collaboration-core': 47.4.0 + transitivePeerDependencies: + - supports-color ckeditor5-premium-features@47.4.0(bufferutil@4.0.9)(ckeditor5@47.4.0)(utf-8-validate@6.0.5): dependencies: @@ -25055,14 +25083,6 @@ snapshots: form-data-encoder@4.1.0: {} - form-data@4.0.4: - dependencies: - asynckit: 0.4.0 - combined-stream: 1.0.8 - es-set-tostringtag: 2.1.0 - hasown: 2.0.2 - mime-types: 2.1.35 - form-data@4.0.5: dependencies: asynckit: 0.4.0 @@ -26451,7 +26471,7 @@ snapshots: decimal.js: 10.5.0 domexception: 2.0.1 escodegen: 2.1.0 - form-data: 4.0.4 + form-data: 4.0.5 html-encoding-sniffer: 2.0.1 http-proxy-agent: 4.0.1 https-proxy-agent: 5.0.1 From 9224029a16907d903523267c29134fcc10e0dba9 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 26 Jan 2026 01:16:05 +0000 Subject: [PATCH 273/353] chore(deps): update dependency happy-dom to v20.3.9 --- apps/client/package.json | 2 +- package.json | 2 +- pnpm-lock.yaml | 112 +++++++++++++++++++++++++-------------- 3 files changed, 73 insertions(+), 43 deletions(-) diff --git a/apps/client/package.json b/apps/client/package.json index 754c33d5e8..e2b31f7465 100644 --- a/apps/client/package.json +++ b/apps/client/package.json @@ -78,7 +78,7 @@ "@types/reveal.js": "5.2.2", "@types/tabulator-tables": "6.3.1", "copy-webpack-plugin": "13.0.1", - "happy-dom": "20.3.7", + "happy-dom": "20.3.9", "lightningcss": "1.31.1", "script-loader": "0.7.2", "vite-plugin-static-copy": "3.1.5" diff --git a/package.json b/package.json index 7ec68ed23f..417a7e688b 100644 --- a/package.json +++ b/package.json @@ -63,7 +63,7 @@ "eslint-config-prettier": "10.1.8", "eslint-plugin-playwright": "2.5.0", "eslint-plugin-simple-import-sort": "12.1.1", - "happy-dom": "20.3.7", + "happy-dom": "20.3.9", "http-server": "14.1.1", "jiti": "2.6.1", "js-yaml": "4.1.1", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index eee164a724..6adcc4b6a6 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -92,8 +92,8 @@ importers: specifier: 12.1.1 version: 12.1.1(eslint@9.39.2(jiti@2.6.1)) happy-dom: - specifier: 20.3.7 - version: 20.3.7(bufferutil@4.0.9)(utf-8-validate@6.0.5) + specifier: 20.3.9 + version: 20.3.9(bufferutil@4.0.9)(utf-8-validate@6.0.5) http-server: specifier: 14.1.1 version: 14.1.1 @@ -135,7 +135,7 @@ importers: version: 4.5.4(@types/node@24.10.9)(rollup@4.52.0)(typescript@5.9.3)(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.31.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1)) vitest: specifier: 4.0.18 - version: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@24.10.9)(@vitest/browser-webdriverio@4.0.18)(@vitest/ui@4.0.18)(happy-dom@20.3.7(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.31.1)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) + version: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@24.10.9)(@vitest/browser-webdriverio@4.0.18)(@vitest/ui@4.0.18)(happy-dom@20.3.9(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.31.1)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) apps/build-docs: devDependencies: @@ -345,8 +345,8 @@ importers: specifier: 13.0.1 version: 13.0.1(webpack@5.101.3(esbuild@0.27.2)) happy-dom: - specifier: 20.3.7 - version: 20.3.7(bufferutil@4.0.9)(utf-8-validate@6.0.5) + specifier: 20.3.9 + version: 20.3.9(bufferutil@4.0.9)(utf-8-validate@6.0.5) lightningcss: specifier: 1.31.1 version: 1.31.1 @@ -867,7 +867,7 @@ importers: version: 7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.31.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) vitest: specifier: 4.0.18 - version: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@24.10.9)(@vitest/browser-webdriverio@4.0.18)(@vitest/ui@4.0.18)(happy-dom@20.3.7(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.31.1)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) + version: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@24.10.9)(@vitest/browser-webdriverio@4.0.18)(@vitest/ui@4.0.18)(happy-dom@20.3.9(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.31.1)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) packages/ckeditor5: dependencies: @@ -958,7 +958,7 @@ importers: version: 2.0.0(typescript@5.9.3)(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.31.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1)) vitest: specifier: 4.0.18 - version: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@24.10.9)(@vitest/browser-webdriverio@4.0.18)(@vitest/ui@4.0.18)(happy-dom@20.3.7(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.31.1)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) + version: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@24.10.9)(@vitest/browser-webdriverio@4.0.18)(@vitest/ui@4.0.18)(happy-dom@20.3.9(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.31.1)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) webdriverio: specifier: 9.23.2 version: 9.23.2(bufferutil@4.0.9)(utf-8-validate@6.0.5) @@ -1018,7 +1018,7 @@ importers: version: 2.0.0(typescript@5.9.3)(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.31.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1)) vitest: specifier: 4.0.18 - version: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@24.10.9)(@vitest/browser-webdriverio@4.0.18)(@vitest/ui@4.0.18)(happy-dom@20.3.7(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.31.1)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) + version: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@24.10.9)(@vitest/browser-webdriverio@4.0.18)(@vitest/ui@4.0.18)(happy-dom@20.3.9(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.31.1)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) webdriverio: specifier: 9.23.2 version: 9.23.2(bufferutil@4.0.9)(utf-8-validate@6.0.5) @@ -1078,7 +1078,7 @@ importers: version: 2.0.0(typescript@5.9.3)(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.31.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1)) vitest: specifier: 4.0.18 - version: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@24.10.9)(@vitest/browser-webdriverio@4.0.18)(@vitest/ui@4.0.18)(happy-dom@20.3.7(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.31.1)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) + version: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@24.10.9)(@vitest/browser-webdriverio@4.0.18)(@vitest/ui@4.0.18)(happy-dom@20.3.9(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.31.1)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) webdriverio: specifier: 9.23.2 version: 9.23.2(bufferutil@4.0.9)(utf-8-validate@6.0.5) @@ -1145,7 +1145,7 @@ importers: version: 2.0.0(typescript@5.9.3)(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.31.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1)) vitest: specifier: 4.0.18 - version: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@24.10.9)(@vitest/browser-webdriverio@4.0.18)(@vitest/ui@4.0.18)(happy-dom@20.3.7(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.31.1)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) + version: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@24.10.9)(@vitest/browser-webdriverio@4.0.18)(@vitest/ui@4.0.18)(happy-dom@20.3.9(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.31.1)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) webdriverio: specifier: 9.23.2 version: 9.23.2(bufferutil@4.0.9)(utf-8-validate@6.0.5) @@ -1212,7 +1212,7 @@ importers: version: 2.0.0(typescript@5.9.3)(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.31.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1)) vitest: specifier: 4.0.18 - version: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@24.10.9)(@vitest/browser-webdriverio@4.0.18)(@vitest/ui@4.0.18)(happy-dom@20.3.7(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.31.1)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) + version: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@24.10.9)(@vitest/browser-webdriverio@4.0.18)(@vitest/ui@4.0.18)(happy-dom@20.3.9(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.31.1)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) webdriverio: specifier: 9.23.2 version: 9.23.2(bufferutil@4.0.9)(utf-8-validate@6.0.5) @@ -9127,8 +9127,8 @@ packages: engines: {node: '>=0.4.7'} hasBin: true - happy-dom@20.3.7: - resolution: {integrity: sha512-sb5IzoRl1WJKsUSRe+IloJf3z1iDq5PQ7Yk/ULMsZ5IAQEs9ZL7RsFfiKBXU7nK9QmO+iz0e59EH8r8jexTZ/g==} + happy-dom@20.3.9: + resolution: {integrity: sha512-OIoj0PcK2JaxQuANHxWkxFRSNXAuSgO1vCzCT66KItE0W/ieZLG+/iW8OetlxB+F9EaPB7DoFYKAubFG1f4Mvw==} engines: {node: '>=20.0.0'} has-bigints@1.1.0: @@ -15833,8 +15833,6 @@ snapshots: '@ckeditor/ckeditor5-core': 47.4.0 '@ckeditor/ckeditor5-upload': 47.4.0 ckeditor5: 47.4.0 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-ai@47.4.0(bufferutil@4.0.9)(utf-8-validate@6.0.5)': dependencies: @@ -15975,16 +15973,12 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.4.0 '@ckeditor/ckeditor5-widget': 47.4.0 es-toolkit: 1.39.5 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-cloud-services@47.4.0': dependencies: '@ckeditor/ckeditor5-core': 47.4.0 '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-code-block@47.4.0(patch_hash=2361d8caad7d6b5bddacc3a3b4aa37dbfba260b1c1b22a450413a79c1bb1ce95)': dependencies: @@ -16177,8 +16171,6 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 es-toolkit: 1.39.5 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-editor-classic@47.4.0': dependencies: @@ -16188,8 +16180,6 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 es-toolkit: 1.39.5 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-editor-decoupled@47.4.0': dependencies: @@ -16199,8 +16189,6 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 es-toolkit: 1.39.5 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-editor-inline@47.4.0': dependencies: @@ -16234,6 +16222,8 @@ snapshots: '@ckeditor/ckeditor5-table': 47.4.0 '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-emoji@47.4.0': dependencies: @@ -16290,6 +16280,8 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.4.0 '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-export-word@47.4.0': dependencies: @@ -16323,6 +16315,8 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.4.0 '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-footnotes@47.4.0': dependencies: @@ -16353,6 +16347,8 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.4.0 '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-heading@47.4.0': dependencies: @@ -16363,6 +16359,8 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.4.0 '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-highlight@47.4.0': dependencies: @@ -16371,6 +16369,8 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.4.0 '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-horizontal-line@47.4.0': dependencies: @@ -16380,8 +16380,6 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.4.0 '@ckeditor/ckeditor5-widget': 47.4.0 ckeditor5: 47.4.0 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-html-embed@47.4.0': dependencies: @@ -16391,6 +16389,8 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.4.0 '@ckeditor/ckeditor5-widget': 47.4.0 ckeditor5: 47.4.0 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-html-support@47.4.0': dependencies: @@ -16406,6 +16406,8 @@ snapshots: '@ckeditor/ckeditor5-widget': 47.4.0 ckeditor5: 47.4.0 es-toolkit: 1.39.5 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-icons@47.4.0': {} @@ -16423,6 +16425,8 @@ snapshots: '@ckeditor/ckeditor5-widget': 47.4.0 ckeditor5: 47.4.0 es-toolkit: 1.39.5 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-import-word@47.4.0': dependencies: @@ -16435,6 +16439,8 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.4.0 '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-indent@47.4.0': dependencies: @@ -16446,6 +16452,8 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.4.0 '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-inspector@5.0.0': {} @@ -16455,6 +16463,8 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.4.0 '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-line-height@47.4.0': dependencies: @@ -16479,6 +16489,8 @@ snapshots: '@ckeditor/ckeditor5-widget': 47.4.0 ckeditor5: 47.4.0 es-toolkit: 1.39.5 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-list-multi-level@47.4.0': dependencies: @@ -16502,6 +16514,8 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.4.0 '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-markdown-gfm@47.4.0': dependencies: @@ -16539,6 +16553,8 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.4.0 '@ckeditor/ckeditor5-widget': 47.4.0 ckeditor5: 47.4.0 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-mention@47.4.0(patch_hash=5981fb59ba35829e4dff1d39cf771000f8a8fdfa7a34b51d8af9549541f2d62d)': dependencies: @@ -16562,6 +16578,8 @@ snapshots: '@ckeditor/ckeditor5-widget': 47.4.0 ckeditor5: 47.4.0 es-toolkit: 1.39.5 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-minimap@47.4.0': dependencies: @@ -16570,6 +16588,8 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.4.0 '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-operations-compressor@47.4.0': dependencies: @@ -16624,6 +16644,8 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.4.0 '@ckeditor/ckeditor5-widget': 47.4.0 ckeditor5: 47.4.0 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-pagination@47.4.0': dependencies: @@ -16687,8 +16709,6 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.4.0 '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-restricted-editing@47.4.0': dependencies: @@ -16733,6 +16753,8 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.4.0 '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-slash-command@47.4.0': dependencies: @@ -16745,6 +16767,8 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.4.0 '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-source-editing-enhanced@47.4.0': dependencies: @@ -16771,8 +16795,6 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.4.0 '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-special-characters@47.4.0': dependencies: @@ -16794,6 +16816,8 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 es-toolkit: 1.39.5 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-table@47.4.0': dependencies: @@ -16806,6 +16830,8 @@ snapshots: '@ckeditor/ckeditor5-widget': 47.4.0 ckeditor5: 47.4.0 es-toolkit: 1.39.5 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-template@47.4.0': dependencies: @@ -16880,8 +16906,6 @@ snapshots: '@ckeditor/ckeditor5-icons': 47.4.0 '@ckeditor/ckeditor5-ui': 47.4.0 '@ckeditor/ckeditor5-utils': 47.4.0 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-upload@47.4.0': dependencies: @@ -16918,6 +16942,8 @@ snapshots: '@ckeditor/ckeditor5-engine': 47.4.0 '@ckeditor/ckeditor5-utils': 47.4.0 es-toolkit: 1.39.5 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-widget@47.4.0': dependencies: @@ -16937,6 +16963,8 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 es-toolkit: 1.39.5 + transitivePeerDependencies: + - supports-color '@codemirror/autocomplete@6.18.6': dependencies: @@ -21430,7 +21458,7 @@ snapshots: '@vitest/browser-webdriverio@4.0.18(bufferutil@4.0.9)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(utf-8-validate@6.0.5)(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.31.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1))(vitest@4.0.18)(webdriverio@9.23.2(bufferutil@4.0.9)(utf-8-validate@6.0.5))': dependencies: '@vitest/browser': 4.0.18(bufferutil@4.0.9)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(utf-8-validate@6.0.5)(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.31.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1))(vitest@4.0.18) - vitest: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@24.10.9)(@vitest/browser-webdriverio@4.0.18)(@vitest/ui@4.0.18)(happy-dom@20.3.7(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.31.1)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) + vitest: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@24.10.9)(@vitest/browser-webdriverio@4.0.18)(@vitest/ui@4.0.18)(happy-dom@20.3.9(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.31.1)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) webdriverio: 9.23.2(bufferutil@4.0.9)(utf-8-validate@6.0.5) transitivePeerDependencies: - bufferutil @@ -21447,7 +21475,7 @@ snapshots: pngjs: 7.0.0 sirv: 3.0.2 tinyrainbow: 3.0.3 - vitest: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@24.10.9)(@vitest/browser-webdriverio@4.0.18)(@vitest/ui@4.0.18)(happy-dom@20.3.7(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.31.1)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) + vitest: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@24.10.9)(@vitest/browser-webdriverio@4.0.18)(@vitest/ui@4.0.18)(happy-dom@20.3.9(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.31.1)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) ws: 8.19.0(bufferutil@4.0.9)(utf-8-validate@6.0.5) transitivePeerDependencies: - bufferutil @@ -21467,7 +21495,7 @@ snapshots: magicast: 0.5.1 obug: 2.1.1 tinyrainbow: 3.0.3 - vitest: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@24.10.9)(@vitest/browser-webdriverio@4.0.18)(@vitest/ui@4.0.18)(happy-dom@20.3.7(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.31.1)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) + vitest: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@24.10.9)(@vitest/browser-webdriverio@4.0.18)(@vitest/ui@4.0.18)(happy-dom@20.3.9(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.31.1)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) transitivePeerDependencies: - supports-color @@ -21483,7 +21511,7 @@ snapshots: obug: 2.1.1 std-env: 3.10.0 tinyrainbow: 3.0.3 - vitest: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@24.10.9)(@vitest/browser-webdriverio@4.0.18)(@vitest/ui@4.0.18)(happy-dom@20.3.7(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.31.1)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) + vitest: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@24.10.9)(@vitest/browser-webdriverio@4.0.18)(@vitest/ui@4.0.18)(happy-dom@20.3.9(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.31.1)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) optionalDependencies: '@vitest/browser': 4.0.18(bufferutil@4.0.9)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(utf-8-validate@6.0.5)(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.31.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1))(vitest@4.0.18) @@ -21531,7 +21559,7 @@ snapshots: sirv: 3.0.2 tinyglobby: 0.2.15 tinyrainbow: 3.0.3 - vitest: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@24.10.9)(@vitest/browser-webdriverio@4.0.18)(@vitest/ui@4.0.18)(happy-dom@20.3.7(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.31.1)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) + vitest: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@24.10.9)(@vitest/browser-webdriverio@4.0.18)(@vitest/ui@4.0.18)(happy-dom@20.3.9(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.31.1)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) '@vitest/utils@4.0.18': dependencies: @@ -22685,6 +22713,8 @@ snapshots: ckeditor5-collaboration@47.4.0: dependencies: '@ckeditor/ckeditor5-collaboration-core': 47.4.0 + transitivePeerDependencies: + - supports-color ckeditor5-premium-features@47.4.0(bufferutil@4.0.9)(ckeditor5@47.4.0)(utf-8-validate@6.0.5): dependencies: @@ -25506,7 +25536,7 @@ snapshots: optionalDependencies: uglify-js: 3.19.3 - happy-dom@20.3.7(bufferutil@4.0.9)(utf-8-validate@6.0.5): + happy-dom@20.3.9(bufferutil@4.0.9)(utf-8-validate@6.0.5): dependencies: '@types/node': 24.10.9 '@types/whatwg-mimetype': 3.0.2 @@ -31983,7 +32013,7 @@ snapshots: tsx: 4.21.0 yaml: 2.8.1 - vitest@4.0.18(@opentelemetry/api@1.9.0)(@types/node@24.10.9)(@vitest/browser-webdriverio@4.0.18)(@vitest/ui@4.0.18)(happy-dom@20.3.7(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.31.1)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1): + vitest@4.0.18(@opentelemetry/api@1.9.0)(@types/node@24.10.9)(@vitest/browser-webdriverio@4.0.18)(@vitest/ui@4.0.18)(happy-dom@20.3.9(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.31.1)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1): dependencies: '@vitest/expect': 4.0.18 '@vitest/mocker': 4.0.18(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.31.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1)) @@ -32010,7 +32040,7 @@ snapshots: '@types/node': 24.10.9 '@vitest/browser-webdriverio': 4.0.18(bufferutil@4.0.9)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(utf-8-validate@6.0.5)(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.31.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1))(vitest@4.0.18)(webdriverio@9.23.2(bufferutil@4.0.9)(utf-8-validate@6.0.5)) '@vitest/ui': 4.0.18(vitest@4.0.18) - happy-dom: 20.3.7(bufferutil@4.0.9)(utf-8-validate@6.0.5) + happy-dom: 20.3.9(bufferutil@4.0.9)(utf-8-validate@6.0.5) jsdom: 26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5) transitivePeerDependencies: - jiti From 30ead4080ad3ac7f316452ba2e31d54c29003cbc Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 26 Jan 2026 01:16:42 +0000 Subject: [PATCH 274/353] fix(deps): update dependency katex to v0.16.28 --- apps/client/package.json | 2 +- packages/share-theme/package.json | 2 +- pnpm-lock.yaml | 86 +++++++++++++++++++++---------- 3 files changed, 60 insertions(+), 30 deletions(-) diff --git a/apps/client/package.json b/apps/client/package.json index 754c33d5e8..a7f2e5f680 100644 --- a/apps/client/package.json +++ b/apps/client/package.json @@ -49,7 +49,7 @@ "jquery": "4.0.0", "jquery.fancytree": "2.38.5", "jsplumb": "2.15.6", - "katex": "0.16.27", + "katex": "0.16.28", "knockout": "3.5.1", "leaflet": "1.9.4", "leaflet-gpx": "2.2.0", diff --git a/packages/share-theme/package.json b/packages/share-theme/package.json index a20b744f17..a8e6e6672f 100644 --- a/packages/share-theme/package.json +++ b/packages/share-theme/package.json @@ -25,7 +25,7 @@ "license": "Apache-2.0", "dependencies": { "fuse.js": "7.1.0", - "katex": "0.16.27", + "katex": "0.16.28", "mermaid": "11.12.2" }, "devDependencies": { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index eee164a724..eab2f34f36 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -263,8 +263,8 @@ importers: specifier: 2.15.6 version: 2.15.6 katex: - specifier: 0.16.27 - version: 0.16.27 + specifier: 0.16.28 + version: 0.16.28 knockout: specifier: 3.5.1 version: 3.5.1 @@ -1407,8 +1407,8 @@ importers: specifier: 7.1.0 version: 7.1.0 katex: - specifier: 0.16.27 - version: 0.16.27 + specifier: 0.16.28 + version: 0.16.28 mermaid: specifier: 11.12.2 version: 11.12.2 @@ -10130,8 +10130,8 @@ packages: engines: {node: '>= 10'} hasBin: true - katex@0.16.27: - resolution: {integrity: sha512-aeQoDkuRWSqQN6nSvVCEFvfXdqo1OQiCmmW1kc9xSdjutPv7BGO7pqY9sQRJpMOGrEdfDgF2TfRXe5eUAD2Waw==} + katex@0.16.28: + resolution: {integrity: sha512-YHzO7721WbmAL6Ov1uzN/l5mY5WWWhJBSW+jq4tkfZfsxmo1hu6frS0EOswvjBUnWE6NtjEs48SFn5CQESRLZg==} hasBin: true kdbush@4.0.2: @@ -15833,8 +15833,6 @@ snapshots: '@ckeditor/ckeditor5-core': 47.4.0 '@ckeditor/ckeditor5-upload': 47.4.0 ckeditor5: 47.4.0 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-ai@47.4.0(bufferutil@4.0.9)(utf-8-validate@6.0.5)': dependencies: @@ -15975,16 +15973,12 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.4.0 '@ckeditor/ckeditor5-widget': 47.4.0 es-toolkit: 1.39.5 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-cloud-services@47.4.0': dependencies: '@ckeditor/ckeditor5-core': 47.4.0 '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-code-block@47.4.0(patch_hash=2361d8caad7d6b5bddacc3a3b4aa37dbfba260b1c1b22a450413a79c1bb1ce95)': dependencies: @@ -16177,8 +16171,6 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 es-toolkit: 1.39.5 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-editor-classic@47.4.0': dependencies: @@ -16188,8 +16180,6 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 es-toolkit: 1.39.5 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-editor-decoupled@47.4.0': dependencies: @@ -16199,8 +16189,6 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 es-toolkit: 1.39.5 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-editor-inline@47.4.0': dependencies: @@ -16234,6 +16222,8 @@ snapshots: '@ckeditor/ckeditor5-table': 47.4.0 '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-emoji@47.4.0': dependencies: @@ -16290,6 +16280,8 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.4.0 '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-export-word@47.4.0': dependencies: @@ -16323,6 +16315,8 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.4.0 '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-footnotes@47.4.0': dependencies: @@ -16353,6 +16347,8 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.4.0 '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-heading@47.4.0': dependencies: @@ -16363,6 +16359,8 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.4.0 '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-highlight@47.4.0': dependencies: @@ -16371,6 +16369,8 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.4.0 '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-horizontal-line@47.4.0': dependencies: @@ -16380,8 +16380,6 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.4.0 '@ckeditor/ckeditor5-widget': 47.4.0 ckeditor5: 47.4.0 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-html-embed@47.4.0': dependencies: @@ -16391,6 +16389,8 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.4.0 '@ckeditor/ckeditor5-widget': 47.4.0 ckeditor5: 47.4.0 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-html-support@47.4.0': dependencies: @@ -16406,6 +16406,8 @@ snapshots: '@ckeditor/ckeditor5-widget': 47.4.0 ckeditor5: 47.4.0 es-toolkit: 1.39.5 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-icons@47.4.0': {} @@ -16423,6 +16425,8 @@ snapshots: '@ckeditor/ckeditor5-widget': 47.4.0 ckeditor5: 47.4.0 es-toolkit: 1.39.5 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-import-word@47.4.0': dependencies: @@ -16435,6 +16439,8 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.4.0 '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-indent@47.4.0': dependencies: @@ -16446,6 +16452,8 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.4.0 '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-inspector@5.0.0': {} @@ -16455,6 +16463,8 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.4.0 '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-line-height@47.4.0': dependencies: @@ -16479,6 +16489,8 @@ snapshots: '@ckeditor/ckeditor5-widget': 47.4.0 ckeditor5: 47.4.0 es-toolkit: 1.39.5 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-list-multi-level@47.4.0': dependencies: @@ -16502,6 +16514,8 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.4.0 '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-markdown-gfm@47.4.0': dependencies: @@ -16539,6 +16553,8 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.4.0 '@ckeditor/ckeditor5-widget': 47.4.0 ckeditor5: 47.4.0 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-mention@47.4.0(patch_hash=5981fb59ba35829e4dff1d39cf771000f8a8fdfa7a34b51d8af9549541f2d62d)': dependencies: @@ -16562,6 +16578,8 @@ snapshots: '@ckeditor/ckeditor5-widget': 47.4.0 ckeditor5: 47.4.0 es-toolkit: 1.39.5 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-minimap@47.4.0': dependencies: @@ -16570,6 +16588,8 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.4.0 '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-operations-compressor@47.4.0': dependencies: @@ -16624,6 +16644,8 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.4.0 '@ckeditor/ckeditor5-widget': 47.4.0 ckeditor5: 47.4.0 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-pagination@47.4.0': dependencies: @@ -16687,8 +16709,6 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.4.0 '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-restricted-editing@47.4.0': dependencies: @@ -16733,6 +16753,8 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.4.0 '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-slash-command@47.4.0': dependencies: @@ -16745,6 +16767,8 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.4.0 '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-source-editing-enhanced@47.4.0': dependencies: @@ -16771,8 +16795,6 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.4.0 '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-special-characters@47.4.0': dependencies: @@ -16794,6 +16816,8 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 es-toolkit: 1.39.5 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-table@47.4.0': dependencies: @@ -16806,6 +16830,8 @@ snapshots: '@ckeditor/ckeditor5-widget': 47.4.0 ckeditor5: 47.4.0 es-toolkit: 1.39.5 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-template@47.4.0': dependencies: @@ -16880,8 +16906,6 @@ snapshots: '@ckeditor/ckeditor5-icons': 47.4.0 '@ckeditor/ckeditor5-ui': 47.4.0 '@ckeditor/ckeditor5-utils': 47.4.0 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-upload@47.4.0': dependencies: @@ -16918,6 +16942,8 @@ snapshots: '@ckeditor/ckeditor5-engine': 47.4.0 '@ckeditor/ckeditor5-utils': 47.4.0 es-toolkit: 1.39.5 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-widget@47.4.0': dependencies: @@ -16937,6 +16963,8 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 es-toolkit: 1.39.5 + transitivePeerDependencies: + - supports-color '@codemirror/autocomplete@6.18.6': dependencies: @@ -22685,6 +22713,8 @@ snapshots: ckeditor5-collaboration@47.4.0: dependencies: '@ckeditor/ckeditor5-collaboration-core': 47.4.0 + transitivePeerDependencies: + - supports-color ckeditor5-premium-features@47.4.0(bufferutil@4.0.9)(ckeditor5@47.4.0)(utf-8-validate@6.0.5): dependencies: @@ -26633,7 +26663,7 @@ snapshots: - supports-color - utf-8-validate - katex@0.16.27: + katex@0.16.28: dependencies: commander: 8.3.0 @@ -27368,7 +27398,7 @@ snapshots: dagre-d3-es: 7.0.13 dayjs: 1.11.19 dompurify: 3.2.5 - katex: 0.16.27 + katex: 0.16.28 khroma: 2.1.0 lodash-es: 4.17.21 marked: 16.4.2 From 3b76239f65ee904e4ab7d1cc28576f9b83c29e3b Mon Sep 17 00:00:00 2001 From: MarcelWie <marcel.wiechmann@gmail.com> Date: Sun, 25 Jan 2026 23:10:22 +0100 Subject: [PATCH 275/353] Translated using Weblate (German) Currently translated at 100.0% (1763 of 1763 strings) Translation: Trilium Notes/Client Translate-URL: https://hosted.weblate.org/projects/trilium/client/de/ --- .../src/translations/de/translation.json | 34 +++++++++---------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/apps/client/src/translations/de/translation.json b/apps/client/src/translations/de/translation.json index 7ecf415a40..4b3acf567f 100644 --- a/apps/client/src/translations/de/translation.json +++ b/apps/client/src/translations/de/translation.json @@ -720,7 +720,7 @@ "update_available": "Update verfügbar" }, "note_launcher": { - "this_launcher_doesnt_define_target_note": "Dieser Launcher definiert keine Zielnotiz." + "this_launcher_doesnt_define_target_note": "Dieser Starter definiert keine Zielnotiz." }, "code_buttons": { "execute_button_title": "Skript ausführen", @@ -763,8 +763,8 @@ "change_note_icon": "Notiz-Icon ändern", "search": "Suche:", "reset-default": "Standard wiederherstellen", - "search_placeholder_one": "Suche {{number}} Icons über {{count}} Pakete", - "search_placeholder_other": "Suche {{number}} Icons über {{count}} Pakete", + "search_placeholder_one": "Suche {{number}} Symbole über {{count}} Pakete", + "search_placeholder_other": "Suche {{number}} Symbole über {{count}} Pakete", "search_placeholder_filtered": "Suche {{number}} Icons in {{name}}", "filter": "Filter", "filter-none": "Alle Icons", @@ -1169,7 +1169,7 @@ "layout": "Layout", "layout-vertical-title": "Vertikal", "layout-horizontal-title": "Horizontal", - "layout-vertical-description": "Startleiste ist auf der linken Seite (standard)", + "layout-vertical-description": "Startleiste ist auf der linken Seite (Standard)", "layout-horizontal-description": "Startleiste ist unter der Tableiste. Die Tableiste wird dadurch auf die ganze Breite erweitert.", "auto_theme": "Alt (Folge dem Farbschema des Systems)", "light_theme": "Alt (Hell)", @@ -1177,7 +1177,7 @@ }, "zoom_factor": { "title": "Zoomfaktor (nur Desktop-Build)", - "description": "Das Zoomen kann auch mit den Tastenkombinationen STRG+- und STRG+u003d gesteuert werden." + "description": "Das Zoomen kann auch mit den Tastenkombinationen Strg+- und Strg+= gesteuert werden." }, "code_auto_read_only_size": { "title": "Automatische schreibgeschützte Größe", @@ -1490,12 +1490,12 @@ "note-map": "Notizkarte", "render-note": "Render Notiz", "mermaid-diagram": "Mermaid Diagramm", - "canvas": "Canvas", + "canvas": "Leinwand", "web-view": "Webansicht", "mind-map": "Mind Map", "file": "Datei", "image": "Bild", - "launcher": "Launcher", + "launcher": "Starter", "doc": "Dokument", "widget": "Widget", "confirm-change": "Es is nicht empfehlenswert den Notiz-Typ zu ändern, wenn der Inhalt der Notiz nicht leer ist. Möchtest du dennoch fortfahren?", @@ -1595,7 +1595,7 @@ "last_modified": "Bearbeitet am <Value />", "note_type_switcher_label": "Ändere von {{type}} zu:", "note_type_switcher_others": "Andere Notizart", - "note_type_switcher_templates": "Template", + "note_type_switcher_templates": "Vorlagen", "note_type_switcher_collection": "Sammlung", "edited_notes": "Notizen, bearbeitet an diesem Tag", "promoted_attributes": "Hervorgehobene Attribute" @@ -1683,16 +1683,16 @@ "confirm_unhoisting": "Die angeforderte Notiz ‚{{requestedNote}}‘ befindet sich außerhalb des hoisted Bereichs der Notiz ‚{{hoistedNote}}‘. Du musst sie unhoisten, um auf die Notiz zuzugreifen. Möchtest du mit dem Unhoisting fortfahren?" }, "launcher_context_menu": { - "reset_launcher_confirm": "Möchtest du „{{title}}“ wirklich zurücksetzen? Alle Daten / Einstellungen in dieser Notiz (und ihren Unternotizen) gehen verloren und der Launcher wird an seinen ursprünglichen Standort zurückgesetzt.", - "add-note-launcher": "Launcher für Notiz hinzufügen", - "add-script-launcher": "Launcher für Skript hinzufügen", + "reset_launcher_confirm": "Möchtest du „{{title}}“ wirklich zurücksetzen? Alle Daten / Einstellungen in dieser Notiz (und ihren Unternotizen) gehen verloren und der Starter wird an seinen ursprünglichen Standort zurückgesetzt.", + "add-note-launcher": "Notiz-Starter hinzufügen", + "add-script-launcher": "Skript-Starter hinzufügen", "add-custom-widget": "Benutzerdefiniertes Widget hinzufügen", - "add-spacer": "Spacer hinzufügen", + "add-spacer": "Abstandhalter hinzufügen", "delete": "Löschen <kbd data-command=\"deleteNotes\"></kbd>", "reset": "Zurücksetzen", - "move-to-visible-launchers": "Zu sichtbaren Launchern verschieben", - "move-to-available-launchers": "Zu verfügbaren Launchern verschieben", - "duplicate-launcher": "Launcher duplizieren <kbd data-command=\"duplicateSubtree\">" + "move-to-visible-launchers": "Zu sichtbaren Startern verschieben", + "move-to-available-launchers": "Zu verfügbaren Startern verschieben", + "duplicate-launcher": "Starter duplizieren <kbd data-command=\"duplicateSubtree\">" }, "highlighting": { "description": "Steuert die Syntaxhervorhebung für Codeblöcke in Textnotizen, Code-Notizen sind nicht betroffen.", @@ -2241,8 +2241,8 @@ "attachments_other": "{{count}} Anhänge", "attachments_title_one": "Anhang in einem neuen Tab öffnen", "attachments_title_other": "Anhänge in einem neuen Tab öffnen", - "attributes_one": "{{count}} Eigenschaft", - "attributes_other": "{{count}} Eigenschaften", + "attributes_one": "{{count}} Attribute", + "attributes_other": "{{count}} Attribute", "attributes_title": "Eigene und geerbte Attribute", "note_paths_one": "{{count}} Pfad", "note_paths_other": "{{count}} Pfade", From 78b0773a285d0eac98b83c12a9bd3586e65a20c4 Mon Sep 17 00:00:00 2001 From: MarcelWie <marcel.wiechmann@gmail.com> Date: Sun, 25 Jan 2026 22:24:43 +0100 Subject: [PATCH 276/353] Translated using Weblate (German) Currently translated at 100.0% (116 of 116 strings) Translation: Trilium Notes/README Translate-URL: https://hosted.weblate.org/projects/trilium/readme/de/ --- docs/README-de.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/README-de.md b/docs/README-de.md index a3c2112144..00cfe89340 100644 --- a/docs/README-de.md +++ b/docs/README-de.md @@ -104,7 +104,7 @@ Unsere Dokumentation ist verfügbar in mehreren Formaten: [Notizverschlüsselung](https://docs.triliumnotes.org/user-guide/concepts/notes/protected-notes) mit Granularität pro Notiz * Skizzieren von Diagrammen basierend auf [Excalidraw](https://excalidraw.com/) - (Notiztyp „Canvas“) + (Notiztyp „Leinwand“) * [Beziehungskarten](https://docs.triliumnotes.org/user-guide/note-types/relation-map) und [Notiz-/Link-Karten](https://docs.triliumnotes.org/user-guide/note-types/note-map) @@ -298,7 +298,7 @@ enthält weitere Details. Bei offenen Fragen kann über die im Abschnitt Anwendungssymbols. * [nriver](https://github.com/nriver) für seine Arbeit zur Internationalisierung. -* [Thomas Frei](https://github.com/thfrei) für seine ursprüngliche Arbeit an +* [Thomas Frei](https://github.com/thfrei) für seine originelle Arbeit an Canvas. * [antoniotejada](https://github.com/nriver) für das ursprüngliche Syntax-Highlighting-Widget. @@ -314,7 +314,7 @@ Trilium wäre ohne die zugrundeliegenden Technologien nicht möglich: * [CodeMirror](https://github.com/codemirror/CodeMirror) - Code-Editor mit Unterstützung für eine Vielzahl von Sprachen. * [Excalidraw](https://github.com/excalidraw/excalidraw) – das unendliche - Whiteboard, verwendet in Canvas-Notizen. + Whiteboard, verwendet in Leinwand-Notizen. * [Mind Elixir](https://github.com/SSShooter/mind-elixir-core) – bietet die Mindmap-Funktionalität. * [Leaflet](https://github.com/Leaflet/Leaflet) – für die Darstellung From 27bf41e0ced48cc09554e61522b4f98370f55ce1 Mon Sep 17 00:00:00 2001 From: MarcelWie <marcel.wiechmann@gmail.com> Date: Sun, 25 Jan 2026 23:00:32 +0100 Subject: [PATCH 277/353] Translated using Weblate (German) Currently translated at 100.0% (388 of 388 strings) Translation: Trilium Notes/Server Translate-URL: https://hosted.weblate.org/projects/trilium/server/de/ --- apps/server/src/assets/translations/de/server.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/apps/server/src/assets/translations/de/server.json b/apps/server/src/assets/translations/de/server.json index aa36bcc3d3..8037825bcb 100644 --- a/apps/server/src/assets/translations/de/server.json +++ b/apps/server/src/assets/translations/de/server.json @@ -216,13 +216,13 @@ "launch-bar-templates-title": "Startleiste Vorlagen", "base-abstract-launcher-title": "Basis Abstrakte Startleiste", "command-launcher-title": "Befehlslauncher", - "note-launcher-title": "Notiz Launcher", + "note-launcher-title": "Notiz-Starter", "script-launcher-title": "Skript-Starter", "built-in-widget-title": "Eingebautes Widget", "spacer-title": "Freifeld", "custom-widget-title": "Benutzerdefiniertes Widget", "launch-bar-title": "Launchbar", - "available-launchers-title": "Verfügbare Launchers", + "available-launchers-title": "Verfügbare Starter", "go-to-previous-note-title": "Zur vorherigen Notiz gehen", "go-to-next-note-title": "Zur nächsten Notiz gehen", "new-note-title": "Neue Notiz", @@ -248,7 +248,7 @@ "sync-title": "Synchronisation", "other": "Weitere", "advanced-title": "Erweitert", - "visible-launchers-title": "Sichtbare Launcher", + "visible-launchers-title": "Sichtbare Starter", "user-guide": "Nutzerhandbuch", "jump-to-note-title": "Springe zu...", "llm-chat-title": "Chat mit Notizen", From 81d964d3e8f3dce5bbfd285d8e701f9bece0fe4f Mon Sep 17 00:00:00 2001 From: MarcelWie <marcel.wiechmann@gmail.com> Date: Mon, 26 Jan 2026 00:14:03 +0100 Subject: [PATCH 278/353] Translated using Weblate (German) Currently translated at 100.0% (1763 of 1763 strings) Translation: Trilium Notes/Client Translate-URL: https://hosted.weblate.org/projects/trilium/client/de/ --- apps/client/src/translations/de/translation.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/client/src/translations/de/translation.json b/apps/client/src/translations/de/translation.json index 4b3acf567f..6d3fbf5cb6 100644 --- a/apps/client/src/translations/de/translation.json +++ b/apps/client/src/translations/de/translation.json @@ -1612,7 +1612,7 @@ "not_executed": "Die Abfrage wurde noch nicht ausgeführt.", "failed": "SQL-Abfrage ist fehlgeschlagen", "execute_now": "Jetzt ausführen", - "statement_result": "Anweisung Ergebnis" + "statement_result": "Abfrageergebnis" }, "sql_table_schemas": { "tables": "Tabellen" From 9462ccc6501e153ff71ceb5bf0eb735901685ced Mon Sep 17 00:00:00 2001 From: MarcelWie <marcel.wiechmann@gmail.com> Date: Mon, 26 Jan 2026 00:21:28 +0100 Subject: [PATCH 279/353] Translated using Weblate (German) Currently translated at 100.0% (152 of 152 strings) Translation: Trilium Notes/Website Translate-URL: https://hosted.weblate.org/projects/trilium/website/de/ --- apps/website/src/translations/de/translation.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/website/src/translations/de/translation.json b/apps/website/src/translations/de/translation.json index dcbc5e3861..b162d9dce9 100644 --- a/apps/website/src/translations/de/translation.json +++ b/apps/website/src/translations/de/translation.json @@ -91,7 +91,7 @@ "download_helper_server_docker": { "title": "Self-hosted mit Docker", "description": "Schnelle Installation auf Windows, Linux oder macOS mit einem Docker-Container.", - "download_dockerhub": "Docker-Hub", + "download_dockerhub": "Docker Hub", "download_ghcr": "ghcr.io" }, "download_helper_desktop_linux": { From 0c72bd1539b8f0c23074f83838cd2e4202d9e7af Mon Sep 17 00:00:00 2001 From: MarcelWie <marcel.wiechmann@gmail.com> Date: Mon, 26 Jan 2026 00:19:13 +0100 Subject: [PATCH 280/353] Translated using Weblate (German) Currently translated at 100.0% (1763 of 1763 strings) Translation: Trilium Notes/Client Translate-URL: https://hosted.weblate.org/projects/trilium/client/de/ --- apps/client/src/translations/de/translation.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/client/src/translations/de/translation.json b/apps/client/src/translations/de/translation.json index 6d3fbf5cb6..2216634237 100644 --- a/apps/client/src/translations/de/translation.json +++ b/apps/client/src/translations/de/translation.json @@ -1595,7 +1595,7 @@ "last_modified": "Bearbeitet am <Value />", "note_type_switcher_label": "Ändere von {{type}} zu:", "note_type_switcher_others": "Andere Notizart", - "note_type_switcher_templates": "Vorlagen", + "note_type_switcher_templates": "Vorlage", "note_type_switcher_collection": "Sammlung", "edited_notes": "Notizen, bearbeitet an diesem Tag", "promoted_attributes": "Hervorgehobene Attribute" From 2b7a7a87679141efe8193aa9e45b238a17563a8d Mon Sep 17 00:00:00 2001 From: MarcelWie <marcel.wiechmann@gmail.com> Date: Mon, 26 Jan 2026 00:25:18 +0100 Subject: [PATCH 281/353] Translated using Weblate (German) Currently translated at 100.0% (388 of 388 strings) Translation: Trilium Notes/Server Translate-URL: https://hosted.weblate.org/projects/trilium/server/de/ --- apps/server/src/assets/translations/de/server.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/server/src/assets/translations/de/server.json b/apps/server/src/assets/translations/de/server.json index 8037825bcb..127b28bd71 100644 --- a/apps/server/src/assets/translations/de/server.json +++ b/apps/server/src/assets/translations/de/server.json @@ -221,7 +221,7 @@ "built-in-widget-title": "Eingebautes Widget", "spacer-title": "Freifeld", "custom-widget-title": "Benutzerdefiniertes Widget", - "launch-bar-title": "Launchbar", + "launch-bar-title": "Starterleiste", "available-launchers-title": "Verfügbare Starter", "go-to-previous-note-title": "Zur vorherigen Notiz gehen", "go-to-next-note-title": "Zur nächsten Notiz gehen", From a487a502f53828071a7d591aa433fab416805984 Mon Sep 17 00:00:00 2001 From: MarcelWie <marcel.wiechmann@gmail.com> Date: Mon, 26 Jan 2026 00:25:33 +0100 Subject: [PATCH 282/353] Translated using Weblate (German) Currently translated at 100.0% (1763 of 1763 strings) Translation: Trilium Notes/Client Translate-URL: https://hosted.weblate.org/projects/trilium/client/de/ --- apps/client/src/translations/de/translation.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/client/src/translations/de/translation.json b/apps/client/src/translations/de/translation.json index 2216634237..624d244040 100644 --- a/apps/client/src/translations/de/translation.json +++ b/apps/client/src/translations/de/translation.json @@ -645,7 +645,7 @@ "zoom_out": "Herauszoomen", "reset_zoom_level": "Zoomstufe zurücksetzen", "zoom_in": "Hineinzoomen", - "configure_launchbar": "Konfiguriere die Launchbar", + "configure_launchbar": "Konfiguriere die Starterleiste", "show_shared_notes_subtree": "Unterbaum „Freigegebene Notizen“ anzeigen", "advanced": "Erweitert", "open_dev_tools": "Öffne die Entwicklungstools", @@ -1605,7 +1605,7 @@ "search_not_executed": "Die Suche wurde noch nicht ausgeführt. Klicke oben auf „Suchen“, um die Ergebnisse anzuzeigen." }, "spacer": { - "configure_launchbar": "Startleiste konfigurieren" + "configure_launchbar": "Starterleiste konfigurieren" }, "sql_result": { "no_rows": "Es wurden keine Zeilen für diese Abfrage zurückgegeben", From 494e23b69f8420e7bbedc7bd28809bde89a4dc7b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Antonio=20Sanchez=20Castell=C3=B3n?= <angelfx19@gmail.com> Date: Mon, 26 Jan 2026 01:06:50 +0100 Subject: [PATCH 283/353] Translated using Weblate (Spanish) Currently translated at 100.0% (116 of 116 strings) Translation: Trilium Notes/README Translate-URL: https://hosted.weblate.org/projects/trilium/readme/es/ --- docs/README-es.md | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/docs/README-es.md b/docs/README-es.md index d39610988b..48c4146884 100644 --- a/docs/README-es.md +++ b/docs/README-es.md @@ -97,8 +97,8 @@ La documentación está disponible en varios formatos: inicio de sesión más seguro * [Sincronización](https://docs.triliumnotes.org/user-guide/setup/synchronization) con servidor de sincronización autohospedado - * there are [3rd party services for hosting synchronisation - server](https://docs.triliumnotes.org/user-guide/setup/server/cloud-hosting) + * existen [servicios de terceros para alojar servidores de + sincronización](https://docs.triliumnotes.org/user-guide/setup/server/cloud-hosting) * [Compartir](https://docs.triliumnotes.org/user-guide/advanced-usage/sharing) (publicar) notas en Internet público * Fuerte [cifrado de @@ -106,10 +106,11 @@ La documentación está disponible en varios formatos: con granularidad por nota * Esbozo de diagramas, basado en [Excalidraw](https://excalidraw.com/) (tipo de nota "lienzo") -* [Relation - maps](https://docs.triliumnotes.org/user-guide/note-types/relation-map) and - [note/link maps](https://docs.triliumnotes.org/user-guide/note-types/note-map) - for visualizing notes and their relations +* [Mapas de + relaciones](https://docs.triliumnotes.org/user-guide/note-types/relation-map) + y [mapas de + notas/enlaces](https://docs.triliumnotes.org/user-guide/note-types/note-map) + para visualizar notas y sus relaciones * Mapas mentales, basados en [Mind Elixir](https://docs.mind-elixir.com/) * [Mapas geográficos](https://docs.triliumnotes.org/user-guide/collections/geomap) con @@ -134,8 +135,8 @@ La documentación está disponible en varios formatos: guardar fácilmente contenido web * Interfaz personalizable (botones de la barra lateral, widgets definidos por el usuario, …) -* [Metrics](https://docs.triliumnotes.org/user-guide/advanced-usage/metrics), - along with a Grafana Dashboard. +* [Métricas](https://docs.triliumnotes.org/user-guide/advanced-usage/metrics), + junto con un panel de control de Grafana. ✨ Consulta los siguientes recursos y comunidades de terceros para obtener más contenido relacionado con TriliumNext: From 7af4fbfccef5058f1714eb03daf79216d933ddea Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Antonio=20Sanchez=20Castell=C3=B3n?= <angelfx19@gmail.com> Date: Mon, 26 Jan 2026 01:08:53 +0100 Subject: [PATCH 284/353] Translated using Weblate (Spanish) Currently translated at 93.5% (1650 of 1763 strings) Translation: Trilium Notes/Client Translate-URL: https://hosted.weblate.org/projects/trilium/client/es/ --- apps/client/src/translations/es/translation.json | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/apps/client/src/translations/es/translation.json b/apps/client/src/translations/es/translation.json index 7e0ae3c694..b9aa2a0178 100644 --- a/apps/client/src/translations/es/translation.json +++ b/apps/client/src/translations/es/translation.json @@ -28,7 +28,10 @@ }, "widget-render-error": { "title": "Hubo un fallo al renderizar un widget personalizado de React" - } + }, + "widget-missing-parent": "El widget personalizado no tiene definida la propiedad obligatoria '{{property}}'.\n\nSi este script está pensado para ejecutarse sin un elemento de interfaz de usuario, utilice '#run=frontendStartup' en su lugar.", + "open-script-note": "Abrir script", + "scripting-error": "Error en script personalizado: {{title}}" }, "add_link": { "add_link": "Agregar enlace", @@ -211,7 +214,8 @@ "info": { "modalTitle": "Mensaje informativo", "closeButton": "Cerrar", - "okButton": "Aceptar" + "okButton": "Aceptar", + "copy_to_clipboard": "Copiar al portapapeles" }, "jump_to_note": { "search_button": "Buscar en texto completo", @@ -697,7 +701,10 @@ "convert_into_attachment_successful": "La nota '{{title}}' ha sido convertida a un archivo adjunto.", "convert_into_attachment_prompt": "¿Está seguro que desea convertir la nota '{{title}}' en un archivo adjunto de la nota padre?", "print_pdf": "Exportar como PDF...", - "open_note_on_server": "Abrir nota en servidor" + "open_note_on_server": "Abrir nota en servidor", + "view_revisions": "Revisiones de la nota...", + "advanced": "Avanzado", + "export_as_image": "Exportar como imagen" }, "onclick_button": { "no_click_handler": "El widget de botón '{{componentId}}' no tiene un controlador de clics definido" From 1ab7b91f2e7ca924dfce8520fbb8ffcb633104e8 Mon Sep 17 00:00:00 2001 From: MarcelWie <marcel.wiechmann@gmail.com> Date: Mon, 26 Jan 2026 01:39:42 +0100 Subject: [PATCH 285/353] Translated using Weblate (German) Currently translated at 100.0% (1763 of 1763 strings) Translation: Trilium Notes/Client Translate-URL: https://hosted.weblate.org/projects/trilium/client/de/ --- .../src/translations/de/translation.json | 26 +++++++++---------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/apps/client/src/translations/de/translation.json b/apps/client/src/translations/de/translation.json index 624d244040..d75ce7a5d4 100644 --- a/apps/client/src/translations/de/translation.json +++ b/apps/client/src/translations/de/translation.json @@ -421,7 +421,7 @@ "execute_description": "Längere Beschreibung der aktuellen Codenotiz, die zusammen mit der Schaltfläche „Ausführen“ angezeigt wird", "exclude_from_note_map": "Notizen mit dieser Bezeichnung werden in der Notizenkarte ausgeblendet", "new_notes_on_top": "Neue Notizen werden oben in der übergeordneten Notiz erstellt, nicht unten.", - "hide_highlight_widget": "Widget „Hervorhebungsliste“ ausblenden", + "hide_highlight_widget": "Widget „Markierungsliste“ ausblenden", "run_on_note_creation": "Wird ausgeführt, wenn eine Notiz im Backend erstellt wird. Verwende diese Beziehung, wenn du das Skript für alle Notizen ausführen möchtest, die unter einer bestimmten Unternotiz erstellt wurden. Erstelle es in diesem Fall auf der Unternotiz-Stammnotiz und mache es vererbbar. Eine neue Notiz, die innerhalb der Unternotiz (beliebige Tiefe) erstellt wird, löst das Skript aus.", "run_on_child_note_creation": "Wird ausgeführt, wenn eine neue Notiz unter der Notiz erstellt wird, in der diese Beziehung definiert ist", "run_on_note_title_change": "Wird ausgeführt, wenn der Notiztitel geändert wird (einschließlich der Notizerstellung)", @@ -632,7 +632,7 @@ "show_toc": "Inhaltsverzeichnis anzeigen" }, "show_highlights_list_widget_button": { - "show_highlights_list": "Hervorhebungen anzeigen" + "show_highlights_list": "Markierungsliste anzeigen" }, "global_menu": { "menu": "Menü", @@ -1266,16 +1266,16 @@ "markdown": "Markdown-Stil" }, "highlights_list": { - "title": "Highlights-Liste", - "description": "Du kannst die im rechten Bereich angezeigte Highlights-Liste anpassen:", + "title": "Markierungsliste", + "description": "Du kannst die im rechten Bereich angezeigte Markierungsliste anpassen:", "bold": "Fettgedruckter Text", "italic": "Kursiver Text", "underline": "Unterstrichener Text", "color": "Farbiger Text", "bg_color": "Text mit Hintergrundfarbe", - "visibility_title": "Sichtbarkeit der Highlights-Liste", - "visibility_description": "Du kannst das Hervorhebungs-Widget pro Notiz ausblenden, indem du die Beschriftung #hideHighlightWidget hinzufügst.", - "shortcut_info": "Du kannst eine Tastenkombination zum schnellen Umschalten des rechten Bereichs (einschließlich Hervorhebungen) in den Optionen -> Tastenkombinationen konfigurieren (Name „toggleRightPane“)." + "visibility_title": "Sichtbarkeit der Markierungsliste", + "visibility_description": "Du kannst das Markierungs-Widget pro Notiz ausblenden, indem du die Beschriftung #hideHighlightWidget hinzufügst.", + "shortcut_info": "Du kannst eine Tastenkombination zum schnellen Umschalten des rechten Bereichs (einschließlich Markierungen) in den Optionen -> Tastenkombinationen konfigurieren (Name „toggleRightPane“)." }, "table_of_contents": { "title": "Inhaltsverzeichnis", @@ -1535,13 +1535,13 @@ "replace_all": "Alle Ersetzen" }, "highlights_list_2": { - "title": "Hervorhebungs-Liste", + "title": "Markierungsliste", "options": "Optionen", - "title_with_count_one": "{{count}} Highlight", - "title_with_count_other": "{{count}} Highlights", - "modal_title": "Highlight Liste konfigurieren", - "menu_configure": "Highlight Liste konfigurieren…", - "no_highlights": "Keine Highlights gefunden." + "title_with_count_one": "{{count}} Markierung", + "title_with_count_other": "{{count}} Markierungen", + "modal_title": "Markierungsliste konfigurieren", + "menu_configure": "Markierungsliste konfigurieren…", + "no_highlights": "Keine Markierungen gefunden." }, "quick-search": { "placeholder": "Schnellsuche", From 4c51c8e8f888e365addb3eaab762160e16d3ffc8 Mon Sep 17 00:00:00 2001 From: MarcelWie <marcel.wiechmann@gmail.com> Date: Mon, 26 Jan 2026 01:35:07 +0100 Subject: [PATCH 286/353] Translated using Weblate (German) Currently translated at 100.0% (116 of 116 strings) Translation: Trilium Notes/README Translate-URL: https://hosted.weblate.org/projects/trilium/readme/de/ --- docs/README-de.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/README-de.md b/docs/README-de.md index 00cfe89340..051d0af07a 100644 --- a/docs/README-de.md +++ b/docs/README-de.md @@ -301,7 +301,7 @@ enthält weitere Details. Bei offenen Fragen kann über die im Abschnitt * [Thomas Frei](https://github.com/thfrei) für seine originelle Arbeit an Canvas. * [antoniotejada](https://github.com/nriver) für das ursprüngliche - Syntax-Highlighting-Widget. + Syntaxhervorhebungs-Widget. * [Dosu](https://dosu.dev/) für die Bereitstellung automatisierter Antworten auf GitHub-Issues und Diskussionen. * [Tabler-Icons](https://tabler.io/icons) für die Symbole in der Taskleiste. From 4cdf6d82926820de405ff2ba3885caa0fda662f8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Antonio=20Sanchez=20Castell=C3=B3n?= <angelfx19@gmail.com> Date: Mon, 26 Jan 2026 01:17:51 +0100 Subject: [PATCH 287/353] Translated using Weblate (Spanish) Currently translated at 94.2% (1662 of 1763 strings) Translation: Trilium Notes/Client Translate-URL: https://hosted.weblate.org/projects/trilium/client/es/ --- .../src/translations/es/translation.json | 22 ++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/apps/client/src/translations/es/translation.json b/apps/client/src/translations/es/translation.json index b9aa2a0178..5ba611b671 100644 --- a/apps/client/src/translations/es/translation.json +++ b/apps/client/src/translations/es/translation.json @@ -704,7 +704,10 @@ "open_note_on_server": "Abrir nota en servidor", "view_revisions": "Revisiones de la nota...", "advanced": "Avanzado", - "export_as_image": "Exportar como imagen" + "export_as_image": "Exportar como imagen", + "export_as_image_png": "PNG (ráster)", + "export_as_image_svg": "SVG (vectorial)", + "note_map": "Mapa de la nota" }, "onclick_button": { "no_click_handler": "El widget de botón '{{componentId}}' no tiene un controlador de clics definido" @@ -766,7 +769,13 @@ "reset-default": "Restablecer a icono por defecto", "search_placeholder_one": "Buscar {{number}} icono a través de {{count}} paquetes", "search_placeholder_many": "Buscar {{number}} iconos a través de {{count}} paquetes", - "search_placeholder_other": "Buscar {{number}} iconos a través de {{count}} paquetes" + "search_placeholder_other": "Buscar {{number}} iconos a través de {{count}} paquetes", + "search_placeholder_filtered": "Buscar {{number}} iconos en {{name}}", + "filter": "Filtro", + "filter-none": "Todos los iconos", + "filter-default": "Iconos predeterminados", + "icon_tooltip": "{{name}}\nPaquete de iconos: {{iconPack}}", + "no_results": "No se encontraron iconos." }, "basic_properties": { "note_type": "Tipo de nota", @@ -793,7 +802,8 @@ "expand_tooltip": "Expande las notas hijas inmediatas de esta colección (un nivel). Para más opciones, pulsa la flecha a la derecha.", "expand_first_level": "Expandir hijos inmediatos", "expand_nth_level": "Expandir {{depth}} niveles", - "expand_all_levels": "Expandir todos los niveles" + "expand_all_levels": "Expandir todos los niveles", + "hide_child_notes": "Ocultar notas hijas en el árbol" }, "edited_notes": { "no_edited_notes_found": "Aún no hay notas editadas en este día...", @@ -826,7 +836,8 @@ }, "inherited_attribute_list": { "title": "Atributos heredados", - "no_inherited_attributes": "Sin atributos heredados." + "no_inherited_attributes": "Sin atributos heredados.", + "none": "ninguno" }, "note_info_widget": { "note_id": "ID de nota", @@ -837,7 +848,8 @@ "note_size_info": "El tamaño de la nota proporciona una estimación aproximada de los requisitos de almacenamiento para esta nota. Toma en cuenta el contenido de la nota y el contenido de sus revisiones de nota.", "calculate": "calcular", "subtree_size": "(tamaño del subárbol: {{size}} en {{count}} notas)", - "title": "Información de nota" + "title": "Información de nota", + "mime": "Tipo MIME" }, "note_map": { "open_full": "Ampliar al máximo", From 4979a1b22415bc5ca16b3b18a58d6a2feb02a431 Mon Sep 17 00:00:00 2001 From: MarcelWie <marcel.wiechmann@gmail.com> Date: Mon, 26 Jan 2026 01:40:20 +0100 Subject: [PATCH 288/353] Translated using Weblate (German) Currently translated at 100.0% (1763 of 1763 strings) Translation: Trilium Notes/Client Translate-URL: https://hosted.weblate.org/projects/trilium/client/de/ --- apps/client/src/translations/de/translation.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/client/src/translations/de/translation.json b/apps/client/src/translations/de/translation.json index d75ce7a5d4..a5b83e24ae 100644 --- a/apps/client/src/translations/de/translation.json +++ b/apps/client/src/translations/de/translation.json @@ -1701,7 +1701,7 @@ }, "code_block": { "word_wrapping": "Wortumbruch", - "theme_none": "Keine Syntax-Hervorhebung", + "theme_none": "Keine Syntaxhervorhebung", "theme_group_light": "Helle Themen", "theme_group_dark": "Dunkle Themen", "copy_title": "Kopiere in Zwischenablage" From a24ab7ca06b70c3593b1edb254530792ea95be11 Mon Sep 17 00:00:00 2001 From: Jason Kuanca <jhekhaa@gmail.com> Date: Mon, 26 Jan 2026 06:13:57 +0100 Subject: [PATCH 289/353] Translated using Weblate (Indonesian) Currently translated at 16.4% (25 of 152 strings) Translation: Trilium Notes/Website Translate-URL: https://hosted.weblate.org/projects/trilium/website/id/ --- apps/website/src/translations/id/translation.json | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/apps/website/src/translations/id/translation.json b/apps/website/src/translations/id/translation.json index 6c8074293a..ca3c632965 100644 --- a/apps/website/src/translations/id/translation.json +++ b/apps/website/src/translations/id/translation.json @@ -18,6 +18,18 @@ "title": "Organisasi", "note_structure_title": "Struktur catatan", "note_structure_description": "Catatan dapat disusun secara hirarkis. Tidak perlu folder, karena setiap catatan dapat mengandung catatan anak. Satu catatan dapat ditambah di beberapa tempat sekaligus dalam hirarki.", - "attributes_title": "Label dan hubungan catatan" + "attributes_title": "Label dan hubungan catatan", + "attributes_description": "Gunakan relasi antar catatan atau tambahkan label untuk kategorisasi yang mudah. Gunakan atribut utama untuk memasukkan informasi terstruktur yang dapat digunakan dalam tabel atau papan (boards).", + "hoisting_title": "Workspace dan Area Fokus", + "hoisting_description": "Dengan mudah memisahkan catatan personal dan kerjaan dengan grouping dalam workspace, fokus hanya ke catatan-catatan yang spesifik di workspace tertentu." + }, + "productivity_benefits": { + "title": "Produktivitas dan Keamanan", + "revisions_title": "Revisi Catatan", + "revisions_content": "Catatan akan secara periodik disimpan dalam bentuk revisi secara otomatis dan versi revisi-revisi bisa digunakan untuk mengulas kembali atau melakukan undo jika ada kesalahan atau perubahan yang tidak disengaja. Versi revisi juga bisa dibuat sesuai kebutuhan.", + "sync_title": "Sinkronisasi", + "sync_content": "Gunakan hostinganmu sendiri atau instansi cloud untuk sinkronisasi mudah catatan-catatan anda pada beberapa perangkat, dan untuk akses dari ponsel anda dengan PWA.", + "search_content": "Atau cari teks di dalam catatan lalu lebih dalam dengan cari catatan induk, atau berdasarkan kedalaman.", + "web_clipper_title": "Penyemat Web" } } From a0e6023810065e12fe504901c349ccfb2dd74e24 Mon Sep 17 00:00:00 2001 From: Jason Kuanca <jhekhaa@gmail.com> Date: Mon, 26 Jan 2026 06:16:16 +0100 Subject: [PATCH 290/353] Translated using Weblate (Indonesian) Currently translated at 23.2% (27 of 116 strings) Translation: Trilium Notes/README Translate-URL: https://hosted.weblate.org/projects/trilium/readme/id/ --- docs/README-id.md | 33 +++++++++++++++++---------------- 1 file changed, 17 insertions(+), 16 deletions(-) diff --git a/docs/README-id.md b/docs/README-id.md index 3a74efc087..5949b27702 100644 --- a/docs/README-id.md +++ b/docs/README-id.md @@ -69,19 +69,20 @@ Dokumentasi kami tersedia dalam berbagai format: ## 🎁 Fitur -* Notes can be arranged into arbitrarily deep tree. Single note can be placed - into multiple places in the tree (see - [cloning](https://docs.triliumnotes.org/user-guide/concepts/notes/cloning)) -* Rich WYSIWYG note editor including e.g. tables, images and - [math](https://docs.triliumnotes.org/user-guide/note-types/text) with markdown +* Catatan dapat disusun menjadi cabang pohon manapun. Satu catatan dapat disusun + ke beberapa cabang di pohon + (lihat[cloning](https://docs.triliumnotes.org/user-guide/concepts/notes/cloning)) +* Catatan bentuk Rich WYSIWYG dengan tabel, gambar, dan + [math](https://docs.triliumnotes.org/user-guide/note-types/text) dengan + markdown [autoformat](https://docs.triliumnotes.org/user-guide/note-types/text/markdown-formatting) -* Support for editing [notes with source - code](https://docs.triliumnotes.org/user-guide/note-types/code), including - syntax highlighting -* Fast and easy [navigation between - notes](https://docs.triliumnotes.org/user-guide/concepts/navigation/note-navigation), - full text search and [note - hoisting](https://docs.triliumnotes.org/user-guide/concepts/navigation/note-hoisting) +* Dukungan untuk peng-editan [catatan dengan kode + source](https://docs.triliumnotes.org/user-guide/note-types/code), termasuk + penyorotan sintaks +* Cepat dan mudah [navigasi antar + catatan](https://docs.triliumnotes.org/user-guide/concepts/navigation/note-navigation), + pencarian dengan teks dan [area + fokus](https://docs.triliumnotes.org/user-guide/concepts/navigation/note-hoisting) * Seamless [note versioning](https://docs.triliumnotes.org/user-guide/concepts/notes/note-revisions) * Note @@ -95,10 +96,10 @@ Dokumentasi kami tersedia dalam berbagai format: more secure login * [Synchronization](https://docs.triliumnotes.org/user-guide/setup/synchronization) with self-hosted sync server - * there are [3rd party services for hosting synchronisation - server](https://docs.triliumnotes.org/user-guide/setup/server/cloud-hosting) -* [Sharing](https://docs.triliumnotes.org/user-guide/advanced-usage/sharing) - (publishing) notes to public internet + * ada [servis pihak ke-3 untuk server hostingan + sinkronisasi](https://docs.triliumnotes.org/user-guide/setup/server/cloud-hosting) +* [Bagikan](https://docs.triliumnotes.org/user-guide/advanced-usage/sharing) + (publikasi) catatan ke publik (internet) * Strong [note encryption](https://docs.triliumnotes.org/user-guide/concepts/notes/protected-notes) with per-note granularity From 6a70c52bd16367f00f105c6a96e21c3d3736ddd3 Mon Sep 17 00:00:00 2001 From: Jason Kuanca <jhekhaa@gmail.com> Date: Mon, 26 Jan 2026 06:14:58 +0100 Subject: [PATCH 291/353] Translated using Weblate (Indonesian) Currently translated at 1.3% (24 of 1763 strings) Translation: Trilium Notes/Client Translate-URL: https://hosted.weblate.org/projects/trilium/client/id/ --- apps/client/src/translations/id/translation.json | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/apps/client/src/translations/id/translation.json b/apps/client/src/translations/id/translation.json index 3b63a0c24f..3e84959765 100644 --- a/apps/client/src/translations/id/translation.json +++ b/apps/client/src/translations/id/translation.json @@ -26,11 +26,19 @@ "widget-list-error": { "title": "Gagal mendapatkan daftar widget dari server" }, - "open-script-note": "Buka skrip catatan" + "open-script-note": "Buka skrip catatan", + "widget-render-error": { + "title": "Gagal render widget React custom" + }, + "widget-missing-parent": "Widget custom '{{property}}' tidak terdefinisi.\n\nJika skrip ini bermaksud untuk bisa dijalankan tanpa elemen UI, gunakanlah '#run=frontendStartup'.", + "scripting-error": "Skrip custom eror : {{title}}" }, "add_link": { "add_link": "Tambah tautan", "help_on_links": "Bantuan pada tautan", "note": "Catatan" + }, + "branch_prefix": { + "edit_branch_prefix_multiple": "Edit prefiks cabang untuk {{count}} cabang" } } From 1c215199602eec8dc3253a835130f702eb254970 Mon Sep 17 00:00:00 2001 From: "Francis C." <normitomf@gmail.com> Date: Mon, 26 Jan 2026 03:26:19 +0100 Subject: [PATCH 292/353] Translated using Weblate (Chinese (Traditional Han script)) Currently translated at 100.0% (1763 of 1763 strings) Translation: Trilium Notes/Client Translate-URL: https://hosted.weblate.org/projects/trilium/client/zh_Hant/ --- apps/client/src/translations/tw/translation.json | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/apps/client/src/translations/tw/translation.json b/apps/client/src/translations/tw/translation.json index aa57306ed5..d4ef14f53a 100644 --- a/apps/client/src/translations/tw/translation.json +++ b/apps/client/src/translations/tw/translation.json @@ -1566,6 +1566,7 @@ "shared-indicator-tooltip": "此筆記已公開分享", "shared-indicator-tooltip-with-url": "此筆記已公開分享至:{{- url}}", "subtree-hidden-tooltip_one": "從樹中隱藏的 {{count}} 篇子筆記", + "subtree-hidden-tooltip_other": "", "subtree-hidden-moved-title": "已新增至 {{title}}", "subtree-hidden-moved-description-collection": "此集合隱藏其樹中的子筆記。", "subtree-hidden-moved-description-other": "子筆記隱藏於此筆記的樹中。" @@ -1602,7 +1603,11 @@ "configure_launchbar": "設定啟動欄" }, "sql_result": { - "no_rows": "此次查詢沒有返回任何數據" + "no_rows": "此次查詢沒有返回任何數據", + "not_executed": "查詢尚未執行。", + "failed": "SQL 查詢執行失敗", + "statement_result": "查詢結果", + "execute_now": "立即執行" }, "sql_table_schemas": { "tables": "表" From 4cac419a2682d70c64b783e8f774e27f4cd9b088 Mon Sep 17 00:00:00 2001 From: Jason Kuanca <jhekhaa@gmail.com> Date: Mon, 26 Jan 2026 06:35:42 +0100 Subject: [PATCH 293/353] Translated using Weblate (Indonesian) Currently translated at 31.0% (36 of 116 strings) Translation: Trilium Notes/README Translate-URL: https://hosted.weblate.org/projects/trilium/readme/id/ --- docs/README-id.md | 42 ++++++++++++++++++++++-------------------- 1 file changed, 22 insertions(+), 20 deletions(-) diff --git a/docs/README-id.md b/docs/README-id.md index 5949b27702..2d9e1d527c 100644 --- a/docs/README-id.md +++ b/docs/README-id.md @@ -100,26 +100,28 @@ Dokumentasi kami tersedia dalam berbagai format: sinkronisasi](https://docs.triliumnotes.org/user-guide/setup/server/cloud-hosting) * [Bagikan](https://docs.triliumnotes.org/user-guide/advanced-usage/sharing) (publikasi) catatan ke publik (internet) -* Strong [note - encryption](https://docs.triliumnotes.org/user-guide/concepts/notes/protected-notes) - with per-note granularity -* Sketching diagrams, based on [Excalidraw](https://excalidraw.com/) (note type - "canvas") -* [Relation - maps](https://docs.triliumnotes.org/user-guide/note-types/relation-map) and - [note/link maps](https://docs.triliumnotes.org/user-guide/note-types/note-map) - for visualizing notes and their relations -* Mind maps, based on [Mind Elixir](https://docs.mind-elixir.com/) -* [Geo maps](https://docs.triliumnotes.org/user-guide/collections/geomap) with - location pins and GPX tracks -* [Scripting](https://docs.triliumnotes.org/user-guide/scripts) - see [Advanced - showcases](https://docs.triliumnotes.org/user-guide/advanced-usage/advanced-showcases) -* [REST API](https://docs.triliumnotes.org/user-guide/advanced-usage/etapi) for - automation -* Scales well in both usability and performance upwards of 100 000 notes -* Touch optimized [mobile - frontend](https://docs.triliumnotes.org/user-guide/setup/mobile-frontend) for - smartphones and tablets +* Kuat [enkripsi + catatan](https://docs.triliumnotes.org/user-guide/concepts/notes/protected-notes) + dengan granularitas per catatan +* Membuat diagram, berdasarkan [Excalidraw](https://excalidraw.com/) (tipe + catatan "kanvas") +* [Peta + relasi](https://docs.triliumnotes.org/user-guide/note-types/relation-map) dan + [peta + catatan/link](https://docs.triliumnotes.org/user-guide/note-types/note-map) + untuk visualisasi relasi antar catatan. +* Mind maps, berdasarkan [Mind Elixir](https://docs.mind-elixir.com/) +* [Peta geolokasi](https://docs.triliumnotes.org/user-guide/collections/geomap) + dengan titik lokasi dan jalur GPX +* [Pengunaan skrip](https://docs.triliumnotes.org/user-guide/scripts) - lihat + [Demo tingkat + lanjut](https://docs.triliumnotes.org/user-guide/advanced-usage/advanced-showcases) +* [REST API](https://docs.triliumnotes.org/user-guide/advanced-usage/etapi) + untuk otomatisasi +* Performa dan Usabilitas tinggi, bahkan di atas 100 000 catatan +* Teroptimisasi untuk kontrol sentuh [frontend + mobile](https://docs.triliumnotes.org/user-guide/setup/mobile-frontend) untuk + hp dan tablet * Built-in [dark theme](https://docs.triliumnotes.org/user-guide/concepts/themes), support for user themes From d84411118799880b4a0cd40615431a16355fc05c Mon Sep 17 00:00:00 2001 From: Jason Kuanca <jhekhaa@gmail.com> Date: Mon, 26 Jan 2026 06:34:54 +0100 Subject: [PATCH 294/353] Translated using Weblate (Indonesian) Currently translated at 22.3% (34 of 152 strings) Translation: Trilium Notes/Website Translate-URL: https://hosted.weblate.org/projects/trilium/website/id/ --- apps/website/src/translations/id/translation.json | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/apps/website/src/translations/id/translation.json b/apps/website/src/translations/id/translation.json index ca3c632965..52e1cd2faf 100644 --- a/apps/website/src/translations/id/translation.json +++ b/apps/website/src/translations/id/translation.json @@ -30,6 +30,17 @@ "sync_title": "Sinkronisasi", "sync_content": "Gunakan hostinganmu sendiri atau instansi cloud untuk sinkronisasi mudah catatan-catatan anda pada beberapa perangkat, dan untuk akses dari ponsel anda dengan PWA.", "search_content": "Atau cari teks di dalam catatan lalu lebih dalam dengan cari catatan induk, atau berdasarkan kedalaman.", - "web_clipper_title": "Penyemat Web" + "web_clipper_title": "Penyemat Web", + "web_clipper_content": "Mengambil halaman web (atau foto halaman web) dan disematkan langsung ke catatan Trilium dengan ekstensi browser penyemat web." + }, + "note_types": { + "title": "Cara-cara menampilkan informasi Anda", + "text_title": "Catatan teks", + "text_description": "Catatan-catatan ini diedit dengan editor visual (WYSIWYG), dengan dukungan tabel, gambar, ekspresi matematika, blok kode dengan penyorotan sintaks. Format teks catatan anda dengan sintaks Markdown atau gunakan fungsi panggilan slash(/).", + "code_title": "Catatan kode", + "code_description": "Gunakan editor khusus untuk kode source yang besar yang mempunyai penyorotan sintaks untuk banyak bahasa pemograman dengan tema-tema warna yang bervariasi.", + "file_title": "Catatan file", + "file_description": "Sematkan file multimedia (PDF, gambar, video) dengan pratinjau dalam aplikasi.", + "canvas_title": "Kanvas" } } From fbcf974c739d12a27e50605744b0f318c6d060cc Mon Sep 17 00:00:00 2001 From: Jason Kuanca <jhekhaa@gmail.com> Date: Mon, 26 Jan 2026 06:34:53 +0100 Subject: [PATCH 295/353] Translated using Weblate (Indonesian) Currently translated at 1.8% (33 of 1763 strings) Translation: Trilium Notes/Client Translate-URL: https://hosted.weblate.org/projects/trilium/client/id/ --- apps/client/src/translations/id/translation.json | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/apps/client/src/translations/id/translation.json b/apps/client/src/translations/id/translation.json index 3e84959765..407966304a 100644 --- a/apps/client/src/translations/id/translation.json +++ b/apps/client/src/translations/id/translation.json @@ -39,6 +39,17 @@ "note": "Catatan" }, "branch_prefix": { - "edit_branch_prefix_multiple": "Edit prefiks cabang untuk {{count}} cabang" + "edit_branch_prefix_multiple": "Edit prefiks cabang untuk {{count}} cabang", + "help_on_tree_prefix": "Bantuan pada prefiks pohon catatan", + "prefix": "Prefiks: ", + "save": "Simpan", + "branch_prefix_saved": "Prefiks cabang telah disimpan.", + "branch_prefix_saved_multiple": "Prefix cabang telah disimpan pada {{count}} cabang.", + "affected_branches": "Cabang terdampak ({{count}}):" + }, + "bulk_actions": { + "bulk_actions": "Aksi borongan", + "affected_notes": "Catatan terdampak", + "include_descendants": "Sertakan anakan dari catatan yang dipilih" } } From 5b10e33e72ae7015399b7b9fa35fe25453947b21 Mon Sep 17 00:00:00 2001 From: Jason Kuanca <jhekhaa@gmail.com> Date: Mon, 26 Jan 2026 07:29:12 +0100 Subject: [PATCH 296/353] Translated using Weblate (Indonesian) Currently translated at 32.2% (49 of 152 strings) Translation: Trilium Notes/Website Translate-URL: https://hosted.weblate.org/projects/trilium/website/id/ --- .../src/translations/id/translation.json | 21 ++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/apps/website/src/translations/id/translation.json b/apps/website/src/translations/id/translation.json index 52e1cd2faf..31f4f55781 100644 --- a/apps/website/src/translations/id/translation.json +++ b/apps/website/src/translations/id/translation.json @@ -41,6 +41,25 @@ "code_description": "Gunakan editor khusus untuk kode source yang besar yang mempunyai penyorotan sintaks untuk banyak bahasa pemograman dengan tema-tema warna yang bervariasi.", "file_title": "Catatan file", "file_description": "Sematkan file multimedia (PDF, gambar, video) dengan pratinjau dalam aplikasi.", - "canvas_title": "Kanvas" + "canvas_title": "Kanvas", + "canvas_description": "Susun bentuk, gambar, dan teks di atas kanvas tak terbatas menggunakan teknologi yang sama dengan excalidraw.com. Sangat ideal untuk diagram, sketsa, dan perencanaan visual.", + "mermaid_title": "Diagram mermaid", + "mermaid_description": "Buat diagram seperti diagram alur (flowchart), diagram kelas & urutan (class & sequence), bagan Gantt, dan banyak lagi, menggunakan sintaks Mermaid.", + "mindmap_title": "Peta pikiran (Mindmap)", + "mindmap_description": "Organisasikan pemikiran Anda secara visual atau lakukan sesi brainstorming.", + "others_list": "dan lainnya: <0>peta catatan</0>, <1>peta relasi</1>, <2>pencarian tersimpan</2>, <3>render catatan</3>, dan <4>tampilan web</4>." + }, + "collections": { + "table_description": "Tampilkan dan edit informasi catatan dalam struktur tabel, dengan berbagai tipe kolom seperti teks, angka, kotak centang, tanggal & waktu, tautan, dan warna, serta dukungan untuk relasi catatan. Secara opsional, tampilkan catatan dalam hierarki pohon di dalam tabel.", + "board_title": "Papan Kanban", + "board_description": "Atur tugas atau status proyek Anda ke dalam papan Kanban dengan cara mudah untuk membuat item dan kolom baru, serta mengubah statusnya cukup dengan menyeretnya di sepanjang papan.", + "geomap_title": "Peta Geo", + "geomap_description": "Rencanakan liburan Anda atau tandai titik minat langsung pada peta geografis menggunakan penanda titik yang dapat disesuaikan. Tampilkan rekaman jalur GPX untuk melacak rencana perjalanan.", + "presentation_title": "Presentasi", + "presentation_description": "Atur informasi ke dalam slide dan presentasikan dalam layar penuh dengan transisi yang mulus. Slide juga dapat diekspor ke PDF agar mudah dibagikan." + }, + "faq": { + "title": "Tanya Jawab", + "mobile_question": "Apakah ada aplikasi mobile?" } } From 784ea240cabf69fe9fbb080e9da388209cefa7f2 Mon Sep 17 00:00:00 2001 From: Jason Kuanca <jhekhaa@gmail.com> Date: Mon, 26 Jan 2026 07:29:20 +0100 Subject: [PATCH 297/353] Translated using Weblate (Indonesian) Currently translated at 42.2% (49 of 116 strings) Translation: Trilium Notes/README Translate-URL: https://hosted.weblate.org/projects/trilium/readme/id/ --- docs/README-id.md | 42 +++++++++++++++++++++--------------------- 1 file changed, 21 insertions(+), 21 deletions(-) diff --git a/docs/README-id.md b/docs/README-id.md index 2d9e1d527c..bed5e9a6ca 100644 --- a/docs/README-id.md +++ b/docs/README-id.md @@ -122,15 +122,14 @@ Dokumentasi kami tersedia dalam berbagai format: * Teroptimisasi untuk kontrol sentuh [frontend mobile](https://docs.triliumnotes.org/user-guide/setup/mobile-frontend) untuk hp dan tablet -* Built-in [dark - theme](https://docs.triliumnotes.org/user-guide/concepts/themes), support for - user themes +* [tema gelap](https://docs.triliumnotes.org/user-guide/concepts/themes) bawaan, + dukungan untuk tema personal pengguna * [Evernote](https://docs.triliumnotes.org/user-guide/concepts/import-export/evernote) - and [Markdown import & - export](https://docs.triliumnotes.org/user-guide/concepts/import-export/markdown) -* [Web Clipper](https://docs.triliumnotes.org/user-guide/setup/web-clipper) for - easy saving of web content -* Customizable UI (sidebar buttons, user-defined widgets, ...) + dan [impor & ekspor + markdown](https://docs.triliumnotes.org/user-guide/concepts/import-export/markdown) +* [Penyemat Web](https://docs.triliumnotes.org/user-guide/setup/web-clipper) + untuk memudahkan pencatatan konten web +* "UI yang dapat dikustomisasi (tombol sidebar, widget kustom, ...)" * [Metrics](https://docs.triliumnotes.org/user-guide/advanced-usage/metrics), along with a Grafana Dashboard. @@ -175,29 +174,30 @@ features, suggestions, or issues you may have! - [Github Issues](https://github.com/TriliumNext/Trilium/issues) (For bug reports and feature requests.) -## 🏗 Installation +## 🏗 Instalasi ### Windows / MacOS -Download the binary release for your platform from the [latest release -page](https://github.com/TriliumNext/Trilium/releases/latest), unzip the package -and run the `trilium` executable. +Unduh rilis biner untuk platform Anda dari [halaman rilis +terbaru](https://github.com/TriliumNext/Trilium/releases/latest), ekstrak +package dan jalankan file executable `trilium`. ### Linux -If your distribution is listed in the table below, use your distribution's -package. +Jika distribusi Anda tercantum dalam tabel di bawah ini, gunakan package dari +distribusi Anda tersebut. -[![Packaging -status](https://repology.org/badge/vertical-allrepos/triliumnext.svg)](https://repology.org/project/triliumnext/versions) +[![Status +packaging](https://repology.org/badge/vertical-allrepos/triliumnext.svg)](https://repology.org/project/triliumnext/versions) -You may also download the binary release for your platform from the [latest -release page](https://github.com/TriliumNext/Trilium/releases/latest), unzip the -package and run the `trilium` executable. +Anda juga dapat mengunduh rilis biner untuk platform Anda dari [halaman rilis +terbaru](https://github.com/TriliumNext/Trilium/releases/latest), ekstrak +package-nya dan jalankan file executable `trilium`. -TriliumNext is also provided as a Flatpak, but not yet published on FlatHub. +TriliumNext juga tersedia sebagai Flatpak, namun belum dipublikasikan di +FlatHub. -### Browser (any OS) +### Browser (OS apapun) If you use a server installation (see below), you can directly access the web interface (which is almost identical to the desktop app). From 2e86166400a819fb4d807f81d628916fb6553097 Mon Sep 17 00:00:00 2001 From: Jason Kuanca <jhekhaa@gmail.com> Date: Mon, 26 Jan 2026 07:16:41 +0100 Subject: [PATCH 298/353] Translated using Weblate (Indonesian) Currently translated at 21.3% (83 of 388 strings) Translation: Trilium Notes/Server Translate-URL: https://hosted.weblate.org/projects/trilium/server/id/ --- apps/server/src/assets/translations/id/server.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/server/src/assets/translations/id/server.json b/apps/server/src/assets/translations/id/server.json index f4a6541232..9a72e86d85 100644 --- a/apps/server/src/assets/translations/id/server.json +++ b/apps/server/src/assets/translations/id/server.json @@ -59,7 +59,7 @@ "show-backend-log": "Buka halaman \"Log Backend\"", "show-help": "Buka Panduan Pengguna bawaan", "show-cheatsheet": "Menampilkan modal dengan operasi keyboard umum", - "text-note-operations": "Operasi catatan teks", + "text-note-operations": "Tindakan catatan teks", "add-link-to-text": "Buka dialog untuk menambahkan tautan ke teks", "follow-link-under-cursor": "Ikuti tautan tempat tanda sisipan ditempatkan", "insert-date-and-time-to-text": "Masukkan tanggal & waktu saat ini ke dalam teks", From be8dda85236cdc0a1febede224a8dd43cd7b356f Mon Sep 17 00:00:00 2001 From: Jason Kuanca <jhekhaa@gmail.com> Date: Mon, 26 Jan 2026 07:28:58 +0100 Subject: [PATCH 299/353] Translated using Weblate (Indonesian) Currently translated at 2.6% (47 of 1763 strings) Translation: Trilium Notes/Client Translate-URL: https://hosted.weblate.org/projects/trilium/client/id/ --- .../src/translations/id/translation.json | 20 ++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/apps/client/src/translations/id/translation.json b/apps/client/src/translations/id/translation.json index 407966304a..3a3b8991e7 100644 --- a/apps/client/src/translations/id/translation.json +++ b/apps/client/src/translations/id/translation.json @@ -50,6 +50,24 @@ "bulk_actions": { "bulk_actions": "Aksi borongan", "affected_notes": "Catatan terdampak", - "include_descendants": "Sertakan anakan dari catatan yang dipilih" + "include_descendants": "Sertakan anakan dari catatan yang dipilih", + "available_actions": "Pilihan aksi", + "chosen_actions": "Aksi terpilih", + "execute_bulk_actions": "Eksekusi aksi borongan", + "bulk_actions_executed": "Aksi borongan telah di eksekusi dengan sukses.", + "none_yet": "Belum ada... tambahkan aksi dengan memilih salah satu dari aksi di atas.", + "labels": "Label-label" + }, + "confirm": { + "cancel": "Batal", + "ok": "Oke", + "are_you_sure_remove_note": "Apakah anda yakin mau membuang catatan \"{{title}}\" dari peta relasi? ", + "if_you_dont_check": "Jika Anda tidak mencentang ini, catatan hanya akan dihapus dari peta relasi.", + "also_delete_note": "Hapus juga catatannya" + }, + "delete_notes": { + "delete_notes_preview": "Hapus pratinjau catatan", + "close": "Tutup", + "delete_all_clones_description": "Hapus seluruh duplikat (bisa dikembalikan di menu revisi)" } } From 3ba853dbad871be30b5478ee3ca1742ccfe9573e Mon Sep 17 00:00:00 2001 From: Jason Kuanca <jhekhaa@gmail.com> Date: Mon, 26 Jan 2026 08:12:00 +0100 Subject: [PATCH 300/353] Translated using Weblate (Indonesian) Currently translated at 2.8% (51 of 1763 strings) Translation: Trilium Notes/Client Translate-URL: https://hosted.weblate.org/projects/trilium/client/id/ --- apps/client/src/translations/id/translation.json | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/apps/client/src/translations/id/translation.json b/apps/client/src/translations/id/translation.json index 3a3b8991e7..8c0e154099 100644 --- a/apps/client/src/translations/id/translation.json +++ b/apps/client/src/translations/id/translation.json @@ -11,7 +11,7 @@ }, "toast": { "critical-error": { - "title": "Kesalahan kritis", + "title": "Eror kritikal", "message": "Telah terjadi kesalahan kritis yang mencegah aplikasi klien untuk memulai:\n\n{{message}}\n\nHal ini kemungkinan besar disebabkan oleh skrip yang gagal secara tidak terduga. Coba jalankan aplikasi dalam mode aman dan atasi masalahnya." }, "widget-error": { @@ -68,6 +68,10 @@ "delete_notes": { "delete_notes_preview": "Hapus pratinjau catatan", "close": "Tutup", - "delete_all_clones_description": "Hapus seluruh duplikat (bisa dikembalikan di menu revisi)" + "delete_all_clones_description": "Hapus seluruh duplikat (bisa dikembalikan di menu revisi)", + "erase_notes_description": "Penghapusan normal hanya menandai catatan sebagai dihapus dan dapat dipulihkan (melalui dialog versi revisi) dalam jangka waktu tertentu. Mencentang opsi ini akan menghapus catatan secara permanen seketika dan catatan tidak akan bisa dipulihkan kembali.", + "erase_notes_warning": "Hapus catatan secara permanen (tidak bisa dikembalikan), termasuk semua duplikat. Aksi akan memaksa aplikasi untuk mengulang kembali.", + "notes_to_be_deleted": "Catatan-catatan berikut akan dihapuskan ({{notesCount}})", + "no_note_to_delete": "Tidak ada Catatan yang akan dihapus (hanya duplikat)." } } From 5629b9a1618f79ede0dee93645ee5914a8a2044e Mon Sep 17 00:00:00 2001 From: Toto Yullian <tox@sysadmin.id> Date: Mon, 26 Jan 2026 08:04:02 +0100 Subject: [PATCH 301/353] Translated using Weblate (Indonesian) Currently translated at 2.8% (51 of 1763 strings) Translation: Trilium Notes/Client Translate-URL: https://hosted.weblate.org/projects/trilium/client/id/ --- apps/client/src/translations/id/translation.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/client/src/translations/id/translation.json b/apps/client/src/translations/id/translation.json index 8c0e154099..209c25c48c 100644 --- a/apps/client/src/translations/id/translation.json +++ b/apps/client/src/translations/id/translation.json @@ -21,7 +21,7 @@ }, "bundle-error": { "title": "Gagal memuat skrip kustom", - "message": "Skrip tidak dapat dijalankan karena:\n\n{{message}}" + "message": "Skrip tidak dapat dijalankan:\n\n{{message}}" }, "widget-list-error": { "title": "Gagal mendapatkan daftar widget dari server" From d8c7c919d1f49334669c36fe15505975695668b3 Mon Sep 17 00:00:00 2001 From: Jason Kuanca <jhekhaa@gmail.com> Date: Mon, 26 Jan 2026 08:04:36 +0100 Subject: [PATCH 302/353] Translated using Weblate (Indonesian) Currently translated at 44.8% (52 of 116 strings) Translation: Trilium Notes/README Translate-URL: https://hosted.weblate.org/projects/trilium/readme/id/ --- docs/README-id.md | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/docs/README-id.md b/docs/README-id.md index bed5e9a6ca..9d31c1941c 100644 --- a/docs/README-id.md +++ b/docs/README-id.md @@ -109,7 +109,7 @@ Dokumentasi kami tersedia dalam berbagai format: relasi](https://docs.triliumnotes.org/user-guide/note-types/relation-map) dan [peta catatan/link](https://docs.triliumnotes.org/user-guide/note-types/note-map) - untuk visualisasi relasi antar catatan. + untuk visualisasi relasi antar catatan * Mind maps, berdasarkan [Mind Elixir](https://docs.mind-elixir.com/) * [Peta geolokasi](https://docs.triliumnotes.org/user-guide/collections/geomap) dengan titik lokasi dan jalur GPX @@ -199,13 +199,12 @@ FlatHub. ### Browser (OS apapun) -If you use a server installation (see below), you can directly access the web -interface (which is almost identical to the desktop app). +Jika Anda menggunakan instalasi server (lihat di bawah), Anda dapat langsung +mengakses antarmuka web (yang hampir identik dengan aplikasi desktop). -Currently only the latest versions of Chrome & Firefox are supported (and -tested). +Saat ini hanya Chrome & Firefox versi terbaru yang didukung (dan telah diuji). -### Mobile +### Ponsel To use TriliumNext on a mobile device, you can use a mobile web browser to access the mobile interface of a server installation (see below). From 671e05421ab14b6358a1bf62c3f2a897b67716e9 Mon Sep 17 00:00:00 2001 From: Jason Kuanca <jhekhaa@gmail.com> Date: Mon, 26 Jan 2026 08:01:03 +0100 Subject: [PATCH 303/353] Translated using Weblate (Indonesian) Currently translated at 34.8% (53 of 152 strings) Translation: Trilium Notes/Website Translate-URL: https://hosted.weblate.org/projects/trilium/website/id/ --- apps/website/src/translations/id/translation.json | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/apps/website/src/translations/id/translation.json b/apps/website/src/translations/id/translation.json index 31f4f55781..b8c02bc97d 100644 --- a/apps/website/src/translations/id/translation.json +++ b/apps/website/src/translations/id/translation.json @@ -60,6 +60,10 @@ }, "faq": { "title": "Tanya Jawab", - "mobile_question": "Apakah ada aplikasi mobile?" + "mobile_question": "Apakah ada aplikasi mobile?", + "mobile_answer": "Saat ini belum ada aplikasi mobile resmi. Namun, jika Anda memiliki server, Anda dapat mengaksesnya menggunakan browser web dan bahkan menginstalnya sebagai PWA. Untuk Android, tersedia aplikasi tidak resmi bernama TriliumDroid yang dapat bekerja secara offline (sama seperti aplikasi desktop).", + "database_question": "Di manakah data disimpan?", + "database_answer": "Semua catatan Anda akan disimpan dalam basis data SQLite di dalam sebuah folder aplikasi. Alasan mengapa Trilium menggunakan basis data alih-alih file teks biasa adalah demi performa dan karena beberapa fitur akan jauh lebih sulit untuk diterapkan, seperti klon (catatan yang sama di beberapa tempat dalam hierarki). Untuk menemukan folder aplikasinya, cukup buka jendela 'Tentang'.", + "server_question": "Apakah saya butuh server untuk menjalankan Trilium?" } } From a6e8e2a127e6ebba73a62210aeee67511873f21b Mon Sep 17 00:00:00 2001 From: Jason Kuanca <jhekhaa@gmail.com> Date: Mon, 26 Jan 2026 08:02:04 +0100 Subject: [PATCH 304/353] Translated using Weblate (Indonesian) Currently translated at 21.6% (84 of 388 strings) Translation: Trilium Notes/Server Translate-URL: https://hosted.weblate.org/projects/trilium/server/id/ --- apps/server/src/assets/translations/id/server.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/server/src/assets/translations/id/server.json b/apps/server/src/assets/translations/id/server.json index 9a72e86d85..52cf7e0415 100644 --- a/apps/server/src/assets/translations/id/server.json +++ b/apps/server/src/assets/translations/id/server.json @@ -71,7 +71,7 @@ "add-new-label": "Buat label baru", "create-new-relation": "Buat relasi baru", "ribbon-tabs": "Tab pita", - "toggle-basic-properties": "Alihkan Properti Dasar", + "toggle-basic-properties": "Tampilkan/Sembunyikan Properti Dasar", "toggle-file-properties": "Alihkan Properti File", "toggle-image-properties": "Alihkan Properti Gambar", "toggle-owned-attributes": "Alihkan Atribut yang Dimiliki", From 442aac0466002c382729f73a4879496d212c1367 Mon Sep 17 00:00:00 2001 From: Hosted Weblate <hosted@weblate.org> Date: Mon, 26 Jan 2026 17:10:29 +0100 Subject: [PATCH 305/353] Update translation files Updated by "Cleanup translation files" add-on in Weblate. Translation: Trilium Notes/README Translate-URL: https://hosted.weblate.org/projects/trilium/readme/ --- docs/README-id.md | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/docs/README-id.md b/docs/README-id.md index 9d31c1941c..acaa46396d 100644 --- a/docs/README-id.md +++ b/docs/README-id.md @@ -83,17 +83,17 @@ Dokumentasi kami tersedia dalam berbagai format: catatan](https://docs.triliumnotes.org/user-guide/concepts/navigation/note-navigation), pencarian dengan teks dan [area fokus](https://docs.triliumnotes.org/user-guide/concepts/navigation/note-hoisting) -* Seamless [note - versioning](https://docs.triliumnotes.org/user-guide/concepts/notes/note-revisions) -* Note - [attributes](https://docs.triliumnotes.org/user-guide/advanced-usage/attributes) - can be used for note organization, querying and advanced - [scripting](https://docs.triliumnotes.org/user-guide/scripts) +* Mulus [versi + catatan](https://docs.triliumnotes.org/user-guide/concepts/notes/note-revisions) +* Catatan + [atribut](https://docs.triliumnotes.org/user-guide/advanced-usage/attributes) + dapat digunakan untuk mengatur catatan, pencarian dan tingkat lanjut + [pemrograman](https://docs.triliumnotes.org/user-guide/scripts) * Antarmuka pengguna tersedia dalam bahasa Inggris, Jerman, Spanyol, Prancis, Rumania, dan Tionghoa (sederhana dan tradisional) -* Direct [OpenID and TOTP - integration](https://docs.triliumnotes.org/user-guide/setup/server/mfa) for - more secure login +* Integrasi [OpenID dan TOTP + langsung](https://docs.triliumnotes.org/user-guide/setup/server/mfa) untuk + login yang lebih aman * [Synchronization](https://docs.triliumnotes.org/user-guide/setup/synchronization) with self-hosted sync server * ada [servis pihak ke-3 untuk server hostingan From 810563b3f998cfa6b9721f72d75ce9ad6890fa7b Mon Sep 17 00:00:00 2001 From: Elian Doran <contact@eliandoran.me> Date: Mon, 26 Jan 2026 19:21:19 +0200 Subject: [PATCH 306/353] fix(web-clipper): duplicate context menu error --- .../entrypoints/background/context_menu.ts | 42 +++++++++++++++++++ .../entrypoints/background/index.ts | 39 ++--------------- 2 files changed, 45 insertions(+), 36 deletions(-) create mode 100644 apps/web-clipper/entrypoints/background/context_menu.ts diff --git a/apps/web-clipper/entrypoints/background/context_menu.ts b/apps/web-clipper/entrypoints/background/context_menu.ts new file mode 100644 index 0000000000..6685651fbd --- /dev/null +++ b/apps/web-clipper/entrypoints/background/context_menu.ts @@ -0,0 +1,42 @@ +const CONTEXT_MENU_ITEMS: Browser.contextMenus.CreateProperties[] = [ + { + id: "trilium-save-selection", + title: "Save selection to Trilium", + contexts: ["selection"] + }, + { + id: "trilium-save-cropped-screenshot", + title: "Crop screen shot to Trilium", + contexts: ["page"] + }, + { + id: "trilium-save-whole-screenshot", + title: "Save whole screen shot to Trilium", + contexts: ["page"] + }, + { + id: "trilium-save-page", + title: "Save whole page to Trilium", + contexts: ["page"] + }, + { + id: "trilium-save-link", + title: "Save link to Trilium", + contexts: ["link"] + }, + { + id: "trilium-save-image", + title: "Save image to Trilium", + contexts: ["image"] + } +]; + +export default function setupContextMenu() { + // Context menu items need to be registered only once. + // https://stackoverflow.com/questions/64318529/cannot-create-item-with-duplicate-context-menu-id-in-extension + browser.runtime.onInstalled.addListener(() => { + for (const item of CONTEXT_MENU_ITEMS) { + browser.contextMenus.create(item); + } + }); +} diff --git a/apps/web-clipper/entrypoints/background/index.ts b/apps/web-clipper/entrypoints/background/index.ts index 8657ee5117..7d99abc997 100644 --- a/apps/web-clipper/entrypoints/background/index.ts +++ b/apps/web-clipper/entrypoints/background/index.ts @@ -1,5 +1,6 @@ import { randomString, Rect } from "@/utils"; +import setupContextMenu from "./context_menu"; import TriliumServerFacade from "./trilium_server_facade"; type BackgroundMessage = { @@ -40,6 +41,8 @@ export default defineBackground(() => { } }); + setupContextMenu(); + function cropImageManifestV2(newArea: Rect, dataUrl: string) { return new Promise((resolve, reject) => { const img = new Image(); @@ -115,42 +118,6 @@ export default defineBackground(() => { return await browser.tabs.captureVisibleTab({ format: 'png' }); } - browser.contextMenus.create({ - id: "trilium-save-selection", - title: "Save selection to Trilium", - contexts: ["selection"] - }); - - browser.contextMenus.create({ - id: "trilium-save-cropped-screenshot", - title: "Crop screen shot to Trilium", - contexts: ["page"] - }); - - browser.contextMenus.create({ - id: "trilium-save-whole-screenshot", - title: "Save whole screen shot to Trilium", - contexts: ["page"] - }); - - browser.contextMenus.create({ - id: "trilium-save-page", - title: "Save whole page to Trilium", - contexts: ["page"] - }); - - browser.contextMenus.create({ - id: "trilium-save-link", - title: "Save link to Trilium", - contexts: ["link"] - }); - - browser.contextMenus.create({ - id: "trilium-save-image", - title: "Save image to Trilium", - contexts: ["image"] - }); - async function getActiveTab() { const tabs = await browser.tabs.query({ active: true, From bbbdab42ca2666fbf8cab04f1d3f9378a6189fc3 Mon Sep 17 00:00:00 2001 From: Elian Doran <contact@eliandoran.me> Date: Mon, 26 Jan 2026 19:38:11 +0200 Subject: [PATCH 307/353] fix(web-clipper): cash not working in Chrome --- .../entrypoints/options/index.html | 1 - apps/web-clipper/entrypoints/options/index.ts | 2 + apps/web-clipper/entrypoints/popup/index.html | 1 - apps/web-clipper/entrypoints/popup/popup.ts | 10 ++-- apps/web-clipper/lib/cash.min.js | 40 ------------- apps/web-clipper/package.json | 3 + pnpm-lock.yaml | 57 +++++++++---------- 7 files changed, 38 insertions(+), 76 deletions(-) delete mode 100644 apps/web-clipper/lib/cash.min.js diff --git a/apps/web-clipper/entrypoints/options/index.html b/apps/web-clipper/entrypoints/options/index.html index 331a36a02e..abe09d4458 100644 --- a/apps/web-clipper/entrypoints/options/index.html +++ b/apps/web-clipper/entrypoints/options/index.html @@ -54,7 +54,6 @@ <p>Note that the entered password is not stored anywhere, it will be only used to retrieve an authorization token from the server instance which will be then used to send the clipped notes.</p> </form> -<script type="module" src="../../lib/cash.min.js"></script> <script type="module" src="index.ts"></script> </body> diff --git a/apps/web-clipper/entrypoints/options/index.ts b/apps/web-clipper/entrypoints/options/index.ts index c7cb3d4bdf..b4050c977b 100644 --- a/apps/web-clipper/entrypoints/options/index.ts +++ b/apps/web-clipper/entrypoints/options/index.ts @@ -1,3 +1,5 @@ +import $ from "cash-dom"; + const $triliumServerUrl = $("#trilium-server-url"); const $triliumServerPassword = $("#trilium-server-password"); diff --git a/apps/web-clipper/entrypoints/popup/index.html b/apps/web-clipper/entrypoints/popup/index.html index cdf2241cff..a655a5e4a8 100644 --- a/apps/web-clipper/entrypoints/popup/index.html +++ b/apps/web-clipper/entrypoints/popup/index.html @@ -46,7 +46,6 @@ <div>Status: <span id="connection-status">unknown</span></div> </div> - <script type="module" src="../../lib/cash.min.js"></script> <script type="module" src="popup.ts"></script> </body> diff --git a/apps/web-clipper/entrypoints/popup/popup.ts b/apps/web-clipper/entrypoints/popup/popup.ts index 0e4613b794..aa4f0bc2c1 100644 --- a/apps/web-clipper/entrypoints/popup/popup.ts +++ b/apps/web-clipper/entrypoints/popup/popup.ts @@ -1,3 +1,5 @@ +import $ from "cash-dom"; + import { createLink } from "@/utils"; async function sendMessage(message: object) { @@ -38,7 +40,7 @@ $saveTabsButton.on("click", () => sendMessage({name: 'save-tabs'})); const $saveLinkWithNoteWrapper = $("#save-link-with-note-wrapper"); const $textNote = $("#save-link-with-note-textarea"); -const $keepTitle = $<HTMLInputElement>("#keep-title-checkbox"); +const $keepTitle = $("#keep-title-checkbox"); $textNote.on('keypress', (event) => { if ((event.which === 10 || event.which === 13) && event.ctrlKey) { @@ -52,7 +54,7 @@ $textNote.on('keypress', (event) => { $("#save-link-with-note-button").on("click", () => { $saveLinkWithNoteWrapper.show(); - $textNote[0].focus(); + $textNote[0]?.focus(); }); $("#cancel-button").on("click", () => { @@ -70,7 +72,7 @@ async function saveLinkWithNote() { title = ''; content = ''; } - else if ($keepTitle[0].checked){ + else if (($keepTitle[0] as HTMLInputElement | undefined)?.checked){ title = ''; content = textNoteVal; } @@ -162,7 +164,7 @@ browser.runtime.onMessage.addListener(request => { const a = createLink({name: 'openNoteInTrilium', noteId: searchNote.noteId}, "Open in Trilium."); $alreadyVisited.text(`Already visited website!`); - $alreadyVisited[0].appendChild(a); + $alreadyVisited[0]?.appendChild(a); }else{ $alreadyVisited.html(''); } diff --git a/apps/web-clipper/lib/cash.min.js b/apps/web-clipper/lib/cash.min.js deleted file mode 100644 index 044700612a..0000000000 --- a/apps/web-clipper/lib/cash.min.js +++ /dev/null @@ -1,40 +0,0 @@ -/* MIT https://github.com/kenwheeler/cash */ -(function(){ -'use strict';var e={"class":"className",contenteditable:"contentEditable","for":"htmlFor",readonly:"readOnly",maxlength:"maxLength",tabindex:"tabIndex",colspan:"colSpan",rowspan:"rowSpan",usemap:"useMap"};function g(a,b){try{return a(b)}catch(c){return b}} -var m=document,n=window,p=m.documentElement,r=m.createElement.bind(m),aa=r("div"),t=r("table"),ba=r("tbody"),ca=r("tr"),u=Array.isArray,v=Array.prototype,da=v.concat,w=v.filter,ea=v.indexOf,fa=v.map,ha=v.push,ia=v.slice,x=v.some,ja=v.splice,ka=/^#[\w-]*$/,la=/^\.[\w-]*$/,ma=/<.+>/,na=/^\w+$/;function y(a,b){return a&&(A(b)||B(b))?la.test(a)?b.getElementsByClassName(a.slice(1)):na.test(a)?b.getElementsByTagName(a):b.querySelectorAll(a):[]} -var C=function(){function a(a,c){if(a){if(a instanceof C)return a;var b=a;if(D(a)){if(b=(c instanceof C?c[0]:c)||m,b=ka.test(a)?b.getElementById(a.slice(1)):ma.test(a)?oa(a):y(a,b),!b)return}else if(E(a))return this.ready(a);if(b.nodeType||b===n)b=[b];this.length=b.length;a=0;for(c=this.length;a<c;a++)this[a]=b[a]}}a.prototype.init=function(b,c){return new a(b,c)};return a}(),F=C.prototype,G=F.init;G.fn=G.prototype=F;F.length=0;F.splice=ja;"function"===typeof Symbol&&(F[Symbol.iterator]=v[Symbol.iterator]); -F.map=function(a){return G(da.apply([],fa.call(this,function(b,c){return a.call(b,c,b)})))};F.slice=function(a,b){return G(ia.call(this,a,b))};var pa=/-([a-z])/g;function H(a){return a.replace(pa,function(a,c){return c.toUpperCase()})}function I(a,b,c){if(c)for(c=a.length;c--&&!1!==b.call(a[c],c,a[c]););else{c=0;for(var d=a.length;c<d&&!1!==b.call(a[c],c,a[c]);c++);}return a}G.each=I;F.each=function(a){return I(this,a)};F.removeProp=function(a){return this.each(function(b,c){delete c[e[a]||a]})}; -function J(a){for(var b=1;b<arguments.length;b++);b=arguments.length;if(!b)return{};if(1===b)return J(G,a);for(var c=1;c<b;c++)for(var d in arguments[c])a[d]=arguments[c][d];return a}G.extend=J;F.extend=function(a){return J(F,a)};G.guid=1;function qa(a,b){var c=a&&(a.matches||a.webkitMatchesSelector||a.msMatchesSelector);return!!c&&!!b&&c.call(a,b)}function K(a){return!!a&&a===a.window}function A(a){return!!a&&9===a.nodeType}function B(a){return!!a&&1===a.nodeType} -function E(a){return"function"===typeof a}function D(a){return"string"===typeof a}function ra(a){return!isNaN(parseFloat(a))&&isFinite(a)}G.isWindow=K;G.isFunction=E;G.isNumeric=ra;G.isArray=u;F.prop=function(a,b){if(a){if(D(a))return a=e[a]||a,2>arguments.length?this[0]&&this[0][a]:this.each(function(c,h){h[a]=b});for(var c in a)this.prop(c,a[c]);return this}};F.get=function(a){if(void 0===a)return ia.call(this);a=Number(a);return this[0>a?a+this.length:a]};F.eq=function(a){return G(this.get(a))}; -F.first=function(){return this.eq(0)};F.last=function(){return this.eq(-1)};function L(a){return D(a)?function(b,c){return qa(c,a)}:E(a)?a:a instanceof C?function(b,c){return a.is(c)}:a?function(b,c){return c===a}:function(){return!1}}F.filter=function(a){var b=L(a);return G(w.call(this,function(a,d){return b.call(a,d,a)}))};function M(a,b){return b?a.filter(b):a}var sa=/\S+/g;function N(a){return D(a)?a.match(sa)||[]:[]}F.hasClass=function(a){return!!a&&x.call(this,function(b){return B(b)&&b.classList.contains(a)})}; -F.removeAttr=function(a){var b=N(a);return this.each(function(a,d){B(d)&&I(b,function(a,b){d.removeAttribute(b)})})};F.attr=function(a,b){if(a){if(D(a)){if(2>arguments.length){if(!this[0]||!B(this[0]))return;var c=this[0].getAttribute(a);return null===c?void 0:c}return void 0===b?this:null===b?this.removeAttr(a):this.each(function(c,h){B(h)&&h.setAttribute(a,b)})}for(c in a)this.attr(c,a[c]);return this}}; -F.toggleClass=function(a,b){var c=N(a),d=void 0!==b;return this.each(function(a,f){B(f)&&I(c,function(a,c){d?b?f.classList.add(c):f.classList.remove(c):f.classList.toggle(c)})})};F.addClass=function(a){return this.toggleClass(a,!0)};F.removeClass=function(a){return arguments.length?this.toggleClass(a,!1):this.attr("class","")}; -function O(a,b,c,d){for(var h=[],f=E(b),k=d&&L(d),q=0,R=a.length;q<R;q++)if(f){var l=b(a[q]);l.length&&ha.apply(h,l)}else for(l=a[q][b];!(null==l||d&&k(-1,l));)h.push(l),l=c?l[b]:null;return h}function P(a){return 1<a.length?w.call(a,function(a,c,d){return ea.call(d,a)===c}):a}G.unique=P;F.add=function(a,b){return G(P(this.get().concat(G(a,b).get())))};function Q(a,b,c){if(B(a))return a=n.getComputedStyle(a,null),c?a.getPropertyValue(b)||void 0:a[b]}function S(a,b){return parseInt(Q(a,b),10)||0} -var T=/^--/,U={},ta=aa.style,ua=["webkit","moz","ms"];function va(a,b){void 0===b&&(b=T.test(a));if(b)return a;if(!U[a]){b=H(a);var c=""+b[0].toUpperCase()+b.slice(1);b=(b+" "+ua.join(c+" ")+c).split(" ");I(b,function(b,c){if(c in ta)return U[a]=c,!1})}return U[a]} -var wa={animationIterationCount:!0,columnCount:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,gridArea:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnStart:!0,gridRow:!0,gridRowEnd:!0,gridRowStart:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0};function xa(a,b,c){void 0===c&&(c=T.test(a));return c||wa[a]||!ra(b)?b:b+"px"} -F.css=function(a,b){if(D(a)){var c=T.test(a);a=va(a,c);if(2>arguments.length)return this[0]&&Q(this[0],a,c);if(!a)return this;b=xa(a,b,c);return this.each(function(d,f){B(f)&&(c?f.style.setProperty(a,b):f.style[a]=b)})}for(var d in a)this.css(d,a[d]);return this};var ya=/^\s+|\s+$/;function za(a,b){a=a.dataset[b]||a.dataset[H(b)];return ya.test(a)?a:g(JSON.parse,a)} -F.data=function(a,b){if(!a){if(!this[0])return;var c={},d;for(d in this[0].dataset)c[d]=za(this[0],d);return c}if(D(a))return 2>arguments.length?this[0]&&za(this[0],a):void 0===b?this:this.each(function(c,d){c=b;c=g(JSON.stringify,c);d.dataset[H(a)]=c});for(d in a)this.data(d,a[d]);return this};function Aa(a,b){var c=a.documentElement;return Math.max(a.body["scroll"+b],c["scroll"+b],a.body["offset"+b],c["offset"+b],c["client"+b])} -function Ba(a,b){return S(a,"border"+(b?"Left":"Top")+"Width")+S(a,"padding"+(b?"Left":"Top"))+S(a,"padding"+(b?"Right":"Bottom"))+S(a,"border"+(b?"Right":"Bottom")+"Width")} -I([!0,!1],function(a,b){I(["Width","Height"],function(a,d){F[(b?"outer":"inner")+d]=function(c){if(this[0])return K(this[0])?b?this[0]["inner"+d]:this[0].document.documentElement["client"+d]:A(this[0])?Aa(this[0],d):this[0][(b?"offset":"client")+d]+(c&&b?S(this[0],"margin"+(a?"Top":"Left"))+S(this[0],"margin"+(a?"Bottom":"Right")):0)}})}); -I(["Width","Height"],function(a,b){var c=b.toLowerCase();F[c]=function(d){if(!this[0])return void 0===d?void 0:this;if(!arguments.length)return K(this[0])?this[0].document.documentElement["client"+b]:A(this[0])?Aa(this[0],b):this[0].getBoundingClientRect()[c]-Ba(this[0],!a);var h=parseInt(d,10);return this.each(function(b,d){B(d)&&(b=Q(d,"boxSizing"),d.style[c]=xa(c,h+("border-box"===b?Ba(d,!a):0)))})}});var V={}; -F.toggle=function(a){return this.each(function(b,c){if(B(c))if(void 0===a?"none"===Q(c,"display"):a){if(c.style.display=c.___cd||"","none"===Q(c,"display")){b=c.style;c=c.tagName;if(V[c])c=V[c];else{var d=r(c);m.body.insertBefore(d,null);var h=Q(d,"display");m.body.removeChild(d);c=V[c]="none"!==h?h:"block"}b.display=c}}else c.___cd=Q(c,"display"),c.style.display="none"})};F.hide=function(){return this.toggle(!1)};F.show=function(){return this.toggle(!0)}; -function Ca(a,b){return!b||!x.call(b,function(b){return 0>a.indexOf(b)})}var W={focus:"focusin",blur:"focusout"},Da={mouseenter:"mouseover",mouseleave:"mouseout"},Ea=/^(mouse|pointer|contextmenu|drag|drop|click|dblclick)/i;function Fa(a,b,c,d,h){var f=a.___ce=a.___ce||{};f[b]=f[b]||[];f[b].push([c,d,h]);a.addEventListener(b,h)}function X(a){a=a.split(".");return[a[0],a.slice(1).sort()]} -function Y(a,b,c,d,h){var f=a.___ce=a.___ce||{};if(b)f[b]&&(f[b]=f[b].filter(function(f){var k=f[0],R=f[1];f=f[2];if(h&&f.guid!==h.guid||!Ca(k,c)||d&&d!==R)return!0;a.removeEventListener(b,f)}));else for(b in f)Y(a,b,c,d,h)} -F.off=function(a,b,c){var d=this;if(void 0===a)this.each(function(a,b){(B(b)||A(b)||K(b))&&Y(b)});else if(D(a))E(b)&&(c=b,b=""),I(N(a),function(a,h){a=X(Da[h]||W[h]||h);var f=a[0],k=a[1];d.each(function(a,d){(B(d)||A(d)||K(d))&&Y(d,f,k,b,c)})});else for(var h in a)this.off(h,a[h]);return this}; -F.on=function(a,b,c,d,h){var f=this;if(!D(a)){for(var k in a)this.on(k,b,c,a[k],h);return this}D(b)||(void 0!==b&&null!==b&&(void 0!==c&&(d=c),c=b),b="");E(d)||(d=c,c=void 0);if(!d)return this;I(N(a),function(a,k){a=X(Da[k]||W[k]||k);var l=a[0],q=a[1];l&&f.each(function(a,f){if(B(f)||A(f)||K(f))a=function Ja(a){if(!a.namespace||Ca(q,a.namespace.split("."))){var k=f;if(b){for(var z=a.target;!qa(z,b);){if(z===f)return;z=z.parentNode;if(!z)return}k=z;a.___cd=!0}a.___cd&&Object.defineProperty(a,"currentTarget", -{configurable:!0,get:function(){return k}});Object.defineProperty(a,"data",{configurable:!0,get:function(){return c}});z=d.call(k,a,a.___td);h&&Y(f,l,q,b,Ja);!1===z&&(a.preventDefault(),a.stopPropagation())}},a.guid=d.guid=d.guid||G.guid++,Fa(f,l,q,b,a)})});return this};F.one=function(a,b,c,d){return this.on(a,b,c,d,!0)};F.ready=function(a){function b(){return setTimeout(a,0,G)}"loading"!==m.readyState?b():m.addEventListener("DOMContentLoaded",b);return this}; -F.trigger=function(a,b){if(D(a)){var c=X(a),d=c[0];c=c[1];if(!d)return this;var h=Ea.test(d)?"MouseEvents":"HTMLEvents";a=m.createEvent(h);a.initEvent(d,!0,!0);a.namespace=c.join(".")}a.___td=b;var f=a.type in W;return this.each(function(b,c){if(f&&E(c[a.type]))c[a.type]();else c.dispatchEvent(a)})};function Ga(a){return a.multiple&&a.options?O(w.call(a.options,function(a){return a.selected&&!a.disabled&&!a.parentNode.disabled}),"value"):a.value||""} -var Ha=/%20/g,Ia=/\r?\n/g,Ka=/file|reset|submit|button|image/i,La=/radio|checkbox/i;F.serialize=function(){var a="";this.each(function(b,c){I(c.elements||[c],function(b,c){c.disabled||!c.name||"FIELDSET"===c.tagName||Ka.test(c.type)||La.test(c.type)&&!c.checked||(b=Ga(c),void 0!==b&&(b=u(b)?b:[b],I(b,function(b,d){b=a;d="&"+encodeURIComponent(c.name)+"="+encodeURIComponent(d.replace(Ia,"\r\n")).replace(Ha,"+");a=b+d})))})});return a.slice(1)}; -F.val=function(a){return arguments.length?this.each(function(b,c){if((b=c.multiple&&c.options)||La.test(c.type)){var d=u(a)?fa.call(a,String):null===a?[]:[String(a)];b?I(c.options,function(a,b){b.selected=0<=d.indexOf(b.value)},!0):c.checked=0<=d.indexOf(c.value)}else c.value=void 0===a||null===a?"":a}):this[0]&&Ga(this[0])};F.clone=function(){return this.map(function(a,b){return b.cloneNode(!0)})};F.detach=function(a){M(this,a).each(function(a,c){c.parentNode&&c.parentNode.removeChild(c)});return this}; -var Ma=/^\s*<(\w+)[^>]*>/,Na=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,Oa={"*":aa,tr:ba,td:ca,th:ca,thead:t,tbody:t,tfoot:t};function oa(a){if(!D(a))return[];if(Na.test(a))return[r(RegExp.$1)];var b=Ma.test(a)&&RegExp.$1;b=Oa[b]||Oa["*"];b.innerHTML=a;return G(b.childNodes).detach().get()}G.parseHTML=oa;F.empty=function(){return this.each(function(a,b){for(;b.firstChild;)b.removeChild(b.firstChild)})}; -F.html=function(a){return arguments.length?void 0===a?this:this.each(function(b,c){B(c)&&(c.innerHTML=a)}):this[0]&&this[0].innerHTML};F.remove=function(a){M(this,a).detach().off();return this};F.text=function(a){return void 0===a?this[0]?this[0].textContent:"":this.each(function(b,c){B(c)&&(c.textContent=a)})};F.unwrap=function(){this.parent().each(function(a,b){"BODY"!==b.tagName&&(a=G(b),a.replaceWith(a.children()))});return this}; -F.offset=function(){var a=this[0];if(a)return a=a.getBoundingClientRect(),{top:a.top+n.pageYOffset,left:a.left+n.pageXOffset}};F.offsetParent=function(){return this.map(function(a,b){for(a=b.offsetParent;a&&"static"===Q(a,"position");)a=a.offsetParent;return a||p})}; -F.position=function(){var a=this[0];if(a){var b="fixed"===Q(a,"position"),c=b?a.getBoundingClientRect():this.offset();if(!b){var d=a.ownerDocument;for(b=a.offsetParent||d.documentElement;(b===d.body||b===d.documentElement)&&"static"===Q(b,"position");)b=b.parentNode;b!==a&&B(b)&&(d=G(b).offset(),c.top-=d.top+S(b,"borderTopWidth"),c.left-=d.left+S(b,"borderLeftWidth"))}return{top:c.top-S(a,"marginTop"),left:c.left-S(a,"marginLeft")}}}; -F.children=function(a){return M(G(P(O(this,function(a){return a.children}))),a)};F.contents=function(){return G(P(O(this,function(a){return"IFRAME"===a.tagName?[a.contentDocument]:"TEMPLATE"===a.tagName?a.content.childNodes:a.childNodes})))};F.find=function(a){return G(P(O(this,function(b){return y(a,b)})))};var Pa=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g,Qa=/^$|^module$|\/(java|ecma)script/i,Ra=["type","src","nonce","noModule"]; -function Sa(a,b){a=G(a);a.filter("script").add(a.find("script")).each(function(a,d){if(Qa.test(d.type)&&p.contains(d)){var c=r("script");c.text=d.textContent.replace(Pa,"");I(Ra,function(a,b){d[b]&&(c[b]=d[b])});b.head.insertBefore(c,null);b.head.removeChild(c)}})} -function Z(a,b,c,d,h,f,k,q){I(a,function(a,f){I(G(f),function(a,f){I(G(b),function(b,k){var l=c?k:f;b=c?a:b;k=c?f:k;l=b?l.cloneNode(!0):l;b=!b;h?k.insertBefore(l,d?k.firstChild:null):k.parentNode.insertBefore(l,d?k:k.nextSibling);b&&Sa(l,k.ownerDocument)},q)},k)},f);return b}F.after=function(){return Z(arguments,this,!1,!1,!1,!0,!0)};F.append=function(){return Z(arguments,this,!1,!1,!0)};F.appendTo=function(a){return Z(arguments,this,!0,!1,!0)};F.before=function(){return Z(arguments,this,!1,!0)}; -F.insertAfter=function(a){return Z(arguments,this,!0,!1,!1,!1,!1,!0)};F.insertBefore=function(a){return Z(arguments,this,!0,!0)};F.prepend=function(){return Z(arguments,this,!1,!0,!0,!0,!0)};F.prependTo=function(a){return Z(arguments,this,!0,!0,!0,!1,!1,!0)};F.replaceWith=function(a){return this.before(a).remove()};F.replaceAll=function(a){G(a).replaceWith(this);return this};F.wrapAll=function(a){a=G(a);for(var b=a[0];b.children.length;)b=b.firstElementChild;this.first().before(a);return this.appendTo(b)}; -F.wrap=function(a){return this.each(function(b,c){var d=G(a)[0];G(c).wrapAll(b?d.cloneNode(!0):d)})};F.wrapInner=function(a){return this.each(function(b,c){b=G(c);c=b.contents();c.length?c.wrapAll(a):b.append(a)})};F.has=function(a){var b=D(a)?function(b,d){return y(a,d).length}:function(b,d){return d.contains(a)};return this.filter(b)};F.is=function(a){var b=L(a);return x.call(this,function(a,d){return b.call(a,d,a)})};F.next=function(a,b,c){return M(G(P(O(this,"nextElementSibling",b,c))),a)}; -F.nextAll=function(a){return this.next(a,!0)};F.nextUntil=function(a,b){return this.next(b,!0,a)};F.not=function(a){var b=L(a);return this.filter(function(c,d){return(!D(a)||B(d))&&!b.call(d,c,d)})};F.parent=function(a){return M(G(P(O(this,"parentNode"))),a)};F.index=function(a){var b=a?G(a)[0]:this[0];a=a?this:G(b).parent().children();return ea.call(a,b)};F.closest=function(a){var b=this.filter(a);if(b.length)return b;var c=this.parent();return c.length?c.closest(a):b}; -F.parents=function(a,b){return M(G(P(O(this,"parentElement",!0,b))),a)};F.parentsUntil=function(a,b){return this.parents(b,a)};F.prev=function(a,b,c){return M(G(P(O(this,"previousElementSibling",b,c))),a)};F.prevAll=function(a){return this.prev(a,!0)};F.prevUntil=function(a,b){return this.prev(b,!0,a)};F.siblings=function(a){return M(G(P(O(this,function(a){return G(a).parent().children().not(a)}))),a)};"undefined"!==typeof exports?module.exports=G:n.cash=n.$=G; -})(); \ No newline at end of file diff --git a/apps/web-clipper/package.json b/apps/web-clipper/package.json index 2853dcb900..97aa421df1 100644 --- a/apps/web-clipper/package.json +++ b/apps/web-clipper/package.json @@ -17,5 +17,8 @@ "devDependencies": { "@wxt-dev/auto-icons": "1.1.0", "wxt": "0.20.13" + }, + "dependencies": { + "cash-dom": "8.1.5" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 9a0450f01a..c716b4dd18 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -818,6 +818,10 @@ importers: version: 17.2.3 apps/web-clipper: + dependencies: + cash-dom: + specifier: 8.1.5 + version: 8.1.5 devDependencies: '@wxt-dev/auto-icons': specifier: 1.1.0 @@ -6871,6 +6875,9 @@ packages: canvas-roundrect-polyfill@0.0.1: resolution: {integrity: sha512-yWq+R3U3jE+coOeEb3a3GgE2j/0MMiDKM/QpLb6h9ihf5fGY9UXtvK9o4vNqjWXoZz7/3EaSVU3IX53TvFFUOw==} + cash-dom@8.1.5: + resolution: {integrity: sha512-/BS05CfzyHR5xT2ksKj1sDLPaOv5rSmIwoGxNgdKwUtnIuiJ5neMxVEmZxvfyJiSjGbOMD0Lwe+9v+fszDqHew==} + ccount@2.0.1: resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==} @@ -15829,6 +15836,8 @@ snapshots: '@ckeditor/ckeditor5-core': 47.4.0 '@ckeditor/ckeditor5-upload': 47.4.0 ckeditor5: 47.4.0 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-ai@47.4.0(bufferutil@4.0.9)(utf-8-validate@6.0.5)': dependencies: @@ -15969,12 +15978,16 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.4.0 '@ckeditor/ckeditor5-widget': 47.4.0 es-toolkit: 1.39.5 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-cloud-services@47.4.0': dependencies: '@ckeditor/ckeditor5-core': 47.4.0 '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-code-block@47.4.0(patch_hash=2361d8caad7d6b5bddacc3a3b4aa37dbfba260b1c1b22a450413a79c1bb1ce95)': dependencies: @@ -16167,6 +16180,8 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 es-toolkit: 1.39.5 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-editor-classic@47.4.0': dependencies: @@ -16176,6 +16191,8 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 es-toolkit: 1.39.5 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-editor-decoupled@47.4.0': dependencies: @@ -16185,6 +16202,8 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 es-toolkit: 1.39.5 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-editor-inline@47.4.0': dependencies: @@ -16194,6 +16213,8 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 es-toolkit: 1.39.5 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-editor-multi-root@47.4.0': dependencies: @@ -16216,8 +16237,6 @@ snapshots: '@ckeditor/ckeditor5-table': 47.4.0 '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-emoji@47.4.0': dependencies: @@ -16274,8 +16293,6 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.4.0 '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-export-word@47.4.0': dependencies: @@ -16300,6 +16317,8 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 es-toolkit: 1.39.5 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-font@47.4.0': dependencies: @@ -16374,6 +16393,8 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.4.0 '@ckeditor/ckeditor5-widget': 47.4.0 ckeditor5: 47.4.0 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-html-embed@47.4.0': dependencies: @@ -16419,8 +16440,6 @@ snapshots: '@ckeditor/ckeditor5-widget': 47.4.0 ckeditor5: 47.4.0 es-toolkit: 1.39.5 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-import-word@47.4.0': dependencies: @@ -16433,8 +16452,6 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.4.0 '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-indent@47.4.0': dependencies: @@ -16508,8 +16525,6 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.4.0 '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-markdown-gfm@47.4.0': dependencies: @@ -16558,8 +16573,6 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 es-toolkit: 1.39.5 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-merge-fields@47.4.0': dependencies: @@ -16572,8 +16585,6 @@ snapshots: '@ckeditor/ckeditor5-widget': 47.4.0 ckeditor5: 47.4.0 es-toolkit: 1.39.5 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-minimap@47.4.0': dependencies: @@ -16582,8 +16593,6 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.4.0 '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-operations-compressor@47.4.0': dependencies: @@ -16638,8 +16647,6 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.4.0 '@ckeditor/ckeditor5-widget': 47.4.0 ckeditor5: 47.4.0 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-pagination@47.4.0': dependencies: @@ -16747,8 +16754,6 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.4.0 '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-slash-command@47.4.0': dependencies: @@ -16761,8 +16766,6 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.4.0 '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-source-editing-enhanced@47.4.0': dependencies: @@ -16810,8 +16813,6 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 es-toolkit: 1.39.5 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-table@47.4.0': dependencies: @@ -16824,8 +16825,6 @@ snapshots: '@ckeditor/ckeditor5-widget': 47.4.0 ckeditor5: 47.4.0 es-toolkit: 1.39.5 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-template@47.4.0': dependencies: @@ -16936,8 +16935,6 @@ snapshots: '@ckeditor/ckeditor5-engine': 47.4.0 '@ckeditor/ckeditor5-utils': 47.4.0 es-toolkit: 1.39.5 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-widget@47.4.0': dependencies: @@ -16957,8 +16954,6 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 es-toolkit: 1.39.5 - transitivePeerDependencies: - - supports-color '@codemirror/autocomplete@6.18.6': dependencies: @@ -22579,6 +22574,8 @@ snapshots: canvas-roundrect-polyfill@0.0.1: {} + cash-dom@8.1.5: {} + ccount@2.0.1: {} chai@6.2.1: {} From ab519a4caa007b895549249ae6761dd78f63ff71 Mon Sep 17 00:00:00 2001 From: Elian Doran <contact@eliandoran.me> Date: Mon, 26 Jan 2026 20:06:57 +0200 Subject: [PATCH 308/353] chore(web-clipper): rephrase "already visited" & fix spacing --- apps/web-clipper/entrypoints/popup/popup.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/web-clipper/entrypoints/popup/popup.ts b/apps/web-clipper/entrypoints/popup/popup.ts index aa4f0bc2c1..c68e7e6af9 100644 --- a/apps/web-clipper/entrypoints/popup/popup.ts +++ b/apps/web-clipper/entrypoints/popup/popup.ts @@ -163,7 +163,7 @@ browser.runtime.onMessage.addListener(request => { if (searchNote.status === 'found'){ const a = createLink({name: 'openNoteInTrilium', noteId: searchNote.noteId}, "Open in Trilium."); - $alreadyVisited.text(`Already visited website!`); + $alreadyVisited.text(`Web page already clipped. `); $alreadyVisited[0]?.appendChild(a); }else{ $alreadyVisited.html(''); From c97c69900be9cb56919e94c082762e9aedca2e38 Mon Sep 17 00:00:00 2001 From: Elian Doran <contact@eliandoran.me> Date: Mon, 26 Jan 2026 20:10:18 +0200 Subject: [PATCH 309/353] chore(web-clipper): minor typo in "screenshot" --- apps/web-clipper/entrypoints/background/context_menu.ts | 4 ++-- apps/web-clipper/entrypoints/popup/index.html | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/apps/web-clipper/entrypoints/background/context_menu.ts b/apps/web-clipper/entrypoints/background/context_menu.ts index 6685651fbd..28786df7bf 100644 --- a/apps/web-clipper/entrypoints/background/context_menu.ts +++ b/apps/web-clipper/entrypoints/background/context_menu.ts @@ -6,12 +6,12 @@ const CONTEXT_MENU_ITEMS: Browser.contextMenus.CreateProperties[] = [ }, { id: "trilium-save-cropped-screenshot", - title: "Crop screen shot to Trilium", + title: "Crop screenshot to Trilium", contexts: ["page"] }, { id: "trilium-save-whole-screenshot", - title: "Save whole screen shot to Trilium", + title: "Save whole screenshot to Trilium", contexts: ["page"] }, { diff --git a/apps/web-clipper/entrypoints/popup/index.html b/apps/web-clipper/entrypoints/popup/index.html index a655a5e4a8..207d6433cb 100644 --- a/apps/web-clipper/entrypoints/popup/index.html +++ b/apps/web-clipper/entrypoints/popup/index.html @@ -20,8 +20,8 @@ </div> <div id="already-visited"></div> - <button class="button full needs-connection" id="save-cropped-screenshot-button">Crop screen shot</button> - <button class="button full needs-connection" id="save-whole-screenshot-button">Save whole screen shot</button> + <button class="button full needs-connection" id="save-cropped-screenshot-button">Crop screenshot</button> + <button class="button full needs-connection" id="save-whole-screenshot-button">Save whole screenshot</button> <button class="button full needs-connection" id="save-whole-page-button">Save whole page</button> <button class="button full needs-connection" id="save-link-with-note-button">Save link with a note</button> <button class="button full needs-connection" id="save-tabs-button">Save window's tabs as a list</button> From 537d92421c6ebd05805e976221bd06495b214923 Mon Sep 17 00:00:00 2001 From: Elian Doran <contact@eliandoran.me> Date: Mon, 26 Jan 2026 20:20:46 +0200 Subject: [PATCH 310/353] chore(web-clipper): fix warning related to permissions --- apps/web-clipper/wxt.config.ts | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/apps/web-clipper/wxt.config.ts b/apps/web-clipper/wxt.config.ts index 1ca4460a1e..7dd1c0a3a9 100644 --- a/apps/web-clipper/wxt.config.ts +++ b/apps/web-clipper/wxt.config.ts @@ -12,13 +12,15 @@ export default defineConfig({ permissions: [ "activeTab", "tabs", - "http://*/", - "https://*/", - "<all_urls>", "storage", "contextMenus", manifestVersion === 3 && "offscreen" ].filter(Boolean), + host_permissions: [ + "http://*/", + "https://*/", + "<all_urls>", + ], browser_specific_settings: { gecko: { // See https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/browser_specific_settings#id. From 82ea4c1a04ea3346705bb4d0f6c8d381d3d07dbe Mon Sep 17 00:00:00 2001 From: Elian Doran <contact@eliandoran.me> Date: Mon, 26 Jan 2026 20:37:32 +0200 Subject: [PATCH 311/353] docs(guide): add instructions on installing from .zip --- .../Installation & Setup/Web Clipper.html | 78 +++++++++++++++++-- .../Developer Guide/Documentation.md | 2 +- .../Installation & Setup/Web Clipper.md | 30 +++++++ 3 files changed, 102 insertions(+), 8 deletions(-) diff --git a/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Installation & Setup/Web Clipper.html b/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Installation & Setup/Web Clipper.html index effb6e395b..77eb7dea73 100644 --- a/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Installation & Setup/Web Clipper.html +++ b/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Installation & Setup/Web Clipper.html @@ -7,13 +7,9 @@ <h2>Supported browsers</h2> <p>Trilium Web Clipper officially supports the following web browsers:</p> <ul> - <li> - <p>Mozilla Firefox, using Manifest v2.</p> - </li> - <li> - <p>Google Chrome, using Manifest v3. Theoretically the extension should work - on other Chromium-based browsers as well, but they are not officially supported.</p> - </li> + <li>Mozilla Firefox, using Manifest v2.</li> + <li>Google Chrome, using Manifest v3. Theoretically the extension should work + on other Chromium-based browsers as well, but they are not officially supported.</li> </ul> <h2>Obtaining the extension</h2> <aside class="admonition warning"> @@ -68,5 +64,73 @@ <p>It's also possible to configure the <a href="#root/_help_WOcw2SLH6tbX">server</a> address if you don't run the desktop application, or want it to work without the desktop application running.</p> +<h2>Testing development versions</h2> +<p>Development versions are version pre-release versions, generally meant + for testing purposes. These are not available in the Google or Firefox + web stores, but can be downloaded from either:</p> +<ul> + <li> + <p><a href="https://github.com/TriliumNext/Trilium/releases">GitHub Releases</a> by + looking for releases starting with <em>Web Clipper.</em> + </p> + </li> + <li> + <p>Artifacts in GitHub Actions, by looking for the <a href="https://github.com/TriliumNext/Trilium/actions/workflows/web-clipper.yml"><em>Deploy web clipper extension </em>workflow</a>. + Once a workflow run is selected, the ZIP files are available in the <em>Artifacts</em> section, + under the name <code spellcheck="false">web-clipper-extension</code>.</p> + </li> +</ul> +<h3>For Chrome</h3> +<ol> + <li> + <p>Download <code spellcheck="false">trilium-web-clipper-[x.y.z]-chrome.zip</code>.</p> + </li> + <li> + <p>Extract the archive.</p> + </li> + <li> + <p>In Chrome, navigate to <code spellcheck="false">chrome://extensions/</code> + </p> + </li> + <li> + <p>Toggle <em>Developer Mode</em> in top-right of the page.</p> + </li> + <li> + <p>Press the <em>Load unpacked</em> button near the header.</p> + </li> + <li> + <p>Point to the extracted directory from step (2).</p> + </li> +</ol> +<h3>For Firefox</h3> +<aside class="admonition warning"> + <p>Firefox prevents installation of unsigned packages in the “retail” version. + To be able to install extensions from disk, consider using <em>Firefox Developer Edition</em> or + a non-branded version of Firefox (e.g. <em>GNU IceCat</em>).</p> + <p>One time, go to <code spellcheck="false">about:config</code> and change + <code + spellcheck="false">xpinstall.signatures.required</code>to <code spellcheck="false">false</code>.</p> +</aside> +<ol> + <li> + <p>Navigate to <code spellcheck="false">about:addons</code>.</p> + </li> + <li> + <p>Select <em>Extensions</em> in the left-side navigation.</p> + </li> + <li> + <p>Press the <em>Gear</em> icon on the right of the <em>Manage Your Extensions</em> title.</p> + </li> + <li> + <p>Select <em>Install Add-on From File…</em> + </p> + </li> + <li> + <p>Point it to <code spellcheck="false">trilium-web-clipper-[x.y.z]-firefox.zip</code>.</p> + </li> + <li> + <p>Press the <em>Add</em> button to confirm.</p> + </li> +</ol> <h2>Credits</h2> <p>Some parts of the code are based on the <a href="https://github.com/laurent22/joplin/tree/master/Clipper">Joplin Notes browser extension</a>.</p> \ No newline at end of file diff --git a/docs/Developer Guide/Developer Guide/Documentation.md b/docs/Developer Guide/Developer Guide/Documentation.md index d840ffd46a..505fe22c9b 100644 --- a/docs/Developer Guide/Developer Guide/Documentation.md +++ b/docs/Developer Guide/Developer Guide/Documentation.md @@ -1,5 +1,5 @@ # Documentation -There are multiple types of documentation for Trilium:<img class="image-style-align-right" src="api/images/rFcOjCdtKSRx/Documentation_image.png" width="205" height="162"> +There are multiple types of documentation for Trilium:<img class="image-style-align-right" src="api/images/jaeLd6kJGrRa/Documentation_image.png" width="205" height="162"> * The _User Guide_ represents the user-facing documentation. This documentation can be browsed by users directly from within Trilium, by pressing <kbd>F1</kbd>. * The _Developer's Guide_ represents a set of Markdown documents that present the internals of Trilium, for developers. diff --git a/docs/User Guide/User Guide/Installation & Setup/Web Clipper.md b/docs/User Guide/User Guide/Installation & Setup/Web Clipper.md index a74fb72d05..d054ba5247 100644 --- a/docs/User Guide/User Guide/Installation & Setup/Web Clipper.md +++ b/docs/User Guide/User Guide/Installation & Setup/Web Clipper.md @@ -55,6 +55,36 @@ The extension needs to connect to a running Trilium instance. By default, it sca It's also possible to configure the [server](Server%20Installation.md) address if you don't run the desktop application, or want it to work without the desktop application running. +## Testing development versions + +Development versions are version pre-release versions, generally meant for testing purposes. These are not available in the Google or Firefox web stores, but can be downloaded from either: + +* [GitHub Releases](https://github.com/TriliumNext/Trilium/releases) by looking for releases starting with _Web Clipper._ +* Artifacts in GitHub Actions, by looking for the [_Deploy web clipper extension_ workflow](https://github.com/TriliumNext/Trilium/actions/workflows/web-clipper.yml). Once a workflow run is selected, the ZIP files are available in the _Artifacts_ section, under the name `web-clipper-extension`. + +### For Chrome + +1. Download `trilium-web-clipper-[x.y.z]-chrome.zip`. +2. Extract the archive. +3. In Chrome, navigate to `chrome://extensions/` +4. Toggle _Developer Mode_ in top-right of the page. +5. Press the _Load unpacked_ button near the header. +6. Point to the extracted directory from step (2). + +### For Firefox + +> [!WARNING] +> Firefox prevents installation of unsigned packages in the “retail” version. To be able to install extensions from disk, consider using _Firefox Developer Edition_ or a non-branded version of Firefox (e.g. _GNU IceCat_). +> +> One time, go to `about:config` and change `xpinstall.signatures.required` to `false`. + +1. Navigate to `about:addons`. +2. Select _Extensions_ in the left-side navigation. +3. Press the _Gear_ icon on the right of the _Manage Your Extensions_ title. +4. Select _Install Add-on From File…_ +5. Point it to `trilium-web-clipper-[x.y.z]-firefox.zip`. +6. Press the _Add_ button to confirm. + ## Credits Some parts of the code are based on the [Joplin Notes browser extension](https://github.com/laurent22/joplin/tree/master/Clipper). \ No newline at end of file From 5d7355612799c6a5480007e32d18971ff1e0b4c0 Mon Sep 17 00:00:00 2001 From: Elian Doran <contact@eliandoran.me> Date: Mon, 26 Jan 2026 20:44:19 +0200 Subject: [PATCH 312/353] docs(dev): mention NixOS for web clipper dev --- .../Installation & Setup/Web Clipper.html | 69 ++++++------------- .../Developer Guide/Concepts/Web Clipper.md | 11 ++- 2 files changed, 31 insertions(+), 49 deletions(-) diff --git a/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Installation & Setup/Web Clipper.html b/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Installation & Setup/Web Clipper.html index 77eb7dea73..5aa0d98b96 100644 --- a/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Installation & Setup/Web Clipper.html +++ b/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Installation & Setup/Web Clipper.html @@ -69,38 +69,23 @@ for testing purposes. These are not available in the Google or Firefox web stores, but can be downloaded from either:</p> <ul> - <li> - <p><a href="https://github.com/TriliumNext/Trilium/releases">GitHub Releases</a> by - looking for releases starting with <em>Web Clipper.</em> - </p> - </li> - <li> - <p>Artifacts in GitHub Actions, by looking for the <a href="https://github.com/TriliumNext/Trilium/actions/workflows/web-clipper.yml"><em>Deploy web clipper extension </em>workflow</a>. - Once a workflow run is selected, the ZIP files are available in the <em>Artifacts</em> section, - under the name <code spellcheck="false">web-clipper-extension</code>.</p> + <li><a href="https://github.com/TriliumNext/Trilium/releases">GitHub Releases</a> by + looking for releases starting with <em>Web Clipper.</em> </li> + <li>Artifacts in GitHub Actions, by looking for the <a href="https://github.com/TriliumNext/Trilium/actions/workflows/web-clipper.yml"><em>Deploy web clipper extension </em>workflow</a>. + Once a workflow run is selected, the ZIP files are available in the <em>Artifacts</em> section, + under the name <code spellcheck="false">web-clipper-extension</code>.</li> </ul> <h3>For Chrome</h3> <ol> - <li> - <p>Download <code spellcheck="false">trilium-web-clipper-[x.y.z]-chrome.zip</code>.</p> - </li> - <li> - <p>Extract the archive.</p> - </li> - <li> - <p>In Chrome, navigate to <code spellcheck="false">chrome://extensions/</code> - </p> - </li> - <li> - <p>Toggle <em>Developer Mode</em> in top-right of the page.</p> - </li> - <li> - <p>Press the <em>Load unpacked</em> button near the header.</p> - </li> - <li> - <p>Point to the extracted directory from step (2).</p> - </li> + <li>Download <code spellcheck="false">trilium-web-clipper-[x.y.z]-chrome.zip</code>.</li> + <li + >Extract the archive.</li> + <li>In Chrome, navigate to <code spellcheck="false">chrome://extensions/</code> + </li> + <li>Toggle <em>Developer Mode</em> in top-right of the page.</li> + <li>Press the <em>Load unpacked</em> button near the header.</li> + <li>Point to the extracted directory from step (2).</li> </ol> <h3>For Firefox</h3> <aside class="admonition warning"> @@ -112,25 +97,15 @@ spellcheck="false">xpinstall.signatures.required</code>to <code spellcheck="false">false</code>.</p> </aside> <ol> - <li> - <p>Navigate to <code spellcheck="false">about:addons</code>.</p> - </li> - <li> - <p>Select <em>Extensions</em> in the left-side navigation.</p> - </li> - <li> - <p>Press the <em>Gear</em> icon on the right of the <em>Manage Your Extensions</em> title.</p> - </li> - <li> - <p>Select <em>Install Add-on From File…</em> - </p> - </li> - <li> - <p>Point it to <code spellcheck="false">trilium-web-clipper-[x.y.z]-firefox.zip</code>.</p> - </li> - <li> - <p>Press the <em>Add</em> button to confirm.</p> - </li> + <li>Navigate to <code spellcheck="false">about:addons</code>.</li> + <li>Select <em>Extensions</em> in the left-side navigation.</li> + <li>Press the <em>Gear</em> icon on the right of the <em>Manage Your Extensions</em> title.</li> + <li + >Select <em>Install Add-on From File…</em> + </li> + <li>Point it to <code spellcheck="false">trilium-web-clipper-[x.y.z]-firefox.zip</code>.</li> + <li + >Press the <em>Add</em> button to confirm.</li> </ol> <h2>Credits</h2> <p>Some parts of the code are based on the <a href="https://github.com/laurent22/joplin/tree/master/Clipper">Joplin Notes browser extension</a>.</p> \ No newline at end of file diff --git a/docs/Developer Guide/Developer Guide/Concepts/Web Clipper.md b/docs/Developer Guide/Developer Guide/Concepts/Web Clipper.md index b36bfd1303..dc504658ea 100644 --- a/docs/Developer Guide/Developer Guide/Concepts/Web Clipper.md +++ b/docs/Developer Guide/Developer Guide/Concepts/Web Clipper.md @@ -7,7 +7,7 @@ Originally the Web Clipper supported only Manifest v2, which made the extension Although Firefox does support Manifest v3, we are still using Manifest v2 for it because WXT dev mode doesn't work for the Firefox / Manifest v3 combination and there were some mentions about Manifest v3 not being well supported on Firefox Mobile (and we plan to have support for it). -## Dev mode +## Development WXT allows easy development of the plugin, with full TypeScript support and live reload. To enter dev mode: @@ -16,7 +16,14 @@ WXT allows easy development of the plugin, with full TypeScript support and live This will open a separate browser instance in which the extension is automatically injected. -## Port +> [!NOTE] +> On NixOS, the same development commands work just fine. Just make sure the browser is available in the system path: +> +> ```sh +> nix-shell -p chromium +> ``` + +## Default port The default port is: From a854b0430095167fa8da0b6b6dbf46e0dab7615a Mon Sep 17 00:00:00 2001 From: Elian Doran <contact@eliandoran.me> Date: Mon, 26 Jan 2026 20:47:20 +0200 Subject: [PATCH 313/353] chore(web-clipper): rename ZIP artifacts --- apps/web-clipper/wxt.config.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/apps/web-clipper/wxt.config.ts b/apps/web-clipper/wxt.config.ts index 7dd1c0a3a9..4ce8c84b0f 100644 --- a/apps/web-clipper/wxt.config.ts +++ b/apps/web-clipper/wxt.config.ts @@ -56,6 +56,7 @@ export default defineConfig({ } }), zip: { + artifactTemplate: "trilium-web-clipper-{{version}}-{{browser}}.zip", includeSources: [ "entrypoints/offscreen/index.html" ] From af6c54bac7e02e4aed333c8e0dc4c45e0e9f8a78 Mon Sep 17 00:00:00 2001 From: Elian Doran <contact@eliandoran.me> Date: Mon, 26 Jan 2026 21:00:56 +0200 Subject: [PATCH 314/353] fix(web-clipper): context menu got broken on Firefox --- .../entrypoints/background/context_menu.ts | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/apps/web-clipper/entrypoints/background/context_menu.ts b/apps/web-clipper/entrypoints/background/context_menu.ts index 28786df7bf..967466a0ad 100644 --- a/apps/web-clipper/entrypoints/background/context_menu.ts +++ b/apps/web-clipper/entrypoints/background/context_menu.ts @@ -31,12 +31,11 @@ const CONTEXT_MENU_ITEMS: Browser.contextMenus.CreateProperties[] = [ } ]; -export default function setupContextMenu() { +export default async function setupContextMenu() { // Context menu items need to be registered only once. // https://stackoverflow.com/questions/64318529/cannot-create-item-with-duplicate-context-menu-id-in-extension - browser.runtime.onInstalled.addListener(() => { - for (const item of CONTEXT_MENU_ITEMS) { - browser.contextMenus.create(item); - } - }); + await browser.contextMenus.removeAll(); + for (const item of CONTEXT_MENU_ITEMS) { + browser.contextMenus.create(item); + } } From fc925a5db5badbc7edc13e05845ff7c7c18ad563 Mon Sep 17 00:00:00 2001 From: Elian Doran <contact@eliandoran.me> Date: Mon, 26 Jan 2026 21:10:30 +0200 Subject: [PATCH 315/353] chore(web-clipper): prepare for 1.1.1 --- apps/web-clipper/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/web-clipper/package.json b/apps/web-clipper/package.json index 2853dcb900..a0cfd24a2b 100644 --- a/apps/web-clipper/package.json +++ b/apps/web-clipper/package.json @@ -1,6 +1,6 @@ { "name": "@triliumnext/web-clipper", - "version": "1.1.0", + "version": "1.1.1", "description": "", "main": "index.js", "scripts": { From 10a27cbe865796b352c253a3fe3e5bbdb36b6b60 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 27 Jan 2026 01:37:18 +0000 Subject: [PATCH 316/353] chore(deps): update dependency eslint-plugin-playwright to v2.5.1 --- package.json | 2 +- pnpm-lock.yaml | 54 ++++++++++++++++++++++++++++++++++---------------- 2 files changed, 38 insertions(+), 18 deletions(-) diff --git a/package.json b/package.json index 417a7e688b..24129afa4b 100644 --- a/package.json +++ b/package.json @@ -61,7 +61,7 @@ "eslint": "9.39.2", "eslint-config-preact": "2.0.0", "eslint-config-prettier": "10.1.8", - "eslint-plugin-playwright": "2.5.0", + "eslint-plugin-playwright": "2.5.1", "eslint-plugin-simple-import-sort": "12.1.1", "happy-dom": "20.3.9", "http-server": "14.1.1", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index c716b4dd18..a6b8091c42 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -86,8 +86,8 @@ importers: specifier: 10.1.8 version: 10.1.8(eslint@9.39.2(jiti@2.6.1)) eslint-plugin-playwright: - specifier: 2.5.0 - version: 2.5.0(eslint@9.39.2(jiti@2.6.1)) + specifier: 2.5.1 + version: 2.5.1(eslint@9.39.2(jiti@2.6.1)) eslint-plugin-simple-import-sort: specifier: 12.1.1 version: 12.1.1(eslint@9.39.2(jiti@2.6.1)) @@ -8365,8 +8365,8 @@ packages: peerDependencies: eslint: '>=9.0.0' - eslint-plugin-playwright@2.5.0: - resolution: {integrity: sha512-1ckFw7Abdz+l23wtw5Tg4GTK3Y+MgEQQNjEr7FTJP3wwmIOj8DkbJ6G655aPc09c0Kfn/NoGA4xpMZzeSO4NWw==} + eslint-plugin-playwright@2.5.1: + resolution: {integrity: sha512-q7oqVQTTfa3VXJQ8E+ln0QttPGrs/XmSO1FjOMzQYBMYF3btih4FIrhEYh34JF184GYDmq3lJ/n7CMa49OHBvA==} engines: {node: '>=16.9.0'} peerDependencies: eslint: '>=8.40.0' @@ -15836,8 +15836,6 @@ snapshots: '@ckeditor/ckeditor5-core': 47.4.0 '@ckeditor/ckeditor5-upload': 47.4.0 ckeditor5: 47.4.0 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-ai@47.4.0(bufferutil@4.0.9)(utf-8-validate@6.0.5)': dependencies: @@ -15978,8 +15976,6 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.4.0 '@ckeditor/ckeditor5-widget': 47.4.0 es-toolkit: 1.39.5 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-cloud-services@47.4.0': dependencies: @@ -16191,8 +16187,6 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 es-toolkit: 1.39.5 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-editor-decoupled@47.4.0': dependencies: @@ -16202,8 +16196,6 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 es-toolkit: 1.39.5 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-editor-inline@47.4.0': dependencies: @@ -16237,6 +16229,8 @@ snapshots: '@ckeditor/ckeditor5-table': 47.4.0 '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-emoji@47.4.0': dependencies: @@ -16293,6 +16287,8 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.4.0 '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-export-word@47.4.0': dependencies: @@ -16317,8 +16313,6 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 es-toolkit: 1.39.5 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-font@47.4.0': dependencies: @@ -16393,8 +16387,6 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.4.0 '@ckeditor/ckeditor5-widget': 47.4.0 ckeditor5: 47.4.0 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-html-embed@47.4.0': dependencies: @@ -16440,6 +16432,8 @@ snapshots: '@ckeditor/ckeditor5-widget': 47.4.0 ckeditor5: 47.4.0 es-toolkit: 1.39.5 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-import-word@47.4.0': dependencies: @@ -16452,6 +16446,8 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.4.0 '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-indent@47.4.0': dependencies: @@ -16525,6 +16521,8 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.4.0 '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-markdown-gfm@47.4.0': dependencies: @@ -16573,6 +16571,8 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 es-toolkit: 1.39.5 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-merge-fields@47.4.0': dependencies: @@ -16585,6 +16585,8 @@ snapshots: '@ckeditor/ckeditor5-widget': 47.4.0 ckeditor5: 47.4.0 es-toolkit: 1.39.5 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-minimap@47.4.0': dependencies: @@ -16593,6 +16595,8 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.4.0 '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-operations-compressor@47.4.0': dependencies: @@ -16647,6 +16651,8 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.4.0 '@ckeditor/ckeditor5-widget': 47.4.0 ckeditor5: 47.4.0 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-pagination@47.4.0': dependencies: @@ -16710,6 +16716,8 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.4.0 '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-restricted-editing@47.4.0': dependencies: @@ -16754,6 +16762,8 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.4.0 '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-slash-command@47.4.0': dependencies: @@ -16766,6 +16776,8 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.4.0 '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-source-editing-enhanced@47.4.0': dependencies: @@ -16813,6 +16825,8 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 es-toolkit: 1.39.5 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-table@47.4.0': dependencies: @@ -16825,6 +16839,8 @@ snapshots: '@ckeditor/ckeditor5-widget': 47.4.0 ckeditor5: 47.4.0 es-toolkit: 1.39.5 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-template@47.4.0': dependencies: @@ -16935,6 +16951,8 @@ snapshots: '@ckeditor/ckeditor5-engine': 47.4.0 '@ckeditor/ckeditor5-utils': 47.4.0 es-toolkit: 1.39.5 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-widget@47.4.0': dependencies: @@ -16954,6 +16972,8 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 es-toolkit: 1.39.5 + transitivePeerDependencies: + - supports-color '@codemirror/autocomplete@6.18.6': dependencies: @@ -24522,7 +24542,7 @@ snapshots: eslint: 9.39.2(jiti@2.6.1) globals: 15.15.0 - eslint-plugin-playwright@2.5.0(eslint@9.39.2(jiti@2.6.1)): + eslint-plugin-playwright@2.5.1(eslint@9.39.2(jiti@2.6.1)): dependencies: eslint: 9.39.2(jiti@2.6.1) globals: 16.5.0 From 719451bf23dc769f63450992fbd6a051326114e2 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 27 Jan 2026 01:38:02 +0000 Subject: [PATCH 317/353] chore(deps): update dependency rollup-plugin-webpack-stats to v2.1.10 --- package.json | 2 +- pnpm-lock.yaml | 66 +++++++++++++++++++++++++++++--------------------- 2 files changed, 40 insertions(+), 28 deletions(-) diff --git a/package.json b/package.json index 417a7e688b..6cd4b77415 100644 --- a/package.json +++ b/package.json @@ -69,7 +69,7 @@ "js-yaml": "4.1.1", "jsonc-eslint-parser": "2.4.2", "react-refresh": "0.18.0", - "rollup-plugin-webpack-stats": "2.1.9", + "rollup-plugin-webpack-stats": "2.1.10", "tslib": "2.8.1", "tsx": "4.21.0", "typescript": "5.9.3", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index c716b4dd18..8cbf637290 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -110,8 +110,8 @@ importers: specifier: 0.18.0 version: 0.18.0 rollup-plugin-webpack-stats: - specifier: 2.1.9 - version: 2.1.9(rolldown@1.0.0-beta.29)(rollup@4.52.0)(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.31.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1)) + specifier: 2.1.10 + version: 2.1.10(rolldown@1.0.0-beta.29)(rollup@4.52.0)(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.31.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1)) tslib: specifier: 2.8.1 version: 2.8.1 @@ -12849,8 +12849,8 @@ packages: resolution: {integrity: sha512-EsoOi8moHN6CAYyTZipxDDVTJn0j2nBCWor4wRU45RQ8ER2qREDykXLr3Ulz6hBh6oBKCFTQIjo21i0FXNo/IA==} hasBin: true - rollup-plugin-stats@1.5.4: - resolution: {integrity: sha512-b1hYagYLTyr8mCVUb7e1x9fjxOXFyeWmV9hIr7vYqq/agN+WDaGNzz+KmM3GAx0KGGI2qllOL+zAUi/l39s/Sg==} + rollup-plugin-stats@1.5.5: + resolution: {integrity: sha512-C6WK4b8Nh/fcgPx5RLfv0/peQjOM93buCaYueTOqQsKbwbT/JHKnkI3jG0q0PLSVvj0hERGRbI02mHkvr2jMEg==} engines: {node: '>=18'} peerDependencies: rolldown: ^1.0.0-beta.0 @@ -12876,8 +12876,8 @@ packages: peerDependencies: rollup: ^3.0.0||^4.0.0 - rollup-plugin-webpack-stats@2.1.9: - resolution: {integrity: sha512-ft1vdp3xPjE+zw8A22yCToo5cpymoWCjNDefWNO1awywsDrSDoRJhkoZTENkhJwmfh6oe5ztpGu7PfnJOMXc2g==} + rollup-plugin-webpack-stats@2.1.10: + resolution: {integrity: sha512-DWJWnHSxWj4+6fDOQUzkfmNeXDvNQ98BRCvzSElfZIwAt2LSg3SuNEQoX8EC5F70fB7Z3zAiatcVJ2IF1tJ87w==} engines: {node: '>=18'} peerDependencies: rolldown: ^1.0.0-beta.0 @@ -15836,8 +15836,6 @@ snapshots: '@ckeditor/ckeditor5-core': 47.4.0 '@ckeditor/ckeditor5-upload': 47.4.0 ckeditor5: 47.4.0 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-ai@47.4.0(bufferutil@4.0.9)(utf-8-validate@6.0.5)': dependencies: @@ -15978,16 +15976,12 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.4.0 '@ckeditor/ckeditor5-widget': 47.4.0 es-toolkit: 1.39.5 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-cloud-services@47.4.0': dependencies: '@ckeditor/ckeditor5-core': 47.4.0 '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-code-block@47.4.0(patch_hash=2361d8caad7d6b5bddacc3a3b4aa37dbfba260b1c1b22a450413a79c1bb1ce95)': dependencies: @@ -16053,8 +16047,6 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.4.0 '@ckeditor/ckeditor5-watchdog': 47.4.0 es-toolkit: 1.39.5 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-dev-build-tools@54.3.2(@swc/helpers@0.5.17)(tslib@2.8.1)(typescript@5.9.3)': dependencies: @@ -16180,8 +16172,6 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 es-toolkit: 1.39.5 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-editor-classic@47.4.0': dependencies: @@ -16191,8 +16181,6 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 es-toolkit: 1.39.5 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-editor-decoupled@47.4.0': dependencies: @@ -16202,8 +16190,6 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 es-toolkit: 1.39.5 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-editor-inline@47.4.0': dependencies: @@ -16237,6 +16223,8 @@ snapshots: '@ckeditor/ckeditor5-table': 47.4.0 '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-emoji@47.4.0': dependencies: @@ -16293,6 +16281,8 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.4.0 '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-export-word@47.4.0': dependencies: @@ -16317,8 +16307,6 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 es-toolkit: 1.39.5 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-font@47.4.0': dependencies: @@ -16393,8 +16381,6 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.4.0 '@ckeditor/ckeditor5-widget': 47.4.0 ckeditor5: 47.4.0 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-html-embed@47.4.0': dependencies: @@ -16440,6 +16426,8 @@ snapshots: '@ckeditor/ckeditor5-widget': 47.4.0 ckeditor5: 47.4.0 es-toolkit: 1.39.5 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-import-word@47.4.0': dependencies: @@ -16452,6 +16440,8 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.4.0 '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-indent@47.4.0': dependencies: @@ -16525,6 +16515,8 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.4.0 '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-markdown-gfm@47.4.0': dependencies: @@ -16573,6 +16565,8 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 es-toolkit: 1.39.5 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-merge-fields@47.4.0': dependencies: @@ -16585,6 +16579,8 @@ snapshots: '@ckeditor/ckeditor5-widget': 47.4.0 ckeditor5: 47.4.0 es-toolkit: 1.39.5 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-minimap@47.4.0': dependencies: @@ -16593,6 +16589,8 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.4.0 '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-operations-compressor@47.4.0': dependencies: @@ -16647,6 +16645,8 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.4.0 '@ckeditor/ckeditor5-widget': 47.4.0 ckeditor5: 47.4.0 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-pagination@47.4.0': dependencies: @@ -16754,6 +16754,8 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.4.0 '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-slash-command@47.4.0': dependencies: @@ -16766,6 +16768,8 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.4.0 '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-source-editing-enhanced@47.4.0': dependencies: @@ -16813,6 +16817,8 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 es-toolkit: 1.39.5 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-table@47.4.0': dependencies: @@ -16825,6 +16831,8 @@ snapshots: '@ckeditor/ckeditor5-widget': 47.4.0 ckeditor5: 47.4.0 es-toolkit: 1.39.5 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-template@47.4.0': dependencies: @@ -16935,6 +16943,8 @@ snapshots: '@ckeditor/ckeditor5-engine': 47.4.0 '@ckeditor/ckeditor5-utils': 47.4.0 es-toolkit: 1.39.5 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-widget@47.4.0': dependencies: @@ -16954,6 +16964,8 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 es-toolkit: 1.39.5 + transitivePeerDependencies: + - supports-color '@codemirror/autocomplete@6.18.6': dependencies: @@ -29824,7 +29836,7 @@ snapshots: '@rolldown/binding-win32-x64-msvc': 1.0.0-beta.29 optional: true - rollup-plugin-stats@1.5.4(rolldown@1.0.0-beta.29)(rollup@4.52.0)(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.31.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1)): + rollup-plugin-stats@1.5.5(rolldown@1.0.0-beta.29)(rollup@4.52.0)(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.31.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1)): optionalDependencies: rolldown: 1.0.0-beta.29 rollup: 4.52.0 @@ -29857,9 +29869,9 @@ snapshots: '@rollup/pluginutils': 5.1.4(rollup@4.52.0) rollup: 4.52.0 - rollup-plugin-webpack-stats@2.1.9(rolldown@1.0.0-beta.29)(rollup@4.52.0)(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.31.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1)): + rollup-plugin-webpack-stats@2.1.10(rolldown@1.0.0-beta.29)(rollup@4.52.0)(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.31.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1)): dependencies: - rollup-plugin-stats: 1.5.4(rolldown@1.0.0-beta.29)(rollup@4.52.0)(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.31.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1)) + rollup-plugin-stats: 1.5.5(rolldown@1.0.0-beta.29)(rollup@4.52.0)(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.31.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1)) optionalDependencies: rolldown: 1.0.0-beta.29 rollup: 4.52.0 From ce63fec413acbed7a11358c9a32990c893d3e118 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 27 Jan 2026 01:38:17 +0000 Subject: [PATCH 318/353] chore(deps): update pnpm to v10.28.2 --- apps/build-docs/package.json | 2 +- apps/web-clipper/package.json | 2 +- package.json | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/apps/build-docs/package.json b/apps/build-docs/package.json index 126a4feac9..dbfe90eecc 100644 --- a/apps/build-docs/package.json +++ b/apps/build-docs/package.json @@ -9,7 +9,7 @@ "keywords": [], "author": "Elian Doran <contact@eliandoran.me>", "license": "AGPL-3.0-only", - "packageManager": "pnpm@10.28.1", + "packageManager": "pnpm@10.28.2", "devDependencies": { "@redocly/cli": "2.14.9", "archiver": "7.0.1", diff --git a/apps/web-clipper/package.json b/apps/web-clipper/package.json index 9186573c7f..3ffd3eb627 100644 --- a/apps/web-clipper/package.json +++ b/apps/web-clipper/package.json @@ -13,7 +13,7 @@ "postinstall": "wxt prepare" }, "keywords": [], - "packageManager": "pnpm@10.28.1", + "packageManager": "pnpm@10.28.2", "devDependencies": { "@wxt-dev/auto-icons": "1.1.0", "wxt": "0.20.13" diff --git a/package.json b/package.json index 417a7e688b..a75894cf8f 100644 --- a/package.json +++ b/package.json @@ -93,7 +93,7 @@ "url": "https://github.com/TriliumNext/Trilium/issues" }, "homepage": "https://triliumnotes.org", - "packageManager": "pnpm@10.28.1", + "packageManager": "pnpm@10.28.2", "pnpm": { "patchedDependencies": { "@ckeditor/ckeditor5-mention": "patches/@ckeditor__ckeditor5-mention.patch", From 0a34ca031ac99f5a22f3282eb338a282b41d4053 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 27 Jan 2026 01:39:04 +0000 Subject: [PATCH 319/353] chore(deps): update react monorepo to v19.2.4 --- apps/build-docs/package.json | 4 +- pnpm-lock.yaml | 498 ++++++++++++++++++----------------- 2 files changed, 258 insertions(+), 244 deletions(-) diff --git a/apps/build-docs/package.json b/apps/build-docs/package.json index 126a4feac9..0f1678dd0c 100644 --- a/apps/build-docs/package.json +++ b/apps/build-docs/package.json @@ -14,8 +14,8 @@ "@redocly/cli": "2.14.9", "archiver": "7.0.1", "fs-extra": "11.3.3", - "react": "19.2.3", - "react-dom": "19.2.3", + "react": "19.2.4", + "react-dom": "19.2.4", "typedoc": "0.28.16", "typedoc-plugin-missing-exports": "4.1.2" } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index c716b4dd18..e4ca19e270 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -149,11 +149,11 @@ importers: specifier: 11.3.3 version: 11.3.3 react: - specifier: 19.2.3 - version: 19.2.3 + specifier: 19.2.4 + version: 19.2.4 react-dom: - specifier: 19.2.3 - version: 19.2.3(react@19.2.3) + specifier: 19.2.4 + version: 19.2.4(react@19.2.4) typedoc: specifier: 0.28.16 version: 0.28.16(typescript@5.9.3) @@ -165,7 +165,7 @@ importers: dependencies: '@excalidraw/excalidraw': specifier: 0.18.0 - version: 0.18.0(@types/react-dom@19.1.6(@types/react@19.1.7))(@types/react@19.1.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + version: 0.18.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) '@fullcalendar/core': specifier: 6.1.20 version: 6.1.20 @@ -297,10 +297,10 @@ importers: version: 10.28.2 react-i18next: specifier: 16.5.3 - version: 16.5.3(i18next@25.8.0(typescript@5.9.3))(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(typescript@5.9.3) + version: 16.5.3(i18next@25.8.0(typescript@5.9.3))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3) react-window: specifier: 2.2.5 - version: 2.2.5(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + version: 2.2.5(react-dom@19.2.4(react@19.2.4))(react@19.2.4) reveal.js: specifier: 5.2.1 version: 5.2.1 @@ -849,7 +849,7 @@ importers: version: 6.6.5(preact@10.28.2) react-i18next: specifier: 16.5.3 - version: 16.5.3(i18next@25.8.0(typescript@5.9.3))(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(typescript@5.9.3) + version: 16.5.3(i18next@25.8.0(typescript@5.9.3))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3) devDependencies: '@preact/preset-vite': specifier: 2.10.2 @@ -12508,10 +12508,10 @@ packages: peerDependencies: react: ^16.14.0 - react-dom@19.2.3: - resolution: {integrity: sha512-yELu4WmLPw5Mr/lmeEpox5rw3RETacE++JgHqQzd2dg+YbJuat3jH4ingc+WPZhxaoFzdv9y33G+F7Nl5O0GBg==} + react-dom@19.2.4: + resolution: {integrity: sha512-AXJdLo8kgMbimY95O2aKQqsz2iWi9jMgKJhRBAxECE4IFxfcazB2LmzloIoibJI3C12IlY20+KFaLv+71bUJeQ==} peerDependencies: - react: ^19.2.3 + react: ^19.2.4 react-i18next@16.5.3: resolution: {integrity: sha512-fo+/NNch37zqxOzlBYrWMx0uy/yInPkRfjSuy4lqKdaecR17nvCHnEUt3QyzA8XjQ2B/0iW/5BhaHR3ZmukpGw==} @@ -12596,8 +12596,8 @@ packages: resolution: {integrity: sha512-0X2CImDkJGApiAlcf0ODKIneSwBPhqJawOa5wCtKbu7ZECrmS26NvtSILynQ66cgkT/RJ4LidJOc3bUESwmU8g==} engines: {node: '>=0.10.0'} - react@19.2.3: - resolution: {integrity: sha512-Ku/hhYbVjOQnXDZFv2+RibmLFGwFdeeKHFcOTlrt7xplBnya5OGn/hIRDsqDiSUcfORsDC7MPxwork8jBwsIWA==} + react@19.2.4: + resolution: {integrity: sha512-9nfp2hYpCwOjAN+8TZFGhtWEwgvWHXqESH8qT89AT/lWklpLON22Lc8pEtnpsZz7VmawabSU0gCjnj8aC0euHQ==} engines: {node: '>=0.10.0'} read-binary-file-arch@1.0.6: @@ -15836,8 +15836,6 @@ snapshots: '@ckeditor/ckeditor5-core': 47.4.0 '@ckeditor/ckeditor5-upload': 47.4.0 ckeditor5: 47.4.0 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-ai@47.4.0(bufferutil@4.0.9)(utf-8-validate@6.0.5)': dependencies: @@ -15978,16 +15976,12 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.4.0 '@ckeditor/ckeditor5-widget': 47.4.0 es-toolkit: 1.39.5 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-cloud-services@47.4.0': dependencies: '@ckeditor/ckeditor5-core': 47.4.0 '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-code-block@47.4.0(patch_hash=2361d8caad7d6b5bddacc3a3b4aa37dbfba260b1c1b22a450413a79c1bb1ce95)': dependencies: @@ -16180,8 +16174,6 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 es-toolkit: 1.39.5 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-editor-classic@47.4.0': dependencies: @@ -16191,8 +16183,6 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 es-toolkit: 1.39.5 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-editor-decoupled@47.4.0': dependencies: @@ -16202,8 +16192,6 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 es-toolkit: 1.39.5 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-editor-inline@47.4.0': dependencies: @@ -16237,6 +16225,8 @@ snapshots: '@ckeditor/ckeditor5-table': 47.4.0 '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-emoji@47.4.0': dependencies: @@ -16293,6 +16283,8 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.4.0 '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-export-word@47.4.0': dependencies: @@ -16317,8 +16309,6 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 es-toolkit: 1.39.5 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-font@47.4.0': dependencies: @@ -16393,8 +16383,6 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.4.0 '@ckeditor/ckeditor5-widget': 47.4.0 ckeditor5: 47.4.0 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-html-embed@47.4.0': dependencies: @@ -16440,6 +16428,8 @@ snapshots: '@ckeditor/ckeditor5-widget': 47.4.0 ckeditor5: 47.4.0 es-toolkit: 1.39.5 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-import-word@47.4.0': dependencies: @@ -16452,6 +16442,8 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.4.0 '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-indent@47.4.0': dependencies: @@ -16525,6 +16517,8 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.4.0 '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-markdown-gfm@47.4.0': dependencies: @@ -16573,6 +16567,8 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 es-toolkit: 1.39.5 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-merge-fields@47.4.0': dependencies: @@ -16585,6 +16581,8 @@ snapshots: '@ckeditor/ckeditor5-widget': 47.4.0 ckeditor5: 47.4.0 es-toolkit: 1.39.5 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-minimap@47.4.0': dependencies: @@ -16593,6 +16591,8 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.4.0 '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-operations-compressor@47.4.0': dependencies: @@ -16647,6 +16647,8 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.4.0 '@ckeditor/ckeditor5-widget': 47.4.0 ckeditor5: 47.4.0 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-pagination@47.4.0': dependencies: @@ -16754,6 +16756,8 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.4.0 '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-slash-command@47.4.0': dependencies: @@ -16766,6 +16770,8 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.4.0 '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-source-editing-enhanced@47.4.0': dependencies: @@ -16813,6 +16819,8 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 es-toolkit: 1.39.5 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-table@47.4.0': dependencies: @@ -16825,6 +16833,8 @@ snapshots: '@ckeditor/ckeditor5-widget': 47.4.0 ckeditor5: 47.4.0 es-toolkit: 1.39.5 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-template@47.4.0': dependencies: @@ -16935,6 +16945,8 @@ snapshots: '@ckeditor/ckeditor5-engine': 47.4.0 '@ckeditor/ckeditor5-utils': 47.4.0 es-toolkit: 1.39.5 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-widget@47.4.0': dependencies: @@ -16954,6 +16966,8 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 es-toolkit: 1.39.5 + transitivePeerDependencies: + - supports-color '@codemirror/autocomplete@6.18.6': dependencies: @@ -17958,14 +17972,14 @@ snapshots: '@eslint/core': 0.17.0 levn: 0.4.1 - '@excalidraw/excalidraw@0.18.0(@types/react-dom@19.1.6(@types/react@19.1.7))(@types/react@19.1.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': + '@excalidraw/excalidraw@0.18.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)': dependencies: '@braintree/sanitize-url': 6.0.2 '@excalidraw/laser-pointer': 1.3.1 '@excalidraw/mermaid-to-excalidraw': 1.1.2 '@excalidraw/random-username': 1.1.0 - '@radix-ui/react-popover': 1.1.6(@types/react-dom@19.1.6(@types/react@19.1.7))(@types/react@19.1.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@radix-ui/react-tabs': 1.0.2(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + '@radix-ui/react-popover': 1.1.6(@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) + '@radix-ui/react-tabs': 1.0.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4) browser-fs-access: 0.29.1 canvas-roundrect-polyfill: 0.0.1 clsx: 1.1.1 @@ -17974,8 +17988,8 @@ snapshots: fractional-indexing: 3.2.0 fuzzy: 0.1.3 image-blob-reduce: 3.0.1 - jotai: 2.11.0(@types/react@19.1.7)(react@19.2.3) - jotai-scope: 0.7.2(jotai@2.11.0(@types/react@19.1.7)(react@19.2.3))(react@19.2.3) + jotai: 2.11.0(@types/react@19.1.7)(react@19.2.4) + jotai-scope: 0.7.2(jotai@2.11.0(@types/react@19.1.7)(react@19.2.4))(react@19.2.4) lodash.debounce: 4.0.8 lodash.throttle: 4.1.1 nanoid: 4.0.2 @@ -17988,11 +18002,11 @@ snapshots: png-chunks-extract: 1.0.0 points-on-curve: 1.0.1 pwacompat: 2.0.17 - react: 19.2.3 - react-dom: 19.2.3(react@19.2.3) + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) roughjs: 4.6.6 sass: 1.51.0 - tunnel-rat: 0.1.2(@types/react@19.1.7)(react@19.2.3) + tunnel-rat: 0.1.2(@types/react@19.1.7)(react@19.2.4) transitivePeerDependencies: - '@types/react' - '@types/react-dom' @@ -18042,11 +18056,11 @@ snapshots: '@floating-ui/core': 1.6.9 '@floating-ui/utils': 0.2.9 - '@floating-ui/react-dom@2.1.2(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': + '@floating-ui/react-dom@2.1.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': dependencies: '@floating-ui/dom': 1.6.13 - react: 19.2.3 - react-dom: 19.2.3(react@19.2.3) + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) '@floating-ui/utils@0.2.9': {} @@ -19456,275 +19470,275 @@ snapshots: '@radix-ui/primitive@1.1.1': {} - '@radix-ui/react-arrow@1.1.2(@types/react-dom@19.1.6(@types/react@19.1.7))(@types/react@19.1.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': + '@radix-ui/react-arrow@1.1.2(@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)': dependencies: - '@radix-ui/react-primitive': 2.0.2(@types/react-dom@19.1.6(@types/react@19.1.7))(@types/react@19.1.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - react: 19.2.3 - react-dom: 19.2.3(react@19.2.3) + '@radix-ui/react-primitive': 2.0.2(@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) + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) optionalDependencies: '@types/react': 19.1.7 '@types/react-dom': 19.1.6(@types/react@19.1.7) - '@radix-ui/react-collection@1.0.1(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': + '@radix-ui/react-collection@1.0.1(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': dependencies: '@babel/runtime': 7.28.4 - '@radix-ui/react-compose-refs': 1.0.0(react@19.2.3) - '@radix-ui/react-context': 1.0.0(react@19.2.3) - '@radix-ui/react-primitive': 1.0.1(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@radix-ui/react-slot': 1.0.1(react@19.2.3) - react: 19.2.3 - react-dom: 19.2.3(react@19.2.3) + '@radix-ui/react-compose-refs': 1.0.0(react@19.2.4) + '@radix-ui/react-context': 1.0.0(react@19.2.4) + '@radix-ui/react-primitive': 1.0.1(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-slot': 1.0.1(react@19.2.4) + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) - '@radix-ui/react-compose-refs@1.0.0(react@19.2.3)': + '@radix-ui/react-compose-refs@1.0.0(react@19.2.4)': dependencies: '@babel/runtime': 7.28.4 - react: 19.2.3 + react: 19.2.4 - '@radix-ui/react-compose-refs@1.1.1(@types/react@19.1.7)(react@19.2.3)': + '@radix-ui/react-compose-refs@1.1.1(@types/react@19.1.7)(react@19.2.4)': dependencies: - react: 19.2.3 + react: 19.2.4 optionalDependencies: '@types/react': 19.1.7 - '@radix-ui/react-context@1.0.0(react@19.2.3)': + '@radix-ui/react-context@1.0.0(react@19.2.4)': dependencies: '@babel/runtime': 7.28.4 - react: 19.2.3 + react: 19.2.4 - '@radix-ui/react-context@1.1.1(@types/react@19.1.7)(react@19.2.3)': + '@radix-ui/react-context@1.1.1(@types/react@19.1.7)(react@19.2.4)': dependencies: - react: 19.2.3 + react: 19.2.4 optionalDependencies: '@types/react': 19.1.7 - '@radix-ui/react-direction@1.0.0(react@19.2.3)': + '@radix-ui/react-direction@1.0.0(react@19.2.4)': dependencies: '@babel/runtime': 7.28.4 - react: 19.2.3 + react: 19.2.4 - '@radix-ui/react-dismissable-layer@1.1.5(@types/react-dom@19.1.6(@types/react@19.1.7))(@types/react@19.1.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': + '@radix-ui/react-dismissable-layer@1.1.5(@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)': dependencies: '@radix-ui/primitive': 1.1.1 - '@radix-ui/react-compose-refs': 1.1.1(@types/react@19.1.7)(react@19.2.3) - '@radix-ui/react-primitive': 2.0.2(@types/react-dom@19.1.6(@types/react@19.1.7))(@types/react@19.1.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@19.1.7)(react@19.2.3) - '@radix-ui/react-use-escape-keydown': 1.1.0(@types/react@19.1.7)(react@19.2.3) - react: 19.2.3 - react-dom: 19.2.3(react@19.2.3) + '@radix-ui/react-compose-refs': 1.1.1(@types/react@19.1.7)(react@19.2.4) + '@radix-ui/react-primitive': 2.0.2(@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) + '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@19.1.7)(react@19.2.4) + '@radix-ui/react-use-escape-keydown': 1.1.0(@types/react@19.1.7)(react@19.2.4) + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) optionalDependencies: '@types/react': 19.1.7 '@types/react-dom': 19.1.6(@types/react@19.1.7) - '@radix-ui/react-focus-guards@1.1.1(@types/react@19.1.7)(react@19.2.3)': + '@radix-ui/react-focus-guards@1.1.1(@types/react@19.1.7)(react@19.2.4)': dependencies: - react: 19.2.3 + react: 19.2.4 optionalDependencies: '@types/react': 19.1.7 - '@radix-ui/react-focus-scope@1.1.2(@types/react-dom@19.1.6(@types/react@19.1.7))(@types/react@19.1.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': + '@radix-ui/react-focus-scope@1.1.2(@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)': dependencies: - '@radix-ui/react-compose-refs': 1.1.1(@types/react@19.1.7)(react@19.2.3) - '@radix-ui/react-primitive': 2.0.2(@types/react-dom@19.1.6(@types/react@19.1.7))(@types/react@19.1.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@19.1.7)(react@19.2.3) - react: 19.2.3 - react-dom: 19.2.3(react@19.2.3) + '@radix-ui/react-compose-refs': 1.1.1(@types/react@19.1.7)(react@19.2.4) + '@radix-ui/react-primitive': 2.0.2(@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) + '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@19.1.7)(react@19.2.4) + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) optionalDependencies: '@types/react': 19.1.7 '@types/react-dom': 19.1.6(@types/react@19.1.7) - '@radix-ui/react-id@1.0.0(react@19.2.3)': + '@radix-ui/react-id@1.0.0(react@19.2.4)': dependencies: '@babel/runtime': 7.28.4 - '@radix-ui/react-use-layout-effect': 1.0.0(react@19.2.3) - react: 19.2.3 + '@radix-ui/react-use-layout-effect': 1.0.0(react@19.2.4) + react: 19.2.4 - '@radix-ui/react-id@1.1.0(@types/react@19.1.7)(react@19.2.3)': + '@radix-ui/react-id@1.1.0(@types/react@19.1.7)(react@19.2.4)': dependencies: - '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@19.1.7)(react@19.2.3) - react: 19.2.3 + '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@19.1.7)(react@19.2.4) + react: 19.2.4 optionalDependencies: '@types/react': 19.1.7 - '@radix-ui/react-popover@1.1.6(@types/react-dom@19.1.6(@types/react@19.1.7))(@types/react@19.1.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': + '@radix-ui/react-popover@1.1.6(@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)': dependencies: '@radix-ui/primitive': 1.1.1 - '@radix-ui/react-compose-refs': 1.1.1(@types/react@19.1.7)(react@19.2.3) - '@radix-ui/react-context': 1.1.1(@types/react@19.1.7)(react@19.2.3) - '@radix-ui/react-dismissable-layer': 1.1.5(@types/react-dom@19.1.6(@types/react@19.1.7))(@types/react@19.1.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@radix-ui/react-focus-guards': 1.1.1(@types/react@19.1.7)(react@19.2.3) - '@radix-ui/react-focus-scope': 1.1.2(@types/react-dom@19.1.6(@types/react@19.1.7))(@types/react@19.1.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@radix-ui/react-id': 1.1.0(@types/react@19.1.7)(react@19.2.3) - '@radix-ui/react-popper': 1.2.2(@types/react-dom@19.1.6(@types/react@19.1.7))(@types/react@19.1.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@radix-ui/react-portal': 1.1.4(@types/react-dom@19.1.6(@types/react@19.1.7))(@types/react@19.1.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@radix-ui/react-presence': 1.1.2(@types/react-dom@19.1.6(@types/react@19.1.7))(@types/react@19.1.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@radix-ui/react-primitive': 2.0.2(@types/react-dom@19.1.6(@types/react@19.1.7))(@types/react@19.1.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@radix-ui/react-slot': 1.1.2(@types/react@19.1.7)(react@19.2.3) - '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@19.1.7)(react@19.2.3) + '@radix-ui/react-compose-refs': 1.1.1(@types/react@19.1.7)(react@19.2.4) + '@radix-ui/react-context': 1.1.1(@types/react@19.1.7)(react@19.2.4) + '@radix-ui/react-dismissable-layer': 1.1.5(@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) + '@radix-ui/react-focus-guards': 1.1.1(@types/react@19.1.7)(react@19.2.4) + '@radix-ui/react-focus-scope': 1.1.2(@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) + '@radix-ui/react-id': 1.1.0(@types/react@19.1.7)(react@19.2.4) + '@radix-ui/react-popper': 1.2.2(@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) + '@radix-ui/react-portal': 1.1.4(@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) + '@radix-ui/react-presence': 1.1.2(@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) + '@radix-ui/react-primitive': 2.0.2(@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) + '@radix-ui/react-slot': 1.1.2(@types/react@19.1.7)(react@19.2.4) + '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@19.1.7)(react@19.2.4) aria-hidden: 1.2.4 - react: 19.2.3 - react-dom: 19.2.3(react@19.2.3) - react-remove-scroll: 2.6.3(@types/react@19.1.7)(react@19.2.3) + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) + react-remove-scroll: 2.6.3(@types/react@19.1.7)(react@19.2.4) optionalDependencies: '@types/react': 19.1.7 '@types/react-dom': 19.1.6(@types/react@19.1.7) - '@radix-ui/react-popper@1.2.2(@types/react-dom@19.1.6(@types/react@19.1.7))(@types/react@19.1.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': + '@radix-ui/react-popper@1.2.2(@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)': dependencies: - '@floating-ui/react-dom': 2.1.2(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@radix-ui/react-arrow': 1.1.2(@types/react-dom@19.1.6(@types/react@19.1.7))(@types/react@19.1.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@radix-ui/react-compose-refs': 1.1.1(@types/react@19.1.7)(react@19.2.3) - '@radix-ui/react-context': 1.1.1(@types/react@19.1.7)(react@19.2.3) - '@radix-ui/react-primitive': 2.0.2(@types/react-dom@19.1.6(@types/react@19.1.7))(@types/react@19.1.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@19.1.7)(react@19.2.3) - '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@19.1.7)(react@19.2.3) - '@radix-ui/react-use-rect': 1.1.0(@types/react@19.1.7)(react@19.2.3) - '@radix-ui/react-use-size': 1.1.0(@types/react@19.1.7)(react@19.2.3) + '@floating-ui/react-dom': 2.1.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-arrow': 1.1.2(@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) + '@radix-ui/react-compose-refs': 1.1.1(@types/react@19.1.7)(react@19.2.4) + '@radix-ui/react-context': 1.1.1(@types/react@19.1.7)(react@19.2.4) + '@radix-ui/react-primitive': 2.0.2(@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) + '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@19.1.7)(react@19.2.4) + '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@19.1.7)(react@19.2.4) + '@radix-ui/react-use-rect': 1.1.0(@types/react@19.1.7)(react@19.2.4) + '@radix-ui/react-use-size': 1.1.0(@types/react@19.1.7)(react@19.2.4) '@radix-ui/rect': 1.1.0 - react: 19.2.3 - react-dom: 19.2.3(react@19.2.3) + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) optionalDependencies: '@types/react': 19.1.7 '@types/react-dom': 19.1.6(@types/react@19.1.7) - '@radix-ui/react-portal@1.1.4(@types/react-dom@19.1.6(@types/react@19.1.7))(@types/react@19.1.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': + '@radix-ui/react-portal@1.1.4(@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)': dependencies: - '@radix-ui/react-primitive': 2.0.2(@types/react-dom@19.1.6(@types/react@19.1.7))(@types/react@19.1.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@19.1.7)(react@19.2.3) - react: 19.2.3 - react-dom: 19.2.3(react@19.2.3) + '@radix-ui/react-primitive': 2.0.2(@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) + '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@19.1.7)(react@19.2.4) + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) optionalDependencies: '@types/react': 19.1.7 '@types/react-dom': 19.1.6(@types/react@19.1.7) - '@radix-ui/react-presence@1.0.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': + '@radix-ui/react-presence@1.0.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': dependencies: '@babel/runtime': 7.28.4 - '@radix-ui/react-compose-refs': 1.0.0(react@19.2.3) - '@radix-ui/react-use-layout-effect': 1.0.0(react@19.2.3) - react: 19.2.3 - react-dom: 19.2.3(react@19.2.3) + '@radix-ui/react-compose-refs': 1.0.0(react@19.2.4) + '@radix-ui/react-use-layout-effect': 1.0.0(react@19.2.4) + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) - '@radix-ui/react-presence@1.1.2(@types/react-dom@19.1.6(@types/react@19.1.7))(@types/react@19.1.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': + '@radix-ui/react-presence@1.1.2(@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)': dependencies: - '@radix-ui/react-compose-refs': 1.1.1(@types/react@19.1.7)(react@19.2.3) - '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@19.1.7)(react@19.2.3) - react: 19.2.3 - react-dom: 19.2.3(react@19.2.3) + '@radix-ui/react-compose-refs': 1.1.1(@types/react@19.1.7)(react@19.2.4) + '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@19.1.7)(react@19.2.4) + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) optionalDependencies: '@types/react': 19.1.7 '@types/react-dom': 19.1.6(@types/react@19.1.7) - '@radix-ui/react-primitive@1.0.1(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': + '@radix-ui/react-primitive@1.0.1(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': dependencies: '@babel/runtime': 7.28.4 - '@radix-ui/react-slot': 1.0.1(react@19.2.3) - react: 19.2.3 - react-dom: 19.2.3(react@19.2.3) + '@radix-ui/react-slot': 1.0.1(react@19.2.4) + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) - '@radix-ui/react-primitive@2.0.2(@types/react-dom@19.1.6(@types/react@19.1.7))(@types/react@19.1.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': + '@radix-ui/react-primitive@2.0.2(@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)': dependencies: - '@radix-ui/react-slot': 1.1.2(@types/react@19.1.7)(react@19.2.3) - react: 19.2.3 - react-dom: 19.2.3(react@19.2.3) + '@radix-ui/react-slot': 1.1.2(@types/react@19.1.7)(react@19.2.4) + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) optionalDependencies: '@types/react': 19.1.7 '@types/react-dom': 19.1.6(@types/react@19.1.7) - '@radix-ui/react-roving-focus@1.0.2(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': + '@radix-ui/react-roving-focus@1.0.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': dependencies: '@babel/runtime': 7.28.4 '@radix-ui/primitive': 1.0.0 - '@radix-ui/react-collection': 1.0.1(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@radix-ui/react-compose-refs': 1.0.0(react@19.2.3) - '@radix-ui/react-context': 1.0.0(react@19.2.3) - '@radix-ui/react-direction': 1.0.0(react@19.2.3) - '@radix-ui/react-id': 1.0.0(react@19.2.3) - '@radix-ui/react-primitive': 1.0.1(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@radix-ui/react-use-callback-ref': 1.0.0(react@19.2.3) - '@radix-ui/react-use-controllable-state': 1.0.0(react@19.2.3) - react: 19.2.3 - react-dom: 19.2.3(react@19.2.3) + '@radix-ui/react-collection': 1.0.1(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-compose-refs': 1.0.0(react@19.2.4) + '@radix-ui/react-context': 1.0.0(react@19.2.4) + '@radix-ui/react-direction': 1.0.0(react@19.2.4) + '@radix-ui/react-id': 1.0.0(react@19.2.4) + '@radix-ui/react-primitive': 1.0.1(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-use-callback-ref': 1.0.0(react@19.2.4) + '@radix-ui/react-use-controllable-state': 1.0.0(react@19.2.4) + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) - '@radix-ui/react-slot@1.0.1(react@19.2.3)': + '@radix-ui/react-slot@1.0.1(react@19.2.4)': dependencies: '@babel/runtime': 7.28.4 - '@radix-ui/react-compose-refs': 1.0.0(react@19.2.3) - react: 19.2.3 + '@radix-ui/react-compose-refs': 1.0.0(react@19.2.4) + react: 19.2.4 - '@radix-ui/react-slot@1.1.2(@types/react@19.1.7)(react@19.2.3)': + '@radix-ui/react-slot@1.1.2(@types/react@19.1.7)(react@19.2.4)': dependencies: - '@radix-ui/react-compose-refs': 1.1.1(@types/react@19.1.7)(react@19.2.3) - react: 19.2.3 + '@radix-ui/react-compose-refs': 1.1.1(@types/react@19.1.7)(react@19.2.4) + react: 19.2.4 optionalDependencies: '@types/react': 19.1.7 - '@radix-ui/react-tabs@1.0.2(react-dom@19.2.3(react@19.2.3))(react@19.2.3)': + '@radix-ui/react-tabs@1.0.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': dependencies: '@babel/runtime': 7.28.4 '@radix-ui/primitive': 1.0.0 - '@radix-ui/react-context': 1.0.0(react@19.2.3) - '@radix-ui/react-direction': 1.0.0(react@19.2.3) - '@radix-ui/react-id': 1.0.0(react@19.2.3) - '@radix-ui/react-presence': 1.0.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@radix-ui/react-primitive': 1.0.1(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@radix-ui/react-roving-focus': 1.0.2(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - '@radix-ui/react-use-controllable-state': 1.0.0(react@19.2.3) - react: 19.2.3 - react-dom: 19.2.3(react@19.2.3) + '@radix-ui/react-context': 1.0.0(react@19.2.4) + '@radix-ui/react-direction': 1.0.0(react@19.2.4) + '@radix-ui/react-id': 1.0.0(react@19.2.4) + '@radix-ui/react-presence': 1.0.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-primitive': 1.0.1(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-roving-focus': 1.0.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + '@radix-ui/react-use-controllable-state': 1.0.0(react@19.2.4) + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) - '@radix-ui/react-use-callback-ref@1.0.0(react@19.2.3)': + '@radix-ui/react-use-callback-ref@1.0.0(react@19.2.4)': dependencies: '@babel/runtime': 7.28.4 - react: 19.2.3 + react: 19.2.4 - '@radix-ui/react-use-callback-ref@1.1.0(@types/react@19.1.7)(react@19.2.3)': + '@radix-ui/react-use-callback-ref@1.1.0(@types/react@19.1.7)(react@19.2.4)': dependencies: - react: 19.2.3 + react: 19.2.4 optionalDependencies: '@types/react': 19.1.7 - '@radix-ui/react-use-controllable-state@1.0.0(react@19.2.3)': + '@radix-ui/react-use-controllable-state@1.0.0(react@19.2.4)': dependencies: '@babel/runtime': 7.28.4 - '@radix-ui/react-use-callback-ref': 1.0.0(react@19.2.3) - react: 19.2.3 + '@radix-ui/react-use-callback-ref': 1.0.0(react@19.2.4) + react: 19.2.4 - '@radix-ui/react-use-controllable-state@1.1.0(@types/react@19.1.7)(react@19.2.3)': + '@radix-ui/react-use-controllable-state@1.1.0(@types/react@19.1.7)(react@19.2.4)': dependencies: - '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@19.1.7)(react@19.2.3) - react: 19.2.3 + '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@19.1.7)(react@19.2.4) + react: 19.2.4 optionalDependencies: '@types/react': 19.1.7 - '@radix-ui/react-use-escape-keydown@1.1.0(@types/react@19.1.7)(react@19.2.3)': + '@radix-ui/react-use-escape-keydown@1.1.0(@types/react@19.1.7)(react@19.2.4)': dependencies: - '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@19.1.7)(react@19.2.3) - react: 19.2.3 + '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@19.1.7)(react@19.2.4) + react: 19.2.4 optionalDependencies: '@types/react': 19.1.7 - '@radix-ui/react-use-layout-effect@1.0.0(react@19.2.3)': + '@radix-ui/react-use-layout-effect@1.0.0(react@19.2.4)': dependencies: '@babel/runtime': 7.28.4 - react: 19.2.3 + react: 19.2.4 - '@radix-ui/react-use-layout-effect@1.1.0(@types/react@19.1.7)(react@19.2.3)': + '@radix-ui/react-use-layout-effect@1.1.0(@types/react@19.1.7)(react@19.2.4)': dependencies: - react: 19.2.3 + react: 19.2.4 optionalDependencies: '@types/react': 19.1.7 - '@radix-ui/react-use-rect@1.1.0(@types/react@19.1.7)(react@19.2.3)': + '@radix-ui/react-use-rect@1.1.0(@types/react@19.1.7)(react@19.2.4)': dependencies: '@radix-ui/rect': 1.1.0 - react: 19.2.3 + react: 19.2.4 optionalDependencies: '@types/react': 19.1.7 - '@radix-ui/react-use-size@1.1.0(@types/react@19.1.7)(react@19.2.3)': + '@radix-ui/react-use-size@1.1.0(@types/react@19.1.7)(react@19.2.4)': dependencies: - '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@19.1.7)(react@19.2.3) - react: 19.2.3 + '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@19.1.7)(react@19.2.4) + react: 19.2.4 optionalDependencies: '@types/react': 19.1.7 @@ -19764,13 +19778,13 @@ snapshots: https-proxy-agent: 7.0.6 mobx: 6.15.0 pluralize: 8.0.0 - react: 19.2.3 - react-dom: 19.2.3(react@19.2.3) - redoc: 2.5.1(core-js@3.46.0)(encoding@0.1.13)(mobx@6.15.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(styled-components@6.1.19(react-dom@19.2.3(react@19.2.3))(react@19.2.3)) + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) + redoc: 2.5.1(core-js@3.46.0)(encoding@0.1.13)(mobx@6.15.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(styled-components@6.1.19(react-dom@19.2.4(react@19.2.4))(react@19.2.4)) semver: 7.7.3 set-cookie-parser: 2.7.2 simple-websocket: 9.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5) - styled-components: 6.1.19(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + styled-components: 6.1.19(react-dom@19.2.4(react@19.2.4))(react@19.2.4) ulid: 3.0.2 undici: 6.23.0 yargs: 17.0.1 @@ -26418,15 +26432,15 @@ snapshots: dependencies: '@panva/asn1.js': 1.0.0 - jotai-scope@0.7.2(jotai@2.11.0(@types/react@19.1.7)(react@19.2.3))(react@19.2.3): + jotai-scope@0.7.2(jotai@2.11.0(@types/react@19.1.7)(react@19.2.4))(react@19.2.4): dependencies: - jotai: 2.11.0(@types/react@19.1.7)(react@19.2.3) - react: 19.2.3 + jotai: 2.11.0(@types/react@19.1.7)(react@19.2.4) + react: 19.2.4 - jotai@2.11.0(@types/react@19.1.7)(react@19.2.3): + jotai@2.11.0(@types/react@19.1.7)(react@19.2.4): optionalDependencies: '@types/react': 19.1.7 - react: 19.2.3 + react: 19.2.4 jpeg-js@0.4.4: {} @@ -27751,21 +27765,21 @@ snapshots: pkg-types: 1.3.1 ufo: 1.6.1 - mobx-react-lite@4.1.1(mobx@6.15.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3): + mobx-react-lite@4.1.1(mobx@6.15.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4): dependencies: mobx: 6.15.0 - react: 19.2.3 - use-sync-external-store: 1.6.0(react@19.2.3) + react: 19.2.4 + use-sync-external-store: 1.6.0(react@19.2.4) optionalDependencies: - react-dom: 19.2.3(react@19.2.3) + react-dom: 19.2.4(react@19.2.4) - mobx-react@9.2.0(mobx@6.15.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3): + mobx-react@9.2.0(mobx@6.15.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4): dependencies: mobx: 6.15.0 - mobx-react-lite: 4.1.1(mobx@6.15.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - react: 19.2.3 + mobx-react-lite: 4.1.1(mobx@6.15.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) + react: 19.2.4 optionalDependencies: - react-dom: 19.2.3(react@19.2.3) + react-dom: 19.2.4(react@19.2.4) mobx@6.15.0: {} @@ -29387,20 +29401,20 @@ snapshots: react: 16.14.0 scheduler: 0.19.1 - react-dom@19.2.3(react@19.2.3): + react-dom@19.2.4(react@19.2.4): dependencies: - react: 19.2.3 + react: 19.2.4 scheduler: 0.27.0 - react-i18next@16.5.3(i18next@25.8.0(typescript@5.9.3))(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(typescript@5.9.3): + react-i18next@16.5.3(i18next@25.8.0(typescript@5.9.3))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3): dependencies: '@babel/runtime': 7.28.4 html-parse-stringify: 3.0.1 i18next: 25.8.0(typescript@5.9.3) - react: 19.2.3 - use-sync-external-store: 1.6.0(react@19.2.3) + react: 19.2.4 + use-sync-external-store: 1.6.0(react@19.2.4) optionalDependencies: - react-dom: 19.2.3(react@19.2.3) + react-dom: 19.2.4(react@19.2.4) typescript: 5.9.3 react-interactive@0.8.3(react@16.14.0): @@ -29414,22 +29428,22 @@ snapshots: react-refresh@0.18.0: {} - react-remove-scroll-bar@2.3.8(@types/react@19.1.7)(react@19.2.3): + react-remove-scroll-bar@2.3.8(@types/react@19.1.7)(react@19.2.4): dependencies: - react: 19.2.3 - react-style-singleton: 2.2.3(@types/react@19.1.7)(react@19.2.3) + react: 19.2.4 + react-style-singleton: 2.2.3(@types/react@19.1.7)(react@19.2.4) tslib: 2.8.1 optionalDependencies: '@types/react': 19.1.7 - react-remove-scroll@2.6.3(@types/react@19.1.7)(react@19.2.3): + react-remove-scroll@2.6.3(@types/react@19.1.7)(react@19.2.4): dependencies: - react: 19.2.3 - react-remove-scroll-bar: 2.3.8(@types/react@19.1.7)(react@19.2.3) - react-style-singleton: 2.2.3(@types/react@19.1.7)(react@19.2.3) + react: 19.2.4 + react-remove-scroll-bar: 2.3.8(@types/react@19.1.7)(react@19.2.4) + react-style-singleton: 2.2.3(@types/react@19.1.7)(react@19.2.4) tslib: 2.8.1 - use-callback-ref: 1.3.3(@types/react@19.1.7)(react@19.2.3) - use-sidecar: 1.1.3(@types/react@19.1.7)(react@19.2.3) + use-callback-ref: 1.3.3(@types/react@19.1.7)(react@19.2.4) + use-sidecar: 1.1.3(@types/react@19.1.7)(react@19.2.4) optionalDependencies: '@types/react': 19.1.7 @@ -29454,24 +29468,24 @@ snapshots: react: 16.14.0 warning: 4.0.3 - react-style-singleton@2.2.3(@types/react@19.1.7)(react@19.2.3): + react-style-singleton@2.2.3(@types/react@19.1.7)(react@19.2.4): dependencies: get-nonce: 1.0.1 - react: 19.2.3 + react: 19.2.4 tslib: 2.8.1 optionalDependencies: '@types/react': 19.1.7 - react-tabs@6.1.0(react@19.2.3): + react-tabs@6.1.0(react@19.2.4): dependencies: clsx: 2.1.1 prop-types: 15.8.1 - react: 19.2.3 + react: 19.2.4 - react-window@2.2.5(react-dom@19.2.3(react@19.2.3))(react@19.2.3): + react-window@2.2.5(react-dom@19.2.4(react@19.2.4))(react@19.2.4): dependencies: - react: 19.2.3 - react-dom: 19.2.3(react@19.2.3) + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) react@16.14.0: dependencies: @@ -29479,7 +29493,7 @@ snapshots: object-assign: 4.1.1 prop-types: 15.8.1 - react@19.2.3: {} + react@19.2.4: {} read-binary-file-arch@1.0.6: dependencies: @@ -29548,7 +29562,7 @@ snapshots: dependencies: resolve: 1.22.10 - redoc@2.5.1(core-js@3.46.0)(encoding@0.1.13)(mobx@6.15.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(styled-components@6.1.19(react-dom@19.2.3(react@19.2.3))(react@19.2.3)): + redoc@2.5.1(core-js@3.46.0)(encoding@0.1.13)(mobx@6.15.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(styled-components@6.1.19(react-dom@19.2.4(react@19.2.4))(react@19.2.4)): dependencies: '@redocly/openapi-core': 1.34.5 classnames: 2.5.1 @@ -29561,19 +29575,19 @@ snapshots: mark.js: 8.11.1 marked: 4.3.0 mobx: 6.15.0 - mobx-react: 9.2.0(mobx@6.15.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + mobx-react: 9.2.0(mobx@6.15.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) openapi-sampler: 1.6.2 path-browserify: 1.0.1 perfect-scrollbar: 1.5.6 polished: 4.3.1 prismjs: 1.30.0 prop-types: 15.8.1 - react: 19.2.3 - react-dom: 19.2.3(react@19.2.3) - react-tabs: 6.1.0(react@19.2.3) + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) + react-tabs: 6.1.0(react@19.2.4) slugify: 1.4.7 stickyfill: 1.1.1 - styled-components: 6.1.19(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + styled-components: 6.1.19(react-dom@19.2.4(react@19.2.4))(react@19.2.4) swagger2openapi: 7.0.8(encoding@0.1.13) url-template: 2.0.8 transitivePeerDependencies: @@ -30868,7 +30882,7 @@ snapshots: style-search@0.1.0: {} - styled-components@6.1.19(react-dom@19.2.3(react@19.2.3))(react@19.2.3): + styled-components@6.1.19(react-dom@19.2.4(react@19.2.4))(react@19.2.4): dependencies: '@emotion/is-prop-valid': 1.2.2 '@emotion/unitless': 0.8.1 @@ -30876,8 +30890,8 @@ snapshots: css-to-react-native: 3.2.0 csstype: 3.1.3 postcss: 8.4.49 - react: 19.2.3 - react-dom: 19.2.3(react@19.2.3) + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) shallowequal: 1.1.0 stylis: 4.3.2 tslib: 2.6.2 @@ -31489,9 +31503,9 @@ snapshots: dependencies: safe-buffer: 5.2.1 - tunnel-rat@0.1.2(@types/react@19.1.7)(react@19.2.3): + tunnel-rat@0.1.2(@types/react@19.1.7)(react@19.2.4): dependencies: - zustand: 4.5.6(@types/react@19.1.7)(react@19.2.3) + zustand: 4.5.6(@types/react@19.1.7)(react@19.2.4) transitivePeerDependencies: - '@types/react' - immer @@ -31828,24 +31842,24 @@ snapshots: urlpattern-polyfill@10.1.0: {} - use-callback-ref@1.3.3(@types/react@19.1.7)(react@19.2.3): + use-callback-ref@1.3.3(@types/react@19.1.7)(react@19.2.4): dependencies: - react: 19.2.3 + react: 19.2.4 tslib: 2.8.1 optionalDependencies: '@types/react': 19.1.7 - use-sidecar@1.1.3(@types/react@19.1.7)(react@19.2.3): + use-sidecar@1.1.3(@types/react@19.1.7)(react@19.2.4): dependencies: detect-node-es: 1.1.0 - react: 19.2.3 + react: 19.2.4 tslib: 2.8.1 optionalDependencies: '@types/react': 19.1.7 - use-sync-external-store@1.6.0(react@19.2.3): + use-sync-external-store@1.6.0(react@19.2.4): dependencies: - react: 19.2.3 + react: 19.2.4 user-agent-data-types@0.4.2: {} @@ -32714,11 +32728,11 @@ snapshots: zod@4.1.12: {} - zustand@4.5.6(@types/react@19.1.7)(react@19.2.3): + zustand@4.5.6(@types/react@19.1.7)(react@19.2.4): dependencies: - use-sync-external-store: 1.6.0(react@19.2.3) + use-sync-external-store: 1.6.0(react@19.2.4) optionalDependencies: '@types/react': 19.1.7 - react: 19.2.3 + react: 19.2.4 zwitch@2.0.4: {} From f7986b90491ab329cecd7da4e227729be581c25b Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 27 Jan 2026 05:54:58 +0000 Subject: [PATCH 320/353] chore(deps): update dependency vite-plugin-static-copy to v3.2.0 --- apps/client/package.json | 2 +- pnpm-lock.yaml | 58 ++++++++++++++++++++++++++++------------ 2 files changed, 42 insertions(+), 18 deletions(-) diff --git a/apps/client/package.json b/apps/client/package.json index e9241f7082..e4aa810db3 100644 --- a/apps/client/package.json +++ b/apps/client/package.json @@ -81,6 +81,6 @@ "happy-dom": "20.3.9", "lightningcss": "1.31.1", "script-loader": "0.7.2", - "vite-plugin-static-copy": "3.1.5" + "vite-plugin-static-copy": "3.2.0" } } \ No newline at end of file diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index c716b4dd18..fb1493814f 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -354,8 +354,8 @@ importers: specifier: 0.7.2 version: 0.7.2 vite-plugin-static-copy: - specifier: 3.1.5 - version: 3.1.5(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.31.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1)) + specifier: 3.2.0 + version: 3.2.0(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.31.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1)) apps/db-compare: dependencies: @@ -14549,8 +14549,8 @@ packages: vite: optional: true - vite-plugin-static-copy@3.1.5: - resolution: {integrity: sha512-9pbZn9Vb+uUNg/Tr/f2MXmGvfSfLeWjscS4zTA3v+sWqKN+AjJ/ipTFwaqdopJkNkxG5DfgYrZXD80ljbNDxbg==} + vite-plugin-static-copy@3.2.0: + resolution: {integrity: sha512-g2k9z8B/1Bx7D4wnFjPLx9dyYGrqWMLTpwTtPHhcU+ElNZP2O4+4OsyaficiDClus0dzVhdGvoGFYMJxoXZ12Q==} engines: {node: ^18.0.0 || >=20.0.0} peerDependencies: vite: ^5.0.0 || ^6.0.0 || ^7.0.0 @@ -15978,8 +15978,6 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.4.0 '@ckeditor/ckeditor5-widget': 47.4.0 es-toolkit: 1.39.5 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-cloud-services@47.4.0': dependencies: @@ -16180,8 +16178,6 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 es-toolkit: 1.39.5 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-editor-classic@47.4.0': dependencies: @@ -16191,8 +16187,6 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 es-toolkit: 1.39.5 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-editor-decoupled@47.4.0': dependencies: @@ -16202,8 +16196,6 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 es-toolkit: 1.39.5 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-editor-inline@47.4.0': dependencies: @@ -16237,6 +16229,8 @@ snapshots: '@ckeditor/ckeditor5-table': 47.4.0 '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-emoji@47.4.0': dependencies: @@ -16262,6 +16256,8 @@ snapshots: '@ckeditor/ckeditor5-core': 47.4.0 '@ckeditor/ckeditor5-engine': 47.4.0 '@ckeditor/ckeditor5-utils': 47.4.0 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-essentials@47.4.0': dependencies: @@ -16293,6 +16289,8 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.4.0 '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-export-word@47.4.0': dependencies: @@ -16317,8 +16315,6 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 es-toolkit: 1.39.5 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-font@47.4.0': dependencies: @@ -16393,8 +16389,6 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.4.0 '@ckeditor/ckeditor5-widget': 47.4.0 ckeditor5: 47.4.0 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-html-embed@47.4.0': dependencies: @@ -16440,6 +16434,8 @@ snapshots: '@ckeditor/ckeditor5-widget': 47.4.0 ckeditor5: 47.4.0 es-toolkit: 1.39.5 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-import-word@47.4.0': dependencies: @@ -16452,6 +16448,8 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.4.0 '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-indent@47.4.0': dependencies: @@ -16525,6 +16523,8 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.4.0 '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-markdown-gfm@47.4.0': dependencies: @@ -16573,6 +16573,8 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 es-toolkit: 1.39.5 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-merge-fields@47.4.0': dependencies: @@ -16585,6 +16587,8 @@ snapshots: '@ckeditor/ckeditor5-widget': 47.4.0 ckeditor5: 47.4.0 es-toolkit: 1.39.5 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-minimap@47.4.0': dependencies: @@ -16593,6 +16597,8 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.4.0 '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-operations-compressor@47.4.0': dependencies: @@ -16647,6 +16653,8 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.4.0 '@ckeditor/ckeditor5-widget': 47.4.0 ckeditor5: 47.4.0 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-pagination@47.4.0': dependencies: @@ -16710,6 +16718,8 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.4.0 '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-restricted-editing@47.4.0': dependencies: @@ -16754,6 +16764,8 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.4.0 '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-slash-command@47.4.0': dependencies: @@ -16766,6 +16778,8 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.4.0 '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-source-editing-enhanced@47.4.0': dependencies: @@ -16792,6 +16806,8 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.4.0 '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-special-characters@47.4.0': dependencies: @@ -16813,6 +16829,8 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 es-toolkit: 1.39.5 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-table@47.4.0': dependencies: @@ -16825,6 +16843,8 @@ snapshots: '@ckeditor/ckeditor5-widget': 47.4.0 ckeditor5: 47.4.0 es-toolkit: 1.39.5 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-template@47.4.0': dependencies: @@ -16935,6 +16955,8 @@ snapshots: '@ckeditor/ckeditor5-engine': 47.4.0 '@ckeditor/ckeditor5-utils': 47.4.0 es-toolkit: 1.39.5 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-widget@47.4.0': dependencies: @@ -16954,6 +16976,8 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 es-toolkit: 1.39.5 + transitivePeerDependencies: + - supports-color '@codemirror/autocomplete@6.18.6': dependencies: @@ -31952,7 +31976,7 @@ snapshots: - rollup - supports-color - vite-plugin-static-copy@3.1.5(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.31.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1)): + vite-plugin-static-copy@3.2.0(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.31.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1)): dependencies: chokidar: 3.6.0 p-map: 7.0.4 From 58ea661d4ba50ec7a9f6832a76d74f79551b1ad2 Mon Sep 17 00:00:00 2001 From: Toto Yullian <tox@sysadmin.id> Date: Mon, 26 Jan 2026 11:57:35 +0100 Subject: [PATCH 321/353] Translated using Weblate (Indonesian) Currently translated at 38.8% (59 of 152 strings) Translation: Trilium Notes/Website Translate-URL: https://hosted.weblate.org/projects/trilium/website/id/ --- apps/website/src/translations/id/translation.json | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/apps/website/src/translations/id/translation.json b/apps/website/src/translations/id/translation.json index b8c02bc97d..d27b569b84 100644 --- a/apps/website/src/translations/id/translation.json +++ b/apps/website/src/translations/id/translation.json @@ -31,7 +31,12 @@ "sync_content": "Gunakan hostinganmu sendiri atau instansi cloud untuk sinkronisasi mudah catatan-catatan anda pada beberapa perangkat, dan untuk akses dari ponsel anda dengan PWA.", "search_content": "Atau cari teks di dalam catatan lalu lebih dalam dengan cari catatan induk, atau berdasarkan kedalaman.", "web_clipper_title": "Penyemat Web", - "web_clipper_content": "Mengambil halaman web (atau foto halaman web) dan disematkan langsung ke catatan Trilium dengan ekstensi browser penyemat web." + "web_clipper_content": "Mengambil halaman web (atau foto halaman web) dan disematkan langsung ke catatan Trilium dengan ekstensi browser penyemat web.", + "protected_notes_title": "Catatan terlindungi", + "protected_notes_content": "Lindungi informasi pribadi sensitif dengan mengenkripsi catatan dan menguncinya di balik sesi yang dilindungi kata sandi.", + "jump_to_title": "Pencarian cepat dan perintah", + "jump_to_content": "Melompat dengan cepat ke catatan atau perintah UI di seluruh hierarki dengan mencari judulnya, dengan pencocokan kabur untuk memperhitungkan kesalahan ketik atau perbedaan kecil.", + "search_title": "Pencarian mumpuni" }, "note_types": { "title": "Cara-cara menampilkan informasi Anda", @@ -65,5 +70,8 @@ "database_question": "Di manakah data disimpan?", "database_answer": "Semua catatan Anda akan disimpan dalam basis data SQLite di dalam sebuah folder aplikasi. Alasan mengapa Trilium menggunakan basis data alih-alih file teks biasa adalah demi performa dan karena beberapa fitur akan jauh lebih sulit untuk diterapkan, seperti klon (catatan yang sama di beberapa tempat dalam hierarki). Untuk menemukan folder aplikasinya, cukup buka jendela 'Tentang'.", "server_question": "Apakah saya butuh server untuk menjalankan Trilium?" + }, + "extensibility_benefits": { + "share_title": "Bagikan catatan di web" } } From e145cd80a9b28637790a031522459de10340671a Mon Sep 17 00:00:00 2001 From: Marcel <marcel.wiechmann@gmail.com> Date: Mon, 26 Jan 2026 15:43:31 +0100 Subject: [PATCH 322/353] Translated using Weblate (German) Currently translated at 100.0% (388 of 388 strings) Translation: Trilium Notes/Server Translate-URL: https://hosted.weblate.org/projects/trilium/server/de/ --- apps/server/src/assets/translations/de/server.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/server/src/assets/translations/de/server.json b/apps/server/src/assets/translations/de/server.json index 127b28bd71..96deee663e 100644 --- a/apps/server/src/assets/translations/de/server.json +++ b/apps/server/src/assets/translations/de/server.json @@ -65,7 +65,7 @@ "toggle-image-properties": "Bildattribute umschalten", "toggle-owned-attributes": "Eigene Attribute umschalten", "toggle-inherited-attributes": "Vererbte Attribute umschalten", - "toggle-promoted-attributes": "Beworbene Attribute umschalten", + "toggle-promoted-attributes": "Hervorgehobene Attribute umschalten", "toggle-link-map": "Link-Karte umschalten", "toggle-note-info": "Notizinformationen umschalten", "toggle-note-paths": "Notizpfade umschalten", @@ -391,7 +391,7 @@ "toggle-ribbon-tab-image-properties": "Registerkarte Bilder-Eigenschaften umschalten", "toggle-ribbon-tab-owned-attributes": "Registerkarte Besitzerattribute umschalten", "toggle-ribbon-tab-inherited-attributes": "Registerkarte geerbte Attribute umschalten", - "toggle-ribbon-tab-promoted-attributes": "Registerkarte verliehene Attribute umschalten", + "toggle-ribbon-tab-promoted-attributes": "Registerkarte hervorgehobene Attribute umschalten", "toggle-ribbon-tab-note-map": "Registerkarte Notizkarte umschalten", "toggle-ribbon-tab-note-info": "Registerkarte Notiz-Info umschalten", "toggle-ribbon-tab-note-paths": "Registerkarte Notiz-Pfad umschalten", From 1cb5a13ea46f4f6f9bc524330fda5e1fe003d1d2 Mon Sep 17 00:00:00 2001 From: Marcel <marcel.wiechmann@gmail.com> Date: Mon, 26 Jan 2026 20:32:38 +0100 Subject: [PATCH 323/353] Translated using Weblate (German) Currently translated at 100.0% (1763 of 1763 strings) Translation: Trilium Notes/Client Translate-URL: https://hosted.weblate.org/projects/trilium/client/de/ --- .../src/translations/de/translation.json | 132 +++++++++--------- 1 file changed, 66 insertions(+), 66 deletions(-) diff --git a/apps/client/src/translations/de/translation.json b/apps/client/src/translations/de/translation.json index a5b83e24ae..07c56a8b50 100644 --- a/apps/client/src/translations/de/translation.json +++ b/apps/client/src/translations/de/translation.json @@ -28,9 +28,9 @@ }, "open-script-note": "Script-Notiz öffnen", "widget-render-error": { - "title": "Eine externe React Integration konnte nicht dargestellt werden" + "title": "Benutzerdefiniertes React-Widget konnte nicht dargestellt werden" }, - "widget-missing-parent": "Der externen Integration fehlt die erforderliche Eigenschaft '{{property}}'\n\nFalls dieses Skript ohne UI-Element ausgeführt werden soll, benutze stattdessen '#run=frontendStartup'.", + "widget-missing-parent": "Benutzerdefiniertes Widget hat die erforderliche '{{property}}'-Eigenschaft nicht korrekt definiert.\n\nFalls dieses Skript ohne UI-Element ausgeführt werden soll, benutze stattdessen '#run=frontendStartup'.", "scripting-error": "Benutzerdefinierter Skriptfehler: {{title}}" }, "add_link": { @@ -129,7 +129,7 @@ "scrollToActiveNote": "Scrolle zur aktiven Notiz", "jumpToParentNote": "Zur übergeordneten Notiz springen", "collapseWholeTree": "Reduziere den gesamten Notizbaum", - "collapseSubTree": "Teilbaum einklappen", + "collapseSubTree": "Zweig einklappen", "tabShortcuts": "Tab-Tastenkürzel", "newTabNoteLink": "auf den Notizlink öffnet die Notiz in einem neuen Tab", "onlyInDesktop": "Nur im Desktop (Electron Build)", @@ -230,7 +230,7 @@ "move_to": { "dialog_title": "Notizen verschieben nach ...", "notes_to_move": "Notizen zum Verschieben", - "target_parent_note": "Ziel-Elternnotiz", + "target_parent_note": "Übergeordnete Notiz bestimmen", "search_placeholder": "Suche nach einer Notiz anhand ihres Namens", "move_button": "Zur ausgewählten Notiz wechseln", "error_no_path": "Kein Weg, auf den man sich bewegen kann.", @@ -333,8 +333,8 @@ "target_note_title": "Eine Beziehung ist eine benannte Verbindung zwischen Quellnotiz und Zielnotiz.", "target_note": "Zielnotiz", "promoted_title": "Das heraufgestufte Attribut wird deutlich in der Notiz angezeigt.", - "promoted": "Gefördert", - "promoted_alias_title": "Der Name, der in der Benutzeroberfläche für heraufgestufte Attribute angezeigt werden soll.", + "promoted": "Hervorgehoben", + "promoted_alias_title": "Der Name, der in der Benutzeroberfläche für hervorgehobene Attribute angezeigt werden soll.", "promoted_alias": "Alias", "multiplicity_title": "Multiplizität definiert, wie viele Attribute mit demselben Namen erstellt werden können – maximal 1 oder mehr als 1.", "multiplicity": "Vielzahl", @@ -367,7 +367,7 @@ "disable_versioning": "deaktiviert die automatische Versionierung. Nützlich z.B. große, aber unwichtige Notizen – z.B. große JS-Bibliotheken, die für die Skripterstellung verwendet werden", "calendar_root": "Markiert eine Notiz, die als Basis für Tagesnotizen verwendet werden soll. Nur einer sollte als solcher gekennzeichnet sein.", "archived": "Notizen mit dieser Bezeichnung werden standardmäßig nicht in den Suchergebnissen angezeigt (auch nicht in den Dialogen „Springen zu“, „Link hinzufügen“ usw.).", - "exclude_from_export": "Notizen (mit ihrem Unterbaum) werden nicht in den Notizexport einbezogen", + "exclude_from_export": "Notizen (mit ihrem Unterbaum) werden nicht im Notizexport inkludiert", "run": "Definiert, bei welchen Ereignissen das Skript ausgeführt werden soll. Mögliche Werte sind:\n<ul>\n<li>frontendStartup - wenn das Trilium-Frontend startet (oder aktualisiert wird), außer auf mobilen Geräten.</li>\n<li>mobileStartup - wenn das Trilium-Frontend auf einem mobilen Gerät startet (oder aktualisiert wird).</li>\n<li>backendStartup - wenn das Trilium-Backend startet</li>\n<li>hourly - einmal pro Stunde ausführen. Du kannst das zusätzliche Label <code>runAtHour</code> verwenden, um die genaue Stunde festzulegen.</li>\n<li>daily - einmal pro Tag ausführen</li>\n</ul>", "run_on_instance": "Definiere, auf welcher Trilium-Instanz dies ausgeführt werden soll. Standardmäßig alle Instanzen.", "run_at_hour": "Zu welcher Stunde soll das laufen? Sollte zusammen mit <code>#runu003dhourly</code> verwendet werden. Kann für mehr Läufe im Laufe des Tages mehrfach definiert werden.", @@ -376,7 +376,7 @@ "sort_direction": "ASC (Standard) oder DESC", "sort_folders_first": "Ordner (Notizen mit Unternotizen) sollten oben sortiert werden", "top": "Behalte die angegebene Notiz oben in der übergeordneten Notiz (gilt nur für sortierte übergeordnete Notizen)", - "hide_promoted_attributes": "Heraufgestufte Attribute für diese Notiz ausblenden", + "hide_promoted_attributes": "Hervorgehobene Attribute für diese Notiz ausblenden", "read_only": "Der Editor befindet sich im schreibgeschützten Modus. Funktioniert nur für Text- und Codenotizen.", "auto_read_only_disabled": "Text-/Codenotizen können automatisch in den Lesemodus versetzt werden, wenn sie zu groß sind. Du kannst dieses Verhalten für jede einzelne Notiz deaktivieren, indem du diese Beschriftung zur Notiz hinzufügst", "app_css": "markiert CSS-Notizen, die in die Trilium-Anwendung geladen werden und somit zur Änderung des Aussehens von Trilium verwendet werden können.", @@ -416,13 +416,13 @@ "toc": "<code>#toc</code> oder <code>#tocu003dshow</code> erzwingen die Anzeige des Inhaltsverzeichnisses, <code>#tocu003dhide</code> erzwingt das Ausblenden. Wenn die Bezeichnung nicht vorhanden ist, wird die globale Einstellung beachtet", "color": "Definiert die Farbe der Notiz im Notizbaum, in Links usw. Verwende einen beliebigen gültigen CSS-Farbwert wie „rot“ oder #a13d5f", "keyboard_shortcut": "Definiert eine Tastenkombination, die sofort zu dieser Notiz springt. Beispiel: „Strg+Alt+E“. Erfordert ein Neuladen des Frontends, damit die Änderung wirksam wird.", - "keep_current_hoisting": "Das Öffnen dieses Links ändert das Hochziehen nicht, selbst wenn die Notiz im aktuell hochgezogenen Unterbaum nicht angezeigt werden kann.", + "keep_current_hoisting": "Das Öffnen dieses Links ändert das Hochziehen nicht, selbst wenn die Notiz im aktuell hochgezogenen Zweig nicht angezeigt werden kann.", "execute_button": "Titel der Schaltfläche, welche die aktuelle Codenotiz ausführt", "execute_description": "Längere Beschreibung der aktuellen Codenotiz, die zusammen mit der Schaltfläche „Ausführen“ angezeigt wird", "exclude_from_note_map": "Notizen mit dieser Bezeichnung werden in der Notizenkarte ausgeblendet", "new_notes_on_top": "Neue Notizen werden oben in der übergeordneten Notiz erstellt, nicht unten.", "hide_highlight_widget": "Widget „Markierungsliste“ ausblenden", - "run_on_note_creation": "Wird ausgeführt, wenn eine Notiz im Backend erstellt wird. Verwende diese Beziehung, wenn du das Skript für alle Notizen ausführen möchtest, die unter einer bestimmten Unternotiz erstellt wurden. Erstelle es in diesem Fall auf der Unternotiz-Stammnotiz und mache es vererbbar. Eine neue Notiz, die innerhalb der Unternotiz (beliebige Tiefe) erstellt wird, löst das Skript aus.", + "run_on_note_creation": "Wird ausgeführt, wenn eine Notiz im Backend erstellt wird. Verwende diese Beziehung, wenn du das Skript für alle Notizen ausführen möchtest, die unter einer bestimmten Zweig erstellt wurden. Erstelle es in diesem Fall auf der Stammnotiz und mache es vererbbar. Eine neue Notiz, die innerhalb des Zweigs (beliebige Tiefe) erstellt wird, löst das Skript aus.", "run_on_child_note_creation": "Wird ausgeführt, wenn eine neue Notiz unter der Notiz erstellt wird, in der diese Beziehung definiert ist", "run_on_note_title_change": "Wird ausgeführt, wenn der Notiztitel geändert wird (einschließlich der Notizerstellung)", "run_on_note_content_change": "Wird ausgeführt, wenn der Inhalt einer Notiz geändert wird (einschließlich der Erstellung von Notizen).", @@ -433,8 +433,8 @@ "run_on_branch_deletion": "wird ausgeführt, wenn ein Zweig gelöscht wird. Der Zweig ist eine Verknüpfung zwischen der übergeordneten Notiz und der untergeordneten Notiz und wird z. B. gelöscht. beim Verschieben der Notiz (alter Zweig/Link wird gelöscht).", "run_on_attribute_creation": "wird ausgeführt, wenn für die Notiz ein neues Attribut erstellt wird, das diese Beziehung definiert", "run_on_attribute_change": " wird ausgeführt, wenn das Attribut einer Notiz geändert wird, die diese Beziehung definiert. Dies wird auch ausgelöst, wenn das Attribut gelöscht wird", - "relation_template": "Die Attribute der Notiz werden auch ohne eine Eltern-Kind-Beziehung vererbt. Der Inhalt und der Unterbaum der Notiz werden den Instanznotizen hinzugefügt, wenn sie leer sind. Einzelheiten findest du in der Dokumentation.", - "inherit": "Die Attribute einer Notiz werden auch ohne eine Eltern-Kind-Beziehung vererbt. Ein ähnliches Konzept findest du unter Vorlagenbeziehung. Siehe Attributvererbung in der Dokumentation.", + "relation_template": "Die Attribute der Notiz werden auch ohne eine Hierarchische-Beziehung vererbt. Der Inhalt und der Zweig werden den Instanznotizen hinzugefügt, wenn sie leer sind. Einzelheiten findest du in der Dokumentation.", + "inherit": "Die Attribute einer Notiz werden auch ohne eine Hierarchische-Beziehung vererbt. Ein ähnliches Konzept findest du unter Vorlagenbeziehung. Siehe Attributsvererbung in der Dokumentation.", "render_note": "Notizen vom Typ \"HTML-Notiz rendern\" werden mit einer Code-Notiz (HTML oder Skript) gerendert, und es ist notwendig, über diese Beziehung anzugeben, welche Notiz gerendert werden soll", "widget_relation": "Das Ziel dieser Beziehung wird ausgeführt und als Widget in der Seitenleiste gerendert", "share_css": "CSS-Hinweis, der in die Freigabeseite eingefügt wird. Die CSS-Notiz muss sich ebenfalls im gemeinsamen Unterbaum befinden. Erwäge auch die Verwendung von „share_hidden_from_tree“ und „share_omit_default_css“.", @@ -646,7 +646,7 @@ "reset_zoom_level": "Zoomstufe zurücksetzen", "zoom_in": "Hineinzoomen", "configure_launchbar": "Konfiguriere die Starterleiste", - "show_shared_notes_subtree": "Unterbaum „Freigegebene Notizen“ anzeigen", + "show_shared_notes_subtree": "Zweig „Freigegebene Notizen“ anzeigen", "advanced": "Erweitert", "open_dev_tools": "Öffne die Entwicklungstools", "open_sql_console": "Öffne die SQL-Konsole", @@ -655,7 +655,7 @@ "show_backend_log": "Backend-Protokoll anzeigen", "reload_hint": "Ein Neuladen kann bei einigen visuellen Störungen Abhilfe schaffen, ohne die gesamte App neu starten zu müssen.", "reload_frontend": "Frontend neu laden", - "show_hidden_subtree": "Versteckten Teilbaum anzeigen", + "show_hidden_subtree": "Versteckten Zweige anzeigen", "show_help": "Hilfe anzeigen", "about": "Über Trilium Notes", "logout": "Abmelden", @@ -703,8 +703,8 @@ "export_as_image_png": "PNG (Raster)", "export_as_image_svg": "SVG (Vektor)", "note_map": "Notizen Karte", - "view_revisions": "Änderungshistorie...", - "advanced": "Fortgeschritten" + "view_revisions": "Notizrevisionen...", + "advanced": "Erweitert" }, "onclick_button": { "no_click_handler": "Das Schaltflächen-Widget „{{componentId}}“ hat keinen definierten Klick-Handler" @@ -798,7 +798,7 @@ "expand_tooltip": "Erweitert die direkten Unterelemente dieser Sammlung (eine Ebene tiefer). Für weitere Optionen auf den Pfeil rechts klicken.", "expand_first_level": "Direkte Unterelemente erweitern", "expand_nth_level": "{{depth}} Ebenen erweitern", - "hide_child_notes": "Unterknoten im Baum ausblenden" + "hide_child_notes": "Unternotizen im Baum ausblenden" }, "edited_notes": { "no_edited_notes_found": "An diesem Tag wurden noch keine Notizen bearbeitet...", @@ -842,7 +842,7 @@ "note_size": "Notengröße", "note_size_info": "Die Notizgröße bietet eine grobe Schätzung des Speicherbedarfs für diese Notiz. Es berücksichtigt den Inhalt der Notiz und den Inhalt ihrer Notizrevisionen.", "calculate": "berechnen", - "subtree_size": "(Teilbaumgröße: {{size}} in {{count}} Notizen)", + "subtree_size": "(Zweiggröße: {{size}} in {{count}} Notizen)", "title": "Notizinfo", "mime": "MIME Typ", "show_similar_notes": "Zeige ähnliche Notizen" @@ -871,7 +871,7 @@ "owned_attributes": "Eigene Attribute" }, "promoted_attributes": { - "promoted_attributes": "Übergebene Attribute", + "promoted_attributes": "Hervorgehobene Attribute", "url_placeholder": "http://website...", "open_external_link": "Externen Link öffnen", "unknown_label_type": "Unbekannter Labeltyp „{{type}}“", @@ -1115,7 +1115,7 @@ "vacuum_database": { "title": "Datenbank aufräumen", "description": "Dadurch wird die Datenbank neu erstellt, was normalerweise zu einer kleineren Datenbankdatei führt. Es werden keine Daten tatsächlich geändert.", - "button_text": "Vakuumdatenbank", + "button_text": "Datenbank aufräumen", "vacuuming_database": "Datenbank wird geleert...", "database_vacuumed": "Die Datenbank wurde geleert" }, @@ -1156,7 +1156,7 @@ }, "ribbon": { "widgets": "Multifunktionsleisten-Widgets", - "promoted_attributes_message": "Die Multifunktionsleisten-Registerkarte „Heraufgestufte Attribute“ wird automatisch geöffnet, wenn in der Notiz heraufgestufte Attribute vorhanden sind", + "promoted_attributes_message": "Die „Hervorgehobene Attribute“-Leiste wird automatisch geöffnet, wenn in der Notiz hervorgehobene Attribute vorhanden sind", "edited_notes_message": "Die Multifunktionsleisten-Registerkarte „Bearbeitete Notizen“ wird bei Tagesnotizen automatisch geöffnet" }, "theme": { @@ -1445,19 +1445,19 @@ "insert-note-after": "Notiz dahinter einfügen", "insert-child-note": "Unternotiz einfügen", "delete": "Löschen", - "search-in-subtree": "Im Notizbaum suchen", + "search-in-subtree": "Im Zweig suchen", "hoist-note": "Notiz-Fokus setzen", "unhoist-note": "Notiz-Fokus aufheben", "edit-branch-prefix": "Zweig-Präfix bearbeiten", "advanced": "Erweitert", - "expand-subtree": "Unterzweig aufklappen", - "collapse-subtree": "Notizbaum einklappen", + "expand-subtree": "Zweig aufklappen", + "collapse-subtree": "Zweig einklappen", "sort-by": "Sortieren nach...", - "recent-changes-in-subtree": "Kürzliche Änderungen im Notizbaum", + "recent-changes-in-subtree": "Kürzliche Änderungen im Zweig", "convert-to-attachment": "Als Anhang konvertieren", "copy-note-path-to-clipboard": "Notiz-Pfad in die Zwischenablage kopieren", - "protect-subtree": "Notizbaum schützen", - "unprotect-subtree": "Notizenbaum-Schutz aufheben", + "protect-subtree": "Zweig schützen", + "unprotect-subtree": "Zweig-Schutz aufheben", "copy-clone": "Kopieren / Klonen", "clone-to": "Klonen nach...", "cut": "Ausschneiden", @@ -1474,12 +1474,12 @@ "archive": "Archiviere", "unarchive": "Entarchivieren", "open-in-a-new-window": "In neuem Fenster öffnen", - "hide-subtree": "Teilbaum ausblenden", - "show-subtree": "Teilbaum anzeigen" + "hide-subtree": "Zweig ausblenden", + "show-subtree": "Zweig anzeigen" }, "shared_info": { - "shared_publicly": "Diese Notiz ist öffentlich geteilt auf {{- link}}.", - "shared_locally": "Diese Notiz ist lokal geteilt auf {{- link}}.", + "shared_publicly": "Diese Notiz ist öffentlich freigegeben über {{- link}}.", + "shared_locally": "Diese Notiz ist lokal freigegeben über {{- link}}.", "help_link": "Für Hilfe besuche <a href=\"https://triliumnext.github.io/Docs/Wiki/sharing.html\">wiki</a>." }, "note_types": { @@ -1514,10 +1514,10 @@ "toggle-off-hint": "Notiz ist geschützt, klicken, um den Schutz aufzuheben" }, "shared_switch": { - "shared": "Teilen", - "toggle-on-title": "Notiz teilen", + "shared": "Freigegeben", + "toggle-on-title": "Notiz freigeben", "toggle-off-title": "Notiz-Freigabe aufheben", - "shared-branch": "Diese Notiz existiert nur als geteilte Notiz, das Aufheben der Freigabe würde sie löschen. Möchtest du fortfahren und die Notiz damit löschen?", + "shared-branch": "Diese Notiz existiert nur als freigegebene Notiz, das Aufheben der Freigabe würde sie löschen. Möchtest du fortfahren und die Notiz damit löschen?", "inherited": "Die Notiz kann hier nicht von der Freigabe entfernt werden, da sie über Vererbung von einer übergeordneten Notiz geteilt wird." }, "template_switch": { @@ -1566,15 +1566,15 @@ "unhoist": "Fokus verlassen", "toggle-sidebar": "Seitenleiste ein-/ausblenden", "dropping-not-allowed": "Ablegen von Notizen an dieser Stelle ist nicht zulässig.", - "clone-indicator-tooltip": "Diese Notiz hat {{- count}} Elterknoten: {{- parents}}", - "clone-indicator-tooltip-single": "Diese Notiz ist geklont (1 weiterer Elternknoten: {{- parent}})", - "shared-indicator-tooltip": "Diese Notiz ist öffentlich einsehbar", - "shared-indicator-tooltip-with-url": "Diese Notiz ist unter {{- url}} öffentlich einsehbar", - "subtree-hidden-tooltip_one": "{{count}} Unterknoten, der im Baum ausgeblendet ist", - "subtree-hidden-tooltip_other": "{{count}} Unterknoten, die im Baum ausgeblendet sind", + "clone-indicator-tooltip": "Diese Notiz hat {{- count}} übergeordnete Knoten: {{- parents}}", + "clone-indicator-tooltip-single": "Diese Notiz ist geklont (1 weitere Quelle: {{- parent}})", + "shared-indicator-tooltip": "Diese Notiz ist öffentlich freigegeben", + "shared-indicator-tooltip-with-url": "Diese Notiz ist öffentlich freigegeben unter: {{- url}}", + "subtree-hidden-tooltip_one": "{{count}} untergeordnete Notiz, die im Baum ausgeblendet ist", + "subtree-hidden-tooltip_other": "{{count}} untergeordnete Notizen, die im Baum ausgeblendet sind", "subtree-hidden-moved-title": "Zu {{title}} hinzugefügt", - "subtree-hidden-moved-description-collection": "Diese Sammlung blendet ihre Unternotizem im Baum aus.", - "subtree-hidden-moved-description-other": "Diese Sammlung blendet ihre Unterknoten im Baum aus." + "subtree-hidden-moved-description-collection": "Diese Sammlung blendet ihre Unternotizen im Baum aus.", + "subtree-hidden-moved-description-other": "Untergeordnete Notizen sind im Baum für diese Notiz ausgeblendet." }, "title_bar_buttons": { "window-on-top": "Dieses Fenster immer oben halten" @@ -1586,8 +1586,8 @@ "print_report_title": "Druckreport", "print_report_collection_details_button": "Details anzeigen", "print_report_collection_details_ignored_notes": "Ignorierte Notizen", - "print_report_collection_content_one": "{{count}} Notiz in der Sammlung konnte nicht gedruckt werden, weil sie nicht unterstützt ist oder geschützt ist.", - "print_report_collection_content_other": "{{count}} Notizen in der Sammlung konnten nicht gedruckt werden, weil sie nicht unterstützt sind oder geschützt sind." + "print_report_collection_content_one": "{{count}} Notiz in der Sammlung konnte nicht gedruckt werden, weil sie nicht unterstützt oder geschützt ist.", + "print_report_collection_content_other": "{{count}} Notizen in der Sammlung konnten nicht gedruckt werden, weil sie nicht unterstützt oder geschützt sind." }, "note_title": { "placeholder": "Titel der Notiz hier eingeben…", @@ -2000,7 +2000,7 @@ "check_share_root": "Status des Freigabe-Roots prüfen", "share_root_found": "Freigabe-Root-Notiz '{{noteTitle}}' ist bereit", "share_root_not_found": "Keine Notiz mit #shareRoot Label gefunden", - "share_root_not_shared": "Notiz '{{noteTitle}}' hat das #shareRoot Label, wurde jedoch noch nicht geteilt" + "share_root_not_shared": "Notiz '{{noteTitle}}' hat das #shareRoot Label, wurde jedoch noch nicht freigegeben" }, "tasks": { "due": { @@ -2118,8 +2118,8 @@ "show_attachments_description": "Notizanhänge anzeigen", "search_notes_title": "Suche Notiz", "search_notes_description": "Öffne erweiterte Suche", - "search_subtree_title": "Im Unterzweig suchen", - "search_subtree_description": "Im aktuellen Unterzweig suchen", + "search_subtree_title": "Im Zweig suchen", + "search_subtree_description": "Im aktuellen Zweig suchen", "search_history_title": "Zeige Suchhistorie", "search_history_description": "Zeige vorherige Suchen", "configure_launch_bar_title": "Startleiste anpassen", @@ -2188,9 +2188,9 @@ "new_layout_description": "Probiere das neue Layout für eine modernere Darstellung und verbesserte Benutzbarkeit aus. Kann sich in Zukunft stark ändern." }, "server": { - "unknown_http_error_title": "Bei der Kommunikation mit dem Server ist ein Fehler aufgetreten", + "unknown_http_error_title": "Kommunikationsfehler mit dem Server", "unknown_http_error_content": "Statuscode: {{statusCode}}\nURL: {{method}} {{url}}\nNachricht: {{message}}", - "traefik_blocks_requests": "Der Traefik Reverse-Proxy hat ein fatales Update bekommen, welche die Kommunikation mit dem Server stört." + "traefik_blocks_requests": "Der Traefik Reverse-Proxy hat eine Änderung erfahren, welches die Kommunikation mit dem Server beeinflusst." }, "tab_history_navigation_buttons": { "go-back": "Zur vorherigen Notiz zurück kehren", @@ -2205,30 +2205,30 @@ "empty_hide_archived_notes": "Archivierte Notizen ausblenden" }, "breadcrumb_badges": { - "read_only_explicit": "Nicht Änderbar", - "read_only_explicit_description": "Diese Notiz wurde händisch als nicht änderbar markiert.\nKlicke hier um sie temporär zu bearbeiten.", - "read_only_auto": "Automatisch nicht änderbar", - "read_only_auto_description": "Diese Notiz wurde automatisch aus Leistungsgründen als nicht änderbar markiert. Dieses automatische Limit kann in den Einstellungen angepasst werden.\n\nKlicke hier, um sie temporär zu bearbeiten.", + "read_only_explicit": "Schreibgeschützt", + "read_only_explicit_description": "Diese Notiz wurde händisch schreibgeschützt.\nKlicke hier um sie temporär zu bearbeiten.", + "read_only_auto": "Automatisch schreibgeschützt", + "read_only_auto_description": "Diese Notiz wurde automatisch aus Leistungsgründen als schreibgeschützt markiert. Dieses automatische Limit kann in den Einstellungen angepasst werden.\n\nKlicke hier, um sie temporär zu bearbeiten.", "read_only_temporarily_disabled": "Temporär bearbeitbar", - "read_only_temporarily_disabled_description": "Diese Notiz ist aktuell bearbeitbar, ist aber normalerweise nicht änderbar. Sobald du zu einer anderen Notiz navigierst, kehrt diese Notiz in ihren Normalzustand zurück.\n\nKlicke hier, um die Notiz wieder nicht änderbar zu machen.", - "shared_publicly": "Öffentlich geteilt", - "shared_locally": "Lokal geteilt", + "read_only_temporarily_disabled_description": "Diese Notiz ist aktuell bearbeitbar, ist aber normalerweise schreibgeschützt. Sobald du zu einer anderen Notiz navigierst wird diese wieder schreibgeschützt.\n\nKlicke hier, um die Notiz wieder schreibgeschützt zu machen.", + "shared_publicly": "Öffentlich freigegeben", + "shared_locally": "Lokal freigegeben", "shared_copy_to_clipboard": "Link in die Zwischenablage kopieren", - "shared_open_in_browser": "Link öffnen", - "shared_unshare": "Teilen aufheben", + "shared_open_in_browser": "Link im Browser öffnen", + "shared_unshare": "Freigabe aufheben", "clipped_note": "Internetschnellverweis", - "clipped_note_description": "Diese Notiz wurde von {{url}} übernommen.\n\nKlicke hier, um zum Ursprung zu gehen.", + "clipped_note_description": "Diese Notiz wurde von {{url}} übernommen.\n\nKlicke hier, um zur Quelle zu gehen.", "execute_script": "Skript ausführen", "execute_script_description": "Diese Notiz ist eine Skriptnotiz. Klicke hier, um das Skript auszuführen.", "execute_sql": "SQL ausführen", "execute_sql_description": "Diese Notiz ist eine SQL-Notiz. Klicke hier, um die SQL-Abfrage auszuführen.", "save_status_saved": "Gespeichert", - "save_status_saving": "Speichern...", + "save_status_saving": "Speichere...", "save_status_unsaved": "Nicht gespeichert", "save_status_error": "Speichern fehlgeschlagen", "save_status_saving_tooltip": "Änderungen werden gespeichert.", "save_status_unsaved_tooltip": "Es gibt ungespeicherte Änderungen, welche gleich automatisch gespeichert werden.", - "save_status_error_tooltip": "Beim speichern der Notiz ist ein Fehler aufgetreten. Wenn möglich, versuche die Notiz woandershin zu kopieren und die Applikation neu zu laden." + "save_status_error_tooltip": "Beim speichern der Notiz ist ein Fehler aufgetreten. Wenn möglich, versuche die Notiz woandershin zu kopieren und die Anwendung neu zu laden." }, "status_bar": { "language_title": "Inhaltssprache ändern", @@ -2241,7 +2241,7 @@ "attachments_other": "{{count}} Anhänge", "attachments_title_one": "Anhang in einem neuen Tab öffnen", "attachments_title_other": "Anhänge in einem neuen Tab öffnen", - "attributes_one": "{{count}} Attribute", + "attributes_one": "{{count}} Attribut", "attributes_other": "{{count}} Attribute", "attributes_title": "Eigene und geerbte Attribute", "note_paths_one": "{{count}} Pfad", @@ -2254,9 +2254,9 @@ }, "right_pane": { "empty_message": "Für diese Notiz gibt es nichts anzuzeigen", - "empty_button": "Anzeige ausblenden", - "toggle": "Rechte Anzeige umschalten", - "custom_widget_go_to_source": "Zum Ursprungscode" + "empty_button": "Leiste ausblenden", + "toggle": "Rechte Leiste umschalten", + "custom_widget_go_to_source": "Zum Quellcode" }, "pdf": { "attachments_one": "{{count}} Anhang", @@ -2266,6 +2266,6 @@ "pages_one": "{{count}} Seite", "pages_other": "{{count}} Seiten", "pages_alt": "Seite {{pageNumber}}", - "pages_loading": "Laden..." + "pages_loading": "Lädt..." } } From be71a4b5c40e7b37dd7c848a177741471ef9d701 Mon Sep 17 00:00:00 2001 From: Marcel <marcel.wiechmann@gmail.com> Date: Mon, 26 Jan 2026 15:50:07 +0100 Subject: [PATCH 324/353] Translated using Weblate (German) Currently translated at 100.0% (152 of 152 strings) Translation: Trilium Notes/Website Translate-URL: https://hosted.weblate.org/projects/trilium/website/de/ --- apps/website/src/translations/de/translation.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/website/src/translations/de/translation.json b/apps/website/src/translations/de/translation.json index b162d9dce9..d2c4bd5c82 100644 --- a/apps/website/src/translations/de/translation.json +++ b/apps/website/src/translations/de/translation.json @@ -21,7 +21,7 @@ "note_structure_description": "Notizen lassen sich hierarchisch anordnen. Ordner sind nicht nötig, da jede Notiz Unternotizen enthalten kann. Eine einzelne Notiz kann an mehreren Stellen in der Hierarchie hinzugefügt werden.", "hoisting_description": "Trennen Sie Ihre persönlichen und beruflichen Notizen ganz einfach, indem Sie sie in einem Arbeitsbereich gruppieren. Dadurch wird Ihre Notizstruktur so fokussiert, dass nur ein bestimmter Satz von Notizen angezeigt wird.", "hoisting_title": "Arbeitsbereiche und Fokusansicht", - "attributes_description": "Für leichtes kategorsieren, nutze Verbindungen zwischen Notizen oder füge Label hinzu. Verwende hervorgehobene Attribute, um sie als strukturierte Informationen in Tabellen oder Anschlagbretter zu verwenden." + "attributes_description": "Nutze Beziehungen zwischen Notizen oder füge Label hinzu um diese einfach zu kategorisieren. Verwende hervorgehobene Attribute um strukturierte Informationen zu hinterlegen die in Tabellen oder Boards verwendet werden." }, "productivity_benefits": { "revisions_title": "Notizrevisionen", From 924a5e3110529ab629f0db3a3f0305888e961672 Mon Sep 17 00:00:00 2001 From: Jason Kuanca <jhekhaa@gmail.com> Date: Mon, 26 Jan 2026 08:12:34 +0100 Subject: [PATCH 325/353] Translated using Weblate (Indonesian) Currently translated at 3.2% (57 of 1763 strings) Translation: Trilium Notes/Client Translate-URL: https://hosted.weblate.org/projects/trilium/client/id/ --- apps/client/src/translations/id/translation.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/client/src/translations/id/translation.json b/apps/client/src/translations/id/translation.json index 209c25c48c..0af7eb1ef1 100644 --- a/apps/client/src/translations/id/translation.json +++ b/apps/client/src/translations/id/translation.json @@ -12,7 +12,7 @@ "toast": { "critical-error": { "title": "Eror kritikal", - "message": "Telah terjadi kesalahan kritis yang mencegah aplikasi klien untuk memulai:\n\n{{message}}\n\nHal ini kemungkinan besar disebabkan oleh skrip yang gagal secara tidak terduga. Coba jalankan aplikasi dalam mode aman dan atasi masalahnya." + "message": "Telah terjadi eror kritikal yang mencegah aplikasi klien untuk memulai:\n\n{{message}}\n\nHal ini kemungkinan besar disebabkan oleh skrip yang gagal secara tidak terduga. Coba jalankan aplikasi dalam mode aman dan atasi masalahnya." }, "widget-error": { "title": "Gagal menginisialisasi widget", From 0fbf9bafbccd9631cbe6fbdabb6a16f716555c23 Mon Sep 17 00:00:00 2001 From: Toto Yullian <tox@sysadmin.id> Date: Mon, 26 Jan 2026 11:57:00 +0100 Subject: [PATCH 326/353] Translated using Weblate (Indonesian) Currently translated at 3.2% (57 of 1763 strings) Translation: Trilium Notes/Client Translate-URL: https://hosted.weblate.org/projects/trilium/client/id/ --- apps/client/src/translations/id/translation.json | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/apps/client/src/translations/id/translation.json b/apps/client/src/translations/id/translation.json index 0af7eb1ef1..930eecf5e5 100644 --- a/apps/client/src/translations/id/translation.json +++ b/apps/client/src/translations/id/translation.json @@ -36,7 +36,12 @@ "add_link": { "add_link": "Tambah tautan", "help_on_links": "Bantuan pada tautan", - "note": "Catatan" + "note": "Catatan", + "search_note": "cari catatan berdasarkan nama", + "link_title_mirrors": "judul tautan mencerminkan judul catatan saat ini", + "link_title_arbitrary": "judul tautan dapat diubah secara bebas", + "link_title": "Judul tautan", + "button_add_link": "Tambah tautan" }, "branch_prefix": { "edit_branch_prefix_multiple": "Edit prefiks cabang untuk {{count}} cabang", @@ -73,5 +78,8 @@ "erase_notes_warning": "Hapus catatan secara permanen (tidak bisa dikembalikan), termasuk semua duplikat. Aksi akan memaksa aplikasi untuk mengulang kembali.", "notes_to_be_deleted": "Catatan-catatan berikut akan dihapuskan ({{notesCount}})", "no_note_to_delete": "Tidak ada Catatan yang akan dihapus (hanya duplikat)." + }, + "clone_to": { + "clone_notes_to": "Duplikat catatan ke…" } } From 3e2b647f061d2f098aca00533c482ea2e28ef3db Mon Sep 17 00:00:00 2001 From: Unknown <angelfxfernandez@gmail.com> Date: Mon, 26 Jan 2026 09:48:07 +0100 Subject: [PATCH 327/353] Translated using Weblate (Spanish) Currently translated at 94.2% (1662 of 1763 strings) Translation: Trilium Notes/Client Translate-URL: https://hosted.weblate.org/projects/trilium/client/es/ --- apps/client/src/translations/es/translation.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/client/src/translations/es/translation.json b/apps/client/src/translations/es/translation.json index 5ba611b671..ce157c052b 100644 --- a/apps/client/src/translations/es/translation.json +++ b/apps/client/src/translations/es/translation.json @@ -799,11 +799,11 @@ "board": "Tablero", "include_archived_notes": "Mostrar notas archivadas", "presentation": "Presentación", - "expand_tooltip": "Expande las notas hijas inmediatas de esta colección (un nivel). Para más opciones, pulsa la flecha a la derecha.", + "expand_tooltip": "Expande las subnotas inmediatas de esta colección (un nivel). Para más opciones, pulsa la flecha a la derecha.", "expand_first_level": "Expandir hijos inmediatos", "expand_nth_level": "Expandir {{depth}} niveles", "expand_all_levels": "Expandir todos los niveles", - "hide_child_notes": "Ocultar notas hijas en el árbol" + "hide_child_notes": "Ocultar subnotas en el árbol" }, "edited_notes": { "no_edited_notes_found": "Aún no hay notas editadas en este día...", From 221182389a1c5e607a6eed116298eafe498e8478 Mon Sep 17 00:00:00 2001 From: Giovi <giovi27@postalia.it> Date: Tue, 27 Jan 2026 11:12:52 +0100 Subject: [PATCH 328/353] Translated using Weblate (Italian) Currently translated at 100.0% (1763 of 1763 strings) Translation: Trilium Notes/Client Translate-URL: https://hosted.weblate.org/projects/trilium/client/it/ --- .../src/translations/it/translation.json | 22 +++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/apps/client/src/translations/it/translation.json b/apps/client/src/translations/it/translation.json index 3528cce111..89e44794c1 100644 --- a/apps/client/src/translations/it/translation.json +++ b/apps/client/src/translations/it/translation.json @@ -325,7 +325,10 @@ "apply-bulk-actions": "Applica azioni in blocco", "converted-to-attachments": "{{count}} note sono state convertite in allegati.", "convert-to-attachment-confirm": "Sei sicuro di voler convertire le note selezionate in allegati delle note principali? Questa operazione si applica solo alle note immagine, le altre note verranno ignorate.", - "open-in-popup": "Modifica rapida" + "open-in-popup": "Modifica rapida", + "open-in-a-new-window": "Apri in una nuova finestra", + "hide-subtree": "Nascondi sottostruttura", + "show-subtree": "Mostra sottoalbero" }, "electron_context_menu": { "cut": "Taglia", @@ -1378,7 +1381,8 @@ "expand_tooltip": "Espande i figli diretti di questa raccolta (a un livello di profondità). Per ulteriori opzioni, premere la freccia a destra.", "expand_first_level": "Espandi figli diretti", "expand_nth_level": "Espandi {{depth}} livelli", - "expand_all_levels": "Espandi tutti i livelli" + "expand_all_levels": "Espandi tutti i livelli", + "hide_child_notes": "Nascondi note secondarie nell'albero" }, "edited_notes": { "no_edited_notes_found": "Nessuna nota modificata per questo giorno...", @@ -1899,7 +1903,13 @@ "clone-indicator-tooltip": "Questa nota ha {{- count}} genitori: {{- parents}}", "clone-indicator-tooltip-single": "Questa nota è stata clonata (1 genitore aggiuntivo: {{- parent}})", "shared-indicator-tooltip": "Questa nota è condivisa pubblicamente", - "shared-indicator-tooltip-with-url": "Questa nota è condivisa pubblicamente all'indirizzo: {{- url}}" + "shared-indicator-tooltip-with-url": "Questa nota è condivisa pubblicamente all'indirizzo: {{- url}}", + "subtree-hidden-tooltip_one": "{{count}} nota secondaria nascosta dall'albero", + "subtree-hidden-tooltip_many": "{{count}} note secondarie nascoste dall'albero", + "subtree-hidden-tooltip_other": "{{count}} note secondarie nascoste dall'albero", + "subtree-hidden-moved-title": "Aggiunto a {{title}}", + "subtree-hidden-moved-description-collection": "Questa raccolta nasconde le sue note secondarie nell'albero.", + "subtree-hidden-moved-description-other": "Le note secondarie sono nascoste nell'albero di questa nota." }, "title_bar_buttons": { "window-on-top": "Mantieni la finestra in primo piano" @@ -1934,7 +1944,11 @@ "configure_launchbar": "Configura Launchbar" }, "sql_result": { - "no_rows": "Nessuna riga è stata restituita per questa query" + "no_rows": "Nessuna riga è stata restituita per questa query", + "not_executed": "La query non è stata ancora eseguita.", + "failed": "Esecuzione query SQL non riuscita", + "statement_result": "Risultato della dichiarazione", + "execute_now": "Esegui ora" }, "watched_file_update_status": { "file_last_modified": "Il file <code class=\"file-path\"></code> è stato modificato l'ultima volta il <span class=\"file-last-modified\"></span>.", From ac19000ad04bce36f9aa8570bee13bcc93274743 Mon Sep 17 00:00:00 2001 From: Marcel <marcel.wiechmann@gmail.com> Date: Tue, 27 Jan 2026 22:57:35 +0100 Subject: [PATCH 329/353] Translated using Weblate (German) Currently translated at 100.0% (1763 of 1763 strings) Translation: Trilium Notes/Client Translate-URL: https://hosted.weblate.org/projects/trilium/client/de/ --- apps/client/src/translations/de/translation.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/client/src/translations/de/translation.json b/apps/client/src/translations/de/translation.json index 07c56a8b50..9e249fc412 100644 --- a/apps/client/src/translations/de/translation.json +++ b/apps/client/src/translations/de/translation.json @@ -422,7 +422,7 @@ "exclude_from_note_map": "Notizen mit dieser Bezeichnung werden in der Notizenkarte ausgeblendet", "new_notes_on_top": "Neue Notizen werden oben in der übergeordneten Notiz erstellt, nicht unten.", "hide_highlight_widget": "Widget „Markierungsliste“ ausblenden", - "run_on_note_creation": "Wird ausgeführt, wenn eine Notiz im Backend erstellt wird. Verwende diese Beziehung, wenn du das Skript für alle Notizen ausführen möchtest, die unter einer bestimmten Zweig erstellt wurden. Erstelle es in diesem Fall auf der Stammnotiz und mache es vererbbar. Eine neue Notiz, die innerhalb des Zweigs (beliebige Tiefe) erstellt wird, löst das Skript aus.", + "run_on_note_creation": "Wird ausgeführt, wenn eine Notiz im Backend erstellt wird. Verwende diese Beziehung, wenn du das Skript für alle Notizen ausführen möchtest, die unter einem bestimmten Zweig erstellt wurden. Erstelle es in diesem Fall auf der Stammnotiz und mache es vererbbar. Eine neue Notiz, die innerhalb des Zweigs (beliebige Tiefe) erstellt wird, löst das Skript aus.", "run_on_child_note_creation": "Wird ausgeführt, wenn eine neue Notiz unter der Notiz erstellt wird, in der diese Beziehung definiert ist", "run_on_note_title_change": "Wird ausgeführt, wenn der Notiztitel geändert wird (einschließlich der Notizerstellung)", "run_on_note_content_change": "Wird ausgeführt, wenn der Inhalt einer Notiz geändert wird (einschließlich der Erstellung von Notizen).", @@ -655,7 +655,7 @@ "show_backend_log": "Backend-Protokoll anzeigen", "reload_hint": "Ein Neuladen kann bei einigen visuellen Störungen Abhilfe schaffen, ohne die gesamte App neu starten zu müssen.", "reload_frontend": "Frontend neu laden", - "show_hidden_subtree": "Versteckten Zweige anzeigen", + "show_hidden_subtree": "Versteckten Zweig anzeigen", "show_help": "Hilfe anzeigen", "about": "Über Trilium Notes", "logout": "Abmelden", From c08fb9af16dd2c4546bca331c02e209691ce5458 Mon Sep 17 00:00:00 2001 From: Elian Doran <contact@eliandoran.me> Date: Wed, 28 Jan 2026 08:41:55 +0200 Subject: [PATCH 330/353] chore(scripts): update paths in create icons --- scripts/icons/create-icons.sh | 26 +++++++++++++++----------- 1 file changed, 15 insertions(+), 11 deletions(-) diff --git a/scripts/icons/create-icons.sh b/scripts/icons/create-icons.sh index 16ace4c2c3..e6dfaae0f8 100644 --- a/scripts/icons/create-icons.sh +++ b/scripts/icons/create-icons.sh @@ -1,5 +1,7 @@ #!/usr/bin/env bash +set -e + if ! command -v magick &> /dev/null; then echo "This tool requires ImageMagick to be installed in order to create the icons." exit 1 @@ -16,22 +18,24 @@ if ! command -v icnsutil &> /dev/null; then fi script_dir=$(realpath $(dirname $0)) -cd "${script_dir}/../images/app-icons" -inkscape -w 180 -h 180 "../icon-color.svg" -o "./ios/apple-touch-icon.png" +source_icon_dir="$script_dir/../../apps/server/src/assets/images" +desktop_forge_dir="$script_dir/../../apps/desktop/electron-forge" +cd "$desktop_forge_dir/app-icon" +inkscape -w 180 -h 180 "$source_icon_dir/icon-color.svg" -o "./ios/apple-touch-icon.png" # Build PNGs -inkscape -w 128 -h 128 "../icon-color.svg" -o "./png/128x128.png" -inkscape -w 256 -h 256 "../icon-color.svg" -o "./png/256x256.png" +inkscape -w 128 -h 128 "$source_icon_dir/icon-color.svg" -o "./png/128x128.png" +inkscape -w 256 -h 256 "$source_icon_dir/icon-color.svg" -o "./png/256x256.png" # Build dev icons (including tray) -inkscape -w 16 -h 16 "../icon-purple.svg" -o "./png/16x16-dev.png" -inkscape -w 32 -h 32 "../icon-purple.svg" -o "./png/32x32-dev.png" -inkscape -w 256 -h 256 "../icon-purple.svg" -o "./png/256x256-dev.png" +inkscape -w 16 -h 16 "$source_icon_dir/icon-purple.svg" -o "./png/16x16-dev.png" +inkscape -w 32 -h 32 "$source_icon_dir/icon-purple.svg" -o "./png/32x32-dev.png" +inkscape -w 256 -h 256 "$source_icon_dir/icon-purple.svg" -o "./png/256x256-dev.png" # Build Mac .icns declare -a sizes=("16" "32" "512" "1024") for size in "${sizes[@]}"; do - inkscape -w $size -h $size "../icon-color.svg" -o "./png/${size}x${size}.png" + inkscape -w $size -h $size "$source_icon_dir/icon-color.svg" -o "./png/${size}x${size}.png" done mkdir -p fakeapp.app @@ -43,10 +47,10 @@ done icnsutil compose -f "mac/icon.icns" ./mac/*.png # Build Windows icon -magick -background none "../icon-color.svg" -define icon:auto-resize=16,32,48,64,128,256 "./icon.ico" +magick -background none "$source_icon_dir/icon-color.svg" -define icon:auto-resize=16,32,48,64,128,256 "./icon.ico" # Build Windows setup icon -magick -background none "../icon-installer.svg" -define icon:auto-resize=16,32,48,64,128,256 "./win/setup.ico" +magick -background none "$source_icon_dir/icon-installer.svg" -define icon:auto-resize=16,32,48,64,128,256 "$desktop_forge_dir/setup-icon/setup.ico" # Build Squirrel splash image -magick "./png/256x256.png" -background "#ffffff" -gravity center -extent 640x480 "./win/setup-banner.gif" \ No newline at end of file +magick "./png/256x256.png" -background "#ffffff" -gravity center -extent 640x480 "$desktop_forge_dir/setup-icon/setup-banner.gif" \ No newline at end of file From 5c814155d27e294da7802b77cf32c9cb77212655 Mon Sep 17 00:00:00 2001 From: Elian Doran <contact@eliandoran.me> Date: Wed, 28 Jan 2026 08:44:35 +0200 Subject: [PATCH 331/353] chore(scripts): build dev icon for Windows --- .../electron-forge/app-icon/icon-dev.ico | Bin 0 -> 114668 bytes scripts/icons/create-icons.sh | 1 + 2 files changed, 1 insertion(+) create mode 100644 apps/desktop/electron-forge/app-icon/icon-dev.ico diff --git a/apps/desktop/electron-forge/app-icon/icon-dev.ico b/apps/desktop/electron-forge/app-icon/icon-dev.ico new file mode 100644 index 0000000000000000000000000000000000000000..4a734c72bc26e3bfdcd1a5a4c6c28460445ccc37 GIT binary patch literal 114668 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 literal 0 HcmV?d00001 diff --git a/scripts/icons/create-icons.sh b/scripts/icons/create-icons.sh index e6dfaae0f8..febd693d1e 100644 --- a/scripts/icons/create-icons.sh +++ b/scripts/icons/create-icons.sh @@ -48,6 +48,7 @@ icnsutil compose -f "mac/icon.icns" ./mac/*.png # Build Windows icon magick -background none "$source_icon_dir/icon-color.svg" -define icon:auto-resize=16,32,48,64,128,256 "./icon.ico" +magick -background none "$source_icon_dir/icon-purple.svg" -define icon:auto-resize=16,32,48,64,128,256 "./icon-dev.ico" # Build Windows setup icon magick -background none "$source_icon_dir/icon-installer.svg" -define icon:auto-resize=16,32,48,64,128,256 "$desktop_forge_dir/setup-icon/setup.ico" From 4db86f93229b31903086056c4873902f268eb571 Mon Sep 17 00:00:00 2001 From: Elian Doran <contact@eliandoran.me> Date: Wed, 28 Jan 2026 08:48:48 +0200 Subject: [PATCH 332/353] chore(scripts): fix path for building Mac icon --- scripts/icons/create-icons.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/icons/create-icons.sh b/scripts/icons/create-icons.sh index febd693d1e..917a83ce61 100644 --- a/scripts/icons/create-icons.sh +++ b/scripts/icons/create-icons.sh @@ -44,7 +44,7 @@ declare -a sizes=("16x16" "32x32" "128x128" "512x512") for size in "${sizes[@]}"; do magick "mac/1024x1024.png" -resize "${size}" "mac/${size}.png" done -icnsutil compose -f "mac/icon.icns" ./mac/*.png +icnsutil compose -f "icon.icns" ./mac/*.png # Build Windows icon magick -background none "$source_icon_dir/icon-color.svg" -define icon:auto-resize=16,32,48,64,128,256 "./icon.ico" From 674fe4fa20929f387ab5cb7acdf8a07ec712a096 Mon Sep 17 00:00:00 2001 From: Elian Doran <contact@eliandoran.me> Date: Wed, 28 Jan 2026 08:54:36 +0200 Subject: [PATCH 333/353] chore(scripts): build dev icon for Mac --- .../electron-forge/app-icon/icon-dev.icns | Bin 0 -> 131218 bytes .../app-icon/png/1024x1024-dev.png | Bin 0 -> 70179 bytes .../app-icon/png/512x512-dev.png | Bin 0 -> 32506 bytes scripts/icons/create-icons.sh | 16 +++++++++++++++- 4 files changed, 15 insertions(+), 1 deletion(-) create mode 100644 apps/desktop/electron-forge/app-icon/icon-dev.icns create mode 100644 apps/desktop/electron-forge/app-icon/png/1024x1024-dev.png create mode 100644 apps/desktop/electron-forge/app-icon/png/512x512-dev.png diff --git a/apps/desktop/electron-forge/app-icon/icon-dev.icns b/apps/desktop/electron-forge/app-icon/icon-dev.icns new file mode 100644 index 0000000000000000000000000000000000000000..ac23f730e5d9e986d60a1281e3048537bf2def73 GIT binary patch literal 131218 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%0D2bN6f*Mrej zb7-|k{g<5!Sg*Z<(fdHI^y!E=WHEsOxzH)Ix^XtU>!(&kr-x@YR!0o#ML5|$L5i<p zs~k3IxMov}ZDvJ;JXUdHE44b+s}q>QL~+%@wLPJ&ahC6~B|UCtR1V;J?m-?x{ht6c zBd9MAE1k88RJOXel<}42Yeg34#^YDz$TqvOvhs6vlDUcc1zGUi0Ki7c<J+~mS=h(j zhJ}x2nPaoM<G;lyABG|Ab8vZ_!tF%#QV7eT-|X}*5kc*@mB+Y#<>VrYFR^66*f*mh z-=OMYoOM~EWnJGm!&e>hG#czk`gpVb*uH=pZ+|;&TfEZyxpz|W;iy529I{0%+ohwR znH3CLN)-PriqHL}X7P^LuAJRmaa*X%)7zV#K~2ynh&2_p|H%cxjUnwxop$CN37K&i zb$Wkv|Ejr-6|I~K4MQ|c0j82S3g|SaoYICx5V{D?*N6jf8wgPC5e=bW+N}B&(X^ZG zuuo2o-@$Amk+X>m+8g7*Rw<%6SZLspR+Cb4NCf?GP*9q``Ip~A@T?@4F{gNDw3gOf zxVm>6kY4tNdF>Ah+4ZrJi1~xQc`XVv-5t}EThpEiEk(rbq}sAypW!fa^wPLqV5c61 zUbqF&hY+#RJg!nERakgc)hp?`5zjqP{#zwMV#ZxQov#=BMn8QCP0gTo(LTQ%SQT&? z0ElvkX+hKZSAV6zq>MDb0Cn)f#T60jSUxD@d<|wC+>DMpZ?CLEtLynS=e8-ejKz!q zn9DSzx#Yyd6}oO~4^Emn=)Wnd>5zCT(o2uvN$JLW$b09N>hb)~bXprvDQ>p1t_QDM zYo^YREVw?_hOG||4mQ`F+N{i6&acfww_Lo)V(XZe5Cn#`(Cn(Jj>e|ND8U#5n8B-! za#WhIs;8v=OTJzWJL)ne=Y_Pa2-ayp5ojcDUr6Is+GdIQv!a9RDGW2-@LOe?OP8x< zDd#HYje>R>oC~PZJ~$7<J(v|T6f<*GY0&Q%inWBPRNYdg-vVNTC5qG%HlQWFU)$4b zWr7%L_lizch&mKYC2?9I`C;gO6hKMvUQ$d24OZJ8@T2tAdnHuv3N}7SpKUC8F5`jo zu$fb<!jL{R{>1M4E!CwniSb<Eh$NKcX(n}caucg-7w8j77b`6*{xm0nQ~#HtHo3Ng zKbp7kW6+BUS}i9pU$U)j<FJ#(rDs<5XsA_7CRgLTDr00ey;PE7(P*wJ1GqL|frqA> zy@XM8`V7XVVM)J)86#tCuN02V?buQaq`BP?rz(W+|53rdV8ucKj$suzhSz?iw?{2y zj+}?(-WN1~RY)B@35zuda37+ibQ@T8$Wh`gIPl7Q;niOZdbyF!_KqkN8TS_CCCZOz zAun76w&$nN``FW&ncgP#i#q-R8Av7i&^y%0#FU@FDkOyDr@1AgG(S_7&RO%Q>cUI+ z26uU}_V%SWG@jn9F-_IK7t^Hb!Lei-(fZE%J$I@VocB^G`1|v(1?U{N5ylrL@nBbQ z12LBmn&5!#0J<d%P-v51uEP{zT9P$ubEd4x1$rA1JOUo>fi1uq)}+U&M2Yv#d0&I; zWQ51pM;3@6bP9Y+QQwyeIL~m3gCN!>omD?>iPYp9sv`nUcjj;Ui%ieEvUpY#z|qsR z0_>U2FTK(B3uE+7!Zq!q;bl@9mhER>Eo1YT=7xjsRpUFcKM#|j@Li6k%9g0RgkayC zNaM3?w?JAx9n3iB_lwM&b=leHjOu$f9<S)UfrIYDv7IF_P8q487_9;c06ML_sBC)8 zq(~F`8Ta8SV_1_`XeknT#Trxu%fI^!!<MzOlyj>0=pwFK{ti~U;DWhP+JU(_+OCes zmEBl#cpoTu&q)fsY5b8LQGCy*dtQfhlOq3-qA=~9usrbUZ&pb0XD)rbH+HRKchUl6 zD}iBP+EjDsuKsI(w8u8%eT_r88&GfS6^tI2XUs}G%h8d|pBSZ8*F<YxWru;Cveel> zC1q)eImFb>J~L4teXSQkA3oEp11u3lbnZStRon`G?I}>BI;ETevwvzdOymd>H@!lu zps|ip$8)ejt`kFvAu5J7)VV0dO}vyiJGRBo$Nv!c$tIo{<qbYfxJAI#Ndwkd=<On! z*WB_Kmx$_DzHIo=`+&0gqvYEKLEb3FkMblhE>()vmmCVl37NxJJ15t)#sb*BtXF(& zQ;uWQ?pfo2mYmjI-?YRtJWaJag}Wu&K9>kTmsz4<&QX#&<H>DRtqHepC*Xr`pGeyF zu}y<J=UvaWZP;#<u>&$&b!aG%`FthDXZtgYb?xp7Ni?9(<geow$8M=S;ZmhBoN}Ed zSi6E27aEquBMbSISZ~3}3OJo4L>z((t{yR<QMF$+gYOcjUoTJ!g-`%nVf_Y42Evi- z!sfPb_3ZX$oSWy+0@kmnVgze}6Zb6_b2U!j;QCeD1A;ZOq9$z+y!771de)1tVry|< zuYMLp1hO1Ztbzh2BzG*?-@yQ!;N_+6Oc?Rbq0$tiPVm5YaGO1-Mr~ehEr+GYC!mg7 zp}A~~a+mzB2~7mn#ARo;PTs?a-at#g9v4^4UnalY-#`qGRI#Y9+4Oc#qcb0cN%%?p z5cx6i4VU}f(6iU?K>?u7GhA_8B?xFO<AaIr`yUi*R3^(M>Ajvm|E@b^H3c|bZaQRq zX-YzZxkPqb)3AHH=X|UD#LF|KY+gxNrd1!-lJwsuh40G<HgXEzYQ8=`kSzoO3s77! z|8%;?1(^pQyVNVTzoML~k6+F40dk0oo2{LpsDC)^3`(0|4x+1LH`C69)6s|L^Wui3 zLEU!8_i4jZzb}X5Gt=g}*}SQuqx>;p-&}O{v2i3Y4F`(FVQ^Ylw{_M<h+%3?{ibRF zDNisBvgNwfC{8&Lz_!}S)+y13;|+3>ce4+2QuivCFj982TYo}8^2;@#K&&a0==Z;a zjw^4Q>6%}(P*XI2d?)MYvMfS+>AtzXzKs;>Cm_@$6cL<`_}f6e6^3)0;?w^AXtl@O zEF%7)SU%kbe(07I`Hn$6Vh<gU^Fj9jW36Ou&=UdzJ>&7sVx4I}b8t-aG$r%ICe`2k zkqk&*5c*IrMATG0=jy;lu&HtV-gxOEPEJM6QXf;3$vxjaJDndLa3At2ziw%wM99ln zzOZ`An+%qssJ3nbD9oTb%e)J1cWeGyIF(Ac{;5b+Vi0;fa_;*|nsJfFgywNkS;(Jk zdh?{Gv}_<{OZ&(?>TBjB%{U*lh}Bis-NeTf&HZ=)#ik@9n)eBCs{UIg23=1I+8}<f z@qty=z*&Kf$<J|}9xfHl$^nA_j1dRY&@zIpqANe|gUze={m!n}x4b(<tF^W&I50cN z=5LzTaU5Wg9{(pI7Xd6=uIhI{^BYlQV|yv2MH%3G$1x2a=7GEJ!`+C2O>;|2W11jz z!8*aCqm!>!%FR0;F2@f2RE%i(I@GJrT$!0{Z_XZS#u>ooqca^vqsTHZ<7r&x_R&C3 z*hIwwweuPE3MEe~+<;8%<5CzK1ZvBZ-3*jCo67ucoJpppbeu6TQ{YEaBF@+)eI96d z#3|{n;Ea3YBD}+|{gAsB?V*1IH9Cb374Q|lcWG7%RLjQz8pRMOD`GCC<wdB&6DZbU zSUbnKN6Pzj%q!0b0eY|sa;+eUE!`UOUbUO8Tl#RG=Uv@08d&?;7K#H5gGlRwj(<7% zh(wSEj4cQpW@1Bp4Ye=htW<mzXWK_kq4T&&x%#&(Y6DwmrS5cFR}O~PG~zW-=^k0T zKD+jn<Eaws*j-__w=>?x+<yfN{9~W!;2+?{-rEO~{F1TvXhQwVC*hSU&%*~D;ys^B zO;KIv`<)C=m}zA(e_GPsSv5P}8Fyx2*Y@Y&9bmeLl>(&mPv>nOp~s`6gABTDaF8u! zh*d0N;m1wJtPYb*91}jU%ruK2Lf6E9=reWL_#wutflBY(bn>dzM>WCpp$M!E5{R_X zFgpz*L#xk0;=RPH#9+gB#U8KC@DZ*-^+TyheOv0B8x_$ff~U;gLb1@px=nzWo){fw zT1)E>ZAsedb~jfjGj4VSe!H&rrg8eE=!74mdBQ<cRE2{h0#bu)mtEenT^yU6{YUnG zl^G_1$dP^%(tIuaZZsNCV6XK7xVuwHIyV_fnOA})t@XOS57C$oBySI$c^W8bLIdD$ z#Qqa${SS!Kuz1AaW6*2Boy8uuzC@=$eGOpZFY*qqnhnoQM6x4R6&N;s+K0~02IAEY zOq<e$&ih1M1sQO7V&d@33_?ZEC1GA6%+~gn?L=63t@lk1mL4QSgOQ!+Mc5bb)$&uG zvt!u<JO(8TW*NEEiG>!g?$t}9?TfG=bf7M!NDfRqI5gSfeO%-fU~{`4x^;Vqs@W2K z{%n_{wtr8k<q~+8Ik*}HK7h<iLmajsh!_?HJ|!v}KCU0z6I{O_aWTcx7KkVqF}SLY zIktGjUNAr^aqnYdw71ss8iUQb@oBvAW{Wm(ZYpB_6%}ebGZS6eOl+5@#9-UQM3lJw zhTr=pL{(RNEi_CGqy%2UMUpDhRyp*l^uT2c$WbDLZQ@dW5&nk#S<k+P-%HP3SB1mB zrZMcRknW!2rqA!Y2)JO+I0UyZ)~!Cp6~STNzuSTVKEfBB;E^zOkZt6*6;w+`0|+>x zY0k_IJO~0}qVjdc?z*xgH~Rg}QEa^C{<}o}9WBXRRYMvSk(ZUz#c|`d2d(tFH>J~0 zxAdfzC`EF4f8oNSnR)x_Kr1H}ZLb;)OC@P~6r}0(Yi5nfY1rdoO0_vWXxPoMtL;$; z+JoXdLQ6*mRjt44Fh;X1*^RKpqx;HWRz+9ZF7(s#9!xlmc>RiI(&o1Ru`cYE5`Qy? z9^hcfI+HQ1v$U_8BwxI@?~g|6`T1?eOS-I>3vJ|=T6SFZF&Rb}_q{J_SlBCmXuf;A zfxv%A4%ZP=fhQ^#`@crTH7LZ4qS)EfdO~LY`}A`5)Kcg#bES>uD!AB{H3Ass?*96w z^<D888ujnPI`6x&ajhUrhYiKC_HbAb@S+>0ydXe&f`<$I-*WeDH}po^`|N3ZgZAgK z3~NS^gjzOZ=2l{i3u*@b?J(@62AL91h1!$r9L$?WY`w_dblv8p^1R<8?6az`p6i|= zHeq#x%ZFk3U;*h~J6e2buUb^+hdW+V{)=9Q+mSF7`27v)b9HiiB%W4tOg(e)!=R*8 zeE7<wfSO<#dDvUV_y8`z9rbg7hS+TJ`Zf;{{=C0*r#N8Bsl5Qa$AA>VBiMN8eI*2c zP>ExJlC_f1%K6igba6z1yL34%5a2QrIW>a2Zyk)~kQogeJn%SlKK;X^>)-Qj1r7I( zK7xiMboe3QU|(rCQDV1!mEY!==K`^Nd@Yr;w-*YCk<RHt{CVlR*`MqP_auAUhnVTV z_7%^CQ$?fxJ<!A#QZ*gA-t?3-4Fn&vkVZx^5gL}7l{ab=w{i@#SJ;z0hdPhaF)VgU zMwB{MJ68|D#J<zL6{{M5W`U`Hdw=F;l=7zcFH2{3PF%^#$a@XTM211m<-e;lb4$*Y z7|}>g?(F!<m6~n7NEPAfglA<{phE@Fk;IOS0Yx!E>M{BD%sfqRU)1TgjjB^0_cb?g zJR`Wv6d=nI;Bjx2ctq=&zg_5=VDFZIefX)GM><n~zTx^o8*&-(!@|Q4HY#Tgu9is; zqzJQCLS$daay?eo74FMP)97yAVNL<+7*lPJ#9|JhPwAIoIT~)=Xdbt>Gm^$Ogta2Q z_i+!D!rx}RA=i7E4kGD$ASeB{aKdM{?lbq3RMU1Q7W+{S%d3OuGRqW&mGkqs^~Y#7 zPf2v862$3VtIKkwW_tEMJoU6@s;d)3eu@kEsa0gq-F9n_t9R>10CAz;8yAyT<ml3p znY$1AUTM%NcMyQO7nq2cq6#H?z{LG4_kx3qdfbM^likw&f!KVVI$~UdY}eiK^2G-; zmm97aewBu-bgw6$YG;htBPy*vc8EsI?o3WhwrYhcOXpgy0x#n#FJ@+C1vKE=^eWl8 zuBBpDSjM9wC`lLW!UWt8(D9)Q0mTfBD8Qj<*dIIP*6#9-&Gd)7@5aG3QBKOPg<Ita zA33sQ?Y{>fVwd{)i6mo{v>j1UIXE!hB<>47V~%uYL}Jgx59Xk!#ctDt^@oy^*Xyg4 zoxkpFbOoV<E)R~N;W~5t4-LAfsDQHuealvO<@l@D)Z_5WudBhF-Ms><%{EAj><e%| z@_A9c)YS+mt`Lt&Vj@*2aEZ&bN$6GhbosY(M&_BgJqSg!vQvRqvSvlXMEiD;rTbK^ zp>?K6PEq(hl?>n=!`@P$c;;*WGC(HC%Yj-P+b65{hkH7xGA8T?ou}hF1e4V}qOv@7 zsC3X`J2A=)u(Njx#3*Jc(4{}Hq{UdAGX_k48TZ(Is+O;{`-ARj3;-pPluv&KS>D5d zc9#W*;@cU$dI~?5_;-OJ!xryf*vV2_gL26kcWZnK-_j=pJb>(d0aX-{{mYM9aBxL> zYu$Jjq5~e3Y($zgEYH+{du2BZaw-EGE*0EBhNSj#1?{N8duB9z`H=)am24N?Ydm)L zjR0~D&ekZV-l@~I4;q%|Y=9*X!;qfjF(dkY*Na_&9<<6W=;-JdGrk&#p=1<Irj&Gn zTGq%<mAt?21|O!o)}Fcu%($=M0e^ynY{CpGY@bOiH4}?K?pRkjJ``)?q9ap;@<j`a zP<M4ZeplCP=b_<Ys-6<Mkfk)VO54%v#1ulFmbpgW@SU0NH7^;L`tC_i78*?4hgpRZ zG>?J{o^oTKukgPp@ftFWW70#~XQYj)z8hvAZ#$xQQ?uN}m!M%EmC}YYGJQ*e0{Hd= zJk7X4vsRE9vLnW8XOl_-iwAy?OnRZtluHxJHZqsr0z&sEn~can>2o8>Ly^x8_&CE` zQnG$-mv&lQR03zY$BbL`e((;6sDcePV7ODo#t&xPQBnIkW=H}dd;(I7pThMsqgk!r z=H>=j#ky^pCyj7wxSO(Aj?RM3RxepaVA~jw`TJ;)91=LplH_sfx4WHCKMfHqNnoWv z#6xJ<^U5&CFVfz{GqtB+r|ypXN`cA|Kzoz2klZ&bQ}atddr1#)-hcoKQ(rNOym`~A zA0{I9d&DrTjV~0*_4|19%OPyw1{T1OfSLA7A`+lKHfyE*;8(KZW71%F&4>S~ER^lb zIXIrXzMh?vlT0NAsb}2^WPx>MoMPMWym`=9X1G|3z3?4E_Fa|cQE~E-)cXB_5~-1y z%AlPY?e(>-uc62ZaU+9&8p8tPwl3qr%ZTdhLNc$$Kw%yRxP#1Zp}9pQ>9&1cdwSNh zc#f-pN-9?M?mv--NJ8CfL#mK<T*Z=49L-OrOU^JV5K^v|unM}gd~$jxX^NI-quEIf zg+hsW$5?Wn9A8E*K9-Uv=!`hg_Xw(nbNbpXpybfAL}*r2$XHKS1$YQW0Q&&%1SFmt zT-ZnJEbK*_$Aw*bSU#QN(e#z<L(nnqkhmBQ!&QvPw1#r7N`J&l!Bq`6XFSW@D)A)k zB#?C_aNUKAiB;jt$;nL>y9zpgl-M|~PESaPITT&xt+-|NBU6(C;eNEZ&JTZ?P;}p< zTXy!R+)_G_rm~3h!pFRtbq4fSm^+!OuYh3%>NB+htW~mxwl+h$+lrU`v{zE4-c<LQ zw$&0tD!Q+7!@E~(e@_<6tYpWk%pWnR+q6Pjj)!NxQ>bO|9jKp>@hwD<3DP@%9Df7e zFhm|g0ivXn6E3yc5)2`<a;;u6eh;0#6u$O9#a^#++8heS528Py<G*g;^krKJzt_dU z;TF$zzFf%|U05j3hCupPFJ$gXPF_r7cvPl8zJ}1tBtgBQF1pxR<{82bhf(^&(@6|F z^Pub*sfLr>wi1uO(;x=|58CW>?=N(oU2UmUSP-&W-`+O<^<9UmMbfZ>WO8wH;CH@8 zP0-)U!tbiD*iw<3k0sWxEAzGG;*7!eQ4|%{<Fv)Ko5hrI;T<ATiIUFR%H!H9H$0If z$zJA&9Nh2=DsGxVzIB<<I>x$!(B-`Nul+@P29Pdlq?4`$3X^s7h3(4;%C^TzcZB^F z*c&?C@IpA3MWyQmz5JQ1AR$5dVxN)lE44FM@yA|e{NrN`VTvAKjt8bZdn5GH*{L^B zT5!mxh*exraJsc5)MS+UJTo|&pZ3b<RM%+!03W{FR4~I!OTd<jG+K1vzC5FKLy+&m zQUH}vtl*vxf-hePN%`6pZy}30t=;ev|7emi#zsnX-<LnvmjRc~Ef}JEZ0L?K|L_!? z>3h#tLohHoO4-LN^cJZiyMP=@Ut?J^A$R4+L$ZeJRS)~U7hm_)S!S}9K^8@a!<g6} zZ^%7J2v}s)(pyQB<dPC<@PU8RExH6fuq(;}yQ`L#ntn8U$|jb_Ddz-$X2BRDniw%s z7xT&9XCYN5sFu4Ly$8$PfI&v5I2;{)8X6kvl|(0a{o=9r)z~BXQ|zuk#dfbm(>@8j zdByv&ZmC5=3Wlwu5-lxD9Dd2k&0Me1Rxx6}-FsgD`a^!bBPjgM10#2I0NH_<ivS=} zfkS6fgS~ljrv`_w(Kf1&`cDj^1yKExZUxeYhoyAdF6-}Umcd&Ov@h4zw@*ZH&>h5p zKfh>pqR+x?I^b^B!n7m4e2MN)uT^4*n=>0yjM!J|H6R$*=t5&5UcKf%IhQ+~mH>uT z>Di-EO~{uL`(q5XLfs~6@L2Hx8zEV;zM+RQLb9KOou_GSy}Bp@0%11H6PLvgHo{+I za`AHsZL+02bYYj;i&~Hip{2yM$Xv$t?c>V|2uG=ttIsW`T3!*-(n>bBuz1V-7U-s2 zJFpZRc){o&F!|RnKGCiZ(SsArhnKp7H03Q!OElGNkm0N71k~e|dp7*-M*A!HBR25& zTH4%uxXr{Rm)C--^8WRZr2sO9hrP8mi-PdYH2%b2g#oEv-X$_x%>h>elyTX=A1pi> zzr1?Mf8eg+WXZkBoquWo!6*fBoVnf~`Ac6XukbzS9mZP!Bp%*0k1HiY3YCfEa>GQm z@OJa$Gf7=@S6ka6E2VVvBNAA^p3D;(PkdFXPzzoA-~<opQjRp;$hbm^0us4Tj?QN& zB$&X2NP<W;YginRKxGw^g5?vr%Fcqyf)i7P)Ywx!;W@Nff=7Y;o;dNXE`dqO%DK@G zpQp#LDC)eAe((Hgpw29jaZO{ch4tCW?^4tLgL!RQbL<QM2v$QLr#Y<T3M!CX53z?c znk&xRQ>ec*JF>G_%@jV`IW-<g;<B#sBmuTF2;CvfAv`S&T#`~95CN(@-RhXjEyBR> zv6df?Je4))Pgxkdkg|b&*$xq2E+-AgAYbO|MbBxB<3Gu6^0nOPFF*G`WQDMh`pdLB zMDD5Fckyan3?Mr+T0mhJV`n90A)KK(W0kOfM3cUNk@j0ZNP1+oD}%E#o-Xdt-yo9J z0yJU_wg(Yj->N<DyeX2#4YSN45#0vD&U$0dBc{#htx=AdS-AF-I`_|=o+#;L>$pG@ zw+>x?W!=lPOxUUKaGstaw;ZuP2KSx-k&l>hURA8l#Nbc1w?|5^p~+*vn_Upf1_uC! zhSN^h;Trjm&Zs1?P}Jk@8`C_Y5~#Ti{KRCra1&T@0dViy$Q$So4l?(&I9_pkl+EG* z*U0s7L*{I!f`W<I%#)<zOu+da1(%m$csg@ctq?y<;&_Oq2Lu&KXvuKDkb^x9g_l>1 z|1+WINad`iK|prKN_>uqM%mZ}C?v5-R~v~;gCgQ<^U9ubCbjA-a&#|BZBf}-W6cW4 zAO3=6Z4wMl*TiJ69D^M0yrjQtvwQ!f&Cb`ib!e6(WI0BY%VUvvM@&1=Ul(deU6G|f z>h<p%gyh?mUAC!)kDT=fHn2?RX;*EZl!L-%ut(P6`||5cbh_9xy7{iVb!G(dVoVbL zh}Hx_*$^npVA3{laS?m6#VdPT=;^ia&ZpTn9kQ!9)V^r$-y*dBB4*)x%#5)dqvqf4 z@AY6uJ8@T@Shy)y5L(Z)h3n<hD1k-H-y5p|b{B4KFS+OySEPf`BYW}2+hj?99s2oA zu4@h<1W#wy{a)e#GfV$E2Wf44gGNU1cj~=4v@5bfSqLvbYe(QNiJ`4?3x{%y{`at# z^yKIp2Y>`bNbH}7RAO#CbLY^kv%{?mC6HmRoB#=X1jPCokkP2#7<ECD;XHe@8xbWX zWm#Dn>vM4TrbqpKdUdAXxZ8{dSNf?96Q{MGW(Qj@_(ui?2SJzu(pWTr!siki7i1~Y z{YGwW6lh2vz{ODI)8~79IBt%LquK3sY)xxC#>{X<6z6~su>+L-guIhUdQC&iP{g@( zcSDzoBo)+I0(<j#rGR@TGA^G0iWQGHL0mIC+kK5a)2-^rXhFWdniN3uok^#4tVt?u zvLQ@+N2}*z(xwICcQ+1v<Ty6FcqL~S#E+PCsjf7lsO)QR{cmmC*$8(Oq$D1`;`QxR z)6r?xuflZ|2u`Ky3!BG$o|$l_%raP9*80n_du^*)4#wu;Z;J;yt-gHVPGkN^MppbK zc}_%1rkC?HsE(2qnT^uDZE8|c#?VfD63O&*oZ<oh3y-Qr{+o(|ZsX&Pzo4EB5F${7 z<qM*z;e3a_Vvja<&3Z$^8F#ROLntKN9N<8Sl`4b?SbVQXRz^Wdty4g_kH7z9-*^9s zNP;Chdu^u6{>w*+nXLv7^dL>;qa7?bd^Iwh<<IELDhCFuhbt?}!HFI2QYtAIn@J%p z-!|FUAbksQRJ6d%A{$(lfr*J%j)&ybT8Z*~{$=OX_O_F}C))xPr$W_<g#jSo0g0)s z;jKIHg0x$9HVsH@Xq0?p6Q;Qu>*zqwQAnHb*&mYC`Kbh-^JHJAE`a<*`4jZp&Og|p ziZfzAJaKNHszPGpmym<wzQOb*D}HonU1!eIxW@tbl5i$TOH&}xov*+@1fe&4wvFyC zfvM|`NtEukK)PeiF!*@fs?zK0#bw1UwHZV@qu+DDAlcDDiWn0wtrxd#$b3gm$2@jX z!6ntWxOXt;NAjYT*tj@+EiEk#cOqeOP<p1G2QJ3602^KlJo{3Vk#5jtby^E$!n}c> z)UC(<RdJDA0#eh9f?s_inhsSE_wZqDL=1)xnwGJYns8T0;D$?w0V)2GlrW5^4}1NU zUK&6y=m?~Q(%X64CDAuZ!ij}8Sct9OS*}$nOE5l=>{}!|0DBaa6rYaEIZg~<#kd?< zkg_OPtn1?BrJ0_qznt@oyn_P=7-&rO&E0tGSg}B>qNL>Hb2eamEGaz%<`*Ar`~roB zecSGtOgf0a7(~4(g8UuL0Uu=B3O20`CTBc_en+zUrP!7EW9E`s?rlYqm7MHQ-&7oL z0uzbEcp=%{KPIuKX`>Z&QW*oC<v|~P>S|8d-h*6^s<B3ue99xuxj5USFr}NrbkD${ z9EE6O!n<J!VIluXdcWG2dYE(a;pJ+GPUxQ%9%l=fR>4Z*caJ>Vy61i-=7lT<m)yd8 z{ocFAU{@3gWR8Bor$JslI-7n{&qGFQnj%~DkJ-xA`C;?3W9IGbG}WpZG5?X@l7lL8 z9@i1|?KQjgpt%SscvQOg-?&YB>+8sx-#w!IvaX1s#cRI@QTaPCE>BHlT=9_W`!w_X znKsnp(z3s^we{iMC<#&To(?H4W;>~Mic$W9_=JlqPgXlO#A*D>&CR`|nXj|}Ql?zU zJn!y(@S>>pOmu<g1ejxG3oSw<Y8<CscU>=!Q#mJfvy){)kylS=H}gt5NX~FbmibS^ z$S}@E^n}_Q8}I)5wddX9RPTVRbP0u`=3vn3=O6LVPDl~%{i^vjo?%8p(83Nlh1@aq z!GzxK%CVKrnOoh?og%&FKz??kT6!pkWKw8v`CDot&R7uUgXmVftwi4$@j6*5f&|N? z7UnM}CLV_@^(=mVem4|%V?6%%)xsyFJnsr8s7H8Aq}e{qNlHp4VnDH^IQw)|ZH>*t z2@VhRw&!|BXA$lo?gJnQzZ1)7@7Nfmrh;rQvX>+JppcPlYl>2Kz;}mckkN#h-OvmZ zzjJP<`gXI(D?THG{NIxa|MO(c?$-Au{(w#Wz1D<?#W4<)4|S=kgLW$=zLt^AE-Wlw zi;sDK-~M-p8}>U<d>{bTO<1HqfxR0Q{Tj2pmqFS5j8S(`a*H-$6Q-fnYj{%UG1720 z)h#P84~l}Mb934Lt;^U+*Cr=gst$|zXmjw793-WJF&U@1HU?!t%HEX=_hZ)|VjR0o z|3E&}&3-3C1PQN4s{%0^W!z>PVf#7W`)rHO4N?QrU>%=@Gm83svh?^<ryam;W0cc- z?$AlNTxUAUf0;?lIOk@`o~py+?USnkDp$&le9y(i%p5$4T{i_Lbv?s)!Ud7jy3qKC zu%AC9BV0KKm%=m(EB~yxY#yh|iWh4fMc)V<g0A$>oLHS+E@|s|%1cOq>Q7)cy*vMX zP6bq8_HEa6)|9ZyNTB`#g^y9);5r8T?YJJ(9?6VgI@M~|9m^tsJE_{!yM@U4r+;i{ z*u+u4C%)ize+(|6;kCPZ7!QSI<mIHg@vSH3q&za`?smE6uenCs-914T$V%su-7Tbr z1Yk@v&QDZq<(e5^Rhxv9@XaUsW_9DMD9{AB7E-UpQQGKy-4^yp{U2aH`!~TL!J5-3 z%QAP9MBMI<H=+r?zy-+4!Z`R;$;~r+)FrU8zJ+04?#<qwgf7%cf|aQr|ECh$;3APr zXHv@Du4cwV(w=vC{IjkR-MF~++X(FRq`4y>gD)5DKf}4-MZ?a2;>1uB?<`n)ACP$8 zT)84got$`wwV}dW4dJ#jJY0i{zYJ{Aer#w?B+yqQ*1F`nFT*%!n1>+(d>~?DqhVI< zRPOhH%DsWlF!kRaJ0TDV<bqqP-AzL-56o(I(yLLjqT{1XG|ZvBU1}q(I67F^VFfFG zXyEU?HVom&th5amzl<9@`5nRjy>+RLXf}|f!!&)Xb^SE$`p}A4z!nFoswPHvqAZ)J zTovuiDrjcxX7BGv#IR$Uf6Ad1*Tk_}l@b?cq9d6a5lur#X-Z2dz=b%+!yBf7)}HpD zNnlx7<L=hGd=*8*zC<R5vaD(TjS*y)#%^cqq(v}Gt*&%p_YdEDHMfUP+mIaTNFZxQ z`LSsh38Y@oFRtdL@bWY#ivEzr8U@P-2f1X-%dz8TC0FNFcO+Q2@$T$=c5g5qEj{gr zo{9;ho;7`xbXOsZtt!y2Nie?H#TZ*t@l@x_Y1)LC-(h<@ue(u9Fy`w)DrlkQlbW?z zSD#8<?@&;9iX0&7zX65<#;_VlhEpw2N^hR2!}D6?h3S=mO7H#&5q}jZIkx`nA)4@= z@o<<H3S`UUVCFxN@k)x)n3-Wx9(AVZlDnc|nFXnJ)dT-9!UQare{M{I+>E<KzuHfA zL!t22d#2ba@tkt!RG>Brg;4#6k{m?nbrYB@EG3buFvq1oMHNeHX)7(M_F#eQpKfro z|C?@G{VBG}lZgbm*a1|$me+e80ydD1qRV;Amb7jSSN9^xs#i1a3vSJOjZ~%)Fm^Ym zD9*lw&@KahXkdZ&VmY^Goblc2z53@Y$M^PFoyx|E*m~ls;#dV(rQ+O#f?=;a$9+WR z*{j|7T30R8ET4@&mFSaYx3x`(EPWp3hLOgbHP>bD<jly@um`?|gfda&KeM^jYqk5; z+1Mb?WtWgwo4k-(N9|SZDIzefdu>hUbD3&@`J7<uam@S>9u_H)@u%Ou{Q?eB^kxQE zL5I7w<#@YD!!sO)%uaz#1bdS?ENISC7{nwXusGvYG^JzqD_-0VVAInxL8-re&V$Yb z`D5wk0G~(l+YOClim_m>3?U+=DQ-p074elwb2)AH&w<d~3cK4jQ;j>OJ6|~W_4Z7} z&k%h2;j@Eya-WJk>OU#a4n~^7N{Nyo|4}zb#sDKm?^8CiPQ6Cl#oxr_G8JYHepS&g zMYh(Sf4GdgtaIHJTop#)`j6|yhcI1shSFa%tFDJ(n6m2Otc>C;e>9|u&8Bj7M-RKx z>w4N<=cbf;&@TGEb=)T!oyga<9<(}Qg;L3?uWGv0%@GLSQk#4U3hL0E$Hm2sbjOD- zO;{!mUqM=Mq@kV}a&-5dvmnsp0y#`_TYeUg{Zdx77Y__gG7C~-Lm$Vnj7Vwonjn6Y z{3Kavju<&#mT7n^CT3K$7X;oY=)OE!#J>H6jWM+smLKa-nZm2a5?461Zp$Aljk3bt z{y9-(qC>N8%4l0U^g977^ruN)pzAf-sLN$Rr4=Rx1w~D&q?nl4j#S#}$w*#&E;SyO z=s4zZJf8;VPJpGtVPBT>8Bb1n(u4MJbn(o($l{|Fny{=V88ECNpN$7sOX)MV-Q5ge zC|gdXU~+KUP|Q%~kFfbv)0{T_kIatf#!G49XX~fB%ZtRqjt}#ew=zqDhU57e_00a{ zo(45RP*;i3UeTVPcwb}`6ci95N0e|kqE4cs+TM@H=q-QDjXrG(?x<Uif3$M!tqP0I zk=Gw0aY`aQ;zP-cC(3UaqS%eY@^en(m9Me6&LQ{!L$3047bSR?Gbn+xWPZ-GI%aN6 zn#<xCJW!<<yAtERygW)=X?L`yMDv7$6F&pY>r;ljXRc@>nv+(WdIE#O;py!@+4`{? zQf$mi$QRa}9I$wATP(whTNq!2#Xd1+`GZ}UZ+F}rWk&@1MhbiUN69Xm5%iJSNuzEm zb8@YC=&2q#WB&wp{ViqS|9eZ+D*S`T_KU^NGH9S<GH<~#%xj~bR|*z6c|NG#pkMfc z5Jj^_f7vj)Jdf!h--uRD%~WTxpjG$gZxI^@kdzZ%1X%5<Sa4cqFcrbuE+5ilmj9{P z>?nFO9Ikh}F*?<Ec2)(YF;-0=EI5w&8!A^FMryK^5NtG2chFCusiOg2V#K|VM9&A; z^DOo0kK5?{omfeh^sbeevpsXGvz`w)7M-35MSX^Tf-GrvcD14A#lLu_*(q<^XZPFw z%kIr;`k!qluqNY70$`2p+q+7Pwv}7P42+91>(UHOu--a9*4EKjatar+#gV!H1A)bN zOxjJ5TsES@_=4X6A%9TdefC6L34#>%=R0AKZ5GvufL#oyuZc=}JIY7*{h~Ncrm`^A zVUsR<TjmQ!$x82ys5jLo^FNp?f&W!Ig#PAhXYsm;5(Tp%xYGp^HV)=`yMSP$xYQUf zhe4CRH?fawZVyP>tx|+MLpF3+B@z+`W_mQ>!{1bP4F({Y`(2#zUKJ+l%z7f=CBv>@ zVV1&=+ypoCC7$XT<h1H@s#W{5vzx8|eZeMC0V*f{tV^{se|45oW8nr^LKipsy7H@i zI&{`8n6VoRKm>OM2^9VkTPq*<(nJ2-y2waJ3@0(JzSD-o2iB{l4X5UN2y6WTATZ7P zKi@`~SfMX#WfHJ+&USB)1PR{00mD%JH;me=!_g0I>SOf4)@Ug-jS)6EoF9uD!akZ> zTjOWfY~h>y*~HJ+`S?d?+m{XJxn9Pld^1r|Lokr)&jX}v+b71xs6KEzDO(CsE66y7 zv<$#Es@#rAD!`2^eXV|3#oaNkMh+P*8?iLvEUf4pv7%QSZI$azHQ-?w1rlQ(`Q7o% z9DT52(Jp~MTK!|@^@6<<T`wl3qWnc^O;XPrt)V7m-0UNToa>G<7rnggweFv7Zild0 zkua4AL&{ZXB(@SiA-{*$>9hEc`YGzTND_jlUdPv!@YK=>p?4`AV+AEnO$U>XTA;)z z%<F)eye4jMu;2S`8g~%2N+hg%3^Hk{e>USj5ea_Ds??&EQ>k#+xze0+!RBx(P?X>* zEFae}!xPO+&(1@0xz16i>wXHvptKN~aX3RnLBU>9_@M@&v&_Tag!O{q!&_WJ{85tC z%h?<9$z0V}XTgn#x1nXR(1EcqL)N4`dWQI<rD<O;usgIXzn|)TL3(Gpf8IgN>UzVp zD8cy=Ke^>HFwYsU7<4>6!vy-ntUNZlBL=l(G~vVg>u*y>+@urHdSKHuRx9~B7E$Gx zJ!_$@>KYAWr7{F8NE=7ljI>UZAX-{61ZSv4LX9)w6K&twWb4$LnnU4COw7C$b_+g> z!z<)5k!7)^Zdskp$;lrX%YZL{)JP9tg4Y6EtjC{kJUWfut>5ZF;!kNV(tsUc2n5#J zzeD8so!(3^znes9Q9Zi9iD^|GS`}*Z!I;0)ful#bFEGaSTk)XrxuIWMCAYbaNsMbF z>;w6;$ld_1<WLerLbzTZFTyQw+f>-|(cP<&(6(Y?Dy&-Xx`*1^V^)x@!TF`FXH4hg zkPN1wfBN+*=0{T#lP^D3v-i>>g2<yP?A4gLHR?5T>IXAA9@L0nNkHM<h_`_nFHS8f z676m3KK<1yzz56Fa;G*{Ogb9W`|nW;Cf5cw@v%Y^2Xy4jM>$x%ejLj$buBY|Tx}hH zaJJr2f#o(G)!W83s;g&uY!Qu=9K_f}!kyCi*xrwV0Z!J(yRwyeIUb>hbdzIu7D|Rq zLdV%xB(!Pm<5AE6Brad&kH+@reIJkVW)`nAjLGv<0wHl@zP(~BL-Vo`Wi{s48g+x2 zlUoKbW{x#3hmpbx`oYHQpJy**Y`Dz1l7VtyMI-TTy$%9Wqwnl3-;B3YtV`Q}`?Hrg z!KD%<t)H>C|BWB*DCwyRSYJ0ck$2sZprhRGg=JN4GS(N1SW;5PL@LFWJH#;$cTS+3 zLYa9H&h^Lrtq`!xg!p$ResCFcSJCb@YUlR>9T_$#9pj7R<tO5#Rk7uIRApLL6^Cc> z;futlRGZK8KUkG`6w6yuQlmnj#k%TmTL3^i6uqjKs9qYIngRng(m<}m0j_J><cfWK zt2$w(HAl`UJtXeLM8cBEn1B4sel&si{1`%XRY58BV2UABVuTs^F{Amg$1n0ebP2Fq zgyb6?EBlotLJ@+ziu_I34W}wd+xza{i;0Mm`<CBBKO1sR5Ye+iS`>|_lVwN@IjvX! z?lR-Nol|>4oMgHnYkee=77JjkS*@4@PgBPCQF<y31;dpWe6W~SMi6E>T1XBw77NKG z&Vzcx<g%k&+y7ghjw;h+#bOiV!sm~1om(uMwX5B~NS^B2Uu@^SdiR%CQcr{PpiF;T zIy$RzgL72HkdW}XF{wtwMD~Y%*2Ti!_u*A~*H_Q)lq7W}GBT1X7<`6uK9wO9My-Ms zk~pBX3H+9*1JjSmH9OjaSPYx14T{Qzl*PSVUWfNTW`QTZPQ}Nxu^OCs_ek96Su4)C zOOBj7WgDy}>g?6FGx4?)5zvp+J0wT^WGRPa)@lR2|B^AvWLD_J%CRHX5f&<}Nr~tv z@R(;vZ;FtF{>S*jRjb4)tF3DpHP!7)BHPCd*hj`sYr`BpRSbva(5s{N2Bb&Gx$_93 zA>Ua`*r1A7T114#xZ~!?zb&H=?U)|B5|35OYbzk;b!(L)bqK%5&M~Og*R@R3O|bDP zS&;EX%d_r|i@*4(y;vMOT?ffbTqE2#z;{dCt?}0YOU%L*8sY~}eFt(+Az%7TBu4t+ z+O99oL1{R}B=7kYFq_{8?(A5}jeMv8CYA~oV&!cz02p`nG`X((@na+m(EbgQS+7d^ zZx{z%K{<0VY^y9kT19V1A0g;^DaimF>moks<r3j9Xn5*V(M))n{r0gV7ycw*7QbV} z|AEUP2k|Oe$J4kMh^NHw4qEp(pbn+-)VXZv#<=TT4o+Gy2~W6;rr6H=OX=p#qWbl! zfOEgn;qcfk&QM@sS`M;M0q=pp41$_88b)X=SEq6by%RvYb)WzxDtE8+VeDReO)*1_ z^>(DIvxb_#pe}8|>ZppW&bYsAw8)+zLcl2v?vQ4{>L<XYSvLqahf}Rf0}1&HJEYZE zD(OlZQ-4-H@;X>x31&mS6z|_lIeT9gvD0mbVR1ldkE>C_{ysTnKy_K<w?r_3q{Y;} zoh^dZxFF?kx7<ikIh~tNs@jUrv9s2*y2keXK9ylSZ7m(7#iDfq`nvSMe8N~DkpuOm zf(-DG@_8)I;0Z6Y`t7NMLH5dnHsPDH^HwBcIMr(y>+7T(3S_Vl^3vM8o9f!F`W`9p zE~V28O9G%q<B#qH-MG>90?%t=z|`c=Ob;uElXA`g!1@3S`Ju<=uI`drUz+<^7}+OS zNC^R0HgKt0s%~Xt<Tqzo|p999HC{lt=7xC{YCpfVs#al3}2!;g8t%4cL%lXZEI~ zs;>AT?9n(b5YifMrN-M%$=bYos+<x*;*?gaj30gi9N_pBQ(|dZ686T%L~tnem6nyk zz+1lE0p~$)SRvbg<~3ltPRb5US)=r8m599O&imUkQ(fn?yel4m*(~1T0@kJBVHs`x zBTyXrrw4|xh(B@rLOA&%PqsSV>ww`-zeVoo58B&NUes@;iN(<eWtrt^hDUlcwmL4y zuPW{5_K3^JJLuT`bSw3brK5o-DTZNb0Zc0g3NVeyw~hW}$r)My1XP5ODq@QYfLlWC z$3UZYnAfHwrrWeHz^)Nk5jsjg{Q;L{GIe;Ysn9iNG<GbkL{Vac;RF86uOX|WM#xWg z?0;l+G7%Q2p>rqOuXjixvdpuLQ_L#D8Z-$Phvs}r=ABmSdzqCtMpRVS*-Jx1lfb88 zz}+$A`<FqEE1n-v(08tC%6eNkes&Caov<4Fc@h8-)J`OYXefq{+dfz4xS)%P1j|Cm zPw_1BLK!U-@iIWI?Ru@@I!gO|SiRp5s*Y|9hTS_j=~yD~L+ED!P+(T*$hHU?Vu5&d z0w4Ltw!1eDSUbM+_&Xr!suq>wld6we5Ek>D08*yWe2{Flam>f<elbo<n0&BBQ)k`O zm4ym$&i2A@P)ANGS<pJ`MfUXI!c#CXzXc>=n0+^y``$CmYvbbyz}(w$2J^zK1Va9d zbLp`1SjR;gP}Gv$|9p$fm~>3Ttkfw>Y5)`KEgc0Brd5}KeQB^!(x{#%CK7Q-GKfz8 za8SPAHU1BaF>dDsFMm^yS-unfVWWH}KOzFm^zL=3Ue@@l<DOU($FOBgM`Y|H(ePYT zABkZ^*so3=OH4<GkY=QG|BJv1MS1~Be|=+%BbB05ypRt0jtP`hw+Iqr+x51ds$g*Q zV7p1KYzaRhG7gHRIbLRFgItf~o|@ShO?B`}ZmH_z4A~*+z+D&<#P&4Q->cXRNE9py zzTbex`qQos`R)-4;j0^ks&QK3!?G}v-tk^TLL`#m!!P@#FFL;$!-vTgWUM(q@HQhZ zz99YIe@K-jN37MphY1A_bbz^%Z!TpPkhUmR)Ye=eFu3{ckAm_@K5aRfNK}qPkL{z& zQil|ZVIXdAWk0A-B3o=ujwb<9cmNn7D=;dV{y0D3c9Q8w6THTxgk=Dz-6TDb5RK-^ z+gfmhXwD>}-nM6q62N=8audX9hMX5!D!YJpzy~hg;vofq<iF@_62H8Bz1F!fo!(CL z0M`E{_uA=g>G*<4`qfl)A^XZWgCQp{Zh#Zw{TN^=D2E9!xu$pLfvt3~;OpE-TJvW+ z8%B+H1d<F!seq9U{A8&tHp5aG=eX%^xUIK~&RwUcQ6Si&W`l&qGBXemEon*#$A|;@ ziDDsYEM#jy*CjBoK^sy+E})uU3a71ySX{N9hBSV2+#qzthoCUnWHHOBSaS*sw+Acq zBspyHPMbskqgx_>58){Tbj=M>gNTwEQRn*q#`I|&(=R_7&yVe$F{xQ$HY{XIIyU`k zZWZzPRV+qnJHr{<NhYut%gTQ8f{R{>gvYVW#w?0*h%p^YTqsbT%ygt?zn$n^L*t;d zdXA-)lNOnS@`J(#w0d%HOC;oWTPclDNn{wy>k|0wR3Hw0-S*v1xJ&mNlJ!ScQjk9c zlgW$_V1EU8JYf>!<^Z-hxJf2T1Oo&HNrs4y-{=Gl(;191i>Rw)ysH)tTjt1AL)p(F zCy>%mH~BNs(J>TdkwD}BIVk9zFw&;_3v{msmL>YJDQ<_sO3-0Reb3utyVc?2`#H2@ zn}(blp(G=PT#t;GbldcY<7;GTK&x9h@Z80nUGZmsaoX7fw82jmKT=+>1r~|-z~fT* zX3Q?y)cX`SDg;`@!7)KZNHnVDPhnqF;v`@6+-0@vHOO?lBSU`vVd#KeI+)-Z3Tp1; z8i<1>{!VBUT3T*Stu;2eA|fQ9>1I|&AdFF5@o~rXQ_|b`ZEH*jkmiN7-{=EXHsUPG zD?TE@O=bnogvP0%?{&SG<*YwlwX&^{wG>BWZl{zxYsJ(x)`5v%*oWLr+sFvi(<5Qg zY`ElQyiFX6`1a`z6~?Ya%vT3Vc7EVo{fazn5$`0{`bRsU3gT+^EM0{^MmLdBnJ3a_ z;WEBBWw0c`l1B1%tWd-|j;gD=;Wh|-;77U#4matz4bT!`nGee5tlLP{ibj!o_U}pC z@Jn3ZNK<M*!2C*_`mDbe@_Fr->e>J3_q^dyHKn{%8leY)1(kx#j)W{;WpO=-bKf-} z{r$sqmmSF>6@3#dU-2KnT_Fnfd9RMNiwsSs%x+Sk4I7R!YDJv%fO*)9hapUm8tHXs z5{2v#o@<U6tf&;5&yK25Y623Wi*Kz%LuIDca#>QF-P^tXf;>UpQ05xSjz3G@Gx6~M z{iHvY6!9q?Dy4!9YEus&oo@-p<tA+YPAy}q!v`{;Xt{kvmzon@fd72!c|g|w{l`!r zQeg;?O8k{7&HZ`TyF@fp5HZUCXt!1|K@@r0MiQk8IfSg2`dl+x66EVyD&hM~1~;v7 zftXb6qK#5?wT>IuqMsJ!uTEb*i!334_>V|P&{5P3G)LIG)urvHwFF|bIdI-<uOH1l z)u<Vy`qJUV_`<vtu;5HRq=GfK4)dJ;T0;TmseqAUS|Vcl*UuL0`b%j0V|hW>hpUf$ zKv+{hOpXfWcWnoTbdUvUNDbUflH9>EV7;B#0@A5@|Bj({zckMu$7Oc3;r#t8yeII& z`iZRisV11VOdgotQ7AIFOGr#z(FLK07l+@8$ro{GB|C?j9=(Q^){5thI}KS-hdW4` zeE{K(iHE8t8*+-RNdGA-Cx;8|oW>vr==EYKi2~94q$7(u+{qCv&-JusibIDZ8w7Z` z>M&UHxgyeg90eo42kNF6vk@O&x!vRVQG_*-Oz18`2P3;}v7A~P%k@*G!8%7KJMbrf z-6Ycd{4e7qbZ3^qnb7vaMdnz|Mp*r;&^Hqs#p)mHHUF4#y3B&Urinb7FUizE3P4>O z1W%s$-*jzwkfUuxj+RQw&<9ona%&*{(#413`eKa1jp2R$?W|YpC8>ZzQZN)0L)De( zUuz{RO3XZeP^N8#v{cwgY51O!{)((I7@!M%*HF&Q(F3ca$V_Xi94TOwnE{74*WiSK zQ_7VCKZ*xY9)yDPdrtsr|98MuT~*vWZ($ONk{7vaC?#rrx`rl<S1*6Vi_L3Sv2V9z z;#7$bluRU`S)w&*xDPU?pCKWCH`^KasC_$AlPUU85K><c=bE;fZM_~3afoNuv8y!& zvfgho>0nB1x+8RJPRhu+HX-K<D%pftB}h4TRIwxy(Jr#?5L8De;j%A$m2~>o;<fWu z>CF6BD-e)e@H6rC{@+h_*!1-FD<abD0^bsXOsmW|L+4Ob-LG<eotlcqn%dJ89{10g zAyX1X+JjcdNF_l-D#;aMo-&Z0$$2WHgkUX4{)Z$Cq5D@me}6E-yBDmjchp42Q+OD< zG3o#JL?mS(lOn|VCnLqR;lR6OUU$tz!gyURa{tDfG?xv#Jd%)(?Eng7;?#2vAUkpv zLPqAS##E(ZOu81I|3MMoN3d7_nD!A!u4@1K`-^{X4r1?~!Fgwu|HT#2htJzdFvK&- zdSKRhl2{1c(LBle%K|c<nZv8mbcB20M;271gvsuxst**KcwRn1gpT4GM~2dpU<=J; zZzELQb#@<5k}%n!<K(S562E?T$v)eIVY`x&-u7T}Lz5%XwAdx{POpJl{o0!iqFPH6 zr!VIUOJ6?rBWH_=Tptg8LqlIqPFRFN6YCF_>RwV4gjXb!y36VT#conc%2EfMa23x; z8)V?$3I7|rii!$;JJ|F@Zvp|eIu<f9mhMk_wb7tE@0rs_TH5sq$XX1w8!2ou2oaHk z$|2NW!=4|X0&-dqALma|GW)SU>FX-IczGz@bA-B-8vG%<1}Py8n6U)N!=aH1NU&rh zto{#I-vP+g`~CkZ6@?@eWrRwS5M_@tTNFih*|L&7-yazX86_kmN?J&g>?k99ls&S^ zo^Rtl{^z;q^ZosADv5ia=RB|TI<IribMO6b5yOIlfZv{WyPz`!A{lS!*81}&qcGj! z%Cx5_R1h)q(}{bKZq3Dr+kQ*FRqpkm5i#)+8})~o@lX(%ZFAqFRr^`dHRRY?m|!9y ze!02gRTnzH&<1zq+)(<cTIZd;q*JA9S1{Q&H}fL(jjH(Ii#Ys$CN(0p`3VbuHa5Fi zPOOyJF2uZc{j*+QN6Pgcr{7--F30oJ<UaW3fe>B_yVcI`Me`^HpC9u-*_mm<jOVc$ znJ^dnDnK4T(&IEZO7AjCV6GD%R0_C=hP6J4Ffr$eV{E$Sl8rPW9{Z|PGIT%o{^~uY zYoG(|g~n!wx-iATZv`&@JE*TxzgW0+Zte*(IK&u1Jn6U>Ux*{nPrH-w30YMyMF-_Q z`%yg-bM{JQxE&P#-Iq~lBr0U>QR)#>`nGAKsT;0V%@Xmul|$L>jg_hIdj_f%{3VvV z7sI4yUz;Xf?qz|PcDK8{nknbY2NP@Y#WCK&9qexhcK#i_?g4NB`?uftS@1Q2ADu(> zT6LWYNORjOqAFyGd!7j0CurIfVB!El$V8WiL&nUla+#_^n%eDUCB@zNr?XW#`-Fs{ zJe8BlaAc01a^Uf4WKWDSIwd@&&bEeHmDk1%7?^f%rO7?(Lf_*_<Y#wZ4tXYfzo25v z<K}_Cmig>7(RTH1Rtf06yP+N}<BXN}hsK!<R{P$8EZH3wQ|dOTUl$V>3+G?=uaErG z(rVs+uGVZ7y<6uqkY09kQ2T-BjT1L#vn3#f9wGmJJp7h^OQLIexz*pR*p5di*J}tw zKRhT#xx1np2wz)a@I?#G;FhtMufs@vUM5A|o<~9Ex7~Mba%QCs+$}B^6ui$Zaeg<e z3x8z975I_4-Gqg*=!g82iE^KpgN$$AZbH6Ef%)cp<pkG2=gg9|I2W-BeZDL?8v5Mr zzBxrX{Z$_aAJiw_J^w4S_Xtz{#KZ|~Eh3UGKKj0gJ|bdiru{xV`^7a(jrI2zT{q1` zo#Q7xyce4?o=S?zJDp@+i_7@h))w=3t>-dfk3*Ml7`sCw*YsRZAB=81s&Z-W*Dkx_ zyZ$_~vtk-_+bd*7tagw52U*Fv<;P)-$D-V#)mZE7U1);dD}3Hhp+_irb>zHJv+}zM zmme{I1zm*XDRJ>1ZGCcqM~eDOB&U=jqHie3D9vZbTKzoexyl#T&$_1LbW{SZ`giVc zW>Az!|6MqenOfJxdvN)CU*Ui)qxL^ExrHD1uLzL)Jf@zi$=GCD)_ZHlV@ScWW|s-V zixJ-2m*X6kgGOu_3;$)gOBrQgqaKy=Oh$`&t?hf?HnbSCl^=k-KaN8|=taGZ3cdTa zw+Z=I7cLCeeG<@IUc8ubm*j8kT3<9+VC<P^gq9qW22)k-^K{K2)z@zCbUCiX9Z8=n zTzI*@bcpGhxY+O`-U{!*LSxUjf6(%6v<HD_cE>#}xlTP5xgGodeSO)*y^i(X!<OY? z_z<s3Eh&cP{~7*dZoQPEP)na`8S~B*PM7qo-#?lnXXSe`=~lKK|8*R#F_zHhJC8PS znyH>upY3|U9CAZxu+G10xdKN{mYySAU3y_s^I8*igVz<*)Q?;qb}mi#uARY3fFJ7N z8^w`%Sz(Du5>xGVk9NkyutMBeS9W*R*u|XoO1AZ@`f(WrbfqjkI}PQf7_sXgd#{;s zXUz-$&q)DubkZJyqtr60fcz;Y{(%nv>#CmaHF3s<Z&YsyXEp!#&F#@etJ|}FM22bX z+mh>Hc4uhKW;je$T(-PO{pnZOy8c%r=9<H;M^g*tuL4irl}r*D?0LzTaDhMR?(>_n zZ&bh5)X@Aj!P?x<RQ4mP*<a#e`aOO%Sxc(Enc^W{-|s{n#)t_s)Y{$QBw<$X<a_k( zs#Ns3qWf;HJgM0&rROlgtwG6$Ng=FI<z-(t`^3(3%kd+f4@?!N^hb<-u}Mna&k$P* zUK!9p6TvzSQ=Ra>@feTeWqN~VW_w<6;?qZ&wG4Z1_TLa$@_E@W?)`@f4RA2x>Mexd zr5b9rz2%Z!H8tUDt+~4>IUGX0o~vIJb6oxx%~%=9;<4b0M9+|R2eYp4$v&L;H~BlX zyKA)C=WlBya4Uyl60s6RQm?+afok%c!%59kwkD0?Yx_IcJsp4CxS8>;P6D!H?6OFU z6p4Ein47~=%@lgf0~UM~M^7JmbG>c6oNmACG%bn-Xuc}F0Dbc!!h3248=0FbiH;|) zGt2I6tB&)1^Elx`N<V@yH)5cLU)*5{=1V8aJ!rm#dsF$}N~v(GFc@N}AM|9Jmj3Ue zck5=?dOdrd7~6P%`$vBDu&(Os%aTiPU-ri&unGU~H%huMP*Jk)WTqd>xT17tLff0> zxbgM-ftBq2g`y^-NbNMaJh|X6Kpq?6P1X4wF0)J8w`qXYL*40UN6CwMG^A%p=IrQS zo*jsDb*72yV{PIw+hc5!@wT=vlwB68nJUF7^)<O^uuL5Ju=0x2>$+KhLuldaGvkw^ zjW7N?#W4I!YUT&8@{vPCV>4JnF0BW)Mn+o^MW8EHes!H*=@7+*{h-|1WLVxK;&iM; z9ErH~^FN0h_}oYW9LW;?l{VtjV(zvmHG_f{{3uPAL%nQug!wK7+tf2rGhd$$?52+> ztPW3_t*oq^kK+dwG9m8Z;6P|3lic14Lxy$RVW)B!+gSyZun&jN)3C6xv#>n5PzGEs zJ>FQs-nS4fT_>qvYdUe|xn|k{FcVf&`fLuPOjsO}T??s=<EPJk>LBP)4x!BvPEQ*U z!Wb43B30iG3|5)oM2c{jipYR>XLH`=PIP^>ThrRwng&i^8k8)jbRXH&Im97Ub|qN$ zV|&F`F3~wA=4WqnFQnXqpFZSj@)I#;D#&yE4?7t-r<Of#hNrg7E5Cx$w)_c@JW2t| zN=lCo@4&uId}Ns@yPC{K{KUdF{icp3mBalXxYYOXh<<4MjEL)kE@_`fA%}zfi~164 za6o0$4~hgz)p%Gpy3FKb;f;L}5%k8N_yN-G`%#>iT%%;D)1ps0HEHecegIB(*jmWM z#MQ*aZx0Pxt0H(_&vG+)j1CIkK9xVOLYVTnNW;neJ3Qid#MQoYR67tRdSjkG?Q<dh z`gZLo>qi_!&c^%DENVA4y2@BNI)m1RRX7-(ZEi(C#*U7hS#dqw>$bH--@-Q@WUTKs zMpPx?5q%L!Rymyo?@nB#;L=6)?sksb*|BSX;F(;5vw;(81C+I|UZw7#Z>O#aaS<Om zryUg#LIaDj=iZhG*k1u*cj=)popdD+X#&)dNwK})%JW<b%3&yCc>L>7_vPfUTWH8` z_yM!5^Ifn26Bmouvg_?fbN{IeCw}v&SfH=3nF!(J`glJ^dmGoOQ&OiK&p%?;m52}B z0%H230GpI+cm|;pnuv>)q&^1b#I&nvn&{*gb8~Yo{~dSEubgo+i3#bwd+^}F&qoe% zajmro*UQun;3QPl<(D3qREc?!V&MGv$avKXG~akLYh!zRp{?lj8D2wb1~;eP>}}^L zH{UCXAN>a4mWEqm&YU^3j$B#NY?#eOC>Shd5AcM}3y_wCf10s=#Q!p@Ws`PigztW> zr>7V4ue{PdWhH+Knq%N{UemKY>;omTcb2!c517@tI>6&yKDNeaugp~o9Mp|-2%w2q z4yc7G#>;rc^21%t)@Ub=33;w(J{7lkdbek?+*0}l{=UJ1c{H5wHLhy^SVL~pDQHsR zYI2xW#xsWha|!}Mb>Fx9%l*Y}_x><`RKCu`u$%p<vVw_#eH}|H)4%ajZhKj1*;#fD z3=HfJG>ghA6Gu)~gzqw!H8n53Dr9)tWST`*{S@xbK5*${<v0GZ_xA2_l3=sFS$PFr zNWw7?E(DVwl>T-57jf3m^G9t0UBHBRb825(Ch*UMqM7DDXM}`GJVJU;nN+x$jCM?( zVPIgeexQ2+#%Ftn@ZDa996j=;mdhj1A@qmu&Us3N(qN;I?R(74&Dl=vl{$5SD;&bY z-N*G_eJ)~nf!oV(IX!$cN+X0FT&Fj`7oM2@zIp7>w~>elLAYGhmlTuWrx1DOieQ^P zX;7fJs>`@BTsrB@lNku6im;tcNVrGiA9}<-`v#=bG=rf~_qi>K6_!U=?9T6h4A*26 zoCbJaaOU?6-m;^USq9{IJanjQGcpt3^X}JMY(39q>p016yZc#e1Z5x3Jp0>u+$O?a z#lK_z7%Uzmy+0n$4u(5k9z$Ud%VV2kRoMV0fK3R~56oJ?HB1gd03greh#H|@9d~*- z^EI-g?hqbm1DZ~a=+Om&QL{U3OqQii?S<r;!YD<34CZtfwtp4PX(bxXUGtex&9;n@ z74wC?ekNuG)gHYR{maW@rw&M+Qa1__2lC_?V5pZVGbhzj9A>&dA;XXwLaE9DRk5W* zBdpV>vRLnEM{&L=;r?c#XRaNUS?0gTU2g=qJ@;XTHxVy3I}~^^T;HreaA1&v2YJ<F z<BL}r#er$SPmH=^GvNt*6na!i5GpF!USB)zNyL!~Y7@dLr%rhtyM+QwMBxd)1`53> z(@Kk(N)?snNS7hEo≧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%0DxAbS5h89pf-(A7@$^BvAkKZ2uT~(6 zOMz&KV<<NR#grA%M)6_rIR=d5NPZfC6!7HyOpxQ122y3MDrXHPKO0|fRW+l@oJaIY zAuW7tTrugDqb{FA28>7+4^xf~erTsiUu6W?xNG=`nx6;Dgn29gwDk>5`0yJ?+q5}R zNK5-dq(8d@Tvzs<4vsiHALcyW2?z)|EyxI%LK9#We)0gSK-ort4VQ!E8xwo+13>Ai z%(#srNB`U3bJQ1rJd7*f#0%U-IKqb!h|$KV_*7cEKYU+&Ygm5r<fwDvhi<*H2<LYq zK-_o$6RX$q-v>~>f-$o6mGVrc8n>!vkxm#YX>(p}a8dnD{b^>yb7ce&*OCw6WlN88 z^J+Fc0<78ax1J#b>zOVLdJ`o@4hZ0GjBP+cqoSgeIylBPZ|}6>uWBJ-Yipag_AV^^ z>h(adj~hDJn8=v~h%y<fh1Db0kU&z!se&{*HhP57Jx`@!g<-}Pc0uDhih5T)EOU&2 zI7d&J2zeD9JS()gbEEE*VmMW)400=0J8$c-;D=hhkdtDDY(YK>sor&2%ki^Xx%dlV z4N>AY47>_!_d|fW*AKFyXX;Zzh2K?yu!})h&1XyIITBz*^;4)Z(IgZ}0$i2E7A+hz z?Z^{<N(Si``l#*gH^V3_QnR9C9qi;0Y#vkZaep$nPEXbrW8$z1Bz#g%i#m)NE~!Q! zXkn~_Ivk)_`Q+(KcdiOa0<Nrb6NX$<<75V>5l#H?t`|1|r|I=FgqrEeriAqS!Mv5! zm;_8Ejs;fuiWA~t0mQ>4x4TY0yLXWFeKaxmQ{RWiJd?ho8fQ<LT!9$t|1Qit+IWyg zST&pD`L)gh)?0afegan-0alkif$Ym0qqCdgx7AN!PsZk$Og1{y8BxBgB-MP4(vgJY zWnnRd^2Cm}pr!~cITk+~8K02d4RUUHQH`glBWcW&YxLrrMvr5Z+kJX^n$(AuSWQt8 zFbWOqH5>{}&&+(p>d?|y?*`W3t2y~Z7t0x_QoUnLyP8RMPgq2nGS^hbLoR(<r@>Er z_f`56--c0sDnmz7{Oym;=pr*paU3|)a+)|b0k3L7%PE}_a)eE1Ts<RJ#3TNqb{&CA zB6Htx(r`LVOClh5kZ<lKnO1dkAeMW><l9l^X*bem^d>*QGWx1oXvoOOIDAqekpL3% zHL#blgX1Rvx&Sl6fq0uZTyfp-&4#$UZ1ugg_vr3RE9H;~W|%H^BCr3VjWr{`8_U*} z>c1NlAQHeO;DVC*v&+U|<7UiWSF5P#^5`q6Z}=CSmOE2^^3I*VE<ZBqSD#my1i#q` zt8!DmC%Cf>FFo1KG*gtx@uD~!t9*C33e1Gkd5ghSs41m|Fie4KX`gR<dz(V8;7tx0 zutuYD4}v{%Wi9CYe)K+*Rx;!Fc8sfV;Ac=u{HDwYi07Nvr#b1?9bc!qBIR;7LT9eZ z$=q;wk&xRY?;s+*|8N{G!R^#jBmyG|!ULV6jirsv3ow#)s=%+LMDz)h{>+>)#IkVG zh%kjf9gvT<aMGK5Hv%Vzgg-X-#xQL3PB4jRBAwGX4e$CQA(CSzoAaMhiqEPmXGd}i zp(~l+8}G)UikBCs$np+Tqc!yO^ng*wbFM<f@hxsKVPu%XC^83ajBJ?|0)aRyao#e= z<5Z*HTgd*wRjC3Tk~hP441+|y%5{8anL_N!^;McH@eV9`pELYXG1ZJ@ERCNVc2*XP zwB;vqApqLw=J#FxkigN7k<Gpx_5Ng0ELi5`d7pJN$#`X(!*6F8;!78seJ)R+M(L}0 z{T)N|SnknKlLr<TYoG=h0&J$H5z1cwa!B;1NrqwzIsXX8q1X%nkjt%S67bu^LpHk) zg;YQD50X<Z_xsu@H3=x(v_Dh5l9EgI`N3`*{&8o^@~z8DQ}Ym>N$%Q-?)7be6t`k+ z>;CZwOpAwvi0T*wz4NzWZ)rS1=M3aOORfM|cR94@jp7ul{Q{V&l<?CcByw+~q|ve{ zE-xOL$J_VZs>*gEb-eDB+)a^m2#DI5u5;$X{0urIE@KjDUxB2qf}^}LMD<T9D#;2A z*k7QYK4g07j!1nd{zIH&htsJ;a?jUEz7pp4aBTgj2D;@8nx_+K<3A?v)1;KM%*CBq z^uDgL8#+`~^DbM*RoO&<iJ?3dGcYii<yI^JEKiDEdzUS9NbbHZWGnnG>a%hrhdrnK zW4K=3cXpT4Cs)_{_uP1@ajo+sVW6`G=$1~icI5f{gH#)IFxU?;ID`G{mi&NgJay(f zwEQ;6r0n?c9B#&U+|Nk&(1DMiiXyIW`n$&U0jKrv>B#`oF$K-It(_eukhXAK2P}aw ziFLv4#-^r{;~x2lhfHzDn%q|+Cs}NZR&qG)r3s39ZCBa;Q^Z5Nz<^0dBD?+7SPhYS zq^<%P5a#uDb1>BaOAh(_fj-q>V-)myU%q_dX3W`Gx&|S7x$3NT=Ra_5h3ujxyd6^< z?x+%|iU_0*uTMy4sI`8{t$6f(`q2|7ua8qBBOhex@e8$B$1l0^#|8WC&n!pPbIlnL zdiTYPwNi%LpJ59-L?yPk`_U<5#cr@GT919)_+y#1IQu>GiKDemc1d2rh@v*yXk~E_ z2c}WCHg|Pl0+J76IjekRbTqudh7KPVpk)Vo;k}=HJ?Rv`)@>=5CJ#IKruM$tRdePU zq{X3c+L}KcR}ti@m1F8Vx$1TlC}HjUdUBPs@CIef9tH#6Be_biE#jD9G%upWOTYE< z2J!tl<uKD%;&P=QXiLWPQ|a5dvdE(uF)X*U#d&T0fLo1ej3DR}n4MZM!+vfF_~`6% zu*V@r^}sn%s3qq{U#X#Bi+ZQ~i;}-yJVI0=6`C+JrkBc>NS-M}(6Q8Mh_$LWb;|iz zsq%uGRFU)ZF6dPf9L<>Ld^SH-R19+{R(%@T2J;KP<X-YS86rI&7pPwUF2VQm+IUOB zy{_)&rcslRK&s_#iBU3FUF-0YDIUy}3de(QJ~<<`^)Kgu;f68DM}{C4A`mx3#D6)< zuYYw6^S6yd3+vbUp~)O4tC;(vVO82tlL6}ma?Qf1JgdIo;ms)Kf1&6q!=l`R@X|=D zbe96s(v2V?NJ)2hOXt!ksnT6iQqs-RDc!kr!_v*}{qFyLo;}~3ITP=^Gt*-OOq~jK z1%|4SA(ikJ5&})7JfEjy{tqO+9SwLGD7SO}bAt+w-jiH<`*7$F(L~TCY_W*Wm$|$3 ziP~1!9>>&Pp4QKpA#8QE9DoV<|HrAoJ1K;wC<vH*C(PBV(6dY}()CmOg6W#3ih+}r zy}gbvD|8pi{r2IKxw0+1>IdhKQ47{pi)zr$2Exi$piaAmCE6_A>UVLm^#iYDNgp9k z;T%AkprWFRFeRN-Xq3jR<^{wgmqWerPsIQof9F#yN%8JICkZMNaI_HG68G9Z<kXi< z2Pb8=Hszxq^rv|l0E$S&pU~MNJ{nNn+@I3YAugN(e&qzfIrZcFkF^O6Pr|GRDXWKK z{C0ev?T^cc_b#^G?iB<K*@E!+D#ToYHJW1ez8mF<H5nNhmL!rys-U0py&wxL6SX3! ziT#5Qo1M<vq^*h91(|-`a@MaBvCw3hWM6cb882ddkhG&8)sW#=W8nRJKIW<Acv#}D zp4{EQHu8ToX+nygy_aT6TG{jxq$E!oCio`46Zb{PkAD`)4)5aiFD6ap*CPpeIGi{- zS;O~pGrK)>IQn!?5!W-p%sW0>J;*&@7F<I=DiX5V<r9(?1zTn?rf=5O@tH0YlVVM4 z0YOBBX<}Iw-L+QV3NPLBK)?5;Gt*!jQ6J_j@9dtz1<Y)(6PbW}his`1)q_@AVyRFn z?UjeqYesTAw>uh1d#dvQDDUVJr-=F`k|c`^0qR@TMkHEHl$HEQ^)pf`N+!NvZ^XXP z@&N6x9)M@hPyKo>7MpSFf{m0%k}Tqj`+vX@i<hcdb~t6IZr2}_{5};6MfM(%^e#oS zp3w6j?XNm6b`%~n0_V7ixoLT}mkhsnZFPy5<_O=U|2;T%WLTUDBIEwn%Z}4iQa^0G ziGC&;&oGYr^%#cb-SYy+^3`Eb^>=QpK6|g@4+OuIhi1VQlX}zjg|2qjV5Qmss6cT; z*4!1BBs&HOZHGyd02SSX5Crsgr@E2}iv61?eIcu2MJg`zsRbfWce1|wd_e>m3C9bV zvq@~}-bkO$QLh#E@Sxi#Kz0^>vyY8nN4DAPPDwV#DA-x%?TSeZ4KbzY{lz~SCX+8F z^>`?oKg3)S@F`t*%l)Q)VsbiyN}##`h&N3KZP`7lez1OBZ+*^0aI4CjB^nR?=CPeh zyIO(fjH?eSPUfT+nB0oYPt-Q>Ya_-@Fg}>rR9K%P|M=2Llp8_|Wa_oa<46<2zf-+P zg~i5(P@Xdb0>bj7$=)-dWwy!fzxRk?;Sv5CUQHQL*fMNv{X0_8?c=`Wz6~$Z*l!6B znhnCO9TsGL(<K7OZv@U!Q+4kY6rDrnG(RoP^G>&RgvPCD9fy6Vs{i{h{dqP@@pGJo z_f8cC8JIid<pN2zXrI~7>hIM;Rfj!Xj0t1I!wB*MK1LD88?iQ|+J574z|3BXPJ65> z2v`o;JqjQJIeb)KzFPEcp$6L|*eo$rC1<nuvL}XmNL5}WY<irvaQHDt^M1I+s)P*u z87*9wjxMM((tq-e#37fkrb^G>&c8&}5t!eTN!gFg-OC++`>9i`9_bzEEi31<DDYDM zv<)NY_4bX?hVUz&y5OK(b|=td4of54I`aNp*vo3c=c%de_@RqKyZQjwl6chh)o>n= zq$WLiEV;t0EJ<no+k|1)?Qov9o9EY=KCYQh-Y-tnPtUZ6({>KcB%28E+<mTSVNKfu zRI+i!LRL5h4&VA6e^GJk3G^PU%_u<U@E#i6r&f}FR|~0KY7<>6x!s&$Vs!9-I?&jx zvCVdWtHhC#F+TcZbo;D*3A|;fR-_DXeSX%L=bsDg^DInUTv>7W9IG`%9;9GzZ(o)M z;u1>VwMXo}P!{D2Nx|3BDwd$p#zGfQd@o+;o;>+lH%?4EgiJ^wUr6@o0iA!PEuBxm zW1_wKdqcJ?Ir$c|k7QZc?ly&V8(iDAEjVH%>H)Zdw{Mv+uUD`i3<ln$WXY)#XuiSW zD|52jEqb&MJf~63Mg~v_k8^Z&5+qvU=u*8GAg3YoI~R0LlHBco7d{#F@Zbyi51zl} zJ)3&h%h1Tv<vw}#+ZvhI_{vcPh-3f}$VYuIp2?ELZzVXRL-Uc|&sFceLsPuqrljwG zrgyq#`K;=R8+Urxf!90=xg8b|Yq;)JmG^yMNgq_8p&m$;Uk%r=q1c&U`T+UaQ448; zwFR}?C&H4_4P+?iFBN;K;;bi=#9)%hzneY0?iB9MN;U9ZPu~Wn1EXbO%|MNi`B?3a z3yHHN9JuOc)Q-Q~J!P7Ml~E%xDqZvEWG<Z2NMttFa6CRk{Z}hD9it@=KC5Iu<v+3% z+QCtWfh_9t^Lsmb5aTb`hX#+Y7enU?0)>@#f#1z+W4zm_MxtI4(gi3a2&Zi<#834u z;|lZlEw(`t>IE7n>hr?Ar8T06S81*B;?Ewmr|&{>nYS(k0-?8QpOwa(`5?%}8u>cR zpZ1LHaR7QXU-{~i`a!b6yq{%y(VuG|++zeSG~n`m)wO001uoLGFYZ;Mdu&|`|6PZ4 z9+xt`8Xl6JZz8P*q3rsx%g^AHvB^1suESOK@}<|-vz4+-j~40czT|>@{lQhro7cw8 zml%T<JloiplxWjCEr{#ChrVwn>3FN+T=xo=|CYDx+ZB-kB-lO?ul6S`LcaHCpufI; z7)tHjZ<UF+qjrU{Ll)^wmfVwiI_G1uhtx@f&jr>$SE*d?zVLO9s|Bt**3mU)Nk{oh z(%Xn>%DW}fv4dXCoaO92?zHU8+p|*GW6gCHG0W&FhIaK%GGCI@kO##2kMdfR{r`DJ zuZAKd{wAB)*Q<^zu!a@|Bp^v3NEp4v_=+kO*lGWLZaZ424T+>`CRk#vcN;0^_3E?x zs$Gq#v4~^YuW1HFv+RpS<SKvrZ^u9H_*jLDcx)-H1F;dqeh8|}F9Doz9(EL}F9JKU z^%4CX8IOTZeqwQzrCd1na7M|Jys};Uw8Lln-ISNn0}Gz>djI4{d7F1Xt6-pZ&EhAy ziluB!(#iJAzQ961ZAKr1SM>29d@_sSPmINDr1=_|)^hdT&6Oke&;#qu9r@<LalQ_Y zq)(&Z^TY@#4&$681aE2s{iK=slI*HGeCM%f@qWyx0oqVG#okP3cMx)^XBU9F9zy1k zX5Ss5?`Lxu`%_rG?NGE-haAeO#-{v3zRsLfJMd4W>0s}+VD{eB?4k@CIYa7S(g0zL zr+QH(ef4rk@y}V2CA$aIS_+mKy2u=Ai*=^{@{11bUt>jkm3IQ6u*dDA^BD=;bN+;n z88U%01MG7uos;C`!j9B;eTKcSs|%qf*J(aoy6Pl3DSx702I<YzR))qt`jv!+|JEG6 zyhv0?*cZYYwQ$o#k3b*Bp4RZGetXYcs!btyw)09Q@BnAPh&oq;P4j_6GpjaIR`4e4 z6=A`=KdZZ8%ICK{h%zvm@?;vq{R8eqi~o%0d>pA`2K~0Ize3u>!Bg?+o7T0(o-q*s zccL@Ht0xCpWd&$QFLTrX#1vU;NS2=}>Eiiq7rnLZqF}r0n;YFnk0Omia$Cg8l_*72 zV1dVbwv>V``V1X+*`46}K+8IX^u?SE5AGP{!q#O_ke_B?wI%}&x;O*p$&=0uOf=!~ z;W`rQudRJ<n>D)|eWje`0pF1Z)3<FUv>sg_LMmtMKtZ|~)3dvn|BBkn_Lt@~F8dh& z<P>fHc3o{A0hT_FObil~Ud8y>X$HoXO2wR$YyykEc{$<Nx^E-)#9JD&0e#Si($IM^ z^6%MCT#CJ4L^F6+7iTO{EqUHR9JIFCsr*`n!5AfWU2nog1FNYUk?cJsW=4R8d~T<R z?)LJ8+haXE5XsEa6QZu6lGw97fU4f_hwBO8+;u*0Ji6g;_+<~A?VlYJfJlnauPj1p zp?u!Ez%(+SO7I7_rR(kO5e6JlTv@@}*MdOo@Q&T#q1R0;liWD0R9fkG*ZQ2C-{Q>; zp0a4#<_fEiyDB&ff|pmyG%O-souOk;3Ag`Xh#I6<sCw+XES&ymw*OcBl_ejxbo>|B zUtF1fz#`fJSy?#_d?ZyoWF0~k{<8-J^Vy2F3Xgc^pQ}}Utpbz;%4Z|$i)tZ}8d^-i z?pz9=Sr?h*>9m$1Jnr9BySasUJ@;Fsw-mJ9X`{qYv;Gs({8EcEx|U-&8n=A(cnHa! z@dcIKr+k6#IyJ1#Yh&F0=JyW#`GrNSicVDGjEszeF01)M74lw^XcI^5<;Ef>uIpw! zQpjIfk#aN_s+3R((n5EB{ymmt1(v8n`fxMT5B2NybA;G^>6CV}dHpfWo{-|m+o#&B zm@JO7tDG!4fz8>II2tOurMW)uM<&nLrH}xGM;VY+%<R*5+BR6a9Wi8la+kG`>wNFJ z%9bqvF}DnWT6?>vy5GFJe4Z{qVj}lGf$Vvo_*oxzcy^YeFvPT(nCv&RzKt-I=T9*N z3PuE|*xBz((1mAsuRr>1=bWr($2;z(K}7qajV0oZr#u3-8{cn?;X7N5jCyEaS5?mT zsn;Z<fI9nE%NE_W1%82&Bj@M}zogTqLRZ>hkHCtOA0x(MK>9s#fXW0%&wd`ZeLJx0 zHEdY%Dc)M>Mh6dT(kE80Ia^U2()qsQkLd7vbA9c!l)a=a|JrO9Q-=%5Nm;_vHLQKO znrUDpL*?+Y8{!X@RvI5;#DD5O^)0(Mz6F5cnX3_2;^?oBkBzUKYZ+145@=mmlD@dj zVWjT*a`Z6t5JvZvfqx?R#Bx1o#O%QzL7~M1CB<Udrlc<0r7y9V3NF`t62|vj+tE0F z&8V^^+ZDaf#^XCDPVn;g#m;#`tc^Ac4BYi2;O`jZE<HrH!RKS4WSVU!B#pH|Nj>YX zk$y%7RDz*@Q)%9lW%wTJZ;U9XL{&xbw1V>YjmZuBst0WolV5(UUD06vejrVs@OXtR zJ65z0e#fl+m=Q^fGq~f1ZS+)J58xA;h{3fPDTt;Y`TaHm#zB3z&C!7<uDV=Bxcqqf z_&jzyP8g9M>s99pi}W0xT;eO?2sGD3$a3SKe~b~4s7uf(V<$5KrpLQx-m9R2wy}L= z2jq4$r?rMVg_b+*5j;JUB#$I3FSIDeF9o0ONY@sgBH&1r19>{{IBd>o688{UUp%S` zCi42DSWoZnJ^XhS@u$}2dl7dl38J@2)2MNk&?Gny4GL~GARhRzQ_I5=>nde6<~0Gx z&iCc|=jEF!%jtH*nd!f-_1MVqzjz>qNYhhkI9so`+ydjjM42#lWq>u;&!(UG+NDj_ z7f`pV(l7Py1lWxSw;r)`25t@Tp=DF|V8f0>M<~G_1Eeut1-{(qdb&=ExaLuDIWFGH z)ifNx9rtCfvl^E!YdYDeNOFqO`Q4&Zt#)J&D(c(hKD{4Q%JlV2>~3nLucZGIytjK^ zj`~x+r>(=te)OYVh&->9qWTCQM2kg6@aOuvK-9iV(8+COH}5X=yB13Ew#)H%!Vmmo z{&Mx9v^sa2kb|7PCe3Dqaioc?$(~5d{rcXi$@QEk9Ij%#8)+>1G0?#h=YHIuO>h3A z&zbh^!~!p5KDI=>UKCk%x|qvwG+BTC?=w}|54E730*`N7zxOn0ZS)9GV`Agg*ogL? z^a>@5w<sU1zW1nHzn)u=?`#g;`n~p^oA}IgL-38l*k;4I(3|4JqHFgO+v5hGaf#ON z;HN%0n<LwGPI%vI|2>Je4}t%T)v_dlYIwb#pJY8(oAaiWUMi}NAmwt%<i9+9I8#p7 zlCfm(e18#O{Q(;}Pjo;`m|wWc)TvO?dXw@Y8PE!Jdn+Z$(tVf11GWv(#%HAw60GQ! zDEuCR`O<7qZgInzV_R7g_zt`}E(hKde~6DiXUc(h&G<`rv_lY4@t;a`1KeK29t!pU zR@}2=63v!!WVg&-Sh==4wAu0rK%7yAOR63<S9vQl3@1V)gABw6KH7aX8t*#z85C+f z?sk#1v_Rzo9~3O@LGMTQMbKh06Owp+Qy~azs?;XJ@IO#}ZU5e9Sz@Kv+5cYb80<o! z5^$shznYFuxxKCZy8Fl}`j(vjQz!;vl4H){u+rVF_tk74d62KUF0q$bOLUKf(D?qw zN)&}rc_QtZOD5a*j}(^y*7JHiY3Z~t;}aa@#{dBP1J_z-26T|XmP@y_-52_iYGCKM zR><Ay^cRGuIlFa#0}Q>ye8N)sX)|Ht>&55;lW0$SlxV|%zPMY0AXp?GHcc<KSnWFy zQyA8_J!MU|D6P7#2gP`^eVCGBdi8nHBH}efJVh2lz)iG?c0m5J+jPKqgvBHF{4O7S zErSGRI)kfJ-upYXO?ln_iBML4?^@!IyeUN(9WBv2;IR^Qnw+|}=Cv$0cSZq*bHU(! z%Vc6Xn~IR<fR0BRD7{4W#qOiEIDdt`S=%iQjDZCkaTtOc^bYWoU<-_+8?TvFLOH-q z(hLl7+;MXfV}Dj2bAAUZ!W$AwTkmY_mshc14QS-t!Vupx`uEamSNz2JZ3Q3ToF>P0 z=da(ny)ViZp0EnYlmp*ti9hGiSY2k%QhFbf8b2MIiz2kGwf@23Wn$u1AJ02Eoh=98 z*GW#XP0EZQjq15LtJCK@4zr3c^xi@~Mo3WO1%igT^r0)p@b0I*4qVG0zGA~iP_ldt z%W&uZhv}G(Q%;*5i9|VRV!v<kbL8Wf$zo@R1c_)O(AB<T$Q7RW9mVY{`)?No5MN6> zFoKlTwF5k7{+llYX1iyY(?&F1Ug2223FIgm%^9bwy-N61GP_90@pDL(t!HW==q*_e z<pBOJBx?eb9X;p0;8jA`yCv!pGJl46f$G0W2(0ie!OLu{=HucB^6_h(v21=Ez9FX! zIrxFH_$5=k%SeF!P$8E8Gk)MO0&zM1{;LDp%w<mK+>hfLpK<3E1#4&h!VHE=23=I0 zo&0L%+W-fFVk1hcr=~VCc9L<{&Br$mA|1J~ksUVxL0Qt@(<Rpo-uNhV-;S&#*5lCP zqge<OP8$+^t|C_Z&=bP(k~iI~v}s@3|9=$a*^<m^o;)#c(OZrchBygWxjFN6Sl(Uv zPS<e_%ialh&g$c|^JzyKo>{rX&RDorF1^!swm{8AFJJD65&;Khuwfd=>S1^rIdv6) zb_|gc1jmpgu86`CT=4=$dKOInOnGJHZP{Y&m7{s}nv#BDBO-Ywybb{CdV&%gZ^_zD zQUop+5f5Bmh=0IL^36{5fxGE(@%~z4Atlu*RwpnbDJ;*b=cGdPDgNf=_mA&ZDP6OM z)Z5UR3B8{FaqzFLzQIOL`MF1g84^A|DiYVTEozVQnUxbO=5p67lC_1p^HLNYk1)@I z)0<Ho6Pa>ecLmh(4kL)d7xirBAV5sym;VzK+9h$<2s1lLrZyPZIj>6IdyI#F+<h#z z#l@u}hCPq!ALv6h4|cy%NFqzd+Bi9GpX9WpS;T8#8gQ7BuDAFQ^Be=I2Z;gBz{J}E zP94esPfR7tcWBBumT7{o*u0Nug0_SeTS9Kd5D{nwRCfPT&7hH5my4VdgVGRpk?#@z zgWS-kc$EtY38u^ElrIsx+40VsH<671^1F%t6QnBLaH2o%NV6EG=D{j(c&k(^iuLzQ z#u0e#Y3T+FL>0)H%uJ9yE`Q$|`dhDkd15eqO^I>omS8lrr)ngA(E}gk>x=NsltWxs zJWM0*O&eBQsKYm(hD<x2?rF}l5NEql<$GXu(-K{<A2#g%N<4qk2GBSsfV#=oTf=sW zXx7)Qg;c!vE3A@Y;bMP14Ul4sW~b}kU`ykV>l^4U8;Hww{Loi5{zK^9!@c%2M%vfC z*)YwnRjq1v7K=P=?A<-1r~XwTn!~xgzT=buq!(I4xC~wFv+j6O{{Qin>^8{qrqAby zi))S}*gF2*j^|6ud+I*@lUP)QMjTdXup}#I-|!Vxl%;vWd-QGgV>CuJg67h>Fx86a zm&{%|3UC*wV-uJCj#b?7xtDRAyhO<v(!c@-Yn~ILCtx_li8r?Gp?${N9n5JU(TtS9 zM4=q`!2Xq2-aZygMFKihO*pRe-f#3gi-%lMJ9Ri?7uf<@fH)-TxJqLZyxG>dkKXA< z(Bno_G$T^@-5#Yy-mQ|mhJFH-d}uvg>g|YkDF0Ims^AM`>HLI28j<fB5SBdpGM{~S zX0uG8(d9g(v+s6K{O0xxmQ2SFCgVZQD~hgIm&3?6vg4fd8bMb3F3Gg^?0=-M#K4n} zh`gt#7a=B-NSm7{iLjA}W&OJunzaGWr!tIvy;&?tU-}UN#B{>W^RwJeOf2h*daI*n zs<zvCrxZ;Dt0a*JommIl$YyZ->hR*ctkCm6Z_W0f2a@WP*RDKBLz?`C0!+LeUrMLn z)P!;fm$bLf>e(9zL^?95VpFo>_51+FuSw^deju7jME2qu%cF^#yg1*+1@mwaQ_13` zsDAjWmV#Ef$6<>GCJo!UL`goInaF#)Wbt)CZtju?;zM!NaAS1Wc*zuT-w*MNNa^q( zuF~)u@7l?gRytZ@h9Op{+^<J#<HAd9UxDm2{JdCUPqX^>OG7!oC@%ik<EejGxBF6T za3S4cw@he0n&oH%HMx>c|DJ$`%*2MzH$V9J7bb!l9BtW0{M0^O08)xo!hR5!&WLII zE!b)uGwSE;5S;tZ=I7@9V1E3Dhk>;%5-ko1;(2=cv4IJ&rfdHKXqvxASePB=@H&eI zgj69ifb3yLFsyvV7e1fg6-6O>wP?8V6<VawD9e^$cgWw1eA43f+AGk3)hh8%roA@S zliA=Ig-@KnSJ;pn8vp8ipCP2?yN6f(%TMY1s`I^9lFeKb-Ni_`E6s&G2jN~WScCn7 zHwA2q?xzuJkgfvTwwUS?NiAwRR}x5&N|GGtiXOT1>ZYSTzH);Haq@xsVaAa}7;*6Y zZ2WNin(}@~=bn!~3qfRC*t}!?=zW&($c<Zi4f!&NDT&LYl<*jMN<7vs)c=zPkKG4; z6`{IAFYtle;%w(rKc4k|Yhn24?e*WipVyiGuBp@G@xN%?MzpOpMR|`N(YpV>Fn{U% z<6bITs#>y!uK91|xT;0`0`SX_4CriU?0y$eQ#`hL@zk5o@uHin*JD*Co|>8P11SNA zh4sjcCirNH6!uV0C3>gmXKM=)?EaNKc#$O$5Ig{{lHMK=jd>Snq?wM#7a+iNKe2b3 zTPhQGZ}^E3G}Dya@OJIG%#Td$+#EpM{xqUwVIc?7ZC_1qUD3!_I~j|Jtj!Lv$2+Xg zDE3go&q1YbXi_TLJ6Dnf-l!j5^yu7WSP-BB&hFJYYDD#4BQ2koW1?x+*GjfaetMOU z&tJbHh1bsIM<FDA8hfPhBwH@FUXS^qez50aTkteyqPbfM1Rgn0k<WR>@zc<SKO!2M z=nHpaalWs;UzdQ67a0PK8_Mc`z)^$Q8_TzXjTc9u@K%y@x0XZUG2Nn2N%8GF6<NW@ z3&A62*mm-*<N9tSzw1TPhc(}0HtEReyYP!J$NGPZc2t`_XbvJ>X4KmT;*nc|y<6BK zCh}ye!X!J}ZV7cA5Zg(r>)Dvh^xiCB&Uh8<aR<#`kpLa(GHqZguPCo)x5Iep-(%o& zgKqRJZ@NH^(2zDF-dYfT<$a%OoVML2jBBNF83(S56@j{`7wR*-13VO!D)Xr~lw*vF za;LB=8`bcQ*ls;V>=!Ifny**qbjlFH;fLkcrjyW&`vn*TfUhEaPDGf5E-y$66ERwZ zi!l75bT|PxJx0B^4;Ej^%+41=itS@2HlJ#J=1!F++ixDIhR6?tHeUNk4Oms<SMB*I zR&D@XY`*yr8(an3xnsv&l$_-es`z8ZSM5za-5!R44;AzG8Q@zi2Dy<p0cCFlwOC_! zcW*1xmo6I5_G(K4UV#ojvQcjtLfYat%o8#LOl#f=kNBkFAvgahkRadw7hO;eDM%2J zsL6_dI(j4%7aJ;riu6|(M+{z(Od=6wQDaKuL%oQfBhp4KZ5?gjm~p!3=O8;X4u7|P zyT5Or&bQr8=rqLSAuM@tmrtWUew%F2RYeK9BAS2s*%{V)B5m)3a9-_dacr-JKTqAm z(|u00RY~o%V4p7Xpv}>9ak~lvavI-IgM_DQixRxRo)X41cPwd_%8u<XmC=v{C|tIy zKPW@EhWlGvn~r)!?$Zz_M(=6HFP6*)yf5Xf$wabSxf)wnw0(Ad)yvTT>|-BvGfXiM zSJ4M*@YfVeX8Ug<e~PGIRl=G$Zkckvx<rr!Ucvqi^jx-;d9Gcy$Fg#OW_HSEP91SY zFEaeRm*s8^bT%YT{&(Q#&N&->&Ppj)6?uF9;rj&St!(0V<Id(I+4V_IaU}q^+{0>~ zDx(ReZtjnepr&Qky7vuYO~XP~e!D&a#do<_RO4Tp?h&I|8*3H!pzs3Q0DG~o7^@KL zgnPyry+d~+9m<{f3enl<6M6}wRyIx!da9<m2Lt^y@vaxmpIYYX3{upBeonKrmFr!d zft$l%Q^X+T6eYTSRr5Z=R+`f-6vP#O1I$>U3{%|)jQG@X<D9*5r>=haTz_Lwg^H_1 zN&R%JeCi9W1Prc5Dj;NYQuJFfUu@|C^|p)aX-!=k6Y<1%h=EU!ln-M<$`T^IbB}(_ z&yy!B*YMSqo9rw~@CI8Ie4TM1hk{XLn{AoDo9ilt7gv>yh(+iP`73Owl8H^iPi<cF zTZ?_8+PZpB9-e%bTbH51J@mpc?5+c{Uj}B5{FbJUX<A}yNVSs%X-M!wgz9rr<a-*% zGa(*4;JeWFe`hb#V8)mgypIxf$+u63CkqY#9;@5|-BoR)8|y*rd-khX3q7wa{94Oo zbri-VWD3B08U@N!e1mh3k4;;Xj>m1zuSH<Xy=l@YZSVqhO8+Oet>TNY)7Vv6osL8H zm*3eOR1kFlg1GxN8VkgH)=!`5YZ@}vu`4snn7S)0o(2aMnnwqghtTRgz3k-KS4|=D z)%*MGnAL`8ymdQ5$>5~ekyo+0KTR>(u9gu0=rof=hd`Uiv$_nZ@ZZjXO1s&c15w={ zpqov2c6NTO2U49=g$qv{n$|R+G06t3n(4}3Jw$wTviM;UE=l9%?}CxxY}8XEX5V}{ zskZiTz+wbGCX{wAa&_y%&7j5%Iamcn`@Pt~780#;RMR$nS4SGS_$I(Pd+szmi6px; z@tPTr{p1{oWrjpRbsXBrpX>Bj5JT*3d-J!`wYwL5c+bTV_j3?%++IhZ-pwuN4?I39 z{jH}J*xG2ilGy+H`wEcn!p$><_n!5ar&So_BMa3`AJ;)RE!W}Yuz<4LRWXW#-{ZT} zhjkAA(^K<Vrk17?v1Or$DIufBHCNzG$_73?Xp^y#pj{AC{a@w=uqh4@vr8mHrmsg# za%4h@jMf!3jlz~?tPFl4b73+yh*xs(P@lqQo#u3>^7fRGJlg2uO}ap~NZ&jnzF6qy z_c6?vxq@!e>AVYEog;SZQ0ngXkq8LV2MD7?*4$nfSWk=I8{-!k+BvJO&z@$ygZ8Za z9RQ%q(a9W~>Mg3Wrpr))>OgDGMhW-VtuW}nv_^EFYm5QGhXkaz<0O;wrNg;%bRX7D zma$n6dDwBJYns_&hx+@JChy*cawaW!HcCrRZ!Y~HbH`Lf-+d(qB5p-fjWl_~yS%pc zPmBgSkUnZ?@DP12`oHGl!sj7=X&XI4fa=m#bj9^ZLz+Vy#afDmN5Z3{fJ5&ARR`Ep zZ(#qpmCq$?Y<`uZ)16=tPq6JQDS<N3?1v%jbSv%_W^vMB)BuBa?&{BRJzZ|K-Q01n zJ#-00#2e+j3k_UnvwhUB*6F=A$p5(?0?}rX*)Rxmi|k(v95_S+g9#o8BM9GdrMNSu z(%fO=gVdKF$>+&e;ML+c5_M_bJv+s0R?|N4)9CRLe}tK>YSHdkyz{!Xc)&ca#2398 z>K7nZNjG~2*ki275RSyy;vUoCMQoiYV>w{{eNH*!+|H^48z6pEUhQBC`^KAz#_9}B ziq@t*6x}u7UDT=o7~!4~S%KgIXUnh&X;WBUye)?lU;R-t0OiV{fe811_1&jjIJEU; zX%aabNi3fa;RrDkH~x4z98Fg&2im0wsY7RYRRga?KSdOdmP03b?ERp1aCHX%EvUo@ zwy{L4G1k$AkY9l<FJSI=_u%&dj2YWMXk3MWgMWmzaI8J*H(u5wo{MJ#Y$jeQL94Fr z>BkZGFXNu}aaw6~2OMF`{fDDsb?&^b<Kt_?6|jY|@AKoAOSf@u$7y|<WH{0}T<#=P zAStR}oZGfec1APIA$d6O<&<Q{3lEl8nsZ?uU#Sbv3uA*mV+8qt14=%*vpV_IMYf9n zP3mXO6eT(Q(fGgm2EqVqBou|GsRT1CP2`$!XevmHM?hd19!4PqJfA>1AO64M9!SzW z_!2B$jKvUW$oV@R54n^_Ci|f((&rMx8dw$T>*NRHf8h5>kndj%xFrT^d)b!*kv?1J z32oN}wK3G=n<O6hcMC!fR26)|Ftg?8)|M~KQGN8;d+bi$TERKhg136<Yf6r!c5r=U zb#tMRr>SgE`aK$`;zJr;*^O-TZ34w&1NfRKn$#zIKoKg@--uY}8>5!b<C+MY8SPH8 zRHcsP)^St(6^{U){(KGZ<pYkcM)*j*lJ_>!?dc5Pcwi*b1CpyihQ<3io9%3xlX`m; zmb0;Y>tq6D&_7sS0M^hsEL5joFKfH*VZ0T(`e%#hk09K`k5M_vY`W3>O3-9OW#mfg zCvH&HMgbJ&IqbNzu-Ijx?t|^M^6E!Vk(X}fczNa=Ey%Q>bRjR$J^?*@ddAvv*DB5G zXE~Llq~!#bvnv6-%i(#sztQaFs}qvdI{801Ro^8KW8k4}{F*bEDLWVd2AG>wliE8u z?lK?-#68zK0HF1?rZRFT7JxJ2Kdl(OFYw8JjyAW6CvpwuqeAVE-}Bjov<*=}MMf(m zYQO74+ru@FMAU|J%c`;}<Lhc~SC<8EhK2tBn1LKBMgjlpccCBl^F03Ug9sw%!p(w< zii%{|Cp564LWxo2m~30jJCG!|K9efKS5xfoBDGI{@YxVeRWo$2LYm?-PL2I$)#5fT zx1R3C<6O5R6T&KkZPQYdKe1646xNeLFI_1k&GO`{Rl7YX{lRvRc}7bCCA#WIT5Kcq z#PPpuY-oReo37#SX2^lQ&4Q$o0Ixxnjd~{!?2VD87AXL~Vf!OHg2vhJPCzR5YpeP- zhBpw0F5cE=H1Dit92iXpOHD3hTELdQ{vMqwWr~SvTAmH;r3(7^Bz19Jy&(4C042^- z5-Q3dOLW!{pMTYm9J0DoiX43uWwSr^ybD&bH89`rO94e(_y?45(jZOH>EP1oLl^(G z(?Glb;A$J?<h~Gs>q*2T4!F^c-Bg#F9O`6P!l|mie`H{!NC^87w0AEUr&y}f%_7tk z7rmDvhgsy*1efZX33!i#BJ!nUDqf)X6XWK`{FgYE1h$haw`KOt2WtRISyA%x6-cXO zcTRQ<p>kT3%HjIN)Z@`8=E5<oO3*!+#|D*vlUMogp*{wB@-&J!g^zXc6Gqwab|+`d z*V^8apFT_o0%X}Jfk2n2V1a3Gbxm|SMx3^b7p&3SEgW%2Ci?uoFCzs=hfOw108(t+ zSjU_YWX%nEsz64k8xO?Hd6>cH$X(xFWt-J?LZjca=H*O3>9RA>cPVQ0yzwdf0aiSe zImz79WK}Ho?1nSVXqPO9k)BTRqUS;vwQ_4i7?=aRDa=uM^y;pw&kfy<h46E|CQCTC zM-t6<+3$S?y_>E83Ylzan!3Xkjb2N)9j9{h_0g}vgd<P1PDhs!RBn>hUh#D73?0&* zmatl%y^6}z*Nl+D;Cix(fKde`X~S<A8=sD?ZXkZFRPCe8gb}7Sc7`Nna~`hC3?hOT zo4SAsn<agKx_y_u%8xI=4gq>Pnwn~na{a|Sy~Fa%7w^%6^5Zk66pawvmjpS{%a5;C zZihx478d<xZGZYV3?>*$^p-(MyV5kGmwtYwBOpZwSlw+AA?WTU#Zth{`g&JJi(D7) z-QQ)akS5D<xR+S3&eez`io2(-#@W1Xb`J1G%v4s3F(-8r<rzb4(?}zNzZ{zFryo9P zvRS~!JzT~MM7D!ys%e3nZt~E7yzAV9Z5|;WKJ~}#9(nq$8zkmUh~u>X+{BPG+USH* zStBq6s$pFxb)Nj(0rv}2YrRzX(B4t!<$r0R(rp*d1)2WB;W=0n9ekR9yiFza3s{n) z!c4!JvN^E_UpVyRH8**+x}7o)T1MR!7CIwM?q4uV0(PFo>DdL}s{=8-{8$uwrE+$c zL$$kaZYwq4<RqeI<+)j8YnJ}DTBlAl|9!m<H;#07uBh3%A6$d>Y#4ltf(&KCl&Zs< ze3(+l;=?v95aLlyBuPk?z?tr>VPhNVt#Nc1>5kG_XaEc*Y0-C6gQthI0=AU6rV{zV zZ2X3cPR<o~-4~X0yYxtse;r|fx{n8RT>Ggc2pbwy(}9XYgRIUZqhQp5N!pNrU(Ylv z|JY$G!bdtwI->mz0Y{7Omv*w_#ez=`5^~`8UHfVn65}C%aNZHdZLL4T^ULa43R6Wl zxP>wc{YL9=14wE)ma3CQ=_{pU`H{6wqFta83%zpzW!$5z_!9O~aWtgs=bY5$`#~sq zu03A4|Bl&kdzd3xvFWQZu{=!eOoRu+^i-0(@i0Sw&^D2h4>O?esG-DWU$?8msg&`T zS%(YABTRFP0xNCFQ-P07Pc7nRB{10EFYX?mJ?(je&%A)t8dwyL0rnZ!EY=HaB7Olv z4qCl+%DY;|gTfm*e^9w-xnl->CBQTsz1MzACVKat6a0wUDA5wW>bxw<im8(<1AD;p zoolQ`Y#_@SpYBb(?#TpKNZLwCm+X2Z9o<vM9kKa}&|*DlgjFZVwCpWB7%Dv4c$LZo zb=q7s?ZEj@{oP-mh_P!!oU;eYBt$i{VG<N;69wse^LNoyUd>P~X153VH?^WM;@9^V z0qy;;t!{|nj`--MC-IfYd=Sy!EwRzIN1&=Wky^4I%3_y>3PMVR{=SiDO8Bz2)r#1# zj51$~!bh6ccF!viy4^$#b#5P2go=-y(5&>IJ_<~&%<*n162(^F9{bH}d9Kzb^F+!C z-SvWsvlSCg@FzN4M-PIzaQ;ub5)=iCS8K^cHaAyK4Ba>c2X$>E3=Ejc=`@h4uVtJ9 zop~sn7Qc?>c$k6_uXZ0<&8*~`lAFKG_&ZzEoxDf!6rJjohBQR>Cl|7B6S8KYf?R`5 zQ&*mA{am8N<Dd6X1X*4nbppNfgnZW7RK<u+x3)GIsaJpvi3rTlOE>HKe-#5trM6z2 z(ln{-gX+?h_Xo^d1BM~_Er&!dr5buu!XRmux5_OR{g?Ai^z-{ts6-KeJNq{EP}CwT zMUXwkR;2g-SXCy`%RVr9Z$fBx2k|Rm{s@IaKGMk_RQLjyr{KEC-G(<|GIT#cv>c{@ z%l5z0lH%N!13w8Xzb$#R3%)FpWI@@HA@kS0Y=6xpba%%r04a{IXspVo6Y^u8t6|e} zKF)VGXKED9+yy8sl>Yvy!Sk1b2N$?w{ti_0z>ZKE3=rX60{@nE6*cIolPTj}F0m>< z>98N1K}?2UBGKeB%dmG-+t{UOGSj;~hY5bf{b0<Imu%VrS!2N=Us7_qw-NCY2Z|L1 zl&1{I%E&=YF^<b^&s&d}p+QXWZKX_y=M<dm=r8EWL_G}@e@{>&O!F089){?jtEjfF z15j3;2H!QT&3P?`u!ZNhmxbTR=`Hv`?UW%x-FY<lZV%yv&2+dQgfQ<q;`jU%mxc=! ziMN;xyO%>)vvJq`knaB>+ktE_*;D4ks70X5{eP6G=F7=8?x``TCHfMK#g!iZX?))% zg0JXe72<4G3y!XG-}u*kZ-*Ij4m?C1$pYuim+#%pf_PKt*=OHv>Nm0SqLM~@x9t1= z@t2O4!_C@FX(^IKvEcO<@}99!|Is7*;-x&N{%zG;*KnRwieE2)@^v=5pEkF*U8b}O zuIp3r*5~Yt7b~FRZJ>2S=c=u`+v50Rwp4?AAA?Dc<koJF&ua1<c|qaegO|>+zsYr` z-0-g3&OJN@qGf*htU1Vq13->Sv7?M4><w)a-Psu0ihG=utS>;Df9NMMVGq40AklLs z=Z#%01x(e{qF6^JK&VAz?VdkV4`_dAX8O~QH>bp(KdgOl@`1i<I6h*?ZW6@=mT=8E z9$AjgIo-4~jZW@i2wmM_!d1W1;&2iB?35EWF}$2A2xs+N=%64FbSpQUCLkBb)mJ$7 zHs(2UI!v!^Sy@nxq5%p!c+by_A8Z3fXnJ?pM)K(<CEe6{&UKJm`^=}u^^SdWRid80 z9sREcMe@AeBE?dj@epqUrlWbsKFPw*Y^(~sPMtMdr2WXo)I6b`@t2w4Yal+QFo8X4 z)gB~kYG(=vBz~}VX3e6pF&$r?cZE*~K35S9Q8t`S6Dwq3V;f?HWDadFz6!|TKv);= zzZBGle5m;FhEi+w_5bS`Yz}NTmw2C<`n^vm%(so~iwam2x;Rw7DgX;{o7iJnV@ydu zGN=LLmtt{aKNhIrSen!kFT%S>mroDcH_wNp*pfucdNcF?m-9ANYQs=G{BE>mi7GcS z*mP+@%m2_$qGmtgnPbgH2-BNP@Vr2D&scOgU1Y5GHo$(NsrdFC_C8_kDDH7nZLpG` zVgH!5&~-Oz0S52sx7dr5du_5SrMF|rXDBpBzv6n_{OkO}AB*WU=qCBl8rqqLik?^9 zj9k%!$InxM-Wc%SIr=ZgE%YJpW^u?-3$R!RAYK)Ic`<&=fg0kA`vcpQ6urT5`iBke z;txjZXca2-!U^Ht!=c(EhEMz_C+zX)FI-XNK?IktzAv<GZ9S?L4Q+w_gEqZSB7(lI zdidF?8B<Qjn67+7(I|@Q6eJUb>twreQkt$B?loPD*)RMpPFc_d05kfRT8<9IegW7A zjeA1RhoqsLdn}ptxrAx8KjOM+J?07$z2x~v1HV5y1zl7uvf}WDy^OqR7jK2mE6pDg z?<$b@Nquh&6zn`0Kz8Tno-H*lAE$}#0~()fDqe)-`e!<q%2#Xjx{he#7mr-d`O&80 zi51zts%8Kdt&zXNB@up3yOro=s%{?4j<2in)F-J4`LZJa3e?-S*f1&*7|1!<G=vX7 z)BGChG#Umf#KGz5t})Zmq8y1*_IMEJc;3173QveAfR4D`-1n5X9*H)J)<nd%`c>-n ztnz+dYRRw(5FDCoRm_y&9lIxq`W+{g8f#`^RDG`yEJ6H6B=BCUvvZcfpe=t!&)k!6 z;pvol`LzAQH(XIE=C{z<30;47qngoEx;mjkX=%$XG0;jLre5f2IA6G(=t5aci784W z!5oQPab1q(TW@6*>6}J9X_M&9rYuU$ME>0@eRn5MPTIz|Ztd{vNWrRmW%{Ek6J4?b za*z(eNKMmiXd{85?A<BYzx2;I9v9B*o^K|)YHX|#wzA0;(~w^Ww5sW0J<y@AyUo%7 zNX6_2ZB5tIU#_lT#cyWC`K9!t0s7OVXB01#iAe~d5chLl@y=XL!(`ORy|{Cn;&bNs zbgSu2GbsD0Kw6SjYP!(2cx3Fh;jgd$o@him-(Gy&#RDRp(MvEYuL4aXG2%TJ8_M!K ze6W25C-uQmQoPKK0m=L&&>cdH!!fs6)ms`c@5^gdS8M=-_BI@27r*Y$|DSW3Y-?EC z5IQH>_7VF0cTcR$)*)F8Zsr5%Cbkv%+y6nT?-nu6h_2cg%3)0zOx59DF1F9LD+d`? zsMB>M23NbXJUBAEzj7yS7;hCAII~rNdBx)qt>g!b3sIJa0jFZ*(KUhA_+^dvF%WiX zL@?WP)iyJ5En|HLNGGgQC>(j&hWMRc!;vegN@#OpCN*1G0lcFHndLNhnclA7dcX+- zR0<{r#lCPJ6&NregLewkCWMRe4CSelb6zeL3pLwVyd5URg=rlbiXDwtY|Th4_{(KO zGCP`wyjJBxUG|<=qE_^esXo6aqm;!Vqr^xJ7p~hHos50#qOQq^-<CsbS){y1!~ORi z1|&(gD5>hlZ1@!e&_hVEF0;P<H!uR+Co+<UV~iPc4l2*b&;C;PN)3THcq{OY{( z&FoWN9PyX$FP0cr{dgRjTGLLiD^l3kGlt%?x6Ic~wihMEdRdbRrfxhbqD>7D3e)sq zvcG?pS@|W$7RU`k{UGme9-M_=UkgvJw1>yohWq~vl_1}|G8Y$K{)?mkfvCvTO!hPV zM-KO*=>jypBkccsjY4uM35S{P(00HXdd6G<zhU9=2Sx!c3D$>PxoJ$7WLWBHB$bD; zr3p`L(=7yApL^O|y4U~Rj4sb;jcoHr8p51SPvVq|;u&6<H3Ju|ShKTx?SBmIy}tqb zCih5CN@C1=eQWS<`xE^BbE2skIdO#P_~G$L*-cqhPmY!DoQ7J;Tj2Stm$h53ed6Mp zNWjH;Vot?E2B?;+3iC_5LJdJIdQ0gx&5hr2{i1QQ<y}t;Db1a2qRhz~2?#ROQe9@} zw6q)@^V<Ca-Toyo*cv@TB1r?f`cut25VFlzI>x#F$A1IPN!QYh{SIt8`^J?#5Im0u z*ib-Zpjvn)Fdya%6J(+yPS0K=wC9hX>3nE=-B|PNmv0o(!0W8hJZimf248!2Kp#b` zo~r`eGST_?*vhQu>M~s24`*nmwT(>@kB-X@%HG-A;X(Y9suG2+VVA4e+PVs*7i*^x zjIl$qz;uKaJ~$C+YS`9`2QVqu)1jc@<J$#)FN!RCy<N8c*DAe>O(J9IRMh5sJUG;! zULP)MB9>b9cV`2|_@Ib>W0fBwuk>g95nr3QEF>;X+kU?`z8G&Zs>dm+eAqftbO>M^ z>et^}vt#LvWkixRAgRb2^<M|K=48i4dY^*vR7vO5sbuem?Qg0}?D|*ATP8}4pWF`Z z?Ix~f1I=rGexwg}T*QWbD+=w@2??gTi|Kf;d<%cU51sxn@TW+qk!>ki3HIRWJ6F%~ zC-*Pxk<!ofTMxpE8r-zeGJ0F3L(WSlTdN2)Os9hF7gm%tPgT5<0z!j8vvbm0um%1} zfRgBW;p@+o*!G^R^HQlrp8z60uod)&{HxfH#Nd4BXDl4H5Vhz_C^o5&PvYtFz~Wag z3`en8H*}=J7&M6oK$Qh(DAteh`GgxOFQ2cKBFW9DN0-GK#Ac+R4L3d&tpsL5gFI>m z+CcvQxTaKh#pv@iA}9E4L47hm?)rDyudVpji|N%1K-GHlt1sHFV!8O}*W(!lZw+%c zQe^j=17b$KJb*4a_tkfON;oNdj|0XrxuUI3f!0a6(i07eW(gw^7_S`KJc!OCn(f&z zt1}rv-zdyRcb&w~no(6MME)Itd9<dBdu%JXaZpCyc|G8sqXPlnq|H^o$Afl$=LGTE zkG@67C7G{ns-{<5?fH%8QfmgWVYg0!ke5Z603?ati!CBgiR{Ao_d%RQ!<gl$AvgbO zM|#m5`Zf~LtUMr3)AVI>pWCVxDcGF4=ru`knjm?u`*jXJ*!Eyfhs`tZmws=Da?hh; zE+Mny2ChyfoFXT9FY=((KE(0Xb82R)DR=oIAg5p)|LgWL+SA5SBLplnsV;(>&+(m) z+TJO?+6nqDU4&e_moT-&5OBS?mdpHp(CYBhYj)9R?E#?&Z*qxZ$<jZhX4$95#UlR8 z4c}$+cl2&17iJY3wUE&ECpt&oePy6_V$qqnO^JGA^avLkdj<^(48H8ZE~I1p_=YN7 zKpF}sE%Wl2TuJ}<C9wnz_?!2tSB}S<)^OX`&L<KhM_`fe-k$_eT<du-<O8qoTvDnj zX=;RS<u?E9hFpOf;Ak2wwH+hD8}P7PC7RZ0(^+=@vfKKJ+Poxr3se2!Zq)>NS=+TQ z^nM&FKdQTGIXI}x*CKPj7FFFi;<rv)&Q>zF3kXcrmZo{rcU&!#n2~(~5sbX0j;}`K zRg^=g`+yGNd_)?^d8+raUANH4TFb5Vi)l((bKQ>-_cy>OwQ8kDsYvH#&*p+g4lQ?e z1<l*VYjP>7d^76vS?c!2ew_d}461<9)c#GQet?qYw^pBAahsS*ImGQ+G<fG4IW*0& z=AD>pk}Fjv$_`=`Ao%R{kQ~3bIa%}4*C}ecy*{bov`FZP2UD#AP%_K;$>nY_$V6wF zSOF!%H2L_Pv5DVCsiX(n(x7;x&4}%Y{MBJJA6ik>Vev>Kxw=f)=K_O{S*{rDoQ%`$ zDy@e4cOr<dRB!6kPQ8~J!phg?JO4Nu@){19?&^rj!dgh%k2)dC3^^>^LW$NFF+IHp z$jyPV5@daxAz1&uTJ|5%7{=$BJh*Bj4dYeoiT$!iZt-N?Uz<|4SNUbb+j5n|@G%?^ zAd%@Zf5vTPzO{PxYtHzuH$$R*ZZC15+3y1Uk`ka+M1*E*#%>!qf2s>0<*~UhxHgf_ z#ep3#{AFH^0F%2ZH*VlIz+ix3(&c`_T|9*;g=J!Dj`v8=Y^284sn*uX-r`x=#W2Ne zj*jn($%VnsAvc+?C`ervI1*Ku2CAmGks${KNJYZ_<pixr<#De@kCcQ31`Z7770mq% zgag#P06|76@C*Fiqk1t1&D`r%EWi;>DfSjeuGFMX&XHqp)!Uz`3cwf!hoP3($k+80 zTb5akX3Gi-Tu)38>Ysh!*0Ya;_(Xgb9$)kGH1dQ8?LD-?w?E}qV~SDe>(qBde|#UP zs}wBHDD_)R%FU1A$TMiquSq8U%bc}8t)kTgornRgMEMJK?x&D$FDYO=1wOiJvkO;2 zLF8BKs!<TDoe5u<4i%nK*=N0ZnFE96k2PYlyrzni)N1qFi|p@|^K6_{z8*=xXjoC( zoGB~F1k<U&>tZ>UNHq|1U1%9X|0u7&*J1EFPhK56n9L?Sy&C=b#zS0sPfqZ5modUt z^<4`ig*8-*o{Z^dOajeBCbbHXaxtFRzb;=~k#^JH(%h?e9O-wev$YAk(Nqco=1ces zFuKt4C0l-FRtfx9z<Z#UiRm(p-eR*Ql0Jb(#f(Yxj<+aew9okT%bd~Jzu<I&3MnqB z#8U186ImkJ0>w6^moP4yeO}v>*vYl!7$WTjHAP|n>iof4Lk-;U59W#?V$Q}RyUPkV zlv&#=BSLTE?Vesx>@1UvwN?r7M5g277j!Yr5lz$#<+~{+u8lhK^2+@!FQmas7_|_( z83rZNqgr*kAV`N!?5zW0sj6)q;(t-FnV7w_FukjIRZy%vu|!hrtj<IwR&lvcK-56h z)ewv>-_WPiUjMp6`U&8xBG+L6<88!#7XEN$wnSNR2r|Ze5f$}it%n^I6>mLlT{kRG zHj<pm$p6@idLuf&?X(Bg5;-~kC2qA@l+D!JB@+`ysr*ke`9p6fi3>~FKQTI)$r2_z za`>MACb*U|LdwTtc{L=MaoexkxXi%!s{mn={<9IwVmu_Lf%}Op@>s*1Hg$I6u_QHq zc5}LJ>9=K;%wq&2m3{hm0oh7>x$Q^s0ldrtLG+@$iQumNX2K)>s&qcwTvcALw`9C- zxy4b~rczxNPbDLFX*_k6)TX0z%EG=&#Qv7$iNTI!3(2^y^1L4uy?SCIt$nMD-{K%k zK~@%zRP&_6VLsm3D(e_wT~|&&N<GQZBl5V|6XbjQYuLGXhbNfTP4&==ggk0~6ABP) z{sCUjAFE~ltbhuj?|OY@?>%>-<+gY5&}(X7#>~?v3d1_prIseI03npFf2Mn->d?Rb z8ls&}H@132d6pGQUo{isX0sUex6~i6oj)^-=TMqmSs<w=k(84S(@LDG4W`)GDUUrY z-Bc2n-w_Cpm$TYSr>&>&4BS2GF3rVM`zm5&wV%v8j%0Lq^5T3(`RmZ+5Rk>z^m<b^ z0YqyTMo%6+)hez4^F3SJ{h7h`elq8cKnXy~kjG6t<9TbkMt{Y@Ar)HokKMQoe@+{| zq9KDUCB-HE@0)C&f6Q-{n(3kdk6-eU^ovx*g{+_QxqYQYp3=U&wpE63hiu4MdF%%w zMLZ60V1p)g!v1USs~@6lzPE3>VHE@frKB5?21$bsDe0E(&IMUIRFINZKw3a)Ndf6D zX^@ug+WijC=lvtz{dxD^xzC()=9)8et}9IYlM;91wStc*t~WDjmm%|DMxI+crd_qi z@Wim*IO0Pn><A$LF~*r{o1IFV9orE7)+6yKpYU0W_kGrQUTxXDciz$TFIzkbMEh=@ zD^C58azlzV?3F}))6_z7;hoUK>q?naDhHphFX8tIDyYaJ$v@@CVgJjAdq*=2fB2Ha zq#}Nwo+?@`QUnh)${;U&(&Z68-8qWvPwwvxR+<(|+ED@ijSo9~BkQitv4+@T>cr^n z;fgUCV$TNiT_)^z^6T<!ruPb9%a`vVx~&k0nJF$oWiEMb2i73&F|^F>l?F7GVNkK~ z*I6+-N4*<bUzXv=>VeuZ0gFK7>(!4->KGhmNhq3%Z}u27Mw!Kz7otJ75eK8slvWON z++^?n?KE(mM&~N6659b?@7N@3tyx!ZQl9(7N};Glo)22R{`oof$0t9_phlPg*!+Ig z4|^Q>Tsc?WT6c=xM}X-Q*x~l8$I!X1D&^9#vOmA<;vs<gOXW+vU%oR9^m!f}iO8Br z_cu)+uCf7_H1h1UUUaC+1IC`1Ml-}$Q&URU!_vTXd5?Y{pL=QGj_$$Dbn>O=7zj}M zF#<7pH8w=yqraC+v9wvMC+l$^de=B^oN?*NrO@Fp0sGpZ#P=&ceInRLgqH8_bG=ty zw+fhl%%xZV!GyCcE!UKim8Iu*4g-&bXDENy6<&x>9}6Jt10^t+K#$7<l_tIj&yu?E zy@CQXY-XOTf?cg0UG=v<nzt=O)IDvVz6&27!*DW1iugC}^Jr=4e?4G?aMeE#WKc3l zJ{a)Zof{I|%xSY6g+O!u^VzJ)I)cgE#5P=p7#fc;j(FOY*+R57-jd^X#?V@PJV<6N z+kkuULU!e=GjiLTDDPz~*-O=dCee5~h9{oC$Qy|lZIvvSlyx8Y+QQ%RWMylzYh5ng zl`#m$gy?N!CelX3ahykOO|g8yrG@TaYQ7T%MD5w74S4O1fiqMeH7FeukwTRZybpy* z%?lMI?PVeq!R{`%^9%C`A?;xHahulx)gLq0uV9g@db%(%9upN7ZH(j0gs)_;@y4I{ z`rN`tL8><q4jTvi0GI$Hp{xom%~;^P?$~f$kJ^{8qc1F0su*%B>J0KpV5|yC?Y~r$ z3ozrF0&iO?0)ad_6Nqj(qEyOH7S~Ef{Xcg0^uC)vewvbYQm4x)Q^};lx0l_%O^cqW z!79{~s>9-QgjlKMmWp7f14J!Ucf#n`<KkdseN0;P#1A@Bg}R&-24V);sb=mf5nJ7t zNT8Q|&9Gm-=loN{B<#*}VhW!fdA0|Pa(MvA<UWsyS9$Eo9A8KtbV3`J*7x##&ZGOx z&)@K1|J$(Xv>p1(`~Z0J{imtS5*jUTA=~wWEt-OxRcPfme<>4I3h^b<WN>dM2r8Au zR*4}cUspd~r*d6ka!p`TD16tNuu_FA&0&-7Euv(NB^FSbH+QA$+V6fs`c`B%H@-<l zx<!*5Vd}looe)D5&vS!~fDtg?z7sEBrq!_$`K#3ErdW*uKn%h<co2?#6W+zvpMnio z8ISGlF;<p`nkN=N`j50DTwxo7>OFqerOE!3xj9M-E6h$$J;L6%RwzjRk|_}eJU?I2 zWD8hu@jG+H=2{5ki758xTq|f1W`~WkwomxCw?(yu%!Lf<IKS;-TRbO-$yDHXc^aN@ z)bj{k5f?q|vGXftoGcLzdZ`G@+u^Y%%fGoVlF_OAw<oBSo?rV*q6bf)MsNb&ePO<a zQHLFS#(66Px1NPFnaAeOo~tCkz?{7vAx7~f28-Fa?oYeL5O=%7VZG0Qw`e(@&k8$+ zJ=?j$VYM=>H1FtL+w;g44)XS&aD-c!hk&Zch7Z}lgSmHo*1_*bZJ5IkS35$YEhw>f zLt9(l3_j))tlOBmBh!}!e7#7wP}A((9p4;H0QCmH@!hfW61)B-Sz%!E*i=WZRG8^V zUD=&Sk5O4mB4~xJ;*SbOEIOm2=bu_rVh_|Vm%dSbRDg%?vU2MeQL#kI8k8hzoozg* zf^cL;qhCjm4!*+utg08`ZvvWr*1UiDh+zJ5ojic~(k&*VTdl8l6%j&ULCK7`<Gp?H zDltlf^JN6J{Ov2U0}~Fagw)i2M5zogi5WGXPDm_dqc$+(++3)#^FF8Mmrdo0IzP0< zzn?tJe;+*1I}f2skkZ58#=SViQSin78%*fk?fYp8CYV<?!z&_6gMjcN4cA?7H^MHC zXVnWV5}6JAh2G-N7uJZs>s{xgT1dKMk|^-km=!_^IC<>Zqle9(snCele5GRuO##PZ z^hIMYQJAJKE|x(AY~f}T8AscRA!dKpk8`B0;x2^Bqf9$>U9qHUHuwX%d(Z1Q9bHTt zury8FPEYW#2Z#;BU%bL~VFQk@Nk8dvUnC*Kd5K58{BOd2jscWfmKvY8``xZON=i{b z{YZi0Z4ESGLIFSx_PK!nFSEjtW3mREbm^Sq?Uz@nJ^}GCGvsY@M7VCE=gG(Bke}Wi zr>b1Z!!mRzE}VlB9#M!*cP3$rPCjv&vqhmhcE7pyPl^nlMTE$?RV%Y8kVbtj&rCRh zWDMTi`ninkdM7TRUs(dp^z)A->srQ-@Y9uAQXk1G#b3-+D|gjD=Plohgqvn}$B={M zkUB|*l{kr^l+NaIdfwvU5DnwVxHV7Ac6|(qg}Se4G|D}@JC5RDUGLnBDY$j0;)%+p zS;6f5WW+~ZvsP3w>#BI?fK@M6)EXa?38vtidCFu4X&HkTw}W|%Fu)Tsq(K@*m`!|s zm%5;Jl9#BVl*z*<m|nkM7niBsm(t{ozvwZ5-bBqioMmoCC$#Q}l}BdOx%ihF<Ge`; z3)e;BHW&90W>7OZ>#BuQs~FydN0+pPhqToWM(W_CWMW6Km_PZ!L@AnT)+h-m((YnU zdMO%FCKX_Iu2m?uJW=W#Bohg;_0Fu}{_pTvM)S_#*-N5zipI<46c4sla<3DTRfuoe zc=31DTQY)G0nB{Uk*Xi5u&ln9!Aqky&s7Qv^6!%ypP>}+ZNe+6rl)bp4TJB<3A;Hb z`ZqZn1~tJr-rrg*LjRCe$(KOyh8BC(!BeqLbWnw?yWjy}OQRH)@Lf78u5o{7T{SGV z5l;4)*nGW;FiYt@)xb*9HPa-1${HE4qGfkMdhvX|M$|~{+N?_<5#2A1|6)-oCVxMg zK>wzBtQhsbY?yrTkVN?A@;4%Ad&42m+|X>oQwk7Sh7A5PiCaowW5#w99^J-F`t63^ zIryeqC9%xcFRYqUSd<M18?Qp{c50~7B9}P-WCiVkhXySWq&(<JK3nA&dio&9CdI!@ z{1;8^i;bCK&s8sc36Hyr&P@+6FRO&HoVumy_GOrHTwkqI8U&h;5}*%0q?Iu)U&5i+ z&aTIW2n@Nn<OEzL;$?bXtL>mP0uOXhddU=v_ud3HYk<YnC<U80QF`GNa0Jz_sWtCm ze|bSbn5Dqa$NMAO2`|8HF<goGZ+DE52qtApOnTpk!5%$`p1hbFq>+;rH-CIK5`n>k zpog}H2?M$1$mrBVn_zx1+q`UH8t2p41A;95s=DOPxQ#~Q)q^?sF_^zsY|P=V-UDr0 zs6jGp`obLlx{?DXNj)}1vR1mJNS}v(DBUl70AnNA-)H{jw7$yHKVCOf-qUEJen-_! zYG68(O}sdzi1D}52cptn0jzSmLpy#dKDMUknrX+@rn|53${7fs6y~7UDTd&~N0{4L zMiZk3avk*}KHh>QEe3)2&j!yzUdujR<t#EErveLtLR~T0n0nOv6%lNej|FJC!-t}f zCD*mW4A;5R@j9S*WX^J33z8Zp%%OcOlEUI8A8DRPrUH1_c`FuY$YgHAfjw08S3iPx z@UXdwnzL*xE5vMqjpW97N0E#SNVPXU^<4Tiv9rOP_MM`sMfKw(72y5){Dwa!V{n;s zU)Ll>kCZp1`TFS<GX_i7{!NFf0B*&9j)s43<Rcu^L;yv<rdW9G&6n9i0FuNyjR-DT zmk|}+r*5<%!0?nbzp<=}qq!<_^UwSJ`&WgB-&@d&$uAvS{z?%SIJ^99Q^T%Pk2iQu zj)7mHcI#^BO%!Usg^$vZBpAw1f7UJ?&sr2VI+~Qxej)qJf=`&q9*_Qu%D%puxxCj0 z$|U9GduRU7-l|oMayEDHuM~3Gr42tM*KA{UBg7GKk%PG^QsYd-HCP*Ot$#*Rv&d7+ z?-?C<as1QApo0UeBXO{MvZwf;gIL?2jE9t`C$C+~+g&3-j;5EW{5A|Xn_v>qto?Q+ zZ4=#{Bc90;j)_+R`)`zW_B0ZMcW%r&4fpr!CRW=+W=GK1dN4X7lf!?1=^cf(tIyt9 z#~CF@1&#W9**;k`@SGSzrpHfOY_^d<Z&w4mfy3$L#%92&d^^NNvRR*p5TI}ED5+U2 z-OEdV!L6k?CB)V-)y?p>pho~ruYuaekoxttD7+Z72&jIf1VBwlJ#BI<j94J`eH((| zdCq6bhg4ZdSD`QpKsGq^5(}ozGOGd4+|D)nNYZzZjvzvX2Q%{v#v_7~k+p?3a8jOR z#of*XKHr)ja2InUPq0?}18YU=b>p8cKj8cz%jU`?%+|_Mavus?fQSY3Au?m}EmHj_ zu4Ahl7YJ=6ht<QV>1X7<c=rm7sOggj%&C~|ygW>w#Zr_1Y^P(CNPF|oAm2d6n>a6B z(ds+AjgDWt#f3bG^#hC}79>G-rEO;;G`jsZ*Mm$f_a?AN-{;^)eq96$83s#l1Ddwe zF5|RIz$BUh5-#<0hu2q7nV#Rvxm!7r)k-4WK#Dt|Ihcqvx9Qf&+d}AmarsO>9aH$I zbHL+%-kjpXwo1_~YQ)BB84%axPg5$J_J`Vf0cI{@wE$AzRNX%<RjkJS^9%aaVe~+> z5mHyVZ?GdR5;Q4}JPR)P*VmxyRM^d6)0TCWLhzdQe6>w1x{!kRDvYea_&!S(+lQCG zURQm_=v(#azHn^u4vGW#DedfM;?eKe2H`pc#f!UUc}3v>sVfu6#;#vZHhv?)Fq~(u zfd|&Sb7A8$v76Ik>o_lDSdWVbyhty^hOynIlNQ6IfB$vP>~5Xas*$uU?N;^v+xZ|w zst28bkM=*eb2H2Xr_4I|YZ72c^mUO8z7=jLepal!^ugieo>54`ZpQjw<m{9Oq~q=X z*c=NaU!6Jn#bk7BmAI99@Q9Rnka)w?DZFG$)bzIPbk;wmp^SeEHknOybo))_x${85 z%YDV9fBB!K{Yh|lu(zo5TCycdjbtFjc<sM;m=j1uHo~13@_>Z%m;cK_Ho1;MJFhXS z^jyikx@%sr0Z<H8%(%*$mdT@(e6@J|UYfx(^hC&mXUlt$Y4lwNE8lR?#Y;H)bx2YM zB-5AhpA!_?#hW35J3sB+smD*h9veq_I4}xN!&i7nvhg<OMr0Z-?{r}pv(#xuMsk$k z;Tp2u`$7(f9o+^F{woF3v`#IYu>hVHw>2S@WWetMnL+%N<Zt3c@09Ot=*=mNvR~CF zV`T~v0b?b+6=^fsYGU7)P-f!+KfeH%isTUY^QE7V|2&jr-_L+MXFjag$7i*0RKoe1 zXtr!0JQ|K|ZL3`A>8JC|&c%*s`hcNusSUAt=b^Q~2<giRA5biiL!^RZ8=9Y6<KNdY zk1_{&zC83l!`?yYEdG7MVs!s`j_%JYA`XRTs(*(-M#p-*(s9^M!M@+$Bk(eU3f$_8 zz~@gye?{tgq18m(i)Qi^o##u6i=%z`gEl~ODz9p>IX|V8J6CibX<(WyPqfPRMFHN% z<@;O2RHjcEtQz+UT8@Wx2qCHkytUmyvP68N3n*jz$H|_8<a0LW!H>cL*6+%+9KM&z zYdSt`Aq=JkWvYV2Bi6ssm^qr5WM<s|IhJ<cvce0rP-$JGA)yxqWwOfjJDkX&tP71r zD}e%|hfGv8)6TE<h=?8#EPeC``-;CKh-d-~1WbnsyZ}4QDI&zjr{LbDuMrkpoFzNa zExCYy!ufFg&IqZGZ#7c|wdQzCEx25`^7eIz8W^<Ot=;Z{`c^KdmDiUd@$V9E(C7dL zZTCtp7=5L{=hFl_cw|fdOvzV{7KOcrKQ474m>(gLx@(4YJ7@PIIv!0`^ztlVNH%(= zn)K)|M7{PJC~t5i^M2i5sPo*$UK!BTSzZL5iiZZ5WlAx~-Mig1-~0ARuzTX%@}Z3g zWN_stA;g+RR$D^GVoc4P#rEwq-;=Px*LRk8NQ<9|UQXbDzu=6v9$~cT-10Cq!r)C_ zeSpl$C;KuWa!gD82Ar?v#^xJ%5U88qVsfUmKcrRU=(hdo#nV3~5?$vHNm@CakJ3na zVuz+D6<(=+XRpS<r(Y`v07XM#-bb$AZri>iX5c~7gqt=**!T^-9c78%QHaql%oN__ zP<qeiEzIly(B){><H>No=A@w?wl!`{n_T6%E*^Np;jD;^<+u^U$)od_H{H;TYRV|3 z9L`%<^RP*#-@}pVdtnHoYfGB(ZcZV;^jB`08^3;a4<eQMtTPd`$qe*znCtQ?ef?z3 zJL|I9gO;i^OSl0kE}zitHs$^9_zva!`&qT1${R*iu%YGI(I6;%bSa$VFjCKKbZ;9{ zQoQ^BLXaJto=JU?@3&Jo-avTgQR`m?agUBd?Qd8%XNENnyvT^A)Cpws(Ev;FE$)5E zNS@=Mh2iTfwm5#thgG&RSgf>9l-I&zt3pee=O&AxU2<p{{P_SkjLpeGrtg^%6M*1| zT&I9Z1eS-6;bKuM7uLs5sH}1Fjte0T0OjSYUvP*LWW&7~qS$~digXvtMX--fjYxqq zyR9KjPm>I2s!I+>6=$P#@HK9T6WU*k3jQjz{!I3Sk(9Crl#LkV#*4$DY)k6wuPop? zQB@9+Wth&~NIpp0=LC(b)E2f>i+%d$?)FNFBmzYy`nd<cN1R?n+{*^!+c1xUhH@f~ z`(_5KGJ^Xab=OWmER0JjpXz4U@k>83)wYL8-8a#emq4d4`fsD8mdhtSvxUujvYOF| zzCf_XN!pm67&0bxhh=Yg>|t@=CY*|p;GabvEfKw~Y$*<$Jq7LF@+E&_Yf<dODIzKl zMDKMA(a`uPDp^)uel*DaL%x7^$8%<-Ub+#wBNUkQQXDYp+WIdD9PCK5xi>cj&W&_a zi~rdTM;)vX$7ZM#HlRz=@H)JGS%NNU5J3fw#3R@(Uy~Qtc$jpiNKE7vUL#Q)YWR;I zf&1w&rxK;tCLH+@zu4>W)g%7gW?c4(AN8^MPyHswn<mm)NQ#}%m88`|`rav)RG~{6 z%QD&w4N(>!KcbgY{x41ynW?AT?MS95%Fln~KY)tfO}rD`hB=^Ha(c-O%iU#;v}hb5 zc?%PezJ<Sza|4cPzB>fb$nO)O(mxE5$!u6E3M)8hRu&gJ=zsV~#Te|s3Py74qIDCe z<bpff*lt_?kl|CjZ??8Tz=kI{>(vxduOBxYkY|&3Mg8W6=+{2qhFg&+Pk3mpis0@h z{j_<GhYw~pRovW9b|ORt#9!Trh)P7;nd6$O=0qnmd%DE{f_d*xz25ZqW`e#$B+7Od zrM|d&&s1$UF?pve?VWvm?q3IGko$F_U;<J(Q~rvyu@c%RJE-Q6A;h;Yy4CzXPjuCv z<tm4v5Gg#j1+NIexF)!>CqpfL;(*qO-u$)9H)Z%FAC1En=Jeq$JoJCx!bO;EHwio` zueLKMYng;`j*^VR>>k_LI($8zBhR(Eg*jn>WVdQ{fF|bUJ#zH=P~z8}J5g!6pP#we zy~^9Gh6#X+8888>^&RSsnK@0;&rt95FF8B89*Cd<^0))pF2$-vZ08j+b!Wso(odLa zo;ku-zhv7fb9ib-L6Ov|h3s5y6;j}v`M>pZbooF>>0r{8sFZ>UWHL2W$sT6|Eb7v3 zv-PF9F#5LLWvrV=F5&`^cF*1fKU}@r%5jq_`2*`)A-~>cQp7#8qQOER@UV9S#wAjq zX{>U6=_#R|rR0qO%;CHBu62p~t6x3YmiXD=7QU{K>|>d}WSg|vgZYQxq)sZF<9xFm zu<G6U)1b#bcemp42Hn?@(OUAa+(2`O=kwD}i%?xSV0i&tN#qR5y?*;DKjb~-BA6}E zvUSOG_O3h*Y>T6zMIRbHJ3PqjS^eg&vVD*~g)f2|R}<U4)F#Os-r<V(mhNk`&8-f^ zV{|(05^wQNL)uxD-aoh;+}L)!3`0%T(w<PnD#Ig4Yq5<dTa7jJ_Is5cGukdQID#gf z$5CncLsE>UBNH41P{-kr9#E^|D+#~kzhxYhI3y({HKhy-%%f(K%cJaBtPZcP*evrr zj#7ZqEc6q1#~*%ljMSz7J|WGVFf7$Shz3{!YrSy@F}hs7Px#iwJ-n04E+8P}x;MC! zZS(O*Za#XN?`KA;JZ!iwcq_?I{bBhw6aFJ*7Z5B`4%9j6d%bp3U|M!Z%Ei;D;FFZ$ zk9_yC2{&{<{fhd1A2Rc?E)AHemYu22=`2Q{@CU^Cq`j3gEyeEop<kc0^VZ$Ge^}B` znujbv&nJgG9jx0PGl4Vq75$`pX;wQtqNOKL_D7AB{QK6WmPBxvl%hT<$@MaK+T~V* z(l_ko*gL+Hw_GY_Si^c(`8L><MBnhOOZk*vJqICc3h26LFW$%M^4WUBU5WKZ$4K*v zRly~qrwVL?yfF|U-SIJ{1Z?>xlwtat)wt?hgqF_hj~b?YgZysDaW#gjxm6gAu4F56 zJz4V%dMg3n_KoEmz^k38QCr6G2$ZuJ-p3rZ@chdOFfZXA#OJl&n41lG7^(Tc@%ZIw z$g`tqN4tvxHg8st#T3EWZhJs;ZLD>by74yJlPSK0Orp}Se`q7`-B#pzGE^oziVN2; z0Q*Tr1>Zx=U?ntM7d(X7-b}S?@8H;EMXR1&nx8pnCcpJzeA2KSp{Gx2wnSO6bdS&= z6K7{$!jP6icd^i~&)-{z)&y9PY&+WJ6VF%mkh$AO3=c74!G9ed1}xmCp-Iwc8JDu_ zzc^Z#T{u(x=ok$fFDk7<cwLV;{+W>5GLwLtwr)LqDEAp$2RS?xAKcvA%L=?RejE*k z2W1atNtU<sa%$Go%V<{h3ze>B8qX?xksm+yg-YostcPpz-il5|GTACoh9Q8=xo-;E z*9$27$HbRWn;jpcrjgh?xoK>9Q>aDHQ{+D?!iF$KEIVa4<HWLYK++be>*Ef?tg{ys ztHN|HZTes<3ibI89bNd-h>%D{*a6`Q@qITxa92xzX97oUsE$ou_EqBu*BuU3HTI9L zEqU8Ewuc>>y=V|%Z}JeQnbg}ZNyH#GbL86TZ`@9H%CXZ2#a#?*-p}8V`P>YZC}U1Z zN!$?oCsgCF5OCXnSWoo(ao}{gfG;>DKNaYFgr+2e6EdH!0?+sVDr{{f;MgA?4i{bo z(I+KOi1I4)&rD54Xrh;h6RoPl3k9GbDC#?AssEbn_|K4SRt!XAD!4;wr$l^z{62Bq zCKRl=6*6#cv}q16821H22yrXCf`Zy(dWsOtEK_OpZ`s-WulW~~CeLln)w3&2+A|%g zK13=AJu8vY+cvScFWIQ)9{a_y_GgP8S`;R3Z*LbV{h^6LW`+hDxAv~5O6`NP35xvH zvnOCq6}nYbhCQgLs3AQ+Sy@?x#-_}4>Q>-zU(N&u9NV2TjF6BJj3u!YF2kv2?)CvE z=t6tqpIy<eLa^RwHTUyDQ4yq$rczmRb2G@gzXe;iV9^~wq1&GiH^e<}hCz;N>-A`B zdsY*o%%P%)2(2eHw#I#Q?2qnde#AX?!uIab0#ypG-Xix`Wzl*>P*oH!=)Q57VJiIr zFd4bcN}PcB@#ZI+!Zz1dJ=v0Ji@8i<Lakya{oDzJX-b?NLtY`Ic0_=-z5J036YbHX zM@E!kVAr4<l2PNdY}o8cN@PebTH<bJb!%UjOTq5Vpj_7wy5E3L(tBJ~p;`?{J3Lu+ zZMpoYV|1XH_W}HAl2lIZiGx01`l-I_P?pJ$k%;%{>~v(7xgC}38r5O8))I`-IwlSB zvKrBMAo?UUzpt1#^78gwOZkZs8W#LW&#srBGj#V%;to;Wbzt6h+LRja(og!To~L1R z+%L31$X$q`RwbRCWUNd<b4`Z}tStJepSV|Biau!|ZmMyoy~cTcu)Iq}Qy9})`E24j zC^r-VG^j0DpvFpg*;HPDF4bSW3PG>Bd(Q%ZE*6M|&v2d1=XmNQxx=hZsEeQfQ2SIR zl=m7s`5r}ac^!YSxBq%9%b?9$`hx<q)!NUm;WWTFA1aFACXcRfZVqA~l)aAzTNaJ% zGH=|bIIY-|E#@=tmAsoRYyI!XG=NDj4`|h;_3Y02QuzyIav+bP3)vkU_@=Q8a5bl& zClg=(VS@8%+n3DV8_B1}lz6%mFca&Exj)YbsYI?{Xlhf2Z33l7j#XjeG3h%XMMBO1 z{x1Q|w)+cb;T&`1^jpfg^sNn&by+h{D`V)TWJ`ukuI2(<kITQ-(&1tcW{4$6$}uDp zqbBWfzlKB3OUZoV;s*Nx#-8Z7E*Okd%i`yeH?v4LyKgH(Pcf}aH>c-+=YP6n2jINr zsBt(rIN0o`JzD4=5{M%3jw$69Epk8HQSj4FIgp$Bssk>3ksy}?cP|kqavy}gslc)M z^QSzWNMgCV6&4)me_K3$D~UXa|9Kw`vK7Z1bA?haTI?3iPR`H0f$}ww$hKsG!-QUn z-&xN99r!oRjgj7;Tx17`hp7Hcc1?RsVvAg;YGMc_bf*KMLV~w+xIjCzD2Htl9XFx- z%Yen>_3smTObbQe;s%&L5`SwRk^oN%<>G(aH0XrX)!?$epQ>WsUJ(p{5rsSrP#8(e zuYo3>;ofS@xN$#UKk~Wh;V37>l73g@-X8kZE6LL3O18m!L9*`SK>y?(nRIDR9#2nZ zjl-`eeF_W8^tkQ3H_OpHaci!193DskYV=!epiwF7wEU<3=lh}SKI^xNeA?);_y5)T z@zb7X%)AbIK}zY{?G)ZKX78s@A+c?-o%NMCb3H@Cdw;RkCe5P?f&tAIgL8y+=}9zC zQwj$eK9KWZrPn6z$j`9zKF*r!&pbOZ;WiBi2)I(T2ebl)T26GOZs(q^9$i$GHy$bk z7e*^v#Xp@a0aWBb!R#PF(tqd2WaGiX!DqegY@q#T#<Zz7J}?+~$~}L|@k!qEQ*_#0 zK<RT*W~A-(t{#<Zdk$dDi+TSe<%P4GccQ7N@Jn2X;)5;>Gsj`Z*V%dh>x8KBW*A<@ z$df0G-d!)w4v>R;d3#BWl)m$yfh>t=^{?rxGOiTY6P_YD%CHNtESUowGfoWMI_#!P zOwNk%Wj9Nf_`1)$S{^maF9nM<=7zo5wil=liP_T)DzpBhDfX|eDy*kJow$B#oa$)a z0qz}mn2>cW7RN7fE%^}L)(Gr_Qid-ua!e_gILaFz8*!4yYt@^|lvvCai+L{;?EQW7 zG>AW-hEaWO`~}97w3C_|=UxnbwIZ7NB)Olg<k4M5zMFY?d1D{fP<EoYW4#<ZGPwHz zlGg|EK?YP09|j~G@&IjL`uDn_0VMwx*HPmEvqyy|0J}@~6QhfUt~KGF`Fo4?b18px ztc39+K+bfMI2n7zv~Y%D6%UQMualgRLMG3leQ_Rfm*rp7(l8)L!b*?ne)|1jpJnf_ zIcm-EG~i2o{(K=F%(g^$_O$iHe!8k`q@T<zi4M22EAFA+=-JKY1*(4Y8f`15CoJut z053&>tsyV3BWN)gXZMFgL%|3UnM|S`_V@2X6_&=d+m1FJjuW+Uy`5rzyt}#_>2GZk zDbu$sJdh)KGb(x0L%`GcjwqxBO}wQ*Wdd!iT|>XW0|rCS(O~z#KIme3RX7$b$Kc|Y zN6i{q`@7m+(B8QJ57*BxPv5nESEl+z%`wMG&z+!<XM`G#4@_KM9ttvyg~ocxT1pV` zvTf`F)vVKjbdjSE6ZN{Aop|)zZ_=1|=1RYR?`~}V`c!YbZF981_^I1k%({;eq*M-| z%H5VxQ2%I&fo1<74xz)%@?MUtdC>K~vIPjvkprqMHy{=~MGta>rl|;!k}=~yv&NQ& zg)UsL35Bz;uo&M4Dv-)c>hA7NMqQSpd>IMbH;Ykl(XH#8K=hVA`cw$lV3H{AfygqA znCHJ~UP6M8j@h@Wgs?DE<i_yl!E|Alwx1T~&D`WD<>F*;FP?xu6ux&Ac)sHlbQP;n z=-xOIOA0jWs2_BRAccaCgq(abDQrsvww#f)TO3eJ$ABah!b|wpDe&mi=eKX)s)8%^ zyg<WFD3OMe(tAsP;d0`9Y#yaZ0Zk|yYp9}`SUn~P28@v=-riF|YpHKCkHww7-%caY zY4l&9^|{<E$fCM`AJ2cG`FN|@Q8eglIT%y{gx*5Z&U;OZS_w*jnWw>{UGD-+RHQGO z5qL0&x*k*oDmEJ2m;4XWw`|X8w|JlyCbSk0LsZ>*W-qO<^CFHZWzU^f@RKrD!uHwX z@}|qT$wt0~i}kzi<IS4`&1K|}%ndgDH9g4l`@P1<!{St>wG#y)m0K~*o>kZKpiM<% z-#L%DR2`H@&1I0@Pb~QBduVl(&^55rOyOG`66DW`KZWj(5J1tEqSRw^vGr{bYHlx3 zXw_%FF9)?L0IB__nb`7OaT4vkY40lNfFkHXi91>BKVJ#`%8ig&DwVvdlJpxmYUCws zPX%1L6t|;-Qh*lf;MvXMCou0*K#mp&M0;|~2?HySOWW<xh`9dUYrg1ric>AU&JsZx zC%1!BceKTk5Gg=y=g6IWg!(s#{8v!tYlkZfL3j7%<)k$Yc1sn6G;Uvxl?>krS%W%V z$mAr$m!=G(slt$&D@A5$$D^72DFKR!kF!z9K^Mu7%A1jw3t)R;hXyo{5u<v^MnN|x z%{RTx*S!aYbwSDZc&|xLs3C4c!VL_7pNuMWk5L=($c=7y(EyNlZ)f;5Flq}ea*6h- zA^S(5fLi_pjCM-^QfhD(hON>+96Sp^H7wlhPJ!Hi&Q(Z27YgIh0V#AnD+pPR+TBAs zwjDKY0%O8>kG7h*Wu+u=;EJla$7nisJ4p(8iv&R5+6^ej4QkfE2XoDC?(cuSi8{_g zjuOPJV7`iOH|#;n-YrMwG+{snO_W0z;)6$xS=WDAQfaRjaTeb3qk~slJqQT;d$oW< z3T62pcK_2VLvH&bX<JI%F_MBo4$6Jt+s8{-3MO3T>EZ83%0LLu&&odo#MC8urnt}H zcGgATn<mM}kC$yr6{YZ;QzX#UCbeZCcytB|0peVcKQ$(*Yo)zrA@GU|h_hAwXBwB4 zRo6P%TY2uL^Rpn-SwiM||G#TP?lS7)?cyNa*JvhbtsO9vpVx=Ih=#qUhHow_onna^ z?-hhJflgs8DTrnk$%}4^psSjoEBJ~q$LSWWwhELY=tkBurbi9;xIRBv!lCv5R+X1$ z`QkRe!InEkymn{3kOz{;t_5MQT?01U5C*j`51_K|m(69R-ytYj2`kjpnwW@aGbt%4 z7|5y50d9RSr)Fit3!0W7yPfDA;X({YM=5+((l9)C;vGmrBS-Tgy_VJj`w5Bl`yzZj zy^|c0mmiBxv9xScA5o^{r!Q@YCu$cIv>)T=!UR}k*a$Ium{KD271E_b%*C2^W<*I2 z!ZP}+UFa4Wk%3?G9QJ0bNxPc&>i;=tX|=CDm4cuYUm(K14n|(L0=$HB#6#l63PMtm z6v+ErwmB7lfm+0?#TULjdJz{>s`rB(2&Yx1x$SbCwW32UV|>c|F8hnE&5rYpbuT78 zlyObZkaM!Ad&5^OMJ3Q8;?A93RjilqUs~(~DRZK*_NCRBis`^8Mo21;_v-Qzxejpp zln^iPJ2#@6nV+cFLG#V}Ko)qdUc!_eWVDpd&d#zD!-i@m7%nI4e}8$?;B#bk=C}9r zY_s((&dP-r%JZOnYF<)(6$|=w^#_WH0Jx{IyqsrpXlSU}|Kc#{6<J>OEDk;dopEQV z82_nyGiY4xv=GRY&^>j89LPaM>7B1@Mxw!oe@Rvzp-ayKMV6{6H}}<^kDsF{c#x#) zv&Op^*buy%Uzr~{sw#QovC<j);#FbdQDSqH;s1WSF;I*Y;eq{99!*rq5cO~X8e_R- zWxMe)e08%pgb<WRD)Uz*>*<a0ZP1epTWj(wkG{U<XgX8XtV3&A^RR-dIHSAF_&k?? zMJn1&mX+d#w>Nj?N<r}Z?J;r;C?J2<z7BqB_lK9zZ)%}#e-Qjyg9!&Z(}cT80>Vkq z&9Myx)hRN4)>1pc-lHS*i~!8-uG|wUiR055r=W@9VLn^R=W)#3mq&Uh#_#E~KVU%b z&om+RKnb|z>yeKfI#1~3EWlewqX)NKyVCMP5E*%NM_j=1@QWEq)b$a)^5~QLpBv@N zIyVhkzECZ-BPI6U=4Q91j*hW6Snc(%1B1-#NPwYt$>O_IfkPef&<0%}j00V}QSV{Z z(Ve;=uY+=HTxfn9Vz&1%Oa{y72SS7lMG}uOQY>pw$9VTGu=5PiyWKoJJ$0b<-*4^E zWVfUUYFOV(Kl5suR(%!@VZvQ@PoUjVOg38d=RlR{3WzT1!O$TnKO8^}-?QDhnfV~p zO%tfYG@OfJz$bH?qqvcBxR8oxyz$U4DU&RQm-S^wWo2c<z)nZKNnHB>&aS9?0)`;y zBPUIK*5&c2D#1OJL6e9d@}9)rUMQp{`dm(F^vV4AxWLxgm0vQKel;Box9?H<LkQac z776-=>;b$&9V~^@8c|VG^KT4fN|N8)3kGsYF`bi``@6fl7R(7EKkcV0ot2gQ&1+SF zxL-ScC@&5+HnG!Oy+>EI!%SfB;KiGb0k@lqjdEN}xR{9F5n?SWrEI&TpnxR+SkoAw z89adp#5Idi!4O1}1Y?+-nYkM5|0J}BJnZFh64t)*JGtKR3F5pwf<ue_5?}W2VS<LA zf6E=we|Va&U9G_6rq<WjYd3m<|9@*r`TSO_8uin(J&Z?GOpG)we_A4l4CM!h)O2%v zZtzqYdMnRQwkP|+Y9TT*J1agkJKLzMHU7tyRvc=v|Dce^y|>Vea-tS;6n9?hOD!>_ z9EiTIEk6z)y-@%UNk6iO&TK+zcJ-5hqC925)lSV#tI7WC2PVZWj9{rp6Ic*5E97Qj z@pt1*RzP*Y(ON$XHV#hg^=iP+u$zny+JdV&EcBMSI$5~iy+S&MO3r9^!#6-AuYyCT z?3mNAek@JQYnNf5u6&jRf=rknEA#sxuP;z@m6p9hx0={B?xGHQNm^geXWEgT2VGI9 z1}TU&b`lYiuF5SfCxa`UmVYomKW`5N$Wwt*IC5=m?c!+`kHIbu1o0*?CUg@l08d%~ zTbKSlQBl#(%IOmN(0z8~sVy**ybQ#e@eqBN^*U}wPOj~VvY@y)=jqPOWcl`G_p@kn z`5ZNCv~>fnv$r4)2RM5b4C~!DyBub!e>7k1HWVDmB2WFB-3At#e#g7D(ng^e=^&-J zD>CUTdCx8^W<b}}Tj}lP<yBc#bz~tc+wKIcW4C{G<Az5;j1D<hfgriSz#;xO|J`O( z@@!{DD0jQwCM~~ea?jtK_Uu{Uw?(H9Fo=0@n@rlPDxz~8Q)%?e(vs=H$)vGyWQQ3G zIk!PdX=!N&i@b(b9W5@@;-0;I8T*p)@MNM?AJt^pn^XnT)TD=@7vY7N&ZXba3X&+4 zgcMXOlotj`%P~k&wfOq_YDix1x7#!?1UUl3Hx(5XVGq=4?BZZRYQ#yFc|frm>9jZh zbLW$wgDBX-E`{dX<lCfC#h&fYAr`iuNS2&7zrclFwHNQ}$IZ0S5JhyYxNi*QP``+K zaG~Siu#*S8m8yAxwo?leEgPV#N}x>t3wd*eLJo-SU7G``^5OUI?~DSt+!@_?Rq8+2 zv2byz5V{<s%1aS|`nNzoC=?lC!JrZGvR_E@&c&fJ6T`D4%jvzdBLTaK(0SkO(t=Fi zt-^KLoT0t@=DMu7P}Rqzmy826629&zmMnkQ@1H+Edf&S$*R;R=#AwltroXO-mgA-X z7aS>=#Fak8{OeyO3y)_GgFf=*|E}b`@PCQ~JNN+~utP=$bVS_?8o)s_kc1#BEP6S? zRHf5fK(kn8*bsQJ_Q~ma)pQBKrDQUcPmIpN(C62iN_YUn`R&tP!XPnR?^tXlTr{~a zQ_|T*MNy^3%}uAEAojY>cD!gE#M=>${D+X$KohXCwN;jAiql92{F|zf1pumx<bm)z zP#=+*^k~?h`56cjVU6cf*E<wO2-w4?ze11cl!eQ!(6=~xLbU=+QZ;WO9WsQ(&GD!J zK=QUTK=OKGe0;oAO-n%O+z+kgn8n?Ywh2I_1CTbeW@csvJv=<}+zlzhOm*Yh_PCKo zh=sZ#l8&ILoNRH*-C-!wQI%kdUh2f!6ZX#X^;%I;Wu9X4rBUF;YS%=$adQy>P2dS9 z41hY69uscUQCZ?Hn$hHbu-vf=och6BgO^i~lT&%V4V4IfbHk()MUY>XTN&+7Bn~0k zVyju1RXDUB0e^%0J1CR0w~|r*?kD~?#Ku4Zd`FSz=h)@n1XW~VMa4mUuvB)W8x8B( zTTFNlV<@mlsvRh&7R1p?BFn*>7VYgXwI2)*tAkS)FcU`K*T=WL1`a5wc3&I>!C?@M zc=-=BL<ro^j)yTZ&&5EU%+}sMG0Shau8ya1zikgJJv2_%*5|Ukl=exMA}OeOkeEYk z(yZ74(s)QkwI$)U)>pXKbhW#jBOC5WOiY|sUzT8#mSmF#EH>TCqkTTS9rP0X5luNi zRyqMzMl@DNPRqO#4)*ILOK$nQugDN>OWzvJI-=45W)EzQy2p{kX;Ax3fDE7O@WS8Y z10&X<F%IO+L)csSxX!?l_5DkOCIEU6nVFft<0X;8&HzyS+TZ_XNr|1B&qmn(ZNqce zi}=hB3uNYi-R<+w`;wTr5J}eLceoC0-}ba?2Z8v&*_+PSN%oBXb<#A*)nnDw)h|F& zn4J3ar{1|W1S@*IFLm_q+0}Ys(dA1dQKWMz8st36+1s;OpV?<s)eMq-E5I;@0J!LY zv{{xV;U`EFDM#4O8(Ox_80t(O@Fu=l?V#q<jn6KPr0)&MeRL_G+5#+mEHp1V=Q!Z= z=yJbA);}=H$3&zIu0QIn{90HjZ|mT2Qd3<Wrd@6%QBzo02p0H*iWjs1o=DO0>S&Go zzD}}Zl-D@adGzZ92eK-EaAy<jVS%ErhaqjB#bcpx@WH{sDS!TXI0r1q!!H>>)H*N8 z2vWuBrMu<WQ1u%3k5zK^a{oc#H&>lg|NU7+iwL3u3r2YZ7Md90lpWSzbY)iom6c$) z+ra(xbUgasduOk>lRp;~u{T+C-(`D1d_~Tw3$q78i8eMic-U`S>z15roAUFmb|1xy z-__I-V3pU1<?N*&@OkIP?KZ%~upGm;KG=SQySPN^-f#|j9XM1eWWEr!Qwk{a=h*16 z1A4R%-4^y178a}-DhvO%w-qyhDaRKUBn2No{tzw4U?rNt+`OQgsuV_PZt*(lhA1Oh zP)H)JYJ-}lU!*U-O)_>7;pe-Lk3JBMCqhBgLsOG+#*{`$SG(fp(n;BigJBlK*IW5g zoh+w_z1QOLFOh=FOW&v9n1BW!!Pr~r-{0R4#?Opu^f~fBIXP)E;oVqI*8zS0TWYLi znp!^;k}R7C*I#LAX^}m9&m{lh=n?+oJKZsS2tH=MPK(ZzUn0rE>*;(}v=m<Aj_Z4v zCW6l7V)UWkB7Rp!SHs%A)p$N)c*~a`AOD>?tZW;cPWo~u1GV4ZAVL(F6AHmWlGST% z(T@t2;bCE}7#J9J)=$!Q_Vxx{2HXz3XB$0t(mZZ1JxtS>vEE9LJc)HTWa*^DqyJ~- zM4Mc-DE6spv7yEYYr*h*?&ym3+A@q{dK2MezjFs|{TX6bncI2hK6Y)fh%ELah9nZ4 z7(T(k_0wn!`44gz9@xJq9~n-vWvC?Nvi?1~V5KBH+}g6$HZ)XjHF<}Hj+W2bQ))+t zOAq!M29qAUM;E#d4qRtfH%jVc%<^{=EK{c?6Wn&MA3}ZJX0xScc4_&%%CA6C9v}#? z#%XgWlSbw0rn^P+c@}SM)pI{ijR8d%Gkbd_#sqnVf>H2=+rNk5zAGwX45e%5Wo^Ej z^$%s)HArqI?n35wrs36kwsq2g0e5RY+Q#SlC%crzyw4yOaF6<)vkIxO-<46n1l8g= zGbWnOqxhK`baeB+Ce=7Dw>cJu`g_cwwKu4}>)IQUi#`3_1<97gis<IaqdBW^a1A}i zj>Ev1<pJsy>GS&rH9J=WxdsYO%|qXsbx2T-ve&HFql8A51(N0JXyv?Wtd!mk(OAJ| zrr9QR*<x9WB`pr@hd$89=Ss`wxxXFCL-uBcQrq?f(A74~+sqY1b0r@wc6eE_kz=PL zKB-pnu|K71A-ERT{#*Nd#WSbNO|qE)zPT8PZ&*k#MK-0w33=ZOcyqu*h8ZQ`l`S=# zm9x(v>Q)zRpK}Mj+#x5#c#BmkXW3W*Vm(f8ce}$L%W7&|0jZTt?g^lbSaB08?`e9w z=M0$#+Ys~ASG}m1Key0hvqMuz#b?diH^+pmqOZ8%W_QmNQ@1IY1dBrl=?}S&Sugn? z7|FfiDF<sZ{@GkqKt(y%F+agv^GqOIflgu8c<UwnC)Y{!WLM)Zg_w3q&i=B#NYqKo z9yz(f#kIy>vadZ<WypqgV)O!g*JHsVj>rlS_oA!Yv>zqxw5qPvA=c?NbGyl=HD2IH y?eKWeYT`ET%M_{&q4n6Yqhmn-e}DSaP$Z^G_g#smuxf8dD*sGHu1v-x<o^H&(jm<N literal 0 HcmV?d00001 diff --git a/apps/desktop/electron-forge/app-icon/png/1024x1024-dev.png b/apps/desktop/electron-forge/app-icon/png/1024x1024-dev.png new file mode 100644 index 0000000000000000000000000000000000000000..1cd91a8d5704e14d243fc7fdd25b0e5ece820101 GIT binary patch literal 70179 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 Hm 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 Q1?xuYnVfjRQ@ywU4<|?gi~s-t literal 0 HcmV?d00001 diff --git a/apps/desktop/electron-forge/app-icon/png/512x512-dev.png b/apps/desktop/electron-forge/app-icon/png/512x512-dev.png new file mode 100644 index 0000000000000000000000000000000000000000..b853e661e4a60cd6a45c76fe9c5c4b39a8061e89 GIT binary patch literal 32506 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 literal 0 HcmV?d00001 diff --git a/scripts/icons/create-icons.sh b/scripts/icons/create-icons.sh index 917a83ce61..d7f3d24e8d 100644 --- a/scripts/icons/create-icons.sh +++ b/scripts/icons/create-icons.sh @@ -32,12 +32,13 @@ inkscape -w 16 -h 16 "$source_icon_dir/icon-purple.svg" -o "./png/16x16-dev.png" inkscape -w 32 -h 32 "$source_icon_dir/icon-purple.svg" -o "./png/32x32-dev.png" inkscape -w 256 -h 256 "$source_icon_dir/icon-purple.svg" -o "./png/256x256-dev.png" -# Build Mac .icns +# Build Mac default .icns declare -a sizes=("16" "32" "512" "1024") for size in "${sizes[@]}"; do inkscape -w $size -h $size "$source_icon_dir/icon-color.svg" -o "./png/${size}x${size}.png" done +rm -r mac/* mkdir -p fakeapp.app npx iconsur set fakeapp.app -l -i "png/1024x1024.png" -o "mac/1024x1024.png" -s 0.8 declare -a sizes=("16x16" "32x32" "128x128" "512x512") @@ -46,6 +47,19 @@ for size in "${sizes[@]}"; do done icnsutil compose -f "icon.icns" ./mac/*.png +# Build Mac dev .icns +declare -a sizes=("16" "32" "512" "1024") +for size in "${sizes[@]}"; do + inkscape -w $size -h $size "$source_icon_dir/icon-purple.svg" -o "./png/${size}x${size}-dev.png" +done + +npx iconsur set fakeapp.app -l -i "png/1024x1024-dev.png" -o "mac/1024x1024-dev.png" -s 0.8 +declare -a sizes=("16x16" "32x32" "128x128" "512x512") +for size in "${sizes[@]}"; do + magick "mac/1024x1024-dev.png" -resize "${size}" "mac/${size}-dev.png" +done +icnsutil compose -f "icon-dev.icns" ./mac/*-dev.png + # Build Windows icon magick -background none "$source_icon_dir/icon-color.svg" -define icon:auto-resize=16,32,48,64,128,256 "./icon.ico" magick -background none "$source_icon_dir/icon-purple.svg" -define icon:auto-resize=16,32,48,64,128,256 "./icon-dev.ico" From fbb41168a27cb323515c415487511b038b04eacb Mon Sep 17 00:00:00 2001 From: Elian Doran <contact@eliandoran.me> Date: Wed, 28 Jan 2026 09:05:23 +0200 Subject: [PATCH 334/353] chore(scripts): build dev icon for Windows installer --- .../setup-icon/setup-banner-dev.gif | Bin 0 -> 6764 bytes .../electron-forge/setup-icon/setup-dev.ico | Bin 0 -> 111677 bytes .../assets/images/icon-installer-purple.svg | 309 ++++++++++++++++++ scripts/icons/create-icons.sh | 4 +- 4 files changed, 312 insertions(+), 1 deletion(-) create mode 100644 apps/desktop/electron-forge/setup-icon/setup-banner-dev.gif create mode 100644 apps/desktop/electron-forge/setup-icon/setup-dev.ico create mode 100644 apps/server/src/assets/images/icon-installer-purple.svg diff --git a/apps/desktop/electron-forge/setup-icon/setup-banner-dev.gif b/apps/desktop/electron-forge/setup-icon/setup-banner-dev.gif new file mode 100644 index 0000000000000000000000000000000000000000..1dd5984245863c3f707d0ac21d7adb24e5989b06 GIT binary patch literal 6764 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 Rw03y1RAcREgGK<<{|~G0T+{#n literal 0 HcmV?d00001 diff --git a/apps/desktop/electron-forge/setup-icon/setup-dev.ico b/apps/desktop/electron-forge/setup-icon/setup-dev.ico new file mode 100644 index 0000000000000000000000000000000000000000..bef1f3df0847c721434f142381117d41093cac79 GIT binary patch literal 111677 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 Bh<pG5 literal 0 HcmV?d00001 diff --git a/apps/server/src/assets/images/icon-installer-purple.svg b/apps/server/src/assets/images/icon-installer-purple.svg new file mode 100644 index 0000000000..67ffb60b29 --- /dev/null +++ b/apps/server/src/assets/images/icon-installer-purple.svg @@ -0,0 +1,309 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Generator: Adobe Illustrator 22.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> + +<svg + version="1.1" + id="Layer_1" + x="0px" + y="0px" + viewBox="0 0 256 256" + style="enable-background:new 0 0 256 256;" + xml:space="preserve" + sodipodi:docname="icon-installer-purple.svg" + inkscape:version="1.4.3 (0d15f75, 2025-12-25)" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg"><defs + id="defs34" /><sodipodi:namedview + id="namedview34" + pagecolor="#ffffff" + bordercolor="#000000" + borderopacity="0.25" + inkscape:showpageshadow="2" + inkscape:pageopacity="0.0" + inkscape:pagecheckerboard="0" + inkscape:deskcolor="#d1d1d1" + inkscape:zoom="3.5449219" + inkscape:cx="96.61708" + inkscape:cy="167.70468" + inkscape:window-width="1536" + inkscape:window-height="1494" + inkscape:window-x="5312" + inkscape:window-y="379" + inkscape:window-maximized="0" + inkscape:current-layer="g20" /> +<style + type="text/css" + id="style1"> + .st0{fill:#686768;} + .st1{fill:#808080;} + .st2{fill:url(#SVGID_1_);} + .st3{fill:url(#SVGID_2_);} + .st4{fill:url(#SVGID_3_);} + .st5{fill:#D9D9D9;} + .st6{fill:url(#SVGID_4_);} + .st7{opacity:0.47;} + .st8{fill:#5B5A5A;} + .st9{fill:#95C980;} + .st10{fill:#72B755;} + .st11{fill:#4FA52B;} + .st12{fill:#EE8C89;} + .st13{fill:#E96562;} + .st14{fill:#E33F3B;} + .st15{fill:#EFB075;} + .st16{fill:#E99547;} + .st17{fill:#E47B19;} + .st18{opacity:0.38;fill:url(#SVGID_5_);enable-background:new ;} +</style> +<g + id="Layer_1_2_"> + <g + id="Layer_1_1_"> + </g> +</g> +<g + id="Layer_2_1_"> + <polygon + class="st0" + points="69.5,48.6 69.3,93.1 4,95.2 3.3,93.7 29.6,53.4 " + id="polygon1" /> + <path + class="st1" + d="M69.5,47l-0.2,46.1c0,0-66.3,1-66,0.6l26.1-41.8L69.5,47z" + id="path1" /> + + <linearGradient + id="SVGID_1_" + gradientUnits="userSpaceOnUse" + x1="69.458" + y1="120.0202" + x2="219.2576" + y2="120.0202" + gradientTransform="matrix(1 0 0 1 0 8)"> + <stop + offset="0" + style="stop-color:#E3E3E3" + id="stop1" /> + <stop + offset="1" + style="stop-color:#F4F4F4" + id="stop2" /> + </linearGradient> + <polygon + class="st2" + points="69.5,47 218.9,55.6 219.3,202.6 69.9,209.1 " + id="polygon2" /> + + <linearGradient + id="SVGID_2_" + gradientUnits="userSpaceOnUse" + x1="29.2408" + y1="120.0202" + x2="69.8681" + y2="120.0202" + gradientTransform="matrix(1 0 0 1 0 8)"> + <stop + offset="0" + style="stop-color:#D9D9D9" + id="stop3" /> + <stop + offset="1" + style="stop-color:#D4D4D4" + id="stop4" /> + </linearGradient> + <polygon + class="st3" + points="29.2,51.8 69.5,47 69.8,209.1 29.2,204.4 " + id="polygon4" /> + + <linearGradient + id="SVGID_3_" + gradientUnits="userSpaceOnUse" + x1="151.9309" + y1="42.7213" + x2="142.8473" + y2="-43.5726" + gradientTransform="matrix(0.9941 1.431752e-03 1.431754e-03 1.1143 -3.0394 44.4335)"> + <stop + offset="0" + style="stop-color:#B3B3B3" + id="stop5" /> + <stop + offset="0.4752" + style="stop-color:#B5B5B5" + id="stop6" /> + <stop + offset="0.6464" + style="stop-color:#BCBCBC" + id="stop7" /> + <stop + offset="0.7685" + style="stop-color:#C7C7C7" + id="stop8" /> + <stop + offset="0.8671" + style="stop-color:#D8D8D8" + id="stop9" /> + <stop + offset="0.9506" + style="stop-color:#EEEEEE" + id="stop10" /> + <stop + offset="1" + style="stop-color:#FFFFFF" + id="stop11" /> + </linearGradient> + <polygon + class="st4" + points="219.3,98.5 97.4,93.2 69.5,47.3 218.9,55.6 " + id="polygon11" /> + <polygon + class="st1" + points="102,85.3 251.2,93 252.8,91.1 72.2,48.9 69.5,47 " + id="polygon12" /> + <polygon + class="st5" + points="252.8,91.1 128,84.6 102,82.9 69.8,47.3 219.1,55.6 233.6,71.4 252.3,90.6 252.3,90.6 " + id="polygon13" /> + + <radialGradient + id="SVGID_4_" + cx="445.2994" + cy="-436.338" + r="4.0179" + gradientTransform="matrix(0.5088 -4.329579e-03 0.1464 14.7395 -92.0455 6569.5317)" + gradientUnits="userSpaceOnUse"> + <stop + offset="0" + style="stop-color:#FFFFFF" + id="stop13" /> + <stop + offset="6.758273e-02" + style="stop-color:#FFFFFF;stop-opacity:0.9324" + id="stop14" /> + <stop + offset="1" + style="stop-color:#FFFFFF;stop-opacity:0" + id="stop15" /> + </radialGradient> + <path + class="st6" + d="M72.2,152.5c0.2,26.2,0.9,42.4,0.1,42.4c-0.9,0-1.5-6.3-2.5-32.3c-1.1-26.1-1.4-85-0.5-85.1 C70.1,77.2,71.9,126.4,72.2,152.5z" + id="path15" /> + <g + class="st7" + id="g17"> + <path + class="st8" + d="M29.1,203.9l20.4,2.1c3.3,0.4,6.9,0.6,10.2,1.1l10.2,1.2h-0.1l74.7-3.2l37.4-1.7l9.3-0.4 c3.1-0.1,6.3-0.2,9.3-0.4l18.7-0.5l-18.7,1.2c-3.1,0.2-6.3,0.4-9.3,0.5l-9.3,0.4l-37.4,1.7l-74.5,3.2l0,0l0,0L59.7,208 c-3.3-0.4-6.8-0.9-10.2-1.4L29.1,203.9z" + id="path16" /> + <path + class="st1" + d="M28.6,203.9c3.3,0.2,6.8,0.4,10.3,0.6s7.1,0.5,10.6,0.9l10.2,1.1l10.2,1.2l-0.1,1.1h-0.1v-1.1l74.8-3.1 l37.4-1.6l18.7-0.7l18.7-0.5v0.6l-18.7,1.1l-9.3,0.5l-9.3,0.4l-37.4,1.6l-74.7,3.1l0,0l0,0l-10.2-1.2l-10.2-1.4L29,203.8 L28.6,203.9z M30.3,204.1l19.2,2.5l10.2,1.4l10.2,1.2l0,0l74.7-3.3l37.4-1.7l9.3-0.4l9.3-0.5l18.7-1.2v0.6l-18.7,0.5l-18.7,0.7 l-37.4,1.7l-74.7,3.3v-1.1h0.1l-0.1,1.1l-10.2-1.2l-10.2-1.1c-3.3-0.4-6.5-0.6-9.7-1.1C36.6,205,33.5,204.5,30.3,204.1z" + id="path17" /> + </g> + <g + id="g28"> + <g + id="g27"> + <g + id="g20"> + <path + class="st9" + d="M181.4,136.4c-8.7,6.8-23.5,8.1-33.8,5.5c2.6-2.3,3.8-3.4,6.3-5.8c2.5-2.2,3.6-3.2,6-5.4 c8.4-7.4,12.5-10.8,20.7-17.7c-8.5,6.4-12.9,9.6-21.6,16.4c-2.5,2-3.7,2.8-6.1,4.8c-2.6,2-3.8,3.1-6.4,5 c-0.5-9.5,1.1-22.1,10.3-28.9c0.7-0.6,1.7-1.1,2.6-1.7c1.2-0.6,2.5-1.4,3.9-1.8c11.4-4.4,24.8-7.5,37.3-5.9 c0.7,6.5-4.9,18.9-11.8,28.2c-1,1.2-1.8,2.5-2.8,3.6C184.2,133.9,182.7,135.3,181.4,136.4z" + id="path18" + style="fill:#ab60e3;fill-opacity:1" /> + <path + class="st10" + d="M185.6,132.4c-9.2,6-22.6,5.8-31.7,3.7c2.5-2.2,3.6-3.2,6-5.4c8.4-7.4,12.5-10.8,20.7-17.7 c-8.5,6.4-12.9,9.6-21.6,16.4c-2.5,2-3.7,2.8-6.1,4.8c-0.5-7.9,0.4-18.4,6.5-25.5c1.2-0.6,2.5-1.4,3.9-1.8 c11.4-4.6,24.8-7.5,37.3-5.9c0.7,6.5-4.9,18.9-11.8,28.2C187.5,130.1,186.5,131.3,185.6,132.4z" + id="path19" + style="fill:#8038b8;fill-opacity:1" /> + <path + class="st11" + d="M188.5,128.9c-8.9,4.2-20.5,3.8-28.5,1.8c8.4-7.4,12.5-10.8,20.7-17.7c-8.5,6.4-12.9,9.6-21.6,16.4 c-0.5-6.8,0-15.7,4.3-22.6c11.4-4.4,24.8-7.5,37.3-5.9C201.2,107.4,195.5,119.9,188.5,128.9z" + id="path20" + style="fill:#560a8f;fill-opacity:1" /> + </g> + <g + id="g23"> + <path + class="st12" + d="M140.4,169.2c-3.6-8.9,0.5-19.6,4.7-26c1.1,2.5,1.6,3.7,2.7,6c1.1,2.3,1.6,3.4,2.6,5.7 c3.7,7.9,5.5,11.8,9.3,19.2c-3.1-7.6-4.7-11.6-7.9-19.7c-0.9-2.2-1.4-3.3-2.2-5.5c-1-2.3-1.5-3.6-2.3-6 c7.4,2.2,16.8,6.6,20.3,15c0.2,0.7,0.5,1.5,0.7,2.2c0.2,1,0.5,2.1,0.6,3.2c1.5,9.6-0.9,23-4.4,28c-5.5-0.9-14.5-7.7-20-15.1 c-0.7-1-1.5-2-2.1-3C141.7,171.9,141,170.6,140.4,169.2z" + id="path21" + style="fill:#bb9dd2;fill-opacity:1" /> + <path + class="st13" + d="M142.5,173.3c-2.3-8.4,1.5-18.1,5.4-24c1.1,2.3,1.6,3.4,2.6,5.7c3.7,7.9,5.5,11.8,9.3,19.2 c-3.1-7.6-4.7-11.6-7.9-19.7c-0.9-2.2-1.4-3.3-2.2-5.5c6.3,1.7,14.4,5.2,18.7,11.3c0.2,1,0.5,2.1,0.6,3.2 c1.5,9.6-0.9,23-4.4,27.9c-5.5-0.9-14.5-7.7-20-15.1C143.9,175.2,143.3,174.3,142.5,173.3z" + id="path22" + style="fill:#9a6cbc;fill-opacity:1" /> + <path + class="st14" + d="M144.6,176.2c-1.1-7.5,2.5-16,5.9-21.3c3.7,7.9,5.5,11.8,9.3,19.2c-3.1-7.6-4.7-11.6-7.9-19.7 c5.5,1.4,12.5,4.1,17.2,8.9c1.5,9.6-0.9,23-4.4,27.9C159,190.4,150.1,183.6,144.6,176.2z" + id="path23" + style="fill:#783ba5;fill-opacity:1" /> + </g> + <g + id="g26"> + <path + class="st15" + d="M125.9,116.6c10.5,4.3,16.5,15.4,18.8,23.4c-3-1-4.3-1.4-7.3-2.3c-2.8-0.9-4.2-1.4-6.9-2.2 c-9.7-3.2-14.5-4.9-23.9-8.2c9.1,3.8,13.7,5.8,23.1,9.6c2.6,1.1,3.9,1.6,6.5,2.7c2.7,1.1,4.1,1.6,6.9,2.7 c-7.4,4.2-18.4,8.4-28.3,4.6c-0.7-0.2-1.7-0.7-2.6-1.2c-1-0.6-2.2-1.2-3.3-2.1c-8.5-6-17.6-16.7-20.9-26.8 c4.9-3.4,17.6-4.2,28.3-2.3c1.5,0.2,2.8,0.5,4.3,0.9C122.7,115.4,124.3,115.8,125.9,116.6z" + id="path24" + style="fill:#ab60e3;fill-opacity:1" /> + <path + class="st16" + d="M120.7,114.9c9.1,4.8,14.5,15,16.7,22.6c-2.8-0.9-4.2-1.4-6.9-2.2c-9.7-3.2-14.5-4.9-23.9-8.2 c9.1,3.8,13.7,5.8,23,9.6c2.6,1.1,3.9,1.6,6.5,2.7c-6.1,3.6-15.4,7.4-23.9,6c-1-0.6-2.2-1.2-3.3-2.1c-8.5-6-17.6-16.7-20.9-26.8 c4.9-3.4,17.6-4.2,28.3-2.3C118,114.2,119.4,114.4,120.7,114.9z" + id="path25" + style="fill:#8038b8;fill-opacity:1" /> + <path + class="st17" + d="M116.6,113.9c7.5,5.3,12.1,14.4,14,21.3c-9.7-3.2-14.5-4.9-23.9-8.2c9.1,3.8,13.7,5.8,23.1,9.6 c-5.4,3.2-13,6.6-20.7,6.5c-8.5-6-17.6-16.7-20.9-26.8C93.2,112.8,105.7,112,116.6,113.9z" + id="path26" + style="fill:#6f2796;fill-opacity:1" /> + </g> + </g> + </g> + + <linearGradient + id="SVGID_5_" + gradientUnits="userSpaceOnUse" + x1="241.7537" + y1="104.2354" + x2="160.0455" + y2="55.1756" + gradientTransform="matrix(1 0 0 -1 0 256)"> + <stop + offset="0.1721" + style="stop-color:#C7C7C7" + id="stop28" /> + <stop + offset="0.3798" + style="stop-color:#D8D8D8" + id="stop29" /> + <stop + offset="0.6814" + style="stop-color:#DADADA" + id="stop30" /> + <stop + offset="0.7898" + style="stop-color:#E1E1E1" + id="stop31" /> + <stop + offset="0.867" + style="stop-color:#ECECEC" + id="stop32" /> + <stop + offset="0.8745" + style="stop-color:#EEEEEE" + id="stop33" /> + <stop + offset="1" + style="stop-color:#FFFFFF" + id="stop34" /> + </linearGradient> + <path + class="st18" + d="M219.1,128.3c-1,0.4-3.3,15.7-3.7,19.2c-0.7,5.8-3.9,28.7-11.1,41.2c-7.3,12.8-15.7,13.7-16.4,14.6l31.1-0.9 C219.1,179.1,219.1,151.5,219.1,128.3L219.1,128.3z" + id="path34" /> +</g> +</svg> diff --git a/scripts/icons/create-icons.sh b/scripts/icons/create-icons.sh index d7f3d24e8d..1853fc82b0 100644 --- a/scripts/icons/create-icons.sh +++ b/scripts/icons/create-icons.sh @@ -66,6 +66,8 @@ magick -background none "$source_icon_dir/icon-purple.svg" -define icon:auto-res # Build Windows setup icon magick -background none "$source_icon_dir/icon-installer.svg" -define icon:auto-resize=16,32,48,64,128,256 "$desktop_forge_dir/setup-icon/setup.ico" +magick -background none "$source_icon_dir/icon-installer-purple.svg" -define icon:auto-resize=16,32,48,64,128,256 "$desktop_forge_dir/setup-icon/setup-dev.ico" # Build Squirrel splash image -magick "./png/256x256.png" -background "#ffffff" -gravity center -extent 640x480 "$desktop_forge_dir/setup-icon/setup-banner.gif" \ No newline at end of file +magick "./png/256x256.png" -background "#ffffff" -gravity center -extent 640x480 "$desktop_forge_dir/setup-icon/setup-banner.gif" +magick "./png/256x256-dev.png" -background "#ffffff" -gravity center -extent 640x480 "$desktop_forge_dir/setup-icon/setup-banner-dev.gif" \ No newline at end of file From bd45043a36d17282373c76fce57d72a6994fb493 Mon Sep 17 00:00:00 2001 From: Elian Doran <contact@eliandoran.me> Date: Wed, 28 Jan 2026 09:44:15 +0200 Subject: [PATCH 335/353] chore(desktop): integrate icon change for dev nightlies --- apps/desktop/.gitignore | 1 + apps/desktop/electron-forge/forge.config.ts | 64 +++++++++++---------- scripts/update-nightly-version.ts | 2 +- 3 files changed, 36 insertions(+), 31 deletions(-) create mode 100644 apps/desktop/.gitignore diff --git a/apps/desktop/.gitignore b/apps/desktop/.gitignore new file mode 100644 index 0000000000..9098b78ac3 --- /dev/null +++ b/apps/desktop/.gitignore @@ -0,0 +1 @@ +electron-forge/app-icon/mac \ No newline at end of file diff --git a/apps/desktop/electron-forge/forge.config.ts b/apps/desktop/electron-forge/forge.config.ts index 5e3a39869b..03d5a4e857 100644 --- a/apps/desktop/electron-forge/forge.config.ts +++ b/apps/desktop/electron-forge/forge.config.ts @@ -1,9 +1,11 @@ -import path, { join } from "path"; -import fs from "fs-extra"; -import { LOCALES } from "@triliumnext/commons"; -import { PRODUCT_NAME } from "../src/app-info.js"; import type { ForgeConfig } from "@electron-forge/shared-types"; +import { LOCALES } from "@triliumnext/commons"; import { existsSync } from "fs"; +import fs from "fs-extra"; +import path, { join } from "path"; + +import packageJson from "../package.json" assert { type: "json" }; +import { PRODUCT_NAME } from "../src/app-info.js"; const ELECTRON_FORGE_DIR = __dirname; @@ -12,12 +14,12 @@ const APP_ICON_PATH = path.join(ELECTRON_FORGE_DIR, "app-icon"); const extraResourcesForPlatform = getExtraResourcesForPlatform(); const baseLinuxMakerConfigOptions = { - name: EXECUTABLE_NAME, - bin: EXECUTABLE_NAME, - productName: PRODUCT_NAME, - icon: path.join(APP_ICON_PATH, "png/128x128.png"), - desktopTemplate: path.resolve(path.join(ELECTRON_FORGE_DIR, "desktop.ejs")), - categories: ["Office", "Utility"] + name: EXECUTABLE_NAME, + bin: EXECUTABLE_NAME, + productName: PRODUCT_NAME, + icon: path.join(APP_ICON_PATH, "png/128x128.png"), + desktopTemplate: path.resolve(path.join(ELECTRON_FORGE_DIR, "desktop.ejs")), + categories: ["Office", "Utility"] }; const windowsSignConfiguration = process.env.WINDOWS_SIGN_EXECUTABLE ? { hookModulePath: path.join(ELECTRON_FORGE_DIR, "sign-windows.cjs") @@ -30,6 +32,7 @@ const macosSignConfiguration = process.env.APPLE_ID ? { teamId: process.env.APPLE_TEAM_ID! } } : undefined; +const isNightly = packageJson.version.includes("test"); const config: ForgeConfig = { outDir: "out", @@ -37,9 +40,10 @@ const config: ForgeConfig = { packagerConfig: { executableName: EXECUTABLE_NAME, name: PRODUCT_NAME, + appVersion: packageJson.version, overwrite: true, asar: true, - icon: path.join(APP_ICON_PATH, "icon"), + icon: path.join(APP_ICON_PATH, isNightly ? "icon-dev" : "icon"), ...macosSignConfiguration, windowsSign: windowsSignConfiguration, extraResource: [ @@ -87,7 +91,7 @@ const config: ForgeConfig = { ...baseLinuxMakerConfigOptions, desktopTemplate: undefined, // otherwise it would put in the wrong exec icon: { - "128x128": path.join(APP_ICON_PATH, "png/128x128.png"), + "128x128": path.join(APP_ICON_PATH, isNightly ? "png/128x128-dev.png" : "png/128x128.png"), }, id: "com.triliumnext.notes", runtimeVersion: "24.08", @@ -136,24 +140,24 @@ const config: ForgeConfig = { config: { name: EXECUTABLE_NAME, productName: PRODUCT_NAME, - iconUrl: "https://raw.githubusercontent.com/TriliumNext/Trilium/refs/heads/main/apps/desktop/electron-forge/app-icon/icon.ico", - setupIcon: path.join(ELECTRON_FORGE_DIR, "setup-icon/setup.ico"), - loadingGif: path.join(ELECTRON_FORGE_DIR, "setup-icon/setup-banner.gif"), + iconUrl: `https://raw.githubusercontent.com/TriliumNext/Trilium/refs/heads/main/apps/desktop/electron-forge/app-icon/${isNightly ? "icon-dev" : "icon"}.ico`, + setupIcon: path.join(ELECTRON_FORGE_DIR, isNightly ? "setup-icon/setup-dev.ico" : "setup-icon/setup.ico"), + loadingGif: path.join(ELECTRON_FORGE_DIR, isNightly ? "setup-icon/setup-banner-dev.gif" : "setup-icon/setup-banner.gif"), windowsSign: windowsSignConfiguration } }, { name: "@electron-forge/maker-dmg", config: { - icon: path.join(APP_ICON_PATH, "icon.icns") + icon: path.join(APP_ICON_PATH, isNightly ? "icon-dev.icns" : "icon.icns") } }, { name: "@electron-forge/maker-zip", config: { options: { - iconUrl: "https://raw.githubusercontent.com/TriliumNext/Trilium/refs/heads/main/apps/desktop/electron-forge/app-icon/icon.ico", - icon: path.join(APP_ICON_PATH, "icon.ico") + iconUrl: `https://raw.githubusercontent.com/TriliumNext/Trilium/refs/heads/main/apps/desktop/electron-forge/app-icon/${isNightly ? "icon-dev" : "icon"}.ico`, + icon: path.join(APP_ICON_PATH, isNightly ? "icon-dev.ico" : "icon.ico") } } } @@ -172,7 +176,7 @@ const config: ForgeConfig = { .filter(locale => !locale.contentOnly) .map(locale => locale.electronLocale) as string[]; if (!isMac) { - localesToKeep = localesToKeep.map(locale => locale.replace("_", "-")) + localesToKeep = localesToKeep.map(locale => locale.replace("_", "-")); } const keptLocales = new Set(); @@ -283,11 +287,11 @@ function getExtraResourcesForPlatform() { const scripts = ["trilium-portable", "trilium-safe-mode", "trilium-no-cert-check"]; const scriptExt = (process.platform === "win32") ? "bat" : "sh"; return scripts.map(script => `electron-forge/${script}.${scriptExt}`); - } + }; switch (process.platform) { case "win32": - resources.push(...getScriptResources()) + resources.push(...getScriptResources()); break; case "linux": resources.push(...getScriptResources(), path.join(APP_ICON_PATH, "png/256x256.png")); @@ -300,18 +304,18 @@ function getExtraResourcesForPlatform() { } function getELFArch(file: string) { - const buf = fs.readFileSync(file); + const buf = fs.readFileSync(file); - if (buf[0] !== 0x7f || buf[1] !== 0x45 || buf[2] !== 0x4c || buf[3] !== 0x46) { - throw new Error("Not an ELF file"); - } + if (buf[0] !== 0x7f || buf[1] !== 0x45 || buf[2] !== 0x4c || buf[3] !== 0x46) { + throw new Error("Not an ELF file"); + } - const eiClass = buf[4]; // 1=32-bit, 2=64-bit - const eiMachine = buf[18]; // architecture code + const eiClass = buf[4]; // 1=32-bit, 2=64-bit + const eiMachine = buf[18]; // architecture code - if (eiMachine === 0x3E) return 'x86-64'; - if (eiMachine === 0xB7) return 'ARM64'; - return 'other'; + if (eiMachine === 0x3E) return 'x86-64'; + if (eiMachine === 0xB7) return 'ARM64'; + return 'other'; } diff --git a/scripts/update-nightly-version.ts b/scripts/update-nightly-version.ts index 71f5a96847..32bca10f34 100644 --- a/scripts/update-nightly-version.ts +++ b/scripts/update-nightly-version.ts @@ -46,7 +46,7 @@ function main() { const rootPackageJson = join(scriptDir, "..", "package.json"); patchPackageJson(rootPackageJson); - for (const app of ["server", "client"]) { + for (const app of ["server", "client", "desktop"]) { const appPackageJsonPath = join(scriptDir, "..", "apps", app, "package.json"); patchPackageJson(appPackageJsonPath); } From 85bf1eb4ec57f2ec7768aa30fbda3e01c16b4363 Mon Sep 17 00:00:00 2001 From: Elian Doran <contact@eliandoran.me> Date: Wed, 28 Jan 2026 10:03:45 +0200 Subject: [PATCH 336/353] fix(desktop): nightly icon not respected --- apps/server/src/assets/icon-dev.ico | Bin 0 -> 114668 bytes apps/server/src/services/window.ts | 4 ++++ scripts/icons/create-icons.sh | 7 ++++++- 3 files changed, 10 insertions(+), 1 deletion(-) create mode 100644 apps/server/src/assets/icon-dev.ico diff --git a/apps/server/src/assets/icon-dev.ico b/apps/server/src/assets/icon-dev.ico new file mode 100644 index 0000000000000000000000000000000000000000..4a734c72bc26e3bfdcd1a5a4c6c28460445ccc37 GIT binary patch literal 114668 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 literal 0 HcmV?d00001 diff --git a/apps/server/src/services/window.ts b/apps/server/src/services/window.ts index 019ec58e8b..917d2012c7 100644 --- a/apps/server/src/services/window.ts +++ b/apps/server/src/services/window.ts @@ -4,6 +4,7 @@ import { t } from "i18next"; import path from "path"; import url from "url"; +import app_info from "./app_info.js"; import cls from "./cls.js"; import keyboardActionsService from "./keyboard_actions.js"; import log from "./log.js"; @@ -290,6 +291,9 @@ function getIcon() { if (process.env.NODE_ENV === "development") { return path.join(__dirname, "../../../desktop/electron-forge/app-icon/png/256x256-dev.png"); } + if (app_info.appVersion.includes("test")) { + return path.join(RESOURCE_DIR, "../public/assets/icon-dev.png"); + } return path.join(RESOURCE_DIR, "../public/assets/icon.png"); } diff --git a/scripts/icons/create-icons.sh b/scripts/icons/create-icons.sh index 1853fc82b0..6092bb60b4 100644 --- a/scripts/icons/create-icons.sh +++ b/scripts/icons/create-icons.sh @@ -70,4 +70,9 @@ magick -background none "$source_icon_dir/icon-installer-purple.svg" -define ico # Build Squirrel splash image magick "./png/256x256.png" -background "#ffffff" -gravity center -extent 640x480 "$desktop_forge_dir/setup-icon/setup-banner.gif" -magick "./png/256x256-dev.png" -background "#ffffff" -gravity center -extent 640x480 "$desktop_forge_dir/setup-icon/setup-banner-dev.gif" \ No newline at end of file +magick "./png/256x256-dev.png" -background "#ffffff" -gravity center -extent 640x480 "$desktop_forge_dir/setup-icon/setup-banner-dev.gif" + +# Copy server assets +server_dir="$script_dir/../../apps/server" +cp "$desktop_forge_dir/app-icon/icon.ico" "$server_dir/src/assets/icon.ico" +cp "$desktop_forge_dir/app-icon/icon-dev.ico" "$server_dir/src/assets/icon-dev.ico" \ No newline at end of file From af7057f06203b1b52b8160ecae27c9930f0f8c36 Mon Sep 17 00:00:00 2001 From: Elian Doran <contact@eliandoran.me> Date: Wed, 28 Jan 2026 10:05:04 +0200 Subject: [PATCH 337/353] fix(scripts): correctly extract current version for nightly updates --- scripts/update-nightly-version.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/update-nightly-version.ts b/scripts/update-nightly-version.ts index 32bca10f34..c7496e5856 100644 --- a/scripts/update-nightly-version.ts +++ b/scripts/update-nightly-version.ts @@ -29,7 +29,7 @@ function processVersion(version) { function patchPackageJson(packageJsonPath) { // Read the version from package.json and process it. const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, "utf-8")); - const currentVersion = packageJson.version; + const currentVersion = packageJson.version.split("-test-")[0]; const adjustedVersion = processVersion(currentVersion); console.log("Current version is", currentVersion); console.log("Adjusted version is", adjustedVersion); From c45c1b0f937cfe23aab64c3624b73a11929fe95a Mon Sep 17 00:00:00 2001 From: Elian Doran <contact@eliandoran.me> Date: Wed, 28 Jan 2026 14:46:24 +0200 Subject: [PATCH 338/353] fix(calendar): not respecting auto formatting locale (closes #8507) --- apps/client/src/widgets/collections/calendar/index.tsx | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/apps/client/src/widgets/collections/calendar/index.tsx b/apps/client/src/widgets/collections/calendar/index.tsx index d9195a3c5e..f8d2fbe335 100644 --- a/apps/client/src/widgets/collections/calendar/index.tsx +++ b/apps/client/src/widgets/collections/calendar/index.tsx @@ -217,17 +217,18 @@ function usePlugins(isEditable: boolean, isCalendarRoot: boolean) { } function useLocale() { + const [ locale ] = useTriliumOption("locale"); const [ formattingLocale ] = useTriliumOption("formattingLocale"); const [ calendarLocale, setCalendarLocale ] = useState<LocaleInput>(); useEffect(() => { - const correspondingLocale = LOCALE_MAPPINGS[formattingLocale]; + const correspondingLocale = LOCALE_MAPPINGS[formattingLocale] ?? LOCALE_MAPPINGS[locale]; if (correspondingLocale) { correspondingLocale().then((locale) => setCalendarLocale(locale.default)); } else { setCalendarLocale(undefined); } - }); + }, [formattingLocale, locale]); return calendarLocale; } From b75a2e95921e9aa4ed454410061c8f27fdf22eef Mon Sep 17 00:00:00 2001 From: Elian Doran <contact@eliandoran.me> Date: Wed, 28 Jan 2026 14:47:06 +0200 Subject: [PATCH 339/353] fix(calendar): lower case in header (closes #8507) --- apps/client/src/widgets/collections/calendar/index.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/client/src/widgets/collections/calendar/index.tsx b/apps/client/src/widgets/collections/calendar/index.tsx index f8d2fbe335..0dde523c77 100644 --- a/apps/client/src/widgets/collections/calendar/index.tsx +++ b/apps/client/src/widgets/collections/calendar/index.tsx @@ -179,13 +179,13 @@ function CalendarHeader({ calendarRef }: { calendarRef: RefObject<FullCalendar> <ButtonGroup> {CALENDAR_VIEWS.map(viewData => ( <Button - text={viewData.name.toLocaleLowerCase()} + text={viewData.name} className={currentViewType === viewData.type ? "active" : ""} onClick={() => calendarRef.current?.changeView(viewData.type)} /> ))} </ButtonGroup> - <Button text={t("calendar.today").toLocaleLowerCase()} onClick={() => calendarRef.current?.today()} /> + <Button text={t("calendar.today")} onClick={() => calendarRef.current?.today()} /> <ButtonGroup> <ActionButton icon="bx bx-chevron-left" text={currentViewData?.previousText ?? ""} frame onClick={() => calendarRef.current?.prev()} /> <ActionButton icon="bx bx-chevron-right" text={currentViewData?.nextText ?? ""} frame onClick={() => calendarRef.current?.next()} /> From 4a8fa7293b6fb9d1a12374e11411d62b4d3cec5f Mon Sep 17 00:00:00 2001 From: Elian Doran <contact@eliandoran.me> Date: Wed, 28 Jan 2026 15:37:41 +0200 Subject: [PATCH 340/353] fix(calendar): unnecessary right margin for header on new layout --- apps/client/src/widgets/collections/calendar/index.css | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/apps/client/src/widgets/collections/calendar/index.css b/apps/client/src/widgets/collections/calendar/index.css index 9313b615ec..b5e9fb1303 100644 --- a/apps/client/src/widgets/collections/calendar/index.css +++ b/apps/client/src/widgets/collections/calendar/index.css @@ -77,7 +77,7 @@ font-weight: normal; } -body.desktop:not(.zen) .calendar-view .calendar-header { +body.desktop:not(.zen):not(.experimental-feature-new-layout) .calendar-view .calendar-header { padding-block-start: 4px; padding-inline-end: 5em; } @@ -126,7 +126,7 @@ body.desktop:not(.zen) .calendar-view .calendar-header { .calendar-view a.fc-timegrid-event, .calendar-view a.fc-daygrid-event { --border-color: transparent; - + border: 2px solid; border-left-width: 4px; border-color: var(--border-color) var(--border-color) var(--border-color) @@ -175,7 +175,7 @@ body.desktop:not(.zen) .calendar-view .calendar-header { opacity: .75; } -/* +/* * List view */ @@ -188,4 +188,4 @@ body.desktop:not(.zen) .calendar-view .calendar-header { --fc-event-border-color: var(--custom-color); } -/* #endregion */ \ No newline at end of file +/* #endregion */ From 6de632d117e5a737e43e206bb457d3cbc6b111af Mon Sep 17 00:00:00 2001 From: Elian Doran <contact@eliandoran.me> Date: Wed, 28 Jan 2026 22:06:19 +0200 Subject: [PATCH 341/353] fix(client): relative import to src --- apps/client/vite.config.mts | 12 ++++++------ apps/server/src/routes/assets.ts | 6 +++--- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/apps/client/vite.config.mts b/apps/client/vite.config.mts index b76595d646..bd9b18289e 100644 --- a/apps/client/vite.config.mts +++ b/apps/client/vite.config.mts @@ -19,7 +19,7 @@ if (isDev) { plugins = [ viteStaticCopy({ targets: assets.map((asset) => ({ - src: `src/${asset}/*`, + src: `${asset}/*`, dest: asset })) }), @@ -27,7 +27,7 @@ if (isDev) { structured: true, targets: [ { - src: "../../node_modules/@excalidraw/excalidraw/dist/prod/fonts/*", + src: "../../../node_modules/@excalidraw/excalidraw/dist/prod/fonts/*", dest: "", } ] @@ -37,8 +37,8 @@ if (isDev) { } export default defineConfig(() => ({ - root: __dirname, - cacheDir: '../../.cache/vite', + root: join(__dirname, "src"), + cacheDir: join(__dirname, "../../.cache/vite"), base: "", plugins, // Use esbuild for JSX transformation (much faster than Babel) @@ -79,14 +79,14 @@ export default defineConfig(() => ({ }, build: { target: "esnext", - outDir: './dist', + outDir: '../dist', emptyOutDir: true, reportCompressedSize: true, sourcemap: false, rollupOptions: { input: { index: join(__dirname, "src", "index.html"), - login: join(__dirname, "src", "login.ts"), + login: join(__dirname, "src", "login.ts"), setup: join(__dirname, "src", "setup.ts"), set_password: join(__dirname, "src", "set_password.ts"), runtime: join(__dirname, "src", "runtime.ts"), diff --git a/apps/server/src/routes/assets.ts b/apps/server/src/routes/assets.ts index b8d6b4d13b..ecd57da8b7 100644 --- a/apps/server/src/routes/assets.ts +++ b/apps/server/src/routes/assets.ts @@ -47,11 +47,11 @@ async function register(app: express.Application) { vite.middlewares(req, res, next); }); app.get(`/`, [ rootLimiter, auth.checkAuth, csrfMiddleware ], (req, res, next) => { - req.url = `/${assetUrlFragment}/src/index.html`; + req.url = `/${assetUrlFragment}/index.html`; vite.middlewares(req, res, next); }); app.get(`/index.ts`, [ rootLimiter ], (req, res, next) => { - req.url = `/${assetUrlFragment}/src/index.ts`; + req.url = `/${assetUrlFragment}/index.ts`; vite.middlewares(req, res, next); }); app.use(`/node_modules/@excalidraw/excalidraw/dist/prod`, persistentCacheStatic(path.join(srcRoot, "../../node_modules/@excalidraw/excalidraw/dist/prod"))); @@ -66,7 +66,7 @@ async function register(app: express.Application) { // broken when closing the browser and coming back in to the page. // The page is restored from cache, but the API call fail. res.setHeader("Cache-Control", "no-cache, no-store, must-revalidate"); - res.sendFile(path.join(publicDir, "src", "index.html")); + res.sendFile(path.join(publicDir, "index.html")); }); app.use("/assets", persistentCacheStatic(path.join(publicDir, "assets"))); app.use(`/src`, persistentCacheStatic(path.join(publicDir, "src"))); From 37381b7c36ca61a3f08dd9e22e78611624a97193 Mon Sep 17 00:00:00 2001 From: Elian Doran <contact@eliandoran.me> Date: Wed, 28 Jan 2026 22:23:00 +0200 Subject: [PATCH 342/353] chore(client): use different root mechanism with fewer issues --- apps/client/{src => }/index.html | 2 +- apps/client/vite.config.mts | 14 +++++++------- apps/server/src/routes/assets.ts | 4 ++-- 3 files changed, 10 insertions(+), 10 deletions(-) rename apps/client/{src => }/index.html (95%) diff --git a/apps/client/src/index.html b/apps/client/index.html similarity index 95% rename from apps/client/src/index.html rename to apps/client/index.html index b1541e784b..e1db353327 100644 --- a/apps/client/src/index.html +++ b/apps/client/index.html @@ -19,7 +19,7 @@ <!-- This works even when the user directly changes --root-background in CSS --> <div id="background-color-tracker" style="position: absolute; visibility: hidden; color: var(--root-background); transition: color 1ms;"></div> - <script src="./index.ts" type="module"></script> + <script src="./src/index.ts" type="module"></script> <!-- Required for correct loading of scripts in Electron --> <script> diff --git a/apps/client/vite.config.mts b/apps/client/vite.config.mts index bd9b18289e..62d8330403 100644 --- a/apps/client/vite.config.mts +++ b/apps/client/vite.config.mts @@ -19,7 +19,7 @@ if (isDev) { plugins = [ viteStaticCopy({ targets: assets.map((asset) => ({ - src: `${asset}/*`, + src: `src/${asset}/*`, dest: asset })) }), @@ -27,7 +27,7 @@ if (isDev) { structured: true, targets: [ { - src: "../../../node_modules/@excalidraw/excalidraw/dist/prod/fonts/*", + src: "../../node_modules/@excalidraw/excalidraw/dist/prod/fonts/*", dest: "", } ] @@ -37,8 +37,8 @@ if (isDev) { } export default defineConfig(() => ({ - root: join(__dirname, "src"), - cacheDir: join(__dirname, "../../.cache/vite"), + root: __dirname, + cacheDir: '../../.cache/vite', base: "", plugins, // Use esbuild for JSX transformation (much faster than Babel) @@ -79,14 +79,14 @@ export default defineConfig(() => ({ }, build: { target: "esnext", - outDir: '../dist', + outDir: './dist', emptyOutDir: true, reportCompressedSize: true, sourcemap: false, rollupOptions: { input: { - index: join(__dirname, "src", "index.html"), - login: join(__dirname, "src", "login.ts"), + index: join(__dirname, "index.html"), + login: join(__dirname, "src", "login.ts"), setup: join(__dirname, "src", "setup.ts"), set_password: join(__dirname, "src", "set_password.ts"), runtime: join(__dirname, "src", "runtime.ts"), diff --git a/apps/server/src/routes/assets.ts b/apps/server/src/routes/assets.ts index ecd57da8b7..c68b64bc18 100644 --- a/apps/server/src/routes/assets.ts +++ b/apps/server/src/routes/assets.ts @@ -50,8 +50,8 @@ async function register(app: express.Application) { req.url = `/${assetUrlFragment}/index.html`; vite.middlewares(req, res, next); }); - app.get(`/index.ts`, [ rootLimiter ], (req, res, next) => { - req.url = `/${assetUrlFragment}/index.ts`; + app.get(`/src/index.ts`, [ rootLimiter ], (req, res, next) => { + req.url = `/${assetUrlFragment}/src/index.ts`; vite.middlewares(req, res, next); }); app.use(`/node_modules/@excalidraw/excalidraw/dist/prod`, persistentCacheStatic(path.join(srcRoot, "../../node_modules/@excalidraw/excalidraw/dist/prod"))); From 51313ff0d581e5a02ab669cc88edc1f57dc8895e Mon Sep 17 00:00:00 2001 From: Elian Doran <contact@eliandoran.me> Date: Wed, 28 Jan 2026 22:27:02 +0200 Subject: [PATCH 343/353] fix(client): subdir broken due to bootstrap --- apps/client/src/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/client/src/index.ts b/apps/client/src/index.ts index c42ac5d3e9..fba6e17d7e 100644 --- a/apps/client/src/index.ts +++ b/apps/client/src/index.ts @@ -30,7 +30,7 @@ async function initJQuery() { } async function setupGlob() { - const response = await fetch(`/bootstrap${window.location.search}`); + const response = await fetch(`./bootstrap${window.location.search}`); const json = await response.json(); window.global = globalThis; /* fixes https://github.com/webpack/webpack/issues/10035 */ From 0ec4423ad4be13bcfa22dc8152bb264097c6d70a Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 29 Jan 2026 00:55:00 +0000 Subject: [PATCH 344/353] chore(deps): update dependency @electron/rebuild to v4.0.3 --- package.json | 2 +- pnpm-lock.yaml | 100 +++++++++++++++++++++++++++++++++++++++---------- 2 files changed, 81 insertions(+), 21 deletions(-) diff --git a/package.json b/package.json index 6bfcca7271..aff07338cb 100644 --- a/package.json +++ b/package.json @@ -44,7 +44,7 @@ }, "private": true, "devDependencies": { - "@electron/rebuild": "4.0.2", + "@electron/rebuild": "4.0.3", "@fast-csv/parse": "5.0.5", "@playwright/test": "1.57.0", "@triliumnext/server": "workspace:*", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index f9498858ad..61d65b75b0 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -35,8 +35,8 @@ importers: .: devDependencies: '@electron/rebuild': - specifier: 4.0.2 - version: 4.0.2 + specifier: 4.0.3 + version: 4.0.3 '@fast-csv/parse': specifier: 5.0.5 version: 5.0.5 @@ -2413,8 +2413,8 @@ packages: engines: {node: '>=12.13.0'} hasBin: true - '@electron/rebuild@4.0.2': - resolution: {integrity: sha512-8iZWVPvOpCdIc5Pj5udQV3PeO7liJVC7BBUSizl1HCfP7ZxYc9Kqz0c3PDNj2HQ5cQfJ5JaBeJIYKPjAvLn2Rg==} + '@electron/rebuild@4.0.3': + resolution: {integrity: sha512-u9vpTHRMkOYCs/1FLiSVAFZ7FbjsXK+bQuzviJZa+lG7BHZl1nz52/IcGvwa3sk80/fc3llutBkbCq10Vh8WQA==} engines: {node: '>=22.12.0'} hasBin: true @@ -3327,89 +3327,105 @@ packages: resolution: {integrity: sha512-excjX8DfsIcJ10x1Kzr4RcWe1edC9PquDRRPx3YVCvQv+U5p7Yin2s32ftzikXojb1PIFc/9Mt28/y+iRklkrw==} cpu: [arm64] os: [linux] + libc: [glibc] '@img/sharp-libvips-linux-arm@1.2.4': resolution: {integrity: sha512-bFI7xcKFELdiNCVov8e44Ia4u2byA+l3XtsAj+Q8tfCwO6BQ8iDojYdvoPMqsKDkuoOo+X6HZA0s0q11ANMQ8A==} cpu: [arm] os: [linux] + libc: [glibc] '@img/sharp-libvips-linux-ppc64@1.2.4': resolution: {integrity: sha512-FMuvGijLDYG6lW+b/UvyilUWu5Ayu+3r2d1S8notiGCIyYU/76eig1UfMmkZ7vwgOrzKzlQbFSuQfgm7GYUPpA==} cpu: [ppc64] os: [linux] + libc: [glibc] '@img/sharp-libvips-linux-riscv64@1.2.4': resolution: {integrity: sha512-oVDbcR4zUC0ce82teubSm+x6ETixtKZBh/qbREIOcI3cULzDyb18Sr/Wcyx7NRQeQzOiHTNbZFF1UwPS2scyGA==} cpu: [riscv64] os: [linux] + libc: [glibc] '@img/sharp-libvips-linux-s390x@1.2.4': resolution: {integrity: sha512-qmp9VrzgPgMoGZyPvrQHqk02uyjA0/QrTO26Tqk6l4ZV0MPWIW6LTkqOIov+J1yEu7MbFQaDpwdwJKhbJvuRxQ==} cpu: [s390x] os: [linux] + libc: [glibc] '@img/sharp-libvips-linux-x64@1.2.4': resolution: {integrity: sha512-tJxiiLsmHc9Ax1bz3oaOYBURTXGIRDODBqhveVHonrHJ9/+k89qbLl0bcJns+e4t4rvaNBxaEZsFtSfAdquPrw==} cpu: [x64] os: [linux] + libc: [glibc] '@img/sharp-libvips-linuxmusl-arm64@1.2.4': resolution: {integrity: sha512-FVQHuwx1IIuNow9QAbYUzJ+En8KcVm9Lk5+uGUQJHaZmMECZmOlix9HnH7n1TRkXMS0pGxIJokIVB9SuqZGGXw==} cpu: [arm64] os: [linux] + libc: [musl] '@img/sharp-libvips-linuxmusl-x64@1.2.4': resolution: {integrity: sha512-+LpyBk7L44ZIXwz/VYfglaX/okxezESc6UxDSoyo2Ks6Jxc4Y7sGjpgU9s4PMgqgjj1gZCylTieNamqA1MF7Dg==} cpu: [x64] os: [linux] + libc: [musl] '@img/sharp-linux-arm64@0.34.5': resolution: {integrity: sha512-bKQzaJRY/bkPOXyKx5EVup7qkaojECG6NLYswgktOZjaXecSAeCWiZwwiFf3/Y+O1HrauiE3FVsGxFg8c24rZg==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [arm64] os: [linux] + libc: [glibc] '@img/sharp-linux-arm@0.34.5': resolution: {integrity: sha512-9dLqsvwtg1uuXBGZKsxem9595+ujv0sJ6Vi8wcTANSFpwV/GONat5eCkzQo/1O6zRIkh0m/8+5BjrRr7jDUSZw==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [arm] os: [linux] + libc: [glibc] '@img/sharp-linux-ppc64@0.34.5': resolution: {integrity: sha512-7zznwNaqW6YtsfrGGDA6BRkISKAAE1Jo0QdpNYXNMHu2+0dTrPflTLNkpc8l7MUP5M16ZJcUvysVWWrMefZquA==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [ppc64] os: [linux] + libc: [glibc] '@img/sharp-linux-riscv64@0.34.5': resolution: {integrity: sha512-51gJuLPTKa7piYPaVs8GmByo7/U7/7TZOq+cnXJIHZKavIRHAP77e3N2HEl3dgiqdD/w0yUfiJnII77PuDDFdw==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [riscv64] os: [linux] + libc: [glibc] '@img/sharp-linux-s390x@0.34.5': resolution: {integrity: sha512-nQtCk0PdKfho3eC5MrbQoigJ2gd1CgddUMkabUj+rBevs8tZ2cULOx46E7oyX+04WGfABgIwmMC0VqieTiR4jg==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [s390x] os: [linux] + libc: [glibc] '@img/sharp-linux-x64@0.34.5': resolution: {integrity: sha512-MEzd8HPKxVxVenwAa+JRPwEC7QFjoPWuS5NZnBt6B3pu7EG2Ge0id1oLHZpPJdn3OQK+BQDiw9zStiHBTJQQQQ==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [x64] os: [linux] + libc: [glibc] '@img/sharp-linuxmusl-arm64@0.34.5': resolution: {integrity: sha512-fprJR6GtRsMt6Kyfq44IsChVZeGN97gTD331weR1ex1c1rypDEABN6Tm2xa1wE6lYb5DdEnk03NZPqA7Id21yg==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [arm64] os: [linux] + libc: [musl] '@img/sharp-linuxmusl-x64@0.34.5': resolution: {integrity: sha512-Jg8wNT1MUzIvhBFxViqrEhWDGzqymo3sV7z7ZsaWbZNDLXRJZoRGrjulp60YYtV4wfY8VIKcWidjojlLcWrd8Q==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [x64] os: [linux] + libc: [musl] '@img/sharp-wasm32@0.34.5': resolution: {integrity: sha512-OdWTEiVkY2PHwqkbBI8frFxQQFekHaSSkUIJkwzclWZe64O1X4UlUjqqqLaPbUpMOQk6FBu/HtlGXNblIs0huw==} @@ -3904,30 +3920,35 @@ packages: engines: {node: '>= 10'} cpu: [arm64] os: [linux] + libc: [glibc] '@napi-rs/canvas-linux-arm64-musl@0.1.88': resolution: {integrity: sha512-kYyNrUsHLkoGHBc77u4Unh067GrfiCUMbGHC2+OTxbeWfZkPt2o32UOQkhnSswKd9Fko/wSqqGkY956bIUzruA==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] + libc: [musl] '@napi-rs/canvas-linux-riscv64-gnu@0.1.88': resolution: {integrity: sha512-HVuH7QgzB0yavYdNZDRyAsn/ejoXB0hn8twwFnOqUbCCdkV+REna7RXjSR7+PdfW0qMQ2YYWsLvVBT5iL/mGpw==} engines: {node: '>= 10'} cpu: [riscv64] os: [linux] + libc: [glibc] '@napi-rs/canvas-linux-x64-gnu@0.1.88': resolution: {integrity: sha512-hvcvKIcPEQrvvJtJnwD35B3qk6umFJ8dFIr8bSymfrSMem0EQsfn1ztys8ETIFndTwdNWJKWluvxztA41ivsEw==} engines: {node: '>= 10'} cpu: [x64] os: [linux] + libc: [glibc] '@napi-rs/canvas-linux-x64-musl@0.1.88': resolution: {integrity: sha512-eSMpGYY2xnZSQ6UxYJ6plDboxq4KeJ4zT5HaVkUnbObNN6DlbJe0Mclh3wifAmquXfrlgTZt6zhHsUgz++AK6g==} engines: {node: '>= 10'} cpu: [x64] os: [linux] + libc: [musl] '@napi-rs/canvas-win32-arm64-msvc@0.1.88': resolution: {integrity: sha512-qcIFfEgHrchyYqRrxsCeTQgpJZ/GqHiqPcU/Fvw/ARVlQeDX1VyFH+X+0gCR2tca6UJrq96vnW+5o7buCq+erA==} @@ -4149,36 +4170,42 @@ packages: engines: {node: '>= 10.0.0'} cpu: [arm] os: [linux] + libc: [glibc] '@parcel/watcher-linux-arm-musl@2.5.4': resolution: {integrity: sha512-kGO8RPvVrcAotV4QcWh8kZuHr9bXi9a3bSZw7kFarYR0+fGliU7hd/zevhjw8fnvIKG3J9EO5G6sXNGCSNMYPQ==} engines: {node: '>= 10.0.0'} cpu: [arm] os: [linux] + libc: [musl] '@parcel/watcher-linux-arm64-glibc@2.5.4': resolution: {integrity: sha512-KU75aooXhqGFY2W5/p8DYYHt4hrjHZod8AhcGAmhzPn/etTa+lYCDB2b1sJy3sWJ8ahFVTdy+EbqSBvMx3iFlw==} engines: {node: '>= 10.0.0'} cpu: [arm64] os: [linux] + libc: [glibc] '@parcel/watcher-linux-arm64-musl@2.5.4': resolution: {integrity: sha512-Qx8uNiIekVutnzbVdrgSanM+cbpDD3boB1f8vMtnuG5Zau4/bdDbXyKwIn0ToqFhIuob73bcxV9NwRm04/hzHQ==} engines: {node: '>= 10.0.0'} cpu: [arm64] os: [linux] + libc: [musl] '@parcel/watcher-linux-x64-glibc@2.5.4': resolution: {integrity: sha512-UYBQvhYmgAv61LNUn24qGQdjtycFBKSK3EXr72DbJqX9aaLbtCOO8+1SkKhD/GNiJ97ExgcHBrukcYhVjrnogA==} engines: {node: '>= 10.0.0'} cpu: [x64] os: [linux] + libc: [glibc] '@parcel/watcher-linux-x64-musl@2.5.4': resolution: {integrity: sha512-YoRWCVgxv8akZrMhdyVi6/TyoeeMkQ0PGGOf2E4omODrvd1wxniXP+DBynKoHryStks7l+fDAMUBRzqNHrVOpg==} engines: {node: '>= 10.0.0'} cpu: [x64] os: [linux] + libc: [musl] '@parcel/watcher-win32-arm64@2.5.4': resolution: {integrity: sha512-iby+D/YNXWkiQNYcIhg8P5hSjzXEHaQrk2SLrWOUD7VeC4Ohu0WQvmV+HDJokZVJ2UjJ4AGXW3bx7Lls9Ln4TQ==} @@ -4674,11 +4701,13 @@ packages: resolution: {integrity: sha512-hzBmOtYdC4369XxN2SNJ3oBlXKWNif3ieWBT+oh/qvAeox4fQR0ngqyh+kIGOufBnP5Zc2rqJf9LzIbJw3Tx/Q==} cpu: [arm64] os: [linux] + libc: [glibc] '@rolldown/binding-linux-arm64-musl@1.0.0-beta.29': resolution: {integrity: sha512-6B35GmFJJ4RX88OgubrnUmuJBUgRh6/OTXIpy8m/VUnoc683lufIPo26HW/0LxLgxp2GM7KHr3LOULcVxbqq4Q==} cpu: [arm64] os: [linux] + libc: [musl] '@rolldown/binding-linux-arm64-ohos@1.0.0-beta.29': resolution: {integrity: sha512-z3ru8fUCunQM8q9I7RbDVMT5cxzxVVVBNNKM5/qAQQrdObd1u8g0LR5z0yLtaFWzybwLVdPtJDRcXtLm5tOBFA==} @@ -4689,11 +4718,13 @@ packages: resolution: {integrity: sha512-n6fs4L7j99MIiI6vKhQDdyScv4/uMAPtIMkB0zGbUX8MKWT1osym1hvWVdlENjnS/Phf0zzhjyOgoFDzdhI1cQ==} cpu: [x64] os: [linux] + libc: [glibc] '@rolldown/binding-linux-x64-musl@1.0.0-beta.29': resolution: {integrity: sha512-C5hcJgtDN4rp6/WsPTQSDVUWrdnIC//ynMGcUIh1O0anm9KnSy47zKQ5D9EqtlEKvO+2PPqmyUVJ2DTq18nlVA==} cpu: [x64] os: [linux] + libc: [musl] '@rolldown/binding-wasm32-wasi@1.0.0-beta.29': resolution: {integrity: sha512-lMN1IBItdZFO182Sdus9oVuNDqyIymn/bsR5KwgeGaiqLsrmpQHBSLwkS/nKJO1nzYlpGDRugFSpnrSJ5ZmihQ==} @@ -4833,56 +4864,67 @@ packages: resolution: {integrity: sha512-aL6hRwu0k7MTUESgkg7QHY6CoqPgr6gdQXRJI1/VbFlUMwsSzPGSR7sG5d+MCbYnJmJwThc2ol3nixj1fvI/zQ==} cpu: [arm] os: [linux] + libc: [glibc] '@rollup/rollup-linux-arm-musleabihf@4.52.0': resolution: {integrity: sha512-BTs0M5s1EJejgIBJhCeiFo7GZZ2IXWkFGcyZhxX4+8usnIo5Mti57108vjXFIQmmJaRyDwmV59Tw64Ap1dkwMw==} cpu: [arm] os: [linux] + libc: [musl] '@rollup/rollup-linux-arm64-gnu@4.52.0': resolution: {integrity: sha512-uj672IVOU9m08DBGvoPKPi/J8jlVgjh12C9GmjjBxCTQc3XtVmRkRKyeHSmIKQpvJ7fIm1EJieBUcnGSzDVFyw==} cpu: [arm64] os: [linux] + libc: [glibc] '@rollup/rollup-linux-arm64-musl@4.52.0': resolution: {integrity: sha512-/+IVbeDMDCtB/HP/wiWsSzduD10SEGzIZX2945KSgZRNi4TSkjHqRJtNTVtVb8IRwhJ65ssI56krlLik+zFWkw==} cpu: [arm64] os: [linux] + libc: [musl] '@rollup/rollup-linux-loong64-gnu@4.52.0': resolution: {integrity: sha512-U1vVzvSWtSMWKKrGoROPBXMh3Vwn93TA9V35PldokHGqiUbF6erSzox/5qrSMKp6SzakvyjcPiVF8yB1xKr9Pg==} cpu: [loong64] os: [linux] + libc: [glibc] '@rollup/rollup-linux-ppc64-gnu@4.52.0': resolution: {integrity: sha512-X/4WfuBAdQRH8cK3DYl8zC00XEE6aM472W+QCycpQJeLWVnHfkv7RyBFVaTqNUMsTgIX8ihMjCvFF9OUgeABzw==} cpu: [ppc64] os: [linux] + libc: [glibc] '@rollup/rollup-linux-riscv64-gnu@4.52.0': resolution: {integrity: sha512-xIRYc58HfWDBZoLmWfWXg2Sq8VCa2iJ32B7mqfWnkx5mekekl0tMe7FHpY8I72RXEcUkaWawRvl3qA55og+cwQ==} cpu: [riscv64] os: [linux] + libc: [glibc] '@rollup/rollup-linux-riscv64-musl@4.52.0': resolution: {integrity: sha512-mbsoUey05WJIOz8U1WzNdf+6UMYGwE3fZZnQqsM22FZ3wh1N887HT6jAOjXs6CNEK3Ntu2OBsyQDXfIjouI4dw==} cpu: [riscv64] os: [linux] + libc: [musl] '@rollup/rollup-linux-s390x-gnu@4.52.0': resolution: {integrity: sha512-qP6aP970bucEi5KKKR4AuPFd8aTx9EF6BvutvYxmZuWLJHmnq4LvBfp0U+yFDMGwJ+AIJEH5sIP+SNypauMWzg==} cpu: [s390x] os: [linux] + libc: [glibc] '@rollup/rollup-linux-x64-gnu@4.52.0': resolution: {integrity: sha512-nmSVN+F2i1yKZ7rJNKO3G7ZzmxJgoQBQZ/6c4MuS553Grmr7WqR7LLDcYG53Z2m9409z3JLt4sCOhLdbKQ3HmA==} cpu: [x64] os: [linux] + libc: [glibc] '@rollup/rollup-linux-x64-musl@4.52.0': resolution: {integrity: sha512-2d0qRo33G6TfQVjaMR71P+yJVGODrt5V6+T0BDYH4EMfGgdC/2HWDVjSSFw888GSzAZUwuska3+zxNUCDco6rQ==} cpu: [x64] os: [linux] + libc: [musl] '@rollup/rollup-openharmony-arm64@4.52.0': resolution: {integrity: sha512-A1JalX4MOaFAAyGgpO7XP5khquv/7xKzLIyLmhNrbiCxWpMlnsTYr8dnsWM7sEeotNmxvSOEL7F65j0HXFcFsw==} @@ -5241,24 +5283,28 @@ packages: engines: {node: '>=10'} cpu: [arm64] os: [linux] + libc: [glibc] '@swc/core-linux-arm64-musl@1.11.29': resolution: {integrity: sha512-PwjB10BC0N+Ce7RU/L23eYch6lXFHz7r3NFavIcwDNa/AAqywfxyxh13OeRy+P0cg7NDpWEETWspXeI4Ek8otw==} engines: {node: '>=10'} cpu: [arm64] os: [linux] + libc: [musl] '@swc/core-linux-x64-gnu@1.11.29': resolution: {integrity: sha512-i62vBVoPaVe9A3mc6gJG07n0/e7FVeAvdD9uzZTtGLiuIfVfIBta8EMquzvf+POLycSk79Z6lRhGPZPJPYiQaA==} engines: {node: '>=10'} cpu: [x64] os: [linux] + libc: [glibc] '@swc/core-linux-x64-musl@1.11.29': resolution: {integrity: sha512-YER0XU1xqFdK0hKkfSVX1YIyCvMDI7K07GIpefPvcfyNGs38AXKhb2byySDjbVxkdl4dycaxxhRyhQ2gKSlsFQ==} engines: {node: '>=10'} cpu: [x64] os: [linux] + libc: [musl] '@swc/core-win32-arm64-msvc@1.11.29': resolution: {integrity: sha512-po+WHw+k9g6FAg5IJ+sMwtA/fIUL3zPQ4m/uJgONBATCVnDDkyW6dBA49uHNVtSEvjvhuD8DVWdFP847YTcITw==} @@ -10271,24 +10317,28 @@ packages: engines: {node: '>= 12.0.0'} cpu: [arm64] os: [linux] + libc: [glibc] lightningcss-linux-arm64-musl@1.31.1: resolution: {integrity: sha512-mVZ7Pg2zIbe3XlNbZJdjs86YViQFoJSpc41CbVmKBPiGmC4YrfeOyz65ms2qpAobVd7WQsbW4PdsSJEMymyIMg==} engines: {node: '>= 12.0.0'} cpu: [arm64] os: [linux] + libc: [musl] lightningcss-linux-x64-gnu@1.31.1: resolution: {integrity: sha512-xGlFWRMl+0KvUhgySdIaReQdB4FNudfUTARn7q0hh/V67PVGCs3ADFjw+6++kG1RNd0zdGRlEKa+T13/tQjPMA==} engines: {node: '>= 12.0.0'} cpu: [x64] os: [linux] + libc: [glibc] lightningcss-linux-x64-musl@1.31.1: resolution: {integrity: sha512-eowF8PrKHw9LpoZii5tdZwnBcYDxRw2rRCyvAXLi34iyeYfqCQNA9rmUM0ce62NlPhCvof1+9ivRaTY6pSKDaA==} engines: {node: '>= 12.0.0'} cpu: [x64] os: [linux] + libc: [musl] lightningcss-win32-arm64-msvc@1.31.1: resolution: {integrity: sha512-aJReEbSEQzx1uBlQizAOBSjcmr9dCdL3XuC/6HLXAxmtErsj2ICo5yYggg1qOODQMtnjNQv2UHb9NpOuFtYe4w==} @@ -13005,48 +13055,56 @@ packages: engines: {node: '>=14.0.0'} cpu: [arm64] os: [linux] + libc: glibc sass-embedded-linux-arm@1.91.0: resolution: {integrity: sha512-ppAZLp3eZ9oTjYdQDf4nM7EehDpkxq5H1hE8FOrx8LpY7pxn6QF+SRpAbRjdfFChRw0K7vh+IiCnQEMp7uLNAg==} engines: {node: '>=14.0.0'} cpu: [arm] os: [linux] + libc: glibc sass-embedded-linux-musl-arm64@1.91.0: resolution: {integrity: sha512-VfbPpID1C5TT7rukob6CKgefx/TsLE+XZieMNd00hvfJ8XhqPr5DGvSMCNpXlwaedzTirbJu357m+n2PJI9TFQ==} engines: {node: '>=14.0.0'} cpu: [arm64] os: [linux] + libc: musl sass-embedded-linux-musl-arm@1.91.0: resolution: {integrity: sha512-znEsNC2FurPF9+XwQQ6e/fVoic3e5D3/kMB41t/bE8byJVRdaPhkdsszt3pZUE56nNGYoCuieSXUkk7VvyPHsw==} engines: {node: '>=14.0.0'} cpu: [arm] os: [linux] + libc: musl sass-embedded-linux-musl-riscv64@1.91.0: resolution: {integrity: sha512-ZfLGldKEEeZjuljKks835LTq7jDRI3gXsKKXXgZGzN6Yymd4UpBOGWiDQlWsWTvw5UwDU2xfFh0wSXbLGHTjVA==} engines: {node: '>=14.0.0'} cpu: [riscv64] os: [linux] + libc: musl sass-embedded-linux-musl-x64@1.91.0: resolution: {integrity: sha512-4kSiSGPKFMbLvTRbP/ibyiKheOA3fwsJKWU0SOuekSPmybMdrhNkTm0REp6+nehZRE60kC3lXmEV4a7w8Jrwyg==} engines: {node: '>=14.0.0'} cpu: [x64] os: [linux] + libc: musl sass-embedded-linux-riscv64@1.91.0: resolution: {integrity: sha512-Y3Fj94SYYvMX9yo49T78yBgBWXtG3EyYUT5K05XyCYkcdl1mVXJSrEmqmRfe4vQGUCaSe/6s7MmsA9Q+mQez7Q==} engines: {node: '>=14.0.0'} cpu: [riscv64] os: [linux] + libc: glibc sass-embedded-linux-x64@1.91.0: resolution: {integrity: sha512-XwIUaE7pQP/ezS5te80hlyheYiUlo0FolQ0HBtxohpavM+DVX2fjwFm5LOUJHrLAqP+TLBtChfFeLj1Ie4Aenw==} engines: {node: '>=14.0.0'} cpu: [x64] os: [linux] + libc: glibc sass-embedded-unknown-all@1.91.0: resolution: {integrity: sha512-Bj6v7ScQp/HtO91QBy6ood9AArSIN7/RNcT4E7P9QoY3o+e6621Vd28lV81vdepPrt6u6PgJoVKmLNODqB6Q+A==} @@ -13893,6 +13951,10 @@ packages: engines: {node: '>=18'} deprecated: Old versions of tar are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exhorbitant rates) by contacting i@izs.me + tar@7.5.7: + resolution: {integrity: sha512-fov56fJiRuThVFXD6o6/Q354S7pnWMJIVlDBYijsTNx6jKSE4pvrDTs6lUnmGvNyfJwFQQwWy3owKz1ucIhveQ==} + engines: {node: '>=18'} + temp@0.9.4: resolution: {integrity: sha512-yYrrsWnrXMcdsnu/7YMYAofM1ktpL5By7vZhf15CrXijWWrEYZks5AXBudalfSWJLlnen/QUJUB5aoB0kqZUGA==} engines: {node: '>=6.0.0'} @@ -16047,6 +16109,8 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.4.0 '@ckeditor/ckeditor5-watchdog': 47.4.0 es-toolkit: 1.39.5 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-dev-build-tools@54.3.2(@swc/helpers@0.5.17)(tslib@2.8.1)(typescript@5.9.3)': dependencies: @@ -16223,8 +16287,6 @@ snapshots: '@ckeditor/ckeditor5-table': 47.4.0 '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-emoji@47.4.0': dependencies: @@ -16250,8 +16312,6 @@ snapshots: '@ckeditor/ckeditor5-core': 47.4.0 '@ckeditor/ckeditor5-engine': 47.4.0 '@ckeditor/ckeditor5-utils': 47.4.0 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-essentials@47.4.0': dependencies: @@ -16372,8 +16432,6 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.4.0 '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-horizontal-line@47.4.0': dependencies: @@ -16556,8 +16614,6 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.4.0 '@ckeditor/ckeditor5-widget': 47.4.0 ckeditor5: 47.4.0 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-mention@47.4.0(patch_hash=5981fb59ba35829e4dff1d39cf771000f8a8fdfa7a34b51d8af9549541f2d62d)': dependencies: @@ -16712,8 +16768,6 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.4.0 '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-restricted-editing@47.4.0': dependencies: @@ -16800,8 +16854,6 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.4.0 '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-special-characters@47.4.0': dependencies: @@ -17585,7 +17637,7 @@ snapshots: - bluebird - supports-color - '@electron/rebuild@4.0.2': + '@electron/rebuild@4.0.3': dependencies: '@malept/cross-spawn-promise': 2.0.0 debug: 4.4.3(supports-color@8.1.1) @@ -17598,7 +17650,7 @@ snapshots: ora: 5.4.1 read-binary-file-arch: 1.0.6 semver: 7.7.3 - tar: 6.2.1 + tar: 7.5.7 yargs: 17.7.2 transitivePeerDependencies: - supports-color @@ -22511,7 +22563,7 @@ snapshots: minipass-pipeline: 1.2.4 p-map: 7.0.4 ssri: 12.0.0 - tar: 7.4.3 + tar: 7.5.7 unique-filename: 4.0.0 cacache@20.0.1: @@ -27985,7 +28037,7 @@ snapshots: nopt: 8.1.0 proc-log: 5.0.0 semver: 7.7.3 - tar: 7.4.3 + tar: 7.5.7 tinyglobby: 0.2.15 which: 5.0.0 transitivePeerDependencies: @@ -31243,6 +31295,14 @@ snapshots: mkdirp: 3.0.1 yallist: 5.0.0 + tar@7.5.7: + dependencies: + '@isaacs/fs-minipass': 4.0.1 + chownr: 3.0.0 + minipass: 7.1.2 + minizlib: 3.1.0 + yallist: 5.0.0 + temp@0.9.4: dependencies: mkdirp: 0.5.6 From d668d9f24da76707a43ba2028552090e534f310f Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 29 Jan 2026 00:57:40 +0000 Subject: [PATCH 345/353] chore(deps): update dependency axios to v1.13.4 --- apps/server/package.json | 2 +- pnpm-lock.yaml | 76 ++++++++++++++++++++++++++++++++++------ 2 files changed, 66 insertions(+), 12 deletions(-) diff --git a/apps/server/package.json b/apps/server/package.json index bd0beeed83..35965881d2 100644 --- a/apps/server/package.json +++ b/apps/server/package.json @@ -70,7 +70,7 @@ "@types/xml2js": "0.4.14", "archiver": "7.0.1", "async-mutex": "0.5.0", - "axios": "1.13.3", + "axios": "1.13.4", "bindings": "1.5.0", "bootstrap": "5.3.8", "chardet": "2.1.1", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index f9498858ad..af3f79fa7d 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -625,8 +625,8 @@ importers: specifier: 0.5.0 version: 0.5.0 axios: - specifier: 1.13.3 - version: 1.13.3(debug@4.4.3) + specifier: 1.13.4 + version: 1.13.4(debug@4.4.3) bindings: specifier: 1.5.0 version: 1.5.0 @@ -3327,89 +3327,105 @@ packages: resolution: {integrity: sha512-excjX8DfsIcJ10x1Kzr4RcWe1edC9PquDRRPx3YVCvQv+U5p7Yin2s32ftzikXojb1PIFc/9Mt28/y+iRklkrw==} cpu: [arm64] os: [linux] + libc: [glibc] '@img/sharp-libvips-linux-arm@1.2.4': resolution: {integrity: sha512-bFI7xcKFELdiNCVov8e44Ia4u2byA+l3XtsAj+Q8tfCwO6BQ8iDojYdvoPMqsKDkuoOo+X6HZA0s0q11ANMQ8A==} cpu: [arm] os: [linux] + libc: [glibc] '@img/sharp-libvips-linux-ppc64@1.2.4': resolution: {integrity: sha512-FMuvGijLDYG6lW+b/UvyilUWu5Ayu+3r2d1S8notiGCIyYU/76eig1UfMmkZ7vwgOrzKzlQbFSuQfgm7GYUPpA==} cpu: [ppc64] os: [linux] + libc: [glibc] '@img/sharp-libvips-linux-riscv64@1.2.4': resolution: {integrity: sha512-oVDbcR4zUC0ce82teubSm+x6ETixtKZBh/qbREIOcI3cULzDyb18Sr/Wcyx7NRQeQzOiHTNbZFF1UwPS2scyGA==} cpu: [riscv64] os: [linux] + libc: [glibc] '@img/sharp-libvips-linux-s390x@1.2.4': resolution: {integrity: sha512-qmp9VrzgPgMoGZyPvrQHqk02uyjA0/QrTO26Tqk6l4ZV0MPWIW6LTkqOIov+J1yEu7MbFQaDpwdwJKhbJvuRxQ==} cpu: [s390x] os: [linux] + libc: [glibc] '@img/sharp-libvips-linux-x64@1.2.4': resolution: {integrity: sha512-tJxiiLsmHc9Ax1bz3oaOYBURTXGIRDODBqhveVHonrHJ9/+k89qbLl0bcJns+e4t4rvaNBxaEZsFtSfAdquPrw==} cpu: [x64] os: [linux] + libc: [glibc] '@img/sharp-libvips-linuxmusl-arm64@1.2.4': resolution: {integrity: sha512-FVQHuwx1IIuNow9QAbYUzJ+En8KcVm9Lk5+uGUQJHaZmMECZmOlix9HnH7n1TRkXMS0pGxIJokIVB9SuqZGGXw==} cpu: [arm64] os: [linux] + libc: [musl] '@img/sharp-libvips-linuxmusl-x64@1.2.4': resolution: {integrity: sha512-+LpyBk7L44ZIXwz/VYfglaX/okxezESc6UxDSoyo2Ks6Jxc4Y7sGjpgU9s4PMgqgjj1gZCylTieNamqA1MF7Dg==} cpu: [x64] os: [linux] + libc: [musl] '@img/sharp-linux-arm64@0.34.5': resolution: {integrity: sha512-bKQzaJRY/bkPOXyKx5EVup7qkaojECG6NLYswgktOZjaXecSAeCWiZwwiFf3/Y+O1HrauiE3FVsGxFg8c24rZg==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [arm64] os: [linux] + libc: [glibc] '@img/sharp-linux-arm@0.34.5': resolution: {integrity: sha512-9dLqsvwtg1uuXBGZKsxem9595+ujv0sJ6Vi8wcTANSFpwV/GONat5eCkzQo/1O6zRIkh0m/8+5BjrRr7jDUSZw==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [arm] os: [linux] + libc: [glibc] '@img/sharp-linux-ppc64@0.34.5': resolution: {integrity: sha512-7zznwNaqW6YtsfrGGDA6BRkISKAAE1Jo0QdpNYXNMHu2+0dTrPflTLNkpc8l7MUP5M16ZJcUvysVWWrMefZquA==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [ppc64] os: [linux] + libc: [glibc] '@img/sharp-linux-riscv64@0.34.5': resolution: {integrity: sha512-51gJuLPTKa7piYPaVs8GmByo7/U7/7TZOq+cnXJIHZKavIRHAP77e3N2HEl3dgiqdD/w0yUfiJnII77PuDDFdw==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [riscv64] os: [linux] + libc: [glibc] '@img/sharp-linux-s390x@0.34.5': resolution: {integrity: sha512-nQtCk0PdKfho3eC5MrbQoigJ2gd1CgddUMkabUj+rBevs8tZ2cULOx46E7oyX+04WGfABgIwmMC0VqieTiR4jg==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [s390x] os: [linux] + libc: [glibc] '@img/sharp-linux-x64@0.34.5': resolution: {integrity: sha512-MEzd8HPKxVxVenwAa+JRPwEC7QFjoPWuS5NZnBt6B3pu7EG2Ge0id1oLHZpPJdn3OQK+BQDiw9zStiHBTJQQQQ==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [x64] os: [linux] + libc: [glibc] '@img/sharp-linuxmusl-arm64@0.34.5': resolution: {integrity: sha512-fprJR6GtRsMt6Kyfq44IsChVZeGN97gTD331weR1ex1c1rypDEABN6Tm2xa1wE6lYb5DdEnk03NZPqA7Id21yg==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [arm64] os: [linux] + libc: [musl] '@img/sharp-linuxmusl-x64@0.34.5': resolution: {integrity: sha512-Jg8wNT1MUzIvhBFxViqrEhWDGzqymo3sV7z7ZsaWbZNDLXRJZoRGrjulp60YYtV4wfY8VIKcWidjojlLcWrd8Q==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [x64] os: [linux] + libc: [musl] '@img/sharp-wasm32@0.34.5': resolution: {integrity: sha512-OdWTEiVkY2PHwqkbBI8frFxQQFekHaSSkUIJkwzclWZe64O1X4UlUjqqqLaPbUpMOQk6FBu/HtlGXNblIs0huw==} @@ -3904,30 +3920,35 @@ packages: engines: {node: '>= 10'} cpu: [arm64] os: [linux] + libc: [glibc] '@napi-rs/canvas-linux-arm64-musl@0.1.88': resolution: {integrity: sha512-kYyNrUsHLkoGHBc77u4Unh067GrfiCUMbGHC2+OTxbeWfZkPt2o32UOQkhnSswKd9Fko/wSqqGkY956bIUzruA==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] + libc: [musl] '@napi-rs/canvas-linux-riscv64-gnu@0.1.88': resolution: {integrity: sha512-HVuH7QgzB0yavYdNZDRyAsn/ejoXB0hn8twwFnOqUbCCdkV+REna7RXjSR7+PdfW0qMQ2YYWsLvVBT5iL/mGpw==} engines: {node: '>= 10'} cpu: [riscv64] os: [linux] + libc: [glibc] '@napi-rs/canvas-linux-x64-gnu@0.1.88': resolution: {integrity: sha512-hvcvKIcPEQrvvJtJnwD35B3qk6umFJ8dFIr8bSymfrSMem0EQsfn1ztys8ETIFndTwdNWJKWluvxztA41ivsEw==} engines: {node: '>= 10'} cpu: [x64] os: [linux] + libc: [glibc] '@napi-rs/canvas-linux-x64-musl@0.1.88': resolution: {integrity: sha512-eSMpGYY2xnZSQ6UxYJ6plDboxq4KeJ4zT5HaVkUnbObNN6DlbJe0Mclh3wifAmquXfrlgTZt6zhHsUgz++AK6g==} engines: {node: '>= 10'} cpu: [x64] os: [linux] + libc: [musl] '@napi-rs/canvas-win32-arm64-msvc@0.1.88': resolution: {integrity: sha512-qcIFfEgHrchyYqRrxsCeTQgpJZ/GqHiqPcU/Fvw/ARVlQeDX1VyFH+X+0gCR2tca6UJrq96vnW+5o7buCq+erA==} @@ -4149,36 +4170,42 @@ packages: engines: {node: '>= 10.0.0'} cpu: [arm] os: [linux] + libc: [glibc] '@parcel/watcher-linux-arm-musl@2.5.4': resolution: {integrity: sha512-kGO8RPvVrcAotV4QcWh8kZuHr9bXi9a3bSZw7kFarYR0+fGliU7hd/zevhjw8fnvIKG3J9EO5G6sXNGCSNMYPQ==} engines: {node: '>= 10.0.0'} cpu: [arm] os: [linux] + libc: [musl] '@parcel/watcher-linux-arm64-glibc@2.5.4': resolution: {integrity: sha512-KU75aooXhqGFY2W5/p8DYYHt4hrjHZod8AhcGAmhzPn/etTa+lYCDB2b1sJy3sWJ8ahFVTdy+EbqSBvMx3iFlw==} engines: {node: '>= 10.0.0'} cpu: [arm64] os: [linux] + libc: [glibc] '@parcel/watcher-linux-arm64-musl@2.5.4': resolution: {integrity: sha512-Qx8uNiIekVutnzbVdrgSanM+cbpDD3boB1f8vMtnuG5Zau4/bdDbXyKwIn0ToqFhIuob73bcxV9NwRm04/hzHQ==} engines: {node: '>= 10.0.0'} cpu: [arm64] os: [linux] + libc: [musl] '@parcel/watcher-linux-x64-glibc@2.5.4': resolution: {integrity: sha512-UYBQvhYmgAv61LNUn24qGQdjtycFBKSK3EXr72DbJqX9aaLbtCOO8+1SkKhD/GNiJ97ExgcHBrukcYhVjrnogA==} engines: {node: '>= 10.0.0'} cpu: [x64] os: [linux] + libc: [glibc] '@parcel/watcher-linux-x64-musl@2.5.4': resolution: {integrity: sha512-YoRWCVgxv8akZrMhdyVi6/TyoeeMkQ0PGGOf2E4omODrvd1wxniXP+DBynKoHryStks7l+fDAMUBRzqNHrVOpg==} engines: {node: '>= 10.0.0'} cpu: [x64] os: [linux] + libc: [musl] '@parcel/watcher-win32-arm64@2.5.4': resolution: {integrity: sha512-iby+D/YNXWkiQNYcIhg8P5hSjzXEHaQrk2SLrWOUD7VeC4Ohu0WQvmV+HDJokZVJ2UjJ4AGXW3bx7Lls9Ln4TQ==} @@ -4674,11 +4701,13 @@ packages: resolution: {integrity: sha512-hzBmOtYdC4369XxN2SNJ3oBlXKWNif3ieWBT+oh/qvAeox4fQR0ngqyh+kIGOufBnP5Zc2rqJf9LzIbJw3Tx/Q==} cpu: [arm64] os: [linux] + libc: [glibc] '@rolldown/binding-linux-arm64-musl@1.0.0-beta.29': resolution: {integrity: sha512-6B35GmFJJ4RX88OgubrnUmuJBUgRh6/OTXIpy8m/VUnoc683lufIPo26HW/0LxLgxp2GM7KHr3LOULcVxbqq4Q==} cpu: [arm64] os: [linux] + libc: [musl] '@rolldown/binding-linux-arm64-ohos@1.0.0-beta.29': resolution: {integrity: sha512-z3ru8fUCunQM8q9I7RbDVMT5cxzxVVVBNNKM5/qAQQrdObd1u8g0LR5z0yLtaFWzybwLVdPtJDRcXtLm5tOBFA==} @@ -4689,11 +4718,13 @@ packages: resolution: {integrity: sha512-n6fs4L7j99MIiI6vKhQDdyScv4/uMAPtIMkB0zGbUX8MKWT1osym1hvWVdlENjnS/Phf0zzhjyOgoFDzdhI1cQ==} cpu: [x64] os: [linux] + libc: [glibc] '@rolldown/binding-linux-x64-musl@1.0.0-beta.29': resolution: {integrity: sha512-C5hcJgtDN4rp6/WsPTQSDVUWrdnIC//ynMGcUIh1O0anm9KnSy47zKQ5D9EqtlEKvO+2PPqmyUVJ2DTq18nlVA==} cpu: [x64] os: [linux] + libc: [musl] '@rolldown/binding-wasm32-wasi@1.0.0-beta.29': resolution: {integrity: sha512-lMN1IBItdZFO182Sdus9oVuNDqyIymn/bsR5KwgeGaiqLsrmpQHBSLwkS/nKJO1nzYlpGDRugFSpnrSJ5ZmihQ==} @@ -4833,56 +4864,67 @@ packages: resolution: {integrity: sha512-aL6hRwu0k7MTUESgkg7QHY6CoqPgr6gdQXRJI1/VbFlUMwsSzPGSR7sG5d+MCbYnJmJwThc2ol3nixj1fvI/zQ==} cpu: [arm] os: [linux] + libc: [glibc] '@rollup/rollup-linux-arm-musleabihf@4.52.0': resolution: {integrity: sha512-BTs0M5s1EJejgIBJhCeiFo7GZZ2IXWkFGcyZhxX4+8usnIo5Mti57108vjXFIQmmJaRyDwmV59Tw64Ap1dkwMw==} cpu: [arm] os: [linux] + libc: [musl] '@rollup/rollup-linux-arm64-gnu@4.52.0': resolution: {integrity: sha512-uj672IVOU9m08DBGvoPKPi/J8jlVgjh12C9GmjjBxCTQc3XtVmRkRKyeHSmIKQpvJ7fIm1EJieBUcnGSzDVFyw==} cpu: [arm64] os: [linux] + libc: [glibc] '@rollup/rollup-linux-arm64-musl@4.52.0': resolution: {integrity: sha512-/+IVbeDMDCtB/HP/wiWsSzduD10SEGzIZX2945KSgZRNi4TSkjHqRJtNTVtVb8IRwhJ65ssI56krlLik+zFWkw==} cpu: [arm64] os: [linux] + libc: [musl] '@rollup/rollup-linux-loong64-gnu@4.52.0': resolution: {integrity: sha512-U1vVzvSWtSMWKKrGoROPBXMh3Vwn93TA9V35PldokHGqiUbF6erSzox/5qrSMKp6SzakvyjcPiVF8yB1xKr9Pg==} cpu: [loong64] os: [linux] + libc: [glibc] '@rollup/rollup-linux-ppc64-gnu@4.52.0': resolution: {integrity: sha512-X/4WfuBAdQRH8cK3DYl8zC00XEE6aM472W+QCycpQJeLWVnHfkv7RyBFVaTqNUMsTgIX8ihMjCvFF9OUgeABzw==} cpu: [ppc64] os: [linux] + libc: [glibc] '@rollup/rollup-linux-riscv64-gnu@4.52.0': resolution: {integrity: sha512-xIRYc58HfWDBZoLmWfWXg2Sq8VCa2iJ32B7mqfWnkx5mekekl0tMe7FHpY8I72RXEcUkaWawRvl3qA55og+cwQ==} cpu: [riscv64] os: [linux] + libc: [glibc] '@rollup/rollup-linux-riscv64-musl@4.52.0': resolution: {integrity: sha512-mbsoUey05WJIOz8U1WzNdf+6UMYGwE3fZZnQqsM22FZ3wh1N887HT6jAOjXs6CNEK3Ntu2OBsyQDXfIjouI4dw==} cpu: [riscv64] os: [linux] + libc: [musl] '@rollup/rollup-linux-s390x-gnu@4.52.0': resolution: {integrity: sha512-qP6aP970bucEi5KKKR4AuPFd8aTx9EF6BvutvYxmZuWLJHmnq4LvBfp0U+yFDMGwJ+AIJEH5sIP+SNypauMWzg==} cpu: [s390x] os: [linux] + libc: [glibc] '@rollup/rollup-linux-x64-gnu@4.52.0': resolution: {integrity: sha512-nmSVN+F2i1yKZ7rJNKO3G7ZzmxJgoQBQZ/6c4MuS553Grmr7WqR7LLDcYG53Z2m9409z3JLt4sCOhLdbKQ3HmA==} cpu: [x64] os: [linux] + libc: [glibc] '@rollup/rollup-linux-x64-musl@4.52.0': resolution: {integrity: sha512-2d0qRo33G6TfQVjaMR71P+yJVGODrt5V6+T0BDYH4EMfGgdC/2HWDVjSSFw888GSzAZUwuska3+zxNUCDco6rQ==} cpu: [x64] os: [linux] + libc: [musl] '@rollup/rollup-openharmony-arm64@4.52.0': resolution: {integrity: sha512-A1JalX4MOaFAAyGgpO7XP5khquv/7xKzLIyLmhNrbiCxWpMlnsTYr8dnsWM7sEeotNmxvSOEL7F65j0HXFcFsw==} @@ -5241,24 +5283,28 @@ packages: engines: {node: '>=10'} cpu: [arm64] os: [linux] + libc: [glibc] '@swc/core-linux-arm64-musl@1.11.29': resolution: {integrity: sha512-PwjB10BC0N+Ce7RU/L23eYch6lXFHz7r3NFavIcwDNa/AAqywfxyxh13OeRy+P0cg7NDpWEETWspXeI4Ek8otw==} engines: {node: '>=10'} cpu: [arm64] os: [linux] + libc: [musl] '@swc/core-linux-x64-gnu@1.11.29': resolution: {integrity: sha512-i62vBVoPaVe9A3mc6gJG07n0/e7FVeAvdD9uzZTtGLiuIfVfIBta8EMquzvf+POLycSk79Z6lRhGPZPJPYiQaA==} engines: {node: '>=10'} cpu: [x64] os: [linux] + libc: [glibc] '@swc/core-linux-x64-musl@1.11.29': resolution: {integrity: sha512-YER0XU1xqFdK0hKkfSVX1YIyCvMDI7K07GIpefPvcfyNGs38AXKhb2byySDjbVxkdl4dycaxxhRyhQ2gKSlsFQ==} engines: {node: '>=10'} cpu: [x64] os: [linux] + libc: [musl] '@swc/core-win32-arm64-msvc@1.11.29': resolution: {integrity: sha512-po+WHw+k9g6FAg5IJ+sMwtA/fIUL3zPQ4m/uJgONBATCVnDDkyW6dBA49uHNVtSEvjvhuD8DVWdFP847YTcITw==} @@ -6550,8 +6596,8 @@ packages: resolution: {integrity: sha512-zJAaP9zxTcvTHRlejau3ZOY4V7SRpiByf3/dxx2uyKxxor19tpmpV2QRsTKikckwhaPmr2dVpxxMr7jOCYVp5g==} engines: {node: '>=6.0.0'} - axios@1.13.3: - resolution: {integrity: sha512-ERT8kdX7DZjtUm7IitEyV7InTHAF42iJuMArIiDIV5YtPanJkgw4hw5Dyg9fh0mihdWNn1GKaeIWErfe56UQ1g==} + axios@1.13.4: + resolution: {integrity: sha512-1wVkUaAO6WyaYtCkcYCOx12ZgpGf9Zif+qXa4n+oYzK558YryKqiL6UWwd5DqiH3VRW0GYhTZQ/vlgJrCoNQlg==} b4a@1.6.7: resolution: {integrity: sha512-OnAYlL5b7LEkALw87fUVafQw5rVR9RjwGd4KUwNQ6DrrNmaVaUCgLipfVlzrPQ4tWOR9P0IXGNOx50jYCCdSJg==} @@ -10271,24 +10317,28 @@ packages: engines: {node: '>= 12.0.0'} cpu: [arm64] os: [linux] + libc: [glibc] lightningcss-linux-arm64-musl@1.31.1: resolution: {integrity: sha512-mVZ7Pg2zIbe3XlNbZJdjs86YViQFoJSpc41CbVmKBPiGmC4YrfeOyz65ms2qpAobVd7WQsbW4PdsSJEMymyIMg==} engines: {node: '>= 12.0.0'} cpu: [arm64] os: [linux] + libc: [musl] lightningcss-linux-x64-gnu@1.31.1: resolution: {integrity: sha512-xGlFWRMl+0KvUhgySdIaReQdB4FNudfUTARn7q0hh/V67PVGCs3ADFjw+6++kG1RNd0zdGRlEKa+T13/tQjPMA==} engines: {node: '>= 12.0.0'} cpu: [x64] os: [linux] + libc: [glibc] lightningcss-linux-x64-musl@1.31.1: resolution: {integrity: sha512-eowF8PrKHw9LpoZii5tdZwnBcYDxRw2rRCyvAXLi34iyeYfqCQNA9rmUM0ce62NlPhCvof1+9ivRaTY6pSKDaA==} engines: {node: '>= 12.0.0'} cpu: [x64] os: [linux] + libc: [musl] lightningcss-win32-arm64-msvc@1.31.1: resolution: {integrity: sha512-aJReEbSEQzx1uBlQizAOBSjcmr9dCdL3XuC/6HLXAxmtErsj2ICo5yYggg1qOODQMtnjNQv2UHb9NpOuFtYe4w==} @@ -13005,48 +13055,56 @@ packages: engines: {node: '>=14.0.0'} cpu: [arm64] os: [linux] + libc: glibc sass-embedded-linux-arm@1.91.0: resolution: {integrity: sha512-ppAZLp3eZ9oTjYdQDf4nM7EehDpkxq5H1hE8FOrx8LpY7pxn6QF+SRpAbRjdfFChRw0K7vh+IiCnQEMp7uLNAg==} engines: {node: '>=14.0.0'} cpu: [arm] os: [linux] + libc: glibc sass-embedded-linux-musl-arm64@1.91.0: resolution: {integrity: sha512-VfbPpID1C5TT7rukob6CKgefx/TsLE+XZieMNd00hvfJ8XhqPr5DGvSMCNpXlwaedzTirbJu357m+n2PJI9TFQ==} engines: {node: '>=14.0.0'} cpu: [arm64] os: [linux] + libc: musl sass-embedded-linux-musl-arm@1.91.0: resolution: {integrity: sha512-znEsNC2FurPF9+XwQQ6e/fVoic3e5D3/kMB41t/bE8byJVRdaPhkdsszt3pZUE56nNGYoCuieSXUkk7VvyPHsw==} engines: {node: '>=14.0.0'} cpu: [arm] os: [linux] + libc: musl sass-embedded-linux-musl-riscv64@1.91.0: resolution: {integrity: sha512-ZfLGldKEEeZjuljKks835LTq7jDRI3gXsKKXXgZGzN6Yymd4UpBOGWiDQlWsWTvw5UwDU2xfFh0wSXbLGHTjVA==} engines: {node: '>=14.0.0'} cpu: [riscv64] os: [linux] + libc: musl sass-embedded-linux-musl-x64@1.91.0: resolution: {integrity: sha512-4kSiSGPKFMbLvTRbP/ibyiKheOA3fwsJKWU0SOuekSPmybMdrhNkTm0REp6+nehZRE60kC3lXmEV4a7w8Jrwyg==} engines: {node: '>=14.0.0'} cpu: [x64] os: [linux] + libc: musl sass-embedded-linux-riscv64@1.91.0: resolution: {integrity: sha512-Y3Fj94SYYvMX9yo49T78yBgBWXtG3EyYUT5K05XyCYkcdl1mVXJSrEmqmRfe4vQGUCaSe/6s7MmsA9Q+mQez7Q==} engines: {node: '>=14.0.0'} cpu: [riscv64] os: [linux] + libc: glibc sass-embedded-linux-x64@1.91.0: resolution: {integrity: sha512-XwIUaE7pQP/ezS5te80hlyheYiUlo0FolQ0HBtxohpavM+DVX2fjwFm5LOUJHrLAqP+TLBtChfFeLj1Ie4Aenw==} engines: {node: '>=14.0.0'} cpu: [x64] os: [linux] + libc: glibc sass-embedded-unknown-all@1.91.0: resolution: {integrity: sha512-Bj6v7ScQp/HtO91QBy6ood9AArSIN7/RNcT4E7P9QoY3o+e6621Vd28lV81vdepPrt6u6PgJoVKmLNODqB6Q+A==} @@ -16047,6 +16105,8 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.4.0 '@ckeditor/ckeditor5-watchdog': 47.4.0 es-toolkit: 1.39.5 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-dev-build-tools@54.3.2(@swc/helpers@0.5.17)(tslib@2.8.1)(typescript@5.9.3)': dependencies: @@ -16250,8 +16310,6 @@ snapshots: '@ckeditor/ckeditor5-core': 47.4.0 '@ckeditor/ckeditor5-engine': 47.4.0 '@ckeditor/ckeditor5-utils': 47.4.0 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-essentials@47.4.0': dependencies: @@ -16712,8 +16770,6 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.4.0 '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-restricted-editing@47.4.0': dependencies: @@ -16800,8 +16856,6 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.4.0 '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-special-characters@47.4.0': dependencies: @@ -22161,7 +22215,7 @@ snapshots: await-to-js@3.0.0: {} - axios@1.13.3(debug@4.4.3): + axios@1.13.4(debug@4.4.3): dependencies: follow-redirects: 1.15.9(debug@4.4.3) form-data: 4.0.5 From ddc4e34dcd7dd5dbd6376892820b7422b0a416af Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 29 Jan 2026 00:58:31 +0000 Subject: [PATCH 346/353] fix(deps): update dependency react-i18next to v16.5.4 --- apps/client/package.json | 2 +- apps/website/package.json | 2 +- pnpm-lock.yaml | 80 ++++++++++++++++++++++++++++++++------- 3 files changed, 69 insertions(+), 15 deletions(-) diff --git a/apps/client/package.json b/apps/client/package.json index e4aa810db3..f35a87c840 100644 --- a/apps/client/package.json +++ b/apps/client/package.json @@ -60,7 +60,7 @@ "normalize.css": "8.0.1", "panzoom": "9.4.3", "preact": "10.28.2", - "react-i18next": "16.5.3", + "react-i18next": "16.5.4", "react-window": "2.2.5", "reveal.js": "5.2.1", "svg-pan-zoom": "3.6.2", diff --git a/apps/website/package.json b/apps/website/package.json index 5b98d62e92..abf3284937 100644 --- a/apps/website/package.json +++ b/apps/website/package.json @@ -14,7 +14,7 @@ "preact": "10.28.2", "preact-iso": "2.11.1", "preact-render-to-string": "6.6.5", - "react-i18next": "16.5.3" + "react-i18next": "16.5.4" }, "devDependencies": { "@preact/preset-vite": "2.10.2", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index f9498858ad..ec4439a1d9 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -296,8 +296,8 @@ importers: specifier: 10.28.2 version: 10.28.2 react-i18next: - specifier: 16.5.3 - version: 16.5.3(i18next@25.8.0(typescript@5.9.3))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3) + specifier: 16.5.4 + version: 16.5.4(i18next@25.8.0(typescript@5.9.3))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3) react-window: specifier: 2.2.5 version: 2.2.5(react-dom@19.2.4(react@19.2.4))(react@19.2.4) @@ -848,8 +848,8 @@ importers: specifier: 6.6.5 version: 6.6.5(preact@10.28.2) react-i18next: - specifier: 16.5.3 - version: 16.5.3(i18next@25.8.0(typescript@5.9.3))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3) + specifier: 16.5.4 + version: 16.5.4(i18next@25.8.0(typescript@5.9.3))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3) devDependencies: '@preact/preset-vite': specifier: 2.10.2 @@ -3327,89 +3327,105 @@ packages: resolution: {integrity: sha512-excjX8DfsIcJ10x1Kzr4RcWe1edC9PquDRRPx3YVCvQv+U5p7Yin2s32ftzikXojb1PIFc/9Mt28/y+iRklkrw==} cpu: [arm64] os: [linux] + libc: [glibc] '@img/sharp-libvips-linux-arm@1.2.4': resolution: {integrity: sha512-bFI7xcKFELdiNCVov8e44Ia4u2byA+l3XtsAj+Q8tfCwO6BQ8iDojYdvoPMqsKDkuoOo+X6HZA0s0q11ANMQ8A==} cpu: [arm] os: [linux] + libc: [glibc] '@img/sharp-libvips-linux-ppc64@1.2.4': resolution: {integrity: sha512-FMuvGijLDYG6lW+b/UvyilUWu5Ayu+3r2d1S8notiGCIyYU/76eig1UfMmkZ7vwgOrzKzlQbFSuQfgm7GYUPpA==} cpu: [ppc64] os: [linux] + libc: [glibc] '@img/sharp-libvips-linux-riscv64@1.2.4': resolution: {integrity: sha512-oVDbcR4zUC0ce82teubSm+x6ETixtKZBh/qbREIOcI3cULzDyb18Sr/Wcyx7NRQeQzOiHTNbZFF1UwPS2scyGA==} cpu: [riscv64] os: [linux] + libc: [glibc] '@img/sharp-libvips-linux-s390x@1.2.4': resolution: {integrity: sha512-qmp9VrzgPgMoGZyPvrQHqk02uyjA0/QrTO26Tqk6l4ZV0MPWIW6LTkqOIov+J1yEu7MbFQaDpwdwJKhbJvuRxQ==} cpu: [s390x] os: [linux] + libc: [glibc] '@img/sharp-libvips-linux-x64@1.2.4': resolution: {integrity: sha512-tJxiiLsmHc9Ax1bz3oaOYBURTXGIRDODBqhveVHonrHJ9/+k89qbLl0bcJns+e4t4rvaNBxaEZsFtSfAdquPrw==} cpu: [x64] os: [linux] + libc: [glibc] '@img/sharp-libvips-linuxmusl-arm64@1.2.4': resolution: {integrity: sha512-FVQHuwx1IIuNow9QAbYUzJ+En8KcVm9Lk5+uGUQJHaZmMECZmOlix9HnH7n1TRkXMS0pGxIJokIVB9SuqZGGXw==} cpu: [arm64] os: [linux] + libc: [musl] '@img/sharp-libvips-linuxmusl-x64@1.2.4': resolution: {integrity: sha512-+LpyBk7L44ZIXwz/VYfglaX/okxezESc6UxDSoyo2Ks6Jxc4Y7sGjpgU9s4PMgqgjj1gZCylTieNamqA1MF7Dg==} cpu: [x64] os: [linux] + libc: [musl] '@img/sharp-linux-arm64@0.34.5': resolution: {integrity: sha512-bKQzaJRY/bkPOXyKx5EVup7qkaojECG6NLYswgktOZjaXecSAeCWiZwwiFf3/Y+O1HrauiE3FVsGxFg8c24rZg==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [arm64] os: [linux] + libc: [glibc] '@img/sharp-linux-arm@0.34.5': resolution: {integrity: sha512-9dLqsvwtg1uuXBGZKsxem9595+ujv0sJ6Vi8wcTANSFpwV/GONat5eCkzQo/1O6zRIkh0m/8+5BjrRr7jDUSZw==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [arm] os: [linux] + libc: [glibc] '@img/sharp-linux-ppc64@0.34.5': resolution: {integrity: sha512-7zznwNaqW6YtsfrGGDA6BRkISKAAE1Jo0QdpNYXNMHu2+0dTrPflTLNkpc8l7MUP5M16ZJcUvysVWWrMefZquA==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [ppc64] os: [linux] + libc: [glibc] '@img/sharp-linux-riscv64@0.34.5': resolution: {integrity: sha512-51gJuLPTKa7piYPaVs8GmByo7/U7/7TZOq+cnXJIHZKavIRHAP77e3N2HEl3dgiqdD/w0yUfiJnII77PuDDFdw==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [riscv64] os: [linux] + libc: [glibc] '@img/sharp-linux-s390x@0.34.5': resolution: {integrity: sha512-nQtCk0PdKfho3eC5MrbQoigJ2gd1CgddUMkabUj+rBevs8tZ2cULOx46E7oyX+04WGfABgIwmMC0VqieTiR4jg==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [s390x] os: [linux] + libc: [glibc] '@img/sharp-linux-x64@0.34.5': resolution: {integrity: sha512-MEzd8HPKxVxVenwAa+JRPwEC7QFjoPWuS5NZnBt6B3pu7EG2Ge0id1oLHZpPJdn3OQK+BQDiw9zStiHBTJQQQQ==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [x64] os: [linux] + libc: [glibc] '@img/sharp-linuxmusl-arm64@0.34.5': resolution: {integrity: sha512-fprJR6GtRsMt6Kyfq44IsChVZeGN97gTD331weR1ex1c1rypDEABN6Tm2xa1wE6lYb5DdEnk03NZPqA7Id21yg==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [arm64] os: [linux] + libc: [musl] '@img/sharp-linuxmusl-x64@0.34.5': resolution: {integrity: sha512-Jg8wNT1MUzIvhBFxViqrEhWDGzqymo3sV7z7ZsaWbZNDLXRJZoRGrjulp60YYtV4wfY8VIKcWidjojlLcWrd8Q==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [x64] os: [linux] + libc: [musl] '@img/sharp-wasm32@0.34.5': resolution: {integrity: sha512-OdWTEiVkY2PHwqkbBI8frFxQQFekHaSSkUIJkwzclWZe64O1X4UlUjqqqLaPbUpMOQk6FBu/HtlGXNblIs0huw==} @@ -3904,30 +3920,35 @@ packages: engines: {node: '>= 10'} cpu: [arm64] os: [linux] + libc: [glibc] '@napi-rs/canvas-linux-arm64-musl@0.1.88': resolution: {integrity: sha512-kYyNrUsHLkoGHBc77u4Unh067GrfiCUMbGHC2+OTxbeWfZkPt2o32UOQkhnSswKd9Fko/wSqqGkY956bIUzruA==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] + libc: [musl] '@napi-rs/canvas-linux-riscv64-gnu@0.1.88': resolution: {integrity: sha512-HVuH7QgzB0yavYdNZDRyAsn/ejoXB0hn8twwFnOqUbCCdkV+REna7RXjSR7+PdfW0qMQ2YYWsLvVBT5iL/mGpw==} engines: {node: '>= 10'} cpu: [riscv64] os: [linux] + libc: [glibc] '@napi-rs/canvas-linux-x64-gnu@0.1.88': resolution: {integrity: sha512-hvcvKIcPEQrvvJtJnwD35B3qk6umFJ8dFIr8bSymfrSMem0EQsfn1ztys8ETIFndTwdNWJKWluvxztA41ivsEw==} engines: {node: '>= 10'} cpu: [x64] os: [linux] + libc: [glibc] '@napi-rs/canvas-linux-x64-musl@0.1.88': resolution: {integrity: sha512-eSMpGYY2xnZSQ6UxYJ6plDboxq4KeJ4zT5HaVkUnbObNN6DlbJe0Mclh3wifAmquXfrlgTZt6zhHsUgz++AK6g==} engines: {node: '>= 10'} cpu: [x64] os: [linux] + libc: [musl] '@napi-rs/canvas-win32-arm64-msvc@0.1.88': resolution: {integrity: sha512-qcIFfEgHrchyYqRrxsCeTQgpJZ/GqHiqPcU/Fvw/ARVlQeDX1VyFH+X+0gCR2tca6UJrq96vnW+5o7buCq+erA==} @@ -4149,36 +4170,42 @@ packages: engines: {node: '>= 10.0.0'} cpu: [arm] os: [linux] + libc: [glibc] '@parcel/watcher-linux-arm-musl@2.5.4': resolution: {integrity: sha512-kGO8RPvVrcAotV4QcWh8kZuHr9bXi9a3bSZw7kFarYR0+fGliU7hd/zevhjw8fnvIKG3J9EO5G6sXNGCSNMYPQ==} engines: {node: '>= 10.0.0'} cpu: [arm] os: [linux] + libc: [musl] '@parcel/watcher-linux-arm64-glibc@2.5.4': resolution: {integrity: sha512-KU75aooXhqGFY2W5/p8DYYHt4hrjHZod8AhcGAmhzPn/etTa+lYCDB2b1sJy3sWJ8ahFVTdy+EbqSBvMx3iFlw==} engines: {node: '>= 10.0.0'} cpu: [arm64] os: [linux] + libc: [glibc] '@parcel/watcher-linux-arm64-musl@2.5.4': resolution: {integrity: sha512-Qx8uNiIekVutnzbVdrgSanM+cbpDD3boB1f8vMtnuG5Zau4/bdDbXyKwIn0ToqFhIuob73bcxV9NwRm04/hzHQ==} engines: {node: '>= 10.0.0'} cpu: [arm64] os: [linux] + libc: [musl] '@parcel/watcher-linux-x64-glibc@2.5.4': resolution: {integrity: sha512-UYBQvhYmgAv61LNUn24qGQdjtycFBKSK3EXr72DbJqX9aaLbtCOO8+1SkKhD/GNiJ97ExgcHBrukcYhVjrnogA==} engines: {node: '>= 10.0.0'} cpu: [x64] os: [linux] + libc: [glibc] '@parcel/watcher-linux-x64-musl@2.5.4': resolution: {integrity: sha512-YoRWCVgxv8akZrMhdyVi6/TyoeeMkQ0PGGOf2E4omODrvd1wxniXP+DBynKoHryStks7l+fDAMUBRzqNHrVOpg==} engines: {node: '>= 10.0.0'} cpu: [x64] os: [linux] + libc: [musl] '@parcel/watcher-win32-arm64@2.5.4': resolution: {integrity: sha512-iby+D/YNXWkiQNYcIhg8P5hSjzXEHaQrk2SLrWOUD7VeC4Ohu0WQvmV+HDJokZVJ2UjJ4AGXW3bx7Lls9Ln4TQ==} @@ -4674,11 +4701,13 @@ packages: resolution: {integrity: sha512-hzBmOtYdC4369XxN2SNJ3oBlXKWNif3ieWBT+oh/qvAeox4fQR0ngqyh+kIGOufBnP5Zc2rqJf9LzIbJw3Tx/Q==} cpu: [arm64] os: [linux] + libc: [glibc] '@rolldown/binding-linux-arm64-musl@1.0.0-beta.29': resolution: {integrity: sha512-6B35GmFJJ4RX88OgubrnUmuJBUgRh6/OTXIpy8m/VUnoc683lufIPo26HW/0LxLgxp2GM7KHr3LOULcVxbqq4Q==} cpu: [arm64] os: [linux] + libc: [musl] '@rolldown/binding-linux-arm64-ohos@1.0.0-beta.29': resolution: {integrity: sha512-z3ru8fUCunQM8q9I7RbDVMT5cxzxVVVBNNKM5/qAQQrdObd1u8g0LR5z0yLtaFWzybwLVdPtJDRcXtLm5tOBFA==} @@ -4689,11 +4718,13 @@ packages: resolution: {integrity: sha512-n6fs4L7j99MIiI6vKhQDdyScv4/uMAPtIMkB0zGbUX8MKWT1osym1hvWVdlENjnS/Phf0zzhjyOgoFDzdhI1cQ==} cpu: [x64] os: [linux] + libc: [glibc] '@rolldown/binding-linux-x64-musl@1.0.0-beta.29': resolution: {integrity: sha512-C5hcJgtDN4rp6/WsPTQSDVUWrdnIC//ynMGcUIh1O0anm9KnSy47zKQ5D9EqtlEKvO+2PPqmyUVJ2DTq18nlVA==} cpu: [x64] os: [linux] + libc: [musl] '@rolldown/binding-wasm32-wasi@1.0.0-beta.29': resolution: {integrity: sha512-lMN1IBItdZFO182Sdus9oVuNDqyIymn/bsR5KwgeGaiqLsrmpQHBSLwkS/nKJO1nzYlpGDRugFSpnrSJ5ZmihQ==} @@ -4833,56 +4864,67 @@ packages: resolution: {integrity: sha512-aL6hRwu0k7MTUESgkg7QHY6CoqPgr6gdQXRJI1/VbFlUMwsSzPGSR7sG5d+MCbYnJmJwThc2ol3nixj1fvI/zQ==} cpu: [arm] os: [linux] + libc: [glibc] '@rollup/rollup-linux-arm-musleabihf@4.52.0': resolution: {integrity: sha512-BTs0M5s1EJejgIBJhCeiFo7GZZ2IXWkFGcyZhxX4+8usnIo5Mti57108vjXFIQmmJaRyDwmV59Tw64Ap1dkwMw==} cpu: [arm] os: [linux] + libc: [musl] '@rollup/rollup-linux-arm64-gnu@4.52.0': resolution: {integrity: sha512-uj672IVOU9m08DBGvoPKPi/J8jlVgjh12C9GmjjBxCTQc3XtVmRkRKyeHSmIKQpvJ7fIm1EJieBUcnGSzDVFyw==} cpu: [arm64] os: [linux] + libc: [glibc] '@rollup/rollup-linux-arm64-musl@4.52.0': resolution: {integrity: sha512-/+IVbeDMDCtB/HP/wiWsSzduD10SEGzIZX2945KSgZRNi4TSkjHqRJtNTVtVb8IRwhJ65ssI56krlLik+zFWkw==} cpu: [arm64] os: [linux] + libc: [musl] '@rollup/rollup-linux-loong64-gnu@4.52.0': resolution: {integrity: sha512-U1vVzvSWtSMWKKrGoROPBXMh3Vwn93TA9V35PldokHGqiUbF6erSzox/5qrSMKp6SzakvyjcPiVF8yB1xKr9Pg==} cpu: [loong64] os: [linux] + libc: [glibc] '@rollup/rollup-linux-ppc64-gnu@4.52.0': resolution: {integrity: sha512-X/4WfuBAdQRH8cK3DYl8zC00XEE6aM472W+QCycpQJeLWVnHfkv7RyBFVaTqNUMsTgIX8ihMjCvFF9OUgeABzw==} cpu: [ppc64] os: [linux] + libc: [glibc] '@rollup/rollup-linux-riscv64-gnu@4.52.0': resolution: {integrity: sha512-xIRYc58HfWDBZoLmWfWXg2Sq8VCa2iJ32B7mqfWnkx5mekekl0tMe7FHpY8I72RXEcUkaWawRvl3qA55og+cwQ==} cpu: [riscv64] os: [linux] + libc: [glibc] '@rollup/rollup-linux-riscv64-musl@4.52.0': resolution: {integrity: sha512-mbsoUey05WJIOz8U1WzNdf+6UMYGwE3fZZnQqsM22FZ3wh1N887HT6jAOjXs6CNEK3Ntu2OBsyQDXfIjouI4dw==} cpu: [riscv64] os: [linux] + libc: [musl] '@rollup/rollup-linux-s390x-gnu@4.52.0': resolution: {integrity: sha512-qP6aP970bucEi5KKKR4AuPFd8aTx9EF6BvutvYxmZuWLJHmnq4LvBfp0U+yFDMGwJ+AIJEH5sIP+SNypauMWzg==} cpu: [s390x] os: [linux] + libc: [glibc] '@rollup/rollup-linux-x64-gnu@4.52.0': resolution: {integrity: sha512-nmSVN+F2i1yKZ7rJNKO3G7ZzmxJgoQBQZ/6c4MuS553Grmr7WqR7LLDcYG53Z2m9409z3JLt4sCOhLdbKQ3HmA==} cpu: [x64] os: [linux] + libc: [glibc] '@rollup/rollup-linux-x64-musl@4.52.0': resolution: {integrity: sha512-2d0qRo33G6TfQVjaMR71P+yJVGODrt5V6+T0BDYH4EMfGgdC/2HWDVjSSFw888GSzAZUwuska3+zxNUCDco6rQ==} cpu: [x64] os: [linux] + libc: [musl] '@rollup/rollup-openharmony-arm64@4.52.0': resolution: {integrity: sha512-A1JalX4MOaFAAyGgpO7XP5khquv/7xKzLIyLmhNrbiCxWpMlnsTYr8dnsWM7sEeotNmxvSOEL7F65j0HXFcFsw==} @@ -5241,24 +5283,28 @@ packages: engines: {node: '>=10'} cpu: [arm64] os: [linux] + libc: [glibc] '@swc/core-linux-arm64-musl@1.11.29': resolution: {integrity: sha512-PwjB10BC0N+Ce7RU/L23eYch6lXFHz7r3NFavIcwDNa/AAqywfxyxh13OeRy+P0cg7NDpWEETWspXeI4Ek8otw==} engines: {node: '>=10'} cpu: [arm64] os: [linux] + libc: [musl] '@swc/core-linux-x64-gnu@1.11.29': resolution: {integrity: sha512-i62vBVoPaVe9A3mc6gJG07n0/e7FVeAvdD9uzZTtGLiuIfVfIBta8EMquzvf+POLycSk79Z6lRhGPZPJPYiQaA==} engines: {node: '>=10'} cpu: [x64] os: [linux] + libc: [glibc] '@swc/core-linux-x64-musl@1.11.29': resolution: {integrity: sha512-YER0XU1xqFdK0hKkfSVX1YIyCvMDI7K07GIpefPvcfyNGs38AXKhb2byySDjbVxkdl4dycaxxhRyhQ2gKSlsFQ==} engines: {node: '>=10'} cpu: [x64] os: [linux] + libc: [musl] '@swc/core-win32-arm64-msvc@1.11.29': resolution: {integrity: sha512-po+WHw+k9g6FAg5IJ+sMwtA/fIUL3zPQ4m/uJgONBATCVnDDkyW6dBA49uHNVtSEvjvhuD8DVWdFP847YTcITw==} @@ -10271,24 +10317,28 @@ packages: engines: {node: '>= 12.0.0'} cpu: [arm64] os: [linux] + libc: [glibc] lightningcss-linux-arm64-musl@1.31.1: resolution: {integrity: sha512-mVZ7Pg2zIbe3XlNbZJdjs86YViQFoJSpc41CbVmKBPiGmC4YrfeOyz65ms2qpAobVd7WQsbW4PdsSJEMymyIMg==} engines: {node: '>= 12.0.0'} cpu: [arm64] os: [linux] + libc: [musl] lightningcss-linux-x64-gnu@1.31.1: resolution: {integrity: sha512-xGlFWRMl+0KvUhgySdIaReQdB4FNudfUTARn7q0hh/V67PVGCs3ADFjw+6++kG1RNd0zdGRlEKa+T13/tQjPMA==} engines: {node: '>= 12.0.0'} cpu: [x64] os: [linux] + libc: [glibc] lightningcss-linux-x64-musl@1.31.1: resolution: {integrity: sha512-eowF8PrKHw9LpoZii5tdZwnBcYDxRw2rRCyvAXLi34iyeYfqCQNA9rmUM0ce62NlPhCvof1+9ivRaTY6pSKDaA==} engines: {node: '>= 12.0.0'} cpu: [x64] os: [linux] + libc: [musl] lightningcss-win32-arm64-msvc@1.31.1: resolution: {integrity: sha512-aJReEbSEQzx1uBlQizAOBSjcmr9dCdL3XuC/6HLXAxmtErsj2ICo5yYggg1qOODQMtnjNQv2UHb9NpOuFtYe4w==} @@ -12513,8 +12563,8 @@ packages: peerDependencies: react: ^19.2.4 - react-i18next@16.5.3: - resolution: {integrity: sha512-fo+/NNch37zqxOzlBYrWMx0uy/yInPkRfjSuy4lqKdaecR17nvCHnEUt3QyzA8XjQ2B/0iW/5BhaHR3ZmukpGw==} + react-i18next@16.5.4: + resolution: {integrity: sha512-6yj+dcfMncEC21QPhOTsW8mOSO+pzFmT6uvU7XXdvM/Cp38zJkmTeMeKmTrmCMD5ToT79FmiE/mRWiYWcJYW4g==} peerDependencies: i18next: '>= 25.6.2' react: '>= 16.8.0' @@ -13005,48 +13055,56 @@ packages: engines: {node: '>=14.0.0'} cpu: [arm64] os: [linux] + libc: glibc sass-embedded-linux-arm@1.91.0: resolution: {integrity: sha512-ppAZLp3eZ9oTjYdQDf4nM7EehDpkxq5H1hE8FOrx8LpY7pxn6QF+SRpAbRjdfFChRw0K7vh+IiCnQEMp7uLNAg==} engines: {node: '>=14.0.0'} cpu: [arm] os: [linux] + libc: glibc sass-embedded-linux-musl-arm64@1.91.0: resolution: {integrity: sha512-VfbPpID1C5TT7rukob6CKgefx/TsLE+XZieMNd00hvfJ8XhqPr5DGvSMCNpXlwaedzTirbJu357m+n2PJI9TFQ==} engines: {node: '>=14.0.0'} cpu: [arm64] os: [linux] + libc: musl sass-embedded-linux-musl-arm@1.91.0: resolution: {integrity: sha512-znEsNC2FurPF9+XwQQ6e/fVoic3e5D3/kMB41t/bE8byJVRdaPhkdsszt3pZUE56nNGYoCuieSXUkk7VvyPHsw==} engines: {node: '>=14.0.0'} cpu: [arm] os: [linux] + libc: musl sass-embedded-linux-musl-riscv64@1.91.0: resolution: {integrity: sha512-ZfLGldKEEeZjuljKks835LTq7jDRI3gXsKKXXgZGzN6Yymd4UpBOGWiDQlWsWTvw5UwDU2xfFh0wSXbLGHTjVA==} engines: {node: '>=14.0.0'} cpu: [riscv64] os: [linux] + libc: musl sass-embedded-linux-musl-x64@1.91.0: resolution: {integrity: sha512-4kSiSGPKFMbLvTRbP/ibyiKheOA3fwsJKWU0SOuekSPmybMdrhNkTm0REp6+nehZRE60kC3lXmEV4a7w8Jrwyg==} engines: {node: '>=14.0.0'} cpu: [x64] os: [linux] + libc: musl sass-embedded-linux-riscv64@1.91.0: resolution: {integrity: sha512-Y3Fj94SYYvMX9yo49T78yBgBWXtG3EyYUT5K05XyCYkcdl1mVXJSrEmqmRfe4vQGUCaSe/6s7MmsA9Q+mQez7Q==} engines: {node: '>=14.0.0'} cpu: [riscv64] os: [linux] + libc: glibc sass-embedded-linux-x64@1.91.0: resolution: {integrity: sha512-XwIUaE7pQP/ezS5te80hlyheYiUlo0FolQ0HBtxohpavM+DVX2fjwFm5LOUJHrLAqP+TLBtChfFeLj1Ie4Aenw==} engines: {node: '>=14.0.0'} cpu: [x64] os: [linux] + libc: glibc sass-embedded-unknown-all@1.91.0: resolution: {integrity: sha512-Bj6v7ScQp/HtO91QBy6ood9AArSIN7/RNcT4E7P9QoY3o+e6621Vd28lV81vdepPrt6u6PgJoVKmLNODqB6Q+A==} @@ -16047,6 +16105,8 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.4.0 '@ckeditor/ckeditor5-watchdog': 47.4.0 es-toolkit: 1.39.5 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-dev-build-tools@54.3.2(@swc/helpers@0.5.17)(tslib@2.8.1)(typescript@5.9.3)': dependencies: @@ -16250,8 +16310,6 @@ snapshots: '@ckeditor/ckeditor5-core': 47.4.0 '@ckeditor/ckeditor5-engine': 47.4.0 '@ckeditor/ckeditor5-utils': 47.4.0 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-essentials@47.4.0': dependencies: @@ -16712,8 +16770,6 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.4.0 '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-restricted-editing@47.4.0': dependencies: @@ -16800,8 +16856,6 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.4.0 '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-special-characters@47.4.0': dependencies: @@ -29410,7 +29464,7 @@ snapshots: react: 19.2.4 scheduler: 0.27.0 - react-i18next@16.5.3(i18next@25.8.0(typescript@5.9.3))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3): + react-i18next@16.5.4(i18next@25.8.0(typescript@5.9.3))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.9.3): dependencies: '@babel/runtime': 7.28.4 html-parse-stringify: 3.0.1 From 501b380d5e735e9d156eeaef4c7372b95d94a9d1 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 29 Jan 2026 01:00:12 +0000 Subject: [PATCH 347/353] chore(deps): update dependency happy-dom to v20.4.0 --- apps/client/package.json | 2 +- package.json | 2 +- pnpm-lock.yaml | 108 +++++++++++++++++++++++++++++---------- 3 files changed, 83 insertions(+), 29 deletions(-) diff --git a/apps/client/package.json b/apps/client/package.json index e4aa810db3..7c223ebd41 100644 --- a/apps/client/package.json +++ b/apps/client/package.json @@ -78,7 +78,7 @@ "@types/reveal.js": "5.2.2", "@types/tabulator-tables": "6.3.1", "copy-webpack-plugin": "13.0.1", - "happy-dom": "20.3.9", + "happy-dom": "20.4.0", "lightningcss": "1.31.1", "script-loader": "0.7.2", "vite-plugin-static-copy": "3.2.0" diff --git a/package.json b/package.json index 6bfcca7271..93cc97b103 100644 --- a/package.json +++ b/package.json @@ -63,7 +63,7 @@ "eslint-config-prettier": "10.1.8", "eslint-plugin-playwright": "2.5.1", "eslint-plugin-simple-import-sort": "12.1.1", - "happy-dom": "20.3.9", + "happy-dom": "20.4.0", "http-server": "14.1.1", "jiti": "2.6.1", "js-yaml": "4.1.1", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index f9498858ad..5a0ce201dd 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -92,8 +92,8 @@ importers: specifier: 12.1.1 version: 12.1.1(eslint@9.39.2(jiti@2.6.1)) happy-dom: - specifier: 20.3.9 - version: 20.3.9(bufferutil@4.0.9)(utf-8-validate@6.0.5) + specifier: 20.4.0 + version: 20.4.0(bufferutil@4.0.9)(utf-8-validate@6.0.5) http-server: specifier: 14.1.1 version: 14.1.1 @@ -135,7 +135,7 @@ importers: version: 4.5.4(@types/node@24.10.9)(rollup@4.52.0)(typescript@5.9.3)(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.31.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1)) vitest: specifier: 4.0.18 - version: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@24.10.9)(@vitest/browser-webdriverio@4.0.18)(@vitest/ui@4.0.18)(happy-dom@20.3.9(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.31.1)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) + version: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@24.10.9)(@vitest/browser-webdriverio@4.0.18)(@vitest/ui@4.0.18)(happy-dom@20.4.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.31.1)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) apps/build-docs: devDependencies: @@ -345,8 +345,8 @@ importers: specifier: 13.0.1 version: 13.0.1(webpack@5.101.3(esbuild@0.27.2)) happy-dom: - specifier: 20.3.9 - version: 20.3.9(bufferutil@4.0.9)(utf-8-validate@6.0.5) + specifier: 20.4.0 + version: 20.4.0(bufferutil@4.0.9)(utf-8-validate@6.0.5) lightningcss: specifier: 1.31.1 version: 1.31.1 @@ -871,7 +871,7 @@ importers: version: 7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.31.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) vitest: specifier: 4.0.18 - version: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@24.10.9)(@vitest/browser-webdriverio@4.0.18)(@vitest/ui@4.0.18)(happy-dom@20.3.9(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.31.1)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) + version: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@24.10.9)(@vitest/browser-webdriverio@4.0.18)(@vitest/ui@4.0.18)(happy-dom@20.4.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.31.1)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) packages/ckeditor5: dependencies: @@ -962,7 +962,7 @@ importers: version: 2.0.0(typescript@5.9.3)(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.31.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1)) vitest: specifier: 4.0.18 - version: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@24.10.9)(@vitest/browser-webdriverio@4.0.18)(@vitest/ui@4.0.18)(happy-dom@20.3.9(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.31.1)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) + version: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@24.10.9)(@vitest/browser-webdriverio@4.0.18)(@vitest/ui@4.0.18)(happy-dom@20.4.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.31.1)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) webdriverio: specifier: 9.23.2 version: 9.23.2(bufferutil@4.0.9)(utf-8-validate@6.0.5) @@ -1022,7 +1022,7 @@ importers: version: 2.0.0(typescript@5.9.3)(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.31.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1)) vitest: specifier: 4.0.18 - version: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@24.10.9)(@vitest/browser-webdriverio@4.0.18)(@vitest/ui@4.0.18)(happy-dom@20.3.9(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.31.1)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) + version: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@24.10.9)(@vitest/browser-webdriverio@4.0.18)(@vitest/ui@4.0.18)(happy-dom@20.4.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.31.1)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) webdriverio: specifier: 9.23.2 version: 9.23.2(bufferutil@4.0.9)(utf-8-validate@6.0.5) @@ -1082,7 +1082,7 @@ importers: version: 2.0.0(typescript@5.9.3)(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.31.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1)) vitest: specifier: 4.0.18 - version: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@24.10.9)(@vitest/browser-webdriverio@4.0.18)(@vitest/ui@4.0.18)(happy-dom@20.3.9(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.31.1)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) + version: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@24.10.9)(@vitest/browser-webdriverio@4.0.18)(@vitest/ui@4.0.18)(happy-dom@20.4.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.31.1)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) webdriverio: specifier: 9.23.2 version: 9.23.2(bufferutil@4.0.9)(utf-8-validate@6.0.5) @@ -1149,7 +1149,7 @@ importers: version: 2.0.0(typescript@5.9.3)(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.31.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1)) vitest: specifier: 4.0.18 - version: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@24.10.9)(@vitest/browser-webdriverio@4.0.18)(@vitest/ui@4.0.18)(happy-dom@20.3.9(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.31.1)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) + version: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@24.10.9)(@vitest/browser-webdriverio@4.0.18)(@vitest/ui@4.0.18)(happy-dom@20.4.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.31.1)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) webdriverio: specifier: 9.23.2 version: 9.23.2(bufferutil@4.0.9)(utf-8-validate@6.0.5) @@ -1216,7 +1216,7 @@ importers: version: 2.0.0(typescript@5.9.3)(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.31.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1)) vitest: specifier: 4.0.18 - version: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@24.10.9)(@vitest/browser-webdriverio@4.0.18)(@vitest/ui@4.0.18)(happy-dom@20.3.9(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.31.1)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) + version: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@24.10.9)(@vitest/browser-webdriverio@4.0.18)(@vitest/ui@4.0.18)(happy-dom@20.4.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.31.1)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) webdriverio: specifier: 9.23.2 version: 9.23.2(bufferutil@4.0.9)(utf-8-validate@6.0.5) @@ -3327,89 +3327,105 @@ packages: resolution: {integrity: sha512-excjX8DfsIcJ10x1Kzr4RcWe1edC9PquDRRPx3YVCvQv+U5p7Yin2s32ftzikXojb1PIFc/9Mt28/y+iRklkrw==} cpu: [arm64] os: [linux] + libc: [glibc] '@img/sharp-libvips-linux-arm@1.2.4': resolution: {integrity: sha512-bFI7xcKFELdiNCVov8e44Ia4u2byA+l3XtsAj+Q8tfCwO6BQ8iDojYdvoPMqsKDkuoOo+X6HZA0s0q11ANMQ8A==} cpu: [arm] os: [linux] + libc: [glibc] '@img/sharp-libvips-linux-ppc64@1.2.4': resolution: {integrity: sha512-FMuvGijLDYG6lW+b/UvyilUWu5Ayu+3r2d1S8notiGCIyYU/76eig1UfMmkZ7vwgOrzKzlQbFSuQfgm7GYUPpA==} cpu: [ppc64] os: [linux] + libc: [glibc] '@img/sharp-libvips-linux-riscv64@1.2.4': resolution: {integrity: sha512-oVDbcR4zUC0ce82teubSm+x6ETixtKZBh/qbREIOcI3cULzDyb18Sr/Wcyx7NRQeQzOiHTNbZFF1UwPS2scyGA==} cpu: [riscv64] os: [linux] + libc: [glibc] '@img/sharp-libvips-linux-s390x@1.2.4': resolution: {integrity: sha512-qmp9VrzgPgMoGZyPvrQHqk02uyjA0/QrTO26Tqk6l4ZV0MPWIW6LTkqOIov+J1yEu7MbFQaDpwdwJKhbJvuRxQ==} cpu: [s390x] os: [linux] + libc: [glibc] '@img/sharp-libvips-linux-x64@1.2.4': resolution: {integrity: sha512-tJxiiLsmHc9Ax1bz3oaOYBURTXGIRDODBqhveVHonrHJ9/+k89qbLl0bcJns+e4t4rvaNBxaEZsFtSfAdquPrw==} cpu: [x64] os: [linux] + libc: [glibc] '@img/sharp-libvips-linuxmusl-arm64@1.2.4': resolution: {integrity: sha512-FVQHuwx1IIuNow9QAbYUzJ+En8KcVm9Lk5+uGUQJHaZmMECZmOlix9HnH7n1TRkXMS0pGxIJokIVB9SuqZGGXw==} cpu: [arm64] os: [linux] + libc: [musl] '@img/sharp-libvips-linuxmusl-x64@1.2.4': resolution: {integrity: sha512-+LpyBk7L44ZIXwz/VYfglaX/okxezESc6UxDSoyo2Ks6Jxc4Y7sGjpgU9s4PMgqgjj1gZCylTieNamqA1MF7Dg==} cpu: [x64] os: [linux] + libc: [musl] '@img/sharp-linux-arm64@0.34.5': resolution: {integrity: sha512-bKQzaJRY/bkPOXyKx5EVup7qkaojECG6NLYswgktOZjaXecSAeCWiZwwiFf3/Y+O1HrauiE3FVsGxFg8c24rZg==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [arm64] os: [linux] + libc: [glibc] '@img/sharp-linux-arm@0.34.5': resolution: {integrity: sha512-9dLqsvwtg1uuXBGZKsxem9595+ujv0sJ6Vi8wcTANSFpwV/GONat5eCkzQo/1O6zRIkh0m/8+5BjrRr7jDUSZw==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [arm] os: [linux] + libc: [glibc] '@img/sharp-linux-ppc64@0.34.5': resolution: {integrity: sha512-7zznwNaqW6YtsfrGGDA6BRkISKAAE1Jo0QdpNYXNMHu2+0dTrPflTLNkpc8l7MUP5M16ZJcUvysVWWrMefZquA==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [ppc64] os: [linux] + libc: [glibc] '@img/sharp-linux-riscv64@0.34.5': resolution: {integrity: sha512-51gJuLPTKa7piYPaVs8GmByo7/U7/7TZOq+cnXJIHZKavIRHAP77e3N2HEl3dgiqdD/w0yUfiJnII77PuDDFdw==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [riscv64] os: [linux] + libc: [glibc] '@img/sharp-linux-s390x@0.34.5': resolution: {integrity: sha512-nQtCk0PdKfho3eC5MrbQoigJ2gd1CgddUMkabUj+rBevs8tZ2cULOx46E7oyX+04WGfABgIwmMC0VqieTiR4jg==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [s390x] os: [linux] + libc: [glibc] '@img/sharp-linux-x64@0.34.5': resolution: {integrity: sha512-MEzd8HPKxVxVenwAa+JRPwEC7QFjoPWuS5NZnBt6B3pu7EG2Ge0id1oLHZpPJdn3OQK+BQDiw9zStiHBTJQQQQ==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [x64] os: [linux] + libc: [glibc] '@img/sharp-linuxmusl-arm64@0.34.5': resolution: {integrity: sha512-fprJR6GtRsMt6Kyfq44IsChVZeGN97gTD331weR1ex1c1rypDEABN6Tm2xa1wE6lYb5DdEnk03NZPqA7Id21yg==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [arm64] os: [linux] + libc: [musl] '@img/sharp-linuxmusl-x64@0.34.5': resolution: {integrity: sha512-Jg8wNT1MUzIvhBFxViqrEhWDGzqymo3sV7z7ZsaWbZNDLXRJZoRGrjulp60YYtV4wfY8VIKcWidjojlLcWrd8Q==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [x64] os: [linux] + libc: [musl] '@img/sharp-wasm32@0.34.5': resolution: {integrity: sha512-OdWTEiVkY2PHwqkbBI8frFxQQFekHaSSkUIJkwzclWZe64O1X4UlUjqqqLaPbUpMOQk6FBu/HtlGXNblIs0huw==} @@ -3904,30 +3920,35 @@ packages: engines: {node: '>= 10'} cpu: [arm64] os: [linux] + libc: [glibc] '@napi-rs/canvas-linux-arm64-musl@0.1.88': resolution: {integrity: sha512-kYyNrUsHLkoGHBc77u4Unh067GrfiCUMbGHC2+OTxbeWfZkPt2o32UOQkhnSswKd9Fko/wSqqGkY956bIUzruA==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] + libc: [musl] '@napi-rs/canvas-linux-riscv64-gnu@0.1.88': resolution: {integrity: sha512-HVuH7QgzB0yavYdNZDRyAsn/ejoXB0hn8twwFnOqUbCCdkV+REna7RXjSR7+PdfW0qMQ2YYWsLvVBT5iL/mGpw==} engines: {node: '>= 10'} cpu: [riscv64] os: [linux] + libc: [glibc] '@napi-rs/canvas-linux-x64-gnu@0.1.88': resolution: {integrity: sha512-hvcvKIcPEQrvvJtJnwD35B3qk6umFJ8dFIr8bSymfrSMem0EQsfn1ztys8ETIFndTwdNWJKWluvxztA41ivsEw==} engines: {node: '>= 10'} cpu: [x64] os: [linux] + libc: [glibc] '@napi-rs/canvas-linux-x64-musl@0.1.88': resolution: {integrity: sha512-eSMpGYY2xnZSQ6UxYJ6plDboxq4KeJ4zT5HaVkUnbObNN6DlbJe0Mclh3wifAmquXfrlgTZt6zhHsUgz++AK6g==} engines: {node: '>= 10'} cpu: [x64] os: [linux] + libc: [musl] '@napi-rs/canvas-win32-arm64-msvc@0.1.88': resolution: {integrity: sha512-qcIFfEgHrchyYqRrxsCeTQgpJZ/GqHiqPcU/Fvw/ARVlQeDX1VyFH+X+0gCR2tca6UJrq96vnW+5o7buCq+erA==} @@ -4149,36 +4170,42 @@ packages: engines: {node: '>= 10.0.0'} cpu: [arm] os: [linux] + libc: [glibc] '@parcel/watcher-linux-arm-musl@2.5.4': resolution: {integrity: sha512-kGO8RPvVrcAotV4QcWh8kZuHr9bXi9a3bSZw7kFarYR0+fGliU7hd/zevhjw8fnvIKG3J9EO5G6sXNGCSNMYPQ==} engines: {node: '>= 10.0.0'} cpu: [arm] os: [linux] + libc: [musl] '@parcel/watcher-linux-arm64-glibc@2.5.4': resolution: {integrity: sha512-KU75aooXhqGFY2W5/p8DYYHt4hrjHZod8AhcGAmhzPn/etTa+lYCDB2b1sJy3sWJ8ahFVTdy+EbqSBvMx3iFlw==} engines: {node: '>= 10.0.0'} cpu: [arm64] os: [linux] + libc: [glibc] '@parcel/watcher-linux-arm64-musl@2.5.4': resolution: {integrity: sha512-Qx8uNiIekVutnzbVdrgSanM+cbpDD3boB1f8vMtnuG5Zau4/bdDbXyKwIn0ToqFhIuob73bcxV9NwRm04/hzHQ==} engines: {node: '>= 10.0.0'} cpu: [arm64] os: [linux] + libc: [musl] '@parcel/watcher-linux-x64-glibc@2.5.4': resolution: {integrity: sha512-UYBQvhYmgAv61LNUn24qGQdjtycFBKSK3EXr72DbJqX9aaLbtCOO8+1SkKhD/GNiJ97ExgcHBrukcYhVjrnogA==} engines: {node: '>= 10.0.0'} cpu: [x64] os: [linux] + libc: [glibc] '@parcel/watcher-linux-x64-musl@2.5.4': resolution: {integrity: sha512-YoRWCVgxv8akZrMhdyVi6/TyoeeMkQ0PGGOf2E4omODrvd1wxniXP+DBynKoHryStks7l+fDAMUBRzqNHrVOpg==} engines: {node: '>= 10.0.0'} cpu: [x64] os: [linux] + libc: [musl] '@parcel/watcher-win32-arm64@2.5.4': resolution: {integrity: sha512-iby+D/YNXWkiQNYcIhg8P5hSjzXEHaQrk2SLrWOUD7VeC4Ohu0WQvmV+HDJokZVJ2UjJ4AGXW3bx7Lls9Ln4TQ==} @@ -4674,11 +4701,13 @@ packages: resolution: {integrity: sha512-hzBmOtYdC4369XxN2SNJ3oBlXKWNif3ieWBT+oh/qvAeox4fQR0ngqyh+kIGOufBnP5Zc2rqJf9LzIbJw3Tx/Q==} cpu: [arm64] os: [linux] + libc: [glibc] '@rolldown/binding-linux-arm64-musl@1.0.0-beta.29': resolution: {integrity: sha512-6B35GmFJJ4RX88OgubrnUmuJBUgRh6/OTXIpy8m/VUnoc683lufIPo26HW/0LxLgxp2GM7KHr3LOULcVxbqq4Q==} cpu: [arm64] os: [linux] + libc: [musl] '@rolldown/binding-linux-arm64-ohos@1.0.0-beta.29': resolution: {integrity: sha512-z3ru8fUCunQM8q9I7RbDVMT5cxzxVVVBNNKM5/qAQQrdObd1u8g0LR5z0yLtaFWzybwLVdPtJDRcXtLm5tOBFA==} @@ -4689,11 +4718,13 @@ packages: resolution: {integrity: sha512-n6fs4L7j99MIiI6vKhQDdyScv4/uMAPtIMkB0zGbUX8MKWT1osym1hvWVdlENjnS/Phf0zzhjyOgoFDzdhI1cQ==} cpu: [x64] os: [linux] + libc: [glibc] '@rolldown/binding-linux-x64-musl@1.0.0-beta.29': resolution: {integrity: sha512-C5hcJgtDN4rp6/WsPTQSDVUWrdnIC//ynMGcUIh1O0anm9KnSy47zKQ5D9EqtlEKvO+2PPqmyUVJ2DTq18nlVA==} cpu: [x64] os: [linux] + libc: [musl] '@rolldown/binding-wasm32-wasi@1.0.0-beta.29': resolution: {integrity: sha512-lMN1IBItdZFO182Sdus9oVuNDqyIymn/bsR5KwgeGaiqLsrmpQHBSLwkS/nKJO1nzYlpGDRugFSpnrSJ5ZmihQ==} @@ -4833,56 +4864,67 @@ packages: resolution: {integrity: sha512-aL6hRwu0k7MTUESgkg7QHY6CoqPgr6gdQXRJI1/VbFlUMwsSzPGSR7sG5d+MCbYnJmJwThc2ol3nixj1fvI/zQ==} cpu: [arm] os: [linux] + libc: [glibc] '@rollup/rollup-linux-arm-musleabihf@4.52.0': resolution: {integrity: sha512-BTs0M5s1EJejgIBJhCeiFo7GZZ2IXWkFGcyZhxX4+8usnIo5Mti57108vjXFIQmmJaRyDwmV59Tw64Ap1dkwMw==} cpu: [arm] os: [linux] + libc: [musl] '@rollup/rollup-linux-arm64-gnu@4.52.0': resolution: {integrity: sha512-uj672IVOU9m08DBGvoPKPi/J8jlVgjh12C9GmjjBxCTQc3XtVmRkRKyeHSmIKQpvJ7fIm1EJieBUcnGSzDVFyw==} cpu: [arm64] os: [linux] + libc: [glibc] '@rollup/rollup-linux-arm64-musl@4.52.0': resolution: {integrity: sha512-/+IVbeDMDCtB/HP/wiWsSzduD10SEGzIZX2945KSgZRNi4TSkjHqRJtNTVtVb8IRwhJ65ssI56krlLik+zFWkw==} cpu: [arm64] os: [linux] + libc: [musl] '@rollup/rollup-linux-loong64-gnu@4.52.0': resolution: {integrity: sha512-U1vVzvSWtSMWKKrGoROPBXMh3Vwn93TA9V35PldokHGqiUbF6erSzox/5qrSMKp6SzakvyjcPiVF8yB1xKr9Pg==} cpu: [loong64] os: [linux] + libc: [glibc] '@rollup/rollup-linux-ppc64-gnu@4.52.0': resolution: {integrity: sha512-X/4WfuBAdQRH8cK3DYl8zC00XEE6aM472W+QCycpQJeLWVnHfkv7RyBFVaTqNUMsTgIX8ihMjCvFF9OUgeABzw==} cpu: [ppc64] os: [linux] + libc: [glibc] '@rollup/rollup-linux-riscv64-gnu@4.52.0': resolution: {integrity: sha512-xIRYc58HfWDBZoLmWfWXg2Sq8VCa2iJ32B7mqfWnkx5mekekl0tMe7FHpY8I72RXEcUkaWawRvl3qA55og+cwQ==} cpu: [riscv64] os: [linux] + libc: [glibc] '@rollup/rollup-linux-riscv64-musl@4.52.0': resolution: {integrity: sha512-mbsoUey05WJIOz8U1WzNdf+6UMYGwE3fZZnQqsM22FZ3wh1N887HT6jAOjXs6CNEK3Ntu2OBsyQDXfIjouI4dw==} cpu: [riscv64] os: [linux] + libc: [musl] '@rollup/rollup-linux-s390x-gnu@4.52.0': resolution: {integrity: sha512-qP6aP970bucEi5KKKR4AuPFd8aTx9EF6BvutvYxmZuWLJHmnq4LvBfp0U+yFDMGwJ+AIJEH5sIP+SNypauMWzg==} cpu: [s390x] os: [linux] + libc: [glibc] '@rollup/rollup-linux-x64-gnu@4.52.0': resolution: {integrity: sha512-nmSVN+F2i1yKZ7rJNKO3G7ZzmxJgoQBQZ/6c4MuS553Grmr7WqR7LLDcYG53Z2m9409z3JLt4sCOhLdbKQ3HmA==} cpu: [x64] os: [linux] + libc: [glibc] '@rollup/rollup-linux-x64-musl@4.52.0': resolution: {integrity: sha512-2d0qRo33G6TfQVjaMR71P+yJVGODrt5V6+T0BDYH4EMfGgdC/2HWDVjSSFw888GSzAZUwuska3+zxNUCDco6rQ==} cpu: [x64] os: [linux] + libc: [musl] '@rollup/rollup-openharmony-arm64@4.52.0': resolution: {integrity: sha512-A1JalX4MOaFAAyGgpO7XP5khquv/7xKzLIyLmhNrbiCxWpMlnsTYr8dnsWM7sEeotNmxvSOEL7F65j0HXFcFsw==} @@ -5241,24 +5283,28 @@ packages: engines: {node: '>=10'} cpu: [arm64] os: [linux] + libc: [glibc] '@swc/core-linux-arm64-musl@1.11.29': resolution: {integrity: sha512-PwjB10BC0N+Ce7RU/L23eYch6lXFHz7r3NFavIcwDNa/AAqywfxyxh13OeRy+P0cg7NDpWEETWspXeI4Ek8otw==} engines: {node: '>=10'} cpu: [arm64] os: [linux] + libc: [musl] '@swc/core-linux-x64-gnu@1.11.29': resolution: {integrity: sha512-i62vBVoPaVe9A3mc6gJG07n0/e7FVeAvdD9uzZTtGLiuIfVfIBta8EMquzvf+POLycSk79Z6lRhGPZPJPYiQaA==} engines: {node: '>=10'} cpu: [x64] os: [linux] + libc: [glibc] '@swc/core-linux-x64-musl@1.11.29': resolution: {integrity: sha512-YER0XU1xqFdK0hKkfSVX1YIyCvMDI7K07GIpefPvcfyNGs38AXKhb2byySDjbVxkdl4dycaxxhRyhQ2gKSlsFQ==} engines: {node: '>=10'} cpu: [x64] os: [linux] + libc: [musl] '@swc/core-win32-arm64-msvc@1.11.29': resolution: {integrity: sha512-po+WHw+k9g6FAg5IJ+sMwtA/fIUL3zPQ4m/uJgONBATCVnDDkyW6dBA49uHNVtSEvjvhuD8DVWdFP847YTcITw==} @@ -9130,8 +9176,8 @@ packages: engines: {node: '>=0.4.7'} hasBin: true - happy-dom@20.3.9: - resolution: {integrity: sha512-OIoj0PcK2JaxQuANHxWkxFRSNXAuSgO1vCzCT66KItE0W/ieZLG+/iW8OetlxB+F9EaPB7DoFYKAubFG1f4Mvw==} + happy-dom@20.4.0: + resolution: {integrity: sha512-RDeQm3dT9n0A5f/TszjUmNCLEuPnMGv3Tv4BmNINebz/h17PA6LMBcxJ5FrcqltNBMh9jA/8ufgDdBYUdBt+eg==} engines: {node: '>=20.0.0'} has-bigints@1.1.0: @@ -10271,24 +10317,28 @@ packages: engines: {node: '>= 12.0.0'} cpu: [arm64] os: [linux] + libc: [glibc] lightningcss-linux-arm64-musl@1.31.1: resolution: {integrity: sha512-mVZ7Pg2zIbe3XlNbZJdjs86YViQFoJSpc41CbVmKBPiGmC4YrfeOyz65ms2qpAobVd7WQsbW4PdsSJEMymyIMg==} engines: {node: '>= 12.0.0'} cpu: [arm64] os: [linux] + libc: [musl] lightningcss-linux-x64-gnu@1.31.1: resolution: {integrity: sha512-xGlFWRMl+0KvUhgySdIaReQdB4FNudfUTARn7q0hh/V67PVGCs3ADFjw+6++kG1RNd0zdGRlEKa+T13/tQjPMA==} engines: {node: '>= 12.0.0'} cpu: [x64] os: [linux] + libc: [glibc] lightningcss-linux-x64-musl@1.31.1: resolution: {integrity: sha512-eowF8PrKHw9LpoZii5tdZwnBcYDxRw2rRCyvAXLi34iyeYfqCQNA9rmUM0ce62NlPhCvof1+9ivRaTY6pSKDaA==} engines: {node: '>= 12.0.0'} cpu: [x64] os: [linux] + libc: [musl] lightningcss-win32-arm64-msvc@1.31.1: resolution: {integrity: sha512-aJReEbSEQzx1uBlQizAOBSjcmr9dCdL3XuC/6HLXAxmtErsj2ICo5yYggg1qOODQMtnjNQv2UHb9NpOuFtYe4w==} @@ -13005,48 +13055,56 @@ packages: engines: {node: '>=14.0.0'} cpu: [arm64] os: [linux] + libc: glibc sass-embedded-linux-arm@1.91.0: resolution: {integrity: sha512-ppAZLp3eZ9oTjYdQDf4nM7EehDpkxq5H1hE8FOrx8LpY7pxn6QF+SRpAbRjdfFChRw0K7vh+IiCnQEMp7uLNAg==} engines: {node: '>=14.0.0'} cpu: [arm] os: [linux] + libc: glibc sass-embedded-linux-musl-arm64@1.91.0: resolution: {integrity: sha512-VfbPpID1C5TT7rukob6CKgefx/TsLE+XZieMNd00hvfJ8XhqPr5DGvSMCNpXlwaedzTirbJu357m+n2PJI9TFQ==} engines: {node: '>=14.0.0'} cpu: [arm64] os: [linux] + libc: musl sass-embedded-linux-musl-arm@1.91.0: resolution: {integrity: sha512-znEsNC2FurPF9+XwQQ6e/fVoic3e5D3/kMB41t/bE8byJVRdaPhkdsszt3pZUE56nNGYoCuieSXUkk7VvyPHsw==} engines: {node: '>=14.0.0'} cpu: [arm] os: [linux] + libc: musl sass-embedded-linux-musl-riscv64@1.91.0: resolution: {integrity: sha512-ZfLGldKEEeZjuljKks835LTq7jDRI3gXsKKXXgZGzN6Yymd4UpBOGWiDQlWsWTvw5UwDU2xfFh0wSXbLGHTjVA==} engines: {node: '>=14.0.0'} cpu: [riscv64] os: [linux] + libc: musl sass-embedded-linux-musl-x64@1.91.0: resolution: {integrity: sha512-4kSiSGPKFMbLvTRbP/ibyiKheOA3fwsJKWU0SOuekSPmybMdrhNkTm0REp6+nehZRE60kC3lXmEV4a7w8Jrwyg==} engines: {node: '>=14.0.0'} cpu: [x64] os: [linux] + libc: musl sass-embedded-linux-riscv64@1.91.0: resolution: {integrity: sha512-Y3Fj94SYYvMX9yo49T78yBgBWXtG3EyYUT5K05XyCYkcdl1mVXJSrEmqmRfe4vQGUCaSe/6s7MmsA9Q+mQez7Q==} engines: {node: '>=14.0.0'} cpu: [riscv64] os: [linux] + libc: glibc sass-embedded-linux-x64@1.91.0: resolution: {integrity: sha512-XwIUaE7pQP/ezS5te80hlyheYiUlo0FolQ0HBtxohpavM+DVX2fjwFm5LOUJHrLAqP+TLBtChfFeLj1Ie4Aenw==} engines: {node: '>=14.0.0'} cpu: [x64] os: [linux] + libc: glibc sass-embedded-unknown-all@1.91.0: resolution: {integrity: sha512-Bj6v7ScQp/HtO91QBy6ood9AArSIN7/RNcT4E7P9QoY3o+e6621Vd28lV81vdepPrt6u6PgJoVKmLNODqB6Q+A==} @@ -16047,6 +16105,8 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.4.0 '@ckeditor/ckeditor5-watchdog': 47.4.0 es-toolkit: 1.39.5 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-dev-build-tools@54.3.2(@swc/helpers@0.5.17)(tslib@2.8.1)(typescript@5.9.3)': dependencies: @@ -16250,8 +16310,6 @@ snapshots: '@ckeditor/ckeditor5-core': 47.4.0 '@ckeditor/ckeditor5-engine': 47.4.0 '@ckeditor/ckeditor5-utils': 47.4.0 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-essentials@47.4.0': dependencies: @@ -16712,8 +16770,6 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.4.0 '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-restricted-editing@47.4.0': dependencies: @@ -16800,8 +16856,6 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.4.0 '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-special-characters@47.4.0': dependencies: @@ -21465,7 +21519,7 @@ snapshots: '@vitest/browser-webdriverio@4.0.18(bufferutil@4.0.9)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(utf-8-validate@6.0.5)(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.31.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1))(vitest@4.0.18)(webdriverio@9.23.2(bufferutil@4.0.9)(utf-8-validate@6.0.5))': dependencies: '@vitest/browser': 4.0.18(bufferutil@4.0.9)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(utf-8-validate@6.0.5)(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.31.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1))(vitest@4.0.18) - vitest: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@24.10.9)(@vitest/browser-webdriverio@4.0.18)(@vitest/ui@4.0.18)(happy-dom@20.3.9(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.31.1)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) + vitest: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@24.10.9)(@vitest/browser-webdriverio@4.0.18)(@vitest/ui@4.0.18)(happy-dom@20.4.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.31.1)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) webdriverio: 9.23.2(bufferutil@4.0.9)(utf-8-validate@6.0.5) transitivePeerDependencies: - bufferutil @@ -21482,7 +21536,7 @@ snapshots: pngjs: 7.0.0 sirv: 3.0.2 tinyrainbow: 3.0.3 - vitest: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@24.10.9)(@vitest/browser-webdriverio@4.0.18)(@vitest/ui@4.0.18)(happy-dom@20.3.9(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.31.1)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) + vitest: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@24.10.9)(@vitest/browser-webdriverio@4.0.18)(@vitest/ui@4.0.18)(happy-dom@20.4.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.31.1)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) ws: 8.19.0(bufferutil@4.0.9)(utf-8-validate@6.0.5) transitivePeerDependencies: - bufferutil @@ -21502,7 +21556,7 @@ snapshots: magicast: 0.5.1 obug: 2.1.1 tinyrainbow: 3.0.3 - vitest: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@24.10.9)(@vitest/browser-webdriverio@4.0.18)(@vitest/ui@4.0.18)(happy-dom@20.3.9(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.31.1)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) + vitest: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@24.10.9)(@vitest/browser-webdriverio@4.0.18)(@vitest/ui@4.0.18)(happy-dom@20.4.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.31.1)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) transitivePeerDependencies: - supports-color @@ -21518,7 +21572,7 @@ snapshots: obug: 2.1.1 std-env: 3.10.0 tinyrainbow: 3.0.3 - vitest: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@24.10.9)(@vitest/browser-webdriverio@4.0.18)(@vitest/ui@4.0.18)(happy-dom@20.3.9(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.31.1)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) + vitest: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@24.10.9)(@vitest/browser-webdriverio@4.0.18)(@vitest/ui@4.0.18)(happy-dom@20.4.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.31.1)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) optionalDependencies: '@vitest/browser': 4.0.18(bufferutil@4.0.9)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(utf-8-validate@6.0.5)(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.31.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1))(vitest@4.0.18) @@ -21566,7 +21620,7 @@ snapshots: sirv: 3.0.2 tinyglobby: 0.2.15 tinyrainbow: 3.0.3 - vitest: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@24.10.9)(@vitest/browser-webdriverio@4.0.18)(@vitest/ui@4.0.18)(happy-dom@20.3.9(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.31.1)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) + vitest: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@24.10.9)(@vitest/browser-webdriverio@4.0.18)(@vitest/ui@4.0.18)(happy-dom@20.4.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.31.1)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) '@vitest/utils@4.0.18': dependencies: @@ -25537,7 +25591,7 @@ snapshots: optionalDependencies: uglify-js: 3.19.3 - happy-dom@20.3.9(bufferutil@4.0.9)(utf-8-validate@6.0.5): + happy-dom@20.4.0(bufferutil@4.0.9)(utf-8-validate@6.0.5): dependencies: '@types/node': 24.10.9 '@types/whatwg-mimetype': 3.0.2 @@ -32014,7 +32068,7 @@ snapshots: tsx: 4.21.0 yaml: 2.8.1 - vitest@4.0.18(@opentelemetry/api@1.9.0)(@types/node@24.10.9)(@vitest/browser-webdriverio@4.0.18)(@vitest/ui@4.0.18)(happy-dom@20.3.9(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.31.1)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1): + vitest@4.0.18(@opentelemetry/api@1.9.0)(@types/node@24.10.9)(@vitest/browser-webdriverio@4.0.18)(@vitest/ui@4.0.18)(happy-dom@20.4.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.31.1)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1): dependencies: '@vitest/expect': 4.0.18 '@vitest/mocker': 4.0.18(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.31.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1)) @@ -32041,7 +32095,7 @@ snapshots: '@types/node': 24.10.9 '@vitest/browser-webdriverio': 4.0.18(bufferutil@4.0.9)(msw@2.7.5(@types/node@24.10.9)(typescript@5.9.3))(utf-8-validate@6.0.5)(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.31.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1))(vitest@4.0.18)(webdriverio@9.23.2(bufferutil@4.0.9)(utf-8-validate@6.0.5)) '@vitest/ui': 4.0.18(vitest@4.0.18) - happy-dom: 20.3.9(bufferutil@4.0.9)(utf-8-validate@6.0.5) + happy-dom: 20.4.0(bufferutil@4.0.9)(utf-8-validate@6.0.5) jsdom: 26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5) transitivePeerDependencies: - jiti From 4c6efeb0d83b41c481057813b0452e7e7f76ff61 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 29 Jan 2026 01:00:59 +0000 Subject: [PATCH 348/353] chore(deps): update dependency openai to v6.17.0 --- apps/server/package.json | 2 +- pnpm-lock.yaml | 76 ++++++++++++++++++++++++++++++++++------ 2 files changed, 66 insertions(+), 12 deletions(-) diff --git a/apps/server/package.json b/apps/server/package.json index bd0beeed83..d0779926be 100644 --- a/apps/server/package.json +++ b/apps/server/package.json @@ -112,7 +112,7 @@ "multer": "2.0.2", "normalize-strings": "1.1.1", "ollama": "0.6.3", - "openai": "6.16.0", + "openai": "6.17.0", "rand-token": "1.0.1", "safe-compare": "1.1.4", "sanitize-filename": "1.6.3", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index f9498858ad..417cd5e341 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -751,8 +751,8 @@ importers: specifier: 0.6.3 version: 0.6.3 openai: - specifier: 6.16.0 - version: 6.16.0(ws@8.19.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(zod@4.1.12) + specifier: 6.17.0 + version: 6.17.0(ws@8.19.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(zod@4.1.12) rand-token: specifier: 1.0.1 version: 1.0.1 @@ -3327,89 +3327,105 @@ packages: resolution: {integrity: sha512-excjX8DfsIcJ10x1Kzr4RcWe1edC9PquDRRPx3YVCvQv+U5p7Yin2s32ftzikXojb1PIFc/9Mt28/y+iRklkrw==} cpu: [arm64] os: [linux] + libc: [glibc] '@img/sharp-libvips-linux-arm@1.2.4': resolution: {integrity: sha512-bFI7xcKFELdiNCVov8e44Ia4u2byA+l3XtsAj+Q8tfCwO6BQ8iDojYdvoPMqsKDkuoOo+X6HZA0s0q11ANMQ8A==} cpu: [arm] os: [linux] + libc: [glibc] '@img/sharp-libvips-linux-ppc64@1.2.4': resolution: {integrity: sha512-FMuvGijLDYG6lW+b/UvyilUWu5Ayu+3r2d1S8notiGCIyYU/76eig1UfMmkZ7vwgOrzKzlQbFSuQfgm7GYUPpA==} cpu: [ppc64] os: [linux] + libc: [glibc] '@img/sharp-libvips-linux-riscv64@1.2.4': resolution: {integrity: sha512-oVDbcR4zUC0ce82teubSm+x6ETixtKZBh/qbREIOcI3cULzDyb18Sr/Wcyx7NRQeQzOiHTNbZFF1UwPS2scyGA==} cpu: [riscv64] os: [linux] + libc: [glibc] '@img/sharp-libvips-linux-s390x@1.2.4': resolution: {integrity: sha512-qmp9VrzgPgMoGZyPvrQHqk02uyjA0/QrTO26Tqk6l4ZV0MPWIW6LTkqOIov+J1yEu7MbFQaDpwdwJKhbJvuRxQ==} cpu: [s390x] os: [linux] + libc: [glibc] '@img/sharp-libvips-linux-x64@1.2.4': resolution: {integrity: sha512-tJxiiLsmHc9Ax1bz3oaOYBURTXGIRDODBqhveVHonrHJ9/+k89qbLl0bcJns+e4t4rvaNBxaEZsFtSfAdquPrw==} cpu: [x64] os: [linux] + libc: [glibc] '@img/sharp-libvips-linuxmusl-arm64@1.2.4': resolution: {integrity: sha512-FVQHuwx1IIuNow9QAbYUzJ+En8KcVm9Lk5+uGUQJHaZmMECZmOlix9HnH7n1TRkXMS0pGxIJokIVB9SuqZGGXw==} cpu: [arm64] os: [linux] + libc: [musl] '@img/sharp-libvips-linuxmusl-x64@1.2.4': resolution: {integrity: sha512-+LpyBk7L44ZIXwz/VYfglaX/okxezESc6UxDSoyo2Ks6Jxc4Y7sGjpgU9s4PMgqgjj1gZCylTieNamqA1MF7Dg==} cpu: [x64] os: [linux] + libc: [musl] '@img/sharp-linux-arm64@0.34.5': resolution: {integrity: sha512-bKQzaJRY/bkPOXyKx5EVup7qkaojECG6NLYswgktOZjaXecSAeCWiZwwiFf3/Y+O1HrauiE3FVsGxFg8c24rZg==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [arm64] os: [linux] + libc: [glibc] '@img/sharp-linux-arm@0.34.5': resolution: {integrity: sha512-9dLqsvwtg1uuXBGZKsxem9595+ujv0sJ6Vi8wcTANSFpwV/GONat5eCkzQo/1O6zRIkh0m/8+5BjrRr7jDUSZw==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [arm] os: [linux] + libc: [glibc] '@img/sharp-linux-ppc64@0.34.5': resolution: {integrity: sha512-7zznwNaqW6YtsfrGGDA6BRkISKAAE1Jo0QdpNYXNMHu2+0dTrPflTLNkpc8l7MUP5M16ZJcUvysVWWrMefZquA==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [ppc64] os: [linux] + libc: [glibc] '@img/sharp-linux-riscv64@0.34.5': resolution: {integrity: sha512-51gJuLPTKa7piYPaVs8GmByo7/U7/7TZOq+cnXJIHZKavIRHAP77e3N2HEl3dgiqdD/w0yUfiJnII77PuDDFdw==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [riscv64] os: [linux] + libc: [glibc] '@img/sharp-linux-s390x@0.34.5': resolution: {integrity: sha512-nQtCk0PdKfho3eC5MrbQoigJ2gd1CgddUMkabUj+rBevs8tZ2cULOx46E7oyX+04WGfABgIwmMC0VqieTiR4jg==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [s390x] os: [linux] + libc: [glibc] '@img/sharp-linux-x64@0.34.5': resolution: {integrity: sha512-MEzd8HPKxVxVenwAa+JRPwEC7QFjoPWuS5NZnBt6B3pu7EG2Ge0id1oLHZpPJdn3OQK+BQDiw9zStiHBTJQQQQ==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [x64] os: [linux] + libc: [glibc] '@img/sharp-linuxmusl-arm64@0.34.5': resolution: {integrity: sha512-fprJR6GtRsMt6Kyfq44IsChVZeGN97gTD331weR1ex1c1rypDEABN6Tm2xa1wE6lYb5DdEnk03NZPqA7Id21yg==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [arm64] os: [linux] + libc: [musl] '@img/sharp-linuxmusl-x64@0.34.5': resolution: {integrity: sha512-Jg8wNT1MUzIvhBFxViqrEhWDGzqymo3sV7z7ZsaWbZNDLXRJZoRGrjulp60YYtV4wfY8VIKcWidjojlLcWrd8Q==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [x64] os: [linux] + libc: [musl] '@img/sharp-wasm32@0.34.5': resolution: {integrity: sha512-OdWTEiVkY2PHwqkbBI8frFxQQFekHaSSkUIJkwzclWZe64O1X4UlUjqqqLaPbUpMOQk6FBu/HtlGXNblIs0huw==} @@ -3904,30 +3920,35 @@ packages: engines: {node: '>= 10'} cpu: [arm64] os: [linux] + libc: [glibc] '@napi-rs/canvas-linux-arm64-musl@0.1.88': resolution: {integrity: sha512-kYyNrUsHLkoGHBc77u4Unh067GrfiCUMbGHC2+OTxbeWfZkPt2o32UOQkhnSswKd9Fko/wSqqGkY956bIUzruA==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] + libc: [musl] '@napi-rs/canvas-linux-riscv64-gnu@0.1.88': resolution: {integrity: sha512-HVuH7QgzB0yavYdNZDRyAsn/ejoXB0hn8twwFnOqUbCCdkV+REna7RXjSR7+PdfW0qMQ2YYWsLvVBT5iL/mGpw==} engines: {node: '>= 10'} cpu: [riscv64] os: [linux] + libc: [glibc] '@napi-rs/canvas-linux-x64-gnu@0.1.88': resolution: {integrity: sha512-hvcvKIcPEQrvvJtJnwD35B3qk6umFJ8dFIr8bSymfrSMem0EQsfn1ztys8ETIFndTwdNWJKWluvxztA41ivsEw==} engines: {node: '>= 10'} cpu: [x64] os: [linux] + libc: [glibc] '@napi-rs/canvas-linux-x64-musl@0.1.88': resolution: {integrity: sha512-eSMpGYY2xnZSQ6UxYJ6plDboxq4KeJ4zT5HaVkUnbObNN6DlbJe0Mclh3wifAmquXfrlgTZt6zhHsUgz++AK6g==} engines: {node: '>= 10'} cpu: [x64] os: [linux] + libc: [musl] '@napi-rs/canvas-win32-arm64-msvc@0.1.88': resolution: {integrity: sha512-qcIFfEgHrchyYqRrxsCeTQgpJZ/GqHiqPcU/Fvw/ARVlQeDX1VyFH+X+0gCR2tca6UJrq96vnW+5o7buCq+erA==} @@ -4149,36 +4170,42 @@ packages: engines: {node: '>= 10.0.0'} cpu: [arm] os: [linux] + libc: [glibc] '@parcel/watcher-linux-arm-musl@2.5.4': resolution: {integrity: sha512-kGO8RPvVrcAotV4QcWh8kZuHr9bXi9a3bSZw7kFarYR0+fGliU7hd/zevhjw8fnvIKG3J9EO5G6sXNGCSNMYPQ==} engines: {node: '>= 10.0.0'} cpu: [arm] os: [linux] + libc: [musl] '@parcel/watcher-linux-arm64-glibc@2.5.4': resolution: {integrity: sha512-KU75aooXhqGFY2W5/p8DYYHt4hrjHZod8AhcGAmhzPn/etTa+lYCDB2b1sJy3sWJ8ahFVTdy+EbqSBvMx3iFlw==} engines: {node: '>= 10.0.0'} cpu: [arm64] os: [linux] + libc: [glibc] '@parcel/watcher-linux-arm64-musl@2.5.4': resolution: {integrity: sha512-Qx8uNiIekVutnzbVdrgSanM+cbpDD3boB1f8vMtnuG5Zau4/bdDbXyKwIn0ToqFhIuob73bcxV9NwRm04/hzHQ==} engines: {node: '>= 10.0.0'} cpu: [arm64] os: [linux] + libc: [musl] '@parcel/watcher-linux-x64-glibc@2.5.4': resolution: {integrity: sha512-UYBQvhYmgAv61LNUn24qGQdjtycFBKSK3EXr72DbJqX9aaLbtCOO8+1SkKhD/GNiJ97ExgcHBrukcYhVjrnogA==} engines: {node: '>= 10.0.0'} cpu: [x64] os: [linux] + libc: [glibc] '@parcel/watcher-linux-x64-musl@2.5.4': resolution: {integrity: sha512-YoRWCVgxv8akZrMhdyVi6/TyoeeMkQ0PGGOf2E4omODrvd1wxniXP+DBynKoHryStks7l+fDAMUBRzqNHrVOpg==} engines: {node: '>= 10.0.0'} cpu: [x64] os: [linux] + libc: [musl] '@parcel/watcher-win32-arm64@2.5.4': resolution: {integrity: sha512-iby+D/YNXWkiQNYcIhg8P5hSjzXEHaQrk2SLrWOUD7VeC4Ohu0WQvmV+HDJokZVJ2UjJ4AGXW3bx7Lls9Ln4TQ==} @@ -4674,11 +4701,13 @@ packages: resolution: {integrity: sha512-hzBmOtYdC4369XxN2SNJ3oBlXKWNif3ieWBT+oh/qvAeox4fQR0ngqyh+kIGOufBnP5Zc2rqJf9LzIbJw3Tx/Q==} cpu: [arm64] os: [linux] + libc: [glibc] '@rolldown/binding-linux-arm64-musl@1.0.0-beta.29': resolution: {integrity: sha512-6B35GmFJJ4RX88OgubrnUmuJBUgRh6/OTXIpy8m/VUnoc683lufIPo26HW/0LxLgxp2GM7KHr3LOULcVxbqq4Q==} cpu: [arm64] os: [linux] + libc: [musl] '@rolldown/binding-linux-arm64-ohos@1.0.0-beta.29': resolution: {integrity: sha512-z3ru8fUCunQM8q9I7RbDVMT5cxzxVVVBNNKM5/qAQQrdObd1u8g0LR5z0yLtaFWzybwLVdPtJDRcXtLm5tOBFA==} @@ -4689,11 +4718,13 @@ packages: resolution: {integrity: sha512-n6fs4L7j99MIiI6vKhQDdyScv4/uMAPtIMkB0zGbUX8MKWT1osym1hvWVdlENjnS/Phf0zzhjyOgoFDzdhI1cQ==} cpu: [x64] os: [linux] + libc: [glibc] '@rolldown/binding-linux-x64-musl@1.0.0-beta.29': resolution: {integrity: sha512-C5hcJgtDN4rp6/WsPTQSDVUWrdnIC//ynMGcUIh1O0anm9KnSy47zKQ5D9EqtlEKvO+2PPqmyUVJ2DTq18nlVA==} cpu: [x64] os: [linux] + libc: [musl] '@rolldown/binding-wasm32-wasi@1.0.0-beta.29': resolution: {integrity: sha512-lMN1IBItdZFO182Sdus9oVuNDqyIymn/bsR5KwgeGaiqLsrmpQHBSLwkS/nKJO1nzYlpGDRugFSpnrSJ5ZmihQ==} @@ -4833,56 +4864,67 @@ packages: resolution: {integrity: sha512-aL6hRwu0k7MTUESgkg7QHY6CoqPgr6gdQXRJI1/VbFlUMwsSzPGSR7sG5d+MCbYnJmJwThc2ol3nixj1fvI/zQ==} cpu: [arm] os: [linux] + libc: [glibc] '@rollup/rollup-linux-arm-musleabihf@4.52.0': resolution: {integrity: sha512-BTs0M5s1EJejgIBJhCeiFo7GZZ2IXWkFGcyZhxX4+8usnIo5Mti57108vjXFIQmmJaRyDwmV59Tw64Ap1dkwMw==} cpu: [arm] os: [linux] + libc: [musl] '@rollup/rollup-linux-arm64-gnu@4.52.0': resolution: {integrity: sha512-uj672IVOU9m08DBGvoPKPi/J8jlVgjh12C9GmjjBxCTQc3XtVmRkRKyeHSmIKQpvJ7fIm1EJieBUcnGSzDVFyw==} cpu: [arm64] os: [linux] + libc: [glibc] '@rollup/rollup-linux-arm64-musl@4.52.0': resolution: {integrity: sha512-/+IVbeDMDCtB/HP/wiWsSzduD10SEGzIZX2945KSgZRNi4TSkjHqRJtNTVtVb8IRwhJ65ssI56krlLik+zFWkw==} cpu: [arm64] os: [linux] + libc: [musl] '@rollup/rollup-linux-loong64-gnu@4.52.0': resolution: {integrity: sha512-U1vVzvSWtSMWKKrGoROPBXMh3Vwn93TA9V35PldokHGqiUbF6erSzox/5qrSMKp6SzakvyjcPiVF8yB1xKr9Pg==} cpu: [loong64] os: [linux] + libc: [glibc] '@rollup/rollup-linux-ppc64-gnu@4.52.0': resolution: {integrity: sha512-X/4WfuBAdQRH8cK3DYl8zC00XEE6aM472W+QCycpQJeLWVnHfkv7RyBFVaTqNUMsTgIX8ihMjCvFF9OUgeABzw==} cpu: [ppc64] os: [linux] + libc: [glibc] '@rollup/rollup-linux-riscv64-gnu@4.52.0': resolution: {integrity: sha512-xIRYc58HfWDBZoLmWfWXg2Sq8VCa2iJ32B7mqfWnkx5mekekl0tMe7FHpY8I72RXEcUkaWawRvl3qA55og+cwQ==} cpu: [riscv64] os: [linux] + libc: [glibc] '@rollup/rollup-linux-riscv64-musl@4.52.0': resolution: {integrity: sha512-mbsoUey05WJIOz8U1WzNdf+6UMYGwE3fZZnQqsM22FZ3wh1N887HT6jAOjXs6CNEK3Ntu2OBsyQDXfIjouI4dw==} cpu: [riscv64] os: [linux] + libc: [musl] '@rollup/rollup-linux-s390x-gnu@4.52.0': resolution: {integrity: sha512-qP6aP970bucEi5KKKR4AuPFd8aTx9EF6BvutvYxmZuWLJHmnq4LvBfp0U+yFDMGwJ+AIJEH5sIP+SNypauMWzg==} cpu: [s390x] os: [linux] + libc: [glibc] '@rollup/rollup-linux-x64-gnu@4.52.0': resolution: {integrity: sha512-nmSVN+F2i1yKZ7rJNKO3G7ZzmxJgoQBQZ/6c4MuS553Grmr7WqR7LLDcYG53Z2m9409z3JLt4sCOhLdbKQ3HmA==} cpu: [x64] os: [linux] + libc: [glibc] '@rollup/rollup-linux-x64-musl@4.52.0': resolution: {integrity: sha512-2d0qRo33G6TfQVjaMR71P+yJVGODrt5V6+T0BDYH4EMfGgdC/2HWDVjSSFw888GSzAZUwuska3+zxNUCDco6rQ==} cpu: [x64] os: [linux] + libc: [musl] '@rollup/rollup-openharmony-arm64@4.52.0': resolution: {integrity: sha512-A1JalX4MOaFAAyGgpO7XP5khquv/7xKzLIyLmhNrbiCxWpMlnsTYr8dnsWM7sEeotNmxvSOEL7F65j0HXFcFsw==} @@ -5241,24 +5283,28 @@ packages: engines: {node: '>=10'} cpu: [arm64] os: [linux] + libc: [glibc] '@swc/core-linux-arm64-musl@1.11.29': resolution: {integrity: sha512-PwjB10BC0N+Ce7RU/L23eYch6lXFHz7r3NFavIcwDNa/AAqywfxyxh13OeRy+P0cg7NDpWEETWspXeI4Ek8otw==} engines: {node: '>=10'} cpu: [arm64] os: [linux] + libc: [musl] '@swc/core-linux-x64-gnu@1.11.29': resolution: {integrity: sha512-i62vBVoPaVe9A3mc6gJG07n0/e7FVeAvdD9uzZTtGLiuIfVfIBta8EMquzvf+POLycSk79Z6lRhGPZPJPYiQaA==} engines: {node: '>=10'} cpu: [x64] os: [linux] + libc: [glibc] '@swc/core-linux-x64-musl@1.11.29': resolution: {integrity: sha512-YER0XU1xqFdK0hKkfSVX1YIyCvMDI7K07GIpefPvcfyNGs38AXKhb2byySDjbVxkdl4dycaxxhRyhQ2gKSlsFQ==} engines: {node: '>=10'} cpu: [x64] os: [linux] + libc: [musl] '@swc/core-win32-arm64-msvc@1.11.29': resolution: {integrity: sha512-po+WHw+k9g6FAg5IJ+sMwtA/fIUL3zPQ4m/uJgONBATCVnDDkyW6dBA49uHNVtSEvjvhuD8DVWdFP847YTcITw==} @@ -10271,24 +10317,28 @@ packages: engines: {node: '>= 12.0.0'} cpu: [arm64] os: [linux] + libc: [glibc] lightningcss-linux-arm64-musl@1.31.1: resolution: {integrity: sha512-mVZ7Pg2zIbe3XlNbZJdjs86YViQFoJSpc41CbVmKBPiGmC4YrfeOyz65ms2qpAobVd7WQsbW4PdsSJEMymyIMg==} engines: {node: '>= 12.0.0'} cpu: [arm64] os: [linux] + libc: [musl] lightningcss-linux-x64-gnu@1.31.1: resolution: {integrity: sha512-xGlFWRMl+0KvUhgySdIaReQdB4FNudfUTARn7q0hh/V67PVGCs3ADFjw+6++kG1RNd0zdGRlEKa+T13/tQjPMA==} engines: {node: '>= 12.0.0'} cpu: [x64] os: [linux] + libc: [glibc] lightningcss-linux-x64-musl@1.31.1: resolution: {integrity: sha512-eowF8PrKHw9LpoZii5tdZwnBcYDxRw2rRCyvAXLi34iyeYfqCQNA9rmUM0ce62NlPhCvof1+9ivRaTY6pSKDaA==} engines: {node: '>= 12.0.0'} cpu: [x64] os: [linux] + libc: [musl] lightningcss-win32-arm64-msvc@1.31.1: resolution: {integrity: sha512-aJReEbSEQzx1uBlQizAOBSjcmr9dCdL3XuC/6HLXAxmtErsj2ICo5yYggg1qOODQMtnjNQv2UHb9NpOuFtYe4w==} @@ -11408,8 +11458,8 @@ packages: resolution: {integrity: sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==} engines: {node: '>=12'} - openai@6.16.0: - resolution: {integrity: sha512-fZ1uBqjFUjXzbGc35fFtYKEOxd20kd9fDpFeqWtsOZWiubY8CZ1NAlXHW3iathaFvqmNtCWMIsosCuyeI7Joxg==} + openai@6.17.0: + resolution: {integrity: sha512-NHRpPEUPzAvFOAFs9+9pC6+HCw/iWsYsKCMPXH5Kw7BpMxqd8g/A07/1o7Gx2TWtCnzevVRyKMRFqyiHyAlqcA==} hasBin: true peerDependencies: ws: ^8.18.0 @@ -13005,48 +13055,56 @@ packages: engines: {node: '>=14.0.0'} cpu: [arm64] os: [linux] + libc: glibc sass-embedded-linux-arm@1.91.0: resolution: {integrity: sha512-ppAZLp3eZ9oTjYdQDf4nM7EehDpkxq5H1hE8FOrx8LpY7pxn6QF+SRpAbRjdfFChRw0K7vh+IiCnQEMp7uLNAg==} engines: {node: '>=14.0.0'} cpu: [arm] os: [linux] + libc: glibc sass-embedded-linux-musl-arm64@1.91.0: resolution: {integrity: sha512-VfbPpID1C5TT7rukob6CKgefx/TsLE+XZieMNd00hvfJ8XhqPr5DGvSMCNpXlwaedzTirbJu357m+n2PJI9TFQ==} engines: {node: '>=14.0.0'} cpu: [arm64] os: [linux] + libc: musl sass-embedded-linux-musl-arm@1.91.0: resolution: {integrity: sha512-znEsNC2FurPF9+XwQQ6e/fVoic3e5D3/kMB41t/bE8byJVRdaPhkdsszt3pZUE56nNGYoCuieSXUkk7VvyPHsw==} engines: {node: '>=14.0.0'} cpu: [arm] os: [linux] + libc: musl sass-embedded-linux-musl-riscv64@1.91.0: resolution: {integrity: sha512-ZfLGldKEEeZjuljKks835LTq7jDRI3gXsKKXXgZGzN6Yymd4UpBOGWiDQlWsWTvw5UwDU2xfFh0wSXbLGHTjVA==} engines: {node: '>=14.0.0'} cpu: [riscv64] os: [linux] + libc: musl sass-embedded-linux-musl-x64@1.91.0: resolution: {integrity: sha512-4kSiSGPKFMbLvTRbP/ibyiKheOA3fwsJKWU0SOuekSPmybMdrhNkTm0REp6+nehZRE60kC3lXmEV4a7w8Jrwyg==} engines: {node: '>=14.0.0'} cpu: [x64] os: [linux] + libc: musl sass-embedded-linux-riscv64@1.91.0: resolution: {integrity: sha512-Y3Fj94SYYvMX9yo49T78yBgBWXtG3EyYUT5K05XyCYkcdl1mVXJSrEmqmRfe4vQGUCaSe/6s7MmsA9Q+mQez7Q==} engines: {node: '>=14.0.0'} cpu: [riscv64] os: [linux] + libc: glibc sass-embedded-linux-x64@1.91.0: resolution: {integrity: sha512-XwIUaE7pQP/ezS5te80hlyheYiUlo0FolQ0HBtxohpavM+DVX2fjwFm5LOUJHrLAqP+TLBtChfFeLj1Ie4Aenw==} engines: {node: '>=14.0.0'} cpu: [x64] os: [linux] + libc: glibc sass-embedded-unknown-all@1.91.0: resolution: {integrity: sha512-Bj6v7ScQp/HtO91QBy6ood9AArSIN7/RNcT4E7P9QoY3o+e6621Vd28lV81vdepPrt6u6PgJoVKmLNODqB6Q+A==} @@ -16047,6 +16105,8 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.4.0 '@ckeditor/ckeditor5-watchdog': 47.4.0 es-toolkit: 1.39.5 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-dev-build-tools@54.3.2(@swc/helpers@0.5.17)(tslib@2.8.1)(typescript@5.9.3)': dependencies: @@ -16250,8 +16310,6 @@ snapshots: '@ckeditor/ckeditor5-core': 47.4.0 '@ckeditor/ckeditor5-engine': 47.4.0 '@ckeditor/ckeditor5-utils': 47.4.0 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-essentials@47.4.0': dependencies: @@ -16712,8 +16770,6 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.4.0 '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-restricted-editing@47.4.0': dependencies: @@ -16800,8 +16856,6 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.4.0 '@ckeditor/ckeditor5-utils': 47.4.0 ckeditor5: 47.4.0 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-special-characters@47.4.0': dependencies: @@ -28285,7 +28339,7 @@ snapshots: is-docker: 2.2.1 is-wsl: 2.2.0 - openai@6.16.0(ws@8.19.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(zod@4.1.12): + openai@6.17.0(ws@8.19.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(zod@4.1.12): optionalDependencies: ws: 8.19.0(bufferutil@4.0.9)(utf-8-validate@6.0.5) zod: 4.1.12 From a07405bec35a69157781ee985faf18b268d19675 Mon Sep 17 00:00:00 2001 From: Elian Doran <contact@eliandoran.me> Date: Thu, 29 Jan 2026 08:57:29 +0200 Subject: [PATCH 349/353] fix(desktop): nightly failing due to missing flatpak icon --- .../electron-forge/app-icon/png/128x128-dev.png | Bin 0 -> 6961 bytes scripts/icons/create-icons.sh | 1 + 2 files changed, 1 insertion(+) create mode 100644 apps/desktop/electron-forge/app-icon/png/128x128-dev.png diff --git a/apps/desktop/electron-forge/app-icon/png/128x128-dev.png b/apps/desktop/electron-forge/app-icon/png/128x128-dev.png new file mode 100644 index 0000000000000000000000000000000000000000..e2d90b9abf08769b7dd56485df1b18002868e9f3 GIT binary patch literal 6961 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 literal 0 HcmV?d00001 diff --git a/scripts/icons/create-icons.sh b/scripts/icons/create-icons.sh index 6092bb60b4..da696edc04 100644 --- a/scripts/icons/create-icons.sh +++ b/scripts/icons/create-icons.sh @@ -30,6 +30,7 @@ inkscape -w 256 -h 256 "$source_icon_dir/icon-color.svg" -o "./png/256x256.png" # Build dev icons (including tray) inkscape -w 16 -h 16 "$source_icon_dir/icon-purple.svg" -o "./png/16x16-dev.png" inkscape -w 32 -h 32 "$source_icon_dir/icon-purple.svg" -o "./png/32x32-dev.png" +inkscape -w 128 -h 128 "$source_icon_dir/icon-purple.svg" -o "./png/128x128-dev.png" inkscape -w 256 -h 256 "$source_icon_dir/icon-purple.svg" -o "./png/256x256-dev.png" # Build Mac default .icns From f384c422c4822147d12f4115ef7d9c8907d50cdb Mon Sep 17 00:00:00 2001 From: Hosted Weblate <hosted@weblate.org> Date: Thu, 29 Jan 2026 07:57:49 +0100 Subject: [PATCH 350/353] Update translation files Updated by "Cleanup translation files" add-on in Weblate. Translation: Trilium Notes/README Translate-URL: https://hosted.weblate.org/projects/trilium/readme/ --- docs/README-uk.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/README-uk.md b/docs/README-uk.md index 96763a1427..4ee51b8df1 100644 --- a/docs/README-uk.md +++ b/docs/README-uk.md @@ -125,8 +125,8 @@ Trilium Notes — це безкоштовний кросплатформний тема](https://docs.triliumnotes.org/user-guide/concepts/themes), підтримка тем користувача * [Evernote](https://docs.triliumnotes.org/user-guide/concepts/import-export/evernote) - and [Markdown import & - export](https://docs.triliumnotes.org/user-guide/concepts/import-export/markdown) + та [Markdown імпорт & + експорт](https://docs.triliumnotes.org/user-guide/concepts/import-export/markdown) * [Web Clipper](https://docs.triliumnotes.org/user-guide/setup/web-clipper) для легкого збереження веб-контенту * Настроюваний інтерфейс користувача (кнопки бічної панелі, віджети, що @@ -162,7 +162,7 @@ compatible with the latest zadam/trilium version of versions of TriliumNext/Trilium have their sync versions incremented which prevents direct migration. -## 💬 Discuss with us +## Обговоріть це з нами Не соромтеся приєднуватися до наших офіційних обговорень. Ми будемо раді почути про ваші функції, пропозиції чи проблеми! From e4cc3bef737896578a2c4ede12d70d426a6a05ae Mon Sep 17 00:00:00 2001 From: Ulices <hasecilu@tuta.io> Date: Thu, 29 Jan 2026 07:58:28 +0100 Subject: [PATCH 351/353] Translated using Weblate (Spanish) Currently translated at 100.0% (1763 of 1763 strings) Translation: Trilium Notes/Client Translate-URL: https://hosted.weblate.org/projects/trilium/client/es/ --- .../src/translations/es/translation.json | 171 +++++++++++++++--- 1 file changed, 146 insertions(+), 25 deletions(-) diff --git a/apps/client/src/translations/es/translation.json b/apps/client/src/translations/es/translation.json index ce157c052b..68ab070122 100644 --- a/apps/client/src/translations/es/translation.json +++ b/apps/client/src/translations/es/translation.json @@ -849,7 +849,8 @@ "calculate": "calcular", "subtree_size": "(tamaño del subárbol: {{size}} en {{count}} notas)", "title": "Información de nota", - "mime": "Tipo MIME" + "mime": "Tipo MIME", + "show_similar_notes": "Mostrar notas similares" }, "note_map": { "open_full": "Ampliar al máximo", @@ -912,7 +913,8 @@ "search_parameters": "Parámetros de búsqueda", "unknown_search_option": "Opción de búsqueda desconocida {{searchOptionName}}", "search_note_saved": "La nota de búsqueda se ha guardado en {{- notePathTitle}}", - "actions_executed": "Las acciones han sido ejecutadas." + "actions_executed": "Las acciones han sido ejecutadas.", + "view_options": "Ver opciones:" }, "similar_notes": { "title": "Notas similares", @@ -1015,7 +1017,13 @@ }, "editable_text": { "placeholder": "Escribe aquí el contenido de tu nota...", - "auto-detect-language": "Detectado automáticamente" + "auto-detect-language": "Detectado automáticamente", + "editor_crashed_title": "El editor de texto ha dejado de responder", + "editor_crashed_content": "Su contenido ha sido recuperado con éxito, pero puede que algunos de sus cambios más recientes no se hayan guardado.", + "editor_crashed_details_button": "Ver más detalles...", + "editor_crashed_details_intro": "Si experimenta este error varias veces, considere informarlo en GitHub adjuntando la siguiente información.", + "editor_crashed_details_title": "Información técnica", + "keeps-crashing": "El componente de edición sigue fallando. Por favor, intente reiniciar Trilium. Si el problema persiste, considere crear un informe de fallos." }, "empty": { "open_note_instruction": "Abra una nota escribiendo el título de la nota en la entrada a continuación o elija una nota en el árbol.", @@ -1331,8 +1339,8 @@ "code_mime_types": { "title": "Tipos MIME disponibles en el menú desplegable", "tooltip_syntax_highlighting": "Resaltado de sintaxis", - "tooltip_code_block_syntax": "Bloques de Código en notas de Texto", - "tooltip_code_note_syntax": "Notas de Código" + "tooltip_code_block_syntax": "Bloques de código en Notas de texto", + "tooltip_code_note_syntax": "Notas de código" }, "vim_key_bindings": { "use_vim_keybindings_in_code_notes": "Combinaciones de teclas Vim", @@ -1409,16 +1417,16 @@ "markdown": "Estilo Markdown" }, "highlights_list": { - "title": "Lista de aspectos destacados", - "description": "Puede personalizar la lista de aspectos destacados que se muestra en el panel derecho:", + "title": "Lista de puntos destacados", + "description": "Puede personalizar la lista de puntos destacados que se muestra en el panel derecho:", "bold": "Texto en negrita", "italic": "Texto en cursiva", "underline": "Texto subrayado", "color": "Texto con color", "bg_color": "Texto con color de fondo", - "visibility_title": "Visibilidad de la lista de aspectos destacados", - "visibility_description": "Puede ocultar el widget de aspectos destacados por nota agregando una etiqueta #hideHighlightWidget.", - "shortcut_info": "Puede configurar un método abreviado de teclado para alternar rápidamente el panel derecho (incluidos los aspectos destacados) en Opciones -> Atajos (nombre 'toggleRightPane')." + "visibility_title": "Visibilidad de la lista de puntos destacados", + "visibility_description": "Puede ocultar el widget de puntos destacados por nota agregando la etiqueta #hideHighlightWidget.", + "shortcut_info": "Puede configurar un método abreviado de teclado para alternar rápidamente el panel derecho (incluidos los puntos destacados) en Opciones -> Atajos (nombre 'toggleRightPane')." }, "table_of_contents": { "title": "Tabla de contenido", @@ -1654,7 +1662,10 @@ "convert-to-attachment-confirm": "¿Está seguro que desea convertir las notas seleccionadas en archivos adjuntos de sus notas padres? Esta operación solo aplica a notas de Imagen, otras notas serán omitidas.", "open-in-popup": "Edición rápida", "archive": "Archivar", - "unarchive": "Desarchivar" + "unarchive": "Desarchivar", + "open-in-a-new-window": "Abrir en una nueva ventana", + "hide-subtree": "Ocultar subárbol", + "show-subtree": "Mostrar subárbol" }, "shared_info": { "shared_publicly": "Esta nota está compartida públicamente en {{- link}}.", @@ -1715,7 +1726,13 @@ }, "highlights_list_2": { "title": "Lista de destacados", - "options": "Opciones" + "options": "Opciones", + "title_with_count_one": "{{count}} punto destacado", + "title_with_count_many": "{{count}} puntos destacados", + "title_with_count_other": "{{count}} puntos destacados", + "modal_title": "Configurar la lista de puntos destacados", + "menu_configure": "Configurar la lista de puntos destacados...", + "no_highlights": "Ningún punto destacado encontrado." }, "quick-search": { "placeholder": "Búsqueda rápida", @@ -1738,7 +1755,18 @@ "refresh-saved-search-results": "Refrescar resultados de búsqueda guardados", "create-child-note": "Crear subnota", "unhoist": "Desanclar", - "toggle-sidebar": "Alternar barra lateral" + "toggle-sidebar": "Alternar barra lateral", + "dropping-not-allowed": "No está permitido soltar notas en esta ubicación.", + "clone-indicator-tooltip": "Esta nota tiene {{- count}} padres: {{- parents}}", + "clone-indicator-tooltip-single": "Esta nota está clonada (1 padre adicional: {{- parent}})", + "shared-indicator-tooltip": "Esta nota está compartida públicamente", + "shared-indicator-tooltip-with-url": "Esta nota está compartida públicamente en: {{- url}}", + "subtree-hidden-tooltip_one": "{{count}} subnota que está oculta del árbol", + "subtree-hidden-tooltip_many": "{{count}} subnotas que están ocultas del árbol", + "subtree-hidden-tooltip_other": "{{count}} subnotas que están ocultas del árbol", + "subtree-hidden-moved-title": "Agregado a {{title}}", + "subtree-hidden-moved-description-collection": "Esta colección oculta sus subnotas en el árbol.", + "subtree-hidden-moved-description-other": "Las subnotas están ocultas en el árbol para esta nota." }, "title_bar_buttons": { "window-on-top": "Mantener esta ventana en la parte superior" @@ -1749,10 +1777,21 @@ "printing_pdf": "Exportando a PDF en curso..", "print_report_collection_content_one": "{{count}} nota en la colección no se puede imprimir porque no son compatibles o está protegida.", "print_report_collection_content_many": "{{count}} notas en la colección no se pueden imprimir porque no son compatibles o están protegidas.", - "print_report_collection_content_other": "{{count}} notas en la colección no se pueden imprimir porque no son compatibles o están protegidas." + "print_report_collection_content_other": "{{count}} notas en la colección no se pueden imprimir porque no son compatibles o están protegidas.", + "print_report_title": "Imprimir informe", + "print_report_collection_details_button": "Ver detalles", + "print_report_collection_details_ignored_notes": "Notas ignoradas" }, "note_title": { - "placeholder": "escriba el título de la nota aquí..." + "placeholder": "escriba el título de la nota aquí...", + "created_on": "Creado en <Value />", + "last_modified": "Modificado en <Value />", + "note_type_switcher_label": "Cambiar de {{type}} a:", + "note_type_switcher_others": "Otro tipo de nota", + "note_type_switcher_templates": "Plantilla", + "note_type_switcher_collection": "Colección", + "edited_notes": "Notas editadas en este día", + "promoted_attributes": "Atributos promovidos" }, "search_result": { "no_notes_found": "No se han encontrado notas para los parámetros de búsqueda dados.", @@ -1762,7 +1801,11 @@ "configure_launchbar": "Configurar barra de lanzamiento" }, "sql_result": { - "no_rows": "No se han devuelto filas para esta consulta" + "no_rows": "No se han devuelto filas para esta consulta", + "not_executed": "La consulta aún no ha sido ejecutada.", + "failed": "La ejecución de la consulta SQL ha fallado", + "statement_result": "Resultado de declaración", + "execute_now": "Ejecutar ahora" }, "sql_table_schemas": { "tables": "Tablas" @@ -1781,7 +1824,8 @@ }, "toc": { "table_of_contents": "Tabla de contenido", - "options": "Opciones" + "options": "Opciones", + "no_headings": "Sin encabezados." }, "watched_file_update_status": { "file_last_modified": "Archivo <code class=\"file-path\"></code> ha sido modificado por última vez en<span class=\"file-last-modified\"></span>.", @@ -1893,7 +1937,8 @@ "open_note_in_new_tab": "Abrir nota en una pestaña nueva", "open_note_in_new_split": "Abrir nota en una nueva división", "open_note_in_new_window": "Abrir nota en una nueva ventana", - "open_note_in_popup": "Edición rápida" + "open_note_in_popup": "Edición rápida", + "open_note_in_other_split": "Abrir nota en la otra división" }, "electron_integration": { "desktop-application": "Aplicación de escritorio", @@ -1962,10 +2007,11 @@ }, "note_language": { "not_set": "Idioma no establecido", - "configure-languages": "Configurar idiomas..." + "configure-languages": "Configurar idiomas...", + "help-on-languages": "Ayuda en idiomas de contenido..." }, "content_language": { - "title": "Contenido de idiomas", + "title": "Idiomas de contenido", "description": "Seleccione uno o más idiomas que deben aparecer en la selección del idioma en la sección Propiedades Básicas de una nota de texto de solo lectura o editable. Esto permitirá características tales como corrección de ortografía o soporte de derecha a izquierda." }, "switch_layout_button": { @@ -1980,7 +2026,8 @@ "button_title": "Exportar diagrama como PNG" }, "svg": { - "export_to_png": "El diagrama no pudo ser exportado a PNG." + "export_to_png": "El diagrama no pudo ser exportado a PNG.", + "export_to_svg": "El diagrama no pudo ser exportado a SVG." }, "code_theme": { "title": "Apariencia", @@ -2085,7 +2132,10 @@ "background_effects_title": "Los efectos de fondo son ahora estables", "background_effects_message": "En los dispositivos Windows, los efectos de fondo ya son totalmente estables. Los efectos de fondo añaden un toque de color a la interfaz de usuario difuminando el fondo que hay detrás. Esta técnica también se utiliza en otras aplicaciones como el Explorador de Windows.", "background_effects_button": "Activar efectos de fondo", - "dismiss": "Desestimar" + "dismiss": "Desestimar", + "new_layout_title": "Nuevo diseño", + "new_layout_message": "Hemos introducido un diseño modernizado para Trilium. La cinta se ha eliminado y se ha integrado perfectamente en la interfaz principal, con una nueva barra de estado y secciones ampliables (como los atributos promovidos) que tienen funciones clave.\n\nEl nuevo diseño está habilitado por defecto, y puede ser deshabilitado temporalmente a través de Opciones → Apariencia.", + "new_layout_button": "Más información" }, "ui-performance": { "title": "Rendimiento", @@ -2100,7 +2150,10 @@ }, "settings_appearance": { "related_code_blocks": "Esquema de colores para bloques de código en notas de texto", - "related_code_notes": "Esquema de colores para notas de código" + "related_code_notes": "Esquema de colores para notas de código", + "ui": "Interfaz de usuario", + "ui_old_layout": "Antiguo diseño", + "ui_new_layout": "Nuevo diseño" }, "units": { "percentage": "%" @@ -2148,7 +2201,12 @@ "attributes_other": "{{count}} atributos", "note_paths_one": "{{count}} ruta", "note_paths_many": "{{count}} rutas", - "note_paths_other": "{{count}} rutas" + "note_paths_other": "{{count}} rutas", + "language_title": "Cambiar el idioma del contenido", + "note_info_title": "Ver información de la nota (p. e., fechas, tamaño de la nota)", + "attributes_title": "Atributos propios y atributos heredados", + "note_paths_title": "Rutas de nota", + "code_note_switcher": "Cambiar modo de idioma" }, "pdf": { "attachments_one": "{{count}} adjunto", @@ -2159,6 +2217,69 @@ "layers_other": "{{count}} capas", "pages_one": "{{count}} página", "pages_many": "{{count}} páginas", - "pages_other": "{{count}} páginas" + "pages_other": "{{count}} páginas", + "pages_alt": "Página {{pageNumber}}", + "pages_loading": "Cargando..." + }, + "experimental_features": { + "title": "Opciones experimentales", + "disclaimer": "Estas opciones son experimentales y pueden causar inestabilidad. Úselas con precaución.", + "new_layout_name": "Nuevo diseño", + "new_layout_description": "Pruebe el nuevo diseño para tener un aspecto más moderno y usabilidad mejorada. Sujeto a grandes cambios en las próximas versiones." + }, + "popup-editor": { + "maximize": "Cambiar a editor completo" + }, + "server": { + "unknown_http_error_title": "Error de comunicación con el servidor", + "unknown_http_error_content": "Código de estado: {{statusCode}}\nURL: {{method}} {{url}}\nMensaje: {{message}}", + "traefik_blocks_requests": "Si está usando el proxy inverso Traefik, este introdujo un cambio que afecta la comunicación con el servidor." + }, + "tab_history_navigation_buttons": { + "go-back": "Volver a la nota anterior", + "go-forward": "Avanzar a la siguiente nota" + }, + "breadcrumb": { + "hoisted_badge": "Anclada", + "hoisted_badge_title": "Desanclar", + "workspace_badge": "Espacio de trabajo", + "scroll_to_top_title": "Saltar al inicio de la nota", + "create_new_note": "Crear nueva subnota", + "empty_hide_archived_notes": "Ocultar notas archivadas" + }, + "breadcrumb_badges": { + "read_only_explicit": "Sólo lectura", + "read_only_explicit_description": "Esta nota se ha fijado manualmente como sólo lectura.\nHaga clic para editarla temporalmente.", + "read_only_auto": "Sólo lectura automática", + "read_only_auto_description": "Esta nota se fijó automáticamente con el modo de sólo lectura por razones de rendimiento. Este límite automático es ajustable desde los ajustes.\n\nHaga clic para editarla temporalmente.", + "read_only_temporarily_disabled": "Temporalmente editable", + "read_only_temporarily_disabled_description": "Esta nota actualmente es editable, pero normalmente es de sólo lectura. La nota volverá a ser de sólo lectura tan pronto como navegue a otra nota.\n\nHaga clic para volver a habilitar el modo de sólo lectura.", + "shared_publicly": "Compartida públicamente", + "shared_locally": "Compartida localmente", + "shared_copy_to_clipboard": "Copiar enlace al portapapeles", + "shared_open_in_browser": "Abrir enlace en el navegador", + "shared_unshare": "Eliminar compartido", + "clipped_note_description": "Esta nota fue tomada originalmente de {{url}}.\n\nHaga clic para navegar a la página web de origen.", + "execute_script": "Ejecutar script", + "execute_script_description": "Esta nota es una nota de script. Haga clic para ejecutar el script.", + "execute_sql": "Ejecutar SQL", + "execute_sql_description": "Esta nota es una nota SQL. Haga clic para ejecutar la consulta SQL.", + "save_status_saved": "Guardado", + "save_status_saving": "Guardando...", + "save_status_unsaved": "Sin guardar", + "save_status_error": "Fallo al guardar", + "save_status_saving_tooltip": "Los cambios están siendo guardados.", + "save_status_unsaved_tooltip": "Hay cambios sin guardar. Se guardarán automáticamente en un momento.", + "save_status_error_tooltip": "Se produjo un error al guardar la nota. Si es posible, trate de copiar el contenido de la nota en otro lugar y recargar la aplicación.", + "clipped_note": "Clip web" + }, + "attributes_panel": { + "title": "Atributos de nota" + }, + "right_pane": { + "empty_message": "Nada que mostrar para esta nota", + "empty_button": "Ocultar el panel", + "toggle": "Alternar panel derecho", + "custom_widget_go_to_source": "Ir al código fuente" } } From 3d2fde77a5d13bfb58658a9bd8b5345ae08a4e1a Mon Sep 17 00:00:00 2001 From: Sergii Nechuiviter <snechuiviter@gmail.com> Date: Thu, 29 Jan 2026 01:51:03 +0100 Subject: [PATCH 352/353] Translated using Weblate (Ukrainian) Currently translated at 86.8% (132 of 152 strings) Translation: Trilium Notes/Website Translate-URL: https://hosted.weblate.org/projects/trilium/website/uk/ --- .../src/translations/uk/translation.json | 30 +++++++++++++++++-- 1 file changed, 27 insertions(+), 3 deletions(-) diff --git a/apps/website/src/translations/uk/translation.json b/apps/website/src/translations/uk/translation.json index 94442b2930..b1ec2ecb4b 100644 --- a/apps/website/src/translations/uk/translation.json +++ b/apps/website/src/translations/uk/translation.json @@ -49,13 +49,17 @@ "title": "Кілька способів представлення вашої інформації", "canvas_description": "Розташовуйте фігури, зображення та текст на нескінченному полотні, використовуючи ту саму технологію, що й excalidraw.com. Ідеально підходить для діаграм, ескізів та візуального планування.", "mermaid_description": "Створюйте діаграми, такі як блок-схеми, діаграми класів та послідовностей, діаграми Ганта та багато іншого, використовуючи синтаксис Mermaid.", - "others_list": "та інші: <0>карта нотаток</0>, <1>карта зв'язків</1>, <2>збережені пошуки</2>, <3>візуалізація нотаток</3> та <4>веб-перегляди</4>." + "others_list": "та інші: <0>карта нотаток</0>, <1>карта зв'язків</1>, <2>збережені пошуки</2>, <3>візуалізація нотаток</3> та <4>веб-перегляди</4>.", + "mermaid_title": "Mermaid діаграми" }, "extensibility_benefits": { "title": "Спільне використання та розширюваність", "import_export_title": "Імпорт/експорт", "import_export_description": "Легко взаємодійте з іншими програмами, використовуючи формати Markdown, ENEX, OML.", - "share_title": "Діліться нотатками в Інтернеті" + "share_title": "Діліться нотатками в Інтернеті", + "share_description": "Якщо у Вас є сервер, Ви можете використати його, щоб поділитися частиною своїх нотаток з іншими людьми.", + "api_title": "REST API", + "api_description": "Взаємодійте з Trilium програмно, використовуючи його вбудований REST API." }, "collections": { "title": "Колекції", @@ -152,6 +156,26 @@ "description_x64": "Для більшості дистрибутивів Linux, сумісних з архітектурою x86_64.", "description_arm64": "Для дистрибутивів Linux на базі ARM, сумісних з архітектурою aarch64.", "quick_start": "Виберіть відповідний формат пакета, залежно від вашого дистрибутива:", - "download_deb": ".deb" + "download_deb": ".deb", + "download_rpm": ".rpm", + "download_flatpak": ".flatpak", + "download_nixpkgs": "nixpkgs" + }, + "download_helper_desktop_macos": { + "title_x64": "macOS для Intel", + "title_arm64": "macOS для Apple Silicon", + "quick_start": "Для того, щоб встановити за допомогою Homebrew:", + "download_homebrew_cask": "Homebrew Cask" + }, + "download_helper_server_docker": { + "download_dockerhub": "Docker Hub", + "download_ghcr": "ghcr.io" + }, + "download_helper_server_linux": { + "download_tar_x64": "x64 (.tar.xz)", + "download_tar_arm64": "ARM (.tar.xz)" + }, + "download_helper_server_hosted": { + "title": "Платний хостинг" } } From 7b1f74a41310fd50d8dc3444aa78fbac4de56e93 Mon Sep 17 00:00:00 2001 From: Ulices <hasecilu@tuta.io> Date: Thu, 29 Jan 2026 07:13:11 +0100 Subject: [PATCH 353/353] Translated using Weblate (Spanish) Currently translated at 100.0% (388 of 388 strings) Translation: Trilium Notes/Server Translate-URL: https://hosted.weblate.org/projects/trilium/server/es/ --- apps/server/src/assets/translations/es/server.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/server/src/assets/translations/es/server.json b/apps/server/src/assets/translations/es/server.json index 83d84711d3..b95d54dd0e 100644 --- a/apps/server/src/assets/translations/es/server.json +++ b/apps/server/src/assets/translations/es/server.json @@ -293,7 +293,7 @@ "migration": { "old_version": "La migración directa desde tu versión actual no está soportada. Por favor actualice a v0.60.4 primero y solo después a esta versión.", "error_message": "Error durante la migración a la versión {{version}}: {{stack}}", - "wrong_db_version": "La versión de la DB {{version}} es más nueva que la versión de la DB actual {{targetVersion}}, lo que significa que fue creada por una versión más reciente e incompatible de Trilium. Actualice a la última versión de Trilium para resolver este problema." + "wrong_db_version": "La versión de la base de datos {{version}} es más nueva de lo que la aplicación espera {{targetVersion}}, lo que significa que fue creada por una versión más reciente e incompatible de Trilium. Actualice a la última versión de Trilium para resolver este problema." }, "modals": { "error_title": "Error"