From 7a677cff5f630a08eaf6a353499b445f05721c0b Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Fri, 7 Nov 2025 17:25:05 +0200 Subject: [PATCH 01/17] feat(print): allow custom CSS (closes #7608) --- apps/client/src/print.tsx | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/apps/client/src/print.tsx b/apps/client/src/print.tsx index 3dbdf1de0..88100c4cb 100644 --- a/apps/client/src/print.tsx +++ b/apps/client/src/print.tsx @@ -70,6 +70,9 @@ function SingleNoteRenderer({ note, onReady }: RendererProps) { }); }) ); + + // Check custom CSS. + await loadCustomCss(note); } load().then(() => requestAnimationFrame(onReady)) @@ -102,4 +105,17 @@ function Error404({ noteId }: { noteId: string }) { ) } +async function loadCustomCss(note: FNote) { + const printCssNotes = await note.getRelationTargets("printCss"); + + for (const printCssNote of printCssNotes) { + if (!printCssNote || (printCssNote.type !== "code" && printCssNote.mime !== "text/css")) continue; + + const linkEl = document.createElement("link"); + linkEl.href = `/api/notes/${printCssNote.noteId}/download`; + linkEl.rel = "stylesheet"; + document.head.appendChild(linkEl); + } +} + main(); From cedd1c47890cec7eaed0f2f72715ca3ee6fef265 Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Fri, 7 Nov 2025 17:25:14 +0200 Subject: [PATCH 02/17] docs(user): document custom print CSS --- .../Custom app-wide CSS.html | 92 +++++++++---------- .../Concepts/Printing and exporting to PDF.md | 26 +++++- .../Developer Guide/Documentation.md | 2 +- .../Theme development/Custom app-wide CSS.md | 20 ++-- 4 files changed, 78 insertions(+), 62 deletions(-) diff --git a/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Theme development/Custom app-wide CSS.html b/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Theme development/Custom app-wide CSS.html index f7d9fd394..190a542f0 100644 --- a/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Theme development/Custom app-wide CSS.html +++ b/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Theme development/Custom app-wide CSS.html @@ -1,61 +1,61 @@

It is possible to provide a CSS file to be used regardless of the theme set by the user.

- - - - - - - - - - - - - - - - - - - - - -
- - Start by creating a new note and changing the note type to CSS
- - In the ribbon, press the “Owned Attributes” section and type #appCss.
- - Type the desired CSS.   -
-
Generally it's a good idea to append !important for the styles - that are being changed, in order to prevent other
- +
+ + + + + + + + + + + + + + + + + + + + + +
  
+ + Start by creating a new note and changing the note type to CSS
+ + In the ribbon, press the “Owned Attributes” section and type #appCss.
+ + Type the desired CSS.    +
+
Generally it's a good idea to append !important for the styles + that are being changed, in order to prevent other
+

Seeing the changes

Adding a new app CSS note or modifying an existing one does not immediately apply changes. To see the changes, press Ctrl+Shift+R to refresh the page first.

Sample use cases

Customizing the printing stylesheet

-

When printing a document or exporting as PDF, it is possible to adjust - the style by creating a CSS note that uses the @media selector.

-

For example, to change the font of the document from the one defined by - the theme or the user to a serif one:

@media print {
-	body {
-        --main-font-family: serif !important;
-        --detail-font-family: var(--main-font-family) !important;
-    }
-}
+

Per-workspace styles

When using Workspaces, it can be helpful to create a visual distinction between notes in different workspaces.

To do so:

    -
  1. In the note with #workspace, add an inheritable attribute #cssClass(inheritable) with +
  2. In the note with #workspace, add an inheritable attribute #cssClass(inheritable) with a value that uniquely identifies the workspace (say my-workspace).
  3. -
  4. Anywhere in the note structure, create a CSS note with #appCss.
  5. +
  6. Anywhere in the note structure, create a CSS note with #appCss.

Change the color of the icons in the Note Tree

.fancytree-node.my-workspace.fancytree-custom-icon {
     color: #ff0000;
@@ -71,8 +71,8 @@
   width="641" height="630">
 
 
    -
  1. Insert an image in any note and take the URL of the image.
  2. -
  3. Use the following CSS, adjusting the background-image and width and height to +
  4. Insert an image in any note and take the URL of the image.
  5. +
  6. Use the following CSS, adjusting the background-image and width and height to the desired values.
.note-split.my-workspace .scrolling-container:after {
     position: fixed;
@@ -92,5 +92,5 @@
 

Some parts of the application can't be styled directly via custom CSS because they are rendered in an isolated mode (shadow DOM), more specifically:

\ No newline at end of file diff --git a/docs/Developer Guide/Developer Guide/Concepts/Printing and exporting to PDF.md b/docs/Developer Guide/Developer Guide/Concepts/Printing and exporting to PDF.md index ad057206b..4db40a295 100644 --- a/docs/Developer Guide/Developer Guide/Concepts/Printing and exporting to PDF.md +++ b/docs/Developer Guide/Developer Guide/Concepts/Printing and exporting to PDF.md @@ -15,4 +15,28 @@ Syntax highlighting for code blocks is supported as well: * It works by injecting a Highlight.js stylesheet into the print. * The theme used is hard-coded (the _Visual Studio Light theme_, at the time of writing) in order not to have a dark background in print. -* Syntax highlighting is handled by the content renderer. \ No newline at end of file +* Syntax highlighting is handled by the content renderer. + +## Customizing the print CSS + +As an advanced use case, it's possible to customize the CSS used for printing such as adjusting the fonts, sizes or margins. Note that Custom app-wide CSS will not work for printing. + +To do so: + +* Create a CSS [code note](#root/pOsGYCXsbNQG/KSZ04uQ2D1St/6f9hih2hXXZk). +* On the note being printed, apply the `~printCss` relation to point to the newly created CSS code note. +* To apply the CSS to multiple notes, consider using [inheritable attributes](#root/pOsGYCXsbNQG/tC7s2alapj8V/zEY4DaJG4YT5/bwZpz2ajCEwO) or Templates. + +For example, to change the font of the document from the one defined by the theme or the user to a serif one: + +``` +body { + --main-font-family: serif !important; + --detail-font-family: var(--main-font-family) !important; +} +``` + +To remark: + +* Multiple CSS notes can be add by using multiple `~printCss` relations. +* If migrating from a previous version where Custom app-wide CSS, there's no need for `@media print {`  since the style-sheet is used only for printing. \ No newline at end of file diff --git a/docs/Developer Guide/Developer Guide/Documentation.md b/docs/Developer Guide/Developer Guide/Documentation.md index f5956d744..ec29800a5 100644 --- a/docs/Developer Guide/Developer Guide/Documentation.md +++ b/docs/Developer Guide/Developer Guide/Documentation.md @@ -1,5 +1,5 @@ # Documentation -There are multiple types of documentation for Trilium: +There are multiple types of documentation for Trilium: * The _User Guide_ represents the user-facing documentation. This documentation can be browsed by users directly from within Trilium, by pressing F1. * The _Developer's Guide_ represents a set of Markdown documents that present the internals of Trilium, for developers. diff --git a/docs/User Guide/User Guide/Theme development/Custom app-wide CSS.md b/docs/User Guide/User Guide/Theme development/Custom app-wide CSS.md index 5f63a4579..62e5b4c63 100644 --- a/docs/User Guide/User Guide/Theme development/Custom app-wide CSS.md +++ b/docs/User Guide/User Guide/Theme development/Custom app-wide CSS.md @@ -5,7 +5,7 @@ It is possible to provide a CSS file to be used regardless of the theme set by t | --- | --- | | ![](Custom%20app-wide%20CSS_image.png) | Start by creating a new note and changing the note type to CSS | | ![](2_Custom%20app-wide%20CSS_image.png) | In the ribbon, press the “Owned Attributes” section and type `#appCss`. | -| ![](3_Custom%20app-wide%20CSS_image.png) | Type the desired CSS.  

Generally it's a good idea to append `!important` for the styles that are being changed, in order to prevent other | +| ![](3_Custom%20app-wide%20CSS_image.png) | Type the desired CSS.   

Generally it's a good idea to append `!important` for the styles that are being changed, in order to prevent other | ## Seeing the changes @@ -15,18 +15,10 @@ Adding a new _app CSS note_ or modifying an existing one does not immediately ap ### Customizing the printing stylesheet -When printing a document or exporting as PDF, it is possible to adjust the style by creating a CSS note that uses the `@media` selector. - -For example, to change the font of the document from the one defined by the theme or the user to a serif one: - -``` -@media print { - body { - --main-font-family: serif !important; - --detail-font-family: var(--main-font-family) !important; - } -} -``` +> [!TIP] +> Since v0.99.2, it's no longer possible to use `#appCss` to customize the printing CSS, since the printing is now done in an isolated environment. +> +> However, it's still possible to customize the CSS via `~printCss`; see Printing and exporting to PDF for more information. ### Per-workspace styles @@ -84,4 +76,4 @@ To change the color of the note title and the icon (above the content): Some parts of the application can't be styled directly via custom CSS because they are rendered in an isolated mode (shadow DOM), more specifically: -* The slides in a Presentation View. \ No newline at end of file +* The slides in a Presentation. \ No newline at end of file From e4cd946ea854dcb6ad46a5f8c628ceea15223fab Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Fri, 7 Nov 2025 17:31:50 +0200 Subject: [PATCH 03/17] docs(user): fix wrong page for documentation --- .../Notes/Printing & Exporting as PDF.html | 56 ++++++++++++++----- .../Custom app-wide CSS.html | 2 +- .../Concepts/Printing and exporting to PDF.md | 26 +-------- docs/User Guide/!!!meta.json | 21 +++++++ .../Notes/Printing & Exporting as PDF.md | 27 ++++++++- .../Theme development/Custom app-wide CSS.md | 2 +- 6 files changed, 93 insertions(+), 41 deletions(-) diff --git a/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Basic Concepts and Features/Notes/Printing & Exporting as PDF.html b/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Basic Concepts and Features/Notes/Printing & Exporting as PDF.html index bf04b3afc..dbb508461 100644 --- a/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Basic Concepts and Features/Notes/Printing & Exporting as PDF.html +++ b/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Basic Concepts and Features/Notes/Printing & Exporting as PDF.html @@ -4,7 +4,6 @@
Screenshot of the note contextual menu indicating the “Export as PDF” option.
-

Printing

This feature allows printing of notes. It works on both the desktop client, but also on the web.

@@ -60,9 +59,9 @@ class="admonition note"> orientation, size. However, there are a few Attributes to adjust some of the settings:

    -
  • To print in landscape mode instead of portrait (useful for big diagrams +
  • To print in landscape mode instead of portrait (useful for big diagrams or slides), add #printLandscape.
  • -
  • By default, the resulting PDF will be in Letter format. It is possible +
  • By default, the resulting PDF will be in Letter format. It is possible to adjust it to another page size via the #printPageSize attribute, with one of the following values: A0, A1, A2, A3, A4, A5, A6, Legal, Letter, Tabloid, Ledger.
@@ -76,9 +75,9 @@ class="admonition note"> href="#root/_help_4TIF1oA4VQRO">Options and assigning a key combination for:

    -
  • Print Active Note +
  • Print Active Note
  • -
  • Export Active Note as PDF +
  • Export Active Note as PDF

Constraints & limitations

@@ -86,27 +85,58 @@ class="admonition note"> supported when printing, in which case the Print and Export as PDF options will be disabled.

    -
  • For Code notes: +
  • For Code notes:
      -
    • Line numbers are not printed.
    • -
    • Syntax highlighting is enabled, however a default theme (Visual Studio) +
    • Line numbers are not printed.
    • +
    • Syntax highlighting is enabled, however a default theme (Visual Studio) is enforced.
  • -
  • For Collections: +
  • For Collections:
      -
    • Only Presentation View is +
    • Only Presentation is currently supported.
    • -
    • We plan to add support for all the collection types at some point.
    • +
    • We plan to add support for all the collection types at some point.
  • -
  • Using Custom app-wide CSS for +
  • Using Custom app-wide CSS for printing is not longer supported, due to a more stable but isolated mechanism.
      -
    • We plan to introduce a new mechanism specifically for a print CSS.
    • +
    • We plan to introduce a new mechanism specifically for a print CSS.
+

Customizing the print CSS

+

As an advanced use case, it's possible to customize the CSS used for printing + such as adjusting the fonts, sizes or margins. Note that Custom app-wide CSS will + not work for printing.

+

To do so:

+
    +
  • Create a CSS code note.
  • +
  • On the note being printed, apply the ~printCss relation to + point to the newly created CSS code note.
  • +
  • To apply the CSS to multiple notes, consider using inheritable attributes or  + Templates.
  • +
+

For example, to change the font of the document from the one defined by + the theme or the user to a serif one:

body {
+	--main-font-family: serif !important;
+    --detail-font-family: var(--main-font-family) !important;
+}
+

To remark:

+
    +
  • Multiple CSS notes can be add by using multiple ~printCss relations.
  • +
  • If the note pointing to the printCss doesn't have the right + note type or mime type, it will be ignored.
  • +
  • If migrating from a previous version where Custom app-wide CSS, + there's no need for @media print {  since the style-sheet is + used only for printing.
  • +

Under the hood

Both printing and exporting as PDF use the same mechanism: a note is rendered individually in a separate webpage that is then sent to the browser or diff --git a/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Theme development/Custom app-wide CSS.html b/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Theme development/Custom app-wide CSS.html index 190a542f0..acdfa774d 100644 --- a/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Theme development/Custom app-wide CSS.html +++ b/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Theme development/Custom app-wide CSS.html @@ -43,7 +43,7 @@

Since v0.99.2, it's no longer possible to use #appCss to customize the printing CSS, since the printing is now done in an isolated environment.

However, it's still possible to customize the CSS via ~printCss; - see Printing and exporting to PDF for + see Printing & Exporting as PDF for more information.

Per-workspace styles

diff --git a/docs/Developer Guide/Developer Guide/Concepts/Printing and exporting to PDF.md b/docs/Developer Guide/Developer Guide/Concepts/Printing and exporting to PDF.md index 4db40a295..ad057206b 100644 --- a/docs/Developer Guide/Developer Guide/Concepts/Printing and exporting to PDF.md +++ b/docs/Developer Guide/Developer Guide/Concepts/Printing and exporting to PDF.md @@ -15,28 +15,4 @@ Syntax highlighting for code blocks is supported as well: * It works by injecting a Highlight.js stylesheet into the print. * The theme used is hard-coded (the _Visual Studio Light theme_, at the time of writing) in order not to have a dark background in print. -* Syntax highlighting is handled by the content renderer. - -## Customizing the print CSS - -As an advanced use case, it's possible to customize the CSS used for printing such as adjusting the fonts, sizes or margins. Note that Custom app-wide CSS will not work for printing. - -To do so: - -* Create a CSS [code note](#root/pOsGYCXsbNQG/KSZ04uQ2D1St/6f9hih2hXXZk). -* On the note being printed, apply the `~printCss` relation to point to the newly created CSS code note. -* To apply the CSS to multiple notes, consider using [inheritable attributes](#root/pOsGYCXsbNQG/tC7s2alapj8V/zEY4DaJG4YT5/bwZpz2ajCEwO) or Templates. - -For example, to change the font of the document from the one defined by the theme or the user to a serif one: - -``` -body { - --main-font-family: serif !important; - --detail-font-family: var(--main-font-family) !important; -} -``` - -To remark: - -* Multiple CSS notes can be add by using multiple `~printCss` relations. -* If migrating from a previous version where Custom app-wide CSS, there's no need for `@media print {`  since the style-sheet is used only for printing. \ No newline at end of file +* Syntax highlighting is handled by the content renderer. \ No newline at end of file diff --git a/docs/User Guide/!!!meta.json b/docs/User Guide/!!!meta.json index 057df9c87..27f4866db 100644 --- a/docs/User Guide/!!!meta.json +++ b/docs/User Guide/!!!meta.json @@ -4078,6 +4078,20 @@ "value": "printing-and-pdf-export", "isInheritable": false, "position": 110 + }, + { + "type": "relation", + "name": "internalLink", + "value": "bwZpz2ajCEwO", + "isInheritable": false, + "position": 120 + }, + { + "type": "relation", + "name": "internalLink", + "value": "KC1HB96bqqHX", + "isInheritable": false, + "position": 130 } ], "format": "markdown", @@ -11006,6 +11020,13 @@ "value": "bx bxs-file-css", "isInheritable": false, "position": 50 + }, + { + "type": "relation", + "name": "internalLink", + "value": "NRnIZmSMc5sj", + "isInheritable": false, + "position": 60 } ], "format": "markdown", diff --git a/docs/User Guide/User Guide/Basic Concepts and Features/Notes/Printing & Exporting as PDF.md b/docs/User Guide/User Guide/Basic Concepts and Features/Notes/Printing & Exporting as PDF.md index 27d5326d6..21fbe12e6 100644 --- a/docs/User Guide/User Guide/Basic Concepts and Features/Notes/Printing & Exporting as PDF.md +++ b/docs/User Guide/User Guide/Basic Concepts and Features/Notes/Printing & Exporting as PDF.md @@ -64,11 +64,36 @@ Not all Note Types  * Line numbers are not printed. * Syntax highlighting is enabled, however a default theme (Visual Studio) is enforced. * For Collections: - * Only Presentation View is currently supported. + * Only Presentation is currently supported. * We plan to add support for all the collection types at some point. * Using Custom app-wide CSS for printing is not longer supported, due to a more stable but isolated mechanism. * We plan to introduce a new mechanism specifically for a print CSS. +## Customizing the print CSS + +As an advanced use case, it's possible to customize the CSS used for printing such as adjusting the fonts, sizes or margins. Note that Custom app-wide CSS will not work for printing. + +To do so: + +* Create a CSS [code note](../../Note%20Types/Code.md). +* On the note being printed, apply the `~printCss` relation to point to the newly created CSS code note. +* To apply the CSS to multiple notes, consider using [inheritable attributes](../../Advanced%20Usage/Attributes/Attribute%20Inheritance.md) or Templates. + +For example, to change the font of the document from the one defined by the theme or the user to a serif one: + +``` +body { + --main-font-family: serif !important; + --detail-font-family: var(--main-font-family) !important; +} +``` + +To remark: + +* Multiple CSS notes can be add by using multiple `~printCss` relations. +* If the note pointing to the `printCss` doesn't have the right note type or mime type, it will be ignored. +* If migrating from a previous version where Custom app-wide CSS, there's no need for `@media print {`  since the style-sheet is used only for printing. + ## Under the hood Both printing and exporting as PDF use the same mechanism: a note is rendered individually in a separate webpage that is then sent to the browser or the Electron application either for printing or exporting as PDF. diff --git a/docs/User Guide/User Guide/Theme development/Custom app-wide CSS.md b/docs/User Guide/User Guide/Theme development/Custom app-wide CSS.md index 62e5b4c63..05ae225da 100644 --- a/docs/User Guide/User Guide/Theme development/Custom app-wide CSS.md +++ b/docs/User Guide/User Guide/Theme development/Custom app-wide CSS.md @@ -18,7 +18,7 @@ Adding a new _app CSS note_ or modifying an existing one does not immediately ap > [!TIP] > Since v0.99.2, it's no longer possible to use `#appCss` to customize the printing CSS, since the printing is now done in an isolated environment. > -> However, it's still possible to customize the CSS via `~printCss`; see Printing and exporting to PDF for more information. +> However, it's still possible to customize the CSS via `~printCss`; see Printing & Exporting as PDF for more information. ### Per-workspace styles From 71d7403690e4306f644b84f36ad72b0d983cad2e Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Fri, 7 Nov 2025 17:48:37 +0200 Subject: [PATCH 04/17] feat(print): support CSS for collections too --- apps/client/src/print.tsx | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/apps/client/src/print.tsx b/apps/client/src/print.tsx index 88100c4cb..a29b73830 100644 --- a/apps/client/src/print.tsx +++ b/apps/client/src/print.tsx @@ -92,7 +92,10 @@ function CollectionRenderer({ note, onReady }: RendererProps) { ntxId="print" highlightedTokens={null} media="print" - onReady={onReady} + onReady={async () => { + await loadCustomCss(note); + onReady(); + }} />; } @@ -107,6 +110,7 @@ function Error404({ noteId }: { noteId: string }) { async function loadCustomCss(note: FNote) { const printCssNotes = await note.getRelationTargets("printCss"); + let loadPromises: JQueryPromise[] = []; for (const printCssNote of printCssNotes) { if (!printCssNote || (printCssNote.type !== "code" && printCssNote.mime !== "text/css")) continue; @@ -114,8 +118,15 @@ async function loadCustomCss(note: FNote) { const linkEl = document.createElement("link"); linkEl.href = `/api/notes/${printCssNote.noteId}/download`; linkEl.rel = "stylesheet"; + + const promise = $.Deferred(); + loadPromises.push(promise.promise()); + linkEl.onload = () => promise.resolve(); + document.head.appendChild(linkEl); } + + await Promise.allSettled(loadPromises); } main(); From 44b34d1ea01a73e30261e034308c20843e35b057 Mon Sep 17 00:00:00 2001 From: contributor Date: Fri, 7 Nov 2025 19:55:38 +0200 Subject: [PATCH 05/17] send global shortcut to current window, not the first one --- apps/server/src/services/window.ts | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/apps/server/src/services/window.ts b/apps/server/src/services/window.ts index 459ebdf59..cb047dba4 100644 --- a/apps/server/src/services/window.ts +++ b/apps/server/src/services/window.ts @@ -337,14 +337,15 @@ async function registerGlobalShortcuts() { const result = globalShortcut.register( translatedShortcut, cls.wrap(() => { - if (!mainWindow) { + const targetWindow = getLastFocusedWindow() || mainWindow; + if (!targetWindow) { return; } // window may be hidden / not in focus - mainWindow.focus(); + targetWindow.focus(); - mainWindow.webContents.send("globalShortcut", action.actionName); + targetWindow.webContents.send("globalShortcut", action.actionName); }) ); From a29597a4bf59a3e729aacfac63d9e2efed34d7c8 Mon Sep 17 00:00:00 2001 From: contributor Date: Fri, 7 Nov 2025 20:20:03 +0200 Subject: [PATCH 06/17] add safety check to ensure electron window is not destroyed --- apps/server/src/services/window.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/server/src/services/window.ts b/apps/server/src/services/window.ts index cb047dba4..844c54a28 100644 --- a/apps/server/src/services/window.ts +++ b/apps/server/src/services/window.ts @@ -338,7 +338,7 @@ async function registerGlobalShortcuts() { translatedShortcut, cls.wrap(() => { const targetWindow = getLastFocusedWindow() || mainWindow; - if (!targetWindow) { + if (!targetWindow || targetWindow.isDestroyed()) { return; } From 9a5f2f8d3b177153e6f56e4d5c711f53709848f1 Mon Sep 17 00:00:00 2001 From: contributor Date: Fri, 7 Nov 2025 21:08:50 +0200 Subject: [PATCH 07/17] make global shortcut work with windows in system tray --- apps/server/src/services/window.ts | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/apps/server/src/services/window.ts b/apps/server/src/services/window.ts index 844c54a28..9eed23536 100644 --- a/apps/server/src/services/window.ts +++ b/apps/server/src/services/window.ts @@ -343,6 +343,10 @@ async function registerGlobalShortcuts() { } // window may be hidden / not in focus + if (targetWindow.isMinimized()) { + targetWindow.restore(); + } + targetWindow.show(); targetWindow.focus(); targetWindow.webContents.send("globalShortcut", action.actionName); From f629f564cd9fdaf1a60cd5c36d0df00f6bee9875 Mon Sep 17 00:00:00 2001 From: contributor Date: Fri, 7 Nov 2025 21:15:35 +0200 Subject: [PATCH 08/17] add reusable showAndFocusWindow function --- apps/server/src/services/window.ts | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/apps/server/src/services/window.ts b/apps/server/src/services/window.ts index 9eed23536..3f0813219 100644 --- a/apps/server/src/services/window.ts +++ b/apps/server/src/services/window.ts @@ -343,11 +343,7 @@ async function registerGlobalShortcuts() { } // window may be hidden / not in focus - if (targetWindow.isMinimized()) { - targetWindow.restore(); - } - targetWindow.show(); - targetWindow.focus(); + showAndFocusWindow(targetWindow); targetWindow.webContents.send("globalShortcut", action.actionName); }) @@ -363,6 +359,17 @@ async function registerGlobalShortcuts() { } } +function showAndFocusWindow(window: BrowserWindow) { + if (!window) return; + + if (window.isMinimized()) { + window.restore(); + } + + window.show(); + window.focus(); +} + function getMainWindow() { return mainWindow; } From 7f6be13a181d781ba0ccd1b79c2c3871f8078a1e Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sat, 8 Nov 2025 01:37:08 +0000 Subject: [PATCH 09/17] chore(deps): update dependency vite to v7.2.2 --- apps/server/package.json | 2 +- apps/website/package.json | 2 +- package.json | 2 +- pnpm-lock.yaml | 114 ++++++++++++++++++-------------------- 4 files changed, 56 insertions(+), 64 deletions(-) diff --git a/apps/server/package.json b/apps/server/package.json index fb479813a..761f90f59 100644 --- a/apps/server/package.json +++ b/apps/server/package.json @@ -126,7 +126,7 @@ "tmp": "0.2.5", "turndown": "7.2.2", "unescape": "1.0.1", - "vite": "7.2.1", + "vite": "7.2.2", "ws": "8.18.3", "xml2js": "0.6.2", "yauzl": "3.2.0" diff --git a/apps/website/package.json b/apps/website/package.json index 703f8773a..aff44ddae 100644 --- a/apps/website/package.json +++ b/apps/website/package.json @@ -22,7 +22,7 @@ "eslint-config-preact": "2.0.0", "typescript": "5.9.3", "user-agent-data-types": "0.4.2", - "vite": "7.2.1" + "vite": "7.2.2" }, "eslintConfig": { "extends": "preact" diff --git a/package.json b/package.json index 10fe5fbf0..10407a7f9 100644 --- a/package.json +++ b/package.json @@ -65,7 +65,7 @@ "typescript": "~5.9.0", "typescript-eslint": "8.46.3", "upath": "2.0.1", - "vite": "7.2.1", + "vite": "7.2.2", "vite-plugin-dts": "~4.5.0", "vitest": "3.2.4" }, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index a93b37fe7..65d4cb239 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -102,7 +102,7 @@ importers: version: 0.18.0 rollup-plugin-webpack-stats: specifier: 2.1.7 - version: 2.1.7(rolldown@1.0.0-beta.29)(rollup@4.52.0)(vite@7.2.1(@types/node@24.10.0)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) + version: 2.1.7(rolldown@1.0.0-beta.29)(rollup@4.52.0)(vite@7.2.2(@types/node@24.10.0)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) tslib: specifier: 2.8.1 version: 2.8.1 @@ -119,11 +119,11 @@ importers: specifier: 2.0.1 version: 2.0.1 vite: - specifier: 7.2.1 - version: 7.2.1(@types/node@24.10.0)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) + specifier: 7.2.2 + version: 7.2.2(@types/node@24.10.0)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) vite-plugin-dts: specifier: ~4.5.0 - version: 4.5.4(@types/node@24.10.0)(rollup@4.52.0)(typescript@5.9.3)(vite@7.2.1(@types/node@24.10.0)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) + version: 4.5.4(@types/node@24.10.0)(rollup@4.52.0)(typescript@5.9.3)(vite@7.2.2(@types/node@24.10.0)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) vitest: specifier: 3.2.4 version: 3.2.4(@types/debug@4.1.12)(@types/node@24.10.0)(@vitest/browser@3.2.4)(@vitest/ui@3.2.4)(happy-dom@20.0.10)(jiti@2.6.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@24.10.0)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) @@ -307,7 +307,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.2)(vite@7.2.1(@types/node@24.10.0)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) + version: 2.10.2(@babel/core@7.28.0)(preact@10.27.2)(vite@7.2.2(@types/node@24.10.0)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) '@types/bootstrap': specifier: 5.2.10 version: 5.2.10 @@ -340,7 +340,7 @@ importers: version: 0.7.2 vite-plugin-static-copy: specifier: 3.1.4 - version: 3.1.4(vite@7.2.1(@types/node@24.10.0)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) + version: 3.1.4(vite@7.2.2(@types/node@24.10.0)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) apps/db-compare: dependencies: @@ -503,7 +503,7 @@ importers: version: 2.1.3(electron@38.5.0) '@preact/preset-vite': specifier: 2.10.2 - version: 2.10.2(@babel/core@7.28.0)(preact@10.27.2)(vite@7.2.1(@types/node@24.10.0)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) + version: 2.10.2(@babel/core@7.28.0)(preact@10.27.2)(vite@7.2.2(@types/node@24.10.0)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) '@triliumnext/commons': specifier: workspace:* version: link:../../packages/commons @@ -781,8 +781,8 @@ importers: specifier: 1.0.1 version: 1.0.1 vite: - specifier: 7.2.1 - version: 7.2.1(@types/node@24.10.0)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) + specifier: 7.2.2 + version: 7.2.2(@types/node@24.10.0)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) ws: specifier: 8.18.3 version: 8.18.3(bufferutil@4.0.9)(utf-8-validate@6.0.5) @@ -822,7 +822,7 @@ importers: devDependencies: '@preact/preset-vite': specifier: 2.10.2 - version: 2.10.2(@babel/core@7.28.0)(preact@10.27.2)(vite@7.2.1(@types/node@24.10.0)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) + version: 2.10.2(@babel/core@7.28.0)(preact@10.27.2)(vite@7.2.2(@types/node@24.10.0)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) eslint: specifier: 9.39.1 version: 9.39.1(jiti@2.6.1) @@ -836,8 +836,8 @@ importers: specifier: 0.4.2 version: 0.4.2 vite: - specifier: 7.2.1 - version: 7.2.1(@types/node@24.10.0)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) + specifier: 7.2.2 + version: 7.2.2(@types/node@24.10.0)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) packages/ckeditor5: dependencies: @@ -889,7 +889,7 @@ importers: version: 8.46.3(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3) '@vitest/browser': specifier: 3.2.4 - version: 3.2.4(bufferutil@4.0.9)(msw@2.7.5(@types/node@24.10.0)(typescript@5.9.3))(playwright@1.56.1)(utf-8-validate@6.0.5)(vite@7.2.1(@types/node@24.10.0)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))(vitest@3.2.4)(webdriverio@9.20.0(bufferutil@4.0.9)(utf-8-validate@6.0.5)) + version: 3.2.4(bufferutil@4.0.9)(msw@2.7.5(@types/node@24.10.0)(typescript@5.9.3))(playwright@1.56.1)(utf-8-validate@6.0.5)(vite@7.2.2(@types/node@24.10.0)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))(vitest@3.2.4)(webdriverio@9.20.0(bufferutil@4.0.9)(utf-8-validate@6.0.5)) '@vitest/coverage-istanbul': specifier: 3.2.4 version: 3.2.4(vitest@3.2.4) @@ -922,7 +922,7 @@ importers: version: 5.9.3 vite-plugin-svgo: specifier: ~2.0.0 - version: 2.0.0(typescript@5.9.3)(vite@7.2.1(@types/node@24.10.0)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) + version: 2.0.0(typescript@5.9.3)(vite@7.2.2(@types/node@24.10.0)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) vitest: specifier: 3.2.4 version: 3.2.4(@types/debug@4.1.12)(@types/node@24.10.0)(@vitest/browser@3.2.4)(@vitest/ui@3.2.4)(happy-dom@20.0.10)(jiti@2.6.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@24.10.0)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) @@ -949,7 +949,7 @@ importers: version: 8.46.3(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3) '@vitest/browser': specifier: 3.2.4 - version: 3.2.4(bufferutil@4.0.9)(msw@2.7.5(@types/node@24.10.0)(typescript@5.9.3))(playwright@1.56.1)(utf-8-validate@6.0.5)(vite@7.2.1(@types/node@24.10.0)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))(vitest@3.2.4)(webdriverio@9.20.0(bufferutil@4.0.9)(utf-8-validate@6.0.5)) + version: 3.2.4(bufferutil@4.0.9)(msw@2.7.5(@types/node@24.10.0)(typescript@5.9.3))(playwright@1.56.1)(utf-8-validate@6.0.5)(vite@7.2.2(@types/node@24.10.0)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))(vitest@3.2.4)(webdriverio@9.20.0(bufferutil@4.0.9)(utf-8-validate@6.0.5)) '@vitest/coverage-istanbul': specifier: 3.2.4 version: 3.2.4(vitest@3.2.4) @@ -982,7 +982,7 @@ importers: version: 5.9.3 vite-plugin-svgo: specifier: ~2.0.0 - version: 2.0.0(typescript@5.9.3)(vite@7.2.1(@types/node@24.10.0)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) + version: 2.0.0(typescript@5.9.3)(vite@7.2.2(@types/node@24.10.0)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) vitest: specifier: 3.2.4 version: 3.2.4(@types/debug@4.1.12)(@types/node@24.10.0)(@vitest/browser@3.2.4)(@vitest/ui@3.2.4)(happy-dom@20.0.10)(jiti@2.6.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@24.10.0)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) @@ -1009,7 +1009,7 @@ importers: version: 8.46.3(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3) '@vitest/browser': specifier: 3.2.4 - version: 3.2.4(bufferutil@4.0.9)(msw@2.7.5(@types/node@24.10.0)(typescript@5.9.3))(playwright@1.56.1)(utf-8-validate@6.0.5)(vite@7.2.1(@types/node@24.10.0)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))(vitest@3.2.4)(webdriverio@9.20.0(bufferutil@4.0.9)(utf-8-validate@6.0.5)) + version: 3.2.4(bufferutil@4.0.9)(msw@2.7.5(@types/node@24.10.0)(typescript@5.9.3))(playwright@1.56.1)(utf-8-validate@6.0.5)(vite@7.2.2(@types/node@24.10.0)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))(vitest@3.2.4)(webdriverio@9.20.0(bufferutil@4.0.9)(utf-8-validate@6.0.5)) '@vitest/coverage-istanbul': specifier: 3.2.4 version: 3.2.4(vitest@3.2.4) @@ -1042,7 +1042,7 @@ importers: version: 5.9.3 vite-plugin-svgo: specifier: ~2.0.0 - version: 2.0.0(typescript@5.9.3)(vite@7.2.1(@types/node@24.10.0)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) + version: 2.0.0(typescript@5.9.3)(vite@7.2.2(@types/node@24.10.0)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) vitest: specifier: 3.2.4 version: 3.2.4(@types/debug@4.1.12)(@types/node@24.10.0)(@vitest/browser@3.2.4)(@vitest/ui@3.2.4)(happy-dom@20.0.10)(jiti@2.6.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@24.10.0)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) @@ -1076,7 +1076,7 @@ importers: version: 8.46.3(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3) '@vitest/browser': specifier: 3.2.4 - version: 3.2.4(bufferutil@4.0.9)(msw@2.7.5(@types/node@24.10.0)(typescript@5.9.3))(playwright@1.56.1)(utf-8-validate@6.0.5)(vite@7.2.1(@types/node@24.10.0)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))(vitest@3.2.4)(webdriverio@9.20.0(bufferutil@4.0.9)(utf-8-validate@6.0.5)) + version: 3.2.4(bufferutil@4.0.9)(msw@2.7.5(@types/node@24.10.0)(typescript@5.9.3))(playwright@1.56.1)(utf-8-validate@6.0.5)(vite@7.2.2(@types/node@24.10.0)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))(vitest@3.2.4)(webdriverio@9.20.0(bufferutil@4.0.9)(utf-8-validate@6.0.5)) '@vitest/coverage-istanbul': specifier: 3.2.4 version: 3.2.4(vitest@3.2.4) @@ -1109,7 +1109,7 @@ importers: version: 5.9.3 vite-plugin-svgo: specifier: ~2.0.0 - version: 2.0.0(typescript@5.9.3)(vite@7.2.1(@types/node@24.10.0)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) + version: 2.0.0(typescript@5.9.3)(vite@7.2.2(@types/node@24.10.0)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) vitest: specifier: 3.2.4 version: 3.2.4(@types/debug@4.1.12)(@types/node@24.10.0)(@vitest/browser@3.2.4)(@vitest/ui@3.2.4)(happy-dom@20.0.10)(jiti@2.6.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@24.10.0)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) @@ -1143,7 +1143,7 @@ importers: version: 8.46.3(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3) '@vitest/browser': specifier: 3.2.4 - version: 3.2.4(bufferutil@4.0.9)(msw@2.7.5(@types/node@24.10.0)(typescript@5.9.3))(playwright@1.56.1)(utf-8-validate@6.0.5)(vite@7.2.1(@types/node@24.10.0)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))(vitest@3.2.4)(webdriverio@9.20.0(bufferutil@4.0.9)(utf-8-validate@6.0.5)) + version: 3.2.4(bufferutil@4.0.9)(msw@2.7.5(@types/node@24.10.0)(typescript@5.9.3))(playwright@1.56.1)(utf-8-validate@6.0.5)(vite@7.2.2(@types/node@24.10.0)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))(vitest@3.2.4)(webdriverio@9.20.0(bufferutil@4.0.9)(utf-8-validate@6.0.5)) '@vitest/coverage-istanbul': specifier: 3.2.4 version: 3.2.4(vitest@3.2.4) @@ -1176,7 +1176,7 @@ importers: version: 5.9.3 vite-plugin-svgo: specifier: ~2.0.0 - version: 2.0.0(typescript@5.9.3)(vite@7.2.1(@types/node@24.10.0)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) + version: 2.0.0(typescript@5.9.3)(vite@7.2.2(@types/node@24.10.0)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) vitest: specifier: 3.2.4 version: 3.2.4(@types/debug@4.1.12)(@types/node@24.10.0)(@vitest/browser@3.2.4)(@vitest/ui@3.2.4)(happy-dom@20.0.10)(jiti@2.6.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@24.10.0)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) @@ -14139,8 +14139,8 @@ packages: peerDependencies: vite: 5.x || 6.x || 7.x - vite@7.2.1: - resolution: {integrity: sha512-qTl3VF7BvOupTR85Zc561sPEgxyUSNSvTQ9fit7DEMP7yPgvvIGm5Zfa1dOM+kOwWGNviK9uFM9ra77+OjK7lQ==} + vite@7.2.2: + resolution: {integrity: sha512-BxAKBWmIbrDgrokdGZH1IgkIk/5mMHDreLDmCJ0qpyJaAteP8NvMhkwr/ZCQNqNH97bw/dANTE9PDzqwJghfMQ==} engines: {node: ^20.19.0 || >=22.12.0} hasBin: true peerDependencies: @@ -15772,8 +15772,6 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.2.0 ckeditor5: 47.2.0(patch_hash=8331a09d41443b39ea1c784daaccfeb0da4f9065ed556e7de92e9c77edd9eb41) es-toolkit: 1.39.5 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-editor-multi-root@47.2.0': dependencies: @@ -15796,8 +15794,6 @@ snapshots: '@ckeditor/ckeditor5-table': 47.2.0 '@ckeditor/ckeditor5-utils': 47.2.0 ckeditor5: 47.2.0(patch_hash=8331a09d41443b39ea1c784daaccfeb0da4f9065ed556e7de92e9c77edd9eb41) - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-emoji@47.2.0': dependencies: @@ -15980,8 +15976,6 @@ snapshots: '@ckeditor/ckeditor5-widget': 47.2.0 ckeditor5: 47.2.0(patch_hash=8331a09d41443b39ea1c784daaccfeb0da4f9065ed556e7de92e9c77edd9eb41) es-toolkit: 1.39.5 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-icons@47.2.0': {} @@ -16281,8 +16275,6 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.2.0 '@ckeditor/ckeditor5-utils': 47.2.0 ckeditor5: 47.2.0(patch_hash=8331a09d41443b39ea1c784daaccfeb0da4f9065ed556e7de92e9c77edd9eb41) - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-restricted-editing@47.2.0': dependencies: @@ -18646,18 +18638,18 @@ snapshots: '@popperjs/core@2.11.8': {} - '@preact/preset-vite@2.10.2(@babel/core@7.28.0)(preact@10.27.2)(vite@7.2.1(@types/node@24.10.0)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))': + '@preact/preset-vite@2.10.2(@babel/core@7.28.0)(preact@10.27.2)(vite@7.2.2(@types/node@24.10.0)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(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.2)(vite@7.2.1(@types/node@24.10.0)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) + '@prefresh/vite': 2.4.8(preact@10.27.2)(vite@7.2.2(@types/node@24.10.0)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(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 picocolors: 1.1.1 - vite: 7.2.1(@types/node@24.10.0)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) - vite-prerender-plugin: 0.5.11(vite@7.2.1(@types/node@24.10.0)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) + vite: 7.2.2(@types/node@24.10.0)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) + vite-prerender-plugin: 0.5.11(vite@7.2.2(@types/node@24.10.0)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) transitivePeerDependencies: - preact - supports-color @@ -18670,7 +18662,7 @@ snapshots: '@prefresh/utils@1.2.1': {} - '@prefresh/vite@2.4.8(preact@10.27.2)(vite@7.2.1(@types/node@24.10.0)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))': + '@prefresh/vite@2.4.8(preact@10.27.2)(vite@7.2.2(@types/node@24.10.0)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))': dependencies: '@babel/core': 7.28.0 '@prefresh/babel-plugin': 0.5.2 @@ -18678,7 +18670,7 @@ snapshots: '@prefresh/utils': 1.2.1 '@rollup/pluginutils': 4.2.1 preact: 10.27.2 - vite: 7.2.1(@types/node@24.10.0)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) + vite: 7.2.2(@types/node@24.10.0)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) transitivePeerDependencies: - supports-color @@ -20714,11 +20706,11 @@ snapshots: - bufferutil - utf-8-validate - '@vitest/browser@3.2.4(bufferutil@4.0.9)(msw@2.7.5(@types/node@24.10.0)(typescript@5.9.3))(playwright@1.56.1)(utf-8-validate@6.0.5)(vite@7.2.1(@types/node@24.10.0)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))(vitest@3.2.4)(webdriverio@9.20.0(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@24.10.0)(typescript@5.9.3))(playwright@1.56.1)(utf-8-validate@6.0.5)(vite@7.2.2(@types/node@24.10.0)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))(vitest@3.2.4)(webdriverio@9.20.0(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@24.10.0)(typescript@5.9.3))(vite@7.2.1(@types/node@24.10.0)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) + '@vitest/mocker': 3.2.4(msw@2.7.5(@types/node@24.10.0)(typescript@5.9.3))(vite@7.2.2(@types/node@24.10.0)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) '@vitest/utils': 3.2.4 magic-string: 0.30.18 sirv: 3.0.1 @@ -20767,7 +20759,7 @@ snapshots: tinyrainbow: 2.0.0 vitest: 3.2.4(@types/debug@4.1.12)(@types/node@24.10.0)(@vitest/browser@3.2.4)(@vitest/ui@3.2.4)(happy-dom@20.0.10)(jiti@2.6.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@24.10.0)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) optionalDependencies: - '@vitest/browser': 3.2.4(bufferutil@4.0.9)(msw@2.7.5(@types/node@24.10.0)(typescript@5.9.3))(playwright@1.56.1)(utf-8-validate@6.0.5)(vite@7.2.1(@types/node@24.10.0)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))(vitest@3.2.4)(webdriverio@9.20.0(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@24.10.0)(typescript@5.9.3))(playwright@1.56.1)(utf-8-validate@6.0.5)(vite@7.2.2(@types/node@24.10.0)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))(vitest@3.2.4)(webdriverio@9.20.0(bufferutil@4.0.9)(utf-8-validate@6.0.5)) transitivePeerDependencies: - supports-color @@ -20779,14 +20771,14 @@ snapshots: chai: 5.2.0 tinyrainbow: 2.0.0 - '@vitest/mocker@3.2.4(msw@2.7.5(@types/node@24.10.0)(typescript@5.9.3))(vite@7.2.1(@types/node@24.10.0)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))': + '@vitest/mocker@3.2.4(msw@2.7.5(@types/node@24.10.0)(typescript@5.9.3))(vite@7.2.2(@types/node@24.10.0)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))': dependencies: '@vitest/spy': 3.2.4 estree-walker: 3.0.3 magic-string: 0.30.18 optionalDependencies: msw: 2.7.5(@types/node@24.10.0)(typescript@5.9.3) - vite: 7.2.1(@types/node@24.10.0)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) + vite: 7.2.2(@types/node@24.10.0)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) '@vitest/pretty-format@3.2.4': dependencies: @@ -29228,11 +29220,11 @@ snapshots: '@rolldown/binding-win32-x64-msvc': 1.0.0-beta.29 optional: true - rollup-plugin-stats@1.5.2(rolldown@1.0.0-beta.29)(rollup@4.52.0)(vite@7.2.1(@types/node@24.10.0)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)): + rollup-plugin-stats@1.5.2(rolldown@1.0.0-beta.29)(rollup@4.52.0)(vite@7.2.2(@types/node@24.10.0)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)): optionalDependencies: rolldown: 1.0.0-beta.29 rollup: 4.52.0 - vite: 7.2.1(@types/node@24.10.0)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) + vite: 7.2.2(@types/node@24.10.0)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) rollup-plugin-styles@4.0.0(rollup@4.40.0): dependencies: @@ -29261,13 +29253,13 @@ snapshots: '@rollup/pluginutils': 5.1.4(rollup@4.40.0) rollup: 4.40.0 - rollup-plugin-webpack-stats@2.1.7(rolldown@1.0.0-beta.29)(rollup@4.52.0)(vite@7.2.1(@types/node@24.10.0)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)): + rollup-plugin-webpack-stats@2.1.7(rolldown@1.0.0-beta.29)(rollup@4.52.0)(vite@7.2.2(@types/node@24.10.0)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)): dependencies: - rollup-plugin-stats: 1.5.2(rolldown@1.0.0-beta.29)(rollup@4.52.0)(vite@7.2.1(@types/node@24.10.0)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) + rollup-plugin-stats: 1.5.2(rolldown@1.0.0-beta.29)(rollup@4.52.0)(vite@7.2.2(@types/node@24.10.0)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) optionalDependencies: rolldown: 1.0.0-beta.29 rollup: 4.52.0 - vite: 7.2.1(@types/node@24.10.0)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) + vite: 7.2.2(@types/node@24.10.0)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) rollup@4.40.0: dependencies: @@ -31269,7 +31261,7 @@ snapshots: debug: 4.4.3(supports-color@6.0.0) es-module-lexer: 1.7.0 pathe: 2.0.3 - vite: 7.2.1(@types/node@24.10.0)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) + vite: 7.2.2(@types/node@24.10.0)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) transitivePeerDependencies: - '@types/node' - jiti @@ -31284,7 +31276,7 @@ snapshots: - tsx - yaml - vite-plugin-dts@4.5.4(@types/node@24.10.0)(rollup@4.52.0)(typescript@5.9.3)(vite@7.2.1(@types/node@24.10.0)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)): + vite-plugin-dts@4.5.4(@types/node@24.10.0)(rollup@4.52.0)(typescript@5.9.3)(vite@7.2.2(@types/node@24.10.0)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)): dependencies: '@microsoft/api-extractor': 7.52.8(@types/node@24.10.0) '@rollup/pluginutils': 5.1.4(rollup@4.52.0) @@ -31297,27 +31289,27 @@ snapshots: magic-string: 0.30.17 typescript: 5.9.3 optionalDependencies: - vite: 7.2.1(@types/node@24.10.0)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) + vite: 7.2.2(@types/node@24.10.0)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) transitivePeerDependencies: - '@types/node' - rollup - supports-color - vite-plugin-static-copy@3.1.4(vite@7.2.1(@types/node@24.10.0)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)): + vite-plugin-static-copy@3.1.4(vite@7.2.2(@types/node@24.10.0)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)): dependencies: chokidar: 3.6.0 p-map: 7.0.3 picocolors: 1.1.1 tinyglobby: 0.2.15 - vite: 7.2.1(@types/node@24.10.0)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) + vite: 7.2.2(@types/node@24.10.0)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) - vite-plugin-svgo@2.0.0(typescript@5.9.3)(vite@7.2.1(@types/node@24.10.0)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)): + vite-plugin-svgo@2.0.0(typescript@5.9.3)(vite@7.2.2(@types/node@24.10.0)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)): dependencies: svgo: 3.3.2 typescript: 5.9.3 - vite: 7.2.1(@types/node@24.10.0)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) + vite: 7.2.2(@types/node@24.10.0)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) - vite-prerender-plugin@0.5.11(vite@7.2.1(@types/node@24.10.0)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)): + vite-prerender-plugin@0.5.11(vite@7.2.2(@types/node@24.10.0)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)): dependencies: kolorist: 1.8.0 magic-string: 0.30.18 @@ -31325,9 +31317,9 @@ snapshots: simple-code-frame: 1.3.0 source-map: 0.7.6 stack-trace: 1.0.0-pre2 - vite: 7.2.1(@types/node@24.10.0)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) + vite: 7.2.2(@types/node@24.10.0)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) - vite@7.2.1(@types/node@24.10.0)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1): + vite@7.2.2(@types/node@24.10.0)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1): dependencies: esbuild: 0.25.12 fdir: 6.5.0(picomatch@4.0.3) @@ -31351,7 +31343,7 @@ snapshots: dependencies: '@types/chai': 5.2.2 '@vitest/expect': 3.2.4 - '@vitest/mocker': 3.2.4(msw@2.7.5(@types/node@24.10.0)(typescript@5.9.3))(vite@7.2.1(@types/node@24.10.0)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) + '@vitest/mocker': 3.2.4(msw@2.7.5(@types/node@24.10.0)(typescript@5.9.3))(vite@7.2.2(@types/node@24.10.0)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) '@vitest/pretty-format': 3.2.4 '@vitest/runner': 3.2.4 '@vitest/snapshot': 3.2.4 @@ -31369,13 +31361,13 @@ snapshots: tinyglobby: 0.2.15 tinypool: 1.1.1 tinyrainbow: 2.0.0 - vite: 7.2.1(@types/node@24.10.0)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) + vite: 7.2.2(@types/node@24.10.0)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) vite-node: 3.2.4(@types/node@24.10.0)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) why-is-node-running: 2.3.0 optionalDependencies: '@types/debug': 4.1.12 '@types/node': 24.10.0 - '@vitest/browser': 3.2.4(bufferutil@4.0.9)(msw@2.7.5(@types/node@24.10.0)(typescript@5.9.3))(playwright@1.56.1)(utf-8-validate@6.0.5)(vite@7.2.1(@types/node@24.10.0)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))(vitest@3.2.4)(webdriverio@9.20.0(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@24.10.0)(typescript@5.9.3))(playwright@1.56.1)(utf-8-validate@6.0.5)(vite@7.2.2(@types/node@24.10.0)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))(vitest@3.2.4)(webdriverio@9.20.0(bufferutil@4.0.9)(utf-8-validate@6.0.5)) '@vitest/ui': 3.2.4(vitest@3.2.4) happy-dom: 20.0.10 jsdom: 26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5) From d75279316a6634e764fda43db2a654e5fc9bfdb4 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sat, 8 Nov 2025 01:37:54 +0000 Subject: [PATCH 10/17] fix(deps): update dependency i18next to v25.6.1 --- apps/client/package.json | 2 +- apps/server/package.json | 2 +- apps/website/package.json | 2 +- pnpm-lock.yaml | 30 +++++++++++++----------------- 4 files changed, 16 insertions(+), 20 deletions(-) diff --git a/apps/client/package.json b/apps/client/package.json index d2ca22049..8cde2f7ca 100644 --- a/apps/client/package.json +++ b/apps/client/package.json @@ -43,7 +43,7 @@ "draggabilly": "3.0.0", "force-graph": "1.51.0", "globals": "16.5.0", - "i18next": "25.6.0", + "i18next": "25.6.1", "i18next-http-backend": "3.0.2", "jquery": "3.7.1", "jquery.fancytree": "2.38.5", diff --git a/apps/server/package.json b/apps/server/package.json index fb479813a..fb8f441ea 100644 --- a/apps/server/package.json +++ b/apps/server/package.json @@ -97,7 +97,7 @@ "html2plaintext": "2.1.4", "http-proxy-agent": "7.0.2", "https-proxy-agent": "7.0.6", - "i18next": "25.6.0", + "i18next": "25.6.1", "i18next-fs-backend": "2.6.0", "image-type": "6.0.0", "ini": "6.0.0", diff --git a/apps/website/package.json b/apps/website/package.json index 703f8773a..c9553790e 100644 --- a/apps/website/package.json +++ b/apps/website/package.json @@ -9,7 +9,7 @@ "preview": "pnpm build && vite preview" }, "dependencies": { - "i18next": "25.6.0", + "i18next": "25.6.1", "i18next-http-backend": "3.0.2", "preact": "10.27.2", "preact-iso": "2.11.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index a93b37fe7..a826c274d 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -239,8 +239,8 @@ importers: specifier: 16.5.0 version: 16.5.0 i18next: - specifier: 25.6.0 - version: 25.6.0(typescript@5.9.3) + specifier: 25.6.1 + version: 25.6.1(typescript@5.9.3) i18next-http-backend: specifier: 3.0.2 version: 3.0.2(encoding@0.1.13) @@ -288,7 +288,7 @@ importers: version: 10.27.2 react-i18next: specifier: 16.2.4 - version: 16.2.4(i18next@25.6.0(typescript@5.9.3))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3) + version: 16.2.4(i18next@25.6.1(typescript@5.9.3))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3) reveal.js: specifier: 5.2.1 version: 5.2.1 @@ -694,8 +694,8 @@ importers: specifier: 7.0.6 version: 7.0.6 i18next: - specifier: 25.6.0 - version: 25.6.0(typescript@5.9.3) + specifier: 25.6.1 + version: 25.6.1(typescript@5.9.3) i18next-fs-backend: specifier: 2.6.0 version: 2.6.0 @@ -802,8 +802,8 @@ importers: apps/website: dependencies: i18next: - specifier: 25.6.0 - version: 25.6.0(typescript@5.9.3) + specifier: 25.6.1 + version: 25.6.1(typescript@5.9.3) i18next-http-backend: specifier: 3.0.2 version: 3.0.2(encoding@0.1.13) @@ -818,7 +818,7 @@ importers: version: 6.6.3(preact@10.27.2) react-i18next: specifier: 16.2.4 - version: 16.2.4(i18next@25.6.0(typescript@5.9.3))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3) + version: 16.2.4(i18next@25.6.1(typescript@5.9.3))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3) devDependencies: '@preact/preset-vite': specifier: 2.10.2 @@ -8860,8 +8860,8 @@ packages: i18next-http-backend@3.0.2: resolution: {integrity: sha512-PdlvPnvIp4E1sYi46Ik4tBYh/v/NbYfFFgTjkwFl0is8A18s7/bx9aXqsrOax9WUbeNS6mD2oix7Z0yGGf6m5g==} - i18next@25.6.0: - resolution: {integrity: sha512-tTn8fLrwBYtnclpL5aPXK/tAYBLWVvoHM1zdfXoRNLcI+RvtMsoZRV98ePlaW3khHYKuNh/Q65W/+NVFUeIwVw==} + i18next@25.6.1: + resolution: {integrity: sha512-yUWvdXtalZztmKrKw3yz/AvSP3yKyqIkVPx/wyvoYy9lkLmwzItLxp0iHZLG5hfVQ539Jor4XLO+U+NHIXg7pw==} peerDependencies: typescript: ^5 peerDependenciesMeta: @@ -15579,8 +15579,6 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.2.0 '@ckeditor/ckeditor5-watchdog': 47.2.0 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.3)': dependencies: @@ -16281,8 +16279,6 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.2.0 '@ckeditor/ckeditor5-utils': 47.2.0 ckeditor5: 47.2.0(patch_hash=8331a09d41443b39ea1c784daaccfeb0da4f9065ed556e7de92e9c77edd9eb41) - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-restricted-editing@47.2.0': dependencies: @@ -25144,7 +25140,7 @@ snapshots: transitivePeerDependencies: - encoding - i18next@25.6.0(typescript@5.9.3): + i18next@25.6.1(typescript@5.9.3): dependencies: '@babel/runtime': 7.28.4 optionalDependencies: @@ -28801,11 +28797,11 @@ snapshots: react: 19.2.0 scheduler: 0.27.0 - react-i18next@16.2.4(i18next@25.6.0(typescript@5.9.3))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3): + react-i18next@16.2.4(i18next@25.6.1(typescript@5.9.3))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3): dependencies: '@babel/runtime': 7.28.4 html-parse-stringify: 3.0.1 - i18next: 25.6.0(typescript@5.9.3) + i18next: 25.6.1(typescript@5.9.3) react: 19.2.0 use-sync-external-store: 1.6.0(react@19.2.0) optionalDependencies: From d95eb9f5d3189fb8fddcc535f7bbd3a8b7cb14d1 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sat, 8 Nov 2025 01:38:37 +0000 Subject: [PATCH 11/17] fix(deps): update dependency marked to v16.4.2 --- apps/client/package.json | 2 +- apps/server/package.json | 2 +- pnpm-lock.yaml | 20 ++++++++------------ 3 files changed, 10 insertions(+), 14 deletions(-) diff --git a/apps/client/package.json b/apps/client/package.json index d2ca22049..3cc198904 100644 --- a/apps/client/package.json +++ b/apps/client/package.json @@ -53,7 +53,7 @@ "leaflet": "1.9.4", "leaflet-gpx": "2.2.0", "mark.js": "8.11.1", - "marked": "16.4.1", + "marked": "16.4.2", "mermaid": "11.12.1", "mind-elixir": "5.3.5", "normalize.css": "8.0.1", diff --git a/apps/server/package.json b/apps/server/package.json index fb479813a..57c9a4d2e 100644 --- a/apps/server/package.json +++ b/apps/server/package.json @@ -105,7 +105,7 @@ "is-svg": "6.1.0", "jimp": "1.6.0", "js-yaml": "4.1.0", - "marked": "16.4.1", + "marked": "16.4.2", "mime-types": "3.0.1", "multer": "2.0.2", "normalize-strings": "1.1.1", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index a93b37fe7..b72a63c6c 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -269,8 +269,8 @@ importers: specifier: 8.11.1 version: 8.11.1 marked: - specifier: 16.4.1 - version: 16.4.1 + specifier: 16.4.2 + version: 16.4.2 mermaid: specifier: 11.12.1 version: 11.12.1 @@ -718,8 +718,8 @@ importers: specifier: 4.1.0 version: 4.1.0 marked: - specifier: 16.4.1 - version: 16.4.1 + specifier: 16.4.2 + version: 16.4.2 mime-types: specifier: 3.0.1 version: 3.0.1 @@ -9954,8 +9954,8 @@ packages: markdown-table@3.0.4: resolution: {integrity: sha512-wiYz4+JrLyb/DqW2hkFJxP7Vd7JuTDm77fvbM8VfEQdmSMqcImWeeRbHwZjBjIFki/VaMK2BhFi7oUUZeM5bqw==} - marked@16.4.1: - resolution: {integrity: sha512-ntROs7RaN3EvWfy3EZi14H4YxmT6A5YvywfhO+0pm+cH/dnSQRmdAmoFIc3B9aiwTehyk7pESH4ofyBY+V5hZg==} + marked@16.4.2: + resolution: {integrity: sha512-TI3V8YYWvkVf3KJe1dRkpnjs68JUPyEa5vjKrp1XEEJUAOaQc+Qj+L1qWbPd0SJuAdQkFU0h73sXXqwDYxsiDA==} engines: {node: '>= 20'} hasBin: true @@ -15579,8 +15579,6 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.2.0 '@ckeditor/ckeditor5-watchdog': 47.2.0 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.3)': dependencies: @@ -16281,8 +16279,6 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.2.0 '@ckeditor/ckeditor5-utils': 47.2.0 ckeditor5: 47.2.0(patch_hash=8331a09d41443b39ea1c784daaccfeb0da4f9065ed556e7de92e9c77edd9eb41) - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-restricted-editing@47.2.0': dependencies: @@ -26338,7 +26334,7 @@ snapshots: markdown-table@3.0.4: {} - marked@16.4.1: {} + marked@16.4.2: {} marked@4.3.0: {} @@ -26537,7 +26533,7 @@ snapshots: katex: 0.16.25 khroma: 2.1.0 lodash-es: 4.17.21 - marked: 16.4.1 + marked: 16.4.2 roughjs: 4.6.6 stylis: 4.3.6 ts-dedent: 2.2.0 From bbe96c3967e3fa5125b235a80b09c19168fc252d Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sat, 8 Nov 2025 01:39:17 +0000 Subject: [PATCH 12/17] chore(deps): update dependency electron to v38.6.0 --- apps/desktop/package.json | 2 +- apps/edit-docs/package.json | 2 +- apps/server/package.json | 2 +- pnpm-lock.yaml | 36 ++++++++++++++++++------------------ 4 files changed, 21 insertions(+), 21 deletions(-) diff --git a/apps/desktop/package.json b/apps/desktop/package.json index 5cf38b041..92da43cbb 100644 --- a/apps/desktop/package.json +++ b/apps/desktop/package.json @@ -35,7 +35,7 @@ "@triliumnext/commons": "workspace:*", "@triliumnext/server": "workspace:*", "copy-webpack-plugin": "13.0.1", - "electron": "38.5.0", + "electron": "38.6.0", "@electron-forge/cli": "7.10.2", "@electron-forge/maker-deb": "7.10.2", "@electron-forge/maker-dmg": "7.10.2", diff --git a/apps/edit-docs/package.json b/apps/edit-docs/package.json index 958a54f3d..948ff104c 100644 --- a/apps/edit-docs/package.json +++ b/apps/edit-docs/package.json @@ -12,7 +12,7 @@ "@triliumnext/desktop": "workspace:*", "@types/fs-extra": "11.0.4", "copy-webpack-plugin": "13.0.1", - "electron": "38.5.0", + "electron": "38.6.0", "fs-extra": "11.3.2" }, "scripts": { diff --git a/apps/server/package.json b/apps/server/package.json index fb479813a..c5b7a7a83 100644 --- a/apps/server/package.json +++ b/apps/server/package.json @@ -81,7 +81,7 @@ "debounce": "3.0.0", "debug": "4.4.3", "ejs": "3.1.10", - "electron": "38.5.0", + "electron": "38.6.0", "electron-debug": "4.1.0", "electron-window-state": "5.0.3", "escape-html": "1.0.3", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index a93b37fe7..912a49708 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -361,7 +361,7 @@ importers: dependencies: '@electron/remote': specifier: 2.1.3 - version: 2.1.3(electron@38.5.0) + version: 2.1.3(electron@38.6.0) better-sqlite3: specifier: 12.4.1 version: 12.4.1 @@ -418,8 +418,8 @@ importers: specifier: 13.0.1 version: 13.0.1(webpack@5.101.3(esbuild@0.25.12)) electron: - specifier: 38.5.0 - version: 38.5.0 + specifier: 38.6.0 + version: 38.6.0 prebuild-install: specifier: 7.1.3 version: 7.1.3 @@ -474,8 +474,8 @@ importers: specifier: 13.0.1 version: 13.0.1(webpack@5.101.3(esbuild@0.25.12)) electron: - specifier: 38.5.0 - version: 38.5.0 + specifier: 38.6.0 + version: 38.6.0 fs-extra: specifier: 11.3.2 version: 11.3.2 @@ -500,7 +500,7 @@ importers: version: 7.1.1 '@electron/remote': specifier: 2.1.3 - version: 2.1.3(electron@38.5.0) + version: 2.1.3(electron@38.6.0) '@preact/preset-vite': specifier: 2.10.2 version: 2.10.2(@babel/core@7.28.0)(preact@10.27.2)(vite@7.2.1(@types/node@24.10.0)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) @@ -646,8 +646,8 @@ importers: specifier: 3.1.10 version: 3.1.10 electron: - specifier: 38.5.0 - version: 38.5.0 + specifier: 38.6.0 + version: 38.6.0 electron-debug: specifier: 4.1.0 version: 4.1.0 @@ -7619,8 +7619,8 @@ packages: resolution: {integrity: sha512-bO3y10YikuUwUuDUQRM4KfwNkKhnpVO7IPdbsrejwN9/AABJzzTQ4GeHwyzNSrVO+tEH3/Np255a3sVZpZDjvg==} engines: {node: '>=8.0.0'} - electron@38.5.0: - resolution: {integrity: sha512-dbC7V+eZweerYMJfxQldzHOg37a1VdNMCKxrJxlkp3cA30gOXtXSg4ZYs07L5+QwI19WOy1uyvtEUgbw1RRsCQ==} + electron@38.6.0: + resolution: {integrity: sha512-68OFNxJlrEStA+t8k5atzf4frJddvRR1N1oalr49Ll8YZ0+0nEsDhw4UNhTCoZKTjSYcxFF/4rt+sco+OlnB3g==} engines: {node: '>= 12.20.55'} hasBin: true @@ -15369,6 +15369,8 @@ snapshots: '@ckeditor/ckeditor5-core': 47.2.0 '@ckeditor/ckeditor5-upload': 47.2.0 ckeditor5: 47.2.0(patch_hash=8331a09d41443b39ea1c784daaccfeb0da4f9065ed556e7de92e9c77edd9eb41) + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-ai@47.2.0(bufferutil@4.0.9)(utf-8-validate@6.0.5)': dependencies: @@ -15515,6 +15517,8 @@ snapshots: '@ckeditor/ckeditor5-core': 47.2.0 '@ckeditor/ckeditor5-utils': 47.2.0 ckeditor5: 47.2.0(patch_hash=8331a09d41443b39ea1c784daaccfeb0da4f9065ed556e7de92e9c77edd9eb41) + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-code-block@47.2.0(patch_hash=2361d8caad7d6b5bddacc3a3b4aa37dbfba260b1c1b22a450413a79c1bb1ce95)': dependencies: @@ -15579,8 +15583,6 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.2.0 '@ckeditor/ckeditor5-watchdog': 47.2.0 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.3)': dependencies: @@ -16281,8 +16283,6 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.2.0 '@ckeditor/ckeditor5-utils': 47.2.0 ckeditor5: 47.2.0(patch_hash=8331a09d41443b39ea1c784daaccfeb0da4f9065ed556e7de92e9c77edd9eb41) - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-restricted-editing@47.2.0': dependencies: @@ -17127,9 +17127,9 @@ snapshots: transitivePeerDependencies: - supports-color - '@electron/remote@2.1.3(electron@38.5.0)': + '@electron/remote@2.1.3(electron@38.6.0)': dependencies: - electron: 38.5.0 + electron: 38.6.0 '@electron/universal@2.0.2': dependencies: @@ -23351,10 +23351,10 @@ snapshots: - supports-color optional: true - electron@38.5.0: + electron@38.6.0: dependencies: '@electron/get': 2.0.3 - '@types/node': 22.18.12 + '@types/node': 22.18.13 extract-zip: 2.0.1 transitivePeerDependencies: - supports-color From 2e59d9d7bc282b2fff2aae27dcc896836e248e30 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sat, 8 Nov 2025 01:39:22 +0000 Subject: [PATCH 13/17] chore(deps): update dependency rcedit to v5 --- _regroup/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/_regroup/package.json b/_regroup/package.json index ce0e70d45..56a419e99 100644 --- a/_regroup/package.json +++ b/_regroup/package.json @@ -46,7 +46,7 @@ "esm": "3.2.25", "jsdoc": "4.0.5", "lorem-ipsum": "2.0.8", - "rcedit": "4.0.1", + "rcedit": "5.0.0", "rimraf": "6.1.0", "tslib": "2.8.1" }, From 0e95610d4e2f2113ac0494b45a528abcb842bc8a Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Sat, 8 Nov 2025 11:14:59 +0200 Subject: [PATCH 14/17] fix(server): attachments not copied for templates (closes #7612) --- apps/server/src/services/notes.ts | 21 ++++++++++++++++++++- packages/commons/src/lib/rows.ts | 2 +- 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/apps/server/src/services/notes.ts b/apps/server/src/services/notes.ts index 3ecf98e0a..4e8869414 100644 --- a/apps/server/src/services/notes.ts +++ b/apps/server/src/services/notes.ts @@ -97,6 +97,23 @@ function copyChildAttributes(parentNote: BNote, childNote: BNote) { } } +function copyAttachments(origNote: BNote, newNote: BNote) { + for (const attachment of origNote.getAttachments()) { + if (attachment.role === "image") { + // Handled separately, see `checkImageAttachments`. + continue; + } + + const newAttachment = new BAttachment({ + ...attachment, + attachmentId: undefined, + ownerId: newNote.noteId + }); + + newAttachment.save(); + } +} + function getNewNoteTitle(parentNote: BNote) { let title = t("notes.new-note"); @@ -225,11 +242,13 @@ function createNewNote(params: NoteParams): { asyncPostProcessContent(note, params.content); if (params.templateNoteId) { - if (!becca.getNote(params.templateNoteId)) { + const templateNote = becca.getNote(params.templateNoteId); + if (!templateNote) { throw new Error(`Template note '${params.templateNoteId}' does not exist.`); } note.addRelation("template", params.templateNoteId); + copyAttachments(templateNote, note); // no special handling for ~inherit since it doesn't matter if it's assigned with the note creation or later } diff --git a/packages/commons/src/lib/rows.ts b/packages/commons/src/lib/rows.ts index 9bb9d11d5..5710cf84f 100644 --- a/packages/commons/src/lib/rows.ts +++ b/packages/commons/src/lib/rows.ts @@ -12,7 +12,7 @@ export interface AttachmentRow { isProtected?: boolean; dateModified?: string; utcDateModified?: string; - utcDateScheduledForErasureSince?: string; + utcDateScheduledForErasureSince?: string | null; isDeleted?: boolean; deleteId?: string; contentLength?: number; From 53805e9c491dcdd4e8b70565fae96efe62be9206 Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Sat, 8 Nov 2025 11:27:18 +0200 Subject: [PATCH 15/17] fix(server/notes): images not saved on duplication (fixes #7471) --- apps/server/src/services/notes.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/server/src/services/notes.ts b/apps/server/src/services/notes.ts index 4e8869414..3de73bc21 100644 --- a/apps/server/src/services/notes.ts +++ b/apps/server/src/services/notes.ts @@ -239,8 +239,6 @@ function createNewNote(params: NoteParams): { } } - asyncPostProcessContent(note, params.content); - if (params.templateNoteId) { const templateNote = becca.getNote(params.templateNoteId); if (!templateNote) { @@ -1037,6 +1035,8 @@ function duplicateSubtreeInner(origNote: BNote, origBranch: BBranch | null | und } } + asyncPostProcessContent(newNote, content); + return newNote; } From b0bd60b9a4040702b258cce220f19585042645db Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Sat, 8 Nov 2025 18:01:58 +0200 Subject: [PATCH 16/17] feat(collections/calendar): use formatting locale --- apps/client/src/widgets/collections/calendar/index.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/client/src/widgets/collections/calendar/index.tsx b/apps/client/src/widgets/collections/calendar/index.tsx index c1b288e27..ec1e9e23b 100644 --- a/apps/client/src/widgets/collections/calendar/index.tsx +++ b/apps/client/src/widgets/collections/calendar/index.tsx @@ -197,11 +197,11 @@ function usePlugins(isEditable: boolean, isCalendarRoot: boolean) { } function useLocale() { - const [ locale ] = useTriliumOption("locale"); + const [ formattingLocale ] = useTriliumOption("formattingLocale"); const [ calendarLocale, setCalendarLocale ] = useState(); useEffect(() => { - const correspondingLocale = LOCALE_MAPPINGS[locale]; + const correspondingLocale = LOCALE_MAPPINGS[formattingLocale]; if (correspondingLocale) { correspondingLocale().then((locale) => setCalendarLocale(locale.default)); } else { From 3463cb83a05f248267db6ca79a3dc8b3fc03a7e7 Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Sat, 8 Nov 2025 20:17:56 +0200 Subject: [PATCH 17/17] fix(collections/board): cloned notes appearing twice (closes #6786) --- .../widgets/collections/board/data.spec.ts | 32 +++++++++++++++++++ .../src/widgets/collections/board/data.ts | 10 +++--- 2 files changed, 38 insertions(+), 4 deletions(-) create mode 100644 apps/client/src/widgets/collections/board/data.spec.ts diff --git a/apps/client/src/widgets/collections/board/data.spec.ts b/apps/client/src/widgets/collections/board/data.spec.ts new file mode 100644 index 000000000..357aea616 --- /dev/null +++ b/apps/client/src/widgets/collections/board/data.spec.ts @@ -0,0 +1,32 @@ +import { it, describe, expect } from "vitest"; +import { buildNote } from "../../../test/easy-froca"; +import { getBoardData } from "./data"; +import FBranch from "../../../entities/fbranch"; +import froca from "../../../services/froca"; + +describe("Board data", () => { + it("deduplicates cloned notes", async () => { + const parentNote = buildNote({ + title: "Board", + "#collection": "", + "#viewType": "board", + children: [ + { id: "note1", title: "First note", "#status": "To Do" }, + { id: "note2", title: "Second note", "#status": "In progress" }, + { id: "note3", title: "Third note", "#status": "Done" } + ] + }); + const branch = new FBranch(froca, { + branchId: "note1_note2", + notePosition: 10, + fromSearchNote: false, + noteId: "note2", + parentNoteId: "note1" + }); + froca.branches["note1_note2"] = branch; + froca.getNoteFromCache("note1").addChild("note2", "note1_note2", false); + const data = await getBoardData(parentNote, "status", {}, false); + const noteIds = Array.from(data.byColumn.values()).flat().map(item => item.note.noteId); + expect(noteIds.length).toBe(3); + }); +}); diff --git a/apps/client/src/widgets/collections/board/data.ts b/apps/client/src/widgets/collections/board/data.ts index db315564a..f283e2dc7 100644 --- a/apps/client/src/widgets/collections/board/data.ts +++ b/apps/client/src/widgets/collections/board/data.ts @@ -11,7 +11,7 @@ export async function getBoardData(parentNote: FNote, groupByColumn: string, per const byColumn: ColumnMap = new Map(); // First, scan all notes to find what columns actually exist - await recursiveGroupBy(parentNote.getChildBranches(), byColumn, groupByColumn, includeArchived); + await recursiveGroupBy(parentNote.getChildBranches(), byColumn, groupByColumn, includeArchived, new Set()); // Get all columns that exist in the notes const columnsFromNotes = [...byColumn.keys()]; @@ -61,26 +61,28 @@ export async function getBoardData(parentNote: FNote, groupByColumn: string, per }; } -async function recursiveGroupBy(branches: FBranch[], byColumn: ColumnMap, groupByColumn: string, includeArchived: boolean) { +async function recursiveGroupBy(branches: FBranch[], byColumn: ColumnMap, groupByColumn: string, includeArchived: boolean, seenNoteIds: Set) { for (const branch of branches) { const note = await branch.getNote(); if (!note || (!includeArchived && note.isArchived)) continue; if (note.type !== "search" && note.hasChildren()) { - await recursiveGroupBy(note.getChildBranches(), byColumn, groupByColumn, includeArchived); + await recursiveGroupBy(note.getChildBranches(), byColumn, groupByColumn, includeArchived, seenNoteIds); } const group = note.getLabelValue(groupByColumn); - if (!group) { + if (!group || seenNoteIds.has(note.noteId)) { continue; } if (!byColumn.has(group)) { byColumn.set(group, []); } + byColumn.get(group)!.push({ branch, note }); + seenNoteIds.add(note.noteId); } }