From fac31ff8be4e39113cb56842e2bdb8a8d88318e1 Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Sat, 18 Oct 2025 20:07:08 +0300 Subject: [PATCH 001/103] chore(server): set up route for printing --- apps/server/src/routes/api/print.ts | 7 +++++++ apps/server/src/routes/routes.ts | 6 ++++-- 2 files changed, 11 insertions(+), 2 deletions(-) create mode 100644 apps/server/src/routes/api/print.ts diff --git a/apps/server/src/routes/api/print.ts b/apps/server/src/routes/api/print.ts new file mode 100644 index 000000000..fff79a66c --- /dev/null +++ b/apps/server/src/routes/api/print.ts @@ -0,0 +1,7 @@ +import { Request } from "express"; + +export function getPrintablePage(req: Request) { + const { noteId } = req.params; + + return "Hello world: " + noteId; +} diff --git a/apps/server/src/routes/routes.ts b/apps/server/src/routes/routes.ts index f1aeb9209..b4e73cf3e 100644 --- a/apps/server/src/routes/routes.ts +++ b/apps/server/src/routes/routes.ts @@ -72,6 +72,7 @@ import etapiBackupRoute from "../etapi/backup.js"; import etapiMetricsRoute from "../etapi/metrics.js"; import apiDocsRoute from "./api_docs.js"; import { apiResultHandler, apiRoute, asyncApiRoute, asyncRoute, route, router, uploadMiddlewareWithErrorHandling } from "./route_api.js"; +import { getPrintablePage } from "./api/print.js"; const GET = "get", PST = "post", @@ -378,8 +379,6 @@ function register(app: express.Application) { asyncApiRoute(PST, "/api/llm/chat/:chatNoteId/messages", llmRoute.sendMessage); asyncApiRoute(PST, "/api/llm/chat/:chatNoteId/messages/stream", llmRoute.streamMessage); - - // LLM provider endpoints - moved under /api/llm/providers hierarchy asyncApiRoute(GET, "/api/llm/providers/ollama/models", ollamaRoute.listModels); asyncApiRoute(GET, "/api/llm/providers/openai/models", openaiRoute.listModels); @@ -388,6 +387,9 @@ function register(app: express.Application) { // API Documentation apiDocsRoute(app); + // Printing route + apiRoute(GET, "/print/:noteId", getPrintablePage); + app.use("", router); } From 63bcd80375c02433ce8c3312556c1713d5f5cc81 Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Sat, 18 Oct 2025 20:15:28 +0300 Subject: [PATCH 002/103] chore(server): set up template for printing --- apps/server/src/assets/views/print.ejs | 30 ++++++++++++++++++++++++++ apps/server/src/routes/api/print.ts | 13 ++++++++--- apps/server/src/routes/routes.ts | 2 +- 3 files changed, 41 insertions(+), 4 deletions(-) create mode 100644 apps/server/src/assets/views/print.ejs diff --git a/apps/server/src/assets/views/print.ejs b/apps/server/src/assets/views/print.ejs new file mode 100644 index 000000000..2ed13581f --- /dev/null +++ b/apps/server/src/assets/views/print.ejs @@ -0,0 +1,30 @@ + + + + + + + + + + Trilium Notes + + + + + + + + + + + + + + diff --git a/apps/server/src/routes/api/print.ts b/apps/server/src/routes/api/print.ts index fff79a66c..844769d56 100644 --- a/apps/server/src/routes/api/print.ts +++ b/apps/server/src/routes/api/print.ts @@ -1,7 +1,14 @@ -import { Request } from "express"; +import { Request, Response } from "express"; +import assetPath from "../../services/asset_path"; +import app_path from "../../services/app_path"; +import { getCurrentLocale } from "../../services/i18n"; -export function getPrintablePage(req: Request) { +export function getPrintablePage(req: Request, res: Response) { const { noteId } = req.params; - return "Hello world: " + noteId; + res.render("print", { + assetPath: assetPath, + appPath: app_path, + currentLocale: getCurrentLocale() + }); } diff --git a/apps/server/src/routes/routes.ts b/apps/server/src/routes/routes.ts index b4e73cf3e..a76810feb 100644 --- a/apps/server/src/routes/routes.ts +++ b/apps/server/src/routes/routes.ts @@ -388,7 +388,7 @@ function register(app: express.Application) { apiDocsRoute(app); // Printing route - apiRoute(GET, "/print/:noteId", getPrintablePage); + route(GET, "/print/:noteId", [ auth.checkAuth ], getPrintablePage); app.use("", router); } From e83eacb18b1e41a0ebd29f3742221a4797f9402e Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Sat, 18 Oct 2025 20:23:17 +0300 Subject: [PATCH 003/103] chore(server): get printing template in order --- apps/client/src/print.ts | 1 + apps/client/vite.config.mts | 3 ++- apps/server/src/assets/views/print.ejs | 6 +++--- 3 files changed, 6 insertions(+), 4 deletions(-) create mode 100644 apps/client/src/print.ts diff --git a/apps/client/src/print.ts b/apps/client/src/print.ts new file mode 100644 index 000000000..b03df2c43 --- /dev/null +++ b/apps/client/src/print.ts @@ -0,0 +1 @@ +console.log("Print script is here."); diff --git a/apps/client/vite.config.mts b/apps/client/vite.config.mts index 04a5b0911..3dd52b6b9 100644 --- a/apps/client/vite.config.mts +++ b/apps/client/vite.config.mts @@ -76,7 +76,8 @@ export default defineConfig(() => ({ setup: join(__dirname, "src", "setup.ts"), share: join(__dirname, "src", "share.ts"), set_password: join(__dirname, "src", "set_password.ts"), - runtime: join(__dirname, "src", "runtime.ts") + runtime: join(__dirname, "src", "runtime.ts"), + print: join(__dirname, "src", "print.ts") }, output: { entryFileNames: "src/[name].js", diff --git a/apps/server/src/assets/views/print.ejs b/apps/server/src/assets/views/print.ejs index 2ed13581f..7e39b9567 100644 --- a/apps/server/src/assets/views/print.ejs +++ b/apps/server/src/assets/views/print.ejs @@ -6,9 +6,9 @@ - + Trilium Notes - + - + From 54724b8c5802223774add80f00afe9d49bc2d562 Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Sat, 18 Oct 2025 21:01:31 +0300 Subject: [PATCH 004/103] chore(client/print): load nota into forca --- apps/client/src/print.ts | 20 +++++- apps/client/src/services/froca.ts | 7 +- apps/client/src/services/protected_session.ts | 70 +++++++++---------- apps/client/src/services/tree.ts | 18 ++--- .../assets/views/partials/windowGlobal.ejs | 2 +- apps/server/src/assets/views/print.ejs | 2 + apps/server/src/routes/api/print.ts | 14 ---- apps/server/src/routes/index.ts | 20 ++++-- apps/server/src/routes/routes.ts | 5 +- 9 files changed, 88 insertions(+), 70 deletions(-) delete mode 100644 apps/server/src/routes/api/print.ts diff --git a/apps/client/src/print.ts b/apps/client/src/print.ts index b03df2c43..3fb238674 100644 --- a/apps/client/src/print.ts +++ b/apps/client/src/print.ts @@ -1 +1,19 @@ -console.log("Print script is here."); +import FNote from "./entities/fnote"; + +async function main() { + const noteId = window.location.pathname.split("/")[2]; + const froca = (await import("./services/froca")).default; + const note = await froca.getNote(noteId); + + if (!note) return; + + if (note.type === "book") { + handleCollection(note); + } +} + +function handleCollection(note: FNote) { + console.log("Rendering collection."); +} + +main(); diff --git a/apps/client/src/services/froca.ts b/apps/client/src/services/froca.ts index 6bbc3a50d..a1529db72 100644 --- a/apps/client/src/services/froca.ts +++ b/apps/client/src/services/froca.ts @@ -40,20 +40,23 @@ class FrocaImpl implements Froca { constructor() { this.initializedPromise = this.loadInitialTree(); + this.#clear(); } async loadInitialTree() { const resp = await server.get("tree"); // clear the cache only directly before adding new content which is important for e.g., switching to protected session + this.#clear(); + this.addResp(resp); + } + #clear() { this.notes = {}; this.branches = {}; this.attributes = {}; this.attachments = {}; this.blobPromises = {}; - - this.addResp(resp); } async loadSubTree(subTreeNoteId: string) { diff --git a/apps/client/src/services/protected_session.ts b/apps/client/src/services/protected_session.ts index 1e1984ae5..a2f04a9f0 100644 --- a/apps/client/src/services/protected_session.ts +++ b/apps/client/src/services/protected_session.ts @@ -70,26 +70,26 @@ async function setupProtectedSession(password: string) { protectedSessionHolder.enableProtectedSession(); } -ws.subscribeToMessages(async (message) => { - if (message.type === "protectedSessionLogin") { - await reloadData(); +// ws.subscribeToMessages(async (message) => { +// if (message.type === "protectedSessionLogin") { +// await reloadData(); - await appContext.triggerEvent("frocaReloaded", {}); +// await appContext.triggerEvent("frocaReloaded", {}); - appContext.triggerEvent("protectedSessionStarted", {}); +// appContext.triggerEvent("protectedSessionStarted", {}); - appContext.triggerCommand("closeProtectedSessionPasswordDialog"); +// appContext.triggerCommand("closeProtectedSessionPasswordDialog"); - if (protectedSessionDeferred !== null) { - protectedSessionDeferred.resolve(true); - protectedSessionDeferred = null; - } +// if (protectedSessionDeferred !== null) { +// protectedSessionDeferred.resolve(true); +// protectedSessionDeferred = null; +// } - toastService.showMessage(t("protected_session.started")); - } else if (message.type === "protectedSessionLogout") { - utils.reloadFrontendApp(`Protected session logout`); - } -}); +// toastService.showMessage(t("protected_session.started")); +// } else if (message.type === "protectedSessionLogout") { +// utils.reloadFrontendApp(`Protected session logout`); +// } +// }); async function protectNote(noteId: string, protect: boolean, includingSubtree: boolean) { await enterProtectedSession(); @@ -106,29 +106,29 @@ function makeToast(message: Message, title: string, text: string): ToastOptions }; } -ws.subscribeToMessages(async (message) => { - if (!("taskType" in message) || message.taskType !== "protectNotes") { - return; - } +// ws.subscribeToMessages(async (message) => { +// if (!("taskType" in message) || message.taskType !== "protectNotes") { +// return; +// } - const isProtecting = message.data?.protect; - const title = isProtecting ? t("protected_session.protecting-title") : t("protected_session.unprotecting-title"); +// const isProtecting = message.data?.protect; +// const title = isProtecting ? t("protected_session.protecting-title") : t("protected_session.unprotecting-title"); - if (message.type === "taskError") { - toastService.closePersistent(message.taskId); - toastService.showError(message.message); - } else if (message.type === "taskProgressCount") { - const count = message.progressCount; - const text = isProtecting ? t("protected_session.protecting-in-progress", { count }) : t("protected_session.unprotecting-in-progress-count", { count }); - toastService.showPersistent(makeToast(message, title, text)); - } else if (message.type === "taskSucceeded") { - const text = isProtecting ? t("protected_session.protecting-finished-successfully") : t("protected_session.unprotecting-finished-successfully"); - const toast = makeToast(message, title, text); - toast.closeAfter = 3000; +// if (message.type === "taskError") { +// toastService.closePersistent(message.taskId); +// toastService.showError(message.message); +// } else if (message.type === "taskProgressCount") { +// const count = message.progressCount; +// const text = isProtecting ? t("protected_session.protecting-in-progress", { count }) : t("protected_session.unprotecting-in-progress-count", { count }); +// toastService.showPersistent(makeToast(message, title, text)); +// } else if (message.type === "taskSucceeded") { +// const text = isProtecting ? t("protected_session.protecting-finished-successfully") : t("protected_session.unprotecting-finished-successfully"); +// const toast = makeToast(message, title, text); +// toast.closeAfter = 3000; - toastService.showPersistent(toast); - } -}); +// toastService.showPersistent(toast); +// } +// }); export default { protectNote, diff --git a/apps/client/src/services/tree.ts b/apps/client/src/services/tree.ts index c508654f5..75715a377 100644 --- a/apps/client/src/services/tree.ts +++ b/apps/client/src/services/tree.ts @@ -122,17 +122,17 @@ async function resolveNotePathToSegments(notePath: string, hoistedNoteId = "root } } -ws.subscribeToMessages((message) => { - if (message.type === "openNote") { - appContext.tabManager.activateOrOpenNote(message.noteId); +// ws.subscribeToMessages((message) => { +// if (message.type === "openNote") { +// appContext.tabManager.activateOrOpenNote(message.noteId); - if (utils.isElectron()) { - const currentWindow = utils.dynamicRequire("@electron/remote").getCurrentWindow(); +// if (utils.isElectron()) { +// const currentWindow = utils.dynamicRequire("@electron/remote").getCurrentWindow(); - currentWindow.show(); - } - } -}); +// currentWindow.show(); +// } +// } +// }); function getParentProtectedStatus(node: Fancytree.FancytreeNode) { return hoistedNoteService.isHoistedNode(node) ? false : node.getParent().data.isProtected; diff --git a/apps/server/src/assets/views/partials/windowGlobal.ejs b/apps/server/src/assets/views/partials/windowGlobal.ejs index 3536d5265..c69351e1a 100644 --- a/apps/server/src/assets/views/partials/windowGlobal.ejs +++ b/apps/server/src/assets/views/partials/windowGlobal.ejs @@ -3,7 +3,7 @@ window.glob = { device: "<%= device %>", - baseApiUrl: 'api/', + baseApiUrl: "<%= baseApiUrl %>", activeDialog: null, maxEntityChangeIdAtLoad: <%= maxEntityChangeIdAtLoad %>, maxEntityChangeSyncIdAtLoad: <%= maxEntityChangeSyncIdAtLoad %>, diff --git a/apps/server/src/assets/views/print.ejs b/apps/server/src/assets/views/print.ejs index 7e39b9567..c1808e507 100644 --- a/apps/server/src/assets/views/print.ejs +++ b/apps/server/src/assets/views/print.ejs @@ -21,6 +21,8 @@ document.getElementsByTagName("body")[0].style.display = "none"; +<%- include("./partials/windowGlobal.ejs", locals) %> + diff --git a/apps/server/src/routes/api/print.ts b/apps/server/src/routes/api/print.ts deleted file mode 100644 index 844769d56..000000000 --- a/apps/server/src/routes/api/print.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { Request, Response } from "express"; -import assetPath from "../../services/asset_path"; -import app_path from "../../services/app_path"; -import { getCurrentLocale } from "../../services/i18n"; - -export function getPrintablePage(req: Request, res: Response) { - const { noteId } = req.params; - - res.render("print", { - assetPath: assetPath, - appPath: app_path, - currentLocale: getCurrentLocale() - }); -} diff --git a/apps/server/src/routes/index.ts b/apps/server/src/routes/index.ts index 6bede94d7..0d968ce09 100644 --- a/apps/server/src/routes/index.ts +++ b/apps/server/src/routes/index.ts @@ -16,9 +16,19 @@ import type { Request, Response } from "express"; import type BNote from "../becca/entities/bnote.js"; import { getCurrentLocale } from "../services/i18n.js"; +type View = "desktop" | "mobile" | "print"; + function index(req: Request, res: Response) { - const options = optionService.getOptionMap(); const view = getView(req); + renderView(req, res, view); +} + +export function printIndex(req: Request, res: Response) { + renderView(req, res, "print"); +} + +function renderView(req: Request, res: Response, view: View) { + const options = optionService.getOptionMap(); //'overwrite' set to false (default) => the existing token will be re-used and validated //'validateOnReuse' set to false => if validation fails, generate a new token instead of throwing an error @@ -57,8 +67,9 @@ function index(req: Request, res: Response) { isProtectedSessionAvailable: protectedSessionService.isProtectedSessionAvailable(), maxContentWidth: Math.max(640, parseInt(options.maxContentWidth)), triliumVersion: packageJson.version, - assetPath: assetPath, - appPath: appPath, + assetPath: view !== "print" ? assetPath : "../" + assetPath, + appPath: view !== "print" ? appPath : "../" + appPath, + baseApiUrl: view !== "print" ? 'api/' : "../api/", currentLocale: getCurrentLocale() }); } @@ -122,5 +133,6 @@ function getAppCssNoteIds() { } export default { - index + index, + printIndex }; diff --git a/apps/server/src/routes/routes.ts b/apps/server/src/routes/routes.ts index a76810feb..30758b36e 100644 --- a/apps/server/src/routes/routes.ts +++ b/apps/server/src/routes/routes.ts @@ -72,7 +72,6 @@ import etapiBackupRoute from "../etapi/backup.js"; import etapiMetricsRoute from "../etapi/metrics.js"; import apiDocsRoute from "./api_docs.js"; import { apiResultHandler, apiRoute, asyncApiRoute, asyncRoute, route, router, uploadMiddlewareWithErrorHandling } from "./route_api.js"; -import { getPrintablePage } from "./api/print.js"; const GET = "get", PST = "post", @@ -82,6 +81,7 @@ const GET = "get", function register(app: express.Application) { route(GET, "/", [auth.checkAuth, csrfMiddleware], indexRoute.index); + route(GET, "/print/:noteId", [ auth.checkAuth ], indexRoute.printIndex); route(GET, "/login", [auth.checkAppInitialized, auth.checkPasswordSet], loginRoute.loginPage); route(GET, "/set-password", [auth.checkAppInitialized, auth.checkPasswordNotSet], loginRoute.setPasswordPage); @@ -387,9 +387,6 @@ function register(app: express.Application) { // API Documentation apiDocsRoute(app); - // Printing route - route(GET, "/print/:noteId", [ auth.checkAuth ], getPrintablePage); - app.use("", router); } From 62855f4bb17cd4930fc6e225ee1b91eba73ebb19 Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Sat, 18 Oct 2025 21:09:39 +0300 Subject: [PATCH 005/103] chore(client/print): render title using preact --- apps/client/src/{print.ts => print.tsx} | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) rename apps/client/src/{print.ts => print.tsx} (59%) diff --git a/apps/client/src/print.ts b/apps/client/src/print.tsx similarity index 59% rename from apps/client/src/print.ts rename to apps/client/src/print.tsx index 3fb238674..73d44d367 100644 --- a/apps/client/src/print.ts +++ b/apps/client/src/print.tsx @@ -1,4 +1,6 @@ +import { JSX } from "preact/jsx-runtime"; import FNote from "./entities/fnote"; +import { render } from "preact"; async function main() { const noteId = window.location.pathname.split("/")[2]; @@ -7,13 +9,18 @@ async function main() { if (!note) return; + let el: JSX.Element | null = null; if (note.type === "book") { - handleCollection(note); + el = handleCollection(note); } + + render(el, document.body); } function handleCollection(note: FNote) { - console.log("Rendering collection."); + return ( +

{note.title}

+ ); } main(); From e416caffe3645bb3d0fbb48040f8f2365a455196 Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Sat, 18 Oct 2025 21:19:53 +0300 Subject: [PATCH 006/103] chore(client/print): wire printing for collections --- apps/client/src/print.tsx | 26 ++++++++++++++++--- .../src/widgets/collections/NoteList.tsx | 19 ++++++++++++-- .../collections/presentation/print.tsx | 5 ++++ 3 files changed, 45 insertions(+), 5 deletions(-) create mode 100644 apps/client/src/widgets/collections/presentation/print.tsx diff --git a/apps/client/src/print.tsx b/apps/client/src/print.tsx index 73d44d367..267e2fdc4 100644 --- a/apps/client/src/print.tsx +++ b/apps/client/src/print.tsx @@ -1,6 +1,8 @@ import { JSX } from "preact/jsx-runtime"; import FNote from "./entities/fnote"; import { render } from "preact"; +import { getComponentByViewTypeForPrint, useNoteIds, useViewModeConfig } from "./widgets/collections/NoteList"; +import { ViewTypeOptions } from "./widgets/collections/interface"; async function main() { const noteId = window.location.pathname.split("/")[2]; @@ -11,15 +13,33 @@ async function main() { let el: JSX.Element | null = null; if (note.type === "book") { - el = handleCollection(note); + el = ; } render(el, document.body); } -function handleCollection(note: FNote) { +function Collection({ note }: { note: FNote }) { + const viewType = note.getLabelValue("viewType") as ViewTypeOptions ?? "grid"; + const viewConfig = useViewModeConfig(note, viewType); + const noteIds = useNoteIds(note, viewType, "print"); + const component = getComponentByViewTypeForPrint(viewType, { + saveConfig() { + // While printing we don't allow for interactivity, so saving the config is a no-op. + }, + viewConfig: viewConfig?.[0] ?? {}, + note, + notePath: note.getBestNotePath().join("/"), + noteIds, + highlightedTokens: null + }); + return ( -

{note.title}

+ <> +

{note.title}

+ + {component} + ); } diff --git a/apps/client/src/widgets/collections/NoteList.tsx b/apps/client/src/widgets/collections/NoteList.tsx index cb43ab1be..d0ee5ed07 100644 --- a/apps/client/src/widgets/collections/NoteList.tsx +++ b/apps/client/src/widgets/collections/NoteList.tsx @@ -13,6 +13,7 @@ import { subscribeToMessages, unsubscribeToMessage as unsubscribeFromMessage } f import { WebSocketMessage } from "@triliumnext/commons"; import froca from "../../services/froca"; import PresentationView from "./presentation"; +import PresentationPrintView from "./presentation/print"; interface NoteListProps { note: FNote | null | undefined; @@ -110,6 +111,20 @@ function getComponentByViewType(viewType: ViewTypeOptions, props: ViewModeProps< } } +export function getComponentByViewTypeForPrint(viewType: ViewTypeOptions, props: ViewModeProps) { + switch (viewType) { + case "list": + case "grid": + case "geoMap": + case "calendar": + case "table": + case "board": + return null; + case "presentation": + return + } +} + function useNoteViewType(note?: FNote | null): ViewTypeOptions | undefined { const [ viewType ] = useNoteLabel(note, "viewType"); @@ -123,7 +138,7 @@ function useNoteViewType(note?: FNote | null): ViewTypeOptions | undefined { } } -function useNoteIds(note: FNote | null | undefined, viewType: ViewTypeOptions | undefined, ntxId: string | null | undefined) { +export function useNoteIds(note: FNote | null | undefined, viewType: ViewTypeOptions | undefined, ntxId: string | null | undefined) { const [ noteIds, setNoteIds ] = useState([]); const [ includeArchived ] = useNoteLabelBoolean(note, "includeArchived"); @@ -187,7 +202,7 @@ function useNoteIds(note: FNote | null | undefined, viewType: ViewTypeOptions | return noteIds; } -function useViewModeConfig(note: FNote | null | undefined, viewType: ViewTypeOptions | undefined) { +export function useViewModeConfig(note: FNote | null | undefined, viewType: ViewTypeOptions | undefined) { const [ viewConfig, setViewConfig ] = useState<[T | undefined, (data: T) => void]>(); useEffect(() => { diff --git a/apps/client/src/widgets/collections/presentation/print.tsx b/apps/client/src/widgets/collections/presentation/print.tsx new file mode 100644 index 000000000..c2dadeb6f --- /dev/null +++ b/apps/client/src/widgets/collections/presentation/print.tsx @@ -0,0 +1,5 @@ +import { ViewModeProps } from "../interface"; + +export default function PresentationPrintView(props: ViewModeProps) { + return

Hello world.

+} From e374b31a1ca7b90fa7610a69c0d83a1c939c2bc6 Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Sat, 18 Oct 2025 21:35:19 +0300 Subject: [PATCH 007/103] feat(client/print): get collections to render --- apps/client/src/print.css | 5 +++ apps/client/src/print.tsx | 41 ++++++++----------- .../src/widgets/collections/NoteList.tsx | 17 +------- .../collections/presentation/print.tsx | 5 --- 4 files changed, 23 insertions(+), 45 deletions(-) create mode 100644 apps/client/src/print.css delete mode 100644 apps/client/src/widgets/collections/presentation/print.tsx diff --git a/apps/client/src/print.css b/apps/client/src/print.css new file mode 100644 index 000000000..4927e5587 --- /dev/null +++ b/apps/client/src/print.css @@ -0,0 +1,5 @@ +html, +body { + width: 100%; + height: 100%; +} \ No newline at end of file diff --git a/apps/client/src/print.tsx b/apps/client/src/print.tsx index 267e2fdc4..ed3d83c6a 100644 --- a/apps/client/src/print.tsx +++ b/apps/client/src/print.tsx @@ -1,8 +1,8 @@ import { JSX } from "preact/jsx-runtime"; import FNote from "./entities/fnote"; import { render } from "preact"; -import { getComponentByViewTypeForPrint, useNoteIds, useViewModeConfig } from "./widgets/collections/NoteList"; -import { ViewTypeOptions } from "./widgets/collections/interface"; +import { CustomNoteList } from "./widgets/collections/NoteList"; +import "./print.css"; async function main() { const noteId = window.location.pathname.split("/")[2]; @@ -13,33 +13,26 @@ async function main() { let el: JSX.Element | null = null; if (note.type === "book") { - el = ; + el = handleCollection(note); } - render(el, document.body); -} - -function Collection({ note }: { note: FNote }) { - const viewType = note.getLabelValue("viewType") as ViewTypeOptions ?? "grid"; - const viewConfig = useViewModeConfig(note, viewType); - const noteIds = useNoteIds(note, viewType, "print"); - const component = getComponentByViewTypeForPrint(viewType, { - saveConfig() { - // While printing we don't allow for interactivity, so saving the config is a no-op. - }, - viewConfig: viewConfig?.[0] ?? {}, - note, - notePath: note.getBestNotePath().join("/"), - noteIds, - highlightedTokens: null - }); - - return ( + render(( <>

{note.title}

- - {component} + {el} + ), document.body); +} + +function handleCollection(note: FNote) { + return ( + ); } diff --git a/apps/client/src/widgets/collections/NoteList.tsx b/apps/client/src/widgets/collections/NoteList.tsx index d0ee5ed07..ba7d21d0c 100644 --- a/apps/client/src/widgets/collections/NoteList.tsx +++ b/apps/client/src/widgets/collections/NoteList.tsx @@ -13,7 +13,6 @@ import { subscribeToMessages, unsubscribeToMessage as unsubscribeFromMessage } f import { WebSocketMessage } from "@triliumnext/commons"; import froca from "../../services/froca"; import PresentationView from "./presentation"; -import PresentationPrintView from "./presentation/print"; interface NoteListProps { note: FNote | null | undefined; @@ -35,7 +34,7 @@ export function SearchNoteList(props: Omit } -function CustomNoteList({ note, isEnabled: shouldEnable, notePath, highlightedTokens, displayOnlyCollections, ntxId }: NoteListProps) { +export function CustomNoteList({ note, isEnabled: shouldEnable, notePath, highlightedTokens, displayOnlyCollections, ntxId }: NoteListProps) { const widgetRef = useRef(null); const viewType = useNoteViewType(note); const noteIds = useNoteIds(note, viewType, ntxId); @@ -111,20 +110,6 @@ function getComponentByViewType(viewType: ViewTypeOptions, props: ViewModeProps< } } -export function getComponentByViewTypeForPrint(viewType: ViewTypeOptions, props: ViewModeProps) { - switch (viewType) { - case "list": - case "grid": - case "geoMap": - case "calendar": - case "table": - case "board": - return null; - case "presentation": - return - } -} - function useNoteViewType(note?: FNote | null): ViewTypeOptions | undefined { const [ viewType ] = useNoteLabel(note, "viewType"); diff --git a/apps/client/src/widgets/collections/presentation/print.tsx b/apps/client/src/widgets/collections/presentation/print.tsx deleted file mode 100644 index c2dadeb6f..000000000 --- a/apps/client/src/widgets/collections/presentation/print.tsx +++ /dev/null @@ -1,5 +0,0 @@ -import { ViewModeProps } from "../interface"; - -export default function PresentationPrintView(props: ViewModeProps) { - return

Hello world.

-} From f6d7ecab40451eb894fe98c8e0d61943b71bb5b7 Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Sat, 18 Oct 2025 21:56:10 +0300 Subject: [PATCH 008/103] feat(client/print): render presentation without shadow DOM --- apps/client/src/layouts/desktop_layout.tsx | 2 +- apps/client/src/layouts/layout_commons.tsx | 2 +- apps/client/src/layouts/mobile_layout.tsx | 2 +- apps/client/src/print.tsx | 1 + .../src/widgets/collections/NoteList.tsx | 10 +++--- .../src/widgets/collections/interface.ts | 3 ++ .../collections/presentation/index.tsx | 33 ++++++++++++------- apps/client/src/widgets/search_result.tsx | 1 + 8 files changed, 36 insertions(+), 18 deletions(-) diff --git a/apps/client/src/layouts/desktop_layout.tsx b/apps/client/src/layouts/desktop_layout.tsx index 9dc4b76ee..3f9416584 100644 --- a/apps/client/src/layouts/desktop_layout.tsx +++ b/apps/client/src/layouts/desktop_layout.tsx @@ -138,7 +138,7 @@ export default class DesktopLayout { .child(new PromotedAttributesWidget()) .child() .child(new NoteDetailWidget()) - .child() + .child() .child() .child() .child() diff --git a/apps/client/src/layouts/layout_commons.tsx b/apps/client/src/layouts/layout_commons.tsx index 292006011..610f31dda 100644 --- a/apps/client/src/layouts/layout_commons.tsx +++ b/apps/client/src/layouts/layout_commons.tsx @@ -66,6 +66,6 @@ export function applyModals(rootContainer: RootContainer) { .child() .child(new PromotedAttributesWidget()) .child(new NoteDetailWidget()) - .child()) + .child()) .child(); } diff --git a/apps/client/src/layouts/mobile_layout.tsx b/apps/client/src/layouts/mobile_layout.tsx index 3d21b9405..b952c2d0b 100644 --- a/apps/client/src/layouts/mobile_layout.tsx +++ b/apps/client/src/layouts/mobile_layout.tsx @@ -154,7 +154,7 @@ export default class MobileLayout { .filling() .contentSized() .child(new NoteDetailWidget()) - .child() + .child() .child() ) .child() diff --git a/apps/client/src/print.tsx b/apps/client/src/print.tsx index ed3d83c6a..5bfd0d5f1 100644 --- a/apps/client/src/print.tsx +++ b/apps/client/src/print.tsx @@ -32,6 +32,7 @@ function handleCollection(note: FNote) { notePath={note.getBestNotePath().join("/")} ntxId="print" highlightedTokens={null} + media="print" /> ); } diff --git a/apps/client/src/widgets/collections/NoteList.tsx b/apps/client/src/widgets/collections/NoteList.tsx index ba7d21d0c..11abcc5c2 100644 --- a/apps/client/src/widgets/collections/NoteList.tsx +++ b/apps/client/src/widgets/collections/NoteList.tsx @@ -1,4 +1,4 @@ -import { allViewTypes, ViewModeProps, ViewTypeOptions } from "./interface"; +import { allViewTypes, ViewModeMedia, ViewModeProps, ViewTypeOptions } from "./interface"; import { useNoteContext, useNoteLabel, useNoteLabelBoolean, useTriliumEvent } from "../react/hooks"; import FNote from "../../entities/fnote"; import "./NoteList.css"; @@ -22,9 +22,10 @@ interface NoteListProps { displayOnlyCollections?: boolean; isEnabled: boolean; ntxId: string | null | undefined; + media: ViewModeMedia; } -export default function NoteList(props: Pick) { +export default function NoteList(props: Pick) { const { note, noteContext, notePath, ntxId } = useNoteContext(); const isEnabled = noteContext?.hasNoteList(); return @@ -34,7 +35,7 @@ export function SearchNoteList(props: Omit } -export function CustomNoteList({ note, isEnabled: shouldEnable, notePath, highlightedTokens, displayOnlyCollections, ntxId }: NoteListProps) { +export function CustomNoteList({ note, isEnabled: shouldEnable, notePath, highlightedTokens, displayOnlyCollections, ntxId, ...restProps }: NoteListProps) { const widgetRef = useRef(null); const viewType = useNoteViewType(note); const noteIds = useNoteIds(note, viewType, ntxId); @@ -76,7 +77,8 @@ export function CustomNoteList({ note, isEnabled: shouldEnable note, noteIds, notePath, highlightedTokens, viewConfig: viewModeConfig[0], - saveConfig: viewModeConfig[1] + saveConfig: viewModeConfig[1], + ...restProps } } diff --git a/apps/client/src/widgets/collections/interface.ts b/apps/client/src/widgets/collections/interface.ts index 91b9f301b..81a8e4d3d 100644 --- a/apps/client/src/widgets/collections/interface.ts +++ b/apps/client/src/widgets/collections/interface.ts @@ -3,6 +3,8 @@ import FNote from "../../entities/fnote"; export const allViewTypes = ["list", "grid", "calendar", "table", "geoMap", "board", "presentation"] as const; export type ViewTypeOptions = typeof allViewTypes[number]; +export type ViewModeMedia = "screen" | "print"; + export interface ViewModeProps { note: FNote; notePath: string; @@ -13,4 +15,5 @@ export interface ViewModeProps { highlightedTokens: string[] | null | undefined; viewConfig: T | undefined; saveConfig(newConfig: T): void; + media: ViewModeMedia; } diff --git a/apps/client/src/widgets/collections/presentation/index.tsx b/apps/client/src/widgets/collections/presentation/index.tsx index 6ed58c796..297b7f0e5 100644 --- a/apps/client/src/widgets/collections/presentation/index.tsx +++ b/apps/client/src/widgets/collections/presentation/index.tsx @@ -14,7 +14,7 @@ import { t } from "../../../services/i18n"; import { DEFAULT_THEME, loadPresentationTheme } from "./themes"; import FNote from "../../../entities/fnote"; -export default function PresentationView({ note, noteIds }: ViewModeProps<{}>) { +export default function PresentationView({ note, noteIds, media }: ViewModeProps<{}>) { const [ presentation, setPresentation ] = useState(); const containerRef = useRef(null); const [ api, setApi ] = useState(); @@ -33,18 +33,28 @@ export default function PresentationView({ note, noteIds }: ViewModeProps<{}>) { useLayoutEffect(refresh, [ note, noteIds ]); - return presentation && stylesheets && ( + if (!presentation || !stylesheets) return; + const content = ( <> - - {stylesheets.map(stylesheet => )} - - - + {stylesheets.map(stylesheet => )} + - ) + ); + + if (media === "screen") { + return ( + <> + {content} + + + ) + } else { + // Shadow DOM doesn't work well with Reveal.js's PDF printing mechanism. + return content; + } } function usePresentationStylesheets(note: FNote) { @@ -128,6 +138,7 @@ function Presentation({ presentation, setApi } : { presentation: PresentationMod const api = new Reveal(containerRef.current, { transition: "slide", embedded: true, + pdfMaxPagesPerSlide: 1, keyboardCondition(event) { // Full-screen requests sometimes fail, we rely on the UI button instead. if (event.key === "f") { diff --git a/apps/client/src/widgets/search_result.tsx b/apps/client/src/widgets/search_result.tsx index 6c1c07419..fd3c24ab4 100644 --- a/apps/client/src/widgets/search_result.tsx +++ b/apps/client/src/widgets/search_result.tsx @@ -54,6 +54,7 @@ export default function SearchResult() { {state === SearchResultState.GOT_RESULTS && ( Date: Sat, 18 Oct 2025 21:59:09 +0300 Subject: [PATCH 009/103] fix(client/print): slides not paginating correctly --- apps/client/src/print.css | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/apps/client/src/print.css b/apps/client/src/print.css index 4927e5587..5d31138ce 100644 --- a/apps/client/src/print.css +++ b/apps/client/src/print.css @@ -2,4 +2,9 @@ html, body { width: 100%; height: 100%; +} + +.note-list-widget.full-height, +.note-list-widget.full-height .note-list-widget-content { + height: unset !important; } \ No newline at end of file From 750c4104f7b545d2910356175ed50cf644c78515 Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Sat, 18 Oct 2025 22:05:57 +0300 Subject: [PATCH 010/103] feat(client/print): automatically apply right query param --- apps/client/src/widgets/collections/presentation/index.tsx | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/apps/client/src/widgets/collections/presentation/index.tsx b/apps/client/src/widgets/collections/presentation/index.tsx index 297b7f0e5..82d0a47cd 100644 --- a/apps/client/src/widgets/collections/presentation/index.tsx +++ b/apps/client/src/widgets/collections/presentation/index.tsx @@ -51,7 +51,12 @@ export default function PresentationView({ note, noteIds, media }: ViewModeProps ) - } else { + } else if (media === "print") { + // Printing needs a query parameter that is read by Reveal.js. + const url = new URL(window.location.href); + url.searchParams.set("print-pdf", ""); + window.history.replaceState({}, '', url); + // Shadow DOM doesn't work well with Reveal.js's PDF printing mechanism. return content; } From df176c4e4ab6fb495f0b2843f734d3c8c5ded305 Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Sat, 18 Oct 2025 22:11:33 +0300 Subject: [PATCH 011/103] fix(client/print): title interfering with presentation --- apps/client/src/print.tsx | 30 ++++++++++++------------------ 1 file changed, 12 insertions(+), 18 deletions(-) diff --git a/apps/client/src/print.tsx b/apps/client/src/print.tsx index 5bfd0d5f1..dda6ae2b2 100644 --- a/apps/client/src/print.tsx +++ b/apps/client/src/print.tsx @@ -1,4 +1,3 @@ -import { JSX } from "preact/jsx-runtime"; import FNote from "./entities/fnote"; import { render } from "preact"; import { CustomNoteList } from "./widgets/collections/NoteList"; @@ -10,31 +9,26 @@ async function main() { const note = await froca.getNote(noteId); if (!note) return; - - let el: JSX.Element | null = null; - if (note.type === "book") { - el = handleCollection(note); - } - - render(( - <> -

{note.title}

- {el} - - ), document.body); + render(getElementForNote(note), document.body); } -function handleCollection(note: FNote) { - return ( - - ); + />; + } + + // Other note types. + return <> +

{note.title}

+ ; } main(); From b0234a75f8c5e2d7639519e7d99bb789bfccf9b2 Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Sat, 18 Oct 2025 22:25:50 +0300 Subject: [PATCH 012/103] fix(client/print): variables not loading for printing presentations --- .../widgets/collections/presentation/index.tsx | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/apps/client/src/widgets/collections/presentation/index.tsx b/apps/client/src/widgets/collections/presentation/index.tsx index 82d0a47cd..44341688a 100644 --- a/apps/client/src/widgets/collections/presentation/index.tsx +++ b/apps/client/src/widgets/collections/presentation/index.tsx @@ -1,4 +1,4 @@ -import { ViewModeProps } from "../interface"; +import { ViewModeMedia, ViewModeProps } from "../interface"; import { useEffect, useLayoutEffect, useRef, useState } from "preact/hooks"; import Reveal from "reveal.js"; import slideBaseStylesheet from "reveal.js/dist/reveal.css?raw"; @@ -18,7 +18,7 @@ export default function PresentationView({ note, noteIds, media }: ViewModeProps const [ presentation, setPresentation ] = useState(); const containerRef = useRef(null); const [ api, setApi ] = useState(); - const stylesheets = usePresentationStylesheets(note); + const stylesheets = usePresentationStylesheets(note, media); function refresh() { buildPresentationModel(note).then(setPresentation); @@ -62,17 +62,22 @@ export default function PresentationView({ note, noteIds, media }: ViewModeProps } } -function usePresentationStylesheets(note: FNote) { +function usePresentationStylesheets(note: FNote, media: ViewModeMedia) { const [ themeName ] = useNoteLabelWithDefault(note, "presentation:theme", DEFAULT_THEME); const [ stylesheets, setStylesheets ] = useState(); useLayoutEffect(() => { loadPresentationTheme(themeName).then((themeStylesheet) => { - setStylesheets([ + let stylesheets = [ slideBaseStylesheet, themeStylesheet, slideCustomStylesheet - ].map(stylesheet => stylesheet.replace(/:root/g, ":host"))); + ]; + if (media === "screen") { + // We are rendering in the shadow DOM, so the global variables are not set correctly. + stylesheets = stylesheets.map(stylesheet => stylesheet.replace(/:root/g, ":host")); + } + setStylesheets(stylesheets); }); }, [ themeName ]); From 49cd8b2a240be56c3d6a5af6d23c00be786a0e74 Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Sat, 18 Oct 2025 22:54:29 +0300 Subject: [PATCH 013/103] chore(client/print): use different approach than custom route (WIP) --- apps/server/src/routes/index.ts | 26 ++++++++++++-------------- apps/server/src/routes/routes.ts | 1 - 2 files changed, 12 insertions(+), 15 deletions(-) diff --git a/apps/server/src/routes/index.ts b/apps/server/src/routes/index.ts index 0d968ce09..d5183cbbe 100644 --- a/apps/server/src/routes/index.ts +++ b/apps/server/src/routes/index.ts @@ -20,14 +20,7 @@ type View = "desktop" | "mobile" | "print"; function index(req: Request, res: Response) { const view = getView(req); - renderView(req, res, view); -} - -export function printIndex(req: Request, res: Response) { - renderView(req, res, "print"); -} - -function renderView(req: Request, res: Response, view: View) { + console.log("Got view ", view); const options = optionService.getOptionMap(); //'overwrite' set to false (default) => the existing token will be re-used and validated @@ -67,14 +60,20 @@ function renderView(req: Request, res: Response, view: View) { isProtectedSessionAvailable: protectedSessionService.isProtectedSessionAvailable(), maxContentWidth: Math.max(640, parseInt(options.maxContentWidth)), triliumVersion: packageJson.version, - assetPath: view !== "print" ? assetPath : "../" + assetPath, - appPath: view !== "print" ? appPath : "../" + appPath, - baseApiUrl: view !== "print" ? 'api/' : "../api/", + assetPath, + appPath, + baseApiUrl: 'api/', currentLocale: getCurrentLocale() }); } -function getView(req: Request): "desktop" | "mobile" { +function getView(req: Request): View { + console.log("Got ", req.query); + // Special override for printing. + if ("print" in req.query) { + return "print"; + } + // Electron always uses the desktop view. if (isElectron) { return "desktop"; @@ -133,6 +132,5 @@ function getAppCssNoteIds() { } export default { - index, - printIndex + index }; diff --git a/apps/server/src/routes/routes.ts b/apps/server/src/routes/routes.ts index 30758b36e..9ba6b686c 100644 --- a/apps/server/src/routes/routes.ts +++ b/apps/server/src/routes/routes.ts @@ -81,7 +81,6 @@ const GET = "get", function register(app: express.Application) { route(GET, "/", [auth.checkAuth, csrfMiddleware], indexRoute.index); - route(GET, "/print/:noteId", [ auth.checkAuth ], indexRoute.printIndex); route(GET, "/login", [auth.checkAppInitialized, auth.checkPasswordSet], loginRoute.loginPage); route(GET, "/set-password", [auth.checkAppInitialized, auth.checkPasswordNotSet], loginRoute.setPasswordPage); From 89dac52f490fb3e5eb2507581006a4847808a557 Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Sun, 19 Oct 2025 15:38:10 +0300 Subject: [PATCH 014/103] fix(client/print): read note ID properly from note path --- apps/client/src/print.tsx | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/apps/client/src/print.tsx b/apps/client/src/print.tsx index dda6ae2b2..4d74fd90c 100644 --- a/apps/client/src/print.tsx +++ b/apps/client/src/print.tsx @@ -4,7 +4,10 @@ import { CustomNoteList } from "./widgets/collections/NoteList"; import "./print.css"; async function main() { - const noteId = window.location.pathname.split("/")[2]; + const notePath = window.location.hash.substring(1); + const noteId = notePath.split("/").at(-1); + if (!noteId) return; + const froca = (await import("./services/froca")).default; const note = await froca.getNote(noteId); From 64576458b7053c739fdbaab9ef2fb15563e0abd8 Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Sun, 19 Oct 2025 16:27:13 +0300 Subject: [PATCH 015/103] feat(client/print): print presentations with waiting for slides to load --- apps/client/src/print.tsx | 21 +++++++++++++++++-- apps/client/src/stylesheets/style.css | 10 +++++++++ .../src/widgets/collections/NoteList.tsx | 3 ++- .../src/widgets/collections/interface.ts | 1 + .../collections/presentation/index.tsx | 10 ++++++++- apps/client/src/widgets/note_detail.ts | 15 +++++++++++-- .../client/src/widgets/ribbon/NoteActions.tsx | 8 +++---- 7 files changed, 58 insertions(+), 10 deletions(-) diff --git a/apps/client/src/print.tsx b/apps/client/src/print.tsx index 4d74fd90c..0ff7522f9 100644 --- a/apps/client/src/print.tsx +++ b/apps/client/src/print.tsx @@ -2,6 +2,7 @@ import FNote from "./entities/fnote"; import { render } from "preact"; import { CustomNoteList } from "./widgets/collections/NoteList"; import "./print.css"; +import { useCallback, useRef } from "preact/hooks"; async function main() { const notePath = window.location.hash.substring(1); @@ -12,10 +13,25 @@ async function main() { const note = await froca.getNote(noteId); if (!note) return; - render(getElementForNote(note), document.body); + render(, document.body); } -function getElementForNote(note: FNote) { +function App({ note }: { note: FNote }) { + return ( + <> + + + ); +} + +function ContentRenderer({ note }: { note: FNote }) { + const sentReadyEvent = useRef(false); + const onReady = useCallback(() => { + if (sentReadyEvent.current) return; + window.dispatchEvent(new Event("note-ready")); + sentReadyEvent.current = true; + }, []); + // Collections. if (note.type === "book") { return ; } diff --git a/apps/client/src/stylesheets/style.css b/apps/client/src/stylesheets/style.css index 03d1bd8ff..fd8383130 100644 --- a/apps/client/src/stylesheets/style.css +++ b/apps/client/src/stylesheets/style.css @@ -2422,4 +2422,14 @@ footer.webview-footer button { .revision-diff-removed { background: rgba(255, 100, 100, 0.5); text-decoration: line-through; +} + +iframe.print-iframe { + position: absolute; + top: 0; + left: -600px; + right: -600px; + bottom: 0; + width: 0; + height: 0; } \ No newline at end of file diff --git a/apps/client/src/widgets/collections/NoteList.tsx b/apps/client/src/widgets/collections/NoteList.tsx index 11abcc5c2..f9c9ba5d1 100644 --- a/apps/client/src/widgets/collections/NoteList.tsx +++ b/apps/client/src/widgets/collections/NoteList.tsx @@ -23,9 +23,10 @@ interface NoteListProps { isEnabled: boolean; ntxId: string | null | undefined; media: ViewModeMedia; + onReady: () => void; } -export default function NoteList(props: Pick) { +export default function NoteList(props: Pick) { const { note, noteContext, notePath, ntxId } = useNoteContext(); const isEnabled = noteContext?.hasNoteList(); return diff --git a/apps/client/src/widgets/collections/interface.ts b/apps/client/src/widgets/collections/interface.ts index 81a8e4d3d..7bec23a64 100644 --- a/apps/client/src/widgets/collections/interface.ts +++ b/apps/client/src/widgets/collections/interface.ts @@ -16,4 +16,5 @@ export interface ViewModeProps { viewConfig: T | undefined; saveConfig(newConfig: T): void; media: ViewModeMedia; + onReady(): void; } diff --git a/apps/client/src/widgets/collections/presentation/index.tsx b/apps/client/src/widgets/collections/presentation/index.tsx index 44341688a..dfa4574e0 100644 --- a/apps/client/src/widgets/collections/presentation/index.tsx +++ b/apps/client/src/widgets/collections/presentation/index.tsx @@ -14,7 +14,7 @@ import { t } from "../../../services/i18n"; import { DEFAULT_THEME, loadPresentationTheme } from "./themes"; import FNote from "../../../entities/fnote"; -export default function PresentationView({ note, noteIds, media }: ViewModeProps<{}>) { +export default function PresentationView({ note, noteIds, media, onReady }: ViewModeProps<{}>) { const [ presentation, setPresentation ] = useState(); const containerRef = useRef(null); const [ api, setApi ] = useState(); @@ -33,6 +33,14 @@ export default function PresentationView({ note, noteIds, media }: ViewModeProps useLayoutEffect(refresh, [ note, noteIds ]); + useEffect(() => { + // We need to wait for Reveal.js to initialize (by setting api) and for the presentation to become available. + if (api && presentation) { + // Timeout is necessary because it otherwise can cause flakiness by rendering only the first slide. + setTimeout(onReady, 200); + } + }, [ api, presentation ]); + if (!presentation || !stylesheets) return; const content = ( <> diff --git a/apps/client/src/widgets/note_detail.ts b/apps/client/src/widgets/note_detail.ts index 5b798a06a..0ec68060c 100644 --- a/apps/client/src/widgets/note_detail.ts +++ b/apps/client/src/widgets/note_detail.ts @@ -297,8 +297,19 @@ export default class NoteDetailWidget extends NoteContextAwareWidget { return; } - // Trigger in timeout to dismiss the menu while printing. - setTimeout(window.print, 0); + const iframe = document.createElement('iframe'); + iframe.src = `?print#${this.notePath}`; + iframe.className = "print-iframe"; + document.body.appendChild(iframe); + iframe.onload = () => { + console.log("Got ", iframe, iframe.contentWindow); + if (iframe.contentWindow) { + iframe.contentWindow.addEventListener("note-ready", () => { + iframe.contentWindow?.print(); + document.body.removeChild(iframe); + }); + } + }; } async exportAsPdfEvent() { diff --git a/apps/client/src/widgets/ribbon/NoteActions.tsx b/apps/client/src/widgets/ribbon/NoteActions.tsx index f780eab8b..2fed2ea02 100644 --- a/apps/client/src/widgets/ribbon/NoteActions.tsx +++ b/apps/client/src/widgets/ribbon/NoteActions.tsx @@ -47,11 +47,11 @@ function NoteContextMenu({ note, noteContext }: { note: FNote, noteContext?: Not const canBeConvertedToAttachment = note?.isEligibleForConversionToAttachment(); const isSearchable = ["text", "code", "book", "mindMap", "doc"].includes(note.type); const isInOptions = note.noteId.startsWith("_options"); - const isPrintable = ["text", "code"].includes(note.type); + const isPrintable = ["text", "code", "book"].includes(note.type); const isElectron = getIsElectron(); const isMac = getIsMac(); const hasSource = ["text", "code", "relationMap", "mermaid", "canvas", "mindMap"].includes(note.type); - const isSearchOrBook = ["search", "book"].includes(note.type); + const isSearchOrBook = ["search", "book"].includes(note.type); return ( noteContext?.notePath && parentComponent?.triggerCommand("showExportDialog", { - notePath: noteContext.notePath, + notePath: noteContext.notePath, defaultType: "single" })} /> @@ -133,4 +133,4 @@ function ConvertToAttachment({ note }: { note: FNote }) { }} >{t("note_actions.convert_into_attachment")} ) -} \ No newline at end of file +} From 76c337602bbfa3a18943ccb34ec5adbd21efd364 Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Sun, 19 Oct 2025 16:35:13 +0300 Subject: [PATCH 016/103] chore(print): clean up some logs --- apps/client/src/widgets/note_detail.ts | 12 +++++------- apps/server/src/routes/index.ts | 2 -- 2 files changed, 5 insertions(+), 9 deletions(-) diff --git a/apps/client/src/widgets/note_detail.ts b/apps/client/src/widgets/note_detail.ts index 0ec68060c..472c4aeea 100644 --- a/apps/client/src/widgets/note_detail.ts +++ b/apps/client/src/widgets/note_detail.ts @@ -302,13 +302,11 @@ export default class NoteDetailWidget extends NoteContextAwareWidget { iframe.className = "print-iframe"; document.body.appendChild(iframe); iframe.onload = () => { - console.log("Got ", iframe, iframe.contentWindow); - if (iframe.contentWindow) { - iframe.contentWindow.addEventListener("note-ready", () => { - iframe.contentWindow?.print(); - document.body.removeChild(iframe); - }); - } + if (!iframe.contentWindow) return; + iframe.contentWindow.addEventListener("note-ready", () => { + iframe.contentWindow?.print(); + document.body.removeChild(iframe); + }); }; } diff --git a/apps/server/src/routes/index.ts b/apps/server/src/routes/index.ts index d5183cbbe..ea4821e3a 100644 --- a/apps/server/src/routes/index.ts +++ b/apps/server/src/routes/index.ts @@ -20,7 +20,6 @@ type View = "desktop" | "mobile" | "print"; function index(req: Request, res: Response) { const view = getView(req); - console.log("Got view ", view); const options = optionService.getOptionMap(); //'overwrite' set to false (default) => the existing token will be re-used and validated @@ -68,7 +67,6 @@ function index(req: Request, res: Response) { } function getView(req: Request): View { - console.log("Got ", req.query); // Special override for printing. if ("print" in req.query) { return "print"; From c160ab472151279f4168b8e9c82a567cf3b68110 Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Sun, 19 Oct 2025 16:45:04 +0300 Subject: [PATCH 017/103] feat(client/print): don't connect to websocket --- apps/client/src/services/ws.ts | 2 ++ apps/client/src/types.d.ts | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/apps/client/src/services/ws.ts b/apps/client/src/services/ws.ts index 517eb677e..488000ba1 100644 --- a/apps/client/src/services/ws.ts +++ b/apps/client/src/services/ws.ts @@ -304,6 +304,8 @@ async function sendPing() { } setTimeout(() => { + if (glob.device === "print") return; + ws = connectWebSocket(); lastPingTs = Date.now(); diff --git a/apps/client/src/types.d.ts b/apps/client/src/types.d.ts index 36b56b9a6..2546d2ffa 100644 --- a/apps/client/src/types.d.ts +++ b/apps/client/src/types.d.ts @@ -16,7 +16,7 @@ interface ElectronProcess { interface CustomGlobals { isDesktop: typeof utils.isDesktop; isMobile: typeof utils.isMobile; - device: "mobile" | "desktop"; + device: "mobile" | "desktop" | "print"; getComponentByEl: typeof appContext.getComponentByEl; getHeaders: typeof server.getHeaders; getReferenceLinkTitle: (href: string) => Promise; From 61bdcf2a536b60cb20e6e5ff49625198d87ba97f Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Sun, 19 Oct 2025 17:12:41 +0300 Subject: [PATCH 018/103] feat(client/print): add a toast when printing is in progress --- apps/client/src/translations/en/translation.json | 3 ++- apps/client/src/widgets/note_detail.ts | 7 +++++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/apps/client/src/translations/en/translation.json b/apps/client/src/translations/en/translation.json index a6858c7d6..d09d2742f 100644 --- a/apps/client/src/translations/en/translation.json +++ b/apps/client/src/translations/en/translation.json @@ -1722,7 +1722,8 @@ "window-on-top": "Keep Window on Top" }, "note_detail": { - "could_not_find_typewidget": "Could not find typeWidget for type '{{type}}'" + "could_not_find_typewidget": "Could not find typeWidget for type '{{type}}'", + "printing": "Printing in progress..." }, "note_title": { "placeholder": "type note's title here..." diff --git a/apps/client/src/widgets/note_detail.ts b/apps/client/src/widgets/note_detail.ts index 472c4aeea..0c1255d39 100644 --- a/apps/client/src/widgets/note_detail.ts +++ b/apps/client/src/widgets/note_detail.ts @@ -33,6 +33,7 @@ import type { NoteType } from "../entities/fnote.js"; import type TypeWidget from "./type_widgets/type_widget.js"; import { MermaidTypeWidget } from "./type_widgets/mermaid.js"; import AiChatTypeWidget from "./type_widgets/ai_chat.js"; +import toast from "../services/toast.js"; const TPL = /*html*/`
@@ -297,6 +298,11 @@ export default class NoteDetailWidget extends NoteContextAwareWidget { return; } + toast.showPersistent({ + icon: "bx bx-loader-circle bx-spin", + message: t("note_detail.printing"), + id: "printing" + }); const iframe = document.createElement('iframe'); iframe.src = `?print#${this.notePath}`; iframe.className = "print-iframe"; @@ -304,6 +310,7 @@ export default class NoteDetailWidget extends NoteContextAwareWidget { iframe.onload = () => { if (!iframe.contentWindow) return; iframe.contentWindow.addEventListener("note-ready", () => { + toast.closePersistent("printing"); iframe.contentWindow?.print(); document.body.removeChild(iframe); }); From fb0c3be7facb512b11d7806e04e29f34b271c4c5 Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Sun, 19 Oct 2025 19:56:26 +0300 Subject: [PATCH 019/103] feat(desktop/print): integrate with offscreen rendering --- apps/client/src/widgets/note_detail.ts | 32 ++++++++++++++++---------- apps/server/src/services/window.ts | 28 ++++++++++++++++++++++ 2 files changed, 48 insertions(+), 12 deletions(-) diff --git a/apps/client/src/widgets/note_detail.ts b/apps/client/src/widgets/note_detail.ts index 0c1255d39..5310b327a 100644 --- a/apps/client/src/widgets/note_detail.ts +++ b/apps/client/src/widgets/note_detail.ts @@ -28,7 +28,7 @@ import ContentWidgetTypeWidget from "./type_widgets/content_widget.js"; import AttachmentListTypeWidget from "./type_widgets/attachment_list.js"; import AttachmentDetailTypeWidget from "./type_widgets/attachment_detail.js"; import MindMapWidget from "./type_widgets/mind_map.js"; -import utils from "../services/utils.js"; +import utils, { isElectron } from "../services/utils.js"; import type { NoteType } from "../entities/fnote.js"; import type TypeWidget from "./type_widgets/type_widget.js"; import { MermaidTypeWidget } from "./type_widgets/mermaid.js"; @@ -303,18 +303,26 @@ export default class NoteDetailWidget extends NoteContextAwareWidget { message: t("note_detail.printing"), id: "printing" }); - const iframe = document.createElement('iframe'); - iframe.src = `?print#${this.notePath}`; - iframe.className = "print-iframe"; - document.body.appendChild(iframe); - iframe.onload = () => { - if (!iframe.contentWindow) return; - iframe.contentWindow.addEventListener("note-ready", () => { - toast.closePersistent("printing"); - iframe.contentWindow?.print(); - document.body.removeChild(iframe); + + if (isElectron()) { + const { ipcRenderer } = utils.dynamicRequire("electron"); + ipcRenderer.send("print-note", { + notePath: this.notePath }); - }; + } else { + const iframe = document.createElement('iframe'); + iframe.src = `?print#${this.notePath}`; + iframe.className = "print-iframe"; + document.body.appendChild(iframe); + iframe.onload = () => { + if (!iframe.contentWindow) return; + iframe.contentWindow.addEventListener("note-ready", () => { + toast.closePersistent("printing"); + iframe.contentWindow?.print(); + document.body.removeChild(iframe); + }); + }; + } } async exportAsPdfEvent() { diff --git a/apps/server/src/services/window.ts b/apps/server/src/services/window.ts index b26b000af..f149fd1e0 100644 --- a/apps/server/src/services/window.ts +++ b/apps/server/src/services/window.ts @@ -12,6 +12,8 @@ import type { App, BrowserWindowConstructorOptions, BrowserWindow, WebContents } import { formatDownloadTitle, isDev, isMac, isWindows } from "./utils.js"; import { t } from "i18next"; import { RESOURCE_DIR } from "./resource_dir.js"; +import { PerformanceObserverEntryList } from "perf_hooks"; +import options from "./options.js"; // Prevent the window being garbage collected let mainWindow: BrowserWindow | null; @@ -67,12 +69,38 @@ electron.ipcMain.on("create-extra-window", (event, arg) => { createExtraWindow(arg.extraWindowHash); }); +interface PrintOpts { + notePath: string; +} + interface ExportAsPdfOpts { title: string; landscape: boolean; pageSize: "A0" | "A1" | "A2" | "A3" | "A4" | "A5" | "A6" | "Legal" | "Letter" | "Tabloid" | "Ledger"; } +electron.ipcMain.on("print-note", async (e, { notePath }: PrintOpts) => { + const browserWindow = new electron.BrowserWindow({ + show: false, + webPreferences: { + nodeIntegration: true, + contextIsolation: false, + offscreen: true, + session: e.sender.session + }, + }); + await browserWindow.loadURL(`http://127.0.0.1:${port}/?print#${notePath}`); + await browserWindow.webContents.executeJavaScript(` + new Promise(resolve => { + if (window._noteReady) return resolve(); + window.addEventListener("note-ready", () => resolve()); + }); + `); + browserWindow.webContents.print({}, () => { + browserWindow.destroy(); + }); +}); + electron.ipcMain.on("export-as-pdf", async (e, opts: ExportAsPdfOpts) => { const browserWindow = electron.BrowserWindow.fromWebContents(e.sender); if (!browserWindow) { From d1854d85ce2113570d0313e4612f31b0fbd3b0e6 Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Sun, 19 Oct 2025 20:23:28 +0300 Subject: [PATCH 020/103] feat(desktop/print): integrate for export to PDF --- apps/client/src/widgets/note_detail.ts | 3 +- .../src/assets/translations/en/server.json | 3 +- apps/server/src/services/window.ts | 34 ++++++++++++------- 3 files changed, 25 insertions(+), 15 deletions(-) diff --git a/apps/client/src/widgets/note_detail.ts b/apps/client/src/widgets/note_detail.ts index 5310b327a..7d2791e32 100644 --- a/apps/client/src/widgets/note_detail.ts +++ b/apps/client/src/widgets/note_detail.ts @@ -326,13 +326,14 @@ export default class NoteDetailWidget extends NoteContextAwareWidget { } async exportAsPdfEvent() { - if (!this.noteContext?.isActive() || !this.note) { + if (!this.noteContext?.isActive() || !this.note || !this.notePath) { return; } const { ipcRenderer } = utils.dynamicRequire("electron"); ipcRenderer.send("export-as-pdf", { title: this.note.title, + notePath: this.notePath, pageSize: this.note.getAttributeValue("label", "printPageSize") ?? "Letter", landscape: this.note.hasAttribute("label", "printLandscape") }); diff --git a/apps/server/src/assets/translations/en/server.json b/apps/server/src/assets/translations/en/server.json index b583bb343..972f45154 100644 --- a/apps/server/src/assets/translations/en/server.json +++ b/apps/server/src/assets/translations/en/server.json @@ -373,7 +373,8 @@ "export_filter": "PDF Document (*.pdf)", "unable-to-export-message": "The current note could not be exported as a PDF.", "unable-to-export-title": "Unable to export as PDF", - "unable-to-save-message": "The selected file could not be written to. Try again or select another destination." + "unable-to-save-message": "The selected file could not be written to. Try again or select another destination.", + "unable-to-print": "Unable to print the note" }, "tray": { "tooltip": "Trilium Notes", diff --git a/apps/server/src/services/window.ts b/apps/server/src/services/window.ts index f149fd1e0..83d1ca185 100644 --- a/apps/server/src/services/window.ts +++ b/apps/server/src/services/window.ts @@ -8,7 +8,7 @@ import sqlInit from "./sql_init.js"; import cls from "./cls.js"; import keyboardActionsService from "./keyboard_actions.js"; import electron from "electron"; -import type { App, BrowserWindowConstructorOptions, BrowserWindow, WebContents } from "electron"; +import type { App, BrowserWindowConstructorOptions, BrowserWindow, WebContents, IpcMainEvent } from "electron"; import { formatDownloadTitle, isDev, isMac, isWindows } from "./utils.js"; import { t } from "i18next"; import { RESOURCE_DIR } from "./resource_dir.js"; @@ -71,15 +71,28 @@ electron.ipcMain.on("create-extra-window", (event, arg) => { interface PrintOpts { notePath: string; + printToPdf: boolean; } interface ExportAsPdfOpts { + notePath: string; title: string; landscape: boolean; pageSize: "A0" | "A1" | "A2" | "A3" | "A4" | "A5" | "A6" | "Legal" | "Letter" | "Tabloid" | "Ledger"; } electron.ipcMain.on("print-note", async (e, { notePath }: PrintOpts) => { + const browserWindow = await getBrowserWindowForPrinting(e, notePath); + browserWindow.webContents.print({}, (success, failureReason) => { + if (success) { + browserWindow.destroy(); + } else { + electron.dialog.showErrorBox(t("pdf.unable-to-print"), failureReason); + } + }); +}); + +async function getBrowserWindowForPrinting(e: IpcMainEvent, notePath: string) { const browserWindow = new electron.BrowserWindow({ show: false, webPreferences: { @@ -96,19 +109,14 @@ electron.ipcMain.on("print-note", async (e, { notePath }: PrintOpts) => { window.addEventListener("note-ready", () => resolve()); }); `); - browserWindow.webContents.print({}, () => { - browserWindow.destroy(); - }); -}); + return browserWindow; +} -electron.ipcMain.on("export-as-pdf", async (e, opts: ExportAsPdfOpts) => { - const browserWindow = electron.BrowserWindow.fromWebContents(e.sender); - if (!browserWindow) { - return; - } +electron.ipcMain.on("export-as-pdf", async (e, { title, notePath, landscape, pageSize }: ExportAsPdfOpts) => { + const browserWindow = await getBrowserWindowForPrinting(e, notePath); const filePath = electron.dialog.showSaveDialogSync(browserWindow, { - defaultPath: formatDownloadTitle(opts.title, "file", "application/pdf"), + defaultPath: formatDownloadTitle(title, "file", "application/pdf"), filters: [ { name: t("pdf.export_filter"), @@ -123,8 +131,8 @@ electron.ipcMain.on("export-as-pdf", async (e, opts: ExportAsPdfOpts) => { let buffer: Buffer; try { buffer = await browserWindow.webContents.printToPDF({ - landscape: opts.landscape, - pageSize: opts.pageSize, + landscape, + pageSize, generateDocumentOutline: true, generateTaggedPDF: true, printBackground: true, From 3cf7e709fc41a328af7b1d80836323ce8e55f857 Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Sun, 19 Oct 2025 20:50:18 +0300 Subject: [PATCH 021/103] fix(desktop/print): proper reporting when it finishes --- .../src/translations/en/translation.json | 3 +- apps/client/src/widgets/note_detail.ts | 13 +++ apps/server/src/services/window.ts | 96 ++++++++++--------- 3 files changed, 65 insertions(+), 47 deletions(-) diff --git a/apps/client/src/translations/en/translation.json b/apps/client/src/translations/en/translation.json index d09d2742f..c52acb3ff 100644 --- a/apps/client/src/translations/en/translation.json +++ b/apps/client/src/translations/en/translation.json @@ -1723,7 +1723,8 @@ }, "note_detail": { "could_not_find_typewidget": "Could not find typeWidget for type '{{type}}'", - "printing": "Printing in progress..." + "printing": "Printing in progress...", + "printing_pdf": "Exporting to PDF in progress..." }, "note_title": { "placeholder": "type note's title here..." diff --git a/apps/client/src/widgets/note_detail.ts b/apps/client/src/widgets/note_detail.ts index 7d2791e32..a701d442b 100644 --- a/apps/client/src/widgets/note_detail.ts +++ b/apps/client/src/widgets/note_detail.ts @@ -141,6 +141,13 @@ export default class NoteDetailWidget extends NoteContextAwareWidget { doRender() { this.$widget = $(TPL); this.contentSized(); + + if (utils.isElectron()) { + const { ipcRenderer } = utils.dynamicRequire("electron"); + ipcRenderer.on("print-done", () => { + toast.closePersistent("printing"); + }); + } } async refresh() { @@ -330,6 +337,12 @@ export default class NoteDetailWidget extends NoteContextAwareWidget { return; } + toast.showPersistent({ + icon: "bx bx-loader-circle bx-spin", + message: t("note_detail.printing_pdf"), + id: "printing" + }); + const { ipcRenderer } = utils.dynamicRequire("electron"); ipcRenderer.send("export-as-pdf", { title: this.note.title, diff --git a/apps/server/src/services/window.ts b/apps/server/src/services/window.ts index 83d1ca185..69d273158 100644 --- a/apps/server/src/services/window.ts +++ b/apps/server/src/services/window.ts @@ -89,9 +89,59 @@ electron.ipcMain.on("print-note", async (e, { notePath }: PrintOpts) => { } else { electron.dialog.showErrorBox(t("pdf.unable-to-print"), failureReason); } + e.sender.send("print-done"); }); }); +electron.ipcMain.on("export-as-pdf", async (e, { title, notePath, landscape, pageSize }: ExportAsPdfOpts) => { + async function print() { + const browserWindow = await getBrowserWindowForPrinting(e, notePath); + + const filePath = electron.dialog.showSaveDialogSync(browserWindow, { + defaultPath: formatDownloadTitle(title, "file", "application/pdf"), + filters: [ + { + name: t("pdf.export_filter"), + extensions: ["pdf"] + } + ] + }); + if (!filePath) return; + + let buffer: Buffer; + try { + buffer = await browserWindow.webContents.printToPDF({ + landscape, + pageSize, + generateDocumentOutline: true, + generateTaggedPDF: true, + printBackground: true, + displayHeaderFooter: true, + headerTemplate: `
`, + footerTemplate: ` +
+
+ ` + }); + } catch (e) { + electron.dialog.showErrorBox(t("pdf.unable-to-export-title"), t("pdf.unable-to-export-message")); + return; + } + + try { + await fs.writeFile(filePath, buffer); + } catch (e) { + electron.dialog.showErrorBox(t("pdf.unable-to-export-title"), t("pdf.unable-to-save-message")); + return; + } + + electron.shell.openPath(filePath); + } + + await print(); + e.sender.send("print-done"); +}); + async function getBrowserWindowForPrinting(e: IpcMainEvent, notePath: string) { const browserWindow = new electron.BrowserWindow({ show: false, @@ -112,52 +162,6 @@ async function getBrowserWindowForPrinting(e: IpcMainEvent, notePath: string) { return browserWindow; } -electron.ipcMain.on("export-as-pdf", async (e, { title, notePath, landscape, pageSize }: ExportAsPdfOpts) => { - const browserWindow = await getBrowserWindowForPrinting(e, notePath); - - const filePath = electron.dialog.showSaveDialogSync(browserWindow, { - defaultPath: formatDownloadTitle(title, "file", "application/pdf"), - filters: [ - { - name: t("pdf.export_filter"), - extensions: ["pdf"] - } - ] - }); - if (!filePath) { - return; - } - - let buffer: Buffer; - try { - buffer = await browserWindow.webContents.printToPDF({ - landscape, - pageSize, - generateDocumentOutline: true, - generateTaggedPDF: true, - printBackground: true, - displayHeaderFooter: true, - headerTemplate: `
`, - footerTemplate: ` -
-
- ` - }); - } catch (e) { - electron.dialog.showErrorBox(t("pdf.unable-to-export-title"), t("pdf.unable-to-export-message")); - return; - } - - try { - await fs.writeFile(filePath, buffer); - } catch (e) { - electron.dialog.showErrorBox(t("pdf.unable-to-export-title"), t("pdf.unable-to-save-message")); - return; - } - - electron.shell.openPath(filePath); -}); - async function createMainWindow(app: App) { if ("setUserTasks" in app) { app.setUserTasks([ From 5957ce26f19d542afef03539334b4078ef9daebe Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Sun, 19 Oct 2025 21:27:34 +0300 Subject: [PATCH 022/103] feat(client/print): support most notes via content_renderer --- apps/client/src/print.tsx | 63 +++++++++++++++++++++++++-------------- 1 file changed, 41 insertions(+), 22 deletions(-) diff --git a/apps/client/src/print.tsx b/apps/client/src/print.tsx index 0ff7522f9..f8c8de8e4 100644 --- a/apps/client/src/print.tsx +++ b/apps/client/src/print.tsx @@ -2,7 +2,13 @@ import FNote from "./entities/fnote"; import { render } from "preact"; import { CustomNoteList } from "./widgets/collections/NoteList"; import "./print.css"; -import { useCallback, useRef } from "preact/hooks"; +import { useCallback, useEffect, useRef } from "preact/hooks"; +import content_renderer from "./services/content_renderer"; + +interface RendererProps { + note: FNote; + onReady: () => void; +} async function main() { const notePath = window.location.hash.substring(1); @@ -17,38 +23,51 @@ async function main() { } function App({ note }: { note: FNote }) { - return ( - <> - - - ); -} - -function ContentRenderer({ note }: { note: FNote }) { const sentReadyEvent = useRef(false); const onReady = useCallback(() => { if (sentReadyEvent.current) return; window.dispatchEvent(new Event("note-ready")); sentReadyEvent.current = true; }, []); + const props: RendererProps = { note, onReady }; - // Collections. - if (note.type === "book") { - return ; - } + return ( + <> + {note.type === "book" + ? + : + } + + ); +} + +function SingleNoteRenderer({ note, onReady }: RendererProps) { + const containerRef = useRef(null); + + useEffect(() => { + content_renderer.getRenderedContent(note, { + noChildrenList: true + }).then(({$renderedContent}) => { + containerRef.current?.replaceChildren(...$renderedContent); + }); + }, [ note ]); - // Other note types. return <>

{note.title}

+
; } +function CollectionRenderer({ note, onReady }: RendererProps) { + return ; +} + main(); From 678018585f5ce312934f0502b94bad451873739b Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Sun, 19 Oct 2025 22:12:41 +0300 Subject: [PATCH 023/103] fix(client/print): get text notes to print --- apps/client/src/print.tsx | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/apps/client/src/print.tsx b/apps/client/src/print.tsx index f8c8de8e4..96cf06132 100644 --- a/apps/client/src/print.tsx +++ b/apps/client/src/print.tsx @@ -2,7 +2,7 @@ import FNote from "./entities/fnote"; import { render } from "preact"; import { CustomNoteList } from "./widgets/collections/NoteList"; import "./print.css"; -import { useCallback, useEffect, useRef } from "preact/hooks"; +import { useCallback, useLayoutEffect, useRef } from "preact/hooks"; import content_renderer from "./services/content_renderer"; interface RendererProps { @@ -44,11 +44,12 @@ function App({ note }: { note: FNote }) { function SingleNoteRenderer({ note, onReady }: RendererProps) { const containerRef = useRef(null); - useEffect(() => { + useLayoutEffect(() => { content_renderer.getRenderedContent(note, { noChildrenList: true }).then(({$renderedContent}) => { containerRef.current?.replaceChildren(...$renderedContent); + requestAnimationFrame(onReady); }); }, [ note ]); From 380b14d7dfda2a19fe511d18e73a9b5c0114d356 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 20 Oct 2025 00:52:18 +0000 Subject: [PATCH 024/103] chore(deps): update dependency happy-dom to v20.0.7 --- apps/client/package.json | 2 +- pnpm-lock.yaml | 97 +++++++++++++++++++--------------------- 2 files changed, 48 insertions(+), 51 deletions(-) diff --git a/apps/client/package.json b/apps/client/package.json index dceb6e8b8..87f26468b 100644 --- a/apps/client/package.json +++ b/apps/client/package.json @@ -76,7 +76,7 @@ "@types/reveal.js": "5.2.1", "@types/tabulator-tables": "6.2.11", "copy-webpack-plugin": "13.0.1", - "happy-dom": "20.0.4", + "happy-dom": "20.0.7", "script-loader": "0.7.2", "vite-plugin-static-copy": "3.1.4" } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 77e4d877e..3a126a297 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -84,7 +84,7 @@ importers: version: 7.0.0(eslint@9.37.0(jiti@2.6.1)) happy-dom: specifier: ~20.0.0 - version: 20.0.4 + version: 20.0.7 jiti: specifier: 2.6.1 version: 2.6.1 @@ -120,7 +120,7 @@ importers: version: 4.5.4(@types/node@22.18.10)(rollup@4.52.0)(typescript@5.9.3)(vite@7.1.10(@types/node@22.18.10)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) vitest: specifier: 3.2.4 - version: 3.2.4(@types/debug@4.1.12)(@types/node@22.18.10)(@vitest/browser@3.2.4)(@vitest/ui@3.2.4)(happy-dom@20.0.4)(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.1)(msw@2.7.5(@types/node@22.18.10)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) + version: 3.2.4(@types/debug@4.1.12)(@types/node@22.18.10)(@vitest/browser@3.2.4)(@vitest/ui@3.2.4)(happy-dom@20.0.7)(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.1)(msw@2.7.5(@types/node@22.18.10)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) apps/client: dependencies: @@ -303,8 +303,8 @@ importers: specifier: 13.0.1 version: 13.0.1(webpack@5.101.3(esbuild@0.25.11)) happy-dom: - specifier: 20.0.4 - version: 20.0.4 + specifier: 20.0.7 + version: 20.0.7 script-loader: specifier: 0.7.2 version: 0.7.2 @@ -898,7 +898,7 @@ importers: version: 2.0.0(typescript@5.9.3)(vite@7.1.10(@types/node@22.18.10)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) vitest: specifier: 3.2.4 - version: 3.2.4(@types/debug@4.1.12)(@types/node@22.18.10)(@vitest/browser@3.2.4)(@vitest/ui@3.2.4)(happy-dom@20.0.4)(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.1)(msw@2.7.5(@types/node@22.18.10)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) + version: 3.2.4(@types/debug@4.1.12)(@types/node@22.18.10)(@vitest/browser@3.2.4)(@vitest/ui@3.2.4)(happy-dom@20.0.7)(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.1)(msw@2.7.5(@types/node@22.18.10)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) webdriverio: specifier: 9.20.0 version: 9.20.0(bufferutil@4.0.9)(utf-8-validate@6.0.5) @@ -958,7 +958,7 @@ importers: version: 2.0.0(typescript@5.9.3)(vite@7.1.10(@types/node@22.18.10)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) vitest: specifier: 3.2.4 - version: 3.2.4(@types/debug@4.1.12)(@types/node@22.18.10)(@vitest/browser@3.2.4)(@vitest/ui@3.2.4)(happy-dom@20.0.4)(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.1)(msw@2.7.5(@types/node@22.18.10)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) + version: 3.2.4(@types/debug@4.1.12)(@types/node@22.18.10)(@vitest/browser@3.2.4)(@vitest/ui@3.2.4)(happy-dom@20.0.7)(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.1)(msw@2.7.5(@types/node@22.18.10)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) webdriverio: specifier: 9.20.0 version: 9.20.0(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.1.10(@types/node@22.18.10)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) vitest: specifier: 3.2.4 - version: 3.2.4(@types/debug@4.1.12)(@types/node@22.18.10)(@vitest/browser@3.2.4)(@vitest/ui@3.2.4)(happy-dom@20.0.4)(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.1)(msw@2.7.5(@types/node@22.18.10)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) + version: 3.2.4(@types/debug@4.1.12)(@types/node@22.18.10)(@vitest/browser@3.2.4)(@vitest/ui@3.2.4)(happy-dom@20.0.7)(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.1)(msw@2.7.5(@types/node@22.18.10)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) webdriverio: specifier: 9.20.0 version: 9.20.0(bufferutil@4.0.9)(utf-8-validate@6.0.5) @@ -1085,7 +1085,7 @@ importers: version: 2.0.0(typescript@5.9.3)(vite@7.1.10(@types/node@22.18.10)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) vitest: specifier: 3.2.4 - version: 3.2.4(@types/debug@4.1.12)(@types/node@22.18.10)(@vitest/browser@3.2.4)(@vitest/ui@3.2.4)(happy-dom@20.0.4)(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.1)(msw@2.7.5(@types/node@22.18.10)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) + version: 3.2.4(@types/debug@4.1.12)(@types/node@22.18.10)(@vitest/browser@3.2.4)(@vitest/ui@3.2.4)(happy-dom@20.0.7)(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.1)(msw@2.7.5(@types/node@22.18.10)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) webdriverio: specifier: 9.20.0 version: 9.20.0(bufferutil@4.0.9)(utf-8-validate@6.0.5) @@ -1152,7 +1152,7 @@ importers: version: 2.0.0(typescript@5.9.3)(vite@7.1.10(@types/node@22.18.10)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) vitest: specifier: 3.2.4 - version: 3.2.4(@types/debug@4.1.12)(@types/node@22.18.10)(@vitest/browser@3.2.4)(@vitest/ui@3.2.4)(happy-dom@20.0.4)(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.1)(msw@2.7.5(@types/node@22.18.10)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) + version: 3.2.4(@types/debug@4.1.12)(@types/node@22.18.10)(@vitest/browser@3.2.4)(@vitest/ui@3.2.4)(happy-dom@20.0.7)(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.1)(msw@2.7.5(@types/node@22.18.10)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) webdriverio: specifier: 9.20.0 version: 9.20.0(bufferutil@4.0.9)(utf-8-validate@6.0.5) @@ -5018,9 +5018,6 @@ packages: '@types/node@22.18.10': resolution: {integrity: sha512-anNG/V/Efn/YZY4pRzbACnKxNKoBng2VTFydVu8RRs5hQjikP8CQfaeAV59VFSCzKNp90mXiVXW2QzV56rwMrg==} - '@types/node@22.18.11': - resolution: {integrity: sha512-Gd33J2XIrXurb+eT2ktze3rJAfAp9ZNjlBdh4SVgyrKEOADwCbdUDaK7QgJno8Ue4kcajscsKqu6n8OBG3hhCQ==} - '@types/node@22.18.8': resolution: {integrity: sha512-pAZSHMiagDR7cARo/cch1f3rXy0AEXwsVsVH09FcyeJVAzCnGgmYis7P3JidtTUjyadhTeSo8TgRPswstghDaw==} @@ -8275,8 +8272,8 @@ packages: handle-thing@2.0.1: resolution: {integrity: sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==} - happy-dom@20.0.4: - resolution: {integrity: sha512-WxFtvnij6G64/MtMimnZhF0nKx3LUQKc20zjATD6tKiqOykUwQkd+2FW/DZBAFNjk4oWh0xdv/HBleGJmSY/Iw==} + happy-dom@20.0.7: + resolution: {integrity: sha512-CywLfzmYxP5OYpuAG0usFY0CpxJtwYR+w8Mms5J8W29Y2Pzf6rbfQS2M523tRZTb0oLA+URopPtnAQX2fupHZQ==} engines: {node: '>=20.0.0'} has-bigints@1.1.0: @@ -14692,6 +14689,8 @@ snapshots: '@ckeditor/ckeditor5-core': 47.1.0 '@ckeditor/ckeditor5-upload': 47.1.0 ckeditor5: 47.1.0(patch_hash=8331a09d41443b39ea1c784daaccfeb0da4f9065ed556e7de92e9c77edd9eb41) + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-ai@47.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5)': dependencies: @@ -15092,8 +15091,6 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.1.0 ckeditor5: 47.1.0(patch_hash=8331a09d41443b39ea1c784daaccfeb0da4f9065ed556e7de92e9c77edd9eb41) es-toolkit: 1.39.5 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-editor-multi-root@47.1.0': dependencies: @@ -15263,6 +15260,8 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.1.0 '@ckeditor/ckeditor5-widget': 47.1.0 ckeditor5: 47.1.0(patch_hash=8331a09d41443b39ea1c784daaccfeb0da4f9065ed556e7de92e9c77edd9eb41) + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-html-embed@47.1.0': dependencies: @@ -16347,7 +16346,7 @@ snapshots: make-fetch-happen: 10.2.1 nopt: 6.0.0 proc-log: 2.0.1 - semver: 7.7.3 + semver: 7.7.2 tar: 6.2.1 which: 2.0.2 transitivePeerDependencies: @@ -17066,7 +17065,7 @@ snapshots: '@inquirer/figures': 1.0.13 '@inquirer/type': 2.0.0 '@types/mute-stream': 0.0.4 - '@types/node': 22.18.11 + '@types/node': 22.18.10 '@types/wrap-ansi': 3.0.0 ansi-escapes: 4.3.2 cli-width: 4.1.0 @@ -17694,7 +17693,7 @@ snapshots: '@npmcli/fs@2.1.2': dependencies: '@gar/promisify': 1.1.3 - semver: 7.7.3 + semver: 7.7.2 '@npmcli/fs@4.0.0': dependencies: @@ -19014,7 +19013,7 @@ snapshots: '@types/appdmg@0.5.5': dependencies: - '@types/node': 24.8.1 + '@types/node': 22.18.10 optional: true '@types/archiver@6.0.3': @@ -19036,7 +19035,7 @@ snapshots: '@types/bonjour@3.5.13': dependencies: - '@types/node': 24.8.1 + '@types/node': 22.18.10 '@types/bootstrap@5.2.10': dependencies: @@ -19046,7 +19045,7 @@ snapshots: dependencies: '@types/http-cache-semantics': 4.0.4 '@types/keyv': 3.1.4 - '@types/node': 24.8.1 + '@types/node': 22.18.10 '@types/responselike': 1.0.3 '@types/chai@5.2.2': @@ -19071,7 +19070,7 @@ snapshots: '@types/connect-history-api-fallback@1.5.4': dependencies: '@types/express-serve-static-core': 5.1.0 - '@types/node': 24.8.1 + '@types/node': 22.18.10 '@types/connect@3.4.38': dependencies: @@ -19272,7 +19271,7 @@ snapshots: '@types/fs-extra@9.0.13': dependencies: - '@types/node': 24.8.1 + '@types/node': 22.18.10 optional: true '@types/geojson-vt@3.2.5': @@ -19284,7 +19283,7 @@ snapshots: '@types/glob@7.2.0': dependencies: '@types/minimatch': 5.1.2 - '@types/node': 24.8.1 + '@types/node': 22.18.10 '@types/hast@3.0.4': dependencies: @@ -19298,7 +19297,7 @@ snapshots: '@types/http-proxy@1.17.16': dependencies: - '@types/node': 24.8.1 + '@types/node': 22.18.10 '@types/ini@4.1.1': {} @@ -19316,7 +19315,7 @@ snapshots: '@types/keyv@3.1.4': dependencies: - '@types/node': 24.8.1 + '@types/node': 22.18.10 '@types/leaflet-gpx@1.3.8': dependencies: @@ -19366,11 +19365,11 @@ snapshots: '@types/mute-stream@0.0.4': dependencies: - '@types/node': 22.18.11 + '@types/node': 22.18.10 '@types/node-forge@1.3.14': dependencies: - '@types/node': 24.8.1 + '@types/node': 22.18.10 '@types/node@16.9.1': {} @@ -19394,10 +19393,6 @@ snapshots: dependencies: undici-types: 6.21.0 - '@types/node@22.18.11': - dependencies: - undici-types: 6.21.0 - '@types/node@22.18.8': dependencies: undici-types: 6.21.0 @@ -19405,6 +19400,7 @@ snapshots: '@types/node@24.8.1': dependencies: undici-types: 7.14.0 + optional: true '@types/parse-json@4.0.2': {} @@ -19436,7 +19432,7 @@ snapshots: '@types/responselike@1.0.3': dependencies: - '@types/node': 24.8.1 + '@types/node': 22.18.10 '@types/retry@0.12.2': {} @@ -19482,7 +19478,7 @@ snapshots: '@types/sockjs@0.3.36': dependencies: - '@types/node': 24.8.1 + '@types/node': 22.18.10 '@types/statuses@2.0.6': optional: true @@ -19518,7 +19514,7 @@ snapshots: '@types/through2@2.0.41': dependencies: - '@types/node': 24.8.1 + '@types/node': 22.18.10 '@types/tmp@0.2.6': {} @@ -19791,7 +19787,7 @@ snapshots: magic-string: 0.30.18 sirv: 3.0.1 tinyrainbow: 2.0.0 - vitest: 3.2.4(@types/debug@4.1.12)(@types/node@22.18.10)(@vitest/browser@3.2.4)(@vitest/ui@3.2.4)(happy-dom@20.0.4)(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.1)(msw@2.7.5(@types/node@22.18.10)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) + vitest: 3.2.4(@types/debug@4.1.12)(@types/node@22.18.10)(@vitest/browser@3.2.4)(@vitest/ui@3.2.4)(happy-dom@20.0.7)(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.1)(msw@2.7.5(@types/node@22.18.10)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) ws: 8.18.3(bufferutil@4.0.9)(utf-8-validate@6.0.5) optionalDependencies: playwright: 1.56.0 @@ -19814,7 +19810,7 @@ snapshots: magicast: 0.3.5 test-exclude: 7.0.1 tinyrainbow: 2.0.0 - vitest: 3.2.4(@types/debug@4.1.12)(@types/node@22.18.10)(@vitest/browser@3.2.4)(@vitest/ui@3.2.4)(happy-dom@20.0.4)(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.1)(msw@2.7.5(@types/node@22.18.10)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) + vitest: 3.2.4(@types/debug@4.1.12)(@types/node@22.18.10)(@vitest/browser@3.2.4)(@vitest/ui@3.2.4)(happy-dom@20.0.7)(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.1)(msw@2.7.5(@types/node@22.18.10)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) transitivePeerDependencies: - supports-color @@ -19833,7 +19829,7 @@ snapshots: std-env: 3.9.0 test-exclude: 7.0.1 tinyrainbow: 2.0.0 - vitest: 3.2.4(@types/debug@4.1.12)(@types/node@22.18.10)(@vitest/browser@3.2.4)(@vitest/ui@3.2.4)(happy-dom@20.0.4)(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.1)(msw@2.7.5(@types/node@22.18.10)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) + vitest: 3.2.4(@types/debug@4.1.12)(@types/node@22.18.10)(@vitest/browser@3.2.4)(@vitest/ui@3.2.4)(happy-dom@20.0.7)(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.1)(msw@2.7.5(@types/node@22.18.10)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) optionalDependencies: '@vitest/browser': 3.2.4(bufferutil@4.0.9)(msw@2.7.5(@types/node@22.18.10)(typescript@5.9.3))(playwright@1.56.0)(utf-8-validate@6.0.5)(vite@7.1.10(@types/node@22.18.10)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))(vitest@3.2.4)(webdriverio@9.20.0(bufferutil@4.0.9)(utf-8-validate@6.0.5)) transitivePeerDependencies: @@ -19885,7 +19881,7 @@ snapshots: sirv: 3.0.1 tinyglobby: 0.2.15 tinyrainbow: 2.0.0 - vitest: 3.2.4(@types/debug@4.1.12)(@types/node@22.18.10)(@vitest/browser@3.2.4)(@vitest/ui@3.2.4)(happy-dom@20.0.4)(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.1)(msw@2.7.5(@types/node@22.18.10)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) + vitest: 3.2.4(@types/debug@4.1.12)(@types/node@22.18.10)(@vitest/browser@3.2.4)(@vitest/ui@3.2.4)(happy-dom@20.0.7)(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.1)(msw@2.7.5(@types/node@22.18.10)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) '@vitest/utils@3.2.4': dependencies: @@ -19965,11 +19961,11 @@ snapshots: '@wdio/repl@9.16.2': dependencies: - '@types/node': 20.19.18 + '@types/node': 20.19.22 '@wdio/types@9.20.0': dependencies: - '@types/node': 20.19.18 + '@types/node': 20.19.22 '@wdio/utils@9.20.0': dependencies: @@ -23706,7 +23702,7 @@ snapshots: handle-thing@2.0.1: {} - happy-dom@20.0.4: + happy-dom@20.0.7: dependencies: '@types/node': 20.19.22 '@types/whatwg-mimetype': 3.0.2 @@ -24486,13 +24482,13 @@ snapshots: jest-worker@26.6.2: dependencies: - '@types/node': 24.8.1 + '@types/node': 22.18.10 merge-stream: 2.0.0 supports-color: 7.2.0 jest-worker@27.5.1: dependencies: - '@types/node': 24.8.1 + '@types/node': 22.18.10 merge-stream: 2.0.0 supports-color: 8.1.1 @@ -27383,7 +27379,7 @@ snapshots: '@protobufjs/path': 1.1.2 '@protobufjs/pool': 1.1.0 '@protobufjs/utf8': 1.1.0 - '@types/node': 24.8.1 + '@types/node': 22.18.10 long: 5.3.2 protocol-buffers-schema@3.6.0: {} @@ -29587,7 +29583,8 @@ snapshots: undici-types@6.21.0: {} - undici-types@7.14.0: {} + undici-types@7.14.0: + optional: true undici@6.21.3: {} @@ -29895,7 +29892,7 @@ snapshots: tsx: 4.20.6 yaml: 2.8.1 - vitest@3.2.4(@types/debug@4.1.12)(@types/node@22.18.10)(@vitest/browser@3.2.4)(@vitest/ui@3.2.4)(happy-dom@20.0.4)(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.1)(msw@2.7.5(@types/node@22.18.10)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1): + vitest@3.2.4(@types/debug@4.1.12)(@types/node@22.18.10)(@vitest/browser@3.2.4)(@vitest/ui@3.2.4)(happy-dom@20.0.7)(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.1)(msw@2.7.5(@types/node@22.18.10)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1): dependencies: '@types/chai': 5.2.2 '@vitest/expect': 3.2.4 @@ -29925,7 +29922,7 @@ snapshots: '@types/node': 22.18.10 '@vitest/browser': 3.2.4(bufferutil@4.0.9)(msw@2.7.5(@types/node@22.18.10)(typescript@5.9.3))(playwright@1.56.0)(utf-8-validate@6.0.5)(vite@7.1.10(@types/node@22.18.10)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))(vitest@3.2.4)(webdriverio@9.20.0(bufferutil@4.0.9)(utf-8-validate@6.0.5)) '@vitest/ui': 3.2.4(vitest@3.2.4) - happy-dom: 20.0.4 + happy-dom: 20.0.7 jsdom: 26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5) transitivePeerDependencies: - jiti @@ -30014,7 +30011,7 @@ snapshots: webdriver@9.20.0(bufferutil@4.0.9)(utf-8-validate@6.0.5): dependencies: - '@types/node': 20.19.18 + '@types/node': 20.19.22 '@types/ws': 8.18.1 '@wdio/config': 9.20.0 '@wdio/logger': 9.18.0 From d87fa7a7ed79a62f4edc55106ee7e5894b93e446 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 20 Oct 2025 00:53:04 +0000 Subject: [PATCH 025/103] fix(deps): update dependency marked to v16.4.1 --- apps/client/package.json | 2 +- apps/server/package.json | 2 +- pnpm-lock.yaml | 18 ++++++++---------- 3 files changed, 10 insertions(+), 12 deletions(-) diff --git a/apps/client/package.json b/apps/client/package.json index dceb6e8b8..9e5489155 100644 --- a/apps/client/package.json +++ b/apps/client/package.json @@ -52,7 +52,7 @@ "leaflet": "1.9.4", "leaflet-gpx": "2.2.0", "mark.js": "8.11.1", - "marked": "16.4.0", + "marked": "16.4.1", "mermaid": "11.12.0", "mind-elixir": "5.3.2", "normalize.css": "8.0.1", diff --git a/apps/server/package.json b/apps/server/package.json index aff4901b2..691a53698 100644 --- a/apps/server/package.json +++ b/apps/server/package.json @@ -105,7 +105,7 @@ "is-svg": "6.1.0", "jimp": "1.6.0", "js-yaml": "4.1.0", - "marked": "16.4.0", + "marked": "16.4.1", "mime-types": "3.0.1", "multer": "2.0.2", "normalize-strings": "1.1.1", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 77e4d877e..f60c3543b 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -236,8 +236,8 @@ importers: specifier: 8.11.1 version: 8.11.1 marked: - specifier: 16.4.0 - version: 16.4.0 + specifier: 16.4.1 + version: 16.4.1 mermaid: specifier: 11.12.0 version: 11.12.0 @@ -688,8 +688,8 @@ importers: specifier: 4.1.0 version: 4.1.0 marked: - specifier: 16.4.0 - version: 16.4.0 + specifier: 16.4.1 + version: 16.4.1 mime-types: specifier: 3.0.1 version: 3.0.1 @@ -9539,8 +9539,8 @@ packages: markdown-table@3.0.4: resolution: {integrity: sha512-wiYz4+JrLyb/DqW2hkFJxP7Vd7JuTDm77fvbM8VfEQdmSMqcImWeeRbHwZjBjIFki/VaMK2BhFi7oUUZeM5bqw==} - marked@16.4.0: - resolution: {integrity: sha512-CTPAcRBq57cn3R8n3hwc2REddc28hjR7RzDXQ+lXLmMJYqn20BaI2cGw6QjgZGIgVfp2Wdfw4aMzgNteQ6qJgQ==} + marked@16.4.1: + resolution: {integrity: sha512-ntROs7RaN3EvWfy3EZi14H4YxmT6A5YvywfhO+0pm+cH/dnSQRmdAmoFIc3B9aiwTehyk7pESH4ofyBY+V5hZg==} engines: {node: '>= 20'} hasBin: true @@ -15678,8 +15678,6 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.1.0 '@ckeditor/ckeditor5-utils': 47.1.0 ckeditor5: 47.1.0(patch_hash=8331a09d41443b39ea1c784daaccfeb0da4f9065ed556e7de92e9c77edd9eb41) - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-special-characters@47.1.0': dependencies: @@ -25159,7 +25157,7 @@ snapshots: markdown-table@3.0.4: {} - marked@16.4.0: {} + marked@16.4.1: {} matcher@3.0.0: dependencies: @@ -25354,7 +25352,7 @@ snapshots: katex: 0.16.25 khroma: 2.1.0 lodash-es: 4.17.21 - marked: 16.4.0 + marked: 16.4.1 roughjs: 4.6.6 stylis: 4.3.6 ts-dedent: 2.2.0 From f31be66730500ee40b519f82c0cd41fc192ce978 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 20 Oct 2025 00:53:46 +0000 Subject: [PATCH 026/103] fix(deps): update dependency mind-elixir to v5.3.3 --- apps/client/package.json | 2 +- pnpm-lock.yaml | 18 ++++++++---------- 2 files changed, 9 insertions(+), 11 deletions(-) diff --git a/apps/client/package.json b/apps/client/package.json index dceb6e8b8..589c50e33 100644 --- a/apps/client/package.json +++ b/apps/client/package.json @@ -54,7 +54,7 @@ "mark.js": "8.11.1", "marked": "16.4.0", "mermaid": "11.12.0", - "mind-elixir": "5.3.2", + "mind-elixir": "5.3.3", "normalize.css": "8.0.1", "panzoom": "9.4.3", "preact": "10.27.2", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 77e4d877e..9454bd5f9 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -156,7 +156,7 @@ importers: version: 0.2.0(mermaid@11.12.0) '@mind-elixir/node-menu': specifier: 5.0.0 - version: 5.0.0(mind-elixir@5.3.2) + version: 5.0.0(mind-elixir@5.3.3) '@popperjs/core': specifier: 2.11.8 version: 2.11.8 @@ -242,8 +242,8 @@ importers: specifier: 11.12.0 version: 11.12.0 mind-elixir: - specifier: 5.3.2 - version: 5.3.2 + specifier: 5.3.3 + version: 5.3.3 normalize.css: specifier: 8.0.1 version: 8.0.1 @@ -9788,8 +9788,8 @@ packages: resolution: {integrity: sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==} engines: {node: '>=10'} - mind-elixir@5.3.2: - resolution: {integrity: sha512-dAhsRELKAmrs0UFTrCFeItrCEi0vtslr1kKkeBfu5FSDkuuu4U9imBcHdkeYnC0rUVfXe5Henirmz7yTkcdVVg==} + mind-elixir@5.3.3: + resolution: {integrity: sha512-SR0DRZh7I4fV3c8IeL9cYgJiJeW+TgKOrHQTntqu14nhrxyZjVsDfeLUY/52PB8r1WsORsN0IKx0qGhneXmtJQ==} mini-css-extract-plugin@2.4.7: resolution: {integrity: sha512-euWmddf0sk9Nv1O0gfeeUAvAkoSlWncNLF77C0TP2+WoPvy8mAHKOzMajcCz2dzvyt3CNgxb1obIEVFIRxaipg==} @@ -15678,8 +15678,6 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.1.0 '@ckeditor/ckeditor5-utils': 47.1.0 ckeditor5: 47.1.0(patch_hash=8331a09d41443b39ea1c784daaccfeb0da4f9065ed556e7de92e9c77edd9eb41) - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-special-characters@47.1.0': dependencies: @@ -17625,9 +17623,9 @@ snapshots: '@microsoft/tsdoc@0.15.1': {} - '@mind-elixir/node-menu@5.0.0(mind-elixir@5.3.2)': + '@mind-elixir/node-menu@5.0.0(mind-elixir@5.3.3)': dependencies: - mind-elixir: 5.3.2 + mind-elixir: 5.3.3 '@mixmark-io/domino@2.2.0': {} @@ -25593,7 +25591,7 @@ snapshots: mimic-response@3.1.0: {} - mind-elixir@5.3.2: {} + mind-elixir@5.3.3: {} mini-css-extract-plugin@2.4.7(webpack@5.101.3(@swc/core@1.11.29(@swc/helpers@0.5.17))(esbuild@0.25.11)): dependencies: From 6e692afa1c6b2e573b11702985258083d4d19e0b Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 20 Oct 2025 00:53:51 +0000 Subject: [PATCH 027/103] chore(deps): update dependency @stylistic/eslint-plugin to v5.5.0 --- _regroup/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/_regroup/package.json b/_regroup/package.json index db2a72d9c..751fc9e4a 100644 --- a/_regroup/package.json +++ b/_regroup/package.json @@ -36,7 +36,7 @@ }, "devDependencies": { "@playwright/test": "1.56.0", - "@stylistic/eslint-plugin": "5.4.0", + "@stylistic/eslint-plugin": "5.5.0", "@types/express": "5.0.3", "@types/node": "22.18.10", "@types/yargs": "17.0.33", From bfcd11988b70cb5346c809ce9f38ef3ae84af464 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 20 Oct 2025 00:54:39 +0000 Subject: [PATCH 028/103] chore(deps): update dependency openai to v6.5.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 aff4901b2..2ac0e0bb8 100644 --- a/apps/server/package.json +++ b/apps/server/package.json @@ -110,7 +110,7 @@ "multer": "2.0.2", "normalize-strings": "1.1.1", "ollama": "0.6.0", - "openai": "6.4.0", + "openai": "6.5.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 77e4d877e..531e62ca1 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -703,8 +703,8 @@ importers: specifier: 0.6.0 version: 0.6.0 openai: - specifier: 6.4.0 - version: 6.4.0(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@6.0.5))(zod@3.24.4) + specifier: 6.5.0 + version: 6.5.0(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@6.0.5))(zod@3.24.4) rand-token: specifier: 1.0.1 version: 1.0.1 @@ -10273,8 +10273,8 @@ packages: resolution: {integrity: sha512-YgBpdJHPyQ2UE5x+hlSXcnejzAvD0b22U2OuAP+8OnlJT+PjWPxtgmGqKKc+RgTM63U9gN0YzrYc71R2WT/hTA==} engines: {node: '>=18'} - openai@6.4.0: - resolution: {integrity: sha512-vSoVBRTPMgg3oSaoHIGfbYM2zwGN0D4F2aiNHMeu1lZHFOwfJMAF0X110HDdedYvcsIo578ujQ11WL5kP687Cw==} + openai@6.5.0: + resolution: {integrity: sha512-bNqJ15Ijbs41KuJ2iYz/mGAruFHzQQt7zXo4EvjNLoB64aJdgn1jlMeDTsXjEg+idVYafg57QB/5Rd16oqvZ6A==} hasBin: true peerDependencies: ws: ^8.18.0 @@ -15678,8 +15678,6 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.1.0 '@ckeditor/ckeditor5-utils': 47.1.0 ckeditor5: 47.1.0(patch_hash=8331a09d41443b39ea1c784daaccfeb0da4f9065ed556e7de92e9c77edd9eb41) - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-special-characters@47.1.0': dependencies: @@ -26180,7 +26178,7 @@ snapshots: is-inside-container: 1.0.0 wsl-utils: 0.1.0 - openai@6.4.0(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@6.0.5))(zod@3.24.4): + openai@6.5.0(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@6.0.5))(zod@3.24.4): optionalDependencies: ws: 8.18.3(bufferutil@4.0.9)(utf-8-validate@6.0.5) zod: 3.24.4 From 6d4a213800c05be2ca6450384d98f3c1cce36c3d Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 20 Oct 2025 00:55:23 +0000 Subject: [PATCH 029/103] fix(deps): update dependency eslint-linter-browserify to v9.38.0 --- packages/codemirror/package.json | 2 +- pnpm-lock.yaml | 12 +++++------- 2 files changed, 6 insertions(+), 8 deletions(-) diff --git a/packages/codemirror/package.json b/packages/codemirror/package.json index 24c5dde37..1a900b35f 100644 --- a/packages/codemirror/package.json +++ b/packages/codemirror/package.json @@ -50,6 +50,6 @@ "codemirror-lang-elixir": "4.0.0", "codemirror-lang-hcl": "0.1.0", "codemirror-lang-mermaid": "0.5.0", - "eslint-linter-browserify": "9.37.0" + "eslint-linter-browserify": "9.38.0" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 77e4d877e..6d510f813 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1295,8 +1295,8 @@ importers: specifier: 0.5.0 version: 0.5.0 eslint-linter-browserify: - specifier: 9.37.0 - version: 9.37.0 + specifier: 9.38.0 + version: 9.38.0 packages/commons: {} @@ -7536,8 +7536,8 @@ packages: peerDependencies: eslint: '>=7.0.0' - eslint-linter-browserify@9.37.0: - resolution: {integrity: sha512-Wko9253V/vjQJt/R3tdUi5nsZZRS+G6Uyrlu/OCEdHitWI427jMo6jMFBmxuxHofbjd5gPx3WbrBEF1Qxfr9rw==} + eslint-linter-browserify@9.38.0: + resolution: {integrity: sha512-uOR+eJFM+WQyyZAGeazz8D3XiS0a26bIK/uHSFZWQ7H8UK7hrUpHzMfcGZSzY1icM86LYCPhV3jYkVePWLjQGA==} eslint-plugin-ckeditor5-rules@12.1.1: resolution: {integrity: sha512-e0PhbA3sNWy4Djs6r+kVfWNvu6urJXucIUfqI2GKjgOfqYOhmpLNaudH6FHKAg/OM8g0ETb7TbG3Bc375ru+sg==} @@ -15678,8 +15678,6 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.1.0 '@ckeditor/ckeditor5-utils': 47.1.0 ckeditor5: 47.1.0(patch_hash=8331a09d41443b39ea1c784daaccfeb0da4f9065ed556e7de92e9c77edd9eb41) - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-special-characters@47.1.0': dependencies: @@ -22724,7 +22722,7 @@ snapshots: dependencies: eslint: 9.37.0(jiti@2.6.1) - eslint-linter-browserify@9.37.0: {} + eslint-linter-browserify@9.38.0: {} eslint-plugin-ckeditor5-rules@12.1.1: dependencies: From 9b998a5b0063582d8e43b41cf51d4a24932a5fa4 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 20 Oct 2025 00:56:09 +0000 Subject: [PATCH 030/103] fix(deps): update dependency react-i18next to v16.1.0 --- apps/client/package.json | 2 +- apps/website/package.json | 2 +- pnpm-lock.yaml | 16 +++++++--------- 3 files changed, 9 insertions(+), 11 deletions(-) diff --git a/apps/client/package.json b/apps/client/package.json index dceb6e8b8..93fc5b6ee 100644 --- a/apps/client/package.json +++ b/apps/client/package.json @@ -58,7 +58,7 @@ "normalize.css": "8.0.1", "panzoom": "9.4.3", "preact": "10.27.2", - "react-i18next": "16.0.1", + "react-i18next": "16.1.0", "reveal.js": "5.2.1", "split.js": "1.6.5", "svg-pan-zoom": "3.6.2", diff --git a/apps/website/package.json b/apps/website/package.json index cd1bc1d2a..aaa6ee9e7 100644 --- a/apps/website/package.json +++ b/apps/website/package.json @@ -13,7 +13,7 @@ "preact": "10.27.2", "preact-iso": "2.11.0", "preact-render-to-string": "6.6.2", - "react-i18next": "16.0.1" + "react-i18next": "16.1.0" }, "devDependencies": { "@preact/preset-vite": "2.10.2", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 77e4d877e..f411083b7 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -254,8 +254,8 @@ importers: specifier: 10.27.2 version: 10.27.2 react-i18next: - specifier: 16.0.1 - version: 16.0.1(i18next@25.6.0(typescript@5.9.3))(react-dom@19.1.0(react@16.14.0))(react@16.14.0)(typescript@5.9.3) + specifier: 16.1.0 + version: 16.1.0(i18next@25.6.0(typescript@5.9.3))(react-dom@19.1.0(react@16.14.0))(react@16.14.0)(typescript@5.9.3) reveal.js: specifier: 5.2.1 version: 5.2.1 @@ -790,8 +790,8 @@ importers: specifier: 6.6.2 version: 6.6.2(preact@10.27.2) react-i18next: - specifier: 16.0.1 - version: 16.0.1(i18next@25.6.0(typescript@5.9.3))(react-dom@19.1.0(react@16.14.0))(react@16.14.0)(typescript@5.9.3) + specifier: 16.1.0 + version: 16.1.0(i18next@25.6.0(typescript@5.9.3))(react-dom@19.1.0(react@16.14.0))(react@16.14.0)(typescript@5.9.3) devDependencies: '@preact/preset-vite': specifier: 2.10.2 @@ -11623,8 +11623,8 @@ packages: peerDependencies: react: ^19.1.0 - react-i18next@16.0.1: - resolution: {integrity: sha512-0S//bpYEkCPjzuVmxDf9Z6+Y+ArNvpAUk7eDL4qNCZXjDh6Z9j6MZ+NThU7kMCOsmYmDCun3GYEwkiOjjZo9Ug==} + react-i18next@16.1.0: + resolution: {integrity: sha512-10qpoODc0ntrWpZdko9CQnl2Xf4VJXUAS9sa7WOkTrQzbbfyoSSUZ3Rsnpgt8la6qCxeB61yzYjyW8U1g3hUUg==} peerDependencies: i18next: '>= 25.5.2' react: '>= 16.8.0' @@ -15678,8 +15678,6 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.1.0 '@ckeditor/ckeditor5-utils': 47.1.0 ckeditor5: 47.1.0(patch_hash=8331a09d41443b39ea1c784daaccfeb0da4f9065ed556e7de92e9c77edd9eb41) - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-special-characters@47.1.0': dependencies: @@ -27520,7 +27518,7 @@ snapshots: react: 16.14.0 scheduler: 0.26.0 - react-i18next@16.0.1(i18next@25.6.0(typescript@5.9.3))(react-dom@19.1.0(react@16.14.0))(react@16.14.0)(typescript@5.9.3): + react-i18next@16.1.0(i18next@25.6.0(typescript@5.9.3))(react-dom@19.1.0(react@16.14.0))(react@16.14.0)(typescript@5.9.3): dependencies: '@babel/runtime': 7.28.4 html-parse-stringify: 3.0.1 From b6284b183006459f686a36aa875f845bf5b8660a Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 20 Oct 2025 00:57:01 +0000 Subject: [PATCH 031/103] fix(deps): update eslint monorepo to v9.38.0 --- _regroup/package.json | 2 +- apps/client/package.json | 2 +- apps/website/package.json | 2 +- package.json | 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 +- packages/share-theme/package.json | 2 +- pnpm-lock.yaml | 267 +++++++++--------- 11 files changed, 143 insertions(+), 144 deletions(-) diff --git a/_regroup/package.json b/_regroup/package.json index db2a72d9c..7118b97f4 100644 --- a/_regroup/package.json +++ b/_regroup/package.json @@ -41,7 +41,7 @@ "@types/node": "22.18.10", "@types/yargs": "17.0.33", "@vitest/coverage-v8": "3.2.4", - "eslint": "9.37.0", + "eslint": "9.38.0", "eslint-plugin-simple-import-sort": "12.1.1", "esm": "3.2.25", "jsdoc": "4.0.5", diff --git a/apps/client/package.json b/apps/client/package.json index dceb6e8b8..30f9ea127 100644 --- a/apps/client/package.json +++ b/apps/client/package.json @@ -15,7 +15,7 @@ "circular-deps": "dpdm -T src/**/*.ts --tree=false --warning=false --skip-dynamic-imports=circular" }, "dependencies": { - "@eslint/js": "9.37.0", + "@eslint/js": "9.38.0", "@excalidraw/excalidraw": "0.18.0", "@fullcalendar/core": "6.1.19", "@fullcalendar/daygrid": "6.1.19", diff --git a/apps/website/package.json b/apps/website/package.json index cd1bc1d2a..3123a2ef3 100644 --- a/apps/website/package.json +++ b/apps/website/package.json @@ -17,7 +17,7 @@ }, "devDependencies": { "@preact/preset-vite": "2.10.2", - "eslint": "9.37.0", + "eslint": "9.38.0", "eslint-config-preact": "2.0.0", "typescript": "5.9.3", "user-agent-data-types": "0.4.2", diff --git a/package.json b/package.json index e2475145d..285498026 100644 --- a/package.json +++ b/package.json @@ -47,7 +47,7 @@ "cross-env": "10.1.0", "dpdm": "3.14.0", "esbuild": "0.25.11", - "eslint": "9.37.0", + "eslint": "9.38.0", "eslint-config-prettier": "10.1.8", "eslint-plugin-playwright": "2.2.2", "eslint-plugin-react-hooks": "7.0.0", diff --git a/packages/ckeditor5-admonition/package.json b/packages/ckeditor5-admonition/package.json index f7b8bc647..465760409 100644 --- a/packages/ckeditor5-admonition/package.json +++ b/packages/ckeditor5-admonition/package.json @@ -29,7 +29,7 @@ "@vitest/browser": "3.2.4", "@vitest/coverage-istanbul": "3.2.4", "ckeditor5": "47.1.0", - "eslint": "9.37.0", + "eslint": "9.38.0", "eslint-config-ckeditor5": ">=9.1.0", "http-server": "14.1.1", "lint-staged": "16.2.4", diff --git a/packages/ckeditor5-footnotes/package.json b/packages/ckeditor5-footnotes/package.json index 4c9b6a1c8..df364cbd4 100644 --- a/packages/ckeditor5-footnotes/package.json +++ b/packages/ckeditor5-footnotes/package.json @@ -30,7 +30,7 @@ "@vitest/browser": "3.2.4", "@vitest/coverage-istanbul": "3.2.4", "ckeditor5": "47.1.0", - "eslint": "9.37.0", + "eslint": "9.38.0", "eslint-config-ckeditor5": ">=9.1.0", "http-server": "14.1.1", "lint-staged": "16.2.4", diff --git a/packages/ckeditor5-keyboard-marker/package.json b/packages/ckeditor5-keyboard-marker/package.json index 7494432c8..f9c103617 100644 --- a/packages/ckeditor5-keyboard-marker/package.json +++ b/packages/ckeditor5-keyboard-marker/package.json @@ -32,7 +32,7 @@ "@vitest/browser": "3.2.4", "@vitest/coverage-istanbul": "3.2.4", "ckeditor5": "47.1.0", - "eslint": "9.37.0", + "eslint": "9.38.0", "eslint-config-ckeditor5": ">=9.1.0", "http-server": "14.1.1", "lint-staged": "16.2.4", diff --git a/packages/ckeditor5-math/package.json b/packages/ckeditor5-math/package.json index 0c8d1173e..ee6b38169 100644 --- a/packages/ckeditor5-math/package.json +++ b/packages/ckeditor5-math/package.json @@ -33,7 +33,7 @@ "@vitest/browser": "3.2.4", "@vitest/coverage-istanbul": "3.2.4", "ckeditor5": "47.1.0", - "eslint": "9.37.0", + "eslint": "9.38.0", "eslint-config-ckeditor5": ">=9.1.0", "http-server": "14.1.1", "lint-staged": "16.2.4", diff --git a/packages/ckeditor5-mermaid/package.json b/packages/ckeditor5-mermaid/package.json index 31ee93881..378173e8c 100644 --- a/packages/ckeditor5-mermaid/package.json +++ b/packages/ckeditor5-mermaid/package.json @@ -32,7 +32,7 @@ "@vitest/browser": "3.2.4", "@vitest/coverage-istanbul": "3.2.4", "ckeditor5": "47.1.0", - "eslint": "9.37.0", + "eslint": "9.38.0", "eslint-config-ckeditor5": ">=9.1.0", "http-server": "14.1.1", "lint-staged": "16.2.4", diff --git a/packages/share-theme/package.json b/packages/share-theme/package.json index 317a89a20..ccc06e6c6 100644 --- a/packages/share-theme/package.json +++ b/packages/share-theme/package.json @@ -28,7 +28,7 @@ "@typescript-eslint/parser": "8.46.1", "dotenv": "17.2.3", "esbuild": "0.25.11", - "eslint": "9.37.0", + "eslint": "9.38.0", "highlight.js": "11.11.1", "typescript": "5.9.3" } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 77e4d877e..672d74d52 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -71,17 +71,17 @@ importers: specifier: 0.25.11 version: 0.25.11 eslint: - specifier: 9.37.0 - version: 9.37.0(jiti@2.6.1) + specifier: 9.38.0 + version: 9.38.0(jiti@2.6.1) eslint-config-prettier: specifier: 10.1.8 - version: 10.1.8(eslint@9.37.0(jiti@2.6.1)) + version: 10.1.8(eslint@9.38.0(jiti@2.6.1)) eslint-plugin-playwright: specifier: 2.2.2 - version: 2.2.2(eslint@9.37.0(jiti@2.6.1)) + version: 2.2.2(eslint@9.38.0(jiti@2.6.1)) eslint-plugin-react-hooks: specifier: 7.0.0 - version: 7.0.0(eslint@9.37.0(jiti@2.6.1)) + version: 7.0.0(eslint@9.38.0(jiti@2.6.1)) happy-dom: specifier: ~20.0.0 version: 20.0.4 @@ -108,7 +108,7 @@ importers: version: 5.9.3 typescript-eslint: specifier: 8.46.1 - version: 8.46.1(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3) + version: 8.46.1(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) upath: specifier: 2.0.1 version: 2.0.1 @@ -125,8 +125,8 @@ importers: apps/client: dependencies: '@eslint/js': - specifier: 9.37.0 - version: 9.37.0 + specifier: 9.38.0 + version: 9.38.0 '@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.1.0(react@16.14.0))(react@16.14.0) @@ -797,11 +797,11 @@ importers: specifier: 2.10.2 version: 2.10.2(@babel/core@7.28.0)(preact@10.27.2)(vite@7.1.10(@types/node@24.8.1)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) eslint: - specifier: 9.37.0 - version: 9.37.0(jiti@2.6.1) + specifier: 9.38.0 + version: 9.38.0(jiti@2.6.1) eslint-config-preact: specifier: 2.0.0 - version: 2.0.0(eslint@9.37.0(jiti@2.6.1)) + version: 2.0.0(eslint@9.38.0(jiti@2.6.1)) typescript: specifier: 5.9.3 version: 5.9.3 @@ -856,10 +856,10 @@ importers: version: 4.1.1(@swc/core@1.11.29(@swc/helpers@0.5.17))(@types/node@22.18.10)(bufferutil@4.0.9)(esbuild@0.25.11)(utf-8-validate@6.0.5) '@typescript-eslint/eslint-plugin': specifier: ~8.46.0 - version: 8.46.1(@typescript-eslint/parser@8.46.1(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3) + version: 8.46.1(@typescript-eslint/parser@8.46.1(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) '@typescript-eslint/parser': specifier: 8.46.1 - version: 8.46.1(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3) + version: 8.46.1(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) '@vitest/browser': specifier: 3.2.4 version: 3.2.4(bufferutil@4.0.9)(msw@2.7.5(@types/node@22.18.10)(typescript@5.9.3))(playwright@1.56.0)(utf-8-validate@6.0.5)(vite@7.1.10(@types/node@22.18.10)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))(vitest@3.2.4)(webdriverio@9.20.0(bufferutil@4.0.9)(utf-8-validate@6.0.5)) @@ -870,11 +870,11 @@ importers: specifier: 47.1.0 version: 47.1.0(patch_hash=8331a09d41443b39ea1c784daaccfeb0da4f9065ed556e7de92e9c77edd9eb41) eslint: - specifier: 9.37.0 - version: 9.37.0(jiti@2.6.1) + specifier: 9.38.0 + version: 9.38.0(jiti@2.6.1) eslint-config-ckeditor5: specifier: '>=9.1.0' - version: 12.1.1(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3) + version: 12.1.1(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) http-server: specifier: 14.1.1 version: 14.1.1 @@ -916,10 +916,10 @@ importers: version: 4.1.1(@swc/core@1.11.29(@swc/helpers@0.5.17))(@types/node@22.18.10)(bufferutil@4.0.9)(esbuild@0.25.11)(utf-8-validate@6.0.5) '@typescript-eslint/eslint-plugin': specifier: ~8.46.0 - version: 8.46.1(@typescript-eslint/parser@8.46.1(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3) + version: 8.46.1(@typescript-eslint/parser@8.46.1(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) '@typescript-eslint/parser': specifier: 8.46.1 - version: 8.46.1(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3) + version: 8.46.1(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) '@vitest/browser': specifier: 3.2.4 version: 3.2.4(bufferutil@4.0.9)(msw@2.7.5(@types/node@22.18.10)(typescript@5.9.3))(playwright@1.56.0)(utf-8-validate@6.0.5)(vite@7.1.10(@types/node@22.18.10)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))(vitest@3.2.4)(webdriverio@9.20.0(bufferutil@4.0.9)(utf-8-validate@6.0.5)) @@ -930,11 +930,11 @@ importers: specifier: 47.1.0 version: 47.1.0(patch_hash=8331a09d41443b39ea1c784daaccfeb0da4f9065ed556e7de92e9c77edd9eb41) eslint: - specifier: 9.37.0 - version: 9.37.0(jiti@2.6.1) + specifier: 9.38.0 + version: 9.38.0(jiti@2.6.1) eslint-config-ckeditor5: specifier: '>=9.1.0' - version: 12.1.1(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3) + version: 12.1.1(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) http-server: specifier: 14.1.1 version: 14.1.1 @@ -976,10 +976,10 @@ importers: version: 4.1.1(@swc/core@1.11.29(@swc/helpers@0.5.17))(@types/node@22.18.10)(bufferutil@4.0.9)(esbuild@0.25.11)(utf-8-validate@6.0.5) '@typescript-eslint/eslint-plugin': specifier: ~8.46.0 - version: 8.46.1(@typescript-eslint/parser@8.46.1(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3) + version: 8.46.1(@typescript-eslint/parser@8.46.1(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) '@typescript-eslint/parser': specifier: 8.46.1 - version: 8.46.1(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3) + version: 8.46.1(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) '@vitest/browser': specifier: 3.2.4 version: 3.2.4(bufferutil@4.0.9)(msw@2.7.5(@types/node@22.18.10)(typescript@5.9.3))(playwright@1.56.0)(utf-8-validate@6.0.5)(vite@7.1.10(@types/node@22.18.10)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))(vitest@3.2.4)(webdriverio@9.20.0(bufferutil@4.0.9)(utf-8-validate@6.0.5)) @@ -990,11 +990,11 @@ importers: specifier: 47.1.0 version: 47.1.0(patch_hash=8331a09d41443b39ea1c784daaccfeb0da4f9065ed556e7de92e9c77edd9eb41) eslint: - specifier: 9.37.0 - version: 9.37.0(jiti@2.6.1) + specifier: 9.38.0 + version: 9.38.0(jiti@2.6.1) eslint-config-ckeditor5: specifier: '>=9.1.0' - version: 12.1.1(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3) + version: 12.1.1(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) http-server: specifier: 14.1.1 version: 14.1.1 @@ -1043,10 +1043,10 @@ importers: version: 4.1.1(@swc/core@1.11.29(@swc/helpers@0.5.17))(@types/node@22.18.10)(bufferutil@4.0.9)(esbuild@0.25.11)(utf-8-validate@6.0.5) '@typescript-eslint/eslint-plugin': specifier: ~8.46.0 - version: 8.46.1(@typescript-eslint/parser@8.46.1(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3) + version: 8.46.1(@typescript-eslint/parser@8.46.1(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) '@typescript-eslint/parser': specifier: 8.46.1 - version: 8.46.1(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3) + version: 8.46.1(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) '@vitest/browser': specifier: 3.2.4 version: 3.2.4(bufferutil@4.0.9)(msw@2.7.5(@types/node@22.18.10)(typescript@5.9.3))(playwright@1.56.0)(utf-8-validate@6.0.5)(vite@7.1.10(@types/node@22.18.10)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))(vitest@3.2.4)(webdriverio@9.20.0(bufferutil@4.0.9)(utf-8-validate@6.0.5)) @@ -1057,11 +1057,11 @@ importers: specifier: 47.1.0 version: 47.1.0(patch_hash=8331a09d41443b39ea1c784daaccfeb0da4f9065ed556e7de92e9c77edd9eb41) eslint: - specifier: 9.37.0 - version: 9.37.0(jiti@2.6.1) + specifier: 9.38.0 + version: 9.38.0(jiti@2.6.1) eslint-config-ckeditor5: specifier: '>=9.1.0' - version: 12.1.1(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3) + version: 12.1.1(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) http-server: specifier: 14.1.1 version: 14.1.1 @@ -1110,10 +1110,10 @@ importers: version: 4.1.1(@swc/core@1.11.29(@swc/helpers@0.5.17))(@types/node@22.18.10)(bufferutil@4.0.9)(esbuild@0.25.11)(utf-8-validate@6.0.5) '@typescript-eslint/eslint-plugin': specifier: ~8.46.0 - version: 8.46.1(@typescript-eslint/parser@8.46.1(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3) + version: 8.46.1(@typescript-eslint/parser@8.46.1(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) '@typescript-eslint/parser': specifier: 8.46.1 - version: 8.46.1(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3) + version: 8.46.1(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) '@vitest/browser': specifier: 3.2.4 version: 3.2.4(bufferutil@4.0.9)(msw@2.7.5(@types/node@22.18.10)(typescript@5.9.3))(playwright@1.56.0)(utf-8-validate@6.0.5)(vite@7.1.10(@types/node@22.18.10)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))(vitest@3.2.4)(webdriverio@9.20.0(bufferutil@4.0.9)(utf-8-validate@6.0.5)) @@ -1124,11 +1124,11 @@ importers: specifier: 47.1.0 version: 47.1.0(patch_hash=8331a09d41443b39ea1c784daaccfeb0da4f9065ed556e7de92e9c77edd9eb41) eslint: - specifier: 9.37.0 - version: 9.37.0(jiti@2.6.1) + specifier: 9.38.0 + version: 9.38.0(jiti@2.6.1) eslint-config-ckeditor5: specifier: '>=9.1.0' - version: 12.1.1(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3) + version: 12.1.1(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) http-server: specifier: 14.1.1 version: 14.1.1 @@ -1334,10 +1334,10 @@ importers: version: 5.21.1 '@typescript-eslint/eslint-plugin': specifier: 8.46.1 - version: 8.46.1(@typescript-eslint/parser@8.46.1(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3) + version: 8.46.1(@typescript-eslint/parser@8.46.1(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) '@typescript-eslint/parser': specifier: 8.46.1 - version: 8.46.1(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3) + version: 8.46.1(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) dotenv: specifier: 17.2.3 version: 17.2.3 @@ -1345,8 +1345,8 @@ importers: specifier: 0.25.11 version: 0.25.11 eslint: - specifier: 9.37.0 - version: 9.37.0(jiti@2.6.1) + specifier: 9.38.0 + version: 9.38.0(jiti@2.6.1) highlight.js: specifier: 11.11.1 version: 11.11.1 @@ -2583,12 +2583,12 @@ packages: resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==} engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} - '@eslint/config-array@0.21.0': - resolution: {integrity: sha512-ENIdc4iLu0d93HeYirvKmrzshzofPw6VkZRKQGe9Nv46ZnWUzcF1xV01dcvEg/1wXUR61OmmlSfyeyO7EvjLxQ==} + '@eslint/config-array@0.21.1': + resolution: {integrity: sha512-aw1gNayWpdI/jSYVgzN5pL0cfzU02GT3NBpeT/DXbx1/1x7ZKxFPd9bwrzygx/qiwIQiJ1sw/zD8qY/kRvlGHA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/config-helpers@0.4.0': - resolution: {integrity: sha512-WUFvV4WoIwW8Bv0KeKCIIEgdSiFOsulyN0xrMu+7z43q/hkOLXjvb5u7UC9jDxvRzcrbEmuZBX5yJZz1741jog==} + '@eslint/config-helpers@0.4.1': + resolution: {integrity: sha512-csZAzkNhsgwb0I/UAV6/RGFTbiakPCf0ZrGmrIxQpYvGZ00PhTkSnyKNolphgIvmnJeGw6rcGVEXfTzUnFuEvw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@eslint/core@0.14.0': @@ -2607,16 +2607,16 @@ packages: resolution: {integrity: sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/js@9.37.0': - resolution: {integrity: sha512-jaS+NJ+hximswBG6pjNX0uEJZkrT0zwpVi3BA3vX22aFGjJjmgSTSmPpZCRKmoBL5VY/M6p0xsSJx7rk7sy5gg==} + '@eslint/js@9.38.0': + resolution: {integrity: sha512-UZ1VpFvXf9J06YG9xQBdnzU+kthors6KjhMAl6f4gH4usHyh31rUf2DLGInT8RFYIReYXNSydgPY0V2LuWgl7A==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@eslint/markdown@6.6.0': resolution: {integrity: sha512-IsWPy2jU3gaQDlioDC4sT4I4kG1hX1OMWs/q2sWwJrPoMASHW/Z4SDw+6Aql6EsHejGbagYuJbFq9Zvx+Y1b1Q==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/object-schema@2.1.6': - resolution: {integrity: sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==} + '@eslint/object-schema@2.1.7': + resolution: {integrity: sha512-VtAOaymWVfZcmZbp6E2mympDIHvyjXs/12LqWYjVw6qjrfF+VK+fyG33kChz3nnK+SU5/NeHOqrTEHS8sXO3OA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@eslint/plugin-kit@0.3.5': @@ -7597,8 +7597,8 @@ packages: resolution: {integrity: sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - eslint@9.37.0: - resolution: {integrity: sha512-XyLmROnACWqSxiGYArdef1fItQd47weqB7iwtfr9JHwRrqIXZdcFMvvEcL9xHCmL0SNsOvF0c42lWyM1U5dgig==} + eslint@9.38.0: + resolution: {integrity: sha512-t5aPOpmtJcZcz5UJyY2GbvpDlsK5E8JqRqoKtfiKE3cNh437KIqfJr3A3AKf5k64NPx6d0G3dno6XDY05PqPtw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} hasBin: true peerDependencies: @@ -14482,11 +14482,11 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/eslint-parser@7.28.4(@babel/core@7.28.0)(eslint@9.37.0(jiti@2.6.1))': + '@babel/eslint-parser@7.28.4(@babel/core@7.28.0)(eslint@9.38.0(jiti@2.6.1))': dependencies: '@babel/core': 7.28.0 '@nicolo-ribaudo/eslint-scope-5-internals': 5.1.1-v1 - eslint: 9.37.0(jiti@2.6.1) + eslint: 9.38.0(jiti@2.6.1) eslint-visitor-keys: 2.1.0 semver: 6.3.1 @@ -14901,6 +14901,8 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.1.0 '@ckeditor/ckeditor5-watchdog': 47.1.0 es-toolkit: 1.39.5 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-dev-build-tools@43.1.0(@swc/helpers@0.5.17)(tslib@2.8.1)(typescript@5.9.3)': dependencies: @@ -15678,8 +15680,6 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.1.0 '@ckeditor/ckeditor5-utils': 47.1.0 ckeditor5: 47.1.0(patch_hash=8331a09d41443b39ea1c784daaccfeb0da4f9065ed556e7de92e9c77edd9eb41) - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-special-characters@47.1.0': dependencies: @@ -16644,22 +16644,22 @@ snapshots: '@esbuild/win32-x64@0.25.11': optional: true - '@eslint-community/eslint-utils@4.9.0(eslint@9.37.0(jiti@2.6.1))': + '@eslint-community/eslint-utils@4.9.0(eslint@9.38.0(jiti@2.6.1))': dependencies: - eslint: 9.37.0(jiti@2.6.1) + eslint: 9.38.0(jiti@2.6.1) eslint-visitor-keys: 3.4.3 '@eslint-community/regexpp@4.12.1': {} - '@eslint/config-array@0.21.0': + '@eslint/config-array@0.21.1': dependencies: - '@eslint/object-schema': 2.1.6 + '@eslint/object-schema': 2.1.7 debug: 4.4.3(supports-color@6.0.0) minimatch: 3.1.2 transitivePeerDependencies: - supports-color - '@eslint/config-helpers@0.4.0': + '@eslint/config-helpers@0.4.1': dependencies: '@eslint/core': 0.16.0 @@ -16689,7 +16689,7 @@ snapshots: transitivePeerDependencies: - supports-color - '@eslint/js@9.37.0': {} + '@eslint/js@9.38.0': {} '@eslint/markdown@6.6.0': dependencies: @@ -16704,7 +16704,7 @@ snapshots: transitivePeerDependencies: - supports-color - '@eslint/object-schema@2.1.6': {} + '@eslint/object-schema@2.1.7': {} '@eslint/plugin-kit@0.3.5': dependencies: @@ -18869,10 +18869,10 @@ snapshots: '@lezer/highlight': 1.2.1 '@lezer/lr': 1.4.2 - '@stylistic/eslint-plugin@4.4.1(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3)': + '@stylistic/eslint-plugin@4.4.1(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3)': dependencies: - '@typescript-eslint/utils': 8.46.1(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3) - eslint: 9.37.0(jiti@2.6.1) + '@typescript-eslint/utils': 8.46.1(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) + eslint: 9.38.0(jiti@2.6.1) eslint-visitor-keys: 4.2.1 espree: 10.4.0 estraverse: 5.3.0 @@ -19559,15 +19559,15 @@ snapshots: '@types/node': 22.18.10 optional: true - '@typescript-eslint/eslint-plugin@8.40.0(@typescript-eslint/parser@8.40.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3)': + '@typescript-eslint/eslint-plugin@8.40.0(@typescript-eslint/parser@8.40.0(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3)': dependencies: '@eslint-community/regexpp': 4.12.1 - '@typescript-eslint/parser': 8.40.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/parser': 8.40.0(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) '@typescript-eslint/scope-manager': 8.40.0 - '@typescript-eslint/type-utils': 8.40.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/utils': 8.40.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/type-utils': 8.40.0(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/utils': 8.40.0(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) '@typescript-eslint/visitor-keys': 8.40.0 - eslint: 9.37.0(jiti@2.6.1) + eslint: 9.38.0(jiti@2.6.1) graphemer: 1.4.0 ignore: 7.0.5 natural-compare: 1.4.0 @@ -19576,15 +19576,15 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/eslint-plugin@8.46.1(@typescript-eslint/parser@8.46.1(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3)': + '@typescript-eslint/eslint-plugin@8.46.1(@typescript-eslint/parser@8.46.1(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3)': dependencies: '@eslint-community/regexpp': 4.12.1 - '@typescript-eslint/parser': 8.46.1(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/parser': 8.46.1(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) '@typescript-eslint/scope-manager': 8.46.1 - '@typescript-eslint/type-utils': 8.46.1(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/utils': 8.46.1(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/type-utils': 8.46.1(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/utils': 8.46.1(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) '@typescript-eslint/visitor-keys': 8.46.1 - eslint: 9.37.0(jiti@2.6.1) + eslint: 9.38.0(jiti@2.6.1) graphemer: 1.4.0 ignore: 7.0.5 natural-compare: 1.4.0 @@ -19593,26 +19593,26 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.40.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3)': + '@typescript-eslint/parser@8.40.0(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3)': dependencies: '@typescript-eslint/scope-manager': 8.40.0 '@typescript-eslint/types': 8.40.0 '@typescript-eslint/typescript-estree': 8.40.0(typescript@5.9.3) '@typescript-eslint/visitor-keys': 8.40.0 debug: 4.4.3(supports-color@6.0.0) - eslint: 9.37.0(jiti@2.6.1) + eslint: 9.38.0(jiti@2.6.1) typescript: 5.9.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.46.1(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3)': + '@typescript-eslint/parser@8.46.1(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3)': dependencies: '@typescript-eslint/scope-manager': 8.46.1 '@typescript-eslint/types': 8.46.1 '@typescript-eslint/typescript-estree': 8.46.1(typescript@5.9.3) '@typescript-eslint/visitor-keys': 8.46.1 debug: 4.4.3(supports-color@6.0.0) - eslint: 9.37.0(jiti@2.6.1) + eslint: 9.38.0(jiti@2.6.1) typescript: 5.9.3 transitivePeerDependencies: - supports-color @@ -19657,25 +19657,25 @@ snapshots: dependencies: typescript: 5.9.3 - '@typescript-eslint/type-utils@8.40.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3)': + '@typescript-eslint/type-utils@8.40.0(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3)': dependencies: '@typescript-eslint/types': 8.40.0 '@typescript-eslint/typescript-estree': 8.40.0(typescript@5.9.3) - '@typescript-eslint/utils': 8.40.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/utils': 8.40.0(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) debug: 4.4.3(supports-color@6.0.0) - eslint: 9.37.0(jiti@2.6.1) + eslint: 9.38.0(jiti@2.6.1) ts-api-utils: 2.1.0(typescript@5.9.3) typescript: 5.9.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/type-utils@8.46.1(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3)': + '@typescript-eslint/type-utils@8.46.1(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3)': dependencies: '@typescript-eslint/types': 8.46.1 '@typescript-eslint/typescript-estree': 8.46.1(typescript@5.9.3) - '@typescript-eslint/utils': 8.46.1(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/utils': 8.46.1(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) debug: 4.4.3(supports-color@6.0.0) - eslint: 9.37.0(jiti@2.6.1) + eslint: 9.38.0(jiti@2.6.1) ts-api-utils: 2.1.0(typescript@5.9.3) typescript: 5.9.3 transitivePeerDependencies: @@ -19717,24 +19717,24 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.40.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3)': + '@typescript-eslint/utils@8.40.0(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3)': dependencies: - '@eslint-community/eslint-utils': 4.9.0(eslint@9.37.0(jiti@2.6.1)) + '@eslint-community/eslint-utils': 4.9.0(eslint@9.38.0(jiti@2.6.1)) '@typescript-eslint/scope-manager': 8.40.0 '@typescript-eslint/types': 8.40.0 '@typescript-eslint/typescript-estree': 8.40.0(typescript@5.9.3) - eslint: 9.37.0(jiti@2.6.1) + eslint: 9.38.0(jiti@2.6.1) typescript: 5.9.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.46.1(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3)': + '@typescript-eslint/utils@8.46.1(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3)': dependencies: - '@eslint-community/eslint-utils': 4.9.0(eslint@9.37.0(jiti@2.6.1)) + '@eslint-community/eslint-utils': 4.9.0(eslint@9.38.0(jiti@2.6.1)) '@typescript-eslint/scope-manager': 8.46.1 '@typescript-eslint/types': 8.46.1 '@typescript-eslint/typescript-estree': 8.46.1(typescript@5.9.3) - eslint: 9.37.0(jiti@2.6.1) + eslint: 9.38.0(jiti@2.6.1) typescript: 5.9.3 transitivePeerDependencies: - supports-color @@ -22691,38 +22691,38 @@ snapshots: optionalDependencies: source-map: 0.6.1 - eslint-config-ckeditor5@12.1.1(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3): + eslint-config-ckeditor5@12.1.1(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3): dependencies: - '@eslint/js': 9.37.0 + '@eslint/js': 9.38.0 '@eslint/markdown': 6.6.0 - '@stylistic/eslint-plugin': 4.4.1(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3) - eslint: 9.37.0(jiti@2.6.1) + '@stylistic/eslint-plugin': 4.4.1(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) + eslint: 9.38.0(jiti@2.6.1) eslint-plugin-ckeditor5-rules: 12.1.1 - eslint-plugin-mocha: 11.1.0(eslint@9.37.0(jiti@2.6.1)) + eslint-plugin-mocha: 11.1.0(eslint@9.38.0(jiti@2.6.1)) globals: 16.4.0 typescript: 5.9.3 - typescript-eslint: 8.40.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3) + typescript-eslint: 8.40.0(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) transitivePeerDependencies: - supports-color - eslint-config-preact@2.0.0(eslint@9.37.0(jiti@2.6.1)): + eslint-config-preact@2.0.0(eslint@9.38.0(jiti@2.6.1)): dependencies: '@babel/core': 7.28.0 - '@babel/eslint-parser': 7.28.4(@babel/core@7.28.0)(eslint@9.37.0(jiti@2.6.1)) + '@babel/eslint-parser': 7.28.4(@babel/core@7.28.0)(eslint@9.38.0(jiti@2.6.1)) '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.28.0) '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.28.0) - '@eslint/js': 9.37.0 - eslint: 9.37.0(jiti@2.6.1) - eslint-plugin-compat: 6.0.2(eslint@9.37.0(jiti@2.6.1)) - eslint-plugin-react: 7.37.5(eslint@9.37.0(jiti@2.6.1)) - eslint-plugin-react-hooks: 5.2.0(eslint@9.37.0(jiti@2.6.1)) + '@eslint/js': 9.38.0 + eslint: 9.38.0(jiti@2.6.1) + eslint-plugin-compat: 6.0.2(eslint@9.38.0(jiti@2.6.1)) + eslint-plugin-react: 7.37.5(eslint@9.38.0(jiti@2.6.1)) + eslint-plugin-react-hooks: 5.2.0(eslint@9.38.0(jiti@2.6.1)) globals: 16.4.0 transitivePeerDependencies: - supports-color - eslint-config-prettier@10.1.8(eslint@9.37.0(jiti@2.6.1)): + eslint-config-prettier@10.1.8(eslint@9.38.0(jiti@2.6.1)): dependencies: - eslint: 9.37.0(jiti@2.6.1) + eslint: 9.38.0(jiti@2.6.1) eslint-linter-browserify@9.37.0: {} @@ -22736,45 +22736,45 @@ snapshots: validate-npm-package-name: 6.0.2 yaml: 2.8.1 - eslint-plugin-compat@6.0.2(eslint@9.37.0(jiti@2.6.1)): + eslint-plugin-compat@6.0.2(eslint@9.38.0(jiti@2.6.1)): dependencies: '@mdn/browser-compat-data': 5.7.6 ast-metadata-inferer: 0.8.1 browserslist: 4.26.2 caniuse-lite: 1.0.30001743 - eslint: 9.37.0(jiti@2.6.1) + eslint: 9.38.0(jiti@2.6.1) find-up: 5.0.0 globals: 15.15.0 lodash.memoize: 4.1.2 semver: 7.7.2 - eslint-plugin-mocha@11.1.0(eslint@9.37.0(jiti@2.6.1)): + eslint-plugin-mocha@11.1.0(eslint@9.38.0(jiti@2.6.1)): dependencies: - '@eslint-community/eslint-utils': 4.9.0(eslint@9.37.0(jiti@2.6.1)) - eslint: 9.37.0(jiti@2.6.1) + '@eslint-community/eslint-utils': 4.9.0(eslint@9.38.0(jiti@2.6.1)) + eslint: 9.38.0(jiti@2.6.1) globals: 15.15.0 - eslint-plugin-playwright@2.2.2(eslint@9.37.0(jiti@2.6.1)): + eslint-plugin-playwright@2.2.2(eslint@9.38.0(jiti@2.6.1)): dependencies: - eslint: 9.37.0(jiti@2.6.1) + eslint: 9.38.0(jiti@2.6.1) globals: 13.24.0 - eslint-plugin-react-hooks@5.2.0(eslint@9.37.0(jiti@2.6.1)): + eslint-plugin-react-hooks@5.2.0(eslint@9.38.0(jiti@2.6.1)): dependencies: - eslint: 9.37.0(jiti@2.6.1) + eslint: 9.38.0(jiti@2.6.1) - eslint-plugin-react-hooks@7.0.0(eslint@9.37.0(jiti@2.6.1)): + eslint-plugin-react-hooks@7.0.0(eslint@9.38.0(jiti@2.6.1)): dependencies: '@babel/core': 7.28.0 '@babel/parser': 7.28.4 - eslint: 9.37.0(jiti@2.6.1) + eslint: 9.38.0(jiti@2.6.1) hermes-parser: 0.25.1 zod: 3.24.4 zod-validation-error: 3.5.3(zod@3.24.4) transitivePeerDependencies: - supports-color - eslint-plugin-react@7.37.5(eslint@9.37.0(jiti@2.6.1)): + eslint-plugin-react@7.37.5(eslint@9.38.0(jiti@2.6.1)): dependencies: array-includes: 3.1.9 array.prototype.findlast: 1.2.5 @@ -22782,7 +22782,7 @@ snapshots: array.prototype.tosorted: 1.1.4 doctrine: 2.1.0 es-iterator-helpers: 1.2.1 - eslint: 9.37.0(jiti@2.6.1) + eslint: 9.38.0(jiti@2.6.1) estraverse: 5.3.0 hasown: 2.0.2 jsx-ast-utils: 3.3.5 @@ -22812,21 +22812,20 @@ snapshots: eslint-visitor-keys@4.2.1: {} - eslint@9.37.0(jiti@2.6.1): + eslint@9.38.0(jiti@2.6.1): dependencies: - '@eslint-community/eslint-utils': 4.9.0(eslint@9.37.0(jiti@2.6.1)) + '@eslint-community/eslint-utils': 4.9.0(eslint@9.38.0(jiti@2.6.1)) '@eslint-community/regexpp': 4.12.1 - '@eslint/config-array': 0.21.0 - '@eslint/config-helpers': 0.4.0 + '@eslint/config-array': 0.21.1 + '@eslint/config-helpers': 0.4.1 '@eslint/core': 0.16.0 '@eslint/eslintrc': 3.3.1 - '@eslint/js': 9.37.0 + '@eslint/js': 9.38.0 '@eslint/plugin-kit': 0.4.0 '@humanfs/node': 0.16.7 '@humanwhocodes/module-importer': 1.0.1 '@humanwhocodes/retry': 0.4.3 '@types/estree': 1.0.8 - '@types/json-schema': 7.0.15 ajv: 6.12.6 chalk: 4.1.2 cross-spawn: 7.0.6 @@ -29540,24 +29539,24 @@ snapshots: typedarray@0.0.6: {} - typescript-eslint@8.40.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3): + typescript-eslint@8.40.0(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3): dependencies: - '@typescript-eslint/eslint-plugin': 8.40.0(@typescript-eslint/parser@8.40.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/parser': 8.40.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/eslint-plugin': 8.40.0(@typescript-eslint/parser@8.40.0(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/parser': 8.40.0(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) '@typescript-eslint/typescript-estree': 8.40.0(typescript@5.9.3) - '@typescript-eslint/utils': 8.40.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3) - eslint: 9.37.0(jiti@2.6.1) + '@typescript-eslint/utils': 8.40.0(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) + eslint: 9.38.0(jiti@2.6.1) typescript: 5.9.3 transitivePeerDependencies: - supports-color - typescript-eslint@8.46.1(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3): + typescript-eslint@8.46.1(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3): dependencies: - '@typescript-eslint/eslint-plugin': 8.46.1(@typescript-eslint/parser@8.46.1(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/parser': 8.46.1(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/eslint-plugin': 8.46.1(@typescript-eslint/parser@8.46.1(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/parser': 8.46.1(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) '@typescript-eslint/typescript-estree': 8.46.1(typescript@5.9.3) - '@typescript-eslint/utils': 8.46.1(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3) - eslint: 9.37.0(jiti@2.6.1) + '@typescript-eslint/utils': 8.46.1(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) + eslint: 9.38.0(jiti@2.6.1) typescript: 5.9.3 transitivePeerDependencies: - supports-color From 82d2894f5c636b0921e50b925faa5d34f2073469 Mon Sep 17 00:00:00 2001 From: green Date: Sat, 18 Oct 2025 04:44:21 +0200 Subject: [PATCH 032/103] Translated using Weblate (Japanese) Currently translated at 100.0% (1618 of 1618 strings) Translation: Trilium Notes/Client Translate-URL: https://hosted.weblate.org/projects/trilium/client/ja/ --- apps/client/src/translations/ja/translation.json | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/apps/client/src/translations/ja/translation.json b/apps/client/src/translations/ja/translation.json index 8131fa7f8..43a5befd7 100644 --- a/apps/client/src/translations/ja/translation.json +++ b/apps/client/src/translations/ja/translation.json @@ -282,8 +282,8 @@ "selectAllNotes": "現在のレベルのノートをすべて選択", "selectNote": "ノートを選択", "copyNotes": "アクティブなノート(または現在の選択範囲)をクリップボードにコピーする(クローンに使用)", - "cutNotes": "アクティブなノート(または現在の選択範囲)をクリップボードにカットする(ノートの移動に使用)", - "pasteNotes": "ノートをサブノートとしてアクティブノートに貼り付ける(コピーされたかカットされたかに よって、移動またはクローンになる)", + "cutNotes": "アクティブなノート(または現在の選択範囲)をクリップボードに切り取り(ノートの移動に使用)", + "pasteNotes": "ノートをサブノートとしてアクティブノートに貼り付ける(コピーされたか切り取りされたかに よって、移動またはクローンになる)", "deleteNotes": "ノート/サブツリーを削除", "editingNotes": "ノート編集", "editNoteTitle": "押下するとツリーペインからタイトルの編集に移ります。タイトルの編集からEnterキーを押すと、本文の編集に移動します。Ctrl+. で本文の編集からツリーペインに戻ります。", @@ -405,7 +405,7 @@ "unprotect-subtree": "サブツリーの保護を解除", "copy-clone": "コピー/クローン", "clone-to": "クローン先...", - "cut": "カット", + "cut": "切り取り", "move-to": "移動先...", "paste-into": "貼り付け", "paste-after": "後ろに貼り付け", @@ -1245,7 +1245,7 @@ "duplicated": "ノート \"{{title}}\" は複製されました。" }, "clipboard": { - "cut": "ノートはクリップボードにカットされました。", + "cut": "ノートはクリップボードに切り取りとられました。", "copied": "ノートはクリップボードにコピーされました。", "copy_failed": "権限の問題で、クリップボードにコピーできません。", "copy_success": "クリップボードにコピーしました。" @@ -1296,7 +1296,7 @@ }, "electron_context_menu": { "add-term-to-dictionary": "辞書に \"{{term}}\" を追加", - "cut": "カット", + "cut": "切り取り", "copy": "コピー", "copy-link": "リンクをコピー", "paste": "貼り付け", From e5db40c789bdae345bf29216aae1908f9c7bba32 Mon Sep 17 00:00:00 2001 From: green Date: Sat, 18 Oct 2025 04:42:08 +0200 Subject: [PATCH 033/103] Translated using Weblate (Japanese) Currently translated at 100.0% (386 of 386 strings) Translation: Trilium Notes/Server Translate-URL: https://hosted.weblate.org/projects/trilium/server/ja/ --- apps/server/src/assets/translations/ja/server.json | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/apps/server/src/assets/translations/ja/server.json b/apps/server/src/assets/translations/ja/server.json index 117c81e52..85698e613 100644 --- a/apps/server/src/assets/translations/ja/server.json +++ b/apps/server/src/assets/translations/ja/server.json @@ -22,7 +22,7 @@ "move-notes-to": "選択したノートを移動", "copy-notes-to-clipboard": "選択したノートをクリップボードにコピー", "paste-notes-from-clipboard": "クリップボードからアクティブなノートにノートを貼り付け", - "cut-notes-to-clipboard": "選択したノートをクリップボードにカット", + "cut-notes-to-clipboard": "選択したノートをクリップボードに切り取り", "select-all-notes-in-parent": "現在のノートレベルと同じノートをすべて選択する", "add-note-above-to-the-selection": "上のノートを選択範囲に追加", "add-note-below-to-selection": "下のノートを選択範囲に追加", @@ -101,9 +101,9 @@ "toggle-book-properties": "コレクションプロパティ切り替え", "toggle-zen-mode": "禅モード(集中した編集のための最小限のUI)を有効/無効にする", "add-include-note-to-text": "ノートを埋め込むダイアログを開く", - "toggle-promoted-attributes": "プロモートされた属性をトグルする", + "toggle-promoted-attributes": "プロモート属性切り替え", "force-save-revision": "アクティブノートの新しいノートリヴィジョンを強制する", - "toggle-classic-editor-toolbar": "固定ツールバーを持ったエディターのフォーマットタブをトグルする" + "toggle-classic-editor-toolbar": "固定ツールバーエディターの書式設定タブ切り替え" }, "keyboard_action_names": { "back-in-note-history": "ノートの履歴を戻る", @@ -128,7 +128,7 @@ "move-notes-to": "ノートを移動", "copy-notes-to-clipboard": "ノートをクリップボードにコピー", "paste-notes-from-clipboard": "クリップボードからノートを貼り付け", - "cut-notes-to-clipboard": "ノートをクリップボードにカット", + "cut-notes-to-clipboard": "ノートをクリップボードに切り取り", "select-all-notes-in-parent": "親ノート内のすべてのノートを選択", "add-note-above-to-selection": "選択範囲に上のノートを追加", "add-note-below-to-selection": "選択範囲に下のノートを追加", @@ -200,7 +200,7 @@ "force-save-revision": "強制保存リビジョン", "add-include-note-to-text": "埋め込みノートを追加", "toggle-ribbon-tab-classic-editor": "リボンタブのクラシックエディターに切り替える", - "toggle-ribbon-tab-promoted-attributes": "リボンタブのプロモート属性を切り替える" + "toggle-ribbon-tab-promoted-attributes": "リボンタブ切り替え:プロモート属性" }, "login": { "title": "ログイン", @@ -415,7 +415,8 @@ "presentation": "プレゼンテーション", "presentation_slide": "プレゼンテーションスライド", "presentation_slide_first": "最初のスライド", - "presentation_slide_second": "2番目のスライド" + "presentation_slide_second": "2番目のスライド", + "background": "背景" }, "share_404": { "title": "該当なし", From b7f39899c063041a1e5c73d13c59dadb8689da18 Mon Sep 17 00:00:00 2001 From: Sarah Hussein Date: Sat, 18 Oct 2025 06:48:17 +0200 Subject: [PATCH 034/103] Translated using Weblate (Arabic) Currently translated at 58.5% (947 of 1618 strings) Translation: Trilium Notes/Client Translate-URL: https://hosted.weblate.org/projects/trilium/client/ar/ --- .../src/translations/ar/translation.json | 144 +++++++++++++----- 1 file changed, 110 insertions(+), 34 deletions(-) diff --git a/apps/client/src/translations/ar/translation.json b/apps/client/src/translations/ar/translation.json index 3db20936c..c2cc94554 100644 --- a/apps/client/src/translations/ar/translation.json +++ b/apps/client/src/translations/ar/translation.json @@ -25,7 +25,8 @@ "branch_prefix": { "edit_branch_prefix": "تعديل بادئة الفرع", "prefix": "البادئة: ", - "save": "حفظ" + "save": "حفظ", + "help_on_tree_prefix": "مساعدة حول بادئة الشجرة" }, "bulk_actions": { "bulk_actions": "اجراءات جماعية", @@ -44,7 +45,8 @@ "options": "خيارات", "upload": "تحميل", "choose_files": "اختر الملفات", - "shrink_images": "تصغير الصور" + "shrink_images": "تصغير الصور", + "upload_attachments_to_note": "تحميل المرفقات الى الملاحظة" }, "attribute_detail": { "name": "الاسم", @@ -74,7 +76,14 @@ "date_time": "التاريخ والوقت", "label_definition": "تفاصيل تعريف التصنيف", "relation_definition": "تفاصيل تعريف العلاقة", - "attr_detail_title": "عنوان تفاصيل السمة" + "attr_detail_title": "عنوان تفاصيل السمة", + "close_button_title": "الغاء التغييرات و اغلاق", + "attr_is_owned_by": "السمة مملوكة ل", + "save_and_close": "حفظ ونسخ Ctrl+Enter", + "workspace_calendar_root": "‎تحديد جذر التقويم لكل مساحة عمل", + "hide_highlight_widget": "اخفاء عنصر واجهة قائمة التمييزات", + "is_owned_by_note": "تخص الملاحظة", + "and_more": "... و {{count}}مرات اكثر." }, "rename_label": { "to": "الى", @@ -86,7 +95,8 @@ "move_note": { "to": "الى", "move_note": "نقل الملاحظة", - "target_parent_note": "ملاحظة الاصل الهدف" + "target_parent_note": "ملاحظة الاصل الهدف", + "on_all_matched_notes": "على كل الملاحظات المطابقة" }, "add_relation": { "to": "الى", @@ -106,7 +116,8 @@ "update_relation": "تحديث العلاقة", "relation_name": "اسم العلاقة", "target_note": "الملاحظة الهدف", - "update_relation_target": "تحدث علاقة الهدف" + "update_relation_target": "تحدث علاقة الهدف", + "on_all_matched_notes": "على كل الملاحظات المطابقة" }, "attachments_actions": { "download": "تنزيل", @@ -114,7 +125,9 @@ "open_custom": "فتح مخصص", "rename_attachment": "اعادة تسمية المرفق", "delete_attachment": "حذف المرفق", - "upload_new_revision": "رفع مراجعة جديدة" + "upload_new_revision": "رفع مراجعة جديدة", + "copy_link_to_clipboard": "نسخ الرابط الى الحافظة", + "convert_attachment_into_note": "تحويل المرفق الى ملاحظة" }, "calendar": { "week": "أسبوع", @@ -146,7 +159,9 @@ "month_previous": "الشهر السابق", "month_next": "الشهر التالي", "year_previous": "السنة السابقة", - "year_next": "السنة التالية" + "year_next": "السنة التالية", + "cannot_find_day_note": "لا يمكن ايجاد ملاحظة اليوم", + "cannot_find_week_note": "لايمكن ايجاد ملاحظة الاسبوع" }, "global_menu": { "menu": "القائمة", @@ -171,7 +186,11 @@ "open_dev_tools": "فتح ادوات المطور", "show_backend_log": "اظهار سجل الخلفية", "new-version-available": "متوفر تحديث جديد", - "download-update": "احصل على الاصدار{{latestVersion}}" + "download-update": "احصل على الاصدار{{latestVersion}}", + "switch_to_mobile_version": "التبديل الى اصدار الهاتف المحمول", + "switch_to_desktop_version": "التبديل الى اصدار سطح المكتب", + "show_shared_notes_subtree": "عرض شجرة الملاحظات المشتركة", + "open_sql_console_history": "فتح سجل لوحة تحكم SQL" }, "zpetne_odkazy": { "relation": "العلاقة", @@ -181,7 +200,8 @@ "note_icon": { "category": "الفئة:", "search": "بحث:", - "change_note_icon": "تغيير ايقونة الملاحظة" + "change_note_icon": "تغيير ايقونة الملاحظة", + "reset-default": "اعادة تعيين الى الايقونة الافتراضية" }, "basic_properties": { "language": "اللغة", @@ -204,7 +224,8 @@ "collapse_all_notes": "طي كل الملاحظات", "include_archived_notes": "عرض الملاحظات المؤرشفة", "expand_all_children": "توسيع جميع العناصر الفرعية", - "presentation": "عرض تقديمي" + "presentation": "عرض تقديمي", + "invalid_view_type": "نوع العرض {{type}} غير صالح" }, "file_properties": { "download": "تنزيل", @@ -223,7 +244,8 @@ "file_type": "نوع الملف", "file_size": "حجم الملف", "original_file_name": "اسم الملف الاصلي", - "upload_new_revision": "رفع مراجعة جديدة" + "upload_new_revision": "رفع مراجعة جديدة", + "copy_reference_to_clipboard": "نسخ المرجع الى الحافظة" }, "note_info_widget": { "created": "انشاء", @@ -258,14 +280,20 @@ "order_by": "ترتيب حسب", "search_parameters": "معايير البحث", "add_search_option": "اضافة خيار البحث:", - "save_to_note": "حفظ في تلملاحظة" + "save_to_note": "حفظ في تلملاحظة", + "limit_description": "تحديد عدد النتائج", + "search_execute": "البحث وتنفيذ الأجراءات", + "unknown_search_option": "خيار بحث غير معروف {{searchOptionName}}", + "actions_executed": "اجراءات تم تنفيذها." }, "ancestor": { "label": "السلف", "depth_label": "العمق", "depth_doesnt_matter": "لايهم", "direct_children": "العقد الفرعية المباشرة", - "depth_eq": "يساوي تماما {{count}}" + "depth_eq": "يساوي تماما {{count}}", + "depth_gt": "هو اكبر من {{count}}", + "depth_lt": "هو اصغر من {{count}}" }, "limit": { "limit": "الحد الاقصى" @@ -285,7 +313,9 @@ "revision_count": "عدد المراجعات", "parent_count": "عدد النسخ", "owned_label_count": "عدد التسميات", - "owned_relation_count": "عدد العلاقات" + "owned_relation_count": "عدد العلاقات", + "date_modified": "تاريخ اخر تعديل", + "children_count": "عدد الملاحظات الفرعية" }, "search_string": { "search_prefix": "بحث:", @@ -338,7 +368,8 @@ "export": "تصدير", "export_note_title": "تصدير الملاحظة", "export_status": "حالة التصدير", - "export_finished_successfully": "اكتمل التصدير بنجاح." + "export_finished_successfully": "اكتمل التصدير بنجاح.", + "export_in_progress": "جار التصدير: {{progressCount}}" }, "help": { "troubleshooting": "أستكشاف الاخطاء واصلاحها", @@ -366,7 +397,9 @@ "scrollToActiveNote": "مدتمرير الى الملاحظة النشطة", "jumpToParentNote": "الانتقال الى الملاحظة الاصل", "movingCloningNotes": "نقل/ استنساخ الملاحظات", - "deleteNotes": "حذف الملاحظة/ الشجرة الفرعية" + "deleteNotes": "حذف الملاحظة/ الشجرة الفرعية", + "collapseWholeTree": "طي شجرة الملاحظة باكملها", + "followLink": "اتبع تلرابط تحت المؤشر" }, "import": { "options": "خيارات", @@ -378,14 +411,18 @@ "chooseImportFile": "اختر ملف الاستيراد", "failed": "فشل الاستيراد: {{messege}}.", "html_import_tags": { - "title": "علامات استيراد HTML" + "title": "علامات استيراد HTML", + "reset_button": "اعادة التعيين الى القائمة الافتراضية" }, - "successful": "اكتمل الاستيراد بنجاح." + "successful": "اكتمل الاستيراد بنجاح.", + "in-progress": "جار الاستيراد: {{progress}}" }, "include_note": { "label_note": "ملاحظة", "dialog_title": "تضمين ملاحظة", - "button_include": "تضمين ملاحظة" + "button_include": "تضمين ملاحظة", + "box_size_small": "صغير (10 سطور تقريبا)", + "box_size_medium": "متوسط ( 30 سطر تقريبا)" }, "info": { "closeButton": "أغلاق", @@ -409,7 +446,8 @@ "protected_session_password": { "close_label": "أغلاق", "modal_title": "جلسة محمية", - "start_button": "بدء جلسة محمية" + "start_button": "بدء جلسة محمية", + "help_title": "مساعدة حول الملاحظات المحمية" }, "revisions": { "delete_button": "حذف", @@ -423,7 +461,8 @@ "mime": "MIME: ", "delete_all_button": "حذف كل المراجعات", "settings": "اعدادات مراجعة الملاحظة", - "diff_not_available": "المقارنة غير متوفرة." + "diff_not_available": "المقارنة غير متوفرة.", + "help_title": "مساعدة حول مراجعات الملاحظة" }, "sort_child_notes": { "title": "عنوان", @@ -442,7 +481,8 @@ "recent_changes": { "undelete_link": "الغاء الحذف", "title": "التغيرات الاخيرة", - "no_changes_message": "لايوجد تغيير لحد الان..." + "no_changes_message": "لايوجد تغيير لحد الان...", + "erase_notes_button": "مسح الملاحظات المحذوفة الان" }, "edited_notes": { "deleted": "(حذف)", @@ -874,7 +914,10 @@ "unset-field-placeholder": "غير محدد", "open_external_link": "فتح رابط خارجي", "add_new_attribute": "اضافة سمة جديدة", - "remove_this_attribute": "حذف هذه السمة" + "remove_this_attribute": "حذف هذه السمة", + "unknown_label_type": "نوع التسمية {{type}} غير معروف", + "unknown_attribute_type": "نوع السمة {{type}} غير معروف", + "remove_color": "حذف لون التسمية" }, "duration": { "seconds": "ثواني", @@ -885,7 +928,8 @@ "editorfeatures": { "title": "مميزات", "note_completion_enabled": "تمكين الاكمال التلقائي للملاحظة", - "emoji_completion_enabled": "تفعيل الاكمال التلقائي للرموز التعبيرية" + "emoji_completion_enabled": "تفعيل الاكمال التلقائي للرموز التعبيرية", + "slash_commands_enabled": "تفعيل اوامر Slash" }, "book_properties_config": { "raster": "نقطي", @@ -921,7 +965,8 @@ "add_label": "اضافة تسمية", "to_value": "الى القيمة", "new_value_placeholder": "قيمة جديدة", - "label_name_placeholder": "اسم التسمية" + "label_name_placeholder": "اسم التسمية", + "help_text": "عل كل الملاحظات المطابقة:" }, "delete_label": { "delete_label": "حذف التسمية", @@ -939,7 +984,8 @@ }, "rename_note": { "rename_note": "اعادة تسمية الملاحظة", - "new_note_title": "عنوان ملاحظة جديد" + "new_note_title": "عنوان ملاحظة جديد", + "rename_note_title_to": "اعادة تسمية عنوان الملاحظة الى" }, "delete_relation": { "delete_relation": "حذف العلاقة", @@ -966,7 +1012,8 @@ "search_in_note": "بحث في الملاحظة", "open_note_externally": "فتح الملاحظة خارجيا", "open_note_custom": "فتح ملاحظة مخصص", - "print_pdf": "تصدير كملف PDF..." + "print_pdf": "تصدير كملف PDF...", + "convert_into_attachment_failed": "فشل تحويل الملاحظة {{title}}." }, "update_available": { "update_available": "تحديث متوفر" @@ -974,7 +1021,8 @@ "code_buttons": { "execute_button_title": "تنفيذ السكريبت", "save_to_note_button_title": "حفظ في الملاحظا", - "opening_api_docs_message": "جاري فتح مستدات API..." + "opening_api_docs_message": "جاري فتح مستدات API...", + "trilium_api_docs_button_title": "فتح مستندات API لتريليوم" }, "hide_floating_buttons_button": { "button_title": "اخفاء الازرار" @@ -994,13 +1042,15 @@ "title": "خريطة الملاحظة", "fix-nodes": "اصلاح العقد", "link-distance": "مسافة الرابط", - "open_full": "توسيع للعرض الكامل" + "open_full": "توسيع للعرض الكامل", + "collapse": "طي الى الحجم الطبيعي" }, "owned_attribute_list": { "owned_attributes": "السمات المملوكة" }, "similar_notes": { - "title": "ملاحظات مشابهة" + "title": "ملاحظات مشابهة", + "no_similar_notes_found": "لاتوجد ملاحظة مشابهة." }, "fast_search": { "fast_search": "بحث سريع" @@ -1010,7 +1060,8 @@ "example_title": "انظر هذا المثال:" }, "attachment_detail": { - "owning_note": "الملاحظة المالكة: " + "owning_note": "الملاحظة المالكة: ", + "list_of_all_attachments": "قائمة بكل المرفقات" }, "attachment_list": { "owning_note": "الملاحظة المالكة: ", @@ -1021,7 +1072,8 @@ "protecting-title": "الحالة المحمية", "unprotecting-title": "الحالة الغير محمية", "protecting-finished-successfully": "تم الحماية بنجاح.", - "unprotecting-finished-successfully": "تم ازالة الحماية بنجاح." + "unprotecting-finished-successfully": "تم ازالة الحماية بنجاح.", + "start_session_button": "البدء بالجلسة المحمية enter" }, "relation_map": { "remove_note": "حذف الملاحظة", @@ -1189,7 +1241,9 @@ }, "move_to": { "notes_to_move": "الملاحظات المراد نقلها", - "target_parent_note": "ملاحظة الاصل الهدف" + "target_parent_note": "ملاحظة الاصل الهدف", + "dialog_title": "انقل الملاحظات الى...", + "move_button": "نقل الىالملاحظة المحددة" }, "delete_revisions": { "delete_note_revisions": "حذف مراجعات الملاحظة" @@ -1236,7 +1290,10 @@ "enter_workspace": "ادخل مساحة العمل {{title}}" }, "attribute_editor": { - "save_attributes": "حفظ السمات " + "save_attributes": "حفظ السمات ", + "add_a_new_attribute": "اضافة سمة جديدة", + "add_new_label_definition": "اضافة تعريف لتسمية جديدة", + "add_new_relation_definition": "اضافة تعريف لعلاقة جديدة" }, "zen_mode": { "button_exit": "الخروج من وضع Zen" @@ -1257,5 +1314,24 @@ "presentation_view": { "start-presentation": "بدء العرض التقديمي", "edit-slide": "تعديل هذه الشريحة" + }, + "jump_to_note": { + "search_button": "البحث في النص الكامل" + }, + "password_not_set": { + "title": "لم يتم تعيين كلمة المرور", + "go_to_password_options": "اذهب الى خيارات كلمة المرور" + }, + "abstract_bulk_action": { + "remove_this_search_action": "حذف اجراء البحث هذا" + }, + "show_toc_widget_button": { + "show_toc": "عرض جدول المحتويات" + }, + "svg_export_button": { + "button_title": "تصدير المخطط ك SVG" + }, + "abstract_search_option": { + "remove_this_search_option": "حذف خيار البحث هذا" } } From 5d40921a385caeb8968c629874fc4a8c86c5bb8c Mon Sep 17 00:00:00 2001 From: Sarah Hussein Date: Sat, 18 Oct 2025 06:18:07 +0200 Subject: [PATCH 035/103] Translated using Weblate (Arabic) Currently translated at 80.3% (310 of 386 strings) Translation: Trilium Notes/Server Translate-URL: https://hosted.weblate.org/projects/trilium/server/ar/ --- .../src/assets/translations/ar/server.json | 41 +++++++++++++++---- 1 file changed, 34 insertions(+), 7 deletions(-) diff --git a/apps/server/src/assets/translations/ar/server.json b/apps/server/src/assets/translations/ar/server.json index 12392324f..e51c4c9f9 100644 --- a/apps/server/src/assets/translations/ar/server.json +++ b/apps/server/src/assets/translations/ar/server.json @@ -76,7 +76,15 @@ "find-in-text": "اظهار/اخفاء لوحة الفتح", "toggle-full-screen": "اظهار/اخفاء وضع ملء الشاشة", "reset-zoom-level": "اعادة ضبط مستوى التكبير", - "toggle-book-properties": "اظهار/اخفاء خصائص المجموعة" + "toggle-book-properties": "اظهار/اخفاء خصائص المجموعة", + "show-note-source": "عرض مربع حوار \"مصدر الملاحظات\"", + "show-revisions": "عرض مربع حوار \" مراجعات الملاحظة\"", + "show-recent-changes": "عرض مربع حوار \" التغيرات الاخيرة\"", + "show-sql-console": "فتح صفحة \" وحدة تحكم SQL\"", + "show-backend-log": "فتح صفحة \"سجل الخلفية\"", + "edit-readonly-note": "تعديل ملاحظة القراءة فقط", + "attributes-labels-and-relations": "سمات ( تسميات و علاقات)", + "render-active-note": "عرض ( اعادة عرض) الملاحظة المؤرشفة" }, "setup_sync-from-server": { "note": "ملاحظة:", @@ -164,7 +172,10 @@ "launch-bar-templates-title": "قوالب شريط التشغيل", "base-abstract-launcher-title": "المشغل الاساسي المجرد", "llm-chat-title": "الدردشة مع الملاحظات", - "localization": "اللغة والمنطقة" + "localization": "اللغة والمنطقة", + "go-to-previous-note-title": "اذهب الى الملاحظة السابقة", + "go-to-next-note-title": "اذهب الى الملاحظة التالية", + "open-today-journal-note-title": "فتح ملاحظة مجلة اليوم" }, "tray": { "bookmarks": "العلامات المرجعية", @@ -173,7 +184,8 @@ "recents": "الملاحظات الحديثة", "new-note": "ملاحظة جديدة", "show-windows": "اظهار النوافذ", - "open_new_window": "فتح نافذة جديدة" + "open_new_window": "فتح نافذة جديدة", + "today": "فتح ملاحظة مجلة اليوم" }, "modals": { "error_title": "خطأ" @@ -211,7 +223,8 @@ "presentation": "عرض تقديمي", "presentation_slide": "شريحة العرض التقديمي", "presentation_slide_first": "الشريحة الاولى", - "presentation_slide_second": "الشريحة الثانية" + "presentation_slide_second": "الشريحة الثانية", + "background": "الخلفية" }, "login": { "title": "تسجيل الدخول", @@ -230,11 +243,13 @@ "setup": { "next": "التالي", "title": "تثبيت", - "heading": "تثبيت تريليوم للملاحظات" + "heading": "تثبيت تريليوم للملاحظات", + "init-in-progress": "جار تهيئة المستند" }, "setup_sync-from-desktop": { "step6-here": "هنا", - "heading": "مزامنة من سطح المكتب" + "heading": "مزامنة من سطح المكتب", + "step3": "انقر على صنف المزامنة." }, "setup_sync-in-progress": { "outstanding-items-default": "غير متوفر", @@ -312,7 +327,19 @@ "edit-read-only-note": "تحرير ملاحظة للقراءة فقط", "add-new-label": "اضافة تسمية جديدة", "reload-frontend-app": "اعادة تحميل الواجهة الامامية للتطبيق", - "force-save-revision": "فرض حفظ المراجعة" + "force-save-revision": "فرض حفظ المراجعة", + "toggle-note-hoisting": "اظهار/ اخفاء التركيز في الملاحظة", + "back-in-note-history": "الرجوع الى سجل الملاحظة", + "forward-in-note-history": "التقدم للامام في سجل الملاحظة", + "scroll-to-active-note": "تمرير تلى الملاحظة النشطة", + "create-note-into-inbox": "انشاء ملاحظة في البريد الوارد", + "copy-notes-to-clipboard": "نسخ الملاحظات الى الخافظة", + "paste-notes-from-clipboard": "لصق الملاحظات الى الحافظة", + "cut-notes-to-clipboard": "قص الملاحظات الى الحافظة", + "toggle-system-tray-icon": "تبديل ايقونة علبة النظام", + "switch-to-first-tab": "التبديل الى التبويب الاول", + "follow-link-under-cursor": "اتبع الرابط اسفل المؤشر", + "paste-markdown-into-text": "لصق نص بتنسبق Markdown" }, "share_404": { "title": "غير موجود", From f1774efce8eee6f3d784be35f4f3bb19cd9b59b2 Mon Sep 17 00:00:00 2001 From: Sarah Hussein Date: Sat, 18 Oct 2025 05:39:18 +0200 Subject: [PATCH 036/103] Translated using Weblate (Arabic) Currently translated at 25.2% (29 of 115 strings) Translation: Trilium Notes/README Translate-URL: https://hosted.weblate.org/projects/trilium/readme/ar/ --- docs/README-ar.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/README-ar.md b/docs/README-ar.md index a8bc0669c..b80cac4bf 100644 --- a/docs/README-ar.md +++ b/docs/README-ar.md @@ -132,7 +132,7 @@ 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 -### ⬆️Migrating from Zadam/Trilium? +### ⬆️ الهجرة من Zadam الى تريليوم؟ There are no special migration steps to migrate from a zadam/Trilium instance to a TriliumNext/Trilium instance. Simply [install From 51e8c252364db685a055d00986d1e50cb8666b53 Mon Sep 17 00:00:00 2001 From: kamykO Date: Sat, 18 Oct 2025 08:48:43 +0200 Subject: [PATCH 037/103] Translated using Weblate (Polish) Currently translated at 100.0% (146 of 146 strings) Translation: Trilium Notes/Website Translate-URL: https://hosted.weblate.org/projects/trilium/website/pl/ --- .../public/translations/pl/translation.json | 193 +++++++++++++++++- 1 file changed, 192 insertions(+), 1 deletion(-) diff --git a/apps/website/public/translations/pl/translation.json b/apps/website/public/translations/pl/translation.json index 0967ef424..2787eacc7 100644 --- a/apps/website/public/translations/pl/translation.json +++ b/apps/website/public/translations/pl/translation.json @@ -1 +1,192 @@ -{} +{ + "get-started": { + "desktop_title": "Pobierz wersję desktopową (v{{version}})", + "architecture": "Architektura:", + "older_releases": "Sprawdź poprzednie wydania", + "server_title": "Skonfiguruj serwer, aby mieć dostęp z wielu urządzeń", + "title": "Start" + }, + "hero_section": { + "title": "Uporządkuj swoje myśli i zbuduj bazę Twojej wiedzy.", + "subtitle": "Trilium to otwartoźródłowe rozwiązanie do notowania i organizacji swojej personalnej bazy wiedzy. Używaj go lokalnie na swoim komputerze lub synchronizuj swoje notatki na własnym serwerze i miej do nich dostęp gdziekolwiek jesteś.", + "get_started": "Start", + "github": "GitHub", + "dockerhub": "Docker Hub", + "screenshot_alt": "Zrzut ekranu wersji desktopowej Trilium Notes" + }, + "organization_benefits": { + "title": "Układ", + "note_structure_title": "Struktura notatek", + "note_structure_description": "Notatki mogą być ułożone w hierarchię. Każda notatka może zawierać w sobie inne, co pozwala umieścić tą samą notatkę w wielu miejscach w hierarchii i nie wymusza to tworzenia dodatkowych folderów.", + "attributes_title": "Etykiety i korelacje", + "attributes_description": "Porządkuj łatwiej swoje notatki przy użyciu relacji i etykiet, używaj ich jako odnośników w tabelach i tablicach.", + "hoisting_title": "Przestrzenie robocze i windowanie notatek", + "hoisting_description": "Łatwo oddziel swoje personalne notatki od tych z pracy przez grupowanie ich w przestrzenie robocze, które pomogą ci się skupić na danym temacie." + }, + "productivity_benefits": { + "title": "Produktywność i bezpieczeństwo", + "revisions_title": "Historia zmian", + "revisions_content": "Notatki są regularnie zapisywane w tle, co pozwala to przeglądać i cofać wprowadzone zmiany. Zapisy można także wykonywać \"na życzenie\".", + "sync_title": "Synchronizacja", + "sync_content": "Używaj własnych lub chmurowych instancji do łatwiejszej synchronizacji notatek między wieloma urządzeniami, w tym twoim telefonem używając PWA.", + "protected_notes_title": "Notatki chronione", + "protected_notes_content": "Chroń wrażliwe informacje szyfrując notatki i blokując dostęp do nich za pomocą hasła sesji.", + "jump_to_title": "Szybkie wyszukiwanie i komendy", + "jump_to_content": "Szybko i łatwo wyszukuj swoje notatki używając funkcji lub komend, nawet gdy nie pamiętasz dokładnej ich nazwy.", + "search_title": "Dokładne wyszukiwanie", + "search_content": "Albo wyszukaj tekst w notatkach, możesz dostosować zakres szukania do konkretnej notatki albo hierarchii pliku.", + "web_clipper_title": "Web clipper", + "web_clipper_content": "Dołączaj strony internetowe albo ich zrzuty i umieszczaj je bezpośrednio w swoich notatkach dzięki rozszerzeniu do przeglądarki." + }, + "note_types": { + "text_title": "Notatki tekstowe", + "text_description": "Edytuj notatki w graficznym interfejsie (WYSIWYG), który wspiera tabele, obrazy, działania matematyczne i bloki kodu z podświetlaniem składni. Szybko formatuj tekst używając skrótów (Markdown), jak i komend (/).", + "code_title": "Notatki kodowe", + "code_description": "Duże fragmenty kodu źródłowego albo skryptów można umieścić w dedykowanych plikach z własnym edytorem. Podświetlenie składni i struktur, różne motywy i wsparcie dla wielu języków programowania ułatwi edycję.", + "file_title": "Obsługa plików", + "file_description": "Dodawaj pliki takie jak PDF-y, zdjęcia i pliki wideo z podglądem w aplikacji.", + "canvas_title": "Płótno", + "canvas_description": "Dodawaj kształty, zdjęcia i tekst na nieskończonym płótnie, używając tej samej technologii co excalidraw.com. Idealne do diagramów, szkiców i projektowania.", + "mermaid_title": "Diagramy Mermaid", + "mermaid_description": "Twórz diagramy, takie jak schematy blokowe, diagramy klas i sekwencyjne, wykresy Gantta i wiele innych, korzystając z składni Mermaid.", + "mindmap_title": "Mapy myśli", + "mindmap_description": "Organizuj wizualnie swoje myśli albo przeprowadź sesję burzy mózgów.", + "others_list": "I wiele innych: <0>mapa notatek, <1>mapa powiązań, <2>zapisane wyszukiwania, <3>renderowane notatki, and <4>podgląd stron www." + }, + "extensibility_benefits": { + "title": "Udostępnianie i rozszerzenia", + "import_export_title": "Import/Export", + "import_export_description": "Łatwa interakcja z innymi aplikacjami przy użyciu formatów Markdown, ENEX i OLM.", + "share_title": "Udostępniaj notatki w internecie", + "share_description": "Jeśli masz własny serwer, możesz go używać do udostępniania danych notatek z innymi.", + "scripting_title": "Zaawansowane skrypty", + "scripting_description": "Stwórz swoje własne integracje z Trilium przy użyciu personalizowanych widżetów albo z serwerowych skryptów.", + "api_title": "REST API", + "api_description": "Twórz integracje Trilium z użyciem REST API." + }, + "collections": { + "calendar_title": "Kalendarze", + "calendar_description": "Organizuj swoje prywatne i służbowe wydarzenia używając kalendarza. Miej plany pod kontrolą z tygodniowym, miesięcznym i rocznym podglądem. Twórz i edytuj wydarzenia w prosty i intuicyjny sposób.", + "table_title": "Tabele", + "table_description": "Wyświetlaj i edytuj informacje o notatkach w tabelach na wiele sposobów dzięki wielu typom kolumn: Tekstowym, numerycznym, z polami wyboru, z datami i godzinami, zawierającym linki, z kolorowymi wypełnieniami i powiązaniami notatek. Możesz nawet wyświetlić całe drzewo hierarchii w tabeli!", + "board_title": "Tablice", + "board_description": "Organizuj swoje zadania i postępy projektów w tablicach Kanban z prostym tworzeniem nowych elementów i kolumn, a możliwość graficznego ich przenoszenia ułatwi zmianę statusu i pozwoli zachować porządek.", + "geomap_title": "Mapy", + "geomap_description": "Zaplanuj wakacje albo interesujące miejsca bezpośrednio na mapie, używaj personalizowanych pinezek. Dzięki możliwości importu plików GPX możesz wyświetlać przebyte trasy." + }, + "faq": { + "title": "Częste pytania", + "mobile_question": "Czy jest dostępna aplikacja mobilna?", + "mobile_answer": "Aktualnie nie ma oficjalnej aplikacji mobilnej, jednak jeśli posiadasz uruchomioną aplikacje na serwerze, to możesz mieć dostęp za pomocą przeglądarki, a nawet zainstalować ją jako PWA. Dla systemu android jest nieoficjalna aplikacja \"TriliumDroid\", która działa nawet w trybie offline (jak zwykła desktopowa).", + "database_question": "Gdzie są przechowywane moje dane?", + "database_answer": "Wszystkie twoje notatki są przechowywane w bazie danych SQLite, w folderze aplikacji (lokalnie). Trilium używa baz danych zamiast zwykłych plików tekstowych dla lepszej wydajności i niektórych funkcji, które byłoby trudno zaimplementować w inny sposób (np. ta sama notatka w wielu miejscach). Folder aplikacji możesz łatwo znaleźć w zakładce \"O programie\".", + "server_question": "Czy muszę posiadać serwer, aby używać Trilium?", + "server_answer": "Nie, serwer umożliwia dostęp do aplikacji z poziomu przeglądarki, i obsługuje synchronizację na wielu urządzeniach. Z początku wystarczającym rozwiązaniem jest aplikacja desktopowa.", + "scaling_question": "Jak dobrze aplikacja radzi sobie z dużą ilością notatek?", + "scaling_answer": "W zależności od użycia, aplikacja powinna być w stanie utrzymać bezproblemowo do 100 000 notatek. Trzeba zaznaczyć, że synchronizacja czasami może skończyć się niepowodzeniem w przypadku wielu plików ponad 1GB. Trilium jest bardziej przystosowane do tworzenia baz wiedzy, niż do jako katalog plików (np. NextCloud).", + "network_share_question": "Czy mogę udostępniać moje bazy danych przez dyski sieciowe?", + "network_share_answer": "Nie, ogólnie przesyłanie baz SQLite przez dyski sieciowe nie jest dobrym pomysłem. Czasami może to zadziałać, ale istnieje szansa, że taka baza danych może zostać uszkodzona przez niedoskonałości blokad plików w sieci.", + "security_question": "Jak są chronione moje dane?", + "security_answer": "Domyślnie notatki nie są szyfrowane i mogą być odczytane bezpośrednio z bazy danych. Kiedy notatka zostanie oznaczona jako zaszyfrowana, to ta notatka szyfrowana jest używając AES-128-CBC." + }, + "final_cta": { + "title": "Gotowy aby zacząć przygodę z Trilium Notes?", + "description": "Zbuduj swoją personalną bazę wiedzy z zaawansowanymi funkcjami i pełną prywatnością.", + "get_started": "Start" + }, + "components": { + "link_learn_more": "Dowiedz się więcej....", + "list_with_screenshot_alt": "Zrzut ekranu wybranej funkcji" + }, + "download_now": { + "text": "Pobierz teraz ", + "platform_big": "v{{version}} dla {{platform}}", + "platform_small": "dla{{platform}}", + "linux_big": "v{{version}} dla Linuxa", + "linux_small": "dla Linuxa", + "more_platforms": "Więcej platform i konfiguracja serwera" + }, + "footer": { + "copyright_and_the": " i ", + "copyright_community": "społeczność" + }, + "social_buttons": { + "github": "GitHub", + "github_discussions": "GitHub - Forum", + "matrix": "Matrix", + "reddit": "Reddit" + }, + "support_us": { + "title": "Wesprzyj nas", + "financial_donations_title": "Wsparcie finansowe", + "financial_donations_description": "Trilium jest tworzone i rozwijane przez setki godzin pracy. Twoje wsparcie utrzymuje projekt jako otwartoźródłowy, pomaga dodawać nowe rzeczy i pokrywa koszty hostingu.", + "financial_donations_cta": "Rozważ wsparcie głównego programisty (eliandoran) poza aplikacją przez:", + "github_sponsors": "GitHub Sponsors", + "paypal": "PayPal", + "buy_me_a_coffee": "Postaw mi wirtualną kawę" + }, + "contribute": { + "title": "Inne sposoby wsparcia", + "way_translate": "Przetłumacz aplikacja na swój natywny język przez Weblate.", + "way_community": "Dołącz do społeczności na GitHub Discussions lub na Matrix.", + "way_reports": "Zgłoś błędy przezGitHub issues.", + "way_document": "Pomóż nam w doskonaleniu dokumentacji przez informowanie nas o lukach albo sam pomóż w tworzeniu treści (dokumentacja, FAQ, poradniki).", + "way_market": "Powiedz o nas swoim znajomym, na blogu albo na social mediach." + }, + "404": { + "title": "404: Nie znaleziono strony", + "description": "Strona, której szukasz, nie istnieje. Mogła zostać usunięta, albo wpisany adres jest niepoprawny." + }, + "download_helper_desktop_windows": { + "title_x64": "Windows 64-bit", + "title_arm64": "Windows na ARM", + "description_x64": "Kompatybilne z urządzeniami Intel i AMD działającymi pod kontrolą Windows 10 i 11.", + "description_arm64": "Kompatybilne z procesorami ARM (np. Qualcomm Snapdragon).", + "quick_start": "Aby zainstalować przez WinGet:", + "download_exe": "Pobierz instalator (.exe)", + "download_zip": "Wersja przenośna - Portable (.zip)", + "download_scoop": "Scoop" + }, + "download_helper_desktop_linux": { + "title_x64": "Linux 64-bit", + "title_arm64": "Linux na ARM", + "description_x64": "Dla większości dystrybucji Linux, kompatybilnych z architekturą x86_64.", + "description_arm64": "Dla dystrybucji ARM Linux kompatybilnych z architekturą aarch64.", + "quick_start": "Wybierz odpowiedni format paczki, w zależności od twojej dystrybucji:", + "download_deb": ".deb", + "download_rpm": ".rpm", + "download_flatpak": ".flatpak", + "download_zip": "Wersja przenośna - Portable (.zip)", + "download_nixpkgs": "nixpkgs", + "download_aur": "AUR" + }, + "download_helper_desktop_macos": { + "title_x64": "macOS z Intel", + "title_arm64": "macOS z Apple Silicon (ARM)", + "description_x64": "Dla macOS w wersji Big Sur i późniejszymi, z procesorem Intel.", + "description_arm64": "Dla produktów Apple z procesorami M1 i M2.", + "quick_start": "Instalacja przez Homebrew:", + "download_dmg": "Pobierz instalator (.dmg)", + "download_homebrew_cask": "Homebrew Cask", + "download_zip": "Wersja przenośna - Portable (.zip)" + }, + "download_helper_server_docker": { + "title": "Własny serwer przez Docker", + "description": "Łatwa instalacja na Windows, Linux albo macOS używając Docker container.", + "download_dockerhub": "Docker Hub", + "download_ghcr": "ghcr.io" + }, + "download_helper_server_linux": { + "title": "Własny serwer na Linux", + "description": "Wrzuć Trilium Notes na swój serwer albo VPS, kompatybilne z większością dystrybucji.", + "download_tar_x64": "x64 (.tar.xz)", + "download_tar_arm64": "ARM (.tar.xz)", + "download_nixos": "moduł NixOS" + }, + "download_helper_server_hosted": { + "title": "Płatny Serwer - Hosting", + "description": "Trilium Notes hostowane na PikaPods, płatnym serwisie dla łatwego dostępu i zarządzania. Bezpośrednio nie związanie z Trilium team.", + "download_pikapod": "Konfiguruj na PikaPods", + "download_triliumcc": "Alternatywnie patrz na trilium.cc" + } +} From 2d2e52f47b948de2fea4bd364c2320206bc94361 Mon Sep 17 00:00:00 2001 From: Sarah Hussein Date: Sat, 18 Oct 2025 05:42:45 +0200 Subject: [PATCH 038/103] Translated using Weblate (Arabic) Currently translated at 50.0% (73 of 146 strings) Translation: Trilium Notes/Website Translate-URL: https://hosted.weblate.org/projects/trilium/website/ar/ --- apps/website/public/translations/ar/translation.json | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/apps/website/public/translations/ar/translation.json b/apps/website/public/translations/ar/translation.json index 0b3bd3b44..ce83352fc 100644 --- a/apps/website/public/translations/ar/translation.json +++ b/apps/website/public/translations/ar/translation.json @@ -72,7 +72,8 @@ "download_scoop": "Scoop", "download_exe": "تحميل ملف التثبيت (exe.)", "title_x64": "ويندوز 64 بت", - "download_zip": "النسخة المحمولة بصيغة zip" + "download_zip": "النسخة المحمولة بصيغة zip", + "title_arm64": "نظام ويندوز عاى ARM" }, "download_helper_desktop_linux": { "download_deb": ".deb", @@ -81,7 +82,8 @@ "download_rpm": "rpm.", "download_flatpak": "flatpak.", "title_x64": "لينيكس 64 بت", - "download_zip": "النسخة المحمولة بصيغة zip" + "download_zip": "النسخة المحمولة بصيغة zip", + "title_arm64": "نظام لينكس على ARM" }, "download_helper_server_docker": { "download_ghcr": "ghcr.io", @@ -97,7 +99,8 @@ "download_now": { "text": "تنزيل الان ", "platform_small": "لاجل{{platform}}", - "linux_small": "لLinux" + "linux_small": "لLinux", + "linux_big": "اصدار v {{version}} لنظام لينكس" }, "faq": { "title": "الاسئلة المتكررة" From bb7cde786f4989bb5f81138f7e5a79cff1bd29d3 Mon Sep 17 00:00:00 2001 From: Giovi Date: Sat, 18 Oct 2025 14:18:33 +0200 Subject: [PATCH 039/103] Translated using Weblate (Italian) Currently translated at 33.5% (543 of 1618 strings) Translation: Trilium Notes/Client Translate-URL: https://hosted.weblate.org/projects/trilium/client/it/ --- apps/client/src/translations/it/translation.json | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/apps/client/src/translations/it/translation.json b/apps/client/src/translations/it/translation.json index f9cbeb6eb..53ee0b767 100644 --- a/apps/client/src/translations/it/translation.json +++ b/apps/client/src/translations/it/translation.json @@ -692,6 +692,14 @@ "help_text_body3": "In alternativa, è possibile aggiungere etichette e relazioni utilizzando il pulsante + sul lato destro.", "save_attributes": "Salva attributi ", "add_a_new_attribute": "Aggiungi un nuovo attributo", - "add_new_label": "Aggiungi nuova etichetta " + "add_new_label": "Aggiungi nuova etichetta ", + "add_new_relation": "Aggiungi nuova relazione ", + "add_new_relation_definition": "Aggiungi una nuova definizione di relazione", + "placeholder": "Digitare qui le etichette e le relazioni" + }, + "execute_script": { + "execute_script": "Esegui script", + "help_text": "È possibile eseguire semplici script sulle note abbinate.", + "example_1": "Ad esempio, per aggiungere una stringa al titolo di una nota, utilizzare questo piccolo script:" } } From 7d521218cf52b6f8a8cc93377ca0dba2edc193db Mon Sep 17 00:00:00 2001 From: kamykO Date: Sat, 18 Oct 2025 08:56:43 +0200 Subject: [PATCH 040/103] Translated using Weblate (Polish) Currently translated at 29.4% (476 of 1618 strings) Translation: Trilium Notes/Client Translate-URL: https://hosted.weblate.org/projects/trilium/client/pl/ --- apps/client/src/translations/pl/translation.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/client/src/translations/pl/translation.json b/apps/client/src/translations/pl/translation.json index 09f4225df..cd4c42395 100644 --- a/apps/client/src/translations/pl/translation.json +++ b/apps/client/src/translations/pl/translation.json @@ -6,7 +6,7 @@ "db_version": "Wersja bazy danych:", "sync_version": "Wersja synchronizacji:", "build_date": "Zbudowano:", - "build_revision": "Rewizja zbudowania:", + "build_revision": "Wersja:", "data_directory": "Katalog z danymi:" }, "toast": { From 89de9462545a599366011650780ac240b4fd6bdd Mon Sep 17 00:00:00 2001 From: Sarah Hussein Date: Mon, 20 Oct 2025 03:30:41 +0200 Subject: [PATCH 041/103] Translated using Weblate (Arabic) Currently translated at 60.4% (978 of 1618 strings) Translation: Trilium Notes/Client Translate-URL: https://hosted.weblate.org/projects/trilium/client/ar/ --- .../src/translations/ar/translation.json | 55 +++++++++++++++---- 1 file changed, 44 insertions(+), 11 deletions(-) diff --git a/apps/client/src/translations/ar/translation.json b/apps/client/src/translations/ar/translation.json index c2cc94554..8e9140ca7 100644 --- a/apps/client/src/translations/ar/translation.json +++ b/apps/client/src/translations/ar/translation.json @@ -329,7 +329,10 @@ "force_full_sync_button": "فرض مزامنة كاملة", "finished-successfully": "تم انتهاء المزامنة بنجاح.", "full_sync_triggered": "تم تشغيل المزامنة الكاملة", - "failed": "فشل في المزامنة: {{message}}" + "failed": "فشل في المزامنة: {{message}}", + "fill_entity_changes_button": "ملء سجلات تغييرات الكيانات", + "filling_entity_changes": "جار ملء صفوف تغييرات الكيانات", + "sync_rows_filled_successfully": "تمة تعبئة بيانات المزامنة بنجاح" }, "fonts": { "fonts": "خطوط", @@ -498,7 +501,8 @@ "max_width_unit": "بكسل", "title": "عرض المحتوى", "reload_button": "اعادة تحميل الواجهة", - "max_width_label": "اقصى عرض للمحتوى" + "max_width_label": "اقصى عرض للمحتوى", + "reload_description": "تغييرات من خيارات المظهر" }, "native_title_bar": { "enabled": "مفعل", @@ -519,7 +523,8 @@ "ui-performance": { "title": "أداء", "enable-shadows": "تفعيل الضلال", - "enable-smooth-scroll": "تمكين التمرير السلس" + "enable-smooth-scroll": "تمكين التمرير السلس", + "enable-motion": "تمكين الانتقالات والرسوم المتحركة" }, "ai_llm": { "progress": "تقدم", @@ -583,7 +588,8 @@ "start_indexing": "بدء الفهرسة", "chat": { "root_note_title": "دردشات AI", - "new_chat_title": "دردشة جديدة" + "new_chat_title": "دردشة جديدة", + "create_new_ai_chat": "انشاء دردشة AI جديدة" }, "selected_provider": "المزود المحدد", "select_model": "اختر النموذج...", @@ -611,7 +617,21 @@ "enable_ai": "تمكين خصائص AI/LLM", "reprocess_index": "اعادة بناء فهرس البحث", "index_rebuilding": "جار تحسين الفهرس {{percentage}}", - "voyage_configuration": "اعدادت Voyage AI" + "voyage_configuration": "اعدادت Voyage AI", + "openai_model_description": "الامثلة: gpt-4o, gpt-4-turbo, gpt-3.5-turbo", + "partial": "{{ percentage }} % مكتمل", + "retry_queued": "تم جدولة الملاحظة لاعادة المحاولة", + "max_notes_per_llm_query": "اكبر عدد للملاحظات لكل استعلام", + "remove_provider": "احذف المزود من البحث", + "restore_provider": "استعادة المزود الى البحث", + "reprocess_index_error": "حدث خطأ اثناء اعادة بناء فهرس البحث", + "auto_refresh_notice": "تحديث تلقائي كل {{seconds}} ثانية", + "note_queued_for_retry": "الملاحظة جاهزة لاعادة المحاولة لاحقا", + "failed_to_retry_note": "‎فشل في اعادة محاولة معالجة المحاولة", + "failed_to_retry_all": "فشل في اعادة محاولة معالجة الملاحظة", + "error_generating_response": "‌فشل في توليد استجابة من ال AI", + "create_new_ai_chat": "انشاء دردشة AI جديدة", + "error_fetching": "فشل في استرجاع النماذج: {{error}}" }, "code_auto_read_only_size": { "unit": "حروف", @@ -626,7 +646,8 @@ "enable_image_compression": "تمكين ضغط الصورة" }, "revisions_snapshot_limit": { - "snapshot_number_limit_unit": "لقطات" + "snapshot_number_limit_unit": "لقطات", + "note_revisions_snapshot_limit_title": "الحد الاقصى لنسخ الملاحظات الاحتياطية" }, "search_engine": { "bing": "Bing", @@ -1073,14 +1094,20 @@ "unprotecting-title": "الحالة الغير محمية", "protecting-finished-successfully": "تم الحماية بنجاح.", "unprotecting-finished-successfully": "تم ازالة الحماية بنجاح.", - "start_session_button": "البدء بالجلسة المحمية enter" + "start_session_button": "البدء بالجلسة المحمية enter", + "protecting-in-progress": "جار الحماية: {{count}}", + "unprotecting-in-progress-count": "‏جار الغاء الحماية: {{count}}" }, "relation_map": { "remove_note": "حذف الملاحظة", "edit_title": "تعديل العنوان", "rename_note": "اعادة تسمية الملاحظة", "remove_relation": "حذف العلاقة", - "default_new_note_title": "ملاحظة جديدة" + "default_new_note_title": "ملاحظة جديدة", + "open_in_new_tab": "فتح في تبويب جديد", + "enter_new_title": "ادخل عنوان ملاحظة جديدة:", + "note_not_found": "الملاحظة {{noteId}} غير موجودة!", + "cannot_match_transform": "تعذر مطابقة التحويل: {{transform}}" }, "web_view": { "web_view": "عرض الويب" @@ -1097,7 +1124,8 @@ "vacuum_database": { "title": "تحرير مساحة قاعدة البيانات", "button_text": "تحرير مساحة قاعدة البيانات", - "vacuuming_database": "جار تحرير مساحة قاعدة الييانات..." + "vacuuming_database": "جار تحرير مساحة قاعدة الييانات...", + "database_vacuumed": "تم تنظيف قاعدة البيانات" }, "ribbon": { "widgets": "ادوات الشريط" @@ -1106,7 +1134,8 @@ "use_vim_keybindings_in_code_notes": "اختصارات لوحة المفاتيح باسلوب Vim" }, "network_connections": { - "network_connections_title": "اتصالات الشبكة" + "network_connections_title": "اتصالات الشبكة", + "check_for_updates": "‪التحقق من وجود تحديثات تلقائية" }, "tray": { "title": "شريط النظام" @@ -1303,7 +1332,8 @@ }, "note_erasure_timeout": { "note_erasure_timeout_title": "مهلة مسح الملاحظة", - "erase_notes_after": "مسح الملاحظات بعد:" + "erase_notes_after": "مسح الملاحظات بعد:", + "erase_deleted_notes_now": "مسح الملاحظات المحذوفة الان" }, "ws": { "sync-check-failed": "فشل التحقق من المزامنة!" @@ -1333,5 +1363,8 @@ }, "abstract_search_option": { "remove_this_search_option": "حذف خيار البحث هذا" + }, + "revisions_snapshot_interval": { + "note_revisions_snapshot_interval_title": "الفاصل الزمني لنسخ الملاحظات الاحتياطية" } } From 7fbff43f17402ef28c692c648acce4ac19e932ab Mon Sep 17 00:00:00 2001 From: devmorkon Date: Sat, 18 Oct 2025 16:37:26 +0200 Subject: [PATCH 042/103] Translated using Weblate (Dutch) Currently translated at 15.6% (18 of 115 strings) Translation: Trilium Notes/README Translate-URL: https://hosted.weblate.org/projects/trilium/readme/nl/ --- docs/README-nl.md | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/docs/README-nl.md b/docs/README-nl.md index 933374ee3..a76d474f4 100644 --- a/docs/README-nl.md +++ b/docs/README-nl.md @@ -12,9 +12,9 @@ # Trilium Notes ![GitHub Sponsoren](https://img.shields.io/github/sponsors/eliandoran) -![LiberaPay patrons](https://img.shields.io/liberapay/patrons/ElianDoran)\ +![LiberaPay supporters](https://img.shields.io/liberapay/patrons/ElianDoran)\ ![Docker Pulls](https://img.shields.io/docker/pulls/triliumnext/trilium) -![GitHub Downloads (all assets, all +![GitHub Downloads (alle bestanden, alle releases)](https://img.shields.io/github/downloads/triliumnext/trilium/total)\ [![RelativeCI](https://badges.relative-ci.com/badges/Di5q7dz9daNDZ9UXi0Bp?branch=develop)](https://app.relative-ci.com/projects/Di5q7dz9daNDZ9UXi0Bp) [![Vertaling @@ -25,11 +25,12 @@ status](https://hosted.weblate.org/widget/trilium/svg-badge.svg)](https://hosted | [Japanese](./docs/README-ja.md) | [Italian](./docs/README-it.md) | [Spanish](./docs/README-es.md) -Trilium Notes is a free and open-source, cross-platform hierarchical note taking -application with focus on building large personal knowledge bases. +Trillium Notes is een gratis en open-source, platformonafhankelijke, +hiërarchische notitie-applicatie die zich richt op het opbouwen van grote +persoonlijke kennisbanken. -See [screenshots](https://triliumnext.github.io/Docs/Wiki/screenshot-tour) for -quick overview: +Bekijk [screenshots](https://triliumnext.github.io/Docs/Wiki/screenshot-tour) +voor een snel overzicht: Trilium Screenshot From 7ddecf32534d4facecf572e55ffc80bdb27ce095 Mon Sep 17 00:00:00 2001 From: kamykO Date: Sat, 18 Oct 2025 20:19:55 +0200 Subject: [PATCH 043/103] Translated using Weblate (Polish) Currently translated at 100.0% (146 of 146 strings) Translation: Trilium Notes/Website Translate-URL: https://hosted.weblate.org/projects/trilium/website/pl/ --- apps/website/public/translations/pl/translation.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/website/public/translations/pl/translation.json b/apps/website/public/translations/pl/translation.json index 2787eacc7..4d4c5df02 100644 --- a/apps/website/public/translations/pl/translation.json +++ b/apps/website/public/translations/pl/translation.json @@ -68,7 +68,7 @@ "calendar_title": "Kalendarze", "calendar_description": "Organizuj swoje prywatne i służbowe wydarzenia używając kalendarza. Miej plany pod kontrolą z tygodniowym, miesięcznym i rocznym podglądem. Twórz i edytuj wydarzenia w prosty i intuicyjny sposób.", "table_title": "Tabele", - "table_description": "Wyświetlaj i edytuj informacje o notatkach w tabelach na wiele sposobów dzięki wielu typom kolumn: Tekstowym, numerycznym, z polami wyboru, z datami i godzinami, zawierającym linki, z kolorowymi wypełnieniami i powiązaniami notatek. Możesz nawet wyświetlić całe drzewo hierarchii w tabeli!", + "table_description": "Wyświetlaj i edytuj informacje o notatkach w tabelach na wiele sposobów dzięki wielu typom kolumn: Tekstowym, numerycznym, z polami wyboru, z datami i godzinami, zawierającym linki, z kolorowymi wypełnieniami i powiązaniami notatek. Możesz nawet wyświetlić całe drzewo hierarchii w tabeli.", "board_title": "Tablice", "board_description": "Organizuj swoje zadania i postępy projektów w tablicach Kanban z prostym tworzeniem nowych elementów i kolumn, a możliwość graficznego ich przenoszenia ułatwi zmianę statusu i pozwoli zachować porządek.", "geomap_title": "Mapy", @@ -101,7 +101,7 @@ "download_now": { "text": "Pobierz teraz ", "platform_big": "v{{version}} dla {{platform}}", - "platform_small": "dla{{platform}}", + "platform_small": "dla {{platform}}", "linux_big": "v{{version}} dla Linuxa", "linux_small": "dla Linuxa", "more_platforms": "Więcej platform i konfiguracja serwera" From f88c0415affaeadd850c2618934c5c9d26dcfac1 Mon Sep 17 00:00:00 2001 From: devmorkon Date: Sat, 18 Oct 2025 16:40:05 +0200 Subject: [PATCH 044/103] Translated using Weblate (Dutch) Currently translated at 3.4% (5 of 146 strings) Translation: Trilium Notes/Website Translate-URL: https://hosted.weblate.org/projects/trilium/website/nl/ --- apps/website/public/translations/nl/translation.json | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/apps/website/public/translations/nl/translation.json b/apps/website/public/translations/nl/translation.json index 0967ef424..a618cf6a5 100644 --- a/apps/website/public/translations/nl/translation.json +++ b/apps/website/public/translations/nl/translation.json @@ -1 +1,9 @@ -{} +{ + "get-started": { + "title": "Aan de slag", + "desktop_title": "Download de desktop applicatie (v{{version}})", + "architecture": "Architectuur:", + "older_releases": "Bekijk oudere versies", + "server_title": "Richt een server in voor toegang vanaf meerdere apparaten" + } +} From 21fcc544fdd181acf4808062623981e3d4a00c1f Mon Sep 17 00:00:00 2001 From: Hosted Weblate Date: Mon, 20 Oct 2025 06:57:31 +0200 Subject: [PATCH 045/103] 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-ZH_CN.md | 7 +++++++ docs/README-ZH_TW.md | 7 +++++++ docs/README-ar.md | 7 +++++++ docs/README-ca.md | 7 +++++++ docs/README-cs.md | 7 +++++++ docs/README-de.md | 7 +++++++ docs/README-el.md | 7 +++++++ docs/README-es.md | 7 +++++++ docs/README-fa.md | 7 +++++++ docs/README-fi.md | 7 +++++++ docs/README-fr.md | 7 +++++++ docs/README-hr.md | 7 +++++++ docs/README-hu.md | 7 +++++++ docs/README-id.md | 7 +++++++ docs/README-it.md | 7 +++++++ docs/README-ja.md | 7 +++++++ docs/README-ko.md | 7 +++++++ docs/README-md.md | 7 +++++++ docs/README-nb_NO.md | 7 +++++++ docs/README-nl.md | 7 +++++++ docs/README-pl.md | 7 +++++++ docs/README-pt.md | 7 +++++++ docs/README-pt_BR.md | 7 +++++++ docs/README-ro.md | 7 +++++++ docs/README-ru.md | 7 +++++++ docs/README-sl.md | 7 +++++++ docs/README-sr.md | 7 +++++++ docs/README-sv.md | 7 +++++++ docs/README-tr.md | 7 +++++++ docs/README-uk.md | 7 +++++++ docs/README-vi.md | 7 +++++++ 31 files changed, 217 insertions(+) diff --git a/docs/README-ZH_CN.md b/docs/README-ZH_CN.md index 27dc1ca51..5ce69c1a8 100644 --- a/docs/README-ZH_CN.md +++ b/docs/README-ZH_CN.md @@ -30,6 +30,13 @@ Trilium Notes 是一款免费且开源、跨平台的阶层式笔记应用程序 Trilium Screenshot +## ⏬ Download +- [Latest release](https://github.com/TriliumNext/Trilium/releases/latest) – + stable version, recommended for most users. +- [Nightly build](https://github.com/TriliumNext/Trilium/releases/tag/nightly) – + unstable development version, updated daily with the latest features and + fixes. + ## 📖 文件 **请访问我们完整的文档:[docs.triliumnotes.org](https://docs.triliumnotes.org/)** diff --git a/docs/README-ZH_TW.md b/docs/README-ZH_TW.md index 510945e78..e71c04e58 100644 --- a/docs/README-ZH_TW.md +++ b/docs/README-ZH_TW.md @@ -30,6 +30,13 @@ Trilium Notes 是一款免費且開源、跨平台的階層式筆記應用程式 Trilium Screenshot +## ⏬ Download +- [Latest release](https://github.com/TriliumNext/Trilium/releases/latest) – + stable version, recommended for most users. +- [Nightly build](https://github.com/TriliumNext/Trilium/releases/tag/nightly) – + unstable development version, updated daily with the latest features and + fixes. + ## 📚 文件 **可以在 [docs.triliumnotes.org](https://docs.triliumnotes.org/) 查看完整使用說明** diff --git a/docs/README-ar.md b/docs/README-ar.md index b80cac4bf..a900c9394 100644 --- a/docs/README-ar.md +++ b/docs/README-ar.md @@ -33,6 +33,13 @@ quick overview: Trilium Screenshot +## ⏬ Download +- [Latest release](https://github.com/TriliumNext/Trilium/releases/latest) – + stable version, recommended for most users. +- [Nightly build](https://github.com/TriliumNext/Trilium/releases/tag/nightly) – + unstable development version, updated daily with the latest features and + fixes. + ## 📚توثيق **Visit our comprehensive documentation at diff --git a/docs/README-ca.md b/docs/README-ca.md index 586045a29..bba139cc9 100644 --- a/docs/README-ca.md +++ b/docs/README-ca.md @@ -33,6 +33,13 @@ quick overview: Trilium Screenshot +## ⏬ Download +- [Latest release](https://github.com/TriliumNext/Trilium/releases/latest) – + stable version, recommended for most users. +- [Nightly build](https://github.com/TriliumNext/Trilium/releases/tag/nightly) – + unstable development version, updated daily with the latest features and + fixes. + ## 📚 Documentation **Visit our comprehensive documentation at diff --git a/docs/README-cs.md b/docs/README-cs.md index 586045a29..bba139cc9 100644 --- a/docs/README-cs.md +++ b/docs/README-cs.md @@ -33,6 +33,13 @@ quick overview: Trilium Screenshot +## ⏬ Download +- [Latest release](https://github.com/TriliumNext/Trilium/releases/latest) – + stable version, recommended for most users. +- [Nightly build](https://github.com/TriliumNext/Trilium/releases/tag/nightly) – + unstable development version, updated daily with the latest features and + fixes. + ## 📚 Documentation **Visit our comprehensive documentation at diff --git a/docs/README-de.md b/docs/README-de.md index fc4e6714b..ca3dfc8e8 100644 --- a/docs/README-de.md +++ b/docs/README-de.md @@ -34,6 +34,13 @@ quick overview: Trilium Screenshot +## ⏬ Download +- [Latest release](https://github.com/TriliumNext/Trilium/releases/latest) – + stable version, recommended for most users. +- [Nightly build](https://github.com/TriliumNext/Trilium/releases/tag/nightly) – + unstable development version, updated daily with the latest features and + fixes. + ## 📚 Dokumentation **Visit our comprehensive documentation at diff --git a/docs/README-el.md b/docs/README-el.md index 586045a29..bba139cc9 100644 --- a/docs/README-el.md +++ b/docs/README-el.md @@ -33,6 +33,13 @@ quick overview: Trilium Screenshot +## ⏬ Download +- [Latest release](https://github.com/TriliumNext/Trilium/releases/latest) – + stable version, recommended for most users. +- [Nightly build](https://github.com/TriliumNext/Trilium/releases/tag/nightly) – + unstable development version, updated daily with the latest features and + fixes. + ## 📚 Documentation **Visit our comprehensive documentation at diff --git a/docs/README-es.md b/docs/README-es.md index 1fc626350..b345940a7 100644 --- a/docs/README-es.md +++ b/docs/README-es.md @@ -36,6 +36,13 @@ resumen rápido: Trilium Screenshot +## ⏬ Download +- [Latest release](https://github.com/TriliumNext/Trilium/releases/latest) – + stable version, recommended for most users. +- [Nightly build](https://github.com/TriliumNext/Trilium/releases/tag/nightly) – + unstable development version, updated daily with the latest features and + fixes. + ## 📚 Documentación **Accede a la documentación completa en diff --git a/docs/README-fa.md b/docs/README-fa.md index 586045a29..bba139cc9 100644 --- a/docs/README-fa.md +++ b/docs/README-fa.md @@ -33,6 +33,13 @@ quick overview: Trilium Screenshot +## ⏬ Download +- [Latest release](https://github.com/TriliumNext/Trilium/releases/latest) – + stable version, recommended for most users. +- [Nightly build](https://github.com/TriliumNext/Trilium/releases/tag/nightly) – + unstable development version, updated daily with the latest features and + fixes. + ## 📚 Documentation **Visit our comprehensive documentation at diff --git a/docs/README-fi.md b/docs/README-fi.md index 586045a29..bba139cc9 100644 --- a/docs/README-fi.md +++ b/docs/README-fi.md @@ -33,6 +33,13 @@ quick overview: Trilium Screenshot +## ⏬ Download +- [Latest release](https://github.com/TriliumNext/Trilium/releases/latest) – + stable version, recommended for most users. +- [Nightly build](https://github.com/TriliumNext/Trilium/releases/tag/nightly) – + unstable development version, updated daily with the latest features and + fixes. + ## 📚 Documentation **Visit our comprehensive documentation at diff --git a/docs/README-fr.md b/docs/README-fr.md index 586045a29..bba139cc9 100644 --- a/docs/README-fr.md +++ b/docs/README-fr.md @@ -33,6 +33,13 @@ quick overview: Trilium Screenshot +## ⏬ Download +- [Latest release](https://github.com/TriliumNext/Trilium/releases/latest) – + stable version, recommended for most users. +- [Nightly build](https://github.com/TriliumNext/Trilium/releases/tag/nightly) – + unstable development version, updated daily with the latest features and + fixes. + ## 📚 Documentation **Visit our comprehensive documentation at diff --git a/docs/README-hr.md b/docs/README-hr.md index 586045a29..bba139cc9 100644 --- a/docs/README-hr.md +++ b/docs/README-hr.md @@ -33,6 +33,13 @@ quick overview: Trilium Screenshot +## ⏬ Download +- [Latest release](https://github.com/TriliumNext/Trilium/releases/latest) – + stable version, recommended for most users. +- [Nightly build](https://github.com/TriliumNext/Trilium/releases/tag/nightly) – + unstable development version, updated daily with the latest features and + fixes. + ## 📚 Documentation **Visit our comprehensive documentation at diff --git a/docs/README-hu.md b/docs/README-hu.md index 586045a29..bba139cc9 100644 --- a/docs/README-hu.md +++ b/docs/README-hu.md @@ -33,6 +33,13 @@ quick overview: Trilium Screenshot +## ⏬ Download +- [Latest release](https://github.com/TriliumNext/Trilium/releases/latest) – + stable version, recommended for most users. +- [Nightly build](https://github.com/TriliumNext/Trilium/releases/tag/nightly) – + unstable development version, updated daily with the latest features and + fixes. + ## 📚 Documentation **Visit our comprehensive documentation at diff --git a/docs/README-id.md b/docs/README-id.md index 77a947acf..f1a7a02d0 100644 --- a/docs/README-id.md +++ b/docs/README-id.md @@ -34,6 +34,13 @@ untuk ikhtisar cepat: Trilium Screenshot +## ⏬ Download +- [Latest release](https://github.com/TriliumNext/Trilium/releases/latest) – + stable version, recommended for most users. +- [Nightly build](https://github.com/TriliumNext/Trilium/releases/tag/nightly) – + unstable development version, updated daily with the latest features and + fixes. + ## 📚 Dokumentasi **Kunjungi dokumentasi lengkap kami di diff --git a/docs/README-it.md b/docs/README-it.md index d7bc745bd..3e375980f 100644 --- a/docs/README-it.md +++ b/docs/README-it.md @@ -34,6 +34,13 @@ una panoramica veloce: Trilium Screenshot +## ⏬ Download +- [Latest release](https://github.com/TriliumNext/Trilium/releases/latest) – + stable version, recommended for most users. +- [Nightly build](https://github.com/TriliumNext/Trilium/releases/tag/nightly) – + unstable development version, updated daily with the latest features and + fixes. + ## 📚 Documentazione **Vedi tutta la documentazione su diff --git a/docs/README-ja.md b/docs/README-ja.md index f5caa13c0..5215aac57 100644 --- a/docs/README-ja.md +++ b/docs/README-ja.md @@ -32,6 +32,13 @@ Trilium Notes Trilium Screenshot +## ⏬ Download +- [Latest release](https://github.com/TriliumNext/Trilium/releases/latest) – + stable version, recommended for most users. +- [Nightly build](https://github.com/TriliumNext/Trilium/releases/tag/nightly) – + unstable development version, updated daily with the latest features and + fixes. + ## 📚 ドキュメント **包括的なドキュメントは [docs.triliumnotes.org](https://docs.triliumnotes.org/) でご覧ください** diff --git a/docs/README-ko.md b/docs/README-ko.md index 586045a29..bba139cc9 100644 --- a/docs/README-ko.md +++ b/docs/README-ko.md @@ -33,6 +33,13 @@ quick overview: Trilium Screenshot +## ⏬ Download +- [Latest release](https://github.com/TriliumNext/Trilium/releases/latest) – + stable version, recommended for most users. +- [Nightly build](https://github.com/TriliumNext/Trilium/releases/tag/nightly) – + unstable development version, updated daily with the latest features and + fixes. + ## 📚 Documentation **Visit our comprehensive documentation at diff --git a/docs/README-md.md b/docs/README-md.md index 586045a29..bba139cc9 100644 --- a/docs/README-md.md +++ b/docs/README-md.md @@ -33,6 +33,13 @@ quick overview: Trilium Screenshot +## ⏬ Download +- [Latest release](https://github.com/TriliumNext/Trilium/releases/latest) – + stable version, recommended for most users. +- [Nightly build](https://github.com/TriliumNext/Trilium/releases/tag/nightly) – + unstable development version, updated daily with the latest features and + fixes. + ## 📚 Documentation **Visit our comprehensive documentation at diff --git a/docs/README-nb_NO.md b/docs/README-nb_NO.md index 586045a29..bba139cc9 100644 --- a/docs/README-nb_NO.md +++ b/docs/README-nb_NO.md @@ -33,6 +33,13 @@ quick overview: Trilium Screenshot +## ⏬ Download +- [Latest release](https://github.com/TriliumNext/Trilium/releases/latest) – + stable version, recommended for most users. +- [Nightly build](https://github.com/TriliumNext/Trilium/releases/tag/nightly) – + unstable development version, updated daily with the latest features and + fixes. + ## 📚 Documentation **Visit our comprehensive documentation at diff --git a/docs/README-nl.md b/docs/README-nl.md index a76d474f4..23b6dc5d2 100644 --- a/docs/README-nl.md +++ b/docs/README-nl.md @@ -34,6 +34,13 @@ voor een snel overzicht: Trilium Screenshot +## ⏬ Download +- [Latest release](https://github.com/TriliumNext/Trilium/releases/latest) – + stable version, recommended for most users. +- [Nightly build](https://github.com/TriliumNext/Trilium/releases/tag/nightly) – + unstable development version, updated daily with the latest features and + fixes. + ## 📚 Documentatie **Bekijk onze beknopte documentatie op diff --git a/docs/README-pl.md b/docs/README-pl.md index 586045a29..bba139cc9 100644 --- a/docs/README-pl.md +++ b/docs/README-pl.md @@ -33,6 +33,13 @@ quick overview: Trilium Screenshot +## ⏬ Download +- [Latest release](https://github.com/TriliumNext/Trilium/releases/latest) – + stable version, recommended for most users. +- [Nightly build](https://github.com/TriliumNext/Trilium/releases/tag/nightly) – + unstable development version, updated daily with the latest features and + fixes. + ## 📚 Documentation **Visit our comprehensive documentation at diff --git a/docs/README-pt.md b/docs/README-pt.md index 586045a29..bba139cc9 100644 --- a/docs/README-pt.md +++ b/docs/README-pt.md @@ -33,6 +33,13 @@ quick overview: Trilium Screenshot +## ⏬ Download +- [Latest release](https://github.com/TriliumNext/Trilium/releases/latest) – + stable version, recommended for most users. +- [Nightly build](https://github.com/TriliumNext/Trilium/releases/tag/nightly) – + unstable development version, updated daily with the latest features and + fixes. + ## 📚 Documentation **Visit our comprehensive documentation at diff --git a/docs/README-pt_BR.md b/docs/README-pt_BR.md index 586045a29..bba139cc9 100644 --- a/docs/README-pt_BR.md +++ b/docs/README-pt_BR.md @@ -33,6 +33,13 @@ quick overview: Trilium Screenshot +## ⏬ Download +- [Latest release](https://github.com/TriliumNext/Trilium/releases/latest) – + stable version, recommended for most users. +- [Nightly build](https://github.com/TriliumNext/Trilium/releases/tag/nightly) – + unstable development version, updated daily with the latest features and + fixes. + ## 📚 Documentation **Visit our comprehensive documentation at diff --git a/docs/README-ro.md b/docs/README-ro.md index f28664671..9842cb319 100644 --- a/docs/README-ro.md +++ b/docs/README-ro.md @@ -34,6 +34,13 @@ ecran](https://triliumnext.github.io/Docs/Wiki/screenshot-tour): Trilium Screenshot +## ⏬ Download +- [Latest release](https://github.com/TriliumNext/Trilium/releases/latest) – + stable version, recommended for most users. +- [Nightly build](https://github.com/TriliumNext/Trilium/releases/tag/nightly) – + unstable development version, updated daily with the latest features and + fixes. + ## 📚 Documentație **Vizitați documentația noastră detaliată la diff --git a/docs/README-ru.md b/docs/README-ru.md index 5796e023b..d7d5af43f 100644 --- a/docs/README-ru.md +++ b/docs/README-ru.md @@ -33,6 +33,13 @@ Trilium Notes – это приложение для заметок с иера Trilium Screenshot +## ⏬ Download +- [Latest release](https://github.com/TriliumNext/Trilium/releases/latest) – + stable version, recommended for most users. +- [Nightly build](https://github.com/TriliumNext/Trilium/releases/tag/nightly) – + unstable development version, updated daily with the latest features and + fixes. + ## 📚 Документация **Visit our comprehensive documentation at diff --git a/docs/README-sl.md b/docs/README-sl.md index 586045a29..bba139cc9 100644 --- a/docs/README-sl.md +++ b/docs/README-sl.md @@ -33,6 +33,13 @@ quick overview: Trilium Screenshot +## ⏬ Download +- [Latest release](https://github.com/TriliumNext/Trilium/releases/latest) – + stable version, recommended for most users. +- [Nightly build](https://github.com/TriliumNext/Trilium/releases/tag/nightly) – + unstable development version, updated daily with the latest features and + fixes. + ## 📚 Documentation **Visit our comprehensive documentation at diff --git a/docs/README-sr.md b/docs/README-sr.md index 586045a29..bba139cc9 100644 --- a/docs/README-sr.md +++ b/docs/README-sr.md @@ -33,6 +33,13 @@ quick overview: Trilium Screenshot +## ⏬ Download +- [Latest release](https://github.com/TriliumNext/Trilium/releases/latest) – + stable version, recommended for most users. +- [Nightly build](https://github.com/TriliumNext/Trilium/releases/tag/nightly) – + unstable development version, updated daily with the latest features and + fixes. + ## 📚 Documentation **Visit our comprehensive documentation at diff --git a/docs/README-sv.md b/docs/README-sv.md index daf23eb4b..262f13a24 100644 --- a/docs/README-sv.md +++ b/docs/README-sv.md @@ -33,6 +33,13 @@ quick overview: Trilium Screenshot +## ⏬ Download +- [Latest release](https://github.com/TriliumNext/Trilium/releases/latest) – + stable version, recommended for most users. +- [Nightly build](https://github.com/TriliumNext/Trilium/releases/tag/nightly) – + unstable development version, updated daily with the latest features and + fixes. + ## 📚 Documentation **Visit our comprehensive documentation at diff --git a/docs/README-tr.md b/docs/README-tr.md index 586045a29..bba139cc9 100644 --- a/docs/README-tr.md +++ b/docs/README-tr.md @@ -33,6 +33,13 @@ quick overview: Trilium Screenshot +## ⏬ Download +- [Latest release](https://github.com/TriliumNext/Trilium/releases/latest) – + stable version, recommended for most users. +- [Nightly build](https://github.com/TriliumNext/Trilium/releases/tag/nightly) – + unstable development version, updated daily with the latest features and + fixes. + ## 📚 Documentation **Visit our comprehensive documentation at diff --git a/docs/README-uk.md b/docs/README-uk.md index 586045a29..bba139cc9 100644 --- a/docs/README-uk.md +++ b/docs/README-uk.md @@ -33,6 +33,13 @@ quick overview: Trilium Screenshot +## ⏬ Download +- [Latest release](https://github.com/TriliumNext/Trilium/releases/latest) – + stable version, recommended for most users. +- [Nightly build](https://github.com/TriliumNext/Trilium/releases/tag/nightly) – + unstable development version, updated daily with the latest features and + fixes. + ## 📚 Documentation **Visit our comprehensive documentation at diff --git a/docs/README-vi.md b/docs/README-vi.md index 0c3f5a796..dd5ab7b66 100644 --- a/docs/README-vi.md +++ b/docs/README-vi.md @@ -33,6 +33,13 @@ Xem [ảnh chụp màn hình](https://triliumnext.github.io/Docs/Wiki/screenshot Trilium Screenshot +## ⏬ Download +- [Latest release](https://github.com/TriliumNext/Trilium/releases/latest) – + stable version, recommended for most users. +- [Nightly build](https://github.com/TriliumNext/Trilium/releases/tag/nightly) – + unstable development version, updated daily with the latest features and + fixes. + ## 📚 Tài Liệu **Truy cập tài liệu toàn diện của chúng tôi tại From ddbf12fa7094b6ff76cbac13fb57dcaccf0f5a38 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 20 Oct 2025 06:16:00 +0000 Subject: [PATCH 046/103] chore(deps): update dependency @types/node to v22.18.11 --- _regroup/package.json | 2 +- package.json | 2 +- pnpm-lock.yaml | 253 +++++++++++++++++++++--------------------- 3 files changed, 130 insertions(+), 127 deletions(-) diff --git a/_regroup/package.json b/_regroup/package.json index 46ea00999..5291b203a 100644 --- a/_regroup/package.json +++ b/_regroup/package.json @@ -38,7 +38,7 @@ "@playwright/test": "1.56.0", "@stylistic/eslint-plugin": "5.5.0", "@types/express": "5.0.3", - "@types/node": "22.18.10", + "@types/node": "22.18.11", "@types/yargs": "17.0.33", "@vitest/coverage-v8": "3.2.4", "eslint": "9.38.0", diff --git a/package.json b/package.json index 285498026..0a4dbe2e0 100644 --- a/package.json +++ b/package.json @@ -40,7 +40,7 @@ "@playwright/test": "1.56.0", "@triliumnext/server": "workspace:*", "@types/express": "5.0.3", - "@types/node": "22.18.10", + "@types/node": "22.18.11", "@vitest/coverage-v8": "3.2.4", "@vitest/ui": "3.2.4", "chalk": "5.6.2", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index ed746c2b8..ba95a0eb3 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -50,8 +50,8 @@ importers: specifier: 5.0.3 version: 5.0.3 '@types/node': - specifier: 22.18.10 - version: 22.18.10 + specifier: 22.18.11 + version: 22.18.11 '@vitest/coverage-v8': specifier: 3.2.4 version: 3.2.4(@vitest/browser@3.2.4)(vitest@3.2.4) @@ -96,7 +96,7 @@ importers: version: 0.18.0 rollup-plugin-webpack-stats: specifier: 2.1.6 - version: 2.1.6(rolldown@1.0.0-beta.29)(rollup@4.52.0)(vite@7.1.10(@types/node@22.18.10)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) + version: 2.1.6(rolldown@1.0.0-beta.29)(rollup@4.52.0)(vite@7.1.10(@types/node@22.18.11)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) tslib: specifier: 2.8.1 version: 2.8.1 @@ -114,13 +114,13 @@ importers: version: 2.0.1 vite: specifier: 7.1.10 - version: 7.1.10(@types/node@22.18.10)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) + version: 7.1.10(@types/node@22.18.11)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) vite-plugin-dts: specifier: ~4.5.0 - version: 4.5.4(@types/node@22.18.10)(rollup@4.52.0)(typescript@5.9.3)(vite@7.1.10(@types/node@22.18.10)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) + version: 4.5.4(@types/node@22.18.11)(rollup@4.52.0)(typescript@5.9.3)(vite@7.1.10(@types/node@22.18.11)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) vitest: specifier: 3.2.4 - version: 3.2.4(@types/debug@4.1.12)(@types/node@22.18.10)(@vitest/browser@3.2.4)(@vitest/ui@3.2.4)(happy-dom@20.0.7)(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.1)(msw@2.7.5(@types/node@22.18.10)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) + version: 3.2.4(@types/debug@4.1.12)(@types/node@22.18.11)(@vitest/browser@3.2.4)(@vitest/ui@3.2.4)(happy-dom@20.0.7)(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.1)(msw@2.7.5(@types/node@22.18.11)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) apps/client: dependencies: @@ -853,7 +853,7 @@ importers: version: 5.0.0 '@ckeditor/ckeditor5-package-tools': specifier: 4.1.1 - version: 4.1.1(@swc/core@1.11.29(@swc/helpers@0.5.17))(@types/node@22.18.10)(bufferutil@4.0.9)(esbuild@0.25.11)(utf-8-validate@6.0.5) + version: 4.1.1(@swc/core@1.11.29(@swc/helpers@0.5.17))(@types/node@22.18.11)(bufferutil@4.0.9)(esbuild@0.25.11)(utf-8-validate@6.0.5) '@typescript-eslint/eslint-plugin': specifier: ~8.46.0 version: 8.46.1(@typescript-eslint/parser@8.46.1(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) @@ -862,7 +862,7 @@ importers: version: 8.46.1(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) '@vitest/browser': specifier: 3.2.4 - version: 3.2.4(bufferutil@4.0.9)(msw@2.7.5(@types/node@22.18.10)(typescript@5.9.3))(playwright@1.56.0)(utf-8-validate@6.0.5)(vite@7.1.10(@types/node@22.18.10)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))(vitest@3.2.4)(webdriverio@9.20.0(bufferutil@4.0.9)(utf-8-validate@6.0.5)) + version: 3.2.4(bufferutil@4.0.9)(msw@2.7.5(@types/node@22.18.11)(typescript@5.9.3))(playwright@1.56.0)(utf-8-validate@6.0.5)(vite@7.1.10(@types/node@22.18.11)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))(vitest@3.2.4)(webdriverio@9.20.0(bufferutil@4.0.9)(utf-8-validate@6.0.5)) '@vitest/coverage-istanbul': specifier: 3.2.4 version: 3.2.4(vitest@3.2.4) @@ -889,16 +889,16 @@ importers: version: 12.1.1(stylelint@16.25.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@22.18.10)(typescript@5.9.3) + version: 10.9.2(@swc/core@1.11.29(@swc/helpers@0.5.17))(@types/node@22.18.11)(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.1.10(@types/node@22.18.10)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) + version: 2.0.0(typescript@5.9.3)(vite@7.1.10(@types/node@22.18.11)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) vitest: specifier: 3.2.4 - version: 3.2.4(@types/debug@4.1.12)(@types/node@22.18.10)(@vitest/browser@3.2.4)(@vitest/ui@3.2.4)(happy-dom@20.0.7)(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.1)(msw@2.7.5(@types/node@22.18.10)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) + version: 3.2.4(@types/debug@4.1.12)(@types/node@22.18.11)(@vitest/browser@3.2.4)(@vitest/ui@3.2.4)(happy-dom@20.0.7)(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.1)(msw@2.7.5(@types/node@22.18.11)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) webdriverio: specifier: 9.20.0 version: 9.20.0(bufferutil@4.0.9)(utf-8-validate@6.0.5) @@ -913,7 +913,7 @@ importers: version: 5.0.0 '@ckeditor/ckeditor5-package-tools': specifier: 4.1.1 - version: 4.1.1(@swc/core@1.11.29(@swc/helpers@0.5.17))(@types/node@22.18.10)(bufferutil@4.0.9)(esbuild@0.25.11)(utf-8-validate@6.0.5) + version: 4.1.1(@swc/core@1.11.29(@swc/helpers@0.5.17))(@types/node@22.18.11)(bufferutil@4.0.9)(esbuild@0.25.11)(utf-8-validate@6.0.5) '@typescript-eslint/eslint-plugin': specifier: ~8.46.0 version: 8.46.1(@typescript-eslint/parser@8.46.1(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) @@ -922,7 +922,7 @@ importers: version: 8.46.1(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) '@vitest/browser': specifier: 3.2.4 - version: 3.2.4(bufferutil@4.0.9)(msw@2.7.5(@types/node@22.18.10)(typescript@5.9.3))(playwright@1.56.0)(utf-8-validate@6.0.5)(vite@7.1.10(@types/node@22.18.10)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))(vitest@3.2.4)(webdriverio@9.20.0(bufferutil@4.0.9)(utf-8-validate@6.0.5)) + version: 3.2.4(bufferutil@4.0.9)(msw@2.7.5(@types/node@22.18.11)(typescript@5.9.3))(playwright@1.56.0)(utf-8-validate@6.0.5)(vite@7.1.10(@types/node@22.18.11)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))(vitest@3.2.4)(webdriverio@9.20.0(bufferutil@4.0.9)(utf-8-validate@6.0.5)) '@vitest/coverage-istanbul': specifier: 3.2.4 version: 3.2.4(vitest@3.2.4) @@ -949,16 +949,16 @@ importers: version: 12.1.1(stylelint@16.25.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@22.18.10)(typescript@5.9.3) + version: 10.9.2(@swc/core@1.11.29(@swc/helpers@0.5.17))(@types/node@22.18.11)(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.1.10(@types/node@22.18.10)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) + version: 2.0.0(typescript@5.9.3)(vite@7.1.10(@types/node@22.18.11)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) vitest: specifier: 3.2.4 - version: 3.2.4(@types/debug@4.1.12)(@types/node@22.18.10)(@vitest/browser@3.2.4)(@vitest/ui@3.2.4)(happy-dom@20.0.7)(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.1)(msw@2.7.5(@types/node@22.18.10)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) + version: 3.2.4(@types/debug@4.1.12)(@types/node@22.18.11)(@vitest/browser@3.2.4)(@vitest/ui@3.2.4)(happy-dom@20.0.7)(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.1)(msw@2.7.5(@types/node@22.18.11)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) webdriverio: specifier: 9.20.0 version: 9.20.0(bufferutil@4.0.9)(utf-8-validate@6.0.5) @@ -973,7 +973,7 @@ importers: version: 5.0.0 '@ckeditor/ckeditor5-package-tools': specifier: 4.1.1 - version: 4.1.1(@swc/core@1.11.29(@swc/helpers@0.5.17))(@types/node@22.18.10)(bufferutil@4.0.9)(esbuild@0.25.11)(utf-8-validate@6.0.5) + version: 4.1.1(@swc/core@1.11.29(@swc/helpers@0.5.17))(@types/node@22.18.11)(bufferutil@4.0.9)(esbuild@0.25.11)(utf-8-validate@6.0.5) '@typescript-eslint/eslint-plugin': specifier: ~8.46.0 version: 8.46.1(@typescript-eslint/parser@8.46.1(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) @@ -982,7 +982,7 @@ importers: version: 8.46.1(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) '@vitest/browser': specifier: 3.2.4 - version: 3.2.4(bufferutil@4.0.9)(msw@2.7.5(@types/node@22.18.10)(typescript@5.9.3))(playwright@1.56.0)(utf-8-validate@6.0.5)(vite@7.1.10(@types/node@22.18.10)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))(vitest@3.2.4)(webdriverio@9.20.0(bufferutil@4.0.9)(utf-8-validate@6.0.5)) + version: 3.2.4(bufferutil@4.0.9)(msw@2.7.5(@types/node@22.18.11)(typescript@5.9.3))(playwright@1.56.0)(utf-8-validate@6.0.5)(vite@7.1.10(@types/node@22.18.11)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))(vitest@3.2.4)(webdriverio@9.20.0(bufferutil@4.0.9)(utf-8-validate@6.0.5)) '@vitest/coverage-istanbul': specifier: 3.2.4 version: 3.2.4(vitest@3.2.4) @@ -1009,16 +1009,16 @@ importers: version: 12.1.1(stylelint@16.25.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@22.18.10)(typescript@5.9.3) + version: 10.9.2(@swc/core@1.11.29(@swc/helpers@0.5.17))(@types/node@22.18.11)(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.1.10(@types/node@22.18.10)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) + version: 2.0.0(typescript@5.9.3)(vite@7.1.10(@types/node@22.18.11)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) vitest: specifier: 3.2.4 - version: 3.2.4(@types/debug@4.1.12)(@types/node@22.18.10)(@vitest/browser@3.2.4)(@vitest/ui@3.2.4)(happy-dom@20.0.7)(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.1)(msw@2.7.5(@types/node@22.18.10)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) + version: 3.2.4(@types/debug@4.1.12)(@types/node@22.18.11)(@vitest/browser@3.2.4)(@vitest/ui@3.2.4)(happy-dom@20.0.7)(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.1)(msw@2.7.5(@types/node@22.18.11)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) webdriverio: specifier: 9.20.0 version: 9.20.0(bufferutil@4.0.9)(utf-8-validate@6.0.5) @@ -1040,7 +1040,7 @@ importers: version: 5.0.0 '@ckeditor/ckeditor5-package-tools': specifier: 4.1.1 - version: 4.1.1(@swc/core@1.11.29(@swc/helpers@0.5.17))(@types/node@22.18.10)(bufferutil@4.0.9)(esbuild@0.25.11)(utf-8-validate@6.0.5) + version: 4.1.1(@swc/core@1.11.29(@swc/helpers@0.5.17))(@types/node@22.18.11)(bufferutil@4.0.9)(esbuild@0.25.11)(utf-8-validate@6.0.5) '@typescript-eslint/eslint-plugin': specifier: ~8.46.0 version: 8.46.1(@typescript-eslint/parser@8.46.1(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) @@ -1049,7 +1049,7 @@ importers: version: 8.46.1(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) '@vitest/browser': specifier: 3.2.4 - version: 3.2.4(bufferutil@4.0.9)(msw@2.7.5(@types/node@22.18.10)(typescript@5.9.3))(playwright@1.56.0)(utf-8-validate@6.0.5)(vite@7.1.10(@types/node@22.18.10)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))(vitest@3.2.4)(webdriverio@9.20.0(bufferutil@4.0.9)(utf-8-validate@6.0.5)) + version: 3.2.4(bufferutil@4.0.9)(msw@2.7.5(@types/node@22.18.11)(typescript@5.9.3))(playwright@1.56.0)(utf-8-validate@6.0.5)(vite@7.1.10(@types/node@22.18.11)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))(vitest@3.2.4)(webdriverio@9.20.0(bufferutil@4.0.9)(utf-8-validate@6.0.5)) '@vitest/coverage-istanbul': specifier: 3.2.4 version: 3.2.4(vitest@3.2.4) @@ -1076,16 +1076,16 @@ importers: version: 12.1.1(stylelint@16.25.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@22.18.10)(typescript@5.9.3) + version: 10.9.2(@swc/core@1.11.29(@swc/helpers@0.5.17))(@types/node@22.18.11)(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.1.10(@types/node@22.18.10)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) + version: 2.0.0(typescript@5.9.3)(vite@7.1.10(@types/node@22.18.11)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) vitest: specifier: 3.2.4 - version: 3.2.4(@types/debug@4.1.12)(@types/node@22.18.10)(@vitest/browser@3.2.4)(@vitest/ui@3.2.4)(happy-dom@20.0.7)(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.1)(msw@2.7.5(@types/node@22.18.10)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) + version: 3.2.4(@types/debug@4.1.12)(@types/node@22.18.11)(@vitest/browser@3.2.4)(@vitest/ui@3.2.4)(happy-dom@20.0.7)(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.1)(msw@2.7.5(@types/node@22.18.11)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) webdriverio: specifier: 9.20.0 version: 9.20.0(bufferutil@4.0.9)(utf-8-validate@6.0.5) @@ -1107,7 +1107,7 @@ importers: version: 5.0.0 '@ckeditor/ckeditor5-package-tools': specifier: 4.1.1 - version: 4.1.1(@swc/core@1.11.29(@swc/helpers@0.5.17))(@types/node@22.18.10)(bufferutil@4.0.9)(esbuild@0.25.11)(utf-8-validate@6.0.5) + version: 4.1.1(@swc/core@1.11.29(@swc/helpers@0.5.17))(@types/node@22.18.11)(bufferutil@4.0.9)(esbuild@0.25.11)(utf-8-validate@6.0.5) '@typescript-eslint/eslint-plugin': specifier: ~8.46.0 version: 8.46.1(@typescript-eslint/parser@8.46.1(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) @@ -1116,7 +1116,7 @@ importers: version: 8.46.1(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) '@vitest/browser': specifier: 3.2.4 - version: 3.2.4(bufferutil@4.0.9)(msw@2.7.5(@types/node@22.18.10)(typescript@5.9.3))(playwright@1.56.0)(utf-8-validate@6.0.5)(vite@7.1.10(@types/node@22.18.10)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))(vitest@3.2.4)(webdriverio@9.20.0(bufferutil@4.0.9)(utf-8-validate@6.0.5)) + version: 3.2.4(bufferutil@4.0.9)(msw@2.7.5(@types/node@22.18.11)(typescript@5.9.3))(playwright@1.56.0)(utf-8-validate@6.0.5)(vite@7.1.10(@types/node@22.18.11)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))(vitest@3.2.4)(webdriverio@9.20.0(bufferutil@4.0.9)(utf-8-validate@6.0.5)) '@vitest/coverage-istanbul': specifier: 3.2.4 version: 3.2.4(vitest@3.2.4) @@ -1143,16 +1143,16 @@ importers: version: 12.1.1(stylelint@16.25.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@22.18.10)(typescript@5.9.3) + version: 10.9.2(@swc/core@1.11.29(@swc/helpers@0.5.17))(@types/node@22.18.11)(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.1.10(@types/node@22.18.10)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) + version: 2.0.0(typescript@5.9.3)(vite@7.1.10(@types/node@22.18.11)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) vitest: specifier: 3.2.4 - version: 3.2.4(@types/debug@4.1.12)(@types/node@22.18.10)(@vitest/browser@3.2.4)(@vitest/ui@3.2.4)(happy-dom@20.0.7)(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.1)(msw@2.7.5(@types/node@22.18.10)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) + version: 3.2.4(@types/debug@4.1.12)(@types/node@22.18.11)(@vitest/browser@3.2.4)(@vitest/ui@3.2.4)(happy-dom@20.0.7)(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.1)(msw@2.7.5(@types/node@22.18.11)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) webdriverio: specifier: 9.20.0 version: 9.20.0(bufferutil@4.0.9)(utf-8-validate@6.0.5) @@ -5018,6 +5018,9 @@ packages: '@types/node@22.18.10': resolution: {integrity: sha512-anNG/V/Efn/YZY4pRzbACnKxNKoBng2VTFydVu8RRs5hQjikP8CQfaeAV59VFSCzKNp90mXiVXW2QzV56rwMrg==} + '@types/node@22.18.11': + resolution: {integrity: sha512-Gd33J2XIrXurb+eT2ktze3rJAfAp9ZNjlBdh4SVgyrKEOADwCbdUDaK7QgJno8Ue4kcajscsKqu6n8OBG3hhCQ==} + '@types/node@22.18.8': resolution: {integrity: sha512-pAZSHMiagDR7cARo/cch1f3rXy0AEXwsVsVH09FcyeJVAzCnGgmYis7P3JidtTUjyadhTeSo8TgRPswstghDaw==} @@ -14689,8 +14692,6 @@ snapshots: '@ckeditor/ckeditor5-core': 47.1.0 '@ckeditor/ckeditor5-upload': 47.1.0 ckeditor5: 47.1.0(patch_hash=8331a09d41443b39ea1c784daaccfeb0da4f9065ed556e7de92e9c77edd9eb41) - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-ai@47.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5)': dependencies: @@ -14900,8 +14901,6 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.1.0 '@ckeditor/ckeditor5-watchdog': 47.1.0 es-toolkit: 1.39.5 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-dev-build-tools@43.1.0(@swc/helpers@0.5.17)(tslib@2.8.1)(typescript@5.9.3)': dependencies: @@ -15093,6 +15092,8 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.1.0 ckeditor5: 47.1.0(patch_hash=8331a09d41443b39ea1c784daaccfeb0da4f9065ed556e7de92e9c77edd9eb41) es-toolkit: 1.39.5 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-editor-multi-root@47.1.0': dependencies: @@ -15262,8 +15263,6 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.1.0 '@ckeditor/ckeditor5-widget': 47.1.0 ckeditor5: 47.1.0(patch_hash=8331a09d41443b39ea1c784daaccfeb0da4f9065ed556e7de92e9c77edd9eb41) - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-html-embed@47.1.0': dependencies: @@ -15481,7 +15480,7 @@ snapshots: es-toolkit: 1.39.5 protobufjs: 7.5.0 - '@ckeditor/ckeditor5-package-tools@4.1.1(@swc/core@1.11.29(@swc/helpers@0.5.17))(@types/node@22.18.10)(bufferutil@4.0.9)(esbuild@0.25.11)(utf-8-validate@6.0.5)': + '@ckeditor/ckeditor5-package-tools@4.1.1(@swc/core@1.11.29(@swc/helpers@0.5.17))(@types/node@22.18.11)(bufferutil@4.0.9)(esbuild@0.25.11)(utf-8-validate@6.0.5)': dependencies: '@ckeditor/ckeditor5-dev-translations': 53.2.0(@swc/core@1.11.29(@swc/helpers@0.5.17))(esbuild@0.25.11)(typescript@5.0.4)(webpack@5.101.3(@swc/core@1.11.29(@swc/helpers@0.5.17))(esbuild@0.25.11)) '@ckeditor/ckeditor5-dev-utils': 53.2.0(@swc/core@1.11.29(@swc/helpers@0.5.17))(esbuild@0.25.11)(typescript@5.0.4)(webpack@5.101.3(@swc/core@1.11.29(@swc/helpers@0.5.17))(esbuild@0.25.11)) @@ -15500,7 +15499,7 @@ snapshots: stylelint-config-ckeditor5: 2.0.1(stylelint@16.25.0(typescript@5.9.3)) terser-webpack-plugin: 5.3.14(@swc/core@1.11.29(@swc/helpers@0.5.17))(esbuild@0.25.11)(webpack@5.101.3(@swc/core@1.11.29(@swc/helpers@0.5.17))(esbuild@0.25.11)) 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.25.11)) - ts-node: 10.9.2(@swc/core@1.11.29(@swc/helpers@0.5.17))(@types/node@22.18.10)(typescript@5.0.4) + ts-node: 10.9.2(@swc/core@1.11.29(@swc/helpers@0.5.17))(@types/node@22.18.11)(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.25.11) @@ -16346,7 +16345,7 @@ snapshots: make-fetch-happen: 10.2.1 nopt: 6.0.0 proc-log: 2.0.1 - semver: 7.7.2 + semver: 7.7.3 tar: 6.2.1 which: 2.0.2 transitivePeerDependencies: @@ -17038,26 +17037,26 @@ snapshots: '@inquirer/core': 9.2.1 '@inquirer/type': 2.0.0 - '@inquirer/confirm@5.1.19(@types/node@22.18.10)': + '@inquirer/confirm@5.1.19(@types/node@22.18.11)': dependencies: - '@inquirer/core': 10.3.0(@types/node@22.18.10) - '@inquirer/type': 3.0.9(@types/node@22.18.10) + '@inquirer/core': 10.3.0(@types/node@22.18.11) + '@inquirer/type': 3.0.9(@types/node@22.18.11) optionalDependencies: - '@types/node': 22.18.10 + '@types/node': 22.18.11 optional: true - '@inquirer/core@10.3.0(@types/node@22.18.10)': + '@inquirer/core@10.3.0(@types/node@22.18.11)': dependencies: '@inquirer/ansi': 1.0.1 '@inquirer/figures': 1.0.14 - '@inquirer/type': 3.0.9(@types/node@22.18.10) + '@inquirer/type': 3.0.9(@types/node@22.18.11) 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': 22.18.10 + '@types/node': 22.18.11 optional: true '@inquirer/core@9.2.1': @@ -17065,7 +17064,7 @@ snapshots: '@inquirer/figures': 1.0.13 '@inquirer/type': 2.0.0 '@types/mute-stream': 0.0.4 - '@types/node': 22.18.10 + '@types/node': 22.18.11 '@types/wrap-ansi': 3.0.0 ansi-escapes: 4.3.2 cli-width: 4.1.0 @@ -17150,9 +17149,9 @@ snapshots: dependencies: mute-stream: 1.0.0 - '@inquirer/type@3.0.9(@types/node@22.18.10)': + '@inquirer/type@3.0.9(@types/node@22.18.11)': optionalDependencies: - '@types/node': 22.18.10 + '@types/node': 22.18.11 optional: true '@isaacs/balanced-match@4.0.1': {} @@ -17589,23 +17588,23 @@ snapshots: dependencies: langium: 3.3.1 - '@microsoft/api-extractor-model@7.30.6(@types/node@22.18.10)': + '@microsoft/api-extractor-model@7.30.6(@types/node@22.18.11)': dependencies: '@microsoft/tsdoc': 0.15.1 '@microsoft/tsdoc-config': 0.17.1 - '@rushstack/node-core-library': 5.13.1(@types/node@22.18.10) + '@rushstack/node-core-library': 5.13.1(@types/node@22.18.11) transitivePeerDependencies: - '@types/node' - '@microsoft/api-extractor@7.52.8(@types/node@22.18.10)': + '@microsoft/api-extractor@7.52.8(@types/node@22.18.11)': dependencies: - '@microsoft/api-extractor-model': 7.30.6(@types/node@22.18.10) + '@microsoft/api-extractor-model': 7.30.6(@types/node@22.18.11) '@microsoft/tsdoc': 0.15.1 '@microsoft/tsdoc-config': 0.17.1 - '@rushstack/node-core-library': 5.13.1(@types/node@22.18.10) + '@rushstack/node-core-library': 5.13.1(@types/node@22.18.11) '@rushstack/rig-package': 0.5.3 - '@rushstack/terminal': 0.15.3(@types/node@22.18.10) - '@rushstack/ts-command-line': 5.0.1(@types/node@22.18.10) + '@rushstack/terminal': 0.15.3(@types/node@22.18.11) + '@rushstack/ts-command-line': 5.0.1(@types/node@22.18.11) lodash: 4.17.21 minimatch: 3.0.8 resolve: 1.22.10 @@ -17693,7 +17692,7 @@ snapshots: '@npmcli/fs@2.1.2': dependencies: '@gar/promisify': 1.1.3 - semver: 7.7.2 + semver: 7.7.3 '@npmcli/fs@4.0.0': dependencies: @@ -18476,7 +18475,7 @@ snapshots: '@rollup/rollup-win32-x64-msvc@4.52.0': optional: true - '@rushstack/node-core-library@5.13.1(@types/node@22.18.10)': + '@rushstack/node-core-library@5.13.1(@types/node@22.18.11)': dependencies: ajv: 8.13.0 ajv-draft-04: 1.0.0(ajv@8.13.0) @@ -18487,23 +18486,23 @@ snapshots: resolve: 1.22.10 semver: 7.5.4 optionalDependencies: - '@types/node': 22.18.10 + '@types/node': 22.18.11 '@rushstack/rig-package@0.5.3': dependencies: resolve: 1.22.10 strip-json-comments: 3.1.1 - '@rushstack/terminal@0.15.3(@types/node@22.18.10)': + '@rushstack/terminal@0.15.3(@types/node@22.18.11)': dependencies: - '@rushstack/node-core-library': 5.13.1(@types/node@22.18.10) + '@rushstack/node-core-library': 5.13.1(@types/node@22.18.11) supports-color: 8.1.1 optionalDependencies: - '@types/node': 22.18.10 + '@types/node': 22.18.11 - '@rushstack/ts-command-line@5.0.1(@types/node@22.18.10)': + '@rushstack/ts-command-line@5.0.1(@types/node@22.18.11)': dependencies: - '@rushstack/terminal': 0.15.3(@types/node@22.18.10) + '@rushstack/terminal': 0.15.3(@types/node@22.18.11) '@types/argparse': 1.0.38 argparse: 1.0.10 string-argv: 0.3.2 @@ -19013,7 +19012,7 @@ snapshots: '@types/appdmg@0.5.5': dependencies: - '@types/node': 22.18.10 + '@types/node': 22.18.11 optional: true '@types/archiver@6.0.3': @@ -19031,11 +19030,11 @@ snapshots: '@types/body-parser@1.19.6': dependencies: '@types/connect': 3.4.38 - '@types/node': 22.18.10 + '@types/node': 22.18.11 '@types/bonjour@3.5.13': dependencies: - '@types/node': 22.18.10 + '@types/node': 22.18.11 '@types/bootstrap@5.2.10': dependencies: @@ -19045,7 +19044,7 @@ snapshots: dependencies: '@types/http-cache-semantics': 4.0.4 '@types/keyv': 3.1.4 - '@types/node': 22.18.10 + '@types/node': 22.18.11 '@types/responselike': 1.0.3 '@types/chai@5.2.2': @@ -19070,11 +19069,11 @@ snapshots: '@types/connect-history-api-fallback@1.5.4': dependencies: '@types/express-serve-static-core': 5.1.0 - '@types/node': 22.18.10 + '@types/node': 22.18.11 '@types/connect@3.4.38': dependencies: - '@types/node': 22.18.10 + '@types/node': 22.18.11 '@types/cookie-parser@1.4.9(@types/express@5.0.3)': dependencies: @@ -19242,7 +19241,7 @@ snapshots: '@types/express-serve-static-core@5.1.0': dependencies: - '@types/node': 22.18.10 + '@types/node': 22.18.11 '@types/qs': 6.14.0 '@types/range-parser': 1.2.7 '@types/send': 0.17.5 @@ -19271,7 +19270,7 @@ snapshots: '@types/fs-extra@9.0.13': dependencies: - '@types/node': 22.18.10 + '@types/node': 22.18.11 optional: true '@types/geojson-vt@3.2.5': @@ -19283,7 +19282,7 @@ snapshots: '@types/glob@7.2.0': dependencies: '@types/minimatch': 5.1.2 - '@types/node': 22.18.10 + '@types/node': 22.18.11 '@types/hast@3.0.4': dependencies: @@ -19297,7 +19296,7 @@ snapshots: '@types/http-proxy@1.17.16': dependencies: - '@types/node': 22.18.10 + '@types/node': 22.18.11 '@types/ini@4.1.1': {} @@ -19311,11 +19310,11 @@ snapshots: '@types/jsonfile@6.1.4': dependencies: - '@types/node': 22.18.10 + '@types/node': 22.18.11 '@types/keyv@3.1.4': dependencies: - '@types/node': 22.18.10 + '@types/node': 22.18.11 '@types/leaflet-gpx@1.3.8': dependencies: @@ -19365,11 +19364,11 @@ snapshots: '@types/mute-stream@0.0.4': dependencies: - '@types/node': 22.18.10 + '@types/node': 22.18.11 '@types/node-forge@1.3.14': dependencies: - '@types/node': 22.18.10 + '@types/node': 22.18.11 '@types/node@16.9.1': {} @@ -19393,6 +19392,10 @@ snapshots: dependencies: undici-types: 6.21.0 + '@types/node@22.18.11': + dependencies: + undici-types: 6.21.0 + '@types/node@22.18.8': dependencies: undici-types: 6.21.0 @@ -19426,13 +19429,13 @@ snapshots: '@types/readdir-glob@1.1.5': dependencies: - '@types/node': 22.18.10 + '@types/node': 22.18.11 '@types/resolve@1.20.2': {} '@types/responselike@1.0.3': dependencies: - '@types/node': 22.18.10 + '@types/node': 22.18.11 '@types/retry@0.12.2': {} @@ -19451,7 +19454,7 @@ snapshots: '@types/send@0.17.5': dependencies: '@types/mime': 1.3.5 - '@types/node': 22.18.10 + '@types/node': 22.18.11 '@types/serve-favicon@2.5.7': dependencies: @@ -19478,7 +19481,7 @@ snapshots: '@types/sockjs@0.3.36': dependencies: - '@types/node': 22.18.10 + '@types/node': 22.18.11 '@types/statuses@2.0.6': optional: true @@ -19491,7 +19494,7 @@ snapshots: dependencies: '@types/cookiejar': 2.1.5 '@types/methods': 1.1.4 - '@types/node': 22.18.10 + '@types/node': 22.18.11 form-data: 4.0.4 '@types/supercluster@7.1.3': @@ -19514,7 +19517,7 @@ snapshots: '@types/through2@2.0.41': dependencies: - '@types/node': 22.18.10 + '@types/node': 22.18.11 '@types/tmp@0.2.6': {} @@ -19552,7 +19555,7 @@ snapshots: '@types/yauzl@2.10.3': dependencies: - '@types/node': 22.18.10 + '@types/node': 22.18.11 optional: true '@typescript-eslint/eslint-plugin@8.40.0(@typescript-eslint/parser@8.40.0(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3)': @@ -19778,16 +19781,16 @@ snapshots: - bufferutil - utf-8-validate - '@vitest/browser@3.2.4(bufferutil@4.0.9)(msw@2.7.5(@types/node@22.18.10)(typescript@5.9.3))(playwright@1.56.0)(utf-8-validate@6.0.5)(vite@7.1.10(@types/node@22.18.10)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))(vitest@3.2.4)(webdriverio@9.20.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))': + '@vitest/browser@3.2.4(bufferutil@4.0.9)(msw@2.7.5(@types/node@22.18.11)(typescript@5.9.3))(playwright@1.56.0)(utf-8-validate@6.0.5)(vite@7.1.10(@types/node@22.18.11)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))(vitest@3.2.4)(webdriverio@9.20.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))': dependencies: '@testing-library/dom': 10.4.0 '@testing-library/user-event': 14.6.1(@testing-library/dom@10.4.0) - '@vitest/mocker': 3.2.4(msw@2.7.5(@types/node@22.18.10)(typescript@5.9.3))(vite@7.1.10(@types/node@22.18.10)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) + '@vitest/mocker': 3.2.4(msw@2.7.5(@types/node@22.18.11)(typescript@5.9.3))(vite@7.1.10(@types/node@22.18.11)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) '@vitest/utils': 3.2.4 magic-string: 0.30.18 sirv: 3.0.1 tinyrainbow: 2.0.0 - vitest: 3.2.4(@types/debug@4.1.12)(@types/node@22.18.10)(@vitest/browser@3.2.4)(@vitest/ui@3.2.4)(happy-dom@20.0.7)(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.1)(msw@2.7.5(@types/node@22.18.10)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) + vitest: 3.2.4(@types/debug@4.1.12)(@types/node@22.18.11)(@vitest/browser@3.2.4)(@vitest/ui@3.2.4)(happy-dom@20.0.7)(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.1)(msw@2.7.5(@types/node@22.18.11)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) ws: 8.18.3(bufferutil@4.0.9)(utf-8-validate@6.0.5) optionalDependencies: playwright: 1.56.0 @@ -19810,7 +19813,7 @@ snapshots: magicast: 0.3.5 test-exclude: 7.0.1 tinyrainbow: 2.0.0 - vitest: 3.2.4(@types/debug@4.1.12)(@types/node@22.18.10)(@vitest/browser@3.2.4)(@vitest/ui@3.2.4)(happy-dom@20.0.7)(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.1)(msw@2.7.5(@types/node@22.18.10)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) + vitest: 3.2.4(@types/debug@4.1.12)(@types/node@22.18.11)(@vitest/browser@3.2.4)(@vitest/ui@3.2.4)(happy-dom@20.0.7)(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.1)(msw@2.7.5(@types/node@22.18.11)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) transitivePeerDependencies: - supports-color @@ -19829,9 +19832,9 @@ snapshots: std-env: 3.9.0 test-exclude: 7.0.1 tinyrainbow: 2.0.0 - vitest: 3.2.4(@types/debug@4.1.12)(@types/node@22.18.10)(@vitest/browser@3.2.4)(@vitest/ui@3.2.4)(happy-dom@20.0.7)(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.1)(msw@2.7.5(@types/node@22.18.10)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) + vitest: 3.2.4(@types/debug@4.1.12)(@types/node@22.18.11)(@vitest/browser@3.2.4)(@vitest/ui@3.2.4)(happy-dom@20.0.7)(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.1)(msw@2.7.5(@types/node@22.18.11)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) optionalDependencies: - '@vitest/browser': 3.2.4(bufferutil@4.0.9)(msw@2.7.5(@types/node@22.18.10)(typescript@5.9.3))(playwright@1.56.0)(utf-8-validate@6.0.5)(vite@7.1.10(@types/node@22.18.10)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))(vitest@3.2.4)(webdriverio@9.20.0(bufferutil@4.0.9)(utf-8-validate@6.0.5)) + '@vitest/browser': 3.2.4(bufferutil@4.0.9)(msw@2.7.5(@types/node@22.18.11)(typescript@5.9.3))(playwright@1.56.0)(utf-8-validate@6.0.5)(vite@7.1.10(@types/node@22.18.11)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))(vitest@3.2.4)(webdriverio@9.20.0(bufferutil@4.0.9)(utf-8-validate@6.0.5)) transitivePeerDependencies: - supports-color @@ -19843,14 +19846,14 @@ snapshots: chai: 5.2.0 tinyrainbow: 2.0.0 - '@vitest/mocker@3.2.4(msw@2.7.5(@types/node@22.18.10)(typescript@5.9.3))(vite@7.1.10(@types/node@22.18.10)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))': + '@vitest/mocker@3.2.4(msw@2.7.5(@types/node@22.18.11)(typescript@5.9.3))(vite@7.1.10(@types/node@22.18.11)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))': dependencies: '@vitest/spy': 3.2.4 estree-walker: 3.0.3 magic-string: 0.30.18 optionalDependencies: - msw: 2.7.5(@types/node@22.18.10)(typescript@5.9.3) - vite: 7.1.10(@types/node@22.18.10)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) + msw: 2.7.5(@types/node@22.18.11)(typescript@5.9.3) + vite: 7.1.10(@types/node@22.18.11)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) '@vitest/pretty-format@3.2.4': dependencies: @@ -19881,7 +19884,7 @@ snapshots: sirv: 3.0.1 tinyglobby: 0.2.15 tinyrainbow: 2.0.0 - vitest: 3.2.4(@types/debug@4.1.12)(@types/node@22.18.10)(@vitest/browser@3.2.4)(@vitest/ui@3.2.4)(happy-dom@20.0.7)(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.1)(msw@2.7.5(@types/node@22.18.10)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) + vitest: 3.2.4(@types/debug@4.1.12)(@types/node@22.18.11)(@vitest/browser@3.2.4)(@vitest/ui@3.2.4)(happy-dom@20.0.7)(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.1)(msw@2.7.5(@types/node@22.18.11)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) '@vitest/utils@3.2.4': dependencies: @@ -24481,13 +24484,13 @@ snapshots: jest-worker@26.6.2: dependencies: - '@types/node': 22.18.10 + '@types/node': 22.18.11 merge-stream: 2.0.0 supports-color: 7.2.0 jest-worker@27.5.1: dependencies: - '@types/node': 22.18.10 + '@types/node': 22.18.11 merge-stream: 2.0.0 supports-color: 8.1.1 @@ -25783,12 +25786,12 @@ snapshots: ms@2.1.3: {} - msw@2.7.5(@types/node@22.18.10)(typescript@5.9.3): + msw@2.7.5(@types/node@22.18.11)(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.19(@types/node@22.18.10) + '@inquirer/confirm': 5.1.19(@types/node@22.18.11) '@mswjs/interceptors': 0.37.6 '@open-draft/deferred-promise': 2.2.0 '@open-draft/until': 2.1.0 @@ -27378,7 +27381,7 @@ snapshots: '@protobufjs/path': 1.1.2 '@protobufjs/pool': 1.1.0 '@protobufjs/utf8': 1.1.0 - '@types/node': 22.18.10 + '@types/node': 22.18.11 long: 5.3.2 protocol-buffers-schema@3.6.0: {} @@ -27877,11 +27880,11 @@ snapshots: '@rolldown/binding-win32-x64-msvc': 1.0.0-beta.29 optional: true - rollup-plugin-stats@1.5.1(rolldown@1.0.0-beta.29)(rollup@4.52.0)(vite@7.1.10(@types/node@22.18.10)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)): + rollup-plugin-stats@1.5.1(rolldown@1.0.0-beta.29)(rollup@4.52.0)(vite@7.1.10(@types/node@22.18.11)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)): optionalDependencies: rolldown: 1.0.0-beta.29 rollup: 4.52.0 - vite: 7.1.10(@types/node@22.18.10)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) + vite: 7.1.10(@types/node@22.18.11)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) rollup-plugin-styles@4.0.0(rollup@4.40.0): dependencies: @@ -27910,13 +27913,13 @@ snapshots: '@rollup/pluginutils': 5.1.4(rollup@4.40.0) rollup: 4.40.0 - rollup-plugin-webpack-stats@2.1.6(rolldown@1.0.0-beta.29)(rollup@4.52.0)(vite@7.1.10(@types/node@22.18.10)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)): + rollup-plugin-webpack-stats@2.1.6(rolldown@1.0.0-beta.29)(rollup@4.52.0)(vite@7.1.10(@types/node@22.18.11)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)): dependencies: - rollup-plugin-stats: 1.5.1(rolldown@1.0.0-beta.29)(rollup@4.52.0)(vite@7.1.10(@types/node@22.18.10)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) + rollup-plugin-stats: 1.5.1(rolldown@1.0.0-beta.29)(rollup@4.52.0)(vite@7.1.10(@types/node@22.18.11)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) optionalDependencies: rolldown: 1.0.0-beta.29 rollup: 4.52.0 - vite: 7.1.10(@types/node@22.18.10)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) + vite: 7.1.10(@types/node@22.18.11)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) rollup@4.40.0: dependencies: @@ -29389,14 +29392,14 @@ snapshots: typescript: 5.0.4 webpack: 5.101.3(@swc/core@1.11.29(@swc/helpers@0.5.17))(esbuild@0.25.11) - ts-node@10.9.2(@swc/core@1.11.29(@swc/helpers@0.5.17))(@types/node@22.18.10)(typescript@5.0.4): + ts-node@10.9.2(@swc/core@1.11.29(@swc/helpers@0.5.17))(@types/node@22.18.11)(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': 22.18.10 + '@types/node': 22.18.11 acorn: 8.15.0 acorn-walk: 8.3.4 arg: 4.1.3 @@ -29409,14 +29412,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@22.18.10)(typescript@5.9.3): + ts-node@10.9.2(@swc/core@1.11.29(@swc/helpers@0.5.17))(@types/node@22.18.11)(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': 22.18.10 + '@types/node': 22.18.11 acorn: 8.15.0 acorn-walk: 8.3.4 arg: 4.1.3 @@ -29787,13 +29790,13 @@ snapshots: '@types/unist': 3.0.3 vfile-message: 4.0.2 - vite-node@3.2.4(@types/node@22.18.10)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1): + vite-node@3.2.4(@types/node@22.18.11)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1): dependencies: cac: 6.7.14 debug: 4.4.3(supports-color@6.0.0) es-module-lexer: 1.7.0 pathe: 2.0.3 - vite: 7.1.10(@types/node@22.18.10)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) + vite: 7.1.10(@types/node@22.18.11)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) transitivePeerDependencies: - '@types/node' - jiti @@ -29808,9 +29811,9 @@ snapshots: - tsx - yaml - vite-plugin-dts@4.5.4(@types/node@22.18.10)(rollup@4.52.0)(typescript@5.9.3)(vite@7.1.10(@types/node@22.18.10)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)): + vite-plugin-dts@4.5.4(@types/node@22.18.11)(rollup@4.52.0)(typescript@5.9.3)(vite@7.1.10(@types/node@22.18.11)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)): dependencies: - '@microsoft/api-extractor': 7.52.8(@types/node@22.18.10) + '@microsoft/api-extractor': 7.52.8(@types/node@22.18.11) '@rollup/pluginutils': 5.1.4(rollup@4.52.0) '@volar/typescript': 2.4.13 '@vue/language-core': 2.2.0(typescript@5.9.3) @@ -29821,7 +29824,7 @@ snapshots: magic-string: 0.30.17 typescript: 5.9.3 optionalDependencies: - vite: 7.1.10(@types/node@22.18.10)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) + vite: 7.1.10(@types/node@22.18.11)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) transitivePeerDependencies: - '@types/node' - rollup @@ -29835,11 +29838,11 @@ snapshots: tinyglobby: 0.2.15 vite: 7.1.10(@types/node@24.8.1)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) - vite-plugin-svgo@2.0.0(typescript@5.9.3)(vite@7.1.10(@types/node@22.18.10)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)): + vite-plugin-svgo@2.0.0(typescript@5.9.3)(vite@7.1.10(@types/node@22.18.11)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)): dependencies: svgo: 3.3.2 typescript: 5.9.3 - vite: 7.1.10(@types/node@22.18.10)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) + vite: 7.1.10(@types/node@22.18.11)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) vite-prerender-plugin@0.5.11(vite@7.1.10(@types/node@24.8.1)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)): dependencies: @@ -29851,7 +29854,7 @@ snapshots: stack-trace: 1.0.0-pre2 vite: 7.1.10(@types/node@24.8.1)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) - vite@7.1.10(@types/node@22.18.10)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1): + vite@7.1.10(@types/node@22.18.11)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1): dependencies: esbuild: 0.25.10 fdir: 6.5.0(picomatch@4.0.3) @@ -29860,7 +29863,7 @@ snapshots: rollup: 4.52.0 tinyglobby: 0.2.15 optionalDependencies: - '@types/node': 22.18.10 + '@types/node': 22.18.11 fsevents: 2.3.3 jiti: 2.6.1 less: 4.1.3 @@ -29891,11 +29894,11 @@ snapshots: tsx: 4.20.6 yaml: 2.8.1 - vitest@3.2.4(@types/debug@4.1.12)(@types/node@22.18.10)(@vitest/browser@3.2.4)(@vitest/ui@3.2.4)(happy-dom@20.0.7)(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.1)(msw@2.7.5(@types/node@22.18.10)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1): + vitest@3.2.4(@types/debug@4.1.12)(@types/node@22.18.11)(@vitest/browser@3.2.4)(@vitest/ui@3.2.4)(happy-dom@20.0.7)(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.1)(msw@2.7.5(@types/node@22.18.11)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1): dependencies: '@types/chai': 5.2.2 '@vitest/expect': 3.2.4 - '@vitest/mocker': 3.2.4(msw@2.7.5(@types/node@22.18.10)(typescript@5.9.3))(vite@7.1.10(@types/node@22.18.10)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) + '@vitest/mocker': 3.2.4(msw@2.7.5(@types/node@22.18.11)(typescript@5.9.3))(vite@7.1.10(@types/node@22.18.11)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) '@vitest/pretty-format': 3.2.4 '@vitest/runner': 3.2.4 '@vitest/snapshot': 3.2.4 @@ -29913,13 +29916,13 @@ snapshots: tinyglobby: 0.2.15 tinypool: 1.1.1 tinyrainbow: 2.0.0 - vite: 7.1.10(@types/node@22.18.10)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) - vite-node: 3.2.4(@types/node@22.18.10)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) + vite: 7.1.10(@types/node@22.18.11)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) + vite-node: 3.2.4(@types/node@22.18.11)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) why-is-node-running: 2.3.0 optionalDependencies: '@types/debug': 4.1.12 - '@types/node': 22.18.10 - '@vitest/browser': 3.2.4(bufferutil@4.0.9)(msw@2.7.5(@types/node@22.18.10)(typescript@5.9.3))(playwright@1.56.0)(utf-8-validate@6.0.5)(vite@7.1.10(@types/node@22.18.10)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))(vitest@3.2.4)(webdriverio@9.20.0(bufferutil@4.0.9)(utf-8-validate@6.0.5)) + '@types/node': 22.18.11 + '@vitest/browser': 3.2.4(bufferutil@4.0.9)(msw@2.7.5(@types/node@22.18.11)(typescript@5.9.3))(playwright@1.56.0)(utf-8-validate@6.0.5)(vite@7.1.10(@types/node@22.18.11)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))(vitest@3.2.4)(webdriverio@9.20.0(bufferutil@4.0.9)(utf-8-validate@6.0.5)) '@vitest/ui': 3.2.4(vitest@3.2.4) happy-dom: 20.0.7 jsdom: 26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5) From f6bd7035e6859e5128dab66220afe5af532c4586 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 20 Oct 2025 06:37:20 +0000 Subject: [PATCH 047/103] chore(deps): update dependency @playwright/test to v1.56.1 --- _regroup/package.json | 2 +- package.json | 2 +- pnpm-lock.yaml | 54 +++++++++++++++++++------------------------ 3 files changed, 26 insertions(+), 32 deletions(-) diff --git a/_regroup/package.json b/_regroup/package.json index 5291b203a..641527916 100644 --- a/_regroup/package.json +++ b/_regroup/package.json @@ -35,7 +35,7 @@ "chore:generate-openapi": "tsx bin/generate-openapi.js" }, "devDependencies": { - "@playwright/test": "1.56.0", + "@playwright/test": "1.56.1", "@stylistic/eslint-plugin": "5.5.0", "@types/express": "5.0.3", "@types/node": "22.18.11", diff --git a/package.json b/package.json index 0a4dbe2e0..d01f0c435 100644 --- a/package.json +++ b/package.json @@ -37,7 +37,7 @@ "private": true, "devDependencies": { "@electron/rebuild": "4.0.1", - "@playwright/test": "1.56.0", + "@playwright/test": "1.56.1", "@triliumnext/server": "workspace:*", "@types/express": "5.0.3", "@types/node": "22.18.11", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index ba95a0eb3..9c58ba061 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -41,8 +41,8 @@ importers: specifier: 4.0.1 version: 4.0.1 '@playwright/test': - specifier: 1.56.0 - version: 1.56.0 + specifier: 1.56.1 + version: 1.56.1 '@triliumnext/server': specifier: workspace:* version: link:apps/server @@ -862,7 +862,7 @@ importers: version: 8.46.1(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) '@vitest/browser': specifier: 3.2.4 - version: 3.2.4(bufferutil@4.0.9)(msw@2.7.5(@types/node@22.18.11)(typescript@5.9.3))(playwright@1.56.0)(utf-8-validate@6.0.5)(vite@7.1.10(@types/node@22.18.11)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))(vitest@3.2.4)(webdriverio@9.20.0(bufferutil@4.0.9)(utf-8-validate@6.0.5)) + version: 3.2.4(bufferutil@4.0.9)(msw@2.7.5(@types/node@22.18.11)(typescript@5.9.3))(playwright@1.56.1)(utf-8-validate@6.0.5)(vite@7.1.10(@types/node@22.18.11)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))(vitest@3.2.4)(webdriverio@9.20.0(bufferutil@4.0.9)(utf-8-validate@6.0.5)) '@vitest/coverage-istanbul': specifier: 3.2.4 version: 3.2.4(vitest@3.2.4) @@ -922,7 +922,7 @@ importers: version: 8.46.1(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) '@vitest/browser': specifier: 3.2.4 - version: 3.2.4(bufferutil@4.0.9)(msw@2.7.5(@types/node@22.18.11)(typescript@5.9.3))(playwright@1.56.0)(utf-8-validate@6.0.5)(vite@7.1.10(@types/node@22.18.11)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))(vitest@3.2.4)(webdriverio@9.20.0(bufferutil@4.0.9)(utf-8-validate@6.0.5)) + version: 3.2.4(bufferutil@4.0.9)(msw@2.7.5(@types/node@22.18.11)(typescript@5.9.3))(playwright@1.56.1)(utf-8-validate@6.0.5)(vite@7.1.10(@types/node@22.18.11)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))(vitest@3.2.4)(webdriverio@9.20.0(bufferutil@4.0.9)(utf-8-validate@6.0.5)) '@vitest/coverage-istanbul': specifier: 3.2.4 version: 3.2.4(vitest@3.2.4) @@ -982,7 +982,7 @@ importers: version: 8.46.1(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) '@vitest/browser': specifier: 3.2.4 - version: 3.2.4(bufferutil@4.0.9)(msw@2.7.5(@types/node@22.18.11)(typescript@5.9.3))(playwright@1.56.0)(utf-8-validate@6.0.5)(vite@7.1.10(@types/node@22.18.11)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))(vitest@3.2.4)(webdriverio@9.20.0(bufferutil@4.0.9)(utf-8-validate@6.0.5)) + version: 3.2.4(bufferutil@4.0.9)(msw@2.7.5(@types/node@22.18.11)(typescript@5.9.3))(playwright@1.56.1)(utf-8-validate@6.0.5)(vite@7.1.10(@types/node@22.18.11)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))(vitest@3.2.4)(webdriverio@9.20.0(bufferutil@4.0.9)(utf-8-validate@6.0.5)) '@vitest/coverage-istanbul': specifier: 3.2.4 version: 3.2.4(vitest@3.2.4) @@ -1049,7 +1049,7 @@ importers: version: 8.46.1(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) '@vitest/browser': specifier: 3.2.4 - version: 3.2.4(bufferutil@4.0.9)(msw@2.7.5(@types/node@22.18.11)(typescript@5.9.3))(playwright@1.56.0)(utf-8-validate@6.0.5)(vite@7.1.10(@types/node@22.18.11)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))(vitest@3.2.4)(webdriverio@9.20.0(bufferutil@4.0.9)(utf-8-validate@6.0.5)) + version: 3.2.4(bufferutil@4.0.9)(msw@2.7.5(@types/node@22.18.11)(typescript@5.9.3))(playwright@1.56.1)(utf-8-validate@6.0.5)(vite@7.1.10(@types/node@22.18.11)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))(vitest@3.2.4)(webdriverio@9.20.0(bufferutil@4.0.9)(utf-8-validate@6.0.5)) '@vitest/coverage-istanbul': specifier: 3.2.4 version: 3.2.4(vitest@3.2.4) @@ -1116,7 +1116,7 @@ importers: version: 8.46.1(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3) '@vitest/browser': specifier: 3.2.4 - version: 3.2.4(bufferutil@4.0.9)(msw@2.7.5(@types/node@22.18.11)(typescript@5.9.3))(playwright@1.56.0)(utf-8-validate@6.0.5)(vite@7.1.10(@types/node@22.18.11)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))(vitest@3.2.4)(webdriverio@9.20.0(bufferutil@4.0.9)(utf-8-validate@6.0.5)) + version: 3.2.4(bufferutil@4.0.9)(msw@2.7.5(@types/node@22.18.11)(typescript@5.9.3))(playwright@1.56.1)(utf-8-validate@6.0.5)(vite@7.1.10(@types/node@22.18.11)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))(vitest@3.2.4)(webdriverio@9.20.0(bufferutil@4.0.9)(utf-8-validate@6.0.5)) '@vitest/coverage-istanbul': specifier: 3.2.4 version: 3.2.4(vitest@3.2.4) @@ -3546,8 +3546,8 @@ packages: resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} engines: {node: '>=14'} - '@playwright/test@1.56.0': - resolution: {integrity: sha512-Tzh95Twig7hUwwNe381/K3PggZBZblKUe2wv25oIpzWLr6Z0m4KgV1ZVIjnR6GM9ANEqjZD7XsZEa6JL/7YEgg==} + '@playwright/test@1.56.1': + resolution: {integrity: sha512-vSMYtL/zOcFpvJCW71Q/OEGQb7KYBPAdKh35WNSkaZA75JlAO8ED8UN6GUNTm3drWomcbcqRPFqQbLae8yBTdg==} engines: {node: '>=18'} hasBin: true @@ -10605,13 +10605,13 @@ packages: pkg-types@2.1.0: resolution: {integrity: sha512-wmJwA+8ihJixSoHKxZJRBQG1oY8Yr9pGLzRmSsNms0iNWyHHAlZCa7mmKiFR10YPZuz/2k169JiS/inOjBCZ2A==} - playwright-core@1.56.0: - resolution: {integrity: sha512-1SXl7pMfemAMSDn5rkPeZljxOCYAmQnYLBTExuh6E8USHXGSX3dx6lYZN/xPpTz1vimXmPA9CDnILvmJaB8aSQ==} + playwright-core@1.56.1: + resolution: {integrity: sha512-hutraynyn31F+Bifme+Ps9Vq59hKuUCz7H1kDOcBs+2oGguKkWTU50bBWrtz34OUWmIwpBTWDxaRPXrIXkgvmQ==} engines: {node: '>=18'} hasBin: true - playwright@1.56.0: - resolution: {integrity: sha512-X5Q1b8lOdWIE4KAoHpW3SE8HvUB+ZZsUoN64ZhjnN8dOb1UpujxBtENGiZFE+9F/yhzJwYa+ca3u43FeLbboHA==} + playwright@1.56.1: + resolution: {integrity: sha512-aFi5B0WovBHTEvpM3DzXTUaeN6eN0qWnTkKx4NQaH4Wvcmc153PdaY2UBdSYKaGYw+UyWXSVyxDUg5DoPEttjw==} engines: {node: '>=18'} hasBin: true @@ -14838,8 +14838,6 @@ snapshots: '@ckeditor/ckeditor5-core': 47.1.0 '@ckeditor/ckeditor5-utils': 47.1.0 ckeditor5: 47.1.0(patch_hash=8331a09d41443b39ea1c784daaccfeb0da4f9065ed556e7de92e9c77edd9eb41) - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-code-block@47.1.0(patch_hash=2361d8caad7d6b5bddacc3a3b4aa37dbfba260b1c1b22a450413a79c1bb1ce95)': dependencies: @@ -14901,6 +14899,8 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.1.0 '@ckeditor/ckeditor5-watchdog': 47.1.0 es-toolkit: 1.39.5 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-dev-build-tools@43.1.0(@swc/helpers@0.5.17)(tslib@2.8.1)(typescript@5.9.3)': dependencies: @@ -15092,8 +15092,6 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.1.0 ckeditor5: 47.1.0(patch_hash=8331a09d41443b39ea1c784daaccfeb0da4f9065ed556e7de92e9c77edd9eb41) es-toolkit: 1.39.5 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-editor-multi-root@47.1.0': dependencies: @@ -15116,8 +15114,6 @@ snapshots: '@ckeditor/ckeditor5-table': 47.1.0 '@ckeditor/ckeditor5-utils': 47.1.0 ckeditor5: 47.1.0(patch_hash=8331a09d41443b39ea1c784daaccfeb0da4f9065ed556e7de92e9c77edd9eb41) - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-emoji@47.1.0': dependencies: @@ -15590,8 +15586,6 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.1.0 '@ckeditor/ckeditor5-utils': 47.1.0 ckeditor5: 47.1.0(patch_hash=8331a09d41443b39ea1c784daaccfeb0da4f9065ed556e7de92e9c77edd9eb41) - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-restricted-editing@47.1.0': dependencies: @@ -17841,9 +17835,9 @@ snapshots: '@pkgjs/parseargs@0.11.0': optional: true - '@playwright/test@1.56.0': + '@playwright/test@1.56.1': dependencies: - playwright: 1.56.0 + playwright: 1.56.1 '@polka/url@1.0.0-next.29': {} @@ -19781,7 +19775,7 @@ snapshots: - bufferutil - utf-8-validate - '@vitest/browser@3.2.4(bufferutil@4.0.9)(msw@2.7.5(@types/node@22.18.11)(typescript@5.9.3))(playwright@1.56.0)(utf-8-validate@6.0.5)(vite@7.1.10(@types/node@22.18.11)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))(vitest@3.2.4)(webdriverio@9.20.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))': + '@vitest/browser@3.2.4(bufferutil@4.0.9)(msw@2.7.5(@types/node@22.18.11)(typescript@5.9.3))(playwright@1.56.1)(utf-8-validate@6.0.5)(vite@7.1.10(@types/node@22.18.11)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))(vitest@3.2.4)(webdriverio@9.20.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))': dependencies: '@testing-library/dom': 10.4.0 '@testing-library/user-event': 14.6.1(@testing-library/dom@10.4.0) @@ -19793,7 +19787,7 @@ snapshots: vitest: 3.2.4(@types/debug@4.1.12)(@types/node@22.18.11)(@vitest/browser@3.2.4)(@vitest/ui@3.2.4)(happy-dom@20.0.7)(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.1)(msw@2.7.5(@types/node@22.18.11)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) ws: 8.18.3(bufferutil@4.0.9)(utf-8-validate@6.0.5) optionalDependencies: - playwright: 1.56.0 + playwright: 1.56.1 webdriverio: 9.20.0(bufferutil@4.0.9)(utf-8-validate@6.0.5) transitivePeerDependencies: - bufferutil @@ -19834,7 +19828,7 @@ snapshots: tinyrainbow: 2.0.0 vitest: 3.2.4(@types/debug@4.1.12)(@types/node@22.18.11)(@vitest/browser@3.2.4)(@vitest/ui@3.2.4)(happy-dom@20.0.7)(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.1)(msw@2.7.5(@types/node@22.18.11)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) optionalDependencies: - '@vitest/browser': 3.2.4(bufferutil@4.0.9)(msw@2.7.5(@types/node@22.18.11)(typescript@5.9.3))(playwright@1.56.0)(utf-8-validate@6.0.5)(vite@7.1.10(@types/node@22.18.11)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))(vitest@3.2.4)(webdriverio@9.20.0(bufferutil@4.0.9)(utf-8-validate@6.0.5)) + '@vitest/browser': 3.2.4(bufferutil@4.0.9)(msw@2.7.5(@types/node@22.18.11)(typescript@5.9.3))(playwright@1.56.1)(utf-8-validate@6.0.5)(vite@7.1.10(@types/node@22.18.11)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))(vitest@3.2.4)(webdriverio@9.20.0(bufferutil@4.0.9)(utf-8-validate@6.0.5)) transitivePeerDependencies: - supports-color @@ -26512,11 +26506,11 @@ snapshots: exsolve: 1.0.5 pathe: 2.0.3 - playwright-core@1.56.0: {} + playwright-core@1.56.1: {} - playwright@1.56.0: + playwright@1.56.1: dependencies: - playwright-core: 1.56.0 + playwright-core: 1.56.1 optionalDependencies: fsevents: 2.3.2 @@ -29922,7 +29916,7 @@ snapshots: optionalDependencies: '@types/debug': 4.1.12 '@types/node': 22.18.11 - '@vitest/browser': 3.2.4(bufferutil@4.0.9)(msw@2.7.5(@types/node@22.18.11)(typescript@5.9.3))(playwright@1.56.0)(utf-8-validate@6.0.5)(vite@7.1.10(@types/node@22.18.11)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))(vitest@3.2.4)(webdriverio@9.20.0(bufferutil@4.0.9)(utf-8-validate@6.0.5)) + '@vitest/browser': 3.2.4(bufferutil@4.0.9)(msw@2.7.5(@types/node@22.18.11)(typescript@5.9.3))(playwright@1.56.1)(utf-8-validate@6.0.5)(vite@7.1.10(@types/node@22.18.11)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))(vitest@3.2.4)(webdriverio@9.20.0(bufferutil@4.0.9)(utf-8-validate@6.0.5)) '@vitest/ui': 3.2.4(vitest@3.2.4) happy-dom: 20.0.7 jsdom: 26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5) From 1514432f7751fb2acef6cd9937aba5f510531ac2 Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Mon, 20 Oct 2025 10:40:14 +0300 Subject: [PATCH 048/103] fix(client/print): circular dependency affecting ws --- apps/client/src/entities/fnote.ts | 3 +- apps/client/src/services/protected_session.ts | 70 +++++++++---------- apps/client/src/services/tree.ts | 18 ++--- 3 files changed, 45 insertions(+), 46 deletions(-) diff --git a/apps/client/src/entities/fnote.ts b/apps/client/src/entities/fnote.ts index dcb768dd7..bcb6c408e 100644 --- a/apps/client/src/entities/fnote.ts +++ b/apps/client/src/entities/fnote.ts @@ -1,6 +1,5 @@ import server from "../services/server.js"; import noteAttributeCache from "../services/note_attribute_cache.js"; -import ws from "../services/ws.js"; import protectedSessionHolder from "../services/protected_session_holder.js"; import cssClassManager from "../services/css_class_manager.js"; import type { Froca } from "../services/froca-interface.js"; @@ -586,7 +585,7 @@ export default class FNote { let childBranches = this.getChildBranches(); if (!childBranches) { - ws.logError(`No children for '${this.noteId}'. This shouldn't happen.`); + console.error(`No children for '${this.noteId}'. This shouldn't happen.`); return []; } diff --git a/apps/client/src/services/protected_session.ts b/apps/client/src/services/protected_session.ts index a2f04a9f0..1e1984ae5 100644 --- a/apps/client/src/services/protected_session.ts +++ b/apps/client/src/services/protected_session.ts @@ -70,26 +70,26 @@ async function setupProtectedSession(password: string) { protectedSessionHolder.enableProtectedSession(); } -// ws.subscribeToMessages(async (message) => { -// if (message.type === "protectedSessionLogin") { -// await reloadData(); +ws.subscribeToMessages(async (message) => { + if (message.type === "protectedSessionLogin") { + await reloadData(); -// await appContext.triggerEvent("frocaReloaded", {}); + await appContext.triggerEvent("frocaReloaded", {}); -// appContext.triggerEvent("protectedSessionStarted", {}); + appContext.triggerEvent("protectedSessionStarted", {}); -// appContext.triggerCommand("closeProtectedSessionPasswordDialog"); + appContext.triggerCommand("closeProtectedSessionPasswordDialog"); -// if (protectedSessionDeferred !== null) { -// protectedSessionDeferred.resolve(true); -// protectedSessionDeferred = null; -// } + if (protectedSessionDeferred !== null) { + protectedSessionDeferred.resolve(true); + protectedSessionDeferred = null; + } -// toastService.showMessage(t("protected_session.started")); -// } else if (message.type === "protectedSessionLogout") { -// utils.reloadFrontendApp(`Protected session logout`); -// } -// }); + toastService.showMessage(t("protected_session.started")); + } else if (message.type === "protectedSessionLogout") { + utils.reloadFrontendApp(`Protected session logout`); + } +}); async function protectNote(noteId: string, protect: boolean, includingSubtree: boolean) { await enterProtectedSession(); @@ -106,29 +106,29 @@ function makeToast(message: Message, title: string, text: string): ToastOptions }; } -// ws.subscribeToMessages(async (message) => { -// if (!("taskType" in message) || message.taskType !== "protectNotes") { -// return; -// } +ws.subscribeToMessages(async (message) => { + if (!("taskType" in message) || message.taskType !== "protectNotes") { + return; + } -// const isProtecting = message.data?.protect; -// const title = isProtecting ? t("protected_session.protecting-title") : t("protected_session.unprotecting-title"); + const isProtecting = message.data?.protect; + const title = isProtecting ? t("protected_session.protecting-title") : t("protected_session.unprotecting-title"); -// if (message.type === "taskError") { -// toastService.closePersistent(message.taskId); -// toastService.showError(message.message); -// } else if (message.type === "taskProgressCount") { -// const count = message.progressCount; -// const text = isProtecting ? t("protected_session.protecting-in-progress", { count }) : t("protected_session.unprotecting-in-progress-count", { count }); -// toastService.showPersistent(makeToast(message, title, text)); -// } else if (message.type === "taskSucceeded") { -// const text = isProtecting ? t("protected_session.protecting-finished-successfully") : t("protected_session.unprotecting-finished-successfully"); -// const toast = makeToast(message, title, text); -// toast.closeAfter = 3000; + if (message.type === "taskError") { + toastService.closePersistent(message.taskId); + toastService.showError(message.message); + } else if (message.type === "taskProgressCount") { + const count = message.progressCount; + const text = isProtecting ? t("protected_session.protecting-in-progress", { count }) : t("protected_session.unprotecting-in-progress-count", { count }); + toastService.showPersistent(makeToast(message, title, text)); + } else if (message.type === "taskSucceeded") { + const text = isProtecting ? t("protected_session.protecting-finished-successfully") : t("protected_session.unprotecting-finished-successfully"); + const toast = makeToast(message, title, text); + toast.closeAfter = 3000; -// toastService.showPersistent(toast); -// } -// }); + toastService.showPersistent(toast); + } +}); export default { protectNote, diff --git a/apps/client/src/services/tree.ts b/apps/client/src/services/tree.ts index 75715a377..c508654f5 100644 --- a/apps/client/src/services/tree.ts +++ b/apps/client/src/services/tree.ts @@ -122,17 +122,17 @@ async function resolveNotePathToSegments(notePath: string, hoistedNoteId = "root } } -// ws.subscribeToMessages((message) => { -// if (message.type === "openNote") { -// appContext.tabManager.activateOrOpenNote(message.noteId); +ws.subscribeToMessages((message) => { + if (message.type === "openNote") { + appContext.tabManager.activateOrOpenNote(message.noteId); -// if (utils.isElectron()) { -// const currentWindow = utils.dynamicRequire("@electron/remote").getCurrentWindow(); + if (utils.isElectron()) { + const currentWindow = utils.dynamicRequire("@electron/remote").getCurrentWindow(); -// currentWindow.show(); -// } -// } -// }); + currentWindow.show(); + } + } +}); function getParentProtectedStatus(node: Fancytree.FancytreeNode) { return hoistedNoteService.isHoistedNode(node) ? false : node.getParent().data.isProtected; From f0fa55715c0bdbe368368fa0882456af13aadc7f Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Mon, 20 Oct 2025 10:48:55 +0300 Subject: [PATCH 049/103] fix(client/print): ckeditor stylesheet missing --- apps/client/src/print.tsx | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/apps/client/src/print.tsx b/apps/client/src/print.tsx index 96cf06132..86d98b113 100644 --- a/apps/client/src/print.tsx +++ b/apps/client/src/print.tsx @@ -45,12 +45,15 @@ function SingleNoteRenderer({ note, onReady }: RendererProps) { const containerRef = useRef(null); useLayoutEffect(() => { - content_renderer.getRenderedContent(note, { - noChildrenList: true - }).then(({$renderedContent}) => { + async function load() { + if (note.type === "text") { + await import("@triliumnext/ckeditor5/src/theme/ck-content.css"); + } + const { $renderedContent } = await content_renderer.getRenderedContent(note, { noChildrenList: true }); containerRef.current?.replaceChildren(...$renderedContent); - requestAnimationFrame(onReady); - }); + } + + load().then(() => requestAnimationFrame(onReady)) }, [ note ]); return <> From 74c26b42da93579fc1ea16e558bd77b3402d86ad Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Mon, 20 Oct 2025 11:00:49 +0300 Subject: [PATCH 050/103] fix(client/print): syntax highlighting not loading on code notes --- apps/client/src/services/syntax_highlight.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/apps/client/src/services/syntax_highlight.ts b/apps/client/src/services/syntax_highlight.ts index 9b5592a6b..e0ce55f42 100644 --- a/apps/client/src/services/syntax_highlight.ts +++ b/apps/client/src/services/syntax_highlight.ts @@ -76,7 +76,7 @@ export async function ensureMimeTypesForHighlighting(mimeTypeHint?: string) { // Load theme. const currentThemeName = String(options.get("codeBlockTheme")); - loadHighlightingTheme(currentThemeName); + await loadHighlightingTheme(currentThemeName); // Load mime types. let mimeTypes: MimeType[]; @@ -98,7 +98,7 @@ export async function ensureMimeTypesForHighlighting(mimeTypeHint?: string) { highlightingLoaded = true; } -export function loadHighlightingTheme(themeName: string) { +export async function loadHighlightingTheme(themeName: string) { const themePrefix = "default:"; let theme: Theme | null = null; if (themeName.includes(themePrefix)) { @@ -108,7 +108,7 @@ export function loadHighlightingTheme(themeName: string) { theme = Themes.default; } - loadTheme(theme); + await loadTheme(theme); } /** From 7c08864444cc95a5c572501e62ff026a29f1737d Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Mon, 20 Oct 2025 11:06:26 +0300 Subject: [PATCH 051/103] feat(client/print): enforce VS code theme when printing code notes --- apps/client/src/services/syntax_highlight.ts | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/apps/client/src/services/syntax_highlight.ts b/apps/client/src/services/syntax_highlight.ts index e0ce55f42..2a545fc8b 100644 --- a/apps/client/src/services/syntax_highlight.ts +++ b/apps/client/src/services/syntax_highlight.ts @@ -101,14 +101,13 @@ export async function ensureMimeTypesForHighlighting(mimeTypeHint?: string) { export async function loadHighlightingTheme(themeName: string) { const themePrefix = "default:"; let theme: Theme | null = null; - if (themeName.includes(themePrefix)) { + if (glob.device === "print") { + theme = Themes.vs; + } else if (themeName.includes(themePrefix)) { theme = Themes[themeName.substring(themePrefix.length)]; } - if (!theme) { - theme = Themes.default; - } - await loadTheme(theme); + await loadTheme(theme ?? Themes.default); } /** From 1ae32c4547383fad1678aef3a45e706048fac750 Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Mon, 20 Oct 2025 11:27:21 +0300 Subject: [PATCH 052/103] feat(client/print): integrate old print stylesheet --- apps/client/src/print.css | 147 +++++++++++- apps/client/src/stylesheets/print.css | 322 -------------------------- 2 files changed, 146 insertions(+), 323 deletions(-) delete mode 100644 apps/client/src/stylesheets/print.css diff --git a/apps/client/src/print.css b/apps/client/src/print.css index 5d31138ce..b935d9eb7 100644 --- a/apps/client/src/print.css +++ b/apps/client/src/print.css @@ -1,10 +1,155 @@ +:root { + --print-font-size: 11pt; + --ck-content-color-image-caption-background: transparent !important; +} + html, body { width: 100%; height: 100%; + color: black; +} + +@page { + margin: 2cm; } .note-list-widget.full-height, .note-list-widget.full-height .note-list-widget-content { height: unset !important; -} \ No newline at end of file +} + +.component { + contain: none !important; +} + +.ck-content { + font-size: var(--print-font-size); + text-align: justify; +} + +.ck-content figcaption { + font-style: italic; +} + +.ck-content a { + text-decoration: none; +} + +.ck-content a:not([href^="#root/"]) { + text-decoration: underline; + color: #374a75; +} + +.ck-content .todo-list__label * { + -webkit-print-color-adjust: exact; + print-color-adjust: exact; +} + +@supports selector(.todo-list__label__description:has(*)) and (height: 1lh) { + .ck-content .todo-list__label__description { + /* The percentage of the line height that the check box occupies */ + --box-ratio: 0.75; + /* The size of the gap between the check box and the caption */ + --box-text-gap: 0.25em; + + --box-size: calc(1lh * var(--box-ratio)); + --box-vert-offset: calc((1lh - var(--box-size)) / 2); + + display: inline-block; + padding-inline-start: calc(var(--box-size) + var(--box-text-gap)); + /* Source: https://pictogrammers.com/library/mdi/icon/checkbox-blank-outline/ */ + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='currentColor'%3e%3cpath d='M19%2c3H5C3.89%2c3 3%2c3.89 3%2c5V19A2%2c2 0 0%2c0 5%2c21H19A2%2c2 0 0%2c0 21%2c19V5C21%2c3.89 20.1%2c3 19%2c3M19%2c5V19H5V5H19Z' /%3e%3c/svg%3e"); + background-position: 0 var(--box-vert-offset); + background-size: var(--box-size); + background-repeat: no-repeat; + } + + .ck-content .todo-list__label:has(input[type="checkbox"]:checked) .todo-list__label__description { + /* Source: https://pictogrammers.com/library/mdi/icon/checkbox-outline/ */ + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='currentColor'%3e%3cpath d='M19%2c3H5A2%2c2 0 0%2c0 3%2c5V19A2%2c2 0 0%2c0 5%2c21H19A2%2c2 0 0%2c0 21%2c19V5A2%2c2 0 0%2c0 19%2c3M19%2c5V19H5V5H19M10%2c17L6%2c13L7.41%2c11.58L10%2c14.17L16.59%2c7.58L18%2c9' /%3e%3c/svg%3e"); + } + + .ck-content .todo-list__label input[type="checkbox"] { + display: none !important; + } +} + +/* #region Footnotes */ +.footnote-reference a, +.footnote-back-link a { + text-decoration: none !important; +} + +li.footnote-item { + position: relative; + width: fit-content; +} + +.ck-content .footnote-back-link { + margin-right: 0.25em; +} + +.ck-content .footnote-content { + display: inline-block; + width: unset; +} +/* #endregion */ + +/* #region Widows and orphans */ +p, +blockquote { + widows: 4; + orphans: 4; +} + +pre > code { + widows: 6; + orphans: 6; + overflow: auto; + white-space: pre-wrap !important; +} + +h1, +h2, +h3, +h4, +h5, +h6 { + page-break-after: avoid; + break-after: avoid; +} +/* #endregion */ + +/* #region Tables */ +.table thead th, +.table td, +.table th { + /* Fix center vertical alignment of table cells */ + vertical-align: middle; +} + +pre { + box-shadow: unset !important; + border: 0.75pt solid gray !important; + border-radius: 2pt !important; +} + +th, +span[style] { + print-color-adjust: exact; + -webkit-print-color-adjust: exact; +} +/* #endregion */ + +/* #region Page breaks */ +.page-break { + page-break-after: always; + break-after: always; +} + +.page-break > *, +.page-break::after { + display: none !important; +} +/* #endregion */ \ No newline at end of file diff --git a/apps/client/src/stylesheets/print.css b/apps/client/src/stylesheets/print.css deleted file mode 100644 index 842570bde..000000000 --- a/apps/client/src/stylesheets/print.css +++ /dev/null @@ -1,322 +0,0 @@ -:root { - --main-background-color: white; - --root-background: var(--main-background-color); - --launcher-pane-background-color: var(--main-background-color); - --main-text-color: black; - --input-text-color: var(--main-text-color); - - --print-font-size: 11pt; -} - -@page { - margin: 2cm; -} - -.ck-content { - font-size: var(--print-font-size); - text-align: justify; -} - -.note-detail-readonly-text { - padding: 0 !important; -} - -.no-print, -.no-print *, -.tab-row-container, -.tab-row-widget, -.title-bar-buttons, -#launcher-pane, -#left-pane, -#center-pane > *:not(.split-note-container-widget), -#right-pane, -.title-row .note-icon-widget, -.title-row .icon-action, -.ribbon-container, -.promoted-attributes-widget, -.scroll-padding-widget, -.note-list-widget, -.spacer { - display: none !important; -} - -body.mobile #mobile-sidebar-wrapper, -body.mobile .classic-toolbar-widget, -body.mobile .action-button { - display: none !important; -} - -body.mobile #detail-container { - max-height: unset; -} - -body.mobile .note-title-widget { - padding: 0 !important; -} - -body, -#root-widget, -#rest-pane > div.component:first-child, -.note-detail-printable, -.note-detail-editable-text-editor { - height: unset !important; - overflow: auto; -} - -.ck.ck-editor__editable_inline { - overflow: hidden !important; -} - -.note-title-widget input, -.note-detail-editable-text, -.note-detail-editable-text-editor { - padding: 0 !important; -} - -html, -body { - width: unset !important; - height: unset !important; - overflow: visible; - position: unset; - /* https://github.com/zadam/trilium/issues/3202 */ - color: black; -} - -#root-widget, -#horizontal-main-container, -#rest-pane, -#vertical-main-container, -#center-pane, -.split-note-container-widget, -.note-split:not(.hidden-ext), -body.mobile #mobile-rest-container { - display: block !important; - overflow: auto; - border-radius: 0 !important; -} - -#center-pane, -#rest-pane, -.note-split, -body.mobile #detail-container { - width: unset !important; - max-width: unset !important; -} - -.component { - contain: none !important; -} - -/* Respect page breaks */ -.page-break { - page-break-after: always; - break-after: always; -} - -.page-break > * { - display: none !important; -} - -.relation-map-wrapper { - height: 100vh !important; -} - -.table thead th, -.table td, -.table th { - /* Fix center vertical alignment of table cells */ - vertical-align: middle; -} - -pre { - box-shadow: unset !important; - border: 0.75pt solid gray !important; - border-radius: 2pt !important; -} - -th, -span[style] { - print-color-adjust: exact; - -webkit-print-color-adjust: exact; -} - -/* - * Text note specific fixes - */ -.ck-widget { - outline: none !important; -} - -.ck-placeholder, -.ck-widget__type-around, -.ck-widget__selection-handle { - display: none !important; -} - -.ck-widget.table td.ck-editor__nested-editable.ck-editor__nested-editable_focused, -.ck-widget.table td.ck-editor__nested-editable:focus, -.ck-widget.table th.ck-editor__nested-editable.ck-editor__nested-editable_focused, -.ck-widget.table th.ck-editor__nested-editable:focus { - background: unset !important; - outline: unset !important; -} - -.include-note .include-note-content { - max-height: unset !important; - overflow: unset !important; -} - -/* TODO: This will break once we translate the language */ -.ck-content pre[data-language="Auto-detected"]:after { - display: none !important; -} - -/* - * Code note specific fixes. - */ -.note-detail-code pre { - border: unset !important; - border-radius: unset !important; -} - -/* - * Links - */ - -.note-detail-printable a { - text-decoration: none; -} - -.note-detail-printable a:not([href^="#root/"]) { - text-decoration: underline; - color: #374a75; -} - -.note-detail-printable a::after { - /* Hide the external link trailing arrow */ - display: none !important; -} - -/* - * TODO list check boxes - */ - -.note-detail-printable .todo-list__label * { - -webkit-print-color-adjust: exact; - print-color-adjust: exact; -} - -@supports selector(.todo-list__label__description:has(*)) and (height: 1lh) { - .note-detail-printable .todo-list__label__description { - /* The percentage of the line height that the check box occupies */ - --box-ratio: 0.75; - /* The size of the gap between the check box and the caption */ - --box-text-gap: 0.25em; - - --box-size: calc(1lh * var(--box-ratio)); - --box-vert-offset: calc((1lh - var(--box-size)) / 2); - - display: inline-block; - padding-inline-start: calc(var(--box-size) + var(--box-text-gap)); - /* Source: https://pictogrammers.com/library/mdi/icon/checkbox-blank-outline/ */ - background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='currentColor'%3e%3cpath d='M19%2c3H5C3.89%2c3 3%2c3.89 3%2c5V19A2%2c2 0 0%2c0 5%2c21H19A2%2c2 0 0%2c0 21%2c19V5C21%2c3.89 20.1%2c3 19%2c3M19%2c5V19H5V5H19Z' /%3e%3c/svg%3e"); - background-position: 0 var(--box-vert-offset); - background-size: var(--box-size); - background-repeat: no-repeat; - } - - .note-detail-printable .todo-list__label:has(input[type="checkbox"]:checked) .todo-list__label__description { - /* Source: https://pictogrammers.com/library/mdi/icon/checkbox-outline/ */ - background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='currentColor'%3e%3cpath d='M19%2c3H5A2%2c2 0 0%2c0 3%2c5V19A2%2c2 0 0%2c0 5%2c21H19A2%2c2 0 0%2c0 21%2c19V5A2%2c2 0 0%2c0 19%2c3M19%2c5V19H5V5H19M10%2c17L6%2c13L7.41%2c11.58L10%2c14.17L16.59%2c7.58L18%2c9' /%3e%3c/svg%3e"); - } - - .note-detail-printable .todo-list__label input[type="checkbox"] { - display: none !important; - } -} - -/* - * Blockquotes - */ - -.note-detail-printable blockquote { - box-shadow: unset; -} - -/* - * Figures - */ - -.note-detail-printable figcaption { - --accented-background-color: transparent; - - font-style: italic; -} - -/* - * Footnotes - */ - -.note-detail-printable .footnote-reference a, -.footnote-back-link a { - text-decoration: none; -} - -/* Make the "^" link cover the whole area of the footnote item */ - -.footnote-section { - clear: both; -} - -.note-detail-printable li.footnote-item { - position: relative; - width: fit-content; -} - -.note-detail-printable .footnote-back-link, -.note-detail-printable .footnote-back-link *, -.note-detail-printable .footnote-back-link a { - display: block; - position: absolute; - - top: 0; - inset-inline-start: 0; - width: 100%; - height: 100%; -} - -.note-detail-printable .footnote-back-link a { - color: transparent; -} - -.note-detail-printable .footnote-content { - display: inline-block; - width: unset; -} - -/* - * Widows and orphans - */ -p, -blockquote { - widows: 4; - orphans: 4; -} - -pre > code { - widows: 6; - orphans: 6; - overflow: auto; - white-space: pre-wrap !important; -} - -h1, -h2, -h3, -h4, -h5, -h6 { - page-break-after: avoid; - break-after: avoid; -} From e069d87fe81e6c118810420b00e79082382d0e5f Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Mon, 20 Oct 2025 12:39:38 +0300 Subject: [PATCH 053/103] fix(client/print): wrong entrypoint in prod --- apps/client/vite.config.mts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/client/vite.config.mts b/apps/client/vite.config.mts index 3dd52b6b9..5a3053915 100644 --- a/apps/client/vite.config.mts +++ b/apps/client/vite.config.mts @@ -77,7 +77,7 @@ export default defineConfig(() => ({ share: join(__dirname, "src", "share.ts"), set_password: join(__dirname, "src", "set_password.ts"), runtime: join(__dirname, "src", "runtime.ts"), - print: join(__dirname, "src", "print.ts") + print: join(__dirname, "src", "print.tsx") }, output: { entryFileNames: "src/[name].js", From e6c8f238f9b6c5eec5dfbe1f5c11c02ee41eff78 Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Mon, 20 Oct 2025 12:40:41 +0300 Subject: [PATCH 054/103] fix(client/print): stylesheet not loading in prod --- apps/client/src/print.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/client/src/print.tsx b/apps/client/src/print.tsx index 86d98b113..697ab1a6b 100644 --- a/apps/client/src/print.tsx +++ b/apps/client/src/print.tsx @@ -1,7 +1,6 @@ import FNote from "./entities/fnote"; import { render } from "preact"; import { CustomNoteList } from "./widgets/collections/NoteList"; -import "./print.css"; import { useCallback, useLayoutEffect, useRef } from "preact/hooks"; import content_renderer from "./services/content_renderer"; @@ -15,6 +14,7 @@ async function main() { const noteId = notePath.split("/").at(-1); if (!noteId) return; + await import("./print.css"); const froca = (await import("./services/froca")).default; const note = await froca.getNote(noteId); From 29d6784c59f6e1a54b5e9ad9700275dad8d4463e Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Mon, 20 Oct 2025 12:46:24 +0300 Subject: [PATCH 055/103] feat(client/print): render 404 errors --- apps/client/src/print.tsx | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/apps/client/src/print.tsx b/apps/client/src/print.tsx index 697ab1a6b..4aff8729b 100644 --- a/apps/client/src/print.tsx +++ b/apps/client/src/print.tsx @@ -18,18 +18,19 @@ async function main() { const froca = (await import("./services/froca")).default; const note = await froca.getNote(noteId); - if (!note) return; - render(, document.body); + render(, document.body); } -function App({ note }: { note: FNote }) { +function App({ note, noteId }: { note: FNote | null | undefined, noteId: string }) { const sentReadyEvent = useRef(false); const onReady = useCallback(() => { if (sentReadyEvent.current) return; window.dispatchEvent(new Event("note-ready")); sentReadyEvent.current = true; }, []); - const props: RendererProps = { note, onReady }; + const props: RendererProps | undefined | null = note && { note, onReady }; + + if (!note || !props) return return ( <> @@ -74,4 +75,13 @@ function CollectionRenderer({ note, onReady }: RendererProps) { />; } +function Error404({ noteId }: { noteId: string }) { + return ( +
+

The note you are trying to print could not be found.

+ {noteId} +
+ ) +} + main(); From acae069b9eb01888721bee10d0821e03d6869431 Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Mon, 20 Oct 2025 12:56:46 +0300 Subject: [PATCH 056/103] chore(client/print): fix typecheck issues --- _regroup/spec/support/etapi.ts | 3 --- apps/client/src/widgets/collections/NoteList.tsx | 5 +++-- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/_regroup/spec/support/etapi.ts b/_regroup/spec/support/etapi.ts index 307868d7d..b32ba38e7 100644 --- a/_regroup/spec/support/etapi.ts +++ b/_regroup/spec/support/etapi.ts @@ -1,4 +1,3 @@ -import type child_process from "child_process"; import { describe, beforeAll, afterAll } from "vitest"; let etapiAuthToken: string | undefined; @@ -12,8 +11,6 @@ type SpecDefinitionsFunc = () => void; function describeEtapi(description: string, specDefinitions: SpecDefinitionsFunc): void { describe(description, () => { - let appProcess: ReturnType; - beforeAll(async () => {}); afterAll(() => {}); diff --git a/apps/client/src/widgets/collections/NoteList.tsx b/apps/client/src/widgets/collections/NoteList.tsx index f9c9ba5d1..76deeeffe 100644 --- a/apps/client/src/widgets/collections/NoteList.tsx +++ b/apps/client/src/widgets/collections/NoteList.tsx @@ -23,7 +23,7 @@ interface NoteListProps { isEnabled: boolean; ntxId: string | null | undefined; media: ViewModeMedia; - onReady: () => void; + onReady?: () => void; } export default function NoteList(props: Pick) { @@ -36,7 +36,7 @@ export function SearchNoteList(props: Omit } -export function CustomNoteList({ note, isEnabled: shouldEnable, notePath, highlightedTokens, displayOnlyCollections, ntxId, ...restProps }: NoteListProps) { +export function CustomNoteList({ note, isEnabled: shouldEnable, notePath, highlightedTokens, displayOnlyCollections, ntxId, onReady, ...restProps }: NoteListProps) { const widgetRef = useRef(null); const viewType = useNoteViewType(note); const noteIds = useNoteIds(note, viewType, ntxId); @@ -79,6 +79,7 @@ export function CustomNoteList({ note, isEnabled: shouldEnable highlightedTokens, viewConfig: viewModeConfig[0], saveConfig: viewModeConfig[1], + onReady: onReady ?? (() => {}), ...restProps } } From 551e54a9580f91d55ad5180ec0820d1e0ff6327f Mon Sep 17 00:00:00 2001 From: Manfred Manni Date: Mon, 20 Oct 2025 11:42:38 +0200 Subject: [PATCH 057/103] Translated using Weblate (German) Currently translated at 99.6% (1613 of 1618 strings) Translation: Trilium Notes/Client Translate-URL: https://hosted.weblate.org/projects/trilium/client/de/ --- apps/client/src/translations/de/translation.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/apps/client/src/translations/de/translation.json b/apps/client/src/translations/de/translation.json index 69fc3f518..db0664813 100644 --- a/apps/client/src/translations/de/translation.json +++ b/apps/client/src/translations/de/translation.json @@ -646,7 +646,8 @@ "about": "Über Trilium Notes", "logout": "Abmelden", "show-cheatsheet": "Cheatsheet anzeigen", - "toggle-zen-mode": "Zen Modus" + "toggle-zen-mode": "Zen Modus", + "new-version-available": "Neues Update verfügbar" }, "sync_status": { "unknown": "

Der Synchronisations-Status wird bekannt, sobald der nächste Synchronisierungsversuch gestartet wird.

Klicke, um eine Synchronisierung jetzt auszulösen.

", From e0aa49b36d029c47e87d952ab4189ee382f40ea1 Mon Sep 17 00:00:00 2001 From: Manfred Manni Date: Mon, 20 Oct 2025 11:42:08 +0200 Subject: [PATCH 058/103] Translated using Weblate (German) Currently translated at 100.0% (386 of 386 strings) Translation: Trilium Notes/Server Translate-URL: https://hosted.weblate.org/projects/trilium/server/de/ --- apps/server/src/assets/translations/de/server.json | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/apps/server/src/assets/translations/de/server.json b/apps/server/src/assets/translations/de/server.json index 0043f21cf..6ee28f60f 100644 --- a/apps/server/src/assets/translations/de/server.json +++ b/apps/server/src/assets/translations/de/server.json @@ -307,7 +307,12 @@ "board_note_second": "Zweite Notiz", "board_note_third": "Dritte Notiz", "board_status_todo": "To-Do", - "board_status_progress": "In Bearbeitung" + "board_status_progress": "In Bearbeitung", + "presentation": "Präsentation", + "presentation_slide": "Präsentationsfolie", + "presentation_slide_first": "Erste Folie", + "presentation_slide_second": "Zweite Folie", + "background": "Hintergrund" }, "keyboard_action_names": { "copy-notes-to-clipboard": "Notizen in Zwischenablage kopieren", From 453c29c1602ac53d38dfe7ee6c4f2552756dfcc7 Mon Sep 17 00:00:00 2001 From: Francis C Date: Mon, 20 Oct 2025 09:39:31 +0200 Subject: [PATCH 059/103] Translated using Weblate (Chinese (Traditional Han script)) Currently translated at 100.0% (1618 of 1618 strings) Translation: Trilium Notes/Client Translate-URL: https://hosted.weblate.org/projects/trilium/client/zh_Hant/ --- apps/client/src/translations/tw/translation.json | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/apps/client/src/translations/tw/translation.json b/apps/client/src/translations/tw/translation.json index db5096aa2..360789fa9 100644 --- a/apps/client/src/translations/tw/translation.json +++ b/apps/client/src/translations/tw/translation.json @@ -765,7 +765,8 @@ "table": "表格", "geo-map": "地理地圖", "board": "看板", - "include_archived_notes": "顯示已封存筆記" + "include_archived_notes": "顯示已封存筆記", + "presentation": "簡報" }, "edited_notes": { "no_edited_notes_found": "今天還沒有編輯過的筆記...", @@ -2074,5 +2075,10 @@ }, "collections": { "rendering_error": "發現錯誤,無法顯示內容。" + }, + "presentation_view": { + "edit-slide": "編輯此投影片", + "start-presentation": "開始簡報", + "slide-overview": "切換投影片概覽" } } From 2296e5a089d5cf838674bd4d526d07d473d55aef Mon Sep 17 00:00:00 2001 From: Francis C Date: Mon, 20 Oct 2025 09:37:30 +0200 Subject: [PATCH 060/103] Translated using Weblate (Chinese (Traditional Han script)) Currently translated at 100.0% (386 of 386 strings) Translation: Trilium Notes/Server Translate-URL: https://hosted.weblate.org/projects/trilium/server/zh_Hant/ --- apps/server/src/assets/translations/tw/server.json | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/apps/server/src/assets/translations/tw/server.json b/apps/server/src/assets/translations/tw/server.json index cf9917a21..fa339ca17 100644 --- a/apps/server/src/assets/translations/tw/server.json +++ b/apps/server/src/assets/translations/tw/server.json @@ -423,7 +423,12 @@ "board_note_third": "第三個筆記", "board_status_todo": "待辦", "board_status_progress": "進行中", - "board_status_done": "已完成" + "board_status_done": "已完成", + "presentation": "簡報", + "presentation_slide": "簡報投影片", + "presentation_slide_first": "第一張投影片", + "presentation_slide_second": "第二張投影片", + "background": "背景" }, "sql_init": { "db_not_initialized_desktop": "資料庫尚未初始化,請依螢幕指示操作。", From 942125d236065372a60f852a0e03d562e443c449 Mon Sep 17 00:00:00 2001 From: Luk On Date: Mon, 20 Oct 2025 12:02:03 +0200 Subject: [PATCH 061/103] Translated using Weblate (Polish) Currently translated at 74.0% (286 of 386 strings) Translation: Trilium Notes/Server Translate-URL: https://hosted.weblate.org/projects/trilium/server/pl/ --- apps/server/src/assets/translations/pl/server.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/server/src/assets/translations/pl/server.json b/apps/server/src/assets/translations/pl/server.json index 5fc0f3e95..2838d138c 100644 --- a/apps/server/src/assets/translations/pl/server.json +++ b/apps/server/src/assets/translations/pl/server.json @@ -13,7 +13,7 @@ "sort-child-notes": "Sortuj podnotatki", "creating-and-moving-notes": "Tworzenie oraz przestawianie notatek", "create-note-after": "Utwórz notatkę po aktywnej notatce", - "create-note-into": "Utwórz notatkę jako podnotatka aktywnej notatki", + "create-note-into": "Utwórz notatkę jako pod-notatka aktywnej notatki", "create-note-into-inbox": "Utwórz notatkę w skrzyncę (jeśli zdefiniowana) lub jako notatka dnia", "delete-note": "Usuń notatkę", "move-note-up": "Przestaw notatkę wyżej", From 73c35111e0d216ff01c4972df2d5ef2422389ac3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adam=20Fi=C5=A1er?= Date: Mon, 20 Oct 2025 09:42:29 +0200 Subject: [PATCH 062/103] Translated using Weblate (Czech) Currently translated at 1.9% (32 of 1618 strings) Translation: Trilium Notes/Client Translate-URL: https://hosted.weblate.org/projects/trilium/client/cs/ --- .../src/translations/cs/translation.json | 27 +++++++++++++++++-- 1 file changed, 25 insertions(+), 2 deletions(-) diff --git a/apps/client/src/translations/cs/translation.json b/apps/client/src/translations/cs/translation.json index aedf9519f..6cdb3321b 100644 --- a/apps/client/src/translations/cs/translation.json +++ b/apps/client/src/translations/cs/translation.json @@ -4,7 +4,7 @@ "homepage": "Domovská stránka:", "app_version": "Verze aplikace:", "db_version": "Verze DB:", - "sync_version": "Verze sync:", + "sync_version": "Verze synchronizace:", "build_date": "Datum sestavení:", "build_revision": "Revize sestavení:", "data_directory": "Datový adresář:" @@ -36,6 +36,29 @@ "add_link": "Přidat odkaz", "help_on_links": "Nápověda k odkazům", "note": "Poznámka", - "search_note": "hledat poznámku podle názvu" + "search_note": "hledat poznámku podle názvu", + "link_title": "Název odkazu", + "button_add_link": "Přidat odkaz" + }, + "branch_prefix": { + "prefix": "Prefix: ", + "save": "Uložit" + }, + "bulk_actions": { + "bulk_actions": "Hromadné akce", + "affected_notes": "Ovlivněné poznámky", + "notes": "Poznámky" + }, + "confirm": { + "cancel": "Zrušit", + "ok": "OK" + }, + "delete_notes": { + "cancel": "Zrušit", + "ok": "OK", + "close": "Zavřít" + }, + "export": { + "close": "Zavřít" } } From 0ce8fa1115a497dc2ea10732325c4e2689785297 Mon Sep 17 00:00:00 2001 From: Francis C Date: Mon, 20 Oct 2025 09:04:19 +0200 Subject: [PATCH 063/103] Translated using Weblate (Chinese (Traditional Han script)) Currently translated at 100.0% (118 of 118 strings) Translation: Trilium Notes/README Translate-URL: https://hosted.weblate.org/projects/trilium/readme/zh_Hant/ --- docs/README-ZH_TW.md | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/docs/README-ZH_TW.md b/docs/README-ZH_TW.md index e71c04e58..2a323c02d 100644 --- a/docs/README-ZH_TW.md +++ b/docs/README-ZH_TW.md @@ -30,12 +30,11 @@ Trilium Notes 是一款免費且開源、跨平台的階層式筆記應用程式 Trilium Screenshot -## ⏬ Download -- [Latest release](https://github.com/TriliumNext/Trilium/releases/latest) – - stable version, recommended for most users. -- [Nightly build](https://github.com/TriliumNext/Trilium/releases/tag/nightly) – - unstable development version, updated daily with the latest features and - fixes. +## ⏬ 下載 +- [最新版本](https://github.com/TriliumNext/Trilium/releases/latest) – + 穩定版本,推薦給大多數使用者。 +- [夜間構建](https://github.com/TriliumNext/Trilium/releases/tag/nightly) – + 不穩定開發版本,每日更新最新功能與修復內容。 ## 📚 文件 From 2cd6c01d1eb96cd726e0b6dbb118f24fc01991fa Mon Sep 17 00:00:00 2001 From: Francis C Date: Mon, 20 Oct 2025 09:40:17 +0200 Subject: [PATCH 064/103] Translated using Weblate (Japanese) Currently translated at 100.0% (118 of 118 strings) Translation: Trilium Notes/README Translate-URL: https://hosted.weblate.org/projects/trilium/readme/ja/ --- docs/README-ja.md | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/docs/README-ja.md b/docs/README-ja.md index 5215aac57..4fdea3056 100644 --- a/docs/README-ja.md +++ b/docs/README-ja.md @@ -32,12 +32,11 @@ Trilium Notes Trilium Screenshot -## ⏬ Download -- [Latest release](https://github.com/TriliumNext/Trilium/releases/latest) – - stable version, recommended for most users. -- [Nightly build](https://github.com/TriliumNext/Trilium/releases/tag/nightly) – - unstable development version, updated daily with the latest features and - fixes. +## ⏬ ダウンロード +- [最新リリース](https://github.com/TriliumNext/Trilium/releases/latest) – + 安定バージョン。ほとんどのユーザーに推奨されます。 +- [ナイトリービルド](https://github.com/TriliumNext/Trilium/releases/tag/nightly) – + 不安定な開発バージョン。最新の機能と修正が毎日更新されます。 ## 📚 ドキュメント From 274e1440d4bef05762462b9023bed9209cc0c719 Mon Sep 17 00:00:00 2001 From: Manfred Manni Date: Mon, 20 Oct 2025 11:33:39 +0200 Subject: [PATCH 065/103] Translated using Weblate (German) Currently translated at 22.0% (26 of 118 strings) Translation: Trilium Notes/README Translate-URL: https://hosted.weblate.org/projects/trilium/readme/de/ --- docs/README-de.md | 41 ++++++++++++++++++++--------------------- 1 file changed, 20 insertions(+), 21 deletions(-) diff --git a/docs/README-de.md b/docs/README-de.md index ca3dfc8e8..7cf8846b3 100644 --- a/docs/README-de.md +++ b/docs/README-de.md @@ -29,45 +29,44 @@ Trilium Notes ist eine freie, open-source, plattformfreie, hierarchische Notiz-Anwendung mit Fokus auf die Erstellung großer persönlicher Wissenssammlungen. -See [screenshots](https://triliumnext.github.io/Docs/Wiki/screenshot-tour) for -quick overview: +Siehe [screenshots](https://triliumnext.github.io/Docs/Wiki/screenshot-tour) für +einen schnellen Überblick: Trilium Screenshot ## ⏬ Download -- [Latest release](https://github.com/TriliumNext/Trilium/releases/latest) – - stable version, recommended for most users. +- [Neueste Version](https://github.com/TriliumNext/Trilium/releases/latest) – + stabile Version, für die meisten Benutzer empfohlen. - [Nightly build](https://github.com/TriliumNext/Trilium/releases/tag/nightly) – - unstable development version, updated daily with the latest features and - fixes. + instabile Entwicklungsversion, die täglich mit den neuesten Funktionen und + Fehlerbehebungen aktualisiert wird. ## 📚 Dokumentation -**Visit our comprehensive documentation at +**Besuche unsere umfassende Dokumentation unter [docs.triliumnotes.org](https://docs.triliumnotes.org/)** Unsere Dokumentation ist verfügbar in mehreren Formaten: -- **Online Documentation**: Browse the full documentation at +- **Online-Dokumentation**: Die vollständige Dokumentation finden man unter [docs.triliumnotes.org](https://docs.triliumnotes.org/) - **In-App Help**: Press `F1` within Trilium to access the same documentation directly in the application -- **GitHub**: Navigate through the [User - Guide](./docs/User%20Guide/User%20Guide/) in this repository +- **GitHub**: Durchsuche das + [Benutzerhandbuch](./docs/User%20Guide/User%20Guide/) in diesem Repository -### Quick Links -- [Getting Started Guide](https://docs.triliumnotes.org/) -- [Installation - Instructions](./docs/User%20Guide/User%20Guide/Installation%20&%20Setup/Server%20Installation.md) +### Schnellzugriff +- [Erste Schritte](https://docs.triliumnotes.org/) +- [Installationsanleitung](./docs/User%20Guide/User%20Guide/Installation%20&%20Setup/Server%20Installation.md) - [Docker Setup](./docs/User%20Guide/User%20Guide/Installation%20&%20Setup/Server%20Installation/1.%20Installing%20the%20server/Using%20Docker.md) -- [Upgrading - TriliumNext](./docs/User%20Guide/User%20Guide/Installation%20%26%20Setup/Upgrading%20TriliumNext.md) -- [Basic Concepts and - Features](./docs/User%20Guide/User%20Guide/Basic%20Concepts%20and%20Features/Notes.md) -- [Patterns of Personal Knowledge - Base](https://triliumnext.github.io/Docs/Wiki/patterns-of-personal-knowledge) +- [TriliumNext + aktualisieren](./docs/User%20Guide/User%20Guide/Installation%20%26%20Setup/Upgrading%20TriliumNext.md) +- [Grundkonzepte und + Funktionen](./docs/User%20Guide/User%20Guide/Basic%20Concepts%20and%20Features/Notes.md) +- [Muster persönlicher + Wissensdatenbanken](https://triliumnext.github.io/Docs/Wiki/patterns-of-personal-knowledge) -## 🎁 Features +## 🎁 Funktionen * Notes can be arranged into arbitrarily deep tree. Single note can be placed into multiple places in the tree (see From 8c6a497b79f10724b93875750e81c6e6617b6d46 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adam=20Fi=C5=A1er?= Date: Mon, 20 Oct 2025 09:29:41 +0200 Subject: [PATCH 066/103] Translated using Weblate (Czech) Currently translated at 2.5% (3 of 118 strings) Translation: Trilium Notes/README Translate-URL: https://hosted.weblate.org/projects/trilium/readme/cs/ --- docs/README-cs.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/README-cs.md b/docs/README-cs.md index bba139cc9..00f8e0130 100644 --- a/docs/README-cs.md +++ b/docs/README-cs.md @@ -33,9 +33,9 @@ quick overview: Trilium Screenshot -## ⏬ Download -- [Latest release](https://github.com/TriliumNext/Trilium/releases/latest) – - stable version, recommended for most users. +## ⏬ Stáhnout +- [Nejnovější verze](https://github.com/TriliumNext/Trilium/releases/latest) – + stabilní verze, doporučena pro většinu uživatelů. - [Nightly build](https://github.com/TriliumNext/Trilium/releases/tag/nightly) – unstable development version, updated daily with the latest features and fixes. @@ -66,7 +66,7 @@ Our documentation is available in multiple formats: - [Patterns of Personal Knowledge Base](https://triliumnext.github.io/Docs/Wiki/patterns-of-personal-knowledge) -## 🎁 Features +## 🎁 Funkce * Notes can be arranged into arbitrarily deep tree. Single note can be placed into multiple places in the tree (see From 3daa39cff8bd74339300ba3580cafe1971e57279 Mon Sep 17 00:00:00 2001 From: Luk On Date: Mon, 20 Oct 2025 12:08:43 +0200 Subject: [PATCH 067/103] Translated using Weblate (Polish) Currently translated at 6.7% (8 of 118 strings) Translation: Trilium Notes/README Translate-URL: https://hosted.weblate.org/projects/trilium/readme/pl/ --- docs/README-pl.md | 26 ++++++++++++++------------ 1 file changed, 14 insertions(+), 12 deletions(-) diff --git a/docs/README-pl.md b/docs/README-pl.md index bba139cc9..dd68a1240 100644 --- a/docs/README-pl.md +++ b/docs/README-pl.md @@ -25,8 +25,9 @@ status](https://hosted.weblate.org/widget/trilium/svg-badge.svg)](https://hosted | [Japanese](./docs/README-ja.md) | [Italian](./docs/README-it.md) | [Spanish](./docs/README-es.md) -Trilium Notes is a free and open-source, cross-platform hierarchical note taking -application with focus on building large personal knowledge bases. +Trilium Notes to darmowa, otwarto-źródłowa i wieloplatformowa aplikacja do +tworzenia hierarchicznych notatek, skoncentrowana na budowaniu dużych osobistych +baz wiedzy. See [screenshots](https://triliumnext.github.io/Docs/Wiki/screenshot-tour) for quick overview: @@ -36,20 +37,20 @@ quick overview: ## ⏬ Download - [Latest release](https://github.com/TriliumNext/Trilium/releases/latest) – stable version, recommended for most users. -- [Nightly build](https://github.com/TriliumNext/Trilium/releases/tag/nightly) – - unstable development version, updated daily with the latest features and - fixes. +- [Nightly build](https://github.com/TriliumNext/Trilium/releases/tag/nightly) - + niestabilna wersja deweloperska, aktualizowana codziennie o najnowsze funkcje + i poprawki. -## 📚 Documentation +## 📚Dokumentacja -**Visit our comprehensive documentation at +**Odwiedź naszą obszerną dokumentację na [docs.triliumnotes.org](https://docs.triliumnotes.org/)** -Our documentation is available in multiple formats: +Nasza dokumentacja jest dostępna w wielu formatach: - **Online Documentation**: Browse the full documentation at [docs.triliumnotes.org](https://docs.triliumnotes.org/) -- **In-App Help**: Press `F1` within Trilium to access the same documentation - directly in the application +- **Pomoc w aplikacji**: Naciśnij `F1` w Trilium, aby uzyskać dostęp do tej + samej dokumentacji bezpośrednio w aplikacji - **GitHub**: Navigate through the [User Guide](./docs/User%20Guide/User%20Guide/) in this repository @@ -71,9 +72,10 @@ Our documentation is available in multiple formats: * Notes can be arranged into arbitrarily deep tree. Single note can be placed into multiple places in the tree (see [cloning](https://triliumnext.github.io/Docs/Wiki/cloning-notes)) -* Rich WYSIWYG note editor including e.g. tables, images and - [math](https://triliumnext.github.io/Docs/Wiki/text-notes) with markdown +* Bogaty edytor notatek WYSIWYG, zawierający np. tabele, obrazy i + [math](https://triliumnext.github.io/Docs/Wiki/text-notes) z [autoformat](https://triliumnext.github.io/Docs/Wiki/text-notes#autoformat) + Markdown * Support for editing [notes with source code](https://triliumnext.github.io/Docs/Wiki/code-notes), including syntax highlighting From 04f67776279dc3a80680da9549a153a87945d1d5 Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Mon, 20 Oct 2025 14:04:04 +0300 Subject: [PATCH 068/103] chore(client/print): address requested changes --- apps/client/src/print.tsx | 1 + apps/client/src/types.d.ts | 3 +++ apps/client/src/widgets/note_detail.ts | 7 ++++++- apps/server/src/services/window.ts | 17 ++++++++++------- 4 files changed, 20 insertions(+), 8 deletions(-) diff --git a/apps/client/src/print.tsx b/apps/client/src/print.tsx index 4aff8729b..e762f5781 100644 --- a/apps/client/src/print.tsx +++ b/apps/client/src/print.tsx @@ -26,6 +26,7 @@ function App({ note, noteId }: { note: FNote | null | undefined, noteId: string const onReady = useCallback(() => { if (sentReadyEvent.current) return; window.dispatchEvent(new Event("note-ready")); + window._noteReady = true; sentReadyEvent.current = true; }, []); const props: RendererProps | undefined | null = note && { note, onReady }; diff --git a/apps/client/src/types.d.ts b/apps/client/src/types.d.ts index 2546d2ffa..c5a93bd0a 100644 --- a/apps/client/src/types.d.ts +++ b/apps/client/src/types.d.ts @@ -59,6 +59,9 @@ declare global { process?: ElectronProcess; glob?: CustomGlobals; + /** On the printing endpoint, set to true when the note has fully loaded and is ready to be printed/exported as PDF. */ + _noteReady?: boolean; + EXCALIDRAW_ASSET_PATH?: string; } diff --git a/apps/client/src/widgets/note_detail.ts b/apps/client/src/widgets/note_detail.ts index a701d442b..a976b97ce 100644 --- a/apps/client/src/widgets/note_detail.ts +++ b/apps/client/src/widgets/note_detail.ts @@ -322,7 +322,12 @@ export default class NoteDetailWidget extends NoteContextAwareWidget { iframe.className = "print-iframe"; document.body.appendChild(iframe); iframe.onload = () => { - if (!iframe.contentWindow) return; + if (!iframe.contentWindow) { + toast.closePersistent("printing"); + document.body.removeChild(iframe); + return; + } + iframe.contentWindow.addEventListener("note-ready", () => { toast.closePersistent("printing"); iframe.contentWindow?.print(); diff --git a/apps/server/src/services/window.ts b/apps/server/src/services/window.ts index 69d273158..459ebdf59 100644 --- a/apps/server/src/services/window.ts +++ b/apps/server/src/services/window.ts @@ -84,19 +84,18 @@ interface ExportAsPdfOpts { electron.ipcMain.on("print-note", async (e, { notePath }: PrintOpts) => { const browserWindow = await getBrowserWindowForPrinting(e, notePath); browserWindow.webContents.print({}, (success, failureReason) => { - if (success) { - browserWindow.destroy(); - } else { + if (!success) { electron.dialog.showErrorBox(t("pdf.unable-to-print"), failureReason); } e.sender.send("print-done"); + browserWindow.destroy(); }); }); electron.ipcMain.on("export-as-pdf", async (e, { title, notePath, landscape, pageSize }: ExportAsPdfOpts) => { - async function print() { - const browserWindow = await getBrowserWindowForPrinting(e, notePath); + const browserWindow = await getBrowserWindowForPrinting(e, notePath); + async function print() { const filePath = electron.dialog.showSaveDialogSync(browserWindow, { defaultPath: formatDownloadTitle(title, "file", "application/pdf"), filters: [ @@ -138,8 +137,12 @@ electron.ipcMain.on("export-as-pdf", async (e, { title, notePath, landscape, pag electron.shell.openPath(filePath); } - await print(); - e.sender.send("print-done"); + try { + await print(); + } finally { + e.sender.send("print-done"); + browserWindow.destroy(); + } }); async function getBrowserWindowForPrinting(e: IpcMainEvent, notePath: string) { From cc09a450c9dbb3b6e1f1437f457d0c96ecc8194b Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Mon, 20 Oct 2025 14:16:20 +0300 Subject: [PATCH 069/103] docs(user): improve & update documentation for printing --- .../doc_notes/en/User Guide/!!!meta.json | 2 +- .../Advanced Usage/Attributes/Labels.html | 4 +- ...e.png => 1_Printing & Exporting as PD.png} | Bin .../Notes/Export as PDF.html | 42 ------- ...age.png => Printing & Exporting as PD.png} | Bin .../Notes/Printing & Exporting as PDF.html | 111 +++++++++++++++++ .../Collections/Presentation View.html | 114 +++++++++--------- .../Custom app-wide CSS.html | 76 ++++++------ docs/User Guide/!!!meta.json | 85 ++++++++++--- ...e.png => 1_Printing & Exporting as PD.png} | Bin .../Notes/Export as PDF.md | 38 ------ ...age.png => Printing & Exporting as PD.png} | Bin .../Notes/Printing & Exporting as PDF.md | 75 ++++++++++++ .../User Guide/Feature Highlights.md | 2 +- .../Note Types/Text/Insert buttons.md | 2 +- 15 files changed, 351 insertions(+), 200 deletions(-) rename apps/server/src/assets/doc_notes/en/User Guide/User Guide/Basic Concepts and Features/Notes/{1_Export as PDF_image.png => 1_Printing & Exporting as PD.png} (100%) delete mode 100644 apps/server/src/assets/doc_notes/en/User Guide/User Guide/Basic Concepts and Features/Notes/Export as PDF.html rename apps/server/src/assets/doc_notes/en/User Guide/User Guide/Basic Concepts and Features/Notes/{Export as PDF_image.png => Printing & Exporting as PD.png} (100%) create mode 100644 apps/server/src/assets/doc_notes/en/User Guide/User Guide/Basic Concepts and Features/Notes/Printing & Exporting as PDF.html rename docs/User Guide/User Guide/Basic Concepts and Features/Notes/{1_Export as PDF_image.png => 1_Printing & Exporting as PD.png} (100%) delete mode 100644 docs/User Guide/User Guide/Basic Concepts and Features/Notes/Export as PDF.md rename docs/User Guide/User Guide/Basic Concepts and Features/Notes/{Export as PDF_image.png => Printing & Exporting as PD.png} (100%) create mode 100644 docs/User Guide/User Guide/Basic Concepts and Features/Notes/Printing & Exporting as PDF.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 12fa68969..14e062249 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-file","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_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-file","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_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_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-file","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-file","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-file","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_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_ZjLYv08Rp3qC","title":"Quick edit","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/Quick edit"},{"name":"iconClass","value":"bx bx-file","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_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":"Export as PDF","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Notes/Export as PDF"},{"name":"iconClass","value":"bx bxs-file-pdf","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.clone"},{"name":"iconClass","value":"bx bx-file","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_mHbBMPDPkVV5","title":"Import & Export","type":"book","attributes":[{"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-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-file","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_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_GTwFsgaA0lCt","title":"Collections","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Collections"},{"name":"iconClass","value":"bx bx-book","type":"label"}],"children":[{"id":"_help_xWbu3jpNWapp","title":"Calendar View","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Collections/Calendar View"},{"name":"iconClass","value":"bx bx-calendar","type":"label"}]},{"id":"_help_81SGnPGMk7Xc","title":"Geo Map View","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Collections/Geo Map View"},{"name":"iconClass","value":"bx bx-map-alt","type":"label"}]},{"id":"_help_8QqnMzx393bx","title":"Grid View","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/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/Note Types/Collections/List View"},{"name":"iconClass","value":"bx bx-list-ul","type":"label"}]},{"id":"_help_2FvYrpmOXm29","title":"Table View","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Collections/Table View"},{"name":"iconClass","value":"bx bx-table","type":"label"}]},{"id":"_help_CtBQqbwXDx1w","title":"Board View","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Collections/Board View"},{"name":"iconClass","value":"bx bx-columns","type":"label"}]},{"id":"_help_zP3PMqaG71Ct","title":"Presentation View","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Collections/Presentation View"},{"name":"iconClass","value":"bx bx-slideshow","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_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","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-file","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-file","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-file","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-file","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 bx-file","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-file","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-file","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 bx-file","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-file","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 bx-file","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-file","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-file","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 bx-file","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-file","type":"label"}],"children":[{"id":"_help_9qPsTWBorUhQ","title":"API Reference","type":"webView","attributes":[{"type":"label","name":"webViewSrc","value":"/etapi/docs"},{"name":"iconClass","value":"bx bx-file","type":"label"}]}]},{"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-file","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 bx-file","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-file","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-file","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-file","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 bxs-component","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-file","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-file","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-file","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 bx-folder","type":"label"}],"children":[{"id":"_help_z8O2VG4ZZJD7","title":"API Reference","type":"webView","attributes":[{"type":"label","name":"webViewSrc","value":"/api/docs"},{"name":"iconClass","value":"bx bx-file","type":"label"}]}]},{"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_LMAv4Uy3Wk6J","title":"AI","type":"book","attributes":[{"name":"iconClass","value":"bx bx-bot","type":"label"}],"children":[{"id":"_help_GBBMSlVSOIGP","title":"Introduction","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/AI/Introduction"},{"name":"iconClass","value":"bx bx-file","type":"label"}]},{"id":"_help_WkM7gsEUyCXs","title":"AI Provider Information","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/AI/AI Provider Information"},{"name":"iconClass","value":"bx bx-file","type":"label"}],"children":[{"id":"_help_7EdTxPADv95W","title":"Ollama","type":"book","attributes":[{"name":"iconClass","value":"bx bx-folder","type":"label"}],"children":[{"id":"_help_vvUCN7FDkq7G","title":"Installing Ollama","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/AI/AI Provider Information/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/AI Provider Information/OpenAI"},{"name":"iconClass","value":"bx bx-file","type":"label"}]},{"id":"_help_e0lkirXEiSNc","title":"Anthropic","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/AI/AI Provider Information/Anthropic"},{"name":"iconClass","value":"bx bx-file","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-file","type":"label"}]},{"id":"_help_es8OU2GuguFU","title":"Examples","type":"book","attributes":[{"name":"iconClass","value":"bx bx-folder","type":"label"}],"children":[{"id":"_help_TjLYAo3JMO8X","title":"\"New Task\" launcher button","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Scripting/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/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/Examples/Using promoted attributes to c"},{"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/Events"},{"name":"iconClass","value":"bx bx-rss","type":"label"}]},{"id":"_help_MgibgPcfeuGz","title":"Custom Widgets","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Scripting/Custom Widgets"},{"name":"iconClass","value":"bx bx-file","type":"label"}],"children":[{"id":"_help_YNxAqkI5Kg1M","title":"Word count widget","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Scripting/Custom Widgets/Word count widget"},{"name":"iconClass","value":"bx bx-file","type":"label"}]},{"id":"_help_SynTBQiBsdYJ","title":"Widget Basics","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Scripting/Custom Widgets/Widget Basics"},{"name":"iconClass","value":"bx bx-file","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-file","type":"label"}],"children":[{"id":"_help_Q2z6av6JZVWm","title":"Frontend API","type":"webView","attributes":[{"type":"label","name":"webViewSrc","value":"https://triliumnext.github.io/Notes/Script%20API/interfaces/Frontend_Script_API.Api.html"},{"name":"iconClass","value":"bx bx-folder","type":"label"}],"children":[{"id":"_help_habiZ3HU8Kw8","title":"FNote","type":"webView","attributes":[{"type":"label","name":"webViewSrc","value":"https://triliumnext.github.io/Notes/Script%20API/classes/Frontend_Script_API.FNote.html"},{"name":"iconClass","value":"bx bx-file","type":"label"}]}]},{"id":"_help_MEtfsqa5VwNi","title":"Backend API","type":"webView","attributes":[{"type":"label","name":"webViewSrc","value":"https://triliumnext.github.io/Notes/Script%20API/interfaces/Backend_Script_API.Api.html"},{"name":"iconClass","value":"bx bx-file","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"}]}]}] \ 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-file","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_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-file","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_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_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-file","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-file","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-file","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_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_ZjLYv08Rp3qC","title":"Quick edit","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/Quick edit"},{"name":"iconClass","value":"bx bx-file","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_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.clone"},{"name":"iconClass","value":"bx bx-file","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_mHbBMPDPkVV5","title":"Import & Export","type":"book","attributes":[{"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-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-file","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_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_GTwFsgaA0lCt","title":"Collections","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Collections"},{"name":"iconClass","value":"bx bx-book","type":"label"}],"children":[{"id":"_help_xWbu3jpNWapp","title":"Calendar View","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Collections/Calendar View"},{"name":"iconClass","value":"bx bx-calendar","type":"label"}]},{"id":"_help_81SGnPGMk7Xc","title":"Geo Map View","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Collections/Geo Map View"},{"name":"iconClass","value":"bx bx-map-alt","type":"label"}]},{"id":"_help_8QqnMzx393bx","title":"Grid View","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/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/Note Types/Collections/List View"},{"name":"iconClass","value":"bx bx-list-ul","type":"label"}]},{"id":"_help_2FvYrpmOXm29","title":"Table View","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Collections/Table View"},{"name":"iconClass","value":"bx bx-table","type":"label"}]},{"id":"_help_CtBQqbwXDx1w","title":"Board View","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Collections/Board View"},{"name":"iconClass","value":"bx bx-columns","type":"label"}]},{"id":"_help_zP3PMqaG71Ct","title":"Presentation View","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Collections/Presentation View"},{"name":"iconClass","value":"bx bx-slideshow","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_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","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-file","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-file","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-file","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-file","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 bx-file","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-file","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-file","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 bx-file","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-file","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 bx-file","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-file","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-file","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 bx-file","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-file","type":"label"}],"children":[{"id":"_help_9qPsTWBorUhQ","title":"API Reference","type":"webView","attributes":[{"type":"label","name":"webViewSrc","value":"/etapi/docs"},{"name":"iconClass","value":"bx bx-file","type":"label"}]}]},{"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-file","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 bx-file","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-file","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-file","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-file","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 bxs-component","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-file","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-file","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-file","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 bx-folder","type":"label"}],"children":[{"id":"_help_z8O2VG4ZZJD7","title":"API Reference","type":"webView","attributes":[{"type":"label","name":"webViewSrc","value":"/api/docs"},{"name":"iconClass","value":"bx bx-file","type":"label"}]}]},{"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_LMAv4Uy3Wk6J","title":"AI","type":"book","attributes":[{"name":"iconClass","value":"bx bx-bot","type":"label"}],"children":[{"id":"_help_GBBMSlVSOIGP","title":"Introduction","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/AI/Introduction"},{"name":"iconClass","value":"bx bx-file","type":"label"}]},{"id":"_help_WkM7gsEUyCXs","title":"AI Provider Information","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/AI/AI Provider Information"},{"name":"iconClass","value":"bx bx-file","type":"label"}],"children":[{"id":"_help_7EdTxPADv95W","title":"Ollama","type":"book","attributes":[{"name":"iconClass","value":"bx bx-folder","type":"label"}],"children":[{"id":"_help_vvUCN7FDkq7G","title":"Installing Ollama","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/AI/AI Provider Information/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/AI Provider Information/OpenAI"},{"name":"iconClass","value":"bx bx-file","type":"label"}]},{"id":"_help_e0lkirXEiSNc","title":"Anthropic","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/AI/AI Provider Information/Anthropic"},{"name":"iconClass","value":"bx bx-file","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-file","type":"label"}]},{"id":"_help_es8OU2GuguFU","title":"Examples","type":"book","attributes":[{"name":"iconClass","value":"bx bx-folder","type":"label"}],"children":[{"id":"_help_TjLYAo3JMO8X","title":"\"New Task\" launcher button","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Scripting/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/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/Examples/Using promoted attributes to c"},{"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/Events"},{"name":"iconClass","value":"bx bx-rss","type":"label"}]},{"id":"_help_MgibgPcfeuGz","title":"Custom Widgets","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Scripting/Custom Widgets"},{"name":"iconClass","value":"bx bx-file","type":"label"}],"children":[{"id":"_help_YNxAqkI5Kg1M","title":"Word count widget","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Scripting/Custom Widgets/Word count widget"},{"name":"iconClass","value":"bx bx-file","type":"label"}]},{"id":"_help_SynTBQiBsdYJ","title":"Widget Basics","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Scripting/Custom Widgets/Widget Basics"},{"name":"iconClass","value":"bx bx-file","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-file","type":"label"}],"children":[{"id":"_help_Q2z6av6JZVWm","title":"Frontend API","type":"webView","attributes":[{"type":"label","name":"webViewSrc","value":"https://triliumnext.github.io/Notes/Script%20API/interfaces/Frontend_Script_API.Api.html"},{"name":"iconClass","value":"bx bx-folder","type":"label"}],"children":[{"id":"_help_habiZ3HU8Kw8","title":"FNote","type":"webView","attributes":[{"type":"label","name":"webViewSrc","value":"https://triliumnext.github.io/Notes/Script%20API/classes/Frontend_Script_API.FNote.html"},{"name":"iconClass","value":"bx bx-file","type":"label"}]}]},{"id":"_help_MEtfsqa5VwNi","title":"Backend API","type":"webView","attributes":[{"type":"label","name":"webViewSrc","value":"https://triliumnext.github.io/Notes/Script%20API/interfaces/Backend_Script_API.Api.html"},{"name":"iconClass","value":"bx bx-file","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"}]}]}] \ No newline at end of file diff --git a/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Advanced Usage/Attributes/Labels.html b/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Advanced Usage/Attributes/Labels.html index d3d0f7e8d..0edc5714b 100644 --- a/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Advanced Usage/Attributes/Labels.html +++ b/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Advanced Usage/Attributes/Labels.html @@ -302,7 +302,9 @@ color defines color of the note in note tree, links etc. Use any valid CSS color - value like 'red' or #a13d5f + value like 'red' or #a13d5f +
Note: this color may be automatically adjusted when displayed to ensure + sufficient contrast with the background. keyboardShortcut diff --git a/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Basic Concepts and Features/Notes/1_Export as PDF_image.png b/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Basic Concepts and Features/Notes/1_Printing & Exporting as PD.png similarity index 100% rename from apps/server/src/assets/doc_notes/en/User Guide/User Guide/Basic Concepts and Features/Notes/1_Export as PDF_image.png rename to apps/server/src/assets/doc_notes/en/User Guide/User Guide/Basic Concepts and Features/Notes/1_Printing & Exporting as PD.png diff --git a/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Basic Concepts and Features/Notes/Export as PDF.html b/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Basic Concepts and Features/Notes/Export as PDF.html deleted file mode 100644 index 491c4ad6e..000000000 --- a/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Basic Concepts and Features/Notes/Export as PDF.html +++ /dev/null @@ -1,42 +0,0 @@ -

- -

-

Screenshot of the note contextual menu indicating the “Export as PDF” - option.

-

On the desktop application of Trilium it is possible to export a note - as PDF. On the server or PWA (mobile), the option is not available due - to technical constraints and it will be hidden.

-

To print a note, select the - button to the right of the note and select Export as PDF.

-

Afterwards you will be prompted to select where to save the PDF file.

-

Automatic opening of the file

-

When the PDF is exported, it is automatically opened with the system default - application for easy preview.

-

Note that if you are using Linux with the GNOME desktop environment, sometimes - the default application might seem incorrect (such as opening in GIMP). - This is because it uses Gnome's “Recommended applications” list.

-

To solve this, you can change the recommended application for PDFs via - this command line. First, list the available applications via gio mime application/pdf and - then set the desired one. For example to use GNOME's Evince:

gio mime application/pdf
-

Reporting issues with the rendering

-

Should you encounter any visual issues in the resulting PDF file (e.g. - a table does not fit properly, there is cut off text, etc.) feel free to - report the issue. In this case, it's best to offer a sample note (click - on the - button, select Export note → This note and all of its descendants → HTML - in ZIP archive). Make sure not to accidentally leak any personal information.

-

Landscape mode

-

When exporting to PDF, there are no customizable settings such as page - orientation, size, etc. However, it is possible to specify a given note - to be printed as a PDF in landscape mode by adding the #printLandscape attribute - to it (see Attributes).

-

Page size

-

By default, the resulting PDF will be in Letter format. It is possible - to adjust it to another page size via the #printPageSize attribute, - with one of the following values: A0, A1, A2, A3, A4, A5, A6, Legal, Letter, Tabloid, Ledger.

-

Keyboard shortcut

-

It's possible to trigger the export to PDF from the keyboard by going - to Keyboard shortcuts in Options and assigning a key combination - for the exportAsPdf action.

\ No newline at end of file diff --git a/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Basic Concepts and Features/Notes/Export as PDF_image.png b/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Basic Concepts and Features/Notes/Printing & Exporting as PD.png similarity index 100% rename from apps/server/src/assets/doc_notes/en/User Guide/User Guide/Basic Concepts and Features/Notes/Export as PDF_image.png rename to apps/server/src/assets/doc_notes/en/User Guide/User Guide/Basic Concepts and Features/Notes/Printing & Exporting as PD.png diff --git a/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Basic Concepts and Features/Notes/Printing & Exporting as PDF.html b/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Basic Concepts and Features/Notes/Printing & Exporting as PDF.html new file mode 100644 index 000000000..5ecb0f510 --- /dev/null +++ b/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Basic Concepts and Features/Notes/Printing & Exporting as PDF.html @@ -0,0 +1,111 @@ +
+ +
Screenshot of the note contextual menu indicating the “Export as PDF” + option.
+
+

Printing

+

This feature allows printing of notes. It works on both the desktop client, + but also on the web.

+

Note that not all note types are printable as of now. We do plan to increase + the coverage of supported note types in the future.

+

To print a note, select the + button to the right of the note and select Print note. Depending + on the size and type of the note, this can take up to a few seconds. Afterwards + you will be redirected to the system/browser printing dialog.

+ +

Reporting issues with the rendering

+

Should you encounter any visual issues in the resulting PDF file (e.g. + a table does not fit properly, there is cut off text, etc.) feel free to + report the issue. In this case, it's best to offer a sample note (click + on the + button, select Export note → This note and all of its descendants → HTML + in ZIP archive). Make sure not to accidentally leak any personal information.

+

Consider adjusting font sizes and using page breaks to + work around the layout.

+

Exporting as PDF

+

On the desktop application of Trilium it is possible to export a note + as PDF. On the server or PWA (mobile), the option is not available due + to technical constraints and it will be hidden.

+

To print a note, select the + button to the right of the note and select Export as PDF. Afterwards + you will be prompted to select where to save the PDF file.

+

Automatic opening of the file

+

When the PDF is exported, it is automatically opened with the system default + application for easy preview.

+

Note that if you are using Linux with the GNOME desktop environment, sometimes + the default application might seem incorrect (such as opening in GIMP). + This is because it uses Gnome's “Recommended applications” list.

+

To solve this, you can change the recommended application for PDFs via + this command line. First, list the available applications via gio mime application/pdf and + then set the desired one. For example to use GNOME's Evince:

gio mime application/pdf
+

Customizing exporting as PDF

+

When exporting to PDF, there are no customizable settings such as page + orientation, size. However, there are a few Attributes to + adjust some of the settings:

+
    +
  • To print in landscape mode instead of portrait (useful for big diagrams + or slides), add #printLandscape.
  • +
  • By default, the resulting PDF will be in Letter format. It is possible + to adjust it to another page size via the #printPageSize attribute, + with one of the following values: A0, A1, A2, A3, A4, A5, A6, Legal, Letter, Tabloid, Ledger.
  • +
+ +

Keyboard shortcut

+

It's possible to trigger both printing and export as PDF from the keyboard + by going to Keyboard shortcuts in Options and assigning a key combination + for:

+
    +
  • Print Active Note +
  • +
  • Export Active Note as PDF +
  • +
+

Constraints & limitations

+

Not all Note Types are + supported when printing, in which case the Print and Export as PDF options + will be disabled.

+
    +
  • For Code notes: +
      +
    • Line numbers are not printed.
    • +
    • Syntax highlighting is enabled, however a default theme (Visual Studio) + is enforced.
    • +
    +
  • +
  • For Collections: +
      +
    • Only Presentation View is + currently supported.
    • +
    • We plan to add support for all the collection types at some point.
    • +
    +
  • +
  • Using Custom app-wide CSS for + printing is not longer supported, due to a more stable but isolated mechanism. +
      +
    • We plan to introduce a new mechanism specifically for a print CSS.
    • +
    +
  • +
+

Under the hood

+

Both printing and exporting as PDF use the same mechanism: a note is rendered + individually in a separate webpage that is then sent to the browser or + the Electron application either for printing or exporting as PDF.

+

The webpage that renders a single note can actually be accessed in a web + browser. For example http://localhost:8080/#root/WWRGzqHUfRln/RRZsE9Al8AIZ?ntxId=0o4fzk becomes http://localhost:8080/?print#root/WWRGzqHUfRln/RRZsE9Al8AIZ.

+

Accessing the print note in a web browser allows for easy debugging to + understand why a particular note doesn't render well. The mechanism for + rendering is similar to the one used in Note List.

\ No newline at end of file diff --git a/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Note Types/Collections/Presentation View.html b/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Note Types/Collections/Presentation View.html index 1ce364410..ca888c9cf 100644 --- a/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Note Types/Collections/Presentation View.html +++ b/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Note Types/Collections/Presentation View.html @@ -6,33 +6,31 @@ within Trilium.

How it works

    -
  • Each slide is a child note of the collection.
  • -
  • The order of the child notes determines the order of the slides.
  • -
  • Unlike traditional presentation software, slides can be laid out both +
  • Each slide is a child note of the collection.
  • +
  • The order of the child notes determines the order of the slides.
  • +
  • Unlike traditional presentation software, slides can be laid out both horizontally and vertically (see belwo for more information).
  • -
  • Direct children will be laid out horizontally and the children of those - will be laid out vertically. Children deeper than two levels of nesting - are ignored.
  • +
  • Direct children will be laid out horizontally and the children of those + will be laid out vertically. Children deeper than two levels of nesting + are ignored.

Interaction and navigation

In the floating buttons section (top-right):

    -
  • Edit button to go to the corresponding note of the current slide.
  • -
  • Press Overview button (or the O key) to show a birds-eye view +
  • Edit button to go to the corresponding note of the current slide.
  • +
  • Press Overview button (or the O key) to show a birds-eye view of the slides. Press the button again to disable it.
  • -
  • Press the “Start presentation” button to show the presentation in full-screen.
  • +
  • Press the “Start presentation” button to show the presentation in full-screen.

The following keyboard shortcuts are supported:

    -
  • Press and (or H and L) to go +
  • Press and (or H and L) to go to the slide on the left or on the right (horizontal).
  • -
  • Press and  (or K and J) +
  • Press and  (or K and J) to go to the upward or downward slide (vertical).
  • -
  • Press Space and Shift + Space or  to go +
  • Press Space and Shift + Space or  to go to the next/previous slide in order.
  • -
  • And a few more, press ? to display a popup with all the supported +
  • And a few more, press ? to display a popup with all the supported keyboard combinations.

Vertical slides and nesting

@@ -42,15 +40,15 @@

This horizontal/vertical organization affects transitions (especially on the “slide” transition), however it is most noticeable in navigation.

    -
  • Pressing and will navigate through slides horizontally, +
  • Pressing and will navigate through slides horizontally, thus skipping vertical notes under the current slide. This is useful to - skip entire chapters/related slides. 
  • -
  • Pressing and will navigate through the vertical + skip entire chapters/related slides.
  • +
  • Pressing and will navigate through the vertical slides at the current level.
  • -
  • Pressing Space and Shift + Space will go to +
  • Pressing Space and Shift + Space will go to the next/previous slide in order, regardless of the direction. This is generally the key combination to use when presenting.
  • -
  • The arrows on the bottom-right of the slide will also reflect this navigation +
  • The arrows on the bottom-right of the slide will also reflect this navigation scheme.
@@ -62,19 +60,19 @@ slides.

In the following example, the note structure is as follows:

    -
  • Presentation collection +
  • Presentation collection
      -
    • Trilium Notes (demo page)
    • -
    • “Introduction” slide +
    • Trilium Notes (demo page)
    • +
    • “Introduction” slide
        -
      • “The challenge of personal knowledge management”
      • -
      • “Note-taking structures”
      • +
      • “The challenge of personal knowledge management”
      • +
      • “Note-taking structures”
    • -
    • “Demo & Feature highlights” slide +
    • “Demo & Feature highlights” slide
        -
      • “Really fast installation process”
      • -
      • Video slide
      • +
      • “Really fast installation process”
      • +
      • Video slide
    @@ -83,56 +81,54 @@

    Customization

    At collection level, it's possible to adjust:

      -
    • The theme of the entire presentation to one of the predefined themes by - going to the Ribbon and +
    • The theme of the entire presentation to one of the predefined themes by + going to the Ribbon and looking for the Collection Properties tab.
    • -
    • It's currently not possible to create custom themes, although it is planned.
    • -
    • Note that it is note possible to alter the CSS via Custom app-wide CSS because - the slides are rendered isolated (in a shadow DOM).
    • +
    • It's currently not possible to create custom themes, although it is planned.
    • +
    • Note that it is note possible to alter the CSS via Custom app-wide CSS because the + slides are rendered isolated (in a shadow DOM).

    At slide level:

      -
    • It's possible to adjust the background color of a slide by using the +
    • It's possible to adjust the background color of a slide by using the predefined promoted attributefor the color or manually setting #slide:background to + href="#root/_help_OFXdgB2nNk1F">predefined promoted attributefor the color or manually setting #slide:background to a hex color.
    • -
    • More complex backgrounds can be achieved via gradients. There's no UI +
    • More complex backgrounds can be achieved via gradients. There's no UI for it; it has to be set via #slide:background to a CSS gradient definition such as: linear-gradient(to bottom, #283b95, #17b2c3).

    Tips and tricks

      -
    • Text notes generally respect the formatting (bold, italic, foreground +
    • Text notes generally respect the formatting (bold, italic, foreground and background colors) and font size. Code blocks and tables also work.
    • -
    • Try using more than just text notes, the presentation uses the same mechanism - as shared notes and  +
    • Try using more than just text notes, the presentation uses the same mechanism + as shared notes and Note List so it should be able + to display Mermaid DiagramsNote List so it should be able to display Mermaid Diagrams,  - Canvas and Mind Map in - full-screen (without the interactivity). -
        -
      • Consider using a transparent background for Canvas, if - the slides have a custom background (go to the hamburger menu in the Canvas, - press the button select a custom color and write transparent).
      • -
      • -

        For Mermaid Diagrams, - some of them have a predefined background which can be changed via the - frontmatter. For example, for XY-charts:

        ---
        +    class="reference-link" href="#root/_help_grjYqerjn243">Canvas and Mind Map in
        +      full-screen (without the interactivity).
        +      
          +
        • +

          Consider using a transparent background for Canvas, if the slides have a custom + background (go to the hamburger menu in the Canvas, press the button select + a custom color and write transparent).

          +
        • +
        • +

          For Mermaid Diagrams, + some of them have a predefined background which can be changed via the + frontmatter. For example, for XY-charts:

          ---
           config:
               themeVariables:
                   xyChart:
                       backgroundColor: transparent
           ---
          -
        • -
      • +
      +

    Under the hood

    The Presentation view uses Reveal.js to diff --git a/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Theme development/Custom app-wide CSS.html b/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Theme development/Custom app-wide CSS.html index 8a5189927..f7d9fd394 100644 --- a/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Theme development/Custom app-wide CSS.html +++ b/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Theme development/Custom app-wide CSS.html @@ -1,38 +1,37 @@

    It is possible to provide a CSS file to be used regardless of the theme set by the user.

    -
    - - - - - - - - - - - - - - - - - - - - - -
      
    - - Start by creating a new note and changing the note type to CSS
    - - In the ribbon, press the “Owned Attributes” section and type #appCss.
    - - Type the desired CSS.   -
    -
    Generally it's a good idea to append !important for the styles - that are being changed, in order to prevent other
    -
    + + + + + + + + + + + + + + + + + + + + + +
    + + Start by creating a new note and changing the note type to CSS
    + + In the ribbon, press the “Owned Attributes” section and type #appCss.
    + + Type the desired CSS.   +
    +
    Generally it's a good idea to append !important for the styles + that are being changed, in order to prevent other
    +

    Seeing the changes

    Adding a new app CSS note or modifying an existing one does not immediately apply changes. To see the changes, press Ctrl+Shift+R to refresh @@ -54,10 +53,9 @@ workspaces.

    To do so:

      -
    1. In the note with #workspace, add an inheritable attribute #cssClass(inheritable) with +
    2. In the note with #workspace, add an inheritable attribute #cssClass(inheritable) with a value that uniquely identifies the workspace (say my-workspace).
    3. -
    4. Anywhere in the note structure, create a CSS note with #appCss.
    5. +
    6. Anywhere in the note structure, create a CSS note with #appCss.

    Change the color of the icons in the Note Tree

    .fancytree-node.my-workspace.fancytree-custom-icon {
         color: #ff0000;
    @@ -73,8 +71,8 @@
       width="641" height="630">
     
    -
  1. Insert an image in any note and take the URL of the image.
  2. -
  3. Use the following CSS, adjusting the background-image and width and height to +
  4. Insert an image in any note and take the URL of the image.
  5. +
  6. Use the following CSS, adjusting the background-image and width and height to the desired values.
.note-split.my-workspace .scrolling-container:after {
     position: fixed;
@@ -94,5 +92,5 @@
 

Some parts of the application can't be styled directly via custom CSS because they are rendered in an isolated mode (shadow DOM), more specifically:

\ No newline at end of file diff --git a/docs/User Guide/!!!meta.json b/docs/User Guide/!!!meta.json index 3b295b082..1bd423c28 100644 --- a/docs/User Guide/!!!meta.json +++ b/docs/User Guide/!!!meta.json @@ -3472,7 +3472,7 @@ "BFs8mudNFgCS", "NRnIZmSMc5sj" ], - "title": "Export as PDF", + "title": "Printing & Exporting as PDF", "notePosition": 120, "prefix": null, "isExpanded": false, @@ -3503,13 +3503,62 @@ { "type": "label", "name": "iconClass", - "value": "bx bxs-file-pdf", + "value": "bx bx-printer", "isInheritable": false, "position": 30 + }, + { + "type": "relation", + "name": "internalLink", + "value": "CohkqWQC1iBv", + "isInheritable": false, + "position": 40 + }, + { + "type": "relation", + "name": "internalLink", + "value": "0ESUbbAxVnoK", + "isInheritable": false, + "position": 50 + }, + { + "type": "relation", + "name": "internalLink", + "value": "KSZ04uQ2D1St", + "isInheritable": false, + "position": 60 + }, + { + "type": "relation", + "name": "internalLink", + "value": "6f9hih2hXXZk", + "isInheritable": false, + "position": 70 + }, + { + "type": "relation", + "name": "internalLink", + "value": "AlhDUqhENtH7", + "isInheritable": false, + "position": 80 + }, + { + "type": "relation", + "name": "internalLink", + "value": "GTwFsgaA0lCt", + "isInheritable": false, + "position": 90 + }, + { + "type": "relation", + "name": "internalLink", + "value": "zP3PMqaG71Ct", + "isInheritable": false, + "position": 100 } ], "format": "markdown", - "dataFileName": "Export as PDF.md", + "dataFileName": "Printing & Exporting as PDF.md", "attachments": [ { "attachmentId": "NfSjRsArIQHy", @@ -3517,7 +3566,7 @@ "role": "image", "mime": "image/png", "position": 10, - "dataFileName": "Export as PDF_image.png" + "dataFileName": "Printing & Exporting as PD.png" }, { "attachmentId": "Om2EmdZr54vy", @@ -3525,7 +3574,7 @@ "role": "image", "mime": "image/png", "position": 10, - "dataFileName": "1_Export as PDF_image.png" + "dataFileName": "1_Printing & Exporting as PD.png" } ] }, @@ -8758,51 +8807,51 @@ "mime": "text/html", "attributes": [ { - "type": "label", - "name": "iconClass", - "value": "bx bx-slideshow", + "type": "relation", + "name": "internalLink", + "value": "BlN9DFI679QC", "isInheritable": false, "position": 10 }, { "type": "relation", "name": "internalLink", - "value": "BlN9DFI679QC", + "value": "OFXdgB2nNk1F", "isInheritable": false, "position": 20 }, { "type": "relation", "name": "internalLink", - "value": "OFXdgB2nNk1F", + "value": "R9pX4DGra2Vt", "isInheritable": false, "position": 30 }, { "type": "relation", "name": "internalLink", - "value": "R9pX4DGra2Vt", + "value": "0ESUbbAxVnoK", "isInheritable": false, "position": 40 }, { "type": "relation", "name": "internalLink", - "value": "0ESUbbAxVnoK", + "value": "grjYqerjn243", "isInheritable": false, "position": 50 }, { "type": "relation", "name": "internalLink", - "value": "s1aBHPd79XYj", + "value": "AlhDUqhENtH7", "isInheritable": false, "position": 60 }, { "type": "relation", "name": "internalLink", - "value": "grjYqerjn243", + "value": "s1aBHPd79XYj", "isInheritable": false, "position": 70 }, @@ -8814,11 +8863,11 @@ "position": 80 }, { - "type": "relation", - "name": "internalLink", - "value": "AlhDUqhENtH7", + "type": "label", + "name": "iconClass", + "value": "bx bx-slideshow", "isInheritable": false, - "position": 90 + "position": 10 } ], "format": "markdown", diff --git a/docs/User Guide/User Guide/Basic Concepts and Features/Notes/1_Export as PDF_image.png b/docs/User Guide/User Guide/Basic Concepts and Features/Notes/1_Printing & Exporting as PD.png similarity index 100% rename from docs/User Guide/User Guide/Basic Concepts and Features/Notes/1_Export as PDF_image.png rename to docs/User Guide/User Guide/Basic Concepts and Features/Notes/1_Printing & Exporting as PD.png diff --git a/docs/User Guide/User Guide/Basic Concepts and Features/Notes/Export as PDF.md b/docs/User Guide/User Guide/Basic Concepts and Features/Notes/Export as PDF.md deleted file mode 100644 index 20f5b7394..000000000 --- a/docs/User Guide/User Guide/Basic Concepts and Features/Notes/Export as PDF.md +++ /dev/null @@ -1,38 +0,0 @@ -# Export as PDF -![](Export%20as%20PDF_image.png) - -Screenshot of the note contextual menu indicating the “Export as PDF” option. - -On the desktop application of Trilium it is possible to export a note as PDF. On the server or PWA (mobile), the option is not available due to technical constraints and it will be hidden. - -To print a note, select the ![](1_Export%20as%20PDF_image.png) button to the right of the note and select _Export as PDF_. - -Afterwards you will be prompted to select where to save the PDF file. - -## Automatic opening of the file - -When the PDF is exported, it is automatically opened with the system default application for easy preview. - -Note that if you are using Linux with the GNOME desktop environment, sometimes the default application might seem incorrect (such as opening in GIMP). This is because it uses Gnome's “Recommended applications” list. - -To solve this, you can change the recommended application for PDFs via this command line. First, list the available applications via `gio mime application/pdf` and then set the desired one. For example to use GNOME's Evince: - -``` -gio mime application/pdf -``` - -## Reporting issues with the rendering - -Should you encounter any visual issues in the resulting PDF file (e.g. a table does not fit properly, there is cut off text, etc.) feel free to [report the issue](../../Troubleshooting/Reporting%20issues.md). In this case, it's best to offer a sample note (click on the ![](1_Export%20as%20PDF_image.png) button, select Export note → This note and all of its descendants → HTML in ZIP archive). Make sure not to accidentally leak any personal information. - -## Landscape mode - -When exporting to PDF, there are no customizable settings such as page orientation, size, etc. However, it is possible to specify a given note to be printed as a PDF in landscape mode by adding the `#printLandscape` attribute to it (see Attributes). - -## Page size - -By default, the resulting PDF will be in Letter format. It is possible to adjust it to another page size via the `#printPageSize` attribute, with one of the following values: `A0`, `A1`, `A2`, `A3`, `A4`, `A5`, `A6`, `Legal`, `Letter`, `Tabloid`, `Ledger`. - -## Keyboard shortcut - -It's possible to trigger the export to PDF from the keyboard by going to _Keyboard shortcuts_ in Options and assigning a key combination for the `exportAsPdf` action. \ No newline at end of file diff --git a/docs/User Guide/User Guide/Basic Concepts and Features/Notes/Export as PDF_image.png b/docs/User Guide/User Guide/Basic Concepts and Features/Notes/Printing & Exporting as PD.png similarity index 100% rename from docs/User Guide/User Guide/Basic Concepts and Features/Notes/Export as PDF_image.png rename to docs/User Guide/User Guide/Basic Concepts and Features/Notes/Printing & Exporting as PD.png diff --git a/docs/User Guide/User Guide/Basic Concepts and Features/Notes/Printing & Exporting as PDF.md b/docs/User Guide/User Guide/Basic Concepts and Features/Notes/Printing & Exporting as PDF.md new file mode 100644 index 000000000..928b134c6 --- /dev/null +++ b/docs/User Guide/User Guide/Basic Concepts and Features/Notes/Printing & Exporting as PDF.md @@ -0,0 +1,75 @@ +# Printing & Exporting as PDF +
Screenshot of the note contextual menu indicating the “Export as PDF” option.
+ +## Printing + +This feature allows printing of notes. It works on both the desktop client, but also on the web. + +Note that not all note types are printable as of now. We do plan to increase the coverage of supported note types in the future. + +To print a note, select the button to the right of the note and select _Print note_. Depending on the size and type of the note, this can take up to a few seconds. Afterwards you will be redirected to the system/browser printing dialog. + +> [!NOTE] +> Printing and exporting as PDF are not perfect. Due to technical limitations, and sometimes even browser glitches the text might appear cut off in some circumstances.  + +## Reporting issues with the rendering + +Should you encounter any visual issues in the resulting PDF file (e.g. a table does not fit properly, there is cut off text, etc.) feel free to [report the issue](../../Troubleshooting/Reporting%20issues.md). In this case, it's best to offer a sample note (click on the button, select Export note → This note and all of its descendants → HTML in ZIP archive). Make sure not to accidentally leak any personal information. + +Consider adjusting font sizes and using [page breaks](../../Note%20Types/Text/Insert%20buttons.md) to work around the layout. + +## Exporting as PDF + +On the desktop application of Trilium it is possible to export a note as PDF. On the server or PWA (mobile), the option is not available due to technical constraints and it will be hidden. + +To print a note, select the ![](1_Printing%20&%20Exporting%20as%20PD.png) button to the right of the note and select _Export as PDF_. Afterwards you will be prompted to select where to save the PDF file. + +### Automatic opening of the file + +When the PDF is exported, it is automatically opened with the system default application for easy preview. + +Note that if you are using Linux with the GNOME desktop environment, sometimes the default application might seem incorrect (such as opening in GIMP). This is because it uses Gnome's “Recommended applications” list. + +To solve this, you can change the recommended application for PDFs via this command line. First, list the available applications via `gio mime application/pdf` and then set the desired one. For example to use GNOME's Evince: + +``` +gio mime application/pdf +``` + +### Customizing exporting as PDF + +When exporting to PDF, there are no customizable settings such as page orientation, size. However, there are a few Attributes to adjust some of the settings: + +* To print in landscape mode instead of portrait (useful for big diagrams or slides), add `#printLandscape`. +* By default, the resulting PDF will be in Letter format. It is possible to adjust it to another page size via the `#printPageSize` attribute, with one of the following values: `A0`, `A1`, `A2`, `A3`, `A4`, `A5`, `A6`, `Legal`, `Letter`, `Tabloid`, `Ledger`. + +> [!NOTE] +> These options have no effect when used with the printing feature, since the user-defined settings are used instead. + +## Keyboard shortcut + +It's possible to trigger both printing and export as PDF from the keyboard by going to _Keyboard shortcuts_ in Options and assigning a key combination for: + +* _Print Active Note_ +* _Export Active Note as PDF_ + +## Constraints & limitations + +Not all Note Types are supported when printing, in which case the _Print_ and _Export as PDF_ options will be disabled. + +* For Code notes: + * Line numbers are not printed. + * Syntax highlighting is enabled, however a default theme (Visual Studio) is enforced. +* For Collections: + * Only Presentation View is currently supported. + * We plan to add support for all the collection types at some point. +* Using Custom app-wide CSS for printing is not longer supported, due to a more stable but isolated mechanism. + * We plan to introduce a new mechanism specifically for a print CSS. + +## Under the hood + +Both printing and exporting as PDF use the same mechanism: a note is rendered individually in a separate webpage that is then sent to the browser or the Electron application either for printing or exporting as PDF. + +The webpage that renders a single note can actually be accessed in a web browser. For example `http://localhost:8080/#root/WWRGzqHUfRln/RRZsE9Al8AIZ?ntxId=0o4fzk` becomes `http://localhost:8080/?print#root/WWRGzqHUfRln/RRZsE9Al8AIZ`. + +Accessing the print note in a web browser allows for easy debugging to understand why a particular note doesn't render well. The mechanism for rendering is similar to the one used in Note List. \ No newline at end of file diff --git a/docs/User Guide/User Guide/Feature Highlights.md b/docs/User Guide/User Guide/Feature Highlights.md index 7cedd84f1..77f30d590 100644 --- a/docs/User Guide/User Guide/Feature Highlights.md +++ b/docs/User Guide/User Guide/Feature Highlights.md @@ -19,7 +19,7 @@ This section presents the most important changes by version. For a full set of c * v0.92.4: * macOS binaries are now signed. * Text notes can now have adjustable Content language & Right-to-left support. - * Export as PDF + * Export as PDF * Zen mode * Calendar View, allowing notes to be displayed in a monthly grid based on start and end dates. * v0.91.5: diff --git a/docs/User Guide/User Guide/Note Types/Text/Insert buttons.md b/docs/User Guide/User Guide/Note Types/Text/Insert buttons.md index 6a161fadd..8d87e083c 100644 --- a/docs/User Guide/User Guide/Note Types/Text/Insert buttons.md +++ b/docs/User Guide/User Guide/Note Types/Text/Insert buttons.md @@ -53,7 +53,7 @@ Alternatively, it's possible to insert a horizontal ruler by typing `---`.
-Page breaks provide a way to force the next paragraph or block (table, image, etc.) to be displayed onto the next page when printing (either to a real printer to [when exporting to PDF](../../Basic%20Concepts%20and%20Features/Notes/Export%20as%20PDF.md)). +Page breaks provide a way to force the next paragraph or block (table, image, etc.) to be displayed onto the next page when printing (either to a real printer to [when exporting to PDF](../../Basic%20Concepts%20and%20Features/Notes/Printing%20%26%20Exporting%20as%20PDF.md)). Page breaks are marked in the editor with the words _Page break_, but they will not actually be shown when printed. From fffb8317cbd3e9f36ffdeb5f6e7317416cdcccd0 Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Mon, 20 Oct 2025 14:24:14 +0300 Subject: [PATCH 070/103] fix(client/print): disable printing for unsupported collection types --- apps/client/src/widgets/ribbon/NoteActions.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/client/src/widgets/ribbon/NoteActions.tsx b/apps/client/src/widgets/ribbon/NoteActions.tsx index 2fed2ea02..14adc6b4b 100644 --- a/apps/client/src/widgets/ribbon/NoteActions.tsx +++ b/apps/client/src/widgets/ribbon/NoteActions.tsx @@ -47,7 +47,7 @@ function NoteContextMenu({ note, noteContext }: { note: FNote, noteContext?: Not const canBeConvertedToAttachment = note?.isEligibleForConversionToAttachment(); const isSearchable = ["text", "code", "book", "mindMap", "doc"].includes(note.type); const isInOptions = note.noteId.startsWith("_options"); - const isPrintable = ["text", "code", "book"].includes(note.type); + const isPrintable = ["text", "code"].includes(note.type) || (note.type === "book" && note.getLabelValue("viewType") === "presentation"); const isElectron = getIsElectron(); const isMac = getIsMac(); const hasSource = ["text", "code", "relationMap", "mermaid", "canvas", "mindMap"].includes(note.type); From 66896d645744979de8b4ebe386961f9c3d7a13fb Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Mon, 20 Oct 2025 14:27:35 +0300 Subject: [PATCH 071/103] fix(client/print): text notes affecting slides --- apps/client/src/print.css | 2 +- apps/client/src/print.tsx | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/apps/client/src/print.css b/apps/client/src/print.css index b935d9eb7..9ccf54362 100644 --- a/apps/client/src/print.css +++ b/apps/client/src/print.css @@ -23,7 +23,7 @@ body { contain: none !important; } -.ck-content { +body[data-note-type="text"] .ck-content { font-size: var(--print-font-size); text-align: justify; } diff --git a/apps/client/src/print.tsx b/apps/client/src/print.tsx index e762f5781..de11d581a 100644 --- a/apps/client/src/print.tsx +++ b/apps/client/src/print.tsx @@ -33,6 +33,10 @@ function App({ note, noteId }: { note: FNote | null | undefined, noteId: string if (!note || !props) return + useLayoutEffect(() => { + document.body.dataset.noteType = note.type; + }, [ note ]); + return ( <> {note.type === "book" From e904feb179cb6196f17381d4c54f710a9e3e184e Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Mon, 20 Oct 2025 16:05:24 +0300 Subject: [PATCH 072/103] fix(client/search): collection rendering twice --- apps/client/src/components/note_context.ts | 8 +++++--- apps/client/src/widgets/collections/NoteList.tsx | 2 +- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/apps/client/src/components/note_context.ts b/apps/client/src/components/note_context.ts index 79d1e148b..d4bcb1fa6 100644 --- a/apps/client/src/components/note_context.ts +++ b/apps/client/src/components/note_context.ts @@ -326,9 +326,11 @@ class NoteContext extends Component implements EventListener<"entitiesReloaded"> } // Collections must always display a note list, even if no children. - const viewType = note.getLabelValue("viewType") ?? "grid"; - if (!["list", "grid"].includes(viewType)) { - return true; + if (note.type === "book") { + const viewType = note.getLabelValue("viewType") ?? "grid"; + if (!["list", "grid"].includes(viewType)) { + return true; + } } if (!note.hasChildren()) { diff --git a/apps/client/src/widgets/collections/NoteList.tsx b/apps/client/src/widgets/collections/NoteList.tsx index 76deeeffe..e71aa09c9 100644 --- a/apps/client/src/widgets/collections/NoteList.tsx +++ b/apps/client/src/widgets/collections/NoteList.tsx @@ -85,7 +85,7 @@ export function CustomNoteList({ note, isEnabled: shouldEnable } return ( -
+
{props && isEnabled && (
{getComponentByViewType(viewType, props)} From 929eee135021ef386a1ff64b798381db195fb2a2 Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Mon, 20 Oct 2025 16:17:36 +0300 Subject: [PATCH 073/103] fix(client/search): note IDs being calculated twice in search --- apps/client/src/widgets/collections/NoteList.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/client/src/widgets/collections/NoteList.tsx b/apps/client/src/widgets/collections/NoteList.tsx index e71aa09c9..f76dd4b5d 100644 --- a/apps/client/src/widgets/collections/NoteList.tsx +++ b/apps/client/src/widgets/collections/NoteList.tsx @@ -39,7 +39,7 @@ export function SearchNoteList(props: Omit({ note, isEnabled: shouldEnable, notePath, highlightedTokens, displayOnlyCollections, ntxId, onReady, ...restProps }: NoteListProps) { const widgetRef = useRef(null); const viewType = useNoteViewType(note); - const noteIds = useNoteIds(note, viewType, ntxId); + const noteIds = useNoteIds(shouldEnable ? note : null, viewType, ntxId); const isFullHeight = (viewType && viewType !== "list" && viewType !== "grid"); const [ isIntersecting, setIsIntersecting ] = useState(false); const shouldRender = (isFullHeight || isIntersecting || note?.type === "book"); From c7224bc0d12ea4dd5b29b05abb2318406d7fc0d6 Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Mon, 20 Oct 2025 17:14:26 +0300 Subject: [PATCH 074/103] fix(client/search): note IDs being calculated recursively in table --- apps/client/src/widgets/collections/NoteList.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/client/src/widgets/collections/NoteList.tsx b/apps/client/src/widgets/collections/NoteList.tsx index f76dd4b5d..017f180de 100644 --- a/apps/client/src/widgets/collections/NoteList.tsx +++ b/apps/client/src/widgets/collections/NoteList.tsx @@ -140,7 +140,7 @@ export function useNoteIds(note: FNote | null | undefined, viewType: ViewTypeOpt } async function getNoteIds(note: FNote) { - if (viewType === "list" || viewType === "grid") { + if (viewType === "list" || viewType === "grid" || viewType === "table") { return note.getChildNoteIds(); } else { return await note.getSubtreeNoteIds(includeArchived); From 8939fac447697555c034cfe8a031fd17c644f530 Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Mon, 20 Oct 2025 17:14:47 +0300 Subject: [PATCH 075/103] fix(client/search): table freezing due to nesting --- apps/client/src/widgets/collections/table/rows.ts | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/apps/client/src/widgets/collections/table/rows.ts b/apps/client/src/widgets/collections/table/rows.ts index 84b4c5882..e1b0a765e 100644 --- a/apps/client/src/widgets/collections/table/rows.ts +++ b/apps/client/src/widgets/collections/table/rows.ts @@ -20,6 +20,10 @@ export async function buildRowDefinitions(parentNote: FNote, infos: AttributeDef let hasSubtree = false; let rowNumber = childBranches.length; + if (parentNote.type === "search") { + maxDepth = 0; + } + for (const branch of childBranches) { const note = await branch.getNote(); if (!note || (!includeArchived && note.isArchived)) { From 3743fff21cd7e0260bc73df91864fdccae85acff Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Mon, 20 Oct 2025 17:15:08 +0300 Subject: [PATCH 076/103] chore(client/search): ensure all notes are loaded --- .../src/widgets/collections/table/index.tsx | 33 ++++++++++--------- 1 file changed, 18 insertions(+), 15 deletions(-) diff --git a/apps/client/src/widgets/collections/table/index.tsx b/apps/client/src/widgets/collections/table/index.tsx index 2a40c594c..f6ae82009 100644 --- a/apps/client/src/widgets/collections/table/index.tsx +++ b/apps/client/src/widgets/collections/table/index.tsx @@ -2,7 +2,7 @@ import { useCallback, useContext, useEffect, useMemo, useRef, useState } from "p import { ViewModeProps } from "../interface"; import { buildColumnDefinitions } from "./columns"; import getAttributeDefinitionInformation, { buildRowDefinitions, TableData } from "./rows"; -import { useLegacyWidget, useNoteLabelBoolean, useNoteLabelInt, useSpacedUpdate, useTriliumEvent } from "../../react/hooks"; +import { useLegacyWidget, useNoteLabelBoolean, useNoteLabelInt, useTriliumEvent } from "../../react/hooks"; import Tabulator from "./tabulator"; import { Tabulator as VanillaTabulator, SortModule, FormatModule, InteractionModule, EditModule, ResizeColumnsModule, FrozenColumnsModule, PersistenceModule, MoveColumnsModule, MoveRowsModule, ColumnDefinition, DataTreeModule, Options, RowComponent} from 'tabulator-tables'; import { useContextMenu } from "./context_menu"; @@ -17,6 +17,7 @@ import AttributeDetailWidget from "../../attribute_widgets/attribute_detail"; import attributes from "../../../services/attributes"; import { RefObject } from "preact"; import SpacedUpdate from "../../../services/spaced_update"; +import froca from "../../../services/froca"; interface TableConfig { tableData: { @@ -132,25 +133,27 @@ function useData(note: FNote, noteIds: string[], viewConfig: TableConfig | undef const [ isSorted ] = useNoteLabelBoolean(note, "sorted"); const [ movableRows, setMovableRows ] = useState(false); - function refresh() { + async function refresh() { const info = getAttributeDefinitionInformation(note); - buildRowDefinitions(note, info, includeArchived, maxDepth).then(({ definitions: rowData, hasSubtree: hasChildren, rowNumber }) => { - const columnDefs = buildColumnDefinitions({ - info, - movableRows, - existingColumnData: viewConfig?.tableData?.columns, - rowNumberHint: rowNumber, - position: newAttributePosition.current ?? undefined - }); - setColumnDefs(columnDefs); - setRowData(rowData); - setHasChildren(hasChildren); - resetNewAttributePosition(); + // Ensure all note IDs are loaded. + await froca.getNotes(noteIds); + + const { definitions: rowData, hasSubtree: hasChildren, rowNumber } = await buildRowDefinitions(note, info, includeArchived, maxDepth); + const columnDefs = buildColumnDefinitions({ + info, + movableRows, + existingColumnData: viewConfig?.tableData?.columns, + rowNumberHint: rowNumber, + position: newAttributePosition.current ?? undefined }); + setColumnDefs(columnDefs); + setRowData(rowData); + setHasChildren(hasChildren); + resetNewAttributePosition(); } - useEffect(refresh, [ note, noteIds, maxDepth, movableRows ]); + useEffect(() => { refresh() }, [ note, noteIds, maxDepth, movableRows ]); useTriliumEvent("entitiesReloaded", ({ loadResults}) => { // React to column changes. From ee9c3f49da9185f9b9402ecb77ba04fa2720bbb4 Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Mon, 20 Oct 2025 17:33:48 +0300 Subject: [PATCH 077/103] chore(client/search): ensure nested note IDs don't work in search everywhere --- apps/client/src/widgets/collections/NoteList.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/client/src/widgets/collections/NoteList.tsx b/apps/client/src/widgets/collections/NoteList.tsx index 017f180de..c39b4e7e8 100644 --- a/apps/client/src/widgets/collections/NoteList.tsx +++ b/apps/client/src/widgets/collections/NoteList.tsx @@ -140,7 +140,7 @@ export function useNoteIds(note: FNote | null | undefined, viewType: ViewTypeOpt } async function getNoteIds(note: FNote) { - if (viewType === "list" || viewType === "grid" || viewType === "table") { + if (viewType === "list" || viewType === "grid" || viewType === "table" || note.type === "search") { return note.getChildNoteIds(); } else { return await note.getSubtreeNoteIds(includeArchived); From f8066417d91d75d11e55f6dd84744794b24083d8 Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Mon, 20 Oct 2025 17:36:12 +0300 Subject: [PATCH 078/103] fix(client/search): full screen collections not visible --- apps/client/src/widgets/search_result.css | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/client/src/widgets/search_result.css b/apps/client/src/widgets/search_result.css index 5142bd776..6ac344754 100644 --- a/apps/client/src/widgets/search_result.css +++ b/apps/client/src/widgets/search_result.css @@ -1,7 +1,7 @@ .search-result-widget { flex-grow: 100000; flex-shrink: 100000; - min-height: 0; + height: 100%; overflow: auto; contain: none !important; } From 5d66b7e66f2db57b609cc538e5d0aeba560c6c2f Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Mon, 20 Oct 2025 17:38:25 +0300 Subject: [PATCH 079/103] feat(client/search): enable collection properties --- apps/client/src/widgets/ribbon/Ribbon.tsx | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/apps/client/src/widgets/ribbon/Ribbon.tsx b/apps/client/src/widgets/ribbon/Ribbon.tsx index e47a78aee..72c627988 100644 --- a/apps/client/src/widgets/ribbon/Ribbon.tsx +++ b/apps/client/src/widgets/ribbon/Ribbon.tsx @@ -1,6 +1,6 @@ import { useCallback, useEffect, useMemo, useRef, useState } from "preact/hooks"; import { t } from "../../services/i18n"; -import { useNoteContext, useNoteProperty, useStaticTooltip, useStaticTooltipWithKeyboardShortcut, useTooltip, useTriliumEvent, useTriliumEvents } from "../react/hooks"; +import { useNoteContext, useNoteProperty, useStaticTooltipWithKeyboardShortcut, useTriliumEvents } from "../react/hooks"; import "./style.css"; import { VNode } from "preact"; import BasicPropertiesTab from "./BasicPropertiesTab"; @@ -24,7 +24,6 @@ import InheritedAttributesTab from "./InheritedAttributesTab"; import CollectionPropertiesTab from "./CollectionPropertiesTab"; import SearchDefinitionTab from "./SearchDefinitionTab"; import NoteActions from "./NoteActions"; -import keyboard_actions from "../../services/keyboard_actions"; import { KeyboardActionNames } from "@triliumnext/commons"; interface TitleContext { @@ -81,7 +80,7 @@ const TAB_CONFIGURATION = numberObjectsInPlace([ title: t("book_properties.book_properties"), icon: "bx bx-book", content: CollectionPropertiesTab, - show: ({ note }) => note?.type === "book", + show: ({ note }) => note?.type === "book" || note?.type === "search", toggleCommand: "toggleRibbonTabBookProperties" }, { From 1d8b55be5e0d8c7904047cde80ea6fc915da0c18 Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Mon, 20 Oct 2025 17:46:21 +0300 Subject: [PATCH 080/103] feat(client/search): disable nesting depth in collection --- apps/client/src/widgets/ribbon/CollectionPropertiesTab.tsx | 2 ++ .../client/src/widgets/ribbon/collection-properties-config.ts | 4 +++- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/apps/client/src/widgets/ribbon/CollectionPropertiesTab.tsx b/apps/client/src/widgets/ribbon/CollectionPropertiesTab.tsx index 3ff283589..4554054d6 100644 --- a/apps/client/src/widgets/ribbon/CollectionPropertiesTab.tsx +++ b/apps/client/src/widgets/ribbon/CollectionPropertiesTab.tsx @@ -121,6 +121,7 @@ function CheckboxPropertyView({ note, property }: { note: FNote, property: Check function NumberPropertyView({ note, property }: { note: FNote, property: NumberProperty }) { //@ts-expect-error Interop with text box which takes in string values even for numbers. const [ value, setValue ] = useNoteLabel(note, property.bindToLabel); + const disabled = property.disabled?.(note); return ( @@ -129,6 +130,7 @@ function NumberPropertyView({ note, property }: { note: FNote, property: NumberP currentValue={value ?? ""} onChange={setValue} style={{ width: (property.width ?? 100) + "px" }} min={property.min ?? 0} + disabled={disabled} /> ) diff --git a/apps/client/src/widgets/ribbon/collection-properties-config.ts b/apps/client/src/widgets/ribbon/collection-properties-config.ts index fd3d6251e..f59415b79 100644 --- a/apps/client/src/widgets/ribbon/collection-properties-config.ts +++ b/apps/client/src/widgets/ribbon/collection-properties-config.ts @@ -31,6 +31,7 @@ export interface NumberProperty { bindToLabel: FilterLabelsByType; width?: number; min?: number; + disabled?: (note: FNote) => boolean; } interface ComboBoxItem { @@ -154,7 +155,8 @@ export const bookPropertiesConfig: Record = { label: t("book_properties_config.max-nesting-depth"), type: "number", bindToLabel: "maxNestingDepth", - width: 65 + width: 65, + disabled: (note) => note.type === "search" } ] }, From 95987d474d898ede40b27d99fa43e917a8702a7e Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Mon, 20 Oct 2025 17:48:30 +0300 Subject: [PATCH 081/103] fix(client/search): freeze in board --- apps/client/src/widgets/collections/board/data.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/client/src/widgets/collections/board/data.ts b/apps/client/src/widgets/collections/board/data.ts index 273ca3c91..db315564a 100644 --- a/apps/client/src/widgets/collections/board/data.ts +++ b/apps/client/src/widgets/collections/board/data.ts @@ -66,7 +66,7 @@ async function recursiveGroupBy(branches: FBranch[], byColumn: ColumnMap, groupB const note = await branch.getNote(); if (!note || (!includeArchived && note.isArchived)) continue; - if (note.hasChildren()) { + if (note.type !== "search" && note.hasChildren()) { await recursiveGroupBy(note.getChildBranches(), byColumn, groupByColumn, includeArchived); } From f36535d06131a2ca21f73313fa6d195c86d7760a Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Mon, 20 Oct 2025 17:58:54 +0300 Subject: [PATCH 082/103] fix(client/syntax_highlighting): avoid crash if language not found --- apps/client/src/services/syntax_highlight.ts | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/apps/client/src/services/syntax_highlight.ts b/apps/client/src/services/syntax_highlight.ts index 2a545fc8b..89dc7c94e 100644 --- a/apps/client/src/services/syntax_highlight.ts +++ b/apps/client/src/services/syntax_highlight.ts @@ -61,7 +61,11 @@ export async function applySingleBlockSyntaxHighlight($codeBlock: JQuery Date: Mon, 20 Oct 2025 17:59:05 +0300 Subject: [PATCH 083/103] fix(client/search): freeze in presentation collection --- apps/client/src/widgets/collections/presentation/model.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/client/src/widgets/collections/presentation/model.ts b/apps/client/src/widgets/collections/presentation/model.ts index 21711b8a0..92b7ffe76 100644 --- a/apps/client/src/widgets/collections/presentation/model.ts +++ b/apps/client/src/widgets/collections/presentation/model.ts @@ -26,7 +26,7 @@ export async function buildPresentationModel(note: FNote): Promise ({ ...(await buildSlideModel(slideNote)), - verticalSlides: await buildVerticalSlides(slideNote) + verticalSlides: note.type !== "search" ? await buildVerticalSlides(slideNote) : undefined }))); postProcessSlides(slides); From b224267e3b7d3d1e6efa733389e70ba370ce1adb Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Mon, 20 Oct 2025 18:03:55 +0300 Subject: [PATCH 084/103] fix(ribbon): wrong default view type in search --- apps/client/src/widgets/ribbon/CollectionPropertiesTab.tsx | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/apps/client/src/widgets/ribbon/CollectionPropertiesTab.tsx b/apps/client/src/widgets/ribbon/CollectionPropertiesTab.tsx index 4554054d6..9d8113b3c 100644 --- a/apps/client/src/widgets/ribbon/CollectionPropertiesTab.tsx +++ b/apps/client/src/widgets/ribbon/CollectionPropertiesTab.tsx @@ -25,7 +25,8 @@ const VIEW_TYPE_MAPPINGS: Record = { export default function CollectionPropertiesTab({ note }: TabContext) { const [ viewType, setViewType ] = useNoteLabel(note, "viewType"); - const viewTypeWithDefault = (viewType ?? "grid") as ViewTypeOptions; + const defaultViewType = (note?.type === "search" ? "list" : "grid"); + const viewTypeWithDefault = (viewType ?? defaultViewType) as ViewTypeOptions; const properties = bookPropertiesConfig[viewTypeWithDefault].properties; return ( From 29682cef4969b7dccda65e36e1868eb7e52fad51 Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Mon, 20 Oct 2025 18:16:28 +0300 Subject: [PATCH 085/103] docs(user): update documentation on search in collections --- .../Notes/Printing & Exporting as PDF.html | 35 +++--- .../User Guide/Note Types/Collections.html | 113 ++++++++++-------- docs/User Guide/!!!meta.json | 47 ++++---- .../User Guide/Note Types/Collections.md | 7 +- 4 files changed, 113 insertions(+), 89 deletions(-) diff --git a/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Basic Concepts and Features/Notes/Printing & Exporting as PDF.html b/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Basic Concepts and Features/Notes/Printing & Exporting as PDF.html index 5ecb0f510..2d1ee73fb 100644 --- a/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Basic Concepts and Features/Notes/Printing & Exporting as PDF.html +++ b/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Basic Concepts and Features/Notes/Printing & Exporting as PDF.html @@ -4,6 +4,7 @@
Screenshot of the note contextual menu indicating the “Export as PDF” option.
+

Printing

This feature allows printing of notes. It works on both the desktop client, but also on the web.

@@ -28,7 +29,7 @@ class="admonition note"> on the button, select Export note → This note and all of its descendants → HTML in ZIP archive). Make sure not to accidentally leak any personal information.

-

Consider adjusting font sizes and using page breaks to +

Consider adjusting font sizes and using page breaks to work around the layout.

Exporting as PDF

On the desktop application of Trilium it is possible to export a note @@ -49,12 +50,12 @@ class="admonition note">

Customizing exporting as PDF

When exporting to PDF, there are no customizable settings such as page orientation, size. However, there are a few Attributes to - adjust some of the settings:

+ href="#root/_help_zEY4DaJG4YT5">Attributes to adjust some of the + settings:

    -
  • To print in landscape mode instead of portrait (useful for big diagrams +
  • To print in landscape mode instead of portrait (useful for big diagrams or slides), add #printLandscape.
  • -
  • By default, the resulting PDF will be in Letter format. It is possible +
  • By default, the resulting PDF will be in Letter format. It is possible to adjust it to another page size via the #printPageSize attribute, with one of the following values: A0, A1, A2, A3, A4, A5, A6, Legal, Letter, Tabloid, Ledger.
@@ -68,34 +69,34 @@ class="admonition note"> href="#root/_help_4TIF1oA4VQRO">Options and assigning a key combination for:

    -
  • Print Active Note +
  • Print Active Note
  • -
  • Export Active Note as PDF +
  • Export Active Note as PDF

Constraints & limitations

-

Not all Note Types are +

Not all Note Types are supported when printing, in which case the Print and Export as PDF options will be disabled.

    -
  • For Code notes: +
  • For Code notes:
      -
    • Line numbers are not printed.
    • -
    • Syntax highlighting is enabled, however a default theme (Visual Studio) +
    • Line numbers are not printed.
    • +
    • Syntax highlighting is enabled, however a default theme (Visual Studio) is enforced.
  • -
  • For Collections: +
  • For Collections:
      -
    • Only Presentation View is +
    • Only Presentation View is currently supported.
    • -
    • We plan to add support for all the collection types at some point.
    • +
    • We plan to add support for all the collection types at some point.
  • -
  • Using Custom app-wide CSS for +
  • Using Custom app-wide CSS for printing is not longer supported, due to a more stable but isolated mechanism.
      -
    • We plan to introduce a new mechanism specifically for a print CSS.
    • +
    • We plan to introduce a new mechanism specifically for a print CSS.
@@ -108,4 +109,4 @@ class="admonition note">

Accessing the print note in a web browser allows for easy debugging to understand why a particular note doesn't render well. The mechanism for rendering is similar to the one used in Note List.

\ No newline at end of file + href="#root/_help_0ESUbbAxVnoK">Note List.

\ No newline at end of file diff --git a/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Note Types/Collections.html b/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Note Types/Collections.html index 4caedaaf8..2a774a3f3 100644 --- a/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Note Types/Collections.html +++ b/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Note Types/Collections.html @@ -4,29 +4,31 @@ child notes into one continuous view. This makes it ideal for reading extensive information broken into smaller, manageable segments.

    -
  • Grid View which +
  • Grid View which is the default presentation method for child notes (see Note List), where the notes are displayed as tiles with their title and content being visible.
  • -
  • List View is +
  • List View is similar to Grid View, but it displays the notes one under the other with the content being expandable/collapsible, but also works recursively.

More specialized collections were introduced, such as the:

    -
  • Calendar View which +
  • Calendar View which displays a week, month or year calendar with the notes being shown as events. New events can be added easily by dragging across the calendar.
  • -
  • Geo Map View which +
  • Geo Map View which displays a geographical map in which the notes are represented as markers/pins on the map. New events can be easily added by pointing on the map.
  • -
  • Table View displays - each note as a row in a table, with Promoted Attributes being - shown as well. This makes it easy to visualize attributes of notes, as - well as making them easily editable.
  • -
  • Board View (Kanban) - displays notes in columns, grouped by the value of a label.
  • +
  • Table View displays + each note as a row in a table, with Promoted Attributes being + shown as well. This makes it easy to visualize attributes of notes, as + well as making them easily editable.
  • +
  • Board View (Kanban) + displays notes in columns, grouped by the value of a label.

For a quick presentation of all the supported view types, see the child notes of this help page, including screenshots.

@@ -42,49 +44,58 @@

Adding a description to a collection

To add a text before the collection, for example to describe it:

    -
  1. Create a new collection.
  2. -
  3. In the Ribbon, +
  4. Create a new collection.
  5. +
  6. In the Ribbon, go to Basic Properties and change the note type from Collection to Text.

Now the text will be displayed above while still maintaining the collection view.

Using saved search

-

Since collections are based on the Note List mechanism, - it's possible to apply the same configuration to Saved Search to do advanced querying - and presenting the result in an adequate matter such as a calendar, a table - or even a map.

-

Creating a collection from scratch

-

By default, collections come with a default configuration and sometimes - even sample notes. To create a collection completely from scratch:

-
    -
  1. Create a new note of type Text (or any type).
  2. -
  3. In the Ribbon, - go to Basic Properties and select Collection as the note - type.
  4. -
  5. Still in the ribbon, go to Collection Properties and select the - desired view type.
  6. -
  7. Consult the help page of the corresponding view type in order to understand - how to configure them.
  8. -
-

Archived notes

-

By default, archived notes will not be shown in collections. This behaviour - can be changed by going to Collection Properties in the  - Ribbon and checking Show archived notes.

-

Archived notes will be generally indicated by being greyed out as opposed - to the normal ones.

-

Under the hood

-

Collections by themselves are simply notes with no content that rely on - the Note List mechanism - (the one that lists the children notes at the bottom of a note) to display - information.

-

By default, new collections use predefined Templates that are stored safely - in the Hidden Notes to - define some basic configuration such as the type of view, but also some  - Promoted Attributes to make editing easier.

-

Collections don't store their configuration (e.g. the position on the - map, the hidden columns in a table) in the content of the note itself, - but as attachments.

\ No newline at end of file +

Collections, by default, only display the child notes. However, it is + possible to use the Search functionality + to display notes all across the tree, with advanced querying functionality.

+

To do so, simply start a Search and + go to the Collection Properties tab in the Ribbon and + select a desired type of collection. To keep the search-based collection, + use a Saved Search.

+ +

Creating a collection from scratch

+

By default, collections come with a default configuration and sometimes + even sample notes. To create a collection completely from scratch:

+
    +
  1. Create a new note of type Text (or any type).
  2. +
  3. In the Ribbon, + go to Basic Properties and select Collection as the note + type.
  4. +
  5. Still in the ribbon, go to Collection Properties and select the + desired view type.
  6. +
  7. Consult the help page of the corresponding view type in order to understand + how to configure them.
  8. +
+

Archived notes

+

By default, archived notes will not be shown in collections. This behaviour + can be changed by going to Collection Properties in the  + Ribbon and checking Show archived notes.

+

Archived notes will be generally indicated by being greyed out as opposed + to the normal ones.

+

Under the hood

+

Collections by themselves are simply notes with no content that rely on + the Note List mechanism + (the one that lists the children notes at the bottom of a note) to display + information.

+

By default, new collections use predefined Templates that are stored safely + in the Hidden Notes to + define some basic configuration such as the type of view, but also some  + Promoted Attributes to make editing easier.

+

Collections don't store their configuration (e.g. the position on the + map, the hidden columns in a table) in the content of the note itself, + but as attachments.

\ No newline at end of file diff --git a/docs/User Guide/!!!meta.json b/docs/User Guide/!!!meta.json index 1bd423c28..f42b42ae0 100644 --- a/docs/User Guide/!!!meta.json +++ b/docs/User Guide/!!!meta.json @@ -3489,21 +3489,14 @@ { "type": "relation", "name": "internalLink", - "value": "wy8So3yZZlH9", + "value": "0ESUbbAxVnoK", "isInheritable": false, "position": 20 }, { "type": "relation", "name": "internalLink", - "value": "4TIF1oA4VQRO", - "isInheritable": false, - "position": 30 - }, - { - "type": "label", - "name": "iconClass", - "value": "bx bx-printer", + "value": "wy8So3yZZlH9", "isInheritable": false, "position": 30 }, @@ -3517,7 +3510,7 @@ { "type": "relation", "name": "internalLink", - "value": "0ESUbbAxVnoK", + "value": "4TIF1oA4VQRO", "isInheritable": false, "position": 50 }, @@ -3538,23 +3531,30 @@ { "type": "relation", "name": "internalLink", - "value": "AlhDUqhENtH7", + "value": "GTwFsgaA0lCt", "isInheritable": false, "position": 80 }, { "type": "relation", "name": "internalLink", - "value": "GTwFsgaA0lCt", + "value": "zP3PMqaG71Ct", "isInheritable": false, "position": 90 }, { "type": "relation", "name": "internalLink", - "value": "zP3PMqaG71Ct", + "value": "AlhDUqhENtH7", "isInheritable": false, "position": 100 + }, + { + "type": "label", + "name": "iconClass", + "value": "bx bx-printer", + "isInheritable": false, + "position": 30 } ], "format": "markdown", @@ -8119,13 +8119,6 @@ "isInheritable": false, "position": 100 }, - { - "type": "relation", - "name": "internalLink", - "value": "m523cpzocqaD", - "isInheritable": false, - "position": 110 - }, { "type": "relation", "name": "internalLink", @@ -8153,6 +8146,20 @@ "value": "bx bx-book", "isInheritable": false, "position": 20 + }, + { + "type": "relation", + "name": "internalLink", + "value": "eIg8jdvaoNNd", + "isInheritable": false, + "position": 140 + }, + { + "type": "relation", + "name": "internalLink", + "value": "m523cpzocqaD", + "isInheritable": false, + "position": 150 } ], "format": "markdown", diff --git a/docs/User Guide/User Guide/Note Types/Collections.md b/docs/User Guide/User Guide/Note Types/Collections.md index 03bc5140c..90287709d 100644 --- a/docs/User Guide/User Guide/Note Types/Collections.md +++ b/docs/User Guide/User Guide/Note Types/Collections.md @@ -36,7 +36,12 @@ Now the text will be displayed above while still maintaining the collection view ### Using saved search -Since collections are based on the Note List mechanism, it's possible to apply the same configuration to Saved Search to do advanced querying and presenting the result in an adequate matter such as a calendar, a table or even a map. +Collections, by default, only display the child notes. However, it is possible to use the Search functionality to display notes all across the tree, with advanced querying functionality. + +To do so, simply start a Search and go to the _Collection Properties_ tab in the Ribbon and select a desired type of collection. To keep the search-based collection, use a Saved Search. + +> [!IMPORTANT] +> While in search, none of the collections will not display the child notes of the search results. The reason is that the search might hit a note multiple times, causing an exponential rise in the number of results. ### Creating a collection from scratch From fa57966b01036747721fcc2f05a0893b400e64ad Mon Sep 17 00:00:00 2001 From: Manfred Manni Date: Mon, 20 Oct 2025 13:21:56 +0200 Subject: [PATCH 086/103] Translated using Weblate (German) Currently translated at 99.8% (1616 of 1618 strings) Translation: Trilium Notes/Client Translate-URL: https://hosted.weblate.org/projects/trilium/client/de/ --- apps/client/src/translations/de/translation.json | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/apps/client/src/translations/de/translation.json b/apps/client/src/translations/de/translation.json index db0664813..b47b03435 100644 --- a/apps/client/src/translations/de/translation.json +++ b/apps/client/src/translations/de/translation.json @@ -764,7 +764,8 @@ "table": "Tabelle", "geo-map": "Weltkarte", "board": "Tafel", - "include_archived_notes": "Zeige archivierte Notizen" + "include_archived_notes": "Zeige archivierte Notizen", + "presentation": "Präsentation" }, "edited_notes": { "no_edited_notes_found": "An diesem Tag wurden noch keine Notizen bearbeitet...", @@ -2075,5 +2076,9 @@ }, "collections": { "rendering_error": "Aufgrund eines Fehlers können keine Inhalte angezeigt werden." + }, + "presentation_view": { + "edit-slide": "Diese Folie bearbeiten", + "start-presentation": "Präsentation starten" } } From 0d2dc86fb96fb643f8c6b059b72cb750947742b2 Mon Sep 17 00:00:00 2001 From: Luk On Date: Mon, 20 Oct 2025 12:38:13 +0200 Subject: [PATCH 087/103] Translated using Weblate (Polish) Currently translated at 29.4% (476 of 1618 strings) Translation: Trilium Notes/Client Translate-URL: https://hosted.weblate.org/projects/trilium/client/pl/ --- .../src/translations/pl/translation.json | 1498 ++++++++++++++++- 1 file changed, 1476 insertions(+), 22 deletions(-) diff --git a/apps/client/src/translations/pl/translation.json b/apps/client/src/translations/pl/translation.json index cd4c42395..ff943c93a 100644 --- a/apps/client/src/translations/pl/translation.json +++ b/apps/client/src/translations/pl/translation.json @@ -161,7 +161,21 @@ "inPageSearch": "wyszukiwanie wewnątrz strony" }, "book_properties": { - "list": "Lista" + "list": "Lista", + "view_type": "Typ widoku", + "grid": "Siatka", + "collapse_all_notes": "Zwiń wszystkie notatki", + "expand_all_children": "Rozwiń wszystkie dzieci", + "collapse": "Zwiń", + "expand": "Rozwiń", + "book_properties": "Właściwości kolekcji", + "invalid_view_type": "Nieprawidłowy typ widoku '{{type}}'", + "calendar": "Kalendarz", + "table": "Tabela", + "geo-map": "Mapa geograficzna", + "board": "Tablica", + "presentation": "Prezentacja", + "include_archived_notes": "Pokaż zarchiwizowane notatki" }, "board_view": { "move-to": "Przenieś do", @@ -208,7 +222,8 @@ "next_theme_button": "Spróbuj nowego motywu", "background_effects_title": "Efekty w tle są już stabilne", "dismiss": "Odrzuć", - "background_effects_button": "Włącz efekty w tle" + "background_effects_button": "Włącz efekty w tle", + "background_effects_message": "Na urządzeniach z systemem Windows efekty tła są teraz w pełni stabilne. Efekty tła dodają odrobinę koloru do interfejsu użytkownika, rozmywając tło za nim. Ta technika jest również stosowana w innych aplikacjach, takich jak Eksplorator Windows." }, "settings": { "related_settings": "Powiązane ustawienia" @@ -234,7 +249,9 @@ "to_value": "do wartości", "new_value_placeholder": "nowa wartość", "help_text": "We wszystkich dopasowanych notatkach:", - "help_text_item2": "albo zmień wartość istniejącej etykiety" + "help_text_item2": "albo zmień wartość istniejącej etykiety", + "help_text_item1": "utwórz daną etykietę, jeśli notatka jeszcze jej nie ma", + "help_text_note": "Możesz również wywołać tę metodę bez wartości, w takim przypadku etykieta zostanie przypisana do notatki bez wartości." }, "attribute_detail": { "delete": "Usuń", @@ -248,7 +265,118 @@ "precision": "Prezycja", "digits": "znaki", "inverse_relation_title": "Opcjonalne ustawienie definiujące, do której relacji jest ta relacja przeciwna. Przykład: Główna - podnotatka są relacjami odwrotnymi do siebie.", - "inverse_relation": "Odwrócone powiązanie" + "inverse_relation": "Odwrócone powiązanie", + "attr_detail_title": "Tytuł szczegółów atrybutu", + "close_button_title": "Anuluj zmiany i zamknij", + "attr_is_owned_by": "Atrybut jest własnością", + "attr_name_title": "Nazwa atrybutu może składać się tylko ze znaków alfanumerycznych, dwukropka i podkreślenia", + "name": "Nazwa", + "value": "Wartość", + "target_note_title": "Relacja to nazwane połączenie między notatką źródłową a docelową.", + "target_note": "Notatka docelowa", + "promoted_title": "Promowany atrybut jest wyraźnie wyświetlany w notatce.", + "promoted": "Promowany", + "promoted_alias_title": "Nazwa, która ma być wyświetlana w interfejsie promowanych atrybutów.", + "promoted_alias": "Alias", + "multiplicity_title": "Krotność definiuje, ile atrybutów o tej samej nazwie można utworzyć - maksymalnie 1 lub więcej niż 1.", + "multiplicity": "Krotność", + "single_value": "Pojedyncza wartość", + "multi_value": "Wiele wartości", + "label_type_title": "Typ etykiety pomoże Trilium wybrać odpowiedni interfejs do wprowadzenia wartości etykiety.", + "label_type": "Typ", + "text": "Tekst", + "number": "Liczba", + "boolean": "Wartość logiczna", + "date": "Data", + "date_time": "Data i czas", + "time": "Czas", + "url": "URL", + "precision_title": "Jaka liczba cyfr po przecinku powinna być dostępna w interfejsie ustawiania wartości.", + "inheritable_title": "Dziedziczny atrybut będzie dziedziczony przez wszystkich potomków w tym drzewie.", + "inheritable": "Dziedziczny", + "save_and_close": "Zapisz i zamknij Ctrl+Enter", + "calendar_root": "oznacza notatkę, która powinna być używana jako korzeń dla notatek dziennych. Tylko jedna powinna być tak oznaczona.", + "archived": "notatki z tą etykietą nie będą domyślnie widoczne w wynikach wyszukiwania (również w dialogach Przejdź do, Dodaj link itp.).", + "exclude_from_export": "notatki (wraz z ich poddrzewem) nie będą uwzględniane w żadnym eksporcie notatek", + "run": "definiuje, przy jakich zdarzeniach skrypt powinien być uruchamiany. Możliwe wartości to:\n
    \n
  • frontendStartup - gdy frontend Trilium się uruchamia (lub jest odświeżany), ale nie na urządzeniach mobilnych.
  • \n
  • mobileStartup - gdy frontend Trilium się uruchamia (lub jest odświeżany), na urządzeniach mobilnych.
  • \n
  • backendStartup - gdy backend Trilium się uruchamia
  • \n
  • hourly - uruchamiaj raz na godzinę. Możesz użyć dodatkowej etykiety runAtHour, aby określić, o której godzinie.
  • \n
  • daily - uruchamiaj raz dziennie
  • \n
", + "run_on_instance": "Zdefiniuj, która instancja Trilium ma to uruchomić. Domyślnie wszystkie instancje.", + "run_at_hour": "O której godzinie ma to być uruchomione. Powinno być używane razem z #run=hourly. Można zdefiniować wielokrotnie dla większej liczby uruchomień w ciągu dnia.", + "disable_inclusion": "skrypty z tą etykietą nie będą uwzględniane w wykonaniu skryptu nadrzędnego.", + "sorted": "utrzymuje notatki podrzędne posortowane alfabetycznie według tytułu", + "sort_direction": "ASC (domyślnie) lub DESC", + "sort_folders_first": "Foldery (notatki z dziećmi) powinny być sortowane na górze", + "top": "utrzymuj daną notatkę na górze w jej rodzicu (dotyczy tylko posortowanych rodziców)", + "hide_promoted_attributes": "Ukryj promowane atrybuty w tej notatce", + "read_only": "edytor jest w trybie tylko do odczytu. Działa tylko dla notatek tekstowych i kodowych.", + "auto_read_only_disabled": "notatki tekstowe/kodowe mogą być automatycznie ustawiane w tryb tylko do odczytu, gdy są zbyt duże. Możesz wyłączyć to zachowanie dla poszczególnych notatek, dodając tę etykietę do notatki", + "app_css": "oznacza notatki CSS, które są ładowane do aplikacji Trilium i mogą być używane do modyfikacji wyglądu Trilium.", + "app_theme": "oznacza notatki CSS, które są pełnymi motywami Trilium i są dostępne w opcjach Trilium.", + "app_theme_base": "ustaw na \"next\", \"next-light\" lub \"next-dark\", aby użyć odpowiedniego motywu TriliumNext (auto, jasny lub ciemny) jako podstawy dla niestandardowego motywu, zamiast starszego.", + "css_class": "wartość tej etykiety jest dodawana jako klasa CSS do węzła reprezentującego daną notatkę w drzewie. Może to być przydatne do zaawansowanego motywowania. Może być używane w notatkach-szablonach.", + "icon_class": "wartość tej etykiety jest dodawana jako klasa CSS do ikony w drzewie, co może pomóc wizualnie odróżnić notatki w drzewie. Przykładem może być bx bx-home - ikony pochodzą z boxicons. Może być używane w notatkach-szablonach.", + "page_size": "liczba elementów na stronie w liście notatek", + "custom_request_handler": "zobacz Niestandardowy obsługujący żądania", + "custom_resource_provider": "zobacz Niestandardowy obsługujący żądania", + "widget": "oznacza tę notatkę jako niestandardowy widżet, który zostanie dodany do drzewa komponentów Trilium", + "workspace": "oznacza tę notatkę jako obszar roboczy, co pozwala na łatwe podnoszenie", + "workspace_icon_class": "definiuje klasę CSS ikony box, która będzie używana w karcie po podniesieniu do tej notatki", + "workspace_tab_background_color": "Kolor CSS używany w karcie notatki po podniesieniu do tej notatki", + "workspace_calendar_root": "Definiuje korzeń kalendarza dla obszaru roboczego", + "workspace_template": "Ta notatka pojawi się w wyborze dostępnych szablonów podczas tworzenia nowej notatki, ale tylko po podniesieniu do obszaru roboczego zawierającego ten szablon", + "search_home": "nowe notatki wyszukiwania będą tworzone jako dzieci tej notatki", + "workspace_search_home": "nowe notatki wyszukiwania będą tworzone jako dzieci tej notatki po podniesieniu do jakiegoś przodka tej notatki obszaru roboczego", + "inbox": "domyślna lokalizacja skrzynki odbiorczej dla nowych notatek - gdy tworzysz notatkę za pomocą przycisku \"nowa notatka\" na pasku bocznym, notatki będą tworzone jako notatki podrzędne w notatce oznaczonej etykietą #inbox.", + "workspace_inbox": "domyślna lokalizacja skrzynki odbiorczej dla nowych notatek po podniesieniu do jakiegoś przodka tej notatki obszaru roboczego", + "sql_console_home": "domyślna lokalizacja notatek konsoli SQL", + "bookmark_folder": "notatka z tą etykietą pojawi się w zakładkach jako folder (umożliwiając dostęp do jej dzieci)", + "share_hidden_from_tree": "ta notatka jest ukryta w lewym drzewie nawigacyjnym, ale nadal dostępna pod swoim adresem URL", + "share_external_link": "notatka będzie działać jako link do zewnętrznej strony internetowej w drzewie udostępniania", + "share_alias": "zdefiniuj alias, za pomocą którego notatka będzie dostępna pod adresem https://your_trilium_host/share/[your_alias]", + "share_omit_default_css": "domyślny CSS strony udostępniania zostanie pominięty. Użyj, gdy wprowadzasz obszerne zmiany w stylizacji.", + "share_root": "oznacza notatkę, która jest serwowana w katalogu głównym /share.", + "share_description": "zdefiniuj tekst, który ma być dodany do metatagu HTML dla opisu", + "share_raw": "notatka będzie serwowana w surowym formacie, bez opakowania HTML", + "share_disallow_robot_indexing": "zabroni robotom indeksowania tej notatki za pomocą nagłówka X-Robots-Tag: noindex", + "share_credentials": "wymagaj poświadczeń, aby uzyskać dostęp do tej udostępnionej notatki. Oczekuje się, że wartość będzie w formacie 'nazwa_użytkownika:hasło'. Nie zapomnij uczynić tego dziedzicznym, aby zastosować do notatek podrzędnych/obrazów.", + "share_index": "notatka z tą etykietą będzie zawierać listę wszystkich korzeni udostępnionych notatek", + "display_relations": "rozdzielone przecinkami nazwy relacji, które powinny być wyświetlane. Wszystkie inne będą ukryte.", + "hide_relations": "rozdzielone przecinkami nazwy relacji, które powinny być ukryte. Wszystkie inne będą wyświetlane.", + "title_template": "domyślny tytuł notatek tworzonych jako dzieci tej notatki. Wartość jest oceniana jako ciąg znaków JavaScript\n i dlatego może być wzbogacona o dynamiczną treść za pomocą wstrzykniętych zmiennych now i parentNote. Przykłady:\n \n
    \n
  • ${parentNote.getLabelValue('authorName')}'s literary works
  • \n
  • Log for ${now.format('YYYY-MM-DD HH:mm:ss')}
  • \n
\n \n Zobacz wiki ze szczegółami, dokumentację API dla parentNote i now, aby uzyskać szczegółowe informacje.", + "template": "Ta notatka pojawi się w wyborze dostępnych szablonów podczas tworzenia nowej notatki", + "toc": "#toc lub #toc=show wymusi wyświetlenie spisu treści, #toc=hide wymusi jego ukrycie. Jeśli etykieta nie istnieje, obserwowane jest ustawienie globalne", + "color": "definiuje kolor notatki w drzewie notatek, linkach itp. Użyj dowolnej prawidłowej wartości koloru CSS, np. 'red' lub #a13d5f", + "keyboard_shortcut": "Definiuje skrót klawiaturowy, który natychmiast przejdzie do tej notatki. Przykład: 'ctrl+alt+e'. Wymaga ponownego załadowania frontendu, aby zmiana zaczęła obowiązywać.", + "keep_current_hoisting": "Otwarcie tego linku nie zmieni podniesienia, nawet jeśli notatka nie jest wyświetlana w bieżącym podniesionym poddrzewie.", + "execute_button": "Tytuł przycisku, który wykona bieżącą notatkę kodu", + "execute_description": "Dłuższy opis bieżącej notatki kodu wyświetlany razem z przyciskiem wykonania", + "exclude_from_note_map": "Notatki z tą etykietą będą ukryte na Mapie Notatek", + "new_notes_on_top": "Nowe notatki będą tworzone na górze notatki nadrzędnej, a nie na dole.", + "hide_highlight_widget": "Ukryj widżet listy wyróżnień", + "run_on_note_creation": "wykonuje się, gdy notatka jest tworzona na backendzie. Użyj tej relacji, jeśli chcesz uruchomić skrypt dla wszystkich notatek utworzonych w określonym poddrzewie. W takim przypadku utwórz ją w korzeniu poddrzewa i uczyń dziedziczną. Nowa notatka utworzona w poddrzewie (na dowolnej głębokości) uruchomi skrypt.", + "run_on_child_note_creation": "wykonuje się, gdy nowa notatka jest tworzona pod notatką, w której zdefiniowano tę relację", + "run_on_note_title_change": "wykonuje się, gdy tytuł notatki jest zmieniany (obejmuje również tworzenie notatki)", + "run_on_note_content_change": "wykonuje się, gdy zawartość notatki jest zmieniana (obejmuje również tworzenie notatki).", + "run_on_note_change": "wykonuje się, gdy notatka jest zmieniana (obejmuje również tworzenie notatki). Nie obejmuje zmian w zawartości", + "run_on_note_deletion": "wykonuje się, gdy notatka jest usuwana", + "run_on_branch_creation": "wykonuje się, gdy tworzona jest gałąź. Gałąź to połączenie między notatką nadrzędną a podrzędną i jest tworzona np. podczas klonowania lub przenoszenia notatki.", + "run_on_branch_change": "wykonuje się, gdy gałąź jest aktualizowana.", + "run_on_branch_deletion": "wykonuje się, gdy gałąź jest usuwana. Gałąź to połączenie między notatką nadrzędną a podrzędną i jest usuwana np. podczas przenoszenia notatki (stara gałąź/link jest usuwana).", + "run_on_attribute_creation": "wykonuje się, gdy tworzony jest nowy atrybut dla notatki, która definiuje tę relację", + "run_on_attribute_change": " wykonuje się, gdy atrybut jest zmieniany w notatce, która definiuje tę relację. Jest to również wyzwalane, gdy atrybut jest usuwany", + "relation_template": "atrybuty notatki będą dziedziczone nawet bez relacji rodzic-dziecko, zawartość i poddrzewo notatki zostaną dodane do notatek instancji, jeśli są puste. Zobacz dokumentację, aby uzyskać szczegółowe informacje.", + "inherit": "atrybuty notatki będą dziedziczone nawet bez relacji rodzic-dziecko. Zobacz relację szablonu dla podobnego konceptu. Zobacz dziedziczenie atrybutów w dokumentacji.", + "render_note": "notatki typu \"renderuj notatkę HTML\" będą renderowane za pomocą notatki kodu (HTML lub skrypt) i konieczne jest wskazanie za pomocą tej relacji, która notatka ma być renderowana", + "widget_relation": "cel tej relacji zostanie wykonany i wyrenderowany jako widżet na pasku bocznym", + "share_css": "Notatka CSS, która zostanie wstrzyknięta na stronę udostępniania. Notatka CSS musi również znajdować się w udostępnionym poddrzewie. Rozważ również użycie 'share_hidden_from_tree' i 'share_omit_default_css'.", + "share_js": "Notatka JavaScript, która zostanie wstrzyknięta na stronę udostępniania. Notatka JS musi również znajdować się w udostępnionym poddrzewie. Rozważ użycie 'share_hidden_from_tree'.", + "share_template": "Wbudowana notatka JavaScript, która będzie używana jako szablon do wyświetlania udostępnionej notatki. W razie niepowodzenia używany jest domyślny szablon. Rozważ użycie 'share_hidden_from_tree'.", + "share_favicon": "Notatka favicon do ustawienia na udostępnionej stronie. Zazwyczaj chcesz ustawić ją w katalogu głównym udostępniania i uczynić ją dziedziczną. Notatka favicon musi również znajdować się w udostępnionym poddrzewie. Rozważ użycie 'share_hidden_from_tree'.", + "is_owned_by_note": "jest własnością notatki", + "other_notes_with_name": "Inne notatki z nazwą {{attributeType}} \"{{attributeName}}\"", + "and_more": "... i {{count}} więcej.", + "print_landscape": "Podczas eksportowania do formatu PDF zmienia orientację strony na poziomą zamiast pionowej.", + "print_page_size": "Podczas eksportowania do formatu PDF zmienia rozmiar strony. Obsługiwane wartości: A0, A1, A2, A3, A4, A5, A6, Legal, Letter, Tabloid, Ledger.", + "color_type": "Kolor" }, "import": { "importIntoNote": "Importuj do notatki", @@ -268,7 +396,13 @@ "description": "Skonfiguruj, które tagi HTML mają zostać zachowane podczas importowania notatek. Tagi spoza tej listy zostaną usunięte podczas importu. Niektóre tagi (np. „script”) są zawsze usuwane ze względów bezpieczeństwa.", "placeholder": "Wpisz tagi HTML, jedna na linijkę", "reset_button": "Zresetuj do domyślnej listy" - } + }, + "explodeArchivesTooltip": "Jeśli ta opcja jest zaznaczona, Trilium odczyta pliki .zip, .enex i .opml i utworzy notatki z plików wewnątrz tych archiwów. Jeśli opcja nie jest zaznaczona, Trilium dołączy same archiwa do notatki.", + "explodeArchives": "Czytaj zawartość archiwów .zip, .enex i .opml.", + "shrinkImagesTooltip": "

Jeśli zaznaczysz tę opcję, Trilium spróbuje zmniejszyć importowane obrazy poprzez skalowanie i optymalizację, co może wpłynąć na postrzeganą jakość obrazu. Jeśli opcja nie jest zaznaczona, obrazy zostaną zaimportowane bez zmian.

Nie dotyczy to importów .zip z metadanymi, ponieważ zakłada się, że te pliki są już zoptymalizowane.

", + "textImportedAsText": "Importuj HTML, Markdown i TXT jako notatki tekstowe, jeśli nie jest to jasne z metadanych", + "codeImportedAsCode": "Importuj rozpoznane pliki kodu (np. .json) jako notatki kodu, jeśli nie jest to jasne z metadanych", + "replaceUnderscoresWithSpaces": "Zastąp podkreślenia spacjami w nazwach importowanych notatek" }, "image_properties": { "title": "Obraz", @@ -353,7 +487,12 @@ "search_parameters": "Parametry wyszukiwania", "unknown_search_option": "Nieznana opcja wyszukiwania {{searchOptionName}}", "search_note_saved": "Wyszukiwana notatka została zapisana do {{- notePathTitle}}", - "actions_executed": "Akcja została wykonana." + "actions_executed": "Akcja została wykonana.", + "debug": "debugowanie", + "debug_description": "Debugowanie wydrukuje dodatkowe informacje debugowania w konsoli, aby pomóc w debugowaniu złożonych zapytań", + "action": "akcja", + "search_button": "Szukaj", + "search_execute": "Szukaj i wykonaj akcje" }, "similar_notes": { "title": "Podobne notatki", @@ -375,10 +514,12 @@ }, "debug": { "debug": "Debuguj", - "debug_info": "Debugowanie wyświetli dodatkowe informacje debugowania w konsoli, aby ułatwić debugowanie złożonych zapytań." + "debug_info": "Debugowanie wyświetli dodatkowe informacje debugowania w konsoli, aby ułatwić debugowanie złożonych zapytań.", + "access_info": "Aby uzyskać dostęp do informacji debugowania, wykonaj zapytanie i kliknij \"Pokaż logi backendu\" w lewym górnym rogu." }, "fast_search": { - "fast_search": "Szybkie wyszukiwanie" + "fast_search": "Szybkie wyszukiwanie", + "description": "Opcja szybkiego wyszukiwania wyłącza pełnotekstowe przeszukiwanie zawartości notatek, co może przyspieszyć wyszukiwanie w dużych bazach danych." }, "file_properties": { "download": "Pobierz", @@ -386,13 +527,21 @@ "upload_new_revision": "Wgraj nową wersję", "upload_success": "Nowa wersja pliku nie została wysłana.", "upload_failed": "Wysyłanie nowej wersji pliku się nie udało.", - "title": "Plik" + "title": "Plik", + "note_id": "ID notatki", + "original_file_name": "Oryginalna nazwa pliku", + "file_type": "Typ pliku", + "file_size": "Rozmiar pliku" }, "include_note": { "label_note": "Notatka", "placeholder_search": "szukaj notatki po jej nazwie", "dialog_title": "Dołącz notatkę", - "button_include": "Dołącz notatkę" + "button_include": "Dołącz notatkę", + "box_size_prompt": "Rozmiar okna dołączonej notatki:", + "box_size_small": "mały (~ 10 linii)", + "box_size_medium": "średni (~ 30 linii)", + "box_size_full": "pełny (okno pokazuje cały tekst)" }, "info": { "closeButton": "Zamknij", @@ -406,10 +555,12 @@ "markdown_import": { "dialog_title": "Zaimportuj Markdown", "import_button": "Import", - "import_success": "Treść Markdown została zaimportowana do dokumentu." + "import_success": "Treść Markdown została zaimportowana do dokumentu.", + "modal_body_text": "Ze względu na piaskownicę przeglądarki nie jest możliwe bezpośrednie odczytanie schowka z JavaScript. Wklej Markdown do importu do poniższego pola tekstowego i kliknij przycisk Importuj" }, "limit": { - "limit": "Limit" + "limit": "Limit", + "take_first_x_results": "Weź tylko pierwsze X określonych wyników." }, "link_context_menu": { "open_note_in_popup": "Szybka edycja", @@ -418,7 +569,13 @@ "open_note_in_new_window": "Otwórz notatkę w nowym oknie" }, "electron_integration": { - "desktop-application": "Aplikacja desktopowa" + "desktop-application": "Aplikacja desktopowa", + "native-title-bar": "Natywny pasek tytułu", + "native-title-bar-description": "Dla systemów Windows i macOS wyłączenie natywnego paska tytułu sprawia, że aplikacja wygląda bardziej kompaktowo. W systemie Linux włączenie natywnego paska tytułu lepiej integruje się z resztą systemu.", + "background-effects": "Włącz efekty tła (tylko Windows 11)", + "background-effects-description": "Efekt Mica dodaje rozmyte, stylowe tło do okien aplikacji, tworząc głębię i nowoczesny wygląd. \"Natywny pasek tytułu\" musi być wyłączony.", + "restart-app-button": "Uruchom ponownie aplikację, aby zobaczyć zmiany", + "zoom-factor": "Współczynnik powiększenia" }, "electron_context_menu": { "cut": "Wytnij", @@ -426,7 +583,8 @@ "copy-link": "Kopiuj link", "paste": "Wklej", "paste-as-plain-text": "Wklej jako plain text", - "search_online": "Szukaj \"{{term}}\" za pomocą {{searchEngine}}" + "search_online": "Szukaj \"{{term}}\" za pomocą {{searchEngine}}", + "add-term-to-dictionary": "Dodaj \"{{term}}\" do słownika" }, "image_context_menu": { "copy_reference_to_clipboard": "Skopiuj odnośnik do schowka", @@ -435,7 +593,10 @@ "note_autocomplete": { "clear-text-field": "Wyczyść pole tekstowe", "show-recent-notes": "Pokaż ostatnie notatki", - "full-text-search": "Wyszukiwanie pełnotekstowe" + "full-text-search": "Wyszukiwanie pełnotekstowe", + "search-for": "Szukaj \"{{term}}\"", + "create-note": "Utwórz i połącz notatkę podrzędną \"{{term}}\"", + "insert-external-link": "Wstaw link zewnętrzny do \"{{term}}\"" }, "note_tooltip": { "note-has-been-deleted": "Notatka została usunięta.", @@ -448,7 +609,15 @@ "days": "dni" }, "share": { - "title": "Ustawienia udostępniania" + "title": "Ustawienia udostępniania", + "redirect_bare_domain": "Przekieruj gołą domenę na stronę udostępniania", + "redirect_bare_domain_description": "Przekieruj anonimowych użytkowników na stronę udostępniania zamiast pokazywać stronę logowania", + "show_login_link": "Pokaż link logowania w motywie udostępniania", + "show_login_link_description": "Dodaj link logowania do stopki strony udostępniania", + "check_share_root": "Sprawdź status korzenia udostępniania", + "share_root_found": "Notatka korzenia udostępniania '{{noteTitle}}' jest gotowa", + "share_root_not_found": "Nie znaleziono notatki z etykietą #shareRoot", + "share_root_not_shared": "Notatka '{{noteTitle}}' ma etykietę #shareRoot, ale nie jest udostępniona" }, "tasks": { "due": { @@ -499,7 +668,11 @@ "editorfeatures": { "title": "Cechy", "emoji_completion_enabled": "Włącz autouzupełnianie Emoji", - "note_completion_enabled": "Włącz autouzupełnianie notatki" + "note_completion_enabled": "Włącz autouzupełnianie notatki", + "emoji_completion_description": "Jeśli włączone, emoji można łatwo wstawiać do tekstu, wpisując `:`, a następnie nazwę emoji.", + "note_completion_description": "Jeśli włączone, linki do notatek można tworzyć, wpisując `@`, a następnie tytuł notatki.", + "slash_commands_enabled": "Włącz polecenia z ukośnikiem", + "slash_commands_description": "Jeśli włączone, polecenia edycji, takie jak wstawianie podziałów wierszy lub nagłówków, można przełączać, wpisując `/`." }, "table_view": { "new-row": "Nowy wiersz", @@ -536,23 +709,34 @@ }, "move_to": { "dialog_title": "Przenieś notatki do ...", - "notes_to_move": "Notatki do przeniesienia" + "notes_to_move": "Notatki do przeniesienia", + "target_parent_note": "Docelowa notatka nadrzędna", + "search_placeholder": "szukaj notatki po jej nazwie", + "move_button": "Przenieś do wybranej notatki", + "error_no_path": "Brak ścieżki do przeniesienia.", + "move_success_message": "Wybrane notatki zostały przeniesione do " }, "note_type_chooser": { "modal_title": "Wybierz typ notatki", "modal_body": "Wybierz typ / szablon notatki dla nowej notatki:", "templates": "Szablony", - "builtin_templates": "Wbudowane szablony" + "builtin_templates": "Wbudowane szablony", + "change_path_prompt": "Zmień, gdzie utworzyć nową notatkę:", + "search_placeholder": "wyszukaj ścieżkę po nazwie (domyślna, jeśli pusta)" }, "password_not_set": { - "title": "Hasło nie zostało ustawione" + "title": "Hasło nie zostało ustawione", + "body1": "Chronione notatki są szyfrowane hasłem użytkownika, ale hasło nie zostało jeszcze ustawione.", + "body2": "Aby móc chronić notatki, kliknij poniższy przycisk, aby otworzyć okno dialogowe Opcje i ustawić hasło.", + "go_to_password_options": "Przejdź do opcji hasła" }, "add_relation": { "add_relation": "Dodaj powiązanie", "relation_name": "nazwa powiązania", "allowed_characters": "Dozwolone są znaki alfanumeryczne, podkreślenie i dwukropek.", "to": "do", - "target_note": "docelowa notatka" + "target_note": "docelowa notatka", + "create_relation_on_all_matched_notes": "We wszystkich dopasowanych notatkach utwórz daną relację." }, "ai_llm": { "actions": "Akcje", @@ -629,6 +813,1276 @@ "disabled_providers": "Wyłączeni dostawcy", "remove_provider": "Usuń dostawcę z wyszukiwania", "restore_provider": "Przywróć dostawcę do wyszukiwania", - "similarity_threshold": "Próg podobieństwa" + "similarity_threshold": "Próg podobieństwa", + "not_started": "Nie rozpoczęto", + "title": "Ustawienia AI", + "processed_notes": "Przetworzone notatki", + "total_notes": "Wszystkie notatki", + "progress": "Postęp", + "similarity_threshold_description": "Minimalny wynik podobieństwa (0-1) dla notatek, które mają być uwzględnione w kontekście zapytań LLM", + "reprocess_index": "Odbuduj indeks wyszukiwania", + "reprocessing_index": "Odbudowywanie...", + "reprocess_index_started": "Optymalizacja indeksu wyszukiwania rozpoczęta w tle", + "reprocess_index_error": "Błąd odbudowywania indeksu wyszukiwania", + "index_rebuild_progress": "Postęp odbudowy indeksu", + "index_rebuilding": "Optymalizowanie indeksu ({{percentage}}%)", + "index_rebuild_complete": "Optymalizacja indeksu zakończona", + "index_rebuild_status_error": "Błąd sprawdzania statusu odbudowy indeksu", + "never": "Nigdy", + "processing": "Przetwarzanie ({{percentage}}%)", + "incomplete": "Niekompletne ({{percentage}}%)", + "complete": "Ukończono (100%)", + "refreshing": "Odświeżanie...", + "auto_refresh_notice": "Automatyczne odświeżanie co {{seconds}} sekund", + "note_queued_for_retry": "Notatka zakolejkowana do ponownej próby", + "failed_to_retry_note": "Nie udało się ponowić próby dla notatki", + "all_notes_queued_for_retry": "Wszystkie nieudane notatki zakolejkowane do ponownej próby", + "failed_to_retry_all": "Nie udało się ponowić próby dla notatek", + "ai_settings": "Ustawienia AI", + "api_key_tooltip": "Klucz API do uzyskiwania dostępu do usługi", + "empty_key_warning": { + "anthropic": "Klucz API Anthropic jest pusty. Wprowadź prawidłowy klucz API.", + "openai": "Klucz API OpenAI jest pusty. Wprowadź prawidłowy klucz API.", + "voyage": "Klucz API Voyage jest pusty. Wprowadź prawidłowy klucz API.", + "ollama": "Klucz API Ollama jest pusty. Wprowadź prawidłowy klucz API." + }, + "agent": { + "processing": "Przetwarzanie...", + "thinking": "Myślenie...", + "loading": "Ładowanie...", + "generating": "Generowanie..." + }, + "name": "AI", + "openai": "OpenAI", + "use_enhanced_context": "Użyj rozszerzonego kontekstu", + "enhanced_context_description": "Dostarcza AI więcej kontekstu z notatki i jej powiązanych notatek dla lepszych odpowiedzi", + "show_thinking": "Pokaż proces myślowy", + "show_thinking_description": "Pokaż proces myślowy AI", + "enter_message": "Wpisz swoją wiadomość...", + "error_contacting_provider": "Błąd kontaktu z dostawcą AI. Sprawdź ustawienia i połączenie internetowe.", + "error_generating_response": "Błąd generowania odpowiedzi AI", + "notes_indexed_0": "{{ count }} notatka zaindeksowana", + "notes_indexed_1": "{{ count }} notatek zaindeksowanych", + "notes_indexed_2": "", + "sources": "Źródła", + "start_indexing": "Rozpocznij indeksowanie", + "use_advanced_context": "Użyj zaawansowanego kontekstu", + "ollama_no_url": "Ollama nie jest skonfigurowana. Wprowadź prawidłowy URL.", + "chat": { + "root_note_title": "Czaty AI", + "root_note_content": "Ta notatka zawiera zapisane rozmowy na czacie AI.", + "new_chat_title": "Nowy czat", + "create_new_ai_chat": "Utwórz nowy czat AI" + }, + "create_new_ai_chat": "Utwórz nowy czat AI", + "configuration_warnings": "Występują problemy z konfiguracją AI. Sprawdź ustawienia.", + "experimental_warning": "Funkcja LLM jest obecnie eksperymentalna - zostałeś ostrzeżony.", + "selected_provider": "Wybrany dostawca", + "selected_provider_description": "Wybierz dostawcę AI dla funkcji czatu i uzupełniania", + "select_model": "Wybierz model...", + "select_provider": "Wybierz dostawcę...", + "ai_enabled": "Funkcje AI włączone", + "ai_disabled": "Funkcje AI wyłączone", + "no_models_found_online": "Nie znaleziono modeli. Sprawdź swój klucz API i ustawienia.", + "no_models_found_ollama": "Nie znaleziono modeli Ollama. Sprawdź, czy Ollama jest uruchomiona.", + "error_fetching": "Błąd pobierania modeli: {{error}}" + }, + "prompt": { + "title": "Monit", + "ok": "OK", + "defaultTitle": "Monit" + }, + "protected_session_password": { + "modal_title": "Sesja chroniona", + "help_title": "Pomoc dotycząca notatek chronionych", + "close_label": "Zamknij", + "form_label": "Aby kontynuować żądaną akcję, musisz rozpocząć sesję chronioną, wprowadzając hasło:", + "start_button": "Rozpocznij sesję chronioną" + }, + "recent_changes": { + "title": "Ostatnie zmiany", + "erase_notes_button": "Wymaż teraz usunięte notatki", + "deleted_notes_message": "Usunięte notatki zostały wymazane.", + "no_changes_message": "Brak zmian...", + "undelete_link": "przywróć", + "confirm_undelete": "Czy chcesz przywrócić tę notatkę i jej podnotatki?" + }, + "revisions": { + "note_revisions": "Wersje notatki", + "delete_all_revisions": "Usuń wszystkie wersje tej notatki", + "delete_all_button": "Usuń wszystkie wersje", + "help_title": "Pomoc dotycząca wersji notatki", + "revision_last_edited": "Ta wersja była ostatnio edytowana {{date}}", + "confirm_delete_all": "Czy chcesz usunąć wszystkie wersje tej notatki?", + "no_revisions": "Brak wersji dla tej notatki...", + "restore_button": "Przywróć", + "diff_on": "Pokaż różnice", + "diff_off": "Pokaż zawartość", + "diff_on_hint": "Kliknij, aby pokazać różnice w źródle notatki", + "diff_off_hint": "Kliknij, aby pokazać zawartość notatki", + "diff_not_available": "Różnice nie są dostępne.", + "confirm_restore": "Czy chcesz przywrócić tę wersję? Spowoduje to nadpisanie bieżącego tytułu i zawartości notatki tą wersją.", + "delete_button": "Usuń", + "confirm_delete": "Czy chcesz usunąć tę wersję?", + "revisions_deleted": "Wersje notatki zostały usunięte.", + "revision_restored": "Wersja notatki została przywrócona.", + "revision_deleted": "Wersja notatki została usunięta.", + "snapshot_interval": "Interwał migawki wersji notatki: {{seconds}}s.", + "maximum_revisions": "Limit migawek wersji notatki: {{number}}.", + "settings": "Ustawienia wersji notatki", + "download_button": "Pobierz", + "mime": "MIME: ", + "file_size": "Rozmiar pliku:", + "preview": "Podgląd:", + "preview_not_available": "Podgląd nie jest dostępny dla tego typu notatki." + }, + "sort_child_notes": { + "sort_children_by": "Sortuj elementy podrzędne według...", + "sorting_criteria": "Kryteria sortowania", + "title": "tytuł", + "date_created": "data utworzenia", + "date_modified": "data modyfikacji", + "sorting_direction": "Kierunek sortowania", + "ascending": "rosnąco", + "descending": "malejąco", + "folders": "Foldery", + "sort_folders_at_top": "sortuj foldery na górze", + "natural_sort": "Sortowanie naturalne", + "sort_with_respect_to_different_character_sorting": "sortuj z uwzględnieniem różnych zasad sortowania znaków i zestawień w różnych językach lub regionach.", + "natural_sort_language": "Język sortowania naturalnego", + "the_language_code_for_natural_sort": "Kod języka dla sortowania naturalnego, np. \"zh-CN\" dla chińskiego.", + "sort": "Sortuj" + }, + "upload_attachments": { + "upload_attachments_to_note": "Prześlij załączniki do notatki", + "choose_files": "Wybierz pliki", + "files_will_be_uploaded": "Pliki zostaną przesłane jako załączniki do {{noteTitle}}", + "options": "Opcje", + "shrink_images": "Zmniejsz obrazy", + "upload": "Prześlij", + "tooltip": "Jeśli zaznaczysz tę opcję, Trilium spróbuje zmniejszyć przesyłane obrazy poprzez skalowanie i optymalizację, co może wpłynąć na postrzeganą jakość obrazu. Jeśli opcja nie jest zaznaczona, obrazy zostaną przesłane bez zmian." + }, + "attribute_editor": { + "help_text_body1": "Aby dodać etykietę, po prostu wpisz np. #rock lub jeśli chcesz dodać również wartość, to np. #year = 2020", + "help_text_body2": "Dla relacji wpisz ~author = @, co powinno wywołać autouzupełnianie, w którym możesz wyszukać żądaną notatkę.", + "help_text_body3": "Alternatywnie możesz dodać etykietę i relację za pomocą przycisku + po prawej stronie.", + "save_attributes": "Zapisz atrybuty ", + "add_a_new_attribute": "Dodaj nowy atrybut", + "add_new_label": "Dodaj nową etykietę ", + "add_new_relation": "Dodaj nową relację ", + "add_new_label_definition": "Dodaj nową definicję etykiety", + "add_new_relation_definition": "Dodaj nową definicję relacji", + "placeholder": "Wpisz tutaj etykiety i relacje" + }, + "abstract_bulk_action": { + "remove_this_search_action": "Usuń tę akcję wyszukiwania" + }, + "execute_script": { + "execute_script": "Wykonaj skrypt", + "help_text": "Możesz wykonywać proste skrypty na dopasowanych notatkach.", + "example_1": "Na przykład, aby dołączyć ciąg znaków do tytułu notatki, użyj tego małego skryptu:", + "example_2": "Bardziej złożonym przykładem byłoby usunięcie wszystkich atrybutów dopasowanej notatki:" + }, + "delete_label": { + "delete_label": "Usuń etykietę", + "label_name_placeholder": "nazwa etykiety", + "label_name_title": "Dozwolone są znaki alfanumeryczne, podkreślenie i dwukropek." + }, + "rename_label": { + "rename_label": "Zmień nazwę etykiety", + "rename_label_from": "Zmień nazwę etykiety z", + "old_name_placeholder": "stara nazwa", + "to": "Na", + "new_name_placeholder": "nowa nazwa", + "name_title": "Dozwolone są znaki alfanumeryczne, podkreślenie i dwukropek." + }, + "update_label_value": { + "update_label_value": "Zaktualizuj wartość etykiety", + "label_name_placeholder": "nazwa etykiety", + "label_name_title": "Dozwolone są znaki alfanumeryczne, podkreślenie i dwukropek.", + "to_value": "do wartości", + "new_value_placeholder": "nowa wartość", + "help_text": "We wszystkich dopasowanych notatkach zmień wartość istniejącej etykiety.", + "help_text_note": "Możesz również wywołać tę metodę bez wartości, w takim przypadku etykieta zostanie przypisana do notatki bez wartości." + }, + "delete_note": { + "delete_note": "Usuń notatkę", + "delete_matched_notes": "Usuń dopasowane notatki", + "delete_matched_notes_description": "Spowoduje to usunięcie dopasowanych notatek.", + "undelete_notes_instruction": "Po usunięciu można je przywrócić z okna dialogowego Ostatnie zmiany.", + "erase_notes_instruction": "Aby trwale usunąć notatki, możesz po usunięciu przejść do Opcje -> Inne i kliknąć przycisk \"Wymaż teraz usunięte notatki\"." + }, + "delete_revisions": { + "delete_note_revisions": "Usuń wersje notatek", + "all_past_note_revisions": "Wszystkie przeszłe wersje dopasowanych notatek zostaną usunięte. Sama notatka zostanie w pełni zachowana. Innymi słowy, historia notatki zostanie usunięta." + }, + "move_note": { + "move_note": "Przenieś notatkę", + "to": "do", + "target_parent_note": "docelowa notatka nadrzędna", + "on_all_matched_notes": "We wszystkich dopasowanych notatkach", + "move_note_new_parent": "przenieś notatkę do nowego rodzica, jeśli notatka ma tylko jednego rodzica (tj. stara gałąź jest usuwana, a nowa gałąź do nowego rodzica jest tworzona)", + "clone_note_new_parent": "sklonuj notatkę do nowego rodzica, jeśli notatka ma wiele klonów/gałęzi (nie jest jasne, która gałąź powinna zostać usunięta)", + "nothing_will_happen": "nic się nie stanie, jeśli notatka nie może być przeniesiona do notatki docelowej (tj. spowodowałoby to cykl w drzewie)" + }, + "rename_note": { + "rename_note": "Zmień nazwę notatki", + "rename_note_title_to": "Zmień tytuł notatki na", + "new_note_title": "nowy tytuł notatki", + "click_help_icon": "Kliknij ikonę pomocy po prawej stronie, aby zobaczyć wszystkie opcje", + "evaluated_as_js_string": "Podana wartość jest oceniana jako ciąg znaków JavaScript i dlatego może być wzbogacona o dynamiczną treść za pomocą wstrzykniętej zmiennej note (notatka, której nazwa jest zmieniana). Przykłady:", + "example_note": "Notatka - wszystkie dopasowane notatki mają zmienioną nazwę na 'Notatka'", + "example_new_title": "NOWY: ${note.title} - tytuły dopasowanych notatek są poprzedzone prefiksem 'NOWY: '", + "example_date_prefix": "${note.dateCreatedObj.format('MM-DD:')}: ${note.title} - dopasowane notatki są poprzedzone prefiksem miesiąc-dzień utworzenia notatki", + "api_docs": "Zobacz dokumentację API dla note i jej właściwości dateCreatedObj / utcDateCreatedObj, aby uzyskać szczegółowe informacje." + }, + "delete_relation": { + "delete_relation": "Usuń relację", + "relation_name": "nazwa relacji", + "allowed_characters": "Dozwolone są znaki alfanumeryczne, podkreślenie i dwukropek." + }, + "rename_relation": { + "rename_relation": "Zmień nazwę relacji", + "rename_relation_from": "Zmień nazwę relacji z", + "old_name": "stara nazwa", + "to": "Na", + "new_name": "nowa nazwa", + "allowed_characters": "Dozwolone są znaki alfanumeryczne, podkreślenie i dwukropek." + }, + "update_relation_target": { + "update_relation": "Zaktualizuj relację", + "relation_name": "nazwa relacji", + "allowed_characters": "Dozwolone są znaki alfanumeryczne, podkreślenie i dwukropek.", + "to": "do", + "target_note": "notatka docelowa", + "on_all_matched_notes": "We wszystkich dopasowanych notatkach", + "change_target_note": "zmień notatkę docelową istniejącej relacji", + "update_relation_target": "Zaktualizuj cel relacji" + }, + "attachments_actions": { + "open_externally": "Otwórz zewnętrznie", + "open_externally_title": "Plik zostanie otwarty w zewnętrznej aplikacji i będzie obserwowany pod kątem zmian. Następnie będziesz mógł przesłać zmodyfikowaną wersję z powrotem do Trilium.", + "open_custom": "Otwórz niestandardowo", + "open_custom_title": "Plik zostanie otwarty w zewnętrznej aplikacji i będzie obserwowany pod kątem zmian. Następnie będziesz mógł przesłać zmodyfikowaną wersję z powrotem do Trilium.", + "download": "Pobierz", + "rename_attachment": "Zmień nazwę załącznika", + "upload_new_revision": "Prześlij nową wersję", + "copy_link_to_clipboard": "Kopiuj link do schowka", + "convert_attachment_into_note": "Konwertuj załącznik na notatkę", + "delete_attachment": "Usuń załącznik", + "upload_success": "Nowa wersja załącznika została przesłana.", + "upload_failed": "Przesyłanie nowej wersji załącznika nie powiodło się.", + "open_externally_detail_page": "Otwieranie załącznika zewnętrznie jest dostępne tylko ze strony szczegółów, najpierw kliknij szczegóły załącznika i powtórz akcję.", + "open_custom_client_only": "Niestandardowe otwieranie załączników można wykonać tylko z klienta stacjonarnego.", + "delete_confirm": "Czy na pewno chcesz usunąć załącznik '{{title}}'?", + "delete_success": "Załącznik '{{title}}' został usunięty.", + "convert_confirm": "Czy na pewno chcesz przekonwertować załącznik '{{title}}' na osobną notatkę?", + "convert_success": "Załącznik '{{title}}' został przekonwertowany na notatkę.", + "enter_new_name": "Wprowadź nową nazwę załącznika" + }, + "calendar": { + "mon": "Pon", + "tue": "Wt", + "wed": "Śr", + "thu": "Czw", + "fri": "Pt", + "sat": "Sob", + "sun": "Niedz", + "cannot_find_day_note": "Nie można znaleźć notatki dziennej", + "cannot_find_week_note": "Nie można znaleźć notatki tygodniowej", + "january": "Styczeń", + "february": "Luty", + "march": "Marzec", + "april": "Kwiecień", + "may": "Maj", + "june": "Czerwiec", + "july": "Lipiec", + "august": "Sierpień", + "september": "Wrzesień", + "october": "Październik", + "november": "Listopad", + "december": "Grudzień", + "week": "Tydzień", + "week_previous": "Poprzedni tydzień", + "week_next": "Następny tydzień", + "month": "Miesiąc", + "month_previous": "Poprzedni miesiąc", + "month_next": "Następny miesiąc", + "year": "Rok", + "year_previous": "Poprzedni rok", + "year_next": "Następny rok", + "list": "Lista", + "today": "Dzisiaj" + }, + "close_pane_button": { + "close_this_pane": "Zamknij ten panel" + }, + "create_pane_button": { + "create_new_split": "Utwórz nowy podział" + }, + "edit_button": { + "edit_this_note": "Edytuj tę notatkę" + }, + "show_toc_widget_button": { + "show_toc": "Pokaż spis treści" + }, + "show_highlights_list_widget_button": { + "show_highlights_list": "Pokaż listę wyróżnień" + }, + "global_menu": { + "menu": "Menu", + "options": "Opcje", + "open_new_window": "Otwórz nowe okno", + "switch_to_mobile_version": "Przełącz na wersję mobilną", + "switch_to_desktop_version": "Przełącz na wersję stacjonarną", + "zoom": "Powiększenie", + "toggle_fullscreen": "Przełącz pełny ekran", + "zoom_out": "Pomniejsz", + "reset_zoom_level": "Zresetuj poziom powiększenia", + "zoom_in": "Powiększ", + "configure_launchbar": "Skonfiguruj pasek uruchamiania", + "show_shared_notes_subtree": "Pokaż poddrzewo udostępnionych notatek", + "advanced": "Zaawansowane", + "open_dev_tools": "Otwórz narzędzia deweloperskie", + "open_sql_console": "Otwórz konsolę SQL", + "open_sql_console_history": "Otwórz historię konsoli SQL", + "open_search_history": "Otwórz historię wyszukiwania", + "show_backend_log": "Pokaż logi backendu", + "reload_hint": "Przeładowanie może pomóc w niektórych problemach wizualnych bez ponownego uruchamiania całej aplikacji.", + "reload_frontend": "Przeładuj frontend", + "show_hidden_subtree": "Pokaż ukryte poddrzewo", + "show_help": "Pokaż pomoc", + "about": "O notatkach Trilium", + "logout": "Wyloguj", + "show-cheatsheet": "Pokaż ściągawkę", + "toggle-zen-mode": "Tryb Zen", + "new-version-available": "Dostępna nowa aktualizacja", + "download-update": "Pobierz wersję {{latestVersion}}" + }, + "zen_mode": { + "button_exit": "Wyjdź z trybu Zen" + }, + "sync_status": { + "unknown": "

Status synchronizacji będzie znany po rozpoczęciu następnej próby synchronizacji.

Kliknij, aby wywołać synchronizację teraz.

", + "connected_with_changes": "

Połączono z serwerem synchronizacji.
Istnieją pewne oczekujące zmiany, które należy zsynchronizować.

Kliknij, aby wywołać synchronizację.

", + "connected_no_changes": "

Połączono z serwerem synchronizacji.
Wszystkie zmiany zostały już zsynchronizowane.

Kliknij, aby wywołać synchronizację.

", + "disconnected_with_changes": "

Nawiązanie połączenia z serwerem synchronizacji nie powiodło się.
Istnieją pewne oczekujące zmiany, które należy zsynchronizować.

Kliknij, aby wywołać synchronizację.

", + "disconnected_no_changes": "

Nawiązanie połączenia z serwerem synchronizacji nie powiodło się.
Wszystkie znane zmiany zostały zsynchronizowane.

Kliknij, aby wywołać synchronizację.

", + "in_progress": "Synchronizacja z serwerem jest w toku." + }, + "left_pane_toggle": { + "show_panel": "Pokaż panel", + "hide_panel": "Ukryj panel" + }, + "move_pane_button": { + "move_left": "Przesuń w lewo", + "move_right": "Przesuń w prawo" + }, + "note_actions": { + "convert_into_attachment": "Konwertuj na załącznik", + "re_render_note": "Wyrenderuj ponownie notatkę", + "search_in_note": "Szukaj w notatce", + "note_source": "Źródło notatki", + "note_attachments": "Załączniki notatki", + "open_note_externally": "Otwórz notatkę zewnętrznie", + "open_note_externally_title": "Plik zostanie otwarty w zewnętrznej aplikacji i będzie obserwowany pod kątem zmian. Następnie będziesz mógł przesłać zmodyfikowaną wersję z powrotem do Trilium.", + "open_note_custom": "Otwórz notatkę niestandardowo", + "import_files": "Importuj pliki", + "export_note": "Eksportuj notatkę", + "delete_note": "Usuń notatkę", + "print_note": "Drukuj notatkę", + "save_revision": "Zapisz wersję", + "convert_into_attachment_failed": "Konwersja notatki '{{title}}' nie powiodła się.", + "convert_into_attachment_successful": "Notatka '{{title}}' została przekonwertowana na załącznik.", + "convert_into_attachment_prompt": "Czy na pewno chcesz przekonwertować notatkę '{{title}}' na załącznik notatki nadrzędnej?", + "print_pdf": "Eksportuj jako PDF..." + }, + "onclick_button": { + "no_click_handler": "Widżet przycisku '{{componentId}}' nie ma zdefiniowanego obsługi kliknięcia" + }, + "protected_session_status": { + "active": "Sesja chroniona jest aktywna. Kliknij, aby opuścić sesję chronioną.", + "inactive": "Kliknij, aby wejść w sesję chronioną" + }, + "revisions_button": { + "note_revisions": "Wersje notatki" + }, + "update_available": { + "update_available": "Dostępna aktualizacja" + }, + "note_launcher": { + "this_launcher_doesnt_define_target_note": "Ten program uruchamiający nie definiuje notatki docelowej." + }, + "code_buttons": { + "execute_button_title": "Wykonaj skrypt", + "trilium_api_docs_button_title": "Otwórz dokumentację API Trilium", + "save_to_note_button_title": "Zapisz do notatki", + "opening_api_docs_message": "Otwieranie dokumentacji API...", + "sql_console_saved_message": "Notatka konsoli SQL została zapisana w {{note_path}}" + }, + "copy_image_reference_button": { + "button_title": "Kopiuj odniesienie do obrazu do schowka, można je wkleić do notatki tekstowej." + }, + "hide_floating_buttons_button": { + "button_title": "Ukryj przyciski" + }, + "show_floating_buttons_button": { + "button_title": "Pokaż przyciski" + }, + "svg_export_button": { + "button_title": "Eksportuj diagram jako SVG" + }, + "relation_map_buttons": { + "create_child_note_title": "Utwórz nową notatkę podrzędną i dodaj ją do tej mapy relacji", + "reset_pan_zoom_title": "Zresetuj przesuwanie i powiększanie do początkowych współrzędnych i powiększenia", + "zoom_in_title": "Powiększ", + "zoom_out_title": "Pomniejsz" + }, + "zpetne_odkazy": { + "backlink": "{{count}} Backlink", + "backlinks": "{{count}} Backlinków", + "relation": "relacja" + }, + "mobile_detail_menu": { + "insert_child_note": "Wstaw notatkę podrzędną", + "delete_this_note": "Usuń tę notatkę", + "note_revisions": "Wersje notatki", + "error_cannot_get_branch_id": "Nie można uzyskać branchId dla notePath '{{notePath}}'", + "error_unrecognized_command": "Nierozpoznane polecenie {{command}}" + }, + "note_icon": { + "change_note_icon": "Zmień ikonę notatki", + "category": "Kategoria:", + "search": "Szukaj:", + "reset-default": "Zresetuj do domyślnej ikony" + }, + "basic_properties": { + "note_type": "Typ notatki", + "editable": "Edytowalny", + "basic_properties": "Podstawowe właściwości", + "language": "Język", + "configure_code_notes": "Skonfiguruj notatki kodowe..." + }, + "edited_notes": { + "no_edited_notes_found": "Brak edytowanych notatek tego dnia...", + "title": "Edytowane notatki", + "deleted": "(usunięto)" + }, + "include_archived_notes": { + "include_archived_notes": "Uwzględnij zarchiwizowane notatki" + }, + "order_by": { + "order_by": "Sortuj według", + "relevancy": "Trafność (domyślnie)", + "title": "Tytuł", + "date_created": "Data utworzenia", + "date_modified": "Data ostatniej modyfikacji", + "content_size": "Rozmiar zawartości notatki", + "content_and_attachments_size": "Rozmiar zawartości notatki wraz z załącznikami", + "content_and_attachments_and_revisions_size": "Rozmiar zawartości notatki wraz z załącznikami i wersjami", + "revision_count": "Liczba wersji", + "children_count": "Liczba notatek podrzędnych", + "parent_count": "Liczba klonów", + "owned_label_count": "Liczba etykiet", + "owned_relation_count": "Liczba relacji", + "target_relation_count": "Liczba relacji wskazujących na notatkę", + "random": "Kolejność losowa", + "asc": "Rosnąco (domyślnie)", + "desc": "Malejąco" + }, + "search_script": { + "title": "Skrypt wyszukiwania:", + "placeholder": "szukaj notatki po jej nazwie", + "description1": "Skrypt wyszukiwania pozwala zdefiniować wyniki wyszukiwania poprzez uruchomienie skryptu. Zapewnia to maksymalną elastyczność, gdy standardowe wyszukiwanie nie wystarcza.", + "description2": "Skrypt wyszukiwania musi być typu \"kod\" i podtypu \"JavaScript backend\". Skrypt musi zwrócić tablicę noteIds lub notatek.", + "example_title": "Zobacz ten przykład:", + "example_code": "// 1. wstępne filtrowanie za pomocą standardowego wyszukiwania\nconst candidateNotes = api.searchForNotes(\"#journal\"); \n\n// 2. zastosowanie niestandardowych kryteriów wyszukiwania\nconst matchedNotes = candidateNotes\n .filter(note => note.title.match(/[0-9]{1,2}\\. ?[0-9]{1,2}\\. ?[0-9]{4}/));\n\nreturn matchedNotes;", + "note": "Pamiętaj, że skrypt wyszukiwania i ciąg wyszukiwania nie mogą być łączone ze sobą." + }, + "search_string": { + "title_column": "Ciąg wyszukiwania:", + "placeholder": "słowa kluczowe pełnotekstowe, #tag = wartość...", + "search_syntax": "Składnia wyszukiwania", + "also_see": "zobacz również", + "complete_help": "pełna pomoc dotycząca składni wyszukiwania", + "full_text_search": "Wpisz dowolny tekst do wyszukiwania pełnotekstowego", + "label_abc": "zwraca notatki z etykietą abc", + "label_year": "dopasowuje notatki z etykietą rok o wartości 2019", + "label_rock_pop": "dopasowuje notatki, które mają zarówno etykiety rock, jak i pop", + "label_rock_or_pop": "musi być obecna tylko jedna z etykiet", + "label_year_comparison": "porównanie numeryczne (również >, >=, <).", + "label_date_created": "notatki utworzone w ostatnim miesiącu", + "error": "Błąd wyszukiwania: {{error}}", + "search_prefix": "Szukaj:" + }, + "attachment_detail": { + "open_help_page": "Otwórz stronę pomocy dotyczącą załączników", + "owning_note": "Notatka nadrzędna: ", + "you_can_also_open": ", możesz również otworzyć ", + "list_of_all_attachments": "Listę wszystkich załączników", + "attachment_deleted": "Ten załącznik został usunięty." + }, + "attachment_list": { + "open_help_page": "Otwórz stronę pomocy dotyczącą załączników", + "owning_note": "Notatka nadrzędna: ", + "upload_attachments": "Prześlij załączniki", + "no_attachments": "Ta notatka nie ma załączników." + }, + "book": { + "no_children_help": "Ta kolekcja nie ma żadnych notatek podrzędnych, więc nie ma nic do wyświetlenia. Zobacz wiki, aby uzyskać szczegółowe informacje.", + "drag_locked_title": "Zablokowano do edycji", + "drag_locked_message": "Przeciąganie niedozwolone, ponieważ kolekcja jest zablokowana do edycji." + }, + "editable_code": { + "placeholder": "Wpisz tutaj treść swojej notatki kodowej..." + }, + "editable_text": { + "placeholder": "Wpisz tutaj treść swojej notatki..." + }, + "empty": { + "open_note_instruction": "Otwórz notatkę, wpisując jej tytuł w poniższe pole lub wybierz notatkę z drzewa.", + "search_placeholder": "szukaj notatki po jej nazwie", + "enter_workspace": "Wejdź do obszaru roboczego {{title}}" + }, + "file": { + "file_preview_not_available": "Podgląd pliku nie jest dostępny dla tego formatu.", + "too_big": "Podgląd pokazuje tylko pierwsze {{maxNumChars}} znaków pliku ze względów wydajnościowych. Pobierz plik i otwórz go zewnętrznie, aby zobaczyć całą zawartość." + }, + "protected_session": { + "enter_password_instruction": "Wyświetlenie chronionej notatki wymaga wprowadzenia hasła:", + "start_session_button": "Rozpocznij sesję chronioną enter", + "started": "Sesja chroniona została rozpoczęta.", + "wrong_password": "Nieprawidłowe hasło.", + "protecting-finished-successfully": "Ochrona zakończona pomyślnie.", + "unprotecting-finished-successfully": "Odblokowywanie zakończone pomyślnie.", + "protecting-in-progress": "Ochrona w toku: {{count}}", + "unprotecting-in-progress-count": "Odblokowywanie w toku: {{count}}", + "protecting-title": "Status ochrony", + "unprotecting-title": "Status odblokowywania" + }, + "relation_map": { + "open_in_new_tab": "Otwórz w nowej karcie", + "remove_note": "Usuń notatkę", + "edit_title": "Edytuj tytuł", + "rename_note": "Zmień nazwę notatki", + "enter_new_title": "Wprowadź nowy tytuł notatki:", + "remove_relation": "Usuń relację", + "confirm_remove_relation": "Czy na pewno chcesz usunąć tę relację?", + "specify_new_relation_name": "Określ nową nazwę relacji (dozwolone znaki: alfanumeryczne, dwukropek i podkreślenie):", + "connection_exists": "Połączenie '{{name}}' między tymi notatkami już istnieje.", + "start_dragging_relations": "Zacznij przeciągać stąd relacje i upuść je na inną notatkę.", + "note_not_found": "Nie znaleziono notatki {{noteId}}!", + "cannot_match_transform": "Nie można dopasować transformacji: {{transform}}", + "note_already_in_diagram": "Notatka \"{{title}}\" jest już na diagramie.", + "enter_title_of_new_note": "Wprowadź tytuł nowej notatki", + "default_new_note_title": "nowa notatka", + "click_on_canvas_to_place_new_note": "Kliknij na płótno, aby umieścić nową notatkę" + }, + "render": { + "note_detail_render_help_1": "Ta notatka pomocy jest wyświetlana, ponieważ ta notatka typu Renderuj HTML nie ma wymaganej relacji do prawidłowego działania.", + "note_detail_render_help_2": "Typ notatki Renderuj HTML jest używany do skryptowania. W skrócie, masz notatkę kodu HTML (opcjonalnie z pewnym JavaScriptem), a ta notatka ją wyrenderuje. Aby to zadziałało, musisz zdefiniować relację o nazwie \"renderNote\" wskazującą na notatkę HTML do wyrenderowania." + }, + "web_view": { + "web_view": "Widok sieciowy", + "embed_websites": "Notatka typu Widok sieciowy pozwala na osadzanie stron internetowych w Trilium.", + "create_label": "Aby rozpocząć, utwórz etykietę z adresem URL, który chcesz osadzić, np. #webViewSrc=\"https://www.google.com\"" + }, + "backend_log": { + "refresh": "Odśwież" + }, + "consistency_checks": { + "title": "Sprawdzanie spójności", + "find_and_fix_button": "Znajdź i napraw problemy ze spójnością", + "finding_and_fixing_message": "Znajdowanie i naprawianie problemów ze spójnością...", + "issues_fixed_message": "Wszelkie problemy ze spójnością, które mogły zostać znalezione, są teraz naprawione." + }, + "database_anonymization": { + "title": "Anonimizacja bazy danych", + "full_anonymization": "Pełna anonimizacja", + "full_anonymization_description": "Ta akcja utworzy nową kopię bazy danych i zanonimizuje ją (usunie całą zawartość notatek, pozostawiając tylko strukturę i niektóre niewrażliwe metadane) w celu udostępnienia online do celów debugowania bez obawy o wyciek danych osobowych.", + "save_fully_anonymized_database": "Zapisz w pełni zanonimizowaną bazę danych", + "light_anonymization": "Lekka anonimizacja", + "light_anonymization_description": "Ta akcja utworzy nową kopię bazy danych i przeprowadzi na niej lekką anonimizację — w szczególności usunięta zostanie tylko zawartość wszystkich notatek, ale tytuły i atrybuty pozostaną. Dodatkowo niestandardowe notatki skryptów JS frontend/backend oraz niestandardowe widżety pozostaną. Zapewnia to więcej kontekstu do debugowania problemów.", + "choose_anonymization": "Możesz sam zdecydować, czy chcesz udostępnić w pełni, czy lekko zanonimizowaną bazę danych. Nawet w pełni zanonimizowana baza danych jest bardzo przydatna, jednak w niektórych przypadkach lekko zanonimizowana baza danych może przyspieszyć proces identyfikacji i naprawy błędów.", + "save_lightly_anonymized_database": "Zapisz lekko zanonimizowaną bazę danych", + "existing_anonymized_databases": "Istniejące zanonimizowane bazy danych", + "creating_fully_anonymized_database": "Tworzenie w pełni zanonimizowanej bazy danych...", + "creating_lightly_anonymized_database": "Tworzenie lekko zanonimizowanej bazy danych...", + "error_creating_anonymized_database": "Nie można utworzyć zanonimizowanej bazy danych, sprawdź logi backendu, aby uzyskać szczegółowe informacje", + "successfully_created_fully_anonymized_database": "Utworzono w pełni zanonimizowaną bazę danych w {{anonymizedFilePath}}", + "successfully_created_lightly_anonymized_database": "Utworzono lekko zanonimizowaną bazę danych w {{anonymizedFilePath}}", + "no_anonymized_database_yet": "Brak jeszcze zanonimizowanej bazy danych." + }, + "database_integrity_check": { + "title": "Sprawdzanie integralności bazy danych", + "description": "Sprawdzi to, czy baza danych nie jest uszkodzona na poziomie SQLite. Może to zająć trochę czasu, w zależności od rozmiaru bazy danych.", + "check_button": "Sprawdź integralność bazy danych", + "checking_integrity": "Sprawdzanie integralności bazy danych...", + "integrity_check_succeeded": "Sprawdzanie integralności zakończyło się pomyślnie - nie znaleziono żadnych problemów.", + "integrity_check_failed": "Sprawdzanie integralności nie powiodło się: {{results}}" + }, + "sync": { + "title": "Synchronizacja", + "force_full_sync_button": "Wymuś pełną synchronizację", + "fill_entity_changes_button": "Wypełnij rekordy zmian encji", + "full_sync_triggered": "Wywołano pełną synchronizację", + "filling_entity_changes": "Wypełnianie wierszy zmian encji...", + "sync_rows_filled_successfully": "Wiersze synchronizacji wypełnione pomyślnie", + "finished-successfully": "Synchronizacja zakończona pomyślnie.", + "failed": "Synchronizacja nie powiodła się: {{message}}" + }, + "vacuum_database": { + "title": "Odkurzanie bazy danych", + "description": "Spowoduje to przebudowanie bazy danych, co zazwyczaj skutkuje mniejszym plikiem bazy danych. Żadne dane nie zostaną faktycznie zmienione.", + "button_text": "Odkurz bazę danych", + "vacuuming_database": "Odkurzanie bazy danych...", + "database_vacuumed": "Baza danych została odkurzona" + }, + "fonts": { + "theme_defined": "Zdefiniowane przez motyw", + "fonts": "Czcionki", + "main_font": "Główna czcionka", + "font_family": "Rodzina czcionek", + "size": "Rozmiar", + "note_tree_font": "Czcionka drzewa notatek", + "note_detail_font": "Czcionka szczegółów notatki", + "monospace_font": "Czcionka monospaced (kod)", + "note_tree_and_detail_font_sizing": "Pamiętaj, że rozmiar czcionki drzewa i szczegółów jest względny w stosunku do ustawienia rozmiaru czcionki głównej.", + "not_all_fonts_available": "Nie wszystkie wymienione czcionki mogą być dostępne w Twoim systemie.", + "apply_font_changes": "Aby zastosować zmiany czcionki, kliknij na", + "reload_frontend": "przeładuj frontend", + "generic-fonts": "Czcionki generyczne", + "sans-serif-system-fonts": "Czcionki systemowe bezszeryfowe", + "serif-system-fonts": "Czcionki systemowe szeryfowe", + "monospace-system-fonts": "Czcionki systemowe monospaced", + "handwriting-system-fonts": "Czcionki systemowe odręczne", + "serif": "Szeryfowa", + "sans-serif": "Bezszeryfowa", + "monospace": "Monospaced", + "system-default": "Domyślna systemowa" + }, + "max_content_width": { + "title": "Szerokość zawartości", + "default_description": "Trilium domyślnie ogranicza maksymalną szerokość zawartości, aby poprawić czytelność na zmaksymalizowanych ekranach o dużej szerokości.", + "max_width_label": "Maksymalna szerokość zawartości", + "max_width_unit": "piksele", + "apply_changes_description": "Aby zastosować zmiany szerokości zawartości, kliknij na", + "reload_button": "przeładuj frontend", + "reload_description": "zmiany z opcji wyglądu" + }, + "native_title_bar": { + "title": "Natywny pasek tytułu (wymaga ponownego uruchomienia aplikacji)", + "enabled": "włączony", + "disabled": "wyłączony" + }, + "ribbon": { + "widgets": "Widżety wstążki", + "promoted_attributes_message": "Karta wstążki Promowane atrybuty otworzy się automatycznie, jeśli na notatce znajdują się promowane atrybuty", + "edited_notes_message": "Karta wstążki Edytowane notatki otworzy się automatycznie w notatkach dziennych" + }, + "theme": { + "title": "Motyw aplikacji", + "theme_label": "Motyw", + "override_theme_fonts_label": "Nadpisz czcionki motywu", + "auto_theme": "Starszy (Dostosuj do schematu kolorów systemu)", + "light_theme": "Starszy (Jasny)", + "dark_theme": "Starszy (Ciemny)", + "triliumnext": "Trilium (Dostosuj do schematu kolorów systemu)", + "triliumnext-light": "Trilium (Jasny)", + "triliumnext-dark": "Trilium (Ciemny)", + "layout": "Układ", + "layout-vertical-title": "Pionowy", + "layout-horizontal-title": "Poziomy", + "layout-vertical-description": "pasek uruchamiania znajduje się po lewej stronie (domyślnie)", + "layout-horizontal-description": "pasek uruchamiania znajduje się pod paskiem kart, pasek kart ma teraz pełną szerokość." + }, + "ui-performance": { + "title": "Wydajność", + "enable-motion": "Włącz przejścia i animacje", + "enable-shadows": "Włącz cienie", + "enable-backdrop-effects": "Włącz efekty tła dla menu, wyskakujących okien i paneli", + "enable-smooth-scroll": "Włącz płynne przewijanie", + "app-restart-required": "(ponowne uruchomienie aplikacji jest wymagane, aby zmiana zaczęła obowiązywać)" + }, + "zoom_factor": { + "title": "Współczynnik powiększenia (tylko w wersji stacjonarnej)", + "description": "Powiększanie można również kontrolować za pomocą skrótów CTRL+- i CTRL+=" + }, + "code_auto_read_only_size": { + "title": "Automatyczny rozmiar tylko do odczytu", + "description": "Automatyczny rozmiar notatki tylko do odczytu to rozmiar, po którym notatki będą wyświetlane w trybie tylko do odczytu (ze względów wydajnościowych).", + "label": "Automatyczny rozmiar tylko do odczytu (notatki kodowe)", + "unit": "znaki" + }, + "code-editor-options": { + "title": "Edytor" + }, + "code_mime_types": { + "title": "Dostępne typy MIME w rozwijanym menu" + }, + "vim_key_bindings": { + "use_vim_keybindings_in_code_notes": "Skróty klawiszowe Vim", + "enable_vim_keybindings": "Włącz skróty klawiszowe Vim w notatkach kodowych (bez trybu ex)" + }, + "wrap_lines": { + "wrap_lines_in_code_notes": "Zawijaj wiersze w notatkach kodowych", + "enable_line_wrap": "Włącz zawijanie wierszy (zmiana może wymagać ponownego załadowania frontendu, aby zaczęła obowiązywać)" + }, + "images": { + "images_section_title": "Obrazy", + "download_images_automatically": "Pobieraj obrazy automatycznie do użytku offline.", + "download_images_description": "Wklejony HTML może zawierać odniesienia do obrazów online, Trilium znajdzie te odniesienia i pobierze obrazy, aby były dostępne offline.", + "enable_image_compression": "Włącz kompresję obrazów", + "max_image_dimensions": "Maksymalna szerokość / wysokość obrazu (obraz zostanie przeskalowany, jeśli przekroczy to ustawienie).", + "max_image_dimensions_unit": "piksele", + "jpeg_quality_description": "Jakość JPEG (10 - najgorsza jakość, 100 - najlepsza jakość, 50 - 85 jest zalecane)" + }, + "attachment_erasure_timeout": { + "attachment_erasure_timeout": "Limit czasu usuwania załączników", + "attachment_auto_deletion_description": "Załączniki są automatycznie usuwane (i wymazywane), jeśli nie są już powiązane z ich notatką po określonym czasie.", + "erase_attachments_after": "Wymaż nieużywane załączniki po:", + "manual_erasing_description": "Możesz również wywołać wymazywanie ręcznie (bez uwzględniania powyższego limitu czasu):", + "erase_unused_attachments_now": "Wymaż teraz nieużywane załączniki", + "unused_attachments_erased": "Nieużywane załączniki zostały wymazane." + }, + "network_connections": { + "network_connections_title": "Połączenia sieciowe", + "check_for_updates": "Sprawdzaj aktualizacje automatycznie" + }, + "note_erasure_timeout": { + "note_erasure_timeout_title": "Limit czasu usuwania notatek", + "note_erasure_description": "Usunięte notatki (i atrybuty, wersje...) są na początku tylko oznaczane jako usunięte i można je odzyskać z okna dialogowego Ostatnie notatki. Po pewnym czasie usunięte notatki są \"wymazywane\", co oznacza, że ich zawartość nie jest już możliwa do odzyskania. To ustawienie pozwala skonfigurować długość okresu między usunięciem a wymazaniem notatki.", + "erase_notes_after": "Wymaż notatki po:", + "manual_erasing_description": "Możesz również wywołać wymazywanie ręcznie (bez uwzględniania powyższego limitu czasu):", + "erase_deleted_notes_now": "Wymaż teraz usunięte notatki", + "deleted_notes_erased": "Usunięte notatki zostały wymazane." + }, + "revisions_snapshot_interval": { + "note_revisions_snapshot_interval_title": "Interwał migawki wersji notatki", + "note_revisions_snapshot_description": "Interwał migawki wersji notatki to czas, po którym dla notatki zostanie utworzona nowa wersja. Zobacz wiki, aby uzyskać więcej informacji.", + "snapshot_time_interval_label": "Interwał czasowy migawki wersji notatki:" + }, + "revisions_snapshot_limit": { + "note_revisions_snapshot_limit_title": "Limit migawek wersji notatki", + "note_revisions_snapshot_limit_description": "Limit liczby migawek wersji notatki odnosi się do maksymalnej liczby wersji, które można zapisać dla każdej notatki. Gdzie -1 oznacza brak limitu, 0 oznacza usunięcie wszystkich wersji. Możesz ustawić maksymalną liczbę wersji dla pojedynczej notatki za pomocą etykiety #versioningLimit.", + "snapshot_number_limit_label": "Limit liczby migawek wersji notatki:", + "snapshot_number_limit_unit": "migawki", + "erase_excess_revision_snapshots": "Wymaż teraz nadmiarowe migawki wersji", + "erase_excess_revision_snapshots_prompt": "Nadmiarowe migawki wersji zostały wymazane." + }, + "search_engine": { + "title": "Wyszukiwarka", + "custom_search_engine_info": "Niestandardowa wyszukiwarka wymaga ustawienia zarówno nazwy, jak i adresu URL. Jeśli którykolwiek z nich nie jest ustawiony, domyślną wyszukiwarką będzie DuckDuckGo.", + "predefined_templates_label": "Predefiniowane szablony wyszukiwarek", + "bing": "Bing", + "baidu": "Baidu", + "duckduckgo": "DuckDuckGo", + "google": "Google", + "custom_name_label": "Niestandardowa nazwa wyszukiwarki", + "custom_name_placeholder": "Dostosuj nazwę wyszukiwarki", + "custom_url_label": "Niestandardowy adres URL wyszukiwarki powinien zawierać {keyword} jako symbol zastępczy dla wyszukiwanego terminu.", + "custom_url_placeholder": "Dostosuj adres URL wyszukiwarki", + "save_button": "Zapisz" + }, + "tray": { + "title": "Zasobnik systemowy", + "enable_tray": "Włącz zasobnik (zmiana ta wymaga ponownego uruchomienia Trilium, aby zaczęła obowiązywać)" + }, + "heading_style": { + "title": "Styl nagłówka", + "plain": "Zwykły", + "underline": "Podkreślenie", + "markdown": "Styl Markdown" + }, + "highlights_list": { + "title": "Lista wyróżnień", + "description": "Możesz dostosować listę wyróżnień wyświetlaną w prawym panelu:", + "bold": "Pogrubiony tekst", + "italic": "Kursywa", + "underline": "Podkreślony tekst", + "color": "Kolorowy tekst", + "bg_color": "Tekst z kolorem tła", + "visibility_title": "Widoczność listy wyróżnień", + "visibility_description": "Możesz ukryć widżet wyróżnień dla poszczególnych notatek, dodając etykietę #hideHighlightWidget.", + "shortcut_info": "Możesz skonfigurować skrót klawiaturowy do szybkiego przełączania prawego panelu (w tym wyróżnień) w Opcje -> Skróty (nazwa 'toggleRightPane')." + }, + "table_of_contents": { + "title": "Spis treści", + "description": "Spis treści pojawi się w notatkach tekstowych, gdy notatka ma więcej niż zdefiniowaną liczbę nagłówków. Możesz dostosować tę liczbę:", + "unit": "nagłówki", + "disable_info": "Możesz również użyć tej opcji, aby skutecznie wyłączyć spis treści, ustawiając bardzo wysoką liczbę.", + "shortcut_info": "Możesz skonfigurować skrót klawiaturowy do szybkiego przełączania prawego panelu (w tym spisu treści) w Opcje -> Skróty (nazwa 'toggleRightPane')." + }, + "text_auto_read_only_size": { + "title": "Automatyczny rozmiar tylko do odczytu", + "description": "Automatyczny rozmiar notatki tylko do odczytu to rozmiar, po którym notatki będą wyświetlane w trybie tylko do odczytu (ze względów wydajnościowych).", + "label": "Automatyczny rozmiar tylko do odczytu (notatki tekstowe)", + "unit": "znaki" + }, + "custom_date_time_format": { + "title": "Niestandardowy format daty/czasu", + "description": "Dostosuj format daty i czasu wstawianego za pomocą lub paska narzędzi. Zobacz dokumentację Day.js dla dostępnych tokenów formatu.", + "format_string": "Ciąg formatujący:", + "formatted_time": "Sformatowana data/czas:" + }, + "i18n": { + "title": "Lokalizacja", + "language": "Język", + "first-day-of-the-week": "Pierwszy dzień tygodnia", + "monday": "Poniedziałek", + "tuesday": "Wtorek", + "wednesday": "Środa", + "thursday": "Czwartek", + "friday": "Piątek", + "saturday": "Sobota", + "sunday": "Niedziela", + "first-week-of-the-year": "Pierwszy tydzień roku", + "first-week-contains-first-day": "Pierwszy tydzień zawiera pierwszy dzień roku", + "first-week-contains-first-thursday": "Pierwszy tydzień zawiera pierwszy czwartek roku", + "first-week-has-minimum-days": "Pierwszy tydzień ma minimalną liczbę dni", + "min-days-in-first-week": "Minimalna liczba dni w pierwszym tygodniu", + "first-week-info": "Pierwszy tydzień zawiera pierwszy czwartek roku jest oparty na standardzie ISO 8601.", + "first-week-warning": "Zmiana opcji pierwszego tygodnia może powodować duplikaty z istniejącymi notatkami tygodniowymi, a istniejące notatki tygodniowe nie zostaną odpowiednio zaktualizowane.", + "formatting-locale": "Format daty i liczb", + "formatting-locale-auto": "Na podstawie języka aplikacji" + }, + "backup": { + "automatic_backup": "Automatyczna kopia zapasowa", + "automatic_backup_description": "Trilium może automatycznie tworzyć kopie zapasowe bazy danych:", + "enable_daily_backup": "Włącz codzienną kopię zapasową", + "enable_weekly_backup": "Włącz tygodniową kopię zapasową", + "enable_monthly_backup": "Włącz miesięczną kopię zapasową", + "backup_recommendation": "Zaleca się włączenie kopii zapasowej, ale może to spowolnić uruchamianie aplikacji przy dużych bazach danych i/lub wolnych urządzeniach pamięci masowej.", + "backup_now": "Utwórz kopię zapasową teraz", + "backup_database_now": "Utwórz kopię zapasową bazy danych teraz", + "existing_backups": "Istniejące kopie zapasowe", + "date-and-time": "Data i godzina", + "path": "Ścieżka", + "database_backed_up_to": "Baza danych została zarchiwizowana do {{backupFilePath}}", + "no_backup_yet": "brak jeszcze kopii zapasowej" + }, + "etapi": { + "title": "ETAPI", + "description": "ETAPI to interfejs API REST używany do programowego dostępu do instancji Trilium, bez interfejsu użytkownika.", + "see_more": "Zobacz więcej szczegółów w {{- link_to_wiki}} oraz w {{- link_to_openapi_spec}} lub {{- link_to_swagger_ui }}.", + "wiki": "wiki", + "openapi_spec": "specyfikacja ETAPI OpenAPI", + "swagger_ui": "ETAPI Swagger UI", + "create_token": "Utwórz nowy token ETAPI", + "existing_tokens": "Istniejące tokeny", + "no_tokens_yet": "Nie ma jeszcze żadnych tokenów. Kliknij przycisk powyżej, aby utworzyć jeden.", + "token_name": "Nazwa tokenu", + "created": "Utworzono", + "actions": "Akcje", + "new_token_title": "Nowy token ETAPI", + "new_token_message": "Wprowadź nazwę nowego tokenu", + "default_token_name": "nowy token", + "error_empty_name": "Nazwa tokenu nie może być pusta", + "token_created_title": "Utworzono token ETAPI", + "token_created_message": "Skopiuj utworzony token do schowka. Trilium przechowuje token w postaci zaszyfrowanej i jest to ostatni raz, kiedy go widzisz.", + "rename_token": "Zmień nazwę tego tokenu", + "delete_token": "Usuń / dezaktywuj ten token", + "rename_token_title": "Zmień nazwę tokenu", + "rename_token_message": "Wprowadź nową nazwę tokenu", + "delete_token_confirmation": "Czy na pewno chcesz usunąć token ETAPI \"{{name}}\"?" + }, + "options_widget": { + "options_status": "Status opcji", + "options_change_saved": "Zmiany w opcjach zostały zapisane." + }, + "password": { + "heading": "Hasło", + "alert_message": "Pamiętaj o zapamiętaniu nowego hasła. Hasło jest używane do logowania się do interfejsu internetowego i szyfrowania chronionych notatek. Jeśli zapomnisz hasła, wszystkie Twoje chronione notatki zostaną utracone na zawsze.", + "reset_link": "Kliknij tutaj, aby je zresetować.", + "old_password": "Stare hasło", + "new_password": "Nowe hasło", + "new_password_confirmation": "Potwierdzenie nowego hasła", + "change_password": "Zmień hasło", + "protected_session_timeout": "Limit czasu sesji chronionej", + "protected_session_timeout_description": "Limit czasu sesji chronionej to okres, po którym sesja chroniona jest usuwana z pamięci przeglądarki. Mierzy się go od ostatniej interakcji z chronionymi notatkami. Zobacz", + "wiki": "wiki", + "for_more_info": "aby uzyskać więcej informacji.", + "protected_session_timeout_label": "Limit czasu sesji chronionej:", + "reset_confirmation": "Resetując hasło, na zawsze utracisz dostęp do wszystkich istniejących chronionych notatek. Czy na pewno chcesz zresetować hasło?", + "reset_success_message": "Hasło zostało zresetowane. Ustaw nowe hasło", + "change_password_heading": "Zmień hasło", + "set_password_heading": "Ustaw hasło", + "set_password": "Ustaw hasło", + "password_mismatch": "Nowe hasła nie są takie same.", + "password_changed_success": "Hasło zostało zmienione. Trilium zostanie przeładowane po naciśnięciu OK." + }, + "multi_factor_authentication": { + "title": "Uwierzytelnianie wieloskładnikowe", + "description": "Uwierzytelnianie wieloskładnikowe (MFA) dodaje dodatkową warstwę zabezpieczeń do Twojego konta. Zamiast wpisywać tylko hasło, aby się zalogować, MFA wymaga podania jednego lub więcej dodatkowych dowodów weryfikujących Twoją tożsamość. W ten sposób, nawet jeśli ktoś zdobędzie Twoje hasło, nadal nie będzie mógł uzyskać dostępu do Twojego konta bez drugiego elementu informacji. To jak dodanie dodatkowego zamka do drzwi, co znacznie utrudnia włamanie.

Postępuj zgodnie z poniższymi instrukcjami, aby włączyć MFA. Jeśli nie skonfigurujesz go poprawnie, logowanie powróci do samego hasła.", + "mfa_enabled": "Włącz uwierzytelnianie wieloskładnikowe", + "mfa_method": "Metoda MFA", + "electron_disabled": "Uwierzytelnianie wieloskładnikowe nie jest obecnie obsługiwane w wersji stacjonarnej.", + "totp_title": "Jednorazowe hasło czasowe (TOTP)", + "totp_description": "TOTP (Time-Based One-Time Password) to funkcja bezpieczeństwa, która generuje unikalny, tymczasowy kod, który zmienia się co 30 sekund. Używasz tego kodu wraz z hasłem do logowania się na swoje konto, co znacznie utrudnia dostęp do niego innym osobom.", + "totp_secret_title": "Wygeneruj sekret TOTP", + "totp_secret_generate": "Wygeneruj sekret TOTP", + "totp_secret_regenerate": "Wygeneruj ponownie sekret TOTP", + "no_totp_secret_warning": "Aby włączyć TOTP, musisz najpierw wygenerować sekret TOTP.", + "totp_secret_description_warning": "Po wygenerowaniu nowego sekretu TOTP będziesz musiał ponownie zalogować się przy użyciu nowego sekretu TOTP.", + "totp_secret_generated": "Wygenerowano sekret TOTP", + "totp_secret_warning": "Zapisz wygenerowany sekret w bezpiecznym miejscu. Nie zostanie on ponownie pokazany.", + "totp_secret_regenerate_confirm": "Czy na pewno chcesz wygenerować ponownie sekret TOTP? Spowoduje to unieważnienie poprzedniego sekretu TOTP i wszystkich istniejących kodów odzyskiwania.", + "recovery_keys_title": "Klucze odzyskiwania jednorazowego logowania", + "recovery_keys_description": "Klucze odzyskiwania jednorazowego logowania są używane do logowania w przypadku, gdy nie możesz uzyskać dostępu do swoich kodów Authenticator.", + "recovery_keys_description_warning": "Klucze odzyskiwania nie zostaną ponownie pokazane po opuszczeniu strony, przechowuj je w bezpiecznym miejscu.
Po użyciu klucza odzyskiwania nie można go użyć ponownie.", + "recovery_keys_error": "Błąd generowania kodów odzyskiwania", + "recovery_keys_no_key_set": "Nie ustawiono kodów odzyskiwania", + "recovery_keys_generate": "Wygeneruj kody odzyskiwania", + "recovery_keys_regenerate": "Wygeneruj ponownie kody odzyskiwania", + "recovery_keys_used": "Użyto: {{date}}", + "recovery_keys_unused": "Kod odzyskiwania {{index}} jest nieużywany", + "oauth_title": "OAuth/OpenID", + "oauth_description": "OpenID to standaryzowany sposób logowania się na strony internetowe przy użyciu konta z innej usługi, takiej jak Google, w celu zweryfikowania Twojej tożsamości. Domyślnym dostawcą jest Google, ale możesz zmienić go na dowolnego innego dostawcę OpenID. Sprawdź tutaj, aby uzyskać więcej informacji. Postępuj zgodnie z tymi instrukcjami, aby skonfigurować usługę OpenID za pośrednictwem Google.", + "oauth_description_warning": "Aby włączyć OAuth/OpenID, musisz ustawić podstawowy adres URL OAuth/OpenID, identyfikator klienta i sekret klienta w pliku config.ini i ponownie uruchomić aplikację. Jeśli chcesz ustawić je ze zmiennych środowiskowych, ustaw TRILIUM_OAUTH_BASE_URL, TRILIUM_OAUTH_CLIENT_ID i TRILIUM_OAUTH_CLIENT_SECRET.", + "oauth_missing_vars": "Brakujące ustawienia: {{-variables}}", + "oauth_user_account": "Konto użytkownika: ", + "oauth_user_email": "E-mail użytkownika: ", + "oauth_user_not_logged_in": "Niezalogowany!" + }, + "shortcuts": { + "keyboard_shortcuts": "Skróty klawiaturowe", + "multiple_shortcuts": "Wiele skrótów dla tej samej akcji można oddzielić przecinkiem.", + "electron_documentation": "Zobacz dokumentację Electron dla dostępnych modyfikatorów i kodów klawiszy.", + "type_text_to_filter": "Wpisz tekst, aby filtrować skróty...", + "action_name": "Nazwa akcji", + "shortcuts": "Skróty", + "default_shortcuts": "Domyślne skróty", + "description": "Opis", + "reload_app": "Przeładuj aplikację, aby zastosować zmiany", + "set_all_to_default": "Ustaw wszystkie skróty na domyślne", + "confirm_reset": "Czy na pewno chcesz zresetować wszystkie skróty klawiaturowe do domyślnych?" + }, + "spellcheck": { + "title": "Sprawdzanie pisowni", + "description": "Te opcje dotyczą tylko wersji stacjonarnych, przeglądarki będą używać własnego natywnego sprawdzania pisowni.", + "enable": "Włącz sprawdzanie pisowni", + "language_code_label": "Kod(y) języka", + "language_code_placeholder": "na przykład \"en-US\", \"de-AT\"", + "multiple_languages_info": "Wiele języków można oddzielić przecinkiem, np. \"en-US, de-DE, cs\". ", + "available_language_codes_label": "Dostępne kody języków:", + "restart-required": "Zmiany w opcjach sprawdzania pisowni zaczną obowiązywać po ponownym uruchomieniu aplikacji." + }, + "sync_2": { + "config_title": "Konfiguracja synchronizacji", + "server_address": "Adres instancji serwera", + "timeout": "Limit czasu synchronizacji", + "timeout_unit": "milisekundy", + "proxy_label": "Serwer proxy synchronizacji (opcjonalnie)", + "note": "Notatka", + "note_description": "Jeśli pozostawisz ustawienie proxy puste, zostanie użyty systemowy serwer proxy (dotyczy tylko wersji stacjonarnej/electron).", + "special_value_description": "Inną specjalną wartością jest noproxy, która wymusza ignorowanie nawet systemowego serwera proxy i respektuje NODE_TLS_REJECT_UNAUTHORIZED.", + "save": "Zapisz", + "help": "Pomoc", + "test_title": "Test synchronizacji", + "test_description": "Sprawdzi to połączenie i uzgadnianie z serwerem synchronizacji. Jeśli serwer synchronizacji nie jest zainicjowany, spowoduje to jego skonfigurowanie do synchronizacji z lokalnym dokumentem.", + "test_button": "Testuj synchronizację", + "handshake_failed": "Uzgadnianie serwera synchronizacji nie powiodło się, błąd: {{message}}" + }, + "api_log": { + "close": "Zamknij" + }, + "attachment_detail_2": { + "will_be_deleted_in": "Ten załącznik zostanie automatycznie usunięty za {{time}}", + "will_be_deleted_soon": "Ten załącznik zostanie wkrótce automatycznie usunięty", + "deletion_reason": ", ponieważ załącznik nie jest powiązany z treścią notatki. Aby zapobiec usunięciu, dodaj link do załącznika z powrotem do treści lub przekonwertuj załącznik na notatkę.", + "role_and_size": "Rola: {{role}}, Rozmiar: {{size}}", + "link_copied": "Link do załącznika skopiowany do schowka.", + "unrecognized_role": "Nierozpoznana rola załącznika '{{role}}'." + }, + "bookmark_switch": { + "bookmark": "Zakładka", + "bookmark_this_note": "Dodaj tę notatkę do zakładek w lewym panelu bocznym", + "remove_bookmark": "Usuń zakładkę" + }, + "editability_select": { + "auto": "Auto", + "read_only": "Tylko do odczytu", + "always_editable": "Zawsze edytowalny", + "note_is_editable": "Notatka jest edytowalna, jeśli nie jest zbyt długa.", + "note_is_read_only": "Notatka jest tylko do odczytu, ale można ją edytować po kliknięciu przycisku.", + "note_is_always_editable": "Notatka jest zawsze edytowalna, niezależnie od jej długości." + }, + "note-map": { + "button-link-map": "Mapa linków", + "button-tree-map": "Mapa drzewa" + }, + "tree-context-menu": { + "open-in-a-new-tab": "Otwórz w nowej karcie", + "open-in-a-new-split": "Otwórz w nowym podziale", + "insert-note-after": "Wstaw notatkę po", + "insert-child-note": "Wstaw notatkę podrzędną", + "archive": "Archiwizuj", + "unarchive": "Przywróć z archiwum", + "delete": "Usuń", + "search-in-subtree": "Szukaj w poddrzewie", + "hoist-note": "Podnieś notatkę", + "unhoist-note": "Opuść notatkę", + "edit-branch-prefix": "Edytuj prefiks gałęzi", + "advanced": "Zaawansowane", + "expand-subtree": "Rozwiń poddrzewo", + "collapse-subtree": "Zwiń poddrzewo", + "sort-by": "Sortuj według...", + "recent-changes-in-subtree": "Ostatnie zmiany w poddrzewie", + "convert-to-attachment": "Konwertuj na załącznik", + "copy-note-path-to-clipboard": "Kopiuj ścieżkę notatki do schowka", + "protect-subtree": "Chroń poddrzewo", + "unprotect-subtree": "Odblokuj poddrzewo", + "copy-clone": "Kopiuj / klonuj", + "clone-to": "Klonuj do...", + "cut": "Wytnij", + "move-to": "Przenieś do...", + "paste-into": "Wklej do", + "paste-after": "Wklej po", + "duplicate": "Duplikuj", + "export": "Eksportuj", + "import-into-note": "Importuj do notatki", + "apply-bulk-actions": "Zastosuj akcje zbiorcze", + "converted-to-attachments": "{{count}} notatek zostało przekonwertowanych na załączniki.", + "convert-to-attachment-confirm": "Czy na pewno chcesz przekonwertować wybrane notatki na załączniki ich notatek nadrzędnych?", + "open-in-popup": "Szybka edycja" + }, + "shared_info": { + "shared_publicly": "Ta notatka jest udostępniona publicznie na {{- link}}.", + "shared_locally": "Ta notatka jest udostępniona lokalnie na {{- link}}.", + "help_link": "Aby uzyskać pomoc, odwiedź wiki." + }, + "note_types": { + "text": "Tekst", + "code": "Kod", + "saved-search": "Zapisane wyszukiwanie", + "relation-map": "Mapa relacji", + "note-map": "Mapa notatek", + "render-note": "Renderuj notatkę", + "book": "Kolekcja", + "mermaid-diagram": "Diagram Mermaid", + "canvas": "Płótno", + "web-view": "Widok sieciowy", + "mind-map": "Mapa myśli", + "file": "Plik", + "image": "Obraz", + "launcher": "Program uruchamiający", + "doc": "Dokument", + "widget": "Widżet", + "confirm-change": "Nie zaleca się zmiany typu notatki, gdy zawartość notatki nie jest pusta. Czy chcesz kontynuować mimo to?", + "geo-map": "Mapa geograficzna", + "beta-feature": "Beta", + "ai-chat": "Czat AI", + "task-list": "Lista zadań", + "new-feature": "Nowość", + "collections": "Kolekcje" + }, + "protect_note": { + "toggle-on": "Chroń notatkę", + "toggle-off": "Odblokuj notatkę", + "toggle-on-hint": "Notatka nie jest chroniona, kliknij, aby ją chronić", + "toggle-off-hint": "Notatka jest chroniona, kliknij, aby ją odblokować" + }, + "shared_switch": { + "shared": "Udostępnione", + "toggle-on-title": "Udostępnij notatkę", + "toggle-off-title": "Przestań udostępniać notatkę", + "shared-branch": "Ta notatka istnieje tylko jako notatka udostępniona, zaprzestanie udostępniania spowoduje jej usunięcie. Czy chcesz kontynuować i tym samym usunąć tę notatkę?", + "inherited": "Notatka nie może być tutaj nieudostępniona, ponieważ jest udostępniana poprzez dziedziczenie od przodka." + }, + "template_switch": { + "template": "Szablon", + "toggle-on-hint": "Uczyń notatkę szablonem", + "toggle-off-hint": "Usuń notatkę jako szablon" + }, + "open-help-page": "Otwórz stronę pomocy", + "find": { + "case_sensitive": "Uwzględniaj wielkość liter", + "match_words": "Dopasuj słowa", + "find_placeholder": "Znajdź w tekście...", + "replace_placeholder": "Zastąp...", + "replace": "Zastąp", + "replace_all": "Zastąp wszystko" + }, + "highlights_list_2": { + "title": "Lista wyróżnień", + "options": "Opcje" + }, + "quick-search": { + "placeholder": "Szybkie wyszukiwanie", + "searching": "Wyszukiwanie...", + "no-results": "Nie znaleziono wyników", + "more-results": "... i {{number}} więcej wyników.", + "show-in-full-search": "Pokaż w pełnym wyszukiwaniu" + }, + "note_tree": { + "collapse-title": "Zwiń drzewo notatek", + "scroll-active-title": "Przewiń do aktywnej notatki", + "tree-settings-title": "Ustawienia drzewa", + "hide-archived-notes": "Ukryj zarchiwizowane notatki", + "automatically-collapse-notes": "Automatycznie zwijaj notatki", + "automatically-collapse-notes-title": "Notatki zostaną zwinięte po okresie bezczynności, aby uporządkować drzewo.", + "save-changes": "Zapisz i zastosuj zmiany", + "auto-collapsing-notes-after-inactivity": "Automatyczne zwijanie notatek po bezczynności...", + "saved-search-note-refreshed": "Odświeżono zapisaną notatkę wyszukiwania.", + "hoist-this-note-workspace": "Podnieś tę notatkę (obszar roboczy)", + "refresh-saved-search-results": "Odśwież zapisane wyniki wyszukiwania", + "create-child-note": "Utwórz notatkę podrzędną", + "unhoist": "Opuść", + "toggle-sidebar": "Przełącz pasek boczny" + }, + "title_bar_buttons": { + "window-on-top": "Trzymaj okno na wierzchu" + }, + "note_detail": { + "could_not_find_typewidget": "Nie można znaleźć typeWidget dla typu '{{type}}'" + }, + "note_title": { + "placeholder": "wpisz tutaj tytuł notatki..." + }, + "search_result": { + "no_notes_found": "Nie znaleziono żadnych notatek dla podanych parametrów wyszukiwania.", + "search_not_executed": "Wyszukiwanie nie zostało jeszcze wykonane. Kliknij przycisk \"Szukaj\" powyżej, aby zobaczyć wyniki." + }, + "spacer": { + "configure_launchbar": "Skonfiguruj pasek uruchamiania" + }, + "sql_result": { + "no_rows": "Nie zwrócono żadnych wierszy dla tego zapytania" + }, + "sql_table_schemas": { + "tables": "Tabele" + }, + "tab_row": { + "close_tab": "Zamknij kartę", + "add_new_tab": "Dodaj nową kartę", + "close": "Zamknij", + "close_other_tabs": "Zamknij inne karty", + "close_right_tabs": "Zamknij karty po prawej", + "close_all_tabs": "Zamknij wszystkie karty", + "reopen_last_tab": "Otwórz ponownie ostatnią zamkniętą kartę", + "move_tab_to_new_window": "Przenieś tę kartę do nowego okna", + "copy_tab_to_new_window": "Skopiuj tę kartę do nowego okna", + "new_tab": "Nowa karta" + }, + "toc": { + "table_of_contents": "Spis treści", + "options": "Opcje" + }, + "watched_file_update_status": { + "file_last_modified": "Plik został ostatnio zmodyfikowany .", + "upload_modified_file": "Prześlij zmodyfikowany plik", + "ignore_this_change": "Ignoruj tę zmianę" + }, + "app_context": { + "please_wait_for_save": "Poczekaj kilka sekund na zakończenie zapisywania, a następnie spróbuj ponownie." + }, + "note_create": { + "duplicated": "Notatka \"{{title}}\" została zduplikowana." + }, + "image": { + "copied-to-clipboard": "Odniesienie do obrazu zostało skopiowane do schowka. Można je wkleić w dowolnej notatce tekstowej.", + "cannot-copy": "Nie można skopiować odniesienia do obrazu do schowka." + }, + "clipboard": { + "cut": "Notatka(i) została(y) wycięta(e) do schowka.", + "copied": "Notatka(i) została(y) skopiowana(e) do schowka.", + "copy_failed": "Nie można skopiować do schowka z powodu problemów z uprawnieniami.", + "copy_success": "Skopiowano do schowka." + }, + "entrypoints": { + "note-revision-created": "Utworzono wersję notatki.", + "note-executed": "Notatka wykonana.", + "sql-error": "Wystąpił błąd podczas wykonywania zapytania SQL: {{message}}" + }, + "branches": { + "cannot-move-notes-here": "Nie można przenieść tutaj notatek.", + "delete-status": "Status usuwania", + "delete-notes-in-progress": "Usuwanie notatek w toku: {{count}}", + "delete-finished-successfully": "Usuwanie zakończone pomyślnie.", + "undeleting-notes-in-progress": "Przywracanie notatek w toku: {{count}}", + "undeleting-notes-finished-successfully": "Przywracanie notatek zakończone pomyślnie." + }, + "frontend_script_api": { + "async_warning": "Przekazujesz funkcję asynchroniczną do `api.runOnBackend()`, co prawdopodobnie nie zadziała zgodnie z zamierzeniami.\\nAlbo uczyń funkcję synchroniczną (usuwając słowo kluczowe `async`), albo użyj `api.runAsyncOnBackendWithManualTransactionHandling()`.", + "sync_warning": "Przekazujesz funkcję synchroniczną do `api.runAsyncOnBackendWithManualTransactionHandling()`,\\npodczas gdy prawdopodobnie powinieneś użyć `api.runOnBackend()`." + }, + "ws": { + "sync-check-failed": "Sprawdzanie synchronizacji nie powiodło się!", + "consistency-checks-failed": "Sprawdzanie spójności nie powiodło się! Zobacz logi, aby uzyskać szczegółowe informacje.", + "encountered-error": "Napotkano błąd \"{{message}}\", sprawdź konsolę.", + "lost-websocket-connection-title": "Utracono połączenie z serwerem", + "lost-websocket-connection-message": "Sprawdź konfigurację swojego odwrotnego serwera proxy (np. nginx lub Apache), aby upewnić się, że połączenia WebSocket są prawidłowo dozwolone i nie są blokowane." + }, + "hoisted_note": { + "confirm_unhoisting": "Żądana notatka '{{requestedNote}}' znajduje się poza poddrzewem podniesionej notatki '{{hoistedNote}}' i musisz ją opuścić, aby uzyskać do niej dostęp. Czy chcesz kontynuować opuszczanie?" + }, + "launcher_context_menu": { + "reset_launcher_confirm": "Czy na pewno chcesz zresetować \"{{title}}\"? Wszystkie dane / ustawienia w tej notatce (i jej dzieciach) zostaną utracone, a program uruchamiający zostanie przywrócony do pierwotnej lokalizacji.", + "add-note-launcher": "Dodaj program uruchamiający notatkę", + "add-script-launcher": "Dodaj program uruchamiający skrypt", + "add-custom-widget": "Dodaj niestandardowy widżet", + "add-spacer": "Dodaj odstęp", + "delete": "Usuń ", + "reset": "Resetuj", + "move-to-visible-launchers": "Przenieś do widocznych programów uruchamiających", + "move-to-available-launchers": "Przenieś do dostępnych programów uruchamiających", + "duplicate-launcher": "Duplikuj program uruchamiający " + }, + "editable-text": { + "auto-detect-language": "Wykryto automatycznie" + }, + "highlighting": { + "title": "Bloki kodu", + "description": "Kontroluje podświetlanie składni dla bloków kodu w notatkach tekstowych, notatki kodowe nie będą miały wpływu.", + "color-scheme": "Schemat kolorów" + }, + "code_block": { + "word_wrapping": "Zawijanie słów", + "theme_none": "Brak podświetlania składni", + "theme_group_light": "Jasne motywy", + "theme_group_dark": "Ciemne motywy", + "copy_title": "Kopiuj do schowka" + }, + "classic_editor_toolbar": { + "title": "Formatowanie" + }, + "editor": { + "title": "Edytor" + }, + "editing": { + "editor_type": { + "label": "Pasek narzędzi formatowania", + "floating": { + "title": "Pływający", + "description": "narzędzia do edycji pojawiają się w pobliżu kursora;" + }, + "fixed": { + "title": "Stały", + "description": "narzędzia do edycji pojawiają się na karcie wstążki \"Formatowanie\"." + }, + "multiline-toolbar": "Wyświetlaj pasek narzędzi w wielu wierszach, jeśli się nie mieści." + } + }, + "geo-map": { + "create-child-note-title": "Utwórz nową notatkę podrzędną i dodaj ją do mapy", + "create-child-note-instruction": "Kliknij na mapę, aby utworzyć nową notatkę w tej lokalizacji, lub naciśnij Escape, aby anulować.", + "unable-to-load-map": "Nie można załadować mapy." + }, + "geo-map-context": { + "open-location": "Otwórz lokalizację", + "remove-from-map": "Usuń z mapy", + "add-note": "Dodaj znacznik w tej lokalizacji" + }, + "help-button": { + "title": "Otwórz odpowiednią stronę pomocy" + }, + "time_selector": { + "invalid_input": "Wprowadzona wartość czasu nie jest prawidłową liczbą.", + "minimum_input": "Wprowadzona wartość czasu musi wynosić co najmniej {{minimumSeconds}} sekund." + }, + "presentation_view": { + "edit-slide": "Edytuj ten slajd", + "start-presentation": "Rozpocznij prezentację", + "slide-overview": "Przełącz podgląd slajdów" } } From 434e3f6035e09a214a8b33cf5dbf9085ed54ffde Mon Sep 17 00:00:00 2001 From: Francis C Date: Mon, 20 Oct 2025 17:06:48 +0200 Subject: [PATCH 088/103] Translated using Weblate (Chinese (Traditional Han script)) Currently translated at 100.0% (1620 of 1620 strings) Translation: Trilium Notes/Client Translate-URL: https://hosted.weblate.org/projects/trilium/client/zh_Hant/ --- apps/client/src/translations/tw/translation.json | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/apps/client/src/translations/tw/translation.json b/apps/client/src/translations/tw/translation.json index 360789fa9..8fdd79540 100644 --- a/apps/client/src/translations/tw/translation.json +++ b/apps/client/src/translations/tw/translation.json @@ -1517,7 +1517,9 @@ "window-on-top": "保持此視窗置頂" }, "note_detail": { - "could_not_find_typewidget": "找不到類型為 '{{type}}' 的 typeWidget" + "could_not_find_typewidget": "找不到類型為 '{{type}}' 的 typeWidget", + "printing": "正在列印…", + "printing_pdf": "正在匯出為 PDF…" }, "note_title": { "placeholder": "請輸入筆記標題..." From 77ac0bfbdd6be62c6ad7173198bfde1bece2f065 Mon Sep 17 00:00:00 2001 From: Francis C Date: Mon, 20 Oct 2025 17:06:03 +0200 Subject: [PATCH 089/103] Translated using Weblate (Chinese (Traditional Han script)) Currently translated at 100.0% (387 of 387 strings) Translation: Trilium Notes/Server Translate-URL: https://hosted.weblate.org/projects/trilium/server/zh_Hant/ --- apps/server/src/assets/translations/tw/server.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/apps/server/src/assets/translations/tw/server.json b/apps/server/src/assets/translations/tw/server.json index fa339ca17..b4ad3e966 100644 --- a/apps/server/src/assets/translations/tw/server.json +++ b/apps/server/src/assets/translations/tw/server.json @@ -373,7 +373,8 @@ "export_filter": "PDF 文件 (*.pdf)", "unable-to-export-message": "目前筆記無法被匯出為 PDF 。", "unable-to-export-title": "無法匯出為 PDF", - "unable-to-save-message": "所選檔案無法被寫入。請重試或選擇其他路徑。" + "unable-to-save-message": "所選檔案無法被寫入。請重試或選擇其他路徑。", + "unable-to-print": "無法列印筆記" }, "tray": { "tooltip": "Trilium 筆記", From d81fcef1f3b51a8b5a10f4e1ffeafdc78c79704f Mon Sep 17 00:00:00 2001 From: green Date: Mon, 20 Oct 2025 15:15:00 +0200 Subject: [PATCH 090/103] Translated using Weblate (Japanese) Currently translated at 100.0% (1620 of 1620 strings) Translation: Trilium Notes/Client Translate-URL: https://hosted.weblate.org/projects/trilium/client/ja/ --- apps/client/src/translations/ja/translation.json | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/apps/client/src/translations/ja/translation.json b/apps/client/src/translations/ja/translation.json index 43a5befd7..c7b80c272 100644 --- a/apps/client/src/translations/ja/translation.json +++ b/apps/client/src/translations/ja/translation.json @@ -302,7 +302,7 @@ "showDevTools": "開発者ツールを表示", "showSQLConsole": "SQLコンソールを表示", "other": "その他", - "quickSearch": "クイックサーチにフォーカス", + "quickSearch": "クイック検索にフォーカス", "inPageSearch": "ページ内検索", "showJumpToNoteDialog": "「ジャンプ先」ダイアログを表示", "moveNoteUpDown": "ノートリストでノートを上/下に移動", @@ -1189,7 +1189,7 @@ "options": "オプション" }, "quick-search": { - "placeholder": "クイックサーチ", + "placeholder": "クイック検索", "searching": "検索中...", "no-results": "結果は見つかりませんでした", "more-results": "... および {{number}} 件の他の結果。", @@ -1882,7 +1882,9 @@ "window-on-top": "ウィンドウを最前面に維持" }, "note_detail": { - "could_not_find_typewidget": "タイプ {{type}} の typeWidget が見つかりませんでした" + "could_not_find_typewidget": "タイプ {{type}} の typeWidget が見つかりませんでした", + "printing": "印刷中です...", + "printing_pdf": "PDF へのエクスポート中です..." }, "watched_file_update_status": { "ignore_this_change": "この変更を無視する", From e72dc5c5c37cec48e3829a69f7fb6c0b4bfc10b9 Mon Sep 17 00:00:00 2001 From: green Date: Mon, 20 Oct 2025 15:13:56 +0200 Subject: [PATCH 091/103] Translated using Weblate (Japanese) Currently translated at 100.0% (387 of 387 strings) Translation: Trilium Notes/Server Translate-URL: https://hosted.weblate.org/projects/trilium/server/ja/ --- apps/server/src/assets/translations/ja/server.json | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/apps/server/src/assets/translations/ja/server.json b/apps/server/src/assets/translations/ja/server.json index 85698e613..8ceb8a5f9 100644 --- a/apps/server/src/assets/translations/ja/server.json +++ b/apps/server/src/assets/translations/ja/server.json @@ -110,7 +110,7 @@ "forward-in-note-history": "ノートの履歴を進む", "command-palette": "コマンドパレット", "scroll-to-active-note": "アクティブノートまでスクロール", - "quick-search": "クイックサーチ", + "quick-search": "クイック検索", "search-in-subtree": "サブツリー内を検索", "expand-subtree": "サブツリーを展開", "collapse-subtree": "サブツリーを折りたたむ", @@ -312,7 +312,7 @@ "new-note-title": "新しいノート", "bookmarks-title": "ブックマーク", "open-today-journal-note-title": "今日の日記を開く", - "quick-search-title": "クイックサーチ", + "quick-search-title": "クイック検索", "recent-changes-title": "最近の変更", "root-title": "隠されたノート", "note-map-title": "ノートマップ", @@ -361,7 +361,8 @@ "export_filter": "PDFドキュメント (*.pdf)", "unable-to-export-message": "現在のノートをPDFとしてエクスポートできませんでした。", "unable-to-export-title": "PDFとしてエクスポートできません", - "unable-to-save-message": "選択されたファイルに書き込めませんでした。もう一度試すか、別の保存先を選択してください。" + "unable-to-save-message": "選択されたファイルに書き込めませんでした。もう一度試すか、別の保存先を選択してください。", + "unable-to-print": "ノートを印刷できません" }, "tray": { "tooltip": "Trilium Notes", From 77b0d541b19d4c5627e36441ed7453861aa33824 Mon Sep 17 00:00:00 2001 From: kamykO Date: Mon, 20 Oct 2025 13:51:09 +0200 Subject: [PATCH 092/103] Translated using Weblate (Polish) Currently translated at 29.4% (477 of 1620 strings) Translation: Trilium Notes/Client Translate-URL: https://hosted.weblate.org/projects/trilium/client/pl/ --- apps/client/src/translations/pl/translation.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/client/src/translations/pl/translation.json b/apps/client/src/translations/pl/translation.json index ff943c93a..6e4c7a516 100644 --- a/apps/client/src/translations/pl/translation.json +++ b/apps/client/src/translations/pl/translation.json @@ -1,11 +1,11 @@ { "about": { - "title": "O notatkach Trilium", + "title": "O Trilium Notes", "homepage": "Strona główna:", "app_version": "Wersja aplikacji:", "db_version": "Wersja bazy danych:", "sync_version": "Wersja synchronizacji:", - "build_date": "Zbudowano:", + "build_date": "Data kompilacji:", "build_revision": "Wersja:", "data_directory": "Katalog z danymi:" }, From ca2cc38bad3ffb220f0881364102ace5a05ad8e1 Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Mon, 20 Oct 2025 18:23:08 +0300 Subject: [PATCH 093/103] fix(website): wrong docker command (closes #7426) --- apps/website/src/download-helper.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/website/src/download-helper.ts b/apps/website/src/download-helper.ts index a4f9eedb1..5c2381813 100644 --- a/apps/website/src/download-helper.ts +++ b/apps/website/src/download-helper.ts @@ -127,7 +127,7 @@ export const downloadMatrix: DownloadMatrix = { title: t("download_helper_server_docker.title"), description: t("download_helper_server_docker.description"), helpUrl: "https://docs.triliumnotes.org/User%20Guide/User%20Guide/Installation%20%26%20Setup/Server%20Installation/1.%20Installing%20the%20server/Using%20Docker.html", - quickStartCode: "docker pull triliumnext/trilium\ndocker run -p 8080:8080 -d ./data:/home/node/trilium-data triliumnext/trilium", + quickStartCode: "docker pull triliumnext/trilium\ndocker run -p 8080:8080 -d -v ./data:/home/node/trilium-data triliumnext/trilium", downloads: { dockerhub: { name: t("download_helper_server_docker.download_dockerhub"), From d4a46ed4dac98f97ba64f30b12fe0c0de5e634cb Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Mon, 20 Oct 2025 18:34:57 +0300 Subject: [PATCH 094/103] fix(settings): max content width forces minimum when typing (closes #7423) --- apps/client/src/widgets/react/FormTextBox.tsx | 38 +++++++++++-------- .../type_widgets/options/appearance.tsx | 2 +- 2 files changed, 23 insertions(+), 17 deletions(-) diff --git a/apps/client/src/widgets/react/FormTextBox.tsx b/apps/client/src/widgets/react/FormTextBox.tsx index db67bf6c9..27df6326c 100644 --- a/apps/client/src/widgets/react/FormTextBox.tsx +++ b/apps/client/src/widgets/react/FormTextBox.tsx @@ -9,22 +9,26 @@ interface FormTextBoxProps extends Omit, " } export default function FormTextBox({ inputRef, className, type, currentValue, onChange, onBlur, autoFocus, ...rest}: FormTextBoxProps) { - if (type === "number" && currentValue) { - const { min, max } = rest; - const currentValueNum = parseInt(currentValue, 10); - if (min && currentValueNum < parseInt(String(min), 10)) { - currentValue = String(min); - } else if (max && currentValueNum > parseInt(String(max), 10)) { - currentValue = String(max); - } - } - useEffect(() => { if (autoFocus) { inputRef?.current?.focus(); } }, []); + function applyLimits(value: string) { + if (type === "number") { + const { min, max } = rest; + const currentValueNum = parseInt(value, 10); + if (min && currentValueNum < parseInt(String(min), 10)) { + return String(min); + } else if (max && currentValueNum > parseInt(String(max), 10)) { + return String(max); + } + } + + return value; + } + return ( { const target = e.currentTarget; - onChange?.(target.value, target.validity); + const currentValue = applyLimits(e.currentTarget.value); + onChange?.(currentValue, target.validity); })} - onBlur={onBlur && (e => { - const target = e.currentTarget; - onBlur(target.value); + onBlur={(e => { + const currentValue = applyLimits(e.currentTarget.value); + e.currentTarget.value = currentValue; + onBlur?.(currentValue); })} {...rest} /> @@ -49,6 +55,6 @@ export function FormTextBoxWithUnit(props: FormTextBoxProps & { unit: string }) + ) -} \ No newline at end of file +} diff --git a/apps/client/src/widgets/type_widgets/options/appearance.tsx b/apps/client/src/widgets/type_widgets/options/appearance.tsx index 233186ffe..20ace18f7 100644 --- a/apps/client/src/widgets/type_widgets/options/appearance.tsx +++ b/apps/client/src/widgets/type_widgets/options/appearance.tsx @@ -294,7 +294,7 @@ function MaxContentWidth() { From d90e02d8f4a87ff3b6410450946a4d9d74c12c0a Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Mon, 20 Oct 2025 18:56:28 +0300 Subject: [PATCH 095/103] fix(search): note path not visible in search (closes #7404) --- .../src/widgets/collections/legacy/ListOrGridView.css | 6 ++++++ .../src/widgets/collections/legacy/ListOrGridView.tsx | 2 +- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/apps/client/src/widgets/collections/legacy/ListOrGridView.css b/apps/client/src/widgets/collections/legacy/ListOrGridView.css index 3a62b85b3..233ea022a 100644 --- a/apps/client/src/widgets/collections/legacy/ListOrGridView.css +++ b/apps/client/src/widgets/collections/legacy/ListOrGridView.css @@ -106,6 +106,12 @@ text-align: center; } +.note-list.list-view .note-path { + margin-left: 0.5em; + vertical-align: middle; + color: var(--muted-color); +} + /* #region Grid view */ .note-list.grid-view .note-list-container { display: flex; diff --git a/apps/client/src/widgets/collections/legacy/ListOrGridView.tsx b/apps/client/src/widgets/collections/legacy/ListOrGridView.tsx index db087e840..d29d7e275 100644 --- a/apps/client/src/widgets/collections/legacy/ListOrGridView.tsx +++ b/apps/client/src/widgets/collections/legacy/ListOrGridView.tsx @@ -74,7 +74,7 @@ function ListNoteCard({ note, parentNote, expand, highlightedTokens }: { note: F /> - + From 25e1c455620765725d2673804435548649efc112 Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Mon, 20 Oct 2025 18:59:44 +0300 Subject: [PATCH 096/103] style(search): decrease opacity of note path --- apps/client/src/widgets/collections/legacy/ListOrGridView.css | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/client/src/widgets/collections/legacy/ListOrGridView.css b/apps/client/src/widgets/collections/legacy/ListOrGridView.css index 233ea022a..60afe8954 100644 --- a/apps/client/src/widgets/collections/legacy/ListOrGridView.css +++ b/apps/client/src/widgets/collections/legacy/ListOrGridView.css @@ -109,7 +109,7 @@ .note-list.list-view .note-path { margin-left: 0.5em; vertical-align: middle; - color: var(--muted-color); + opacity: 0.5; } /* #region Grid view */ From a7a8f806e89e376c42e81357d8cc28a9a0e0420b Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Mon, 20 Oct 2025 19:30:44 +0300 Subject: [PATCH 097/103] fix(client): search results taking up space when not needed --- apps/client/src/widgets/search_result.tsx | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/apps/client/src/widgets/search_result.tsx b/apps/client/src/widgets/search_result.tsx index fd3c24ab4..3049d5292 100644 --- a/apps/client/src/widgets/search_result.tsx +++ b/apps/client/src/widgets/search_result.tsx @@ -4,7 +4,6 @@ import Alert from "./react/Alert"; import { useNoteContext, useTriliumEvent } from "./react/hooks"; import "./search_result.css"; import { SearchNoteList } from "./collections/NoteList"; -// import NoteListRenderer from "../services/note_list_renderer"; enum SearchResultState { NO_RESULTS, @@ -43,7 +42,7 @@ export default function SearchResult() { }); return ( -
+
{state === SearchResultState.NOT_EXECUTED && ( {t("search_result.search_not_executed")} )} From 51f559b332fb4e2d5382ecf558fb84f9efeb1dc2 Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Mon, 20 Oct 2025 19:37:19 +0300 Subject: [PATCH 098/103] feat(client/search): apply full-width for collection view --- apps/client/src/widgets/note_wrapper.ts | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/apps/client/src/widgets/note_wrapper.ts b/apps/client/src/widgets/note_wrapper.ts index 619f8cda4..01a1f7c87 100644 --- a/apps/client/src/widgets/note_wrapper.ts +++ b/apps/client/src/widgets/note_wrapper.ts @@ -78,6 +78,10 @@ export default class NoteWrapperWidget extends FlexContainer { return true; } + if (note.type === "search" && ![ "grid", "list" ].includes(note.getLabelValue("viewType") ?? "list")) { + return true; + } + return !!note?.isLabelTruthy("fullContentWidth"); } @@ -87,7 +91,7 @@ export default class NoteWrapperWidget extends FlexContainer { const noteId = this.noteContext?.noteId; if ( loadResults.isNoteReloaded(noteId) || - loadResults.getAttributeRows().find((attr) => attr.type === "label" && ["cssClass", "language"].includes(attr.name ?? "") && attributeService.isAffecting(attr, this.noteContext?.note)) + loadResults.getAttributeRows().find((attr) => attr.type === "label" && ["cssClass", "language", "viewType"].includes(attr.name ?? "") && attributeService.isAffecting(attr, this.noteContext?.note)) ) { this.refresh(); } From 00720ae58f6fefb5df4b44f46b567f829c9757e5 Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Mon, 20 Oct 2025 19:42:06 +0300 Subject: [PATCH 099/103] docs(user): mention printing PDF manually from browser --- .../Notes/Printing & Exporting as PDF.html | 32 ++--- .../User Guide/Note Types/Collections.html | 109 +++++++++--------- docs/User Guide/!!!meta.json | 32 ++--- .../Notes/Printing & Exporting as PDF.md | 3 + 4 files changed, 91 insertions(+), 85 deletions(-) diff --git a/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Basic Concepts and Features/Notes/Printing & Exporting as PDF.html b/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Basic Concepts and Features/Notes/Printing & Exporting as PDF.html index 2d1ee73fb..3104cac57 100644 --- a/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Basic Concepts and Features/Notes/Printing & Exporting as PDF.html +++ b/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Basic Concepts and Features/Notes/Printing & Exporting as PDF.html @@ -4,7 +4,6 @@
Screenshot of the note contextual menu indicating the “Export as PDF” option.
-

Printing

This feature allows printing of notes. It works on both the desktop client, but also on the web.

@@ -38,6 +37,13 @@ class="admonition note">

To print a note, select the button to the right of the note and select Export as PDF. Afterwards you will be prompted to select where to save the PDF file.

+

Automatic opening of the file

When the PDF is exported, it is automatically opened with the system default application for easy preview.

@@ -53,9 +59,9 @@ class="admonition note"> href="#root/_help_zEY4DaJG4YT5">Attributes to adjust some of the settings:

    -
  • To print in landscape mode instead of portrait (useful for big diagrams +
  • To print in landscape mode instead of portrait (useful for big diagrams or slides), add #printLandscape.
  • -
  • By default, the resulting PDF will be in Letter format. It is possible +
  • By default, the resulting PDF will be in Letter format. It is possible to adjust it to another page size via the #printPageSize attribute, with one of the following values: A0, A1, A2, A3, A4, A5, A6, Legal, Letter, Tabloid, Ledger.
@@ -69,9 +75,9 @@ class="admonition note"> href="#root/_help_4TIF1oA4VQRO">Options and assigning a key combination for:

    -
  • Print Active Note +
  • Print Active Note
  • -
  • Export Active Note as PDF +
  • Export Active Note as PDF

Constraints & limitations

@@ -79,24 +85,24 @@ class="admonition note"> supported when printing, in which case the Print and Export as PDF options will be disabled.

    -
  • For Code notes: +
  • For Code notes:
      -
    • Line numbers are not printed.
    • -
    • Syntax highlighting is enabled, however a default theme (Visual Studio) +
    • Line numbers are not printed.
    • +
    • Syntax highlighting is enabled, however a default theme (Visual Studio) is enforced.
  • -
  • For Collections: +
  • For Collections:
      -
    • Only Presentation View is +
    • Only Presentation View is currently supported.
    • -
    • We plan to add support for all the collection types at some point.
    • +
    • We plan to add support for all the collection types at some point.
  • -
  • Using Custom app-wide CSS for +
  • Using Custom app-wide CSS for printing is not longer supported, due to a more stable but isolated mechanism.
      -
    • We plan to introduce a new mechanism specifically for a print CSS.
    • +
    • We plan to introduce a new mechanism specifically for a print CSS.
diff --git a/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Note Types/Collections.html b/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Note Types/Collections.html index 2a774a3f3..0c06f1279 100644 --- a/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Note Types/Collections.html +++ b/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Note Types/Collections.html @@ -4,31 +4,29 @@ child notes into one continuous view. This makes it ideal for reading extensive information broken into smaller, manageable segments.

    -
  • Grid View which +
  • Grid View which is the default presentation method for child notes (see Note List), where the notes are displayed as tiles with their title and content being visible.
  • -
  • List View is +
  • List View is similar to Grid View, but it displays the notes one under the other with the content being expandable/collapsible, but also works recursively.

More specialized collections were introduced, such as the:

    -
  • Calendar View which +
  • Calendar View which displays a week, month or year calendar with the notes being shown as events. New events can be added easily by dragging across the calendar.
  • -
  • Geo Map View which +
  • Geo Map View which displays a geographical map in which the notes are represented as markers/pins on the map. New events can be easily added by pointing on the map.
  • -
  • Table View displays - each note as a row in a table, with Promoted Attributes being - shown as well. This makes it easy to visualize attributes of notes, as - well as making them easily editable.
  • -
  • Board View (Kanban) - displays notes in columns, grouped by the value of a label.
  • +
  • Table View displays + each note as a row in a table, with Promoted Attributes being + shown as well. This makes it easy to visualize attributes of notes, as + well as making them easily editable.
  • +
  • Board View (Kanban) + displays notes in columns, grouped by the value of a label.

For a quick presentation of all the supported view types, see the child notes of this help page, including screenshots.

@@ -44,58 +42,57 @@

Adding a description to a collection

To add a text before the collection, for example to describe it:

    -
  1. Create a new collection.
  2. -
  3. In the Ribbon, +
  4. Create a new collection.
  5. +
  6. In the Ribbon, go to Basic Properties and change the note type from Collection to Text.

Now the text will be displayed above while still maintaining the collection view.

Using saved search

Collections, by default, only display the child notes. However, it is - possible to use the Search functionality + possible to use the Search functionality to display notes all across the tree, with advanced querying functionality.

-

To do so, simply start a Search and +

To do so, simply start a Search and go to the Collection Properties tab in the Ribbon and - select a desired type of collection. To keep the search-based collection, - use a Saved Search.

- +

Creating a collection from scratch

+

By default, collections come with a default configuration and sometimes + even sample notes. To create a collection completely from scratch:

+
    +
  1. Create a new note of type Text (or any type).
  2. +
  3. In the Ribbon, + go to Basic Properties and select Collection as the note + type.
  4. +
  5. Still in the ribbon, go to Collection Properties and select the + desired view type.
  6. +
  7. Consult the help page of the corresponding view type in order to understand + how to configure them.
  8. +
+

Archived notes

+

By default, archived notes will not be shown in collections. This behaviour + can be changed by going to Collection Properties in the  + Ribbon and checking Show archived notes.

+

Archived notes will be generally indicated by being greyed out as opposed + to the normal ones.

+

Under the hood

+

Collections by themselves are simply notes with no content that rely on + the Note List mechanism + (the one that lists the children notes at the bottom of a note) to display + information.

+

By default, new collections use predefined Templates that are stored safely + in the Hidden Notes to + define some basic configuration such as the type of view, but also some  + Promoted Attributes to make editing easier.

+

Collections don't store their configuration (e.g. the position on the + map, the hidden columns in a table) in the content of the note itself, + but as attachments.

\ No newline at end of file diff --git a/docs/User Guide/!!!meta.json b/docs/User Guide/!!!meta.json index f42b42ae0..b73efe6a6 100644 --- a/docs/User Guide/!!!meta.json +++ b/docs/User Guide/!!!meta.json @@ -8122,17 +8122,31 @@ { "type": "relation", "name": "internalLink", - "value": "KC1HB96bqqHX", + "value": "eIg8jdvaoNNd", + "isInheritable": false, + "position": 110 + }, + { + "type": "relation", + "name": "internalLink", + "value": "m523cpzocqaD", "isInheritable": false, "position": 120 }, { "type": "relation", "name": "internalLink", - "value": "2mUhVmZK8RF3", + "value": "KC1HB96bqqHX", "isInheritable": false, "position": 130 }, + { + "type": "relation", + "name": "internalLink", + "value": "2mUhVmZK8RF3", + "isInheritable": false, + "position": 140 + }, { "type": "label", "name": "shareAlias", @@ -8146,20 +8160,6 @@ "value": "bx bx-book", "isInheritable": false, "position": 20 - }, - { - "type": "relation", - "name": "internalLink", - "value": "eIg8jdvaoNNd", - "isInheritable": false, - "position": 140 - }, - { - "type": "relation", - "name": "internalLink", - "value": "m523cpzocqaD", - "isInheritable": false, - "position": 150 } ], "format": "markdown", diff --git a/docs/User Guide/User Guide/Basic Concepts and Features/Notes/Printing & Exporting as PDF.md b/docs/User Guide/User Guide/Basic Concepts and Features/Notes/Printing & Exporting as PDF.md index 928b134c6..6873fd8a5 100644 --- a/docs/User Guide/User Guide/Basic Concepts and Features/Notes/Printing & Exporting as PDF.md +++ b/docs/User Guide/User Guide/Basic Concepts and Features/Notes/Printing & Exporting as PDF.md @@ -24,6 +24,9 @@ On the desktop application of Trilium it is possible to export a note as PDF. On To print a note, select the ![](1_Printing%20&%20Exporting%20as%20PD.png) button to the right of the note and select _Export as PDF_. Afterwards you will be prompted to select where to save the PDF file. +> [!TIP] +> Although direct export as PDF is not available in the browser version of the application, it's still possible to generate a PDF by selecting the _Print_ option instead and selecting “Save to PDF” as the printer (depending on the browser). Generally, Mozilla Firefox has better printing capabilities. + ### Automatic opening of the file When the PDF is exported, it is automatically opened with the system default application for easy preview. From 8fc7a202200e780bef777e35e8afa20dfdacec7f Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Mon, 20 Oct 2025 20:24:43 +0300 Subject: [PATCH 100/103] fix(client/import): file remains from previous instance (closes #7428) --- apps/client/src/widgets/dialogs/import.tsx | 11 +++++++---- .../src/widgets/dialogs/upload_attachments.tsx | 9 ++++++--- apps/client/src/widgets/react/FormFileUpload.tsx | 15 ++++++++++----- 3 files changed, 23 insertions(+), 12 deletions(-) diff --git a/apps/client/src/widgets/dialogs/import.tsx b/apps/client/src/widgets/dialogs/import.tsx index a54a01573..c041511d4 100644 --- a/apps/client/src/widgets/dialogs/import.tsx +++ b/apps/client/src/widgets/dialogs/import.tsx @@ -37,7 +37,7 @@ export default function ImportDialog() { onSubmit={async () => { if (!files || !parentNoteId) { return; - } + } const options: UploadFilesOptions = { safeImport: boolToString(safeImport), @@ -51,7 +51,10 @@ export default function ImportDialog() { setShown(false); await importService.uploadFiles("notes", parentNoteId, Array.from(files), options); }} - onHidden={() => setShown(false)} + onHidden={() => { + setShown(false); + setFiles(null); + }} footer={