diff --git a/apps/client/package.json b/apps/client/package.json
index 97e0839a3..eb6b7cf3a 100644
--- a/apps/client/package.json
+++ b/apps/client/package.json
@@ -36,7 +36,7 @@
"draggabilly": "3.0.0",
"force-graph": "1.50.1",
"globals": "16.3.0",
- "i18next": "25.4.1",
+ "i18next": "25.4.2",
"i18next-http-backend": "3.0.2",
"jquery": "3.7.1",
"jquery.fancytree": "2.38.5",
diff --git a/apps/client/src/services/note_autocomplete.ts b/apps/client/src/services/note_autocomplete.ts
index 1138b191e..66031f482 100644
--- a/apps/client/src/services/note_autocomplete.ts
+++ b/apps/client/src/services/note_autocomplete.ts
@@ -36,6 +36,8 @@ export interface Suggestion {
commandId?: string;
commandDescription?: string;
commandShortcut?: string;
+ attributeSnippet?: string;
+ highlightedAttributeSnippet?: string;
}
export interface Options {
@@ -323,7 +325,33 @@ function initNoteAutocomplete($el: JQuery, options?: Options) {
html += '';
return html;
}
- return ` ${suggestion.highlightedNotePathTitle}`;
+ // Add special class for search-notes action
+ const actionClass = suggestion.action === "search-notes" ? "search-notes-action" : "";
+
+ // Choose appropriate icon based on action
+ let iconClass = suggestion.icon ?? "bx bx-note";
+ if (suggestion.action === "search-notes") {
+ iconClass = "bx bx-search";
+ } else if (suggestion.action === "create-note") {
+ iconClass = "bx bx-plus";
+ } else if (suggestion.action === "external-link") {
+ iconClass = "bx bx-link-external";
+ }
+
+ // Simplified HTML structure without nested divs
+ let html = ``;
+ html += ` `;
+ html += ``;
+ html += `${suggestion.highlightedNotePathTitle} `;
+
+ // Add attribute snippet inline if available
+ if (suggestion.highlightedAttributeSnippet) {
+ html += `${suggestion.highlightedAttributeSnippet} `;
+ }
+
+ html += ` `;
+ html += `
`;
+ return html;
}
},
// we can't cache identical searches because notes can be created / renamed, new recent notes can be added
diff --git a/apps/client/src/stylesheets/style.css b/apps/client/src/stylesheets/style.css
index 46ad3559d..290240b84 100644
--- a/apps/client/src/stylesheets/style.css
+++ b/apps/client/src/stylesheets/style.css
@@ -1795,20 +1795,69 @@ textarea {
font-size: 1em;
}
+.jump-to-note-dialog .modal-dialog {
+ max-width: 900px;
+ width: 90%;
+}
+
.jump-to-note-dialog .modal-header {
align-items: center;
}
.jump-to-note-dialog .modal-body {
padding: 0;
+ min-height: 200px;
}
.jump-to-note-results .aa-dropdown-menu {
- max-height: 40vh;
+ max-height: calc(80vh - 200px);
+ width: 100%;
+ max-width: none;
+ overflow-y: auto;
+ overflow-x: hidden;
+ text-overflow: ellipsis;
+ box-shadow: none;
+}
+
+.jump-to-note-results {
+ width: 100%;
}
.jump-to-note-results .aa-suggestions {
- padding: 1rem;
+ padding: 0;
+ width: 100%;
+}
+
+.jump-to-note-results .aa-dropdown-menu .aa-suggestion {
+ white-space: normal;
+ padding: 2px 12px !important;
+ line-height: 1.1;
+ position: relative;
+ border-radius: 0;
+ margin: 0 !important;
+}
+
+.jump-to-note-results .note-suggestion {
+ margin: 0;
+ padding: 0;
+ line-height: 1;
+}
+
+.jump-to-note-results .aa-suggestion:not(:last-child)::after {
+ display: none; /* Remove dividers for more compact look */
+}
+
+.jump-to-note-results .aa-suggestion:last-child::after {
+ display: none;
+}
+
+.jump-to-note-results .aa-suggestion.disabled::after {
+ display: none;
+}
+
+.jump-to-note-results .aa-dropdown-menu .aa-suggestion:hover,
+.jump-to-note-results .aa-dropdown-menu .aa-cursor {
+ background-color: var(--hover-item-background-color, #f8f9fa);
}
/* Command palette styling */
@@ -1826,8 +1875,24 @@ textarea {
.jump-to-note-dialog .aa-cursor .command-suggestion,
.jump-to-note-dialog .aa-suggestion:hover .command-suggestion {
- border-left-color: var(--link-color);
- background-color: var(--hover-background-color);
+ background-color: transparent;
+}
+
+.jump-to-note-dialog .show-in-full-search,
+.jump-to-note-results .show-in-full-search {
+ border-top: 1px solid var(--main-border-color);
+ padding-top: 12px;
+ margin-top: 12px;
+}
+
+.jump-to-note-results .aa-suggestion .search-notes-action {
+ border-top: 1px solid var(--main-border-color);
+ margin-top: 8px;
+ padding-top: 8px;
+}
+
+.jump-to-note-results .aa-suggestion:has(.search-notes-action)::after {
+ display: none;
}
.jump-to-note-dialog .command-icon {
@@ -2284,7 +2349,8 @@ footer.webview-footer button {
/* Search result highlighting */
.search-result-title b,
-.search-result-content b {
+.search-result-content b,
+.search-result-attributes b {
font-weight: 900;
color: var(--admonition-warning-accent-color);
}
diff --git a/apps/client/src/stylesheets/theme-next/base.css b/apps/client/src/stylesheets/theme-next/base.css
index 27fbf3557..6ab16a456 100644
--- a/apps/client/src/stylesheets/theme-next/base.css
+++ b/apps/client/src/stylesheets/theme-next/base.css
@@ -538,8 +538,8 @@ body.mobile .dropdown-menu .dropdown-item.submenu-open .dropdown-toggle::after {
/* List item */
.jump-to-note-dialog .aa-suggestions div,
.note-detail-empty .aa-suggestions div {
- border-radius: 6px;
- padding: 6px 12px;
+ border-radius: 0;
+ padding: 12px 16px;
color: var(--menu-text-color);
cursor: default;
}
diff --git a/apps/client/src/translations/cn/translation.json b/apps/client/src/translations/cn/translation.json
index 0f6800793..e9be1e285 100644
--- a/apps/client/src/translations/cn/translation.json
+++ b/apps/client/src/translations/cn/translation.json
@@ -2014,5 +2014,11 @@
},
"units": {
"percentage": "%"
+ },
+ "ui-performance": {
+ "title": "性能",
+ "enable-motion": "启用过渡和动画",
+ "enable-shadows": "启用阴影",
+ "enable-backdrop-effects": "启用菜单、弹窗和面板的背景效果"
}
}
diff --git a/apps/client/src/translations/de/translation.json b/apps/client/src/translations/de/translation.json
index 0d2c74206..4a5c58fd5 100644
--- a/apps/client/src/translations/de/translation.json
+++ b/apps/client/src/translations/de/translation.json
@@ -202,7 +202,8 @@
"okButton": "OK"
},
"jump_to_note": {
- "search_button": "Suche im Volltext"
+ "search_button": "Suche im Volltext",
+ "search_placeholder": "Suche nach Notiz anhand ihres Titels oder gib > ein für Kommandos..."
},
"markdown_import": {
"dialog_title": "Markdown-Import",
@@ -217,21 +218,26 @@
"search_placeholder": "Suche nach einer Notiz anhand ihres Namens",
"move_button": "Zur ausgewählten Notiz wechseln",
"error_no_path": "Kein Weg, auf den man sich bewegen kann.",
- "move_success_message": "Ausgewählte Notizen wurden verschoben"
+ "move_success_message": "Ausgewählte Notizen wurden verschoben in "
},
"note_type_chooser": {
"modal_title": "Wähle den Notiztyp aus",
"modal_body": "Wähle den Notiztyp / die Vorlage der neuen Notiz:",
- "templates": "Vorlagen"
+ "templates": "Vorlagen",
+ "change_path_prompt": "Ändern wo die neue Notiz erzeugt wird:",
+ "search_placeholder": "Durchsuche Pfad nach Namen (Standard falls leer)",
+ "builtin_templates": "Eingebaute Vorlage"
},
"password_not_set": {
"title": "Das Passwort ist nicht festgelegt",
- "body1": "Geschützte Notizen werden mit einem Benutzerpasswort verschlüsselt, es wurde jedoch noch kein Passwort festgelegt."
+ "body1": "Geschützte Notizen werden mit einem Benutzerpasswort verschlüsselt, es wurde jedoch noch kein Passwort festgelegt.",
+ "body2": "Um Notizen zu schützen, klicke den unteren Button um den Optionsdialog zu öffnen und dein Passwort festzulegen.",
+ "go_to_password_options": "Gehe zu Passwortoptionen"
},
"prompt": {
- "title": "Prompt",
+ "title": "Eingabeaufforderung",
"ok": "OK",
- "defaultTitle": "Prompt"
+ "defaultTitle": "Eingabeaufforderung"
},
"protected_session_password": {
"modal_title": "Geschützte Sitzung",
@@ -265,10 +271,12 @@
"maximum_revisions": "Maximale Revisionen für aktuelle Notiz: {{number}}.",
"settings": "Einstellungen für Notizrevisionen",
"download_button": "Herunterladen",
- "mime": "MIME:",
+ "mime": "MIME: ",
"file_size": "Dateigröße:",
"preview": "Vorschau:",
- "preview_not_available": "Für diesen Notiztyp ist keine Vorschau verfügbar."
+ "preview_not_available": "Für diesen Notiztyp ist keine Vorschau verfügbar.",
+ "restore_button": "Wiederherstellen",
+ "delete_button": "Löschen"
},
"sort_child_notes": {
"sort_children_by": "Unternotizen sortieren nach...",
@@ -374,7 +382,7 @@
"bookmark_folder": "Notizen mit dieser Bezeichnung werden in den Lesezeichen als Ordner angezeigt (und ermöglichen den Zugriff auf ihre untergeordneten Ordner).",
"share_hidden_from_tree": "Diese Notiz ist im linken Navigationsbaum ausgeblendet, kann aber weiterhin über ihre URL aufgerufen werden",
"share_external_link": "Die Notiz dient als Link zu einer externen Website im Freigabebaum",
- "share_alias": "Lege einen Alias fest, unter dem die Notiz unter https://your_trilium_host/share/[dein_alias] verfügbar sein wird.",
+ "share_alias": "Lege einen Alias fest, mit dem die Notiz unter https://your_trilium_host/share/[dein_alias] verfügbar sein wird.",
"share_omit_default_css": "Das Standard-CSS für die Freigabeseite wird weggelassen. Verwende es, wenn du umfangreiche Stylingänderungen vornimmst.",
"share_root": "Markiert eine Notiz, die im /share-Root bereitgestellt wird.",
"share_description": "Definiere Text, der dem HTML-Meta-Tag zur Beschreibung hinzugefügt werden soll",
@@ -390,7 +398,7 @@
"color": "Definiert die Farbe der Notiz im Notizbaum, in Links usw. Verwende einen beliebigen gültigen CSS-Farbwert wie „rot“ oder #a13d5f",
"keyboard_shortcut": "Definiert eine Tastenkombination, die sofort zu dieser Notiz springt. Beispiel: „Strg+Alt+E“. Erfordert ein Neuladen des Frontends, damit die Änderung wirksam wird.",
"keep_current_hoisting": "Das Öffnen dieses Links ändert das Hochziehen nicht, selbst wenn die Notiz im aktuell hochgezogenen Unterbaum nicht angezeigt werden kann.",
- "execute_button": "Titel der Schaltfläche, die die aktuelle Codenotiz ausführt",
+ "execute_button": "Titel der Schaltfläche, welche die aktuelle Codenotiz ausführt",
"execute_description": "Längere Beschreibung der aktuellen Codenotiz, die zusammen mit der Schaltfläche „Ausführen“ angezeigt wird",
"exclude_from_note_map": "Notizen mit dieser Bezeichnung werden in der Notizenkarte ausgeblendet",
"new_notes_on_top": "Neue Notizen werden oben in der übergeordneten Notiz erstellt, nicht unten.",
@@ -405,7 +413,7 @@
"run_on_branch_change": "wird ausgeführt, wenn ein Zweig aktualisiert wird.",
"run_on_branch_deletion": "wird ausgeführt, wenn ein Zweig gelöscht wird. Der Zweig ist eine Verknüpfung zwischen der übergeordneten Notiz und der untergeordneten Notiz und wird z. B. gelöscht. beim Verschieben der Notiz (alter Zweig/Link wird gelöscht).",
"run_on_attribute_creation": "wird ausgeführt, wenn für die Notiz ein neues Attribut erstellt wird, das diese Beziehung definiert",
- "run_on_attribute_change": "wird ausgeführt, wenn das Attribut einer Notiz geändert wird, die diese Beziehung definiert. Dies wird auch ausgelöst, wenn das Attribut gelöscht wird",
+ "run_on_attribute_change": " wird ausgeführt, wenn das Attribut einer Notiz geändert wird, die diese Beziehung definiert. Dies wird auch ausgelöst, wenn das Attribut gelöscht wird",
"relation_template": "Die Attribute der Notiz werden auch ohne eine Eltern-Kind-Beziehung vererbt. Der Inhalt und der Unterbaum der Notiz werden den Instanznotizen hinzugefügt, wenn sie leer sind. Einzelheiten findest du in der Dokumentation.",
"inherit": "Die Attribute einer Notiz werden auch ohne eine Eltern-Kind-Beziehung vererbt. Ein ähnliches Konzept findest du unter Vorlagenbeziehung. Siehe Attributvererbung in der Dokumentation.",
"render_note": "Notizen vom Typ \"HTML-Notiz rendern\" werden mit einer Code-Notiz (HTML oder Skript) gerendert, und es ist notwendig, über diese Beziehung anzugeben, welche Notiz gerendert werden soll.",
@@ -418,7 +426,8 @@
"other_notes_with_name": "Other notes with {{attributeType}} name \"{{attributeName}}\"",
"and_more": "... und {{count}} mehr.",
"print_landscape": "Beim Export als PDF, wird die Seitenausrichtung Querformat anstatt Hochformat verwendet.",
- "print_page_size": "Beim Export als PDF, wird die Größe der Seite angepasst. Unterstützte Größen: A0
, A1
, A2
, A3
, A4
, A5
, A6
, Legal
, Letter
, Tabloid
, Ledger
."
+ "print_page_size": "Beim Export als PDF, wird die Größe der Seite angepasst. Unterstützte Größen: A0
, A1
, A2
, A3
, A4
, A5
, A6
, Legal
, Letter
, Tabloid
, Ledger
.",
+ "color_type": "Farbe"
},
"attribute_editor": {
"help_text_body1": "Um ein Label hinzuzufügen, gebe einfach z.B. ein. #rock
oder wenn du auch einen Wert hinzufügen möchten, dann z.B. #year = 2024
",
@@ -492,7 +501,7 @@
"on_all_matched_notes": "Auf allen übereinstimmenden Notizen",
"move_note_new_parent": "Verschiebe die Notiz in die neue übergeordnete Notiz, wenn die Notiz nur eine übergeordnete Notiz hat (d. h. der alte Zweig wird entfernt und ein neuer Zweig in die neue übergeordnete Notiz erstellt).",
"clone_note_new_parent": "Notiz auf die neue übergeordnete Notiz klonen, wenn die Notiz mehrere Klone/Zweige hat (es ist nicht klar, welcher Zweig entfernt werden soll)",
- "nothing_will_happen": "Es passiert nichts, wenn die Notiz nicht zur Zielnotiz verschoben werden kann (d. h. dies würde einen Baumzyklus erzeugen)."
+ "nothing_will_happen": "Es passiert nichts, wenn die Notiz nicht zur Zielnotiz verschoben werden kann (z.B. wenn dies einen Kreislauf in der Baumstruktur erzeugen würde)."
},
"rename_note": {
"rename_note": "Notiz umbenennen",
@@ -503,7 +512,7 @@
"example_note": "Notiz
– alle übereinstimmenden Notizen werden in „Notiz“ umbenannt.",
"example_new_title": "NEU: ${note.title}
– Übereinstimmende Notiztitel erhalten das Präfix „NEU:“",
"example_date_prefix": "${note.dateCreatedObj.format('MM-DD:')}: ${note.title}
– übereinstimmende Notizen werden mit dem Erstellungsmonat und -datum der Notiz vorangestellt",
- "api_docs": "Siehe API-Dokumente für Notiz und seinen dateCreatedObj / utcDateCreatedObj-Eigenschaften für Details."
+ "api_docs": "Siehe API-Dokumente für Notiz und seinen dateCreatedObj / utcDateCreatedObj properties für Details."
},
"add_relation": {
"add_relation": "Beziehung hinzufügen",
@@ -577,7 +586,8 @@
"september": "September",
"october": "Oktober",
"november": "November",
- "december": "Dezember"
+ "december": "Dezember",
+ "cannot_find_week_note": "Wochennotiz kann nicht gefunden werden"
},
"close_pane_button": {
"close_this_pane": "Schließe diesen Bereich"
@@ -699,8 +709,8 @@
"zoom_out_title": "Herauszoomen"
},
"zpetne_odkazy": {
- "backlink": "{{count}} Backlink",
- "backlinks": "{{count}} Backlinks",
+ "backlink": "{{count}} Rückverlinkung",
+ "backlinks": "{{count}} Rückverlinkungen",
"relation": "Beziehung"
},
"mobile_detail_menu": {
@@ -718,7 +728,8 @@
"basic_properties": {
"note_type": "Notiztyp",
"editable": "Bearbeitbar",
- "basic_properties": "Grundlegende Eigenschaften"
+ "basic_properties": "Grundlegende Eigenschaften",
+ "language": "Sprache"
},
"book_properties": {
"view_type": "Ansichtstyp",
@@ -729,7 +740,11 @@
"collapse": "Einklappen",
"expand": "Ausklappen",
"invalid_view_type": "Ungültiger Ansichtstyp „{{type}}“",
- "calendar": "Kalender"
+ "calendar": "Kalender",
+ "book_properties": "Sammlungseigenschaften",
+ "table": "Tabelle",
+ "geo-map": "Weltkarte",
+ "board": "Tafel"
},
"edited_notes": {
"no_edited_notes_found": "An diesem Tag wurden noch keine Notizen bearbeitet...",
@@ -805,7 +820,9 @@
"unknown_label_type": "Unbekannter Labeltyp „{{type}}“",
"unknown_attribute_type": "Unbekannter Attributtyp „{{type}}“",
"add_new_attribute": "Neues Attribut hinzufügen",
- "remove_this_attribute": "Entferne dieses Attribut"
+ "remove_this_attribute": "Entferne dieses Attribut",
+ "unset-field-placeholder": "nicht gesetzt",
+ "remove_color": "Entferne Farblabel"
},
"script_executor": {
"query": "Abfrage",
@@ -917,7 +934,7 @@
"attachment_detail": {
"open_help_page": "Hilfeseite zu Anhängen öffnen",
"owning_note": "Eigentümernotiz: ",
- "you_can_also_open": ", Du kannst auch das öffnen",
+ "you_can_also_open": ", Du kannst auch das öffnen ",
"list_of_all_attachments": "Liste aller Anhänge",
"attachment_deleted": "Dieser Anhang wurde gelöscht."
},
@@ -942,7 +959,8 @@
"enter_workspace": "Betrete den Arbeitsbereich {{title}}"
},
"file": {
- "file_preview_not_available": "Für dieses Dateiformat ist keine Dateivorschau verfügbar."
+ "file_preview_not_available": "Für dieses Dateiformat ist keine Dateivorschau verfügbar.",
+ "too_big": "Die Vorschau zeigt aus Effizienzgründen nur die ersten {{maxNumChars}} Zeichen der Datei an. Lade die Datei herunter und öffne sie extern um den gesamten Inhalt zu sehen."
},
"protected_session": {
"enter_password_instruction": "Um die geschützte Notiz anzuzeigen, musst du dein Passwort eingeben:",
@@ -981,7 +999,7 @@
"web_view": {
"web_view": "Webansicht",
"embed_websites": "Notiz vom Typ Web View ermöglicht das Einbetten von Websites in Trilium.",
- "create_label": "To start, please create a label with a URL address you want to embed, e.g. #webViewSrc=\"https://www.google.com\""
+ "create_label": "Um zu beginnen, erstelle bitte ein Label mit einer URL-Adresse, die eingebettet werden soll, z. B. #webViewSrc=\"https://www.google.com\""
},
"backend_log": {
"refresh": "Aktualisieren"
@@ -1007,7 +1025,7 @@
"error_creating_anonymized_database": "Die anonymisierte Datenbank konnte nicht erstellt werden. Überprüfe die Backend-Protokolle auf Details",
"successfully_created_fully_anonymized_database": "Vollständig anonymisierte Datenbank in {{anonymizedFilePath}} erstellt",
"successfully_created_lightly_anonymized_database": "Leicht anonymisierte Datenbank in {{anonymizedFilePath}} erstellt",
- "no_anonymized_database_yet": "Noch keine anonymisierte Datenbank"
+ "no_anonymized_database_yet": "Noch keine anonymisierte Datenbank."
},
"database_integrity_check": {
"title": "Datenbankintegritätsprüfung",
@@ -1063,7 +1081,8 @@
"max_width_label": "Maximale Inhaltsbreite in Pixel",
"apply_changes_description": "Um Änderungen an der Inhaltsbreite anzuwenden, klicke auf",
"reload_button": "Frontend neu laden",
- "reload_description": "Änderungen an den Darstellungsoptionen"
+ "reload_description": "Änderungen an den Darstellungsoptionen",
+ "max_width_unit": "Pixel"
},
"native_title_bar": {
"title": "Native Titelleiste (App-Neustart erforderlich)",
@@ -1086,7 +1105,10 @@
"layout-vertical-title": "Vertikal",
"layout-horizontal-title": "Horizontal",
"layout-vertical-description": "Startleiste ist auf der linken Seite (standard)",
- "layout-horizontal-description": "Startleiste ist unter der Tableiste. Die Tableiste wird dadurch auf die ganze Breite erweitert."
+ "layout-horizontal-description": "Startleiste ist unter der Tableiste. Die Tableiste wird dadurch auf die ganze Breite erweitert.",
+ "auto_theme": "Alt (Folge dem Farbschema des Systems)",
+ "light_theme": "Alt (Hell)",
+ "dark_theme": "Alt (Dunkel)"
},
"zoom_factor": {
"title": "Zoomfaktor (nur Desktop-Build)",
@@ -1119,7 +1141,7 @@
"attachment_erasure_timeout": {
"attachment_erasure_timeout": "Zeitüberschreitung beim Löschen von Anhängen",
"attachment_auto_deletion_description": "Anhänge werden automatisch gelöscht (und gelöscht), wenn sie nach einer definierten Zeitspanne nicht mehr in ihrer Notiz referenziert werden.",
- "erase_attachments_after": "Erase unused attachments after:",
+ "erase_attachments_after": "Nicht verwendete Anhänge löschen nach:",
"manual_erasing_description": "Du kannst das Löschen auch manuell auslösen (ohne Berücksichtigung des oben definierten Timeouts):",
"erase_unused_attachments_now": "Lösche jetzt nicht verwendete Anhangnotizen",
"unused_attachments_erased": "Nicht verwendete Anhänge wurden gelöscht."
@@ -1130,7 +1152,7 @@
},
"note_erasure_timeout": {
"note_erasure_timeout_title": "Beachte das Zeitlimit für die Löschung",
- "note_erasure_description": "Deleted notes (and attributes, revisions...) are at first only marked as deleted and it is possible to recover them from Recent Notes dialog. After a period of time, deleted notes are \"erased\" which means their content is not recoverable anymore. This setting allows you to configure the length of the period between deleting and erasing the note.",
+ "note_erasure_description": "Gelöschte Notizen (und Attribute, Notizrevisionen...) werden zunächst nur als gelöscht markiert und können über den Dialog „Zuletzt verwendete Notizen” wiederhergestellt werden. Nach einer bestimmten Zeit werden gelöschte Notizen „gelöscht”, was bedeutet, dass ihr Inhalt nicht mehr wiederhergestellt werden kann. Mit dieser Einstellung können Sie die Zeitspanne zwischen dem Löschen und dem endgültigen Löschen der Notiz festlegen.",
"erase_notes_after": "Notizen löschen nach:",
"manual_erasing_description": "Du kannst das Löschen auch manuell auslösen (ohne Berücksichtigung des oben definierten Timeouts):",
"erase_deleted_notes_now": "Jetzt gelöschte Notizen löschen",
@@ -1361,7 +1383,7 @@
"duplicate": "Duplizieren",
"export": "Exportieren",
"import-into-note": "In Notiz importieren",
- "apply-bulk-actions": "Massenaktionen ausführen",
+ "apply-bulk-actions": "Massenaktionen anwenden",
"converted-to-attachments": "{{count}} Notizen wurden als Anhang konvertiert.",
"convert-to-attachment-confirm": "Bist du sicher, dass du die ausgewählten Notizen in Anhänge ihrer übergeordneten Notizen umwandeln möchtest?"
},
@@ -1377,7 +1399,7 @@
"relation-map": "Beziehungskarte",
"note-map": "Notizkarte",
"render-note": "Render Notiz",
- "mermaid-diagram": "Mermaid Diagram",
+ "mermaid-diagram": "Mermaid Diagramm",
"canvas": "Canvas",
"web-view": "Webansicht",
"mind-map": "Mind Map",
@@ -1387,7 +1409,7 @@
"doc": "Dokument",
"widget": "Widget",
"confirm-change": "Es is nicht empfehlenswert den Notiz-Typ zu ändern, wenn der Inhalt der Notiz nicht leer ist. Möchtest du dennoch fortfahren?",
- "geo-map": "Geo Map",
+ "geo-map": "Geo-Karte",
"beta-feature": "Beta"
},
"protect_note": {
@@ -1561,11 +1583,11 @@
"label": "Format Toolbar",
"floating": {
"title": "Schwebend",
- "description": "Werkzeuge erscheinen in Cursornähe"
+ "description": "Werkzeuge erscheinen in Cursornähe;"
},
"fixed": {
"title": "Fixiert",
- "description": "Werkzeuge erscheinen im \"Format\" Tab"
+ "description": "Werkzeuge erscheinen im \"Format\" Tab."
},
"multiline-toolbar": "Toolbar wenn nötig in mehreren Zeilen darstellen."
}
@@ -1631,5 +1653,49 @@
},
"modal": {
"close": "Schließen"
+ },
+ "ai_llm": {
+ "n_notes_queued": "{{ count }} Notiz zur Indizierung vorgemerkt",
+ "n_notes_queued_plural": "{{ count }} Notizen zur Indizierung vorgemerkt",
+ "notes_indexed": "{{ count }} Notiz indiziert",
+ "notes_indexed_plural": "{{ count }} Notizen indiziert",
+ "not_started": "Nicht gestartet",
+ "title": "KI Einstellungen",
+ "processed_notes": "Verarbeitete Notizen",
+ "total_notes": "Gesamt Notizen",
+ "progress": "Fortschritt",
+ "queued_notes": "Eingereihte Notizen",
+ "failed_notes": "Fehlgeschlagenen Notizen",
+ "last_processed": "Zuletzt verarbeitet",
+ "refresh_stats": "Statistiken neu laden",
+ "enable_ai_features": "Aktiviere KI/LLM Funktionen",
+ "enable_ai_description": "Aktiviere KI-Funktionen wie Notizzusammenfassungen, Inhaltserzeugung und andere LLM-Funktionen",
+ "openai_tab": "OpenAI",
+ "anthropic_tab": "Anthropic",
+ "voyage_tab": "Voyage AI",
+ "ollama_tab": "Ollama",
+ "enable_ai": "Aktiviere KI/LLM Funktionen",
+ "enable_ai_desc": "Aktiviere KI-Funktionen wie Notizzusammenfassungen, Inhaltserzeugung und andere LLM-Funktionen",
+ "provider_configuration": "KI-Anbieterkonfiguration",
+ "provider_precedence": "Anbieter Priorität",
+ "provider_precedence_description": "Komma-getrennte Liste von Anbieter in der Reihenfolge ihrer Priorität (z.B. 'openai, anthropic,ollama')",
+ "temperature": "Temperatur",
+ "temperature_description": "Regelt die Zufälligkeit in Antworten (0 = deterministisch, 2 = maximale Zufälligkeit)",
+ "system_prompt": "Systemaufforderung",
+ "system_prompt_description": "Standard Systemaufforderung für alle KI-Interaktionen",
+ "openai_configuration": "OpenAI Konfiguration",
+ "openai_settings": "OpenAI Einstellungen",
+ "api_key": "API Schlüssel",
+ "url": "Basis-URL",
+ "model": "Modell"
+ },
+ "zen_mode": {
+ "button_exit": "Verlasse Zen Modus"
+ },
+ "ui-performance": {
+ "title": "Leistung",
+ "enable-motion": "Aktiviere Übergänge und Animationen",
+ "enable-shadows": "Aktiviere Schatten",
+ "enable-backdrop-effects": "Aktiviere Hintergrundeffekte für Menüs, Pop-up Fenster und Panele"
}
}
diff --git a/apps/client/src/translations/fr/translation.json b/apps/client/src/translations/fr/translation.json
index 37cd2e061..e085e10e8 100644
--- a/apps/client/src/translations/fr/translation.json
+++ b/apps/client/src/translations/fr/translation.json
@@ -1680,6 +1680,16 @@
"n_notes_queued_2": "",
"notes_indexed_0": "{{ count }} note indexée",
"notes_indexed_1": "{{ count }} notes indexées",
- "notes_indexed_2": ""
+ "notes_indexed_2": "",
+ "anthropic_url_description": "URL de base pour l'API Anthropic (par défaut : https ://api.anthropic.com)",
+ "anthropic_model_description": "Modèles Anthropic Claude pour la complétion",
+ "voyage_settings": "Réglages d'IA Voyage",
+ "ollama_settings": "Réglages Ollama",
+ "ollama_url_description": "URL pour l'API Ollama (par défaut: http://localhost:11434)",
+ "ollama_model_description": "Model Ollama utilisé pour la complétion",
+ "anthropic_configuration": "Configuration Anthropic",
+ "voyage_configuration": "Configuration IA Voyage",
+ "voyage_url_description": "Défaut: https://api.voyageai.com/v1",
+ "ollama_configuration": "Configuration Ollama"
}
}
diff --git a/apps/client/src/translations/ko/translation.json b/apps/client/src/translations/ko/translation.json
index 0967ef424..3a7608169 100644
--- a/apps/client/src/translations/ko/translation.json
+++ b/apps/client/src/translations/ko/translation.json
@@ -1 +1,29 @@
-{}
+{
+ "about": {
+ "title": "Trilium Notes에 대해서",
+ "homepage": "홈페이지:",
+ "app_version": "앱 버전:",
+ "db_version": "DB 버전:",
+ "sync_version": "동기화 버전:",
+ "build_date": "빌드 날짜:",
+ "build_revision": "빌드 리비전:",
+ "data_directory": "데이터 경로:"
+ },
+ "toast": {
+ "critical-error": {
+ "title": "심각한 오류",
+ "message": "클라이언트 애플리케이션 시작 도중 심각한 오류가 발생했습니다:\n\n{{message}}\n\n이는 스크립트가 예기치 않게 실패하면서 발생한 것일 수 있습니다. 애플리케이션을 안전 모드로 시작한 뒤 문제를 해결해 보세요."
+ },
+ "widget-error": {
+ "title": "위젯 초기화 실패"
+ }
+ },
+ "add_link": {
+ "add_link": "링크 추가",
+ "note": "노트",
+ "search_note": "이름으로 노트 검색하기"
+ },
+ "branch_prefix": {
+ "save": "저장"
+ }
+}
diff --git a/apps/client/src/translations/nl/translation.json b/apps/client/src/translations/nl/translation.json
new file mode 100644
index 000000000..14e853dd6
--- /dev/null
+++ b/apps/client/src/translations/nl/translation.json
@@ -0,0 +1,9 @@
+{
+ "about": {
+ "title": "Over Trilium Notes",
+ "homepage": "Homepagina:",
+ "app_version": "App versie:",
+ "db_version": "DB Versie:",
+ "sync_version": "Sync Versie:"
+ }
+}
diff --git a/apps/client/src/translations/ru/translation.json b/apps/client/src/translations/ru/translation.json
index 967634d2a..480c12b2b 100644
--- a/apps/client/src/translations/ru/translation.json
+++ b/apps/client/src/translations/ru/translation.json
@@ -2018,5 +2018,11 @@
},
"book": {
"no_children_help": "В этой коллекции нет дочерних заметок, поэтому отображать нечего. Подробности см. на wiki ."
+ },
+ "ui-performance": {
+ "title": "Производительность",
+ "enable-motion": "Включить визуальные эффекты и анимации",
+ "enable-shadows": "Включить тени",
+ "enable-backdrop-effects": "Включить эффекты размытия фона меню, всплывающих окон и панелей"
}
}
diff --git a/apps/client/src/translations/tw/translation.json b/apps/client/src/translations/tw/translation.json
index 6dbde5a3e..4b11d9e6a 100644
--- a/apps/client/src/translations/tw/translation.json
+++ b/apps/client/src/translations/tw/translation.json
@@ -1643,13 +1643,13 @@
"failed_notes": "失敗筆記",
"last_processed": "最後處理時間",
"refresh_stats": "更新統計資料",
- "enable_ai_features": "啟用 AI / LLM 功能",
+ "enable_ai_features": "啟用 AI/LLM 功能",
"enable_ai_description": "啟用筆記摘要、內容生成等 AI 功能及其他 LLM 能力",
"openai_tab": "OpenAI",
"anthropic_tab": "Anthropic",
"voyage_tab": "Voyage AI",
"ollama_tab": "Ollama",
- "enable_ai": "啟用 AI / LLM 功能",
+ "enable_ai": "啟用 AI/LLM 功能",
"enable_ai_desc": "啟用筆記摘要、內容生成等 AI 功能及其他 LLM 能力",
"provider_configuration": "AI 提供者設定",
"provider_precedence": "提供者優先級",
@@ -2014,5 +2014,11 @@
},
"units": {
"percentage": "%"
+ },
+ "ui-performance": {
+ "title": "效能",
+ "enable-motion": "啟用轉場與動畫",
+ "enable-shadows": "啟用陰影",
+ "enable-backdrop-effects": "啟用選單、彈出視窗和面板的背景特效"
}
}
diff --git a/apps/client/src/widgets/dialogs/jump_to_note.tsx b/apps/client/src/widgets/dialogs/jump_to_note.tsx
index cb13e078e..0b4306bfe 100644
--- a/apps/client/src/widgets/dialogs/jump_to_note.tsx
+++ b/apps/client/src/widgets/dialogs/jump_to_note.tsx
@@ -8,6 +8,7 @@ import appContext from "../../components/app_context";
import commandRegistry from "../../services/command_registry";
import { refToJQuerySelector } from "../react/react_utils";
import { useTriliumEvent } from "../react/hooks";
+import shortcutService from "../../services/shortcuts";
const KEEP_LAST_SEARCH_FOR_X_SECONDS = 120;
@@ -82,6 +83,27 @@ export default function JumpToNoteDialogComponent() {
$autoComplete
.trigger("focus")
.trigger("select");
+
+ // Add keyboard shortcut for full search
+ shortcutService.bindElShortcut($autoComplete, "ctrl+return", () => {
+ if (!isCommandMode) {
+ showInFullSearch();
+ }
+ });
+ }
+
+ async function showInFullSearch() {
+ try {
+ setShown(false);
+ const searchString = actualText.current?.trim();
+ if (searchString && !searchString.startsWith(">")) {
+ await appContext.triggerCommand("searchNotes", {
+ searchString
+ });
+ }
+ } catch (error) {
+ console.error("Failed to trigger full search:", error);
+ }
}
return (
@@ -107,7 +129,12 @@ export default function JumpToNoteDialogComponent() {
/>}
onShown={onShown}
onHidden={() => setShown(false)}
- footer={!isCommandMode && }
+ footer={!isCommandMode && }
show={shown}
>
diff --git a/apps/client/src/widgets/view_widgets/calendar_view.ts b/apps/client/src/widgets/view_widgets/calendar_view.ts
index febac6f4d..8da330ed8 100644
--- a/apps/client/src/widgets/view_widgets/calendar_view.ts
+++ b/apps/client/src/widgets/view_widgets/calendar_view.ts
@@ -676,7 +676,7 @@ export async function getFullCalendarLocale(locale: string) {
return (await import("@fullcalendar/core/locales/ru")).default;
case "ja":
return (await import("@fullcalendar/core/locales/ja")).default;
- case "pt_BR":
+ case "pt_br":
return (await import("@fullcalendar/core/locales/pt-br")).default;
case "uk":
return (await import("@fullcalendar/core/locales/uk")).default;
diff --git a/apps/server/package.json b/apps/server/package.json
index 45d959b5b..d7b196499 100644
--- a/apps/server/package.json
+++ b/apps/server/package.json
@@ -74,7 +74,7 @@
"html2plaintext": "2.1.4",
"http-proxy-agent": "7.0.2",
"https-proxy-agent": "7.0.6",
- "i18next": "25.4.1",
+ "i18next": "25.4.2",
"i18next-fs-backend": "2.6.0",
"image-type": "6.0.0",
"ini": "5.0.0",
diff --git a/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Advanced Usage/Configuration (config.ini or e.html b/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Advanced Usage/Configuration (config.ini or e.html
index 46abd1e24..c5d9d47b3 100644
--- a/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Advanced Usage/Configuration (config.ini or e.html
+++ b/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Advanced Usage/Configuration (config.ini or e.html
@@ -1,27 +1,335 @@
-Trilium supports configuration via a file named config.ini
and
- environment variables. Please review the file named config-sample.ini in
- the Trilium repository
- to see what values are supported.
-You can provide the same values via environment variables instead of the config.ini
file,
- and these environment variables use the following format:
+Trilium supports configuration via a file named config.ini
and environment variables. This document provides a comprehensive reference for all configuration options.
+
+Configuration Precedence
+Configuration values are loaded in the following order of precedence (highest to lowest):
- Environment variables should be prefixed with TRILIUM_
and
- use underscores to represent the INI section structure.
- The format is: TRILIUM_<SECTION>_<KEY>=<VALUE>
-
- The environment variables will override any matching values from config.ini
+ Environment variables (checked first)
+ config.ini file values
+ Default values
-For example, if you have this in your config.ini:
[Network]
-host=localhost
-port=8080
-You can override these values using environment variables:
TRILIUM_NETWORK_HOST=0.0.0.0
-TRILIUM_NETWORK_PORT=9000
-The code will:
-
- First load the config.ini
file as before
- Then scan all environment variables for ones starting with TRILIUM_
-
- Parse these variables into section/key pairs
- Merge them with the config from the file, with environment variables taking
- precedence
-
\ No newline at end of file
+
+Environment Variable Patterns
+Trilium supports multiple environment variable patterns for flexibility. The primary pattern is: TRILIUM_[SECTION]_[KEY]
+Where:
+
+ SECTION
is the INI section name in UPPERCASE
+ KEY
is the camelCase configuration key converted to UPPERCASE (e.g., instanceName
→ INSTANCENAME
)
+
+Additionally, shorter aliases are available for common configurations (see Alternative Variables section below).
+
+Environment Variable Reference
+
+General Section
+
+
+
+ Environment Variable
+ Type
+ Default
+ Description
+
+
+
+
+ TRILIUM_GENERAL_INSTANCENAME
+ string
+ ""
+ Instance name for API identification
+
+
+ TRILIUM_GENERAL_NOAUTHENTICATION
+ boolean
+ false
+ Disable authentication (server only)
+
+
+ TRILIUM_GENERAL_NOBACKUP
+ boolean
+ false
+ Disable automatic backups
+
+
+ TRILIUM_GENERAL_NODESKTOPICON
+ boolean
+ false
+ Disable desktop icon creation
+
+
+ TRILIUM_GENERAL_READONLY
+ boolean
+ false
+ Enable read-only mode
+
+
+
+
+Network Section
+
+
+
+ Environment Variable
+ Type
+ Default
+ Description
+
+
+
+
+ TRILIUM_NETWORK_HOST
+ string
+ "0.0.0.0"
+ Server host binding
+
+
+ TRILIUM_NETWORK_PORT
+ string
+ "3000"
+ Server port
+
+
+ TRILIUM_NETWORK_HTTPS
+ boolean
+ false
+ Enable HTTPS
+
+
+ TRILIUM_NETWORK_CERTPATH
+ string
+ ""
+ SSL certificate path
+
+
+ TRILIUM_NETWORK_KEYPATH
+ string
+ ""
+ SSL key path
+
+
+ TRILIUM_NETWORK_TRUSTEDREVERSEPROXY
+ boolean/string
+ false
+ Reverse proxy trust settings
+
+
+ TRILIUM_NETWORK_CORSALLOWORIGIN
+ string
+ ""
+ CORS allowed origins
+
+
+ TRILIUM_NETWORK_CORSALLOWMETHODS
+ string
+ ""
+ CORS allowed methods
+
+
+ TRILIUM_NETWORK_CORSALLOWHEADERS
+ string
+ ""
+ CORS allowed headers
+
+
+
+
+Session Section
+
+
+
+ Environment Variable
+ Type
+ Default
+ Description
+
+
+
+
+ TRILIUM_SESSION_COOKIEMAXAGE
+ integer
+ 1814400
+ Session cookie max age in seconds (21 days)
+
+
+
+
+Sync Section
+
+
+
+ Environment Variable
+ Type
+ Default
+ Description
+
+
+
+
+ TRILIUM_SYNC_SYNCSERVERHOST
+ string
+ ""
+ Sync server host URL
+
+
+ TRILIUM_SYNC_SYNCSERVERTIMEOUT
+ string
+ "120000"
+ Sync server timeout in milliseconds
+
+
+ TRILIUM_SYNC_SYNCPROXY
+ string
+ ""
+ Sync proxy URL
+
+
+
+
+MultiFactorAuthentication Section
+
+
+
+ Environment Variable
+ Type
+ Default
+ Description
+
+
+
+
+ TRILIUM_MULTIFACTORAUTHENTICATION_OAUTHBASEURL
+ string
+ ""
+ OAuth/OpenID base URL
+
+
+ TRILIUM_MULTIFACTORAUTHENTICATION_OAUTHCLIENTID
+ string
+ ""
+ OAuth client ID
+
+
+ TRILIUM_MULTIFACTORAUTHENTICATION_OAUTHCLIENTSECRET
+ string
+ ""
+ OAuth client secret
+
+
+ TRILIUM_MULTIFACTORAUTHENTICATION_OAUTHISSUERBASEURL
+ string
+ "https://accounts.google.com"
+ OAuth issuer base URL
+
+
+ TRILIUM_MULTIFACTORAUTHENTICATION_OAUTHISSUERNAME
+ string
+ "Google"
+ OAuth issuer display name
+
+
+ TRILIUM_MULTIFACTORAUTHENTICATION_OAUTHISSUERICON
+ string
+ ""
+ OAuth issuer icon URL
+
+
+
+
+Logging Section
+
+
+
+ Environment Variable
+ Type
+ Default
+ Description
+
+
+
+
+ TRILIUM_LOGGING_RETENTIONDAYS
+ integer
+ 90
+ Number of days to retain log files
+
+
+
+
+Alternative Environment Variables
+The following alternative environment variable names are also supported and work identically to their longer counterparts:
+
+Network CORS Variables
+
+ TRILIUM_NETWORK_CORS_ALLOW_ORIGIN
(alternative to TRILIUM_NETWORK_CORSALLOWORIGIN
)
+ TRILIUM_NETWORK_CORS_ALLOW_METHODS
(alternative to TRILIUM_NETWORK_CORSALLOWMETHODS
)
+ TRILIUM_NETWORK_CORS_ALLOW_HEADERS
(alternative to TRILIUM_NETWORK_CORSALLOWHEADERS
)
+
+
+Sync Variables
+
+ TRILIUM_SYNC_SERVER_HOST
(alternative to TRILIUM_SYNC_SYNCSERVERHOST
)
+ TRILIUM_SYNC_SERVER_TIMEOUT
(alternative to TRILIUM_SYNC_SYNCSERVERTIMEOUT
)
+ TRILIUM_SYNC_SERVER_PROXY
(alternative to TRILIUM_SYNC_SYNCPROXY
)
+
+
+OAuth/MFA Variables
+
+ TRILIUM_OAUTH_BASE_URL
(alternative to TRILIUM_MULTIFACTORAUTHENTICATION_OAUTHBASEURL
)
+ TRILIUM_OAUTH_CLIENT_ID
(alternative to TRILIUM_MULTIFACTORAUTHENTICATION_OAUTHCLIENTID
)
+ TRILIUM_OAUTH_CLIENT_SECRET
(alternative to TRILIUM_MULTIFACTORAUTHENTICATION_OAUTHCLIENTSECRET
)
+ TRILIUM_OAUTH_ISSUER_BASE_URL
(alternative to TRILIUM_MULTIFACTORAUTHENTICATION_OAUTHISSUERBASEURL
)
+ TRILIUM_OAUTH_ISSUER_NAME
(alternative to TRILIUM_MULTIFACTORAUTHENTICATION_OAUTHISSUERNAME
)
+ TRILIUM_OAUTH_ISSUER_ICON
(alternative to TRILIUM_MULTIFACTORAUTHENTICATION_OAUTHISSUERICON
)
+
+
+Logging Variables
+
+ TRILIUM_LOGGING_RETENTION_DAYS
(alternative to TRILIUM_LOGGING_RETENTIONDAYS
)
+
+
+Boolean Values
+Boolean environment variables accept the following values:
+
+ True : "true"
, "1"
, 1
+ False : "false"
, "0"
, 0
+ Any other value defaults to false
+
+
+Using Environment Variables
+Both naming patterns are fully supported and can be used interchangeably:
+
+ The longer format follows the section/key pattern for consistency with the INI file structure
+ The shorter alternatives provide convenience for common configurations
+ You can use whichever format you prefer - both are equally valid
+
+
+Examples
+
+Docker Compose Example
+services:
+ trilium:
+ image: triliumnext/notes
+ environment:
+ # Using full format
+ TRILIUM_GENERAL_INSTANCENAME: "My Trilium Instance"
+ TRILIUM_NETWORK_PORT: "8080"
+ TRILIUM_NETWORK_CORSALLOWORIGIN: "https://myapp.com"
+ TRILIUM_SYNC_SYNCSERVERHOST: "https://sync.example.com"
+ TRILIUM_MULTIFACTORAUTHENTICATION_OAUTHBASEURL: "https://auth.example.com"
+
+ # Or using shorter alternatives (equally valid)
+ # TRILIUM_NETWORK_CORS_ALLOW_ORIGIN: "https://myapp.com"
+ # TRILIUM_SYNC_SERVER_HOST: "https://sync.example.com"
+ # TRILIUM_OAUTH_BASE_URL: "https://auth.example.com"
+
+Shell Export Example
+# Using either format
+export TRILIUM_GENERAL_NOAUTHENTICATION=false
+export TRILIUM_NETWORK_HTTPS=true
+export TRILIUM_NETWORK_CERTPATH=/path/to/cert.pem
+export TRILIUM_NETWORK_KEYPATH=/path/to/key.pem
+export TRILIUM_LOGGING_RETENTIONDAYS=30
+
+# Start Trilium
+npm start
+
+config.ini Reference
+For the complete list of configuration options and their INI file format, please review the config-sample.ini file in the Trilium repository.
\ No newline at end of file
diff --git a/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Installation & Setup/Server Installation/1. Installing the server/Using Docker.html b/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Installation & Setup/Server Installation/1. Installing the server/Using Docker.html
index 53b131799..79c565cea 100644
--- a/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Installation & Setup/Server Installation/1. Installing the server/Using Docker.html
+++ b/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Installation & Setup/Server Installation/1. Installing the server/Using Docker.html
@@ -134,6 +134,7 @@ docker run -d --name trilium -p 8080:8080 --user $(id -u):$(id -g) -v ~/trilium-
TRILIUM_DATA_DIR
: Path to the data directory inside the container
(default: /home/node/trilium-data
)
+For a complete list of configuration environment variables (network settings, authentication, sync, etc.), see Configuration (config.ini or environment variables) .
Volume Permissions
If you encounter permission issues with the data volume, ensure that:
diff --git a/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Installation & Setup/Server Installation/Multi-Factor Authentication.html b/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Installation & Setup/Server Installation/Multi-Factor Authentication.html
index 7840255d3..93eba27c0 100644
--- a/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Installation & Setup/Server Installation/Multi-Factor Authentication.html
+++ b/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Installation & Setup/Server Installation/Multi-Factor Authentication.html
@@ -49,7 +49,12 @@ class="admonition warning">
the config.ini
file (check Configuration (config.ini or environment variables) for
more information).
- You can also setup through environment variables (TRILIUM_OAUTH_BASE_URL
, TRILIUM_OAUTH_CLIENT_ID
and TRILIUM_OAUTH_CLIENT_SECRET
).
+ You can also setup through environment variables:
+
+ Standard: TRILIUM_MULTIFACTORAUTHENTICATION_OAUTHBASEURL
, TRILIUM_MULTIFACTORAUTHENTICATION_OAUTHCLIENTID
, TRILIUM_MULTIFACTORAUTHENTICATION_OAUTHCLIENTSECRET
+ Legacy (still supported): TRILIUM_OAUTH_BASE_URL
, TRILIUM_OAUTH_CLIENT_ID
, TRILIUM_OAUTH_CLIENT_SECRET
+
+
oauthBaseUrl
should be the link of your Trilium instance server,
for example, https://<your-trilium-domain>
.
@@ -64,8 +69,12 @@ class="admonition warning">
The default OAuth issuer is Google. To use other services such as Authentik
or Auth0, you can configure the settings via oauthIssuerBaseUrl
, oauthIssuerName
,
and oauthIssuerIcon
in the config.ini
file. Alternatively,
- these values can be set using environment variables: TRILIUM_OAUTH_ISSUER_BASE_URL
, TRILIUM_OAUTH_ISSUER_NAME
,
- and TRILIUM_OAUTH_ISSUER_ICON
. oauthIssuerName
and oauthIssuerIcon
are
+ these values can be set using environment variables:
+
+ Standard: TRILIUM_MULTIFACTORAUTHENTICATION_OAUTHISSUERBASEURL
, TRILIUM_MULTIFACTORAUTHENTICATION_OAUTHISSUERNAME
, TRILIUM_MULTIFACTORAUTHENTICATION_OAUTHISSUERICON
+ Legacy (still supported): TRILIUM_OAUTH_ISSUER_BASE_URL
, TRILIUM_OAUTH_ISSUER_NAME
, TRILIUM_OAUTH_ISSUER_ICON
+
+ oauthIssuerName
and oauthIssuerIcon
are
required for displaying correct issuer information at the Login page.
Authentik
diff --git a/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Installation & Setup/Server Installation/TLS Configuration.html b/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Installation & Setup/Server Installation/TLS Configuration.html
index ead34359c..3bd1f0cf2 100644
--- a/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Installation & Setup/Server Installation/TLS Configuration.html
+++ b/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Installation & Setup/Server Installation/TLS Configuration.html
@@ -26,7 +26,10 @@ https=true
certPath=/[username]/.acme.sh/[hostname]/fullchain.cer
keyPath=/[username]/.acme.sh/[hostname]/example.com.key
You can also review the configuration file
- to provide all config.ini
values as environment variables instead.
+ to provide all config.ini
values as environment variables instead. For example, you can configure TLS using environment variables:
+export TRILIUM_NETWORK_HTTPS=true
+export TRILIUM_NETWORK_CERTPATH=/path/to/cert.pem
+export TRILIUM_NETWORK_KEYPATH=/path/to/key.pem
The above example shows how this is set up in an environment where the
certificate was generated using Let's Encrypt's ACME utility. Your paths
may differ. For Docker installations, ensure these paths are within a volume
diff --git a/apps/server/src/assets/translations/de/server.json b/apps/server/src/assets/translations/de/server.json
index 840e823f3..df8531315 100644
--- a/apps/server/src/assets/translations/de/server.json
+++ b/apps/server/src/assets/translations/de/server.json
@@ -111,7 +111,9 @@
"incorrect-password": "Das Passwort ist falsch. Bitte versuche es erneut.",
"password": "Passwort",
"remember-me": "Angemeldet bleiben",
- "button": "Anmelden"
+ "button": "Anmelden",
+ "incorrect-totp": "Einmaltoken ist falsch. Bitte erneut versuchen.",
+ "sign_in_with_sso": "Mit {{ ssoIssuerName }} anmelden"
},
"set_password": {
"title": "Passwort festlegen",
@@ -248,7 +250,13 @@
"other": "Weitere",
"advanced-title": "Erweitert",
"visible-launchers-title": "Sichtbare Launcher",
- "user-guide": "Nutzerhandbuch"
+ "user-guide": "Nutzerhandbuch",
+ "jump-to-note-title": "Springe zu...",
+ "llm-chat-title": "Chat mit Notizen",
+ "multi-factor-authentication-title": "MFA",
+ "ai-llm-title": "AI/LLM",
+ "localization": "Sprache & Region",
+ "inbox-title": "Posteingang"
},
"notes": {
"new-note": "Neue Notiz",
@@ -275,11 +283,31 @@
"bookmarks": "Lesezeichen",
"today": "Heutigen Journal Eintrag öffnen",
"new-note": "Neue Notiz",
- "show-windows": "Fenster anzeigen"
+ "show-windows": "Fenster anzeigen",
+ "open_new_window": "Öffne neues Fenster"
},
"hidden_subtree_templates": {
"table": "Tabelle",
- "board_status_done": "Erledigt"
+ "board_status_done": "Erledigt",
+ "text-snippet": "Text Ausschnitt",
+ "description": "Beschreibung",
+ "list-view": "Listenansicht",
+ "grid-view": "Gitteransicht",
+ "calendar": "Kalender",
+ "geo-map": "Geokarte",
+ "start-date": "Startdatum",
+ "end-date": "Enddatum",
+ "start-time": "Startzeit",
+ "end-time": "Endzeit",
+ "geolocation": "Geolokation",
+ "built-in-templates": "Integrierte Vorlagen",
+ "board": "Tafel",
+ "status": "Status",
+ "board_note_first": "Erste Notiz",
+ "board_note_second": "Zweite Notiz",
+ "board_note_third": "Dritte Notiz",
+ "board_status_todo": "To-Do",
+ "board_status_progress": "In Bearbeitung"
},
"keyboard_action_names": {
"copy-notes-to-clipboard": "Notizen in Zwischenablage kopieren",
@@ -348,6 +376,53 @@
"insert-date-and-time-to-text": "Datum und Uhrzeit in Text einfügen",
"paste-markdown-into-text": "Markdown in Text einfügen",
"add-include-note-to-text": "Notiz in Text einfügen",
- "edit-read-only-note": "Schreibgeschützte Notiz bearbeiten"
+ "edit-read-only-note": "Schreibgeschützte Notiz bearbeiten",
+ "toggle-ribbon-tab-classic-editor": "Registerkarte Klassischer Editor umschalten",
+ "toggle-ribbon-tab-basic-properties": "Registerkarte Grundlegende Eigenschaften umschalten",
+ "toggle-ribbon-tab-book-properties": "Registerkarte Buch-Eigenschaften umschalten",
+ "toggle-ribbon-tab-file-properties": "Registerkarte Datei-Eigenschaften umschalten",
+ "toggle-ribbon-tab-image-properties": "Registerkarte Bilder-Eigenschaften umschalten",
+ "toggle-ribbon-tab-owned-attributes": "Registerkarte Besitzerattribute umschalten",
+ "toggle-ribbon-tab-inherited-attributes": "Registerkarte geerbte Attribute umschalten",
+ "toggle-ribbon-tab-promoted-attributes": "Registerkarte verliehene Attribute umschalten",
+ "toggle-ribbon-tab-note-map": "Registerkarte Notizkarte umschalten",
+ "toggle-ribbon-tab-note-info": "Registerkarte Notiz-Info umschalten",
+ "toggle-ribbon-tab-note-paths": "Registerkarte Notiz-Pfad umschalten",
+ "toggle-ribbon-tab-similar-notes": "Registerkarte ähnliche Notizen umschalten",
+ "toggle-right-pane": "Rechten Bereich ein-/ausblenden",
+ "open-note-externally": "Notiz extern öffnen",
+ "render-active-note": "Aktive Notiz rendern",
+ "run-active-note": "Aktive Notiz ausführen",
+ "toggle-note-hoisting": "Notiz hochziehen umschalten",
+ "unhoist-note": "Notiz hochziehen rückgängig machen",
+ "reload-frontend-app": "Oberfläche neu laden",
+ "open-developer-tools": "Öffne Entwickler-Tools",
+ "find-in-text": "Im Text suchen",
+ "toggle-left-pane": "Linken Bereich ein-/ausblenden",
+ "toggle-full-screen": "Vollbild-Modus de-/aktivieren",
+ "zoom-out": "Vergrößern",
+ "zoom-in": "Verkleinern",
+ "reset-zoom-level": "Zoom zurücksetzen",
+ "copy-without-formatting": "Kopieren ohne Formatierung",
+ "force-save-revision": "Speichern der Notizrevision erzwingen"
+ },
+ "weekdayNumber": "Woche {weekNumber}",
+ "quarterNumber": "Quartal {quarterNumber}",
+ "migration": {
+ "old_version": "Eine direkte Migration von Ihrer aktuellen Version wird nicht unterstützt. Bitte führen Sie zunächst ein Upgrade auf die neueste Version v0.60.4 durch und erst dann auf diese Version.",
+ "error_message": "Fehler bei der Migration zu Version {{version}}: {{stack}}",
+ "wrong_db_version": "Die Version der Datenbank ({{version}}) ist neuer als die von der Anwendung erwartete Version ({{targetVersion}}), was bedeutet, dass diese mit einer neueren und inkompatiblen Version von Trilium erstellt wurde. Führen Sie ein Upgrade auf die neueste Version von Trilium durch, um dieses Problem zu beheben."
+ },
+ "modals": {
+ "error_title": "Fehler"
+ },
+ "share_theme": {
+ "site-theme": "Webseite Stil",
+ "search_placeholder": "Suche...",
+ "image_alt": "Artikel Bild",
+ "last-updated": "Zuletzt aktualisiert am {{- date}}",
+ "subpages": "Unterseiten:",
+ "on-this-page": "Auf dieser Seite",
+ "expand": "Erweitern"
}
}
diff --git a/apps/server/src/assets/translations/fr/server.json b/apps/server/src/assets/translations/fr/server.json
index 4f5522ac8..38c8dc840 100644
--- a/apps/server/src/assets/translations/fr/server.json
+++ b/apps/server/src/assets/translations/fr/server.json
@@ -111,7 +111,9 @@
"incorrect-password": "Le mot de passe est incorrect. Veuillez réessayer.",
"password": "Mot de passe",
"remember-me": "Se souvenir de moi",
- "button": "Connexion"
+ "button": "Connexion",
+ "sign_in_with_sso": "Se connecter avec {{ ssoIssuerName }}",
+ "incorrect-totp": "TOTP incorrect. Veuillez réessayer."
},
"set_password": {
"title": "Définir un mot de passe",
@@ -350,6 +352,29 @@
"add-include-note-to-text": "Ajouter une note inclusion au texte",
"edit-read-only-note": "Modifier une note en lecture seule",
"add-new-label": "Ajouter une nouvelle étiquette",
- "add-new-relation": "Ajouter une nouvelle relation"
+ "add-new-relation": "Ajouter une nouvelle relation",
+ "toggle-ribbon-tab-classic-editor": "Basculer l'onglet Mise en forme de l'éditeur avec la barre d'outils fixe",
+ "toggle-ribbon-tab-basic-properties": "Afficher/masquer les Propriétés de base de la note",
+ "toggle-ribbon-tab-book-properties": "Afficher/masquer les Propriétés du Livre",
+ "toggle-ribbon-tab-file-properties": "Afficher/masquer les Propriétés du fichier",
+ "toggle-ribbon-tab-image-properties": "Afficher/masquer les Propriétés de l'image",
+ "toggle-ribbon-tab-owned-attributes": "Afficher/masquer les Attributs propres",
+ "toggle-ribbon-tab-inherited-attributes": "Afficher/masquer les Attributs hérités",
+ "toggle-right-pane": "Afficher le panneau de droite",
+ "print-active-note": "Imprimer la note active",
+ "export-active-note-as-pdf": "Exporter la note active en PDF",
+ "open-note-externally": "Ouvrir la note à l'extérieur",
+ "render-active-note": "Faire un rendu de la note active",
+ "run-active-note": "Lancer la note active",
+ "reload-frontend-app": "Recharger l'application Frontend",
+ "open-developer-tools": "Ouvrir les outils développeur",
+ "find-in-text": "Chercher un texte",
+ "toggle-left-pane": "Afficher le panneau de gauche",
+ "toggle-full-screen": "Passer en mode plein écran",
+ "zoom-out": "Dézoomer",
+ "zoom-in": "Zoomer",
+ "reset-zoom-level": "Réinitilaliser le zoom",
+ "copy-without-formatting": "Copier sans mise en forme",
+ "force-save-revision": "Forcer la sauvegarde de la révision"
}
}
diff --git a/apps/server/src/assets/translations/ko/server.json b/apps/server/src/assets/translations/ko/server.json
index 24c86869b..addfca0cc 100644
--- a/apps/server/src/assets/translations/ko/server.json
+++ b/apps/server/src/assets/translations/ko/server.json
@@ -1,5 +1,43 @@
{
"keyboard_actions": {
- "back-in-note-history": "이전으로 돌아가기"
+ "back-in-note-history": "기록 내 이전 노트로 이동하기",
+ "open-command-palette": "명령어 팔레트 열기",
+ "delete-note": "노트 삭제",
+ "quick-search": "빠른 검색바 활성화",
+ "move-note-up": "노트를 위로 이동",
+ "move-note-down": "노트를 아래로 이동",
+ "move-note-up-in-hierarchy": "노트를 상위 계층으로 이동",
+ "move-note-down-in-hierarchy": "노트를 하위 계층으로 이동",
+ "sort-child-notes": "자식 노트 정렬",
+ "forward-in-note-history": "기록 내 다음 노트로 이동하기",
+ "open-jump-to-note-dialog": "\"노트로 이동하기\" 대화창 열기",
+ "scroll-to-active-note": "노트 트리를 활성화된 노트로 스크롤하기",
+ "search-in-subtree": "활성화된 노트 하위에서 노트 찾기",
+ "expand-subtree": "현재 노트의 서브트리 펼치기",
+ "collapse-tree": "전체 노트 트리 접기",
+ "collapse-subtree": "현재 노트의 서브트리 접기",
+ "creating-and-moving-notes": "노트 만들기 및 이동하기",
+ "create-note-after": "노트 활성화 후 노트 만들기",
+ "create-note-into": "활성화된 노트 하위에 노트 만들기",
+ "create-note-into-inbox": "받은 편지함(정의된 경우) 또는 당일 노트에 노트 만들기",
+ "edit-note-title": "트리에서 노트 세부 사항으로 이동하고 제목 편집하기",
+ "edit-branch-prefix": "\"브랜치 접두사 편집\" 대화창 표시하기",
+ "clone-notes-to": "선택된 노트들을 복사하기",
+ "move-notes-to": "선택된 노트들을 이동하기",
+ "note-clipboard": "노트 클립보드",
+ "copy-notes-to-clipboard": "선택된 노트들을 클립보드에 복사하기",
+ "paste-notes-from-clipboard": "클립보드 내 노트를 활성화된 노트에 붙여넣기",
+ "cut-notes-to-clipboard": "선택된 노트들을 클립보드에 잘라내기",
+ "select-all-notes-in-parent": "현재 노트 레벨에서 모든 노트 선택하기",
+ "add-note-above-to-the-selection": "선택한 영역 위에 노트 추가하기",
+ "add-note-below-to-selection": "선택한 영역 아래에 노트 추가하기",
+ "duplicate-subtree": "서브트리 복사하기",
+ "open-new-tab": "새 탭 열기",
+ "close-active-tab": "활성화된 탭 닫기",
+ "reopen-last-tab": "마지막으로 닫은 탭 열기",
+ "activate-next-tab": "우측 탭 활성화",
+ "activate-previous-tab": "좌측 탭 활성화",
+ "open-new-window": "새 비어있는 창 열기",
+ "toggle-tray": "시스템 트레이에서 애플리케이션 보여주기/숨기기"
}
}
diff --git a/apps/server/src/assets/translations/nl/server.json b/apps/server/src/assets/translations/nl/server.json
new file mode 100644
index 000000000..ffa419733
--- /dev/null
+++ b/apps/server/src/assets/translations/nl/server.json
@@ -0,0 +1,12 @@
+{
+ "keyboard_actions": {
+ "back-in-note-history": "Navigeer naar vorige notitie in geschiedenis",
+ "forward-in-note-history": "Navigeer naar de volgende notitie in de geschiedenis",
+ "open-jump-to-note-dialog": "Open het dialoogvenster 'Ga naar notitie'",
+ "open-command-palette": "Open het opdrachtvenster",
+ "scroll-to-active-note": "Scroll naar actieve notitie in de notitieboom",
+ "quick-search": "Snelle zoekbalk activeren",
+ "search-in-subtree": "Zoek naar notities in de subboom van de actieve notitie",
+ "expand-subtree": "Subboom van huidige notitie uitbreiden"
+ }
+}
diff --git a/apps/server/src/assets/translations/tw/server.json b/apps/server/src/assets/translations/tw/server.json
index 892ceeaae..5b2344730 100644
--- a/apps/server/src/assets/translations/tw/server.json
+++ b/apps/server/src/assets/translations/tw/server.json
@@ -349,7 +349,7 @@
"etapi-title": "ETAPI",
"backup-title": "備份",
"sync-title": "同步",
- "ai-llm-title": "AI / LLM",
+ "ai-llm-title": "AI/LLM",
"other": "其他",
"advanced-title": "進階",
"visible-launchers-title": "可見啟動器",
diff --git a/apps/server/src/services/config.spec.ts b/apps/server/src/services/config.spec.ts
new file mode 100644
index 000000000..ec067fc4c
--- /dev/null
+++ b/apps/server/src/services/config.spec.ts
@@ -0,0 +1,348 @@
+import { vi, describe, it, expect, beforeEach, afterEach } from "vitest";
+import fs from "fs";
+import ini from "ini";
+
+// Mock dependencies
+vi.mock("fs");
+vi.mock("./data_dir.js", () => ({
+ default: {
+ CONFIG_INI_PATH: "/test/config.ini"
+ }
+}));
+vi.mock("./resource_dir.js", () => ({
+ default: {
+ RESOURCE_DIR: "/test/resources"
+ }
+}));
+
+describe("Config Service", () => {
+ let originalEnv: NodeJS.ProcessEnv;
+
+ beforeEach(() => {
+ // Save original environment
+ originalEnv = { ...process.env };
+
+ // Clear all TRILIUM env vars
+ Object.keys(process.env).forEach(key => {
+ if (key.startsWith("TRILIUM_")) {
+ delete process.env[key];
+ }
+ });
+
+ // Mock fs to return empty config
+ vi.mocked(fs.existsSync).mockReturnValue(true);
+ vi.mocked(fs.readFileSync).mockImplementation((path) => {
+ if (String(path).includes("config-sample.ini")) {
+ return "" as any; // Return string for INI parsing
+ }
+ // Return empty INI config as string
+ return `
+[General]
+[Network]
+[Session]
+[Sync]
+[MultiFactorAuthentication]
+[Logging]
+ ` as any;
+ });
+
+ // Clear module cache to reload config with new env vars
+ vi.resetModules();
+ });
+
+ afterEach(() => {
+ // Restore original environment
+ process.env = originalEnv;
+ vi.clearAllMocks();
+ });
+
+ describe("Environment Variable Naming", () => {
+ it("should use standard environment variables following TRILIUM_[SECTION]_[KEY] pattern", async () => {
+ // Set standard env vars
+ process.env.TRILIUM_GENERAL_INSTANCENAME = "test-instance";
+ process.env.TRILIUM_NETWORK_CORSALLOWORIGIN = "https://example.com";
+ process.env.TRILIUM_SYNC_SYNCSERVERHOST = "sync.example.com";
+ process.env.TRILIUM_MULTIFACTORAUTHENTICATION_OAUTHBASEURL = "https://auth.example.com";
+ process.env.TRILIUM_LOGGING_RETENTIONDAYS = "30";
+
+ const { default: config } = await import("./config.js");
+
+ expect(config.General.instanceName).toBe("test-instance");
+ expect(config.Network.corsAllowOrigin).toBe("https://example.com");
+ expect(config.Sync.syncServerHost).toBe("sync.example.com");
+ expect(config.MultiFactorAuthentication.oauthBaseUrl).toBe("https://auth.example.com");
+ expect(config.Logging.retentionDays).toBe(30);
+ });
+
+ it("should maintain backward compatibility with alias environment variables", async () => {
+ // Set alias/legacy env vars
+ process.env.TRILIUM_NETWORK_CORS_ALLOW_ORIGIN = "https://legacy.com";
+ process.env.TRILIUM_SYNC_SERVER_HOST = "legacy-sync.com";
+ process.env.TRILIUM_OAUTH_BASE_URL = "https://legacy-auth.com";
+ process.env.TRILIUM_LOGGING_RETENTION_DAYS = "60";
+
+ const { default: config } = await import("./config.js");
+
+ expect(config.Network.corsAllowOrigin).toBe("https://legacy.com");
+ expect(config.Sync.syncServerHost).toBe("legacy-sync.com");
+ expect(config.MultiFactorAuthentication.oauthBaseUrl).toBe("https://legacy-auth.com");
+ expect(config.Logging.retentionDays).toBe(60);
+ });
+
+ it("should prioritize standard env vars over aliases when both are set", async () => {
+ // Set both standard and alias env vars - standard should win
+ process.env.TRILIUM_NETWORK_CORSALLOWORIGIN = "standard-cors.com";
+ process.env.TRILIUM_NETWORK_CORS_ALLOW_ORIGIN = "alias-cors.com";
+
+ process.env.TRILIUM_MULTIFACTORAUTHENTICATION_OAUTHBASEURL = "standard-auth.com";
+ process.env.TRILIUM_OAUTH_BASE_URL = "alias-auth.com";
+
+ const { default: config } = await import("./config.js");
+
+ expect(config.Network.corsAllowOrigin).toBe("standard-cors.com");
+ expect(config.MultiFactorAuthentication.oauthBaseUrl).toBe("standard-auth.com");
+ });
+
+ it("should handle all CORS environment variables correctly", async () => {
+ // Test with standard naming
+ process.env.TRILIUM_NETWORK_CORSALLOWORIGIN = "*";
+ process.env.TRILIUM_NETWORK_CORSALLOWMETHODS = "GET,POST,PUT";
+ process.env.TRILIUM_NETWORK_CORSALLOWHEADERS = "Content-Type,Authorization";
+
+ let { default: config } = await import("./config.js");
+
+ expect(config.Network.corsAllowOrigin).toBe("*");
+ expect(config.Network.corsAllowMethods).toBe("GET,POST,PUT");
+ expect(config.Network.corsAllowHeaders).toBe("Content-Type,Authorization");
+
+ // Clear and test with alias naming
+ delete process.env.TRILIUM_NETWORK_CORSALLOWORIGIN;
+ delete process.env.TRILIUM_NETWORK_CORSALLOWMETHODS;
+ delete process.env.TRILIUM_NETWORK_CORSALLOWHEADERS;
+
+ process.env.TRILIUM_NETWORK_CORS_ALLOW_ORIGIN = "https://app.com";
+ process.env.TRILIUM_NETWORK_CORS_ALLOW_METHODS = "GET,POST";
+ process.env.TRILIUM_NETWORK_CORS_ALLOW_HEADERS = "X-Custom-Header";
+
+ vi.resetModules();
+ config = (await import("./config.js")).default;
+
+ expect(config.Network.corsAllowOrigin).toBe("https://app.com");
+ expect(config.Network.corsAllowMethods).toBe("GET,POST");
+ expect(config.Network.corsAllowHeaders).toBe("X-Custom-Header");
+ });
+
+ it("should handle all OAuth/MFA environment variables correctly", async () => {
+ // Test with standard naming
+ process.env.TRILIUM_MULTIFACTORAUTHENTICATION_OAUTHBASEURL = "https://oauth.standard.com";
+ process.env.TRILIUM_MULTIFACTORAUTHENTICATION_OAUTHCLIENTID = "standard-client-id";
+ process.env.TRILIUM_MULTIFACTORAUTHENTICATION_OAUTHCLIENTSECRET = "standard-secret";
+ process.env.TRILIUM_MULTIFACTORAUTHENTICATION_OAUTHISSUERBASEURL = "https://issuer.standard.com";
+ process.env.TRILIUM_MULTIFACTORAUTHENTICATION_OAUTHISSUERNAME = "Standard Auth";
+ process.env.TRILIUM_MULTIFACTORAUTHENTICATION_OAUTHISSUERICON = "standard-icon.png";
+
+ let { default: config } = await import("./config.js");
+
+ expect(config.MultiFactorAuthentication.oauthBaseUrl).toBe("https://oauth.standard.com");
+ expect(config.MultiFactorAuthentication.oauthClientId).toBe("standard-client-id");
+ expect(config.MultiFactorAuthentication.oauthClientSecret).toBe("standard-secret");
+ expect(config.MultiFactorAuthentication.oauthIssuerBaseUrl).toBe("https://issuer.standard.com");
+ expect(config.MultiFactorAuthentication.oauthIssuerName).toBe("Standard Auth");
+ expect(config.MultiFactorAuthentication.oauthIssuerIcon).toBe("standard-icon.png");
+
+ // Clear and test with alias naming
+ Object.keys(process.env).forEach(key => {
+ if (key.startsWith("TRILIUM_MULTIFACTORAUTHENTICATION_")) {
+ delete process.env[key];
+ }
+ });
+
+ process.env.TRILIUM_OAUTH_BASE_URL = "https://oauth.alias.com";
+ process.env.TRILIUM_OAUTH_CLIENT_ID = "alias-client-id";
+ process.env.TRILIUM_OAUTH_CLIENT_SECRET = "alias-secret";
+ process.env.TRILIUM_OAUTH_ISSUER_BASE_URL = "https://issuer.alias.com";
+ process.env.TRILIUM_OAUTH_ISSUER_NAME = "Alias Auth";
+ process.env.TRILIUM_OAUTH_ISSUER_ICON = "alias-icon.png";
+
+ vi.resetModules();
+ config = (await import("./config.js")).default;
+
+ expect(config.MultiFactorAuthentication.oauthBaseUrl).toBe("https://oauth.alias.com");
+ expect(config.MultiFactorAuthentication.oauthClientId).toBe("alias-client-id");
+ expect(config.MultiFactorAuthentication.oauthClientSecret).toBe("alias-secret");
+ expect(config.MultiFactorAuthentication.oauthIssuerBaseUrl).toBe("https://issuer.alias.com");
+ expect(config.MultiFactorAuthentication.oauthIssuerName).toBe("Alias Auth");
+ expect(config.MultiFactorAuthentication.oauthIssuerIcon).toBe("alias-icon.png");
+ });
+
+ it("should handle all Sync environment variables correctly", async () => {
+ // Test with standard naming
+ process.env.TRILIUM_SYNC_SYNCSERVERHOST = "sync-standard.com";
+ process.env.TRILIUM_SYNC_SYNCSERVERTIMEOUT = "60000";
+ process.env.TRILIUM_SYNC_SYNCPROXY = "proxy-standard.com";
+
+ let { default: config } = await import("./config.js");
+
+ expect(config.Sync.syncServerHost).toBe("sync-standard.com");
+ expect(config.Sync.syncServerTimeout).toBe("60000");
+ expect(config.Sync.syncProxy).toBe("proxy-standard.com");
+
+ // Clear and test with alias naming
+ delete process.env.TRILIUM_SYNC_SYNCSERVERHOST;
+ delete process.env.TRILIUM_SYNC_SYNCSERVERTIMEOUT;
+ delete process.env.TRILIUM_SYNC_SYNCPROXY;
+
+ process.env.TRILIUM_SYNC_SERVER_HOST = "sync-alias.com";
+ process.env.TRILIUM_SYNC_SERVER_TIMEOUT = "30000";
+ process.env.TRILIUM_SYNC_SERVER_PROXY = "proxy-alias.com";
+
+ vi.resetModules();
+ config = (await import("./config.js")).default;
+
+ expect(config.Sync.syncServerHost).toBe("sync-alias.com");
+ expect(config.Sync.syncServerTimeout).toBe("30000");
+ expect(config.Sync.syncProxy).toBe("proxy-alias.com");
+ });
+ });
+
+ describe("INI Config Integration", () => {
+ it("should fall back to INI config when no env vars are set", async () => {
+ // Mock INI config with values
+ vi.mocked(fs.readFileSync).mockImplementation((path) => {
+ if (String(path).includes("config-sample.ini")) {
+ return "" as any;
+ }
+ return `
+[General]
+instanceName=ini-instance
+
+[Network]
+corsAllowOrigin=https://ini-cors.com
+port=9000
+
+[Sync]
+syncServerHost=ini-sync.com
+
+[MultiFactorAuthentication]
+oauthBaseUrl=https://ini-oauth.com
+
+[Logging]
+retentionDays=45
+ ` as any;
+ });
+
+ const { default: config } = await import("./config.js");
+
+ expect(config.General.instanceName).toBe("ini-instance");
+ expect(config.Network.corsAllowOrigin).toBe("https://ini-cors.com");
+ expect(config.Network.port).toBe("9000");
+ expect(config.Sync.syncServerHost).toBe("ini-sync.com");
+ expect(config.MultiFactorAuthentication.oauthBaseUrl).toBe("https://ini-oauth.com");
+ expect(config.Logging.retentionDays).toBe(45);
+ });
+
+ it("should prioritize env vars over INI config", async () => {
+ // Mock INI config with values
+ vi.mocked(fs.readFileSync).mockImplementation((path) => {
+ if (String(path).includes("config-sample.ini")) {
+ return "" as any;
+ }
+ return `
+[General]
+instanceName=ini-instance
+
+[Network]
+corsAllowOrigin=https://ini-cors.com
+ ` as any;
+ });
+
+ // Set env vars that should override INI
+ process.env.TRILIUM_GENERAL_INSTANCENAME = "env-instance";
+ process.env.TRILIUM_NETWORK_CORS_ALLOW_ORIGIN = "https://env-cors.com"; // Using alias
+
+ const { default: config } = await import("./config.js");
+
+ expect(config.General.instanceName).toBe("env-instance");
+ expect(config.Network.corsAllowOrigin).toBe("https://env-cors.com");
+ });
+ });
+
+ describe("Type Transformations", () => {
+ it("should correctly transform boolean values", async () => {
+ process.env.TRILIUM_GENERAL_NOAUTHENTICATION = "true";
+ process.env.TRILIUM_GENERAL_NOBACKUP = "1";
+ process.env.TRILIUM_GENERAL_READONLY = "false";
+ process.env.TRILIUM_NETWORK_HTTPS = "0";
+
+ const { default: config } = await import("./config.js");
+
+ expect(config.General.noAuthentication).toBe(true);
+ expect(config.General.noBackup).toBe(true);
+ expect(config.General.readOnly).toBe(false);
+ expect(config.Network.https).toBe(false);
+ });
+
+ it("should correctly transform integer values", async () => {
+ process.env.TRILIUM_SESSION_COOKIEMAXAGE = "3600";
+ process.env.TRILIUM_LOGGING_RETENTIONDAYS = "7";
+
+ const { default: config } = await import("./config.js");
+
+ expect(config.Session.cookieMaxAge).toBe(3600);
+ expect(config.Logging.retentionDays).toBe(7);
+ });
+
+ it("should use default values for invalid integers", async () => {
+ process.env.TRILIUM_SESSION_COOKIEMAXAGE = "invalid";
+ process.env.TRILIUM_LOGGING_RETENTION_DAYS = "not-a-number"; // Using alias
+
+ const { default: config } = await import("./config.js");
+
+ expect(config.Session.cookieMaxAge).toBe(21 * 24 * 60 * 60); // Default
+ expect(config.Logging.retentionDays).toBe(90); // Default
+ });
+ });
+
+ describe("Default Values", () => {
+ it("should use correct default values when no config is provided", async () => {
+ const { default: config } = await import("./config.js");
+
+ // General defaults
+ expect(config.General.instanceName).toBe("");
+ expect(config.General.noAuthentication).toBe(false);
+ expect(config.General.noBackup).toBe(false);
+ expect(config.General.noDesktopIcon).toBe(false);
+ expect(config.General.readOnly).toBe(false);
+
+ // Network defaults
+ expect(config.Network.host).toBe("0.0.0.0");
+ expect(config.Network.port).toBe("3000");
+ expect(config.Network.https).toBe(false);
+ expect(config.Network.certPath).toBe("");
+ expect(config.Network.keyPath).toBe("");
+ expect(config.Network.trustedReverseProxy).toBe(false);
+ expect(config.Network.corsAllowOrigin).toBe("");
+ expect(config.Network.corsAllowMethods).toBe("");
+ expect(config.Network.corsAllowHeaders).toBe("");
+
+ // Session defaults
+ expect(config.Session.cookieMaxAge).toBe(21 * 24 * 60 * 60);
+
+ // Sync defaults
+ expect(config.Sync.syncServerHost).toBe("");
+ expect(config.Sync.syncServerTimeout).toBe("120000");
+ expect(config.Sync.syncProxy).toBe("");
+
+ // OAuth defaults
+ expect(config.MultiFactorAuthentication.oauthBaseUrl).toBe("");
+ expect(config.MultiFactorAuthentication.oauthClientId).toBe("");
+ expect(config.MultiFactorAuthentication.oauthClientSecret).toBe("");
+ expect(config.MultiFactorAuthentication.oauthIssuerBaseUrl).toBe("https://accounts.google.com");
+ expect(config.MultiFactorAuthentication.oauthIssuerName).toBe("Google");
+ expect(config.MultiFactorAuthentication.oauthIssuerIcon).toBe("");
+
+ // Logging defaults
+ expect(config.Logging.retentionDays).toBe(90);
+ });
+ });
+});
\ No newline at end of file
diff --git a/apps/server/src/services/config.ts b/apps/server/src/services/config.ts
index 84e859a68..e08b7264e 100644
--- a/apps/server/src/services/config.ts
+++ b/apps/server/src/services/config.ts
@@ -1,3 +1,24 @@
+/**
+ * ╔════════════════════════════════════════════════════════════════════════════╗
+ * ║ TRILIUM CONFIGURATION RESOLUTION ORDER ║
+ * ╠════════════════════════════════════════════════════════════════════════════╣
+ * ║ ║
+ * ║ Priority │ Source │ Example ║
+ * ║ ─────────┼─────────────────────────────────┼─────────────────────────────║
+ * ║ 1 │ Environment Variables │ TRILIUM_NETWORK_PORT=8080 ║
+ * ║ ↓ │ (Highest Priority - Overrides all) ║
+ * ║ │ ║
+ * ║ 2 │ config.ini File │ [Network] ║
+ * ║ ↓ │ (User Configuration) │ port=8080 ║
+ * ║ │ ║
+ * ║ 3 │ Default Values │ port='3000' ║
+ * ║ │ (Lowest Priority - Fallback) │ (hardcoded defaults) ║
+ * ║ ║
+ * ╠════════════════════════════════════════════════════════════════════════════╣
+ * ║ IMPORTANT: Environment variables ALWAYS override config.ini values! ║
+ * ╚════════════════════════════════════════════════════════════════════════════╝
+ */
+
import ini from "ini";
import fs from "fs";
import dataDir from "./data_dir.js";
@@ -5,153 +26,594 @@ import path from "path";
import resourceDir from "./resource_dir.js";
import { envToBoolean, stringToInt } from "./utils.js";
+/**
+ * Path to the sample configuration file that serves as a template for new installations.
+ * This file contains all available configuration options with documentation.
+ */
const configSampleFilePath = path.resolve(resourceDir.RESOURCE_DIR, "config-sample.ini");
+/**
+ * Initialize config.ini file if it doesn't exist.
+ * On first run, copies the sample configuration to the data directory,
+ * allowing users to customize their settings.
+ */
if (!fs.existsSync(dataDir.CONFIG_INI_PATH)) {
const configSample = fs.readFileSync(configSampleFilePath).toString("utf8");
-
fs.writeFileSync(dataDir.CONFIG_INI_PATH, configSample);
}
-const iniConfig = ini.parse(fs.readFileSync(dataDir.CONFIG_INI_PATH, "utf-8"));
+/**
+ * Type definition for the parsed INI configuration structure.
+ * The ini parser returns an object with string keys and values that can be
+ * strings, booleans, numbers, or nested objects.
+ */
+type IniConfigValue = string | number | boolean | null | undefined;
+type IniConfigSection = Record;
+type IniConfig = Record;
+/**
+ * Parse the config.ini file into a JavaScript object.
+ * This object contains all user-defined configuration from the INI file,
+ * which will be merged with environment variables and defaults.
+ */
+const iniConfig = ini.parse(fs.readFileSync(dataDir.CONFIG_INI_PATH, "utf-8")) as IniConfig;
+
+/**
+ * Complete type-safe configuration interface for Trilium.
+ * This interface defines all configuration options available through
+ * environment variables, config.ini, or defaults.
+ */
export interface TriliumConfig {
+ /** General application settings */
General: {
+ /** Custom instance name for identifying this Trilium instance */
instanceName: string;
+ /** Whether to disable authentication (useful for local-only instances) */
noAuthentication: boolean;
+ /** Whether to disable automatic backups */
noBackup: boolean;
+ /** Whether to prevent desktop icon creation (desktop app only) */
noDesktopIcon: boolean;
+ /** Whether to run in read-only mode (prevents all data modifications) */
readOnly: boolean;
};
+ /** Network and server configuration */
Network: {
+ /** Host/IP address to bind the server to (e.g., '0.0.0.0' for all interfaces) */
host: string;
+ /** Port number for the HTTP/HTTPS server */
port: string;
+ /** Whether to enable HTTPS (requires certPath and keyPath) */
https: boolean;
+ /** Path to SSL certificate file (required when https=true) */
certPath: string;
+ /** Path to SSL private key file (required when https=true) */
keyPath: string;
+ /** Trust reverse proxy headers (boolean or specific IP/subnet string) */
trustedReverseProxy: boolean | string;
+ /** CORS allowed origins (comma-separated list or '*' for all) */
corsAllowOrigin: string;
+ /** CORS allowed methods (comma-separated HTTP methods) */
corsAllowMethods: string;
+ /** CORS allowed headers (comma-separated header names) */
corsAllowHeaders: string;
};
+ /** Session management configuration */
Session: {
+ /** Maximum age of session cookies in seconds (default: 21 days) */
cookieMaxAge: number;
};
+ /** Synchronization settings for multi-instance setups */
Sync: {
+ /** URL of the sync server to connect to */
syncServerHost: string;
+ /** Timeout for sync operations in milliseconds */
syncServerTimeout: string;
+ /** Proxy URL for sync connections (if behind corporate proxy) */
syncProxy: string;
};
+ /** Multi-factor authentication and OAuth/OpenID configuration */
MultiFactorAuthentication: {
+ /** Base URL for OAuth authentication endpoint */
oauthBaseUrl: string;
+ /** OAuth client ID from your identity provider */
oauthClientId: string;
+ /** OAuth client secret from your identity provider */
oauthClientSecret: string;
+ /** Base URL of the OAuth issuer (e.g., 'https://accounts.google.com') */
oauthIssuerBaseUrl: string;
+ /** Display name of the OAuth provider (shown in UI) */
oauthIssuerName: string;
+ /** URL to the OAuth provider's icon/logo */
oauthIssuerIcon: string;
};
+ /** Logging configuration */
Logging: {
/**
- * The number of days to keep the log files around. When rotating the logs, log files created by Trilium older than the specified amount of time will be deleted.
+ * The number of days to keep the log files around. When rotating the logs,
+ * log files created by Trilium older than the specified amount of time will be deleted.
*/
retentionDays: number;
}
}
+/**
+ * Default retention period for log files in days.
+ * After this period, old log files are automatically deleted during rotation.
+ */
export const LOGGING_DEFAULT_RETENTION_DAYS = 90;
-//prettier-ignore
-const config: TriliumConfig = {
+/**
+ * Configuration value source with precedence handling.
+ * This interface defines how each configuration value is resolved from multiple sources.
+ */
+interface ConfigValue {
+ /**
+ * Standard environment variable name following TRILIUM_[SECTION]_[KEY] pattern.
+ * This is the primary way to override configuration via environment.
+ */
+ standardEnvVar?: string;
+ /**
+ * Alternative environment variable names for additional flexibility.
+ * These provide shorter or more intuitive names for common settings.
+ */
+ aliasEnvVars?: string[];
+ /**
+ * Function to retrieve the value from the parsed INI configuration.
+ * Returns undefined if the value is not set in config.ini.
+ */
+ iniGetter: () => IniConfigValue | IniConfigSection;
+ /**
+ * Default value used when no environment variable or INI value is found.
+ * This ensures every configuration has a sensible default.
+ */
+ defaultValue: T;
+ /**
+ * Optional transformer function to convert string values to the correct type.
+ * Common transformers handle boolean and integer conversions.
+ */
+ transformer?: (value: unknown) => T;
+}
+/**
+ * Core configuration resolution function.
+ *
+ * Resolves configuration values using a clear precedence order:
+ * 1. Standard environment variable (highest priority) - Follows TRILIUM_[SECTION]_[KEY] pattern
+ * 2. Alias environment variables - Alternative names for convenience and compatibility
+ * 3. INI config file value - User-defined settings in config.ini
+ * 4. Default value (lowest priority) - Fallback to ensure valid configuration
+ *
+ * This precedence allows for flexible configuration management:
+ * - Environment variables for container/cloud deployments
+ * - config.ini for traditional installations
+ * - Defaults ensure the application always has valid settings
+ *
+ * @param config - Configuration value definition with sources and transformers
+ * @returns The resolved configuration value with appropriate type
+ */
+function getConfigValue(config: ConfigValue): T {
+ // Check standard env var first
+ if (config.standardEnvVar && process.env[config.standardEnvVar] !== undefined) {
+ const value = process.env[config.standardEnvVar];
+ return config.transformer ? config.transformer(value) : value as T;
+ }
+
+ // Check alternative env vars for additional flexibility
+ if (config.aliasEnvVars) {
+ for (const aliasVar of config.aliasEnvVars) {
+ if (process.env[aliasVar] !== undefined) {
+ const value = process.env[aliasVar];
+ return config.transformer ? config.transformer(value) : value as T;
+ }
+ }
+ }
+
+ // Check INI config
+ const iniValue = config.iniGetter();
+ if (iniValue !== undefined && iniValue !== null && iniValue !== '') {
+ return config.transformer ? config.transformer(iniValue) : iniValue as T;
+ }
+
+ // Return default
+ return config.defaultValue;
+}
+
+/**
+ * Helper function to safely access INI config sections.
+ * The ini parser can return either a section object or a primitive value,
+ * so we need to check the type before accessing nested properties.
+ *
+ * @param sectionName - The name of the INI section to access
+ * @returns The section object or undefined if not found or not an object
+ */
+function getIniSection(sectionName: string): IniConfigSection | undefined {
+ const section = iniConfig[sectionName];
+ if (section && typeof section === 'object' && !Array.isArray(section)) {
+ return section as IniConfigSection;
+ }
+ return undefined;
+}
+
+/**
+ * Transform a value to boolean, handling various input formats.
+ *
+ * This function provides flexible boolean parsing to handle different
+ * configuration sources (environment variables, INI files, etc.):
+ * - String "true"/"false" (case-insensitive)
+ * - String "1"/"0"
+ * - Numeric 1/0
+ * - Actual boolean values
+ * - Any other value defaults to false
+ *
+ * @param value - The value to transform (string, number, boolean, etc.)
+ * @returns The boolean value or false as default
+ */
+function transformBoolean(value: unknown): boolean {
+ // First try the standard envToBoolean function which handles "true"/"false" strings
+ const result = envToBoolean(String(value));
+ if (result !== undefined) return result;
+
+ // Handle numeric boolean values (both string and number types)
+ if (value === "1" || value === 1) return true;
+ if (value === "0" || value === 0) return false;
+
+ // Default to false for any other value
+ return false;
+}
+
+/**
+ * Complete configuration mapping that defines how each setting is resolved.
+ *
+ * This mapping structure:
+ * 1. Mirrors the INI file sections for consistency
+ * 2. Defines multiple sources for each configuration value
+ * 3. Provides type transformers where needed
+ * 4. Maintains compatibility with various environment variable formats
+ *
+ * Environment Variable Patterns:
+ * - Standard: TRILIUM_[SECTION]_[KEY] (e.g., TRILIUM_GENERAL_INSTANCENAME)
+ * - Aliases: Shorter alternatives (e.g., TRILIUM_OAUTH_BASE_URL)
+ *
+ * Both patterns are equally valid and can be used based on preference.
+ * The standard pattern provides consistency, while aliases offer convenience.
+ */
+const configMapping = {
General: {
- instanceName:
- process.env.TRILIUM_GENERAL_INSTANCENAME || iniConfig.General.instanceName || "",
-
- noAuthentication:
- envToBoolean(process.env.TRILIUM_GENERAL_NOAUTHENTICATION) || iniConfig.General.noAuthentication || false,
-
- noBackup:
- envToBoolean(process.env.TRILIUM_GENERAL_NOBACKUP) || iniConfig.General.noBackup || false,
-
- noDesktopIcon:
- envToBoolean(process.env.TRILIUM_GENERAL_NODESKTOPICON) || iniConfig.General.noDesktopIcon || false,
-
- readOnly:
- envToBoolean(process.env.TRILIUM_GENERAL_READONLY) || iniConfig.General.readOnly || false
+ instanceName: {
+ standardEnvVar: 'TRILIUM_GENERAL_INSTANCENAME',
+ iniGetter: () => getIniSection("General")?.instanceName,
+ defaultValue: ''
+ },
+ noAuthentication: {
+ standardEnvVar: 'TRILIUM_GENERAL_NOAUTHENTICATION',
+ iniGetter: () => getIniSection("General")?.noAuthentication,
+ defaultValue: false,
+ transformer: transformBoolean
+ },
+ noBackup: {
+ standardEnvVar: 'TRILIUM_GENERAL_NOBACKUP',
+ iniGetter: () => getIniSection("General")?.noBackup,
+ defaultValue: false,
+ transformer: transformBoolean
+ },
+ noDesktopIcon: {
+ standardEnvVar: 'TRILIUM_GENERAL_NODESKTOPICON',
+ iniGetter: () => getIniSection("General")?.noDesktopIcon,
+ defaultValue: false,
+ transformer: transformBoolean
+ },
+ readOnly: {
+ standardEnvVar: 'TRILIUM_GENERAL_READONLY',
+ iniGetter: () => getIniSection("General")?.readOnly,
+ defaultValue: false,
+ transformer: transformBoolean
+ }
},
-
Network: {
- host:
- process.env.TRILIUM_NETWORK_HOST || iniConfig.Network.host || "0.0.0.0",
-
- port:
- process.env.TRILIUM_NETWORK_PORT || iniConfig.Network.port || "3000",
-
- https:
- envToBoolean(process.env.TRILIUM_NETWORK_HTTPS) || iniConfig.Network.https || false,
-
- certPath:
- process.env.TRILIUM_NETWORK_CERTPATH || iniConfig.Network.certPath || "",
-
- keyPath:
- process.env.TRILIUM_NETWORK_KEYPATH || iniConfig.Network.keyPath || "",
-
- trustedReverseProxy:
- process.env.TRILIUM_NETWORK_TRUSTEDREVERSEPROXY || iniConfig.Network.trustedReverseProxy || false,
-
- corsAllowOrigin:
- process.env.TRILIUM_NETWORK_CORS_ALLOW_ORIGIN || iniConfig.Network.corsAllowOrigin || "",
-
- corsAllowMethods:
- process.env.TRILIUM_NETWORK_CORS_ALLOW_METHODS || iniConfig.Network.corsAllowMethods || "",
-
- corsAllowHeaders:
- process.env.TRILIUM_NETWORK_CORS_ALLOW_HEADERS || iniConfig.Network.corsAllowHeaders || ""
+ host: {
+ standardEnvVar: 'TRILIUM_NETWORK_HOST',
+ iniGetter: () => getIniSection("Network")?.host,
+ defaultValue: '0.0.0.0'
+ },
+ port: {
+ standardEnvVar: 'TRILIUM_NETWORK_PORT',
+ iniGetter: () => getIniSection("Network")?.port,
+ defaultValue: '3000'
+ },
+ https: {
+ standardEnvVar: 'TRILIUM_NETWORK_HTTPS',
+ iniGetter: () => getIniSection("Network")?.https,
+ defaultValue: false,
+ transformer: transformBoolean
+ },
+ certPath: {
+ standardEnvVar: 'TRILIUM_NETWORK_CERTPATH',
+ iniGetter: () => getIniSection("Network")?.certPath,
+ defaultValue: ''
+ },
+ keyPath: {
+ standardEnvVar: 'TRILIUM_NETWORK_KEYPATH',
+ iniGetter: () => getIniSection("Network")?.keyPath,
+ defaultValue: ''
+ },
+ trustedReverseProxy: {
+ standardEnvVar: 'TRILIUM_NETWORK_TRUSTEDREVERSEPROXY',
+ iniGetter: () => getIniSection("Network")?.trustedReverseProxy,
+ defaultValue: false as boolean | string
+ },
+ corsAllowOrigin: {
+ standardEnvVar: 'TRILIUM_NETWORK_CORSALLOWORIGIN',
+ // alternative with underscore format
+ aliasEnvVars: ['TRILIUM_NETWORK_CORS_ALLOW_ORIGIN'],
+ iniGetter: () => getIniSection("Network")?.corsAllowOrigin,
+ defaultValue: ''
+ },
+ corsAllowMethods: {
+ standardEnvVar: 'TRILIUM_NETWORK_CORSALLOWMETHODS',
+ // alternative with underscore format
+ aliasEnvVars: ['TRILIUM_NETWORK_CORS_ALLOW_METHODS'],
+ iniGetter: () => getIniSection("Network")?.corsAllowMethods,
+ defaultValue: ''
+ },
+ corsAllowHeaders: {
+ standardEnvVar: 'TRILIUM_NETWORK_CORSALLOWHEADERS',
+ // alternative with underscore format
+ aliasEnvVars: ['TRILIUM_NETWORK_CORS_ALLOW_HEADERS'],
+ iniGetter: () => getIniSection("Network")?.corsAllowHeaders,
+ defaultValue: ''
+ }
},
-
Session: {
- cookieMaxAge:
- parseInt(String(process.env.TRILIUM_SESSION_COOKIEMAXAGE)) || parseInt(iniConfig?.Session?.cookieMaxAge) || 21 * 24 * 60 * 60 // 21 Days in Seconds
+ cookieMaxAge: {
+ standardEnvVar: 'TRILIUM_SESSION_COOKIEMAXAGE',
+ iniGetter: () => getIniSection("Session")?.cookieMaxAge,
+ defaultValue: 21 * 24 * 60 * 60, // 21 Days in Seconds
+ transformer: (value: unknown) => parseInt(String(value)) || 21 * 24 * 60 * 60
+ }
},
-
Sync: {
- syncServerHost:
- process.env.TRILIUM_SYNC_SERVER_HOST || iniConfig?.Sync?.syncServerHost || "",
-
- syncServerTimeout:
- process.env.TRILIUM_SYNC_SERVER_TIMEOUT || iniConfig?.Sync?.syncServerTimeout || "120000",
-
- syncProxy:
- // additionally checking in iniConfig for inconsistently named syncProxy for backwards compatibility
- process.env.TRILIUM_SYNC_SERVER_PROXY || iniConfig?.Sync?.syncProxy || iniConfig?.Sync?.syncServerProxy || ""
+ syncServerHost: {
+ standardEnvVar: 'TRILIUM_SYNC_SYNCSERVERHOST',
+ // alternative format
+ aliasEnvVars: ['TRILIUM_SYNC_SERVER_HOST'],
+ iniGetter: () => getIniSection("Sync")?.syncServerHost,
+ defaultValue: ''
+ },
+ syncServerTimeout: {
+ standardEnvVar: 'TRILIUM_SYNC_SYNCSERVERTIMEOUT',
+ // alternative format
+ aliasEnvVars: ['TRILIUM_SYNC_SERVER_TIMEOUT'],
+ iniGetter: () => getIniSection("Sync")?.syncServerTimeout,
+ defaultValue: '120000'
+ },
+ syncProxy: {
+ standardEnvVar: 'TRILIUM_SYNC_SYNCPROXY',
+ // alternative shorter formats
+ aliasEnvVars: ['TRILIUM_SYNC_SERVER_PROXY'],
+ // The INI config uses 'syncServerProxy' key for historical reasons (see config-sample.ini)
+ // We check both 'syncProxy' and 'syncServerProxy' for backward compatibility with old configs
+ iniGetter: () => getIniSection("Sync")?.syncProxy || getIniSection("Sync")?.syncServerProxy,
+ defaultValue: ''
+ }
},
-
MultiFactorAuthentication: {
- oauthBaseUrl:
- process.env.TRILIUM_OAUTH_BASE_URL || iniConfig?.MultiFactorAuthentication?.oauthBaseUrl || "",
-
- oauthClientId:
- process.env.TRILIUM_OAUTH_CLIENT_ID || iniConfig?.MultiFactorAuthentication?.oauthClientId || "",
-
- oauthClientSecret:
- process.env.TRILIUM_OAUTH_CLIENT_SECRET || iniConfig?.MultiFactorAuthentication?.oauthClientSecret || "",
-
- oauthIssuerBaseUrl:
- process.env.TRILIUM_OAUTH_ISSUER_BASE_URL || iniConfig?.MultiFactorAuthentication?.oauthIssuerBaseUrl || "https://accounts.google.com",
-
- oauthIssuerName:
- process.env.TRILIUM_OAUTH_ISSUER_NAME || iniConfig?.MultiFactorAuthentication?.oauthIssuerName || "Google",
-
- oauthIssuerIcon:
- process.env.TRILIUM_OAUTH_ISSUER_ICON || iniConfig?.MultiFactorAuthentication?.oauthIssuerIcon || ""
+ oauthBaseUrl: {
+ standardEnvVar: 'TRILIUM_MULTIFACTORAUTHENTICATION_OAUTHBASEURL',
+ // alternative shorter format (commonly used)
+ aliasEnvVars: ['TRILIUM_OAUTH_BASE_URL'],
+ iniGetter: () => getIniSection("MultiFactorAuthentication")?.oauthBaseUrl,
+ defaultValue: ''
+ },
+ oauthClientId: {
+ standardEnvVar: 'TRILIUM_MULTIFACTORAUTHENTICATION_OAUTHCLIENTID',
+ // alternative format
+ aliasEnvVars: ['TRILIUM_OAUTH_CLIENT_ID'],
+ iniGetter: () => getIniSection("MultiFactorAuthentication")?.oauthClientId,
+ defaultValue: ''
+ },
+ oauthClientSecret: {
+ standardEnvVar: 'TRILIUM_MULTIFACTORAUTHENTICATION_OAUTHCLIENTSECRET',
+ // alternative format
+ aliasEnvVars: ['TRILIUM_OAUTH_CLIENT_SECRET'],
+ iniGetter: () => getIniSection("MultiFactorAuthentication")?.oauthClientSecret,
+ defaultValue: ''
+ },
+ oauthIssuerBaseUrl: {
+ standardEnvVar: 'TRILIUM_MULTIFACTORAUTHENTICATION_OAUTHISSUERBASEURL',
+ // alternative format
+ aliasEnvVars: ['TRILIUM_OAUTH_ISSUER_BASE_URL'],
+ iniGetter: () => getIniSection("MultiFactorAuthentication")?.oauthIssuerBaseUrl,
+ defaultValue: 'https://accounts.google.com'
+ },
+ oauthIssuerName: {
+ standardEnvVar: 'TRILIUM_MULTIFACTORAUTHENTICATION_OAUTHISSUERNAME',
+ // alternative format
+ aliasEnvVars: ['TRILIUM_OAUTH_ISSUER_NAME'],
+ iniGetter: () => getIniSection("MultiFactorAuthentication")?.oauthIssuerName,
+ defaultValue: 'Google'
+ },
+ oauthIssuerIcon: {
+ standardEnvVar: 'TRILIUM_MULTIFACTORAUTHENTICATION_OAUTHISSUERICON',
+ // alternative format
+ aliasEnvVars: ['TRILIUM_OAUTH_ISSUER_ICON'],
+ iniGetter: () => getIniSection("MultiFactorAuthentication")?.oauthIssuerIcon,
+ defaultValue: ''
+ }
},
-
Logging: {
- retentionDays:
- stringToInt(process.env.TRILIUM_LOGGING_RETENTION_DAYS) ??
- stringToInt(iniConfig?.Logging?.retentionDays) ??
- LOGGING_DEFAULT_RETENTION_DAYS
+ retentionDays: {
+ standardEnvVar: 'TRILIUM_LOGGING_RETENTIONDAYS',
+ // alternative with underscore format
+ aliasEnvVars: ['TRILIUM_LOGGING_RETENTION_DAYS'],
+ iniGetter: () => getIniSection("Logging")?.retentionDays,
+ defaultValue: LOGGING_DEFAULT_RETENTION_DAYS,
+ transformer: (value: unknown) => stringToInt(String(value)) ?? LOGGING_DEFAULT_RETENTION_DAYS
+ }
}
};
-export default config;
+/**
+ * Build the final configuration object by resolving all values through the mapping.
+ *
+ * This creates the runtime configuration used throughout the application by:
+ * 1. Iterating through each section and key in the mapping
+ * 2. Calling getConfigValue() to resolve each setting with proper precedence
+ * 3. Applying type transformers where needed (booleans, integers)
+ * 4. Returning a fully typed TriliumConfig object
+ *
+ * The resulting config object is immutable at runtime and represents
+ * the complete application configuration.
+ */
+const config: TriliumConfig = {
+ General: {
+ instanceName: getConfigValue(configMapping.General.instanceName),
+ noAuthentication: getConfigValue(configMapping.General.noAuthentication),
+ noBackup: getConfigValue(configMapping.General.noBackup),
+ noDesktopIcon: getConfigValue(configMapping.General.noDesktopIcon),
+ readOnly: getConfigValue(configMapping.General.readOnly)
+ },
+ Network: {
+ host: getConfigValue(configMapping.Network.host),
+ port: getConfigValue(configMapping.Network.port),
+ https: getConfigValue(configMapping.Network.https),
+ certPath: getConfigValue(configMapping.Network.certPath),
+ keyPath: getConfigValue(configMapping.Network.keyPath),
+ trustedReverseProxy: getConfigValue(configMapping.Network.trustedReverseProxy),
+ corsAllowOrigin: getConfigValue(configMapping.Network.corsAllowOrigin),
+ corsAllowMethods: getConfigValue(configMapping.Network.corsAllowMethods),
+ corsAllowHeaders: getConfigValue(configMapping.Network.corsAllowHeaders)
+ },
+ Session: {
+ cookieMaxAge: getConfigValue(configMapping.Session.cookieMaxAge)
+ },
+ Sync: {
+ syncServerHost: getConfigValue(configMapping.Sync.syncServerHost),
+ syncServerTimeout: getConfigValue(configMapping.Sync.syncServerTimeout),
+ syncProxy: getConfigValue(configMapping.Sync.syncProxy)
+ },
+ MultiFactorAuthentication: {
+ oauthBaseUrl: getConfigValue(configMapping.MultiFactorAuthentication.oauthBaseUrl),
+ oauthClientId: getConfigValue(configMapping.MultiFactorAuthentication.oauthClientId),
+ oauthClientSecret: getConfigValue(configMapping.MultiFactorAuthentication.oauthClientSecret),
+ oauthIssuerBaseUrl: getConfigValue(configMapping.MultiFactorAuthentication.oauthIssuerBaseUrl),
+ oauthIssuerName: getConfigValue(configMapping.MultiFactorAuthentication.oauthIssuerName),
+ oauthIssuerIcon: getConfigValue(configMapping.MultiFactorAuthentication.oauthIssuerIcon)
+ },
+ Logging: {
+ retentionDays: getConfigValue(configMapping.Logging.retentionDays)
+ }
+};
+
+/**
+ * =====================================================================
+ * ENVIRONMENT VARIABLE REFERENCE
+ * =====================================================================
+ *
+ * Trilium supports flexible environment variable configuration with multiple
+ * naming patterns. Both formats below are equally valid and can be used
+ * based on your preference.
+ *
+ * CONFIGURATION PRECEDENCE:
+ * 1. Environment variables (highest priority)
+ * 2. config.ini file values
+ * 3. Default values (lowest priority)
+ *
+ * FULL FORMAT VARIABLES (following TRILIUM_[SECTION]_[KEY] pattern):
+ * ====================================================================
+ *
+ * General Section:
+ * - TRILIUM_GENERAL_INSTANCENAME : Custom instance identifier
+ * - TRILIUM_GENERAL_NOAUTHENTICATION : Disable auth (true/false)
+ * - TRILIUM_GENERAL_NOBACKUP : Disable backups (true/false)
+ * - TRILIUM_GENERAL_NODESKTOPICON : No desktop icon (true/false)
+ * - TRILIUM_GENERAL_READONLY : Read-only mode (true/false)
+ *
+ * Network Section:
+ * - TRILIUM_NETWORK_HOST : Bind address (e.g., "0.0.0.0")
+ * - TRILIUM_NETWORK_PORT : Server port (e.g., "8080")
+ * - TRILIUM_NETWORK_HTTPS : Enable HTTPS (true/false)
+ * - TRILIUM_NETWORK_CERTPATH : SSL certificate file path
+ * - TRILIUM_NETWORK_KEYPATH : SSL private key file path
+ * - TRILIUM_NETWORK_TRUSTEDREVERSEPROXY : Trust proxy headers (true/false/IP)
+ * - TRILIUM_NETWORK_CORSALLOWORIGIN : CORS allowed origins
+ * - TRILIUM_NETWORK_CORSALLOWMETHODS : CORS allowed HTTP methods
+ * - TRILIUM_NETWORK_CORSALLOWHEADERS : CORS allowed headers
+ *
+ * Session Section:
+ * - TRILIUM_SESSION_COOKIEMAXAGE : Cookie lifetime in seconds
+ *
+ * Sync Section:
+ * - TRILIUM_SYNC_SYNCSERVERHOST : Sync server URL
+ * - TRILIUM_SYNC_SYNCSERVERTIMEOUT : Sync timeout in milliseconds
+ * - TRILIUM_SYNC_SYNCPROXY : Proxy URL for sync
+ *
+ * Multi-Factor Authentication Section:
+ * - TRILIUM_MULTIFACTORAUTHENTICATION_OAUTHBASEURL : OAuth base URL
+ * - TRILIUM_MULTIFACTORAUTHENTICATION_OAUTHCLIENTID : OAuth client ID
+ * - TRILIUM_MULTIFACTORAUTHENTICATION_OAUTHCLIENTSECRET : OAuth client secret
+ * - TRILIUM_MULTIFACTORAUTHENTICATION_OAUTHISSUERBASEURL : OAuth issuer URL
+ * - TRILIUM_MULTIFACTORAUTHENTICATION_OAUTHISSUERNAME : OAuth provider name
+ * - TRILIUM_MULTIFACTORAUTHENTICATION_OAUTHISSUERICON : OAuth provider icon
+ *
+ * Logging Section:
+ * - TRILIUM_LOGGING_RETENTIONDAYS : Log retention period in days
+ *
+ * SHORTER ALTERNATIVE VARIABLES (equally valid, for convenience):
+ * ================================================================
+ *
+ * Network CORS (with underscores):
+ * - TRILIUM_NETWORK_CORS_ALLOW_ORIGIN : Same as TRILIUM_NETWORK_CORSALLOWORIGIN
+ * - TRILIUM_NETWORK_CORS_ALLOW_METHODS : Same as TRILIUM_NETWORK_CORSALLOWMETHODS
+ * - TRILIUM_NETWORK_CORS_ALLOW_HEADERS : Same as TRILIUM_NETWORK_CORSALLOWHEADERS
+ *
+ * Sync (with SERVER prefix):
+ * - TRILIUM_SYNC_SERVER_HOST : Same as TRILIUM_SYNC_SYNCSERVERHOST
+ * - TRILIUM_SYNC_SERVER_TIMEOUT : Same as TRILIUM_SYNC_SYNCSERVERTIMEOUT
+ * - TRILIUM_SYNC_SERVER_PROXY : Same as TRILIUM_SYNC_SYNCPROXY
+ *
+ * OAuth (simplified without section name):
+ * - TRILIUM_OAUTH_BASE_URL : Same as TRILIUM_MULTIFACTORAUTHENTICATION_OAUTHBASEURL
+ * - TRILIUM_OAUTH_CLIENT_ID : Same as TRILIUM_MULTIFACTORAUTHENTICATION_OAUTHCLIENTID
+ * - TRILIUM_OAUTH_CLIENT_SECRET : Same as TRILIUM_MULTIFACTORAUTHENTICATION_OAUTHCLIENTSECRET
+ * - TRILIUM_OAUTH_ISSUER_BASE_URL : Same as TRILIUM_MULTIFACTORAUTHENTICATION_OAUTHISSUERBASEURL
+ * - TRILIUM_OAUTH_ISSUER_NAME : Same as TRILIUM_MULTIFACTORAUTHENTICATION_OAUTHISSUERNAME
+ * - TRILIUM_OAUTH_ISSUER_ICON : Same as TRILIUM_MULTIFACTORAUTHENTICATION_OAUTHISSUERICON
+ *
+ * Logging (with underscore):
+ * - TRILIUM_LOGGING_RETENTION_DAYS : Same as TRILIUM_LOGGING_RETENTIONDAYS
+ *
+ * BOOLEAN VALUES:
+ * - Accept: "true", "false", "1", "0", 1, 0
+ * - Default to false for invalid values
+ *
+ * EXAMPLES:
+ * export TRILIUM_NETWORK_PORT="8080" # Using full format
+ * export TRILIUM_OAUTH_CLIENT_ID="my-client-id" # Using shorter alternative
+ * export TRILIUM_GENERAL_NOAUTHENTICATION="true" # Boolean value
+ * export TRILIUM_SYNC_SERVER_HOST="https://sync.example.com" # Using alternative with SERVER
+ */
+
+/**
+ * The exported configuration object used throughout the Trilium application.
+ * This object is resolved once at startup and remains immutable during runtime.
+ *
+ * To override any setting:
+ * 1. Set an environment variable (see documentation above)
+ * 2. Edit config.ini in your data directory
+ * 3. Defaults will be used if neither is provided
+ *
+ * @example
+ * // Accessing configuration in other modules:
+ * import config from './services/config.js';
+ *
+ * if (config.General.noAuthentication) {
+ * // Skip authentication checks
+ * }
+ *
+ * const server = https.createServer({
+ * cert: fs.readFileSync(config.Network.certPath),
+ * key: fs.readFileSync(config.Network.keyPath)
+ * });
+ */
+export default config;
\ No newline at end of file
diff --git a/apps/server/src/services/i18n.ts b/apps/server/src/services/i18n.ts
index 4344f462f..edc2115b8 100644
--- a/apps/server/src/services/i18n.ts
+++ b/apps/server/src/services/i18n.ts
@@ -18,7 +18,7 @@ const DAYJS_LOADER: Record Promise import("dayjs/locale/he.js"),
"ja": () => import("dayjs/locale/ja.js"),
"ku": () => import("dayjs/locale/ku.js"),
- "pt_BR": () => import("dayjs/locale/pt-BR.js"),
+ "pt_br": () => import("dayjs/locale/pt-br.js"),
"ro": () => import("dayjs/locale/ro.js"),
"ru": () => import("dayjs/locale/ru.js"),
"tw": () => import("dayjs/locale/zh-tw.js"),
diff --git a/docs/User Guide/User Guide/Advanced Usage/Configuration (config.ini or e.md b/docs/User Guide/User Guide/Advanced Usage/Configuration (config.ini or e.md
index 6361cd6e1..292451913 100644
--- a/docs/User Guide/User Guide/Advanced Usage/Configuration (config.ini or e.md
+++ b/docs/User Guide/User Guide/Advanced Usage/Configuration (config.ini or e.md
@@ -1,30 +1,155 @@
# Configuration (config.ini or environment variables)
-Trilium supports configuration via a file named `config.ini` and environment variables. Please review the file named [config-sample.ini](https://github.com/TriliumNext/Trilium/blob/main/apps/server/src/assets/config-sample.ini) in the [Trilium](https://github.com/TriliumNext/Trilium) repository to see what values are supported.
-You can provide the same values via environment variables instead of the `config.ini` file, and these environment variables use the following format:
+Trilium supports configuration via a file named `config.ini` and environment variables. This document provides a comprehensive reference for all configuration options.
-1. Environment variables should be prefixed with `TRILIUM_` and use underscores to represent the INI section structure.
-2. The format is: `TRILIUM__=`
-3. The environment variables will override any matching values from config.ini
+## Configuration Precedence
-For example, if you have this in your config.ini:
+Configuration values are loaded in the following order of precedence (highest to lowest):
+1. **Environment variables** (checked first)
+2. **config.ini file values**
+3. **Default values**
-```
-[Network]
-host=localhost
-port=8080
+## Environment Variable Patterns
+
+Trilium supports multiple environment variable patterns for flexibility. The primary pattern is: `TRILIUM_[SECTION]_[KEY]`
+
+Where:
+- `SECTION` is the INI section name in UPPERCASE
+- `KEY` is the camelCase configuration key converted to UPPERCASE (e.g., `instanceName` → `INSTANCENAME`)
+
+Additionally, shorter aliases are available for common configurations (see Alternative Variables section below).
+
+## Environment Variable Reference
+
+### General Section
+
+| Environment Variable | Type | Default | Description |
+|------------------|------|---------|-------------|
+| `TRILIUM_GENERAL_INSTANCENAME` | string | "" | Instance name for API identification |
+| `TRILIUM_GENERAL_NOAUTHENTICATION` | boolean | false | Disable authentication (server only) |
+| `TRILIUM_GENERAL_NOBACKUP` | boolean | false | Disable automatic backups |
+| `TRILIUM_GENERAL_NODESKTOPICON` | boolean | false | Disable desktop icon creation |
+| `TRILIUM_GENERAL_READONLY` | boolean | false | Enable read-only mode |
+
+### Network Section
+
+| Environment Variable | Type | Default | Description |
+|------------------|------|---------|-------------|
+| `TRILIUM_NETWORK_HOST` | string | "0.0.0.0" | Server host binding |
+| `TRILIUM_NETWORK_PORT` | string | "3000" | Server port |
+| `TRILIUM_NETWORK_HTTPS` | boolean | false | Enable HTTPS |
+| `TRILIUM_NETWORK_CERTPATH` | string | "" | SSL certificate path |
+| `TRILIUM_NETWORK_KEYPATH` | string | "" | SSL key path |
+| `TRILIUM_NETWORK_TRUSTEDREVERSEPROXY` | boolean/string | false | Reverse proxy trust settings |
+| `TRILIUM_NETWORK_CORSALLOWORIGIN` | string | "" | CORS allowed origins |
+| `TRILIUM_NETWORK_CORSALLOWMETHODS` | string | "" | CORS allowed methods |
+| `TRILIUM_NETWORK_CORSALLOWHEADERS` | string | "" | CORS allowed headers |
+
+### Session Section
+
+| Environment Variable | Type | Default | Description |
+|------------------|------|---------|-------------|
+| `TRILIUM_SESSION_COOKIEMAXAGE` | integer | 1814400 | Session cookie max age in seconds (21 days) |
+
+### Sync Section
+
+| Environment Variable | Type | Default | Description |
+|------------------|------|---------|-------------|
+| `TRILIUM_SYNC_SYNCSERVERHOST` | string | "" | Sync server host URL |
+| `TRILIUM_SYNC_SYNCSERVERTIMEOUT` | string | "120000" | Sync server timeout in milliseconds |
+| `TRILIUM_SYNC_SYNCPROXY` | string | "" | Sync proxy URL |
+
+### MultiFactorAuthentication Section
+
+| Environment Variable | Type | Default | Description |
+|------------------|------|---------|-------------|
+| `TRILIUM_MULTIFACTORAUTHENTICATION_OAUTHBASEURL` | string | "" | OAuth/OpenID base URL |
+| `TRILIUM_MULTIFACTORAUTHENTICATION_OAUTHCLIENTID` | string | "" | OAuth client ID |
+| `TRILIUM_MULTIFACTORAUTHENTICATION_OAUTHCLIENTSECRET` | string | "" | OAuth client secret |
+| `TRILIUM_MULTIFACTORAUTHENTICATION_OAUTHISSUERBASEURL` | string | "https://accounts.google.com" | OAuth issuer base URL |
+| `TRILIUM_MULTIFACTORAUTHENTICATION_OAUTHISSUERNAME` | string | "Google" | OAuth issuer display name |
+| `TRILIUM_MULTIFACTORAUTHENTICATION_OAUTHISSUERICON` | string | "" | OAuth issuer icon URL |
+
+### Logging Section
+
+| Environment Variable | Type | Default | Description |
+|------------------|------|---------|-------------|
+| `TRILIUM_LOGGING_RETENTIONDAYS` | integer | 90 | Number of days to retain log files |
+
+## Alternative Environment Variables
+
+The following alternative environment variable names are also supported and work identically to their longer counterparts:
+
+### Network CORS Variables
+- `TRILIUM_NETWORK_CORS_ALLOW_ORIGIN` (alternative to `TRILIUM_NETWORK_CORSALLOWORIGIN`)
+- `TRILIUM_NETWORK_CORS_ALLOW_METHODS` (alternative to `TRILIUM_NETWORK_CORSALLOWMETHODS`)
+- `TRILIUM_NETWORK_CORS_ALLOW_HEADERS` (alternative to `TRILIUM_NETWORK_CORSALLOWHEADERS`)
+
+### Sync Variables
+- `TRILIUM_SYNC_SERVER_HOST` (alternative to `TRILIUM_SYNC_SYNCSERVERHOST`)
+- `TRILIUM_SYNC_SERVER_TIMEOUT` (alternative to `TRILIUM_SYNC_SYNCSERVERTIMEOUT`)
+- `TRILIUM_SYNC_SERVER_PROXY` (alternative to `TRILIUM_SYNC_SYNCPROXY`)
+
+### OAuth/MFA Variables
+- `TRILIUM_OAUTH_BASE_URL` (alternative to `TRILIUM_MULTIFACTORAUTHENTICATION_OAUTHBASEURL`)
+- `TRILIUM_OAUTH_CLIENT_ID` (alternative to `TRILIUM_MULTIFACTORAUTHENTICATION_OAUTHCLIENTID`)
+- `TRILIUM_OAUTH_CLIENT_SECRET` (alternative to `TRILIUM_MULTIFACTORAUTHENTICATION_OAUTHCLIENTSECRET`)
+- `TRILIUM_OAUTH_ISSUER_BASE_URL` (alternative to `TRILIUM_MULTIFACTORAUTHENTICATION_OAUTHISSUERBASEURL`)
+- `TRILIUM_OAUTH_ISSUER_NAME` (alternative to `TRILIUM_MULTIFACTORAUTHENTICATION_OAUTHISSUERNAME`)
+- `TRILIUM_OAUTH_ISSUER_ICON` (alternative to `TRILIUM_MULTIFACTORAUTHENTICATION_OAUTHISSUERICON`)
+
+### Logging Variables
+- `TRILIUM_LOGGING_RETENTION_DAYS` (alternative to `TRILIUM_LOGGING_RETENTIONDAYS`)
+
+## Boolean Values
+
+Boolean environment variables accept the following values:
+- **True**: `"true"`, `"1"`, `1`
+- **False**: `"false"`, `"0"`, `0`
+- Any other value defaults to `false`
+
+## Using Environment Variables
+
+Both naming patterns are fully supported and can be used interchangeably:
+
+- The longer format follows the section/key pattern for consistency with the INI file structure
+- The shorter alternatives provide convenience for common configurations
+- You can use whichever format you prefer - both are equally valid
+
+## Examples
+
+### Docker Compose Example
+```yaml
+services:
+ trilium:
+ image: triliumnext/notes
+ environment:
+ # Using full format
+ TRILIUM_GENERAL_INSTANCENAME: "My Trilium Instance"
+ TRILIUM_NETWORK_PORT: "8080"
+ TRILIUM_NETWORK_CORSALLOWORIGIN: "https://myapp.com"
+ TRILIUM_SYNC_SYNCSERVERHOST: "https://sync.example.com"
+ TRILIUM_MULTIFACTORAUTHENTICATION_OAUTHBASEURL: "https://auth.example.com"
+
+ # Or using shorter alternatives (equally valid)
+ # TRILIUM_NETWORK_CORS_ALLOW_ORIGIN: "https://myapp.com"
+ # TRILIUM_SYNC_SERVER_HOST: "https://sync.example.com"
+ # TRILIUM_OAUTH_BASE_URL: "https://auth.example.com"
```
-You can override these values using environment variables:
+### Shell Export Example
+```bash
+# Using either format
+export TRILIUM_GENERAL_NOAUTHENTICATION=false
+export TRILIUM_NETWORK_HTTPS=true
+export TRILIUM_NETWORK_CERTPATH=/path/to/cert.pem
+export TRILIUM_NETWORK_KEYPATH=/path/to/key.pem
+export TRILIUM_LOGGING_RETENTIONDAYS=30
-```
-TRILIUM_NETWORK_HOST=0.0.0.0
-TRILIUM_NETWORK_PORT=9000
+# Start Trilium
+npm start
```
-The code will:
+## config.ini Reference
-1. First load the `config.ini` file as before
-2. Then scan all environment variables for ones starting with `TRILIUM_`
-3. Parse these variables into section/key pairs
-4. Merge them with the config from the file, with environment variables taking precedence
\ No newline at end of file
+For the complete list of configuration options and their INI file format, please review the [config-sample.ini](https://github.com/TriliumNext/Trilium/blob/main/apps/server/src/assets/config-sample.ini) file in the Trilium repository
\ No newline at end of file
diff --git a/docs/User Guide/User Guide/Installation & Setup/Server Installation/1. Installing the server/Using Docker.md b/docs/User Guide/User Guide/Installation & Setup/Server Installation/1. Installing the server/Using Docker.md
index 0b4fa5055..b11c079a2 100644
--- a/docs/User Guide/User Guide/Installation & Setup/Server Installation/1. Installing the server/Using Docker.md
+++ b/docs/User Guide/User Guide/Installation & Setup/Server Installation/1. Installing the server/Using Docker.md
@@ -187,6 +187,8 @@ docker run -d --name trilium -p 8080:8080 --user $(id -u):$(id -g) -v ~/trilium-
* `TRILIUM_GID`: GID to use for the container process (passed to Docker's `--user` flag)
* `TRILIUM_DATA_DIR`: Path to the data directory inside the container (default: `/home/node/trilium-data`)
+For a complete list of configuration environment variables (network settings, authentication, sync, etc.), see Configuration (config.ini or environment variables) .
+
### Volume Permissions
If you encounter permission issues with the data volume, ensure that:
diff --git a/docs/User Guide/User Guide/Installation & Setup/Server Installation/Multi-Factor Authentication.md b/docs/User Guide/User Guide/Installation & Setup/Server Installation/Multi-Factor Authentication.md
index d90c19434..ee6e93363 100644
--- a/docs/User Guide/User Guide/Installation & Setup/Server Installation/Multi-Factor Authentication.md
+++ b/docs/User Guide/User Guide/Installation & Setup/Server Installation/Multi-Factor Authentication.md
@@ -37,7 +37,9 @@ MFA can only be set up on a server instance.
In order to setup OpenID, you will need to setup a authentication provider. This requires a bit of extra setup. Follow [these instructions](https://developers.google.com/identity/openid-connect/openid-connect) to setup an OpenID service through google. The Redirect URL of Trilium is `https:///callback`.
1. Set the `oauthBaseUrl`, `oauthClientId` and `oauthClientSecret` in the `config.ini` file (check Configuration (config.ini or environment variables) for more information).
- 1. You can also setup through environment variables (`TRILIUM_OAUTH_BASE_URL`, `TRILIUM_OAUTH_CLIENT_ID` and `TRILIUM_OAUTH_CLIENT_SECRET`).
+ 1. You can also setup through environment variables:
+ - Standard: `TRILIUM_MULTIFACTORAUTHENTICATION_OAUTHBASEURL`, `TRILIUM_MULTIFACTORAUTHENTICATION_OAUTHCLIENTID`, `TRILIUM_MULTIFACTORAUTHENTICATION_OAUTHCLIENTSECRET`
+ - Legacy (still supported): `TRILIUM_OAUTH_BASE_URL`, `TRILIUM_OAUTH_CLIENT_ID`, `TRILIUM_OAUTH_CLIENT_SECRET`
2. `oauthBaseUrl` should be the link of your Trilium instance server, for example, `https://`.
2. Restart the server
3. Go to "Menu" -> "Options" -> "MFA"
@@ -46,7 +48,11 @@ In order to setup OpenID, you will need to setup a authentication provider. This
6. Refresh the page and login through OpenID provider
> [!NOTE]
-> The default OAuth issuer is Google. To use other services such as Authentik or Auth0, you can configure the settings via `oauthIssuerBaseUrl`, `oauthIssuerName`, and `oauthIssuerIcon` in the `config.ini` file. Alternatively, these values can be set using environment variables: `TRILIUM_OAUTH_ISSUER_BASE_URL`, `TRILIUM_OAUTH_ISSUER_NAME`, and `TRILIUM_OAUTH_ISSUER_ICON`. `oauthIssuerName` and `oauthIssuerIcon` are required for displaying correct issuer information at the Login page.
+> The default OAuth issuer is Google. To use other services such as Authentik or Auth0, you can configure the settings via `oauthIssuerBaseUrl`, `oauthIssuerName`, and `oauthIssuerIcon` in the `config.ini` file. Alternatively, these values can be set using environment variables:
+> - Standard: `TRILIUM_MULTIFACTORAUTHENTICATION_OAUTHISSUERBASEURL`, `TRILIUM_MULTIFACTORAUTHENTICATION_OAUTHISSUERNAME`, `TRILIUM_MULTIFACTORAUTHENTICATION_OAUTHISSUERICON`
+> - Legacy (still supported): `TRILIUM_OAUTH_ISSUER_BASE_URL`, `TRILIUM_OAUTH_ISSUER_NAME`, `TRILIUM_OAUTH_ISSUER_ICON`
+>
+> `oauthIssuerName` and `oauthIssuerIcon` are required for displaying correct issuer information at the Login page.
#### Authentik
diff --git a/docs/User Guide/User Guide/Installation & Setup/Server Installation/TLS Configuration.md b/docs/User Guide/User Guide/Installation & Setup/Server Installation/TLS Configuration.md
index 67551f115..d4004a8cb 100644
--- a/docs/User Guide/User Guide/Installation & Setup/Server Installation/TLS Configuration.md
+++ b/docs/User Guide/User Guide/Installation & Setup/Server Installation/TLS Configuration.md
@@ -25,7 +25,13 @@ certPath=/[username]/.acme.sh/[hostname]/fullchain.cer
keyPath=/[username]/.acme.sh/[hostname]/example.com.key
```
-You can also review the [configuration](../../Advanced%20Usage/Configuration%20\(config.ini%20or%20e.md) file to provide all `config.ini` values as environment variables instead.
+You can also review the [configuration](../../Advanced%20Usage/Configuration%20\(config.ini%20or%20e.md) file to provide all `config.ini` values as environment variables instead. For example, you can configure TLS using environment variables:
+
+```bash
+export TRILIUM_NETWORK_HTTPS=true
+export TRILIUM_NETWORK_CERTPATH=/path/to/cert.pem
+export TRILIUM_NETWORK_KEYPATH=/path/to/key.pem
+```
The above example shows how this is set up in an environment where the certificate was generated using Let's Encrypt's ACME utility. Your paths may differ. For Docker installations, ensure these paths are within a volume or another directory accessible by the Docker container, such as `/home/node/trilium-data/[DIR IN DATA DIRECTORY]`.
diff --git a/package.json b/package.json
index 1917e473e..a12c2c002 100644
--- a/package.json
+++ b/package.json
@@ -59,7 +59,7 @@
"react-refresh": "^0.17.0",
"rollup-plugin-webpack-stats": "2.1.4",
"tslib": "^2.3.0",
- "tsx": "4.20.4",
+ "tsx": "4.20.5",
"typescript": "~5.9.0",
"typescript-eslint": "^8.19.0",
"upath": "2.0.1",
diff --git a/packages/commons/src/lib/i18n.ts b/packages/commons/src/lib/i18n.ts
index 24d775658..5f2470aa3 100644
--- a/packages/commons/src/lib/i18n.ts
+++ b/packages/commons/src/lib/i18n.ts
@@ -16,7 +16,7 @@ const UNSORTED_LOCALES: Locale[] = [
{ id: "es", name: "Español", electronLocale: "es" },
{ id: "fr", name: "Français", electronLocale: "fr" },
{ id: "ja", name: "日本語", electronLocale: "ja" },
- { id: "pt_BR", name: "Português (Brasil)", electronLocale: "pt-BR" },
+ { id: "pt_br", name: "Português (Brasil)", electronLocale: "pt-BR" },
{ id: "ro", name: "Română", electronLocale: "ro" },
{ id: "ru", name: "Русский", electronLocale: "ru" },
{ id: "tw", name: "繁體中文", electronLocale: "zh_TW" },
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 83b9fb1b6..2c1e386b8 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -68,7 +68,7 @@ importers:
version: 21.3.11(@babel/traverse@7.28.0)(@playwright/test@1.55.0)(@swc-node/register@1.10.10(@swc/core@1.11.29(@swc/helpers@0.5.17))(@swc/types@0.1.21)(typescript@5.9.2))(@swc/core@1.11.29(@swc/helpers@0.5.17))(@zkochan/js-yaml@0.0.7)(eslint@9.34.0(jiti@2.5.1))(nx@21.3.11(@swc-node/register@1.10.10(@swc/core@1.11.29(@swc/helpers@0.5.17))(@swc/types@0.1.21)(typescript@5.9.2))(@swc/core@1.11.29(@swc/helpers@0.5.17)))(typescript@5.9.2)
'@nx/vite':
specifier: 21.3.11
- version: 21.3.11(@babel/traverse@7.28.0)(@swc-node/register@1.10.10(@swc/core@1.11.29(@swc/helpers@0.5.17))(@swc/types@0.1.21)(typescript@5.9.2))(@swc/core@1.11.29(@swc/helpers@0.5.17))(nx@21.3.11(@swc-node/register@1.10.10(@swc/core@1.11.29(@swc/helpers@0.5.17))(@swc/types@0.1.21)(typescript@5.9.2))(@swc/core@1.11.29(@swc/helpers@0.5.17)))(typescript@5.9.2)(vite@7.1.3(@types/node@22.17.2)(jiti@2.5.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.87.0)(sass@1.87.0)(terser@5.43.1)(tsx@4.20.4)(yaml@2.8.1))(vitest@3.2.4)
+ version: 21.3.11(@babel/traverse@7.28.0)(@swc-node/register@1.10.10(@swc/core@1.11.29(@swc/helpers@0.5.17))(@swc/types@0.1.21)(typescript@5.9.2))(@swc/core@1.11.29(@swc/helpers@0.5.17))(nx@21.3.11(@swc-node/register@1.10.10(@swc/core@1.11.29(@swc/helpers@0.5.17))(@swc/types@0.1.21)(typescript@5.9.2))(@swc/core@1.11.29(@swc/helpers@0.5.17)))(typescript@5.9.2)(vite@7.1.3(@types/node@22.17.2)(jiti@2.5.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.87.0)(sass@1.87.0)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1))(vitest@3.2.4)
'@nx/web':
specifier: 21.3.11
version: 21.3.11(@babel/traverse@7.28.0)(@swc-node/register@1.10.10(@swc/core@1.11.29(@swc/helpers@0.5.17))(@swc/types@0.1.21)(typescript@5.9.2))(@swc/core@1.11.29(@swc/helpers@0.5.17))(nx@21.3.11(@swc-node/register@1.10.10(@swc/core@1.11.29(@swc/helpers@0.5.17))(@swc/types@0.1.21)(typescript@5.9.2))(@swc/core@1.11.29(@swc/helpers@0.5.17)))
@@ -134,13 +134,13 @@ importers:
version: 0.17.0
rollup-plugin-webpack-stats:
specifier: 2.1.4
- version: 2.1.4(rolldown@1.0.0-beta.29)(rollup@4.46.3)(vite@7.1.3(@types/node@22.17.2)(jiti@2.5.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.87.0)(sass@1.87.0)(terser@5.43.1)(tsx@4.20.4)(yaml@2.8.1))
+ version: 2.1.4(rolldown@1.0.0-beta.29)(rollup@4.46.3)(vite@7.1.3(@types/node@22.17.2)(jiti@2.5.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.87.0)(sass@1.87.0)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1))
tslib:
specifier: ^2.3.0
version: 2.8.1
tsx:
- specifier: 4.20.4
- version: 4.20.4
+ specifier: 4.20.5
+ version: 4.20.5
typescript:
specifier: ~5.9.0
version: 5.9.2
@@ -152,13 +152,13 @@ importers:
version: 2.0.1
vite:
specifier: ^7.0.0
- version: 7.1.3(@types/node@22.17.2)(jiti@2.5.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.87.0)(sass@1.87.0)(terser@5.43.1)(tsx@4.20.4)(yaml@2.8.1)
+ version: 7.1.3(@types/node@22.17.2)(jiti@2.5.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.87.0)(sass@1.87.0)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1)
vite-plugin-dts:
specifier: ~4.5.0
- version: 4.5.4(@types/node@22.17.2)(rollup@4.46.3)(typescript@5.9.2)(vite@7.1.3(@types/node@22.17.2)(jiti@2.5.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.87.0)(sass@1.87.0)(terser@5.43.1)(tsx@4.20.4)(yaml@2.8.1))
+ version: 4.5.4(@types/node@22.17.2)(rollup@4.46.3)(typescript@5.9.2)(vite@7.1.3(@types/node@22.17.2)(jiti@2.5.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.87.0)(sass@1.87.0)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1))
vitest:
specifier: ^3.0.0
- version: 3.2.4(@types/debug@4.1.12)(@types/node@22.17.2)(@vitest/browser@3.2.4)(@vitest/ui@3.2.4)(happy-dom@18.0.1)(jiti@2.5.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.1)(msw@2.7.5(@types/node@22.17.2)(typescript@5.9.2))(sass-embedded@1.87.0)(sass@1.87.0)(terser@5.43.1)(tsx@4.20.4)(yaml@2.8.1)
+ version: 3.2.4(@types/debug@4.1.12)(@types/node@22.17.2)(@vitest/browser@3.2.4)(@vitest/ui@3.2.4)(happy-dom@18.0.1)(jiti@2.5.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.1)(msw@2.7.5(@types/node@22.17.2)(typescript@5.9.2))(sass-embedded@1.87.0)(sass@1.87.0)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1)
apps/client:
dependencies:
@@ -241,8 +241,8 @@ importers:
specifier: 16.3.0
version: 16.3.0
i18next:
- specifier: 25.4.1
- version: 25.4.1(typescript@5.9.2)
+ specifier: 25.4.2
+ version: 25.4.2(typescript@5.9.2)
i18next-http-backend:
specifier: 3.0.2
version: 3.0.2(encoding@0.1.13)
@@ -290,7 +290,7 @@ importers:
version: 10.27.1
react-i18next:
specifier: 15.7.2
- version: 15.7.2(i18next@25.4.1(typescript@5.9.2))(react-dom@19.1.0(react@16.14.0))(react@16.14.0)(typescript@5.9.2)
+ version: 15.7.2(i18next@25.4.2(typescript@5.9.2))(react-dom@19.1.0(react@16.14.0))(react@16.14.0)(typescript@5.9.2)
split.js:
specifier: 1.6.5
version: 1.6.5
@@ -309,7 +309,7 @@ importers:
version: 5.0.0
'@preact/preset-vite':
specifier: 2.10.2
- version: 2.10.2(@babel/core@7.28.0)(preact@10.27.1)(vite@7.1.3(@types/node@24.2.1)(jiti@2.5.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.87.0)(sass@1.87.0)(terser@5.43.1)(tsx@4.20.4)(yaml@2.8.1))
+ version: 2.10.2(@babel/core@7.28.0)(preact@10.27.1)(vite@7.1.3(@types/node@24.3.0)(jiti@2.5.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.87.0)(sass@1.87.0)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1))
'@types/bootstrap':
specifier: 5.2.10
version: 5.2.10
@@ -339,7 +339,7 @@ importers:
version: 0.7.2
vite-plugin-static-copy:
specifier: 3.1.2
- version: 3.1.2(vite@7.1.3(@types/node@24.2.1)(jiti@2.5.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.87.0)(sass@1.87.0)(terser@5.43.1)(tsx@4.20.4)(yaml@2.8.1))
+ version: 3.1.2(vite@7.1.3(@types/node@24.3.0)(jiti@2.5.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.87.0)(sass@1.87.0)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1))
apps/db-compare:
dependencies:
@@ -693,8 +693,8 @@ importers:
specifier: 7.0.6
version: 7.0.6
i18next:
- specifier: 25.4.1
- version: 25.4.1(typescript@5.9.2)
+ specifier: 25.4.2
+ version: 25.4.2(typescript@5.9.2)
i18next-fs-backend:
specifier: 2.6.0
version: 2.6.0
@@ -815,25 +815,25 @@ importers:
version: 9.34.0
'@sveltejs/adapter-auto':
specifier: ^6.0.0
- version: 6.1.0(@sveltejs/kit@2.36.2(@sveltejs/vite-plugin-svelte@6.1.3(svelte@5.38.3)(vite@7.1.3(@types/node@24.2.1)(jiti@2.5.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.87.0)(sass@1.87.0)(terser@5.43.1)(tsx@4.20.4)(yaml@2.8.1)))(svelte@5.38.3)(vite@7.1.3(@types/node@24.2.1)(jiti@2.5.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.87.0)(sass@1.87.0)(terser@5.43.1)(tsx@4.20.4)(yaml@2.8.1)))
+ version: 6.1.0(@sveltejs/kit@2.36.2(@sveltejs/vite-plugin-svelte@6.1.3(svelte@5.38.3)(vite@7.1.3(@types/node@24.3.0)(jiti@2.5.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.87.0)(sass@1.87.0)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1)))(svelte@5.38.3)(vite@7.1.3(@types/node@24.3.0)(jiti@2.5.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.87.0)(sass@1.87.0)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1)))
'@sveltejs/kit':
specifier: ^2.16.0
- version: 2.36.2(@sveltejs/vite-plugin-svelte@6.1.3(svelte@5.38.3)(vite@7.1.3(@types/node@24.2.1)(jiti@2.5.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.87.0)(sass@1.87.0)(terser@5.43.1)(tsx@4.20.4)(yaml@2.8.1)))(svelte@5.38.3)(vite@7.1.3(@types/node@24.2.1)(jiti@2.5.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.87.0)(sass@1.87.0)(terser@5.43.1)(tsx@4.20.4)(yaml@2.8.1))
+ version: 2.36.2(@sveltejs/vite-plugin-svelte@6.1.3(svelte@5.38.3)(vite@7.1.3(@types/node@24.3.0)(jiti@2.5.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.87.0)(sass@1.87.0)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1)))(svelte@5.38.3)(vite@7.1.3(@types/node@24.3.0)(jiti@2.5.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.87.0)(sass@1.87.0)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1))
'@sveltejs/vite-plugin-svelte':
specifier: ^6.0.0
- version: 6.1.3(svelte@5.38.3)(vite@7.1.3(@types/node@24.2.1)(jiti@2.5.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.87.0)(sass@1.87.0)(terser@5.43.1)(tsx@4.20.4)(yaml@2.8.1))
+ version: 6.1.3(svelte@5.38.3)(vite@7.1.3(@types/node@24.3.0)(jiti@2.5.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.87.0)(sass@1.87.0)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1))
'@tailwindcss/typography':
specifier: ^0.5.15
version: 0.5.16(tailwindcss@4.1.12)
'@tailwindcss/vite':
specifier: ^4.0.0
- version: 4.1.12(vite@7.1.3(@types/node@24.2.1)(jiti@2.5.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.87.0)(sass@1.87.0)(terser@5.43.1)(tsx@4.20.4)(yaml@2.8.1))
+ version: 4.1.12(vite@7.1.3(@types/node@24.3.0)(jiti@2.5.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.87.0)(sass@1.87.0)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1))
eslint:
specifier: ^9.18.0
version: 9.34.0(jiti@2.5.1)
eslint-plugin-svelte:
specifier: ^3.0.0
- version: 3.11.0(eslint@9.34.0(jiti@2.5.1))(svelte@5.38.3)(ts-node@10.9.2(@swc/core@1.11.29(@swc/helpers@0.5.17))(@types/node@24.2.1)(typescript@5.9.2))
+ version: 3.11.0(eslint@9.34.0(jiti@2.5.1))(svelte@5.38.3)(ts-node@10.9.2(@swc/core@1.11.29(@swc/helpers@0.5.17))(@types/node@24.3.0)(typescript@5.9.2))
globals:
specifier: ^16.0.0
version: 16.3.0
@@ -857,7 +857,7 @@ importers:
version: 8.40.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2)
vite:
specifier: ^7.0.0
- version: 7.1.3(@types/node@24.2.1)(jiti@2.5.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.87.0)(sass@1.87.0)(terser@5.43.1)(tsx@4.20.4)(yaml@2.8.1)
+ version: 7.1.3(@types/node@24.3.0)(jiti@2.5.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.87.0)(sass@1.87.0)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1)
packages/ckeditor5:
dependencies:
@@ -906,7 +906,7 @@ importers:
version: 8.40.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2)
'@vitest/browser':
specifier: ^3.0.5
- version: 3.2.4(bufferutil@4.0.9)(msw@2.7.5(@types/node@22.17.2)(typescript@5.9.2))(playwright@1.55.0)(utf-8-validate@6.0.5)(vite@7.1.3(@types/node@22.17.2)(jiti@2.5.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.87.0)(sass@1.87.0)(terser@5.43.1)(tsx@4.20.4)(yaml@2.8.1))(vitest@3.2.4)(webdriverio@9.19.1(bufferutil@4.0.9)(utf-8-validate@6.0.5))
+ version: 3.2.4(bufferutil@4.0.9)(msw@2.7.5(@types/node@22.17.2)(typescript@5.9.2))(playwright@1.55.0)(utf-8-validate@6.0.5)(vite@7.1.3(@types/node@22.17.2)(jiti@2.5.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.87.0)(sass@1.87.0)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1))(vitest@3.2.4)(webdriverio@9.19.2(bufferutil@4.0.9)(utf-8-validate@6.0.5))
'@vitest/coverage-istanbul':
specifier: ^3.0.5
version: 3.2.4(vitest@3.2.4)
@@ -939,13 +939,13 @@ importers:
version: 5.9.2
vite-plugin-svgo:
specifier: ~2.0.0
- version: 2.0.0(typescript@5.9.2)(vite@7.1.3(@types/node@22.17.2)(jiti@2.5.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.87.0)(sass@1.87.0)(terser@5.43.1)(tsx@4.20.4)(yaml@2.8.1))
+ version: 2.0.0(typescript@5.9.2)(vite@7.1.3(@types/node@22.17.2)(jiti@2.5.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.87.0)(sass@1.87.0)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1))
vitest:
specifier: ^3.0.5
- version: 3.2.4(@types/debug@4.1.12)(@types/node@22.17.2)(@vitest/browser@3.2.4)(@vitest/ui@3.2.4)(happy-dom@18.0.1)(jiti@2.5.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.1)(msw@2.7.5(@types/node@22.17.2)(typescript@5.9.2))(sass-embedded@1.87.0)(sass@1.87.0)(terser@5.43.1)(tsx@4.20.4)(yaml@2.8.1)
+ version: 3.2.4(@types/debug@4.1.12)(@types/node@22.17.2)(@vitest/browser@3.2.4)(@vitest/ui@3.2.4)(happy-dom@18.0.1)(jiti@2.5.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.1)(msw@2.7.5(@types/node@22.17.2)(typescript@5.9.2))(sass-embedded@1.87.0)(sass@1.87.0)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1)
webdriverio:
specifier: ^9.0.7
- version: 9.19.1(bufferutil@4.0.9)(utf-8-validate@6.0.5)
+ version: 9.19.2(bufferutil@4.0.9)(utf-8-validate@6.0.5)
packages/ckeditor5-footnotes:
devDependencies:
@@ -966,7 +966,7 @@ importers:
version: 8.40.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2)
'@vitest/browser':
specifier: ^3.0.5
- version: 3.2.4(bufferutil@4.0.9)(msw@2.7.5(@types/node@22.17.2)(typescript@5.9.2))(playwright@1.55.0)(utf-8-validate@6.0.5)(vite@7.1.3(@types/node@22.17.2)(jiti@2.5.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.87.0)(sass@1.87.0)(terser@5.43.1)(tsx@4.20.4)(yaml@2.8.1))(vitest@3.2.4)(webdriverio@9.19.1(bufferutil@4.0.9)(utf-8-validate@6.0.5))
+ version: 3.2.4(bufferutil@4.0.9)(msw@2.7.5(@types/node@22.17.2)(typescript@5.9.2))(playwright@1.55.0)(utf-8-validate@6.0.5)(vite@7.1.3(@types/node@22.17.2)(jiti@2.5.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.87.0)(sass@1.87.0)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1))(vitest@3.2.4)(webdriverio@9.19.2(bufferutil@4.0.9)(utf-8-validate@6.0.5))
'@vitest/coverage-istanbul':
specifier: ^3.0.5
version: 3.2.4(vitest@3.2.4)
@@ -999,13 +999,13 @@ importers:
version: 5.9.2
vite-plugin-svgo:
specifier: ~2.0.0
- version: 2.0.0(typescript@5.9.2)(vite@7.1.3(@types/node@22.17.2)(jiti@2.5.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.87.0)(sass@1.87.0)(terser@5.43.1)(tsx@4.20.4)(yaml@2.8.1))
+ version: 2.0.0(typescript@5.9.2)(vite@7.1.3(@types/node@22.17.2)(jiti@2.5.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.87.0)(sass@1.87.0)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1))
vitest:
specifier: ^3.0.5
- version: 3.2.4(@types/debug@4.1.12)(@types/node@22.17.2)(@vitest/browser@3.2.4)(@vitest/ui@3.2.4)(happy-dom@18.0.1)(jiti@2.5.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.1)(msw@2.7.5(@types/node@22.17.2)(typescript@5.9.2))(sass-embedded@1.87.0)(sass@1.87.0)(terser@5.43.1)(tsx@4.20.4)(yaml@2.8.1)
+ version: 3.2.4(@types/debug@4.1.12)(@types/node@22.17.2)(@vitest/browser@3.2.4)(@vitest/ui@3.2.4)(happy-dom@18.0.1)(jiti@2.5.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.1)(msw@2.7.5(@types/node@22.17.2)(typescript@5.9.2))(sass-embedded@1.87.0)(sass@1.87.0)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1)
webdriverio:
specifier: ^9.0.7
- version: 9.19.1(bufferutil@4.0.9)(utf-8-validate@6.0.5)
+ version: 9.19.2(bufferutil@4.0.9)(utf-8-validate@6.0.5)
packages/ckeditor5-keyboard-marker:
devDependencies:
@@ -1026,7 +1026,7 @@ importers:
version: 8.40.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2)
'@vitest/browser':
specifier: ^3.0.5
- version: 3.2.4(bufferutil@4.0.9)(msw@2.7.5(@types/node@22.17.2)(typescript@5.9.2))(playwright@1.55.0)(utf-8-validate@6.0.5)(vite@7.1.3(@types/node@22.17.2)(jiti@2.5.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.87.0)(sass@1.87.0)(terser@5.43.1)(tsx@4.20.4)(yaml@2.8.1))(vitest@3.2.4)(webdriverio@9.19.1(bufferutil@4.0.9)(utf-8-validate@6.0.5))
+ version: 3.2.4(bufferutil@4.0.9)(msw@2.7.5(@types/node@22.17.2)(typescript@5.9.2))(playwright@1.55.0)(utf-8-validate@6.0.5)(vite@7.1.3(@types/node@22.17.2)(jiti@2.5.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.87.0)(sass@1.87.0)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1))(vitest@3.2.4)(webdriverio@9.19.2(bufferutil@4.0.9)(utf-8-validate@6.0.5))
'@vitest/coverage-istanbul':
specifier: ^3.0.5
version: 3.2.4(vitest@3.2.4)
@@ -1059,13 +1059,13 @@ importers:
version: 5.9.2
vite-plugin-svgo:
specifier: ~2.0.0
- version: 2.0.0(typescript@5.9.2)(vite@7.1.3(@types/node@22.17.2)(jiti@2.5.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.87.0)(sass@1.87.0)(terser@5.43.1)(tsx@4.20.4)(yaml@2.8.1))
+ version: 2.0.0(typescript@5.9.2)(vite@7.1.3(@types/node@22.17.2)(jiti@2.5.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.87.0)(sass@1.87.0)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1))
vitest:
specifier: ^3.0.5
- version: 3.2.4(@types/debug@4.1.12)(@types/node@22.17.2)(@vitest/browser@3.2.4)(@vitest/ui@3.2.4)(happy-dom@18.0.1)(jiti@2.5.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.1)(msw@2.7.5(@types/node@22.17.2)(typescript@5.9.2))(sass-embedded@1.87.0)(sass@1.87.0)(terser@5.43.1)(tsx@4.20.4)(yaml@2.8.1)
+ version: 3.2.4(@types/debug@4.1.12)(@types/node@22.17.2)(@vitest/browser@3.2.4)(@vitest/ui@3.2.4)(happy-dom@18.0.1)(jiti@2.5.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.1)(msw@2.7.5(@types/node@22.17.2)(typescript@5.9.2))(sass-embedded@1.87.0)(sass@1.87.0)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1)
webdriverio:
specifier: ^9.0.7
- version: 9.19.1(bufferutil@4.0.9)(utf-8-validate@6.0.5)
+ version: 9.19.2(bufferutil@4.0.9)(utf-8-validate@6.0.5)
packages/ckeditor5-math:
dependencies:
@@ -1093,7 +1093,7 @@ importers:
version: 8.40.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2)
'@vitest/browser':
specifier: ^3.0.5
- version: 3.2.4(bufferutil@4.0.9)(msw@2.7.5(@types/node@22.17.2)(typescript@5.9.2))(playwright@1.55.0)(utf-8-validate@6.0.5)(vite@7.1.3(@types/node@22.17.2)(jiti@2.5.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.87.0)(sass@1.87.0)(terser@5.43.1)(tsx@4.20.4)(yaml@2.8.1))(vitest@3.2.4)(webdriverio@9.19.1(bufferutil@4.0.9)(utf-8-validate@6.0.5))
+ version: 3.2.4(bufferutil@4.0.9)(msw@2.7.5(@types/node@22.17.2)(typescript@5.9.2))(playwright@1.55.0)(utf-8-validate@6.0.5)(vite@7.1.3(@types/node@22.17.2)(jiti@2.5.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.87.0)(sass@1.87.0)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1))(vitest@3.2.4)(webdriverio@9.19.2(bufferutil@4.0.9)(utf-8-validate@6.0.5))
'@vitest/coverage-istanbul':
specifier: ^3.0.5
version: 3.2.4(vitest@3.2.4)
@@ -1126,13 +1126,13 @@ importers:
version: 5.9.2
vite-plugin-svgo:
specifier: ~2.0.0
- version: 2.0.0(typescript@5.9.2)(vite@7.1.3(@types/node@22.17.2)(jiti@2.5.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.87.0)(sass@1.87.0)(terser@5.43.1)(tsx@4.20.4)(yaml@2.8.1))
+ version: 2.0.0(typescript@5.9.2)(vite@7.1.3(@types/node@22.17.2)(jiti@2.5.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.87.0)(sass@1.87.0)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1))
vitest:
specifier: ^3.0.5
- version: 3.2.4(@types/debug@4.1.12)(@types/node@22.17.2)(@vitest/browser@3.2.4)(@vitest/ui@3.2.4)(happy-dom@18.0.1)(jiti@2.5.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.1)(msw@2.7.5(@types/node@22.17.2)(typescript@5.9.2))(sass-embedded@1.87.0)(sass@1.87.0)(terser@5.43.1)(tsx@4.20.4)(yaml@2.8.1)
+ version: 3.2.4(@types/debug@4.1.12)(@types/node@22.17.2)(@vitest/browser@3.2.4)(@vitest/ui@3.2.4)(happy-dom@18.0.1)(jiti@2.5.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.1)(msw@2.7.5(@types/node@22.17.2)(typescript@5.9.2))(sass-embedded@1.87.0)(sass@1.87.0)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1)
webdriverio:
specifier: ^9.0.7
- version: 9.19.1(bufferutil@4.0.9)(utf-8-validate@6.0.5)
+ version: 9.19.2(bufferutil@4.0.9)(utf-8-validate@6.0.5)
packages/ckeditor5-mermaid:
dependencies:
@@ -1160,7 +1160,7 @@ importers:
version: 8.40.0(eslint@9.34.0(jiti@2.5.1))(typescript@5.9.2)
'@vitest/browser':
specifier: ^3.0.5
- version: 3.2.4(bufferutil@4.0.9)(msw@2.7.5(@types/node@22.17.2)(typescript@5.9.2))(playwright@1.55.0)(utf-8-validate@6.0.5)(vite@7.1.3(@types/node@22.17.2)(jiti@2.5.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.87.0)(sass@1.87.0)(terser@5.43.1)(tsx@4.20.4)(yaml@2.8.1))(vitest@3.2.4)(webdriverio@9.19.1(bufferutil@4.0.9)(utf-8-validate@6.0.5))
+ version: 3.2.4(bufferutil@4.0.9)(msw@2.7.5(@types/node@22.17.2)(typescript@5.9.2))(playwright@1.55.0)(utf-8-validate@6.0.5)(vite@7.1.3(@types/node@22.17.2)(jiti@2.5.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.87.0)(sass@1.87.0)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1))(vitest@3.2.4)(webdriverio@9.19.2(bufferutil@4.0.9)(utf-8-validate@6.0.5))
'@vitest/coverage-istanbul':
specifier: ^3.0.5
version: 3.2.4(vitest@3.2.4)
@@ -1193,13 +1193,13 @@ importers:
version: 5.9.2
vite-plugin-svgo:
specifier: ~2.0.0
- version: 2.0.0(typescript@5.9.2)(vite@7.1.3(@types/node@22.17.2)(jiti@2.5.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.87.0)(sass@1.87.0)(terser@5.43.1)(tsx@4.20.4)(yaml@2.8.1))
+ version: 2.0.0(typescript@5.9.2)(vite@7.1.3(@types/node@22.17.2)(jiti@2.5.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.87.0)(sass@1.87.0)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1))
vitest:
specifier: ^3.0.5
- version: 3.2.4(@types/debug@4.1.12)(@types/node@22.17.2)(@vitest/browser@3.2.4)(@vitest/ui@3.2.4)(happy-dom@18.0.1)(jiti@2.5.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.1)(msw@2.7.5(@types/node@22.17.2)(typescript@5.9.2))(sass-embedded@1.87.0)(sass@1.87.0)(terser@5.43.1)(tsx@4.20.4)(yaml@2.8.1)
+ version: 3.2.4(@types/debug@4.1.12)(@types/node@22.17.2)(@vitest/browser@3.2.4)(@vitest/ui@3.2.4)(happy-dom@18.0.1)(jiti@2.5.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.1)(msw@2.7.5(@types/node@22.17.2)(typescript@5.9.2))(sass-embedded@1.87.0)(sass@1.87.0)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1)
webdriverio:
specifier: ^9.0.7
- version: 9.19.1(bufferutil@4.0.9)(utf-8-validate@6.0.5)
+ version: 9.19.2(bufferutil@4.0.9)(utf-8-validate@6.0.5)
packages/codemirror:
dependencies:
@@ -3333,8 +3333,8 @@ packages:
resolution: {integrity: sha512-cvz/C1rF5WBxzHbEoiBoI6Sz6q6M+TdxfWkEGBYTD77opY8i8WN01prUWXEM87GPF4SZcyIySez9U0Ccm12oFQ==}
engines: {node: '>=18.0.0'}
- '@inquirer/confirm@5.1.15':
- resolution: {integrity: sha512-SwHMGa8Z47LawQN0rog0sT+6JpiL0B7eW9p1Bb7iCeKDGTI5Ez25TSc2l8kw52VV7hA4sX/C78CGkMrKXfuspA==}
+ '@inquirer/confirm@5.1.16':
+ resolution: {integrity: sha512-j1a5VstaK5KQy8Mu8cHmuQvN1Zc62TbLhjJxwHvKPPKEoowSF6h/0UdOpA9DNdWZ+9Inq73+puRq1df6OJ8Sag==}
engines: {node: '>=18'}
peerDependencies:
'@types/node': '>=18'
@@ -3342,8 +3342,8 @@ packages:
'@types/node':
optional: true
- '@inquirer/core@10.1.15':
- resolution: {integrity: sha512-8xrp836RZvKkpNbVvgWUlxjT4CraKk2q+I3Ksy+seI2zkcE+y6wNs1BVhgcv8VyImFecUhdQrYLdW32pAjwBdA==}
+ '@inquirer/core@10.2.0':
+ resolution: {integrity: sha512-NyDSjPqhSvpZEMZrLCYUquWNl+XC/moEcVFqS55IEYIYsY0a1cUCevSqk7ctOlnm/RaSBU5psFryNlxcmGrjaA==}
engines: {node: '>=18'}
peerDependencies:
'@types/node': '>=18'
@@ -4237,8 +4237,8 @@ packages:
'@protobufjs/utf8@1.1.0':
resolution: {integrity: sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==}
- '@puppeteer/browsers@2.10.6':
- resolution: {integrity: sha512-pHUn6ZRt39bP3698HFQlu2ZHCkS/lPcpv7fVQcGBSzNNygw171UXAKrCUhy+TEMw4lEttOKDgNpb04hwUAJeiQ==}
+ '@puppeteer/browsers@2.10.7':
+ resolution: {integrity: sha512-wHWLkQWBjHtajZeqCB74nsa/X70KheyOhySYBRmVQDJiNj0zjZR/naPCvdWjMhcG1LmjaMV/9WtTo5mpe8qWLw==}
engines: {node: '>=18'}
hasBin: true
@@ -5809,8 +5809,8 @@ packages:
'@types/node@20.17.32':
resolution: {integrity: sha512-zeMXFn8zQ+UkjK4ws0RiOC9EWByyW1CcVmLe+2rQocXRsGEDxUCwPEIVgpsGcLHS/P8JkT0oa3839BRABS0oPw==}
- '@types/node@20.19.10':
- resolution: {integrity: sha512-iAFpG6DokED3roLSP0K+ybeDdIX6Bc0Vd3mLW5uDqThPWtNos3E+EqOM11mPQHKzfWHqEBuLjIlsBQQ8CsISmQ==}
+ '@types/node@20.19.11':
+ resolution: {integrity: sha512-uug3FEEGv0r+jrecvUUpbY8lLisvIjg6AAic6a2bSP5OEOLeJsDSnvhCDov7ipFFMXS3orMpzlmi0ZcuGkBbow==}
'@types/node@22.15.21':
resolution: {integrity: sha512-EV/37Td6c+MgKAbkcLG6vqZ2zEYHD7bvSrzqqs2RIhbA6w3x+Dqz8MZM3sP6kGTeLrdoOgKZe+Xja7tUB2DNkQ==}
@@ -5821,8 +5821,8 @@ packages:
'@types/node@22.17.2':
resolution: {integrity: sha512-gL6z5N9Jm9mhY+U2KXZpteb+09zyffliRkZyZOHODGATyC5B1Jt/7TzuuiLkFsSUMLbS1OLmlj/E+/3KF4Q/4w==}
- '@types/node@24.2.1':
- resolution: {integrity: sha512-DRh5K+ka5eJic8CjH7td8QpYEV6Zo10gfRkjHCO3weqZHWDtAaSTFtl4+VMqOJ4N5jcuhZ9/l+yy8rVgw7BQeQ==}
+ '@types/node@24.3.0':
+ resolution: {integrity: sha512-aPTXCrfwnDLj4VvXrm+UUCQjNEvJgNA8s5F1cvwQU+3KNltTOkBm1j30uNLyqqPNe7gE3KFzImYoZEfLhp4Yow==}
'@types/parse-json@4.0.2':
resolution: {integrity: sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==}
@@ -6270,8 +6270,8 @@ packages:
'@vue/shared@3.5.14':
resolution: {integrity: sha512-oXTwNxVfc9EtP1zzXAlSlgARLXNC84frFYkS0HHz0h3E4WZSP9sywqjqzGCP9Y34M8ipNmd380pVgmMuwELDyQ==}
- '@wdio/config@9.19.1':
- resolution: {integrity: sha512-BeTB2paSjaij3cf1NXQzX9CZmdj5jz2/xdUhkJlCeGmGn1KjWu5BjMO+exuiy+zln7dOJjev8f0jlg8e8f1EbQ==}
+ '@wdio/config@9.19.2':
+ resolution: {integrity: sha512-OVCzPQxav0QDk5rktQ6LYARZ5ueUuJXIqTXUpS3A9Jt6PF+ZUI5sbO/y+z+qHQXqDq+LkscmFsmkzgnoHzHcfg==}
engines: {node: '>=18.20.0'}
'@wdio/logger@9.18.0':
@@ -6285,12 +6285,12 @@ packages:
resolution: {integrity: sha512-FLTF0VL6+o5BSTCO7yLSXocm3kUnu31zYwzdsz4n9s5YWt83sCtzGZlZpt7TaTzb3jVUfxuHNQDTb8UMkCu0lQ==}
engines: {node: '>=18.20.0'}
- '@wdio/types@9.19.1':
- resolution: {integrity: sha512-Q1HVcXiWMHp3ze2NN1BvpsfEh/j6GtAeMHhHW4p2IWUfRZlZqTfiJ+95LmkwXOG2gw9yndT8NkJigAz8v7WVYQ==}
+ '@wdio/types@9.19.2':
+ resolution: {integrity: sha512-fBI7ljL+YcPXSXUhdk2+zVuz7IYP1aDMTq1eVmMme9GY0y67t0dCNPOt6xkCAEdL5dOcV6D2L1r6Cf/M2ifTvQ==}
engines: {node: '>=18.20.0'}
- '@wdio/utils@9.19.1':
- resolution: {integrity: sha512-wWx5uPCgdZQxFIemAFVk/aa3JLwqrTsvEJsPlV3lCRpLeQ67V8aUPvvNAzE+RhX67qvelwwsvX8RrPdLDfnnYw==}
+ '@wdio/utils@9.19.2':
+ resolution: {integrity: sha512-caimJiTsxDUfXn/gRAzcYTO3RydSl7XzD+QpjfWZYJjzr8a2XfNnj+Vdmr8gG4BSkiVHirW9mFCZeQp2eTD7rA==}
engines: {node: '>=18.20.0'}
'@webassemblyjs/ast@1.14.1':
@@ -7973,8 +7973,8 @@ packages:
resolution: {integrity: sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==}
engines: {node: '>=10'}
- decamelize@6.0.0:
- resolution: {integrity: sha512-Fv96DCsdOgB6mdGl67MT5JaTNKRzrzill5OH5s8bjYJXVlcXyPYGyPsUkWyGV5p1TXI5esYIYMMeDJL0hEIwaA==}
+ decamelize@6.0.1:
+ resolution: {integrity: sha512-G7Cqgaelq68XHJNGlZ7lrNQyhZGsFqpwtGFexqUv4IQdjKoSYF7ipZ9UuTJZUSQXFj/XaoBLuEVIVqr8EJngEQ==}
engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
decimal.js@10.5.0:
@@ -9536,8 +9536,8 @@ packages:
i18next-http-backend@3.0.2:
resolution: {integrity: sha512-PdlvPnvIp4E1sYi46Ik4tBYh/v/NbYfFFgTjkwFl0is8A18s7/bx9aXqsrOax9WUbeNS6mD2oix7Z0yGGf6m5g==}
- i18next@25.4.1:
- resolution: {integrity: sha512-sYJX4Ap0SSho1JZppKvc9BeacbpNCdNvKuXMYPUGjDH0XTTdVXmm7UU3l4bvF8nqh70lZNBeLboRYwItBf9jOw==}
+ i18next@25.4.2:
+ resolution: {integrity: sha512-gD4T25a6ovNXsfXY1TwHXXXLnD/K2t99jyYMCSimSCBnBRJVQr5j+VAaU83RJCPzrTGhVQ6dqIga66xO2rtd5g==}
peerDependencies:
typescript: ^5
peerDependenciesMeta:
@@ -14418,6 +14418,11 @@ packages:
engines: {node: '>=18.0.0'}
hasBin: true
+ tsx@4.20.5:
+ resolution: {integrity: sha512-+wKjMNU9w/EaQayHXb7WA7ZaHY6hN8WgfvHNQ3t1PnU91/7O8TcTnIhCDYTZwnt8JsO9IBqZ30Ln1r7pPF52Aw==}
+ engines: {node: '>=18.0.0'}
+ hasBin: true
+
tuf-js@3.1.0:
resolution: {integrity: sha512-3T3T04WzowbwV2FDiGXBbr81t64g1MUGGJRgT4x5o97N+8ArdhVCAF9IxFrxuSJmM3E5Asn7nKHkao0ibcZXAg==}
engines: {node: ^18.17.0 || >=20.5.0}
@@ -15020,12 +15025,12 @@ packages:
resolution: {integrity: sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==}
engines: {node: '>= 8'}
- webdriver@9.19.1:
- resolution: {integrity: sha512-cvccIZ3QaUZxxrA81a3rqqgxKt6VzVrZupMc+eX9J40qfGrV3NtdLb/m4AA1PmeTPGN5O3/4KrzDpnVZM4WUnA==}
+ webdriver@9.19.2:
+ resolution: {integrity: sha512-kw6dSwNzimU8/CkGVlM36pqWHZ7BhCwV4/d8fu6rpIYGeQbPwcNc4M90TfJuzYMA7Au3NdrwT/EVQgVLQ9Ju8Q==}
engines: {node: '>=18.20.0'}
- webdriverio@9.19.1:
- resolution: {integrity: sha512-hpGgK6d9QNi3AaLFWIPQaEMqJhXF048XAIsV5i5mkL0kjghV1opcuhKgbbG+7pcn8JSpiq6mh7o3MDYtapw90w==}
+ webdriverio@9.19.2:
+ resolution: {integrity: sha512-xP/9odQ9tt2pEuMgo0Oobklhu1lObgL1KmejZeyxVStwnrSTbFmn1AAqPq5pfXizUsyv2PR5+id9frrarx/c4w==}
engines: {node: '>=18.20.0'}
peerDependencies:
puppeteer-core: '>=22.x || <=24.x'
@@ -16745,6 +16750,8 @@ snapshots:
'@ckeditor/ckeditor5-core': 46.0.2
'@ckeditor/ckeditor5-upload': 46.0.2
ckeditor5: 46.0.2(patch_hash=8331a09d41443b39ea1c784daaccfeb0da4f9065ed556e7de92e9c77edd9eb41)
+ transitivePeerDependencies:
+ - supports-color
'@ckeditor/ckeditor5-ai@46.0.2':
dependencies:
@@ -16869,12 +16876,16 @@ snapshots:
'@ckeditor/ckeditor5-utils': 46.0.2
'@ckeditor/ckeditor5-widget': 46.0.2
es-toolkit: 1.39.5
+ transitivePeerDependencies:
+ - supports-color
'@ckeditor/ckeditor5-cloud-services@46.0.2':
dependencies:
'@ckeditor/ckeditor5-core': 46.0.2
'@ckeditor/ckeditor5-utils': 46.0.2
ckeditor5: 46.0.2(patch_hash=8331a09d41443b39ea1c784daaccfeb0da4f9065ed556e7de92e9c77edd9eb41)
+ transitivePeerDependencies:
+ - supports-color
'@ckeditor/ckeditor5-code-block@46.0.2(patch_hash=2361d8caad7d6b5bddacc3a3b4aa37dbfba260b1c1b22a450413a79c1bb1ce95)':
dependencies:
@@ -16934,6 +16945,8 @@ snapshots:
'@ckeditor/ckeditor5-utils': 46.0.2
'@ckeditor/ckeditor5-watchdog': 46.0.2
es-toolkit: 1.39.5
+ transitivePeerDependencies:
+ - supports-color
'@ckeditor/ckeditor5-dev-build-tools@43.1.0(@swc/helpers@0.5.17)(tslib@2.8.1)(typescript@5.9.2)':
dependencies:
@@ -17098,6 +17111,8 @@ snapshots:
'@ckeditor/ckeditor5-utils': 46.0.2
ckeditor5: 46.0.2(patch_hash=8331a09d41443b39ea1c784daaccfeb0da4f9065ed556e7de92e9c77edd9eb41)
es-toolkit: 1.39.5
+ transitivePeerDependencies:
+ - supports-color
'@ckeditor/ckeditor5-editor-classic@46.0.2':
dependencies:
@@ -17107,6 +17122,8 @@ snapshots:
'@ckeditor/ckeditor5-utils': 46.0.2
ckeditor5: 46.0.2(patch_hash=8331a09d41443b39ea1c784daaccfeb0da4f9065ed556e7de92e9c77edd9eb41)
es-toolkit: 1.39.5
+ transitivePeerDependencies:
+ - supports-color
'@ckeditor/ckeditor5-editor-decoupled@46.0.2':
dependencies:
@@ -17116,6 +17133,8 @@ snapshots:
'@ckeditor/ckeditor5-utils': 46.0.2
ckeditor5: 46.0.2(patch_hash=8331a09d41443b39ea1c784daaccfeb0da4f9065ed556e7de92e9c77edd9eb41)
es-toolkit: 1.39.5
+ transitivePeerDependencies:
+ - supports-color
'@ckeditor/ckeditor5-editor-inline@46.0.2':
dependencies:
@@ -17205,8 +17224,6 @@ snapshots:
'@ckeditor/ckeditor5-ui': 46.0.2
'@ckeditor/ckeditor5-utils': 46.0.2
ckeditor5: 46.0.2(patch_hash=8331a09d41443b39ea1c784daaccfeb0da4f9065ed556e7de92e9c77edd9eb41)
- transitivePeerDependencies:
- - supports-color
'@ckeditor/ckeditor5-export-word@46.0.2':
dependencies:
@@ -17231,6 +17248,8 @@ snapshots:
'@ckeditor/ckeditor5-utils': 46.0.2
ckeditor5: 46.0.2(patch_hash=8331a09d41443b39ea1c784daaccfeb0da4f9065ed556e7de92e9c77edd9eb41)
es-toolkit: 1.39.5
+ transitivePeerDependencies:
+ - supports-color
'@ckeditor/ckeditor5-font@46.0.2':
dependencies:
@@ -17294,6 +17313,8 @@ snapshots:
'@ckeditor/ckeditor5-utils': 46.0.2
'@ckeditor/ckeditor5-widget': 46.0.2
ckeditor5: 46.0.2(patch_hash=8331a09d41443b39ea1c784daaccfeb0da4f9065ed556e7de92e9c77edd9eb41)
+ transitivePeerDependencies:
+ - supports-color
'@ckeditor/ckeditor5-html-embed@46.0.2':
dependencies:
@@ -17353,8 +17374,6 @@ snapshots:
'@ckeditor/ckeditor5-ui': 46.0.2
'@ckeditor/ckeditor5-utils': 46.0.2
ckeditor5: 46.0.2(patch_hash=8331a09d41443b39ea1c784daaccfeb0da4f9065ed556e7de92e9c77edd9eb41)
- transitivePeerDependencies:
- - supports-color
'@ckeditor/ckeditor5-indent@46.0.2':
dependencies:
@@ -17477,8 +17496,6 @@ snapshots:
'@ckeditor/ckeditor5-utils': 46.0.2
ckeditor5: 46.0.2(patch_hash=8331a09d41443b39ea1c784daaccfeb0da4f9065ed556e7de92e9c77edd9eb41)
es-toolkit: 1.39.5
- transitivePeerDependencies:
- - supports-color
'@ckeditor/ckeditor5-merge-fields@46.0.2':
dependencies:
@@ -17491,8 +17508,6 @@ snapshots:
'@ckeditor/ckeditor5-widget': 46.0.2
ckeditor5: 46.0.2(patch_hash=8331a09d41443b39ea1c784daaccfeb0da4f9065ed556e7de92e9c77edd9eb41)
es-toolkit: 1.39.5
- transitivePeerDependencies:
- - supports-color
'@ckeditor/ckeditor5-minimap@46.0.2':
dependencies:
@@ -17501,8 +17516,6 @@ snapshots:
'@ckeditor/ckeditor5-ui': 46.0.2
'@ckeditor/ckeditor5-utils': 46.0.2
ckeditor5: 46.0.2(patch_hash=8331a09d41443b39ea1c784daaccfeb0da4f9065ed556e7de92e9c77edd9eb41)
- transitivePeerDependencies:
- - supports-color
'@ckeditor/ckeditor5-operations-compressor@46.0.2':
dependencies:
@@ -17555,8 +17568,6 @@ snapshots:
'@ckeditor/ckeditor5-utils': 46.0.2
'@ckeditor/ckeditor5-widget': 46.0.2
ckeditor5: 46.0.2(patch_hash=8331a09d41443b39ea1c784daaccfeb0da4f9065ed556e7de92e9c77edd9eb41)
- transitivePeerDependencies:
- - supports-color
'@ckeditor/ckeditor5-pagination@46.0.2':
dependencies:
@@ -17663,8 +17674,6 @@ snapshots:
'@ckeditor/ckeditor5-ui': 46.0.2
'@ckeditor/ckeditor5-utils': 46.0.2
ckeditor5: 46.0.2(patch_hash=8331a09d41443b39ea1c784daaccfeb0da4f9065ed556e7de92e9c77edd9eb41)
- transitivePeerDependencies:
- - supports-color
'@ckeditor/ckeditor5-slash-command@46.0.2':
dependencies:
@@ -17677,8 +17686,6 @@ snapshots:
'@ckeditor/ckeditor5-ui': 46.0.2
'@ckeditor/ckeditor5-utils': 46.0.2
ckeditor5: 46.0.2(patch_hash=8331a09d41443b39ea1c784daaccfeb0da4f9065ed556e7de92e9c77edd9eb41)
- transitivePeerDependencies:
- - supports-color
'@ckeditor/ckeditor5-source-editing-enhanced@46.0.2':
dependencies:
@@ -17726,8 +17733,6 @@ snapshots:
'@ckeditor/ckeditor5-utils': 46.0.2
ckeditor5: 46.0.2(patch_hash=8331a09d41443b39ea1c784daaccfeb0da4f9065ed556e7de92e9c77edd9eb41)
es-toolkit: 1.39.5
- transitivePeerDependencies:
- - supports-color
'@ckeditor/ckeditor5-table@46.0.2':
dependencies:
@@ -17740,8 +17745,6 @@ snapshots:
'@ckeditor/ckeditor5-widget': 46.0.2
ckeditor5: 46.0.2(patch_hash=8331a09d41443b39ea1c784daaccfeb0da4f9065ed556e7de92e9c77edd9eb41)
es-toolkit: 1.39.5
- transitivePeerDependencies:
- - supports-color
'@ckeditor/ckeditor5-template@46.0.2':
dependencies:
@@ -17852,8 +17855,6 @@ snapshots:
'@ckeditor/ckeditor5-engine': 46.0.2
'@ckeditor/ckeditor5-utils': 46.0.2
es-toolkit: 1.39.5
- transitivePeerDependencies:
- - supports-color
'@ckeditor/ckeditor5-widget@46.0.2':
dependencies:
@@ -17873,8 +17874,6 @@ snapshots:
'@ckeditor/ckeditor5-utils': 46.0.2
ckeditor5: 46.0.2(patch_hash=8331a09d41443b39ea1c784daaccfeb0da4f9065ed556e7de92e9c77edd9eb41)
es-toolkit: 1.39.5
- transitivePeerDependencies:
- - supports-color
'@codemirror/autocomplete@6.18.6':
dependencies:
@@ -18960,15 +18959,15 @@ snapshots:
transitivePeerDependencies:
- babel-plugin-macros
- '@inquirer/confirm@5.1.15(@types/node@22.17.2)':
+ '@inquirer/confirm@5.1.16(@types/node@22.17.2)':
dependencies:
- '@inquirer/core': 10.1.15(@types/node@22.17.2)
+ '@inquirer/core': 10.2.0(@types/node@22.17.2)
'@inquirer/type': 3.0.8(@types/node@22.17.2)
optionalDependencies:
'@types/node': 22.17.2
optional: true
- '@inquirer/core@10.1.15(@types/node@22.17.2)':
+ '@inquirer/core@10.2.0(@types/node@22.17.2)':
dependencies:
'@inquirer/figures': 1.0.13
'@inquirer/type': 3.0.8(@types/node@22.17.2)
@@ -20006,7 +20005,7 @@ snapshots:
- typescript
- verdaccio
- '@nx/vite@21.3.11(@babel/traverse@7.28.0)(@swc-node/register@1.10.10(@swc/core@1.11.29(@swc/helpers@0.5.17))(@swc/types@0.1.21)(typescript@5.9.2))(@swc/core@1.11.29(@swc/helpers@0.5.17))(nx@21.3.11(@swc-node/register@1.10.10(@swc/core@1.11.29(@swc/helpers@0.5.17))(@swc/types@0.1.21)(typescript@5.9.2))(@swc/core@1.11.29(@swc/helpers@0.5.17)))(typescript@5.9.2)(vite@7.1.3(@types/node@22.17.2)(jiti@2.5.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.87.0)(sass@1.87.0)(terser@5.43.1)(tsx@4.20.4)(yaml@2.8.1))(vitest@3.2.4)':
+ '@nx/vite@21.3.11(@babel/traverse@7.28.0)(@swc-node/register@1.10.10(@swc/core@1.11.29(@swc/helpers@0.5.17))(@swc/types@0.1.21)(typescript@5.9.2))(@swc/core@1.11.29(@swc/helpers@0.5.17))(nx@21.3.11(@swc-node/register@1.10.10(@swc/core@1.11.29(@swc/helpers@0.5.17))(@swc/types@0.1.21)(typescript@5.9.2))(@swc/core@1.11.29(@swc/helpers@0.5.17)))(typescript@5.9.2)(vite@7.1.3(@types/node@22.17.2)(jiti@2.5.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.87.0)(sass@1.87.0)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1))(vitest@3.2.4)':
dependencies:
'@nx/devkit': 21.3.11(nx@21.3.11(@swc-node/register@1.10.10(@swc/core@1.11.29(@swc/helpers@0.5.17))(@swc/types@0.1.21)(typescript@5.9.2))(@swc/core@1.11.29(@swc/helpers@0.5.17)))
'@nx/js': 21.3.11(patch_hash=7201af3a8fb4840b046e4e18cc2758fa67ee3d0cf11d0783869dc828cfc79fc7)(@babel/traverse@7.28.0)(@swc-node/register@1.10.10(@swc/core@1.11.29(@swc/helpers@0.5.17))(@swc/types@0.1.21)(typescript@5.9.2))(@swc/core@1.11.29(@swc/helpers@0.5.17))(nx@21.3.11(@swc-node/register@1.10.10(@swc/core@1.11.29(@swc/helpers@0.5.17))(@swc/types@0.1.21)(typescript@5.9.2))(@swc/core@1.11.29(@swc/helpers@0.5.17)))
@@ -20017,8 +20016,8 @@ snapshots:
picomatch: 4.0.2
semver: 7.7.2
tsconfig-paths: 4.2.0
- vite: 7.1.3(@types/node@22.17.2)(jiti@2.5.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.87.0)(sass@1.87.0)(terser@5.43.1)(tsx@4.20.4)(yaml@2.8.1)
- vitest: 3.2.4(@types/debug@4.1.12)(@types/node@22.17.2)(@vitest/browser@3.2.4)(@vitest/ui@3.2.4)(happy-dom@18.0.1)(jiti@2.5.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.1)(msw@2.7.5(@types/node@22.17.2)(typescript@5.9.2))(sass-embedded@1.87.0)(sass@1.87.0)(terser@5.43.1)(tsx@4.20.4)(yaml@2.8.1)
+ vite: 7.1.3(@types/node@22.17.2)(jiti@2.5.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.87.0)(sass@1.87.0)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1)
+ vitest: 3.2.4(@types/debug@4.1.12)(@types/node@22.17.2)(@vitest/browser@3.2.4)(@vitest/ui@3.2.4)(happy-dom@18.0.1)(jiti@2.5.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.1)(msw@2.7.5(@types/node@22.17.2)(typescript@5.9.2))(sass-embedded@1.87.0)(sass@1.87.0)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1)
transitivePeerDependencies:
- '@babel/traverse'
- '@swc-node/register'
@@ -20203,18 +20202,18 @@ snapshots:
'@popperjs/core@2.11.8': {}
- '@preact/preset-vite@2.10.2(@babel/core@7.28.0)(preact@10.27.1)(vite@7.1.3(@types/node@24.2.1)(jiti@2.5.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.87.0)(sass@1.87.0)(terser@5.43.1)(tsx@4.20.4)(yaml@2.8.1))':
+ '@preact/preset-vite@2.10.2(@babel/core@7.28.0)(preact@10.27.1)(vite@7.1.3(@types/node@24.3.0)(jiti@2.5.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.87.0)(sass@1.87.0)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1))':
dependencies:
'@babel/core': 7.28.0
'@babel/plugin-transform-react-jsx': 7.27.1(@babel/core@7.28.0)
'@babel/plugin-transform-react-jsx-development': 7.27.1(@babel/core@7.28.0)
- '@prefresh/vite': 2.4.8(preact@10.27.1)(vite@7.1.3(@types/node@24.2.1)(jiti@2.5.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.87.0)(sass@1.87.0)(terser@5.43.1)(tsx@4.20.4)(yaml@2.8.1))
+ '@prefresh/vite': 2.4.8(preact@10.27.1)(vite@7.1.3(@types/node@24.3.0)(jiti@2.5.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.87.0)(sass@1.87.0)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1))
'@rollup/pluginutils': 4.2.1
babel-plugin-transform-hook-names: 1.0.2(@babel/core@7.28.0)
debug: 4.4.1(supports-color@6.0.0)
picocolors: 1.1.1
- vite: 7.1.3(@types/node@24.2.1)(jiti@2.5.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.87.0)(sass@1.87.0)(terser@5.43.1)(tsx@4.20.4)(yaml@2.8.1)
- vite-prerender-plugin: 0.5.11(vite@7.1.3(@types/node@24.2.1)(jiti@2.5.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.87.0)(sass@1.87.0)(terser@5.43.1)(tsx@4.20.4)(yaml@2.8.1))
+ vite: 7.1.3(@types/node@24.3.0)(jiti@2.5.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.87.0)(sass@1.87.0)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1)
+ vite-prerender-plugin: 0.5.11(vite@7.1.3(@types/node@24.3.0)(jiti@2.5.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.87.0)(sass@1.87.0)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1))
transitivePeerDependencies:
- preact
- supports-color
@@ -20227,7 +20226,7 @@ snapshots:
'@prefresh/utils@1.2.1': {}
- '@prefresh/vite@2.4.8(preact@10.27.1)(vite@7.1.3(@types/node@24.2.1)(jiti@2.5.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.87.0)(sass@1.87.0)(terser@5.43.1)(tsx@4.20.4)(yaml@2.8.1))':
+ '@prefresh/vite@2.4.8(preact@10.27.1)(vite@7.1.3(@types/node@24.3.0)(jiti@2.5.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.87.0)(sass@1.87.0)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1))':
dependencies:
'@babel/core': 7.28.0
'@prefresh/babel-plugin': 0.5.2
@@ -20235,7 +20234,7 @@ snapshots:
'@prefresh/utils': 1.2.1
'@rollup/pluginutils': 4.2.1
preact: 10.27.1
- vite: 7.1.3(@types/node@24.2.1)(jiti@2.5.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.87.0)(sass@1.87.0)(terser@5.43.1)(tsx@4.20.4)(yaml@2.8.1)
+ vite: 7.1.3(@types/node@24.3.0)(jiti@2.5.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.87.0)(sass@1.87.0)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1)
transitivePeerDependencies:
- supports-color
@@ -20266,7 +20265,7 @@ snapshots:
'@protobufjs/utf8@1.1.0': {}
- '@puppeteer/browsers@2.10.6':
+ '@puppeteer/browsers@2.10.7':
dependencies:
debug: 4.4.1(supports-color@6.0.0)
extract-zip: 2.0.1
@@ -21253,15 +21252,15 @@ snapshots:
dependencies:
acorn: 8.15.0
- '@sveltejs/adapter-auto@6.1.0(@sveltejs/kit@2.36.2(@sveltejs/vite-plugin-svelte@6.1.3(svelte@5.38.3)(vite@7.1.3(@types/node@24.2.1)(jiti@2.5.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.87.0)(sass@1.87.0)(terser@5.43.1)(tsx@4.20.4)(yaml@2.8.1)))(svelte@5.38.3)(vite@7.1.3(@types/node@24.2.1)(jiti@2.5.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.87.0)(sass@1.87.0)(terser@5.43.1)(tsx@4.20.4)(yaml@2.8.1)))':
+ '@sveltejs/adapter-auto@6.1.0(@sveltejs/kit@2.36.2(@sveltejs/vite-plugin-svelte@6.1.3(svelte@5.38.3)(vite@7.1.3(@types/node@24.3.0)(jiti@2.5.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.87.0)(sass@1.87.0)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1)))(svelte@5.38.3)(vite@7.1.3(@types/node@24.3.0)(jiti@2.5.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.87.0)(sass@1.87.0)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1)))':
dependencies:
- '@sveltejs/kit': 2.36.2(@sveltejs/vite-plugin-svelte@6.1.3(svelte@5.38.3)(vite@7.1.3(@types/node@24.2.1)(jiti@2.5.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.87.0)(sass@1.87.0)(terser@5.43.1)(tsx@4.20.4)(yaml@2.8.1)))(svelte@5.38.3)(vite@7.1.3(@types/node@24.2.1)(jiti@2.5.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.87.0)(sass@1.87.0)(terser@5.43.1)(tsx@4.20.4)(yaml@2.8.1))
+ '@sveltejs/kit': 2.36.2(@sveltejs/vite-plugin-svelte@6.1.3(svelte@5.38.3)(vite@7.1.3(@types/node@24.3.0)(jiti@2.5.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.87.0)(sass@1.87.0)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1)))(svelte@5.38.3)(vite@7.1.3(@types/node@24.3.0)(jiti@2.5.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.87.0)(sass@1.87.0)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1))
- '@sveltejs/kit@2.36.2(@sveltejs/vite-plugin-svelte@6.1.3(svelte@5.38.3)(vite@7.1.3(@types/node@24.2.1)(jiti@2.5.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.87.0)(sass@1.87.0)(terser@5.43.1)(tsx@4.20.4)(yaml@2.8.1)))(svelte@5.38.3)(vite@7.1.3(@types/node@24.2.1)(jiti@2.5.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.87.0)(sass@1.87.0)(terser@5.43.1)(tsx@4.20.4)(yaml@2.8.1))':
+ '@sveltejs/kit@2.36.2(@sveltejs/vite-plugin-svelte@6.1.3(svelte@5.38.3)(vite@7.1.3(@types/node@24.3.0)(jiti@2.5.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.87.0)(sass@1.87.0)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1)))(svelte@5.38.3)(vite@7.1.3(@types/node@24.3.0)(jiti@2.5.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.87.0)(sass@1.87.0)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1))':
dependencies:
'@standard-schema/spec': 1.0.0
'@sveltejs/acorn-typescript': 1.0.5(acorn@8.15.0)
- '@sveltejs/vite-plugin-svelte': 6.1.3(svelte@5.38.3)(vite@7.1.3(@types/node@24.2.1)(jiti@2.5.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.87.0)(sass@1.87.0)(terser@5.43.1)(tsx@4.20.4)(yaml@2.8.1))
+ '@sveltejs/vite-plugin-svelte': 6.1.3(svelte@5.38.3)(vite@7.1.3(@types/node@24.3.0)(jiti@2.5.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.87.0)(sass@1.87.0)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1))
'@types/cookie': 0.6.0
acorn: 8.15.0
cookie: 1.0.2
@@ -21274,27 +21273,27 @@ snapshots:
set-cookie-parser: 2.7.1
sirv: 3.0.1
svelte: 5.38.3
- vite: 7.1.3(@types/node@24.2.1)(jiti@2.5.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.87.0)(sass@1.87.0)(terser@5.43.1)(tsx@4.20.4)(yaml@2.8.1)
+ vite: 7.1.3(@types/node@24.3.0)(jiti@2.5.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.87.0)(sass@1.87.0)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1)
- '@sveltejs/vite-plugin-svelte-inspector@5.0.1(@sveltejs/vite-plugin-svelte@6.1.3(svelte@5.38.3)(vite@7.1.3(@types/node@24.2.1)(jiti@2.5.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.87.0)(sass@1.87.0)(terser@5.43.1)(tsx@4.20.4)(yaml@2.8.1)))(svelte@5.38.3)(vite@7.1.3(@types/node@24.2.1)(jiti@2.5.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.87.0)(sass@1.87.0)(terser@5.43.1)(tsx@4.20.4)(yaml@2.8.1))':
+ '@sveltejs/vite-plugin-svelte-inspector@5.0.1(@sveltejs/vite-plugin-svelte@6.1.3(svelte@5.38.3)(vite@7.1.3(@types/node@24.3.0)(jiti@2.5.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.87.0)(sass@1.87.0)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1)))(svelte@5.38.3)(vite@7.1.3(@types/node@24.3.0)(jiti@2.5.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.87.0)(sass@1.87.0)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1))':
dependencies:
- '@sveltejs/vite-plugin-svelte': 6.1.3(svelte@5.38.3)(vite@7.1.3(@types/node@24.2.1)(jiti@2.5.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.87.0)(sass@1.87.0)(terser@5.43.1)(tsx@4.20.4)(yaml@2.8.1))
+ '@sveltejs/vite-plugin-svelte': 6.1.3(svelte@5.38.3)(vite@7.1.3(@types/node@24.3.0)(jiti@2.5.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.87.0)(sass@1.87.0)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1))
debug: 4.4.1(supports-color@6.0.0)
svelte: 5.38.3
- vite: 7.1.3(@types/node@24.2.1)(jiti@2.5.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.87.0)(sass@1.87.0)(terser@5.43.1)(tsx@4.20.4)(yaml@2.8.1)
+ vite: 7.1.3(@types/node@24.3.0)(jiti@2.5.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.87.0)(sass@1.87.0)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1)
transitivePeerDependencies:
- supports-color
- '@sveltejs/vite-plugin-svelte@6.1.3(svelte@5.38.3)(vite@7.1.3(@types/node@24.2.1)(jiti@2.5.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.87.0)(sass@1.87.0)(terser@5.43.1)(tsx@4.20.4)(yaml@2.8.1))':
+ '@sveltejs/vite-plugin-svelte@6.1.3(svelte@5.38.3)(vite@7.1.3(@types/node@24.3.0)(jiti@2.5.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.87.0)(sass@1.87.0)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1))':
dependencies:
- '@sveltejs/vite-plugin-svelte-inspector': 5.0.1(@sveltejs/vite-plugin-svelte@6.1.3(svelte@5.38.3)(vite@7.1.3(@types/node@24.2.1)(jiti@2.5.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.87.0)(sass@1.87.0)(terser@5.43.1)(tsx@4.20.4)(yaml@2.8.1)))(svelte@5.38.3)(vite@7.1.3(@types/node@24.2.1)(jiti@2.5.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.87.0)(sass@1.87.0)(terser@5.43.1)(tsx@4.20.4)(yaml@2.8.1))
+ '@sveltejs/vite-plugin-svelte-inspector': 5.0.1(@sveltejs/vite-plugin-svelte@6.1.3(svelte@5.38.3)(vite@7.1.3(@types/node@24.3.0)(jiti@2.5.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.87.0)(sass@1.87.0)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1)))(svelte@5.38.3)(vite@7.1.3(@types/node@24.3.0)(jiti@2.5.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.87.0)(sass@1.87.0)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1))
debug: 4.4.1(supports-color@6.0.0)
deepmerge: 4.3.1
kleur: 4.1.5
magic-string: 0.30.17
svelte: 5.38.3
- vite: 7.1.3(@types/node@24.2.1)(jiti@2.5.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.87.0)(sass@1.87.0)(terser@5.43.1)(tsx@4.20.4)(yaml@2.8.1)
- vitefu: 1.1.1(vite@7.1.3(@types/node@24.2.1)(jiti@2.5.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.87.0)(sass@1.87.0)(terser@5.43.1)(tsx@4.20.4)(yaml@2.8.1))
+ vite: 7.1.3(@types/node@24.3.0)(jiti@2.5.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.87.0)(sass@1.87.0)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1)
+ vitefu: 1.1.1(vite@7.1.3(@types/node@24.3.0)(jiti@2.5.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.87.0)(sass@1.87.0)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1))
transitivePeerDependencies:
- supports-color
@@ -21461,12 +21460,12 @@ snapshots:
postcss-selector-parser: 6.0.10
tailwindcss: 4.1.12
- '@tailwindcss/vite@4.1.12(vite@7.1.3(@types/node@24.2.1)(jiti@2.5.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.87.0)(sass@1.87.0)(terser@5.43.1)(tsx@4.20.4)(yaml@2.8.1))':
+ '@tailwindcss/vite@4.1.12(vite@7.1.3(@types/node@24.3.0)(jiti@2.5.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.87.0)(sass@1.87.0)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1))':
dependencies:
'@tailwindcss/node': 4.1.12
'@tailwindcss/oxide': 4.1.12
tailwindcss: 4.1.12
- vite: 7.1.3(@types/node@24.2.1)(jiti@2.5.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.87.0)(sass@1.87.0)(terser@5.43.1)(tsx@4.20.4)(yaml@2.8.1)
+ vite: 7.1.3(@types/node@24.3.0)(jiti@2.5.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.87.0)(sass@1.87.0)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1)
'@testing-library/dom@10.4.0':
dependencies:
@@ -21529,7 +21528,7 @@ snapshots:
'@types/appdmg@0.5.5':
dependencies:
- '@types/node': 22.17.2
+ '@types/node': 24.3.0
optional: true
'@types/archiver@6.0.3':
@@ -21572,7 +21571,7 @@ snapshots:
'@types/bonjour@3.5.13':
dependencies:
- '@types/node': 22.17.2
+ '@types/node': 24.3.0
'@types/bootstrap@5.2.10':
dependencies:
@@ -21607,7 +21606,7 @@ snapshots:
'@types/connect-history-api-fallback@1.5.4':
dependencies:
'@types/express-serve-static-core': 5.0.7
- '@types/node': 22.17.2
+ '@types/node': 24.3.0
'@types/connect@3.4.38':
dependencies:
@@ -21807,7 +21806,7 @@ snapshots:
'@types/fs-extra@9.0.13':
dependencies:
- '@types/node': 22.17.2
+ '@types/node': 24.3.0
optional: true
'@types/geojson-vt@3.2.5':
@@ -21819,7 +21818,7 @@ snapshots:
'@types/glob@7.2.0':
dependencies:
'@types/minimatch': 5.1.2
- '@types/node': 22.17.2
+ '@types/node': 24.3.0
'@types/hast@3.0.4':
dependencies:
@@ -21833,7 +21832,7 @@ snapshots:
'@types/http-proxy@1.17.16':
dependencies:
- '@types/node': 22.17.2
+ '@types/node': 24.3.0
'@types/ini@4.1.1': {}
@@ -21917,7 +21916,7 @@ snapshots:
'@types/node-forge@1.3.13':
dependencies:
- '@types/node': 22.17.2
+ '@types/node': 24.3.0
'@types/node@16.9.1': {}
@@ -21925,7 +21924,7 @@ snapshots:
dependencies:
undici-types: 6.19.8
- '@types/node@20.19.10':
+ '@types/node@20.19.11':
dependencies:
undici-types: 6.21.0
@@ -21941,10 +21940,9 @@ snapshots:
dependencies:
undici-types: 6.21.0
- '@types/node@24.2.1':
+ '@types/node@24.3.0':
dependencies:
undici-types: 7.10.0
- optional: true
'@types/parse-json@4.0.2': {}
@@ -22025,7 +22023,7 @@ snapshots:
'@types/sockjs@0.3.36':
dependencies:
- '@types/node': 22.17.2
+ '@types/node': 24.3.0
'@types/stack-utils@2.0.3': {}
@@ -22063,7 +22061,7 @@ snapshots:
'@types/through2@2.0.41':
dependencies:
- '@types/node': 22.17.2
+ '@types/node': 24.3.0
'@types/tmp@0.2.6': {}
@@ -22341,20 +22339,20 @@ snapshots:
- bufferutil
- utf-8-validate
- '@vitest/browser@3.2.4(bufferutil@4.0.9)(msw@2.7.5(@types/node@22.17.2)(typescript@5.9.2))(playwright@1.55.0)(utf-8-validate@6.0.5)(vite@7.1.3(@types/node@22.17.2)(jiti@2.5.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.87.0)(sass@1.87.0)(terser@5.43.1)(tsx@4.20.4)(yaml@2.8.1))(vitest@3.2.4)(webdriverio@9.19.1(bufferutil@4.0.9)(utf-8-validate@6.0.5))':
+ '@vitest/browser@3.2.4(bufferutil@4.0.9)(msw@2.7.5(@types/node@22.17.2)(typescript@5.9.2))(playwright@1.55.0)(utf-8-validate@6.0.5)(vite@7.1.3(@types/node@22.17.2)(jiti@2.5.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.87.0)(sass@1.87.0)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1))(vitest@3.2.4)(webdriverio@9.19.2(bufferutil@4.0.9)(utf-8-validate@6.0.5))':
dependencies:
'@testing-library/dom': 10.4.0
'@testing-library/user-event': 14.6.1(@testing-library/dom@10.4.0)
- '@vitest/mocker': 3.2.4(msw@2.7.5(@types/node@22.17.2)(typescript@5.9.2))(vite@7.1.3(@types/node@22.17.2)(jiti@2.5.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.87.0)(sass@1.87.0)(terser@5.43.1)(tsx@4.20.4)(yaml@2.8.1))
+ '@vitest/mocker': 3.2.4(msw@2.7.5(@types/node@22.17.2)(typescript@5.9.2))(vite@7.1.3(@types/node@22.17.2)(jiti@2.5.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.87.0)(sass@1.87.0)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1))
'@vitest/utils': 3.2.4
magic-string: 0.30.17
sirv: 3.0.1
tinyrainbow: 2.0.0
- vitest: 3.2.4(@types/debug@4.1.12)(@types/node@22.17.2)(@vitest/browser@3.2.4)(@vitest/ui@3.2.4)(happy-dom@18.0.1)(jiti@2.5.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.1)(msw@2.7.5(@types/node@22.17.2)(typescript@5.9.2))(sass-embedded@1.87.0)(sass@1.87.0)(terser@5.43.1)(tsx@4.20.4)(yaml@2.8.1)
+ vitest: 3.2.4(@types/debug@4.1.12)(@types/node@22.17.2)(@vitest/browser@3.2.4)(@vitest/ui@3.2.4)(happy-dom@18.0.1)(jiti@2.5.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.1)(msw@2.7.5(@types/node@22.17.2)(typescript@5.9.2))(sass-embedded@1.87.0)(sass@1.87.0)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1)
ws: 8.18.3(bufferutil@4.0.9)(utf-8-validate@6.0.5)
optionalDependencies:
playwright: 1.55.0
- webdriverio: 9.19.1(bufferutil@4.0.9)(utf-8-validate@6.0.5)
+ webdriverio: 9.19.2(bufferutil@4.0.9)(utf-8-validate@6.0.5)
transitivePeerDependencies:
- bufferutil
- msw
@@ -22373,7 +22371,7 @@ snapshots:
magicast: 0.3.5
test-exclude: 7.0.1
tinyrainbow: 2.0.0
- vitest: 3.2.4(@types/debug@4.1.12)(@types/node@22.17.2)(@vitest/browser@3.2.4)(@vitest/ui@3.2.4)(happy-dom@18.0.1)(jiti@2.5.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.1)(msw@2.7.5(@types/node@22.17.2)(typescript@5.9.2))(sass-embedded@1.87.0)(sass@1.87.0)(terser@5.43.1)(tsx@4.20.4)(yaml@2.8.1)
+ vitest: 3.2.4(@types/debug@4.1.12)(@types/node@22.17.2)(@vitest/browser@3.2.4)(@vitest/ui@3.2.4)(happy-dom@18.0.1)(jiti@2.5.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.1)(msw@2.7.5(@types/node@22.17.2)(typescript@5.9.2))(sass-embedded@1.87.0)(sass@1.87.0)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1)
transitivePeerDependencies:
- supports-color
@@ -22392,9 +22390,9 @@ snapshots:
std-env: 3.9.0
test-exclude: 7.0.1
tinyrainbow: 2.0.0
- vitest: 3.2.4(@types/debug@4.1.12)(@types/node@22.17.2)(@vitest/browser@3.2.4)(@vitest/ui@3.2.4)(happy-dom@18.0.1)(jiti@2.5.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.1)(msw@2.7.5(@types/node@22.17.2)(typescript@5.9.2))(sass-embedded@1.87.0)(sass@1.87.0)(terser@5.43.1)(tsx@4.20.4)(yaml@2.8.1)
+ vitest: 3.2.4(@types/debug@4.1.12)(@types/node@22.17.2)(@vitest/browser@3.2.4)(@vitest/ui@3.2.4)(happy-dom@18.0.1)(jiti@2.5.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.1)(msw@2.7.5(@types/node@22.17.2)(typescript@5.9.2))(sass-embedded@1.87.0)(sass@1.87.0)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1)
optionalDependencies:
- '@vitest/browser': 3.2.4(bufferutil@4.0.9)(msw@2.7.5(@types/node@22.17.2)(typescript@5.9.2))(playwright@1.55.0)(utf-8-validate@6.0.5)(vite@7.1.3(@types/node@22.17.2)(jiti@2.5.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.87.0)(sass@1.87.0)(terser@5.43.1)(tsx@4.20.4)(yaml@2.8.1))(vitest@3.2.4)(webdriverio@9.19.1(bufferutil@4.0.9)(utf-8-validate@6.0.5))
+ '@vitest/browser': 3.2.4(bufferutil@4.0.9)(msw@2.7.5(@types/node@22.17.2)(typescript@5.9.2))(playwright@1.55.0)(utf-8-validate@6.0.5)(vite@7.1.3(@types/node@22.17.2)(jiti@2.5.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.87.0)(sass@1.87.0)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1))(vitest@3.2.4)(webdriverio@9.19.2(bufferutil@4.0.9)(utf-8-validate@6.0.5))
transitivePeerDependencies:
- supports-color
@@ -22406,23 +22404,23 @@ snapshots:
chai: 5.2.0
tinyrainbow: 2.0.0
- '@vitest/mocker@3.2.4(msw@2.7.5(@types/node@22.17.2)(typescript@5.9.2))(vite@7.0.0(@types/node@22.17.2)(jiti@2.5.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.87.0)(sass@1.87.0)(terser@5.43.1)(tsx@4.20.4)(yaml@2.8.1))':
+ '@vitest/mocker@3.2.4(msw@2.7.5(@types/node@22.17.2)(typescript@5.9.2))(vite@7.0.0(@types/node@22.17.2)(jiti@2.5.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.87.0)(sass@1.87.0)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1))':
dependencies:
'@vitest/spy': 3.2.4
estree-walker: 3.0.3
magic-string: 0.30.17
optionalDependencies:
msw: 2.7.5(@types/node@22.17.2)(typescript@5.9.2)
- vite: 7.0.0(@types/node@22.17.2)(jiti@2.5.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.87.0)(sass@1.87.0)(terser@5.43.1)(tsx@4.20.4)(yaml@2.8.1)
+ vite: 7.0.0(@types/node@22.17.2)(jiti@2.5.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.87.0)(sass@1.87.0)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1)
- '@vitest/mocker@3.2.4(msw@2.7.5(@types/node@22.17.2)(typescript@5.9.2))(vite@7.1.3(@types/node@22.17.2)(jiti@2.5.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.87.0)(sass@1.87.0)(terser@5.43.1)(tsx@4.20.4)(yaml@2.8.1))':
+ '@vitest/mocker@3.2.4(msw@2.7.5(@types/node@22.17.2)(typescript@5.9.2))(vite@7.1.3(@types/node@22.17.2)(jiti@2.5.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.87.0)(sass@1.87.0)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1))':
dependencies:
'@vitest/spy': 3.2.4
estree-walker: 3.0.3
magic-string: 0.30.17
optionalDependencies:
msw: 2.7.5(@types/node@22.17.2)(typescript@5.9.2)
- vite: 7.1.3(@types/node@22.17.2)(jiti@2.5.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.87.0)(sass@1.87.0)(terser@5.43.1)(tsx@4.20.4)(yaml@2.8.1)
+ vite: 7.1.3(@types/node@22.17.2)(jiti@2.5.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.87.0)(sass@1.87.0)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1)
'@vitest/pretty-format@3.2.4':
dependencies:
@@ -22453,7 +22451,7 @@ snapshots:
sirv: 3.0.1
tinyglobby: 0.2.14
tinyrainbow: 2.0.0
- vitest: 3.2.4(@types/debug@4.1.12)(@types/node@22.17.2)(@vitest/browser@3.2.4)(@vitest/ui@3.2.4)(happy-dom@18.0.1)(jiti@2.5.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.1)(msw@2.7.5(@types/node@22.17.2)(typescript@5.9.2))(sass-embedded@1.87.0)(sass@1.87.0)(terser@5.43.1)(tsx@4.20.4)(yaml@2.8.1)
+ vitest: 3.2.4(@types/debug@4.1.12)(@types/node@22.17.2)(@vitest/browser@3.2.4)(@vitest/ui@3.2.4)(happy-dom@18.0.1)(jiti@2.5.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.1)(msw@2.7.5(@types/node@22.17.2)(typescript@5.9.2))(sass-embedded@1.87.0)(sass@1.87.0)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1)
'@vitest/utils@3.2.4':
dependencies:
@@ -22506,11 +22504,11 @@ snapshots:
'@vue/shared@3.5.14': {}
- '@wdio/config@9.19.1':
+ '@wdio/config@9.19.2':
dependencies:
'@wdio/logger': 9.18.0
- '@wdio/types': 9.19.1
- '@wdio/utils': 9.19.1
+ '@wdio/types': 9.19.2
+ '@wdio/utils': 9.19.2
deepmerge-ts: 7.1.5
glob: 10.4.5
import-meta-resolve: 4.1.0
@@ -22530,18 +22528,18 @@ snapshots:
'@wdio/repl@9.16.2':
dependencies:
- '@types/node': 20.19.10
+ '@types/node': 20.19.11
- '@wdio/types@9.19.1':
+ '@wdio/types@9.19.2':
dependencies:
- '@types/node': 20.19.10
+ '@types/node': 20.19.11
- '@wdio/utils@9.19.1':
+ '@wdio/utils@9.19.2':
dependencies:
- '@puppeteer/browsers': 2.10.6
+ '@puppeteer/browsers': 2.10.7
'@wdio/logger': 9.18.0
- '@wdio/types': 9.19.1
- decamelize: 6.0.0
+ '@wdio/types': 9.19.2
+ decamelize: 6.0.1
deepmerge-ts: 7.1.5
edgedriver: 6.1.2
geckodriver: 5.0.0
@@ -23564,8 +23562,6 @@ snapshots:
ckeditor5-collaboration@46.0.2:
dependencies:
'@ckeditor/ckeditor5-collaboration-core': 46.0.2
- transitivePeerDependencies:
- - supports-color
ckeditor5-premium-features@46.0.2(bufferutil@4.0.9)(ckeditor5@46.0.2(patch_hash=8331a09d41443b39ea1c784daaccfeb0da4f9065ed556e7de92e9c77edd9eb41))(utf-8-validate@6.0.5):
dependencies:
@@ -24609,7 +24605,7 @@ snapshots:
decamelize@4.0.0: {}
- decamelize@6.0.0: {}
+ decamelize@6.0.1: {}
decimal.js@10.5.0: {}
@@ -24881,7 +24877,7 @@ snapshots:
dependencies:
'@wdio/logger': 9.18.0
'@zip.js/zip.js': 2.7.72
- decamelize: 6.0.0
+ decamelize: 6.0.1
edge-paths: 3.0.5
fast-xml-parser: 5.2.5
http-proxy-agent: 7.0.2
@@ -25304,7 +25300,7 @@ snapshots:
dependencies:
eslint: 9.34.0(jiti@2.5.1)
- eslint-plugin-svelte@3.11.0(eslint@9.34.0(jiti@2.5.1))(svelte@5.38.3)(ts-node@10.9.2(@swc/core@1.11.29(@swc/helpers@0.5.17))(@types/node@24.2.1)(typescript@5.9.2)):
+ eslint-plugin-svelte@3.11.0(eslint@9.34.0(jiti@2.5.1))(svelte@5.38.3)(ts-node@10.9.2(@swc/core@1.11.29(@swc/helpers@0.5.17))(@types/node@24.3.0)(typescript@5.9.2)):
dependencies:
'@eslint-community/eslint-utils': 4.7.0(eslint@9.34.0(jiti@2.5.1))
'@jridgewell/sourcemap-codec': 1.5.4
@@ -25313,7 +25309,7 @@ snapshots:
globals: 16.3.0
known-css-properties: 0.37.0
postcss: 8.5.6
- postcss-load-config: 3.1.4(postcss@8.5.6)(ts-node@10.9.2(@swc/core@1.11.29(@swc/helpers@0.5.17))(@types/node@24.2.1)(typescript@5.9.2))
+ postcss-load-config: 3.1.4(postcss@8.5.6)(ts-node@10.9.2(@swc/core@1.11.29(@swc/helpers@0.5.17))(@types/node@24.3.0)(typescript@5.9.2))
postcss-safe-parser: 7.0.1(postcss@8.5.6)
semver: 7.7.2
svelte-eslint-parser: 1.3.0(svelte@5.38.3)
@@ -25979,7 +25975,7 @@ snapshots:
dependencies:
'@wdio/logger': 9.18.0
'@zip.js/zip.js': 2.7.72
- decamelize: 6.0.0
+ decamelize: 6.0.1
http-proxy-agent: 7.0.2
https-proxy-agent: 7.0.6
node-fetch: 3.3.2
@@ -26626,7 +26622,7 @@ snapshots:
transitivePeerDependencies:
- encoding
- i18next@25.4.1(typescript@5.9.2):
+ i18next@25.4.2(typescript@5.9.2):
dependencies:
'@babel/runtime': 7.27.6
optionalDependencies:
@@ -27310,13 +27306,13 @@ snapshots:
jest-worker@26.6.2:
dependencies:
- '@types/node': 22.17.2
+ '@types/node': 24.3.0
merge-stream: 2.0.0
supports-color: 7.2.0
jest-worker@27.5.1:
dependencies:
- '@types/node': 22.17.2
+ '@types/node': 24.3.0
merge-stream: 2.0.0
supports-color: 8.1.1
@@ -28649,7 +28645,7 @@ snapshots:
'@bundled-es-modules/cookie': 2.0.1
'@bundled-es-modules/statuses': 1.0.1
'@bundled-es-modules/tough-cookie': 0.1.6
- '@inquirer/confirm': 5.1.15(@types/node@22.17.2)
+ '@inquirer/confirm': 5.1.16(@types/node@22.17.2)
'@mswjs/interceptors': 0.37.6
'@open-draft/deferred-promise': 2.2.0
'@open-draft/until': 2.1.0
@@ -29646,13 +29642,13 @@ snapshots:
camelcase-css: 2.0.1
postcss: 8.5.6
- postcss-load-config@3.1.4(postcss@8.5.6)(ts-node@10.9.2(@swc/core@1.11.29(@swc/helpers@0.5.17))(@types/node@24.2.1)(typescript@5.9.2)):
+ postcss-load-config@3.1.4(postcss@8.5.6)(ts-node@10.9.2(@swc/core@1.11.29(@swc/helpers@0.5.17))(@types/node@24.3.0)(typescript@5.9.2)):
dependencies:
lilconfig: 2.1.0
yaml: 1.10.2
optionalDependencies:
postcss: 8.5.6
- ts-node: 10.9.2(@swc/core@1.11.29(@swc/helpers@0.5.17))(@types/node@24.2.1)(typescript@5.9.2)
+ ts-node: 10.9.2(@swc/core@1.11.29(@swc/helpers@0.5.17))(@types/node@24.3.0)(typescript@5.9.2)
postcss-loader@4.3.0(postcss@8.5.3)(webpack@5.100.2(@swc/core@1.11.29(@swc/helpers@0.5.17))(esbuild@0.25.9)):
dependencies:
@@ -30333,7 +30329,7 @@ snapshots:
'@protobufjs/path': 1.1.2
'@protobufjs/pool': 1.1.0
'@protobufjs/utf8': 1.1.0
- '@types/node': 22.17.2
+ '@types/node': 24.3.0
long: 5.3.2
protocol-buffers-schema@3.6.0: {}
@@ -30477,11 +30473,11 @@ snapshots:
react: 16.14.0
scheduler: 0.26.0
- react-i18next@15.7.2(i18next@25.4.1(typescript@5.9.2))(react-dom@19.1.0(react@16.14.0))(react@16.14.0)(typescript@5.9.2):
+ react-i18next@15.7.2(i18next@25.4.2(typescript@5.9.2))(react-dom@19.1.0(react@16.14.0))(react@16.14.0)(typescript@5.9.2):
dependencies:
'@babel/runtime': 7.27.6
html-parse-stringify: 3.0.1
- i18next: 25.4.1(typescript@5.9.2)
+ i18next: 25.4.2(typescript@5.9.2)
react: 16.14.0
optionalDependencies:
react-dom: 19.1.0(react@16.14.0)
@@ -30856,11 +30852,11 @@ snapshots:
'@rolldown/binding-win32-ia32-msvc': 1.0.0-beta.29
'@rolldown/binding-win32-x64-msvc': 1.0.0-beta.29
- rollup-plugin-stats@1.5.0(rolldown@1.0.0-beta.29)(rollup@4.46.3)(vite@7.1.3(@types/node@22.17.2)(jiti@2.5.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.87.0)(sass@1.87.0)(terser@5.43.1)(tsx@4.20.4)(yaml@2.8.1)):
+ rollup-plugin-stats@1.5.0(rolldown@1.0.0-beta.29)(rollup@4.46.3)(vite@7.1.3(@types/node@22.17.2)(jiti@2.5.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.87.0)(sass@1.87.0)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1)):
optionalDependencies:
rolldown: 1.0.0-beta.29
rollup: 4.46.3
- vite: 7.1.3(@types/node@22.17.2)(jiti@2.5.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.87.0)(sass@1.87.0)(terser@5.43.1)(tsx@4.20.4)(yaml@2.8.1)
+ vite: 7.1.3(@types/node@22.17.2)(jiti@2.5.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.87.0)(sass@1.87.0)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1)
rollup-plugin-styles@4.0.0(rollup@4.40.0):
dependencies:
@@ -30889,13 +30885,13 @@ snapshots:
'@rollup/pluginutils': 5.1.4(rollup@4.40.0)
rollup: 4.40.0
- rollup-plugin-webpack-stats@2.1.4(rolldown@1.0.0-beta.29)(rollup@4.46.3)(vite@7.1.3(@types/node@22.17.2)(jiti@2.5.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.87.0)(sass@1.87.0)(terser@5.43.1)(tsx@4.20.4)(yaml@2.8.1)):
+ rollup-plugin-webpack-stats@2.1.4(rolldown@1.0.0-beta.29)(rollup@4.46.3)(vite@7.1.3(@types/node@22.17.2)(jiti@2.5.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.87.0)(sass@1.87.0)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1)):
dependencies:
rolldown: 1.0.0-beta.29
- rollup-plugin-stats: 1.5.0(rolldown@1.0.0-beta.29)(rollup@4.46.3)(vite@7.1.3(@types/node@22.17.2)(jiti@2.5.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.87.0)(sass@1.87.0)(terser@5.43.1)(tsx@4.20.4)(yaml@2.8.1))
+ rollup-plugin-stats: 1.5.0(rolldown@1.0.0-beta.29)(rollup@4.46.3)(vite@7.1.3(@types/node@22.17.2)(jiti@2.5.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.87.0)(sass@1.87.0)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1))
optionalDependencies:
rollup: 4.46.3
- vite: 7.1.3(@types/node@22.17.2)(jiti@2.5.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.87.0)(sass@1.87.0)(terser@5.43.1)(tsx@4.20.4)(yaml@2.8.1)
+ vite: 7.1.3(@types/node@22.17.2)(jiti@2.5.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.87.0)(sass@1.87.0)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1)
rollup@4.40.0:
dependencies:
@@ -32459,14 +32455,14 @@ snapshots:
optionalDependencies:
'@swc/core': 1.11.29(@swc/helpers@0.5.17)
- ts-node@10.9.2(@swc/core@1.11.29(@swc/helpers@0.5.17))(@types/node@24.2.1)(typescript@5.9.2):
+ ts-node@10.9.2(@swc/core@1.11.29(@swc/helpers@0.5.17))(@types/node@24.3.0)(typescript@5.9.2):
dependencies:
'@cspotcode/source-map-support': 0.8.1
'@tsconfig/node10': 1.0.11
'@tsconfig/node12': 1.0.11
'@tsconfig/node14': 1.0.3
'@tsconfig/node16': 1.0.4
- '@types/node': 24.2.1
+ '@types/node': 24.3.0
acorn: 8.14.1
acorn-walk: 8.3.4
arg: 4.1.3
@@ -32495,6 +32491,13 @@ snapshots:
optionalDependencies:
fsevents: 2.3.3
+ tsx@4.20.5:
+ dependencies:
+ esbuild: 0.25.9
+ get-tsconfig: 4.10.1
+ optionalDependencies:
+ fsevents: 2.3.3
+
tuf-js@3.1.0:
dependencies:
'@tufjs/models': 3.0.1
@@ -32632,8 +32635,7 @@ snapshots:
undici-types@6.21.0: {}
- undici-types@7.10.0:
- optional: true
+ undici-types@7.10.0: {}
undici@6.21.3: {}
@@ -32902,13 +32904,13 @@ snapshots:
'@types/unist': 3.0.3
vfile-message: 4.0.2
- vite-node@3.2.4(@types/node@22.17.2)(jiti@2.5.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.87.0)(sass@1.87.0)(terser@5.43.1)(tsx@4.20.4)(yaml@2.8.1):
+ vite-node@3.2.4(@types/node@22.17.2)(jiti@2.5.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.87.0)(sass@1.87.0)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1):
dependencies:
cac: 6.7.14
debug: 4.4.1(supports-color@6.0.0)
es-module-lexer: 1.7.0
pathe: 2.0.3
- vite: 7.0.0(@types/node@22.17.2)(jiti@2.5.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.87.0)(sass@1.87.0)(terser@5.43.1)(tsx@4.20.4)(yaml@2.8.1)
+ vite: 7.0.0(@types/node@22.17.2)(jiti@2.5.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.87.0)(sass@1.87.0)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1)
transitivePeerDependencies:
- '@types/node'
- jiti
@@ -32923,7 +32925,7 @@ snapshots:
- tsx
- yaml
- vite-plugin-dts@4.5.4(@types/node@22.17.2)(rollup@4.46.3)(typescript@5.9.2)(vite@7.1.3(@types/node@22.17.2)(jiti@2.5.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.87.0)(sass@1.87.0)(terser@5.43.1)(tsx@4.20.4)(yaml@2.8.1)):
+ vite-plugin-dts@4.5.4(@types/node@22.17.2)(rollup@4.46.3)(typescript@5.9.2)(vite@7.1.3(@types/node@22.17.2)(jiti@2.5.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.87.0)(sass@1.87.0)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1)):
dependencies:
'@microsoft/api-extractor': 7.52.8(@types/node@22.17.2)
'@rollup/pluginutils': 5.1.4(rollup@4.46.3)
@@ -32936,28 +32938,28 @@ snapshots:
magic-string: 0.30.17
typescript: 5.9.2
optionalDependencies:
- vite: 7.1.3(@types/node@22.17.2)(jiti@2.5.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.87.0)(sass@1.87.0)(terser@5.43.1)(tsx@4.20.4)(yaml@2.8.1)
+ vite: 7.1.3(@types/node@22.17.2)(jiti@2.5.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.87.0)(sass@1.87.0)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1)
transitivePeerDependencies:
- '@types/node'
- rollup
- supports-color
- vite-plugin-static-copy@3.1.2(vite@7.1.3(@types/node@24.2.1)(jiti@2.5.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.87.0)(sass@1.87.0)(terser@5.43.1)(tsx@4.20.4)(yaml@2.8.1)):
+ vite-plugin-static-copy@3.1.2(vite@7.1.3(@types/node@24.3.0)(jiti@2.5.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.87.0)(sass@1.87.0)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1)):
dependencies:
chokidar: 3.6.0
fs-extra: 11.3.1
p-map: 7.0.3
picocolors: 1.1.1
tinyglobby: 0.2.14
- vite: 7.1.3(@types/node@24.2.1)(jiti@2.5.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.87.0)(sass@1.87.0)(terser@5.43.1)(tsx@4.20.4)(yaml@2.8.1)
+ vite: 7.1.3(@types/node@24.3.0)(jiti@2.5.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.87.0)(sass@1.87.0)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1)
- vite-plugin-svgo@2.0.0(typescript@5.9.2)(vite@7.1.3(@types/node@22.17.2)(jiti@2.5.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.87.0)(sass@1.87.0)(terser@5.43.1)(tsx@4.20.4)(yaml@2.8.1)):
+ vite-plugin-svgo@2.0.0(typescript@5.9.2)(vite@7.1.3(@types/node@22.17.2)(jiti@2.5.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.87.0)(sass@1.87.0)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1)):
dependencies:
svgo: 3.3.2
typescript: 5.9.2
- vite: 7.1.3(@types/node@22.17.2)(jiti@2.5.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.87.0)(sass@1.87.0)(terser@5.43.1)(tsx@4.20.4)(yaml@2.8.1)
+ vite: 7.1.3(@types/node@22.17.2)(jiti@2.5.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.87.0)(sass@1.87.0)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1)
- vite-prerender-plugin@0.5.11(vite@7.1.3(@types/node@24.2.1)(jiti@2.5.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.87.0)(sass@1.87.0)(terser@5.43.1)(tsx@4.20.4)(yaml@2.8.1)):
+ vite-prerender-plugin@0.5.11(vite@7.1.3(@types/node@24.3.0)(jiti@2.5.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.87.0)(sass@1.87.0)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1)):
dependencies:
kolorist: 1.8.0
magic-string: 0.30.17
@@ -32965,9 +32967,9 @@ snapshots:
simple-code-frame: 1.3.0
source-map: 0.7.6
stack-trace: 1.0.0-pre2
- vite: 7.1.3(@types/node@24.2.1)(jiti@2.5.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.87.0)(sass@1.87.0)(terser@5.43.1)(tsx@4.20.4)(yaml@2.8.1)
+ vite: 7.1.3(@types/node@24.3.0)(jiti@2.5.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.87.0)(sass@1.87.0)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1)
- vite@7.0.0(@types/node@22.17.2)(jiti@2.5.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.87.0)(sass@1.87.0)(terser@5.43.1)(tsx@4.20.4)(yaml@2.8.1):
+ vite@7.0.0(@types/node@22.17.2)(jiti@2.5.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.87.0)(sass@1.87.0)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1):
dependencies:
esbuild: 0.25.9
fdir: 6.4.6(picomatch@4.0.2)
@@ -32984,10 +32986,10 @@ snapshots:
sass: 1.87.0
sass-embedded: 1.87.0
terser: 5.43.1
- tsx: 4.20.4
+ tsx: 4.20.5
yaml: 2.8.1
- vite@7.1.3(@types/node@22.17.2)(jiti@2.5.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.87.0)(sass@1.87.0)(terser@5.43.1)(tsx@4.20.4)(yaml@2.8.1):
+ vite@7.1.3(@types/node@22.17.2)(jiti@2.5.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.87.0)(sass@1.87.0)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1):
dependencies:
esbuild: 0.25.9
fdir: 6.5.0(picomatch@4.0.3)
@@ -33004,10 +33006,10 @@ snapshots:
sass: 1.87.0
sass-embedded: 1.87.0
terser: 5.43.1
- tsx: 4.20.4
+ tsx: 4.20.5
yaml: 2.8.1
- vite@7.1.3(@types/node@24.2.1)(jiti@2.5.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.87.0)(sass@1.87.0)(terser@5.43.1)(tsx@4.20.4)(yaml@2.8.1):
+ vite@7.1.3(@types/node@24.3.0)(jiti@2.5.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.87.0)(sass@1.87.0)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1):
dependencies:
esbuild: 0.25.9
fdir: 6.5.0(picomatch@4.0.3)
@@ -33016,7 +33018,7 @@ snapshots:
rollup: 4.46.3
tinyglobby: 0.2.14
optionalDependencies:
- '@types/node': 24.2.1
+ '@types/node': 24.3.0
fsevents: 2.3.3
jiti: 2.5.1
less: 4.1.3
@@ -33024,18 +33026,18 @@ snapshots:
sass: 1.87.0
sass-embedded: 1.87.0
terser: 5.43.1
- tsx: 4.20.4
+ tsx: 4.20.5
yaml: 2.8.1
- vitefu@1.1.1(vite@7.1.3(@types/node@24.2.1)(jiti@2.5.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.87.0)(sass@1.87.0)(terser@5.43.1)(tsx@4.20.4)(yaml@2.8.1)):
+ vitefu@1.1.1(vite@7.1.3(@types/node@24.3.0)(jiti@2.5.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.87.0)(sass@1.87.0)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1)):
optionalDependencies:
- vite: 7.1.3(@types/node@24.2.1)(jiti@2.5.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.87.0)(sass@1.87.0)(terser@5.43.1)(tsx@4.20.4)(yaml@2.8.1)
+ vite: 7.1.3(@types/node@24.3.0)(jiti@2.5.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.87.0)(sass@1.87.0)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1)
- vitest@3.2.4(@types/debug@4.1.12)(@types/node@22.17.2)(@vitest/browser@3.2.4)(@vitest/ui@3.2.4)(happy-dom@18.0.1)(jiti@2.5.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.1)(msw@2.7.5(@types/node@22.17.2)(typescript@5.9.2))(sass-embedded@1.87.0)(sass@1.87.0)(terser@5.43.1)(tsx@4.20.4)(yaml@2.8.1):
+ vitest@3.2.4(@types/debug@4.1.12)(@types/node@22.17.2)(@vitest/browser@3.2.4)(@vitest/ui@3.2.4)(happy-dom@18.0.1)(jiti@2.5.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.1)(msw@2.7.5(@types/node@22.17.2)(typescript@5.9.2))(sass-embedded@1.87.0)(sass@1.87.0)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1):
dependencies:
'@types/chai': 5.2.2
'@vitest/expect': 3.2.4
- '@vitest/mocker': 3.2.4(msw@2.7.5(@types/node@22.17.2)(typescript@5.9.2))(vite@7.0.0(@types/node@22.17.2)(jiti@2.5.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.87.0)(sass@1.87.0)(terser@5.43.1)(tsx@4.20.4)(yaml@2.8.1))
+ '@vitest/mocker': 3.2.4(msw@2.7.5(@types/node@22.17.2)(typescript@5.9.2))(vite@7.0.0(@types/node@22.17.2)(jiti@2.5.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.87.0)(sass@1.87.0)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1))
'@vitest/pretty-format': 3.2.4
'@vitest/runner': 3.2.4
'@vitest/snapshot': 3.2.4
@@ -33053,13 +33055,13 @@ snapshots:
tinyglobby: 0.2.14
tinypool: 1.1.1
tinyrainbow: 2.0.0
- vite: 7.0.0(@types/node@22.17.2)(jiti@2.5.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.87.0)(sass@1.87.0)(terser@5.43.1)(tsx@4.20.4)(yaml@2.8.1)
- vite-node: 3.2.4(@types/node@22.17.2)(jiti@2.5.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.87.0)(sass@1.87.0)(terser@5.43.1)(tsx@4.20.4)(yaml@2.8.1)
+ vite: 7.0.0(@types/node@22.17.2)(jiti@2.5.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.87.0)(sass@1.87.0)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1)
+ vite-node: 3.2.4(@types/node@22.17.2)(jiti@2.5.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.87.0)(sass@1.87.0)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1)
why-is-node-running: 2.3.0
optionalDependencies:
'@types/debug': 4.1.12
'@types/node': 22.17.2
- '@vitest/browser': 3.2.4(bufferutil@4.0.9)(msw@2.7.5(@types/node@22.17.2)(typescript@5.9.2))(playwright@1.55.0)(utf-8-validate@6.0.5)(vite@7.1.3(@types/node@22.17.2)(jiti@2.5.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.87.0)(sass@1.87.0)(terser@5.43.1)(tsx@4.20.4)(yaml@2.8.1))(vitest@3.2.4)(webdriverio@9.19.1(bufferutil@4.0.9)(utf-8-validate@6.0.5))
+ '@vitest/browser': 3.2.4(bufferutil@4.0.9)(msw@2.7.5(@types/node@22.17.2)(typescript@5.9.2))(playwright@1.55.0)(utf-8-validate@6.0.5)(vite@7.1.3(@types/node@22.17.2)(jiti@2.5.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.87.0)(sass@1.87.0)(terser@5.43.1)(tsx@4.20.5)(yaml@2.8.1))(vitest@3.2.4)(webdriverio@9.19.2(bufferutil@4.0.9)(utf-8-validate@6.0.5))
'@vitest/ui': 3.2.4(vitest@3.2.4)
happy-dom: 18.0.1
jsdom: 26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5)
@@ -33151,15 +33153,15 @@ snapshots:
web-streams-polyfill@3.3.3: {}
- webdriver@9.19.1(bufferutil@4.0.9)(utf-8-validate@6.0.5):
+ webdriver@9.19.2(bufferutil@4.0.9)(utf-8-validate@6.0.5):
dependencies:
- '@types/node': 20.19.10
+ '@types/node': 20.19.11
'@types/ws': 8.18.1
- '@wdio/config': 9.19.1
+ '@wdio/config': 9.19.2
'@wdio/logger': 9.18.0
'@wdio/protocols': 9.16.2
- '@wdio/types': 9.19.1
- '@wdio/utils': 9.19.1
+ '@wdio/types': 9.19.2
+ '@wdio/utils': 9.19.2
deepmerge-ts: 7.1.5
https-proxy-agent: 7.0.6
undici: 6.21.3
@@ -33170,16 +33172,16 @@ snapshots:
- supports-color
- utf-8-validate
- webdriverio@9.19.1(bufferutil@4.0.9)(utf-8-validate@6.0.5):
+ webdriverio@9.19.2(bufferutil@4.0.9)(utf-8-validate@6.0.5):
dependencies:
- '@types/node': 20.19.10
+ '@types/node': 20.19.11
'@types/sinonjs__fake-timers': 8.1.5
- '@wdio/config': 9.19.1
+ '@wdio/config': 9.19.2
'@wdio/logger': 9.18.0
'@wdio/protocols': 9.16.2
'@wdio/repl': 9.16.2
- '@wdio/types': 9.19.1
- '@wdio/utils': 9.19.1
+ '@wdio/types': 9.19.2
+ '@wdio/utils': 9.19.2
archiver: 7.0.1
aria-query: 5.3.2
cheerio: 1.1.2
@@ -33196,7 +33198,7 @@ snapshots:
rgb2hex: 0.2.5
serialize-error: 12.0.0
urlpattern-polyfill: 10.1.0
- webdriver: 9.19.1(bufferutil@4.0.9)(utf-8-validate@6.0.5)
+ webdriver: 9.19.2(bufferutil@4.0.9)(utf-8-validate@6.0.5)
transitivePeerDependencies:
- bare-buffer
- bufferutil