diff --git a/.github/actions/build-server/action.yml b/.github/actions/build-server/action.yml
index faa3c0752..b92b3875f 100644
--- a/.github/actions/build-server/action.yml
+++ b/.github/actions/build-server/action.yml
@@ -12,7 +12,7 @@ runs:
- name: Set up node & dependencies
uses: actions/setup-node@v6
with:
- node-version: 22
+ node-version: 24
cache: "pnpm"
- name: Install dependencies
shell: bash
diff --git a/.github/workflows/deploy-docs.yml b/.github/workflows/deploy-docs.yml
index 62e04d48d..503e13909 100644
--- a/.github/workflows/deploy-docs.yml
+++ b/.github/workflows/deploy-docs.yml
@@ -74,7 +74,7 @@ jobs:
- name: Setup Node.js
uses: actions/setup-node@v6
with:
- node-version: '22'
+ node-version: '24'
cache: 'pnpm'
# Install Node.js dependencies for the TypeScript script
diff --git a/.github/workflows/dev.yml b/.github/workflows/dev.yml
index ec4aeda0e..f9174fb42 100644
--- a/.github/workflows/dev.yml
+++ b/.github/workflows/dev.yml
@@ -30,7 +30,7 @@ jobs:
- name: Set up node & dependencies
uses: actions/setup-node@v6
with:
- node-version: 22
+ node-version: 24
cache: "pnpm"
- run: pnpm install --frozen-lockfile
diff --git a/.github/workflows/main-docker.yml b/.github/workflows/main-docker.yml
index 407272a99..f020a04a1 100644
--- a/.github/workflows/main-docker.yml
+++ b/.github/workflows/main-docker.yml
@@ -46,7 +46,7 @@ jobs:
- name: Set up node & dependencies
uses: actions/setup-node@v6
with:
- node-version: 22
+ node-version: 24
cache: "pnpm"
- name: Install npm dependencies
@@ -86,12 +86,12 @@ jobs:
- name: Upload Playwright trace
if: failure()
- uses: actions/upload-artifact@v4
+ uses: actions/upload-artifact@v5
with:
name: Playwright trace (${{ matrix.dockerfile }})
path: test-output/playwright/output
- - uses: actions/upload-artifact@v4
+ - uses: actions/upload-artifact@v5
if: ${{ !cancelled() }}
with:
name: Playwright report (${{ matrix.dockerfile }})
@@ -146,7 +146,7 @@ jobs:
- name: Set up node & dependencies
uses: actions/setup-node@v6
with:
- node-version: 22
+ node-version: 24
cache: 'pnpm'
- name: Install dependencies
@@ -209,7 +209,7 @@ jobs:
touch "/tmp/digests/${digest#sha256:}"
- name: Upload digest
- uses: actions/upload-artifact@v4
+ uses: actions/upload-artifact@v5
with:
name: digests-${{ env.PLATFORM_PAIR }}-${{ matrix.dockerfile }}
path: /tmp/digests/*
@@ -223,7 +223,7 @@ jobs:
- build
steps:
- name: Download digests
- uses: actions/download-artifact@v5
+ uses: actions/download-artifact@v6
with:
path: /tmp/digests
pattern: digests-*
diff --git a/.github/workflows/nightly.yml b/.github/workflows/nightly.yml
index 0d0205f32..ddce68d42 100644
--- a/.github/workflows/nightly.yml
+++ b/.github/workflows/nightly.yml
@@ -52,7 +52,7 @@ jobs:
- name: Set up node & dependencies
uses: actions/setup-node@v6
with:
- node-version: 22
+ node-version: 24
cache: 'pnpm'
- name: Install dependencies
run: pnpm install --frozen-lockfile
@@ -89,7 +89,7 @@ jobs:
name: Nightly Build
- name: Publish artifacts
- uses: actions/upload-artifact@v4
+ uses: actions/upload-artifact@v5
if: ${{ github.event_name == 'pull_request' }}
with:
name: TriliumNotes ${{ matrix.os.name }} ${{ matrix.arch }}
diff --git a/.github/workflows/playwright.yml b/.github/workflows/playwright.yml
index 886b46d61..a33d24283 100644
--- a/.github/workflows/playwright.yml
+++ b/.github/workflows/playwright.yml
@@ -24,7 +24,7 @@ jobs:
- uses: pnpm/action-setup@v4
- uses: actions/setup-node@v6
with:
- node-version: 22
+ node-version: 24
cache: 'pnpm'
- name: Install dependencies
@@ -35,7 +35,7 @@ jobs:
- name: Upload test report
if: failure()
- uses: actions/upload-artifact@v4
+ uses: actions/upload-artifact@v5
with:
name: e2e report
path: apps/server-e2e/test-output
diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
index 3ee30040d..3d48cb80d 100644
--- a/.github/workflows/release.yml
+++ b/.github/workflows/release.yml
@@ -50,7 +50,7 @@ jobs:
- name: Set up node & dependencies
uses: actions/setup-node@v6
with:
- node-version: 22
+ node-version: 24
cache: 'pnpm'
- name: Install dependencies
run: pnpm install --frozen-lockfile
@@ -73,7 +73,7 @@ jobs:
GPG_SIGNING_KEY: ${{ secrets.GPG_SIGN_KEY }}
- name: Upload the artifact
- uses: actions/upload-artifact@v4
+ uses: actions/upload-artifact@v5
with:
name: release-desktop-${{ matrix.os.name }}-${{ matrix.arch }}
path: apps/desktop/upload/*.*
@@ -100,7 +100,7 @@ jobs:
arch: ${{ matrix.arch }}
- name: Upload the artifact
- uses: actions/upload-artifact@v4
+ uses: actions/upload-artifact@v5
with:
name: release-server-linux-${{ matrix.arch }}
path: upload/*.*
@@ -120,7 +120,7 @@ jobs:
docs/Release Notes
- name: Download all artifacts
- uses: actions/download-artifact@v5
+ uses: actions/download-artifact@v6
with:
merge-multiple: true
pattern: release-*
diff --git a/.github/workflows/website.yml b/.github/workflows/website.yml
index fe94c987a..7a87cc192 100644
--- a/.github/workflows/website.yml
+++ b/.github/workflows/website.yml
@@ -30,7 +30,7 @@ jobs:
- name: Set up node & dependencies
uses: actions/setup-node@v6
with:
- node-version: 22
+ node-version: 24
cache: "pnpm"
- name: Install dependencies
diff --git a/_regroup/package.json b/_regroup/package.json
index 4cec178aa..0b2a759a9 100644
--- a/_regroup/package.json
+++ b/_regroup/package.json
@@ -37,9 +37,9 @@
"devDependencies": {
"@playwright/test": "1.56.1",
"@stylistic/eslint-plugin": "5.5.0",
- "@types/express": "5.0.3",
- "@types/node": "22.18.12",
- "@types/yargs": "17.0.33",
+ "@types/express": "5.0.5",
+ "@types/node": "24.9.1",
+ "@types/yargs": "17.0.34",
"@vitest/coverage-v8": "3.2.4",
"eslint": "9.38.0",
"eslint-plugin-simple-import-sort": "12.1.1",
diff --git a/apps/client/package.json b/apps/client/package.json
index c2490ebfd..6bc7f10f2 100644
--- a/apps/client/package.json
+++ b/apps/client/package.json
@@ -1,6 +1,6 @@
{
"name": "@triliumnext/client",
- "version": "0.99.2",
+ "version": "0.99.3",
"description": "JQuery-based client for TriliumNext, used for both web and desktop (via Electron)",
"private": true,
"license": "AGPL-3.0-only",
@@ -54,12 +54,12 @@
"leaflet-gpx": "2.2.0",
"mark.js": "8.11.1",
"marked": "16.4.1",
- "mermaid": "11.12.0",
- "mind-elixir": "5.3.3",
+ "mermaid": "11.12.1",
+ "mind-elixir": "5.3.4",
"normalize.css": "8.0.1",
"panzoom": "9.4.3",
"preact": "10.27.2",
- "react-i18next": "16.1.2",
+ "react-i18next": "16.2.1",
"reveal.js": "5.2.1",
"svg-pan-zoom": "3.6.2",
"tabulator-tables": "6.3.1",
@@ -74,9 +74,9 @@
"@types/leaflet-gpx": "1.3.8",
"@types/mark.js": "8.11.12",
"@types/reveal.js": "5.2.1",
- "@types/tabulator-tables": "6.2.11",
+ "@types/tabulator-tables": "6.3.0",
"copy-webpack-plugin": "13.0.1",
- "happy-dom": "20.0.7",
+ "happy-dom": "20.0.8",
"script-loader": "0.7.2",
"vite-plugin-static-copy": "3.1.4"
}
diff --git a/apps/client/src/components/app_context.ts b/apps/client/src/components/app_context.ts
index ce33d1447..5727032e6 100644
--- a/apps/client/src/components/app_context.ts
+++ b/apps/client/src/components/app_context.ts
@@ -218,12 +218,12 @@ export type CommandMappings = {
/** Works only in the electron context menu. */
replaceMisspelling: CommandData;
- importMarkdownInline: CommandData;
showPasswordNotSet: CommandData;
showProtectedSessionPasswordDialog: CommandData;
showUploadAttachmentsDialog: CommandData & { noteId: string };
showIncludeNoteDialog: CommandData & { textTypeWidget: EditableTextTypeWidget };
showAddLinkDialog: CommandData & { textTypeWidget: EditableTextTypeWidget, text: string };
+ showPasteMarkdownDialog: CommandData & { textTypeWidget: EditableTextTypeWidget };
closeProtectedSessionPasswordDialog: CommandData;
copyImageReferenceToClipboard: CommandData;
copyImageToClipboard: CommandData;
diff --git a/apps/client/src/layouts/layout_commons.tsx b/apps/client/src/layouts/layout_commons.tsx
index 610f31dda..26f8ea232 100644
--- a/apps/client/src/layouts/layout_commons.tsx
+++ b/apps/client/src/layouts/layout_commons.tsx
@@ -29,8 +29,9 @@ import PromotedAttributesWidget from "../widgets/promoted_attributes.js";
import NoteDetailWidget from "../widgets/note_detail.js";
import CallToActionDialog from "../widgets/dialogs/call_to_action.jsx";
import NoteTitleWidget from "../widgets/note_title.jsx";
-import { PopupEditorFormattingToolbar } from "../widgets/ribbon/FormattingToolbar.js";
+import FormattingToolbar from "../widgets/ribbon/FormattingToolbar.js";
import NoteList from "../widgets/collections/NoteList.jsx";
+import StandaloneRibbonAdapter from "../widgets/ribbon/components/StandaloneRibbonAdapter.jsx";
export function applyModals(rootContainer: RootContainer) {
rootContainer
@@ -63,7 +64,7 @@ export function applyModals(rootContainer: RootContainer) {
.cssBlock(".title-row > * { margin: 5px; }")
.child()
.child())
- .child()
+ .child()
.child(new PromotedAttributesWidget())
.child(new NoteDetailWidget())
.child())
diff --git a/apps/client/src/layouts/mobile_layout.tsx b/apps/client/src/layouts/mobile_layout.tsx
index b952c2d0b..2bae994b6 100644
--- a/apps/client/src/layouts/mobile_layout.tsx
+++ b/apps/client/src/layouts/mobile_layout.tsx
@@ -24,6 +24,9 @@ import CloseZenModeButton from "../widgets/close_zen_button.js";
import NoteWrapperWidget from "../widgets/note_wrapper.js";
import MobileDetailMenu from "../widgets/mobile_widgets/mobile_detail_menu.js";
import NoteList from "../widgets/collections/NoteList.jsx";
+import StandaloneRibbonAdapter from "../widgets/ribbon/components/StandaloneRibbonAdapter.jsx";
+import SearchDefinitionTab from "../widgets/ribbon/SearchDefinitionTab.jsx";
+import SearchResult from "../widgets/search_result.jsx";
const MOBILE_CSS = `