mirror of
https://github.com/zadam/trilium.git
synced 2026-02-13 09:56:59 +01:00
Compare commits
88 Commits
feature/tr
...
feature/cu
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
e6d728715f | ||
|
|
54a52f0589 | ||
|
|
badfa23f86 | ||
|
|
b83eee9bdc | ||
|
|
e41b2e8d31 | ||
|
|
d93cec2bfd | ||
|
|
9eb87a39cd | ||
|
|
07818ec1df | ||
|
|
d4052dbe37 | ||
|
|
656f5e0a7f | ||
|
|
0cc5e4dac3 | ||
|
|
8bbfff3cb2 | ||
|
|
33fae88cad | ||
|
|
4feb23e9ca | ||
|
|
c2b6b7ba72 | ||
|
|
fb76aee258 | ||
|
|
320b1829cc | ||
|
|
601f0255a4 | ||
|
|
b6cc2b227a | ||
|
|
1ae3be2fda | ||
|
|
5b4d35ea86 | ||
|
|
00735e6c8e | ||
|
|
66a42a38c9 | ||
|
|
05af1fba80 | ||
|
|
3b2dd0f5e9 | ||
|
|
1493a66a36 | ||
|
|
b4bf103fd8 | ||
|
|
94286becfd | ||
|
|
a68aade58c | ||
|
|
014201edf4 | ||
|
|
8ae6297148 | ||
|
|
5e0300aa8e | ||
|
|
80a7e18413 | ||
|
|
43be0a1a3f | ||
|
|
5eb32744c3 | ||
|
|
89d39f5f2b | ||
|
|
1f4900dd1e | ||
|
|
1c561c1483 | ||
|
|
6baaf60b67 | ||
|
|
dde73f6c2b | ||
|
|
f445a49b34 | ||
|
|
29016d1cf5 | ||
|
|
c06435046b | ||
|
|
134422802f | ||
|
|
5e00d6a305 | ||
|
|
b5f0137d8e | ||
|
|
081d041cbc | ||
|
|
95e733a67c | ||
|
|
a664057312 | ||
|
|
5b1a2d93bf | ||
|
|
0323f95828 | ||
|
|
375838449f | ||
|
|
4562de8c2c | ||
|
|
68d21669e7 | ||
|
|
625e0cf159 | ||
|
|
551ef00c61 | ||
|
|
10518f6364 | ||
|
|
1eafda36a9 | ||
|
|
871ecf0158 | ||
|
|
429000bdcb | ||
|
|
607940ed60 | ||
|
|
46f61a4311 | ||
|
|
3721df0502 | ||
|
|
11add681ec | ||
|
|
6e36eea6c8 | ||
|
|
6a82e7a24c | ||
|
|
5f625fa9f3 | ||
|
|
a95527674f | ||
|
|
f6149c67dc | ||
|
|
00c2a07e33 | ||
|
|
bc49b22c32 | ||
|
|
fe1b1c8bc3 | ||
|
|
a2825a06d6 | ||
|
|
3c33b5b169 | ||
|
|
934a867c83 | ||
|
|
a36337fba8 | ||
|
|
b3bd53bdd0 | ||
|
|
55518d4a8e | ||
|
|
2949c330d7 | ||
|
|
7ec056dbe0 | ||
|
|
983b60a8b9 | ||
|
|
000c31b66c | ||
|
|
fd7780abb0 | ||
|
|
328740909b | ||
|
|
c8a981e8d6 | ||
|
|
faac45784c | ||
|
|
f6b454cb9a | ||
|
|
563463782c |
@@ -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",
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -18,6 +18,10 @@ export type PrintReport = {
|
||||
} | {
|
||||
type: "collection";
|
||||
ignoredNoteIds: string[];
|
||||
} | {
|
||||
type: "error";
|
||||
message: string;
|
||||
stack?: string;
|
||||
};
|
||||
|
||||
async function main() {
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
@@ -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);
|
||||
|
||||
@@ -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",
|
||||
@@ -2277,5 +2280,8 @@
|
||||
"title_one": "{{count}} Tab",
|
||||
"title_other": "{{count}} Tabs",
|
||||
"more_options": "Weitere Optionen"
|
||||
},
|
||||
"bookmark_buttons": {
|
||||
"bookmarks": "Lesezeichen"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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"
|
||||
@@ -1589,7 +1591,8 @@
|
||||
"description": "Description",
|
||||
"reload_app": "Reload app to apply changes",
|
||||
"set_all_to_default": "Set all shortcuts to the default",
|
||||
"confirm_reset": "Do you really want to reset all keyboard shortcuts to the default?"
|
||||
"confirm_reset": "Do you really want to reset all keyboard shortcuts to the default?",
|
||||
"no_results": "No shortcuts found matching '{{filter}}'"
|
||||
},
|
||||
"spellcheck": {
|
||||
"title": "Spell Check",
|
||||
@@ -1795,6 +1798,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",
|
||||
@@ -2099,7 +2104,8 @@
|
||||
"raster": "Raster",
|
||||
"vector_light": "Vector (Light)",
|
||||
"vector_dark": "Vector (Dark)",
|
||||
"show-scale": "Show scale"
|
||||
"show-scale": "Show scale",
|
||||
"show-labels": "Show marker names"
|
||||
},
|
||||
"table_context_menu": {
|
||||
"delete_row": "Delete row"
|
||||
|
||||
@@ -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",
|
||||
@@ -2292,5 +2295,8 @@
|
||||
"title_many": "{{count}} pestañas",
|
||||
"title_other": "{{count}} pestañas",
|
||||
"more_options": "Más opciones"
|
||||
},
|
||||
"bookmark_buttons": {
|
||||
"bookmarks": "Marcadores"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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",
|
||||
@@ -2322,5 +2325,8 @@
|
||||
"title_many": "{{count}} cluaisíní",
|
||||
"title_other": "{{count}} cluaisíní",
|
||||
"more_options": "Tuilleadh roghanna"
|
||||
},
|
||||
"bookmark_buttons": {
|
||||
"bookmarks": "Leabharmharcanna"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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"
|
||||
},
|
||||
@@ -1182,7 +1185,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"
|
||||
@@ -1265,7 +1269,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"
|
||||
@@ -1281,12 +1285,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",
|
||||
@@ -1826,7 +1841,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}}'."
|
||||
},
|
||||
@@ -1880,7 +1895,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}}.",
|
||||
@@ -1971,7 +1989,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"
|
||||
@@ -1979,7 +2007,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...",
|
||||
@@ -1989,7 +2023,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.",
|
||||
@@ -1999,7 +2034,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"
|
||||
@@ -2116,7 +2155,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ę",
|
||||
@@ -2183,7 +2223,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",
|
||||
@@ -2226,5 +2273,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"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -22,7 +22,7 @@ import { ViewModeProps } from "../interface";
|
||||
import { createNewNote, moveMarker } from "./api";
|
||||
import openContextMenu, { openMapContextMenu } from "./context_menu";
|
||||
import Map from "./map";
|
||||
import { DEFAULT_MAP_LAYER_NAME } from "./map_layer";
|
||||
import { DEFAULT_MAP_LAYER_NAME, MAP_LAYERS, MapLayer } from "./map_layer";
|
||||
import Marker, { GpxTrack } from "./marker";
|
||||
|
||||
const DEFAULT_COORDINATES: [number, number] = [3.878638227135724, 446.6630455551659];
|
||||
@@ -45,10 +45,11 @@ export default function GeoView({ note, noteIds, viewConfig, saveConfig }: ViewM
|
||||
const [ state, setState ] = useState(State.Normal);
|
||||
const [ coordinates, setCoordinates ] = useState(viewConfig?.view?.center);
|
||||
const [ zoom, setZoom ] = useState(viewConfig?.view?.zoom);
|
||||
const [ layerName ] = useNoteLabel(note, "map:style");
|
||||
const [ hasScale ] = useNoteLabelBoolean(note, "map:scale");
|
||||
const [ hideLabels ] = useNoteLabelBoolean(note, "map:hideLabels");
|
||||
const [ isReadOnly ] = useNoteLabelBoolean(note, "readOnly");
|
||||
const [ notes, setNotes ] = useState<FNote[]>([]);
|
||||
const layerData = useLayerData(note);
|
||||
const spacedUpdate = useSpacedUpdate(() => {
|
||||
if (viewConfig) {
|
||||
saveConfig(viewConfig);
|
||||
@@ -152,7 +153,7 @@ export default function GeoView({ note, noteIds, viewConfig, saveConfig }: ViewM
|
||||
apiRef={apiRef} containerRef={containerRef}
|
||||
coordinates={coordinates}
|
||||
zoom={zoom}
|
||||
layerName={layerName ?? DEFAULT_MAP_LAYER_NAME}
|
||||
layerData={layerData}
|
||||
viewportChanged={(coordinates, zoom) => {
|
||||
if (!viewConfig) viewConfig = {};
|
||||
viewConfig.view = { center: coordinates, zoom };
|
||||
@@ -162,13 +163,35 @@ export default function GeoView({ note, noteIds, viewConfig, saveConfig }: ViewM
|
||||
onContextMenu={onContextMenu}
|
||||
scale={hasScale}
|
||||
>
|
||||
{notes.map(note => <NoteWrapper note={note} isReadOnly={isReadOnly} />)}
|
||||
{notes.map(note => <NoteWrapper note={note} isReadOnly={isReadOnly} hideLabels={hideLabels} />)}
|
||||
</Map>}
|
||||
<GeoMapTouchBar state={state} map={apiRef.current} />
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
function useLayerData(note: FNote) {
|
||||
const [ layerName ] = useNoteLabel(note, "map:style");
|
||||
// Memo is needed because it would generate unnecessary reloads due to layer change.
|
||||
const layerData = useMemo(() => {
|
||||
// Custom layers.
|
||||
if (layerName?.startsWith("http")) {
|
||||
return {
|
||||
name: "Custom",
|
||||
type: "raster",
|
||||
url: layerName,
|
||||
attribution: ""
|
||||
} satisfies MapLayer;
|
||||
}
|
||||
|
||||
// Built-in layers.
|
||||
const layerData = MAP_LAYERS[layerName ?? ""] ?? MAP_LAYERS[DEFAULT_MAP_LAYER_NAME];
|
||||
return layerData;
|
||||
}, [ layerName ]);
|
||||
|
||||
return layerData;
|
||||
}
|
||||
|
||||
function ToggleReadOnlyButton({ note }: { note: FNote }) {
|
||||
const [ isReadOnly, setReadOnly ] = useNoteLabelBoolean(note, "readOnly");
|
||||
|
||||
@@ -179,22 +202,26 @@ function ToggleReadOnlyButton({ note }: { note: FNote }) {
|
||||
/>;
|
||||
}
|
||||
|
||||
function NoteWrapper({ note, isReadOnly }: { note: FNote, isReadOnly: boolean }) {
|
||||
function NoteWrapper({ note, isReadOnly, hideLabels }: {
|
||||
note: FNote,
|
||||
isReadOnly: boolean,
|
||||
hideLabels: boolean
|
||||
}) {
|
||||
const mime = useNoteProperty(note, "mime");
|
||||
const [ location ] = useNoteLabel(note, LOCATION_ATTRIBUTE);
|
||||
|
||||
if (mime === "application/gpx+xml") {
|
||||
return <NoteGpxTrack note={note} />;
|
||||
return <NoteGpxTrack note={note} hideLabels={hideLabels} />;
|
||||
}
|
||||
|
||||
if (location) {
|
||||
const latLng = location?.split(",", 2).map((el) => parseFloat(el)) as [ number, number ] | undefined;
|
||||
if (!latLng) return;
|
||||
return <NoteMarker note={note} editable={!isReadOnly} latLng={latLng} />;
|
||||
return <NoteMarker note={note} editable={!isReadOnly} latLng={latLng} hideLabels={hideLabels} />;
|
||||
}
|
||||
}
|
||||
|
||||
function NoteMarker({ note, editable, latLng }: { note: FNote, editable: boolean, latLng: [number, number] }) {
|
||||
function NoteMarker({ note, editable, latLng, hideLabels }: { note: FNote, editable: boolean, latLng: [number, number], hideLabels: boolean }) {
|
||||
// React to changes
|
||||
const [ color ] = useNoteLabel(note, "color");
|
||||
const [ iconClass ] = useNoteLabel(note, "iconClass");
|
||||
@@ -202,8 +229,9 @@ function NoteMarker({ note, editable, latLng }: { note: FNote, editable: boolean
|
||||
|
||||
const title = useNoteProperty(note, "title");
|
||||
const icon = useMemo(() => {
|
||||
return buildIcon(note.getIcon(), note.getColorClass() ?? undefined, title, note.noteId, archived);
|
||||
}, [ iconClass, color, title, note.noteId, archived]);
|
||||
const titleOrNone = hideLabels ? undefined : title;
|
||||
return buildIcon(note.getIcon(), note.getColorClass() ?? undefined, titleOrNone, note.noteId, archived);
|
||||
}, [ iconClass, color, title, note.noteId, archived, hideLabels ]);
|
||||
|
||||
const onClick = useCallback(() => {
|
||||
appContext.triggerCommand("openInPopup", { noteIdOrPath: note.noteId });
|
||||
@@ -235,7 +263,7 @@ function NoteMarker({ note, editable, latLng }: { note: FNote, editable: boolean
|
||||
/>;
|
||||
}
|
||||
|
||||
function NoteGpxTrack({ note }: { note: FNote }) {
|
||||
function NoteGpxTrack({ note, hideLabels }: { note: FNote, hideLabels?: boolean }) {
|
||||
const [ xmlString, setXmlString ] = useState<string>();
|
||||
const blob = useNoteBlob(note);
|
||||
|
||||
@@ -256,7 +284,7 @@ function NoteGpxTrack({ note }: { note: FNote }) {
|
||||
|
||||
const options = useMemo<GPXOptions>(() => ({
|
||||
markers: {
|
||||
startIcon: buildIcon(note.getIcon(), note.getColorClass(), note.title),
|
||||
startIcon: buildIcon(note.getIcon(), note.getColorClass(), hideLabels ? undefined : note.title),
|
||||
endIcon: buildIcon("bxs-flag-checkered"),
|
||||
wptIcons: {
|
||||
"": buildIcon("bx bx-pin")
|
||||
@@ -265,7 +293,7 @@ function NoteGpxTrack({ note }: { note: FNote }) {
|
||||
polyline_options: {
|
||||
color: note.getLabelValue("color") ?? "blue"
|
||||
}
|
||||
}), [ color, iconClass ]);
|
||||
}), [ color, iconClass, hideLabels ]);
|
||||
return xmlString && <GpxTrack gpxXmlString={xmlString} options={options} />;
|
||||
}
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import { useEffect, useImperativeHandle, useRef, useState } from "preact/hooks";
|
||||
import L, { control, LatLng, Layer, LeafletMouseEvent } from "leaflet";
|
||||
import "leaflet/dist/leaflet.css";
|
||||
import { MAP_LAYERS } from "./map_layer";
|
||||
import { MAP_LAYERS, type MapLayer } from "./map_layer";
|
||||
import { ComponentChildren, createContext, RefObject } from "preact";
|
||||
import { useElementSize, useSyncedRef } from "../../react/hooks";
|
||||
|
||||
@@ -12,7 +12,7 @@ interface MapProps {
|
||||
containerRef?: RefObject<HTMLDivElement>;
|
||||
coordinates: LatLng | [number, number];
|
||||
zoom: number;
|
||||
layerName: string;
|
||||
layerData: MapLayer;
|
||||
viewportChanged: (coordinates: LatLng, zoom: number) => void;
|
||||
children: ComponentChildren;
|
||||
onClick?: (e: LeafletMouseEvent) => void;
|
||||
@@ -21,7 +21,7 @@ interface MapProps {
|
||||
scale: boolean;
|
||||
}
|
||||
|
||||
export default function Map({ coordinates, zoom, layerName, viewportChanged, children, onClick, onContextMenu, scale, apiRef, containerRef: _containerRef, onZoom }: MapProps) {
|
||||
export default function Map({ coordinates, zoom, layerData, viewportChanged, children, onClick, onContextMenu, scale, apiRef, containerRef: _containerRef, onZoom }: MapProps) {
|
||||
const mapRef = useRef<L.Map>(null);
|
||||
const containerRef = useSyncedRef<HTMLDivElement>(_containerRef);
|
||||
|
||||
@@ -49,8 +49,6 @@ export default function Map({ coordinates, zoom, layerName, viewportChanged, chi
|
||||
const [ layer, setLayer ] = useState<Layer>();
|
||||
useEffect(() => {
|
||||
async function load() {
|
||||
const layerData = MAP_LAYERS[layerName];
|
||||
|
||||
if (layerData.type === "vector") {
|
||||
const style = (typeof layerData.style === "string" ? layerData.style : await layerData.style());
|
||||
await import("@maplibre/maplibre-gl-leaflet");
|
||||
@@ -68,7 +66,7 @@ export default function Map({ coordinates, zoom, layerName, viewportChanged, chi
|
||||
}
|
||||
|
||||
load();
|
||||
}, [ layerName ]);
|
||||
}, [ layerData ]);
|
||||
|
||||
// Attach layer to the map.
|
||||
useEffect(() => {
|
||||
@@ -139,7 +137,7 @@ export default function Map({ coordinates, zoom, layerName, viewportChanged, chi
|
||||
return (
|
||||
<div
|
||||
ref={containerRef}
|
||||
className={`geo-map-container ${MAP_LAYERS[layerName].isDarkTheme ? "dark" : ""}`}
|
||||
className={`geo-map-container ${layerData.isDarkTheme ? "dark" : ""}`}
|
||||
>
|
||||
<ParentMap.Provider value={mapRef.current}>
|
||||
{children}
|
||||
|
||||
@@ -1,20 +1,17 @@
|
||||
export interface MapLayer {
|
||||
name: string;
|
||||
isDarkTheme?: boolean;
|
||||
}
|
||||
|
||||
interface VectorLayer extends MapLayer {
|
||||
export type MapLayer = ({
|
||||
type: "vector";
|
||||
style: string | (() => Promise<{}>)
|
||||
}
|
||||
|
||||
interface RasterLayer extends MapLayer {
|
||||
} | {
|
||||
type: "raster";
|
||||
url: string;
|
||||
attribution: string;
|
||||
}
|
||||
}) & {
|
||||
// Common properties
|
||||
name: string;
|
||||
isDarkTheme?: boolean;
|
||||
};
|
||||
|
||||
export const MAP_LAYERS: Record<string, VectorLayer | RasterLayer> = {
|
||||
export const MAP_LAYERS: Record<string, MapLayer> = {
|
||||
"openstreetmap": {
|
||||
name: "OpenStreetMap",
|
||||
type: "raster",
|
||||
|
||||
@@ -37,6 +37,10 @@
|
||||
&:hover {
|
||||
background: var(--input-background-color);
|
||||
}
|
||||
|
||||
.text {
|
||||
white-space: nowrap;
|
||||
}
|
||||
}
|
||||
|
||||
.status-bar-dropdown-button {
|
||||
|
||||
@@ -226,8 +226,8 @@ function CheckBoxPropertyView({ note, property }: { note: FNote, property: Check
|
||||
<FormListToggleableItem
|
||||
icon={property.icon}
|
||||
title={property.label}
|
||||
currentValue={value}
|
||||
onChange={setValue}
|
||||
currentValue={ property.reverseValue ? !value : value }
|
||||
onChange={newValue => setValue(property.reverseValue ? !newValue : newValue)}
|
||||
/>
|
||||
);
|
||||
}
|
||||
|
||||
@@ -9,7 +9,6 @@
|
||||
border-radius: 0.5em;
|
||||
font-size: 0.7rem;
|
||||
font-weight: normal;
|
||||
float: right;
|
||||
vertical-align: middle;
|
||||
}
|
||||
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
@@ -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"),
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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}
|
||||
|
||||
4
apps/client/src/widgets/ribbon/SimilarNotesTab.css
Normal file
4
apps/client/src/widgets/ribbon/SimilarNotesTab.css
Normal 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;
|
||||
}
|
||||
@@ -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"
|
||||
}}
|
||||
/>
|
||||
))}
|
||||
|
||||
@@ -20,6 +20,8 @@ export interface CheckBoxProperty {
|
||||
label: string;
|
||||
bindToLabel: FilterLabelsByType<boolean>;
|
||||
icon?: string;
|
||||
/** When true, the checkbox will be checked when the label value is false. Useful when the label represents a "hide" action, without exposing double negatives to the user. */
|
||||
reverseValue?: boolean;
|
||||
}
|
||||
|
||||
export interface ButtonProperty {
|
||||
@@ -156,6 +158,13 @@ export const bookPropertiesConfig: Record<ViewTypeOptions, BookConfig> = {
|
||||
icon: "bx bx-ruler",
|
||||
type: "checkbox",
|
||||
bindToLabel: "map:scale"
|
||||
},
|
||||
{
|
||||
label: t("book_properties_config.show-labels"),
|
||||
icon: "bx bx-label",
|
||||
type: "checkbox",
|
||||
bindToLabel: "map:hideLabels",
|
||||
reverseValue: true
|
||||
}
|
||||
]
|
||||
},
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -1,16 +1,7 @@
|
||||
.type-contentWidget .note-detail {
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
.note-detail-content-widget {
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
.note-detail-content-widget-content {
|
||||
padding: 15px;
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
.note-detail.full-height .note-detail-content-widget-content {
|
||||
padding: 0;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
@@ -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>
|
||||
)
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -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>
|
||||
}
|
||||
|
||||
40
apps/client/src/widgets/type_widgets/options/shortcuts.css
Normal file
40
apps/client/src/widgets/type_widgets/options/shortcuts.css
Normal file
@@ -0,0 +1,40 @@
|
||||
.shortcuts-options-section {
|
||||
> header {
|
||||
position: sticky;
|
||||
top: 0;
|
||||
left: 0;
|
||||
right: 0;
|
||||
background: var(--main-background-color);
|
||||
padding-block: 0.5em;
|
||||
border-bottom: 1px solid var(--main-border-color);
|
||||
}
|
||||
|
||||
> footer {
|
||||
position: sticky;
|
||||
bottom: 0;
|
||||
left: 0;
|
||||
right: 0;
|
||||
background: var(--main-background-color);
|
||||
padding-block: 0.5em;
|
||||
border-top: 1px solid var(--main-border-color);
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
}
|
||||
|
||||
table {
|
||||
width: 100%;
|
||||
|
||||
th {
|
||||
width: 25%;
|
||||
}
|
||||
|
||||
.separator {
|
||||
background-color: var(--accented-background-color);
|
||||
font-weight: bold;
|
||||
|
||||
&:first-of-type {
|
||||
padding-top: 1em;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -2,7 +2,6 @@ import { ActionKeyboardShortcut, KeyboardShortcut, OptionNames } from "@triliumn
|
||||
import { t } from "../../../services/i18n";
|
||||
import { arrayEqual, reloadFrontendApp } from "../../../services/utils";
|
||||
import Button from "../../react/Button";
|
||||
import FormGroup from "../../react/FormGroup";
|
||||
import FormText from "../../react/FormText";
|
||||
import FormTextBox from "../../react/FormTextBox";
|
||||
import RawHtml from "../../react/RawHtml";
|
||||
@@ -12,6 +11,8 @@ import server from "../../../services/server";
|
||||
import options from "../../../services/options";
|
||||
import dialog from "../../../services/dialog";
|
||||
import { useTriliumEvent } from "../../react/hooks";
|
||||
import "./shortcuts.css";
|
||||
import NoItems from "../../react/NoItems";
|
||||
|
||||
export default function ShortcutSettings() {
|
||||
const [ keyboardShortcuts, setKeyboardShortcuts ] = useState<KeyboardShortcut[]>([]);
|
||||
@@ -70,29 +71,29 @@ export default function ShortcutSettings() {
|
||||
options.saveMany(optionsToSet);
|
||||
}, [ keyboardShortcuts ]);
|
||||
|
||||
const filterLowerCase = filter?.toLowerCase() ?? "";
|
||||
const filteredKeyboardShortcuts = filter ? keyboardShortcuts.filter((action) => filterKeyboardAction(action, filterLowerCase)) : keyboardShortcuts;
|
||||
|
||||
return (
|
||||
<OptionsSection
|
||||
className="shortcuts-options-section"
|
||||
style={{ display: "flex", flexDirection: "column", height: "100%" }}
|
||||
noCard
|
||||
>
|
||||
<FormText>
|
||||
{t("shortcuts.multiple_shortcuts")}
|
||||
{t("shortcuts.multiple_shortcuts")}{" "}
|
||||
<RawHtml html={t("shortcuts.electron_documentation")} />
|
||||
</FormText>
|
||||
|
||||
<FormGroup name="keyboard-shortcut-filter">
|
||||
<header>
|
||||
<FormTextBox
|
||||
placeholder={t("shortcuts.type_text_to_filter")}
|
||||
currentValue={filter} onChange={(value) => setFilter(value.toLowerCase())}
|
||||
currentValue={filter} onChange={(value) => setFilter(value)}
|
||||
/>
|
||||
</FormGroup>
|
||||
</header>
|
||||
|
||||
<div style={{overflow: "auto", flexGrow: 1, flexShrink: 1}}>
|
||||
<KeyboardShortcutTable keyboardShortcuts={keyboardShortcuts} filter={filter} />
|
||||
</div>
|
||||
<KeyboardShortcutTable filteredKeyboardActions={filteredKeyboardShortcuts} filter={filter} />
|
||||
|
||||
<div style={{ display: "flex", justifyContent: "space-between", margin: "15px 15px 0 15px"}}>
|
||||
<footer>
|
||||
<Button
|
||||
text={t("shortcuts.reload_app")}
|
||||
onClick={reloadFrontendApp}
|
||||
@@ -102,12 +103,17 @@ export default function ShortcutSettings() {
|
||||
text={t("shortcuts.set_all_to_default")}
|
||||
onClick={resetShortcuts}
|
||||
/>
|
||||
</div>
|
||||
</footer>
|
||||
</OptionsSection>
|
||||
)
|
||||
}
|
||||
|
||||
function filterKeyboardAction(action: ActionKeyboardShortcut, filter: string) {
|
||||
function filterKeyboardAction(action: KeyboardShortcut, filter: string) {
|
||||
// Hide separators when filtering is active.
|
||||
if ("separator" in action) {
|
||||
return !filter;
|
||||
}
|
||||
|
||||
return action.actionName.toLowerCase().includes(filter) ||
|
||||
(action.friendlyName && action.friendlyName.toLowerCase().includes(filter)) ||
|
||||
(action.defaultShortcuts ?? []).some((shortcut) => shortcut.toLowerCase().includes(filter)) ||
|
||||
@@ -115,7 +121,7 @@ function filterKeyboardAction(action: ActionKeyboardShortcut, filter: string) {
|
||||
(action.description && action.description.toLowerCase().includes(filter));
|
||||
}
|
||||
|
||||
function KeyboardShortcutTable({ filter, keyboardShortcuts }: { filter?: string, keyboardShortcuts: KeyboardShortcut[] }) {
|
||||
function KeyboardShortcutTable({ filteredKeyboardActions, filter }: { filteredKeyboardActions: KeyboardShortcut[], filter: string | undefined }) {
|
||||
return (
|
||||
<table class="keyboard-shortcut-table" cellPadding="10">
|
||||
<thead>
|
||||
@@ -127,16 +133,17 @@ function KeyboardShortcutTable({ filter, keyboardShortcuts }: { filter?: string,
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{keyboardShortcuts.map(action => (
|
||||
{filteredKeyboardActions.length > 0
|
||||
? filteredKeyboardActions.map(action => (
|
||||
<tr>
|
||||
{"separator" in action ? ( !filter &&
|
||||
{"separator" in action ?
|
||||
<td class="separator" colspan={4} style={{
|
||||
backgroundColor: "var(--accented-background-color)",
|
||||
fontWeight: "bold"
|
||||
}}>
|
||||
{action.separator}
|
||||
</td>
|
||||
) : ( (!filter || filterKeyboardAction(action, filter)) &&
|
||||
: (
|
||||
<>
|
||||
<td>{action.friendlyName}</td>
|
||||
<td>
|
||||
@@ -147,7 +154,17 @@ function KeyboardShortcutTable({ filter, keyboardShortcuts }: { filter?: string,
|
||||
</>
|
||||
)}
|
||||
</tr>
|
||||
))}
|
||||
))
|
||||
: (
|
||||
<tr>
|
||||
<td colspan={4} class="text-center">
|
||||
<NoItems
|
||||
icon="bx bx-filter-alt"
|
||||
text={t("shortcuts.no_results", { filter })}
|
||||
/>
|
||||
</td>
|
||||
</tr>
|
||||
)}
|
||||
</tbody>
|
||||
</table>
|
||||
);
|
||||
|
||||
@@ -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";
|
||||
}
|
||||
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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": {
|
||||
|
||||
@@ -35,7 +35,7 @@
|
||||
"sucrase": "3.35.1"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@anthropic-ai/sdk": "0.72.1",
|
||||
"@anthropic-ai/sdk": "0.74.0",
|
||||
"@braintree/sanitize-url": "7.1.2",
|
||||
"@electron/remote": "2.1.3",
|
||||
"@triliumnext/commons": "workspace:*",
|
||||
@@ -70,7 +70,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",
|
||||
@@ -83,7 +83,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",
|
||||
@@ -99,7 +99,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",
|
||||
@@ -112,7 +112,7 @@
|
||||
"multer": "2.0.2",
|
||||
"normalize-strings": "1.1.1",
|
||||
"ollama": "0.6.3",
|
||||
"openai": "6.17.0",
|
||||
"openai": "6.21.0",
|
||||
"rand-token": "1.0.1",
|
||||
"safe-compare": "1.1.4",
|
||||
"sanitize-filename": "1.6.3",
|
||||
|
||||
@@ -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">
|
||||
|
||||
@@ -317,7 +317,8 @@
|
||||
"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",
|
||||
|
||||
@@ -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 };
|
||||
}
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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>."
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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サイト"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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": "资源"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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
21
docs/README-pl.md
vendored
@@ -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
|
||||
|
||||
@@ -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.
|
||||
|
||||
10
package.json
10
package.json
@@ -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",
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -48,6 +48,7 @@ type Labels = {
|
||||
"calendar:initialDate": string;
|
||||
"map:style": string;
|
||||
"map:scale": boolean;
|
||||
"map:hideLabels": boolean;
|
||||
"board:groupBy": string;
|
||||
maxNestingDepth: number;
|
||||
includeArchived: boolean;
|
||||
|
||||
@@ -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"
|
||||
|
||||
1843
pnpm-lock.yaml
generated
1843
pnpm-lock.yaml
generated
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user