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

This commit is contained in:
Elian Doran 2025-10-09 17:46:26 +03:00
commit 9d7c513fb7
No known key found for this signature in database
61 changed files with 1662 additions and 670 deletions

View File

@ -12,7 +12,7 @@ jobs:
steps: steps:
- name: Check if PRs have conflicts - name: Check if PRs have conflicts
uses: eps1lon/actions-label-merge-conflict@v3 uses: eps1lon/actions-label-merge-conflict@v3
if: github.repository == ${{ vars.REPO_MAIN }} if: github.repository == ${{ vars.REPO_MAIN }} && ${{secrets.MERGE_CONFLICT_LABEL_PAT}}
with: with:
dirtyLabel: "merge-conflicts" dirtyLabel: "merge-conflicts"
repoToken: "${{ secrets.MERGE_CONFLICT_LABEL_PAT }}" repoToken: "${{ secrets.MERGE_CONFLICT_LABEL_PAT }}"

View File

@ -67,7 +67,7 @@ jobs:
# Initializes the CodeQL tools for scanning. # Initializes the CodeQL tools for scanning.
- name: Initialize CodeQL - name: Initialize CodeQL
uses: github/codeql-action/init@v3 uses: github/codeql-action/init@v4
with: with:
languages: ${{ matrix.language }} languages: ${{ matrix.language }}
build-mode: ${{ matrix.build-mode }} build-mode: ${{ matrix.build-mode }}
@ -95,6 +95,6 @@ jobs:
exit 1 exit 1
- name: Perform CodeQL Analysis - name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@v3 uses: github/codeql-action/analyze@v4
with: with:
category: "/language:${{matrix.language}}" category: "/language:${{matrix.language}}"

View File

@ -55,7 +55,7 @@ jobs:
- name: Setup Python - name: Setup Python
uses: actions/setup-python@v6 uses: actions/setup-python@v6
with: with:
python-version: '3.13' python-version: '3.14'
cache: 'pip' cache: 'pip'
cache-dependency-path: 'requirements-docs.txt' cache-dependency-path: 'requirements-docs.txt'
@ -118,6 +118,7 @@ jobs:
- name: Deploy - name: Deploy
uses: ./.github/actions/deploy-to-cloudflare-pages uses: ./.github/actions/deploy-to-cloudflare-pages
if: github.repository == ${{ vars.REPO_MAIN }} && ${{secrets.CLOUDFLARE_API_TOKEN}}
with: with:
project_name: "trilium-docs" project_name: "trilium-docs"
comment_body: "📚 Documentation preview is ready" comment_body: "📚 Documentation preview is ready"

View File

@ -77,7 +77,7 @@ jobs:
GPG_SIGNING_KEY: ${{ secrets.GPG_SIGN_KEY }} GPG_SIGNING_KEY: ${{ secrets.GPG_SIGN_KEY }}
- name: Publish release - name: Publish release
uses: softprops/action-gh-release@v2.3.4 uses: softprops/action-gh-release@v2.4.0
if: ${{ github.event_name != 'pull_request' }} if: ${{ github.event_name != 'pull_request' }}
with: with:
make_latest: false make_latest: false
@ -118,7 +118,7 @@ jobs:
arch: ${{ matrix.arch }} arch: ${{ matrix.arch }}
- name: Publish release - name: Publish release
uses: softprops/action-gh-release@v2.3.4 uses: softprops/action-gh-release@v2.4.0
if: ${{ github.event_name != 'pull_request' }} if: ${{ github.event_name != 'pull_request' }}
with: with:
make_latest: false make_latest: false

View File

@ -127,7 +127,7 @@ jobs:
path: upload path: upload
- name: Publish stable release - name: Publish stable release
uses: softprops/action-gh-release@v2.3.4 uses: softprops/action-gh-release@v2.4.0
with: with:
draft: false draft: false
body_path: docs/Release Notes/Release Notes/${{ github.ref_name }}.md body_path: docs/Release Notes/Release Notes/${{ github.ref_name }}.md

View File

@ -44,7 +44,7 @@
"eslint": "9.37.0", "eslint": "9.37.0",
"eslint-plugin-simple-import-sort": "12.1.1", "eslint-plugin-simple-import-sort": "12.1.1",
"esm": "3.2.25", "esm": "3.2.25",
"jsdoc": "4.0.4", "jsdoc": "4.0.5",
"lorem-ipsum": "2.0.8", "lorem-ipsum": "2.0.8",
"rcedit": "4.0.1", "rcedit": "4.0.1",
"rimraf": "6.0.1", "rimraf": "6.0.1",

View File

@ -51,9 +51,9 @@
"leaflet": "1.9.4", "leaflet": "1.9.4",
"leaflet-gpx": "2.2.0", "leaflet-gpx": "2.2.0",
"mark.js": "8.11.1", "mark.js": "8.11.1",
"marked": "16.3.0", "marked": "16.4.0",
"mermaid": "11.12.0", "mermaid": "11.12.0",
"mind-elixir": "5.1.1", "mind-elixir": "5.3.2",
"normalize.css": "8.0.1", "normalize.css": "8.0.1",
"panzoom": "9.4.3", "panzoom": "9.4.3",
"preact": "10.27.2", "preact": "10.27.2",

View File

@ -6,7 +6,8 @@
"sync_version": "اصدار المزامنه:", "sync_version": "اصدار المزامنه:",
"build_date": "تاريخ الانشاء:", "build_date": "تاريخ الانشاء:",
"build_revision": "مراجعة الاصدار:", "build_revision": "مراجعة الاصدار:",
"data_directory": "مجلد البيانات:" "data_directory": "مجلد البيانات:",
"db_version": "اصدار قاعدة البيانات:"
}, },
"toast": { "toast": {
"critical-error": { "critical-error": {
@ -26,6 +27,369 @@
"save": "حفظ" "save": "حفظ"
}, },
"bulk_actions": { "bulk_actions": {
"bulk_actions": "اجراءات جماعية" "bulk_actions": "اجراءات جماعية",
"available_actions": "الاجراءات المتاحة",
"chosen_actions": "الأجراءات المختارة",
"execute_bulk_actions": "تنفيذ الأجراءات الجماعية",
"bulk_actions_executed": "تم تنفيذ الاجراءات الجماعية بنجاح،",
"none_yet": "لايوجد أجراء بعد... اضف اجراء بالنقر على احد الأجراءات المتاحة اعلاه.",
"relations": "العلاقات",
"notes": "الملاحظات",
"other": "أخرى",
"affected_notes": "الملاحظات المتأثرة"
},
"upload_attachments": {
"options": "خيارات",
"upload": "تحميل"
},
"attribute_detail": {
"name": "الاسم",
"value": "قيمة",
"promoted": "تمت ترقيته",
"promoted_alias": "اسم مستعار",
"label_type": "نوع",
"text": "نص",
"date": "تاريخ",
"time": "وقت",
"precision": "دفة",
"digits": "رقم",
"delete": "حذف",
"color_type": "لون",
"multiplicity": "تعددية",
"number": "عدد",
"boolean": "منطقي",
"url": "عنوان الويب",
"inheritable": "قابل للوراثة"
},
"rename_label": {
"to": "الى"
},
"move_note": {
"to": "الى"
},
"add_relation": {
"to": "الى"
},
"rename_relation": {
"to": "الى"
},
"update_relation_target": {
"to": "الى"
},
"attachments_actions": {
"download": "تنزيل"
},
"calendar": {
"week": "أسبوع",
"month": "شهر",
"year": "سنة",
"list": "قائمة",
"today": "اليوم",
"mon": "الأثنين",
"tue": "الثلاثاء",
"wed": "الأربعاء",
"thu": "الخميس",
"fri": "الجمعة",
"sat": "السبت",
"sun": "الأحد",
"january": "يناير",
"march": "مارس",
"april": "ابريل",
"may": "مايو",
"june": "يونيو",
"july": "يوليو",
"august": "أغسطس",
"september": "سبتمبر",
"october": "اكتوبر",
"november": "نوفمبر",
"december": "ديسمبر"
},
"global_menu": {
"menu": "القائمة",
"options": "خيارات",
"advanced": "متقدمة",
"logout": "تسجيل خروج",
"zoom": "تكبير/تصغير"
},
"zpetne_odkazy": {
"relation": "العلاقة"
},
"note_icon": {
"category": "الفئة:",
"search": "بحث:"
},
"basic_properties": {
"language": "اللغة",
"editable": "قابل للتعديل"
},
"book_properties": {
"list": "قائمة",
"expand": "توسيع",
"calendar": "التقويم",
"table": "جدول",
"board": "لوحة",
"grid": "خطوط شبكة",
"collapse": "طي"
},
"file_properties": {
"download": "تنزيل",
"open": "فتح",
"title": "ملف"
},
"image_properties": {
"download": "تنزيل",
"open": "فتح",
"title": "صورة"
},
"note_info_widget": {
"created": "انشاء",
"type": "نوع",
"modified": "معدل",
"calculate": "حساب"
},
"note_paths": {
"search": "بحث",
"archived": "مؤرشف"
},
"script_executor": {
"query": "استعلام",
"script": "برنامج نصي"
},
"search_definition": {
"ancestor": "السلف",
"limit": "الحد الاقصى",
"action": "أجراء",
"search_button": "بحث",
"debug": "تصحيح الاخطاء"
},
"ancestor": {
"label": "السلف",
"depth_label": "العمق"
},
"limit": {
"limit": "الحد الاقصى"
},
"debug": {
"debug": "تصحيح الاخطاء"
},
"order_by": {
"title": "عنوان",
"desc": "تنازلي"
},
"search_string": {
"search_prefix": "بحث:"
},
"sync": {
"title": "مزامنة"
},
"fonts": {
"fonts": "خطوط",
"size": "حجم",
"serif": "خط ومزخرف",
"monospace": "خط بعرض ثابت"
},
"confirm": {
"confirmation": "تأكيد",
"cancel": "الغاء",
"ok": "نعم"
},
"delete_notes": {
"close": "غلق",
"cancel": "الغاء",
"ok": "نعم"
},
"export": {
"close": "غلق",
"export": "تصدير",
"export_note_title": "تصدير الملاحظة",
"export_status": "حالة التصدير"
},
"help": {
"troubleshooting": "أستكشاف الاخطاء واصلاحها",
"other": "أخرى",
"title": "ورقة المراجعة السريعة",
"noteNavigation": "التنقل بين الملاحظات",
"collapseExpand": "طي/توسيع العقدة",
"notSet": "غير محدد",
"collapseSubTree": "طي الشجرة الفرعية",
"tabShortcuts": "أختصارات التبويب",
"creatingNotes": "انشاء الملاحظات",
"selectNote": "تحديد الملاحظة"
},
"import": {
"options": "خيارات",
"import": "استيراد"
},
"include_note": {
"label_note": "ملاحظة"
},
"info": {
"closeButton": "أغلاق",
"okButton": "نعم"
},
"markdown_import": {
"import_button": "أستيراد"
},
"note_type_chooser": {
"templates": "قوالب"
},
"prompt": {
"title": "ترقية",
"ok": "نعم",
"defaultTitle": "ترقية"
},
"protected_session_password": {
"close_label": "أغلاق"
},
"revisions": {
"delete_button": "حذف",
"download_button": "تنزيل",
"restore_button": "أستعادة",
"preview": "معاينة:"
},
"sort_child_notes": {
"title": "عنوان",
"ascending": "تصاعدي",
"descending": "تنازلي",
"folders": "مجلدات",
"sort": "فرز"
},
"recent_changes": {
"undelete_link": "الغاء الحذف"
},
"edited_notes": {
"deleted": "(حذف)"
},
"note_properties": {
"info": "معلومات"
},
"backend_log": {
"refresh": "تحديث"
},
"max_content_width": {
"max_width_unit": "بكسل"
},
"native_title_bar": {
"enabled": "مفعل",
"disabled": "معطل"
},
"theme": {
"theme_label": "السمة",
"layout": "تخطيط",
"layout-vertical-title": "عمودي",
"layout-horizontal-title": "أفقي"
},
"ui-performance": {
"title": "أداء"
},
"ai_llm": {
"progress": "تقدم",
"openai_tab": "OpenAI",
"actions": "أجراءات",
"retry": "أعد المحاولة",
"reprocessing_index": "جار اعادة البناء...",
"never": "ابدٱ",
"agent": {
"processing": "جار المعالجة...",
"thinking": "جار التفكير...",
"loading": "جار التحميل...",
"generating": "جار الانشاء..."
},
"name": "الذكاء الأصطناعي",
"openai": "OpenAI",
"sources": "مصادر"
},
"code_auto_read_only_size": {
"unit": "حروف"
},
"code-editor-options": {
"title": "محرر"
},
"images": {
"images_section_title": "صور",
"max_image_dimensions_unit": "بكسل"
},
"revisions_snapshot_limit": {
"snapshot_number_limit_unit": "لقطات"
},
"search_engine": {
"bing": "Bing",
"duckduckgo": "DuckDuckGo",
"google": "جوجل",
"save_button": "حفظ"
},
"heading_style": {
"plain": "بسيط"
},
"text_auto_read_only_size": {
"unit": "حروف"
},
"i18n": {
"language": "لغة",
"sunday": "الأحد",
"monday": "الأثنين"
},
"backup": {
"path": "مسار"
},
"etapi": {
"wiki": "ويكي",
"created": "تم الأنشاء",
"actions": "أجراءات"
},
"password": {
"heading": "كلمة السر",
"wiki": "ويكي"
},
"shortcuts": {
"shortcuts": "أختصارات",
"description": "الوصف"
},
"sync_2": {
"timeout_unit": "ميلي ثانية",
"note": "ملاحظة",
"save": "حفظ",
"help": "المساعدة"
},
"api_log": {
"close": "أغلاق"
},
"bookmark_switch": {
"bookmark": "علامة مرجعية"
},
"editability_select": {
"auto": "تلقائي",
"read_only": "قراءة-فقط"
},
"tab_row": {
"close": "اغلاق"
},
"toc": {
"options": "خيارات"
},
"tasks": {
"due": {
"yesterday": "أمس"
}
},
"code_theme": {
"title": "المظهر"
},
"table_view": {
"sort-column-ascending": "تصاعدي",
"sort-column-descending": "تنازلي",
"new-column-relation": "العلاقة"
},
"modal": {
"close": "اغلاق"
},
"call_to_action": {
"dismiss": "تجاهل"
},
"units": {
"percentage": "%"
},
"clone_to": {
"prefix_optional": "بادئة (اختياري)"
} }
} }

View File

@ -0,0 +1,8 @@
{
"about": {
"title": "Tentang Trilium Notes",
"homepage": "Halaman utama:",
"app_version": "Versi Aplikasi:",
"db_version": "Versi DB:"
}
}

View File

@ -67,7 +67,8 @@
"switch_to_mobile_version": "モバイル版に切り替え", "switch_to_mobile_version": "モバイル版に切り替え",
"switch_to_desktop_version": "デスクトップ版に切り替え", "switch_to_desktop_version": "デスクトップ版に切り替え",
"configure_launchbar": "ランチャーバーの設定", "configure_launchbar": "ランチャーバーの設定",
"show_shared_notes_subtree": "共有ノートのサブツリーを表示" "show_shared_notes_subtree": "共有ノートのサブツリーを表示",
"update_available": "バージョン {{latestVersion}} が利用可能です。クリックしてダウンロードしてください。"
}, },
"left_pane_toggle": { "left_pane_toggle": {
"show_panel": "パネルを表示", "show_panel": "パネルを表示",
@ -1290,7 +1291,7 @@
"cut": "カット", "cut": "カット",
"copy": "コピー", "copy": "コピー",
"copy-link": "リンクをコピー", "copy-link": "リンクをコピー",
"paste": "ペースト", "paste": "貼り付け",
"paste-as-plain-text": "プレーンテキストで貼り付け", "paste-as-plain-text": "プレーンテキストで貼り付け",
"search_online": "{{searchEngine}} で \"{{term}}\" を検索" "search_online": "{{searchEngine}} で \"{{term}}\" を検索"
}, },

View File

@ -34,15 +34,15 @@
"@triliumnext/commons": "workspace:*", "@triliumnext/commons": "workspace:*",
"@triliumnext/server": "workspace:*", "@triliumnext/server": "workspace:*",
"copy-webpack-plugin": "13.0.1", "copy-webpack-plugin": "13.0.1",
"electron": "38.2.1", "electron": "38.2.2",
"@electron-forge/cli": "7.9.0", "@electron-forge/cli": "7.10.0",
"@electron-forge/maker-deb": "7.9.0", "@electron-forge/maker-deb": "7.10.0",
"@electron-forge/maker-dmg": "7.9.0", "@electron-forge/maker-dmg": "7.10.0",
"@electron-forge/maker-flatpak": "7.9.0", "@electron-forge/maker-flatpak": "7.10.0",
"@electron-forge/maker-rpm": "7.9.0", "@electron-forge/maker-rpm": "7.10.0",
"@electron-forge/maker-squirrel": "7.9.0", "@electron-forge/maker-squirrel": "7.10.0",
"@electron-forge/maker-zip": "7.9.0", "@electron-forge/maker-zip": "7.10.0",
"@electron-forge/plugin-auto-unpack-natives": "7.9.0", "@electron-forge/plugin-auto-unpack-natives": "7.10.0",
"prebuild-install": "7.1.3" "prebuild-install": "7.1.3"
} }
} }

View File

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

View File

@ -81,7 +81,7 @@
"debounce": "2.2.0", "debounce": "2.2.0",
"debug": "4.4.3", "debug": "4.4.3",
"ejs": "3.1.10", "ejs": "3.1.10",
"electron": "38.2.1", "electron": "38.2.2",
"electron-debug": "4.1.0", "electron-debug": "4.1.0",
"electron-window-state": "5.0.3", "electron-window-state": "5.0.3",
"escape-html": "1.0.3", "escape-html": "1.0.3",
@ -105,7 +105,7 @@
"is-svg": "6.1.0", "is-svg": "6.1.0",
"jimp": "1.6.0", "jimp": "1.6.0",
"js-yaml": "4.1.0", "js-yaml": "4.1.0",
"marked": "16.3.0", "marked": "16.4.0",
"mime-types": "3.0.1", "mime-types": "3.0.1",
"multer": "2.0.2", "multer": "2.0.2",
"normalize-strings": "1.1.1", "normalize-strings": "1.1.1",

View File

@ -18,6 +18,134 @@
"copy-notes-to-clipboard": "نسخ الملاحظات المحددة الى الحافظة", "copy-notes-to-clipboard": "نسخ الملاحظات المحددة الى الحافظة",
"paste-notes-from-clipboard": "لصق الملاحظا من الحافظة الى الملاحظة الحالية", "paste-notes-from-clipboard": "لصق الملاحظا من الحافظة الى الملاحظة الحالية",
"cut-notes-to-clipboard": "قص الملاحظات المحددة الى الحافظة", "cut-notes-to-clipboard": "قص الملاحظات المحددة الى الحافظة",
"select-all-notes-in-parent": "تحديد جميع الملاحظات من مستوى الملاحظة الحالي" "select-all-notes-in-parent": "تحديد جميع الملاحظات من مستوى الملاحظة الحالي",
"back-in-note-history": "الانتقال الى الملاحظة السابقة في السجل",
"forward-in-note-history": "الانتقال الى الملاحظة التالية في السجل",
"scroll-to-active-note": "تمرير شجرة الملاحظات الى الملاحظة النشطة",
"search-in-subtree": "البحث عن الملاحظات في الشجرة الفرعية للملاحظة النشطة",
"expand-subtree": "توسيع الشجرة الفرعية للملاحظة الحالية",
"create-note-into-inbox": "انشاء ملاحظة في صندوق الوارد (اذا كان معرفا) او في ملاحظة اليوم",
"move-note-up-in-hierarchy": "نقل الملاحظة للاعلى في التسلسل الهرمي",
"move-note-down-in-hierarchy": "نقل الملاحظة للاسفل في التسلسل الهرمي",
"edit-note-title": "الانتقال من شجرة الملاحظات إلى تفاصيل الملاحظة وتحرير العنوان",
"edit-branch-prefix": "عرض مربع حوار \"تعديل بادئة الفرع\"",
"add-note-above-to-the-selection": "اضافة ملاحظة فوق الملاحظة المحددة",
"add-note-below-to-selection": "اضافة ملاحظة اسفل الملاحظة المحددة",
"duplicate-subtree": "استنساخ الشجرة الفرعية",
"tabs-and-windows": "التبويبات والنوافذ",
"open-new-tab": "فتح تبويب جديد",
"close-active-tab": "غلق التبويب النشط",
"reopen-last-tab": "اعادة فتح اخر تبويب مغلق",
"activate-next-tab": "تنشيط التبويب الموجود على اليمين",
"activate-previous-tab": "تنشيط التبويب الموجود على اليسار",
"open-new-window": "فتح نافذة جديدة فارغة",
"first-tab": "تنشيط التبويب الاول في القائمة",
"second-tab": "تنشيط التبويب الثاني في القائمة",
"third-tab": "تنشيط التبويب الثالث في الثائمة",
"fourth-tab": "تنشيط التبويب الرابع في القائمة",
"fifth-tab": "تنشيط التبويب الخامس في القائمة",
"sixth-tab": "تنشيط التبويب السادس في القائمة",
"seventh-tab": "تنشيط التبويب السابع في القائمة",
"eight-tab": "تنشيط التبويب الثامن في القائمة",
"ninth-tab": "تنشيط التبويب التاسع في القائمة",
"last-tab": "تنشيط التبويب الاخير في القائمة",
"other": "أخرى",
"dialogs": "مربعات الحوار"
},
"setup_sync-from-server": {
"note": "ملاحظة:",
"password": "كلمة السر",
"password-placeholder": "كلمة السر",
"back": "رجوع",
"server-host-placeholder": "https://<hostname>:<port>",
"proxy-server-placeholder": "https://<hostname>:<port>"
},
"weekdays": {
"monday": "الأثنين",
"tuesday": "الثلاثاء",
"wednesday": "الاربعاء",
"thursday": "الخميس",
"friday": "الجمعة",
"saturday": "السبت",
"sunday": "الأحد"
},
"months": {
"january": "يناير",
"february": "فبراير",
"march": "مارس",
"april": "ابريل",
"may": "مايو",
"june": "يونيو",
"july": "يوليو",
"august": "أغسطس",
"september": "سبتمبر",
"october": "أكتوبر",
"november": "نوفمبر",
"december": "ديسمبر"
},
"special_notes": {
"search_prefix": "بحث:"
},
"hidden-subtree": {
"calendar-title": "تقويم",
"bookmarks-title": "العلامات المرجعية",
"settings-title": "أعدادات",
"options-title": "خيارات",
"appearance-title": "المظهر",
"shortcuts-title": "أختصارات",
"images-title": "صور",
"password-title": "كلمة السر",
"backup-title": "نسخة أحتياطية",
"sync-title": "مزامنة",
"other": "أخرى",
"advanced-title": "متقدم",
"inbox-title": "صندوق الوارد",
"spacer-title": "فاصل",
"spellcheck-title": "التدقيق الاملائي",
"multi-factor-authentication-title": "المصادقة متعددة العوامل"
},
"tray": {
"bookmarks": "العلامات المرجعية"
},
"modals": {
"error_title": "خطأ"
},
"share_theme": {
"search_placeholder": "بحث...",
"subpages": "الصفحات الفرعية:",
"expand": "توسيع"
},
"hidden_subtree_templates": {
"description": "الوصف",
"calendar": "التقويم",
"table": "جدول",
"geolocation": "الموقع الجغرافي",
"board": "لوحة",
"status": "الحالة",
"board_status_done": "تمت"
},
"login": {
"title": "تسجيل الدخول",
"password": "كلمة السر",
"button": "تسجيل الدخول"
},
"set_password": {
"password": "كلمة السر"
},
"setup": {
"next": "التالي",
"title": "تثبيت"
},
"setup_sync-from-desktop": {
"step6-here": "هنا"
},
"setup_sync-in-progress": {
"outstanding-items-default": "غير متوفر"
},
"share_page": {
"parent": "الأصل:"
},
"notes": {
"duplicate-note-suffix": "(مكرر)"
} }
} }

View File

@ -0,0 +1,8 @@
{
"keyboard_actions": {
"back-in-note-history": "Navigasi ke catatan sebelumnya di history",
"forward-in-note-history": "Navigasi ke catatan selanjutnya di history",
"open-jump-to-note-dialog": "Buka dialog \"Menuju ke catatan\"",
"open-command-palette": "Buka palet perintah"
}
}

View File

@ -1,4 +1,5 @@
import { BNote } from "../../services/backend_script_entrypoint"; import { BNote } from "../../services/backend_script_entrypoint";
import cls from "../../services/cls";
import { buildNote } from "../../test/becca_easy_mocking"; import { buildNote } from "../../test/becca_easy_mocking";
import { processContent } from "./clipper"; import { processContent } from "./clipper";
@ -6,7 +7,9 @@ let note!: BNote;
describe("processContent", () => { describe("processContent", () => {
beforeAll(() => { beforeAll(() => {
note = buildNote({}); note = buildNote({
content: "Hi there"
});
note.saveAttachment = () => {}; note.saveAttachment = () => {};
vi.mock("../../services/image.js", () => ({ vi.mock("../../services/image.js", () => ({
default: { default: {
@ -21,29 +24,29 @@ describe("processContent", () => {
}); });
it("processes basic note", () => { it("processes basic note", () => {
const processed = processContent([], note, "<p>Hello world.</p>"); const processed = cls.init(() => processContent([], note, "<p>Hello world.</p>"));
expect(processed).toStrictEqual("<p>Hello world.</p>") expect(processed).toStrictEqual("<p>Hello world.</p>")
}); });
it("processes plain text", () => { it("processes plain text", () => {
const processed = processContent([], note, "Hello world."); const processed = cls.init(() => processContent([], note, "Hello world."));
expect(processed).toStrictEqual("<p>Hello world.</p>") expect(processed).toStrictEqual("<p>Hello world.</p>")
}); });
it("replaces images", () => { it("replaces images", () => {
const processed = processContent( const processed = cls.init(() => processContent(
[{"imageId":"OKZxZA3MonZJkwFcEhId","src":"inline.png","dataUrl":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAkAAAAQCAYAAADESFVDAAAAF0lEQVQoU2P8DwQMBADjqKLRIGAgKggAzHs/0SoYCGwAAAAASUVORK5CYII="}], [{"imageId":"OKZxZA3MonZJkwFcEhId","src":"inline.png","dataUrl":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAkAAAAQCAYAAADESFVDAAAAF0lEQVQoU2P8DwQMBADjqKLRIGAgKggAzHs/0SoYCGwAAAAASUVORK5CYII="}],
note, `<img src="OKZxZA3MonZJkwFcEhId">` note, `<img src="OKZxZA3MonZJkwFcEhId">`
); ));
expect(processed).toStrictEqual(`<img src="api/attachments/foo/image/encodedTitle" >`); expect(processed).toStrictEqual(`<img src="api/attachments/foo/image/encodedTitle" >`);
}); });
it("skips over non-data images", () => { it("skips over non-data images", () => {
for (const url of [ "foo", "" ]) { for (const url of [ "foo", "" ]) {
const processed = processContent( const processed = cls.init(() => processContent(
[{"imageId":"OKZxZA3MonZJkwFcEhId","src":"inline.png","dataUrl": url}], [{"imageId":"OKZxZA3MonZJkwFcEhId","src":"inline.png","dataUrl": url}],
note, `<img src="OKZxZA3MonZJkwFcEhId">` note, `<img src="OKZxZA3MonZJkwFcEhId">`
); ));
expect(processed).toStrictEqual(`<img src="OKZxZA3MonZJkwFcEhId" >`); expect(processed).toStrictEqual(`<img src="OKZxZA3MonZJkwFcEhId" >`);
} }
}); });

View File

@ -3,7 +3,7 @@ import { beforeAll, describe, expect, it, vi, beforeEach, afterEach } from "vite
import supertest from "supertest"; import supertest from "supertest";
import config from "../../services/config.js"; import config from "../../services/config.js";
import { refreshAuth } from "../../services/auth.js"; import { refreshAuth } from "../../services/auth.js";
import type { WebSocket } from 'ws'; import { sleepFor } from "@triliumnext/commons";
// Mock the CSRF protection middleware to allow tests to pass // Mock the CSRF protection middleware to allow tests to pass
vi.mock("../csrf_protection.js", () => ({ vi.mock("../csrf_protection.js", () => ({
@ -72,7 +72,11 @@ vi.mock("../../services/options.js", () => ({
getOptionMap: vi.fn(() => new Map()), getOptionMap: vi.fn(() => new Map()),
createOption: vi.fn(), createOption: vi.fn(),
getOption: vi.fn(() => '0'), getOption: vi.fn(() => '0'),
getOptionOrNull: vi.fn(() => null) getOptionOrNull: vi.fn(() => null),
getOptionInt: vi.fn(name => {
if (name === "protectedSessionTimeout") return Number.MAX_SAFE_INTEGER;
return 0;
})
} }
})); }));
@ -499,6 +503,7 @@ describe("LLM API Tests", () => {
const ws = (await import("../../services/ws.js")).default; const ws = (await import("../../services/ws.js")).default;
// Verify thinking message was sent // Verify thinking message was sent
await sleepFor(1_000);
expect(ws.sendMessageToAllClients).toHaveBeenCalledWith({ expect(ws.sendMessageToAllClients).toHaveBeenCalledWith({
type: 'llm-stream', type: 'llm-stream',
chatNoteId: testChatId, chatNoteId: testChatId,

View File

@ -12,7 +12,11 @@ import type { AIService, ChatCompletionOptions, Message } from './ai_interface.j
vi.mock('../options.js', () => ({ vi.mock('../options.js', () => ({
default: { default: {
getOption: vi.fn(), getOption: vi.fn(),
getOptionBool: vi.fn() getOptionBool: vi.fn(),
getOptionInt: vi.fn(name => {
if (name === "protectedSessionTimeout") return Number.MAX_SAFE_INTEGER;
return 0;
})
} }
})); }));

View File

@ -15,7 +15,11 @@ vi.mock('../../log.js', () => ({
vi.mock('../../options.js', () => ({ vi.mock('../../options.js', () => ({
default: { default: {
getOption: vi.fn(), getOption: vi.fn(),
getOptionBool: vi.fn() getOptionBool: vi.fn(),
getOptionInt: vi.fn(name => {
if (name === "protectedSessionTimeout") return Number.MAX_SAFE_INTEGER;
return 0;
})
} }
})); }));

View File

@ -18,7 +18,11 @@ vi.mock('./configuration_manager.js', () => ({
vi.mock('../../options.js', () => ({ vi.mock('../../options.js', () => ({
default: { default: {
getOption: vi.fn(), getOption: vi.fn(),
getOptionBool: vi.fn() getOptionBool: vi.fn(),
getOptionInt: vi.fn(name => {
if (name === "protectedSessionTimeout") return Number.MAX_SAFE_INTEGER;
return 0;
})
} }
})); }));

View File

@ -10,7 +10,11 @@ import { PROVIDER_CONSTANTS } from '../constants/provider_constants.js';
vi.mock('../../options.js', () => ({ vi.mock('../../options.js', () => ({
default: { default: {
getOption: vi.fn(), getOption: vi.fn(),
getOptionBool: vi.fn() getOptionBool: vi.fn(),
getOptionInt: vi.fn(name => {
if (name === "protectedSessionTimeout") return Number.MAX_SAFE_INTEGER;
return 0;
})
} }
})); }));

View File

@ -10,7 +10,11 @@ import options from '../../options.js';
vi.mock('../../options.js', () => ({ vi.mock('../../options.js', () => ({
default: { default: {
getOption: vi.fn(), getOption: vi.fn(),
getOptionBool: vi.fn() getOptionBool: vi.fn(),
getOptionInt: vi.fn(name => {
if (name === "protectedSessionTimeout") return Number.MAX_SAFE_INTEGER;
return 0;
})
} }
})); }));

View File

@ -9,7 +9,11 @@ import { Ollama } from 'ollama';
vi.mock('../../options.js', () => ({ vi.mock('../../options.js', () => ({
default: { default: {
getOption: vi.fn(), getOption: vi.fn(),
getOptionBool: vi.fn() getOptionBool: vi.fn(),
getOptionInt: vi.fn(name => {
if (name === "protectedSessionTimeout") return Number.MAX_SAFE_INTEGER;
return 0;
})
} }
})); }));

View File

@ -2,13 +2,17 @@ import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest';
import { OpenAIService } from './openai_service.js'; import { OpenAIService } from './openai_service.js';
import options from '../../options.js'; import options from '../../options.js';
import * as providers from './providers.js'; import * as providers from './providers.js';
import type { ChatCompletionOptions, Message } from '../ai_interface.js'; import type { Message } from '../ai_interface.js';
// Mock dependencies // Mock dependencies
vi.mock('../../options.js', () => ({ vi.mock('../../options.js', () => ({
default: { default: {
getOption: vi.fn(), getOption: vi.fn(),
getOptionBool: vi.fn() getOptionBool: vi.fn(),
getOptionInt: vi.fn(name => {
if (name === "protectedSessionTimeout") return Number.MAX_SAFE_INTEGER;
return 0;
})
} }
})); }));

View File

@ -1,9 +1,6 @@
"use strict"; "use strict";
import log from "./log.js";
import dataEncryptionService from "./encryption/data_encryption.js"; import dataEncryptionService from "./encryption/data_encryption.js";
import options from "./options.js";
import ws from "./ws.js";
let dataKey: Buffer | null = null; let dataKey: Buffer | null = null;
@ -15,11 +12,11 @@ function getDataKey() {
return dataKey; return dataKey;
} }
function resetDataKey() { export function resetDataKey() {
dataKey = null; dataKey = null;
} }
function isProtectedSessionAvailable() { export function isProtectedSessionAvailable() {
return !!dataKey; return !!dataKey;
} }
@ -57,15 +54,8 @@ function touchProtectedSession() {
} }
} }
function checkProtectedSessionExpiration() { export function getLastProtectedSessionOperationDate() {
const protectedSessionTimeout = options.getOptionInt("protectedSessionTimeout"); return lastProtectedSessionOperationDate;
if (isProtectedSessionAvailable() && lastProtectedSessionOperationDate && Date.now() - lastProtectedSessionOperationDate > protectedSessionTimeout * 1000) {
resetDataKey();
log.info("Expiring protected session");
ws.reloadFrontend("leaving protected session");
}
} }
export default { export default {
@ -75,6 +65,5 @@ export default {
encrypt, encrypt,
decrypt, decrypt,
decryptString, decryptString,
touchProtectedSession, touchProtectedSession
checkProtectedSessionExpiration
}; };

View File

@ -4,9 +4,11 @@ import sqlInit from "./sql_init.js";
import config from "./config.js"; import config from "./config.js";
import log from "./log.js"; import log from "./log.js";
import attributeService from "../services/attributes.js"; import attributeService from "../services/attributes.js";
import protectedSessionService from "../services/protected_session.js";
import hiddenSubtreeService from "./hidden_subtree.js"; import hiddenSubtreeService from "./hidden_subtree.js";
import type BNote from "../becca/entities/bnote.js"; import type BNote from "../becca/entities/bnote.js";
import options from "./options.js";
import { getLastProtectedSessionOperationDate, isProtectedSessionAvailable, resetDataKey } from "./protected_session.js";
import ws from "./ws.js";
function getRunAtHours(note: BNote): number[] { function getRunAtHours(note: BNote): number[] {
try { try {
@ -64,5 +66,15 @@ sqlInit.dbReady.then(() => {
); );
} }
setInterval(() => protectedSessionService.checkProtectedSessionExpiration(), 30000); setInterval(() => checkProtectedSessionExpiration(), 1);
}); });
function checkProtectedSessionExpiration() {
const protectedSessionTimeout = options.getOptionInt("protectedSessionTimeout");
const lastProtectedSessionOperationDate = getLastProtectedSessionOperationDate();
if (isProtectedSessionAvailable() && lastProtectedSessionOperationDate && Date.now() - lastProtectedSessionOperationDate > protectedSessionTimeout * 1000) {
resetDataKey();
log.info("Expiring protected session");
ws.reloadFrontend("leaving protected session");
}
}

View File

@ -211,7 +211,8 @@ described in the "Discuss with us" section above.
* [zadam](https://github.com/zadam) for the original concept and implementation * [zadam](https://github.com/zadam) for the original concept and implementation
of the application. of the application.
* [Larsa](https://github.com/LarsaSara) for designing the application icon. * [Sarah Hussein](https://github.com/Sarah-Hussein) for designing the
application icon.
* [nriver](https://github.com/nriver) for his work on internationalization. * [nriver](https://github.com/nriver) for his work on internationalization.
* [Thomas Frei](https://github.com/thfrei) for his original work on the Canvas. * [Thomas Frei](https://github.com/thfrei) for his original work on the Canvas.
* [antoniotejada](https://github.com/nriver) for the original syntax highlight * [antoniotejada](https://github.com/nriver) for the original syntax highlight

View File

@ -202,7 +202,8 @@ pnpm run --filter desktop electron-forge:make --arch=x64 --platform=win32
* [zadam](https://github.com/zadam) for the original concept and implementation * [zadam](https://github.com/zadam) for the original concept and implementation
of the application. of the application.
* [Larsa](https://github.com/LarsaSara) for designing the application icon. * [Sarah Hussein](https://github.com/Sarah-Hussein) for designing the
application icon.
* [nriver](https://github.com/nriver) for his work on internationalization. * [nriver](https://github.com/nriver) for his work on internationalization.
* [Thomas Frei](https://github.com/thfrei) for his original work on the Canvas. * [Thomas Frei](https://github.com/thfrei) for his original work on the Canvas.
* [antoniotejada](https://github.com/nriver) for the original syntax highlight * [antoniotejada](https://github.com/nriver) for the original syntax highlight

17
docs/README-ar.md vendored
View File

@ -135,7 +135,7 @@ compatible with the latest zadam/trilium version of
versions of TriliumNext/Trilium have their sync versions incremented which versions of TriliumNext/Trilium have their sync versions incremented which
prevents direct migration. prevents direct migration.
## تحدث معنا ## 💬تحدث معنا
Feel free to join our official conversations. We would love to hear what Feel free to join our official conversations. We would love to hear what
features, suggestions, or issues you may have! features, suggestions, or issues you may have!
@ -157,7 +157,7 @@ Download the binary release for your platform from the [latest release
page](https://github.com/TriliumNext/Trilium/releases/latest), unzip the package page](https://github.com/TriliumNext/Trilium/releases/latest), unzip the package
and run the `trilium` executable. and run the `trilium` executable.
### Linux ### لينكس
If your distribution is listed in the table below, use your distribution's If your distribution is listed in the table below, use your distribution's
package. package.
@ -179,7 +179,7 @@ interface (which is almost identical to the desktop app).
Currently only the latest versions of Chrome & Firefox are supported (and Currently only the latest versions of Chrome & Firefox are supported (and
tested). tested).
### Mobile ### هاتف المحمول
To use TriliumNext on a mobile device, you can use a mobile web browser to To use TriliumNext on a mobile device, you can use a mobile web browser to
access the mobile interface of a server installation (see below). access the mobile interface of a server installation (see below).
@ -194,7 +194,7 @@ repository](https://github.com/FliegendeWurst/TriliumDroid). Note: It is best to
disable automatic updates on your server installation (see below) when using disable automatic updates on your server installation (see below) when using
TriliumDroid since the sync version must match between Trilium and TriliumDroid. TriliumDroid since the sync version must match between Trilium and TriliumDroid.
### Server ### الخادم
To install TriliumNext on your own server (including via Docker from To install TriliumNext on your own server (including via Docker from
[Dockerhub](https://hub.docker.com/r/triliumnext/trilium)) follow [the server [Dockerhub](https://hub.docker.com/r/triliumnext/trilium)) follow [the server
@ -203,7 +203,7 @@ installation docs](https://triliumnext.github.io/Docs/Wiki/server-installation).
## 💻 Contribute ## 💻 Contribute
### Translations ### ترجمات
If you are a native speaker, help us translate Trilium by heading over to our If you are a native speaker, help us translate Trilium by heading over to our
[Weblate page](https://hosted.weblate.org/engage/trilium/). [Weblate page](https://hosted.weblate.org/engage/trilium/).
@ -213,7 +213,7 @@ Here's the language coverage we have so far:
[![Translation [![Translation
status](https://hosted.weblate.org/widget/trilium/multi-auto.svg)](https://hosted.weblate.org/engage/trilium/) status](https://hosted.weblate.org/widget/trilium/multi-auto.svg)](https://hosted.weblate.org/engage/trilium/)
### Code ### كود
Download the repository, install dependencies using `pnpm` and then run the Download the repository, install dependencies using `pnpm` and then run the
server (available at http://localhost:8080): server (available at http://localhost:8080):
@ -224,7 +224,7 @@ pnpm install
pnpm run server:start pnpm run server:start
``` ```
### Documentation ### التوثيق
Download the repository, install dependencies using `pnpm` and then run the Download the repository, install dependencies using `pnpm` and then run the
environment required to edit the documentation: environment required to edit the documentation:
@ -259,7 +259,8 @@ described in the "Discuss with us" section above.
* [zadam](https://github.com/zadam) for the original concept and implementation * [zadam](https://github.com/zadam) for the original concept and implementation
of the application. of the application.
* [Larsa](https://github.com/LarsaSara) for designing the application icon. * [Sarah Hussein](https://github.com/Sarah-Hussein) for designing the
application icon.
* [nriver](https://github.com/nriver) for his work on internationalization. * [nriver](https://github.com/nriver) for his work on internationalization.
* [Thomas Frei](https://github.com/thfrei) for his original work on the Canvas. * [Thomas Frei](https://github.com/thfrei) for his original work on the Canvas.
* [antoniotejada](https://github.com/nriver) for the original syntax highlight * [antoniotejada](https://github.com/nriver) for the original syntax highlight

3
docs/README-ca.md vendored
View File

@ -259,7 +259,8 @@ described in the "Discuss with us" section above.
* [zadam](https://github.com/zadam) for the original concept and implementation * [zadam](https://github.com/zadam) for the original concept and implementation
of the application. of the application.
* [Larsa](https://github.com/LarsaSara) for designing the application icon. * [Sarah Hussein](https://github.com/Sarah-Hussein) for designing the
application icon.
* [nriver](https://github.com/nriver) for his work on internationalization. * [nriver](https://github.com/nriver) for his work on internationalization.
* [Thomas Frei](https://github.com/thfrei) for his original work on the Canvas. * [Thomas Frei](https://github.com/thfrei) for his original work on the Canvas.
* [antoniotejada](https://github.com/nriver) for the original syntax highlight * [antoniotejada](https://github.com/nriver) for the original syntax highlight

3
docs/README-cs.md vendored
View File

@ -259,7 +259,8 @@ described in the "Discuss with us" section above.
* [zadam](https://github.com/zadam) for the original concept and implementation * [zadam](https://github.com/zadam) for the original concept and implementation
of the application. of the application.
* [Larsa](https://github.com/LarsaSara) for designing the application icon. * [Sarah Hussein](https://github.com/Sarah-Hussein) for designing the
application icon.
* [nriver](https://github.com/nriver) for his work on internationalization. * [nriver](https://github.com/nriver) for his work on internationalization.
* [Thomas Frei](https://github.com/thfrei) for his original work on the Canvas. * [Thomas Frei](https://github.com/thfrei) for his original work on the Canvas.
* [antoniotejada](https://github.com/nriver) for the original syntax highlight * [antoniotejada](https://github.com/nriver) for the original syntax highlight

3
docs/README-de.md vendored
View File

@ -259,7 +259,8 @@ described in the "Discuss with us" section above.
* [zadam](https://github.com/zadam) for the original concept and implementation * [zadam](https://github.com/zadam) for the original concept and implementation
of the application. of the application.
* [Larsa](https://github.com/LarsaSara) for designing the application icon. * [Sarah Hussein](https://github.com/Sarah-Hussein) for designing the
application icon.
* [nriver](https://github.com/nriver) for his work on internationalization. * [nriver](https://github.com/nriver) for his work on internationalization.
* [Thomas Frei](https://github.com/thfrei) for his original work on the Canvas. * [Thomas Frei](https://github.com/thfrei) for his original work on the Canvas.
* [antoniotejada](https://github.com/nriver) for the original syntax highlight * [antoniotejada](https://github.com/nriver) for the original syntax highlight

3
docs/README-el.md vendored
View File

@ -259,7 +259,8 @@ described in the "Discuss with us" section above.
* [zadam](https://github.com/zadam) for the original concept and implementation * [zadam](https://github.com/zadam) for the original concept and implementation
of the application. of the application.
* [Larsa](https://github.com/LarsaSara) for designing the application icon. * [Sarah Hussein](https://github.com/Sarah-Hussein) for designing the
application icon.
* [nriver](https://github.com/nriver) for his work on internationalization. * [nriver](https://github.com/nriver) for his work on internationalization.
* [Thomas Frei](https://github.com/thfrei) for his original work on the Canvas. * [Thomas Frei](https://github.com/thfrei) for his original work on the Canvas.
* [antoniotejada](https://github.com/nriver) for the original syntax highlight * [antoniotejada](https://github.com/nriver) for the original syntax highlight

3
docs/README-es.md vendored
View File

@ -259,7 +259,8 @@ described in the "Discuss with us" section above.
* [zadam](https://github.com/zadam) for the original concept and implementation * [zadam](https://github.com/zadam) for the original concept and implementation
of the application. of the application.
* [Larsa](https://github.com/LarsaSara) for designing the application icon. * [Sarah Hussein](https://github.com/Sarah-Hussein) for designing the
application icon.
* [nriver](https://github.com/nriver) for his work on internationalization. * [nriver](https://github.com/nriver) for his work on internationalization.
* [Thomas Frei](https://github.com/thfrei) for his original work on the Canvas. * [Thomas Frei](https://github.com/thfrei) for his original work on the Canvas.
* [antoniotejada](https://github.com/nriver) for the original syntax highlight * [antoniotejada](https://github.com/nriver) for the original syntax highlight

3
docs/README-fa.md vendored
View File

@ -259,7 +259,8 @@ described in the "Discuss with us" section above.
* [zadam](https://github.com/zadam) for the original concept and implementation * [zadam](https://github.com/zadam) for the original concept and implementation
of the application. of the application.
* [Larsa](https://github.com/LarsaSara) for designing the application icon. * [Sarah Hussein](https://github.com/Sarah-Hussein) for designing the
application icon.
* [nriver](https://github.com/nriver) for his work on internationalization. * [nriver](https://github.com/nriver) for his work on internationalization.
* [Thomas Frei](https://github.com/thfrei) for his original work on the Canvas. * [Thomas Frei](https://github.com/thfrei) for his original work on the Canvas.
* [antoniotejada](https://github.com/nriver) for the original syntax highlight * [antoniotejada](https://github.com/nriver) for the original syntax highlight

3
docs/README-fi.md vendored
View File

@ -259,7 +259,8 @@ described in the "Discuss with us" section above.
* [zadam](https://github.com/zadam) for the original concept and implementation * [zadam](https://github.com/zadam) for the original concept and implementation
of the application. of the application.
* [Larsa](https://github.com/LarsaSara) for designing the application icon. * [Sarah Hussein](https://github.com/Sarah-Hussein) for designing the
application icon.
* [nriver](https://github.com/nriver) for his work on internationalization. * [nriver](https://github.com/nriver) for his work on internationalization.
* [Thomas Frei](https://github.com/thfrei) for his original work on the Canvas. * [Thomas Frei](https://github.com/thfrei) for his original work on the Canvas.
* [antoniotejada](https://github.com/nriver) for the original syntax highlight * [antoniotejada](https://github.com/nriver) for the original syntax highlight

3
docs/README-fr.md vendored
View File

@ -259,7 +259,8 @@ described in the "Discuss with us" section above.
* [zadam](https://github.com/zadam) for the original concept and implementation * [zadam](https://github.com/zadam) for the original concept and implementation
of the application. of the application.
* [Larsa](https://github.com/LarsaSara) for designing the application icon. * [Sarah Hussein](https://github.com/Sarah-Hussein) for designing the
application icon.
* [nriver](https://github.com/nriver) for his work on internationalization. * [nriver](https://github.com/nriver) for his work on internationalization.
* [Thomas Frei](https://github.com/thfrei) for his original work on the Canvas. * [Thomas Frei](https://github.com/thfrei) for his original work on the Canvas.
* [antoniotejada](https://github.com/nriver) for the original syntax highlight * [antoniotejada](https://github.com/nriver) for the original syntax highlight

3
docs/README-hr.md vendored
View File

@ -259,7 +259,8 @@ described in the "Discuss with us" section above.
* [zadam](https://github.com/zadam) for the original concept and implementation * [zadam](https://github.com/zadam) for the original concept and implementation
of the application. of the application.
* [Larsa](https://github.com/LarsaSara) for designing the application icon. * [Sarah Hussein](https://github.com/Sarah-Hussein) for designing the
application icon.
* [nriver](https://github.com/nriver) for his work on internationalization. * [nriver](https://github.com/nriver) for his work on internationalization.
* [Thomas Frei](https://github.com/thfrei) for his original work on the Canvas. * [Thomas Frei](https://github.com/thfrei) for his original work on the Canvas.
* [antoniotejada](https://github.com/nriver) for the original syntax highlight * [antoniotejada](https://github.com/nriver) for the original syntax highlight

3
docs/README-hu.md vendored
View File

@ -259,7 +259,8 @@ described in the "Discuss with us" section above.
* [zadam](https://github.com/zadam) for the original concept and implementation * [zadam](https://github.com/zadam) for the original concept and implementation
of the application. of the application.
* [Larsa](https://github.com/LarsaSara) for designing the application icon. * [Sarah Hussein](https://github.com/Sarah-Hussein) for designing the
application icon.
* [nriver](https://github.com/nriver) for his work on internationalization. * [nriver](https://github.com/nriver) for his work on internationalization.
* [Thomas Frei](https://github.com/thfrei) for his original work on the Canvas. * [Thomas Frei](https://github.com/thfrei) for his original work on the Canvas.
* [antoniotejada](https://github.com/nriver) for the original syntax highlight * [antoniotejada](https://github.com/nriver) for the original syntax highlight

315
docs/README-id.md vendored Normal file
View File

@ -0,0 +1,315 @@
# Trilium Notes
![GitHub Sponsors](https://img.shields.io/github/sponsors/eliandoran)
![LiberaPay patrons](https://img.shields.io/liberapay/patrons/ElianDoran)\
![Docker Pulls](https://img.shields.io/docker/pulls/triliumnext/trilium)
![Unduhan GitHub (semua aset, semua
rilis)](https://img.shields.io/github/downloads/triliumnext/trilium/total)\
[![RelativeCI](https://badges.relative-ci.com/badges/Di5q7dz9daNDZ9UXi0Bp?branch=develop)](https://app.relative-ci.com/projects/Di5q7dz9daNDZ9UXi0Bp)
[![Status
terjemahan](https://hosted.weblate.org/widget/trilium/svg-badge.svg)](https://hosted.weblate.org/engage/trilium/)
[English](./README.md) | [Chinese (Simplified)](./docs/README-ZH_CN.md) |
[Chinese (Traditional)](./docs/README-ZH_TW.md) | [Russian](./docs/README-ru.md)
| [Japanese](./docs/README-ja.md) | [Italian](./docs/README-it.md) |
[Spanish](./docs/README-es.md)
Trilium Notes adalah aplikasi pencatatan hierarkis lintas platform yang gratis
dan sumber terbuka dengan fokus untuk mengembangkan pengetahuan pribadi yang
luas.
See [screenshots](https://triliumnext.github.io/Docs/Wiki/screenshot-tour) for
quick overview:
<a href="https://triliumnext.github.io/Docs/Wiki/screenshot-tour"><img src="./docs/app.png" alt="Trilium Screenshot" width="1000"></a>
## 📚 Dokumentasi
**Kunjungi dokumentasi lengkap kami di
[docs.triliumnotes.org](https://docs.triliumnotes.org/)**
Dokumentasi kami tersedia dalam berbagai format:
- **Dokumentasi Online**: Telusuri dokumentasi lengkap di
[docs.triliumnotes.org](https://docs.triliumnotes.org/)
- **Bantuan Dalam Aplikasi**: Tekan `F1` di dalam Trilium untuk mengakses
dokumentasi yang sama langsung di aplikasi
- **GitHub**: Navigasi melalui [Panduan
Pengguna](./docs/User%20Guide/User%20Guide/) di repositori ini
### Tautan Cepat
- [Panduan Memulai](https://docs.triliumnotes.org/)
- [Petunjuk
Instalasi](./docs/User%20Guide/User%20Guide/Installation%20&%20Setup/Server%20Installation.md)
- [Pengaturan
Docker](./docs/User%20Guide/User%20Guide/Installation%20&%20Setup/Server%20Installation/1.%20Installing%20the%20server/Using%20Docker.md)
- [Upgrading
TriliumNext](./docs/User%20Guide/User%20Guide/Installation%20%26%20Setup/Upgrading%20TriliumNext.md)
- [Basic Concepts and
Features](./docs/User%20Guide/User%20Guide/Basic%20Concepts%20and%20Features/Notes.md)
- [Patterns of Personal Knowledge
Base](https://triliumnext.github.io/Docs/Wiki/patterns-of-personal-knowledge)
## 🎁 Features
* Notes can be arranged into arbitrarily deep tree. Single note can be placed
into multiple places in the tree (see
[cloning](https://triliumnext.github.io/Docs/Wiki/cloning-notes))
* Rich WYSIWYG note editor including e.g. tables, images and
[math](https://triliumnext.github.io/Docs/Wiki/text-notes) with markdown
[autoformat](https://triliumnext.github.io/Docs/Wiki/text-notes#autoformat)
* Support for editing [notes with source
code](https://triliumnext.github.io/Docs/Wiki/code-notes), including syntax
highlighting
* Fast and easy [navigation between
notes](https://triliumnext.github.io/Docs/Wiki/note-navigation), full text
search and [note
hoisting](https://triliumnext.github.io/Docs/Wiki/note-hoisting)
* Seamless [note
versioning](https://triliumnext.github.io/Docs/Wiki/note-revisions)
* Note [attributes](https://triliumnext.github.io/Docs/Wiki/attributes) can be
used for note organization, querying and advanced
[scripting](https://triliumnext.github.io/Docs/Wiki/scripts)
* UI available in English, German, Spanish, French, Romanian, and Chinese
(simplified and traditional)
* Direct [OpenID and TOTP
integration](./docs/User%20Guide/User%20Guide/Installation%20%26%20Setup/Server%20Installation/Multi-Factor%20Authentication.md)
for more secure login
* [Synchronization](https://triliumnext.github.io/Docs/Wiki/synchronization)
with self-hosted sync server
* there's a [3rd party service for hosting synchronisation
server](https://trilium.cc/paid-hosting)
* [Sharing](https://triliumnext.github.io/Docs/Wiki/sharing) (publishing) notes
to public internet
* Strong [note
encryption](https://triliumnext.github.io/Docs/Wiki/protected-notes) with
per-note granularity
* Sketching diagrams, based on [Excalidraw](https://excalidraw.com/) (note type
"canvas")
* [Relation maps](https://triliumnext.github.io/Docs/Wiki/relation-map) and
[link maps](https://triliumnext.github.io/Docs/Wiki/link-map) for visualizing
notes and their relations
* Mind maps, based on [Mind Elixir](https://docs.mind-elixir.com/)
* [Geo maps](./docs/User%20Guide/User%20Guide/Note%20Types/Geo%20Map.md) with
location pins and GPX tracks
* [Scripting](https://triliumnext.github.io/Docs/Wiki/scripts) - see [Advanced
showcases](https://triliumnext.github.io/Docs/Wiki/advanced-showcases)
* [REST API](https://triliumnext.github.io/Docs/Wiki/etapi) for automation
* Scales well in both usability and performance upwards of 100 000 notes
* Touch optimized [mobile
frontend](https://triliumnext.github.io/Docs/Wiki/mobile-frontend) for
smartphones and tablets
* Built-in [dark theme](https://triliumnext.github.io/Docs/Wiki/themes), support
for user themes
* [Evernote](https://triliumnext.github.io/Docs/Wiki/evernote-import) and
[Markdown import & export](https://triliumnext.github.io/Docs/Wiki/markdown)
* [Web Clipper](https://triliumnext.github.io/Docs/Wiki/web-clipper) for easy
saving of web content
* Customizable UI (sidebar buttons, user-defined widgets, ...)
* [Metrics](./docs/User%20Guide/User%20Guide/Advanced%20Usage/Metrics.md), along
with a [Grafana
Dashboard](./docs/User%20Guide/User%20Guide/Advanced%20Usage/Metrics/grafana-dashboard.json)
✨ Check out the following third-party resources/communities for more TriliumNext
related goodies:
- [awesome-trilium](https://github.com/Nriver/awesome-trilium) for 3rd party
themes, scripts, plugins and more.
- [TriliumRocks!](https://trilium.rocks/) for tutorials, guides, and much more.
## ❓Why TriliumNext?
The original Trilium developer ([Zadam](https://github.com/zadam)) has
graciously given the Trilium repository to the community project which resides
at https://github.com/TriliumNext
### ⬆Migrating from Zadam/Trilium?
There are no special migration steps to migrate from a zadam/Trilium instance to
a TriliumNext/Trilium instance. Simply [install
TriliumNext/Trilium](#-installation) as usual and it will use your existing
database.
Versions up to and including
[v0.90.4](https://github.com/TriliumNext/Trilium/releases/tag/v0.90.4) are
compatible with the latest zadam/trilium version of
[v0.63.7](https://github.com/zadam/trilium/releases/tag/v0.63.7). Any later
versions of TriliumNext/Trilium have their sync versions incremented which
prevents direct migration.
## 💬 Discuss with us
Feel free to join our official conversations. We would love to hear what
features, suggestions, or issues you may have!
- [Matrix](https://matrix.to/#/#triliumnext:matrix.org) (For synchronous
discussions.)
- The `General` Matrix room is also bridged to
[XMPP](xmpp:discuss@trilium.thisgreat.party?join)
- [Github Discussions](https://github.com/TriliumNext/Trilium/discussions) (For
asynchronous discussions.)
- [Github Issues](https://github.com/TriliumNext/Trilium/issues) (For bug
reports and feature requests.)
## 🏗 Installation
### Windows / MacOS
Download the binary release for your platform from the [latest release
page](https://github.com/TriliumNext/Trilium/releases/latest), unzip the package
and run the `trilium` executable.
### Linux
If your distribution is listed in the table below, use your distribution's
package.
[![Packaging
status](https://repology.org/badge/vertical-allrepos/triliumnext.svg)](https://repology.org/project/triliumnext/versions)
You may also download the binary release for your platform from the [latest
release page](https://github.com/TriliumNext/Trilium/releases/latest), unzip the
package and run the `trilium` executable.
TriliumNext is also provided as a Flatpak, but not yet published on FlatHub.
### Browser (any OS)
If you use a server installation (see below), you can directly access the web
interface (which is almost identical to the desktop app).
Currently only the latest versions of Chrome & Firefox are supported (and
tested).
### Mobile
To use TriliumNext on a mobile device, you can use a mobile web browser to
access the mobile interface of a server installation (see below).
See issue https://github.com/TriliumNext/Trilium/issues/4962 for more
information on mobile app support.
If you prefer a native Android app, you can use
[TriliumDroid](https://apt.izzysoft.de/fdroid/index/apk/eu.fliegendewurst.triliumdroid).
Report bugs and missing features at [their
repository](https://github.com/FliegendeWurst/TriliumDroid). Note: It is best to
disable automatic updates on your server installation (see below) when using
TriliumDroid since the sync version must match between Trilium and TriliumDroid.
### Server
To install TriliumNext on your own server (including via Docker from
[Dockerhub](https://hub.docker.com/r/triliumnext/trilium)) follow [the server
installation docs](https://triliumnext.github.io/Docs/Wiki/server-installation).
## 💻 Contribute
### Translations
If you are a native speaker, help us translate Trilium by heading over to our
[Weblate page](https://hosted.weblate.org/engage/trilium/).
Here's the language coverage we have so far:
[![Translation
status](https://hosted.weblate.org/widget/trilium/multi-auto.svg)](https://hosted.weblate.org/engage/trilium/)
### Code
Download the repository, install dependencies using `pnpm` and then run the
server (available at http://localhost:8080):
```shell
git clone https://github.com/TriliumNext/Trilium.git
cd Trilium
pnpm install
pnpm run server:start
```
### Documentation
Download the repository, install dependencies using `pnpm` and then run the
environment required to edit the documentation:
```shell
git clone https://github.com/TriliumNext/Trilium.git
cd Trilium
pnpm install
pnpm edit-docs:edit-docs
```
### Building the Executable
Download the repository, install dependencies using `pnpm` and then build the
desktop app for Windows:
```shell
git clone https://github.com/TriliumNext/Trilium.git
cd Trilium
pnpm install
pnpm run --filter desktop electron-forge:make --arch=x64 --platform=win32
```
For more details, see the [development
docs](https://github.com/TriliumNext/Trilium/tree/main/docs/Developer%20Guide/Developer%20Guide).
### Developer Documentation
Please view the [documentation
guide](https://github.com/TriliumNext/Trilium/blob/main/docs/Developer%20Guide/Developer%20Guide/Environment%20Setup.md)
for details. If you have more questions, feel free to reach out via the links
described in the "Discuss with us" section above.
## 👏 Shoutouts
* [zadam](https://github.com/zadam) for the original concept and implementation
of the application.
* [Sarah Hussein](https://github.com/Sarah-Hussein) for designing the
application icon.
* [nriver](https://github.com/nriver) for his work on internationalization.
* [Thomas Frei](https://github.com/thfrei) for his original work on the Canvas.
* [antoniotejada](https://github.com/nriver) for the original syntax highlight
widget.
* [Dosu](https://dosu.dev/) for providing us with the automated responses to
GitHub issues and discussions.
* [Tabler Icons](https://tabler.io/icons) for the system tray icons.
Trilium would not be possible without the technologies behind it:
* [CKEditor 5](https://github.com/ckeditor/ckeditor5) - the visual editor behind
text notes. We are grateful for being offered a set of the premium features.
* [CodeMirror](https://github.com/codemirror/CodeMirror) - code editor with
support for huge amount of languages.
* [Excalidraw](https://github.com/excalidraw/excalidraw) - the infinite
whiteboard used in Canvas notes.
* [Mind Elixir](https://github.com/SSShooter/mind-elixir-core) - providing the
mind map functionality.
* [Leaflet](https://github.com/Leaflet/Leaflet) - for rendering geographical
maps.
* [Tabulator](https://github.com/olifolkerd/tabulator) - for the interactive
table used in collections.
* [FancyTree](https://github.com/mar10/fancytree) - feature-rich tree library
without real competition.
* [jsPlumb](https://github.com/jsplumb/jsplumb) - visual connectivity library.
Used in [relation
maps](https://triliumnext.github.io/Docs/Wiki/relation-map.html) and [link
maps](https://triliumnext.github.io/Docs/Wiki/note-map.html#link-map)
## 🤝 Support
Trilium is built and maintained with [hundreds of hours of
work](https://github.com/TriliumNext/Trilium/graphs/commit-activity). Your
support keeps it open-source, improves features, and covers costs such as
hosting.
Consider supporting the main developer
([eliandoran](https://github.com/eliandoran)) of the application via:
- [GitHub Sponsors](https://github.com/sponsors/eliandoran)
- [PayPal](https://paypal.me/eliandoran)
- [Buy Me a Coffee](https://buymeacoffee.com/eliandoran)
## 🔑 License
Copyright 2017-2025 zadam, Elian Doran, and other contributors
This program is free software: you can redistribute it and/or modify it under
the terms of the GNU Affero General Public License as published by the Free
Software Foundation, either version 3 of the License, or (at your option) any
later version.

3
docs/README-it.md vendored
View File

@ -260,7 +260,8 @@ described in the "Discuss with us" section above.
* [zadam](https://github.com/zadam) for the original concept and implementation * [zadam](https://github.com/zadam) for the original concept and implementation
of the application. of the application.
* [Larsa](https://github.com/LarsaSara) for designing the application icon. * [Sarah Hussein](https://github.com/Sarah-Hussein) for designing the
application icon.
* [nriver](https://github.com/nriver) for his work on internationalization. * [nriver](https://github.com/nriver) for his work on internationalization.
* [Thomas Frei](https://github.com/thfrei) for his original work on the Canvas. * [Thomas Frei](https://github.com/thfrei) for his original work on the Canvas.
* [antoniotejada](https://github.com/nriver) for the original syntax highlight * [antoniotejada](https://github.com/nriver) for the original syntax highlight

2
docs/README-ja.md vendored
View File

@ -215,7 +215,7 @@ pnpm run --filter desktop electron-forge:make --arch=x64 --platform=win32
## 👏 シャウトアウト ## 👏 シャウトアウト
* [zadam](https://github.com/zadam) アプリケーションのオリジナルのコンセプトと実装に対して感謝します。 * [zadam](https://github.com/zadam) アプリケーションのオリジナルのコンセプトと実装に対して感謝します。
* [Larsa](https://github.com/LarsaSara) アプリケーションアイコンをデザイン。 * [Sarah Hussein](https://github.com/Sarah-Hussein) アプリケーションアイコンをデザイン。
* [nriver](https://github.com/nriver) 国際化への取り組み。 * [nriver](https://github.com/nriver) 国際化への取り組み。
* [Thomas Frei](https://github.com/thfrei) Canvasへのオリジナルな取り組み。 * [Thomas Frei](https://github.com/thfrei) Canvasへのオリジナルな取り組み。
* [antoniotejada](https://github.com/nriver) オリジナルの構文ハイライトウィジェット。 * [antoniotejada](https://github.com/nriver) オリジナルの構文ハイライトウィジェット。

3
docs/README-ko.md vendored
View File

@ -259,7 +259,8 @@ described in the "Discuss with us" section above.
* [zadam](https://github.com/zadam) for the original concept and implementation * [zadam](https://github.com/zadam) for the original concept and implementation
of the application. of the application.
* [Larsa](https://github.com/LarsaSara) for designing the application icon. * [Sarah Hussein](https://github.com/Sarah-Hussein) for designing the
application icon.
* [nriver](https://github.com/nriver) for his work on internationalization. * [nriver](https://github.com/nriver) for his work on internationalization.
* [Thomas Frei](https://github.com/thfrei) for his original work on the Canvas. * [Thomas Frei](https://github.com/thfrei) for his original work on the Canvas.
* [antoniotejada](https://github.com/nriver) for the original syntax highlight * [antoniotejada](https://github.com/nriver) for the original syntax highlight

3
docs/README-md.md vendored
View File

@ -259,7 +259,8 @@ described in the "Discuss with us" section above.
* [zadam](https://github.com/zadam) for the original concept and implementation * [zadam](https://github.com/zadam) for the original concept and implementation
of the application. of the application.
* [Larsa](https://github.com/LarsaSara) for designing the application icon. * [Sarah Hussein](https://github.com/Sarah-Hussein) for designing the
application icon.
* [nriver](https://github.com/nriver) for his work on internationalization. * [nriver](https://github.com/nriver) for his work on internationalization.
* [Thomas Frei](https://github.com/thfrei) for his original work on the Canvas. * [Thomas Frei](https://github.com/thfrei) for his original work on the Canvas.
* [antoniotejada](https://github.com/nriver) for the original syntax highlight * [antoniotejada](https://github.com/nriver) for the original syntax highlight

View File

@ -259,7 +259,8 @@ described in the "Discuss with us" section above.
* [zadam](https://github.com/zadam) for the original concept and implementation * [zadam](https://github.com/zadam) for the original concept and implementation
of the application. of the application.
* [Larsa](https://github.com/LarsaSara) for designing the application icon. * [Sarah Hussein](https://github.com/Sarah-Hussein) for designing the
application icon.
* [nriver](https://github.com/nriver) for his work on internationalization. * [nriver](https://github.com/nriver) for his work on internationalization.
* [Thomas Frei](https://github.com/thfrei) for his original work on the Canvas. * [Thomas Frei](https://github.com/thfrei) for his original work on the Canvas.
* [antoniotejada](https://github.com/nriver) for the original syntax highlight * [antoniotejada](https://github.com/nriver) for the original syntax highlight

3
docs/README-nl.md vendored
View File

@ -259,7 +259,8 @@ described in the "Discuss with us" section above.
* [zadam](https://github.com/zadam) for the original concept and implementation * [zadam](https://github.com/zadam) for the original concept and implementation
of the application. of the application.
* [Larsa](https://github.com/LarsaSara) for designing the application icon. * [Sarah Hussein](https://github.com/Sarah-Hussein) for designing the
application icon.
* [nriver](https://github.com/nriver) for his work on internationalization. * [nriver](https://github.com/nriver) for his work on internationalization.
* [Thomas Frei](https://github.com/thfrei) for his original work on the Canvas. * [Thomas Frei](https://github.com/thfrei) for his original work on the Canvas.
* [antoniotejada](https://github.com/nriver) for the original syntax highlight * [antoniotejada](https://github.com/nriver) for the original syntax highlight

3
docs/README-pl.md vendored
View File

@ -259,7 +259,8 @@ described in the "Discuss with us" section above.
* [zadam](https://github.com/zadam) for the original concept and implementation * [zadam](https://github.com/zadam) for the original concept and implementation
of the application. of the application.
* [Larsa](https://github.com/LarsaSara) for designing the application icon. * [Sarah Hussein](https://github.com/Sarah-Hussein) for designing the
application icon.
* [nriver](https://github.com/nriver) for his work on internationalization. * [nriver](https://github.com/nriver) for his work on internationalization.
* [Thomas Frei](https://github.com/thfrei) for his original work on the Canvas. * [Thomas Frei](https://github.com/thfrei) for his original work on the Canvas.
* [antoniotejada](https://github.com/nriver) for the original syntax highlight * [antoniotejada](https://github.com/nriver) for the original syntax highlight

3
docs/README-pt.md vendored
View File

@ -259,7 +259,8 @@ described in the "Discuss with us" section above.
* [zadam](https://github.com/zadam) for the original concept and implementation * [zadam](https://github.com/zadam) for the original concept and implementation
of the application. of the application.
* [Larsa](https://github.com/LarsaSara) for designing the application icon. * [Sarah Hussein](https://github.com/Sarah-Hussein) for designing the
application icon.
* [nriver](https://github.com/nriver) for his work on internationalization. * [nriver](https://github.com/nriver) for his work on internationalization.
* [Thomas Frei](https://github.com/thfrei) for his original work on the Canvas. * [Thomas Frei](https://github.com/thfrei) for his original work on the Canvas.
* [antoniotejada](https://github.com/nriver) for the original syntax highlight * [antoniotejada](https://github.com/nriver) for the original syntax highlight

View File

@ -259,7 +259,8 @@ described in the "Discuss with us" section above.
* [zadam](https://github.com/zadam) for the original concept and implementation * [zadam](https://github.com/zadam) for the original concept and implementation
of the application. of the application.
* [Larsa](https://github.com/LarsaSara) for designing the application icon. * [Sarah Hussein](https://github.com/Sarah-Hussein) for designing the
application icon.
* [nriver](https://github.com/nriver) for his work on internationalization. * [nriver](https://github.com/nriver) for his work on internationalization.
* [Thomas Frei](https://github.com/thfrei) for his original work on the Canvas. * [Thomas Frei](https://github.com/thfrei) for his original work on the Canvas.
* [antoniotejada](https://github.com/nriver) for the original syntax highlight * [antoniotejada](https://github.com/nriver) for the original syntax highlight

3
docs/README-ro.md vendored
View File

@ -263,7 +263,8 @@ legăturile descrise în secțiunea „Discutați cu noi” de mai sus.
* [zadam](https://github.com/zadam) pentru conceptul și implementarea originală * [zadam](https://github.com/zadam) pentru conceptul și implementarea originală
a aplicației. a aplicației.
* [Larsa](https://github.com/LarsaSara) pentru pictograma aplicației. * [Sarah Hussein](https://github.com/Sarah-Hussein) for designing the
application icon.
* [nriver](https://github.com/nriver) pentru sistemul de internaționalizare. * [nriver](https://github.com/nriver) pentru sistemul de internaționalizare.
* [Thomas Frei](https://github.com/thfrei) pentru munca sa originală pentru * [Thomas Frei](https://github.com/thfrei) pentru munca sa originală pentru
notițele de tip schiță. notițele de tip schiță.

5
docs/README-ru.md vendored
View File

@ -261,7 +261,8 @@ described in the "Discuss with us" section above.
* [zadam](https://github.com/zadam) for the original concept and implementation * [zadam](https://github.com/zadam) for the original concept and implementation
of the application. of the application.
* [Larsa](https://github.com/LarsaSara) for designing the application icon. * [Sarah Hussein](https://github.com/Sarah-Hussein) for designing the
application icon.
* [nriver](https://github.com/nriver) for his work on internationalization. * [nriver](https://github.com/nriver) for his work on internationalization.
* [Thomas Frei](https://github.com/thfrei) for his original work on the Canvas. * [Thomas Frei](https://github.com/thfrei) for his original work on the Canvas.
* [antoniotejada](https://github.com/nriver) for the original syntax highlight * [antoniotejada](https://github.com/nriver) for the original syntax highlight
@ -307,7 +308,7 @@ Consider supporting the main developer
## 🔑 Лицензия ## 🔑 Лицензия
Copyright 2017-2025 zadam, Elian Doran, and other contributors Copyright 2017-2025 zadam, Elian Doran и другие авторы
Эта программа является бесплатным программным обеспечением: вы можете Эта программа является бесплатным программным обеспечением: вы можете
распространять и/или изменять ее в соответствии с условиями GNU Affero General распространять и/или изменять ее в соответствии с условиями GNU Affero General

3
docs/README-sl.md vendored
View File

@ -259,7 +259,8 @@ described in the "Discuss with us" section above.
* [zadam](https://github.com/zadam) for the original concept and implementation * [zadam](https://github.com/zadam) for the original concept and implementation
of the application. of the application.
* [Larsa](https://github.com/LarsaSara) for designing the application icon. * [Sarah Hussein](https://github.com/Sarah-Hussein) for designing the
application icon.
* [nriver](https://github.com/nriver) for his work on internationalization. * [nriver](https://github.com/nriver) for his work on internationalization.
* [Thomas Frei](https://github.com/thfrei) for his original work on the Canvas. * [Thomas Frei](https://github.com/thfrei) for his original work on the Canvas.
* [antoniotejada](https://github.com/nriver) for the original syntax highlight * [antoniotejada](https://github.com/nriver) for the original syntax highlight

3
docs/README-sr.md vendored
View File

@ -259,7 +259,8 @@ described in the "Discuss with us" section above.
* [zadam](https://github.com/zadam) for the original concept and implementation * [zadam](https://github.com/zadam) for the original concept and implementation
of the application. of the application.
* [Larsa](https://github.com/LarsaSara) for designing the application icon. * [Sarah Hussein](https://github.com/Sarah-Hussein) for designing the
application icon.
* [nriver](https://github.com/nriver) for his work on internationalization. * [nriver](https://github.com/nriver) for his work on internationalization.
* [Thomas Frei](https://github.com/thfrei) for his original work on the Canvas. * [Thomas Frei](https://github.com/thfrei) for his original work on the Canvas.
* [antoniotejada](https://github.com/nriver) for the original syntax highlight * [antoniotejada](https://github.com/nriver) for the original syntax highlight

3
docs/README-tr.md vendored
View File

@ -259,7 +259,8 @@ described in the "Discuss with us" section above.
* [zadam](https://github.com/zadam) for the original concept and implementation * [zadam](https://github.com/zadam) for the original concept and implementation
of the application. of the application.
* [Larsa](https://github.com/LarsaSara) for designing the application icon. * [Sarah Hussein](https://github.com/Sarah-Hussein) for designing the
application icon.
* [nriver](https://github.com/nriver) for his work on internationalization. * [nriver](https://github.com/nriver) for his work on internationalization.
* [Thomas Frei](https://github.com/thfrei) for his original work on the Canvas. * [Thomas Frei](https://github.com/thfrei) for his original work on the Canvas.
* [antoniotejada](https://github.com/nriver) for the original syntax highlight * [antoniotejada](https://github.com/nriver) for the original syntax highlight

3
docs/README-uk.md vendored
View File

@ -259,7 +259,8 @@ described in the "Discuss with us" section above.
* [zadam](https://github.com/zadam) for the original concept and implementation * [zadam](https://github.com/zadam) for the original concept and implementation
of the application. of the application.
* [Larsa](https://github.com/LarsaSara) for designing the application icon. * [Sarah Hussein](https://github.com/Sarah-Hussein) for designing the
application icon.
* [nriver](https://github.com/nriver) for his work on internationalization. * [nriver](https://github.com/nriver) for his work on internationalization.
* [Thomas Frei](https://github.com/thfrei) for his original work on the Canvas. * [Thomas Frei](https://github.com/thfrei) for his original work on the Canvas.
* [antoniotejada](https://github.com/nriver) for the original syntax highlight * [antoniotejada](https://github.com/nriver) for the original syntax highlight

3
docs/README-vi.md vendored
View File

@ -259,7 +259,8 @@ described in the "Discuss with us" section above.
* [zadam](https://github.com/zadam) for the original concept and implementation * [zadam](https://github.com/zadam) for the original concept and implementation
of the application. of the application.
* [Larsa](https://github.com/LarsaSara) for designing the application icon. * [Sarah Hussein](https://github.com/Sarah-Hussein) for designing the
application icon.
* [nriver](https://github.com/nriver) for his work on internationalization. * [nriver](https://github.com/nriver) for his work on internationalization.
* [Thomas Frei](https://github.com/thfrei) for his original work on the Canvas. * [Thomas Frei](https://github.com/thfrei) for his original work on the Canvas.
* [antoniotejada](https://github.com/nriver) for the original syntax highlight * [antoniotejada](https://github.com/nriver) for the original syntax highlight

View File

@ -50,12 +50,12 @@
"eslint": "9.37.0", "eslint": "9.37.0",
"eslint-config-prettier": "10.1.8", "eslint-config-prettier": "10.1.8",
"eslint-plugin-playwright": "2.2.2", "eslint-plugin-playwright": "2.2.2",
"eslint-plugin-react-hooks": "6.1.1", "eslint-plugin-react-hooks": "7.0.0",
"happy-dom": "~19.0.0", "happy-dom": "~19.0.0",
"jiti": "2.6.1", "jiti": "2.6.1",
"jsonc-eslint-parser": "2.4.1", "jsonc-eslint-parser": "2.4.1",
"react-refresh": "0.18.0", "react-refresh": "0.18.0",
"rollup-plugin-webpack-stats": "2.1.5", "rollup-plugin-webpack-stats": "2.1.6",
"tslib": "2.8.1", "tslib": "2.8.1",
"tsx": "4.20.6", "tsx": "4.20.6",
"typescript": "~5.9.0", "typescript": "~5.9.0",

View File

@ -15,7 +15,7 @@
"ckeditor5-premium-features": "47.0.0" "ckeditor5-premium-features": "47.0.0"
}, },
"devDependencies": { "devDependencies": {
"@smithy/middleware-retry": "4.4.0", "@smithy/middleware-retry": "4.4.1",
"@types/jquery": "3.5.33" "@types/jquery": "3.5.33"
} }
} }

View File

@ -16,7 +16,7 @@
"@codemirror/lang-xml": "6.1.0", "@codemirror/lang-xml": "6.1.0",
"@codemirror/legacy-modes": "6.5.2", "@codemirror/legacy-modes": "6.5.2",
"@codemirror/search": "6.5.11", "@codemirror/search": "6.5.11",
"@codemirror/view": "6.38.4", "@codemirror/view": "6.38.5",
"@fsegurai/codemirror-theme-abcdef": "6.2.2", "@fsegurai/codemirror-theme-abcdef": "6.2.2",
"@fsegurai/codemirror-theme-abyss": "6.2.2", "@fsegurai/codemirror-theme-abyss": "6.2.2",
"@fsegurai/codemirror-theme-android-studio": "6.2.2", "@fsegurai/codemirror-theme-android-studio": "6.2.2",

View File

@ -54,3 +54,11 @@ export function trimIndentation(strings: TemplateStringsArray, ...values: any[])
} }
return output.join("\n"); return output.join("\n");
} }
export function flushPromises() {
return new Promise(setImmediate);
}
export function sleepFor(duration: number) {
return new Promise(resolve => setTimeout(resolve, duration));
}

664
pnpm-lock.yaml generated

File diff suppressed because it is too large Load Diff