From 8b0d4e5c3b39a8625cb70d411aaae14916de5f98 Mon Sep 17 00:00:00 2001 From: "Andreas H." Date: Sat, 29 Nov 2025 18:42:52 +0100 Subject: [PATCH 01/73] Translated using Weblate (German) Currently translated at 100.0% (152 of 152 strings) Translation: Trilium Notes/Website Translate-URL: https://hosted.weblate.org/projects/trilium/website/de/ --- apps/website/src/translations/de/translation.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/website/src/translations/de/translation.json b/apps/website/src/translations/de/translation.json index 620eefd52..07737e106 100644 --- a/apps/website/src/translations/de/translation.json +++ b/apps/website/src/translations/de/translation.json @@ -21,7 +21,7 @@ "note_structure_description": "Notizen lassen sich hierarchisch anordnen. Ordner sind nicht nötig, da jede Notiz Unternotizen enthalten kann. Eine einzelne Notiz kann an mehreren Stellen in der Hierarchie hinzugefügt werden.", "hoisting_description": "Trennen Sie Ihre persönlichen und beruflichen Notizen ganz einfach, indem Sie sie in einem Arbeitsbereich gruppieren. Dadurch wird Ihre Notizstruktur so fokussiert, dass nur ein bestimmter Satz von Notizen angezeigt wird.", "hoisting_title": "Arbeitsbereiche und Fokusansicht", - "attributes_description": "Nutzen Sie Verbindungen zwischen Notizen oder fügen Sie Labels hinzu, um die Kategorisierung zu erleichtern. Mit hervorgehobenen („promoted“) Attributen können Sie strukturierte Informationen erfassen, die sich direkt in Tabellen und Boards verwenden lassen." + "attributes_description": "Verwenden Sie Beziehungen zwischen Notizen oder fügen Sie Beschriftungen hinzu, um die Kategorisierung zu vereinfachen. Verwenden Sie hervorgehobene Attribute, um strukturierte Informationen einzugeben, die in Tabellen und Boards verwendet werden können." }, "productivity_benefits": { "revisions_title": "Notizrevisionen", From 8e1d796870eeafe627953aaeb30a448a7d02cc8b Mon Sep 17 00:00:00 2001 From: pythaac Date: Sat, 29 Nov 2025 15:31:38 +0100 Subject: [PATCH 02/73] Translated using Weblate (Korean) Currently translated at 44.7% (68 of 152 strings) Translation: Trilium Notes/Website Translate-URL: https://hosted.weblate.org/projects/trilium/website/ko/ --- apps/website/src/translations/ko/translation.json | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/apps/website/src/translations/ko/translation.json b/apps/website/src/translations/ko/translation.json index 75fa485e7..718f3444b 100644 --- a/apps/website/src/translations/ko/translation.json +++ b/apps/website/src/translations/ko/translation.json @@ -87,6 +87,8 @@ "description_arm64": "ARM 기반 리눅스 배포판에서 aarch64 아키텍처와 호환됩니다." }, "note_types": { - "text_title": "텍스트 노트" + "text_title": "텍스트 노트", + "text_description": "노트는 WYSIWYG 편집기를 사용하며 표, 이미지, 수학 표현식, 구문 강조 기능의 코드 블록을 지원합니다. 특수문자를 사용한 마크다운 유사 구문이나 슬래시(/) 명령으로 텍스트 서식을 빠르게 지정할 수 있습니다.", + "code_title": "코드 노트" } } From 9a76a9069cc057c0aa41086e65432c268882b42d Mon Sep 17 00:00:00 2001 From: Hosted Weblate Date: Sat, 29 Nov 2025 20:01:40 +0100 Subject: [PATCH 03/73] Update translation files Updated by "Cleanup translation files" add-on in Weblate. Translation: Trilium Notes/Client Translate-URL: https://hosted.weblate.org/projects/trilium/client/ --- apps/client/src/translations/cn/translation.json | 1 - apps/client/src/translations/de/translation.json | 1 - apps/client/src/translations/es/translation.json | 1 - apps/client/src/translations/it/translation.json | 1 - apps/client/src/translations/ja/translation.json | 1 - apps/client/src/translations/ro/translation.json | 1 - apps/client/src/translations/tw/translation.json | 1 - 7 files changed, 7 deletions(-) diff --git a/apps/client/src/translations/cn/translation.json b/apps/client/src/translations/cn/translation.json index 6c82a00af..4cbe6ab50 100644 --- a/apps/client/src/translations/cn/translation.json +++ b/apps/client/src/translations/cn/translation.json @@ -2098,7 +2098,6 @@ "read-only-info": { "read-only-note": "当前正在查看一个只读笔记。", "auto-read-only-note": "这条笔记以只读模式显示便于快速加载。", - "auto-read-only-learn-more": "了解更多", "edit-note": "编辑笔记" }, "note-color": { diff --git a/apps/client/src/translations/de/translation.json b/apps/client/src/translations/de/translation.json index 49e4ad635..9fa06df4c 100644 --- a/apps/client/src/translations/de/translation.json +++ b/apps/client/src/translations/de/translation.json @@ -2097,7 +2097,6 @@ "read-only-info": { "read-only-note": "Aktuelle Notiz wird im Lese-Modus angezeigt.", "auto-read-only-note": "Diese Notiz wird im Nur-Lesen-Modus angezeigt, um ein schnelleres Laden zu ermöglichen.", - "auto-read-only-learn-more": "Mehr erfahren", "edit-note": "Notiz bearbeiten" }, "calendar_view": { diff --git a/apps/client/src/translations/es/translation.json b/apps/client/src/translations/es/translation.json index 54b548edc..ce5632e1d 100644 --- a/apps/client/src/translations/es/translation.json +++ b/apps/client/src/translations/es/translation.json @@ -2096,7 +2096,6 @@ "read-only-info": { "read-only-note": "Actualmente, está viendo una nota de solo lectura.", "auto-read-only-note": "Esta nota se muestra en modo de solo lectura para una carga más rápida.", - "auto-read-only-learn-more": "Para saber más", "edit-note": "Editar nota" }, "calendar_view": { diff --git a/apps/client/src/translations/it/translation.json b/apps/client/src/translations/it/translation.json index 77f7ce444..a2a61b716 100644 --- a/apps/client/src/translations/it/translation.json +++ b/apps/client/src/translations/it/translation.json @@ -2092,7 +2092,6 @@ "read-only-info": { "read-only-note": "Stai visualizzando una nota di sola lettura.", "auto-read-only-note": "Questa nota viene visualizzata in modalità di sola lettura per un caricamento più rapido.", - "auto-read-only-learn-more": "Per saperne di più", "edit-note": "Modifica nota" }, "calendar_view": { diff --git a/apps/client/src/translations/ja/translation.json b/apps/client/src/translations/ja/translation.json index 9896920d0..ab6c509dd 100644 --- a/apps/client/src/translations/ja/translation.json +++ b/apps/client/src/translations/ja/translation.json @@ -2098,7 +2098,6 @@ "read-only-info": { "read-only-note": "現在、読み取り専用のノートを表示しています。", "auto-read-only-note": "このノートは読み込みを高速化するために読み取り専用モードで表示されています。", - "auto-read-only-learn-more": "さらに詳しく", "edit-note": "ノートを編集" }, "note-color": { diff --git a/apps/client/src/translations/ro/translation.json b/apps/client/src/translations/ro/translation.json index e550f796a..d0eff357f 100644 --- a/apps/client/src/translations/ro/translation.json +++ b/apps/client/src/translations/ro/translation.json @@ -2097,7 +2097,6 @@ "read-only-info": { "read-only-note": "Vizualizați o notiță în modul doar în citire.", "auto-read-only-note": "Această notiță este afișată în modul doar în citire din motive de performanță.", - "auto-read-only-learn-more": "Mai multe detalii", "edit-note": "Editează notița" }, "calendar_view": { diff --git a/apps/client/src/translations/tw/translation.json b/apps/client/src/translations/tw/translation.json index 01f8198e3..5d7463c45 100644 --- a/apps/client/src/translations/tw/translation.json +++ b/apps/client/src/translations/tw/translation.json @@ -2098,7 +2098,6 @@ "read-only-info": { "read-only-note": "目前正在檢視唯讀筆記。", "auto-read-only-note": "此筆記以唯讀模式顯示以加快載入速度。", - "auto-read-only-learn-more": "了解更多", "edit-note": "編輯筆記" }, "note-color": { From cef242a9ce776c2c91ecc5f0f5ed0e0897b6b56c Mon Sep 17 00:00:00 2001 From: Adorian Doran Date: Sun, 30 Nov 2025 00:55:34 +0200 Subject: [PATCH 04/73] style/button group: fix the appearance of the active button --- apps/client/src/stylesheets/style.css | 5 ----- apps/client/src/stylesheets/theme-next-dark.css | 3 +++ apps/client/src/stylesheets/theme-next-light.css | 3 +++ apps/client/src/stylesheets/theme-next/forms.css | 8 ++++++++ 4 files changed, 14 insertions(+), 5 deletions(-) diff --git a/apps/client/src/stylesheets/style.css b/apps/client/src/stylesheets/style.css index e3372b4af..ea55db041 100644 --- a/apps/client/src/stylesheets/style.css +++ b/apps/client/src/stylesheets/style.css @@ -592,11 +592,6 @@ button.btn-sm { color: var(--left-pane-text-color); } -.btn.active:not(.btn-primary) { - background-color: var(--button-disabled-background-color) !important; - opacity: 0.4; -} - .ck.ck-block-toolbar-button { transform: translateX(7px); color: var(--muted-text-color); diff --git a/apps/client/src/stylesheets/theme-next-dark.css b/apps/client/src/stylesheets/theme-next-dark.css index fbb8d1546..72271ad2e 100644 --- a/apps/client/src/stylesheets/theme-next-dark.css +++ b/apps/client/src/stylesheets/theme-next-dark.css @@ -41,6 +41,9 @@ --cmd-button-keyboard-shortcut-color: white; --cmd-button-disabled-opacity: 0.5; + --button-group-active-button-background: #ffffff4e; + --button-group-active-button-text-color: white; + --icon-button-color: currentColor; --icon-button-hover-background: var(--hover-item-background-color); --icon-button-hover-color: var(--hover-item-text-color); diff --git a/apps/client/src/stylesheets/theme-next-light.css b/apps/client/src/stylesheets/theme-next-light.css index f736538a8..780d519f7 100644 --- a/apps/client/src/stylesheets/theme-next-light.css +++ b/apps/client/src/stylesheets/theme-next-light.css @@ -41,6 +41,9 @@ --cmd-button-keyboard-shortcut-color: black; --cmd-button-disabled-opacity: 0.5; + --button-group-active-button-background: #00000026; + --button-group-active-button-text-color: black; + --icon-button-color: currentColor; --icon-button-hover-background: var(--hover-item-background-color); --icon-button-hover-color: var(--hover-item-text-color); diff --git a/apps/client/src/stylesheets/theme-next/forms.css b/apps/client/src/stylesheets/theme-next/forms.css index b5991b4d7..fb53f167d 100644 --- a/apps/client/src/stylesheets/theme-next/forms.css +++ b/apps/client/src/stylesheets/theme-next/forms.css @@ -146,6 +146,14 @@ button.btn.btn-success kbd { outline: 2px solid var(--input-focus-outline-color); } +/* Button groups */ + +/* Active button */ +:root .btn-group button.btn.active { + background-color: var(--button-group-active-button-background); + color: var(--button-group-active-button-text-color); +} + /* * Input boxes */ From 6735b257b452455223f3faf3097f3684180fff63 Mon Sep 17 00:00:00 2001 From: Adorian Doran Date: Sun, 30 Nov 2025 01:09:07 +0200 Subject: [PATCH 05/73] style/promoted color attributes: fix the layout on narrow width --- apps/client/src/stylesheets/theme-next/shell.css | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/apps/client/src/stylesheets/theme-next/shell.css b/apps/client/src/stylesheets/theme-next/shell.css index 83517e9ad..77d2a9ba6 100644 --- a/apps/client/src/stylesheets/theme-next/shell.css +++ b/apps/client/src/stylesheets/theme-next/shell.css @@ -1448,6 +1448,14 @@ div.promoted-attribute-cell .multiplicity:has(span) span { justify-content: center; } +div.promoted-attribute-cell.promoted-attribute-label-color { + justify-content: space-between; +} + +div.promoted-attribute-cell.promoted-attribute-label-color .input-group { + width: auto; +} + /* * Floating buttons */ From 07fb5ab0178092ceda4cb93959089317e9a4c130 Mon Sep 17 00:00:00 2001 From: Adorian Doran Date: Sun, 30 Nov 2025 01:44:20 +0200 Subject: [PATCH 06/73] client/dialogs: add support for custom title bar buttons --- .../src/stylesheets/theme-next/dialogs.css | 8 ++++++-- apps/client/src/widgets/react/Modal.tsx | 20 ++++++++++++++++++- 2 files changed, 25 insertions(+), 3 deletions(-) diff --git a/apps/client/src/stylesheets/theme-next/dialogs.css b/apps/client/src/stylesheets/theme-next/dialogs.css index ed617991c..768dc5530 100644 --- a/apps/client/src/stylesheets/theme-next/dialogs.css +++ b/apps/client/src/stylesheets/theme-next/dialogs.css @@ -25,6 +25,7 @@ .modal .modal-header .btn-close, .modal .modal-header .help-button, +.modal .modal-header .custom-title-bar-button, #toast-container .toast .toast-header .btn-close { display: flex; justify-content: center; @@ -55,15 +56,17 @@ font-family: boxicons; } -.modal .modal-header .help-button { +.modal .modal-header .help-button, +.modal .modal-header .custom-title-bar-button { margin-inline-end: 0; - font-size: calc(var(--modal-control-button-size) * .75); + font-size: calc(var(--modal-control-button-size) * .65); font-family: unset; font-weight: bold; } .modal .modal-header .btn-close:hover, .modal .modal-header .help-button:hover, +.modal .modal-header .custom-title-bar-button:hover, #toast-container .toast .toast-header .btn-close:hover { background: var(--modal-control-button-hover-background); color: var(--modal-control-button-hover-color); @@ -71,6 +74,7 @@ .modal .modal-header .btn-close:active, .modal .modal-header .help-button:active, +.modal .modal-header .custom-title-bar-button:active, #toast-container .toast .toast-header .btn-close:active { transform: scale(.85); } diff --git a/apps/client/src/widgets/react/Modal.tsx b/apps/client/src/widgets/react/Modal.tsx index 9c1e4a230..d28244ac0 100644 --- a/apps/client/src/widgets/react/Modal.tsx +++ b/apps/client/src/widgets/react/Modal.tsx @@ -1,3 +1,4 @@ +import clsx from "clsx"; import { useEffect, useRef, useMemo } from "preact/hooks"; import { t } from "../../services/i18n"; import { ComponentChildren } from "preact"; @@ -7,9 +8,16 @@ import { Modal as BootstrapModal } from "bootstrap"; import { memo } from "preact/compat"; import { useSyncedRef } from "./hooks"; +interface CustomTitleBarButton { + title: string; + iconClassName: string; + onClick: () => void; +} + interface ModalProps { className: string; title: string | ComponentChildren; + customTitleBarButtons?: (CustomTitleBarButton | null)[]; size: "xl" | "lg" | "md" | "sm"; children: ComponentChildren; /** @@ -72,7 +80,7 @@ interface ModalProps { noFocus?: boolean; } -export default function Modal({ children, className, size, title, header, footer, footerStyle, footerAlignment, onShown, onSubmit, helpPageId, minWidth, maxWidth, zIndex, scrollable, onHidden: onHidden, modalRef: externalModalRef, formRef, bodyStyle, show, stackable, keepInDom, noFocus }: ModalProps) { +export default function Modal({ children, className, size, title, customTitleBarButtons: titleBarButtons, header, footer, footerStyle, footerAlignment, onShown, onSubmit, helpPageId, minWidth, maxWidth, zIndex, scrollable, onHidden: onHidden, modalRef: externalModalRef, formRef, bodyStyle, show, stackable, keepInDom, noFocus }: ModalProps) { const modalRef = useSyncedRef(externalModalRef); const modalInstanceRef = useRef(); const elementToFocus = useRef(); @@ -148,7 +156,17 @@ export default function Modal({ children, className, size, title, header, footer {helpPageId && ( )} + + {titleBarButtons?.filter((b) => b !== null).map((titleBarButton) => ( + + ))} + + {onSubmit ? ( From c8431181c813693f94c00c3e9ea39c78142dda21 Mon Sep 17 00:00:00 2001 From: Adorian Doran Date: Sun, 30 Nov 2025 01:52:55 +0200 Subject: [PATCH 07/73] client/dialogs/custom title bar buttons: tweak --- apps/client/src/stylesheets/theme-next/dialogs.css | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/client/src/stylesheets/theme-next/dialogs.css b/apps/client/src/stylesheets/theme-next/dialogs.css index 768dc5530..ffe6af9a5 100644 --- a/apps/client/src/stylesheets/theme-next/dialogs.css +++ b/apps/client/src/stylesheets/theme-next/dialogs.css @@ -59,7 +59,7 @@ .modal .modal-header .help-button, .modal .modal-header .custom-title-bar-button { margin-inline-end: 0; - font-size: calc(var(--modal-control-button-size) * .65); + font-size: calc(var(--modal-control-button-size) * .70); font-family: unset; font-weight: bold; } From f5e3df0cd21cb025d94049ae8f63394e2fd1e463 Mon Sep 17 00:00:00 2001 From: Adorian Doran Date: Sun, 30 Nov 2025 01:54:28 +0200 Subject: [PATCH 08/73] client/quick edit: add placeholder for "open in full editor" custom title bar button --- apps/client/src/widgets/dialogs/PopupEditor.tsx | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/apps/client/src/widgets/dialogs/PopupEditor.tsx b/apps/client/src/widgets/dialogs/PopupEditor.tsx index 1a065c05f..0d158f828 100644 --- a/apps/client/src/widgets/dialogs/PopupEditor.tsx +++ b/apps/client/src/widgets/dialogs/PopupEditor.tsx @@ -60,6 +60,11 @@ export default function PopupEditor() { } + customTitleBarButtons={[{ + iconClassName: "bx-expand-alt", + title: "Switch to full editor", + onClick: () => {/* TO DO */} + }]} className="popup-editor-dialog" size="lg" show={shown} From 124ef640b1f874c45a1fc23f473e56f02c743653 Mon Sep 17 00:00:00 2001 From: Adorian Doran Date: Sun, 30 Nov 2025 02:04:40 +0200 Subject: [PATCH 09/73] client/quick edit: tweak layout --- apps/client/src/widgets/dialogs/PopupEditor.css | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/apps/client/src/widgets/dialogs/PopupEditor.css b/apps/client/src/widgets/dialogs/PopupEditor.css index 80e8b3e70..99d6cafff 100644 --- a/apps/client/src/widgets/dialogs/PopupEditor.css +++ b/apps/client/src/widgets/dialogs/PopupEditor.css @@ -33,8 +33,8 @@ body.mobile .modal.popup-editor-dialog .modal-dialog { align-items: center; } -.modal.popup-editor-dialog .modal-header .title-row > * { - margin: 5px; +.modal.popup-editor-dialog .modal-header .note-title-widget { + margin-top: 8px; } .modal.popup-editor-dialog .modal-body { @@ -66,8 +66,13 @@ body.mobile .modal.popup-editor-dialog .modal-dialog { background-color: transparent; } +.modal.popup-editor-dialog div.promoted-attributes-container { + margin-block: 0; +} + .modal.popup-editor-dialog .classic-toolbar-widget { position: sticky; + margin-inline: 8px; top: 0; inset-inline-start: 0; inset-inline-end: 0; From cc71f15700834d3d7636d6ff6a58b3bc8685e03f Mon Sep 17 00:00:00 2001 From: Adorian Doran Date: Sun, 30 Nov 2025 02:17:43 +0200 Subject: [PATCH 10/73] client/quick edit: remove fixed toolbar transparency --- apps/client/src/widgets/dialogs/PopupEditor.css | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/client/src/widgets/dialogs/PopupEditor.css b/apps/client/src/widgets/dialogs/PopupEditor.css index 99d6cafff..41a1d8736 100644 --- a/apps/client/src/widgets/dialogs/PopupEditor.css +++ b/apps/client/src/widgets/dialogs/PopupEditor.css @@ -76,7 +76,7 @@ body.mobile .modal.popup-editor-dialog .modal-dialog { top: 0; inset-inline-start: 0; inset-inline-end: 0; - background: transparent; + background: var(--modal-background-color); z-index: 998; align-items: flex-start; } From b8748b856a84e724e91193061a6376b114b879ba Mon Sep 17 00:00:00 2001 From: Adorian Doran Date: Sun, 30 Nov 2025 02:34:09 +0200 Subject: [PATCH 11/73] client/note menu: use proper style for development-only actions section header --- apps/client/src/widgets/ribbon/NoteActions.tsx | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/apps/client/src/widgets/ribbon/NoteActions.tsx b/apps/client/src/widgets/ribbon/NoteActions.tsx index bc191b5d0..7db764c06 100644 --- a/apps/client/src/widgets/ribbon/NoteActions.tsx +++ b/apps/client/src/widgets/ribbon/NoteActions.tsx @@ -1,5 +1,5 @@ import { ConvertToAttachmentResponse } from "@triliumnext/commons"; -import { FormDropdownDivider, FormListItem } from "../react/FormList"; +import { FormDropdownDivider, FormListHeader, FormListItem } from "../react/FormList"; import { isElectron as getIsElectron, isMac as getIsMac } from "../../services/utils"; import { ParentComponent } from "../react/react_utils"; import { t } from "../../services/i18n" @@ -113,8 +113,7 @@ function NoteContextMenu({ note, noteContext }: { note: FNote, noteContext?: Not function DevelopmentActions({ note }: { note: FNote }) { return ( <> - - Development-only Actions + window.open(`/?print=#root/${note.noteId}`, "_blank")} From 732494dfc51286926d86d49a73d3915a4aa22ef9 Mon Sep 17 00:00:00 2001 From: Adorian Doran Date: Sun, 30 Nov 2025 02:54:51 +0200 Subject: [PATCH 12/73] client/keyboard shortcuts cheatsheet: add an edit button --- apps/client/src/translations/en/translation.json | 1 + apps/client/src/widgets/dialogs/help.tsx | 7 ++++++- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/apps/client/src/translations/en/translation.json b/apps/client/src/translations/en/translation.json index 8f6767d9a..514301594 100644 --- a/apps/client/src/translations/en/translation.json +++ b/apps/client/src/translations/en/translation.json @@ -112,6 +112,7 @@ }, "help": { "title": "Cheatsheet", + "editShortcuts": "Edit keyboard shortcuts", "noteNavigation": "Note navigation", "goUpDown": "go up/down in the list of notes", "collapseExpand": "collapse/expand node", diff --git a/apps/client/src/widgets/dialogs/help.tsx b/apps/client/src/widgets/dialogs/help.tsx index d5c2f695d..f6c0c96d6 100644 --- a/apps/client/src/widgets/dialogs/help.tsx +++ b/apps/client/src/widgets/dialogs/help.tsx @@ -1,7 +1,7 @@ import Modal from "../react/Modal.jsx"; import { t } from "../../services/i18n.js"; import { ComponentChildren } from "preact"; -import { CommandNames } from "../../components/app_context.js"; +import appContext, { CommandNames } from "../../components/app_context.js"; import RawHtml from "../react/RawHtml.jsx"; import { useEffect, useState } from "preact/hooks"; import keyboard_actions from "../../services/keyboard_actions.js"; @@ -14,6 +14,7 @@ export default function HelpDialog() { return ( setShown(false)} show={shown} > @@ -160,3 +161,7 @@ function Card({ title, children }: { title: string, children: ComponentChildren ) } + +function editShortcuts() { + appContext.tabManager.openContextWithNote("_optionsShortcuts", { activate: true }); +} \ No newline at end of file From 0cb5941be01bfad95ad63c889f6a2a360da5aa85 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sun, 30 Nov 2025 02:49:23 +0000 Subject: [PATCH 13/73] chore(deps): update dependency typedoc to v0.28.15 --- apps/build-docs/package.json | 2 +- pnpm-lock.yaml | 68 +++++++++++++++++------------------- 2 files changed, 34 insertions(+), 36 deletions(-) diff --git a/apps/build-docs/package.json b/apps/build-docs/package.json index 0ec82b83a..c2d4cd9fe 100644 --- a/apps/build-docs/package.json +++ b/apps/build-docs/package.json @@ -16,7 +16,7 @@ "fs-extra": "11.3.2", "react": "19.2.0", "react-dom": "19.2.0", - "typedoc": "0.28.14", + "typedoc": "0.28.15", "typedoc-plugin-missing-exports": "4.1.2" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 0dff9e3d7..3a7a310d2 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -149,11 +149,11 @@ importers: specifier: 19.2.0 version: 19.2.0(react@19.2.0) typedoc: - specifier: 0.28.14 - version: 0.28.14(typescript@5.9.3) + specifier: 0.28.15 + version: 0.28.15(typescript@5.9.3) typedoc-plugin-missing-exports: specifier: 4.1.2 - version: 4.1.2(typedoc@0.28.14(typescript@5.9.3)) + version: 4.1.2(typedoc@0.28.15(typescript@5.9.3)) apps/client: dependencies: @@ -3164,8 +3164,8 @@ packages: '@gar/promisify@1.1.3': resolution: {integrity: sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==} - '@gerrit0/mini-shiki@3.14.0': - resolution: {integrity: sha512-c5X8fwPLOtUS8TVdqhynz9iV0GlOtFUT1ppXYzUUlEXe4kbZ/mvMT8wXoT8kCwUka+zsiloq7sD3pZ3+QVTuNQ==} + '@gerrit0/mini-shiki@3.17.0': + resolution: {integrity: sha512-Bpf6WuFar20ZXL6qU6VpVl4bVQfyyYiX+6O4xrns4nkU3Mr8paeupDbS1HENpcLOYj7pN4Rkd/yCaPA0vQwKww==} '@hapi/hoek@9.3.0': resolution: {integrity: sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==} @@ -4701,17 +4701,17 @@ packages: '@selderee/plugin-htmlparser2@0.11.0': resolution: {integrity: sha512-P33hHGdldxGabLFjPPpaTxVolMrzrcegejx+0GxjrIb9Zv48D8yAIA/QTDR2dFl7Uz7urX8aX6+5bCZslr+gWQ==} - '@shikijs/engine-oniguruma@3.14.0': - resolution: {integrity: sha512-TNcYTYMbJyy+ZjzWtt0bG5y4YyMIWC2nyePz+CFMWqm+HnZZyy9SWMgo8Z6KBJVIZnx8XUXS8U2afO6Y0g1Oug==} + '@shikijs/engine-oniguruma@3.17.0': + resolution: {integrity: sha512-flSbHZAiOZDNTrEbULY8DLWavu/TyVu/E7RChpLB4WvKX4iHMfj80C6Hi3TjIWaQtHOW0KC6kzMcuB5TO1hZ8Q==} - '@shikijs/langs@3.14.0': - resolution: {integrity: sha512-DIB2EQY7yPX1/ZH7lMcwrK5pl+ZkP/xoSpUzg9YC8R+evRCCiSQ7yyrvEyBsMnfZq4eBzLzBlugMyTAf13+pzg==} + '@shikijs/langs@3.17.0': + resolution: {integrity: sha512-icmur2n5Ojb+HAiQu6NEcIIJ8oWDFGGEpiqSCe43539Sabpx7Y829WR3QuUW2zjTM4l6V8Sazgb3rrHO2orEAw==} - '@shikijs/themes@3.14.0': - resolution: {integrity: sha512-fAo/OnfWckNmv4uBoUu6dSlkcBc+SA1xzj5oUSaz5z3KqHtEbUypg/9xxgJARtM6+7RVm0Q6Xnty41xA1ma1IA==} + '@shikijs/themes@3.17.0': + resolution: {integrity: sha512-/xEizMHLBmMHwtx4JuOkRf3zwhWD2bmG5BRr0IPjpcWpaq4C3mYEuTk/USAEglN0qPrTwEHwKVpSu/y2jhferA==} - '@shikijs/types@3.14.0': - resolution: {integrity: sha512-bQGgC6vrY8U/9ObG1Z/vTro+uclbjjD/uG58RvfxKZVD5p9Yc1ka3tVyEFy7BNJLzxuWyHH5NWynP9zZZS59eQ==} + '@shikijs/types@3.17.0': + resolution: {integrity: sha512-wjLVfutYWVUnxAjsWEob98xgyaGv0dTEnMZDruU5mRjVN7szcGOfgO+997W2yR6odp+1PtSBNeSITRRTfUzK/g==} '@shikijs/vscode-textmate@10.0.2': resolution: {integrity: sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg==} @@ -14043,8 +14043,8 @@ packages: peerDependencies: typedoc: ^0.28.1 - typedoc@0.28.14: - resolution: {integrity: sha512-ftJYPvpVfQvFzpkoSfHLkJybdA/geDJ8BGQt/ZnkkhnBYoYW6lBgPQXu6vqLxO4X75dA55hX8Af847H5KXlEFA==} + typedoc@0.28.15: + resolution: {integrity: sha512-mw2/2vTL7MlT+BVo43lOsufkkd2CJO4zeOSuWQQsiXoV2VuEn7f6IZp2jsUDPmBMABpgR0R5jlcJ2OGEFYmkyg==} engines: {node: '>= 18', pnpm: '>= 10'} hasBin: true peerDependencies: @@ -16042,8 +16042,6 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.2.0 ckeditor5: 47.2.0(patch_hash=8331a09d41443b39ea1c784daaccfeb0da4f9065ed556e7de92e9c77edd9eb41) es-toolkit: 1.39.5 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-editor-multi-root@47.2.0': dependencies: @@ -16093,6 +16091,8 @@ snapshots: '@ckeditor/ckeditor5-core': 47.2.0 '@ckeditor/ckeditor5-engine': 47.2.0 '@ckeditor/ckeditor5-utils': 47.2.0 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-essentials@47.2.0': dependencies: @@ -16749,8 +16749,6 @@ snapshots: '@ckeditor/ckeditor5-icons': 47.2.0 '@ckeditor/ckeditor5-ui': 47.2.0 '@ckeditor/ckeditor5-utils': 47.2.0 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-upload@47.2.0': dependencies: @@ -18056,12 +18054,12 @@ snapshots: '@gar/promisify@1.1.3': {} - '@gerrit0/mini-shiki@3.14.0': + '@gerrit0/mini-shiki@3.17.0': dependencies: - '@shikijs/engine-oniguruma': 3.14.0 - '@shikijs/langs': 3.14.0 - '@shikijs/themes': 3.14.0 - '@shikijs/types': 3.14.0 + '@shikijs/engine-oniguruma': 3.17.0 + '@shikijs/langs': 3.17.0 + '@shikijs/themes': 3.17.0 + '@shikijs/types': 3.17.0 '@shikijs/vscode-textmate': 10.0.2 '@hapi/hoek@9.3.0': {} @@ -19777,20 +19775,20 @@ snapshots: domhandler: 5.0.3 selderee: 0.11.0 - '@shikijs/engine-oniguruma@3.14.0': + '@shikijs/engine-oniguruma@3.17.0': dependencies: - '@shikijs/types': 3.14.0 + '@shikijs/types': 3.17.0 '@shikijs/vscode-textmate': 10.0.2 - '@shikijs/langs@3.14.0': + '@shikijs/langs@3.17.0': dependencies: - '@shikijs/types': 3.14.0 + '@shikijs/types': 3.17.0 - '@shikijs/themes@3.14.0': + '@shikijs/themes@3.17.0': dependencies: - '@shikijs/types': 3.14.0 + '@shikijs/types': 3.17.0 - '@shikijs/types@3.14.0': + '@shikijs/types@3.17.0': dependencies: '@shikijs/vscode-textmate': 10.0.2 '@types/hast': 3.0.4 @@ -31446,13 +31444,13 @@ snapshots: typedarray@0.0.6: {} - typedoc-plugin-missing-exports@4.1.2(typedoc@0.28.14(typescript@5.9.3)): + typedoc-plugin-missing-exports@4.1.2(typedoc@0.28.15(typescript@5.9.3)): dependencies: - typedoc: 0.28.14(typescript@5.9.3) + typedoc: 0.28.15(typescript@5.9.3) - typedoc@0.28.14(typescript@5.9.3): + typedoc@0.28.15(typescript@5.9.3): dependencies: - '@gerrit0/mini-shiki': 3.14.0 + '@gerrit0/mini-shiki': 3.17.0 lunr: 2.3.9 markdown-it: 14.1.0 minimatch: 9.0.5 From d676084cb3510b310393fe0a33536fa8a28478e7 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sun, 30 Nov 2025 02:49:59 +0000 Subject: [PATCH 14/73] chore(deps): update dependency webdriverio to v9.21.0 --- packages/ckeditor5-admonition/package.json | 2 +- packages/ckeditor5-footnotes/package.json | 2 +- .../ckeditor5-keyboard-marker/package.json | 2 +- packages/ckeditor5-math/package.json | 2 +- packages/ckeditor5-mermaid/package.json | 2 +- pnpm-lock.yaml | 114 +++++++++--------- 6 files changed, 62 insertions(+), 62 deletions(-) diff --git a/packages/ckeditor5-admonition/package.json b/packages/ckeditor5-admonition/package.json index 6b8f361eb..75d7e844f 100644 --- a/packages/ckeditor5-admonition/package.json +++ b/packages/ckeditor5-admonition/package.json @@ -39,7 +39,7 @@ "typescript": "5.9.3", "vite-plugin-svgo": "~2.0.0", "vitest": "4.0.14", - "webdriverio": "9.20.1" + "webdriverio": "9.21.0" }, "peerDependencies": { "ckeditor5": "47.2.0" diff --git a/packages/ckeditor5-footnotes/package.json b/packages/ckeditor5-footnotes/package.json index c9d96cc20..af4735af1 100644 --- a/packages/ckeditor5-footnotes/package.json +++ b/packages/ckeditor5-footnotes/package.json @@ -40,7 +40,7 @@ "typescript": "5.9.3", "vite-plugin-svgo": "~2.0.0", "vitest": "4.0.14", - "webdriverio": "9.20.1" + "webdriverio": "9.21.0" }, "peerDependencies": { "ckeditor5": "47.2.0" diff --git a/packages/ckeditor5-keyboard-marker/package.json b/packages/ckeditor5-keyboard-marker/package.json index 23fc474d9..459ba9bf2 100644 --- a/packages/ckeditor5-keyboard-marker/package.json +++ b/packages/ckeditor5-keyboard-marker/package.json @@ -42,7 +42,7 @@ "typescript": "5.9.3", "vite-plugin-svgo": "~2.0.0", "vitest": "4.0.14", - "webdriverio": "9.20.1" + "webdriverio": "9.21.0" }, "peerDependencies": { "ckeditor5": "47.2.0" diff --git a/packages/ckeditor5-math/package.json b/packages/ckeditor5-math/package.json index ab00a473e..aa60cfaa3 100644 --- a/packages/ckeditor5-math/package.json +++ b/packages/ckeditor5-math/package.json @@ -43,7 +43,7 @@ "typescript": "5.9.3", "vite-plugin-svgo": "~2.0.0", "vitest": "4.0.14", - "webdriverio": "9.20.1" + "webdriverio": "9.21.0" }, "peerDependencies": { "ckeditor5": "47.2.0" diff --git a/packages/ckeditor5-mermaid/package.json b/packages/ckeditor5-mermaid/package.json index 8cad9319c..1e79fbf54 100644 --- a/packages/ckeditor5-mermaid/package.json +++ b/packages/ckeditor5-mermaid/package.json @@ -42,7 +42,7 @@ "typescript": "5.9.3", "vite-plugin-svgo": "~2.0.0", "vitest": "4.0.14", - "webdriverio": "9.20.1" + "webdriverio": "9.21.0" }, "peerDependencies": { "ckeditor5": "47.2.0" diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 0dff9e3d7..45462c6d7 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -57,7 +57,7 @@ importers: version: 24.10.1 '@vitest/browser-webdriverio': specifier: 4.0.14 - version: 4.0.14(bufferutil@4.0.9)(msw@2.7.5(@types/node@24.10.1)(typescript@5.9.3))(utf-8-validate@6.0.5)(vite@7.2.4(@types/node@24.10.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))(vitest@4.0.14)(webdriverio@9.20.1(bufferutil@4.0.9)(utf-8-validate@6.0.5)) + version: 4.0.14(bufferutil@4.0.9)(msw@2.7.5(@types/node@24.10.1)(typescript@5.9.3))(utf-8-validate@6.0.5)(vite@7.2.4(@types/node@24.10.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))(vitest@4.0.14)(webdriverio@9.21.0(bufferutil@4.0.9)(utf-8-validate@6.0.5)) '@vitest/coverage-v8': specifier: 4.0.14 version: 4.0.14(@vitest/browser@4.0.14(bufferutil@4.0.9)(msw@2.7.5(@types/node@24.10.1)(typescript@5.9.3))(utf-8-validate@6.0.5)(vite@7.2.4(@types/node@24.10.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))(vitest@4.0.14))(vitest@4.0.14) @@ -933,8 +933,8 @@ importers: specifier: 4.0.14 version: 4.0.14(@opentelemetry/api@1.9.0)(@types/node@24.10.1)(@vitest/browser-webdriverio@4.0.14)(@vitest/ui@4.0.14)(happy-dom@20.0.11)(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.1)(msw@2.7.5(@types/node@24.10.1)(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.1 - version: 9.20.1(bufferutil@4.0.9)(utf-8-validate@6.0.5) + specifier: 9.21.0 + version: 9.21.0(bufferutil@4.0.9)(utf-8-validate@6.0.5) packages/ckeditor5-footnotes: devDependencies: @@ -993,8 +993,8 @@ importers: specifier: 4.0.14 version: 4.0.14(@opentelemetry/api@1.9.0)(@types/node@24.10.1)(@vitest/browser-webdriverio@4.0.14)(@vitest/ui@4.0.14)(happy-dom@20.0.11)(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.1)(msw@2.7.5(@types/node@24.10.1)(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.1 - version: 9.20.1(bufferutil@4.0.9)(utf-8-validate@6.0.5) + specifier: 9.21.0 + version: 9.21.0(bufferutil@4.0.9)(utf-8-validate@6.0.5) packages/ckeditor5-keyboard-marker: devDependencies: @@ -1053,8 +1053,8 @@ importers: specifier: 4.0.14 version: 4.0.14(@opentelemetry/api@1.9.0)(@types/node@24.10.1)(@vitest/browser-webdriverio@4.0.14)(@vitest/ui@4.0.14)(happy-dom@20.0.11)(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.1)(msw@2.7.5(@types/node@24.10.1)(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.1 - version: 9.20.1(bufferutil@4.0.9)(utf-8-validate@6.0.5) + specifier: 9.21.0 + version: 9.21.0(bufferutil@4.0.9)(utf-8-validate@6.0.5) packages/ckeditor5-math: dependencies: @@ -1120,8 +1120,8 @@ importers: specifier: 4.0.14 version: 4.0.14(@opentelemetry/api@1.9.0)(@types/node@24.10.1)(@vitest/browser-webdriverio@4.0.14)(@vitest/ui@4.0.14)(happy-dom@20.0.11)(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.1)(msw@2.7.5(@types/node@24.10.1)(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.1 - version: 9.20.1(bufferutil@4.0.9)(utf-8-validate@6.0.5) + specifier: 9.21.0 + version: 9.21.0(bufferutil@4.0.9)(utf-8-validate@6.0.5) packages/ckeditor5-mermaid: dependencies: @@ -1187,8 +1187,8 @@ importers: specifier: 4.0.14 version: 4.0.14(@opentelemetry/api@1.9.0)(@types/node@24.10.1)(@vitest/browser-webdriverio@4.0.14)(@vitest/ui@4.0.14)(happy-dom@20.0.11)(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.1)(msw@2.7.5(@types/node@24.10.1)(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.1 - version: 9.20.1(bufferutil@4.0.9)(utf-8-validate@6.0.5) + specifier: 9.21.0 + version: 9.21.0(bufferutil@4.0.9)(utf-8-validate@6.0.5) packages/codemirror: dependencies: @@ -5449,9 +5449,6 @@ packages: '@types/node@16.9.1': resolution: {integrity: sha512-QpLcX9ZSsq3YYUUnD3nFDY8H7wctAhQj/TFKL8Ya8v5fMm3CFXxo8zStsLAl780ltoYoo1WvKUVGBQK+1ifr7g==} - '@types/node@20.19.24': - resolution: {integrity: sha512-FE5u0ezmi6y9OZEzlJfg37mqqf6ZDSF2V/NLjUyGrR9uTZ7Sb9F7bLNZ03S4XVUNRWGA7Ck4c1kK+YnuWjl+DA==} - '@types/node@20.19.25': resolution: {integrity: sha512-ZsJzA5thDQMSQO788d7IocwwQbI8B5OPzmqNvpf3NY/+MHDAS759Wo0gd2WQeXYt5AAAQjzcrTVC6SKCuYgoCQ==} @@ -5852,8 +5849,8 @@ packages: '@vue/shared@3.5.14': resolution: {integrity: sha512-oXTwNxVfc9EtP1zzXAlSlgARLXNC84frFYkS0HHz0h3E4WZSP9sywqjqzGCP9Y34M8ipNmd380pVgmMuwELDyQ==} - '@wdio/config@9.20.1': - resolution: {integrity: sha512-npl2J+rjCDJPjVySgWpciOyhWddn6s7n5sepKXLR7x1ADQHl5zUFv1dHD3jx4OQ9l6lrGQSPaofuz+7e9mu+vg==} + '@wdio/config@9.21.0': + resolution: {integrity: sha512-8TP5/q+Agjc43LET1f0LhLmuEI803O3QtZEbSxOkkvJ7/e1jDWPm4qsL7SjQJlx8xGrW0kwRlPl7+U9Sr0dhCQ==} engines: {node: '>=18.20.0'} '@wdio/logger@9.18.0': @@ -5871,8 +5868,8 @@ packages: resolution: {integrity: sha512-zMmAtse2UMCSOW76mvK3OejauAdcFGuKopNRH7crI0gwKTZtvV89yXWRziz9cVXpFgfmJCjf9edxKFWdhuF5yw==} engines: {node: '>=18.20.0'} - '@wdio/utils@9.20.1': - resolution: {integrity: sha512-C/Gsy5NAatsGUF1eT9Ks/ErR52/X4YI7MSm7BtwNOw8v2Ko+SiCA5qXts61J0A7QYwOn4gfXfBZZnzSAng6G/w==} + '@wdio/utils@9.21.0': + resolution: {integrity: sha512-aj8ao2V/e6Sv9gZby2ZIj4dMLjwYVba47Nlr+pOfK8N4VKKU0VRLPzvTlfK1HWaoS6u/GBbVx2pefYRrvd72BQ==} engines: {node: '>=18.20.0'} '@webassemblyjs/ast@1.14.1': @@ -5933,6 +5930,10 @@ packages: '@xtuc/long@4.2.2': resolution: {integrity: sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==} + '@zip.js/zip.js@2.8.11': + resolution: {integrity: sha512-0fztsk/0ryJ+2PPr9EyXS5/Co7OK8q3zY/xOoozEWaUsL5x+C0cyZ4YyMuUffOO2Dx/rAdq4JMPqW0VUtm+vzA==} + engines: {bun: '>=0.7.0', deno: '>=1.0.0', node: '>=18.0.0'} + '@zip.js/zip.js@2.8.2': resolution: {integrity: sha512-PI6UdgpSeVoGvzguKHmy2bwOqI3UYkntLZOCpyJSKIi7234c5aJmQYkJB/P4P2YUJkqhbqvu7iM2/0eJZ178nA==} engines: {bun: '>=0.7.0', deno: '>=1.0.0', node: '>=16.5.0'} @@ -8599,9 +8600,9 @@ packages: engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} deprecated: This package is no longer supported. - geckodriver@5.0.0: - resolution: {integrity: sha512-vn7TtQ3b9VMJtVXsyWtQQl1fyBVFhQy7UvJF96kPuuJ0or5THH496AD3eUyaDD11+EqCxH9t6V+EP9soZQk4YQ==} - engines: {node: '>=18.0.0'} + geckodriver@6.1.0: + resolution: {integrity: sha512-ZRXLa4ZaYTTgUO4Eefw+RsQCleugU2QLb1ME7qTYxxuRj51yAhfnXaItXNs5/vUzfIaDHuZ+YnSF005hfp07nQ==} + engines: {node: '>=20.0.0'} hasBin: true generate-function@2.3.1: @@ -10616,6 +10617,10 @@ packages: resolution: {integrity: sha512-2emPTb1reeLLYwHxyVx993iYyCHEiRRO+y8NFXFPL5kl5q14sgTK76cXyEKkeKCHeRw35SfdkUJ10Q1KfHuiIQ==} engines: {node: '>= 0.4'} + modern-tar@0.7.2: + resolution: {integrity: sha512-TGG1ZRk1TAQ3neuZwahAHke3rKsSlro+ooMYtjh9sl2gGPVMLMuWiHgwC7im9T5bSM566RSo2Dko56ETgEvZcA==} + engines: {node: '>=18.0.0'} + morphdom@2.7.7: resolution: {integrity: sha512-04GmsiBcalrSCNmzfo+UjU8tt3PhZJKzcOy+r1FlGA7/zri8wre3I1WkYN9PT3sIeIKfW9bpyElA+VzOg2E24g==} @@ -14525,12 +14530,12 @@ packages: resolution: {integrity: sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==} engines: {node: '>= 8'} - webdriver@9.20.1: - resolution: {integrity: sha512-QtvYqPai2NOnq7qePPH6kNSwk7+tnmSvnlOnY8dIT/Y24TPdQp44NjF/BUYAWIlqoBlZqHClQFTSVwT2qvO2Tw==} + webdriver@9.21.0: + resolution: {integrity: sha512-XLOhpU/EFPo4TMk+0fRli4g1WriUujxrfDxGT/QRq0MJsfhSYPF8FdefFdL5gHIrJfSKscaQHGWkbnsHftfqeg==} engines: {node: '>=18.20.0'} - webdriverio@9.20.1: - resolution: {integrity: sha512-QVM/asb5sDESz37ow/BAOA0z2HtUJsuAjPKHdw+Vx92PaQP3EfHwTgxK2T5rgwa0WRNh+c+n/0nEqIvqBl01sA==} + webdriverio@9.21.0: + resolution: {integrity: sha512-7teaXajOuNdn2UyyKlqMLssJjf0vDEih+Lo+tE/gHOt/P+mB8CinZym4PGtsriZLcyt4xV+Cun3hDmXM+pL26A==} engines: {node: '>=18.20.0'} peerDependencies: puppeteer-core: '>=22.x || <=24.x' @@ -16749,8 +16754,6 @@ snapshots: '@ckeditor/ckeditor5-icons': 47.2.0 '@ckeditor/ckeditor5-ui': 47.2.0 '@ckeditor/ckeditor5-utils': 47.2.0 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-upload@47.2.0': dependencies: @@ -20725,7 +20728,7 @@ snapshots: '@types/mute-stream@0.0.4': dependencies: - '@types/node': 22.19.1 + '@types/node': 24.10.1 '@types/node-forge@1.3.14': dependencies: @@ -20733,10 +20736,6 @@ snapshots: '@types/node@16.9.1': {} - '@types/node@20.19.24': - dependencies: - undici-types: 6.21.0 - '@types/node@20.19.25': dependencies: undici-types: 6.21.0 @@ -20914,7 +20913,7 @@ snapshots: '@types/yauzl@2.10.3': dependencies: - '@types/node': 22.18.13 + '@types/node': 24.10.1 optional: true '@typescript-eslint/eslint-plugin@8.46.4(@typescript-eslint/parser@8.46.4(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3)': @@ -21141,11 +21140,11 @@ snapshots: - bufferutil - utf-8-validate - '@vitest/browser-webdriverio@4.0.14(bufferutil@4.0.9)(msw@2.7.5(@types/node@24.10.1)(typescript@5.9.3))(utf-8-validate@6.0.5)(vite@7.2.4(@types/node@24.10.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))(vitest@4.0.14)(webdriverio@9.20.1(bufferutil@4.0.9)(utf-8-validate@6.0.5))': + '@vitest/browser-webdriverio@4.0.14(bufferutil@4.0.9)(msw@2.7.5(@types/node@24.10.1)(typescript@5.9.3))(utf-8-validate@6.0.5)(vite@7.2.4(@types/node@24.10.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))(vitest@4.0.14)(webdriverio@9.21.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))': dependencies: '@vitest/browser': 4.0.14(bufferutil@4.0.9)(msw@2.7.5(@types/node@24.10.1)(typescript@5.9.3))(utf-8-validate@6.0.5)(vite@7.2.4(@types/node@24.10.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))(vitest@4.0.14) vitest: 4.0.14(@opentelemetry/api@1.9.0)(@types/node@24.10.1)(@vitest/browser-webdriverio@4.0.14)(@vitest/ui@4.0.14)(happy-dom@20.0.11)(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.1)(msw@2.7.5(@types/node@24.10.1)(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: 9.20.1(bufferutil@4.0.9)(utf-8-validate@6.0.5) + webdriverio: 9.21.0(bufferutil@4.0.9)(utf-8-validate@6.0.5) transitivePeerDependencies: - bufferutil - msw @@ -21301,11 +21300,11 @@ snapshots: '@vue/shared@3.5.14': {} - '@wdio/config@9.20.1': + '@wdio/config@9.21.0': dependencies: '@wdio/logger': 9.18.0 '@wdio/types': 9.20.0 - '@wdio/utils': 9.20.1 + '@wdio/utils': 9.21.0 deepmerge-ts: 7.1.5 glob: 10.4.5 import-meta-resolve: 4.2.0 @@ -21325,13 +21324,13 @@ snapshots: '@wdio/repl@9.16.2': dependencies: - '@types/node': 20.19.24 + '@types/node': 20.19.25 '@wdio/types@9.20.0': dependencies: - '@types/node': 20.19.24 + '@types/node': 20.19.25 - '@wdio/utils@9.20.1': + '@wdio/utils@9.21.0': dependencies: '@puppeteer/browsers': 2.10.10 '@wdio/logger': 9.18.0 @@ -21339,7 +21338,7 @@ snapshots: decamelize: 6.0.1 deepmerge-ts: 7.1.5 edgedriver: 6.1.2 - geckodriver: 5.0.0 + geckodriver: 6.1.0 get-port: 7.1.0 import-meta-resolve: 4.2.0 locate-app: 2.5.0 @@ -21435,6 +21434,8 @@ snapshots: '@xtuc/long@4.2.2': {} + '@zip.js/zip.js@2.8.11': {} + '@zip.js/zip.js@2.8.2': {} abab@2.0.6: {} @@ -24932,18 +24933,15 @@ snapshots: wide-align: 1.1.5 optional: true - geckodriver@5.0.0: + geckodriver@6.1.0: dependencies: '@wdio/logger': 9.18.0 - '@zip.js/zip.js': 2.8.2 + '@zip.js/zip.js': 2.8.11 decamelize: 6.0.1 http-proxy-agent: 7.0.2 https-proxy-agent: 7.0.6 - node-fetch: 3.3.2 - tar-fs: 3.1.1 - which: 5.0.0 + modern-tar: 0.7.2 transitivePeerDependencies: - - bare-buffer - supports-color generate-function@2.3.1: @@ -27452,6 +27450,8 @@ snapshots: hasown: 2.0.2 isarray: 2.0.5 + modern-tar@0.7.2: {} + morphdom@2.7.7: {} mrmime@2.0.1: {} @@ -31824,7 +31824,7 @@ snapshots: optionalDependencies: '@opentelemetry/api': 1.9.0 '@types/node': 24.10.1 - '@vitest/browser-webdriverio': 4.0.14(bufferutil@4.0.9)(msw@2.7.5(@types/node@24.10.1)(typescript@5.9.3))(utf-8-validate@6.0.5)(vite@7.2.4(@types/node@24.10.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))(vitest@4.0.14)(webdriverio@9.20.1(bufferutil@4.0.9)(utf-8-validate@6.0.5)) + '@vitest/browser-webdriverio': 4.0.14(bufferutil@4.0.9)(msw@2.7.5(@types/node@24.10.1)(typescript@5.9.3))(utf-8-validate@6.0.5)(vite@7.2.4(@types/node@24.10.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))(vitest@4.0.14)(webdriverio@9.21.0(bufferutil@4.0.9)(utf-8-validate@6.0.5)) '@vitest/ui': 4.0.14(vitest@4.0.14) happy-dom: 20.0.11 jsdom: 26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5) @@ -31914,15 +31914,15 @@ snapshots: web-streams-polyfill@3.3.3: {} - webdriver@9.20.1(bufferutil@4.0.9)(utf-8-validate@6.0.5): + webdriver@9.21.0(bufferutil@4.0.9)(utf-8-validate@6.0.5): dependencies: - '@types/node': 20.19.24 + '@types/node': 20.19.25 '@types/ws': 8.18.1 - '@wdio/config': 9.20.1 + '@wdio/config': 9.21.0 '@wdio/logger': 9.18.0 '@wdio/protocols': 9.16.2 '@wdio/types': 9.20.0 - '@wdio/utils': 9.20.1 + '@wdio/utils': 9.21.0 deepmerge-ts: 7.1.5 https-proxy-agent: 7.0.6 undici: 6.21.3 @@ -31933,16 +31933,16 @@ snapshots: - supports-color - utf-8-validate - webdriverio@9.20.1(bufferutil@4.0.9)(utf-8-validate@6.0.5): + webdriverio@9.21.0(bufferutil@4.0.9)(utf-8-validate@6.0.5): dependencies: - '@types/node': 20.19.24 + '@types/node': 20.19.25 '@types/sinonjs__fake-timers': 8.1.5 - '@wdio/config': 9.20.1 + '@wdio/config': 9.21.0 '@wdio/logger': 9.18.0 '@wdio/protocols': 9.16.2 '@wdio/repl': 9.16.2 '@wdio/types': 9.20.0 - '@wdio/utils': 9.20.1 + '@wdio/utils': 9.21.0 archiver: 7.0.1 aria-query: 5.3.2 cheerio: 1.1.2 @@ -31959,7 +31959,7 @@ snapshots: rgb2hex: 0.2.5 serialize-error: 12.0.0 urlpattern-polyfill: 10.1.0 - webdriver: 9.20.1(bufferutil@4.0.9)(utf-8-validate@6.0.5) + webdriver: 9.21.0(bufferutil@4.0.9)(utf-8-validate@6.0.5) transitivePeerDependencies: - bare-buffer - bufferutil From d9e8f8e69b15642f212aed130112307e9cfdc060 Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Sun, 30 Nov 2025 10:41:26 +0200 Subject: [PATCH 15/73] refactor(options): remove unnecessary ribbon activation option --- apps/client/src/widgets/ribbon/RibbonDefinition.ts | 2 +- apps/server/src/routes/api/options.ts | 1 - apps/server/src/services/options_init.ts | 1 - packages/commons/src/lib/options_interface.ts | 1 - 4 files changed, 1 insertion(+), 4 deletions(-) diff --git a/apps/client/src/widgets/ribbon/RibbonDefinition.ts b/apps/client/src/widgets/ribbon/RibbonDefinition.ts index 9f19707cb..8117c511a 100644 --- a/apps/client/src/widgets/ribbon/RibbonDefinition.ts +++ b/apps/client/src/widgets/ribbon/RibbonDefinition.ts @@ -50,7 +50,7 @@ export const RIBBON_TAB_DEFINITIONS: TabConfiguration[] = [ icon: "bx bx-calendar-edit", content: EditedNotesTab, show: ({ note }) => note?.hasOwnedLabel("dateNote"), - activate: ({ note }) => (note?.getPromotedDefinitionAttributes().length === 0 || !options.is("promotedAttributesOpenInRibbon")) && options.is("editedNotesOpenInRibbon") + activate: () => options.is("editedNotesOpenInRibbon") }, { title: t("book_properties.book_properties"), diff --git a/apps/server/src/routes/api/options.ts b/apps/server/src/routes/api/options.ts index 05f659db8..503447fa1 100644 --- a/apps/server/src/routes/api/options.ts +++ b/apps/server/src/routes/api/options.ts @@ -80,7 +80,6 @@ const ALLOWED_OPTIONS = new Set([ "disableTray", "customSearchEngineName", "customSearchEngineUrl", - "promotedAttributesOpenInRibbon", "editedNotesOpenInRibbon", "locale", "formattingLocale", diff --git a/apps/server/src/services/options_init.ts b/apps/server/src/services/options_init.ts index e170b347c..c93fbd0f0 100644 --- a/apps/server/src/services/options_init.ts +++ b/apps/server/src/services/options_init.ts @@ -129,7 +129,6 @@ const defaultOptions: DefaultOption[] = [ { name: "logRetentionDays", value: "90", isSynced: false }, // default 90 days { name: "customSearchEngineName", value: "DuckDuckGo", isSynced: true }, { name: "customSearchEngineUrl", value: "https://duckduckgo.com/?q={keyword}", isSynced: true }, - { name: "promotedAttributesOpenInRibbon", value: "true", isSynced: true }, { name: "editedNotesOpenInRibbon", value: "true", isSynced: true }, { name: "mfaEnabled", value: "false", isSynced: false }, { name: "mfaMethod", value: "totp", isSynced: false }, diff --git a/packages/commons/src/lib/options_interface.ts b/packages/commons/src/lib/options_interface.ts index 0e044d37c..bdc223c1f 100644 --- a/packages/commons/src/lib/options_interface.ts +++ b/packages/commons/src/lib/options_interface.ts @@ -121,7 +121,6 @@ export interface OptionDefinitions extends KeyboardShortcutsOptions Date: Sun, 30 Nov 2025 10:43:06 +0200 Subject: [PATCH 16/73] fix(ribbon): formatting toolbar overrides edited notes activation (closes #7900) --- apps/client/src/widgets/ribbon/RibbonDefinition.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/client/src/widgets/ribbon/RibbonDefinition.ts b/apps/client/src/widgets/ribbon/RibbonDefinition.ts index 8117c511a..ae4aac3f3 100644 --- a/apps/client/src/widgets/ribbon/RibbonDefinition.ts +++ b/apps/client/src/widgets/ribbon/RibbonDefinition.ts @@ -26,7 +26,7 @@ export const RIBBON_TAB_DEFINITIONS: TabConfiguration[] = [ && !(await noteContext?.isReadOnly()), toggleCommand: "toggleRibbonTabClassicEditor", content: FormattingToolbar, - activate: true, + activate: () => !options.is("editedNotesOpenInRibbon"), stayInDom: true }, { From 15190abb6971d86ef15d8e67c0166d576fc3c014 Mon Sep 17 00:00:00 2001 From: SiriusXT <1160925501@qq.com> Date: Sun, 30 Nov 2025 16:53:14 +0800 Subject: [PATCH 17/73] feat(ckeditor5): add formatPainter --- apps/client/src/widgets/type_widgets/text/toolbar.ts | 2 ++ packages/ckeditor5/src/index.ts | 1 + packages/ckeditor5/src/plugins.ts | 5 +++-- 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/apps/client/src/widgets/type_widgets/text/toolbar.ts b/apps/client/src/widgets/type_widgets/text/toolbar.ts index c8ba56d4d..69e37449f 100644 --- a/apps/client/src/widgets/type_widgets/text/toolbar.ts +++ b/apps/client/src/widgets/type_widgets/text/toolbar.ts @@ -55,6 +55,7 @@ export function buildClassicToolbar(multilineToolbar: boolean) { ...TEXT_FORMATTING_GROUP, items: ["underline", "strikethrough", "|", "superscript", "subscript", "|", "kbd"] }, + "formatPainter", "|", "fontColor", "fontBackgroundColor", @@ -104,6 +105,7 @@ export function buildFloatingToolbar() { ...TEXT_FORMATTING_GROUP, items: [ "strikethrough", "|", "superscript", "subscript", "|", "kbd" ] }, + "formatPainter", "|", "fontColor", "fontBackgroundColor", diff --git a/packages/ckeditor5/src/index.ts b/packages/ckeditor5/src/index.ts index 2d73ecdea..17b2c775e 100644 --- a/packages/ckeditor5/src/index.ts +++ b/packages/ckeditor5/src/index.ts @@ -1,4 +1,5 @@ import "ckeditor5/ckeditor5.css"; +import 'ckeditor5-premium-features/ckeditor5-premium-features.css'; import "./theme/code_block_toolbar.css"; import { COMMON_PLUGINS, CORE_PLUGINS, POPUP_EDITOR_PLUGINS } from "./plugins.js"; import { BalloonEditor, DecoupledEditor, FindAndReplaceEditing, FindCommand } from "ckeditor5"; diff --git a/packages/ckeditor5/src/plugins.ts b/packages/ckeditor5/src/plugins.ts index bbd613a9e..81a8a7fe1 100644 --- a/packages/ckeditor5/src/plugins.ts +++ b/packages/ckeditor5/src/plugins.ts @@ -1,5 +1,5 @@ import { Autoformat, AutoLink, BlockQuote, BlockToolbar, Bold, CKFinderUploadAdapter, Clipboard, Code, CodeBlock, Enter, FindAndReplace, Font, FontBackgroundColor, FontColor, GeneralHtmlSupport, Heading, HeadingButtonsUI, HorizontalLine, Image, ImageCaption, ImageInline, ImageResize, ImageStyle, ImageToolbar, ImageUpload, Alignment, Indent, IndentBlock, Italic, Link, List, ListProperties, Mention, PageBreak, Paragraph, ParagraphButtonUI, PasteFromOffice, PictureEditing, RemoveFormat, SelectAll, ShiftEnter, SpecialCharacters, SpecialCharactersEssentials, Strikethrough, Style, Subscript, Superscript, Table, TableCaption, TableCellProperties, TableColumnResize, TableProperties, TableSelection, TableToolbar, TextPartLanguage, TextTransformation, TodoList, Typing, Underline, Undo, Bookmark, Emoji, Notification, EmojiMention, EmojiPicker } from "ckeditor5"; -import { SlashCommand, Template } from "ckeditor5-premium-features"; +import { SlashCommand, Template, FormatPainter } from "ckeditor5-premium-features"; import type { Plugin } from "ckeditor5"; import CutToNotePlugin from "./plugins/cuttonote.js"; import UploadimagePlugin from "./plugins/uploadimage.js"; @@ -83,7 +83,8 @@ export const CORE_PLUGINS: typeof Plugin[] = [ */ export const PREMIUM_PLUGINS: typeof Plugin[] = [ SlashCommand, - Template + Template, + FormatPainter ]; /** From 8cc43cd9a692cc8e4c03218acd452b1c489d28a6 Mon Sep 17 00:00:00 2001 From: SiriusXT <1160925501@qq.com> Date: Sun, 30 Nov 2025 20:08:27 +0800 Subject: [PATCH 18/73] docs(user): add format painter --- .../doc_notes/en/User Guide/!!!meta.json | 2 +- .../User Guide/Note Types/Text.html | 336 +++++++++--------- .../Note Types/Text/General formatting.html | 27 +- .../Text/Premium features/Format Painter.html | 45 +++ .../Format Painter_746436a2e1.svg | 1 + .../Format Painter_e144e96df9.svg | 7 + .../Premium features/Format Painter_image.png | Bin 0 -> 5251 bytes docs/User Guide/!!!meta.json | 157 ++++++-- docs/User Guide/User Guide/Note Types/Text.md | 2 +- .../Note Types/Text/General formatting.md | 4 + .../Text/Premium features/Format Painter.md | 20 ++ .../Format Painter_746436a2e1.svg | 1 + .../Format Painter_e144e96df9.svg | 7 + .../Premium features/Format Painter_image.png | Bin 0 -> 5251 bytes 14 files changed, 396 insertions(+), 213 deletions(-) create mode 100644 apps/server/src/assets/doc_notes/en/User Guide/User Guide/Note Types/Text/Premium features/Format Painter.html create mode 100644 apps/server/src/assets/doc_notes/en/User Guide/User Guide/Note Types/Text/Premium features/Format Painter_746436a2e1.svg create mode 100644 apps/server/src/assets/doc_notes/en/User Guide/User Guide/Note Types/Text/Premium features/Format Painter_e144e96df9.svg create mode 100644 apps/server/src/assets/doc_notes/en/User Guide/User Guide/Note Types/Text/Premium features/Format Painter_image.png create mode 100644 docs/User Guide/User Guide/Note Types/Text/Premium features/Format Painter.md create mode 100644 docs/User Guide/User Guide/Note Types/Text/Premium features/Format Painter_746436a2e1.svg create mode 100644 docs/User Guide/User Guide/Note Types/Text/Premium features/Format Painter_e144e96df9.svg create mode 100644 docs/User Guide/User Guide/Note Types/Text/Premium features/Format Painter_image.png 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 86cdc3a72..795752fd7 100644 --- a/apps/server/src/assets/doc_notes/en/User Guide/!!!meta.json +++ b/apps/server/src/assets/doc_notes/en/User Guide/!!!meta.json @@ -1 +1 @@ -[{"id":"_help_BOCnjTMBCoxW","title":"Feature Highlights","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Feature Highlights"},{"name":"iconClass","value":"bx bx-star","type":"label"}]},{"id":"_help_Otzi9La2YAUX","title":"Installation & Setup","type":"book","attributes":[{"name":"iconClass","value":"bx bx-cog","type":"label"}],"children":[{"id":"_help_poXkQfguuA0U","title":"Desktop Installation","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Desktop Installation"},{"name":"iconClass","value":"bx bx-desktop","type":"label"}],"children":[{"id":"_help_nRqcgfTb97uV","title":"Using the desktop application as a server","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Desktop Installation/Using the desktop application "},{"name":"iconClass","value":"bx bx-file","type":"label"}]},{"id":"_help_Rp0q8bSP6Ayl","title":"System Requirements","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Desktop Installation/System Requirements"},{"name":"iconClass","value":"bx bx-chip","type":"label"}]},{"id":"_help_Un4wj2Mak2Ky","title":"Nix flake","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Desktop Installation/Nix flake"},{"name":"iconClass","value":"bx bxl-tux","type":"label"}]}]},{"id":"_help_WOcw2SLH6tbX","title":"Server Installation","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Server Installation"},{"name":"iconClass","value":"bx bx-server","type":"label"}],"children":[{"id":"_help_Dgg7bR3b6K9j","title":"1. Installing the server","type":"book","attributes":[{"name":"iconClass","value":"bx bx-folder","type":"label"}],"children":[{"id":"_help_3tW6mORuTHnB","title":"Packaged version for Linux","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Server Installation/1. Installing the server/Packaged version for Linux"},{"name":"iconClass","value":"bx bxl-tux","type":"label"}]},{"id":"_help_rWX5eY045zbE","title":"Using Docker","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Server Installation/1. Installing the server/Using Docker"},{"name":"iconClass","value":"bx bxl-docker","type":"label"}]},{"id":"_help_moVgBcoxE3EK","title":"On NixOS","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Server Installation/1. Installing the server/On NixOS"},{"name":"iconClass","value":"bx bxl-tux","type":"label"}]},{"id":"_help_J1Bb6lVlwU5T","title":"Manually","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Server Installation/1. Installing the server/Manually"},{"name":"iconClass","value":"bx bx-code-alt","type":"label"}]},{"id":"_help_DCmT6e7clMoP","title":"Using Kubernetes","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Server Installation/1. Installing the server/Using Kubernetes"},{"name":"iconClass","value":"bx bxl-kubernetes","type":"label"}]},{"id":"_help_klCWNks3ReaQ","title":"Multiple server instances","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Server Installation/1. Installing the server/Multiple server instances"},{"name":"iconClass","value":"bx bxs-user-account","type":"label"}]}]},{"id":"_help_vcjrb3VVYPZI","title":"2. Reverse proxy","type":"book","attributes":[{"name":"iconClass","value":"bx bx-folder","type":"label"}],"children":[{"id":"_help_ud6MShXL4WpO","title":"Nginx","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Server Installation/2. Reverse proxy/Nginx"},{"name":"iconClass","value":"bx bx-file","type":"label"}]},{"id":"_help_fDLvzOx29Pfg","title":"Apache using Docker","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Server Installation/2. Reverse proxy/Apache using Docker"},{"name":"iconClass","value":"bx bx-file","type":"label"}]},{"id":"_help_LLzSMXACKhUs","title":"Trusted proxy","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Server Installation/2. Reverse proxy/Trusted proxy"},{"name":"iconClass","value":"bx bx-file","type":"label"}]},{"id":"_help_5ERVJb9s4FRD","title":"Traefik","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Server Installation/2. Reverse proxy/Traefik"},{"name":"iconClass","value":"bx bx-file","type":"label"}]}]},{"id":"_help_l2VkvOwUNfZj","title":"HTTPS (TLS)","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Server Installation/HTTPS (TLS)"},{"name":"iconClass","value":"bx bx-lock-alt","type":"label"}]},{"id":"_help_0hzsNCP31IAB","title":"Authentication","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Server Installation/Authentication"},{"name":"iconClass","value":"bx bx-user","type":"label"}]},{"id":"_help_7DAiwaf8Z7Rz","title":"Multi-Factor Authentication","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Server Installation/Multi-Factor Authentication"},{"name":"iconClass","value":"bx bx-stopwatch","type":"label"}]},{"id":"_help_Un4wj2Mak2Ky","title":"Nix flake","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Server Installation/Nix flake.clone"},{"name":"iconClass","value":"bx bx-file","type":"label"}]},{"id":"_help_yeEaYqosGLSh","title":"Third-party cloud hosting","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Server Installation/Third-party cloud hosting"},{"name":"iconClass","value":"bx bx-cloud","type":"label"}]},{"id":"_help_iGTnKjubbXkA","title":"System Requirements","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Server Installation/System Requirements"},{"name":"iconClass","value":"bx bx-chip","type":"label"}]}]},{"id":"_help_cbkrhQjrkKrh","title":"Synchronization","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Synchronization"},{"name":"iconClass","value":"bx bx-sync","type":"label"}]},{"id":"_help_RDslemsQ6gCp","title":"Mobile Frontend","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Mobile Frontend"},{"name":"iconClass","value":"bx bx-mobile-alt","type":"label"}]},{"id":"_help_MtPxeAWVAzMg","title":"Web Clipper","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Web Clipper"},{"name":"iconClass","value":"bx bx-paperclip","type":"label"}]},{"id":"_help_n1lujUxCwipy","title":"Upgrading TriliumNext","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Upgrading TriliumNext"},{"name":"iconClass","value":"bx bx-up-arrow-alt","type":"label"}]},{"id":"_help_ODY7qQn5m2FT","title":"Backup","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Backup"},{"name":"iconClass","value":"bx bx-hdd","type":"label"}]},{"id":"_help_tAassRL4RSQL","title":"Data directory","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Data directory"},{"name":"iconClass","value":"bx bx-folder-open","type":"label"}]}]},{"id":"_help_gh7bpGYxajRS","title":"Basic Concepts and Features","type":"book","attributes":[{"name":"iconClass","value":"bx bx-help-circle","type":"label"}],"children":[{"id":"_help_Vc8PjrjAGuOp","title":"UI Elements","type":"book","attributes":[{"name":"iconClass","value":"bx bx-window-alt","type":"label"}],"children":[{"id":"_help_x0JgW8UqGXvq","title":"Vertical and horizontal layout","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/Vertical and horizontal layout"},{"name":"iconClass","value":"bx bxs-layout","type":"label"}]},{"id":"_help_x3i7MxGccDuM","title":"Global menu","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/Global menu"},{"name":"iconClass","value":"bx bx-menu","type":"label"}]},{"id":"_help_oPVyFC7WL2Lp","title":"Note Tree","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/Note Tree"},{"name":"iconClass","value":"bx bxs-tree-alt","type":"label"}],"children":[{"id":"_help_YtSN43OrfzaA","title":"Note tree contextual menu","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/Note Tree/Note tree contextual menu"},{"name":"iconClass","value":"bx bx-menu","type":"label"}]},{"id":"_help_yTjUdsOi4CIE","title":"Multiple selection","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/Note Tree/Multiple selection"},{"name":"iconClass","value":"bx bx-list-plus","type":"label"}]},{"id":"_help_DvdZhoQZY9Yd","title":"Keyboard shortcuts","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/Note Tree/Keyboard shortcuts"},{"name":"iconClass","value":"bx bxs-keyboard","type":"label"}]}]},{"id":"_help_BlN9DFI679QC","title":"Ribbon","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/Ribbon"},{"name":"iconClass","value":"bx bx-dots-horizontal","type":"label"}]},{"id":"_help_3seOhtN8uLIY","title":"Tabs","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/Tabs"},{"name":"iconClass","value":"bx bx-dock-top","type":"label"}]},{"id":"_help_xYmIYSP6wE3F","title":"Launch Bar","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/Launch Bar"},{"name":"iconClass","value":"bx bx-sidebar","type":"label"}]},{"id":"_help_8YBEPzcpUgxw","title":"Note buttons","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/Note buttons"},{"name":"iconClass","value":"bx bx-dots-vertical-rounded","type":"label"}]},{"id":"_help_4TIF1oA4VQRO","title":"Options","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/Options"},{"name":"iconClass","value":"bx bx-cog","type":"label"}]},{"id":"_help_luNhaphA37EO","title":"Split View","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/Split View"},{"name":"iconClass","value":"bx bx-dock-right","type":"label"}]},{"id":"_help_XpOYSgsLkTJy","title":"Floating buttons","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/Floating buttons"},{"name":"iconClass","value":"bx bx-rectangle","type":"label"}]},{"id":"_help_RnaPdbciOfeq","title":"Right Sidebar","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/Right Sidebar"},{"name":"iconClass","value":"bx bxs-dock-right","type":"label"}]},{"id":"_help_r5JGHN99bVKn","title":"Recent Changes","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/Recent Changes"},{"name":"iconClass","value":"bx bx-history","type":"label"}]},{"id":"_help_ny318J39E5Z0","title":"Zoom","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/Zoom"},{"name":"iconClass","value":"bx bx-zoom-in","type":"label"}]},{"id":"_help_lgKX7r3aL30x","title":"Note Tooltip","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/Note Tooltip"},{"name":"iconClass","value":"bx bx-message-detail","type":"label"}]}]},{"id":"_help_BFs8mudNFgCS","title":"Notes","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Notes"},{"name":"iconClass","value":"bx bx-notepad","type":"label"}],"children":[{"id":"_help_p9kXRFAkwN4o","title":"Note Icons","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Notes/Note Icons"},{"name":"iconClass","value":"bx bxs-grid","type":"label"}]},{"id":"_help_0vhv7lsOLy82","title":"Attachments","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Notes/Attachments"},{"name":"iconClass","value":"bx bx-paperclip","type":"label"}]},{"id":"_help_IakOLONlIfGI","title":"Cloning Notes","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Notes/Cloning Notes"},{"name":"iconClass","value":"bx bx-duplicate","type":"label"}],"children":[{"id":"_help_TBwsyfadTA18","title":"Branch prefix","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Notes/Cloning Notes/Branch prefix"},{"name":"iconClass","value":"bx bx-rename","type":"label"}]}]},{"id":"_help_bwg0e8ewQMak","title":"Protected Notes","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Notes/Protected Notes"},{"name":"iconClass","value":"bx bx-lock-alt","type":"label"}]},{"id":"_help_MKmLg5x6xkor","title":"Archived Notes","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Notes/Archived Notes"},{"name":"iconClass","value":"bx bx-box","type":"label"}]},{"id":"_help_vZWERwf8U3nx","title":"Note Revisions","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Notes/Note Revisions"},{"name":"iconClass","value":"bx bx-history","type":"label"}]},{"id":"_help_aGlEvb9hyDhS","title":"Sorting Notes","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Notes/Sorting Notes"},{"name":"iconClass","value":"bx bx-sort-up","type":"label"}]},{"id":"_help_NRnIZmSMc5sj","title":"Printing & Exporting as PDF","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Notes/Printing & Exporting as PDF"},{"name":"iconClass","value":"bx bx-printer","type":"label"}]},{"id":"_help_CoFPLs3dRlXc","title":"Read-Only Notes","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Notes/Read-Only Notes"},{"name":"iconClass","value":"bx bx-edit-alt","type":"label"}]},{"id":"_help_0ESUbbAxVnoK","title":"Note List","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Notes/Note List"},{"name":"iconClass","value":"bx bxs-grid","type":"label"}]}]},{"id":"_help_wArbEsdSae6g","title":"Navigation","type":"book","attributes":[{"name":"iconClass","value":"bx bx-navigation","type":"label"}],"children":[{"id":"_help_kBrnXNG3Hplm","title":"Tree Concepts","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Navigation/Tree Concepts"},{"name":"iconClass","value":"bx bx-pyramid","type":"label"}]},{"id":"_help_MMiBEQljMQh2","title":"Note Navigation","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Navigation/Note Navigation"},{"name":"iconClass","value":"bx bxs-navigation","type":"label"}]},{"id":"_help_Ms1nauBra7gq","title":"Quick search","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Navigation/Quick search"},{"name":"iconClass","value":"bx bx-search-alt-2","type":"label"}]},{"id":"_help_F1r9QtzQLZqm","title":"Jump to...","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Navigation/Jump to"},{"name":"iconClass","value":"bx bx-send","type":"label"}]},{"id":"_help_eIg8jdvaoNNd","title":"Search","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Navigation/Search"},{"name":"iconClass","value":"bx bx-search-alt-2","type":"label"}]},{"id":"_help_u3YFHC9tQlpm","title":"Bookmarks","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Navigation/Bookmarks"},{"name":"iconClass","value":"bx bx-bookmarks","type":"label"}]},{"id":"_help_OR8WJ7Iz9K4U","title":"Note Hoisting","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Navigation/Note Hoisting"},{"name":"iconClass","value":"bx bxs-chevrons-up","type":"label"}]},{"id":"_help_ZjLYv08Rp3qC","title":"Quick edit","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Navigation/Quick edit"},{"name":"iconClass","value":"bx bx-edit","type":"label"}]},{"id":"_help_9sRHySam5fXb","title":"Workspaces","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Navigation/Workspaces"},{"name":"iconClass","value":"bx bx-door-open","type":"label"}]},{"id":"_help_xWtq5NUHOwql","title":"Similar Notes","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Navigation/Similar Notes"},{"name":"iconClass","value":"bx bx-bar-chart","type":"label"}]},{"id":"_help_McngOG2jbUWX","title":"Search in note","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Navigation/Search in note"},{"name":"iconClass","value":"bx bx-search-alt-2","type":"label"}]}]},{"id":"_help_A9Oc6YKKc65v","title":"Keyboard Shortcuts","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Keyboard Shortcuts"},{"name":"iconClass","value":"bx bxs-keyboard","type":"label"}]},{"id":"_help_Wy267RK4M69c","title":"Themes","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Themes"},{"name":"iconClass","value":"bx bx-palette","type":"label"}],"children":[{"id":"_help_VbjZvtUek0Ln","title":"Theme Gallery","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Themes/Theme Gallery"},{"name":"iconClass","value":"bx bx-book-reader","type":"label"}]}]},{"id":"_help_mHbBMPDPkVV5","title":"Import & Export","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Import & Export"},{"name":"iconClass","value":"bx bx-import","type":"label"}],"children":[{"id":"_help_Oau6X9rCuegd","title":"Markdown","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Import & Export/Markdown"},{"name":"iconClass","value":"bx bxl-markdown","type":"label"}],"children":[{"id":"_help_rJ9grSgoExl9","title":"Supported syntax","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Import & Export/Markdown/Supported syntax"},{"name":"iconClass","value":"bx bx-code-alt","type":"label"}]}]},{"id":"_help_syuSEKf2rUGr","title":"Evernote","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Import & Export/Evernote"},{"name":"iconClass","value":"bx bx-window-open","type":"label"}]},{"id":"_help_GnhlmrATVqcH","title":"OneNote","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Import & Export/OneNote"},{"name":"iconClass","value":"bx bx-window-open","type":"label"}]}]},{"id":"_help_rC3pL2aptaRE","title":"Zen mode","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Zen mode"},{"name":"iconClass","value":"bx bxs-yin-yang","type":"label"}]}]},{"id":"_help_s3YCWHBfmYuM","title":"Quick Start","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Quick Start"},{"name":"iconClass","value":"bx bx-run","type":"label"}]},{"id":"_help_i6dbnitykE5D","title":"FAQ","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/FAQ"},{"name":"iconClass","value":"bx bx-question-mark","type":"label"}]},{"id":"_help_KSZ04uQ2D1St","title":"Note Types","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types"},{"name":"iconClass","value":"bx bx-edit","type":"label"}],"children":[{"id":"_help_iPIMuisry3hd","title":"Text","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text"},{"name":"iconClass","value":"bx bx-note","type":"label"}],"children":[{"id":"_help_NwBbFdNZ9h7O","title":"Block quotes & admonitions","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Block quotes & admonitions"},{"name":"iconClass","value":"bx bx-info-circle","type":"label"}]},{"id":"_help_oSuaNgyyKnhu","title":"Bookmarks","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Bookmarks"},{"name":"iconClass","value":"bx bx-bookmark","type":"label"}]},{"id":"_help_veGu4faJErEM","title":"Content language & Right-to-left support","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Content language & Right-to-le"},{"name":"iconClass","value":"bx bx-align-right","type":"label"}]},{"id":"_help_2x0ZAX9ePtzV","title":"Cut to subnote","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Cut to subnote"},{"name":"iconClass","value":"bx bx-cut","type":"label"}]},{"id":"_help_UYuUB1ZekNQU","title":"Developer-specific formatting","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Developer-specific formatting"},{"name":"iconClass","value":"bx bx-code-alt","type":"label"}],"children":[{"id":"_help_QxEyIjRBizuC","title":"Code blocks","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Developer-specific formatting/Code blocks"},{"name":"iconClass","value":"bx bx-code","type":"label"}]}]},{"id":"_help_AgjCISero73a","title":"Footnotes","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Footnotes"},{"name":"iconClass","value":"bx bx-bracket","type":"label"}]},{"id":"_help_nRhnJkTT8cPs","title":"Formatting toolbar","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Formatting toolbar"},{"name":"iconClass","value":"bx bx-text","type":"label"}]},{"id":"_help_Gr6xFaF6ioJ5","title":"General formatting","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/General formatting"},{"name":"iconClass","value":"bx bx-bold","type":"label"}]},{"id":"_help_AxshuNRegLAv","title":"Highlights list","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Highlights list"},{"name":"iconClass","value":"bx bx-highlight","type":"label"}]},{"id":"_help_mT0HEkOsz6i1","title":"Images","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Images"},{"name":"iconClass","value":"bx bx-image-alt","type":"label"}],"children":[{"id":"_help_0Ofbk1aSuVRu","title":"Image references","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Images/Image references"},{"name":"iconClass","value":"bx bxs-file-image","type":"label"}]}]},{"id":"_help_nBAXQFj20hS1","title":"Include Note","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Include Note"},{"name":"iconClass","value":"bx bx-file","type":"label"}]},{"id":"_help_CohkqWQC1iBv","title":"Insert buttons","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Insert buttons"},{"name":"iconClass","value":"bx bx-plus","type":"label"}]},{"id":"_help_oiVPnW8QfnvS","title":"Keyboard shortcuts","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Keyboard shortcuts"},{"name":"iconClass","value":"bx bxs-keyboard","type":"label"}]},{"id":"_help_QEAPj01N5f7w","title":"Links","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Links"},{"name":"iconClass","value":"bx bx-link-alt","type":"label"}],"children":[{"id":"_help_3IDVtesTQ8ds","title":"External links","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Links/External links"},{"name":"iconClass","value":"bx bx-link-external","type":"label"}]},{"id":"_help_hrZ1D00cLbal","title":"Internal (reference) links","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Links/Internal (reference) links"},{"name":"iconClass","value":"bx bx-link","type":"label"}]}]},{"id":"_help_S6Xx8QIWTV66","title":"Lists","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Lists"},{"name":"iconClass","value":"bx bx-list-ul","type":"label"}]},{"id":"_help_QrtTYPmdd1qq","title":"Markdown-like formatting","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Markdown-like formatting"},{"name":"iconClass","value":"bx bxl-markdown","type":"label"}]},{"id":"_help_YfYAtQBcfo5V","title":"Math Equations","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Math Equations"},{"name":"iconClass","value":"bx bx-math","type":"label"}]},{"id":"_help_dEHYtoWWi8ct","title":"Other features","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Other features"},{"name":"iconClass","value":"bx bxs-grid","type":"label"}]},{"id":"_help_gLt3vA97tMcp","title":"Premium features","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Premium features"},{"name":"iconClass","value":"bx bx-star","type":"label"}],"children":[{"id":"_help_ZlN4nump6EbW","title":"Slash Commands","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Premium features/Slash Commands"},{"name":"iconClass","value":"bx bx-menu","type":"label"}]},{"id":"_help_pwc194wlRzcH","title":"Text Snippets","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Premium features/Text Snippets"},{"name":"iconClass","value":"bx bx-align-left","type":"label"}]}]},{"id":"_help_BFvAtE74rbP6","title":"Table of contents","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Table of contents"},{"name":"iconClass","value":"bx bx-heading","type":"label"}]},{"id":"_help_NdowYOC1GFKS","title":"Tables","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Tables"},{"name":"iconClass","value":"bx bx-table","type":"label"}]}]},{"id":"_help_6f9hih2hXXZk","title":"Code","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Code"},{"name":"iconClass","value":"bx bx-code","type":"label"}]},{"id":"_help_m523cpzocqaD","title":"Saved Search","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Saved Search"},{"name":"iconClass","value":"bx bx-file-find","type":"label"}]},{"id":"_help_iRwzGnHPzonm","title":"Relation Map","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Relation Map"},{"name":"iconClass","value":"bx bxs-network-chart","type":"label"}]},{"id":"_help_bdUJEHsAPYQR","title":"Note Map","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Note Map"},{"name":"iconClass","value":"bx bxs-network-chart","type":"label"}]},{"id":"_help_HcABDtFCkbFN","title":"Render Note","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Render Note"},{"name":"iconClass","value":"bx bx-extension","type":"label"}]},{"id":"_help_s1aBHPd79XYj","title":"Mermaid Diagrams","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Mermaid Diagrams"},{"name":"iconClass","value":"bx bx-selection","type":"label"}],"children":[{"id":"_help_RH6yLjjWJHof","title":"ELK layout","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Mermaid Diagrams/ELK layout"},{"name":"iconClass","value":"bx bxs-network-chart","type":"label"}]},{"id":"_help_WWgeUaBb7UfC","title":"Syntax reference","type":"webView","attributes":[{"type":"label","name":"webViewSrc","value":"https://mermaid.js.org/intro/syntax-reference.html"},{"name":"iconClass","value":"bx bx-file","type":"label"}],"enforceAttributes":true}]},{"id":"_help_grjYqerjn243","title":"Canvas","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Canvas"},{"name":"iconClass","value":"bx bx-pen","type":"label"}]},{"id":"_help_1vHRoWCEjj0L","title":"Web View","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Web View"},{"name":"iconClass","value":"bx bx-globe-alt","type":"label"}]},{"id":"_help_gBbsAeiuUxI5","title":"Mind Map","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Mind Map"},{"name":"iconClass","value":"bx bx-sitemap","type":"label"}]},{"id":"_help_W8vYD3Q1zjCR","title":"File","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/File"},{"name":"iconClass","value":"bx bx-file-blank","type":"label"}]}]},{"id":"_help_GTwFsgaA0lCt","title":"Collections","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Collections"},{"name":"iconClass","value":"bx bx-book","type":"label"}],"children":[{"id":"_help_xWbu3jpNWapp","title":"Calendar","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Collections/Calendar"},{"name":"iconClass","value":"bx bx-calendar","type":"label"}]},{"id":"_help_2FvYrpmOXm29","title":"Table","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Collections/Table"},{"name":"iconClass","value":"bx bx-table","type":"label"}]},{"id":"_help_CtBQqbwXDx1w","title":"Kanban Board","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Collections/Kanban Board"},{"name":"iconClass","value":"bx bx-columns","type":"label"}]},{"id":"_help_81SGnPGMk7Xc","title":"Geo Map","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Collections/Geo Map"},{"name":"iconClass","value":"bx bx-map-alt","type":"label"}]},{"id":"_help_zP3PMqaG71Ct","title":"Presentation","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Collections/Presentation"},{"name":"iconClass","value":"bx bx-slideshow","type":"label"}]},{"id":"_help_8QqnMzx393bx","title":"Grid View","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Collections/Grid View"},{"name":"iconClass","value":"bx bxs-grid","type":"label"}]},{"id":"_help_mULW0Q3VojwY","title":"List View","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Collections/List View"},{"name":"iconClass","value":"bx bx-list-ul","type":"label"}]}]},{"id":"_help_BgmBlOIl72jZ","title":"Troubleshooting","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Troubleshooting"},{"name":"iconClass","value":"bx bx-bug","type":"label"}],"children":[{"id":"_help_wy8So3yZZlH9","title":"Reporting issues","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Troubleshooting/Reporting issues"},{"name":"iconClass","value":"bx bx-bug-alt","type":"label"}]},{"id":"_help_x59R8J8KV5Bp","title":"Anonymized Database","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Troubleshooting/Anonymized Database"},{"name":"iconClass","value":"bx bx-low-vision","type":"label"}]},{"id":"_help_qzNzp9LYQyPT","title":"Error logs","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Troubleshooting/Error logs"},{"name":"iconClass","value":"bx bx-comment-error","type":"label"}],"children":[{"id":"_help_bnyigUA2UK7s","title":"Backend (server) logs","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Troubleshooting/Error logs/Backend (server) logs"},{"name":"iconClass","value":"bx bx-server","type":"label"}]},{"id":"_help_9yEHzMyFirZR","title":"Frontend logs","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Troubleshooting/Error logs/Frontend logs"},{"name":"iconClass","value":"bx bx-window-alt","type":"label"}]}]},{"id":"_help_vdlYGAcpXAgc","title":"Synchronization fails with 504 Gateway Timeout","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Troubleshooting/Synchronization fails with 504"},{"name":"iconClass","value":"bx bx-error","type":"label"}]},{"id":"_help_s8alTXmpFR61","title":"Refreshing the application","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Troubleshooting/Refreshing the application"},{"name":"iconClass","value":"bx bx-refresh","type":"label"}]}]},{"id":"_help_pKK96zzmvBGf","title":"Theme development","type":"book","attributes":[{"name":"iconClass","value":"bx bx-palette","type":"label"}],"children":[{"id":"_help_7NfNr5pZpVKV","title":"Creating a custom theme","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Theme development/Creating a custom theme"},{"name":"iconClass","value":"bx bxs-color","type":"label"}]},{"id":"_help_WFGzWeUK6arS","title":"Customize the Next theme","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Theme development/Customize the Next theme"},{"name":"iconClass","value":"bx bx-news","type":"label"}]},{"id":"_help_WN5z4M8ASACJ","title":"Reference","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Theme development/Reference"},{"name":"iconClass","value":"bx bx-book-open","type":"label"}]},{"id":"_help_AlhDUqhENtH7","title":"Custom app-wide CSS","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Theme development/Custom app-wide CSS"},{"name":"iconClass","value":"bx bxs-file-css","type":"label"}]}]},{"id":"_help_tC7s2alapj8V","title":"Advanced Usage","type":"book","attributes":[{"name":"iconClass","value":"bx bx-rocket","type":"label"}],"children":[{"id":"_help_zEY4DaJG4YT5","title":"Attributes","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Attributes"},{"name":"iconClass","value":"bx bx-list-check","type":"label"}],"children":[{"id":"_help_HI6GBBIduIgv","title":"Labels","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Attributes/Labels"},{"name":"iconClass","value":"bx bx-hash","type":"label"}]},{"id":"_help_Cq5X6iKQop6R","title":"Relations","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Attributes/Relations"},{"name":"iconClass","value":"bx bx-transfer","type":"label"}]},{"id":"_help_bwZpz2ajCEwO","title":"Attribute Inheritance","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Attributes/Attribute Inheritance"},{"name":"iconClass","value":"bx bx-list-plus","type":"label"}]},{"id":"_help_OFXdgB2nNk1F","title":"Promoted Attributes","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Attributes/Promoted Attributes"},{"name":"iconClass","value":"bx bx-table","type":"label"}]}]},{"id":"_help_KC1HB96bqqHX","title":"Templates","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Templates"},{"name":"iconClass","value":"bx bx-copy","type":"label"}]},{"id":"_help_BCkXAVs63Ttv","title":"Note Map (Link map, Tree map)","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Note Map (Link map, Tree map)"},{"name":"iconClass","value":"bx bxs-network-chart","type":"label"}]},{"id":"_help_R9pX4DGra2Vt","title":"Sharing","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Sharing"},{"name":"iconClass","value":"bx bx-share-alt","type":"label"}],"children":[{"id":"_help_Qjt68inQ2bRj","title":"Serving directly the content of a note","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Sharing/Serving directly the content o"},{"name":"iconClass","value":"bx bx-code","type":"label"}]},{"id":"_help_ycBFjKrrwE9p","title":"Exporting static HTML for web publishing","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Sharing/Exporting static HTML for web "},{"name":"iconClass","value":"bx bxs-file-html","type":"label"}]},{"id":"_help_sLIJ6f1dkJYW","title":"Reverse proxy configuration","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Sharing/Reverse proxy configuration"},{"name":"iconClass","value":"bx bx-world","type":"label"}]}]},{"id":"_help_5668rwcirq1t","title":"Advanced Showcases","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Advanced Showcases"},{"name":"iconClass","value":"bx bxs-component","type":"label"}],"children":[{"id":"_help_l0tKav7yLHGF","title":"Day Notes","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Advanced Showcases/Day Notes"},{"name":"iconClass","value":"bx bx-calendar","type":"label"}]},{"id":"_help_R7abl2fc6Mxi","title":"Weight Tracker","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Advanced Showcases/Weight Tracker"},{"name":"iconClass","value":"bx bx-line-chart","type":"label"}]},{"id":"_help_xYjQUYhpbUEW","title":"Task Manager","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Advanced Showcases/Task Manager"},{"name":"iconClass","value":"bx bx-calendar-check","type":"label"}]}]},{"id":"_help_J5Ex1ZrMbyJ6","title":"Custom Request Handler","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Custom Request Handler"},{"name":"iconClass","value":"bx bx-globe","type":"label"}]},{"id":"_help_d3fAXQ2diepH","title":"Custom Resource Providers","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Custom Resource Providers"},{"name":"iconClass","value":"bx bxs-file-plus","type":"label"}]},{"id":"_help_pgxEVkzLl1OP","title":"ETAPI (REST API)","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/ETAPI (REST API)"},{"name":"iconClass","value":"bx bx-extension","type":"label"}],"children":[{"id":"_help_9qPsTWBorUhQ","title":"API Reference","type":"webView","attributes":[{"type":"label","name":"webViewSrc","value":"https://docs.triliumnotes.org/rest-api/etapi/"},{"name":"iconClass","value":"bx bx-file","type":"label"}],"enforceAttributes":true}]},{"id":"_help_47ZrP6FNuoG8","title":"Default Note Title","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Default Note Title"},{"name":"iconClass","value":"bx bx-edit-alt","type":"label"}]},{"id":"_help_wX4HbRucYSDD","title":"Database","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Database"},{"name":"iconClass","value":"bx bx-data","type":"label"}],"children":[{"id":"_help_oyIAJ9PvvwHX","title":"Manually altering the database","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Database/Manually altering the database"},{"name":"iconClass","value":"bx bxs-edit","type":"label"}],"children":[{"id":"_help_YKWqdJhzi2VY","title":"SQL Console","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Database/Manually altering the database/SQL Console"},{"name":"iconClass","value":"bx bx-data","type":"label"}]}]},{"id":"_help_6tZeKvSHEUiB","title":"Demo Notes","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Database/Demo Notes"},{"name":"iconClass","value":"bx bx-package","type":"label"}]}]},{"id":"_help_Gzjqa934BdH4","title":"Configuration (config.ini or environment variables)","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Configuration (config.ini or e"},{"name":"iconClass","value":"bx bx-cog","type":"label"}],"children":[{"id":"_help_c5xB8m4g2IY6","title":"Trilium instance","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Configuration (config.ini or environment variables)/Trilium instance"},{"name":"iconClass","value":"bx bx-windows","type":"label"}]},{"id":"_help_LWtBjFej3wX3","title":"Cross-Origin Resource Sharing (CORS)","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Configuration (config.ini or environment variables)/Cross-Origin Resource Sharing "},{"name":"iconClass","value":"bx bx-lock","type":"label"}]}]},{"id":"_help_ivYnonVFBxbQ","title":"Bulk Actions","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Bulk Actions"},{"name":"iconClass","value":"bx bx-list-plus","type":"label"}]},{"id":"_help_4FahAwuGTAwC","title":"Note source","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Note source"},{"name":"iconClass","value":"bx bx-code","type":"label"}]},{"id":"_help_1YeN2MzFUluU","title":"Technologies used","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Technologies used"},{"name":"iconClass","value":"bx bx-pyramid","type":"label"}],"children":[{"id":"_help_MI26XDLSAlCD","title":"CKEditor","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Technologies used/CKEditor"},{"name":"iconClass","value":"bx bx-file","type":"label"}]},{"id":"_help_N4IDkixaDG9C","title":"MindElixir","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Technologies used/MindElixir"},{"name":"iconClass","value":"bx bx-sitemap","type":"label"}]},{"id":"_help_H0mM1lTxF9JI","title":"Excalidraw","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Technologies used/Excalidraw"},{"name":"iconClass","value":"bx bx-pen","type":"label"}]},{"id":"_help_MQHyy2dIFgxS","title":"Leaflet","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Technologies used/Leaflet"},{"name":"iconClass","value":"bx bx-map-alt","type":"label"}]}]},{"id":"_help_m1lbrzyKDaRB","title":"Note ID","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Note ID"},{"name":"iconClass","value":"bx bx-hash","type":"label"}]},{"id":"_help_0vTSyvhPTAOz","title":"Internal API","type":"book","attributes":[{"name":"iconClass","value":"bx bxs-component","type":"label"}],"children":[{"id":"_help_z8O2VG4ZZJD7","title":"API Reference","type":"webView","attributes":[{"type":"label","name":"webViewSrc","value":"https://docs.triliumnotes.org/rest-api/internal/"},{"name":"iconClass","value":"bx bx-file","type":"label"}],"enforceAttributes":true}]},{"id":"_help_2mUhVmZK8RF3","title":"Hidden Notes","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Hidden Notes"},{"name":"iconClass","value":"bx bx-hide","type":"label"}]},{"id":"_help_uYF7pmepw27K","title":"Metrics","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Metrics"},{"name":"iconClass","value":"bx bxs-data","type":"label"}],"children":[{"id":"_help_bOP3TB56fL1V","title":"grafana-dashboard.json","type":"doc","attributes":[{"name":"iconClass","value":"bx bx-file","type":"label"}]}]},{"id":"_help_64ZTlUPgEPtW","title":"Safe mode","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Safe mode"},{"name":"iconClass","value":"bx bxs-virus-block","type":"label"}]},{"id":"_help_HAIOFBoYIIdO","title":"Nightly release","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Nightly release"},{"name":"iconClass","value":"bx bx-moon","type":"label"}]},{"id":"_help_ZmT9ln8XJX2o","title":"Read-only database","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Read-only database"},{"name":"iconClass","value":"bx bx-book-reader","type":"label"}]}]},{"id":"_help_GBBMSlVSOIGP","title":"AI","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/AI"},{"name":"iconClass","value":"bx bx-bot","type":"label"}],"children":[{"id":"_help_WkM7gsEUyCXs","title":"Providers","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/AI/Providers"},{"name":"iconClass","value":"bx bx-select-multiple","type":"label"}],"children":[{"id":"_help_7EdTxPADv95W","title":"Ollama","type":"book","attributes":[{"name":"iconClass","value":"bx bx-message-dots","type":"label"}],"children":[{"id":"_help_vvUCN7FDkq7G","title":"Installing Ollama","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/AI/Providers/Ollama/Installing Ollama"},{"name":"iconClass","value":"bx bx-file","type":"label"}]}]},{"id":"_help_ZavFigBX9AwP","title":"OpenAI","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/AI/Providers/OpenAI"},{"name":"iconClass","value":"bx bx-message-dots","type":"label"}]},{"id":"_help_e0lkirXEiSNc","title":"Anthropic","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/AI/Providers/Anthropic"},{"name":"iconClass","value":"bx bx-message-dots","type":"label"}]}]}]},{"id":"_help_CdNpE2pqjmI6","title":"Scripting","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Scripting"},{"name":"iconClass","value":"bx bxs-file-js","type":"label"}],"children":[{"id":"_help_yIhgI5H7A2Sm","title":"Frontend Basics","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Scripting/Frontend Basics"},{"name":"iconClass","value":"bx bx-window","type":"label"}],"children":[{"id":"_help_MgibgPcfeuGz","title":"Custom Widgets","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Scripting/Frontend Basics/Custom Widgets"},{"name":"iconClass","value":"bx bxs-widget","type":"label"}],"children":[{"id":"_help_YNxAqkI5Kg1M","title":"Word count widget","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Scripting/Frontend Basics/Custom Widgets/Word count widget"},{"name":"iconClass","value":"bx bx-file","type":"label"}]},{"id":"_help_SynTBQiBsdYJ","title":"Widget Basics","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Scripting/Frontend Basics/Custom Widgets/Widget Basics"},{"name":"iconClass","value":"bx bx-file","type":"label"}]},{"id":"_help_M8IppdwVHSjG","title":"Right pane widget","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Scripting/Frontend Basics/Custom Widgets/Right pane widget"},{"name":"iconClass","value":"bx bx-file","type":"label"}]},{"id":"_help_VqGQnnPGnqAU","title":"CSS","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Scripting/Frontend Basics/Custom Widgets/CSS"},{"name":"iconClass","value":"bx bx-file","type":"label"}]}]},{"id":"_help_es8OU2GuguFU","title":"Examples","type":"book","attributes":[{"name":"iconClass","value":"bx bx-code-alt","type":"label"}],"children":[{"id":"_help_TjLYAo3JMO8X","title":"\"New Task\" launcher button","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Scripting/Frontend Basics/Examples/New Task launcher button"},{"name":"iconClass","value":"bx bx-task","type":"label"}]},{"id":"_help_7kZPMD0uFwkH","title":"Downloading responses from Google Forms","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Scripting/Frontend Basics/Examples/Downloading responses from Goo"},{"name":"iconClass","value":"bx bx-file","type":"label"}]},{"id":"_help_DL92EjAaXT26","title":"Using promoted attributes to configure scripts","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Scripting/Frontend Basics/Examples/Using promoted attributes to c"},{"name":"iconClass","value":"bx bx-file","type":"label"}]}]}]},{"id":"_help_SPirpZypehBG","title":"Backend scripts","type":"book","attributes":[{"name":"iconClass","value":"bx bx-server","type":"label"}],"children":[{"id":"_help_fZ2IGYFXjkEy","title":"Server-side imports","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Scripting/Backend scripts/Server-side imports"},{"name":"iconClass","value":"bx bx-file","type":"label"}]},{"id":"_help_GPERMystNGTB","title":"Events","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Scripting/Backend scripts/Events"},{"name":"iconClass","value":"bx bx-rss","type":"label"}]}]},{"id":"_help_GLks18SNjxmC","title":"Script API","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Scripting/Script API"},{"name":"iconClass","value":"bx bx-code-curly","type":"label"}],"children":[{"id":"_help_Q2z6av6JZVWm","title":"Frontend API","type":"webView","attributes":[{"type":"label","name":"webViewSrc","value":"https://docs.triliumnotes.org/script-api/frontend"},{"name":"iconClass","value":"bx bx-folder","type":"label"}],"enforceAttributes":true,"children":[{"id":"_help_habiZ3HU8Kw8","title":"FNote","type":"webView","attributes":[{"type":"label","name":"webViewSrc","value":"https://docs.triliumnotes.org/script-api/frontend/interfaces/FNote.html"},{"name":"iconClass","value":"bx bx-file","type":"label"}],"enforceAttributes":true}]},{"id":"_help_MEtfsqa5VwNi","title":"Backend API","type":"webView","attributes":[{"type":"label","name":"webViewSrc","value":"https://docs.triliumnotes.org/script-api/backend"},{"name":"iconClass","value":"bx bx-file","type":"label"}],"enforceAttributes":true}]},{"id":"_help_vElnKeDNPSVl","title":"Logging","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Scripting/Logging"},{"name":"iconClass","value":"bx bx-terminal","type":"label"}]}]},{"id":"_help_Fm0j45KqyHpU","title":"Miscellaneous","type":"book","attributes":[{"name":"iconClass","value":"bx bx-info-circle","type":"label"}],"children":[{"id":"_help_WFbFXrgnDyyU","title":"Privacy Policy","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Miscellaneous/Privacy Policy"},{"name":"iconClass","value":"bx bx-file","type":"label"}]},{"id":"_help_NcsmUYZRWEW4","title":"Patterns of personal knowledge","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Miscellaneous/Patterns of personal knowledge"},{"name":"iconClass","value":"bx bx-file","type":"label"}]}]}] \ No newline at end of file +[{"id":"_help_BOCnjTMBCoxW","title":"Feature Highlights","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Feature Highlights"},{"name":"iconClass","value":"bx bx-star","type":"label"}]},{"id":"_help_Otzi9La2YAUX","title":"Installation & Setup","type":"book","attributes":[{"name":"iconClass","value":"bx bx-cog","type":"label"}],"children":[{"id":"_help_poXkQfguuA0U","title":"Desktop Installation","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Desktop Installation"},{"name":"iconClass","value":"bx bx-desktop","type":"label"}],"children":[{"id":"_help_nRqcgfTb97uV","title":"Using the desktop application as a server","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Desktop Installation/Using the desktop application "},{"name":"iconClass","value":"bx bx-file","type":"label"}]},{"id":"_help_Rp0q8bSP6Ayl","title":"System Requirements","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Desktop Installation/System Requirements"},{"name":"iconClass","value":"bx bx-chip","type":"label"}]},{"id":"_help_Un4wj2Mak2Ky","title":"Nix flake","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Desktop Installation/Nix flake"},{"name":"iconClass","value":"bx bxl-tux","type":"label"}]}]},{"id":"_help_WOcw2SLH6tbX","title":"Server Installation","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Server Installation"},{"name":"iconClass","value":"bx bx-server","type":"label"}],"children":[{"id":"_help_Dgg7bR3b6K9j","title":"1. Installing the server","type":"book","attributes":[{"name":"iconClass","value":"bx bx-folder","type":"label"}],"children":[{"id":"_help_3tW6mORuTHnB","title":"Packaged version for Linux","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Server Installation/1. Installing the server/Packaged version for Linux"},{"name":"iconClass","value":"bx bxl-tux","type":"label"}]},{"id":"_help_rWX5eY045zbE","title":"Using Docker","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Server Installation/1. Installing the server/Using Docker"},{"name":"iconClass","value":"bx bxl-docker","type":"label"}]},{"id":"_help_moVgBcoxE3EK","title":"On NixOS","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Server Installation/1. Installing the server/On NixOS"},{"name":"iconClass","value":"bx bxl-tux","type":"label"}]},{"id":"_help_J1Bb6lVlwU5T","title":"Manually","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Server Installation/1. Installing the server/Manually"},{"name":"iconClass","value":"bx bx-code-alt","type":"label"}]},{"id":"_help_DCmT6e7clMoP","title":"Using Kubernetes","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Server Installation/1. Installing the server/Using Kubernetes"},{"name":"iconClass","value":"bx bxl-kubernetes","type":"label"}]},{"id":"_help_klCWNks3ReaQ","title":"Multiple server instances","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Server Installation/1. Installing the server/Multiple server instances"},{"name":"iconClass","value":"bx bxs-user-account","type":"label"}]}]},{"id":"_help_vcjrb3VVYPZI","title":"2. Reverse proxy","type":"book","attributes":[{"name":"iconClass","value":"bx bx-folder","type":"label"}],"children":[{"id":"_help_ud6MShXL4WpO","title":"Nginx","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Server Installation/2. Reverse proxy/Nginx"},{"name":"iconClass","value":"bx bx-file","type":"label"}]},{"id":"_help_fDLvzOx29Pfg","title":"Apache using Docker","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Server Installation/2. Reverse proxy/Apache using Docker"},{"name":"iconClass","value":"bx bx-file","type":"label"}]},{"id":"_help_LLzSMXACKhUs","title":"Trusted proxy","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Server Installation/2. Reverse proxy/Trusted proxy"},{"name":"iconClass","value":"bx bx-file","type":"label"}]},{"id":"_help_5ERVJb9s4FRD","title":"Traefik","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Server Installation/2. Reverse proxy/Traefik"},{"name":"iconClass","value":"bx bx-file","type":"label"}]}]},{"id":"_help_l2VkvOwUNfZj","title":"HTTPS (TLS)","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Server Installation/HTTPS (TLS)"},{"name":"iconClass","value":"bx bx-lock-alt","type":"label"}]},{"id":"_help_0hzsNCP31IAB","title":"Authentication","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Server Installation/Authentication"},{"name":"iconClass","value":"bx bx-user","type":"label"}]},{"id":"_help_7DAiwaf8Z7Rz","title":"Multi-Factor Authentication","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Server Installation/Multi-Factor Authentication"},{"name":"iconClass","value":"bx bx-stopwatch","type":"label"}]},{"id":"_help_Un4wj2Mak2Ky","title":"Nix flake","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Server Installation/Nix flake.clone"},{"name":"iconClass","value":"bx bx-file","type":"label"}]},{"id":"_help_yeEaYqosGLSh","title":"Third-party cloud hosting","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Server Installation/Third-party cloud hosting"},{"name":"iconClass","value":"bx bx-cloud","type":"label"}]},{"id":"_help_iGTnKjubbXkA","title":"System Requirements","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Server Installation/System Requirements"},{"name":"iconClass","value":"bx bx-chip","type":"label"}]}]},{"id":"_help_cbkrhQjrkKrh","title":"Synchronization","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Synchronization"},{"name":"iconClass","value":"bx bx-sync","type":"label"}]},{"id":"_help_RDslemsQ6gCp","title":"Mobile Frontend","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Mobile Frontend"},{"name":"iconClass","value":"bx bx-mobile-alt","type":"label"}]},{"id":"_help_MtPxeAWVAzMg","title":"Web Clipper","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Web Clipper"},{"name":"iconClass","value":"bx bx-paperclip","type":"label"}]},{"id":"_help_n1lujUxCwipy","title":"Upgrading TriliumNext","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Upgrading TriliumNext"},{"name":"iconClass","value":"bx bx-up-arrow-alt","type":"label"}]},{"id":"_help_ODY7qQn5m2FT","title":"Backup","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Backup"},{"name":"iconClass","value":"bx bx-hdd","type":"label"}]},{"id":"_help_tAassRL4RSQL","title":"Data directory","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Data directory"},{"name":"iconClass","value":"bx bx-folder-open","type":"label"}]}]},{"id":"_help_gh7bpGYxajRS","title":"Basic Concepts and Features","type":"book","attributes":[{"name":"iconClass","value":"bx bx-help-circle","type":"label"}],"children":[{"id":"_help_Vc8PjrjAGuOp","title":"UI Elements","type":"book","attributes":[{"name":"iconClass","value":"bx bx-window-alt","type":"label"}],"children":[{"id":"_help_x0JgW8UqGXvq","title":"Vertical and horizontal layout","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/Vertical and horizontal layout"},{"name":"iconClass","value":"bx bxs-layout","type":"label"}]},{"id":"_help_x3i7MxGccDuM","title":"Global menu","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/Global menu"},{"name":"iconClass","value":"bx bx-menu","type":"label"}]},{"id":"_help_oPVyFC7WL2Lp","title":"Note Tree","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/Note Tree"},{"name":"iconClass","value":"bx bxs-tree-alt","type":"label"}],"children":[{"id":"_help_YtSN43OrfzaA","title":"Note tree contextual menu","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/Note Tree/Note tree contextual menu"},{"name":"iconClass","value":"bx bx-menu","type":"label"}]},{"id":"_help_yTjUdsOi4CIE","title":"Multiple selection","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/Note Tree/Multiple selection"},{"name":"iconClass","value":"bx bx-list-plus","type":"label"}]},{"id":"_help_DvdZhoQZY9Yd","title":"Keyboard shortcuts","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/Note Tree/Keyboard shortcuts"},{"name":"iconClass","value":"bx bxs-keyboard","type":"label"}]}]},{"id":"_help_BlN9DFI679QC","title":"Ribbon","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/Ribbon"},{"name":"iconClass","value":"bx bx-dots-horizontal","type":"label"}]},{"id":"_help_3seOhtN8uLIY","title":"Tabs","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/Tabs"},{"name":"iconClass","value":"bx bx-dock-top","type":"label"}]},{"id":"_help_xYmIYSP6wE3F","title":"Launch Bar","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/Launch Bar"},{"name":"iconClass","value":"bx bx-sidebar","type":"label"}]},{"id":"_help_8YBEPzcpUgxw","title":"Note buttons","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/Note buttons"},{"name":"iconClass","value":"bx bx-dots-vertical-rounded","type":"label"}]},{"id":"_help_4TIF1oA4VQRO","title":"Options","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/Options"},{"name":"iconClass","value":"bx bx-cog","type":"label"}]},{"id":"_help_luNhaphA37EO","title":"Split View","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/Split View"},{"name":"iconClass","value":"bx bx-dock-right","type":"label"}]},{"id":"_help_XpOYSgsLkTJy","title":"Floating buttons","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/Floating buttons"},{"name":"iconClass","value":"bx bx-rectangle","type":"label"}]},{"id":"_help_RnaPdbciOfeq","title":"Right Sidebar","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/Right Sidebar"},{"name":"iconClass","value":"bx bxs-dock-right","type":"label"}]},{"id":"_help_r5JGHN99bVKn","title":"Recent Changes","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/Recent Changes"},{"name":"iconClass","value":"bx bx-history","type":"label"}]},{"id":"_help_ny318J39E5Z0","title":"Zoom","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/Zoom"},{"name":"iconClass","value":"bx bx-zoom-in","type":"label"}]},{"id":"_help_lgKX7r3aL30x","title":"Note Tooltip","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/Note Tooltip"},{"name":"iconClass","value":"bx bx-message-detail","type":"label"}]}]},{"id":"_help_BFs8mudNFgCS","title":"Notes","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Notes"},{"name":"iconClass","value":"bx bx-notepad","type":"label"}],"children":[{"id":"_help_p9kXRFAkwN4o","title":"Note Icons","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Notes/Note Icons"},{"name":"iconClass","value":"bx bxs-grid","type":"label"}]},{"id":"_help_0vhv7lsOLy82","title":"Attachments","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Notes/Attachments"},{"name":"iconClass","value":"bx bx-paperclip","type":"label"}]},{"id":"_help_IakOLONlIfGI","title":"Cloning Notes","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Notes/Cloning Notes"},{"name":"iconClass","value":"bx bx-duplicate","type":"label"}],"children":[{"id":"_help_TBwsyfadTA18","title":"Branch prefix","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Notes/Cloning Notes/Branch prefix"},{"name":"iconClass","value":"bx bx-rename","type":"label"}]}]},{"id":"_help_bwg0e8ewQMak","title":"Protected Notes","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Notes/Protected Notes"},{"name":"iconClass","value":"bx bx-lock-alt","type":"label"}]},{"id":"_help_MKmLg5x6xkor","title":"Archived Notes","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Notes/Archived Notes"},{"name":"iconClass","value":"bx bx-box","type":"label"}]},{"id":"_help_vZWERwf8U3nx","title":"Note Revisions","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Notes/Note Revisions"},{"name":"iconClass","value":"bx bx-history","type":"label"}]},{"id":"_help_aGlEvb9hyDhS","title":"Sorting Notes","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Notes/Sorting Notes"},{"name":"iconClass","value":"bx bx-sort-up","type":"label"}]},{"id":"_help_NRnIZmSMc5sj","title":"Printing & Exporting as PDF","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Notes/Printing & Exporting as PDF"},{"name":"iconClass","value":"bx bx-printer","type":"label"}]},{"id":"_help_CoFPLs3dRlXc","title":"Read-Only Notes","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Notes/Read-Only Notes"},{"name":"iconClass","value":"bx bx-edit-alt","type":"label"}]},{"id":"_help_0ESUbbAxVnoK","title":"Note List","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Notes/Note List"},{"name":"iconClass","value":"bx bxs-grid","type":"label"}]}]},{"id":"_help_wArbEsdSae6g","title":"Navigation","type":"book","attributes":[{"name":"iconClass","value":"bx bx-navigation","type":"label"}],"children":[{"id":"_help_kBrnXNG3Hplm","title":"Tree Concepts","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Navigation/Tree Concepts"},{"name":"iconClass","value":"bx bx-pyramid","type":"label"}]},{"id":"_help_MMiBEQljMQh2","title":"Note Navigation","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Navigation/Note Navigation"},{"name":"iconClass","value":"bx bxs-navigation","type":"label"}]},{"id":"_help_Ms1nauBra7gq","title":"Quick search","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Navigation/Quick search"},{"name":"iconClass","value":"bx bx-search-alt-2","type":"label"}]},{"id":"_help_F1r9QtzQLZqm","title":"Jump to...","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Navigation/Jump to"},{"name":"iconClass","value":"bx bx-send","type":"label"}]},{"id":"_help_eIg8jdvaoNNd","title":"Search","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Navigation/Search"},{"name":"iconClass","value":"bx bx-search-alt-2","type":"label"}]},{"id":"_help_u3YFHC9tQlpm","title":"Bookmarks","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Navigation/Bookmarks"},{"name":"iconClass","value":"bx bx-bookmarks","type":"label"}]},{"id":"_help_OR8WJ7Iz9K4U","title":"Note Hoisting","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Navigation/Note Hoisting"},{"name":"iconClass","value":"bx bxs-chevrons-up","type":"label"}]},{"id":"_help_ZjLYv08Rp3qC","title":"Quick edit","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Navigation/Quick edit"},{"name":"iconClass","value":"bx bx-edit","type":"label"}]},{"id":"_help_9sRHySam5fXb","title":"Workspaces","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Navigation/Workspaces"},{"name":"iconClass","value":"bx bx-door-open","type":"label"}]},{"id":"_help_xWtq5NUHOwql","title":"Similar Notes","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Navigation/Similar Notes"},{"name":"iconClass","value":"bx bx-bar-chart","type":"label"}]},{"id":"_help_McngOG2jbUWX","title":"Search in note","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Navigation/Search in note"},{"name":"iconClass","value":"bx bx-search-alt-2","type":"label"}]}]},{"id":"_help_A9Oc6YKKc65v","title":"Keyboard Shortcuts","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Keyboard Shortcuts"},{"name":"iconClass","value":"bx bxs-keyboard","type":"label"}]},{"id":"_help_Wy267RK4M69c","title":"Themes","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Themes"},{"name":"iconClass","value":"bx bx-palette","type":"label"}],"children":[{"id":"_help_VbjZvtUek0Ln","title":"Theme Gallery","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Themes/Theme Gallery"},{"name":"iconClass","value":"bx bx-book-reader","type":"label"}]}]},{"id":"_help_mHbBMPDPkVV5","title":"Import & Export","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Import & Export"},{"name":"iconClass","value":"bx bx-import","type":"label"}],"children":[{"id":"_help_Oau6X9rCuegd","title":"Markdown","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Import & Export/Markdown"},{"name":"iconClass","value":"bx bxl-markdown","type":"label"}],"children":[{"id":"_help_rJ9grSgoExl9","title":"Supported syntax","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Import & Export/Markdown/Supported syntax"},{"name":"iconClass","value":"bx bx-code-alt","type":"label"}]}]},{"id":"_help_syuSEKf2rUGr","title":"Evernote","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Import & Export/Evernote"},{"name":"iconClass","value":"bx bx-window-open","type":"label"}]},{"id":"_help_GnhlmrATVqcH","title":"OneNote","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Import & Export/OneNote"},{"name":"iconClass","value":"bx bx-window-open","type":"label"}]}]},{"id":"_help_rC3pL2aptaRE","title":"Zen mode","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Zen mode"},{"name":"iconClass","value":"bx bxs-yin-yang","type":"label"}]}]},{"id":"_help_s3YCWHBfmYuM","title":"Quick Start","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Quick Start"},{"name":"iconClass","value":"bx bx-run","type":"label"}]},{"id":"_help_i6dbnitykE5D","title":"FAQ","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/FAQ"},{"name":"iconClass","value":"bx bx-question-mark","type":"label"}]},{"id":"_help_KSZ04uQ2D1St","title":"Note Types","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types"},{"name":"iconClass","value":"bx bx-edit","type":"label"}],"children":[{"id":"_help_iPIMuisry3hd","title":"Text","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text"},{"name":"iconClass","value":"bx bx-note","type":"label"}],"children":[{"id":"_help_NwBbFdNZ9h7O","title":"Block quotes & admonitions","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Block quotes & admonitions"},{"name":"iconClass","value":"bx bx-info-circle","type":"label"}]},{"id":"_help_oSuaNgyyKnhu","title":"Bookmarks","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Bookmarks"},{"name":"iconClass","value":"bx bx-bookmark","type":"label"}]},{"id":"_help_veGu4faJErEM","title":"Content language & Right-to-left support","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Content language & Right-to-le"},{"name":"iconClass","value":"bx bx-align-right","type":"label"}]},{"id":"_help_2x0ZAX9ePtzV","title":"Cut to subnote","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Cut to subnote"},{"name":"iconClass","value":"bx bx-cut","type":"label"}]},{"id":"_help_UYuUB1ZekNQU","title":"Developer-specific formatting","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Developer-specific formatting"},{"name":"iconClass","value":"bx bx-code-alt","type":"label"}],"children":[{"id":"_help_QxEyIjRBizuC","title":"Code blocks","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Developer-specific formatting/Code blocks"},{"name":"iconClass","value":"bx bx-code","type":"label"}]}]},{"id":"_help_AgjCISero73a","title":"Footnotes","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Footnotes"},{"name":"iconClass","value":"bx bx-bracket","type":"label"}]},{"id":"_help_nRhnJkTT8cPs","title":"Formatting toolbar","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Formatting toolbar"},{"name":"iconClass","value":"bx bx-text","type":"label"}]},{"id":"_help_Gr6xFaF6ioJ5","title":"General formatting","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/General formatting"},{"name":"iconClass","value":"bx bx-bold","type":"label"}]},{"id":"_help_AxshuNRegLAv","title":"Highlights list","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Highlights list"},{"name":"iconClass","value":"bx bx-highlight","type":"label"}]},{"id":"_help_mT0HEkOsz6i1","title":"Images","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Images"},{"name":"iconClass","value":"bx bx-image-alt","type":"label"}],"children":[{"id":"_help_0Ofbk1aSuVRu","title":"Image references","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Images/Image references"},{"name":"iconClass","value":"bx bxs-file-image","type":"label"}]}]},{"id":"_help_nBAXQFj20hS1","title":"Include Note","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Include Note"},{"name":"iconClass","value":"bx bx-file","type":"label"}]},{"id":"_help_CohkqWQC1iBv","title":"Insert buttons","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Insert buttons"},{"name":"iconClass","value":"bx bx-plus","type":"label"}]},{"id":"_help_oiVPnW8QfnvS","title":"Keyboard shortcuts","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Keyboard shortcuts"},{"name":"iconClass","value":"bx bxs-keyboard","type":"label"}]},{"id":"_help_QEAPj01N5f7w","title":"Links","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Links"},{"name":"iconClass","value":"bx bx-link-alt","type":"label"}],"children":[{"id":"_help_3IDVtesTQ8ds","title":"External links","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Links/External links"},{"name":"iconClass","value":"bx bx-link-external","type":"label"}]},{"id":"_help_hrZ1D00cLbal","title":"Internal (reference) links","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Links/Internal (reference) links"},{"name":"iconClass","value":"bx bx-link","type":"label"}]}]},{"id":"_help_S6Xx8QIWTV66","title":"Lists","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Lists"},{"name":"iconClass","value":"bx bx-list-ul","type":"label"}]},{"id":"_help_QrtTYPmdd1qq","title":"Markdown-like formatting","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Markdown-like formatting"},{"name":"iconClass","value":"bx bxl-markdown","type":"label"}]},{"id":"_help_YfYAtQBcfo5V","title":"Math Equations","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Math Equations"},{"name":"iconClass","value":"bx bx-math","type":"label"}]},{"id":"_help_dEHYtoWWi8ct","title":"Other features","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Other features"},{"name":"iconClass","value":"bx bxs-grid","type":"label"}]},{"id":"_help_gLt3vA97tMcp","title":"Premium features","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Premium features"},{"name":"iconClass","value":"bx bx-star","type":"label"}],"children":[{"id":"_help_ZlN4nump6EbW","title":"Slash Commands","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Premium features/Slash Commands"},{"name":"iconClass","value":"bx bx-menu","type":"label"}]},{"id":"_help_pwc194wlRzcH","title":"Text Snippets","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Premium features/Text Snippets"},{"name":"iconClass","value":"bx bx-align-left","type":"label"}]},{"id":"_help_5wZallV2Qo1t","title":"Format Painter","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Premium features/Format Painter"},{"name":"iconClass","value":"bx bxs-paint-roll","type":"label"}]}]},{"id":"_help_BFvAtE74rbP6","title":"Table of contents","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Table of contents"},{"name":"iconClass","value":"bx bx-heading","type":"label"}]},{"id":"_help_NdowYOC1GFKS","title":"Tables","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Tables"},{"name":"iconClass","value":"bx bx-table","type":"label"}]}]},{"id":"_help_6f9hih2hXXZk","title":"Code","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Code"},{"name":"iconClass","value":"bx bx-code","type":"label"}]},{"id":"_help_m523cpzocqaD","title":"Saved Search","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Saved Search"},{"name":"iconClass","value":"bx bx-file-find","type":"label"}]},{"id":"_help_iRwzGnHPzonm","title":"Relation Map","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Relation Map"},{"name":"iconClass","value":"bx bxs-network-chart","type":"label"}]},{"id":"_help_bdUJEHsAPYQR","title":"Note Map","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Note Map"},{"name":"iconClass","value":"bx bxs-network-chart","type":"label"}]},{"id":"_help_HcABDtFCkbFN","title":"Render Note","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Render Note"},{"name":"iconClass","value":"bx bx-extension","type":"label"}]},{"id":"_help_s1aBHPd79XYj","title":"Mermaid Diagrams","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Mermaid Diagrams"},{"name":"iconClass","value":"bx bx-selection","type":"label"}],"children":[{"id":"_help_RH6yLjjWJHof","title":"ELK layout","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Mermaid Diagrams/ELK layout"},{"name":"iconClass","value":"bx bxs-network-chart","type":"label"}]},{"id":"_help_WWgeUaBb7UfC","title":"Syntax reference","type":"webView","attributes":[{"type":"label","name":"webViewSrc","value":"https://mermaid.js.org/intro/syntax-reference.html"},{"name":"iconClass","value":"bx bx-file","type":"label"}],"enforceAttributes":true}]},{"id":"_help_grjYqerjn243","title":"Canvas","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Canvas"},{"name":"iconClass","value":"bx bx-pen","type":"label"}]},{"id":"_help_1vHRoWCEjj0L","title":"Web View","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Web View"},{"name":"iconClass","value":"bx bx-globe-alt","type":"label"}]},{"id":"_help_gBbsAeiuUxI5","title":"Mind Map","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Mind Map"},{"name":"iconClass","value":"bx bx-sitemap","type":"label"}]},{"id":"_help_W8vYD3Q1zjCR","title":"File","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/File"},{"name":"iconClass","value":"bx bx-file-blank","type":"label"}]}]},{"id":"_help_GTwFsgaA0lCt","title":"Collections","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Collections"},{"name":"iconClass","value":"bx bx-book","type":"label"}],"children":[{"id":"_help_xWbu3jpNWapp","title":"Calendar","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Collections/Calendar"},{"name":"iconClass","value":"bx bx-calendar","type":"label"}]},{"id":"_help_2FvYrpmOXm29","title":"Table","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Collections/Table"},{"name":"iconClass","value":"bx bx-table","type":"label"}]},{"id":"_help_CtBQqbwXDx1w","title":"Kanban Board","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Collections/Kanban Board"},{"name":"iconClass","value":"bx bx-columns","type":"label"}]},{"id":"_help_81SGnPGMk7Xc","title":"Geo Map","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Collections/Geo Map"},{"name":"iconClass","value":"bx bx-map-alt","type":"label"}]},{"id":"_help_zP3PMqaG71Ct","title":"Presentation","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Collections/Presentation"},{"name":"iconClass","value":"bx bx-slideshow","type":"label"}]},{"id":"_help_8QqnMzx393bx","title":"Grid View","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Collections/Grid View"},{"name":"iconClass","value":"bx bxs-grid","type":"label"}]},{"id":"_help_mULW0Q3VojwY","title":"List View","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Collections/List View"},{"name":"iconClass","value":"bx bx-list-ul","type":"label"}]}]},{"id":"_help_BgmBlOIl72jZ","title":"Troubleshooting","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Troubleshooting"},{"name":"iconClass","value":"bx bx-bug","type":"label"}],"children":[{"id":"_help_wy8So3yZZlH9","title":"Reporting issues","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Troubleshooting/Reporting issues"},{"name":"iconClass","value":"bx bx-bug-alt","type":"label"}]},{"id":"_help_x59R8J8KV5Bp","title":"Anonymized Database","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Troubleshooting/Anonymized Database"},{"name":"iconClass","value":"bx bx-low-vision","type":"label"}]},{"id":"_help_qzNzp9LYQyPT","title":"Error logs","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Troubleshooting/Error logs"},{"name":"iconClass","value":"bx bx-comment-error","type":"label"}],"children":[{"id":"_help_bnyigUA2UK7s","title":"Backend (server) logs","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Troubleshooting/Error logs/Backend (server) logs"},{"name":"iconClass","value":"bx bx-server","type":"label"}]},{"id":"_help_9yEHzMyFirZR","title":"Frontend logs","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Troubleshooting/Error logs/Frontend logs"},{"name":"iconClass","value":"bx bx-window-alt","type":"label"}]}]},{"id":"_help_vdlYGAcpXAgc","title":"Synchronization fails with 504 Gateway Timeout","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Troubleshooting/Synchronization fails with 504"},{"name":"iconClass","value":"bx bx-error","type":"label"}]},{"id":"_help_s8alTXmpFR61","title":"Refreshing the application","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Troubleshooting/Refreshing the application"},{"name":"iconClass","value":"bx bx-refresh","type":"label"}]}]},{"id":"_help_pKK96zzmvBGf","title":"Theme development","type":"book","attributes":[{"name":"iconClass","value":"bx bx-palette","type":"label"}],"children":[{"id":"_help_7NfNr5pZpVKV","title":"Creating a custom theme","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Theme development/Creating a custom theme"},{"name":"iconClass","value":"bx bxs-color","type":"label"}]},{"id":"_help_WFGzWeUK6arS","title":"Customize the Next theme","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Theme development/Customize the Next theme"},{"name":"iconClass","value":"bx bx-news","type":"label"}]},{"id":"_help_WN5z4M8ASACJ","title":"Reference","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Theme development/Reference"},{"name":"iconClass","value":"bx bx-book-open","type":"label"}]},{"id":"_help_AlhDUqhENtH7","title":"Custom app-wide CSS","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Theme development/Custom app-wide CSS"},{"name":"iconClass","value":"bx bxs-file-css","type":"label"}]}]},{"id":"_help_tC7s2alapj8V","title":"Advanced Usage","type":"book","attributes":[{"name":"iconClass","value":"bx bx-rocket","type":"label"}],"children":[{"id":"_help_zEY4DaJG4YT5","title":"Attributes","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Attributes"},{"name":"iconClass","value":"bx bx-list-check","type":"label"}],"children":[{"id":"_help_HI6GBBIduIgv","title":"Labels","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Attributes/Labels"},{"name":"iconClass","value":"bx bx-hash","type":"label"}]},{"id":"_help_Cq5X6iKQop6R","title":"Relations","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Attributes/Relations"},{"name":"iconClass","value":"bx bx-transfer","type":"label"}]},{"id":"_help_bwZpz2ajCEwO","title":"Attribute Inheritance","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Attributes/Attribute Inheritance"},{"name":"iconClass","value":"bx bx-list-plus","type":"label"}]},{"id":"_help_OFXdgB2nNk1F","title":"Promoted Attributes","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Attributes/Promoted Attributes"},{"name":"iconClass","value":"bx bx-table","type":"label"}]}]},{"id":"_help_KC1HB96bqqHX","title":"Templates","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Templates"},{"name":"iconClass","value":"bx bx-copy","type":"label"}]},{"id":"_help_BCkXAVs63Ttv","title":"Note Map (Link map, Tree map)","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Note Map (Link map, Tree map)"},{"name":"iconClass","value":"bx bxs-network-chart","type":"label"}]},{"id":"_help_R9pX4DGra2Vt","title":"Sharing","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Sharing"},{"name":"iconClass","value":"bx bx-share-alt","type":"label"}],"children":[{"id":"_help_Qjt68inQ2bRj","title":"Serving directly the content of a note","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Sharing/Serving directly the content o"},{"name":"iconClass","value":"bx bx-code","type":"label"}]},{"id":"_help_ycBFjKrrwE9p","title":"Exporting static HTML for web publishing","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Sharing/Exporting static HTML for web "},{"name":"iconClass","value":"bx bxs-file-html","type":"label"}]},{"id":"_help_sLIJ6f1dkJYW","title":"Reverse proxy configuration","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Sharing/Reverse proxy configuration"},{"name":"iconClass","value":"bx bx-world","type":"label"}]}]},{"id":"_help_5668rwcirq1t","title":"Advanced Showcases","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Advanced Showcases"},{"name":"iconClass","value":"bx bxs-component","type":"label"}],"children":[{"id":"_help_l0tKav7yLHGF","title":"Day Notes","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Advanced Showcases/Day Notes"},{"name":"iconClass","value":"bx bx-calendar","type":"label"}]},{"id":"_help_R7abl2fc6Mxi","title":"Weight Tracker","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Advanced Showcases/Weight Tracker"},{"name":"iconClass","value":"bx bx-line-chart","type":"label"}]},{"id":"_help_xYjQUYhpbUEW","title":"Task Manager","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Advanced Showcases/Task Manager"},{"name":"iconClass","value":"bx bx-calendar-check","type":"label"}]}]},{"id":"_help_J5Ex1ZrMbyJ6","title":"Custom Request Handler","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Custom Request Handler"},{"name":"iconClass","value":"bx bx-globe","type":"label"}]},{"id":"_help_d3fAXQ2diepH","title":"Custom Resource Providers","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Custom Resource Providers"},{"name":"iconClass","value":"bx bxs-file-plus","type":"label"}]},{"id":"_help_pgxEVkzLl1OP","title":"ETAPI (REST API)","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/ETAPI (REST API)"},{"name":"iconClass","value":"bx bx-extension","type":"label"}],"children":[{"id":"_help_9qPsTWBorUhQ","title":"API Reference","type":"webView","attributes":[{"type":"label","name":"webViewSrc","value":"https://docs.triliumnotes.org/rest-api/etapi/"},{"name":"iconClass","value":"bx bx-file","type":"label"}],"enforceAttributes":true}]},{"id":"_help_47ZrP6FNuoG8","title":"Default Note Title","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Default Note Title"},{"name":"iconClass","value":"bx bx-edit-alt","type":"label"}]},{"id":"_help_wX4HbRucYSDD","title":"Database","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Database"},{"name":"iconClass","value":"bx bx-data","type":"label"}],"children":[{"id":"_help_oyIAJ9PvvwHX","title":"Manually altering the database","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Database/Manually altering the database"},{"name":"iconClass","value":"bx bxs-edit","type":"label"}],"children":[{"id":"_help_YKWqdJhzi2VY","title":"SQL Console","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Database/Manually altering the database/SQL Console"},{"name":"iconClass","value":"bx bx-data","type":"label"}]}]},{"id":"_help_6tZeKvSHEUiB","title":"Demo Notes","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Database/Demo Notes"},{"name":"iconClass","value":"bx bx-package","type":"label"}]}]},{"id":"_help_Gzjqa934BdH4","title":"Configuration (config.ini or environment variables)","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Configuration (config.ini or e"},{"name":"iconClass","value":"bx bx-cog","type":"label"}],"children":[{"id":"_help_c5xB8m4g2IY6","title":"Trilium instance","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Configuration (config.ini or environment variables)/Trilium instance"},{"name":"iconClass","value":"bx bx-windows","type":"label"}]},{"id":"_help_LWtBjFej3wX3","title":"Cross-Origin Resource Sharing (CORS)","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Configuration (config.ini or environment variables)/Cross-Origin Resource Sharing "},{"name":"iconClass","value":"bx bx-lock","type":"label"}]}]},{"id":"_help_ivYnonVFBxbQ","title":"Bulk Actions","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Bulk Actions"},{"name":"iconClass","value":"bx bx-list-plus","type":"label"}]},{"id":"_help_4FahAwuGTAwC","title":"Note source","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Note source"},{"name":"iconClass","value":"bx bx-code","type":"label"}]},{"id":"_help_1YeN2MzFUluU","title":"Technologies used","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Technologies used"},{"name":"iconClass","value":"bx bx-pyramid","type":"label"}],"children":[{"id":"_help_MI26XDLSAlCD","title":"CKEditor","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Technologies used/CKEditor"},{"name":"iconClass","value":"bx bx-file","type":"label"}]},{"id":"_help_N4IDkixaDG9C","title":"MindElixir","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Technologies used/MindElixir"},{"name":"iconClass","value":"bx bx-sitemap","type":"label"}]},{"id":"_help_H0mM1lTxF9JI","title":"Excalidraw","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Technologies used/Excalidraw"},{"name":"iconClass","value":"bx bx-pen","type":"label"}]},{"id":"_help_MQHyy2dIFgxS","title":"Leaflet","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Technologies used/Leaflet"},{"name":"iconClass","value":"bx bx-map-alt","type":"label"}]}]},{"id":"_help_m1lbrzyKDaRB","title":"Note ID","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Note ID"},{"name":"iconClass","value":"bx bx-hash","type":"label"}]},{"id":"_help_0vTSyvhPTAOz","title":"Internal API","type":"book","attributes":[{"name":"iconClass","value":"bx bxs-component","type":"label"}],"children":[{"id":"_help_z8O2VG4ZZJD7","title":"API Reference","type":"webView","attributes":[{"type":"label","name":"webViewSrc","value":"https://docs.triliumnotes.org/rest-api/internal/"},{"name":"iconClass","value":"bx bx-file","type":"label"}],"enforceAttributes":true}]},{"id":"_help_2mUhVmZK8RF3","title":"Hidden Notes","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Hidden Notes"},{"name":"iconClass","value":"bx bx-hide","type":"label"}]},{"id":"_help_uYF7pmepw27K","title":"Metrics","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Metrics"},{"name":"iconClass","value":"bx bxs-data","type":"label"}],"children":[{"id":"_help_bOP3TB56fL1V","title":"grafana-dashboard.json","type":"doc","attributes":[{"name":"iconClass","value":"bx bx-file","type":"label"}]}]},{"id":"_help_64ZTlUPgEPtW","title":"Safe mode","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Safe mode"},{"name":"iconClass","value":"bx bxs-virus-block","type":"label"}]},{"id":"_help_HAIOFBoYIIdO","title":"Nightly release","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Nightly release"},{"name":"iconClass","value":"bx bx-moon","type":"label"}]},{"id":"_help_ZmT9ln8XJX2o","title":"Read-only database","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Read-only database"},{"name":"iconClass","value":"bx bx-book-reader","type":"label"}]}]},{"id":"_help_GBBMSlVSOIGP","title":"AI","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/AI"},{"name":"iconClass","value":"bx bx-bot","type":"label"}],"children":[{"id":"_help_WkM7gsEUyCXs","title":"Providers","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/AI/Providers"},{"name":"iconClass","value":"bx bx-select-multiple","type":"label"}],"children":[{"id":"_help_7EdTxPADv95W","title":"Ollama","type":"book","attributes":[{"name":"iconClass","value":"bx bx-message-dots","type":"label"}],"children":[{"id":"_help_vvUCN7FDkq7G","title":"Installing Ollama","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/AI/Providers/Ollama/Installing Ollama"},{"name":"iconClass","value":"bx bx-file","type":"label"}]}]},{"id":"_help_ZavFigBX9AwP","title":"OpenAI","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/AI/Providers/OpenAI"},{"name":"iconClass","value":"bx bx-message-dots","type":"label"}]},{"id":"_help_e0lkirXEiSNc","title":"Anthropic","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/AI/Providers/Anthropic"},{"name":"iconClass","value":"bx bx-message-dots","type":"label"}]}]}]},{"id":"_help_CdNpE2pqjmI6","title":"Scripting","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Scripting"},{"name":"iconClass","value":"bx bxs-file-js","type":"label"}],"children":[{"id":"_help_yIhgI5H7A2Sm","title":"Frontend Basics","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Scripting/Frontend Basics"},{"name":"iconClass","value":"bx bx-window","type":"label"}],"children":[{"id":"_help_MgibgPcfeuGz","title":"Custom Widgets","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Scripting/Frontend Basics/Custom Widgets"},{"name":"iconClass","value":"bx bxs-widget","type":"label"}],"children":[{"id":"_help_YNxAqkI5Kg1M","title":"Word count widget","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Scripting/Frontend Basics/Custom Widgets/Word count widget"},{"name":"iconClass","value":"bx bx-file","type":"label"}]},{"id":"_help_SynTBQiBsdYJ","title":"Widget Basics","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Scripting/Frontend Basics/Custom Widgets/Widget Basics"},{"name":"iconClass","value":"bx bx-file","type":"label"}]},{"id":"_help_M8IppdwVHSjG","title":"Right pane widget","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Scripting/Frontend Basics/Custom Widgets/Right pane widget"},{"name":"iconClass","value":"bx bx-file","type":"label"}]},{"id":"_help_VqGQnnPGnqAU","title":"CSS","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Scripting/Frontend Basics/Custom Widgets/CSS"},{"name":"iconClass","value":"bx bx-file","type":"label"}]}]},{"id":"_help_es8OU2GuguFU","title":"Examples","type":"book","attributes":[{"name":"iconClass","value":"bx bx-code-alt","type":"label"}],"children":[{"id":"_help_TjLYAo3JMO8X","title":"\"New Task\" launcher button","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Scripting/Frontend Basics/Examples/New Task launcher button"},{"name":"iconClass","value":"bx bx-task","type":"label"}]},{"id":"_help_7kZPMD0uFwkH","title":"Downloading responses from Google Forms","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Scripting/Frontend Basics/Examples/Downloading responses from Goo"},{"name":"iconClass","value":"bx bx-file","type":"label"}]},{"id":"_help_DL92EjAaXT26","title":"Using promoted attributes to configure scripts","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Scripting/Frontend Basics/Examples/Using promoted attributes to c"},{"name":"iconClass","value":"bx bx-file","type":"label"}]}]}]},{"id":"_help_SPirpZypehBG","title":"Backend scripts","type":"book","attributes":[{"name":"iconClass","value":"bx bx-server","type":"label"}],"children":[{"id":"_help_fZ2IGYFXjkEy","title":"Server-side imports","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Scripting/Backend scripts/Server-side imports"},{"name":"iconClass","value":"bx bx-file","type":"label"}]},{"id":"_help_GPERMystNGTB","title":"Events","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Scripting/Backend scripts/Events"},{"name":"iconClass","value":"bx bx-rss","type":"label"}]}]},{"id":"_help_GLks18SNjxmC","title":"Script API","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Scripting/Script API"},{"name":"iconClass","value":"bx bx-code-curly","type":"label"}],"children":[{"id":"_help_Q2z6av6JZVWm","title":"Frontend API","type":"webView","attributes":[{"type":"label","name":"webViewSrc","value":"https://docs.triliumnotes.org/script-api/frontend"},{"name":"iconClass","value":"bx bx-folder","type":"label"}],"enforceAttributes":true,"children":[{"id":"_help_habiZ3HU8Kw8","title":"FNote","type":"webView","attributes":[{"type":"label","name":"webViewSrc","value":"https://docs.triliumnotes.org/script-api/frontend/interfaces/FNote.html"},{"name":"iconClass","value":"bx bx-file","type":"label"}],"enforceAttributes":true}]},{"id":"_help_MEtfsqa5VwNi","title":"Backend API","type":"webView","attributes":[{"type":"label","name":"webViewSrc","value":"https://docs.triliumnotes.org/script-api/backend"},{"name":"iconClass","value":"bx bx-file","type":"label"}],"enforceAttributes":true}]},{"id":"_help_vElnKeDNPSVl","title":"Logging","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Scripting/Logging"},{"name":"iconClass","value":"bx bx-terminal","type":"label"}]}]},{"id":"_help_Fm0j45KqyHpU","title":"Miscellaneous","type":"book","attributes":[{"name":"iconClass","value":"bx bx-info-circle","type":"label"}],"children":[{"id":"_help_WFbFXrgnDyyU","title":"Privacy Policy","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Miscellaneous/Privacy Policy"},{"name":"iconClass","value":"bx bx-file","type":"label"}]},{"id":"_help_NcsmUYZRWEW4","title":"Patterns of personal knowledge","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Miscellaneous/Patterns of personal knowledge"},{"name":"iconClass","value":"bx bx-file","type":"label"}]}]}] \ No newline at end of file diff --git a/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Note Types/Text.html b/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Note Types/Text.html index 2c55d232c..fad87118d 100644 --- a/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Note Types/Text.html +++ b/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Note Types/Text.html @@ -4,7 +4,7 @@

Most of the interaction with text notes is done via the built-in toolbars. Depending on preference, there are two different layouts:

    -
  • The Floating toolbar is hidden by default and only appears when +
  • The Floating toolbar is hidden by default and only appears when needed. In this mode there are actually two different toolbars:
  • -
  • A toolbar that appears when text is selected. This provides text-level +
  • A toolbar that appears when text is selected. This provides text-level formatting such as bold, italic, text colors, inline code, etc.
  • @@ -20,167 +20,171 @@

    Fore more information see Formatting toolbar.

    Features and formatting

    Here's a list of various features supported by text notes:

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Dedicated articleFeature
    General formatting - -
      -
    • Headings (section titles, paragraph)
    • -
    • Font size
    • -
    • Bold, italic, underline, strike-through
    • -
    • Superscript, subscript
    • -
    • Font color & background color
    • -
    • Remove formatting
    • -
    -
    Lists - -
      -
    • Bulleted lists
    • -
    • Numbered lists
    • -
    • To-do lists
    • -
    -
    Block quotes & admonitions - -
      -
    • Block quotes
    • -
    • Admonitions
    • -
    -
    Tables - -
      -
    • Basic tables
    • -
    • Merging cells
    • -
    • Styling tables and cells.
    • -
    • Table captions
    • -
    -
    Developer-specific formatting - -
      -
    • Inline code
    • -
    • Code blocks
    • -
    • Keyboard shortcuts
    • -
    -
    Footnotes - -
      -
    • Footnotes
    • -
    -
    Images - -
      -
    • Images
    • -
    -
    Links - -
      -
    • External links
    • -
    • Internal Trilium links
    • -
    -
    Include Note - -
      -
    • Include note
    • -
    -
    Insert buttons - -
      -
    • Symbols
    • -
    • Math Equations -
    • -
    • Mermaid diagrams
    • -
    • Horizontal ruler
    • -
    • Page break
    • -
    -
    Other features - - -
    Premium features - - -
    - -

    Read-Only vs. Editing Mode

    -

    Text notes are usually opened in edit mode. However, they may open in - read-only mode if the note is too big or the note is explicitly marked - as read-only. For more information, see Read-Only Notes.

    -

    Keyboard shortcuts

    -

    There are numerous keyboard shortcuts to format the text without having - to use the mouse. For a reference of all the key combinations, see  - Keyboard Shortcuts. In addition, see Markdown-like formatting as an alternative - to the keyboard shortcuts.

    -

    Technical details

    -

    For the text editing functionality, Trilium uses a commercial product - (with an open-source base) called CKEditor. - This brings the benefit of having a powerful WYSIWYG (What You See Is What - You Get) editor.

    \ No newline at end of file +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Dedicated articleFeature
    General formatting + +
      +
    • Headings (section titles, paragraph)
    • +
    • Font size
    • +
    • Bold, italic, underline, strike-through
    • +
    • Superscript, subscript
    • +
    • Font color & background color
    • +
    • Remove formatting
    • +
    +
    Lists + +
      +
    • Bulleted lists
    • +
    • Numbered lists
    • +
    • To-do lists
    • +
    +
    Block quotes & admonitions + +
      +
    • Block quotes
    • +
    • Admonitions
    • +
    +
    Tables + +
      +
    • Basic tables
    • +
    • Merging cells
    • +
    • Styling tables and cells.
    • +
    • Table captions
    • +
    +
    Developer-specific formatting + +
      +
    • Inline code
    • +
    • Code blocks
    • +
    • Keyboard shortcuts
    • +
    +
    Footnotes + +
      +
    • Footnotes
    • +
    +
    Images + +
      +
    • Images
    • +
    +
    Links + +
      +
    • External links
    • +
    • Internal Trilium links
    • +
    +
    Include Note + +
      +
    • Include note
    • +
    +
    Insert buttons + +
      +
    • Symbols
    • +
    • Math Equations +
    • +
    • Mermaid diagrams
    • +
    • Horizontal ruler
    • +
    • Page break
    • +
    +
    Other features + + +
    Premium features + + +
    +
    +

    Read-Only vs. Editing Mode

    +

    Text notes are usually opened in edit mode. However, they may open in + read-only mode if the note is too big or the note is explicitly marked + as read-only. For more information, see Read-Only Notes.

    +

    Keyboard shortcuts

    +

    There are numerous keyboard shortcuts to format the text without having + to use the mouse. For a reference of all the key combinations, see  + Keyboard Shortcuts. In addition, see Markdown-like formatting as an alternative + to the keyboard shortcuts.

    +

    Technical details

    +

    For the text editing functionality, Trilium uses a commercial product + (with an open-source base) called CKEditor. + This brings the benefit of having a powerful WYSIWYG (What You See Is What + You Get) editor.

    \ No newline at end of file diff --git a/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Note Types/Text/General formatting.html b/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Note Types/Text/General formatting.html index 687950459..ad458585a 100644 --- a/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Note Types/Text/General formatting.html +++ b/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Note Types/Text/General formatting.html @@ -12,11 +12,11 @@

    Apart from using the UI, it is also possible to quickly insert headings using the Markdown-like shortcuts:

      -
    • ## for Heading 2
    • -
    • ### for Heading 3
    • -
    • #### for Heading 4
    • -
    • ##### for Heading 5
    • -
    • ###### for Heading 6
    • +
    • ## for Heading 2
    • +
    • ### for Heading 3
    • +
    • #### for Heading 4
    • +
    • ##### for Heading 5
    • +
    • ###### for Heading 6

    Font size

    @@ -44,17 +44,17 @@

    This formatting can be easily removed using the Remove formatting item.

    The following keyboard shortcuts can be used here:

      -
    • Ctrl+B for bold
    • -
    • Ctrl+I for italic
    • -
    • Ctrl+U for underline
    • +
    • Ctrl+B for bold
    • +
    • Ctrl+I for italic
    • +
    • Ctrl+U for underline

    Alternatively, Markdown-like formatting can be used:

      -
    • Bold: Type **text** or __text__ +
    • Bold: Type **text** or __text__
    • -
    • Italic: Type *text* or _text_ +
    • Italic: Type *text* or _text_
    • -
    • Strikethrough: Type ~~text~~ +
    • Strikethrough: Type ~~text~~

    Superscript, subscript

    @@ -89,6 +89,11 @@ be manually changed back to a paragraph according to the Headings section.

    When pasting content that comes with undesired formatting, an alternative to pasting and then removing formatting is pasting as plain text via Ctrl+Shift+V.

    +

    Format painter

    +

    The Format Painter allows + users to copy the formatting of text (such as bold, italic, Strikethrough, + etc.) and apply it to other parts of the document. It helps maintain consistent + formatting and accelerates the creation of rich content.

    Support for Markdown

    When exported to Markdown, most of the general formatting is maintained such as headings, bold, italic, diff --git a/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Note Types/Text/Premium features/Format Painter.html b/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Note Types/Text/Premium features/Format Painter.html new file mode 100644 index 000000000..2d2bc60fc --- /dev/null +++ b/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Note Types/Text/Premium features/Format Painter.html @@ -0,0 +1,45 @@ +

    + +
    + +

    The Format Painter is a feature in text notes that allows users to copy + the formatting of text (such as bold, italic, Strikethrough, + etc.) and apply it to other parts of the document. It helps maintain consistent + formatting and accelerates the creation of rich content.

    +

    Usage Instructions

    +

    Click the text that you want to copy the formatting from and use the paint + formatting toolbar button (Format painter) to + copy the style. Then select the target text with your mouse to apply the + formatting.

    +
      +
    • To copy the formatting: Place the cursor inside a text + with some formatting and click the paint formatting toolbar button. Notice + that the mouse cursor changes to the Format painter text cursor.
    • +
    • To paint with the copied formatting: Click any word in + the document and the new formatting will be applied. Alternatively, instead + of clicking a single word, you can select a text fragment (like an entire + paragraph). Notice that the cursor will go back to the default one after + the formatting is applied.
    • +
    • To keep painting using the same formatting: Open the + toolbar dropdown and enable the continuous painting mode. Once copied, + the same formatting can be applied multiple times in different places until + the paint formatting button is clicked (the cursor will then revert to + the regular one).
    • +
    +

    Limitations

    +
      +
    1. Painting with block-level formatting (like headings or image styles) is + not supported yet. This is because, in CKEditor, + they are considered a part of the content rather than text formatting.
    2. +
    3. When applying formatting to words, spaces or other Western punctuation + are used as word boundaries, which prevents proper handling of languages + that do not use space-based word segmentation.
    4. +
    \ No newline at end of file diff --git a/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Note Types/Text/Premium features/Format Painter_746436a2e1.svg b/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Note Types/Text/Premium features/Format Painter_746436a2e1.svg new file mode 100644 index 000000000..77ad84f56 --- /dev/null +++ b/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Note Types/Text/Premium features/Format Painter_746436a2e1.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Note Types/Text/Premium features/Format Painter_e144e96df9.svg b/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Note Types/Text/Premium features/Format Painter_e144e96df9.svg new file mode 100644 index 000000000..06342b7c7 --- /dev/null +++ b/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Note Types/Text/Premium features/Format Painter_e144e96df9.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Note Types/Text/Premium features/Format Painter_image.png b/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Note Types/Text/Premium features/Format Painter_image.png new file mode 100644 index 0000000000000000000000000000000000000000..db5cbbbd1155a5b022d82204e6c2e74e707fae09 GIT binary patch literal 5251 zcmYkAXH*l<*MO4{Afbj(q#Fpm2?B!BLKl$Uq@(mAgd$ZTAiWAAO+Z8g2m;cJ^dd!y zbRr6&7m+Fmg7U7v^Z)RE*x7St_w3Hj-uuimH{L)`lbV8+0t5n4Yu#2e0?uE7;|>f0 zwDGoj&p{vrNJ~xGBnZ5dAB<(_yV5Ts3?_lcLy?^V5m%Lz|2&UTHN=F`U6VJs?3{-v zi;f-Qj6O{)|L&*PmRF`^7%K0jR}N3`4FYAVbid-s1E*tfQBhEc%8ib(-Nd$Mgq&{# z0s)b}6{2X{5%#C$d?e5|aI7ro`?qC{!W{L^?-GLjDI9WGVrPLusJ4UH*}YFO)NBDe zb3Uj0_nyT!ZJS*II~YLH9-p5~&&>RO)E*SOdU~)@7(Q97%gD%h!1?Jo+(@kxl(9N6 zG&EHF^3Q0#Trf*+m~~+9Iun@0U}kD6uhb&FpkCFRP@``3aIHzB@JwwUl%bi*nf!gZ zN4Bc6l4f%IMtwSr8CL@zP5VN0cN)$5QYPFu3iM2fAUtN?S-98^ht!ijHZ&Zsxs8|Z z?RqP1NxHV&m#CS-9$X)sBjFHZ?3d7&N<=f!j-PPI1$d4XC|s*IC^}}ZP*~jKHmXz9 zk83kE(8#m4vHA9MYf|ZK^;uk|k2L6NAy1|1W?sjyh0t5NUS7L4f#2}PVw4Q|6J0{H z8JFrpb90<&jSBwwhPLQESH=u8n%oZoKWzt>_+O^L>u_5)9Jw5%( z3tP9#%57m*ULStkn16;XLrbvI3sm>_on-Lo7f=}mJKyPTpl9QVrQx`BzZW)bD4v^_ zC&CK-40p%7KdI#osg{zJ3f#4h^t>%kD)Dic(}I+DVNXivk~*W|!F<@yam_b_FTC4X zKGCZ{{bV5-N8&7WE7LwDIfn)5HBXFQva^UgpzP%BBNDTz)^aBzNqs_ z5JTY#-v!BkX;JHZ@V!OP?KK4w!^05|gX{^{FhWLd zN&bd-BO6;7rUTDH?^Ha-q)%_*E8X9^bSbhqdU-IOfO>z#6sL*7=kC=AP-uMz$ZYcBD51~%-`KLysEo3Q!(EiP1)rHq#9;* z-n&D=z7yxl&OA>6(eR*XBDeiGlU%P5@^h}?0UIY0iQKGl97K)|ChK-j$JHR7Jn?Q> zp;jqm({_tCmVU#`kJx@@=OO36i6~QwV9l)Jjn;{87NfiiaoW6(;c@8XiYkqJ1Q%OE zT|Z$T{7i%^x{R`?_$PpPg|ql9d+0MeVKnL7>o+9LsT3Y=Px&M#s(Vv$oI@S&TR|?F z5>GH%%NfPF7&-!(%Y6N~PRk}LDxLR;rsrYY8$pOb-<5z-WE?ar1(hB@@lUt`!;wGcidpY^(8g%3&%^)t-|J>b|m(V(nmFfnJC~E@4ncfwzac3Q9^>BaS*S zH|&`?*c2ZHRoS)?Cz2ml-;zYW5VywmrFS{G4pU( ztVc>LotjL+GG2`gi6x=h^cXfwNf1dXh3E_^pZltD^h?&$KSSoQ!;JtYB;woX27j?PS*X{2tADRdvuHyVc`5BsD$SJOUjbnCg;Kbp`JVC< zGC?*;!@zh^YnVHsK7>$L5*;)G(45Y(-@Q#zuygVFl|~t~4R| zofI`qO--L?W$j&-WLSv-t5k`a@!yN1F={V2WxBgnf+FRGg@sK`+1?PMu1+LI3PxR+ zLBXyf+}hBPIW`UuLRVj3>3pa5{P_E<5{(niD%T0RykB}w!i9t8ffzqS>?u4kH0kcx zb2A|*OyuaHC>s4*|D__pFCMvDO{*HHk1!Aq5n7640+Bf5M)Z%5gEVm8C3%HdQ`m2I z>(c>?sjjZB`bs(*xE~Fw12Kz}01v!O2vrvD^)|+;%LVKZL%ofRki}xnbaBSe|8AfN zf?>vml{k))DO6&P#+4)_4(cZL5+_Zp8@-?=P#lXri7!Z>7)xAi*Lr~nz{VxsX!I@v z9^e`Y1KmK8?=wiZY{oSd7Z?9~y*OJSOa`I`dJn$Y#c4Y5Qt(XGq&t;E?js`{uj2*H zML}@X1Mrh58At860-V3zHjzjLLsQP>pVuFU(#&L;^{EAQ(k`%DM?eZ-WQG1%@mW*9 zILwIQSmvMh*5#Iw^G6?q9`l-JmNJ~O8v2<2$^3JC#@k-8b{rJo9s$u@qMnzj#M5X7 zyzNs1F?flT%VFm(-M$dimul^+Xp?R&GZEoSBO@8mSA7!=zE?jyu+ECT{J}_rvgJZ{ z0fQyEzm0`;;h7L%U&pgoDC_ijUdO=0za=kZHhvo4=aMIqdkd*0Aw%1tK?xT*$i1=@ z%ryR)0wnKb;GR39h1-H&!Q(UG@KfwUo`rWCC*=}YDX6F9aO`eUY1s`Zu4I5#TPP@k zlB*HozNGWjnB&5#8KbXD$n1%wwF^623tW8st4Cw)RV-)A$rq0^M`j7J`uh6l=;))3 zu__V4&f1!5<#1;we4QBVgy;|VS~R+%_r$ojD(4x$e*0eg`9k>RAJteILI5BWmPKaP z)}HgKt#X!mO9w0c{CBeVzj##jc`H7uT4Lh`FgwGTL!hM+Yx_Cz znNM;gRq1b>%S9p>eZ6wvMiYpZ=1e)Bl4pqd`JeR{-Z4}x-Bo*r z!JLxL!<5%rF#xc6L04dn}}kEBBMaO{Y`JGnhzmA!j#8)9KzUSyn5lnb`736v)|WDW3n7mXneAhIY-~6(1**H?zUu0vm1^rHkuSr3Z%yheeXDb$FUL=RPUoW%@5vU+7DRfl zt*zOG|2YO^kkI-j-lr?4L1(_6-Yj-u*1!obR$Rn$Oc+IAmSpTFg#lxhyN=Fc%c1kcV*XusLaO z(-q?27sD?ff1jz)mp@Q*a$3uk_V}30_G|T-{>0;*x$3IcLkb#0 z-`kz=!;>HLb|G85j$!Nk&F#lCRv7oGQbPfYhF5FvENX)uq;M(>$sNr(q=K(pz?PDa zW^`q~)de4|-}GCz2IiuPw22l<;XMV!%p1x~XUSekm|W04s(ilDdlB%!f9~eY+~P>) z6ngLMo!9T5TOtUD48yc**#Zg=TH&oo!-tJtNiG+{p+B0mS)O;2L|)_=wHVT+yYJ*t z0Y9mCp~5;pWc#g~o16TU%t8Q!Ol4m=BpG@&ANki9?cuXQ1!D-l;~e|`dULOdIEffRUmeaIQE%s7V~n9e8<&Eu6@6o zQpR%*HTc${KSdxoisP0)MjUNPPfzbg>Sy`BXdDS=-ndVw_b?xQ&CAPcNy57rypeCM zDAq)TOc(*#D|_;m4~m;>3k`%?`!My2mh!ryc8U_kR8-Ago9dW33!Jp@(z8!s_c|9v zy9M}9!l!v8Jz4eS8PAjjUkg1qaoE_%59G{=uP|=@eYWwE0FIX~j6%3Bv+Tpb+%+q` zgZhtZZrOq`BBmTJAHLSQ(B{CyMx-W|03yDxE zvX~6_A4*8b)m3IO>eJQ3-f?>GCZ}1xYA!z^b$E!1C>R`T<0ZOL5Gqz;YKuHEXc6G1 z^92_TagNAD0j}b6%Mm_n6KE3>a%+~M7JBE3y65J-^p@*rSwMG*)4bOKIJWYay*-Bg zy)*b^D&08IrFO+1W(Hy^8PpMLcAR*lh1N{r5o|wQPR#omAu`V`Gc*2L^96OtC(%ai zLdU^JwgU&}Cx7$&Mwi^fXDnO})M(jdQT*g5W|)sBLjtslr$hiRG%+foT@)Mgm1@K! zv0q>PXpOr|ijtD3Y`H9b6oI{yqUTZ+2a{xm)RGy?3wSFnj+47Nmr%$r%Wf3>L00!L z?ZwzP0V@(Wx=nJYi=@-DWTRao}*W>aw@s9XjH zBRp6*PvN-f>Im@%Op(=8QAUn2D;i@erx5i*l*Iedwp{Pk{>R5u58AvXK_DW2fe(03h5{T`3H{WSbpr zb#spVLiKmKG+-8}-w)7?-st}0J($k>2qP|eW0Jp-vUuoE?DpD6H+%M?<@>BflqH># zf1gJOSmW!snhKK;QZ*uhekX5X0i)7Sbo3y=#(L?ftW96#L2JR}7a3yu%fFAbSRVPT zBr0dC-KHng$r7t?rO%1W|3QNmAotS5`HuysGP3v>Dc}o^M(`@{5hYLSH-Jqw90WvD{ z&g!RHN&O|Jn?1$P$yBWdD-DT3(B_$ya zT=GA6^Pc*({Ic7E2c>A*|15N*x{?KbwMMt-F_Dg(d+?!zulK(}uv5`JeUhO{VsLmQ z+#xJLX^urBX8%cH2}cn)gUFCh7IypnVVic6&F+8h3S4-&OpcF4Lwfhd@p!x?+B^V_ z==h&T2B-P297tXnDk~GpU#MuI!^%TCsQ{0xa0xFqd6*k*WMl-C9n7q(%5(D&)>plt ztm+^fxE82`XjrE9(`tjct?Rj5932@L7(kAAe^MC;jRwdSEN;Jk{JYTuRWe{_jusS! z6#D~NB`hNHuCj7H;mxphS2FI$|JQ2Ww5DShZJu#%m=@!LqQS}TxAR%Ma6ktts;$gE z;7Qdx#VBT0*Ve#1Lk%+ddtnj$LBkAhcaVoY6_@;8LbI) z>T;%o(~~F~g|aNM(4>OkbRyUugM&gu?fF12r5pjHXJ}DFq;R^=wHq2n2pa{PLYK-+ zp@u>!AT6M5BUVp@4Hz?3W@<57e0rGeneral formatting
    • Headings (section titles, paragraph)
    • Font size
    • Bold, italic, underline, strike-through
    • Superscript, subscript
    • Font color & background color
    • Remove formatting
    Lists
    • Bulleted lists
    • Numbered lists
    • To-do lists
    Block quotes & admonitions
    • Block quotes
    • Admonitions
    Tables
    • Basic tables
    • Merging cells
    • Styling tables and cells.
    • Table captions
    Developer-specific formatting
    • Inline code
    • Code blocks
    • Keyboard shortcuts
    Footnotes
    • Footnotes
    Images
    • Images
    Links
    • External links
    • Internal Trilium links
    Include Note
    • Include note
    Insert buttonsOther featuresPremium features +
    Dedicated articleFeature
    General formatting
    • Headings (section titles, paragraph)
    • Font size
    • Bold, italic, underline, strike-through
    • Superscript, subscript
    • Font color & background color
    • Remove formatting
    Lists
    • Bulleted lists
    • Numbered lists
    • To-do lists
    Block quotes & admonitions
    • Block quotes
    • Admonitions
    Tables
    • Basic tables
    • Merging cells
    • Styling tables and cells.
    • Table captions
    Developer-specific formatting
    • Inline code
    • Code blocks
    • Keyboard shortcuts
    Footnotes
    • Footnotes
    Images
    • Images
    Links
    • External links
    • Internal Trilium links
    Include Note
    • Include note
    Insert buttons
    Other features
    Premium features
    ## Read-Only vs. Editing Mode diff --git a/docs/User Guide/User Guide/Note Types/Text/General formatting.md b/docs/User Guide/User Guide/Note Types/Text/General formatting.md index e05d730aa..28ffb5f03 100644 --- a/docs/User Guide/User Guide/Note Types/Text/General formatting.md +++ b/docs/User Guide/User Guide/Note Types/Text/General formatting.md @@ -79,6 +79,10 @@ Note that heading styles are not taken into consideration, these must be manuall When pasting content that comes with undesired formatting, an alternative to pasting and then removing formatting is pasting as plain text via Ctrl+Shift+V. +## Format painter + +The Format Painter allows users to copy the formatting of text (such as bold, italic, Strikethrough, etc.) and apply it to other parts of the document. It helps maintain consistent formatting and accelerates the creation of rich content. + ## Support for Markdown When exported to Markdown, most of the general formatting is maintained such as headings, bold, italic, underline, etc. \ No newline at end of file diff --git a/docs/User Guide/User Guide/Note Types/Text/Premium features/Format Painter.md b/docs/User Guide/User Guide/Note Types/Text/Premium features/Format Painter.md new file mode 100644 index 000000000..8bc94c6f7 --- /dev/null +++ b/docs/User Guide/User Guide/Note Types/Text/Premium features/Format Painter.md @@ -0,0 +1,20 @@ +# Format Painter +
    + +> [!NOTE] +> This is a premium feature of the editor we are using (CKEditor) and we benefit from it thanks to an written agreement with the team. See  Premium features for more information. + +The Format Painter is a feature in text notes that allows users to copy the formatting of text (such as **bold**, _italic_, ~~Strikethrough~~, etc.) and apply it to other parts of the document. It helps maintain consistent formatting and accelerates the creation of rich content. + +## Usage Instructions + +Click the text that you want to copy the formatting from and use the paint formatting toolbar button (Format painter) to copy the style. Then select the target text with your mouse to apply the formatting. + +* **To copy the formatting**: Place the cursor inside a text with some formatting and click the paint formatting toolbar button. Notice that the mouse cursor changes to the Format painter text cursor. +* **To paint with the copied formatting**: Click any word in the document and the new formatting will be applied. Alternatively, instead of clicking a single word, you can select a text fragment (like an entire paragraph). Notice that the cursor will go back to the default one after the formatting is applied. +* **To keep painting using the same formatting**: Open the toolbar dropdown and enable the continuous painting mode. Once copied, the same formatting can be applied multiple times in different places until the paint formatting button is clicked (the cursor will then revert to the regular one). + +## Limitations + +1. Painting with block-level formatting (like headings or image styles) is not supported yet. This is because, in CKEditor, they are considered a part of the content rather than text formatting. +2. When applying formatting to words, spaces or other Western punctuation are used as word boundaries, which prevents proper handling of languages that do not use space-based word segmentation. \ No newline at end of file diff --git a/docs/User Guide/User Guide/Note Types/Text/Premium features/Format Painter_746436a2e1.svg b/docs/User Guide/User Guide/Note Types/Text/Premium features/Format Painter_746436a2e1.svg new file mode 100644 index 000000000..77ad84f56 --- /dev/null +++ b/docs/User Guide/User Guide/Note Types/Text/Premium features/Format Painter_746436a2e1.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/User Guide/User Guide/Note Types/Text/Premium features/Format Painter_e144e96df9.svg b/docs/User Guide/User Guide/Note Types/Text/Premium features/Format Painter_e144e96df9.svg new file mode 100644 index 000000000..06342b7c7 --- /dev/null +++ b/docs/User Guide/User Guide/Note Types/Text/Premium features/Format Painter_e144e96df9.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/docs/User Guide/User Guide/Note Types/Text/Premium features/Format Painter_image.png b/docs/User Guide/User Guide/Note Types/Text/Premium features/Format Painter_image.png new file mode 100644 index 0000000000000000000000000000000000000000..db5cbbbd1155a5b022d82204e6c2e74e707fae09 GIT binary patch literal 5251 zcmYkAXH*l<*MO4{Afbj(q#Fpm2?B!BLKl$Uq@(mAgd$ZTAiWAAO+Z8g2m;cJ^dd!y zbRr6&7m+Fmg7U7v^Z)RE*x7St_w3Hj-uuimH{L)`lbV8+0t5n4Yu#2e0?uE7;|>f0 zwDGoj&p{vrNJ~xGBnZ5dAB<(_yV5Ts3?_lcLy?^V5m%Lz|2&UTHN=F`U6VJs?3{-v zi;f-Qj6O{)|L&*PmRF`^7%K0jR}N3`4FYAVbid-s1E*tfQBhEc%8ib(-Nd$Mgq&{# z0s)b}6{2X{5%#C$d?e5|aI7ro`?qC{!W{L^?-GLjDI9WGVrPLusJ4UH*}YFO)NBDe zb3Uj0_nyT!ZJS*II~YLH9-p5~&&>RO)E*SOdU~)@7(Q97%gD%h!1?Jo+(@kxl(9N6 zG&EHF^3Q0#Trf*+m~~+9Iun@0U}kD6uhb&FpkCFRP@``3aIHzB@JwwUl%bi*nf!gZ zN4Bc6l4f%IMtwSr8CL@zP5VN0cN)$5QYPFu3iM2fAUtN?S-98^ht!ijHZ&Zsxs8|Z z?RqP1NxHV&m#CS-9$X)sBjFHZ?3d7&N<=f!j-PPI1$d4XC|s*IC^}}ZP*~jKHmXz9 zk83kE(8#m4vHA9MYf|ZK^;uk|k2L6NAy1|1W?sjyh0t5NUS7L4f#2}PVw4Q|6J0{H z8JFrpb90<&jSBwwhPLQESH=u8n%oZoKWzt>_+O^L>u_5)9Jw5%( z3tP9#%57m*ULStkn16;XLrbvI3sm>_on-Lo7f=}mJKyPTpl9QVrQx`BzZW)bD4v^_ zC&CK-40p%7KdI#osg{zJ3f#4h^t>%kD)Dic(}I+DVNXivk~*W|!F<@yam_b_FTC4X zKGCZ{{bV5-N8&7WE7LwDIfn)5HBXFQva^UgpzP%BBNDTz)^aBzNqs_ z5JTY#-v!BkX;JHZ@V!OP?KK4w!^05|gX{^{FhWLd zN&bd-BO6;7rUTDH?^Ha-q)%_*E8X9^bSbhqdU-IOfO>z#6sL*7=kC=AP-uMz$ZYcBD51~%-`KLysEo3Q!(EiP1)rHq#9;* z-n&D=z7yxl&OA>6(eR*XBDeiGlU%P5@^h}?0UIY0iQKGl97K)|ChK-j$JHR7Jn?Q> zp;jqm({_tCmVU#`kJx@@=OO36i6~QwV9l)Jjn;{87NfiiaoW6(;c@8XiYkqJ1Q%OE zT|Z$T{7i%^x{R`?_$PpPg|ql9d+0MeVKnL7>o+9LsT3Y=Px&M#s(Vv$oI@S&TR|?F z5>GH%%NfPF7&-!(%Y6N~PRk}LDxLR;rsrYY8$pOb-<5z-WE?ar1(hB@@lUt`!;wGcidpY^(8g%3&%^)t-|J>b|m(V(nmFfnJC~E@4ncfwzac3Q9^>BaS*S zH|&`?*c2ZHRoS)?Cz2ml-;zYW5VywmrFS{G4pU( ztVc>LotjL+GG2`gi6x=h^cXfwNf1dXh3E_^pZltD^h?&$KSSoQ!;JtYB;woX27j?PS*X{2tADRdvuHyVc`5BsD$SJOUjbnCg;Kbp`JVC< zGC?*;!@zh^YnVHsK7>$L5*;)G(45Y(-@Q#zuygVFl|~t~4R| zofI`qO--L?W$j&-WLSv-t5k`a@!yN1F={V2WxBgnf+FRGg@sK`+1?PMu1+LI3PxR+ zLBXyf+}hBPIW`UuLRVj3>3pa5{P_E<5{(niD%T0RykB}w!i9t8ffzqS>?u4kH0kcx zb2A|*OyuaHC>s4*|D__pFCMvDO{*HHk1!Aq5n7640+Bf5M)Z%5gEVm8C3%HdQ`m2I z>(c>?sjjZB`bs(*xE~Fw12Kz}01v!O2vrvD^)|+;%LVKZL%ofRki}xnbaBSe|8AfN zf?>vml{k))DO6&P#+4)_4(cZL5+_Zp8@-?=P#lXri7!Z>7)xAi*Lr~nz{VxsX!I@v z9^e`Y1KmK8?=wiZY{oSd7Z?9~y*OJSOa`I`dJn$Y#c4Y5Qt(XGq&t;E?js`{uj2*H zML}@X1Mrh58At860-V3zHjzjLLsQP>pVuFU(#&L;^{EAQ(k`%DM?eZ-WQG1%@mW*9 zILwIQSmvMh*5#Iw^G6?q9`l-JmNJ~O8v2<2$^3JC#@k-8b{rJo9s$u@qMnzj#M5X7 zyzNs1F?flT%VFm(-M$dimul^+Xp?R&GZEoSBO@8mSA7!=zE?jyu+ECT{J}_rvgJZ{ z0fQyEzm0`;;h7L%U&pgoDC_ijUdO=0za=kZHhvo4=aMIqdkd*0Aw%1tK?xT*$i1=@ z%ryR)0wnKb;GR39h1-H&!Q(UG@KfwUo`rWCC*=}YDX6F9aO`eUY1s`Zu4I5#TPP@k zlB*HozNGWjnB&5#8KbXD$n1%wwF^623tW8st4Cw)RV-)A$rq0^M`j7J`uh6l=;))3 zu__V4&f1!5<#1;we4QBVgy;|VS~R+%_r$ojD(4x$e*0eg`9k>RAJteILI5BWmPKaP z)}HgKt#X!mO9w0c{CBeVzj##jc`H7uT4Lh`FgwGTL!hM+Yx_Cz znNM;gRq1b>%S9p>eZ6wvMiYpZ=1e)Bl4pqd`JeR{-Z4}x-Bo*r z!JLxL!<5%rF#xc6L04dn}}kEBBMaO{Y`JGnhzmA!j#8)9KzUSyn5lnb`736v)|WDW3n7mXneAhIY-~6(1**H?zUu0vm1^rHkuSr3Z%yheeXDb$FUL=RPUoW%@5vU+7DRfl zt*zOG|2YO^kkI-j-lr?4L1(_6-Yj-u*1!obR$Rn$Oc+IAmSpTFg#lxhyN=Fc%c1kcV*XusLaO z(-q?27sD?ff1jz)mp@Q*a$3uk_V}30_G|T-{>0;*x$3IcLkb#0 z-`kz=!;>HLb|G85j$!Nk&F#lCRv7oGQbPfYhF5FvENX)uq;M(>$sNr(q=K(pz?PDa zW^`q~)de4|-}GCz2IiuPw22l<;XMV!%p1x~XUSekm|W04s(ilDdlB%!f9~eY+~P>) z6ngLMo!9T5TOtUD48yc**#Zg=TH&oo!-tJtNiG+{p+B0mS)O;2L|)_=wHVT+yYJ*t z0Y9mCp~5;pWc#g~o16TU%t8Q!Ol4m=BpG@&ANki9?cuXQ1!D-l;~e|`dULOdIEffRUmeaIQE%s7V~n9e8<&Eu6@6o zQpR%*HTc${KSdxoisP0)MjUNPPfzbg>Sy`BXdDS=-ndVw_b?xQ&CAPcNy57rypeCM zDAq)TOc(*#D|_;m4~m;>3k`%?`!My2mh!ryc8U_kR8-Ago9dW33!Jp@(z8!s_c|9v zy9M}9!l!v8Jz4eS8PAjjUkg1qaoE_%59G{=uP|=@eYWwE0FIX~j6%3Bv+Tpb+%+q` zgZhtZZrOq`BBmTJAHLSQ(B{CyMx-W|03yDxE zvX~6_A4*8b)m3IO>eJQ3-f?>GCZ}1xYA!z^b$E!1C>R`T<0ZOL5Gqz;YKuHEXc6G1 z^92_TagNAD0j}b6%Mm_n6KE3>a%+~M7JBE3y65J-^p@*rSwMG*)4bOKIJWYay*-Bg zy)*b^D&08IrFO+1W(Hy^8PpMLcAR*lh1N{r5o|wQPR#omAu`V`Gc*2L^96OtC(%ai zLdU^JwgU&}Cx7$&Mwi^fXDnO})M(jdQT*g5W|)sBLjtslr$hiRG%+foT@)Mgm1@K! zv0q>PXpOr|ijtD3Y`H9b6oI{yqUTZ+2a{xm)RGy?3wSFnj+47Nmr%$r%Wf3>L00!L z?ZwzP0V@(Wx=nJYi=@-DWTRao}*W>aw@s9XjH zBRp6*PvN-f>Im@%Op(=8QAUn2D;i@erx5i*l*Iedwp{Pk{>R5u58AvXK_DW2fe(03h5{T`3H{WSbpr zb#spVLiKmKG+-8}-w)7?-st}0J($k>2qP|eW0Jp-vUuoE?DpD6H+%M?<@>BflqH># zf1gJOSmW!snhKK;QZ*uhekX5X0i)7Sbo3y=#(L?ftW96#L2JR}7a3yu%fFAbSRVPT zBr0dC-KHng$r7t?rO%1W|3QNmAotS5`HuysGP3v>Dc}o^M(`@{5hYLSH-Jqw90WvD{ z&g!RHN&O|Jn?1$P$yBWdD-DT3(B_$ya zT=GA6^Pc*({Ic7E2c>A*|15N*x{?KbwMMt-F_Dg(d+?!zulK(}uv5`JeUhO{VsLmQ z+#xJLX^urBX8%cH2}cn)gUFCh7IypnVVic6&F+8h3S4-&OpcF4Lwfhd@p!x?+B^V_ z==h&T2B-P297tXnDk~GpU#MuI!^%TCsQ{0xa0xFqd6*k*WMl-C9n7q(%5(D&)>plt ztm+^fxE82`XjrE9(`tjct?Rj5932@L7(kAAe^MC;jRwdSEN;Jk{JYTuRWe{_jusS! z6#D~NB`hNHuCj7H;mxphS2FI$|JQ2Ww5DShZJu#%m=@!LqQS}TxAR%Ma6ktts;$gE z;7Qdx#VBT0*Ve#1Lk%+ddtnj$LBkAhcaVoY6_@;8LbI) z>T;%o(~~F~g|aNM(4>OkbRyUugM&gu?fF12r5pjHXJ}DFq;R^=wHq2n2pa{PLYK-+ zp@u>!AT6M5BUVp@4Hz?3W@<57e0r Date: Sun, 30 Nov 2025 18:41:39 +0200 Subject: [PATCH 19/73] chore(ci): apply platform changes for nightly See https://github.com/TriliumNext/Trilium/pull/7002/files --- .github/workflows/nightly.yml | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/.github/workflows/nightly.yml b/.github/workflows/nightly.yml index 4ca30ba1a..dadce703a 100644 --- a/.github/workflows/nightly.yml +++ b/.github/workflows/nightly.yml @@ -45,6 +45,19 @@ jobs: image: win-signing shell: cmd forge_platform: win32 + # Exclude ARM64 Linux from default matrix to use native runner + exclude: + - arch: arm64 + os: + name: linux + # Add ARM64 Linux with native ubuntu-24.04-arm runner for better-sqlite3 compatibility + include: + - arch: arm64 + os: + name: linux + image: ubuntu-24.04-arm + shell: bash + forge_platform: linux runs-on: ${{ matrix.os.image }} steps: - uses: actions/checkout@v6 From 38c9d252144ab230654209fa869dcd52e13969df Mon Sep 17 00:00:00 2001 From: green Date: Sun, 30 Nov 2025 04:09:26 +0100 Subject: [PATCH 20/73] Translated using Weblate (Japanese) Currently translated at 100.0% (1637 of 1637 strings) Translation: Trilium Notes/Client Translate-URL: https://hosted.weblate.org/projects/trilium/client/ja/ --- apps/client/src/translations/ja/translation.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/apps/client/src/translations/ja/translation.json b/apps/client/src/translations/ja/translation.json index ab6c509dd..7108b24fc 100644 --- a/apps/client/src/translations/ja/translation.json +++ b/apps/client/src/translations/ja/translation.json @@ -312,7 +312,8 @@ "moveNoteUpDown": "ノートリストでノートを上/下に移動", "notSet": "未設定", "goUpDown": "ノートのリストで上下する", - "editBranchPrefix": "アクティブノートのクローンの プレフィックス を編集する" + "editBranchPrefix": "アクティブノートのクローンの プレフィックス を編集する", + "editShortcuts": "キーボードショートカットを編集" }, "import": { "importIntoNote": "ノートにインポート", From ef8073ac58fceb7879a119f19997bf17c11c1f53 Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Sun, 30 Nov 2025 17:57:56 +0100 Subject: [PATCH 21/73] Added translation using Weblate (English (United Kingdom)) --- apps/client/src/translations/en-GB/translation.json | 1 + 1 file changed, 1 insertion(+) create mode 100644 apps/client/src/translations/en-GB/translation.json diff --git a/apps/client/src/translations/en-GB/translation.json b/apps/client/src/translations/en-GB/translation.json new file mode 100644 index 000000000..0967ef424 --- /dev/null +++ b/apps/client/src/translations/en-GB/translation.json @@ -0,0 +1 @@ +{} From d5e046c2896125a4ad4094fe3d5d3d747811421e Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Sun, 30 Nov 2025 17:57:58 +0100 Subject: [PATCH 22/73] Added translation using Weblate (English (United Kingdom)) --- docs/README-en_GB.md | 332 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 332 insertions(+) create mode 100644 docs/README-en_GB.md diff --git a/docs/README-en_GB.md b/docs/README-en_GB.md new file mode 100644 index 000000000..bba139cc9 --- /dev/null +++ b/docs/README-en_GB.md @@ -0,0 +1,332 @@ +
    + Special thanks to:
    + + Warp sponsorship
    + Warp, built for coding with multiple AI agents
    +
    + Available for macOS, Linux and Windows +
    + +
    + +# Trilium Notes + +![GitHub Sponsors](https://img.shields.io/github/sponsors/eliandoran) +![LiberaPay patrons](https://img.shields.io/liberapay/patrons/ElianDoran)\ +![Docker Pulls](https://img.shields.io/docker/pulls/triliumnext/trilium) +![GitHub Downloads (all assets, all +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) +[![Translation +status](https://hosted.weblate.org/widget/trilium/svg-badge.svg)](https://hosted.weblate.org/engage/trilium/) + +[English](./README.md) | [Chinese (Simplified)](./docs/README-ZH_CN.md) | +[Chinese (Traditional)](./docs/README-ZH_TW.md) | [Russian](./docs/README-ru.md) +| [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. + +See [screenshots](https://triliumnext.github.io/Docs/Wiki/screenshot-tour) for +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 +[docs.triliumnotes.org](https://docs.triliumnotes.org/)** + +Our documentation is available in multiple formats: +- **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 +- **GitHub**: Navigate through the [User + Guide](./docs/User%20Guide/User%20Guide/) in this repository + +### Quick Links +- [Getting Started Guide](https://docs.triliumnotes.org/) +- [Installation + Instructions](./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) + +## 🎁 Features + +* 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 + [autoformat](https://triliumnext.github.io/Docs/Wiki/text-notes#autoformat) +* Support for editing [notes with source + code](https://triliumnext.github.io/Docs/Wiki/code-notes), including syntax + highlighting +* Fast and easy [navigation between + notes](https://triliumnext.github.io/Docs/Wiki/note-navigation), full text + search and [note + hoisting](https://triliumnext.github.io/Docs/Wiki/note-hoisting) +* Seamless [note + versioning](https://triliumnext.github.io/Docs/Wiki/note-revisions) +* Note [attributes](https://triliumnext.github.io/Docs/Wiki/attributes) can be + used for note organization, querying and advanced + [scripting](https://triliumnext.github.io/Docs/Wiki/scripts) +* UI available in English, German, Spanish, French, Romanian, and Chinese + (simplified and traditional) +* Direct [OpenID and TOTP + integration](./docs/User%20Guide/User%20Guide/Installation%20%26%20Setup/Server%20Installation/Multi-Factor%20Authentication.md) + for more secure login +* [Synchronization](https://triliumnext.github.io/Docs/Wiki/synchronization) + with self-hosted sync server + * there's a [3rd party service for hosting synchronisation + server](https://trilium.cc/paid-hosting) +* [Sharing](https://triliumnext.github.io/Docs/Wiki/sharing) (publishing) notes + to public internet +* Strong [note + encryption](https://triliumnext.github.io/Docs/Wiki/protected-notes) with + per-note granularity +* Sketching diagrams, based on [Excalidraw](https://excalidraw.com/) (note type + "canvas") +* [Relation maps](https://triliumnext.github.io/Docs/Wiki/relation-map) and + [link maps](https://triliumnext.github.io/Docs/Wiki/link-map) for visualizing + notes and their relations +* Mind maps, based on [Mind Elixir](https://docs.mind-elixir.com/) +* [Geo maps](./docs/User%20Guide/User%20Guide/Note%20Types/Geo%20Map.md) with + location pins and GPX tracks +* [Scripting](https://triliumnext.github.io/Docs/Wiki/scripts) - see [Advanced + showcases](https://triliumnext.github.io/Docs/Wiki/advanced-showcases) +* [REST API](https://triliumnext.github.io/Docs/Wiki/etapi) for automation +* Scales well in both usability and performance upwards of 100 000 notes +* Touch optimized [mobile + frontend](https://triliumnext.github.io/Docs/Wiki/mobile-frontend) for + smartphones and tablets +* Built-in [dark theme](https://triliumnext.github.io/Docs/Wiki/themes), support + for user themes +* [Evernote](https://triliumnext.github.io/Docs/Wiki/evernote-import) and + [Markdown import & export](https://triliumnext.github.io/Docs/Wiki/markdown) +* [Web Clipper](https://triliumnext.github.io/Docs/Wiki/web-clipper) for easy + saving of web content +* Customizable UI (sidebar buttons, user-defined widgets, ...) +* [Metrics](./docs/User%20Guide/User%20Guide/Advanced%20Usage/Metrics.md), along + with a [Grafana + Dashboard](./docs/User%20Guide/User%20Guide/Advanced%20Usage/Metrics/grafana-dashboard.json) + +✨ Check out the following third-party resources/communities for more TriliumNext +related goodies: + +- [awesome-trilium](https://github.com/Nriver/awesome-trilium) for 3rd party + themes, scripts, plugins and more. +- [TriliumRocks!](https://trilium.rocks/) for tutorials, guides, and much more. + +## ❓Why TriliumNext? + +The original Trilium developer ([Zadam](https://github.com/zadam)) has +graciously given the Trilium repository to the community project which resides +at https://github.com/TriliumNext + +### ⬆️Migrating from Zadam/Trilium? + +There are no special migration steps to migrate from a zadam/Trilium instance to +a TriliumNext/Trilium instance. Simply [install +TriliumNext/Trilium](#-installation) as usual and it will use your existing +database. + +Versions up to and including +[v0.90.4](https://github.com/TriliumNext/Trilium/releases/tag/v0.90.4) are +compatible with the latest zadam/trilium version of +[v0.63.7](https://github.com/zadam/trilium/releases/tag/v0.63.7). Any later +versions of TriliumNext/Trilium have their sync versions incremented which +prevents direct migration. + +## 💬 Discuss with us + +Feel free to join our official conversations. We would love to hear what +features, suggestions, or issues you may have! + +- [Matrix](https://matrix.to/#/#triliumnext:matrix.org) (For synchronous + discussions.) + - The `General` Matrix room is also bridged to + [XMPP](xmpp:discuss@trilium.thisgreat.party?join) +- [Github Discussions](https://github.com/TriliumNext/Trilium/discussions) (For + asynchronous discussions.) +- [Github Issues](https://github.com/TriliumNext/Trilium/issues) (For bug + reports and feature requests.) + +## 🏗 Installation + +### Windows / MacOS + +Download the binary release for your platform from the [latest release +page](https://github.com/TriliumNext/Trilium/releases/latest), unzip the package +and run the `trilium` executable. + +### Linux + +If your distribution is listed in the table below, use your distribution's +package. + +[![Packaging +status](https://repology.org/badge/vertical-allrepos/triliumnext.svg)](https://repology.org/project/triliumnext/versions) + +You may also download the binary release for your platform from the [latest +release page](https://github.com/TriliumNext/Trilium/releases/latest), unzip the +package and run the `trilium` executable. + +TriliumNext is also provided as a Flatpak, but not yet published on FlatHub. + +### Browser (any OS) + +If you use a server installation (see below), you can directly access the web +interface (which is almost identical to the desktop app). + +Currently only the latest versions of Chrome & Firefox are supported (and +tested). + +### Mobile + +To use TriliumNext on a mobile device, you can use a mobile web browser to +access the mobile interface of a server installation (see below). + +See issue https://github.com/TriliumNext/Trilium/issues/4962 for more +information on mobile app support. + +If you prefer a native Android app, you can use +[TriliumDroid](https://apt.izzysoft.de/fdroid/index/apk/eu.fliegendewurst.triliumdroid). +Report bugs and missing features at [their +repository](https://github.com/FliegendeWurst/TriliumDroid). Note: It is best to +disable automatic updates on your server installation (see below) when using +TriliumDroid since the sync version must match between Trilium and TriliumDroid. + +### Server + +To install TriliumNext on your own server (including via Docker from +[Dockerhub](https://hub.docker.com/r/triliumnext/trilium)) follow [the server +installation docs](https://triliumnext.github.io/Docs/Wiki/server-installation). + + +## 💻 Contribute + +### Translations + +If you are a native speaker, help us translate Trilium by heading over to our +[Weblate page](https://hosted.weblate.org/engage/trilium/). + +Here's the language coverage we have so far: + +[![Translation +status](https://hosted.weblate.org/widget/trilium/multi-auto.svg)](https://hosted.weblate.org/engage/trilium/) + +### Code + +Download the repository, install dependencies using `pnpm` and then run the +server (available at http://localhost:8080): +```shell +git clone https://github.com/TriliumNext/Trilium.git +cd Trilium +pnpm install +pnpm run server:start +``` + +### Documentation + +Download the repository, install dependencies using `pnpm` and then run the +environment required to edit the documentation: +```shell +git clone https://github.com/TriliumNext/Trilium.git +cd Trilium +pnpm install +pnpm edit-docs:edit-docs +``` + +### Building the Executable +Download the repository, install dependencies using `pnpm` and then build the +desktop app for Windows: +```shell +git clone https://github.com/TriliumNext/Trilium.git +cd Trilium +pnpm install +pnpm run --filter desktop electron-forge:make --arch=x64 --platform=win32 +``` + +For more details, see the [development +docs](https://github.com/TriliumNext/Trilium/tree/main/docs/Developer%20Guide/Developer%20Guide). + +### Developer Documentation + +Please view the [documentation +guide](https://github.com/TriliumNext/Trilium/blob/main/docs/Developer%20Guide/Developer%20Guide/Environment%20Setup.md) +for details. If you have more questions, feel free to reach out via the links +described in the "Discuss with us" section above. + +## 👏 Shoutouts + +* [zadam](https://github.com/zadam) for the original concept and implementation + of the application. +* [Sarah Hussein](https://github.com/Sarah-Hussein) for designing the + application icon. +* [nriver](https://github.com/nriver) for his work on internationalization. +* [Thomas Frei](https://github.com/thfrei) for his original work on the Canvas. +* [antoniotejada](https://github.com/nriver) for the original syntax highlight + widget. +* [Dosu](https://dosu.dev/) for providing us with the automated responses to + GitHub issues and discussions. +* [Tabler Icons](https://tabler.io/icons) for the system tray icons. + +Trilium would not be possible without the technologies behind it: + +* [CKEditor 5](https://github.com/ckeditor/ckeditor5) - the visual editor behind + text notes. We are grateful for being offered a set of the premium features. +* [CodeMirror](https://github.com/codemirror/CodeMirror) - code editor with + support for huge amount of languages. +* [Excalidraw](https://github.com/excalidraw/excalidraw) - the infinite + whiteboard used in Canvas notes. +* [Mind Elixir](https://github.com/SSShooter/mind-elixir-core) - providing the + mind map functionality. +* [Leaflet](https://github.com/Leaflet/Leaflet) - for rendering geographical + maps. +* [Tabulator](https://github.com/olifolkerd/tabulator) - for the interactive + table used in collections. +* [FancyTree](https://github.com/mar10/fancytree) - feature-rich tree library + without real competition. +* [jsPlumb](https://github.com/jsplumb/jsplumb) - visual connectivity library. + Used in [relation + maps](https://triliumnext.github.io/Docs/Wiki/relation-map.html) and [link + maps](https://triliumnext.github.io/Docs/Wiki/note-map.html#link-map) + +## 🤝 Support + +Trilium is built and maintained with [hundreds of hours of +work](https://github.com/TriliumNext/Trilium/graphs/commit-activity). Your +support keeps it open-source, improves features, and covers costs such as +hosting. + +Consider supporting the main developer +([eliandoran](https://github.com/eliandoran)) of the application via: + +- [GitHub Sponsors](https://github.com/sponsors/eliandoran) +- [PayPal](https://paypal.me/eliandoran) +- [Buy Me a Coffee](https://buymeacoffee.com/eliandoran) + +## 🔑 License + +Copyright 2017-2025 zadam, Elian Doran, and other contributors + +This program is free software: you can redistribute it and/or modify it under +the terms of the GNU Affero General Public License as published by the Free +Software Foundation, either version 3 of the License, or (at your option) any +later version. From 4dc2587817e6131926d0a35b8df8d0136e9b5ee0 Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Sun, 30 Nov 2025 17:58:00 +0100 Subject: [PATCH 23/73] Added translation using Weblate (English (United Kingdom)) --- apps/server/src/assets/translations/en-GB/server.json | 1 + 1 file changed, 1 insertion(+) create mode 100644 apps/server/src/assets/translations/en-GB/server.json diff --git a/apps/server/src/assets/translations/en-GB/server.json b/apps/server/src/assets/translations/en-GB/server.json new file mode 100644 index 000000000..0967ef424 --- /dev/null +++ b/apps/server/src/assets/translations/en-GB/server.json @@ -0,0 +1 @@ +{} From 15baf04ce9e43f35666af839addf482ed9a4afce Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Sun, 30 Nov 2025 17:58:03 +0100 Subject: [PATCH 24/73] Added translation using Weblate (English (United Kingdom)) --- apps/website/src/translations/en-GB/translation.json | 1 + 1 file changed, 1 insertion(+) create mode 100644 apps/website/src/translations/en-GB/translation.json diff --git a/apps/website/src/translations/en-GB/translation.json b/apps/website/src/translations/en-GB/translation.json new file mode 100644 index 000000000..0967ef424 --- /dev/null +++ b/apps/website/src/translations/en-GB/translation.json @@ -0,0 +1 @@ +{} From b055e79b4ccb8c09c910c37c577128a074aa96ff Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sun, 30 Nov 2025 17:02:01 +0000 Subject: [PATCH 25/73] Initial plan From 7dd4b10a9626835e64679e18af2b5e69109244fa Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sun, 30 Nov 2025 17:10:30 +0000 Subject: [PATCH 26/73] Add British English (en-GB) translations for client Co-authored-by: eliandoran <21236836+eliandoran@users.noreply.github.com> --- .../src/translations/en-GB/translation.json | 74 ++++++++++++++++++- 1 file changed, 73 insertions(+), 1 deletion(-) diff --git a/apps/client/src/translations/en-GB/translation.json b/apps/client/src/translations/en-GB/translation.json index 0967ef424..4c2ed6bce 100644 --- a/apps/client/src/translations/en-GB/translation.json +++ b/apps/client/src/translations/en-GB/translation.json @@ -1 +1,73 @@ -{} +{ + "import": { + "safeImportTooltip": "Trilium .zip export files can contain executable scripts which may contain harmful behaviour. Safe import will deactivate automatic execution of all imported scripts. Uncheck \"Safe import\" only if the imported archive is supposed to contain executable scripts and you completely trust the contents of the import file.", + "shrinkImagesTooltip": "

    If you check this option, Trilium will attempt to shrink the imported images by scaling and optimisation which may affect the perceived image quality. If unchecked, images will be imported without changes.

    This doesn't apply to .zip imports with metadata since it is assumed these files are already optimised.

    ", + "codeImportedAsCode": "Import recognised code files (e.g. .json) as code notes if it's unclear from metadata" + }, + "upload_attachments": { + "tooltip": "If you check this option, Trilium will attempt to shrink the uploaded images by scaling and optimisation which may affect the perceived image quality. If unchecked, images will be uploaded without changes." + }, + "attribute_detail": { + "auto_read_only_disabled": "text/code notes can be set automatically into read mode when they are too large. You can disable this behaviour on per-note basis by adding this label to the note", + "workspace_tab_background_color": "CSS colour used in the note tab when hoisted to this note", + "color": "defines colour of the note in note tree, links etc. Use any valid CSS colour value like 'red' or #a13d5f", + "color_type": "Colour" + }, + "mobile_detail_menu": { + "error_unrecognized_command": "Unrecognised command {{command}}" + }, + "promoted_attributes": { + "remove_color": "Remove the colour label" + }, + "max_content_width": { + "centerContent": "Keep content centred" + }, + "theme": { + "auto_theme": "Legacy (Follow system colour scheme)", + "triliumnext": "Trilium (Follow system colour scheme)" + }, + "search_engine": { + "custom_name_placeholder": "Customise search engine name", + "custom_url_placeholder": "Customise search engine url" + }, + "highlights_list": { + "description": "You can customise the highlights list displayed in the right panel:", + "color": "Coloured text", + "bg_color": "Text with background colour" + }, + "table_of_contents": { + "description": "Table of contents will appear in text notes when the note has more than a defined number of headings. You can customise this number:" + }, + "custom_date_time_format": { + "description": "Customise the format of the date and time inserted via or the toolbar. See Day.js docs for available format tokens." + }, + "i18n": { + "title": "Localisation" + }, + "attachment_detail_2": { + "unrecognized_role": "Unrecognised attachment role '{{role}}'." + }, + "ai_llm": { + "reprocess_index_started": "Search index optimisation started in the background", + "index_rebuilding": "Optimising index ({{percentage}}%)", + "index_rebuild_complete": "Index optimisation complete" + }, + "highlighting": { + "color-scheme": "Colour Scheme" + }, + "code_theme": { + "color-scheme": "Colour scheme" + }, + "call_to_action": { + "background_effects_message": "On Windows devices, background effects are now fully stable. The background effects adds a touch of colour to the user interface by blurring the background behind it. This technique is also used in other applications such as Windows Explorer." + }, + "settings_appearance": { + "related_code_blocks": "Colour scheme for code blocks in text notes", + "related_code_notes": "Colour scheme for code notes" + }, + "note-color": { + "clear-color": "Clear note colour", + "set-color": "Set note colour", + "set-custom-color": "Set custom note colour" + } +} From 030582b2d5bc9f5db94810c3da79d0ad53e5d59c Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Sun, 30 Nov 2025 19:14:21 +0200 Subject: [PATCH 27/73] feat(i18n): add English (United Kingdom) --- apps/client/src/widgets/collections/calendar/index.tsx | 1 + apps/client/src/widgets/type_widgets/MindMap.tsx | 1 + apps/client/src/widgets/type_widgets/canvas/i18n.spec.ts | 1 + apps/client/src/widgets/type_widgets/canvas/i18n.ts | 4 +++- apps/server/src/services/i18n.ts | 2 ++ packages/ckeditor5/src/i18n.ts | 5 +++++ packages/commons/src/lib/i18n.ts | 1 + 7 files changed, 14 insertions(+), 1 deletion(-) diff --git a/apps/client/src/widgets/collections/calendar/index.tsx b/apps/client/src/widgets/collections/calendar/index.tsx index bac6862b2..8bf5ce7f9 100644 --- a/apps/client/src/widgets/collections/calendar/index.tsx +++ b/apps/client/src/widgets/collections/calendar/index.tsx @@ -77,6 +77,7 @@ export const LOCALE_MAPPINGS: Record Promise<{ de "pt_br": () => import("@fullcalendar/core/locales/pt-br"), uk: () => import("@fullcalendar/core/locales/uk"), en: null, + "en-GB": () => import("@fullcalendar/core/locales/en-gb"), "en_rtl": null, ar: () => import("@fullcalendar/core/locales/ar") }; diff --git a/apps/client/src/widgets/type_widgets/MindMap.tsx b/apps/client/src/widgets/type_widgets/MindMap.tsx index eb54170c3..f8409c75c 100644 --- a/apps/client/src/widgets/type_widgets/MindMap.tsx +++ b/apps/client/src/widgets/type_widgets/MindMap.tsx @@ -28,6 +28,7 @@ const LOCALE_MAPPINGS: Record de: null, en: "en", en_rtl: "en", + "en-GB": "en", es: "es", fr: "fr", it: "it", diff --git a/apps/client/src/widgets/type_widgets/canvas/i18n.spec.ts b/apps/client/src/widgets/type_widgets/canvas/i18n.spec.ts index 71eb3d18c..c77e4979d 100644 --- a/apps/client/src/widgets/type_widgets/canvas/i18n.spec.ts +++ b/apps/client/src/widgets/type_widgets/canvas/i18n.spec.ts @@ -22,6 +22,7 @@ describe("Canvas i18n", () => { if (locale.contentOnly || locale.devOnly) continue; const languageCode = LANGUAGE_MAPPINGS[locale.id]; if (!supportedLanguageCodes.has(languageCode)) { + console.log("Supported locales:", Array.from(supportedLanguageCodes.values()).join(", ")); expect.fail(`Unable to find locale for ${locale.id} -> ${languageCode}.`) } } diff --git a/apps/client/src/widgets/type_widgets/canvas/i18n.ts b/apps/client/src/widgets/type_widgets/canvas/i18n.ts index 43ee724cf..47324abfc 100644 --- a/apps/client/src/widgets/type_widgets/canvas/i18n.ts +++ b/apps/client/src/widgets/type_widgets/canvas/i18n.ts @@ -1,10 +1,12 @@ +import { Language } from "@excalidraw/excalidraw/i18n"; import type { DISPLAYABLE_LOCALE_IDS } from "@triliumnext/commons"; -export const LANGUAGE_MAPPINGS: Record = { +export const LANGUAGE_MAPPINGS: Record = { ar: "ar-SA", cn: "zh-CN", de: "de-DE", en: "en", + "en-GB": "en", en_rtl: "en", es: "es-ES", fr: "fr-FR", diff --git a/apps/server/src/services/i18n.ts b/apps/server/src/services/i18n.ts index be7ebdeb5..82eb6f408 100644 --- a/apps/server/src/services/i18n.ts +++ b/apps/server/src/services/i18n.ts @@ -7,11 +7,13 @@ import hidden_subtree from "./hidden_subtree.js"; import { LOCALES, type Locale, type LOCALE_IDS } from "@triliumnext/commons"; import dayjs, { Dayjs } from "dayjs"; +// When adding a new locale, prefer the version with hyphen instead of underscore. export const DAYJS_LOADER: Record Promise> = { "ar": () => import("dayjs/locale/ar.js"), "cn": () => import("dayjs/locale/zh-cn.js"), "de": () => import("dayjs/locale/de.js"), "en": () => import("dayjs/locale/en.js"), + "en-GB": () => import("dayjs/locale/en-gb.js"), "en_rtl": () => import("dayjs/locale/en.js"), "es": () => import("dayjs/locale/es.js"), "fa": () => import("dayjs/locale/fa.js"), diff --git a/packages/ckeditor5/src/i18n.ts b/packages/ckeditor5/src/i18n.ts index 3053f4b7d..a409fa437 100644 --- a/packages/ckeditor5/src/i18n.ts +++ b/packages/ckeditor5/src/i18n.ts @@ -10,6 +10,11 @@ interface LocaleMapping { const LOCALE_MAPPINGS: Record = { en: null, en_rtl: null, + "en-GB": { + languageCode: "en-GB", + coreTranslation: () => import("ckeditor5/translations/en-gb.js"), + premiumFeaturesTranslation: () => import("ckeditor5-premium-features/translations/en-gb.js"), + }, ar: { languageCode: "ar", coreTranslation: () => import("ckeditor5/translations/ar.js"), diff --git a/packages/commons/src/lib/i18n.ts b/packages/commons/src/lib/i18n.ts index 65ff196d2..8d2bc0232 100644 --- a/packages/commons/src/lib/i18n.ts +++ b/packages/commons/src/lib/i18n.ts @@ -15,6 +15,7 @@ const UNSORTED_LOCALES = [ { id: "cn", name: "简体中文", electronLocale: "zh_CN" }, { id: "de", name: "Deutsch", electronLocale: "de" }, { id: "en", name: "English", electronLocale: "en" }, + { id: "en-GB", name: "English (United Kingdom)", electronLocale: "en_GB" }, { id: "es", name: "Español", electronLocale: "es" }, { id: "fr", name: "Français", electronLocale: "fr" }, { id: "it", name: "Italiano", electronLocale: "it" }, From 6e982e646d63b7570d226c72a9eb1c9c48bf1f8b Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Sun, 30 Nov 2025 18:29:15 +0100 Subject: [PATCH 28/73] Translated using Weblate (English (United Kingdom)) Currently translated at 1.6% (2 of 118 strings) Translation: Trilium Notes/README Translate-URL: https://hosted.weblate.org/projects/trilium/readme/en_GB/ --- docs/README-en_GB.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/README-en_GB.md b/docs/README-en_GB.md index bba139cc9..dfd3ef612 100644 --- a/docs/README-en_GB.md +++ b/docs/README-en_GB.md @@ -279,7 +279,7 @@ described in the "Discuss with us" section above. of the application. * [Sarah Hussein](https://github.com/Sarah-Hussein) for designing the application icon. -* [nriver](https://github.com/nriver) for his work on internationalization. +* [nriver](https://github.com/nriver) for his work on internationalisation. * [Thomas Frei](https://github.com/thfrei) for his original work on the Canvas. * [antoniotejada](https://github.com/nriver) for the original syntax highlight widget. @@ -328,5 +328,5 @@ Copyright 2017-2025 zadam, Elian Doran, and other contributors This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free -Software Foundation, either version 3 of the License, or (at your option) any +Software Foundation, either version 3 of the Licence, or (at your option) any later version. From 368c590976b2b3b843c119715385eb1ce9e6603d Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Sun, 30 Nov 2025 18:33:00 +0100 Subject: [PATCH 29/73] Translated using Weblate (English (United Kingdom)) Currently translated at 0.8% (1 of 118 strings) Translation: Trilium Notes/README Translate-URL: https://hosted.weblate.org/projects/trilium/readme/en_GB/ --- docs/README-en_GB.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/README-en_GB.md b/docs/README-en_GB.md index dfd3ef612..5c64da0a9 100644 --- a/docs/README-en_GB.md +++ b/docs/README-en_GB.md @@ -328,5 +328,5 @@ Copyright 2017-2025 zadam, Elian Doran, and other contributors This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free -Software Foundation, either version 3 of the Licence, or (at your option) any +Software Foundation, either version 3 of the License, or (at your option) any later version. From 81a37e3fc4f6fc75422d82cc44e829bb9979bc70 Mon Sep 17 00:00:00 2001 From: Adorian Doran Date: Sun, 30 Nov 2025 19:34:31 +0200 Subject: [PATCH 30/73] client/CSS class manager: fix a bug when handling red hues --- apps/client/src/services/css_class_manager.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/client/src/services/css_class_manager.ts b/apps/client/src/services/css_class_manager.ts index 9c6a97aaf..510a044d6 100644 --- a/apps/client/src/services/css_class_manager.ts +++ b/apps/client/src/services/css_class_manager.ts @@ -39,7 +39,7 @@ function createClassForColor(colorString: string | null) { `); registeredClasses.add(className); - if (hue) { + if (hue !== undefined) { colorsWithHue.add(className); } } From 66f2d0c7dcd40454fd95163279eb8067d56b8dc1 Mon Sep 17 00:00:00 2001 From: Adorian Doran Date: Sun, 30 Nov 2025 19:46:15 +0200 Subject: [PATCH 31/73] style/note colors: use a more elegant way to retrieve the theme-aware note color --- apps/client/src/services/css_class_manager.ts | 2 +- apps/client/src/stylesheets/theme-dark.css | 3 +++ apps/client/src/stylesheets/theme-light.css | 4 ++++ apps/client/src/stylesheets/theme-next-dark.css | 4 ++++ 4 files changed, 12 insertions(+), 1 deletion(-) diff --git a/apps/client/src/services/css_class_manager.ts b/apps/client/src/services/css_class_manager.ts index 510a044d6..f22dbf437 100644 --- a/apps/client/src/services/css_class_manager.ts +++ b/apps/client/src/services/css_class_manager.ts @@ -44,7 +44,7 @@ function createClassForColor(colorString: string | null) { } } - return clsx(className, colorsWithHue.has(className) && "with-hue"); + return clsx("use-note-color", className, colorsWithHue.has(className) && "with-hue"); } function parseColor(color: string) { diff --git a/apps/client/src/stylesheets/theme-dark.css b/apps/client/src/stylesheets/theme-dark.css index a356d32fd..0354e3346 100644 --- a/apps/client/src/stylesheets/theme-dark.css +++ b/apps/client/src/stylesheets/theme-dark.css @@ -109,3 +109,6 @@ body .todo-list input[type="checkbox"]:not(:checked):before { box-shadow: 1px 1px 3px rgba(0, 0, 0, 0.6) !important; } +.use-note-color { + --custom-color: var(--dark-theme-custom-color); +} \ No newline at end of file diff --git a/apps/client/src/stylesheets/theme-light.css b/apps/client/src/stylesheets/theme-light.css index 872e7431f..0208ed97c 100644 --- a/apps/client/src/stylesheets/theme-light.css +++ b/apps/client/src/stylesheets/theme-light.css @@ -91,4 +91,8 @@ html { .ck-content a.reference-link > span, .board-note { color: var(--light-theme-custom-color, inherit); +} + +.use-note-color { + --custom-color: var(--light-theme-custom-color); } \ No newline at end of file diff --git a/apps/client/src/stylesheets/theme-next-dark.css b/apps/client/src/stylesheets/theme-next-dark.css index 72271ad2e..a02bedc2c 100644 --- a/apps/client/src/stylesheets/theme-next-dark.css +++ b/apps/client/src/stylesheets/theme-next-dark.css @@ -308,4 +308,8 @@ body .todo-list input[type="checkbox"]:not(:checked):before { --modal-background-color: hsl(var(--custom-color-hue), 8.8%, 11.2%); --modal-border-color: hsl(var(--custom-color-hue), 9.4%, 25.1%); --promoted-attribute-card-background-color: hsl(var(--custom-color-hue), 13.2%, 20.8%); +} + +.use-note-color { + --custom-color: var(--dark-theme-custom-color); } \ No newline at end of file From aacd92eee38b68128fa82c44d96258096bf3412a Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Sun, 30 Nov 2025 19:47:17 +0200 Subject: [PATCH 32/73] chore(popup-editor): implement switch to full editor button --- apps/client/src/translations/en/translation.json | 3 +++ apps/client/src/widgets/dialogs/PopupEditor.tsx | 11 +++++++++-- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/apps/client/src/translations/en/translation.json b/apps/client/src/translations/en/translation.json index 514301594..c1a509944 100644 --- a/apps/client/src/translations/en/translation.json +++ b/apps/client/src/translations/en/translation.json @@ -2107,5 +2107,8 @@ "clear-color": "Clear note color", "set-color": "Set note color", "set-custom-color": "Set custom note color" + }, + "popup-editor": { + "maximize": "Switch to full editor" } } diff --git a/apps/client/src/widgets/dialogs/PopupEditor.tsx b/apps/client/src/widgets/dialogs/PopupEditor.tsx index 0d158f828..c85dcd3b3 100644 --- a/apps/client/src/widgets/dialogs/PopupEditor.tsx +++ b/apps/client/src/widgets/dialogs/PopupEditor.tsx @@ -19,6 +19,8 @@ import tree from "../../services/tree"; import froca from "../../services/froca"; import ReadOnlyNoteInfoBar from "../ReadOnlyNoteInfoBar"; import MobileEditorToolbar from "../type_widgets/text/mobile_editor_toolbar"; +import { t } from "../../services/i18n"; +import appContext from "../../components/app_context"; export default function PopupEditor() { const [ shown, setShown ] = useState(false); @@ -62,8 +64,13 @@ export default function PopupEditor() { title={} customTitleBarButtons={[{ iconClassName: "bx-expand-alt", - title: "Switch to full editor", - onClick: () => {/* TO DO */} + title: t("popup-editor.maximize"), + onClick: async () => { + if (!noteContext.noteId) return; + const { noteId, hoistedNoteId } = noteContext; + await appContext.tabManager.openInNewTab(noteId, hoistedNoteId, true); + setShown(false); + } }]} className="popup-editor-dialog" size="lg" From 7779acc7bcde4aebade6db670d306a1bc1c77711 Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Sun, 30 Nov 2025 19:55:40 +0200 Subject: [PATCH 33/73] refactor(client): split revisions CSS into file --- apps/client/src/stylesheets/style.css | 40 ------------------ apps/client/src/widgets/dialogs/revisions.css | 41 +++++++++++++++++++ apps/client/src/widgets/dialogs/revisions.tsx | 1 + 3 files changed, 42 insertions(+), 40 deletions(-) create mode 100644 apps/client/src/widgets/dialogs/revisions.css diff --git a/apps/client/src/stylesheets/style.css b/apps/client/src/stylesheets/style.css index ea55db041..5db4b1582 100644 --- a/apps/client/src/stylesheets/style.css +++ b/apps/client/src/stylesheets/style.css @@ -1686,46 +1686,6 @@ body:not(.mobile) #launcher-pane.horizontal .dropdown-submenu > .dropdown-menu { body.mobile .modal-dialog.modal-dialog-scrollable { height: unset; } - - body.mobile .revisions-dialog .modal-dialog { - height: 95vh; - } - - body.mobile .revisions-dialog .modal-body { - height: 100% !important; - flex-direction: column; - padding: 0; - } - - body.mobile .revisions-dialog .revision-list { - height: unset; - max-height: 20vh; - border-bottom: 1px solid var(--main-border-color) !important; - padding: 0 1em; - } - - body.mobile .revisions-dialog .modal-body > .revision-content-wrapper { - flex-grow: 1; - height: 100%; - overflow: auto; - margin: 0; - } - - body.mobile .revisions-dialog .modal-body > .revision-content-wrapper > div:first-of-type { - flex-direction: column; - } - - body.mobile .revisions-dialog .revision-title { - font-size: 1rem; - } - - body.mobile .revisions-dialog .revision-title-buttons { - text-align: center; - } - - body.mobile .revisions-dialog .revision-content { - padding: 0.5em; - } } /* Mobile, tablet mode */ diff --git a/apps/client/src/widgets/dialogs/revisions.css b/apps/client/src/widgets/dialogs/revisions.css new file mode 100644 index 000000000..91c3af11c --- /dev/null +++ b/apps/client/src/widgets/dialogs/revisions.css @@ -0,0 +1,41 @@ +body.mobile .revisions-dialog { + .modal-dialog { + height: 95vh; + } + + .modal-body { + height: 100% !important; + flex-direction: column; + padding: 0; + } + + .revision-list { + height: unset; + max-height: 20vh; + border-bottom: 1px solid var(--main-border-color) !important; + padding: 0 1em; + } + + .modal-body > .revision-content-wrapper { + flex-grow: 1; + height: 100%; + overflow: auto; + margin: 0; + } + + .modal-body > .revision-content-wrapper > div:first-of-type { + flex-direction: column; + } + + .revision-title { + font-size: 1rem; + } + + .revision-title-buttons { + text-align: center; + } + + .revision-content { + padding: 0.5em; + } +} \ No newline at end of file diff --git a/apps/client/src/widgets/dialogs/revisions.tsx b/apps/client/src/widgets/dialogs/revisions.tsx index e20c4c978..fd2dd9a16 100644 --- a/apps/client/src/widgets/dialogs/revisions.tsx +++ b/apps/client/src/widgets/dialogs/revisions.tsx @@ -20,6 +20,7 @@ import ActionButton from "../react/ActionButton"; import options from "../../services/options"; import { useTriliumEvent } from "../react/hooks"; import { diffWords } from "diff"; +import "./revisions.css"; export default function RevisionsDialog() { const [ note, setNote ] = useState(); From 63f9006d177f1c9a642eb156cf05ad870f9f65c6 Mon Sep 17 00:00:00 2001 From: Adorian Doran Date: Sun, 30 Nov 2025 20:08:24 +0200 Subject: [PATCH 34/73] style/calendar collection: improve the support for colored notes --- .../src/stylesheets/theme-next-dark.css | 5 ++++ .../src/stylesheets/theme-next-light.css | 5 ++++ .../collections/calendar/event_builder.ts | 4 ++- .../widgets/collections/calendar/index.css | 28 ++++++++++++++++++- 4 files changed, 40 insertions(+), 2 deletions(-) diff --git a/apps/client/src/stylesheets/theme-next-dark.css b/apps/client/src/stylesheets/theme-next-dark.css index a02bedc2c..28f42c218 100644 --- a/apps/client/src/stylesheets/theme-next-dark.css +++ b/apps/client/src/stylesheets/theme-next-dark.css @@ -270,6 +270,11 @@ --ck-editor-toolbar-button-on-color: white; --ck-editor-toolbar-button-on-shadow: 1px 1px 2px rgba(0, 0, 0, .75); --ck-editor-toolbar-dropdown-button-open-background: #ffffff14; + + --calendar-coll-event-background-saturation: 12%; + --calendar-coll-event-background-lightness: 21%; + --calendar-coll-event-text-color: white; + --calendar-cell-event-hover-filter: brightness(1.25); } /* diff --git a/apps/client/src/stylesheets/theme-next-light.css b/apps/client/src/stylesheets/theme-next-light.css index 780d519f7..9fe9b53fe 100644 --- a/apps/client/src/stylesheets/theme-next-light.css +++ b/apps/client/src/stylesheets/theme-next-light.css @@ -268,6 +268,11 @@ --ck-editor-toolbar-button-on-color: black; --ck-editor-toolbar-button-on-shadow: none; --ck-editor-toolbar-dropdown-button-open-background: #0000000f; + + --calendar-coll-event-background-lightness: 95%; + --calendar-coll-event-background-saturation: 80%; + --calendar-coll-event-text-color: black; + --calendar-cell-event-hover-filter: brightness(.95) saturate(1.25); } #left-pane .fancytree-node.tinted { diff --git a/apps/client/src/widgets/collections/calendar/event_builder.ts b/apps/client/src/widgets/collections/calendar/event_builder.ts index 8687dc6d9..2d884f8fe 100644 --- a/apps/client/src/widgets/collections/calendar/event_builder.ts +++ b/apps/client/src/widgets/collections/calendar/event_builder.ts @@ -3,6 +3,7 @@ import froca from "../../../services/froca"; import { formatDateToLocalISO, getCustomisableLabel, getMonthsInDateRange, offsetDate } from "./utils"; import FNote from "../../../entities/fnote"; import server from "../../../services/server"; +import clsx from "clsx"; interface Event { startDate: string, @@ -81,6 +82,7 @@ export async function buildEvent(note: FNote, { startDate, endDate, startTime, e const customTitleAttributeName = note.getLabelValue("calendar:title"); const titles = await parseCustomTitle(customTitleAttributeName, note); const color = note.getLabelValue("calendar:color") ?? note.getLabelValue("color"); + const colorClass = note.getColorClass(); const events: EventInput[] = []; const calendarDisplayedAttributes = note.getLabelValue("calendar:displayedAttributes")?.split(","); @@ -111,7 +113,7 @@ export async function buildEvent(note: FNote, { startDate, endDate, startTime, e color: color ?? undefined, iconClass: note.getLabelValue("iconClass"), promotedAttributes: displayedAttributesData, - className: isArchived ? "archived" : "" + className: clsx({archived: isArchived}, colorClass) }; if (endDate) { eventData.end = endDate; diff --git a/apps/client/src/widgets/collections/calendar/index.css b/apps/client/src/widgets/collections/calendar/index.css index 5dd836fe6..b950cd8d4 100644 --- a/apps/client/src/widgets/collections/calendar/index.css +++ b/apps/client/src/widgets/collections/calendar/index.css @@ -75,4 +75,30 @@ body.desktop:not(.zen) .calendar-view .calendar-header { .search-result-widget-content .calendar-view .calendar-header { padding-inline-end: unset !important; } -/* #endregion */ \ No newline at end of file +/* #endregion */ + +.calendar-view { + --fc-event-text-color: var(--calendar-coll-event-text-color); +} + +.calendar-view a.fc-timegrid-event, +.calendar-view a.fc-daygrid-event { + font-weight: 500; +} + +.calendar-view a.fc-timegrid-event:hover, +.calendar-view a.fc-daygrid-event:hover { + text-decoration: none; + filter: var(--calendar-cell-event-hover-filter); +} + +.fc-timegrid-event.with-hue, .fc-daygrid-event:not(.fc-daygrid-dot-event).with-hue { + --fc-event-text-color: var(--custom-color); + + border: unset; + border-left: 4px solid; + padding-left: 8px; + background: hsl(var(--custom-color-hue), + var(--calendar-coll-event-background-saturation), + var(--calendar-coll-event-background-lightness)) !important; +} \ No newline at end of file From 11618260cf6ab0201dd3ff0a4a3b0c63a9719410 Mon Sep 17 00:00:00 2001 From: Adorian Doran Date: Sun, 30 Nov 2025 20:18:16 +0200 Subject: [PATCH 35/73] style/calendar collection: tweak the appearance of events without a color --- apps/client/src/stylesheets/theme-next-dark.css | 1 + apps/client/src/stylesheets/theme-next-light.css | 1 + apps/client/src/widgets/collections/calendar/index.css | 10 ++++++---- 3 files changed, 8 insertions(+), 4 deletions(-) diff --git a/apps/client/src/stylesheets/theme-next-dark.css b/apps/client/src/stylesheets/theme-next-dark.css index 28f42c218..1565fe1e8 100644 --- a/apps/client/src/stylesheets/theme-next-dark.css +++ b/apps/client/src/stylesheets/theme-next-dark.css @@ -273,6 +273,7 @@ --calendar-coll-event-background-saturation: 12%; --calendar-coll-event-background-lightness: 21%; + --calendar-coll-event-background-color: #3c3c3c; --calendar-coll-event-text-color: white; --calendar-cell-event-hover-filter: brightness(1.25); } diff --git a/apps/client/src/stylesheets/theme-next-light.css b/apps/client/src/stylesheets/theme-next-light.css index 9fe9b53fe..423ef8d52 100644 --- a/apps/client/src/stylesheets/theme-next-light.css +++ b/apps/client/src/stylesheets/theme-next-light.css @@ -271,6 +271,7 @@ --calendar-coll-event-background-lightness: 95%; --calendar-coll-event-background-saturation: 80%; + --calendar-coll-event-background-color: #eaeaea; --calendar-coll-event-text-color: black; --calendar-cell-event-hover-filter: brightness(.95) saturate(1.25); } diff --git a/apps/client/src/widgets/collections/calendar/index.css b/apps/client/src/widgets/collections/calendar/index.css index b950cd8d4..60886f716 100644 --- a/apps/client/src/widgets/collections/calendar/index.css +++ b/apps/client/src/widgets/collections/calendar/index.css @@ -79,25 +79,27 @@ body.desktop:not(.zen) .calendar-view .calendar-header { .calendar-view { --fc-event-text-color: var(--calendar-coll-event-text-color); + --fc-event-bg-color: var(--calendar-coll-event-background-color); } .calendar-view a.fc-timegrid-event, .calendar-view a.fc-daygrid-event { + border: unset; + border-left: 4px solid; + padding-left: 8px; font-weight: 500; } .calendar-view a.fc-timegrid-event:hover, .calendar-view a.fc-daygrid-event:hover { - text-decoration: none; + text-decoration: none; + border-color: var(--fc-event-text-color); filter: var(--calendar-cell-event-hover-filter); } .fc-timegrid-event.with-hue, .fc-daygrid-event:not(.fc-daygrid-dot-event).with-hue { --fc-event-text-color: var(--custom-color); - border: unset; - border-left: 4px solid; - padding-left: 8px; background: hsl(var(--custom-color-hue), var(--calendar-coll-event-background-saturation), var(--calendar-coll-event-background-lightness)) !important; From 5ff77c16abca59a5a65fd8d38ba366c8240ac4a4 Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Sun, 30 Nov 2025 21:13:07 +0200 Subject: [PATCH 36/73] feat(revisions): improve layout on mobile --- apps/client/src/widgets/dialogs/revisions.css | 22 ++++++++++++++++++- apps/client/src/widgets/dialogs/revisions.tsx | 2 +- apps/client/src/widgets/react/FormList.tsx | 6 +++-- 3 files changed, 26 insertions(+), 4 deletions(-) diff --git a/apps/client/src/widgets/dialogs/revisions.css b/apps/client/src/widgets/dialogs/revisions.css index 91c3af11c..5528ac368 100644 --- a/apps/client/src/widgets/dialogs/revisions.css +++ b/apps/client/src/widgets/dialogs/revisions.css @@ -2,15 +2,31 @@ body.mobile .revisions-dialog { .modal-dialog { height: 95vh; } + + .modal-header { + display: flex; + flex-wrap: wrap; + gap: 0.25em; + font-size: 0.9em; + } + + .modal-title { + flex-grow: 1; + width: 100%; + } .modal-body { height: 100% !important; flex-direction: column; padding: 0; } + + .modal-footer { + font-size: 0.9em; + } .revision-list { - height: unset; + height: fit-content !important; max-height: 20vh; border-bottom: 1px solid var(--main-border-color) !important; padding: 0 1em; @@ -18,6 +34,7 @@ body.mobile .revisions-dialog { .modal-body > .revision-content-wrapper { flex-grow: 1; + max-width: unset !important; height: 100%; overflow: auto; margin: 0; @@ -33,6 +50,9 @@ body.mobile .revisions-dialog { .revision-title-buttons { text-align: center; + display: flex; + gap: 0.25em; + flex-wrap: wrap; } .revision-content { diff --git a/apps/client/src/widgets/dialogs/revisions.tsx b/apps/client/src/widgets/dialogs/revisions.tsx index fd2dd9a16..322abdd3b 100644 --- a/apps/client/src/widgets/dialogs/revisions.tsx +++ b/apps/client/src/widgets/dialogs/revisions.tsx @@ -138,7 +138,7 @@ export default function RevisionsDialog() { function RevisionsList({ revisions, onSelect, currentRevision }: { revisions: RevisionItem[], onSelect: (val: string) => void, currentRevision?: RevisionItem }) { return ( - + {revisions.map((item) => void; style?: CSSProperties; + wrapperClassName?: string; fullHeight?: boolean; } -export default function FormList({ children, onSelect, style, fullHeight }: FormListOpts) { +export default function FormList({ children, onSelect, style, fullHeight, wrapperClassName }: FormListOpts) { const wrapperRef = useRef(null); const triggerRef = useRef(null); @@ -43,7 +45,7 @@ export default function FormList({ children, onSelect, style, fullHeight }: Form }, [ fullHeight ]); return ( -
    +