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

View File

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

View File

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

View File

@ -800,3 +800,18 @@ li.dropdown-item a.dropdown-item-button:focus-visible {
background: var(--hover-item-background-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;
}
/*
* 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
*/
@ -794,3 +810,35 @@ input[type="range"] {
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;
}
.options-section .alert {
margin-bottom: 8px;
background: var(--alert-bar-background) !important;
border-radius: 8px;
font-size: .85em;
}
nav.options-section-tabs {
min-width: var(--options-card-min-width);
max-width: var(--options-card-max-width);

View File

@ -1,6 +1,6 @@
{
"about": {
"title": "Über Trilium Notizen",
"title": "Über Trilium Notes",
"homepage": "Startseite:",
"app_version": "App-Version:",
"db_version": "DB-Version:",
@ -662,7 +662,8 @@
"show-cheatsheet": "Cheatsheet anzeigen",
"toggle-zen-mode": "Zen Modus",
"new-version-available": "Neues Update verfügbar",
"download-update": "Version {{latestVersion}} herunterladen"
"download-update": "Version {{latestVersion}} herunterladen",
"search_notes": "Notizen durchsuchen"
},
"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>",
@ -758,7 +759,8 @@
"error_cannot_get_branch_id": "BranchId für notePath „{{notePath}}“ kann nicht abgerufen werden",
"error_unrecognized_command": "Unbekannter Befehl {{command}}",
"note_revisions": "Notiz Revisionen",
"backlinks": "Rücklinks"
"backlinks": "Rücklinks",
"content_language_switcher": "Inhaltssprache: {{language}}"
},
"note_icon": {
"change_note_icon": "Notiz-Icon ändern",
@ -910,7 +912,8 @@
"unknown_search_option": "Unbekannte Suchoption {{searchOptionName}}",
"search_note_saved": "Suchnotiz wurde in {{-notePathTitle}} gespeichert",
"actions_executed": "Aktionen wurden ausgeführt.",
"view_options": "Optionen anzeigen:"
"view_options": "Optionen anzeigen:",
"option": "Option"
},
"similar_notes": {
"title": "Ähnliche Notizen",
@ -1503,6 +1506,7 @@
"geo-map": "Geo-Karte",
"beta-feature": "Beta",
"book": "Sammlung",
"ai-chat": "KI Chat",
"task-list": "Aufgabenliste",
"new-feature": "Neu",
"collections": "Sammlungen"
@ -2133,5 +2137,8 @@
"title_one": "{{count}} Tab",
"title_other": "{{count}} Tabs",
"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_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": "Web View",
"embed_websites": "Note of type Web View allows you to embed websites into Trilium.",
"create_label": "To start, please create a label with a URL address you want to embed, e.g. #webViewSrc=\"https://www.google.com\""
"web_view_setup": {
"title": "Create a live view of a webpage directly into Trilium",
"url_placeholder": "Enter or paste the website address, for example https://triliumnotes.org",
"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": {
"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?",
"geo-map": "Geo Map",
"beta-feature": "Beta",
"ai-chat": "AI Chat",
"task-list": "Task List",
"new-feature": "New",
"collections": "Collections"
@ -1651,6 +1654,8 @@
"printing": "Printing in progress...",
"printing_pdf": "Exporting to PDF in progress...",
"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_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",

View File

@ -662,7 +662,8 @@
"show-cheatsheet": "Mostrar hoja de trucos",
"toggle-zen-mode": "Modo Zen",
"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": {
"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_unrecognized_command": "Comando no reconocido {{command}}",
"note_revisions": "Revisiones de notas",
"backlinks": "Vínculos de retroceso"
"backlinks": "Vínculos de retroceso",
"content_language_switcher": "Idioma de contenido: {{language}}"
},
"note_icon": {
"change_note_icon": "Cambiar icono de nota",
@ -915,7 +917,8 @@
"unknown_search_option": "Opción de búsqueda desconocida {{searchOptionName}}",
"search_note_saved": "La nota de búsqueda se ha guardado en {{- notePathTitle}}",
"actions_executed": "Las acciones han sido ejecutadas.",
"view_options": "Ver opciones:"
"view_options": "Ver opciones:",
"option": "opción"
},
"similar_notes": {
"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?",
"geo-map": "Mapa Geo",
"beta-feature": "Beta",
"ai-chat": "Chat de IA",
"task-list": "Lista de tareas",
"book": "Colección",
"new-feature": "Nuevo",
@ -2148,5 +2152,8 @@
"title_many": "{{count}} pestañas",
"title_other": "{{count}} pestañas",
"more_options": "Más opciones"
},
"bookmark_buttons": {
"bookmarks": "Marcadores"
}
}

View File

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

View File

@ -21,7 +21,7 @@
},
"bundle-error": {
"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": {
"title": "Nie udało się pobrać listy widżetów z serwera"
@ -29,8 +29,9 @@
"widget-render-error": {
"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}}”.",
"open-script-note": "Otwórz notatkę ze skryptem"
"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",
"scripting-error": "Błąd skryptu użytkownika: {{title}}"
},
"add_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_first_level": "Rozwiń bezpośrednie elementy podrzędne",
"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": {
"move-to": "Przenieś do",
@ -240,7 +242,7 @@
"background_effects_title": "Efekty tła są teraz stabilne",
"dismiss": "Odrzuć",
"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_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"
@ -520,7 +522,8 @@
"action": "akcja",
"search_button": "Szukaj",
"search_execute": "Szukaj i wykonaj akcje",
"view_options": "Ustawienia widoku:"
"view_options": "Ustawienia widoku:",
"option": "opcja"
},
"similar_notes": {
"title": "Podobne notatki",
@ -602,8 +605,8 @@
"desktop-application": "Aplikacja desktopowa",
"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.",
"background-effects": "Włącz efekty tła (tylko Windows 11)",
"background-effects-description": "Efekt Mica dodaje rozmyte, stylowe tło do okien aplikacji, tworząc głębię i nowoczesny wygląd. \"Natywny pasek tytułu\" musi być wyłączony.",
"background-effects": "Włącz efekty tła",
"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",
"zoom-factor": "Współczynnik powiększenia"
},
@ -1039,7 +1042,8 @@
"show-cheatsheet": "Pokaż ściągawkę",
"toggle-zen-mode": "Tryb Zen",
"new-version-available": "Dostępna nowa aktualizacja",
"download-update": "Pobierz wersję {{latestVersion}}"
"download-update": "Pobierz wersję {{latestVersion}}",
"search_notes": "Przeszukaj notatki"
},
"zen_mode": {
"button_exit": "Wyjdź z trybu Zen"
@ -1122,7 +1126,7 @@
"button_title": "Eksportuj diagram jako SVG"
},
"relation_map_buttons": {
"create_child_note_title": "Utwórz nową notatkę podrzędną i dodaj ją do tej mapy relacji",
"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",
"zoom_in_title": "Powiększ",
"zoom_out_title": "Pomniejsz"
@ -1138,12 +1142,23 @@
"delete_this_note": "Usuń tę notatkę",
"note_revisions": "Wersje notatki",
"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": {
"change_note_icon": "Zmień ikonę notatki",
"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": {
"note_type": "Typ notatki",
@ -1683,7 +1698,7 @@
"will_be_deleted_in": "Ten załącznik zostanie automatycznie usunięty za {{time}}",
"will_be_deleted_soon": "Ten załącznik zostanie wkrótce automatycznie usunięty",
"deletion_reason": ", ponieważ załącznik nie jest 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.",
"unrecognized_role": "Nierozpoznana rola załącznika '{{role}}'."
},
@ -1737,7 +1752,10 @@
"apply-bulk-actions": "Zastosuj akcje masowe",
"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.",
"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_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ć?",
"geo-map": "Mapa Geo",
"beta-feature": "Beta",
"ai-chat": "Czat AI",
"task-list": "Lista zadań",
"new-feature": "Nowość",
"collections": "Kolekcje"
@ -1827,7 +1846,17 @@
"create-child-note": "Utwórz notatkę podrzędną",
"unhoist": "Cofnij zawężenie",
"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": {
"window-on-top": "Utrzymuj okno na wierzchu"
@ -1835,7 +1864,13 @@
"note_detail": {
"could_not_find_typewidget": "Nie można znaleźć widżetu typu dla typu '{{type}}'",
"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": {
"placeholder": "wpisz tytuł notatki tutaj...",
@ -1845,7 +1880,8 @@
"note_type_switcher_others": "Inny typ notatki",
"note_type_switcher_templates": "Szablon",
"note_type_switcher_collection": "Kolekcja",
"edited_notes": "Edytowane notatki"
"edited_notes": "Notatki edytowane dzisiaj",
"promoted_attributes": "Sugerowane atrybuty"
},
"search_result": {
"no_notes_found": "Nie znaleziono notatek dla podanych parametrów wyszukiwania.",
@ -1855,7 +1891,11 @@
"configure_launchbar": "Konfiguruj pasek szybkiego dostępu"
},
"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": {
"tables": "Tabele"
@ -1972,7 +2012,8 @@
"geo-map": {
"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ć.",
"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": {
"open-location": "Otwórz lokalizację",
@ -2039,7 +2080,14 @@
"execute_sql_description": "Ta notatka jest notatką SQL. Kliknij, aby wykonać zapytanie SQL.",
"shared_copy_to_clipboard": "Kopiuj link do schowka",
"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": {
"language_title": "Zmień język treści",
@ -2082,5 +2130,30 @@
"empty_button": "Ukryj panel",
"toggle": "Pokaż/ukryj prawy panel",
"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) {
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({
id: "print-report",
icon: "bx bx-collection",

View File

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

View File

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

View File

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

View File

@ -1992,7 +1992,7 @@ function buildEnhanceTitle() {
if (isSubtreeHidden && count > 0) {
const $badge = $(`<span class="note-indicator-icon subtree-hidden-badge">${count}</span>`);
$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: {
view: () => import("./type_widgets/ProtectedSession"),
className: "protected-session-password-component"
className: "protected-session-password-component",
isFullHeight: true
},
book: {
view: () => import("./type_widgets/Book"),

View File

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

View File

@ -57,7 +57,7 @@ export function ExternallyControlledCollapsible({ title, children, className, ex
"with-transition": transitionEnabled
})}>
<button
className="collapsible-title"
className="collapsible-title tn-low-profile"
onClick={() => setExpanded(!expanded)}
aria-expanded={expanded}
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 { useEffect, useState } from "preact/hooks";
@ -33,7 +35,7 @@ export default function SimilarNotesTab({ note }: Pick<TabContext, "note">) {
notePath={notePath}
noTnLink
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 {
font-size: larger;
margin-bottom: 15px;
margin-block: 12px;
display: flex;
justify-content: space-between;
align-items: baseline;

View File

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

View File

@ -20,7 +20,9 @@ export default function ProtectedSession() {
}, [ passwordRef ]);
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")}>
<FormTextBox
type="password"
@ -37,4 +39,4 @@ export default function ProtectedSession() {
/>
</form>
)
}
}

View File

@ -16,3 +16,20 @@
width: 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 utils from "../../services/utils";
import Alert from "../react/Alert";
import { useNoteLabel } from "../react/hooks";
import { TypeWidgetProps } from "./type_widget";
import "./WebView.css";
import FormGroup from "../react/FormGroup";
import toast from "../../services/toast";
import Button from "../react/Button";
const isElectron = utils.isElectron();
@ -12,7 +16,7 @@ export default function WebView({ note }: TypeWidgetProps) {
return (webViewSrc
? <WebViewContent src={webViewSrc} />
: <WebViewHelp />
: <SetupWebView note={note} />
);
}
@ -24,12 +28,41 @@ function WebViewContent({ src }: { src: string }) {
}
}
function WebViewHelp() {
return (
<Alert className="note-detail-web-view-help" type="warning">
<h4>{t("web_view.web_view")}</h4>
<p>{t("web_view.embed_websites")}</p>
<p>{t("web_view.create_label")}</p>
</Alert>
)
function SetupWebView({note}: {note: FNote}) {
const [srcLabel, setSrcLabel] = useNoteLabel(note, "webViewSrc");
const [src, setSrc] = useState("");
const submit = useCallback((url: string) => {
try {
// 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: {
entryFileNames: (chunk) => {
// We enforce a hash in the main index file to avoid caching issues, this only works because we have the HTML entry point.
if (chunk.name === "index") {
if (chunk.name === "index" || chunk.name === "print") {
return "src/[name]-[hash].js";
}

View File

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

View File

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

View File

@ -69,7 +69,7 @@
"@types/xml2js": "0.4.14",
"archiver": "7.0.1",
"async-mutex": "0.5.0",
"axios": "1.13.4",
"axios": "1.13.5",
"bindings": "1.5.0",
"bootstrap": "5.3.8",
"chardet": "2.1.1",
@ -82,7 +82,7 @@
"debounce": "3.0.0",
"debug": "4.4.3",
"ejs": "4.0.1",
"electron": "40.1.0",
"electron": "40.2.1",
"electron-debug": "4.1.0",
"electron-window-state": "5.0.3",
"escape-html": "1.0.3",
@ -98,7 +98,7 @@
"html2plaintext": "2.1.4",
"http-proxy-agent": "7.0.2",
"https-proxy-agent": "7.0.6",
"i18next": "25.8.0",
"i18next": "25.8.4",
"i18next-fs-backend": "2.6.1",
"image-type": "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%;">
<img style="aspect-ratio:854/649;" src="Icon Packs_image.png"
width="854" height="649">

View File

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

View File

@ -81,66 +81,82 @@ interface ExportAsPdfOpts {
}
electron.ipcMain.on("print-note", async (e, { notePath }: PrintOpts) => {
const { browserWindow, printReport } = await getBrowserWindowForPrinting(e, notePath, "printing");
browserWindow.webContents.print({}, (success, failureReason) => {
if (!success && failureReason !== "Print job canceled") {
electron.dialog.showErrorBox(t("pdf.unable-to-print"), failureReason);
}
e.sender.send("print-done", printReport);
browserWindow.destroy();
});
try {
const { browserWindow, printReport } = await getBrowserWindowForPrinting(e, notePath, "printing");
browserWindow.webContents.print({}, (success, failureReason) => {
if (!success && failureReason !== "Print job canceled") {
electron.dialog.showErrorBox(t("pdf.unable-to-print"), failureReason);
}
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) => {
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 {
await print();
} finally {
e.sender.send("print-done", printReport);
browserWindow.destroy();
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 {
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,
contextIsolation: false,
offscreen: true,
devTools: false,
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 });
ipcMain.on("print-progress", progressCallback);
await browserWindow.loadURL(`http://127.0.0.1:${port}/?print#${notePath}`);
const printReport = await browserWindow.webContents.executeJavaScript(`
new Promise(resolve => {
if (window._noteReady) return resolve(window._noteReady);
window.addEventListener("note-ready", (data) => resolve(data.detail));
});
`);
// Capture ALL console output (including errors) for debugging
browserWindow.webContents.on("console-message", (e, message, line, sourceId) => {
if (e.level === "debug") return;
if (e.level === "error") {
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);
return { browserWindow, printReport };
}

View File

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

View File

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

View File

@ -27,6 +27,10 @@ export default function Resources() {
<Section className="icon-packs fill">
<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>
<Trans
i18nKey="resources.icon_packs_intro"

View File

@ -154,7 +154,8 @@
"header": {
"get-started": "Loslegen",
"documentation": "Dokumentation",
"support-us": "Unterstützt uns"
"support-us": "Unterstützt uns",
"resources": "Ressourcen"
},
"footer": {
"copyright_and_the": " und die ",
@ -196,5 +197,12 @@
"download_exe": "Installationsdatei herunterladen (.exe)",
"download_zip": "Portable (.zip)",
"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": {
"get-started": "Comencemos",
"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": {
"get-started": "Tosaigh",
"documentation": "Doiciméadú",
"support-us": "Tacaigh linn"
"support-us": "Tacaigh linn",
"resources": "Acmhainní"
},
"footer": {
"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.",
"download_pikapod": "Socraigh ar PikaPods",
"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": {
"get-started": "はじめる",
"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": {
"get-started": "Start",
"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": {
"get-started": "开始使用",
"documentation": "文档",
"support-us": "支持我们"
"support-us": "支持我们",
"resources": "资源"
},
"footer": {
"copyright_and_the": " 以及 ",
@ -196,5 +197,12 @@
"download_tar_x64": "64 位 (.tar.xz)",
"download_tar_arm64": "ARM (.tar.xz)",
"download_nixos": "NixOS 模块"
},
"resources": {
"icon_packs": "图标包",
"icon_packs_intro": "使用图标包可以扩展笔记中可用的图标选择。有关图标包的更多信息,请参阅<DocumentationLink>官方文档</DocumentationLink>。",
"download": "下载",
"website": "网站",
"title": "资源"
}
}

View File

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

21
docs/README-pl.md vendored
View File

@ -35,7 +35,7 @@ wiedzy.
<img src="./app.png" alt="Trilium Screenshot" width="1000">
## ⏬ Pobierz
## ⏬ Pobieranie
- [Ostatnie wydanie](https://github.com/TriliumNext/Trilium/releases/latest)
stabilna wersja, polecane dla większości użytkowników.
- [Nightly build](https://github.com/TriliumNext/Trilium/releases/tag/nightly) -
@ -48,7 +48,7 @@ wiedzy.
[docs.triliumnotes.org](https://docs.triliumnotes.org/)**
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/)
- **Pomoc w aplikacji**: Naciśnij `F1` w Trilium, aby uzyskać dostęp do tej
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)
- [Podstawowe koncepcje i
funkcjonalność](https://docs.triliumnotes.org/user-guide/concepts/notes)
- [Wzorce Bazy Wiedzy
Osobistej](https://docs.triliumnotes.org/user-guide/misc/patterns-of-personal-knowledge)
- [Wzorce osobistej Bazy
Wiedzy](https://docs.triliumnotes.org/user-guide/misc/patterns-of-personal-knowledge)
## 🎁 Funkcjonalność
* Notatki mogą być zorganizowane w drzewa dowolnej głębokości. Pojedyncza
notatka może być umieszczona w wielu miejscach w drzewie (patrz
[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
[autoformat](https://docs.triliumnotes.org/user-guide/note-types/text/markdown-formatting)
Markdown
@ -83,7 +83,7 @@ Nasza dokumentacja jest dostępna w wielu formatach:
notatkach](https://docs.triliumnotes.org/user-guide/concepts/navigation/note-navigation),
wyszukiwanie po pełnym tekście i[wyróżnienie
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)
* [Atrybuty](https://docs.triliumnotes.org/user-guide/advanced-usage/attributes)
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
geograficzne](https://docs.triliumnotes.org/user-guide/collections/geomap) z
oznaczeniami lokalizacji i trasami GPX
* [Skryptowanie](https://docs.triliumnotes.org/user-guide/scripts) patrz
* [Skrypty](https://docs.triliumnotes.org/user-guide/scripts) patrz
[zaawansowane
przykłady](https://docs.triliumnotes.org/user-guide/advanced-usage/advanced-showcases)
* [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.
### Mobile
### Urządzenia mobilne
Aby korzystać z TriliumNext na urządzeniu mobilnym, możesz użyć mobilnej
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.
* [Sarah Hussein](https://github.com/Sarah-Hussein) za zaprojektowanie ikony
aplikacji.
* [nriver](https://github.com/nriver) za prace nad internacjonalizacją.
* [Thomas Frei](https://github.com/thfrei) za pierwotne prace nad Płótnem (
Canvas ).
* [nriver](https://github.com/nriver) za prace nad wersjami językowymi.
* [Thomas Frei](https://github.com/thfrei) za pierwotne prace nad Canvas.
* [antoniotejada](https://github.com/nriver) za pierwotny widżet podświetlania
składni.
* [Dosu](https://dosu.dev/) za stworzenie rozwiązania umożliwiającego

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

1645
pnpm-lock.yaml generated

File diff suppressed because it is too large Load Diff