merge main into branch
Some checks failed
Checks / main (push) Has been cancelled

This commit is contained in:
perfectra1n 2026-02-11 10:01:49 -08:00
commit f3d415a3a7
56 changed files with 1616 additions and 829 deletions

View File

@ -9,9 +9,9 @@
"keywords": [], "keywords": [],
"author": "Elian Doran <contact@eliandoran.me>", "author": "Elian Doran <contact@eliandoran.me>",
"license": "AGPL-3.0-only", "license": "AGPL-3.0-only",
"packageManager": "pnpm@10.28.2", "packageManager": "pnpm@10.29.2",
"devDependencies": { "devDependencies": {
"@redocly/cli": "2.15.1", "@redocly/cli": "2.17.0",
"archiver": "7.0.1", "archiver": "7.0.1",
"fs-extra": "11.3.3", "fs-extra": "11.3.3",
"react": "19.2.4", "react": "19.2.4",

View File

@ -27,7 +27,7 @@
"@mermaid-js/layout-elk": "0.2.0", "@mermaid-js/layout-elk": "0.2.0",
"@mind-elixir/node-menu": "5.0.1", "@mind-elixir/node-menu": "5.0.1",
"@popperjs/core": "2.11.8", "@popperjs/core": "2.11.8",
"@preact/signals": "2.6.2", "@preact/signals": "2.7.1",
"@triliumnext/ckeditor5": "workspace:*", "@triliumnext/ckeditor5": "workspace:*",
"@triliumnext/codemirror": "workspace:*", "@triliumnext/codemirror": "workspace:*",
"@triliumnext/commons": "workspace:*", "@triliumnext/commons": "workspace:*",
@ -44,7 +44,7 @@
"draggabilly": "3.0.0", "draggabilly": "3.0.0",
"force-graph": "1.51.1", "force-graph": "1.51.1",
"globals": "17.3.0", "globals": "17.3.0",
"i18next": "25.8.0", "i18next": "25.8.4",
"i18next-http-backend": "3.0.2", "i18next-http-backend": "3.0.2",
"jquery": "4.0.0", "jquery": "4.0.0",
"jquery.fancytree": "2.38.5", "jquery.fancytree": "2.38.5",
@ -56,7 +56,7 @@
"mark.js": "8.11.1", "mark.js": "8.11.1",
"marked": "17.0.1", "marked": "17.0.1",
"mermaid": "11.12.2", "mermaid": "11.12.2",
"mind-elixir": "5.7.1", "mind-elixir": "5.8.0",
"normalize.css": "8.0.1", "normalize.css": "8.0.1",
"panzoom": "9.4.3", "panzoom": "9.4.3",
"preact": "10.28.3", "preact": "10.28.3",

View File

@ -18,6 +18,10 @@ export type PrintReport = {
} | { } | {
type: "collection"; type: "collection";
ignoredNoteIds: string[]; ignoredNoteIds: string[];
} | {
type: "error";
message: string;
stack?: string;
}; };
async function main() { async function main() {

View File

@ -800,3 +800,18 @@ li.dropdown-item a.dropdown-item-button:focus-visible {
background: var(--hover-item-background-color); background: var(--hover-item-background-color);
color: var(--hover-item-text-color); color: var(--hover-item-text-color);
} }
/*
* Alert bars
*/
div.alert {
margin-bottom: 8px;
background: var(--alert-bar-background) !important;
border-radius: 8px;
font-size: .85em;
}
div.alert p + p {
margin-block: 1em 0;
}

View File

@ -84,6 +84,22 @@ button.btn.btn-success kbd {
letter-spacing: 0.5pt; letter-spacing: 0.5pt;
} }
/*
* Low profile buttons
*/
button.tn-low-profile {
appearance: none;
background: transparent;
border: 0;
border-radius: 8px;
color: inherit;
}
button.tn-low-profile:hover {
background-color: var(--icon-button-hover-background);
}
/* /*
* Icon buttons * Icon buttons
*/ */
@ -794,3 +810,35 @@ input[type="range"] {
scrollbar-width: unset; scrollbar-width: unset;
} }
} }
/*
* Centered forms
*/
.tn-centered-form {
display: flex;
flex-direction: column;
align-items: center;
margin-bottom: 20vh;
}
.tn-centered-form .form-group {
text-align: center;
color: var(--muted-text-color);
}
.tn-centered-form .form-icon {
font-size: 140px;
color: var(--main-border-color);
}
.tn-centered-form .protected-session-password {
margin-inline: auto;
max-width: 350px;
text-align: center;
}
.tn-centered-form input,
.tn-centered-form button {
margin-top: 12px;
}

View File

@ -265,13 +265,6 @@ body.desktop .options-section:not(.tn-no-card) {
margin-bottom: 6px; margin-bottom: 6px;
} }
.options-section .alert {
margin-bottom: 8px;
background: var(--alert-bar-background) !important;
border-radius: 8px;
font-size: .85em;
}
nav.options-section-tabs { nav.options-section-tabs {
min-width: var(--options-card-min-width); min-width: var(--options-card-min-width);
max-width: var(--options-card-max-width); max-width: var(--options-card-max-width);

View File

@ -1,6 +1,6 @@
{ {
"about": { "about": {
"title": "Über Trilium Notizen", "title": "Über Trilium Notes",
"homepage": "Startseite:", "homepage": "Startseite:",
"app_version": "App-Version:", "app_version": "App-Version:",
"db_version": "DB-Version:", "db_version": "DB-Version:",
@ -662,7 +662,8 @@
"show-cheatsheet": "Cheatsheet anzeigen", "show-cheatsheet": "Cheatsheet anzeigen",
"toggle-zen-mode": "Zen Modus", "toggle-zen-mode": "Zen Modus",
"new-version-available": "Neues Update verfügbar", "new-version-available": "Neues Update verfügbar",
"download-update": "Version {{latestVersion}} herunterladen" "download-update": "Version {{latestVersion}} herunterladen",
"search_notes": "Notizen durchsuchen"
}, },
"sync_status": { "sync_status": {
"unknown": "<p>Der Synchronisations-Status wird bekannt, sobald der nächste Synchronisierungsversuch gestartet wird.</p><p>Klicke, um eine Synchronisierung jetzt auszulösen.</p>", "unknown": "<p>Der Synchronisations-Status wird bekannt, sobald der nächste Synchronisierungsversuch gestartet wird.</p><p>Klicke, um eine Synchronisierung jetzt auszulösen.</p>",
@ -758,7 +759,8 @@
"error_cannot_get_branch_id": "BranchId für notePath „{{notePath}}“ kann nicht abgerufen werden", "error_cannot_get_branch_id": "BranchId für notePath „{{notePath}}“ kann nicht abgerufen werden",
"error_unrecognized_command": "Unbekannter Befehl {{command}}", "error_unrecognized_command": "Unbekannter Befehl {{command}}",
"note_revisions": "Notiz Revisionen", "note_revisions": "Notiz Revisionen",
"backlinks": "Rücklinks" "backlinks": "Rücklinks",
"content_language_switcher": "Inhaltssprache: {{language}}"
}, },
"note_icon": { "note_icon": {
"change_note_icon": "Notiz-Icon ändern", "change_note_icon": "Notiz-Icon ändern",
@ -910,7 +912,8 @@
"unknown_search_option": "Unbekannte Suchoption {{searchOptionName}}", "unknown_search_option": "Unbekannte Suchoption {{searchOptionName}}",
"search_note_saved": "Suchnotiz wurde in {{-notePathTitle}} gespeichert", "search_note_saved": "Suchnotiz wurde in {{-notePathTitle}} gespeichert",
"actions_executed": "Aktionen wurden ausgeführt.", "actions_executed": "Aktionen wurden ausgeführt.",
"view_options": "Optionen anzeigen:" "view_options": "Optionen anzeigen:",
"option": "Option"
}, },
"similar_notes": { "similar_notes": {
"title": "Ähnliche Notizen", "title": "Ähnliche Notizen",
@ -1503,6 +1506,7 @@
"geo-map": "Geo-Karte", "geo-map": "Geo-Karte",
"beta-feature": "Beta", "beta-feature": "Beta",
"book": "Sammlung", "book": "Sammlung",
"ai-chat": "KI Chat",
"task-list": "Aufgabenliste", "task-list": "Aufgabenliste",
"new-feature": "Neu", "new-feature": "Neu",
"collections": "Sammlungen" "collections": "Sammlungen"
@ -2133,5 +2137,8 @@
"title_one": "{{count}} Tab", "title_one": "{{count}} Tab",
"title_other": "{{count}} Tabs", "title_other": "{{count}} Tabs",
"more_options": "Weitere Optionen" "more_options": "Weitere Optionen"
},
"bookmark_buttons": {
"bookmarks": "Lesezeichen"
} }
} }

View File

@ -1070,10 +1070,12 @@
"note_detail_render_help_1": "This help note is shown because this note of type Render HTML doesn't have required relation to function properly.", "note_detail_render_help_1": "This help note is shown because this note of type Render HTML doesn't have required relation to function properly.",
"note_detail_render_help_2": "Render HTML note type is used for <a class=\"external\" href=\"https://triliumnext.github.io/Docs/Wiki/scripts.html\">scripting</a>. In short, you have a HTML code note (optionally with some JavaScript) and this note will render it. To make it work, you need to define a <a class=\"external\" href=\"https://triliumnext.github.io/Docs/Wiki/attributes.html\">relation</a> called \"renderNote\" pointing to the HTML note to render." "note_detail_render_help_2": "Render HTML note type is used for <a class=\"external\" href=\"https://triliumnext.github.io/Docs/Wiki/scripts.html\">scripting</a>. In short, you have a HTML code note (optionally with some JavaScript) and this note will render it. To make it work, you need to define a <a class=\"external\" href=\"https://triliumnext.github.io/Docs/Wiki/attributes.html\">relation</a> called \"renderNote\" pointing to the HTML note to render."
}, },
"web_view": { "web_view_setup": {
"web_view": "Web View", "title": "Create a live view of a webpage directly into Trilium",
"embed_websites": "Note of type Web View allows you to embed websites into Trilium.", "url_placeholder": "Enter or paste the website address, for example https://triliumnotes.org",
"create_label": "To start, please create a label with a URL address you want to embed, e.g. #webViewSrc=\"https://www.google.com\"" "create_button": "Create Web View",
"invalid_url_title": "Invalid address",
"invalid_url_message": "Insert a valid web address, for example https://triliumnotes.org."
}, },
"backend_log": { "backend_log": {
"refresh": "Refresh" "refresh": "Refresh"
@ -1570,6 +1572,7 @@
"confirm-change": "It is not recommended to change note type when note content is not empty. Do you want to continue anyway?", "confirm-change": "It is not recommended to change note type when note content is not empty. Do you want to continue anyway?",
"geo-map": "Geo Map", "geo-map": "Geo Map",
"beta-feature": "Beta", "beta-feature": "Beta",
"ai-chat": "AI Chat",
"task-list": "Task List", "task-list": "Task List",
"new-feature": "New", "new-feature": "New",
"collections": "Collections" "collections": "Collections"
@ -1651,6 +1654,8 @@
"printing": "Printing in progress...", "printing": "Printing in progress...",
"printing_pdf": "Exporting to PDF in progress...", "printing_pdf": "Exporting to PDF in progress...",
"print_report_title": "Print report", "print_report_title": "Print report",
"print_report_error_title": "Failed to print",
"print_report_stack_trace": "Stack trace",
"print_report_collection_content_one": "{{count}} note in the collection could not be printed because they are not supported or they are protected.", "print_report_collection_content_one": "{{count}} note in the collection could not be printed because they are not supported or they are protected.",
"print_report_collection_content_other": "{{count}} notes in the collection could not be printed because they are not supported or they are protected.", "print_report_collection_content_other": "{{count}} notes in the collection could not be printed because they are not supported or they are protected.",
"print_report_collection_details_button": "See details", "print_report_collection_details_button": "See details",

View File

@ -662,7 +662,8 @@
"show-cheatsheet": "Mostrar hoja de trucos", "show-cheatsheet": "Mostrar hoja de trucos",
"toggle-zen-mode": "Modo Zen", "toggle-zen-mode": "Modo Zen",
"new-version-available": "Nueva actualización disponible", "new-version-available": "Nueva actualización disponible",
"download-update": "Obtener versión {{latestVersion}}" "download-update": "Obtener versión {{latestVersion}}",
"search_notes": "Buscar notas"
}, },
"zen_mode": { "zen_mode": {
"button_exit": "Salir del modo Zen" "button_exit": "Salir del modo Zen"
@ -762,7 +763,8 @@
"error_cannot_get_branch_id": "No se puede obtener el branchID del notePath '{{notePath}}'", "error_cannot_get_branch_id": "No se puede obtener el branchID del notePath '{{notePath}}'",
"error_unrecognized_command": "Comando no reconocido {{command}}", "error_unrecognized_command": "Comando no reconocido {{command}}",
"note_revisions": "Revisiones de notas", "note_revisions": "Revisiones de notas",
"backlinks": "Vínculos de retroceso" "backlinks": "Vínculos de retroceso",
"content_language_switcher": "Idioma de contenido: {{language}}"
}, },
"note_icon": { "note_icon": {
"change_note_icon": "Cambiar icono de nota", "change_note_icon": "Cambiar icono de nota",
@ -915,7 +917,8 @@
"unknown_search_option": "Opción de búsqueda desconocida {{searchOptionName}}", "unknown_search_option": "Opción de búsqueda desconocida {{searchOptionName}}",
"search_note_saved": "La nota de búsqueda se ha guardado en {{- notePathTitle}}", "search_note_saved": "La nota de búsqueda se ha guardado en {{- notePathTitle}}",
"actions_executed": "Las acciones han sido ejecutadas.", "actions_executed": "Las acciones han sido ejecutadas.",
"view_options": "Ver opciones:" "view_options": "Ver opciones:",
"option": "opción"
}, },
"similar_notes": { "similar_notes": {
"title": "Notas similares", "title": "Notas similares",
@ -1549,6 +1552,7 @@
"confirm-change": "No es recomendado cambiar el tipo de nota cuando el contenido de la nota no está vacío. ¿Desea continuar de cualquier manera?", "confirm-change": "No es recomendado cambiar el tipo de nota cuando el contenido de la nota no está vacío. ¿Desea continuar de cualquier manera?",
"geo-map": "Mapa Geo", "geo-map": "Mapa Geo",
"beta-feature": "Beta", "beta-feature": "Beta",
"ai-chat": "Chat de IA",
"task-list": "Lista de tareas", "task-list": "Lista de tareas",
"book": "Colección", "book": "Colección",
"new-feature": "Nuevo", "new-feature": "Nuevo",
@ -2148,5 +2152,8 @@
"title_many": "{{count}} pestañas", "title_many": "{{count}} pestañas",
"title_other": "{{count}} pestañas", "title_other": "{{count}} pestañas",
"more_options": "Más opciones" "more_options": "Más opciones"
},
"bookmark_buttons": {
"bookmarks": "Marcadores"
} }
} }

View File

@ -27,7 +27,8 @@
"show-cheatsheet": "Taispeáin Bileog leideanna", "show-cheatsheet": "Taispeáin Bileog leideanna",
"toggle-zen-mode": "Mód Zen", "toggle-zen-mode": "Mód Zen",
"new-version-available": "Nuashonrú Nua ar Fáil", "new-version-available": "Nuashonrú Nua ar Fáil",
"download-update": "Faigh Leagan {{latestVersion}}" "download-update": "Faigh Leagan {{latestVersion}}",
"search_notes": "Cuardaigh nótaí"
}, },
"about": { "about": {
"title": "Maidir le Trilium Notes", "title": "Maidir le Trilium Notes",
@ -764,7 +765,8 @@
"note_revisions": "Athbhreithnithe nóta", "note_revisions": "Athbhreithnithe nóta",
"error_cannot_get_branch_id": "Ní féidir aitheantas brainse a fháil do NotePad '{{notePath}}'", "error_cannot_get_branch_id": "Ní féidir aitheantas brainse a fháil do NotePad '{{notePath}}'",
"error_unrecognized_command": "Ordú gan aitheantas {{command}}", "error_unrecognized_command": "Ordú gan aitheantas {{command}}",
"backlinks": "Naisc ar ais" "backlinks": "Naisc ar ais",
"content_language_switcher": "Teanga an ábhair: {{language}}"
}, },
"note_icon": { "note_icon": {
"change_note_icon": "Deilbhín nóta athraithe", "change_note_icon": "Deilbhín nóta athraithe",
@ -919,7 +921,8 @@
"unknown_search_option": "Rogha cuardaigh anaithnid {{searchOptionName}}", "unknown_search_option": "Rogha cuardaigh anaithnid {{searchOptionName}}",
"search_note_saved": "Tá an nóta cuardaigh sábháilte i {{- notePathTitle}}", "search_note_saved": "Tá an nóta cuardaigh sábháilte i {{- notePathTitle}}",
"actions_executed": "Tá gníomhartha curtha i gcrích.", "actions_executed": "Tá gníomhartha curtha i gcrích.",
"view_options": "Roghanna féachana:" "view_options": "Roghanna féachana:",
"option": "rogha"
}, },
"similar_notes": { "similar_notes": {
"title": "Nótaí Comhchosúla", "title": "Nótaí Comhchosúla",
@ -1573,6 +1576,7 @@
"confirm-change": "Ní mholtar cineál nóta a athrú nuair nach bhfuil ábhar an nóta folamh. Ar mhaith leat leanúint ar aghaidh ar aon nós?", "confirm-change": "Ní mholtar cineál nóta a athrú nuair nach bhfuil ábhar an nóta folamh. Ar mhaith leat leanúint ar aghaidh ar aon nós?",
"geo-map": "Léarscáil Gheografach", "geo-map": "Léarscáil Gheografach",
"beta-feature": "Béite", "beta-feature": "Béite",
"ai-chat": "Comhrá AI",
"task-list": "Liosta Tascanna", "task-list": "Liosta Tascanna",
"new-feature": "Nua", "new-feature": "Nua",
"collections": "Bailiúcháin" "collections": "Bailiúcháin"
@ -2178,5 +2182,8 @@
"title_many": "{{count}} cluaisíní", "title_many": "{{count}} cluaisíní",
"title_other": "{{count}} cluaisíní", "title_other": "{{count}} cluaisíní",
"more_options": "Tuilleadh roghanna" "more_options": "Tuilleadh roghanna"
},
"bookmark_buttons": {
"bookmarks": "Leabharmharcanna"
} }
} }

View File

@ -21,7 +21,7 @@
}, },
"bundle-error": { "bundle-error": {
"title": "Nie udało się załadować niestandardowego skryptu", "title": "Nie udało się załadować niestandardowego skryptu",
"message": "Skrypt z notatki o ID \"{{id}}\", zatytułowany \"{{title}}\", nie mógł zostać wykonany z powodu:\n\n{{message}}" "message": "Skrypt nie mógł zostać wykonany z powodu:\n\n{{message}}"
}, },
"widget-list-error": { "widget-list-error": {
"title": "Nie udało się pobrać listy widżetów z serwera" "title": "Nie udało się pobrać listy widżetów z serwera"
@ -29,8 +29,9 @@
"widget-render-error": { "widget-render-error": {
"title": "Nie udało się wyrenderować niestandardowego widżetu React" "title": "Nie udało się wyrenderować niestandardowego widżetu React"
}, },
"widget-missing-parent": "Niestandardowy widżet nie ma zdefiniowanej obowiązkowej właściwości „{{property}}”.", "widget-missing-parent": "Niestandardowy widżet nie ma zdefiniowanej obowiązkowej właściwości „{{property}}”.\nJeśli skrypt ma działać bez interfejsu użytkownika (UI) wyłącz go: '#run=frontendStartup'.",
"open-script-note": "Otwórz notatkę ze skryptem" "open-script-note": "Otwórz notatkę ze skryptem",
"scripting-error": "Błąd skryptu użytkownika: {{title}}"
}, },
"add_link": { "add_link": {
"add_link": "Dodaj link", "add_link": "Dodaj link",
@ -191,7 +192,8 @@
"expand_tooltip": "Rozwija bezpośrednie elementy podrzędne tej kolekcji (o jeden poziom). Aby uzyskać więcej opcji, naciśnij strzałkę po prawej.", "expand_tooltip": "Rozwija bezpośrednie elementy podrzędne tej kolekcji (o jeden poziom). Aby uzyskać więcej opcji, naciśnij strzałkę po prawej.",
"expand_first_level": "Rozwiń bezpośrednie elementy podrzędne", "expand_first_level": "Rozwiń bezpośrednie elementy podrzędne",
"expand_nth_level": "Rozwiń {{depth}} poziomów", "expand_nth_level": "Rozwiń {{depth}} poziomów",
"expand_all_levels": "Rozwiń wszystkie poziomy" "expand_all_levels": "Rozwiń wszystkie poziomy",
"hide_child_notes": "Ukryj notatki podrzędne w derzwie"
}, },
"board_view": { "board_view": {
"move-to": "Przenieś do", "move-to": "Przenieś do",
@ -240,7 +242,7 @@
"background_effects_title": "Efekty tła są teraz stabilne", "background_effects_title": "Efekty tła są teraz stabilne",
"dismiss": "Odrzuć", "dismiss": "Odrzuć",
"background_effects_button": "Włącz efekty tła", "background_effects_button": "Włącz efekty tła",
"background_effects_message": "Na urządzeniach z systemem Windows efekty tła są teraz w pełni stabilne. Efekty tła dodają odrobinę koloru do interfejsu użytkownika poprzez rozmycie tła za nim. Ta technika jest również stosowana w innych aplikacjach, takich jak Eksplorator Windows.", "background_effects_message": "Na urządzeniach z systemem Windows i macOS efekty tła są stabilne. Efekty tła dodają odrobinę koloru do interfejsu użytkownika poprzez rozmycie tła za nim.",
"new_layout_title": "Nowy układ", "new_layout_title": "Nowy układ",
"new_layout_message": "Wprowadziliśmy zmodernizowany układ interfejsu dla Trilium. Wstążka została usunięta i płynnie zintegrowana z głównym interfejsem, a jej kluczowe funkcje przejęły nowy pasek stanu i rozwijane sekcje (takie jak promowane atrybuty).\n\nNowy układ jest domyślnie włączony i można go tymczasowo wyłączyć w Ustawienia → Wygląd.", "new_layout_message": "Wprowadziliśmy zmodernizowany układ interfejsu dla Trilium. Wstążka została usunięta i płynnie zintegrowana z głównym interfejsem, a jej kluczowe funkcje przejęły nowy pasek stanu i rozwijane sekcje (takie jak promowane atrybuty).\n\nNowy układ jest domyślnie włączony i można go tymczasowo wyłączyć w Ustawienia → Wygląd.",
"new_layout_button": "Szczegóły" "new_layout_button": "Szczegóły"
@ -520,7 +522,8 @@
"action": "akcja", "action": "akcja",
"search_button": "Szukaj", "search_button": "Szukaj",
"search_execute": "Szukaj i wykonaj akcje", "search_execute": "Szukaj i wykonaj akcje",
"view_options": "Ustawienia widoku:" "view_options": "Ustawienia widoku:",
"option": "opcja"
}, },
"similar_notes": { "similar_notes": {
"title": "Podobne notatki", "title": "Podobne notatki",
@ -602,8 +605,8 @@
"desktop-application": "Aplikacja desktopowa", "desktop-application": "Aplikacja desktopowa",
"native-title-bar": "Natywny pasek tytułu", "native-title-bar": "Natywny pasek tytułu",
"native-title-bar-description": "Dla Windows i macOS, wyłączenie natywnego paska tytułu sprawia, że aplikacja wygląda bardziej kompaktowo. Na Linuxie, włączenie natywnego paska tytułu lepiej integruje się z resztą systemu.", "native-title-bar-description": "Dla Windows i macOS, wyłączenie natywnego paska tytułu sprawia, że aplikacja wygląda bardziej kompaktowo. Na Linuxie, włączenie natywnego paska tytułu lepiej integruje się z resztą systemu.",
"background-effects": "Włącz efekty tła (tylko Windows 11)", "background-effects": "Włącz efekty tła",
"background-effects-description": "Efekt Mica dodaje rozmyte, stylowe tło do okien aplikacji, tworząc głębię i nowoczesny wygląd. \"Natywny pasek tytułu\" musi być wyłączony.", "background-effects-description": "Dodaje rozmyte, stylowe tło do okien aplikacji, tworząc głębię i nowoczesny wygląd. \"Natywny pasek tytułu\" musi być wyłączony.",
"restart-app-button": "Zrestartuj aplikację, aby zobaczyć zmiany", "restart-app-button": "Zrestartuj aplikację, aby zobaczyć zmiany",
"zoom-factor": "Współczynnik powiększenia" "zoom-factor": "Współczynnik powiększenia"
}, },
@ -1039,7 +1042,8 @@
"show-cheatsheet": "Pokaż ściągawkę", "show-cheatsheet": "Pokaż ściągawkę",
"toggle-zen-mode": "Tryb Zen", "toggle-zen-mode": "Tryb Zen",
"new-version-available": "Dostępna nowa aktualizacja", "new-version-available": "Dostępna nowa aktualizacja",
"download-update": "Pobierz wersję {{latestVersion}}" "download-update": "Pobierz wersję {{latestVersion}}",
"search_notes": "Przeszukaj notatki"
}, },
"zen_mode": { "zen_mode": {
"button_exit": "Wyjdź z trybu Zen" "button_exit": "Wyjdź z trybu Zen"
@ -1122,7 +1126,7 @@
"button_title": "Eksportuj diagram jako SVG" "button_title": "Eksportuj diagram jako SVG"
}, },
"relation_map_buttons": { "relation_map_buttons": {
"create_child_note_title": "Utwórz nową notatkę podrzędną i dodaj ją do tej mapy relacji", "create_child_note_title": "Utwórz notatkę podrzędną i dodaj ją do mapy",
"reset_pan_zoom_title": "Zresetuj przesunięcie i powiększenie do początkowych współrzędnych i powiększenia", "reset_pan_zoom_title": "Zresetuj przesunięcie i powiększenie do początkowych współrzędnych i powiększenia",
"zoom_in_title": "Powiększ", "zoom_in_title": "Powiększ",
"zoom_out_title": "Pomniejsz" "zoom_out_title": "Pomniejsz"
@ -1138,12 +1142,23 @@
"delete_this_note": "Usuń tę notatkę", "delete_this_note": "Usuń tę notatkę",
"note_revisions": "Wersje notatki", "note_revisions": "Wersje notatki",
"error_cannot_get_branch_id": "Nie można pobrać branchId dla ścieżki notatki '{{notePath}}'", "error_cannot_get_branch_id": "Nie można pobrać branchId dla ścieżki notatki '{{notePath}}'",
"error_unrecognized_command": "Nierozpoznane polecenie {{command}}" "error_unrecognized_command": "Nierozpoznane polecenie {{command}}",
"backlinks": "Linki zwrotne",
"content_language_switcher": "Język treści: {{language}}"
}, },
"note_icon": { "note_icon": {
"change_note_icon": "Zmień ikonę notatki", "change_note_icon": "Zmień ikonę notatki",
"search": "Szukaj:", "search": "Szukaj:",
"reset-default": "Przywróć domyślną ikonę" "reset-default": "Przywróć domyślną ikonę",
"search_placeholder_one": "Znaleziono {{number}} ikonę w {{count}} pakietach",
"search_placeholder_few": "Znaleziono {{number}} ikon w {{count}} pakietach",
"search_placeholder_many": "Znaleziono {{number}} ikon w {{count}} pakietach",
"search_placeholder_filtered": "Wyszukaj {{number}} ikon w {{name}}",
"filter": "Filtr",
"filter-none": "Wszystkie ikony",
"filter-default": "Domyślne ikony",
"icon_tooltip": "{{name}}\npakiet ikon: {{iconPack}}",
"no_results": "Nie znaleziono ikon."
}, },
"basic_properties": { "basic_properties": {
"note_type": "Typ notatki", "note_type": "Typ notatki",
@ -1683,7 +1698,7 @@
"will_be_deleted_in": "Ten załącznik zostanie automatycznie usunięty za {{time}}", "will_be_deleted_in": "Ten załącznik zostanie automatycznie usunięty za {{time}}",
"will_be_deleted_soon": "Ten załącznik zostanie wkrótce automatycznie usunięty", "will_be_deleted_soon": "Ten załącznik zostanie wkrótce automatycznie usunięty",
"deletion_reason": ", ponieważ załącznik nie jest podlinkowany w treści notatki. Aby zapobiec usunięciu, dodaj link do załącznika z powrotem do treści lub przekonwertuj załącznik na notatkę.", "deletion_reason": ", ponieważ załącznik nie jest podlinkowany w treści notatki. Aby zapobiec usunięciu, dodaj link do załącznika z powrotem do treści lub przekonwertuj załącznik na notatkę.",
"role_and_size": "Rola: {{role}}, Rozmiar: {{size}}", "role_and_size": "Rola: {{role}}, Rozmiar: {{size}}, MIME: {{- mimeType}}",
"link_copied": "Link do załącznika skopiowany do schowka.", "link_copied": "Link do załącznika skopiowany do schowka.",
"unrecognized_role": "Nierozpoznana rola załącznika '{{role}}'." "unrecognized_role": "Nierozpoznana rola załącznika '{{role}}'."
}, },
@ -1737,7 +1752,10 @@
"apply-bulk-actions": "Zastosuj akcje masowe", "apply-bulk-actions": "Zastosuj akcje masowe",
"converted-to-attachments": "{{count}} notatek zostało przekonwertowanych na załączniki.", "converted-to-attachments": "{{count}} notatek zostało przekonwertowanych na załączniki.",
"convert-to-attachment-confirm": "Czy na pewno chcesz przekonwertować wybrane notatki na załączniki ich notatek nadrzędnych? Ta operacja dotyczy tylko notatek Obrazów, inne notatki zostaną pominięte.", "convert-to-attachment-confirm": "Czy na pewno chcesz przekonwertować wybrane notatki na załączniki ich notatek nadrzędnych? Ta operacja dotyczy tylko notatek Obrazów, inne notatki zostaną pominięte.",
"open-in-popup": "Szybka edycja" "open-in-popup": "Szybka edycja",
"open-in-a-new-window": "Otwórz w nowym oknie",
"hide-subtree": "Ukryj gałąź",
"show-subtree": "Rozwiń gałąź"
}, },
"shared_info": { "shared_info": {
"shared_publicly": "Ta notatka jest udostępniona publicznie pod adresem {{- link}}.", "shared_publicly": "Ta notatka jest udostępniona publicznie pod adresem {{- link}}.",
@ -1764,6 +1782,7 @@
"confirm-change": "Nie zaleca się zmiany typu notatki, gdy treść notatki nie jest pusta. Czy mimo to chcesz kontynuować?", "confirm-change": "Nie zaleca się zmiany typu notatki, gdy treść notatki nie jest pusta. Czy mimo to chcesz kontynuować?",
"geo-map": "Mapa Geo", "geo-map": "Mapa Geo",
"beta-feature": "Beta", "beta-feature": "Beta",
"ai-chat": "Czat AI",
"task-list": "Lista zadań", "task-list": "Lista zadań",
"new-feature": "Nowość", "new-feature": "Nowość",
"collections": "Kolekcje" "collections": "Kolekcje"
@ -1827,7 +1846,17 @@
"create-child-note": "Utwórz notatkę podrzędną", "create-child-note": "Utwórz notatkę podrzędną",
"unhoist": "Cofnij zawężenie", "unhoist": "Cofnij zawężenie",
"toggle-sidebar": "Przełącz pasek boczny", "toggle-sidebar": "Przełącz pasek boczny",
"dropping-not-allowed": "Upuszczanie notatek w tej lokalizacji jest niedozwolone." "dropping-not-allowed": "Upuszczanie notatek w tej lokalizacji jest niedozwolone.",
"clone-indicator-tooltip": "Ta notatka ma {{- count}} notatek nadrzędnych: {{- parents}}",
"clone-indicator-tooltip-single": "Ta notatka jest sklonowana (1 dodatkowa notatka nadrzędna: {{- parent}})",
"shared-indicator-tooltip": "Ta notatka jest udostępniona publicznie",
"shared-indicator-tooltip-with-url": "Ta notatka jest udostępniana publicznie jako: {{- url}}",
"subtree-hidden-tooltip_one": "{{count}} notatka podrzędna ukryta w drzewie",
"subtree-hidden-tooltip_few": "{{count}} notatek podrzędnych ukrytych w drzewie",
"subtree-hidden-tooltip_many": "{{count}} notatek podrzędnych ukrytych w drzewie",
"subtree-hidden-moved-title": "Dodano do {{title}}",
"subtree-hidden-moved-description-collection": "Ta kolekcja ukrywa swoje notatki podrzędne w drzewie.",
"subtree-hidden-moved-description-other": "Notatki podrzędne są ukryte w drzewie tej notatki."
}, },
"title_bar_buttons": { "title_bar_buttons": {
"window-on-top": "Utrzymuj okno na wierzchu" "window-on-top": "Utrzymuj okno na wierzchu"
@ -1835,7 +1864,13 @@
"note_detail": { "note_detail": {
"could_not_find_typewidget": "Nie można znaleźć widżetu typu dla typu '{{type}}'", "could_not_find_typewidget": "Nie można znaleźć widżetu typu dla typu '{{type}}'",
"printing": "Drukowanie w toku...", "printing": "Drukowanie w toku...",
"printing_pdf": "Eksportowanie do PDF w toku..." "printing_pdf": "Eksportowanie do PDF w toku...",
"print_report_title": "Wydrukuj raport",
"print_report_collection_content_one": "Nie można wydrukować {{count}} notatki w kolekcji, ponieważ nie jest ona obsługiwana lub jest chroniona.",
"print_report_collection_content_few": "Nie można wydrukować {{count}} notatek w kolekcji, ponieważ nie są one obsługiwane lub są chronione.",
"print_report_collection_content_many": "Nie można wydrukować {{count}} notatek w kolekcji, ponieważ nie są one obsługiwane lub są chronione.",
"print_report_collection_details_button": "Zobacz szczegóły",
"print_report_collection_details_ignored_notes": "Zignorowane notatki"
}, },
"note_title": { "note_title": {
"placeholder": "wpisz tytuł notatki tutaj...", "placeholder": "wpisz tytuł notatki tutaj...",
@ -1845,7 +1880,8 @@
"note_type_switcher_others": "Inny typ notatki", "note_type_switcher_others": "Inny typ notatki",
"note_type_switcher_templates": "Szablon", "note_type_switcher_templates": "Szablon",
"note_type_switcher_collection": "Kolekcja", "note_type_switcher_collection": "Kolekcja",
"edited_notes": "Edytowane notatki" "edited_notes": "Notatki edytowane dzisiaj",
"promoted_attributes": "Sugerowane atrybuty"
}, },
"search_result": { "search_result": {
"no_notes_found": "Nie znaleziono notatek dla podanych parametrów wyszukiwania.", "no_notes_found": "Nie znaleziono notatek dla podanych parametrów wyszukiwania.",
@ -1855,7 +1891,11 @@
"configure_launchbar": "Konfiguruj pasek szybkiego dostępu" "configure_launchbar": "Konfiguruj pasek szybkiego dostępu"
}, },
"sql_result": { "sql_result": {
"no_rows": "Dla tego zapytania nie zwrócono żadnych wierszy" "no_rows": "Dla tego zapytania nie zwrócono żadnych wierszy",
"not_executed": "Zapytanie nie zostało jeszcze wykonane.",
"failed": "Wykonanie zapytania SQL nie powiodło się",
"statement_result": "Wynik wyrażenia",
"execute_now": "Wykonaj teraz"
}, },
"sql_table_schemas": { "sql_table_schemas": {
"tables": "Tabele" "tables": "Tabele"
@ -1972,7 +2012,8 @@
"geo-map": { "geo-map": {
"create-child-note-title": "Utwórz nową notatkę podrzędną i dodaj ją do mapy", "create-child-note-title": "Utwórz nową notatkę podrzędną i dodaj ją do mapy",
"create-child-note-instruction": "Kliknij na mapie, aby utworzyć nową notatkę w tej lokalizacji lub naciśnij Escape, aby anulować.", "create-child-note-instruction": "Kliknij na mapie, aby utworzyć nową notatkę w tej lokalizacji lub naciśnij Escape, aby anulować.",
"unable-to-load-map": "Nie można załadować mapy." "unable-to-load-map": "Nie można załadować mapy.",
"create-child-note-text": "Dodaj zaznaczenie"
}, },
"geo-map-context": { "geo-map-context": {
"open-location": "Otwórz lokalizację", "open-location": "Otwórz lokalizację",
@ -2039,7 +2080,14 @@
"execute_sql_description": "Ta notatka jest notatką SQL. Kliknij, aby wykonać zapytanie SQL.", "execute_sql_description": "Ta notatka jest notatką SQL. Kliknij, aby wykonać zapytanie SQL.",
"shared_copy_to_clipboard": "Kopiuj link do schowka", "shared_copy_to_clipboard": "Kopiuj link do schowka",
"shared_open_in_browser": "Otwórz link w przeglądarce", "shared_open_in_browser": "Otwórz link w przeglądarce",
"shared_unshare": "Usuń udostępnienie" "shared_unshare": "Usuń udostępnienie",
"save_status_saved": "Zapisane",
"save_status_saving": "Zapisywanie...",
"save_status_unsaved": "Niezapisane",
"save_status_error": "Zapis nie powiódł się",
"save_status_saving_tooltip": "Zmiany zostały zapisane.",
"save_status_unsaved_tooltip": "Są niezapisane zmiany. Zostaną one zapisane automatycznie za chwilę.",
"save_status_error_tooltip": "Wystąpił błąd podczas zapisywania notatki. Spróbuj skopiować treść notatki w inne miejsce i ponownie załadować aplikację."
}, },
"status_bar": { "status_bar": {
"language_title": "Zmień język treści", "language_title": "Zmień język treści",
@ -2082,5 +2130,30 @@
"empty_button": "Ukryj panel", "empty_button": "Ukryj panel",
"toggle": "Pokaż/ukryj prawy panel", "toggle": "Pokaż/ukryj prawy panel",
"custom_widget_go_to_source": "Przejdź do kodu źródłowego" "custom_widget_go_to_source": "Przejdź do kodu źródłowego"
},
"pdf": {
"attachments_one": "{{count}} załącznik",
"attachments_few": "{{count}} załączniki",
"attachments_many": "{{count}} załączników",
"layers_one": "{{count}} warstwa",
"layers_few": "{{count}} warstw",
"layers_many": "{{count}} warstw",
"pages_one": "{{count}} strona",
"pages_few": "{{count}} stron",
"pages_many": "{{count}} stron",
"pages_alt": "Strona {{pageNumber}}",
"pages_loading": "Wczytuję..."
},
"platform_indicator": {
"available_on": "Dostępne na {{platform}}"
},
"mobile_tab_switcher": {
"title_one": "{{count}} zakładka",
"title_few": "{{count}} zakładki",
"title_many": "{{count}} zakładek",
"more_options": "Więcej opcji"
},
"bookmark_buttons": {
"bookmarks": "Zakładki"
} }
} }

View File

@ -370,7 +370,33 @@ function showToast(type: "printing" | "exporting_pdf", progress: number = 0) {
} }
function handlePrintReport(printReport?: PrintReport) { function handlePrintReport(printReport?: PrintReport) {
if (printReport?.type === "collection" && printReport.ignoredNoteIds.length > 0) { if (!printReport) return;
if (printReport.type === "error") {
toast.showPersistent({
id: "print-error",
icon: "bx bx-error-circle",
title: t("note_detail.print_report_error_title"),
message: printReport.message,
buttons: printReport.stack ? [
{
text: t("note_detail.print_report_collection_details_button"),
onClick(api) {
api.dismissToast();
dialog.info(<>
<p>{printReport.message}</p>
<details>
<summary>{t("note_detail.print_report_stack_trace")}</summary>
<pre style="font-size: 0.85em; overflow-x: auto;">{printReport.stack}</pre>
</details>
</>, {
title: t("note_detail.print_report_error_title")
});
}
}
] : undefined
});
} else if (printReport.type === "collection" && printReport.ignoredNoteIds.length > 0) {
toast.showPersistent({ toast.showPersistent({
id: "print-report", id: "print-report",
icon: "bx bx-collection", icon: "bx bx-collection",

View File

@ -7,7 +7,7 @@
> .collection-properties { > .collection-properties {
position: relative; position: relative;
z-index: 2000; z-index: 998;
} }
} }
@ -22,7 +22,7 @@
.leaflet-top, .leaflet-top,
.leaflet-bottom { .leaflet-bottom {
z-index: 997; z-index: 997 !important;
} }
.geo-view.placing-note .geo-map-container { .geo-view.placing-note .geo-map-container {

View File

@ -37,6 +37,10 @@
&:hover { &:hover {
background: var(--input-background-color); background: var(--input-background-color);
} }
.text {
white-space: nowrap;
}
} }
.status-bar-dropdown-button { .status-bar-dropdown-button {

View File

@ -9,7 +9,6 @@
border-radius: 0.5em; border-radius: 0.5em;
font-size: 0.7rem; font-size: 0.7rem;
font-weight: normal; font-weight: normal;
float: right;
vertical-align: middle; vertical-align: middle;
} }

View File

@ -1992,7 +1992,7 @@ function buildEnhanceTitle() {
if (isSubtreeHidden && count > 0) { if (isSubtreeHidden && count > 0) {
const $badge = $(`<span class="note-indicator-icon subtree-hidden-badge">${count}</span>`); const $badge = $(`<span class="note-indicator-icon subtree-hidden-badge">${count}</span>`);
$badge.attr("title", t("note_tree.subtree-hidden-tooltip", { count })); $badge.attr("title", t("note_tree.subtree-hidden-tooltip", { count }));
$span.find(".fancytree-title").append($badge); $span.append($badge);
} }
}; };
} }

View File

@ -43,7 +43,8 @@ export const TYPE_MAPPINGS: Record<ExtendedNoteType, NoteTypeMapping> = {
}, },
protectedSession: { protectedSession: {
view: () => import("./type_widgets/ProtectedSession"), view: () => import("./type_widgets/ProtectedSession"),
className: "protected-session-password-component" className: "protected-session-password-component",
isFullHeight: true
}, },
book: { book: {
view: () => import("./type_widgets/Book"), view: () => import("./type_widgets/Book"),

View File

@ -3,10 +3,7 @@
line-height: 1em; line-height: 1em;
display: flex; display: flex;
align-items: center; align-items: center;
appearance: none; padding-inline-end: 12px;
background: transparent;
border: 0;
color: inherit;
.arrow { .arrow {
font-size: 1.3em; font-size: 1.3em;

View File

@ -57,7 +57,7 @@ export function ExternallyControlledCollapsible({ title, children, className, ex
"with-transition": transitionEnabled "with-transition": transitionEnabled
})}> })}>
<button <button
className="collapsible-title" className="collapsible-title tn-low-profile"
onClick={() => setExpanded(!expanded)} onClick={() => setExpanded(!expanded)}
aria-expanded={expanded} aria-expanded={expanded}
aria-controls={contentId} aria-controls={contentId}

View File

@ -0,0 +1,4 @@
.similar-notes-widget > .similar-notes-wrapper {
/* The font size of the links with the highest similarity score */
font-size: 17px;
}

View File

@ -1,3 +1,5 @@
import "./SimilarNotesTab.css";
import { SimilarNoteResponse } from "@triliumnext/commons"; import { SimilarNoteResponse } from "@triliumnext/commons";
import { useEffect, useState } from "preact/hooks"; import { useEffect, useState } from "preact/hooks";
@ -33,7 +35,7 @@ export default function SimilarNotesTab({ note }: Pick<TabContext, "note">) {
notePath={notePath} notePath={notePath}
noTnLink noTnLink
style={{ style={{
"font-size": 20 * (1 - 1 / (1 + score)) "font-size": (1 - 1 / (1 + score)) + "em"
}} }}
/> />
))} ))}

View File

@ -6,7 +6,7 @@
.attachment-list .links-wrapper { .attachment-list .links-wrapper {
font-size: larger; font-size: larger;
margin-bottom: 15px; margin-block: 12px;
display: flex; display: flex;
justify-content: space-between; justify-content: space-between;
align-items: baseline; align-items: baseline;

View File

@ -1,9 +1,6 @@
.protected-session-password-component { .protected-session-password-component {
width: 300px; display: flex;
margin: 30px auto auto; margin-inline: 40px;
} flex-direction: column;
justify-content: center;
.protected-session-password-component input,
.protected-session-password-component button {
margin-top: 12px;
} }

View File

@ -20,7 +20,9 @@ export default function ProtectedSession() {
}, [ passwordRef ]); }, [ passwordRef ]);
return ( return (
<form class="protected-session-password-form" onSubmit={submitCallback}> <form class="protected-session-password-form tn-centered-form" onSubmit={submitCallback}>
<span class="form-icon bx bx-key" />
<FormGroup name="protected-session-password-in-detail" label={t("protected_session.enter_password_instruction")}> <FormGroup name="protected-session-password-in-detail" label={t("protected_session.enter_password_instruction")}>
<FormTextBox <FormTextBox
type="password" type="password"
@ -37,4 +39,4 @@ export default function ProtectedSession() {
/> />
</form> </form>
) )
} }

View File

@ -16,3 +16,20 @@
width: 100%; width: 100%;
height: 100%; height: 100%;
} }
.web-view-setup-form {
height: 100%;
display: flex;
flex-direction: column;
justify-content: center;
padding-inline: 40px;
.form-icon {
margin-bottom: 12px;
}
.form-group {
width: 100%;
max-width: 600px;
}
}

View File

@ -1,9 +1,13 @@
import { useCallback, useState } from "preact/hooks";
import FNote from "../../entities/fnote";
import { t } from "../../services/i18n"; import { t } from "../../services/i18n";
import utils from "../../services/utils"; import utils from "../../services/utils";
import Alert from "../react/Alert";
import { useNoteLabel } from "../react/hooks"; import { useNoteLabel } from "../react/hooks";
import { TypeWidgetProps } from "./type_widget"; import { TypeWidgetProps } from "./type_widget";
import "./WebView.css"; import "./WebView.css";
import FormGroup from "../react/FormGroup";
import toast from "../../services/toast";
import Button from "../react/Button";
const isElectron = utils.isElectron(); const isElectron = utils.isElectron();
@ -12,7 +16,7 @@ export default function WebView({ note }: TypeWidgetProps) {
return (webViewSrc return (webViewSrc
? <WebViewContent src={webViewSrc} /> ? <WebViewContent src={webViewSrc} />
: <WebViewHelp /> : <SetupWebView note={note} />
); );
} }
@ -24,12 +28,41 @@ function WebViewContent({ src }: { src: string }) {
} }
} }
function WebViewHelp() { function SetupWebView({note}: {note: FNote}) {
return ( const [srcLabel, setSrcLabel] = useNoteLabel(note, "webViewSrc");
<Alert className="note-detail-web-view-help" type="warning"> const [src, setSrc] = useState("");
<h4>{t("web_view.web_view")}</h4>
<p>{t("web_view.embed_websites")}</p> const submit = useCallback((url: string) => {
<p>{t("web_view.create_label")}</p> try {
</Alert> // Validate URL
) new URL(url);
} catch (ex) {
toast.showErrorTitleAndMessage(t("web_view_setup.invalid_url_title"),
t("web_view_setup.invalid_url_message"));
return;
}
setSrcLabel(url);
}, [note]);
return <div class="web-view-setup-form">
<form class="tn-centered-form" onSubmit={() => submit(src)}>
<span className="bx bx-globe-alt form-icon" />
<FormGroup name="web-view-src-detail" label={t("web_view_setup.title")}>
<input className="form-control"
type="text"
value={src}
placeholder={t("web_view_setup.url_placeholder")}
onChange={(e) => {setSrc((e.target as HTMLInputElement)?.value)}}
/>
</FormGroup>
<Button
text={t("web_view_setup.create_button")}
primary
keyboardShortcut="Enter"
/>
</form>
</div>
} }

View File

@ -95,7 +95,7 @@ export default defineConfig(() => ({
output: { output: {
entryFileNames: (chunk) => { entryFileNames: (chunk) => {
// We enforce a hash in the main index file to avoid caching issues, this only works because we have the HTML entry point. // We enforce a hash in the main index file to avoid caching issues, this only works because we have the HTML entry point.
if (chunk.name === "index") { if (chunk.name === "index" || chunk.name === "print") {
return "src/[name]-[hash].js"; return "src/[name]-[hash].js";
} }

View File

@ -35,7 +35,7 @@
"@triliumnext/commons": "workspace:*", "@triliumnext/commons": "workspace:*",
"@triliumnext/server": "workspace:*", "@triliumnext/server": "workspace:*",
"copy-webpack-plugin": "13.0.1", "copy-webpack-plugin": "13.0.1",
"electron": "40.1.0", "electron": "40.2.1",
"@electron-forge/cli": "7.11.1", "@electron-forge/cli": "7.11.1",
"@electron-forge/maker-deb": "7.11.1", "@electron-forge/maker-deb": "7.11.1",
"@electron-forge/maker-dmg": "7.11.1", "@electron-forge/maker-dmg": "7.11.1",

View File

@ -12,7 +12,7 @@
"@triliumnext/desktop": "workspace:*", "@triliumnext/desktop": "workspace:*",
"@types/fs-extra": "11.0.4", "@types/fs-extra": "11.0.4",
"copy-webpack-plugin": "13.0.1", "copy-webpack-plugin": "13.0.1",
"electron": "40.1.0", "electron": "40.2.1",
"fs-extra": "11.3.3" "fs-extra": "11.3.3"
}, },
"scripts": { "scripts": {

View File

@ -69,7 +69,7 @@
"@types/xml2js": "0.4.14", "@types/xml2js": "0.4.14",
"archiver": "7.0.1", "archiver": "7.0.1",
"async-mutex": "0.5.0", "async-mutex": "0.5.0",
"axios": "1.13.4", "axios": "1.13.5",
"bindings": "1.5.0", "bindings": "1.5.0",
"bootstrap": "5.3.8", "bootstrap": "5.3.8",
"chardet": "2.1.1", "chardet": "2.1.1",
@ -82,7 +82,7 @@
"debounce": "3.0.0", "debounce": "3.0.0",
"debug": "4.4.3", "debug": "4.4.3",
"ejs": "4.0.1", "ejs": "4.0.1",
"electron": "40.1.0", "electron": "40.2.1",
"electron-debug": "4.1.0", "electron-debug": "4.1.0",
"electron-window-state": "5.0.3", "electron-window-state": "5.0.3",
"escape-html": "1.0.3", "escape-html": "1.0.3",
@ -98,7 +98,7 @@
"html2plaintext": "2.1.4", "html2plaintext": "2.1.4",
"http-proxy-agent": "7.0.2", "http-proxy-agent": "7.0.2",
"https-proxy-agent": "7.0.6", "https-proxy-agent": "7.0.6",
"i18next": "25.8.0", "i18next": "25.8.4",
"i18next-fs-backend": "2.6.1", "i18next-fs-backend": "2.6.1",
"image-type": "6.0.0", "image-type": "6.0.0",
"ini": "6.0.0", "ini": "6.0.0",

View File

@ -1,3 +1,6 @@
<aside class="admonition important">
<p>This feature is still in preview and is available only in the <a href="https://docs.triliumnotes.org/user-guide/advanced-usage/nightly-release">nightly release</a>.</p>
</aside>
<figure class="image image-style-align-right image_resized" style="width:45.14%;"> <figure class="image image-style-align-right image_resized" style="width:45.14%;">
<img style="aspect-ratio:854/649;" src="Icon Packs_image.png" <img style="aspect-ratio:854/649;" src="Icon Packs_image.png"
width="854" height="649"> width="854" height="649">

View File

@ -307,15 +307,18 @@
"quick-search-title": "Szybkie wyszukiwanie", "quick-search-title": "Szybkie wyszukiwanie",
"protected-session-title": "Chroniona sesja", "protected-session-title": "Chroniona sesja",
"sync-status-title": "Status synchronizacji", "sync-status-title": "Status synchronizacji",
"llm-chat-title": "Czat z notatkami",
"text-notes": "Notatki tekstowe", "text-notes": "Notatki tekstowe",
"code-notes-title": "Notatki kodowe", "code-notes-title": "Notatki kodowe",
"images-title": "Obrazy", "images-title": "Obrazy",
"multi-factor-authentication-title": "MFA", "multi-factor-authentication-title": "MFA",
"etapi-title": "ETAPI", "etapi-title": "ETAPI",
"ai-llm-title": "AI/LLM",
"other": "Inne", "other": "Inne",
"visible-launchers-title": "Widoczne launchery", "visible-launchers-title": "Widoczne launchery",
"user-guide": "Podręcznik użytkownika", "user-guide": "Podręcznik użytkownika",
"inbox-title": "Skrzynka odbiorcza" "inbox-title": "Skrzynka odbiorcza",
"tab-switcher-title": "Przełącznik kart"
}, },
"notes": { "notes": {
"new-note": "Nowa notatka", "new-note": "Nowa notatka",

View File

@ -81,66 +81,82 @@ interface ExportAsPdfOpts {
} }
electron.ipcMain.on("print-note", async (e, { notePath }: PrintOpts) => { electron.ipcMain.on("print-note", async (e, { notePath }: PrintOpts) => {
const { browserWindow, printReport } = await getBrowserWindowForPrinting(e, notePath, "printing"); try {
browserWindow.webContents.print({}, (success, failureReason) => { const { browserWindow, printReport } = await getBrowserWindowForPrinting(e, notePath, "printing");
if (!success && failureReason !== "Print job canceled") { browserWindow.webContents.print({}, (success, failureReason) => {
electron.dialog.showErrorBox(t("pdf.unable-to-print"), failureReason); if (!success && failureReason !== "Print job canceled") {
} electron.dialog.showErrorBox(t("pdf.unable-to-print"), failureReason);
e.sender.send("print-done", printReport); }
browserWindow.destroy(); e.sender.send("print-done", printReport);
}); browserWindow.destroy();
});
} catch (err) {
e.sender.send("print-done", {
type: "error",
message: err instanceof Error ? err.message : String(err),
stack: err instanceof Error ? err.stack : undefined
});
}
}); });
electron.ipcMain.on("export-as-pdf", async (e, { title, notePath, landscape, pageSize }: ExportAsPdfOpts) => { electron.ipcMain.on("export-as-pdf", async (e, { title, notePath, landscape, pageSize }: ExportAsPdfOpts) => {
const { browserWindow, printReport } = await getBrowserWindowForPrinting(e, notePath, "exporting_pdf");
async function print() {
const filePath = electron.dialog.showSaveDialogSync(browserWindow, {
defaultPath: formatDownloadTitle(title, "file", "application/pdf"),
filters: [
{
name: t("pdf.export_filter"),
extensions: ["pdf"]
}
]
});
if (!filePath) return;
let buffer: Buffer;
try {
buffer = await browserWindow.webContents.printToPDF({
landscape,
pageSize,
generateDocumentOutline: true,
generateTaggedPDF: true,
printBackground: true,
displayHeaderFooter: true,
headerTemplate: `<div></div>`,
footerTemplate: `
<div class="pageNumber" style="width: 100%; text-align: center; font-size: 10pt;">
</div>
`
});
} catch (_e) {
electron.dialog.showErrorBox(t("pdf.unable-to-export-title"), t("pdf.unable-to-export-message"));
return;
}
try {
await fs.writeFile(filePath, buffer);
} catch (_e) {
electron.dialog.showErrorBox(t("pdf.unable-to-export-title"), t("pdf.unable-to-save-message"));
return;
}
electron.shell.openPath(filePath);
}
try { try {
await print(); const { browserWindow, printReport } = await getBrowserWindowForPrinting(e, notePath, "exporting_pdf");
} finally {
e.sender.send("print-done", printReport); async function print() {
browserWindow.destroy(); const filePath = electron.dialog.showSaveDialogSync(browserWindow, {
defaultPath: formatDownloadTitle(title, "file", "application/pdf"),
filters: [
{
name: t("pdf.export_filter"),
extensions: ["pdf"]
}
]
});
if (!filePath) return;
let buffer: Buffer;
try {
buffer = await browserWindow.webContents.printToPDF({
landscape,
pageSize,
generateDocumentOutline: true,
generateTaggedPDF: true,
printBackground: true,
displayHeaderFooter: true,
headerTemplate: `<div></div>`,
footerTemplate: `
<div class="pageNumber" style="width: 100%; text-align: center; font-size: 10pt;">
</div>
`
});
} catch (_e) {
electron.dialog.showErrorBox(t("pdf.unable-to-export-title"), t("pdf.unable-to-export-message"));
return;
}
try {
await fs.writeFile(filePath, buffer);
} catch (_e) {
electron.dialog.showErrorBox(t("pdf.unable-to-export-title"), t("pdf.unable-to-save-message"));
return;
}
electron.shell.openPath(filePath);
}
try {
await print();
} finally {
e.sender.send("print-done", printReport);
browserWindow.destroy();
}
} catch (err) {
e.sender.send("print-done", {
type: "error",
message: err instanceof Error ? err.message : String(err),
stack: err instanceof Error ? err.stack : undefined
});
} }
}); });
@ -151,6 +167,7 @@ async function getBrowserWindowForPrinting(e: IpcMainEvent, notePath: string, ac
nodeIntegration: true, nodeIntegration: true,
contextIsolation: false, contextIsolation: false,
offscreen: true, offscreen: true,
devTools: false,
session: e.sender.session session: e.sender.session
}, },
}); });
@ -158,13 +175,78 @@ async function getBrowserWindowForPrinting(e: IpcMainEvent, notePath: string, ac
const progressCallback = (_e, progress: number) => e.sender.send("print-progress", { progress, action }); const progressCallback = (_e, progress: number) => e.sender.send("print-progress", { progress, action });
ipcMain.on("print-progress", progressCallback); ipcMain.on("print-progress", progressCallback);
await browserWindow.loadURL(`http://127.0.0.1:${port}/?print#${notePath}`); // Capture ALL console output (including errors) for debugging
const printReport = await browserWindow.webContents.executeJavaScript(` browserWindow.webContents.on("console-message", (e, message, line, sourceId) => {
new Promise(resolve => { if (e.level === "debug") return;
if (window._noteReady) return resolve(window._noteReady); if (e.level === "error") {
window.addEventListener("note-ready", (data) => resolve(data.detail)); log.error(`[Print Window ${sourceId}:${line}] ${message}`);
}); return;
`); }
log.info(`[Print Window ${sourceId}:${line}] ${message}`);
});
try {
await browserWindow.loadURL(`http://127.0.0.1:${port}/?print#${notePath}`);
} catch (err) {
log.error(`Failed to load print window: ${err}`);
ipcMain.off("print-progress", progressCallback);
throw err;
}
// Set up error tracking and logging in the renderer process
await browserWindow.webContents.executeJavaScript(`
(function() {
window._printWindowErrors = [];
window.addEventListener("error", (e) => {
const errorMsg = "Uncaught error: " + e.message + " at " + e.filename + ":" + e.lineno + ":" + e.colno;
console.error(errorMsg);
if (e.error?.stack) console.error(e.error.stack);
window._printWindowErrors.push({
type: 'error',
message: errorMsg,
stack: e.error?.stack
});
});
window.addEventListener("unhandledrejection", (e) => {
const errorMsg = "Unhandled rejection: " + String(e.reason);
console.error(errorMsg);
if (e.reason?.stack) console.error(e.reason.stack);
window._printWindowErrors.push({
type: 'rejection',
message: errorMsg,
stack: e.reason?.stack
});
});
})();
`).catch(err => log.error(`Failed to set up error handlers in print window: ${err}`));
let printReport;
try {
printReport = await browserWindow.webContents.executeJavaScript(`
new Promise((resolve, reject) => {
if (window._noteReady) return resolve(window._noteReady);
// Check for errors periodically
const errorChecker = setInterval(() => {
if (window._printWindowErrors && window._printWindowErrors.length > 0) {
clearInterval(errorChecker);
const errors = window._printWindowErrors.map(e => e.message).join('; ');
reject(new Error("Print window errors: " + errors));
}
}, 100);
window.addEventListener("note-ready", (data) => {
clearInterval(errorChecker);
resolve(data.detail);
});
});
`);
} catch (err) {
log.error(`Print window promise failed for ${notePath}: ${err}`);
ipcMain.off("print-progress", progressCallback);
throw err;
}
ipcMain.off("print-progress", progressCallback); ipcMain.off("print-progress", progressCallback);
return { browserWindow, printReport }; return { browserWindow, printReport };
} }

View File

@ -13,10 +13,10 @@
"postinstall": "wxt prepare" "postinstall": "wxt prepare"
}, },
"keywords": [], "keywords": [],
"packageManager": "pnpm@10.28.2", "packageManager": "pnpm@10.29.2",
"devDependencies": { "devDependencies": {
"@wxt-dev/auto-icons": "1.1.0", "@wxt-dev/auto-icons": "1.1.0",
"wxt": "0.20.13" "wxt": "0.20.14"
}, },
"dependencies": { "dependencies": {
"cash-dom": "8.1.5" "cash-dom": "8.1.5"

View File

@ -9,7 +9,7 @@
"preview": "pnpm build && vite preview" "preview": "pnpm build && vite preview"
}, },
"dependencies": { "dependencies": {
"i18next": "25.8.0", "i18next": "25.8.4",
"i18next-http-backend": "3.0.2", "i18next-http-backend": "3.0.2",
"preact": "10.28.3", "preact": "10.28.3",
"preact-iso": "2.11.1", "preact-iso": "2.11.1",

View File

@ -27,6 +27,10 @@ export default function Resources() {
<Section className="icon-packs fill"> <Section className="icon-packs fill">
<h2>{t("resources.icon_packs")}</h2> <h2>{t("resources.icon_packs")}</h2>
<div>
<p>Note: This feature is still in preview and is available only in the <a href="https://docs.triliumnotes.org/user-guide/advanced-usage/nightly-release" target="_blank" rel="noopener noreferrer">nightly release</a>.</p>
</div>
<p> <p>
<Trans <Trans
i18nKey="resources.icon_packs_intro" i18nKey="resources.icon_packs_intro"

View File

@ -154,7 +154,8 @@
"header": { "header": {
"get-started": "Loslegen", "get-started": "Loslegen",
"documentation": "Dokumentation", "documentation": "Dokumentation",
"support-us": "Unterstützt uns" "support-us": "Unterstützt uns",
"resources": "Ressourcen"
}, },
"footer": { "footer": {
"copyright_and_the": " und die ", "copyright_and_the": " und die ",
@ -196,5 +197,12 @@
"download_exe": "Installationsdatei herunterladen (.exe)", "download_exe": "Installationsdatei herunterladen (.exe)",
"download_zip": "Portable (.zip)", "download_zip": "Portable (.zip)",
"download_scoop": "Scoop" "download_scoop": "Scoop"
},
"resources": {
"icon_packs": "Symbolpakete",
"download": "Herunterladen",
"website": "Webseite",
"title": "Ressourcen",
"icon_packs_intro": "Erweitere die Auswahl an verfügbaren Symbolen für deine Notizen, indem du ein Symbolpaket verwendest. Für weitere Informationen zu Symbolpaketen, schaue in die <DocumentationLink>offizielle Dokumentation</DocumentationLink>."
} }
} }

View File

@ -195,6 +195,14 @@
"header": { "header": {
"get-started": "Comencemos", "get-started": "Comencemos",
"documentation": "Documentación", "documentation": "Documentación",
"support-us": "Apóyanos" "support-us": "Apóyanos",
"resources": "Recursos"
},
"resources": {
"title": "Recursos",
"icon_packs": "Paquetes de iconos",
"icon_packs_intro": "Ampliar la selección de iconos disponibles para sus notas utilizando un paquete de iconos. Para más información acerca de paquetes de icono, vea la <DocumentationLink>documentación oficial</DocumentationLink>.",
"download": "Descargar",
"website": "Sitio web"
} }
} }

View File

@ -112,7 +112,8 @@
"header": { "header": {
"get-started": "Tosaigh", "get-started": "Tosaigh",
"documentation": "Doiciméadú", "documentation": "Doiciméadú",
"support-us": "Tacaigh linn" "support-us": "Tacaigh linn",
"resources": "Acmhainní"
}, },
"footer": { "footer": {
"copyright_and_the": " agus an ", "copyright_and_the": " agus an ",
@ -196,5 +197,12 @@
"description": "Nótaí Trilium atá á n-óstáil ar PikaPods, seirbhís íoctha le haghaidh rochtana agus bainistíochta éasca. Níl baint dhíreach aige le foireann Trilium.", "description": "Nótaí Trilium atá á n-óstáil ar PikaPods, seirbhís íoctha le haghaidh rochtana agus bainistíochta éasca. Níl baint dhíreach aige le foireann Trilium.",
"download_pikapod": "Socraigh ar PikaPods", "download_pikapod": "Socraigh ar PikaPods",
"download_triliumcc": "Nó féach ar trilium.cc" "download_triliumcc": "Nó féach ar trilium.cc"
},
"resources": {
"title": "Acmhainní",
"icon_packs": "Pacáistí deilbhín",
"icon_packs_intro": "Leathnaigh rogha na ndeilbhíní atá ar fáil le do nótaí trí phacáiste deilbhíní a úsáid. Le haghaidh tuilleadh eolais faoi phacáistí deilbhíní, féach ar an <DocumentationLink>dhoiciméadú oifigiúil</DocumentationLink>.",
"download": "Íoslódáil",
"website": "Suíomh Gréasáin"
} }
} }

View File

@ -195,6 +195,14 @@
"header": { "header": {
"get-started": "はじめる", "get-started": "はじめる",
"documentation": "ドキュメント", "documentation": "ドキュメント",
"support-us": "サポート" "support-us": "サポート",
"resources": "リソース"
},
"resources": {
"title": "リソース",
"icon_packs": "アイコンパック",
"icon_packs_intro": "アイコンパックを使用すると、ノートで使用できるアイコンの選択肢が広がります。アイコンパックの詳細については、<DocumentationLink>公式ドキュメント</DocumentationLink>をご覧ください。",
"download": "ダウンロード",
"website": "Webサイト"
} }
} }

View File

@ -195,6 +195,14 @@
"header": { "header": {
"get-started": "Start", "get-started": "Start",
"documentation": "Dokumentacja", "documentation": "Dokumentacja",
"support-us": "Wesprzyj nas" "support-us": "Wesprzyj nas",
"resources": "Zasoby"
},
"resources": {
"title": "Zasoby",
"icon_packs": "Paczki ikon",
"icon_packs_intro": "Rozszerz wybór dostępnych ikon dla swoich notatek, korzystając z pakietu ikon. Więcej informacji na temat pakietów ikon znajdziesz w <DocumentationLink> dokumentacji </DocumentationLink>.",
"download": "Pobieranie",
"website": "Strona internetowa"
} }
} }

View File

@ -131,7 +131,8 @@
"header": { "header": {
"get-started": "开始使用", "get-started": "开始使用",
"documentation": "文档", "documentation": "文档",
"support-us": "支持我们" "support-us": "支持我们",
"resources": "资源"
}, },
"footer": { "footer": {
"copyright_and_the": " 以及 ", "copyright_and_the": " 以及 ",
@ -196,5 +197,12 @@
"download_tar_x64": "64 位 (.tar.xz)", "download_tar_x64": "64 位 (.tar.xz)",
"download_tar_arm64": "ARM (.tar.xz)", "download_tar_arm64": "ARM (.tar.xz)",
"download_nixos": "NixOS 模块" "download_nixos": "NixOS 模块"
},
"resources": {
"icon_packs": "图标包",
"icon_packs_intro": "使用图标包可以扩展笔记中可用的图标选择。有关图标包的更多信息,请参阅<DocumentationLink>官方文档</DocumentationLink>。",
"download": "下载",
"website": "网站",
"title": "资源"
} }
} }

View File

@ -8,7 +8,12 @@ export default defineConfig({
prerender: { prerender: {
enabled: true, enabled: true,
renderTarget: '#app', renderTarget: '#app',
additionalPrerenderRoutes: ['/404'], additionalPrerenderRoutes: [
'/404',
'/get-started',
'/resources',
'/support-us'
],
previewMiddlewareEnabled: true, previewMiddlewareEnabled: true,
previewMiddlewareFallback: '/404', previewMiddlewareFallback: '/404',
}, },

21
docs/README-pl.md vendored
View File

@ -35,7 +35,7 @@ wiedzy.
<img src="./app.png" alt="Trilium Screenshot" width="1000"> <img src="./app.png" alt="Trilium Screenshot" width="1000">
## ⏬ Pobierz ## ⏬ Pobieranie
- [Ostatnie wydanie](https://github.com/TriliumNext/Trilium/releases/latest) - [Ostatnie wydanie](https://github.com/TriliumNext/Trilium/releases/latest)
stabilna wersja, polecane dla większości użytkowników. stabilna wersja, polecane dla większości użytkowników.
- [Nightly build](https://github.com/TriliumNext/Trilium/releases/tag/nightly) - - [Nightly build](https://github.com/TriliumNext/Trilium/releases/tag/nightly) -
@ -48,7 +48,7 @@ wiedzy.
[docs.triliumnotes.org](https://docs.triliumnotes.org/)** [docs.triliumnotes.org](https://docs.triliumnotes.org/)**
Nasza dokumentacja jest dostępna w wielu formatach: Nasza dokumentacja jest dostępna w wielu formatach:
- **Dokumentacja Online**: Pełna dokumentacja dostępna pod - **Dokumentacja Online**: Pełna dokumentacja dostępna na
[docs.triliumnotes.org](https://docs.triliumnotes.org/) [docs.triliumnotes.org](https://docs.triliumnotes.org/)
- **Pomoc w aplikacji**: Naciśnij `F1` w Trilium, aby uzyskać dostęp do tej - **Pomoc w aplikacji**: Naciśnij `F1` w Trilium, aby uzyskać dostęp do tej
samej dokumentacji bezpośrednio w aplikacji samej dokumentacji bezpośrednio w aplikacji
@ -64,15 +64,15 @@ Nasza dokumentacja jest dostępna w wielu formatach:
TriliumNext](https://docs.triliumnotes.org/user-guide/setup/upgrading) TriliumNext](https://docs.triliumnotes.org/user-guide/setup/upgrading)
- [Podstawowe koncepcje i - [Podstawowe koncepcje i
funkcjonalność](https://docs.triliumnotes.org/user-guide/concepts/notes) funkcjonalność](https://docs.triliumnotes.org/user-guide/concepts/notes)
- [Wzorce Bazy Wiedzy - [Wzorce osobistej Bazy
Osobistej](https://docs.triliumnotes.org/user-guide/misc/patterns-of-personal-knowledge) Wiedzy](https://docs.triliumnotes.org/user-guide/misc/patterns-of-personal-knowledge)
## 🎁 Funkcjonalność ## 🎁 Funkcjonalność
* Notatki mogą być zorganizowane w drzewa dowolnej głębokości. Pojedyncza * Notatki mogą być zorganizowane w drzewa dowolnej głębokości. Pojedyncza
notatka może być umieszczona w wielu miejscach w drzewie (patrz notatka może być umieszczona w wielu miejscach w drzewie (patrz
[klonowanie](https://docs.triliumnotes.org/user-guide/concepts/notes/cloning)) [klonowanie](https://docs.triliumnotes.org/user-guide/concepts/notes/cloning))
* Bogaty edytor notatek WYSIWYG, zawierający np. tabele, obrazy i * Bogato wyposażony edytor notatek WYSIWYG, zawierający np. tabele, obrazy i
[matematykę](https://docs.triliumnotes.org/user-guide/note-types/text) z [matematykę](https://docs.triliumnotes.org/user-guide/note-types/text) z
[autoformat](https://docs.triliumnotes.org/user-guide/note-types/text/markdown-formatting) [autoformat](https://docs.triliumnotes.org/user-guide/note-types/text/markdown-formatting)
Markdown Markdown
@ -83,7 +83,7 @@ Nasza dokumentacja jest dostępna w wielu formatach:
notatkach](https://docs.triliumnotes.org/user-guide/concepts/navigation/note-navigation), notatkach](https://docs.triliumnotes.org/user-guide/concepts/navigation/note-navigation),
wyszukiwanie po pełnym tekście i[wyróżnienie wyszukiwanie po pełnym tekście i[wyróżnienie
notatki](https://docs.triliumnotes.org/user-guide/concepts/navigation/note-hoisting) notatki](https://docs.triliumnotes.org/user-guide/concepts/navigation/note-hoisting)
* Płynne [aktualizowanie wersji * Bezproblemowe [aktualizowanie wersji
notatki](https://docs.triliumnotes.org/user-guide/concepts/notes/note-revisions) notatki](https://docs.triliumnotes.org/user-guide/concepts/notes/note-revisions)
* [Atrybuty](https://docs.triliumnotes.org/user-guide/advanced-usage/attributes) * [Atrybuty](https://docs.triliumnotes.org/user-guide/advanced-usage/attributes)
notatki mogą być użyte dla jej organizacji, wyszukiwania i użycia notatki mogą być użyte dla jej organizacji, wyszukiwania i użycia
@ -113,7 +113,7 @@ Nasza dokumentacja jest dostępna w wielu formatach:
* [Mapy * [Mapy
geograficzne](https://docs.triliumnotes.org/user-guide/collections/geomap) z geograficzne](https://docs.triliumnotes.org/user-guide/collections/geomap) z
oznaczeniami lokalizacji i trasami GPX oznaczeniami lokalizacji i trasami GPX
* [Skryptowanie](https://docs.triliumnotes.org/user-guide/scripts) patrz * [Skrypty](https://docs.triliumnotes.org/user-guide/scripts) patrz
[zaawansowane [zaawansowane
przykłady](https://docs.triliumnotes.org/user-guide/advanced-usage/advanced-showcases) przykłady](https://docs.triliumnotes.org/user-guide/advanced-usage/advanced-showcases)
* [REST API](https://docs.triliumnotes.org/user-guide/advanced-usage/etapi) do * [REST API](https://docs.triliumnotes.org/user-guide/advanced-usage/etapi) do
@ -209,7 +209,7 @@ interfejsu webowego, niemal identycznego z aplikacją desktopową.
Aktualnie wspierane i testowane są tylko najnowsze wersje Chrome i Firefox. Aktualnie wspierane i testowane są tylko najnowsze wersje Chrome i Firefox.
### Mobile ### Urządzenia mobilne
Aby korzystać z TriliumNext na urządzeniu mobilnym, możesz użyć mobilnej Aby korzystać z TriliumNext na urządzeniu mobilnym, możesz użyć mobilnej
przeglądarki internetowej, aby uzyskać dostęp do mobilnego interfejsu instalacji przeglądarki internetowej, aby uzyskać dostęp do mobilnego interfejsu instalacji
@ -295,9 +295,8 @@ W razie dodatkowych pytań możesz skorzystać z linków podanych w sekcji
implementację aplikacji. implementację aplikacji.
* [Sarah Hussein](https://github.com/Sarah-Hussein) za zaprojektowanie ikony * [Sarah Hussein](https://github.com/Sarah-Hussein) za zaprojektowanie ikony
aplikacji. aplikacji.
* [nriver](https://github.com/nriver) za prace nad internacjonalizacją. * [nriver](https://github.com/nriver) za prace nad wersjami językowymi.
* [Thomas Frei](https://github.com/thfrei) za pierwotne prace nad Płótnem ( * [Thomas Frei](https://github.com/thfrei) za pierwotne prace nad Canvas.
Canvas ).
* [antoniotejada](https://github.com/nriver) za pierwotny widżet podświetlania * [antoniotejada](https://github.com/nriver) za pierwotny widżet podświetlania
składni. składni.
* [Dosu](https://dosu.dev/) za stworzenie rozwiązania umożliwiającego * [Dosu](https://dosu.dev/) za stworzenie rozwiązania umożliwiającego

View File

@ -1,4 +1,7 @@
# Icon Packs # Icon Packs
> [!IMPORTANT]
> This feature is still in preview and is available only in the [nightly release](https://docs.triliumnotes.org/user-guide/advanced-usage/nightly-release).
<figure class="image image-style-align-right image_resized" style="width:45.14%;"><img style="aspect-ratio:854/649;" src="Icon Packs_image.png" width="854" height="649"></figure> <figure class="image image-style-align-right image_resized" style="width:45.14%;"><img style="aspect-ratio:854/649;" src="Icon Packs_image.png" width="854" height="649"></figure>
By default, Trilium comes with a set of icons called Boxicons v2. Since v0.102.0, custom icon packs allow a wider selection of icons for notes. By default, Trilium comes with a set of icons called Boxicons v2. Since v0.102.0, custom icon packs allow a wider selection of icons for notes.

View File

@ -46,7 +46,7 @@
"devDependencies": { "devDependencies": {
"@electron/rebuild": "4.0.3", "@electron/rebuild": "4.0.3",
"@fast-csv/parse": "5.0.5", "@fast-csv/parse": "5.0.5",
"@playwright/test": "1.58.1", "@playwright/test": "1.58.2",
"@triliumnext/server": "workspace:*", "@triliumnext/server": "workspace:*",
"@types/express": "5.0.6", "@types/express": "5.0.6",
"@types/js-yaml": "4.0.9", "@types/js-yaml": "4.0.9",
@ -57,7 +57,7 @@
"chalk": "5.6.2", "chalk": "5.6.2",
"cross-env": "10.1.0", "cross-env": "10.1.0",
"dpdm": "4.0.1", "dpdm": "4.0.1",
"esbuild": "0.27.2", "esbuild": "0.27.3",
"eslint": "10.0.0", "eslint": "10.0.0",
"eslint-config-preact": "2.0.0", "eslint-config-preact": "2.0.0",
"eslint-config-prettier": "10.1.8", "eslint-config-prettier": "10.1.8",
@ -69,11 +69,11 @@
"js-yaml": "4.1.1", "js-yaml": "4.1.1",
"jsonc-eslint-parser": "2.4.2", "jsonc-eslint-parser": "2.4.2",
"react-refresh": "0.18.0", "react-refresh": "0.18.0",
"rollup-plugin-webpack-stats": "2.1.10", "rollup-plugin-webpack-stats": "2.1.11",
"tslib": "2.8.1", "tslib": "2.8.1",
"tsx": "4.21.0", "tsx": "4.21.0",
"typescript": "5.9.3", "typescript": "5.9.3",
"typescript-eslint": "8.54.0", "typescript-eslint": "8.55.0",
"upath": "2.0.1", "upath": "2.0.1",
"vite": "7.3.1", "vite": "7.3.1",
"vite-plugin-dts": "4.5.4", "vite-plugin-dts": "4.5.4",
@ -93,7 +93,7 @@
"url": "https://github.com/TriliumNext/Trilium/issues" "url": "https://github.com/TriliumNext/Trilium/issues"
}, },
"homepage": "https://triliumnotes.org", "homepage": "https://triliumnotes.org",
"packageManager": "pnpm@10.28.2", "packageManager": "pnpm@10.29.2",
"pnpm": { "pnpm": {
"patchedDependencies": { "patchedDependencies": {
"@ckeditor/ckeditor5-mention": "patches/@ckeditor__ckeditor5-mention.patch", "@ckeditor/ckeditor5-mention": "patches/@ckeditor__ckeditor5-mention.patch",

View File

@ -21,11 +21,11 @@
"ckeditor5-metadata.json" "ckeditor5-metadata.json"
], ],
"devDependencies": { "devDependencies": {
"@ckeditor/ckeditor5-dev-build-tools": "54.3.2", "@ckeditor/ckeditor5-dev-build-tools": "54.3.3",
"@ckeditor/ckeditor5-inspector": ">=4.1.0", "@ckeditor/ckeditor5-inspector": ">=4.1.0",
"@ckeditor/ckeditor5-package-tools": "5.0.1", "@ckeditor/ckeditor5-package-tools": "5.0.1",
"@typescript-eslint/eslint-plugin": "8.54.0", "@typescript-eslint/eslint-plugin": "8.55.0",
"@typescript-eslint/parser": "8.54.0", "@typescript-eslint/parser": "8.55.0",
"@vitest/browser": "4.0.18", "@vitest/browser": "4.0.18",
"@vitest/coverage-istanbul": "4.0.18", "@vitest/coverage-istanbul": "4.0.18",
"ckeditor5": "47.4.0", "ckeditor5": "47.4.0",
@ -33,13 +33,13 @@
"eslint-config-ckeditor5": ">=9.1.0", "eslint-config-ckeditor5": ">=9.1.0",
"http-server": "14.1.1", "http-server": "14.1.1",
"lint-staged": "16.2.7", "lint-staged": "16.2.7",
"stylelint": "17.1.0", "stylelint": "17.2.0",
"stylelint-config-ckeditor5": ">=9.1.0", "stylelint-config-ckeditor5": ">=9.1.0",
"ts-node": "10.9.2", "ts-node": "10.9.2",
"typescript": "5.9.3", "typescript": "5.9.3",
"vite-plugin-svgo": "2.0.0", "vite-plugin-svgo": "2.0.0",
"vitest": "4.0.18", "vitest": "4.0.18",
"webdriverio": "9.23.3" "webdriverio": "9.24.0"
}, },
"peerDependencies": { "peerDependencies": {
"ckeditor5": "47.4.0" "ckeditor5": "47.4.0"

View File

@ -22,11 +22,11 @@
"ckeditor5-metadata.json" "ckeditor5-metadata.json"
], ],
"devDependencies": { "devDependencies": {
"@ckeditor/ckeditor5-dev-build-tools": "54.3.2", "@ckeditor/ckeditor5-dev-build-tools": "54.3.3",
"@ckeditor/ckeditor5-inspector": ">=4.1.0", "@ckeditor/ckeditor5-inspector": ">=4.1.0",
"@ckeditor/ckeditor5-package-tools": "5.0.1", "@ckeditor/ckeditor5-package-tools": "5.0.1",
"@typescript-eslint/eslint-plugin": "8.54.0", "@typescript-eslint/eslint-plugin": "8.55.0",
"@typescript-eslint/parser": "8.54.0", "@typescript-eslint/parser": "8.55.0",
"@vitest/browser": "4.0.18", "@vitest/browser": "4.0.18",
"@vitest/coverage-istanbul": "4.0.18", "@vitest/coverage-istanbul": "4.0.18",
"ckeditor5": "47.4.0", "ckeditor5": "47.4.0",
@ -34,13 +34,13 @@
"eslint-config-ckeditor5": ">=9.1.0", "eslint-config-ckeditor5": ">=9.1.0",
"http-server": "14.1.1", "http-server": "14.1.1",
"lint-staged": "16.2.7", "lint-staged": "16.2.7",
"stylelint": "17.1.0", "stylelint": "17.2.0",
"stylelint-config-ckeditor5": ">=9.1.0", "stylelint-config-ckeditor5": ">=9.1.0",
"ts-node": "10.9.2", "ts-node": "10.9.2",
"typescript": "5.9.3", "typescript": "5.9.3",
"vite-plugin-svgo": "2.0.0", "vite-plugin-svgo": "2.0.0",
"vitest": "4.0.18", "vitest": "4.0.18",
"webdriverio": "9.23.3" "webdriverio": "9.24.0"
}, },
"peerDependencies": { "peerDependencies": {
"ckeditor5": "47.4.0" "ckeditor5": "47.4.0"

View File

@ -24,11 +24,11 @@
"ckeditor5-metadata.json" "ckeditor5-metadata.json"
], ],
"devDependencies": { "devDependencies": {
"@ckeditor/ckeditor5-dev-build-tools": "54.3.2", "@ckeditor/ckeditor5-dev-build-tools": "54.3.3",
"@ckeditor/ckeditor5-inspector": ">=4.1.0", "@ckeditor/ckeditor5-inspector": ">=4.1.0",
"@ckeditor/ckeditor5-package-tools": "5.0.1", "@ckeditor/ckeditor5-package-tools": "5.0.1",
"@typescript-eslint/eslint-plugin": "8.54.0", "@typescript-eslint/eslint-plugin": "8.55.0",
"@typescript-eslint/parser": "8.54.0", "@typescript-eslint/parser": "8.55.0",
"@vitest/browser": "4.0.18", "@vitest/browser": "4.0.18",
"@vitest/coverage-istanbul": "4.0.18", "@vitest/coverage-istanbul": "4.0.18",
"ckeditor5": "47.4.0", "ckeditor5": "47.4.0",
@ -36,13 +36,13 @@
"eslint-config-ckeditor5": ">=9.1.0", "eslint-config-ckeditor5": ">=9.1.0",
"http-server": "14.1.1", "http-server": "14.1.1",
"lint-staged": "16.2.7", "lint-staged": "16.2.7",
"stylelint": "17.1.0", "stylelint": "17.2.0",
"stylelint-config-ckeditor5": ">=9.1.0", "stylelint-config-ckeditor5": ">=9.1.0",
"ts-node": "10.9.2", "ts-node": "10.9.2",
"typescript": "5.9.3", "typescript": "5.9.3",
"vite-plugin-svgo": "2.0.0", "vite-plugin-svgo": "2.0.0",
"vitest": "4.0.18", "vitest": "4.0.18",
"webdriverio": "9.23.3" "webdriverio": "9.24.0"
}, },
"peerDependencies": { "peerDependencies": {
"ckeditor5": "47.4.0" "ckeditor5": "47.4.0"

View File

@ -24,11 +24,11 @@
"ckeditor5-metadata.json" "ckeditor5-metadata.json"
], ],
"devDependencies": { "devDependencies": {
"@ckeditor/ckeditor5-dev-build-tools": "54.3.2", "@ckeditor/ckeditor5-dev-build-tools": "54.3.3",
"@ckeditor/ckeditor5-inspector": ">=4.1.0", "@ckeditor/ckeditor5-inspector": ">=4.1.0",
"@ckeditor/ckeditor5-package-tools": "5.0.1", "@ckeditor/ckeditor5-package-tools": "5.0.1",
"@typescript-eslint/eslint-plugin": "8.54.0", "@typescript-eslint/eslint-plugin": "8.55.0",
"@typescript-eslint/parser": "8.54.0", "@typescript-eslint/parser": "8.55.0",
"@vitest/browser": "4.0.18", "@vitest/browser": "4.0.18",
"@vitest/coverage-istanbul": "4.0.18", "@vitest/coverage-istanbul": "4.0.18",
"ckeditor5": "47.4.0", "ckeditor5": "47.4.0",
@ -36,13 +36,13 @@
"eslint-config-ckeditor5": ">=9.1.0", "eslint-config-ckeditor5": ">=9.1.0",
"http-server": "14.1.1", "http-server": "14.1.1",
"lint-staged": "16.2.7", "lint-staged": "16.2.7",
"stylelint": "17.1.0", "stylelint": "17.2.0",
"stylelint-config-ckeditor5": ">=9.1.0", "stylelint-config-ckeditor5": ">=9.1.0",
"ts-node": "10.9.2", "ts-node": "10.9.2",
"typescript": "5.9.3", "typescript": "5.9.3",
"vite-plugin-svgo": "2.0.0", "vite-plugin-svgo": "2.0.0",
"vitest": "4.0.18", "vitest": "4.0.18",
"webdriverio": "9.23.3" "webdriverio": "9.24.0"
}, },
"peerDependencies": { "peerDependencies": {
"ckeditor5": "47.4.0" "ckeditor5": "47.4.0"

View File

@ -24,11 +24,11 @@
"ckeditor5-metadata.json" "ckeditor5-metadata.json"
], ],
"devDependencies": { "devDependencies": {
"@ckeditor/ckeditor5-dev-build-tools": "54.3.2", "@ckeditor/ckeditor5-dev-build-tools": "54.3.3",
"@ckeditor/ckeditor5-inspector": ">=4.1.0", "@ckeditor/ckeditor5-inspector": ">=4.1.0",
"@ckeditor/ckeditor5-package-tools": "5.0.1", "@ckeditor/ckeditor5-package-tools": "5.0.1",
"@typescript-eslint/eslint-plugin": "8.54.0", "@typescript-eslint/eslint-plugin": "8.55.0",
"@typescript-eslint/parser": "8.54.0", "@typescript-eslint/parser": "8.55.0",
"@vitest/browser": "4.0.18", "@vitest/browser": "4.0.18",
"@vitest/coverage-istanbul": "4.0.18", "@vitest/coverage-istanbul": "4.0.18",
"ckeditor5": "47.4.0", "ckeditor5": "47.4.0",
@ -36,13 +36,13 @@
"eslint-config-ckeditor5": ">=9.1.0", "eslint-config-ckeditor5": ">=9.1.0",
"http-server": "14.1.1", "http-server": "14.1.1",
"lint-staged": "16.2.7", "lint-staged": "16.2.7",
"stylelint": "17.1.0", "stylelint": "17.2.0",
"stylelint-config-ckeditor5": ">=9.1.0", "stylelint-config-ckeditor5": ">=9.1.0",
"ts-node": "10.9.2", "ts-node": "10.9.2",
"typescript": "5.9.3", "typescript": "5.9.3",
"vite-plugin-svgo": "2.0.0", "vite-plugin-svgo": "2.0.0",
"vitest": "4.0.18", "vitest": "4.0.18",
"webdriverio": "9.23.3" "webdriverio": "9.24.0"
}, },
"peerDependencies": { "peerDependencies": {
"ckeditor5": "47.4.0" "ckeditor5": "47.4.0"

View File

@ -16,7 +16,7 @@
"ckeditor5-premium-features": "47.4.0" "ckeditor5-premium-features": "47.4.0"
}, },
"devDependencies": { "devDependencies": {
"@smithy/middleware-retry": "4.4.30", "@smithy/middleware-retry": "4.4.31",
"@types/jquery": "3.5.33" "@types/jquery": "3.5.33"
} }
} }

View File

@ -5,7 +5,7 @@
"type": "module", "type": "module",
"main": "./src/index.ts", "main": "./src/index.ts",
"dependencies": { "dependencies": {
"@codemirror/commands": "6.10.1", "@codemirror/commands": "6.10.2",
"@codemirror/lang-css": "6.3.1", "@codemirror/lang-css": "6.3.1",
"@codemirror/lang-html": "6.4.11", "@codemirror/lang-html": "6.4.11",
"@codemirror/lang-javascript": "6.2.4", "@codemirror/lang-javascript": "6.2.4",
@ -16,7 +16,7 @@
"@codemirror/lang-xml": "6.1.0", "@codemirror/lang-xml": "6.1.0",
"@codemirror/legacy-modes": "6.5.2", "@codemirror/legacy-modes": "6.5.2",
"@codemirror/search": "6.6.0", "@codemirror/search": "6.6.0",
"@codemirror/view": "6.39.12", "@codemirror/view": "6.39.13",
"@fsegurai/codemirror-theme-abcdef": "6.2.3", "@fsegurai/codemirror-theme-abcdef": "6.2.3",
"@fsegurai/codemirror-theme-abyss": "6.2.3", "@fsegurai/codemirror-theme-abyss": "6.2.3",
"@fsegurai/codemirror-theme-android-studio": "6.2.3", "@fsegurai/codemirror-theme-android-studio": "6.2.3",
@ -50,6 +50,6 @@
"codemirror-lang-elixir": "4.0.0", "codemirror-lang-elixir": "4.0.0",
"codemirror-lang-hcl": "0.1.0", "codemirror-lang-hcl": "0.1.0",
"codemirror-lang-mermaid": "0.5.0", "codemirror-lang-mermaid": "0.5.0",
"eslint-linter-browserify": "9.39.2" "eslint-linter-browserify": "10.0.0"
} }
} }

View File

@ -31,10 +31,10 @@
"devDependencies": { "devDependencies": {
"@digitak/esrun": "3.2.26", "@digitak/esrun": "3.2.26",
"@triliumnext/ckeditor5": "workspace:*", "@triliumnext/ckeditor5": "workspace:*",
"@typescript-eslint/eslint-plugin": "8.54.0", "@typescript-eslint/eslint-plugin": "8.55.0",
"@typescript-eslint/parser": "8.54.0", "@typescript-eslint/parser": "8.55.0",
"dotenv": "17.2.3", "dotenv": "17.2.3",
"esbuild": "0.27.2", "esbuild": "0.27.3",
"eslint": "10.0.0", "eslint": "10.0.0",
"highlight.js": "11.11.1", "highlight.js": "11.11.1",
"typescript": "5.9.3" "typescript": "5.9.3"

1645
pnpm-lock.yaml generated

File diff suppressed because it is too large Load Diff