Merge branch 'develop' into ai-llm-integration

This commit is contained in:
perf3ct 2025-03-16 17:39:27 +00:00
commit 572a03a3f7
No known key found for this signature in database
GPG Key ID: 569C4EEC436F5232
270 changed files with 8827 additions and 8990 deletions

View File

@ -5,7 +5,6 @@
.prettier*
electron*
entitlements.plist
forge.config.cjs
nodemon.json
renovate.json
trilium.iml
@ -34,4 +33,10 @@ npm-debug.log
# exceptions
!/bin/copy-dist.ts
!/bin/copy-dist.ts
# temporary exception to make copy-dist inside Docker build not fail
# TriliumNextTODO: make copy-dist *not* requiring to copy this file for builds other than electron-forge
!forge.config.cjs
!/bin/tpl
!/bin/electron-forge/desktop.ejs

View File

@ -97,7 +97,7 @@ runs:
shell: bash
run: |
echo "Signing DMG file..."
dmg_file=$(find out -name "*.dmg" -print -quit)
dmg_file=$(find ./dist -name "*.dmg" -print -quit)
if [ -n "$dmg_file" ]; then
echo "Found DMG: $dmg_file"
# Get the first valid signing identity from the keychain
@ -125,7 +125,7 @@ runs:
# First check the .app bundle
echo "Looking for .app bundle..."
app_bundle=$(find out -name "*.app" -print -quit)
app_bundle=$(find ./dist -name "*.app" -print -quit)
if [ -n "$app_bundle" ]; then
echo "Found app bundle: $app_bundle"
echo "Verifying app bundle signing..."
@ -144,7 +144,7 @@ runs:
# Then check DMG if it exists
echo "Looking for DMG..."
dmg_file=$(find out -name "*.dmg" -print -quit)
dmg_file=$(find ./dist -name "*.dmg" -print -quit)
if [ -n "$dmg_file" ]; then
echo "Found DMG: $dmg_file"
echo "Verifying DMG signing..."
@ -160,7 +160,7 @@ runs:
# Finally check ZIP if it exists
echo "Looking for ZIP..."
zip_file=$(find out -name "*.zip" -print -quit)
zip_file=$(find ./dist -name "*.zip" -print -quit)
if [ -n "$zip_file" ]; then
echo "Found ZIP: $zip_file"
echo "Note: ZIP files are not code signed, but their contents should be"
@ -177,7 +177,7 @@ runs:
# Look for DMG files recursively
echo "Looking for DMG files..."
dmg_file=$(find out -name "*.dmg" -print -quit)
dmg_file=$(find ./dist -name "*.dmg" -print -quit)
if [ -n "$dmg_file" ]; then
echo "Found DMG: $dmg_file"
cp "$dmg_file" "upload/TriliumNextNotes-${{ github.ref_name }}-macos-${{ inputs.arch }}.dmg"
@ -187,7 +187,7 @@ runs:
# Look for ZIP files recursively
echo "Looking for ZIP files..."
zip_file=$(find out -name "*.zip" -print -quit)
zip_file=$(find ./dist -name "*.zip" -print -quit)
if [ -n "$zip_file" ]; then
echo "Found ZIP: $zip_file"
cp "$zip_file" "upload/TriliumNextNotes-${{ github.ref_name }}-macos-${{ inputs.arch }}.zip"
@ -199,7 +199,7 @@ runs:
echo "Collecting artifacts for ${{ inputs.os }}..."
for ext in ${{ inputs.extension }}; do
echo "Looking for .$ext files..."
file=$(find out -name "*.$ext" -print -quit)
file=$(find ./dist -name "*.$ext" -print -quit)
if [ -n "$file" ]; then
echo "Found $file for extension $ext"
cp "$file" "upload/TriliumNextNotes-${{ github.ref_name }}-${{ inputs.os }}-${{ inputs.arch }}.$ext"

View File

@ -30,6 +30,9 @@ try {
"./package.json",
"./LICENSE",
"./README.md",
"./forge.config.cjs",
"./bin/tpl/",
"./bin/electron-forge/desktop.ejs",
"./src/views/",
"./src/etapi/etapi.openapi.yaml",
"./src/routes/api/openapi.json",

File diff suppressed because it is too large Load Diff

Binary file not shown.

Before

Width:  |  Height:  |  Size: 113 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 508 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 635 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 35 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 668 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 542 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 125 KiB

After

Width:  |  Height:  |  Size: 79 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 17 KiB

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 79 KiB

After

Width:  |  Height:  |  Size: 93 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 93 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 92 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 36 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 102 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 188 B

After

Width:  |  Height:  |  Size: 327 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 327 B

After

Width:  |  Height:  |  Size: 81 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 81 KiB

After

Width:  |  Height:  |  Size: 79 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 79 KiB

After

Width:  |  Height:  |  Size: 780 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 780 B

After

Width:  |  Height:  |  Size: 367 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 367 B

View File

@ -1,7 +1,7 @@
# Global menu
The global menu configures the current window (zoom, keeping the window on top) and offers access to some more advanced options.
![](2_Global%20menu_image.png)
![](Global%20menu_image.png)
## Accessing the global menu

Binary file not shown.

Before

Width:  |  Height:  |  Size: 18 KiB

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 482 B

After

Width:  |  Height:  |  Size: 188 B

View File

@ -10,10 +10,10 @@ The vertical layout is Trilium's original layout:
* The [Launcher Bar](Launch%20Bar.md) is positioned on the left side of the screen, with buttons being laid out vertically.
* The tab bar is at the top, but to the right of the [Note Tree](Note%20Tree.md).
* The [Quick search](Quick%20search.md) is at the top of the [Note Tree](Note%20Tree.md).
* The [Note Tree](Note%20Tree.md) can be collapsed by pressing the ![](6_Vertical%20and%20horizontal%20la.png) button at the bottom of the [Launcher Bar](Launch%20Bar.md).
* The [Global menu](Global%20menu.md) can be accessed via the ![](5_Vertical%20and%20horizontal%20la.png) icon at the top of the [Launcher Bar](Launch%20Bar.md).
* The [Note Tree](Note%20Tree.md) can be collapsed by pressing the ![](5_Vertical%20and%20horizontal%20la.png) button at the bottom of the [Launcher Bar](Launch%20Bar.md).
* The [Global menu](Global%20menu.md) can be accessed via the ![](4_Vertical%20and%20horizontal%20la.png) icon at the top of the [Launcher Bar](Launch%20Bar.md).
![](4_Vertical%20and%20horizontal%20la.png)
![](3_Vertical%20and%20horizontal%20la.png)
### Horizontal layout
@ -22,10 +22,10 @@ The horizontal layout is a more traditional layout, since it bears similarity wi
* The [Launcher Bar](Launch%20Bar.md) is at the top of the screen, with the buttons laid horizontally.
* The tab bar is at the top of the screen, but now covers the entirety of the width, allowing for more tabs to be displayed at once.
* The [Quick search](Quick%20search.md) is now part of the [Launcher Bar](Launch%20Bar.md). It can be moved around according to preference and even removed if needed.
* The [Note Tree](Note%20Tree.md) can be collapsed by pressing the small ![](2_Vertical%20and%20horizontal%20la.png) button to the left of the first tab.
* The [Global menu](Global%20menu.md) can be accessed via the ![](1_Vertical%20and%20horizontal%20la.png) button at the end of the [Launcher Bar](Launch%20Bar.md).
* The [Note Tree](Note%20Tree.md) can be collapsed by pressing the small ![](1_Vertical%20and%20horizontal%20la.png) button to the left of the first tab.
* The [Global menu](Global%20menu.md) can be accessed via the ![](Vertical%20and%20horizontal%20la.png) button at the end of the [Launcher Bar](Launch%20Bar.md).
![](3_Vertical%20and%20horizontal%20la.png)
![](2_Vertical%20and%20horizontal%20la.png)
## Changing the layout

Binary file not shown.

Before

Width:  |  Height:  |  Size: 18 KiB

View File

@ -1,11 +1,11 @@
# Zen mode
![](6_Zen%20mode_image.png)
![](3_Zen%20mode_image.png)
Screenshot of Zen Mode activated on a Windows 11 system with native title bar off and background effects on.
When Zen Mode is activated (pictured on the side), most of the user interface of Trilium is hidden away in order to be able to focus on the content, whether it's for reading or writing.
![](5_Zen%20mode_image.png)
![](2_Zen%20mode_image.png)
Screenshot of the Zen Mode option in the global menu.
@ -23,7 +23,7 @@ Do note that, by design, activating or deactivating the Zen Mode applies only to
If “Native title bar” is activated, then the operating system's default title bar can be used to drag the window around. If deactivated, the window can still be moved by dragging the mouse across the top part of the window where the note titles are.
![](3_Zen%20mode_image.png)
![](1_Zen%20mode_image.png)
Screenshot of two notes side-by-side while Zen Mode is active, on Windows 11 with background effects off.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 100 KiB

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 15 KiB

After

Width:  |  Height:  |  Size: 4.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.2 KiB

After

Width:  |  Height:  |  Size: 397 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 397 KiB

After

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 68 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.3 KiB

After

Width:  |  Height:  |  Size: 56 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.1 KiB

After

Width:  |  Height:  |  Size: 4.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 56 KiB

After

Width:  |  Height:  |  Size: 7.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.6 KiB

After

Width:  |  Height:  |  Size: 7.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.9 KiB

After

Width:  |  Height:  |  Size: 7.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 26 KiB

After

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.1 KiB

After

Width:  |  Height:  |  Size: 31 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 31 KiB

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 17 KiB

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 16 KiB

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 16 KiB

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 10 KiB

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 10 KiB

After

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.2 KiB

After

Width:  |  Height:  |  Size: 9.1 KiB

View File

@ -1,5 +1,5 @@
# Calendar View
![](6_Calendar%20View_image.png)
![](4_Calendar%20View_image.png)
The Calendar view of Book notes will display each child note in a calendar that has a start date and optionally an end date, as an event.
@ -9,8 +9,8 @@ Unlike other Book view types, the Calendar view also allows some kind of interac
| | | |
| --- | --- | --- |
| 1 | ![](3_Calendar%20View_image.png) | The Calendar View works only for Book note types. To create a new note, right click on the note tree on the left and select Insert note after, or Insert child note and then select _Book_. |
| 2 | ![](5_Calendar%20View_image.png) | Once created, the “View type” of the Book needs changed to “Calendar”, by selecting the “Book Properties” tab in the ribbon. |
| 1 | ![](2_Calendar%20View_image.png) | The Calendar View works only for Book note types. To create a new note, right click on the note tree on the left and select Insert note after, or Insert child note and then select _Book_. |
| 2 | ![](3_Calendar%20View_image.png) | Once created, the “View type” of the Book needs changed to “Calendar”, by selecting the “Book Properties” tab in the ribbon. |
## Creating a new event/note
@ -23,7 +23,7 @@ Unlike other Book view types, the Calendar view also allows some kind of interac
## Interacting with events
* Hovering the mouse over an event will display information about the note.
![](11_Calendar%20View_image.png)
![](9_Calendar%20View_image.png)
* Left clicking the event will go to that note. Middle clicking will open the note in a new tab and right click will offer more options including opening the note in a new split or window.
* Drag and drop an event on the calendar to move it to another day.
* The length of an event can be changed by placing the mouse to the right edge of the event and dragging the mouse around.
@ -52,13 +52,13 @@ For each note of the calendar, the following attributes can be used:
| `#calendar:color` | Similar to `#color`, but applies the color only for the event in the calendar and not for other places such as the note tree. |
| `#iconClass` | If present, the icon of the note will be displayed to the left of the event title. |
| `#calendar:title` | Changes the title of an event to point to an attribute of the note other than the title, either a label (e.g. `#assignee`) or a relation (e.g. `~for`). See _Advanced use-cases_ for more information. |
| `#calendar:displayedAttributes` | Allows displaying the value of one or more attributes in the calendar like this: <br><br>![](13_Calendar%20View_image.png)<br><br>```<br>#weight="70"<br>#Mood="Good"<br>#calendar:displayedAttributes="weight,Mood"<br>```<br><br>It can also be used with relations, case in which it will display the title of the target note:<br><br>```<br>~assignee=@My assignee<br>#calendar:displayedAttributes="assignee"<br>``` |
| `#calendar:displayedAttributes` | Allows displaying the value of one or more attributes in the calendar like this:  <br> <br>![](11_Calendar%20View_image.png) <br> <br>`<br>#weight="70"<br>#Mood="Good"<br>#calendar:displayedAttributes="weight,Mood"<br>` <br> <br>It can also be used with relations, case in which it will display the title of the target note: <br> <br>`<br>~assignee=@My assignee<br>#calendar:displayedAttributes="assignee"<br>` |
| `#calendar:startDate` | Allows using a different label to represent the start date, other than `startDate` (e.g. `expiryDate`). The label name **must not be** prefixed with `#`. If the label is not defined for a note, the default will be used instead. |
| `#calendar:endDate` | Allows using a different label to represent the start date, other than `endDate`. The label name **must not be** prefixed with `#`. If the label is not defined for a note, the default will be used instead. |
## How the calendar works
![](17_Calendar%20View_image.png)
![](14_Calendar%20View_image.png)
The calendar displays all the child notes of the book that have a `#startDate`. An `#endDate` can optionally be added.
@ -72,7 +72,7 @@ If editing the start date and end date from the note itself is desirable, the fo
This will result in:
![](14_Calendar%20View_image.png)
![](12_Calendar%20View_image.png)
When not used in a Journal, the calendar is recursive. That is, it will look for events not just in its child notes but also in the children of these child notes.
@ -89,7 +89,7 @@ Based on the `#calendarRoot` (or `#workspaceCalendarRoot`) attribute, the calend
* Clicking on the empty space on a date will automatically open that day's note or create it if it does not exist.
* Direct children of a day note will be displayed on the calendar despite not having a `dateNote` attribute. Children of the child notes will not be displayed.
![](12_Calendar%20View_image.png)
![](10_Calendar%20View_image.png)
### Using a different attribute as event title
@ -99,7 +99,7 @@ To do so, assign `#calendar:title` to the child note (not the calendar/book note
| | |
| --- | --- |
| ![](7_Calendar%20View_image.png) | ![](9_Calendar%20View_image.png) |
| ![](5_Calendar%20View_image.png) | ![](7_Calendar%20View_image.png) |
### Using a relation attribute as event title
@ -109,10 +109,10 @@ Moreover, if there are more relations of the same name, they will be displayed a
| | |
| --- | --- |
| ![](8_Calendar%20View_image.png) | ![](10_Calendar%20View_image.png) |
| ![](6_Calendar%20View_image.png) | ![](8_Calendar%20View_image.png) |
Note that it's even possible to have a `#calendar:title` on the target note (e.g. “John Smith”) which will try to render an attribute of it. Note that it's not possible to use a relation here as well for safety reasons (an accidental recursion  of attributes could cause the application to loop infinitely).
| | |
| --- | --- |
| ![](15_Calendar%20View_image.png) | ![](2_Calendar%20View_image.png) |
| ![](13_Calendar%20View_image.png) | ![](1_Calendar%20View_image.png) |

View File

@ -17,16 +17,16 @@ The position on the map and the zoom are saved inside the map note and restored
| | | |
| --- | --- | --- |
| 1 | | To create a marker, first navigate to the desired point on the map. Then press the ![](16_Geo%20map_image.png)button on the top-right of the map.  <br> <br>If the button is not visible, make sure the button section is visible by pressing the chevron button ( ![](2_Geo%20map_image.png)) in the top-right of the map. |
| 1 | | To create a marker, first navigate to the desired point on the map. Then press the ![](15_Geo%20map_image.png)button on the top-right of the map.  <br> <br>If the button is not visible, make sure the button section is visible by pressing the chevron button ( ![](2_Geo%20map_image.png)) in the top-right of the map. |
| 2 | ![](3_Geo%20map_image.png) | Once pressed, the map will enter in the insert mode, as illustrated by the notification.  <br> <br>Simply click the point on the map where to place the marker, or the Escape key to cancel. |
| 3 | ![](9_Geo%20map_image.png) | Enter the name of the marker/note to be created. |
| 4 | ![](17_Geo%20map_image.png) | Once confirmed, the marker will show up on the map and it will also be displayed as a child note of the map. |
| 4 | ![](16_Geo%20map_image.png) | Once confirmed, the marker will show up on the map and it will also be displayed as a child note of the map. |
## How the location of the markers is stored
The location of a marker is stored in the `#geolocation` attribute of the child notes:
![](18_Geo%20map_image.png)
![](17_Geo%20map_image.png)
This value can be added manually if needed. The value of the attribute is made up of the latitude and longitude separated by a comma.
@ -87,7 +87,7 @@ Trilium has basic support for displaying GPS tracks on the geo map.
| | | |
| --- | --- | --- |
| 1 | ![](4_Geo%20map_image.png) | To add a track, simply drag & drop a .gpx file inside the geo map in the note tree. |
| 2 | ![](15_Geo%20map_image.png) | In order for the file to be recognized as a GPS track, it needs to show up as `application/gpx+xml` in the _File type_ field. |
| 2 | ![](14_Geo%20map_image.png) | In order for the file to be recognized as a GPS track, it needs to show up as `application/gpx+xml` in the _File type_ field. |
| 3 | ![](7_Geo%20map_image.png) | When going back to the map, the track should now be visible.  <br> <br>The start and end points of the track are indicated by the two blue markers. |
## Troubleshooting

Binary file not shown.

Before

Width:  |  Height:  |  Size: 68 KiB

After

Width:  |  Height:  |  Size: 254 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 254 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 90 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.9 KiB

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 89 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 16 KiB

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 115 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 20 KiB

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 22 KiB

After

Width:  |  Height:  |  Size: 391 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 391 B

After

Width:  |  Height:  |  Size: 272 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 272 B

After

Width:  |  Height:  |  Size: 7.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 272 B

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.6 KiB

After

Width:  |  Height:  |  Size: 68 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 26 KiB

After

Width:  |  Height:  |  Size: 1.9 KiB

View File

@ -0,0 +1,63 @@
# Admonitions
![](1_Admonitions_image.png)
Admonitions are a way to highlight information to the reader. Other names for it include _call-outs_ and _info/warning/alert boxes_.
## Inserting a new admonition
### From the UI
In the Formatting toolbar:
![](Admonitions_image.png)
### Via the keyboard
It's possible to insert an admonition simply by typing:
* `!!! note`
* `!!! tip`
* `!!! important`
* `!!! caution`
* `!!! warning`
In addition to that, it's also possible to type `!!!`  followed by any text, case in which a default admonition type will appear (note) with the entered text inside it.
## Interaction
By design, admonitions act very similar to block quotes.
* Selecting a text and pressing the admonition button will turn that text into an admonition.
* If selecting multiple admonitions, pressing the admonition button will automatically merge them into one.
Inside an admonition:
* Pressing <kbd>Backspace</kbd> while the admonition is empty will remove it.
* Pressing <kbd>Enter</kbd> will start a new paragraph. Pressing it twice will exit out of the admonition.
* Headings and other block content including tables can be inserted inside the admonition.
## Types of admonitions
There are currently five types of admonitions: _Note_, _Tip_, _Important_, _Caution_, _Warning_.
These types were inspired by GitHub's support for this feature and there are currently no plans for adjusting it or allowing the user to customize them.
## Markdown support
The Markdown syntax for admonitions as supported by Trilium is the one that GitHub uses, which is as follows:
```markdown
> [!NOTE]
> This is a note.
> [!TIP]
> This is a tip.
> [!IMPORTANT]
> This is a very important information.
> [!CAUTION]
> This is a caution.
```
There are currently no plans of supporting alternative admonition syntaxes such as `!!! note`.

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 90 KiB

After

Width:  |  Height:  |  Size: 90 KiB

View File

@ -1,5 +1,5 @@
# Content language & Right-to-left support
![](api/images/4yHAD34xyvAl/Content%20language%20&%20Right-t.png)
![](Content%20language%20&%20Right-t.png)
A language hint can be provided for text notes. This option informs the browser or the desktop application about the language the note is written in (for example this might help with spellchecking), and it also determines whether the text is displayed from right-to-left for languages such as Arabic, Hebrew, etc.

View File

@ -7,18 +7,18 @@ An image can be uploaded in the form of note's [attachment](../../Basic%20Concep
To add an image to the note, simply drag it from file explorer onto the note editor inside Trilium and the image will be uploaded.
![](10_Images_image.png)
![](8_Images_image.png)
Alternatively you can click on block toolbar and then on "Insert image":
![](8_Images_image.png)
![](6_Images_image.png)
You can also copy and paste an image from web - the image will be (asynchronously) downloaded and embedded.
## Configuring the images
Clicking on an image will reveal a popup with multiple options:
![](11_Images_image.png)
![](9_Images_image.png)
### Alignment
@ -26,10 +26,10 @@ The first set of options configure the alignment are, in order:
| Icon | Option | Preview | Description |
| --- | --- | --- | --- |
| ![](7_Images_image.png) | Inline | ![](2_Images_image.png) | As the name suggests, the name can be put inside a paragraph and moved around similarly as if it was a block of text. Use drag & drop or cut-paste to move it around. |
| ![](12_Images_image.png) | Centered image | ![](3_Images_image.png) | The image will be displayed as a block and centered, not allowing text in either the left or right of it. |
| ![](5_Images_image.png) | Wrap text | ![](9_Images_image.png) | The image will be displayed to the left or the right of the text. |
| ![](Images_image.png) | Block align | ![](4_Images_image.png) | Similarly to _Centered image_, the image will be displayed as a block and aligned either to the left or to the right, but not allowing text to flow on either of its sides. |
| ![](5_Images_image.png) | Inline | ![](1_Images_image.png) | As the name suggests, the name can be put inside a paragraph and moved around similarly as if it was a block of text. Use drag & drop or cut-paste to move it around. |
| ![](10_Images_image.png) | Centered image | ![](2_Images_image.png) | The image will be displayed as a block and centered, not allowing text in either the left or right of it. |
| ![](4_Images_image.png) | Wrap text | ![](7_Images_image.png) | The image will be displayed to the left or the right of the text. |
| ![](Images_image.png) | Block align | ![](3_Images_image.png) | Similarly to _Centered image_, the image will be displayed as a block and aligned either to the left or to the right, but not allowing text to flow on either of its sides. |
## Compression

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 57 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 69 KiB

View File

@ -11,7 +11,7 @@ As such, the first step is to create a new note to gather all the themes.
| | |
| --- | --- |
| ![](5_Creating%20a%20custom%20theme_im.png) | Themes are code notes with a special attribute. Start by creating a new code note. |
| ![](Creating%20a%20custom%20theme_im.png) | Themes are code notes with a special attribute. Start by creating a new code note. |
| !\[\](Creating%20a%20custom theme\_im.png) | Then change the note type to a CSS code. |
| !\[\](5\_Creating%20a%20custom theme\_im.png) | In the _Owned Attributes_ section define the `#appTheme` attribute to point to any desired name. This is the name that will show up in the appearance section in settings. |

Binary file not shown.

Before

Width:  |  Height:  |  Size: 26 KiB

After

Width:  |  Height:  |  Size: 69 KiB

View File

@ -493,9 +493,9 @@
"license": "MIT"
},
"node_modules/better-sqlite3": {
"version": "11.8.1",
"resolved": "https://registry.npmjs.org/better-sqlite3/-/better-sqlite3-11.8.1.tgz",
"integrity": "sha512-9BxNaBkblMjhJW8sMRZxnxVTRgbRmssZW0Oxc1MPBTfiR+WW21e2Mk4qu8CzrcZb1LwPCnFsfDEzq+SNcBU8eg==",
"version": "11.9.0",
"resolved": "https://registry.npmjs.org/better-sqlite3/-/better-sqlite3-11.9.0.tgz",
"integrity": "sha512-4b9xYnoaskj8eIkke9ZCB42p5bOPabptSku8Rl4Yww70Jf+aHeLvrIjXDJrKQxUEjdppsFb+fdJSjoH4TklROA==",
"hasInstallScript": true,
"dependencies": {
"bindings": "^1.5.0",
@ -1416,9 +1416,9 @@
"integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA=="
},
"better-sqlite3": {
"version": "11.8.1",
"resolved": "https://registry.npmjs.org/better-sqlite3/-/better-sqlite3-11.8.1.tgz",
"integrity": "sha512-9BxNaBkblMjhJW8sMRZxnxVTRgbRmssZW0Oxc1MPBTfiR+WW21e2Mk4qu8CzrcZb1LwPCnFsfDEzq+SNcBU8eg==",
"version": "11.9.0",
"resolved": "https://registry.npmjs.org/better-sqlite3/-/better-sqlite3-11.9.0.tgz",
"integrity": "sha512-4b9xYnoaskj8eIkke9ZCB42p5bOPabptSku8Rl4Yww70Jf+aHeLvrIjXDJrKQxUEjdppsFb+fdJSjoH4TklROA==",
"requires": {
"bindings": "^1.5.0",
"prebuild-install": "^7.1.1"

View File

@ -166,8 +166,10 @@ async function cleanUpMeta() {
async function registerHandlers() {
const events = (await import("./src/services/events.js")).default;
const eraseService = (await import("./src/services/erase.js")).default;
const debouncer = debounce(async () => {
console.log("Exporting data");
eraseService.eraseUnusedAttachmentsNow();
await exportData("markdown", markdownPath);
await exportData("html", htmlPath);
}, 10_000);;

View File

@ -11,6 +11,9 @@ const baseLinuxMakerConfigOptions = {
};
module.exports = {
// we run electron-forge inside the ./build folder,
// to have it output to ./dist, we need to go up a directory first
outDir: "../dist",
packagerConfig: {
executableName: "trilium",
name: APP_NAME,
@ -130,7 +133,7 @@ module.exports = {
};
function getExtraResourcesForPlatform() {
const resources = ["./bin/tpl/anonymize-database.sql"];
const resources = [];
const getScriptRessources = () => {
const scripts = ["trilium-portable", "trilium-safe-mode", "trilium-no-cert-check"];

203
package-lock.json generated
View File

@ -20,7 +20,6 @@
"@mermaid-js/layout-elk": "0.1.7",
"@mind-elixir/node-menu": "1.0.4",
"@triliumnext/express-partial-content": "1.0.1",
"@types/html-minifier": "4.0.5",
"archiver": "7.0.1",
"async-mutex": "0.5.0",
"autocomplete.js": "0.38.1",
@ -53,7 +52,6 @@
"fs-extra": "11.3.0",
"helmet": "8.0.0",
"html": "1.0.0",
"html-minifier": "4.0.0",
"html2plaintext": "2.1.4",
"http-proxy-agent": "7.0.2",
"https-proxy-agent": "7.0.6",
@ -77,7 +75,7 @@
"marked": "15.0.7",
"mermaid": "11.5.0",
"mime-types": "2.1.35",
"mind-elixir": "4.4.1",
"mind-elixir": "4.4.2",
"multer": "1.4.5-lts.1",
"normalize-strings": "1.1.1",
"normalize.css": "8.0.1",
@ -188,7 +186,7 @@
"ts-loader": "9.5.2",
"tslib": "2.8.1",
"tsx": "4.19.3",
"typedoc": "0.27.9",
"typedoc": "0.28.0",
"typescript": "5.8.2",
"typescript-eslint": "8.26.1",
"vitest": "3.0.8",
@ -2912,15 +2910,15 @@
"license": "MIT"
},
"node_modules/@gerrit0/mini-shiki": {
"version": "1.24.4",
"resolved": "https://registry.npmjs.org/@gerrit0/mini-shiki/-/mini-shiki-1.24.4.tgz",
"integrity": "sha512-YEHW1QeAg6UmxEmswiQbOVEg1CW22b1XUD/lNTliOsu0LD0wqoyleFMnmbTp697QE0pcadQiR5cVtbbAPncvpw==",
"version": "3.2.1",
"resolved": "https://registry.npmjs.org/@gerrit0/mini-shiki/-/mini-shiki-3.2.1.tgz",
"integrity": "sha512-HbzRC6MKB6U8kQhczz0APKPIzFHTrcqhaC7es2EXInq1SpjPVnpVSIsBe6hNoLWqqCx1n5VKiPXq6PfXnHZKOQ==",
"dev": true,
"license": "MIT",
"dependencies": {
"@shikijs/engine-oniguruma": "^1.24.2",
"@shikijs/types": "^1.24.2",
"@shikijs/vscode-textmate": "^9.3.1"
"@shikijs/engine-oniguruma": "^3.2.1",
"@shikijs/types": "^3.2.1",
"@shikijs/vscode-textmate": "^10.0.2"
}
},
"node_modules/@highlightjs/cdn-assets": {
@ -5090,31 +5088,31 @@
"hasInstallScript": true
},
"node_modules/@shikijs/engine-oniguruma": {
"version": "1.24.2",
"resolved": "https://registry.npmjs.org/@shikijs/engine-oniguruma/-/engine-oniguruma-1.24.2.tgz",
"integrity": "sha512-ZN6k//aDNWRJs1uKB12pturKHh7GejKugowOFGAuG7TxDRLod1Bd5JhpOikOiFqPmKjKEPtEA6mRCf7q3ulDyQ==",
"version": "3.2.1",
"resolved": "https://registry.npmjs.org/@shikijs/engine-oniguruma/-/engine-oniguruma-3.2.1.tgz",
"integrity": "sha512-wZZAkayEn6qu2+YjenEoFqj0OyQI64EWsNR6/71d1EkG4sxEOFooowKivsWPpaWNBu3sxAG+zPz5kzBL/SsreQ==",
"dev": true,
"license": "MIT",
"dependencies": {
"@shikijs/types": "1.24.2",
"@shikijs/vscode-textmate": "^9.3.0"
"@shikijs/types": "3.2.1",
"@shikijs/vscode-textmate": "^10.0.2"
}
},
"node_modules/@shikijs/types": {
"version": "1.24.2",
"resolved": "https://registry.npmjs.org/@shikijs/types/-/types-1.24.2.tgz",
"integrity": "sha512-bdeWZiDtajGLG9BudI0AHet0b6e7FbR0EsE4jpGaI0YwHm/XJunI9+3uZnzFtX65gsyJ6ngCIWUfA4NWRPnBkQ==",
"version": "3.2.1",
"resolved": "https://registry.npmjs.org/@shikijs/types/-/types-3.2.1.tgz",
"integrity": "sha512-/NTWAk4KE2M8uac0RhOsIhYQf4pdU0OywQuYDGIGAJ6Mjunxl2cGiuLkvu4HLCMn+OTTLRWkjZITp+aYJv60yA==",
"dev": true,
"license": "MIT",
"dependencies": {
"@shikijs/vscode-textmate": "^9.3.0",
"@shikijs/vscode-textmate": "^10.0.2",
"@types/hast": "^3.0.4"
}
},
"node_modules/@shikijs/vscode-textmate": {
"version": "9.3.1",
"resolved": "https://registry.npmjs.org/@shikijs/vscode-textmate/-/vscode-textmate-9.3.1.tgz",
"integrity": "sha512-79QfK1393x9Ho60QFyLti+QfdJzRQCVLFb97kOIV7Eo9vQU/roINgk7m24uv0a7AUvN//RDH36FLjjK48v0s9g==",
"version": "10.0.2",
"resolved": "https://registry.npmjs.org/@shikijs/vscode-textmate/-/vscode-textmate-10.0.2.tgz",
"integrity": "sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg==",
"dev": true,
"license": "MIT"
},
@ -5247,16 +5245,6 @@
"@types/node": "*"
}
},
"node_modules/@types/clean-css": {
"version": "4.2.11",
"resolved": "https://registry.npmjs.org/@types/clean-css/-/clean-css-4.2.11.tgz",
"integrity": "sha512-Y8n81lQVTAfP2TOdtJJEsCoYl1AnOkqDqMvXb9/7pfgZZ7r8YrEyurrAvAoAjHOGXKRybay+5CsExqIH6liccw==",
"license": "MIT",
"dependencies": {
"@types/node": "*",
"source-map": "^0.6.0"
}
},
"node_modules/@types/cls-hooked": {
"version": "4.3.9",
"resolved": "https://registry.npmjs.org/@types/cls-hooked/-/cls-hooked-4.3.9.tgz",
@ -5705,17 +5693,6 @@
"dev": true,
"license": "MIT"
},
"node_modules/@types/html-minifier": {
"version": "4.0.5",
"resolved": "https://registry.npmjs.org/@types/html-minifier/-/html-minifier-4.0.5.tgz",
"integrity": "sha512-LfE7f7MFd+YUfZnlBz8W43P4NgSObWiqyKapANsWCj63Aqeqli8/9gVsGP4CwC8jPpTTYlTopKCk9rJSuht/ew==",
"license": "MIT",
"dependencies": {
"@types/clean-css": "*",
"@types/relateurl": "*",
"@types/uglify-js": "*"
}
},
"node_modules/@types/http-cache-semantics": {
"version": "4.0.4",
"resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.4.tgz",
@ -5957,12 +5934,6 @@
"@types/node": "*"
}
},
"node_modules/@types/relateurl": {
"version": "0.2.33",
"resolved": "https://registry.npmjs.org/@types/relateurl/-/relateurl-0.2.33.tgz",
"integrity": "sha512-bTQCKsVbIdzLqZhLkF5fcJQreE4y1ro4DIyVrlDNSCJRRwHhB8Z+4zXXa8jN6eDvc2HbRsEYgbvrnGvi54EpSw==",
"license": "MIT"
},
"node_modules/@types/responselike": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.3.tgz",
@ -6133,15 +6104,6 @@
"dev": true,
"license": "MIT"
},
"node_modules/@types/uglify-js": {
"version": "3.17.5",
"resolved": "https://registry.npmjs.org/@types/uglify-js/-/uglify-js-3.17.5.tgz",
"integrity": "sha512-TU+fZFBTBcXj/GpDpDaBmgWk/gn96kMZ+uocaFUlV2f8a6WdMzzI44QBCmGcCiYR0Y6ZlNRiyUyKKt5nl/lbzQ==",
"license": "MIT",
"dependencies": {
"source-map": "^0.6.1"
}
},
"node_modules/@types/unist": {
"version": "3.0.3",
"resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.3.tgz",
@ -8080,16 +8042,6 @@
"node": ">=6"
}
},
"node_modules/camel-case": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/camel-case/-/camel-case-3.0.0.tgz",
"integrity": "sha512-+MbKztAYHXPr1jNTSKQF52VpcFjwY5RkR7fxksV8Doo4KAYc5Fl4UJRgthBbTmEx8C54DqahhbLJkDwjI3PI/w==",
"license": "MIT",
"dependencies": {
"no-case": "^2.2.0",
"upper-case": "^1.1.1"
}
},
"node_modules/caniuse-lite": {
"version": "1.0.30001703",
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001703.tgz",
@ -8331,18 +8283,6 @@
"license": "MIT",
"optional": true
},
"node_modules/clean-css": {
"version": "4.2.4",
"resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.2.4.tgz",
"integrity": "sha512-EJUDT7nDVFDvaQgAo2G/PJvxmp1o/c6iXLbswsBbUFXi1Nr+AjA2cKmfbKDMjMvzEe75g3P6JkaDDAKk96A85A==",
"license": "MIT",
"dependencies": {
"source-map": "~0.6.0"
},
"engines": {
"node": ">= 4.0"
}
},
"node_modules/clean-stack": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz",
@ -13034,33 +12974,6 @@
"dev": true,
"license": "MIT"
},
"node_modules/html-minifier": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/html-minifier/-/html-minifier-4.0.0.tgz",
"integrity": "sha512-aoGxanpFPLg7MkIl/DDFYtb0iWz7jMFGqFhvEDZga6/4QTjneiD8I/NXL1x5aaoCp7FSIT6h/OhykDdPsbtMig==",
"license": "MIT",
"dependencies": {
"camel-case": "^3.0.0",
"clean-css": "^4.2.1",
"commander": "^2.19.0",
"he": "^1.2.0",
"param-case": "^2.1.1",
"relateurl": "^0.2.7",
"uglify-js": "^3.5.1"
},
"bin": {
"html-minifier": "cli.js"
},
"engines": {
"node": ">=6"
}
},
"node_modules/html-minifier/node_modules/commander": {
"version": "2.20.3",
"resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
"integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==",
"license": "MIT"
},
"node_modules/html2plaintext": {
"version": "2.1.4",
"resolved": "https://registry.npmjs.org/html2plaintext/-/html2plaintext-2.1.4.tgz",
@ -14803,12 +14716,6 @@
"dev": true,
"license": "MIT"
},
"node_modules/lower-case": {
"version": "1.1.4",
"resolved": "https://registry.npmjs.org/lower-case/-/lower-case-1.1.4.tgz",
"integrity": "sha512-2Fgx1Ycm599x+WGpIYwJOvsjmXFzTSc34IwDWALRA/8AopUKAVPwfJ+h5+f85BCp0PWmmJcWzEpxOpoXycMpdA==",
"license": "MIT"
},
"node_modules/lowercase-keys": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz",
@ -15728,9 +15635,9 @@
}
},
"node_modules/mind-elixir": {
"version": "4.4.1",
"resolved": "https://registry.npmjs.org/mind-elixir/-/mind-elixir-4.4.1.tgz",
"integrity": "sha512-q2rzRXgd6iqF3UdenM88HB4Ohb0/62/3W3PXKMBRBLjcCXt/pxlLuTMb4QrqP7sX9HoWNFVBeNt+1S521h3TRw==",
"version": "4.4.2",
"resolved": "https://registry.npmjs.org/mind-elixir/-/mind-elixir-4.4.2.tgz",
"integrity": "sha512-yHsUdKYvhB/SnBY9Fb/2cPTsysKDT+nu5vQVYPFEWWniZaGszpM9gPlCB28IEcOEGpaSDGOWOTt89Qc/wFYZSw==",
"license": "MIT"
},
"node_modules/mini-css-extract-plugin": {
@ -16032,15 +15939,6 @@
"dev": true,
"license": "MIT"
},
"node_modules/no-case": {
"version": "2.3.2",
"resolved": "https://registry.npmjs.org/no-case/-/no-case-2.3.2.tgz",
"integrity": "sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==",
"license": "MIT",
"dependencies": {
"lower-case": "^1.1.1"
}
},
"node_modules/node-abi": {
"version": "3.71.0",
"resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.71.0.tgz",
@ -16671,15 +16569,6 @@
"wheel": "^1.0.0"
}
},
"node_modules/param-case": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/param-case/-/param-case-2.1.1.tgz",
"integrity": "sha512-eQE845L6ot89sk2N8liD8HAuH4ca6Vvr7VWAWwt7+kvvG5aBcPmmphQ68JsEG2qa9n1TykS2DLeMt363AAH8/w==",
"license": "MIT",
"dependencies": {
"no-case": "^2.2.0"
}
},
"node_modules/parent-module": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
@ -18227,15 +18116,6 @@
"integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==",
"license": "MIT"
},
"node_modules/relateurl": {
"version": "0.2.7",
"resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz",
"integrity": "sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==",
"license": "MIT",
"engines": {
"node": ">= 0.10"
}
},
"node_modules/repeat-string": {
"version": "1.6.1",
"resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz",
@ -20680,23 +20560,24 @@
}
},
"node_modules/typedoc": {
"version": "0.27.9",
"resolved": "https://registry.npmjs.org/typedoc/-/typedoc-0.27.9.tgz",
"integrity": "sha512-/z585740YHURLl9DN2jCWe6OW7zKYm6VoQ93H0sxZ1cwHQEQrUn5BJrEnkWhfzUdyO+BLGjnKUZ9iz9hKloFDw==",
"version": "0.28.0",
"resolved": "https://registry.npmjs.org/typedoc/-/typedoc-0.28.0.tgz",
"integrity": "sha512-UU+xxZXrpnUhEulBYRwY2afoYFC24J2fTFovOs3llj2foGShCoKVQL6cQCfQ+sBAOdiFn2dETpZ9xhah+CL3RQ==",
"dev": true,
"license": "Apache-2.0",
"dependencies": {
"@gerrit0/mini-shiki": "^1.24.0",
"@gerrit0/mini-shiki": "^3.2.1",
"lunr": "^2.3.9",
"markdown-it": "^14.1.0",
"minimatch": "^9.0.5",
"yaml": "^2.6.1"
"yaml": "^2.7.0 "
},
"bin": {
"typedoc": "bin/typedoc"
},
"engines": {
"node": ">= 18"
"node": ">= 18",
"pnpm": ">= 10"
},
"peerDependencies": {
"typescript": "5.0.x || 5.1.x || 5.2.x || 5.3.x || 5.4.x || 5.5.x || 5.6.x || 5.7.x || 5.8.x"
@ -20778,18 +20659,6 @@
"integrity": "sha512-UsUk3byDzKd04EyoZ7U4DOlxQaD14JUKQl6/P7wiX4FNvUfm3XL246n9W5AmqwW5RSFJ27NAuM0iLscAOYUiGQ==",
"license": "MIT"
},
"node_modules/uglify-js": {
"version": "3.19.3",
"resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.19.3.tgz",
"integrity": "sha512-v3Xu+yuwBXisp6QYTcH4UbH+xYJXqnq2m/LtQVWKWzYc1iehYnLixoQDN9FH6/j9/oybfd6W9Ghwkl8+UMKTKQ==",
"license": "BSD-2-Clause",
"bin": {
"uglifyjs": "bin/uglifyjs"
},
"engines": {
"node": ">=0.8.0"
}
},
"node_modules/uid-safe": {
"version": "2.1.5",
"resolved": "https://registry.npmjs.org/uid-safe/-/uid-safe-2.1.5.tgz",
@ -20994,12 +20863,6 @@
"browserslist": ">= 4.21.0"
}
},
"node_modules/upper-case": {
"version": "1.1.3",
"resolved": "https://registry.npmjs.org/upper-case/-/upper-case-1.1.3.tgz",
"integrity": "sha512-WRbjgmYzgXkCV7zNVpy5YgrHgbBv126rMALQQMrmzOVC4GM2waQ9x7xtm8VU+1yF2kWyPzI9zbZ48n4vSxwfSA==",
"license": "MIT"
},
"node_modules/uri-js": {
"version": "4.4.1",
"resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
@ -21955,9 +21818,9 @@
"license": "ISC"
},
"node_modules/yaml": {
"version": "2.6.1",
"resolved": "https://registry.npmjs.org/yaml/-/yaml-2.6.1.tgz",
"integrity": "sha512-7r0XPzioN/Q9kXBro/XPnA6kznR73DHq+GXh5ON7ZozRO6aMjbmiBuKste2wslTFkC5d1dw0GooOCepZXJ2SAg==",
"version": "2.7.0",
"resolved": "https://registry.npmjs.org/yaml/-/yaml-2.7.0.tgz",
"integrity": "sha512-+hSoy/QHluxmC9kCIJyL/uyFmLmc+e5CFR5Wa+bpIhIj85LVb9ZH2nVnqrHoSvKogwODv0ClqZkmiSSaIH5LTA==",
"dev": true,
"license": "ISC",
"bin": {

View File

@ -2,9 +2,9 @@
"name": "trilium",
"productName": "TriliumNext Notes",
"description": "Build your personal knowledge base with TriliumNext Notes",
"version": "0.92.3-beta",
"version": "0.92.4",
"license": "AGPL-3.0-only",
"main": "./build/electron-main.js",
"main": "./electron-main.js",
"author": {
"name": "TriliumNext Notes Team",
"email": "contact@eliandoran.me",
@ -38,9 +38,10 @@
"electron:switch": "electron-rebuild",
"docs:edit": "cross-env NODE_OPTIONS=\"--import tsx\" TRILIUM_DATA_DIR=./data-docs TRILIUM_ENV=dev TRILIUM_PORT=37741 electron ./electron-docs-main.ts .",
"docs:edit-nix": "electron-rebuild --version 33.3.1 && cross-env NODE_OPTIONS=\"--import tsx\" TRILIUM_DATA_DIR=./data-docs TRILIUM_SYNC_SERVER_HOST=http://tsyncserver:4000 TRILIUM_PORT=37741 TRILIUM_ENV=dev nix-shell -p electron_33 --run \"electron ./electron-docs-main.ts .\"",
"electron-forge:start": "npm run build:prepare-dist && electron-forge start",
"electron-forge:make": "npm run build:prepare-dist && electron-forge make",
"electron-forge:package": "npm run build:prepare-dist && electron-forge package",
"electron-forge:prepare": "npm run build:prepare-dist && cp -r node_modules ./build",
"electron-forge:start": "npm run electron-forge:prepare && cd ./build && electron-forge start",
"electron-forge:make": "npm run electron-forge:prepare && cd ./build && electron-forge make",
"electron-forge:package": "npm run electron-forge:prepare && cd ./build && electron-forge package",
"docs:build-backend": "rimraf ./docs/backend_api && typedoc ./docs/backend_api src/becca/entities/*.ts src/services/backend_script_api.ts src/services/sql.ts",
"docs:build-frontend": "rimraf ./docs/frontend_api && jsdoc -c jsdoc-conf.json -d ./docs/frontend_api src/public/app/entities/*.js src/public/app/services/frontend_script_api.js src/public/app/widgets/basic_widget.js src/public/app/widgets/note_context_aware_widget.js src/public/app/widgets/right_panel_widget.js",
"docs:build": "npm run docs:build-backend && npm run docs:build-frontend",
@ -79,7 +80,6 @@
"@mermaid-js/layout-elk": "0.1.7",
"@mind-elixir/node-menu": "1.0.4",
"@triliumnext/express-partial-content": "1.0.1",
"@types/html-minifier": "4.0.5",
"archiver": "7.0.1",
"async-mutex": "0.5.0",
"autocomplete.js": "0.38.1",
@ -112,7 +112,6 @@
"fs-extra": "11.3.0",
"helmet": "8.0.0",
"html": "1.0.0",
"html-minifier": "4.0.0",
"html2plaintext": "2.1.4",
"http-proxy-agent": "7.0.2",
"https-proxy-agent": "7.0.6",
@ -136,7 +135,7 @@
"marked": "15.0.7",
"mermaid": "11.5.0",
"mime-types": "2.1.35",
"mind-elixir": "4.4.1",
"mind-elixir": "4.4.2",
"multer": "1.4.5-lts.1",
"normalize-strings": "1.1.1",
"normalize.css": "8.0.1",
@ -244,7 +243,7 @@
"ts-loader": "9.5.2",
"tslib": "2.8.1",
"tsx": "4.19.3",
"typedoc": "0.27.9",
"typedoc": "0.28.0",
"typescript": "5.8.2",
"typescript-eslint": "8.26.1",
"vitest": "3.0.8",

View File

@ -25,6 +25,7 @@ import type { default as NoteContext, GetTextEditorCallback } from "./note_conte
import type { ContextMenuEvent } from "../menus/context_menu.js";
import type TypeWidget from "../widgets/type_widgets/type_widget.js";
import type EditableTextTypeWidget from "../widgets/type_widgets/editable_text.js";
import type FAttribute from "../entities/fattribute.js";
interface Layout {
getRootWidget: (appContext: AppContext) => RootWidget;
@ -177,7 +178,7 @@ export type CommandMappings = {
ExecuteCommandData<TextEditor> & {
callback?: GetTextEditorCallback;
};
executeWithCodeEditor: CommandData & ExecuteCommandData<null>;
executeWithCodeEditor: CommandData & ExecuteCommandData<CodeMirrorInstance>;
/**
* Called upon when attempting to retrieve the content element of a {@link NoteContext}.
* Generally should not be invoked manually, as it is used by {@link NoteContext.getContentElement}.

View File

@ -13,7 +13,7 @@ import { t } from "../services/i18n.js";
import type FNote from "../entities/fnote.js";
// TODO: Move somewhere else nicer.
export type SqlExecuteResults = unknown[];
export type SqlExecuteResults = string[][][];
// TODO: Deduplicate with server.
interface SqlExecuteResponse {

View File

@ -311,7 +311,7 @@ class NoteContext extends Component implements EventListener<"entitiesReloaded">
async getCodeEditor() {
return this.timeout(
new Promise((resolve) =>
new Promise<CodeMirrorInstance>((resolve) =>
appContext.triggerCommand("executeWithCodeEditor", {
resolve,
ntxId: this.ntxId

File diff suppressed because it is too large Load Diff

Some files were not shown because too many files have changed in this diff Show More