Merge remote-tracking branch 'origin/main' into feature/dx_improvement

; Conflicts:
;	pnpm-lock.yaml
This commit is contained in:
Elian Doran 2025-09-02 20:43:43 +03:00
commit 37d66848d6
No known key found for this signature in database
17 changed files with 515 additions and 256 deletions

2
.nvmrc
View File

@ -1 +1 @@
22.18.0 22.19.0

View File

@ -36,7 +36,7 @@
}, },
"devDependencies": { "devDependencies": {
"@playwright/test": "1.55.0", "@playwright/test": "1.55.0",
"@stylistic/eslint-plugin": "5.2.3", "@stylistic/eslint-plugin": "5.3.1",
"@types/express": "5.0.3", "@types/express": "5.0.3",
"@types/node": "22.18.0", "@types/node": "22.18.0",
"@types/yargs": "17.0.33", "@types/yargs": "17.0.33",
@ -49,7 +49,7 @@
"rcedit": "4.0.1", "rcedit": "4.0.1",
"rimraf": "6.0.1", "rimraf": "6.0.1",
"tslib": "2.8.1", "tslib": "2.8.1",
"typedoc": "0.28.11", "typedoc": "0.28.12",
"typedoc-plugin-missing-exports": "4.1.0" "typedoc-plugin-missing-exports": "4.1.0"
}, },
"optionalDependencies": { "optionalDependencies": {

View File

@ -35,7 +35,7 @@
"autocomplete.js": "0.38.1", "autocomplete.js": "0.38.1",
"bootstrap": "5.3.8", "bootstrap": "5.3.8",
"boxicons": "2.1.4", "boxicons": "2.1.4",
"dayjs": "1.11.14", "dayjs": "1.11.18",
"dayjs-plugin-utc": "0.1.2", "dayjs-plugin-utc": "0.1.2",
"debounce": "2.2.0", "debounce": "2.2.0",
"draggabilly": "3.0.0", "draggabilly": "3.0.0",
@ -57,7 +57,7 @@
"normalize.css": "8.0.1", "normalize.css": "8.0.1",
"panzoom": "9.4.3", "panzoom": "9.4.3",
"preact": "10.27.1", "preact": "10.27.1",
"react-i18next": "15.7.2", "react-i18next": "15.7.3",
"split.js": "1.6.5", "split.js": "1.6.5",
"svg-pan-zoom": "3.6.2", "svg-pan-zoom": "3.6.2",
"tabulator-tables": "6.3.1", "tabulator-tables": "6.3.1",

View File

@ -1404,8 +1404,8 @@
"open-in-popup": "Schnellbearbeitung" "open-in-popup": "Schnellbearbeitung"
}, },
"shared_info": { "shared_info": {
"shared_publicly": "Diese Notiz ist öffentlich geteilt auf {{- link}}", "shared_publicly": "Diese Notiz ist öffentlich geteilt auf {{- link}}.",
"shared_locally": "Diese Notiz ist lokal geteilt auf {{- link}}", "shared_locally": "Diese Notiz ist lokal geteilt auf {{- link}}.",
"help_link": "Für Hilfe besuche <a href=\"https://triliumnext.github.io/Docs/Wiki/sharing.html\">wiki</a>." "help_link": "Für Hilfe besuche <a href=\"https://triliumnext.github.io/Docs/Wiki/sharing.html\">wiki</a>."
}, },
"note_types": { "note_types": {
@ -1484,7 +1484,8 @@
"hoist-this-note-workspace": "Diese Notiz fokussieren (Arbeitsbereich)", "hoist-this-note-workspace": "Diese Notiz fokussieren (Arbeitsbereich)",
"refresh-saved-search-results": "Gespeicherte Suchergebnisse aktualisieren", "refresh-saved-search-results": "Gespeicherte Suchergebnisse aktualisieren",
"create-child-note": "Unternotiz anlegen", "create-child-note": "Unternotiz anlegen",
"unhoist": "Fokus verlassen" "unhoist": "Fokus verlassen",
"toggle-sidebar": "Seitenleiste ein-/ausblenden"
}, },
"title_bar_buttons": { "title_bar_buttons": {
"window-on-top": "Dieses Fenster immer oben halten" "window-on-top": "Dieses Fenster immer oben halten"

View File

@ -13,29 +13,127 @@
"critical-error": { "critical-error": {
"title": "Błąd krytyczny", "title": "Błąd krytyczny",
"message": "Wystąpił krytyczny błąd uniemożliwiający uruchomienie aplikacji:\n\n{{message}}\n\nJest to spowodowane najprawdopodobniej niespodziewanym błędem skryptu. Spróbuj uruchomić aplikację ponownie w trybie bezpiecznym i zaadresuj problem." "message": "Wystąpił krytyczny błąd uniemożliwiający uruchomienie aplikacji:\n\n{{message}}\n\nJest to spowodowane najprawdopodobniej niespodziewanym błędem skryptu. Spróbuj uruchomić aplikację ponownie w trybie bezpiecznym i zaadresuj problem."
},
"widget-error": {
"title": "Nie udało się zainicjować widżetu",
"message-custom": "Niestandardowy widżet z notatki o identyfikatorze \"{{id}}\", i tytule \"{{title}}\" nie mógł zostać zainicjowany z powodu:\n\n{{message}}",
"message-unknown": "Nieznany widżet nie mógł być zainicjowany z powodu:\n\n{{message}}"
},
"bundle-error": {
"title": "Nie udało się załadować niestandardowego skryptu",
"message": "Skrypt z notatki o identyfikatorze \"{{id}}\", tytule \"{{title}}: nie został uruchomiony z powodu:\n\n{{message}}"
} }
}, },
"add_link": { "add_link": {
"add_link": "Dodaj link" "add_link": "Dodaj link",
"note": "Notatka",
"search_note": "Wyszukaj notatkę po nazwie",
"link_title_arbitrary": "Tytuł linku można dowolnie zmieniać",
"link_title": "Tytuł linku",
"button_add_link": "Dodaj link"
}, },
"branch_prefix": { "branch_prefix": {
"save": "Zapisz" "save": "Zapisz",
"edit_branch_prefix": "Edytuj prefiks gałęzi",
"prefix": "Prefiks: ",
"branch_prefix_saved": "Zapisano prefiks gałęzi."
}, },
"bulk_actions": { "bulk_actions": {
"labels": "Etykiety", "labels": "Etykiety",
"notes": "Notatki", "notes": "Notatki",
"other": "Inne", "other": "Inne",
"relations": "Powiązania" "relations": "Powiązania",
"bulk_actions": "Działania zbiorcze",
"include_descendants": "Uwzględnia rozwinięcia wybranych notatek",
"available_actions": "Dostępne działania",
"chosen_actions": "Wybrane działania",
"execute_bulk_actions": "Wykonaj zbiór działań",
"bulk_actions_executed": "Zbiór działań został wykonany prawidłowo.",
"none_yet": "Brak zaznaczonych działań... dodaj działanie poprzez kliknięcie jednej z dostępnych opcji powyżej."
}, },
"confirm": { "confirm": {
"ok": "OK", "ok": "OK",
"cancel": "Anuluj" "cancel": "Anuluj",
"confirmation": "Potwierdzenie",
"are_you_sure_remove_note": "Czy napewno chcesz usunąć notatkę \"{{title}}\" z mapy powiązań? ",
"if_you_dont_check": "Jeśli nie zaznaczysz tej opcji, notatka zostanie usunięta jedynie z mapy powiązań.",
"also_delete_note": "Usuń dodatkowo notatkę"
}, },
"delete_notes": { "delete_notes": {
"cancel": "Anuluj", "cancel": "Anuluj",
"close": "Zamknij" "close": "Zamknij",
"delete_notes_preview": "Usuń podgląd notatek",
"delete_all_clones_description": "Usuń również wszystkie sklonowania (działanie może zostać cofnięte w ostatnich zmianach)",
"erase_notes_description": "Normalne (miękkie) usuwanie zaznacza jedynie notatki jako usunięte i można je przywrócić (w oknie dialogowym ostatnich zmian) przez wyznaczony okres czasu. Zaznaczenie tej opcji spowoduje natychmiastowe usunięcie notatek, bez możliwości ich przywrócenia.",
"erase_notes_warning": "Usuń notatki permanentnie (bez opcji ich przywrócenia), włączając wszystkie kopie. Działanie to wymaga ponownego uruchomienia aplikacji.",
"notes_to_be_deleted": "Następujące notatki zostaną usunięte ({{notesCount}})",
"no_note_to_delete": "Żadne notatki nie zostaną usunięte (jedynie kopie).",
"broken_relations_to_be_deleted": "Następujące powiązania zostaną uszkodzone i usunięte ({{ relationCount}})",
"ok": "OK",
"deleted_relation_text": "Notatka {{- note}} (do usunięcia) jest powiązana przez relację {{- relation}} pochodzącą z {{- source}}."
}, },
"export": { "export": {
"close": "Zamknij" "close": "Zamknij",
"export_note_title": "Eksportuj notatkę",
"export_type_subtree": "Ta notatka oraz wszystkie podrzędne",
"format_html": "HTML - rekomendowany jako zachowujący całość formatowania",
"format_html_zip": "HTML w archiwum ZIP - rekomendowany jako zachowujący całość formatowania.",
"format_markdown": "Markdown - zachowuje większość formatowania.",
"format_opml": "OPML - format wymiany danych dla outlinerów zawierający tylko tekst. Formatowanie, obrazy i pliki nie są uwzględnione.",
"opml_version_1": "OPML v1.0 - tylko zwykły tekst",
"opml_version_2": "OPML v2.0 - umożliwia również HTML",
"export_type_single": "Tylko ta notatka, bez elementów podrzędnych",
"export": "Eksportuj",
"choose_export_type": "Wybierz najpierw rodzaj pliku do eksportu",
"export_status": "Status eksportu",
"export_in_progress": "Postęp eksportowania: {{progressCount}}",
"export_finished_successfully": "Eksportowanie zakończone.",
"format_pdf": "PDF - w celu drukowania lub udostępniania."
},
"clone_to": {
"clone_notes_to": "Sklonuj notatki do...",
"notes_to_clone": "Notatki do sklonowania",
"search_for_note_by_its_name": "Wyszukaj notatkę po jej nazwie",
"cloned_note_prefix_title": "Sklonowana notatka zostanie wyświetlona w drzewie notatki z podanym prefiksem",
"prefix_optional": "Prefiks (opcjonalne)",
"clone_to_selected_note": "Sklonuj do wybranej notatki",
"no_path_to_clone_to": "Brak ścieżki do sklonowania.",
"note_cloned": "Notatka \"{{clonedTitle}}\" została sklonowana do \"{{targetTitle}}\""
},
"help": {
"title": "Ściągawka",
"noteNavigation": "Nawigacja po notatkach",
"goUpDown": "przewijanie w górę/w dół w liście notatek",
"collapseExpand": "zwiń/rozwiń zbiór",
"notSet": "niezdefiniowany",
"goBackForwards": "przewijaj do tyłu/do przodu w historii",
"showJumpToNoteDialog": "pokaż <a class=\"external\" href=\"https://triliumnext.github.io/Docs/Wiki/note-navigation.html#jump-to-note\">\"przejdź do dialogu</a>",
"scrollToActiveNote": "przewiń do aktywnej notatki",
"jumpToParentNote": "przejdź do głównej notatki",
"collapseWholeTree": "zwiń całe drzewko notatki",
"collapseSubTree": "zwiń gałąź notatki",
"tabShortcuts": "Skóry kart",
"newTabNoteLink": "link notatki otwiera notatkę w nowej karcie",
"newTabWithActivationNoteLink": "link notatki otwiera i aktywuje notatkę w nowej karcie",
"onlyInDesktop": "Tylko na komputerze stacjonarnym (wersja Electron)",
"openEmptyTab": "Otwórz pustą kartę",
"closeActiveTab": "zamknij aktywną kartę",
"activateNextTab": "aktywuj następną kartę",
"activatePreviousTab": "aktywuj poprzednią kartę",
"creatingNotes": "Tworzenie notatek",
"createNoteAfter": "Utwórz nową notatkę obok obecnie aktywnej",
"createNoteInto": "Utwórz nową podnotatkę w obecnie otwartej",
"editBranchPrefix": "edytuj <a class=\"external\" href=\"https://triliumnext.github.io/Docs/Wiki/tree-concepts.html#prefix\">prefiks</a> aktywnej kopii notatki",
"movingCloningNotes": "Przenoszenie / kopiowanie notatek",
"moveNoteUpDown": "Przenieś notatkę w górę/w dół na liście notatek",
"moveNoteUpHierarchy": "Przenieś notatkę w górę w hierarchii",
"multiSelectNote": "Zaznacz wiele notatek powyżej/poniżej",
"selectAllNotes": "Wybierz wszystkie notatki na obecnym poziomie",
"selectNote": "Wybierz notatkę",
"copyNotes": "skopiuj obecną notatkę (lub obecną sekcję) do schowka (zastosowanie dla<a class=\"external\" href=\"https://triliumnext.github.io/Docs/Wiki/cloning-notes.html#cloning-notes\">klonowania</a>)",
"cutNotes": "przytnij obecną notatkę (lub obecną sekcję) do schowka (zastosowanie dla przenoszenia notatek)",
"pasteNotes": "wklej notatkę jako podnotatka w obecnej notatce (rozumiane jako przenieś lub skopiuj, w zależności czy notatka była skopiowana czy wycięta)",
"deleteNotes": "usuń notatkę / gałąź",
"editingNotes": "Edytowanie notatek"
} }
} }

View File

@ -994,7 +994,7 @@
"invalid_view_type": "Tipo de visualização inválido '{{type}}'", "invalid_view_type": "Tipo de visualização inválido '{{type}}'",
"calendar": "Calendário", "calendar": "Calendário",
"table": "Tabela", "table": "Tabela",
"geo-map": "Geo Map", "geo-map": "Mapa geográfico",
"board": "Quadro" "board": "Quadro"
}, },
"edited_notes": { "edited_notes": {
@ -1278,7 +1278,7 @@
"handwriting-system-fonts": "Fontes de escrita à mão de sistema", "handwriting-system-fonts": "Fontes de escrita à mão de sistema",
"serif": "Serifa", "serif": "Serifa",
"sans-serif": "Sem Serifa", "sans-serif": "Sem Serifa",
"monospace": "Monospace", "monospace": "Monoespaçado",
"system-default": "Padrão do Sistema", "system-default": "Padrão do Sistema",
"note_tree_and_detail_font_sizing": "Note que o tamanho da fonte da árvore e dos detalhes é relativo à configuração principal do tamanho de fonte." "note_tree_and_detail_font_sizing": "Note que o tamanho da fonte da árvore e dos detalhes é relativo à configuração principal do tamanho de fonte."
}, },
@ -1518,7 +1518,7 @@
"doc": "Documento", "doc": "Documento",
"widget": "Widget", "widget": "Widget",
"confirm-change": "Não é recomentado alterar o tipo da nota quando o conteúdo da nota não está vazio. Quer continuar assim mesmo?", "confirm-change": "Não é recomentado alterar o tipo da nota quando o conteúdo da nota não está vazio. Quer continuar assim mesmo?",
"geo-map": "Geo Map", "geo-map": "Mapa geográfico",
"beta-feature": "Beta", "beta-feature": "Beta",
"ai-chat": "Chat IA", "ai-chat": "Chat IA",
"task-list": "Lista de Tarefas", "task-list": "Lista de Tarefas",
@ -1579,7 +1579,8 @@
"hoist-this-note-workspace": "Fixar esta nota (workspace)", "hoist-this-note-workspace": "Fixar esta nota (workspace)",
"refresh-saved-search-results": "Atualizar resultados de pesquisa salvos", "refresh-saved-search-results": "Atualizar resultados de pesquisa salvos",
"create-child-note": "Criar nota filha", "create-child-note": "Criar nota filha",
"unhoist": "Desafixar" "unhoist": "Desafixar",
"toggle-sidebar": "Alternar barra lateral"
}, },
"title_bar_buttons": { "title_bar_buttons": {
"window-on-top": "Manter Janela no Topo" "window-on-top": "Manter Janela no Topo"
@ -2022,6 +2023,8 @@
"handshake_failed": "Falha no handshake com o servidor de sincronização, erro: {{message}}" "handshake_failed": "Falha no handshake com o servidor de sincronização, erro: {{message}}"
}, },
"shared_info": { "shared_info": {
"help_link": "Para ajuda, visite a <a href=\"https://triliumnext.github.io/Docs/Wiki/sharing.html\">wiki</a>." "help_link": "Para ajuda, visite a <a href=\"https://triliumnext.github.io/Docs/Wiki/sharing.html\">wiki</a>.",
"shared_publicly": "Esta nota é compartilhada publicamente em {{- link}}.",
"shared_locally": "Esta nota é compartilhada localmente em {{- link}}."
} }
} }

View File

@ -742,7 +742,8 @@
"save-changes": "Сохранить и применить изменения", "save-changes": "Сохранить и применить изменения",
"saved-search-note-refreshed": "Сохраненная поисковая заметка обновлена.", "saved-search-note-refreshed": "Сохраненная поисковая заметка обновлена.",
"refresh-saved-search-results": "Обновить сохраненные результаты поиска", "refresh-saved-search-results": "Обновить сохраненные результаты поиска",
"automatically-collapse-notes-title": "Заметки будут свернуты после определенного периода бездействия, чтобы навести порядок в дереве." "automatically-collapse-notes-title": "Заметки будут свернуты после определенного периода бездействия, чтобы навести порядок в дереве.",
"toggle-sidebar": "Переключить боковую панель"
}, },
"quick-search": { "quick-search": {
"no-results": "Результаты не найдены", "no-results": "Результаты не найдены",
@ -1974,8 +1975,8 @@
}, },
"shared_info": { "shared_info": {
"help_link": "Для получения справки посетите <a href=\"https://triliumnext.github.io/Docs/Wiki/sharing.html\">вики</a>.", "help_link": "Для получения справки посетите <a href=\"https://triliumnext.github.io/Docs/Wiki/sharing.html\">вики</a>.",
"shared_locally": "Заметка общедоступна локально в {{- link}}", "shared_locally": "Заметка общедоступна локально в {{- link}}.",
"shared_publicly": "Заметка общедоступна публично в {{- link}}" "shared_publicly": "Заметка общедоступна публично в {{- link}}."
}, },
"note_create": { "note_create": {
"duplicated": "Создан дубль заметки \"{{title}}\"." "duplicated": "Создан дубль заметки \"{{title}}\"."

View File

@ -844,7 +844,8 @@
"note_type": "Тип нотатки", "note_type": "Тип нотатки",
"editable": "Редагув.", "editable": "Редагув.",
"basic_properties": "Основні Властивості", "basic_properties": "Основні Властивості",
"language": "Мова" "language": "Мова",
"configure_code_notes": "Конфігурація нотатки з кодом..."
}, },
"book_properties": { "book_properties": {
"view_type": "Тип перегляду", "view_type": "Тип перегляду",
@ -1586,7 +1587,8 @@
"hoist-this-note-workspace": "Закріпити цю нотатку (робочий простір)", "hoist-this-note-workspace": "Закріпити цю нотатку (робочий простір)",
"refresh-saved-search-results": "Оновити збережені результати пошуку", "refresh-saved-search-results": "Оновити збережені результати пошуку",
"create-child-note": "Створити дочірню нотатку", "create-child-note": "Створити дочірню нотатку",
"unhoist": "Відкріпити" "unhoist": "Відкріпити",
"toggle-sidebar": "Перемикання бічної панелі"
}, },
"title_bar_buttons": { "title_bar_buttons": {
"window-on-top": "Тримати вікно зверху" "window-on-top": "Тримати вікно зверху"
@ -1909,8 +1911,8 @@
"open-in-popup": "Швидке редагування" "open-in-popup": "Швидке редагування"
}, },
"shared_info": { "shared_info": {
"shared_publicly": "Ця нотатка опублікована на {{- link}}", "shared_publicly": "Ця нотатка опублікована на {{- link}}.",
"shared_locally": "Цю нотатку опубліковано локально на {{- link}}", "shared_locally": "Цю нотатку опубліковано локально на {{- link}}.",
"help_link": "Щоб отримати допомогу, відвідайте <a href=\"https://triliumnext.github.io/Docs/Wiki/sharing.html\">вікі</a>." "help_link": "Щоб отримати допомогу, відвідайте <a href=\"https://triliumnext.github.io/Docs/Wiki/sharing.html\">вікі</a>."
}, },
"note_types": { "note_types": {
@ -2018,5 +2020,11 @@
}, },
"units": { "units": {
"percentage": "%" "percentage": "%"
},
"ui-performance": {
"title": "Продуктивність",
"enable-motion": "Увімкнути переходи та анімацію",
"enable-shadows": "Увімкнути тіні",
"enable-backdrop-effects": "Увімкнути фонові ефекти для меню, спливаючих вікон та панелей"
} }
} }

View File

@ -1,7 +1,10 @@
{ {
"about": { "about": {
"homepage": "Trang chủ:", "homepage": "Trang chủ:",
"title": "Về Trilium Notes" "title": "Về Trilium Notes",
"app_version": "Phiên bản:",
"db_version": "Phiên bản DB:",
"sync_version": "Phiên bản liên kết:"
}, },
"add_link": { "add_link": {
"add_link": "Thêm liên kết", "add_link": "Thêm liên kết",
@ -26,7 +29,8 @@
"close": "Đóng" "close": "Đóng"
}, },
"help": { "help": {
"other": "Khác" "other": "Khác",
"notSet": "chưa được đặt"
}, },
"toast": { "toast": {
"critical-error": { "critical-error": {
@ -69,12 +73,16 @@
"add_label": { "add_label": {
"add_label": "Thêm nhãn", "add_label": "Thêm nhãn",
"label_name_placeholder": "tên nhãn", "label_name_placeholder": "tên nhãn",
"help_text_item2": "hoặc thay đổi giá trị của nhãn có sẵn" "help_text_item2": "hoặc thay đổi giá trị của nhãn có sẵn",
"new_value_placeholder": "giá trị mới"
}, },
"rename_label": { "rename_label": {
"rename_label": "Đặt lại tên nhãn" "rename_label": "Đặt lại tên nhãn"
}, },
"call_to_action": { "call_to_action": {
"dismiss": "Bỏ qua" "dismiss": "Bỏ qua"
},
"abstract_search_option": {
"remove_this_search_option": "Xoá lựa chọn tìm kiếm này"
} }
} }

View File

@ -1,16 +1,11 @@
import utils from "../../services/utils.js"; import utils from "../../services/utils.js";
import contextMenu from "../../menus/context_menu.js"; import contextMenu, { MenuCommandItem } from "../../menus/context_menu.js";
import treeService from "../../services/tree.js"; import treeService from "../../services/tree.js";
import ButtonFromNoteWidget from "./button_from_note.js"; import ButtonFromNoteWidget from "./button_from_note.js";
import type FNote from "../../entities/fnote.js"; import type FNote from "../../entities/fnote.js";
import type { CommandNames } from "../../components/app_context.js"; import type { CommandNames } from "../../components/app_context.js";
import type { WebContents } from "electron"; import type { WebContents } from "electron";
import link from "../../services/link.js";
interface ContextMenuItem {
title: string;
idx: string;
uiIcon: string;
}
export default class HistoryNavigationButton extends ButtonFromNoteWidget { export default class HistoryNavigationButton extends ButtonFromNoteWidget {
private webContents?: WebContents; private webContents?: WebContents;
@ -47,24 +42,20 @@ export default class HistoryNavigationButton extends ButtonFromNoteWidget {
return; return;
} }
let items: ContextMenuItem[] = []; let items: MenuCommandItem<string>[] = [];
const history = this.webContents.navigationHistory; const history = this.webContents.navigationHistory.getAllEntries();
const activeIndex = history.getActiveIndex(); const activeIndex = this.webContents.navigationHistory.getActiveIndex();
for (const idx in history) { for (const idx in history) {
const url = history[idx]; const { notePath } = link.parseNavigationStateFromUrl(history[idx].url);
const parts = url.split("#"); if (!notePath) continue;
if (parts.length < 2) continue;
const notePathWithTab = parts[1];
const notePath = notePathWithTab.split("-")[0];
const title = await treeService.getNotePathTitle(notePath); const title = await treeService.getNotePathTitle(notePath);
items.push({ items.push({
title, title,
idx, command: idx,
uiIcon: uiIcon:
parseInt(idx) === activeIndex parseInt(idx) === activeIndex
? "bx bx-radio-circle-marked" // compare with type coercion! ? "bx bx-radio-circle-marked" // compare with type coercion!
@ -84,9 +75,10 @@ export default class HistoryNavigationButton extends ButtonFromNoteWidget {
x: e.pageX, x: e.pageX,
y: e.pageY, y: e.pageY,
items, items,
selectMenuItemHandler: (item: any) => { selectMenuItemHandler: (item: MenuCommandItem<string>) => {
if (item && item.idx && this.webContents) { if (item && item.command && this.webContents) {
this.webContents.goToIndex(item.idx); const idx = parseInt(item.command, 10);
this.webContents.navigationHistory.goToIndex(idx);
} }
} }
}); });

View File

@ -1,4 +1,4 @@
FROM node:22.18.0-bullseye-slim AS builder FROM node:22.19.0-bullseye-slim AS builder
RUN corepack enable RUN corepack enable
# Install native dependencies since we might be building cross-platform. # Install native dependencies since we might be building cross-platform.
@ -7,7 +7,7 @@ COPY ./docker/package.json ./docker/pnpm-workspace.yaml /usr/src/app/
# We have to use --no-frozen-lockfile due to CKEditor patches # We have to use --no-frozen-lockfile due to CKEditor patches
RUN pnpm install --no-frozen-lockfile --prod && pnpm rebuild RUN pnpm install --no-frozen-lockfile --prod && pnpm rebuild
FROM node:22.18.0-bullseye-slim FROM node:22.19.0-bullseye-slim
# Install only runtime dependencies # Install only runtime dependencies
RUN apt-get update && \ RUN apt-get update && \
apt-get install -y --no-install-recommends \ apt-get install -y --no-install-recommends \

View File

@ -1,4 +1,4 @@
FROM node:22.18.0-alpine AS builder FROM node:22.19.0-alpine AS builder
RUN corepack enable RUN corepack enable
# Install native dependencies since we might be building cross-platform. # Install native dependencies since we might be building cross-platform.
@ -7,7 +7,7 @@ COPY ./docker/package.json ./docker/pnpm-workspace.yaml /usr/src/app/
# We have to use --no-frozen-lockfile due to CKEditor patches # We have to use --no-frozen-lockfile due to CKEditor patches
RUN pnpm install --no-frozen-lockfile --prod && pnpm rebuild RUN pnpm install --no-frozen-lockfile --prod && pnpm rebuild
FROM node:22.18.0-alpine FROM node:22.19.0-alpine
# Install runtime dependencies # Install runtime dependencies
RUN apk add --no-cache su-exec shadow RUN apk add --no-cache su-exec shadow

View File

@ -1,4 +1,4 @@
FROM node:22.18.0-alpine AS builder FROM node:22.19.0-alpine AS builder
RUN corepack enable RUN corepack enable
# Install native dependencies since we might be building cross-platform. # Install native dependencies since we might be building cross-platform.
@ -7,7 +7,7 @@ COPY ./docker/package.json ./docker/pnpm-workspace.yaml /usr/src/app/
# We have to use --no-frozen-lockfile due to CKEditor patches # We have to use --no-frozen-lockfile due to CKEditor patches
RUN pnpm install --no-frozen-lockfile --prod && pnpm rebuild RUN pnpm install --no-frozen-lockfile --prod && pnpm rebuild
FROM node:22.18.0-alpine FROM node:22.19.0-alpine
# Create a non-root user with configurable UID/GID # Create a non-root user with configurable UID/GID
ARG USER=trilium ARG USER=trilium
ARG UID=1001 ARG UID=1001

View File

@ -1,4 +1,4 @@
FROM node:22.18.0-bullseye-slim AS builder FROM node:22.19.0-bullseye-slim AS builder
RUN corepack enable RUN corepack enable
# Install native dependencies since we might be building cross-platform. # Install native dependencies since we might be building cross-platform.
@ -7,7 +7,7 @@ COPY ./docker/package.json ./docker/pnpm-workspace.yaml /usr/src/app/
# We have to use --no-frozen-lockfile due to CKEditor patches # We have to use --no-frozen-lockfile due to CKEditor patches
RUN pnpm install --no-frozen-lockfile --prod && pnpm rebuild RUN pnpm install --no-frozen-lockfile --prod && pnpm rebuild
FROM node:22.18.0-bullseye-slim FROM node:22.19.0-bullseye-slim
# Create a non-root user with configurable UID/GID # Create a non-root user with configurable UID/GID
ARG USER=trilium ARG USER=trilium
ARG UID=1001 ARG UID=1001

View File

@ -12,7 +12,7 @@
"package": "pnpm build && bash scripts/build-server.sh", "package": "pnpm build && bash scripts/build-server.sh",
"test": "vitest", "test": "vitest",
"test-build": "vitest --config vitest.build.config.mts", "test-build": "vitest --config vitest.build.config.mts",
"start-prod": "pnpm build && cross-env TRILIUM_ENV=production TRILIUM_DATA_DIR=./apps/server/data TRILIUM_PORT=8082 node dist/main.cjs", "start-prod": "pnpm build && cross-env TRILIUM_ENV=production TRILIUM_DATA_DIR=data TRILIUM_PORT=8082 node dist/main.cjs",
"circular-deps": "dpdm -T src/**/*.ts --tree=false --warning=false --skip-dynamic-imports=circular", "circular-deps": "dpdm -T src/**/*.ts --tree=false --warning=false --skip-dynamic-imports=circular",
"docker-build-debian": "pnpm build && docker build . -t triliumnext-debian -f Dockerfile", "docker-build-debian": "pnpm build && docker build . -t triliumnext-debian -f Dockerfile",
"docker-build-alpine": "pnpm build && docker build . -t triliumnext-alpine -f Dockerfile.alpine", "docker-build-alpine": "pnpm build && docker build . -t triliumnext-alpine -f Dockerfile.alpine",
@ -76,7 +76,7 @@
"compression": "1.8.1", "compression": "1.8.1",
"cookie-parser": "1.4.7", "cookie-parser": "1.4.7",
"csrf-csrf": "3.2.2", "csrf-csrf": "3.2.2",
"dayjs": "1.11.14", "dayjs": "1.11.18",
"debounce": "2.2.0", "debounce": "2.2.0",
"debug": "4.4.1", "debug": "4.4.1",
"ejs": "3.1.10", "ejs": "3.1.10",

View File

@ -70,7 +70,7 @@
"url": "https://github.com/TriliumNext/Notes/issues" "url": "https://github.com/TriliumNext/Notes/issues"
}, },
"homepage": "https://github.com/TriliumNext/Notes#readme", "homepage": "https://github.com/TriliumNext/Notes#readme",
"packageManager": "pnpm@10.15.0", "packageManager": "pnpm@10.15.1",
"pnpm": { "pnpm": {
"patchedDependencies": { "patchedDependencies": {
"@ckeditor/ckeditor5-mention": "patches/@ckeditor__ckeditor5-mention.patch", "@ckeditor/ckeditor5-mention": "patches/@ckeditor__ckeditor5-mention.patch",

540
pnpm-lock.yaml generated

File diff suppressed because it is too large Load Diff